claude-mpm 4.21.3__py3-none-any.whl → 5.1.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (517) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
  4. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1239 -674
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +69 -1
  12. claude_mpm/agents/templates/circuit-breakers.md +1254 -0
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +37 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +1128 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +537 -239
  30. claude_mpm/cli/commands/cleanup.py +1 -1
  31. claude_mpm/cli/commands/config.py +7 -4
  32. claude_mpm/cli/commands/configure.py +935 -45
  33. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  34. claude_mpm/cli/commands/configure_navigation.py +63 -46
  35. claude_mpm/cli/commands/debug.py +12 -12
  36. claude_mpm/cli/commands/doctor.py +10 -2
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/local_deploy.py +1 -4
  39. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  40. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  41. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  42. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  43. claude_mpm/cli/commands/postmortem.py +401 -0
  44. claude_mpm/cli/commands/run.py +125 -167
  45. claude_mpm/cli/commands/skill_source.py +694 -0
  46. claude_mpm/cli/commands/skills.py +757 -20
  47. claude_mpm/cli/executor.py +78 -3
  48. claude_mpm/cli/interactive/agent_wizard.py +1032 -47
  49. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  50. claude_mpm/cli/parsers/agents_parser.py +310 -4
  51. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  52. claude_mpm/cli/parsers/base_parser.py +53 -0
  53. claude_mpm/cli/parsers/config_parser.py +96 -43
  54. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  55. claude_mpm/cli/parsers/skills_parser.py +145 -0
  56. claude_mpm/cli/parsers/source_parser.py +138 -0
  57. claude_mpm/cli/startup.py +564 -108
  58. claude_mpm/cli/startup_display.py +480 -0
  59. claude_mpm/cli/utils.py +1 -1
  60. claude_mpm/cli_module/commands.py +1 -1
  61. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  62. claude_mpm/commands/mpm-agents-detect.md +9 -0
  63. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  64. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  65. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  66. claude_mpm/commands/mpm-doctor.md +9 -0
  67. claude_mpm/commands/mpm-help.md +14 -2
  68. claude_mpm/commands/mpm-init.md +27 -2
  69. claude_mpm/commands/mpm-monitor.md +9 -0
  70. claude_mpm/commands/mpm-postmortem.md +123 -0
  71. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  72. claude_mpm/commands/mpm-status.md +9 -0
  73. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  74. claude_mpm/commands/mpm-ticket-view.md +552 -0
  75. claude_mpm/commands/mpm-version.md +9 -0
  76. claude_mpm/commands/mpm.md +10 -0
  77. claude_mpm/config/agent_presets.py +488 -0
  78. claude_mpm/config/agent_sources.py +325 -0
  79. claude_mpm/config/skill_presets.py +392 -0
  80. claude_mpm/config/skill_sources.py +590 -0
  81. claude_mpm/constants.py +13 -0
  82. claude_mpm/core/api_validator.py +1 -1
  83. claude_mpm/core/claude_runner.py +19 -35
  84. claude_mpm/core/config.py +24 -0
  85. claude_mpm/core/constants.py +1 -1
  86. claude_mpm/core/framework/__init__.py +3 -16
  87. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  88. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  89. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  90. claude_mpm/core/hook_error_memory.py +381 -0
  91. claude_mpm/core/hook_manager.py +41 -2
  92. claude_mpm/core/interactive_session.py +131 -10
  93. claude_mpm/core/logger.py +3 -1
  94. claude_mpm/core/oneshot_session.py +110 -8
  95. claude_mpm/core/output_style_manager.py +173 -43
  96. claude_mpm/core/protocols/__init__.py +23 -0
  97. claude_mpm/core/protocols/runner_protocol.py +103 -0
  98. claude_mpm/core/protocols/session_protocol.py +131 -0
  99. claude_mpm/core/shared/singleton_manager.py +11 -4
  100. claude_mpm/core/system_context.py +38 -0
  101. claude_mpm/core/unified_agent_registry.py +129 -1
  102. claude_mpm/core/unified_config.py +22 -0
  103. claude_mpm/dashboard/static/css/activity.css +69 -69
  104. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  105. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  106. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  107. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  108. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  109. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  110. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  111. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  112. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  113. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  114. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  115. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  116. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  117. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  118. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  119. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  120. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  121. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  122. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  123. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  124. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  125. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  126. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  127. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  128. claude_mpm/dashboard/templates/code_simple.html +23 -23
  129. claude_mpm/dashboard/templates/index.html +18 -18
  130. claude_mpm/experimental/cli_enhancements.py +1 -5
  131. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  132. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  133. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  134. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  135. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  136. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  137. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  139. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  140. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  141. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  142. claude_mpm/models/agent_definition.py +7 -0
  143. claude_mpm/models/git_repository.py +198 -0
  144. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  145. claude_mpm/scripts/start_activity_logging.py +3 -1
  146. claude_mpm/services/agents/agent_builder.py +45 -9
  147. claude_mpm/services/agents/agent_preset_service.py +238 -0
  148. claude_mpm/services/agents/agent_selection_service.py +484 -0
  149. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  150. claude_mpm/services/agents/cache_git_manager.py +621 -0
  151. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  152. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  153. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  154. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  155. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  156. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  157. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  158. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  159. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  160. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  161. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +225 -18
  162. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  163. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  164. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +557 -0
  165. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  166. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  167. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  168. claude_mpm/services/agents/git_source_manager.py +629 -0
  169. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  170. claude_mpm/services/agents/local_template_manager.py +50 -10
  171. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  172. claude_mpm/services/agents/sources/__init__.py +13 -0
  173. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  174. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  175. claude_mpm/services/agents/startup_sync.py +239 -0
  176. claude_mpm/services/agents/toolchain_detector.py +474 -0
  177. claude_mpm/services/analysis/__init__.py +25 -0
  178. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  179. claude_mpm/services/analysis/postmortem_service.py +765 -0
  180. claude_mpm/services/cli/session_pause_manager.py +1 -1
  181. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  182. claude_mpm/services/command_deployment_service.py +200 -6
  183. claude_mpm/services/core/base.py +7 -2
  184. claude_mpm/services/core/interfaces/__init__.py +1 -3
  185. claude_mpm/services/core/interfaces/health.py +1 -4
  186. claude_mpm/services/core/models/__init__.py +2 -11
  187. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  188. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  189. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  190. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  191. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  192. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  193. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  194. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  195. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  196. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  197. claude_mpm/services/event_bus/direct_relay.py +3 -3
  198. claude_mpm/services/event_bus/event_bus.py +36 -3
  199. claude_mpm/services/events/consumers/logging.py +1 -2
  200. claude_mpm/services/git/__init__.py +21 -0
  201. claude_mpm/services/git/git_operations_service.py +494 -0
  202. claude_mpm/services/github/__init__.py +21 -0
  203. claude_mpm/services/github/github_cli_service.py +397 -0
  204. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  205. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  206. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  207. claude_mpm/services/instructions/__init__.py +9 -0
  208. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  209. claude_mpm/services/local_ops/__init__.py +3 -13
  210. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  211. claude_mpm/services/local_ops/health_manager.py +1 -4
  212. claude_mpm/services/local_ops/process_manager.py +1 -1
  213. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  214. claude_mpm/services/mcp_config_manager.py +75 -145
  215. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  216. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  217. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  218. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  219. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  220. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  221. claude_mpm/services/mcp_service_verifier.py +6 -3
  222. claude_mpm/services/memory/optimizer.py +1 -1
  223. claude_mpm/services/model/model_router.py +8 -9
  224. claude_mpm/services/monitor/daemon.py +29 -9
  225. claude_mpm/services/monitor/daemon_manager.py +96 -19
  226. claude_mpm/services/monitor/server.py +2 -2
  227. claude_mpm/services/native_agent_converter.py +356 -0
  228. claude_mpm/services/port_manager.py +1 -1
  229. claude_mpm/services/pr/__init__.py +14 -0
  230. claude_mpm/services/pr/pr_template_service.py +329 -0
  231. claude_mpm/services/project/documentation_manager.py +2 -1
  232. claude_mpm/services/project/project_organizer.py +4 -0
  233. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  234. claude_mpm/services/runner_configuration_service.py +17 -3
  235. claude_mpm/services/self_upgrade_service.py +165 -7
  236. claude_mpm/services/session_management_service.py +16 -4
  237. claude_mpm/services/skills/__init__.py +18 -0
  238. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  239. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  240. claude_mpm/services/skills_config.py +547 -0
  241. claude_mpm/services/skills_deployer.py +955 -0
  242. claude_mpm/services/socketio/handlers/connection.py +1 -1
  243. claude_mpm/services/socketio/handlers/git.py +2 -2
  244. claude_mpm/services/socketio/server/core.py +1 -4
  245. claude_mpm/services/socketio/server/main.py +1 -3
  246. claude_mpm/services/system_instructions_service.py +1 -3
  247. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  248. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  249. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  250. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  251. claude_mpm/services/unified/unified_deployment.py +1 -5
  252. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  253. claude_mpm/services/visualization/__init__.py +1 -5
  254. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  255. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  256. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  257. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  258. claude_mpm/skills/skills_registry.py +0 -1
  259. claude_mpm/templates/questions/__init__.py +38 -0
  260. claude_mpm/templates/questions/base.py +193 -0
  261. claude_mpm/templates/questions/pr_strategy.py +311 -0
  262. claude_mpm/templates/questions/project_init.py +385 -0
  263. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  264. claude_mpm/tools/__main__.py +8 -8
  265. claude_mpm/tools/code_tree_analyzer/analysis.py +1 -1
  266. claude_mpm/utils/agent_dependency_loader.py +80 -13
  267. claude_mpm/utils/agent_filters.py +288 -0
  268. claude_mpm/utils/dependency_cache.py +3 -1
  269. claude_mpm/utils/gitignore.py +244 -0
  270. claude_mpm/utils/log_cleanup.py +3 -3
  271. claude_mpm/utils/migration.py +372 -0
  272. claude_mpm/utils/progress.py +387 -0
  273. claude_mpm/utils/robust_installer.py +3 -5
  274. claude_mpm/utils/structured_questions.py +619 -0
  275. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/METADATA +496 -65
  276. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/RECORD +284 -443
  277. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  278. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  279. claude_mpm/agents/templates/agent-manager.json +0 -273
  280. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  281. claude_mpm/agents/templates/api_qa.json +0 -180
  282. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  283. claude_mpm/agents/templates/clerk-ops.json +0 -235
  284. claude_mpm/agents/templates/code_analyzer.json +0 -101
  285. claude_mpm/agents/templates/content-agent.json +0 -358
  286. claude_mpm/agents/templates/dart_engineer.json +0 -307
  287. claude_mpm/agents/templates/data_engineer.json +0 -225
  288. claude_mpm/agents/templates/documentation.json +0 -211
  289. claude_mpm/agents/templates/engineer.json +0 -210
  290. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  291. claude_mpm/agents/templates/golang_engineer.json +0 -270
  292. claude_mpm/agents/templates/imagemagick.json +0 -264
  293. claude_mpm/agents/templates/java_engineer.json +0 -346
  294. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  295. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  296. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  297. claude_mpm/agents/templates/memory_manager.json +0 -158
  298. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  299. claude_mpm/agents/templates/ops.json +0 -185
  300. claude_mpm/agents/templates/php-engineer.json +0 -287
  301. claude_mpm/agents/templates/product_owner.json +0 -338
  302. claude_mpm/agents/templates/project_organizer.json +0 -140
  303. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  304. claude_mpm/agents/templates/python_engineer.json +0 -387
  305. claude_mpm/agents/templates/qa.json +0 -242
  306. claude_mpm/agents/templates/react_engineer.json +0 -238
  307. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  308. claude_mpm/agents/templates/research.json +0 -188
  309. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  310. claude_mpm/agents/templates/rust_engineer.json +0 -275
  311. claude_mpm/agents/templates/security.json +0 -202
  312. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  313. claude_mpm/agents/templates/ticketing.json +0 -177
  314. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  315. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  316. claude_mpm/agents/templates/version_control.json +0 -157
  317. claude_mpm/agents/templates/web_qa.json +0 -399
  318. claude_mpm/agents/templates/web_ui.json +0 -189
  319. claude_mpm/commands/mpm-tickets.md +0 -102
  320. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  321. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  322. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  323. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  324. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  325. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  326. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  327. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  328. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  329. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  330. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  331. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  332. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  333. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  334. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  335. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  336. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  337. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  338. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  339. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  340. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  341. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  342. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  343. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  344. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  345. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  346. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  347. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  348. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  349. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  350. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  351. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  352. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  353. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  354. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  355. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  357. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  358. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  359. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  360. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  361. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  362. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  363. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  364. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  365. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  366. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  367. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  368. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  369. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  370. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  371. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  372. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  373. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  374. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  375. claude_mpm/dashboard/static/built/react/events.js +0 -30
  376. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  377. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  378. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  379. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  380. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  381. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  382. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  383. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  384. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  385. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  388. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  389. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  390. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  391. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  392. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  393. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  394. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  395. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  396. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  397. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  398. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  399. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  400. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  401. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  402. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  403. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  404. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  405. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  406. claude_mpm/dashboard/static/events.html +0 -607
  407. claude_mpm/dashboard/static/index.html +0 -635
  408. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  409. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  410. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  411. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  412. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  413. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  414. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  415. claude_mpm/dashboard/static/legacy/files.html +0 -747
  416. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  417. claude_mpm/dashboard/static/monitors.html +0 -431
  418. claude_mpm/dashboard/static/production/events.html +0 -659
  419. claude_mpm/dashboard/static/production/main.html +0 -698
  420. claude_mpm/dashboard/static/production/monitors.html +0 -483
  421. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  422. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  423. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  424. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  425. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  426. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  427. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  428. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  429. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  430. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  431. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  432. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  433. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  434. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  435. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  436. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  437. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  438. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  439. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  440. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  441. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  442. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  443. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  444. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  445. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  446. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  447. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  448. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  449. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  450. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  451. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  452. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  453. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  454. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  455. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  456. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  457. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  458. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  459. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  460. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  461. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  462. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  463. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  464. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  465. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  466. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  467. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  468. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  469. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  470. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  471. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  472. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  473. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  474. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  475. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  476. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  477. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  478. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  479. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  480. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  481. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  482. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  483. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  484. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  485. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  486. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  487. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  488. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  489. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  490. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  491. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  492. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  493. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  494. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  495. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  496. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  497. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  498. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  499. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  500. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  501. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  502. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  503. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  504. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  505. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  506. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  507. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  508. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  509. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  510. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  511. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  512. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  513. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  514. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/WHEEL +0 -0
  515. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/entry_points.txt +0 -0
  516. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/licenses/LICENSE +0 -0
  517. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/top_level.txt +0 -0
@@ -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