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,668 +0,0 @@
1
- # Advanced Tracing Techniques
2
-
3
- Advanced methods for tracing bugs when manual inspection isn't sufficient: instrumentation, stack traces, test pollution detection, and async tracing.
4
-
5
- ## When Manual Tracing Isn't Enough
6
-
7
- Manual code inspection works well when:
8
- - Code path is clear
9
- - Stack traces are available
10
- - Single-threaded execution
11
- - You can identify all callers
12
-
13
- **Use advanced techniques when:**
14
- - Can't identify which code path triggers the issue
15
- - Multiple async operations interleave
16
- - Race conditions or timing issues
17
- - Need to find which test causes pollution
18
- - External code (libraries) involved
19
- - Production issues you can't reproduce locally
20
-
21
- ## Stack Trace Instrumentation
22
-
23
- ### Purpose
24
-
25
- Capture complete call stack at strategic points to understand execution flow.
26
-
27
- ### Basic Stack Trace Capture
28
-
29
- ```typescript
30
- function suspiciousOperation(param: string) {
31
- // Capture stack trace BEFORE the operation
32
- const stack = new Error().stack;
33
- console.error('DEBUG suspiciousOperation:', {
34
- param,
35
- cwd: process.cwd(),
36
- timestamp: Date.now(),
37
- stack
38
- });
39
-
40
- // Now do the operation
41
- performOperation(param);
42
- }
43
- ```
44
-
45
- **Key points:**
46
- - Use `console.error()` in tests (regular logger may be suppressed)
47
- - Log BEFORE the operation, not after it fails
48
- - Include context: parameters, environment, state
49
- - Capture stack with `new Error().stack`
50
-
51
- ### Analyzing Stack Traces
52
-
53
- **Run and capture output:**
54
- ```bash
55
- npm test 2>&1 | grep 'DEBUG suspiciousOperation'
56
- ```
57
-
58
- **Look for:**
59
- - Test file names in stack traces
60
- - Line numbers that trigger the call
61
- - Patterns: same test? same parameters?
62
- - Call frequency: how many times called?
63
-
64
- **Example output:**
65
- ```
66
- DEBUG suspiciousOperation: {
67
- param: '',
68
- cwd: '/Users/jesse/project/packages/core',
69
- stack: 'Error
70
- at suspiciousOperation (file.ts:10)
71
- at WorktreeManager.create (worktree.ts:45)
72
- at Session.initialize (session.ts:78)
73
- at Project.create (project.ts:23)
74
- at Test.<anonymous> (project.test.ts:12)
75
- at Test.run (node:internal/test)'
76
- }
77
- ```
78
-
79
- **Analysis:** The call originates from `project.test.ts:12` with empty parameter.
80
-
81
- ### Conditional Instrumentation
82
-
83
- Only log when conditions are suspicious:
84
-
85
- ```typescript
86
- function gitInit(directory: string) {
87
- // Only log if directory is empty or equals cwd
88
- if (!directory || directory === process.cwd()) {
89
- console.error('SUSPICIOUS git init:', {
90
- directory,
91
- cwd: process.cwd(),
92
- nodeEnv: process.env.NODE_ENV,
93
- stack: new Error().stack
94
- });
95
- }
96
-
97
- execFileAsync('git', ['init'], { cwd: directory });
98
- }
99
- ```
100
-
101
- This reduces noise while capturing problematic cases.
102
-
103
- ### Stack Trace in Production
104
-
105
- **Warning:** Stack traces have performance cost. Use carefully in production.
106
-
107
- ```typescript
108
- class ErrorTracker {
109
- private static captureInterval = 100; // Only capture 1% of calls
110
- private static counter = 0;
111
-
112
- static maybeCapture(operation: string, data: any) {
113
- this.counter++;
114
- if (this.counter % this.captureInterval === 0) {
115
- // Sample 1% of operations
116
- logger.warn('Sampled operation', {
117
- operation,
118
- data,
119
- stack: new Error().stack
120
- });
121
- }
122
- }
123
- }
124
- ```
125
-
126
- ## Finding Test Pollution
127
-
128
- ### What is Test Pollution?
129
-
130
- Tests that create files, directories, or state that persists after the test completes.
131
-
132
- **Common polluters:**
133
- - Creating files/directories outside temp dir
134
- - Not cleaning up in afterEach
135
- - Modifying global state
136
- - Creating git repositories
137
- - Writing to current directory
138
-
139
- ### Detection Strategy
140
-
141
- **Symptoms:**
142
- - Files appear in source code directory
143
- - Tests fail when run together but pass individually
144
- - Side effects from one test affect another
145
- - Cleanup code not running
146
-
147
- ### Manual Detection
148
-
149
- **Check for artifacts after test run:**
150
- ```bash
151
- # Before tests
152
- ls -la src/
153
-
154
- # Run tests
155
- npm test
156
-
157
- # After tests - did anything appear?
158
- ls -la src/
159
- ```
160
-
161
- **Common artifacts:**
162
- - `.git` directories
163
- - `node_modules/` subdirectories
164
- - Temp files not cleaned up
165
- - Config files created
166
- - Log files
167
-
168
- ### Automated Detection with Bisection
169
-
170
- Use the `find-polluter.sh` script to automatically find which test creates pollution:
171
-
172
- ```bash
173
- #!/bin/bash
174
- # find-polluter.sh
175
- # Usage: ./find-polluter.sh <artifact> <test-pattern>
176
- # Example: ./find-polluter.sh '.git' 'src/**/*.test.ts'
177
-
178
- ARTIFACT=$1
179
- TEST_PATTERN=$2
180
-
181
- if [ -z "$ARTIFACT" ] || [ -z "$TEST_PATTERN" ]; then
182
- echo "Usage: $0 <artifact> <test-pattern>"
183
- echo "Example: $0 '.git' 'src/**/*.test.ts'"
184
- exit 1
185
- fi
186
-
187
- # Get list of test files
188
- TEST_FILES=($(ls $TEST_PATTERN))
189
-
190
- echo "Testing ${#TEST_FILES[@]} files for artifact: $ARTIFACT"
191
-
192
- for test_file in "${TEST_FILES[@]}"; do
193
- echo "Testing: $test_file"
194
-
195
- # Remove artifact if exists
196
- rm -rf "$ARTIFACT" 2>/dev/null
197
-
198
- # Run single test file
199
- npm test -- "$test_file"
200
-
201
- # Check if artifact was created
202
- if [ -e "$ARTIFACT" ]; then
203
- echo "FOUND POLLUTER: $test_file"
204
- exit 0
205
- fi
206
- done
207
-
208
- echo "No polluter found"
209
- exit 1
210
- ```
211
-
212
- **Usage:**
213
- ```bash
214
- # Find which test creates .git directory
215
- ./find-polluter.sh '.git' 'src/**/*.test.ts'
216
-
217
- # Find which test creates node_modules
218
- ./find-polluter.sh 'node_modules' 'src/**/*.test.ts'
219
- ```
220
-
221
- **Advanced version with binary search:**
222
- ```bash
223
- #!/bin/bash
224
- # find-polluter-fast.sh - Uses binary search for faster detection
225
-
226
- ARTIFACT=$1
227
- TEST_PATTERN=$2
228
- TEST_FILES=($(ls $TEST_PATTERN))
229
-
230
- function test_files() {
231
- local files=("$@")
232
- rm -rf "$ARTIFACT" 2>/dev/null
233
- npm test -- "${files[@]}"
234
- [ -e "$ARTIFACT" ]
235
- }
236
-
237
- function binary_search() {
238
- local files=("$@")
239
- local count=${#files[@]}
240
-
241
- if [ $count -eq 0 ]; then
242
- echo "No polluter found"
243
- return 1
244
- fi
245
-
246
- if [ $count -eq 1 ]; then
247
- if test_files "${files[@]}"; then
248
- echo "FOUND POLLUTER: ${files[0]}"
249
- return 0
250
- fi
251
- return 1
252
- fi
253
-
254
- # Split in half
255
- local mid=$((count / 2))
256
- local left=("${files[@]:0:mid}")
257
- local right=("${files[@]:mid}")
258
-
259
- # Test left half
260
- if test_files "${left[@]}"; then
261
- binary_search "${left[@]}"
262
- else
263
- binary_search "${right[@]}"
264
- fi
265
- }
266
-
267
- binary_search "${TEST_FILES[@]}"
268
- ```
269
-
270
- ### Preventing Test Pollution
271
-
272
- **Best practices:**
273
- 1. **Always use temp directories:**
274
- ```typescript
275
- let tempDir: string;
276
-
277
- beforeEach(() => {
278
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'test-'));
279
- });
280
-
281
- afterEach(() => {
282
- fs.rmSync(tempDir, { recursive: true });
283
- });
284
- ```
285
-
286
- 2. **Validate test isolation:**
287
- ```typescript
288
- // Guard against operations outside temp dir
289
- if (process.env.NODE_ENV === 'test') {
290
- if (!directory.includes(os.tmpdir())) {
291
- throw new Error(`Test safety: operation outside tmpdir: ${directory}`);
292
- }
293
- }
294
- ```
295
-
296
- 3. **Use cleanup verification:**
297
- ```typescript
298
- afterEach(() => {
299
- // Clean up
300
- fs.rmSync(tempDir, { recursive: true });
301
-
302
- // Verify no artifacts in source
303
- const gitInSource = fs.existsSync(path.join(__dirname, '.git'));
304
- if (gitInSource) {
305
- throw new Error('Test pollution: .git created in source directory');
306
- }
307
- });
308
- ```
309
-
310
- ## Async Operation Tracing
311
-
312
- ### The Challenge
313
-
314
- Async operations obscure call chains:
315
- ```typescript
316
- async function a() {
317
- await b();
318
- }
319
-
320
- async function b() {
321
- await c();
322
- }
323
-
324
- async function c() {
325
- throw new Error('Something failed');
326
- }
327
- ```
328
-
329
- Stack trace might only show:
330
- ```
331
- Error: Something failed
332
- at c (file.ts:10)
333
- ```
334
-
335
- Missing the full chain: `a → b → c`
336
-
337
- ### Node.js Async Stack Traces
338
-
339
- **Enable async stack traces:**
340
- ```bash
341
- node --async-stack-traces test.js
342
- ```
343
-
344
- Or in code:
345
- ```typescript
346
- // At application entry point
347
- Error.stackTraceLimit = 50; // Capture deeper stacks
348
- ```
349
-
350
- **In package.json:**
351
- ```json
352
- {
353
- "scripts": {
354
- "test": "node --async-stack-traces ./node_modules/.bin/jest"
355
- }
356
- }
357
- ```
358
-
359
- ### Trace IDs for Async Operations
360
-
361
- When multiple async operations interleave, use trace IDs:
362
-
363
- ```typescript
364
- import { randomUUID } from 'crypto';
365
- import { AsyncLocalStorage } from 'async_hooks';
366
-
367
- const asyncLocalStorage = new AsyncLocalStorage();
368
-
369
- function withTraceId<T>(fn: () => T): T {
370
- const traceId = randomUUID();
371
- return asyncLocalStorage.run({ traceId }, fn);
372
- }
373
-
374
- function getTraceId(): string {
375
- const store = asyncLocalStorage.getStore() as { traceId: string };
376
- return store?.traceId || 'no-trace-id';
377
- }
378
-
379
- // Usage
380
- async function operationA() {
381
- console.log(`[${getTraceId()}] Starting operation A`);
382
- await operationB();
383
- }
384
-
385
- async function operationB() {
386
- console.log(`[${getTraceId()}] Starting operation B`);
387
- await operationC();
388
- }
389
-
390
- // Run with trace ID
391
- await withTraceId(async () => {
392
- await operationA();
393
- });
394
- ```
395
-
396
- **Output:**
397
- ```
398
- [abc-123] Starting operation A
399
- [abc-123] Starting operation B
400
- [abc-123] Starting operation C
401
- ```
402
-
403
- All operations from same call chain have same trace ID.
404
-
405
- ### Debugging Race Conditions
406
-
407
- **Problem:** Operations complete in wrong order, causing bugs.
408
-
409
- **Solution: Add timing instrumentation:**
410
-
411
- ```typescript
412
- class TimingTracer {
413
- private events: Array<{ time: number; event: string; data: any }> = [];
414
-
415
- record(event: string, data: any = {}) {
416
- this.events.push({
417
- time: Date.now(),
418
- event,
419
- data
420
- });
421
- }
422
-
423
- dump() {
424
- const sorted = this.events.sort((a, b) => a.time - b.time);
425
- console.error('=== Timing Trace ===');
426
- let start = sorted[0]?.time || 0;
427
- sorted.forEach(({ time, event, data }) => {
428
- console.error(`+${time - start}ms: ${event}`, data);
429
- start = time;
430
- });
431
- }
432
- }
433
-
434
- // Usage
435
- const tracer = new TimingTracer();
436
-
437
- async function operation() {
438
- tracer.record('start');
439
-
440
- const promise1 = async1().then(() => tracer.record('async1 done'));
441
- const promise2 = async2().then(() => tracer.record('async2 done'));
442
-
443
- await Promise.all([promise1, promise2]);
444
-
445
- tracer.record('both done');
446
- tracer.dump();
447
- }
448
- ```
449
-
450
- **Output shows operation order:**
451
- ```
452
- === Timing Trace ===
453
- +0ms: start {}
454
- +45ms: async2 done {}
455
- +67ms: async1 done {}
456
- +67ms: both done {}
457
- ```
458
-
459
- Shows async2 completed before async1.
460
-
461
- ## Debugging Third-Party Libraries
462
-
463
- ### When Library Behavior is Unexpected
464
-
465
- **Strategy:**
466
- 1. Verify you're using the API correctly
467
- 2. Check library version and changelog
468
- 3. Read library source code
469
- 4. Add instrumentation around library calls
470
-
471
- ### Wrapping Library Calls
472
-
473
- ```typescript
474
- // Wrap library function to add tracing
475
- import { originalFunction } from 'third-party-lib';
476
-
477
- const tracedFunction = (...args: any[]) => {
478
- console.error('Calling library function:', {
479
- args,
480
- stack: new Error().stack
481
- });
482
-
483
- const result = originalFunction(...args);
484
-
485
- console.error('Library function result:', result);
486
-
487
- return result;
488
- };
489
-
490
- // Use traced version
491
- export { tracedFunction as originalFunction };
492
- ```
493
-
494
- ### Checking Library Source
495
-
496
- **When to read library source:**
497
- - Documentation is unclear
498
- - Behavior differs from documentation
499
- - Need to understand edge cases
500
- - Debugging library bug
501
-
502
- **How to read library source:**
503
- ```bash
504
- # Find library location
505
- npm ls third-party-lib
506
-
507
- # View source
508
- code node_modules/third-party-lib/src/
509
-
510
- # Or on GitHub
511
- open https://github.com/author/third-party-lib
512
- ```
513
-
514
- ## Environment-Specific Issues
515
-
516
- ### Capturing Environment Context
517
-
518
- ```typescript
519
- function captureEnvironment() {
520
- return {
521
- nodeVersion: process.version,
522
- platform: process.platform,
523
- arch: process.arch,
524
- cwd: process.cwd(),
525
- env: {
526
- NODE_ENV: process.env.NODE_ENV,
527
- CI: process.env.CI,
528
- // Add relevant env vars
529
- },
530
- memory: process.memoryUsage(),
531
- uptime: process.uptime()
532
- };
533
- }
534
-
535
- // Log with every error
536
- try {
537
- riskyOperation();
538
- } catch (error) {
539
- console.error('Operation failed:', {
540
- error,
541
- environment: captureEnvironment(),
542
- stack: error.stack
543
- });
544
- throw error;
545
- }
546
- ```
547
-
548
- ### Reproducing Production Issues Locally
549
-
550
- **Techniques:**
551
- 1. **Match environment:**
552
- ```bash
553
- nvm use <production-node-version>
554
- export NODE_ENV=production
555
- ```
556
-
557
- 2. **Use production data (sanitized):**
558
- ```bash
559
- # Dump production DB to local
560
- pg_dump production_db | psql local_db
561
- ```
562
-
563
- 3. **Enable production logging locally:**
564
- ```typescript
565
- if (process.env.DEBUG_PROD) {
566
- logger.level = 'debug';
567
- }
568
- ```
569
-
570
- 4. **Replay production requests:**
571
- ```typescript
572
- // Log requests in production
573
- app.use((req, res, next) => {
574
- logger.info('Request', {
575
- method: req.method,
576
- url: req.url,
577
- headers: req.headers,
578
- body: req.body
579
- });
580
- next();
581
- });
582
-
583
- // Replay locally
584
- const productionRequest = loadFromLogs();
585
- await fetch('http://localhost:3000' + productionRequest.url, {
586
- method: productionRequest.method,
587
- headers: productionRequest.headers,
588
- body: productionRequest.body
589
- });
590
- ```
591
-
592
- ## Performance Profiling for Root Cause
593
-
594
- Sometimes "bug" is performance issue. Trace to find bottleneck.
595
-
596
- ### Node.js Built-in Profiler
597
-
598
- ```bash
599
- # Generate CPU profile
600
- node --cpu-prof app.js
601
-
602
- # Analyze with Chrome DevTools
603
- open chrome://inspect
604
- ```
605
-
606
- ### Custom Performance Tracing
607
-
608
- ```typescript
609
- class PerformanceTracer {
610
- private timers = new Map<string, number>();
611
-
612
- start(label: string) {
613
- this.timers.set(label, Date.now());
614
- }
615
-
616
- end(label: string): number {
617
- const start = this.timers.get(label);
618
- if (!start) throw new Error(`No timer: ${label}`);
619
-
620
- const duration = Date.now() - start;
621
- console.log(`${label}: ${duration}ms`);
622
- this.timers.delete(label);
623
- return duration;
624
- }
625
-
626
- async measure<T>(label: string, fn: () => T): Promise<T> {
627
- this.start(label);
628
- try {
629
- return await fn();
630
- } finally {
631
- this.end(label);
632
- }
633
- }
634
- }
635
-
636
- // Usage
637
- const tracer = new PerformanceTracer();
638
-
639
- await tracer.measure('database query', async () => {
640
- return await db.query('SELECT ...');
641
- });
642
-
643
- await tracer.measure('API call', async () => {
644
- return await fetch('https://api.example.com');
645
- });
646
- ```
647
-
648
- **Output:**
649
- ```
650
- database query: 1243ms ← BOTTLENECK FOUND
651
- API call: 89ms
652
- ```
653
-
654
- ## Summary
655
-
656
- **Stack traces:** Capture call chains with `new Error().stack`
657
- **Test pollution:** Use bisection to find polluting tests
658
- **Async tracing:** Use trace IDs and async stack traces
659
- **Library issues:** Wrap calls, read source, verify API usage
660
- **Environment issues:** Match production environment, replay requests
661
- **Performance:** Profile to find bottlenecks
662
-
663
- **When to use:**
664
- - Manual tracing hits dead end
665
- - Multiple async operations involved
666
- - Test pollution occurring
667
- - Race conditions or timing issues
668
- - Need production-level debugging