claude-mpm 4.2.9__py3-none-any.whl → 4.2.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/cli/commands/dashboard.py +59 -126
  3. claude_mpm/cli/commands/monitor.py +71 -212
  4. claude_mpm/cli/commands/run.py +33 -33
  5. claude_mpm/dashboard/static/css/code-tree.css +8 -16
  6. claude_mpm/dashboard/static/dist/components/code-tree.js +1 -1
  7. claude_mpm/dashboard/static/dist/components/file-viewer.js +2 -0
  8. claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
  9. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +1 -1
  10. claude_mpm/dashboard/static/dist/dashboard.js +1 -1
  11. claude_mpm/dashboard/static/dist/socket-client.js +1 -1
  12. claude_mpm/dashboard/static/js/components/code-tree.js +692 -114
  13. claude_mpm/dashboard/static/js/components/file-viewer.js +538 -0
  14. claude_mpm/dashboard/static/js/components/module-viewer.js +26 -0
  15. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +166 -14
  16. claude_mpm/dashboard/static/js/dashboard.js +108 -91
  17. claude_mpm/dashboard/static/js/socket-client.js +9 -7
  18. claude_mpm/dashboard/templates/index.html +2 -7
  19. claude_mpm/hooks/claude_hooks/hook_handler.py +1 -11
  20. claude_mpm/hooks/claude_hooks/services/connection_manager.py +54 -59
  21. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +112 -72
  22. claude_mpm/services/agents/deployment/agent_template_builder.py +0 -1
  23. claude_mpm/services/cli/unified_dashboard_manager.py +354 -0
  24. claude_mpm/services/monitor/__init__.py +20 -0
  25. claude_mpm/services/monitor/daemon.py +256 -0
  26. claude_mpm/services/monitor/event_emitter.py +279 -0
  27. claude_mpm/services/monitor/handlers/__init__.py +20 -0
  28. claude_mpm/services/monitor/handlers/code_analysis.py +334 -0
  29. claude_mpm/services/monitor/handlers/dashboard.py +298 -0
  30. claude_mpm/services/monitor/handlers/hooks.py +491 -0
  31. claude_mpm/services/monitor/management/__init__.py +18 -0
  32. claude_mpm/services/monitor/management/health.py +124 -0
  33. claude_mpm/services/monitor/management/lifecycle.py +298 -0
  34. claude_mpm/services/monitor/server.py +442 -0
  35. claude_mpm/tools/code_tree_analyzer.py +33 -17
  36. {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/METADATA +1 -1
  37. {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/RECORD +41 -36
  38. claude_mpm/cli/commands/socketio_monitor.py +0 -233
  39. claude_mpm/scripts/socketio_daemon.py +0 -571
  40. claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
  41. claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
  42. claude_mpm/scripts/socketio_server_manager.py +0 -349
  43. claude_mpm/services/cli/dashboard_launcher.py +0 -423
  44. claude_mpm/services/cli/socketio_manager.py +0 -595
  45. claude_mpm/services/dashboard/stable_server.py +0 -1020
  46. claude_mpm/services/socketio/monitor_server.py +0 -505
  47. {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/WHEEL +0 -0
  48. {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/entry_points.txt +0 -0
  49. {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/licenses/LICENSE +0 -0
  50. {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
2
- claude_mpm/VERSION,sha256=MIBre12ahs9mdEdNq680sKYZ3flZxsKiREyt9HMqOZU,6
2
+ claude_mpm/VERSION,sha256=cd55Cs9g014dKFhr97AzpoJW-fW8NPYxthFqB5LQaw8,7
3
3
  claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=I946iCQzIIPRZVVJ8aO7lA4euiyDnNw2IX7EelAOkIE,5915
@@ -71,7 +71,7 @@ claude_mpm/cli/commands/cleanup_orphaned_agents.py,sha256=JR8crvgrz7Sa6d-SI-gKyw
71
71
  claude_mpm/cli/commands/config.py,sha256=Yfi8WO-10_MYz2QipFw-yEzVvHKNQ6iSQXeyW5J85Cg,18559
72
72
  claude_mpm/cli/commands/configure.py,sha256=OsuISDoctmQyJpd0wn4LUFRR1AdoVLveT-pU6JJdW60,55439
73
73
  claude_mpm/cli/commands/configure_tui.py,sha256=VYLlm2B7QN8P3HtKMEO5Z7A9TpRicWvsojtNh4NxVWQ,66760
74
- claude_mpm/cli/commands/dashboard.py,sha256=BrIClsLP-6lyHIlzOEzoAN8MDXU88MCy1eTO5EPRM3I,14355
74
+ claude_mpm/cli/commands/dashboard.py,sha256=a5-eowhAPXzjDmdrMK47ZbSvGpd4zj6SC8lf6HcbqqA,11449
75
75
  claude_mpm/cli/commands/debug.py,sha256=lupNJRzpPHeisREYmbQ-9E3A3pvKjSHsapYFJVH8sbc,47056
76
76
  claude_mpm/cli/commands/doctor.py,sha256=bOZzDNxEMNMZYrJnu_V82tyZ12r5FiBRQNLVfSVvRIQ,5774
77
77
  claude_mpm/cli/commands/info.py,sha256=_hWH7uNv9VLO0eZh9Ua6qc5L1Z66kYj9ATzU4Q8UkSM,7377
@@ -83,11 +83,10 @@ claude_mpm/cli/commands/mcp_pipx_config.py,sha256=sE62VD6Q1CcO2k1nlbIhHMfAJFQTZf
83
83
  claude_mpm/cli/commands/mcp_server_commands.py,sha256=-1G_2Y5ScTvzDd-kY8fTAao2H6FH7DnsLimleF1rVqQ,6197
84
84
  claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
85
85
  claude_mpm/cli/commands/memory.py,sha256=Yzfs3_oiKciv3sfOoDm2lJL4M9idG7ARV3-sNw1ge_g,26186
86
- claude_mpm/cli/commands/monitor.py,sha256=knr5uCaKwpqwsTmsW24rZobWJaVU40HJHSAfsmDXP2o,12059
86
+ claude_mpm/cli/commands/monitor.py,sha256=G6bFgiEvV5nE_bl1C3KnxmZXLfSvIR6UPwYTYR3CLFg,6769
87
87
  claude_mpm/cli/commands/mpm_init.py,sha256=lO7N91ZHn_n18XbchUUcYoyme7L5NLcXVnhWm5F_Gq8,22367
88
88
  claude_mpm/cli/commands/mpm_init_handler.py,sha256=-pCB0XL3KipqGtnta8CC7Lg5TPMwstEhMFBcgF4aaa4,2919
89
- claude_mpm/cli/commands/run.py,sha256=HrqRWCxmtCKcOxygXRM4KYlN1FDxBXrt4lxz0WunPTs,43390
90
- claude_mpm/cli/commands/socketio_monitor.py,sha256=GHHY5pKg0XCffoqLoO0l0Nxa9HQY4gdrpYebLVahzl4,9540
89
+ claude_mpm/cli/commands/run.py,sha256=qS3eolLiDrE8EXLQJioB6kL1ONr_l0c3OE3qMUJCqbA,43489
91
90
  claude_mpm/cli/commands/tickets.py,sha256=kl2dklTBnG3Y4jUUJ_PcEVsTx4CtVJfkGWboWBx_mQM,21234
92
91
  claude_mpm/cli/parsers/__init__.py,sha256=f0Fm1DDXorlVOZPLxUpjC-GIvLh01G-FZOK7TEV1L3I,1005
93
92
  claude_mpm/cli/parsers/agent_manager_parser.py,sha256=8HuGpTnHSOnTOqOHriBTzi8EzKLMSfqH2eFHs0dEuu4,8009
@@ -202,55 +201,57 @@ claude_mpm/dashboard/static/built/components/ui-state-manager.js,sha256=PtZs6sxN
202
201
  claude_mpm/dashboard/static/built/components/unified-data-viewer.js,sha256=awSWdzpGgg4ovVVR4E5TfIr-K2UhLCSuxeFIXWSUo3A,34675
203
202
  claude_mpm/dashboard/static/built/components/working-directory.js,sha256=xE1ydpKDzRWrzHzfjrCiq5wbf3vDhmgQTGKS7myQcPM,15790
204
203
  claude_mpm/dashboard/static/css/activity.css,sha256=0SJUwGB6fr4OlVqMwhvVKrPndg2R3QTZPnN6DkAo4aU,37987
205
- claude_mpm/dashboard/static/css/code-tree.css,sha256=tc7SyvCJptG43xSIrI9MmxjE3qIQv4Fe5Dx9UZmZ7Fk,30785
204
+ claude_mpm/dashboard/static/css/code-tree.css,sha256=Sx74ilt7exGOdxCBEtjP9gZ74lB5e8QWr3_SIcl_0hw,30708
206
205
  claude_mpm/dashboard/static/css/connection-status.css,sha256=nQiMLxIFjY5MDgrVCG58VR5H1PpE1vLlgXmnn01-P64,6729
207
206
  claude_mpm/dashboard/static/css/dashboard.css,sha256=Uc97_y9UL6waqnx6bDdXkJUqPjj7w8B064C5xeJnlrg,85774
208
- claude_mpm/dashboard/static/dist/dashboard.js,sha256=Fm2v_pxM_jISp--n9XasrcL2nHYlfC1wcVZW4zGekw4,44966
209
- claude_mpm/dashboard/static/dist/socket-client.js,sha256=z9HU1HePow8Yvh-7QMcjChwMYsR_p-ZvJVu8HU6d5Xg,29110
207
+ claude_mpm/dashboard/static/dist/dashboard.js,sha256=0F2Y3Zol8PJ_xns7ow-YBaRUD4-l72BfMFE3uRw6dxc,44733
208
+ claude_mpm/dashboard/static/dist/socket-client.js,sha256=wX2CD90Mc320Ulmc9v83XNmaBDsw9YqiAkIUghgJCj8,29129
210
209
  claude_mpm/dashboard/static/dist/components/activity-tree.js,sha256=c7vYmCvMgq7irVrX-EFbNqVMgVuDJ_cwcvsZ4LSO3bU,29594
211
210
  claude_mpm/dashboard/static/dist/components/agent-inference.js,sha256=fXK7kzvAXzYzOGdLw_APbDiEN51OX1I4-InnN2iZlu0,12978
212
- claude_mpm/dashboard/static/dist/components/code-tree.js,sha256=9eAyU62Ehthj7zC_JaQIAI7aFAcxJuk5n07bzqguDpw,52258
211
+ claude_mpm/dashboard/static/dist/components/code-tree.js,sha256=bm45xde6JrUnn5siyq29n8lVrweAvNIaYSMLtO_Or88,95772
213
212
  claude_mpm/dashboard/static/dist/components/code-viewer.js,sha256=wMggEwMt2RrBuXJO-WYZ5_HHDODfWLm_IS9lS5LLR7M,8495
214
213
  claude_mpm/dashboard/static/dist/components/event-processor.js,sha256=JycF1KIAmxhsNBCsne9CzRFPHMcnQz0WhTABpvuCWSc,131
215
214
  claude_mpm/dashboard/static/dist/components/event-viewer.js,sha256=oyfvK8VO1RNSyN1CRoZiB22cNJ4D05p_ahM8WPCH27k,24902
216
215
  claude_mpm/dashboard/static/dist/components/export-manager.js,sha256=iEbnirtMJ5bLpKbgBJfMI2bPC1Lf3_UrQntl04OUKEk,4196
217
216
  claude_mpm/dashboard/static/dist/components/file-tool-tracker.js,sha256=fZgUsg_u52KRYZFQooF_ZZjvKvYHaY9N7uJIS3XR9s8,9824
217
+ claude_mpm/dashboard/static/dist/components/file-viewer.js,sha256=Zy9itC7XVJWMTfej42qXE3rDKQ5Io0DCWQxl8rDFuoA,11704
218
218
  claude_mpm/dashboard/static/dist/components/hud-library-loader.js,sha256=v08Xntd0Lwf-q6Nww1X2r5AWokYLgg9xUWe6ExHiNAg,2964
219
219
  claude_mpm/dashboard/static/dist/components/hud-manager.js,sha256=CvgzgqprROjl0DP4yQx4aAypONuNlzU2EP8woGk-8Sc,27392
220
220
  claude_mpm/dashboard/static/dist/components/hud-visualizer.js,sha256=igUUu1OLKOgwrdsfCEb-bKOsbi61bMLlpKa3hR2wQdI,69
221
- claude_mpm/dashboard/static/dist/components/module-viewer.js,sha256=ZcRJFUZ77eH5uKZyzVMDGmmfAk_hdrnaOpgPKzsZ6TU,50919
221
+ claude_mpm/dashboard/static/dist/components/module-viewer.js,sha256=eRpKOFuwPeb8SZycpH4IZF8pE04edS3LH0h06s3GdPg,51575
222
222
  claude_mpm/dashboard/static/dist/components/session-manager.js,sha256=ZG__csNeB8-cG1VhRNoojD-DSmNHijXI4To410hGf2E,8970
223
223
  claude_mpm/dashboard/static/dist/components/socket-manager.js,sha256=LEqCS0_EABAsQVUfb6WQk152mSicK2k039zne5cKR8A,131
224
224
  claude_mpm/dashboard/static/dist/components/ui-state-manager.js,sha256=PtZs6sxNhqMMFwdlr04kDKQbgOvxtMHdjSh56KR2ZBo,134
225
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js,sha256=awSWdzpGgg4ovVVR4E5TfIr-K2UhLCSuxeFIXWSUo3A,34675
225
+ claude_mpm/dashboard/static/dist/components/unified-data-viewer.js,sha256=pMA1iYfpmDObyySbGCUT2240fSrcqZmgfjxXrnHsnlM,36759
226
226
  claude_mpm/dashboard/static/dist/components/working-directory.js,sha256=xE1ydpKDzRWrzHzfjrCiq5wbf3vDhmgQTGKS7myQcPM,15790
227
227
  claude_mpm/dashboard/static/js/connection-manager.js,sha256=nn7x1jmwEnBClcChbFk1uMhRPu5U1xmXz3sjuo0LNm4,17981
228
- claude_mpm/dashboard/static/js/dashboard.js,sha256=RYzzhNr1pPAHZ12pgWjTpe15Nzaqrm-S9vzTRfqob5A,64712
228
+ claude_mpm/dashboard/static/js/dashboard.js,sha256=YQkwyKN7gm-qJINGYVEGNu9E4178pzmLJbeirBilkDM,64971
229
229
  claude_mpm/dashboard/static/js/extension-error-handler.js,sha256=DZHrJ3gbfv4nsjmZpNMj-Sc3GKjVJ5ds8lgoaLRnq5I,6274
230
- claude_mpm/dashboard/static/js/socket-client.js,sha256=E6CmETHYwS4kPnk9gTnfoWO4FObWYvz0muosFS-zffs,56239
230
+ claude_mpm/dashboard/static/js/socket-client.js,sha256=EOAO7HswWMT7XrOOW0O5P3j47mjqZL3VIyl1mFgulbA,56442
231
231
  claude_mpm/dashboard/static/js/components/activity-tree.js,sha256=1j46X0qjYReP6gwv0WGRpJSJNuBwuj6bKmumWrCZKUo,72740
232
232
  claude_mpm/dashboard/static/js/components/agent-hierarchy.js,sha256=Xihxog_vJrk8VBEkDogV_wbye2GIFWmH71VQ1lETOHk,28243
233
233
  claude_mpm/dashboard/static/js/components/agent-inference.js,sha256=RUVZ_fLOyDkHYjrROen_Pzzay79Bh29eXp_GRIPbIRg,37493
234
234
  claude_mpm/dashboard/static/js/components/build-tracker.js,sha256=iouv35tNhnyx9UKtD7X1eakJkpCnvZVCrAJ_VdzsKUY,11251
235
235
  claude_mpm/dashboard/static/js/components/code-simple.js,sha256=3A3VIvHMpYRjuDKGMaQYoVjf-zuUa4Q6pdBHWDJ0ygM,32050
236
- claude_mpm/dashboard/static/js/components/code-tree.js,sha256=7kjS2UWgIpxbzkjhvAByPBvhSt2mG2qdglXreXhKiU8,198625
236
+ claude_mpm/dashboard/static/js/components/code-tree.js,sha256=NW-fo4L5R0Td-zRVk3_rDYsf-GDZh_dOnzF12SdBYfU,222125
237
237
  claude_mpm/dashboard/static/js/components/code-viewer.js,sha256=vhesEPYOM6MggweaYvYsv7ufVbuVpIcyJPXpJXyJwpM,14453
238
238
  claude_mpm/dashboard/static/js/components/connection-debug.js,sha256=Qxr_ofDNkxDlZAwbLnhZkXVMyuO9jOe-NMWC9VHxNnA,22196
239
239
  claude_mpm/dashboard/static/js/components/event-processor.js,sha256=pP15JIf2yEh7gqEdam42m_B1B4hDlfKbkDcGmQhyjM8,20567
240
240
  claude_mpm/dashboard/static/js/components/event-viewer.js,sha256=Ahl9eTxCYMhDC_533Gf4O96S04W5O_Ts0PAGWSVivkI,43672
241
241
  claude_mpm/dashboard/static/js/components/export-manager.js,sha256=T1YtaR758FaB9aP_5V1xZC9EBIFQOG5H8f_sLopxR5A,11863
242
242
  claude_mpm/dashboard/static/js/components/file-tool-tracker.js,sha256=y8O7kW5uP6KBT2gWvjRoH1aJG-7o1qzyrVnvShsNAK0,28620
243
+ claude_mpm/dashboard/static/js/components/file-viewer.js,sha256=FPbbZC2fwJNE3nLwql6A_xHhMMHaB5NhxZlDSqHl9kM,17193
243
244
  claude_mpm/dashboard/static/js/components/hud-library-loader.js,sha256=SK6tY8TL88lnewi4M-i092HdgYondv_lVfHoQ-A_cWU,7170
244
245
  claude_mpm/dashboard/static/js/components/hud-manager.js,sha256=hpvz1Ls5UcNgTbwjl7tK0OgNZ_QHnRXgNqqYaq4jjvM,25956
245
246
  claude_mpm/dashboard/static/js/components/hud-visualizer.js,sha256=crgq3eA4xiXDE4SV9m-S94Of2y7znd1a3F4GYn2yjnU,61127
246
- claude_mpm/dashboard/static/js/components/module-viewer.js,sha256=jhgPVOtg_827p6b1-NxkeQQBNF-sztLqur4xdTyflTk,107647
247
+ claude_mpm/dashboard/static/js/components/module-viewer.js,sha256=Ndw3ZDLRP4xaMw2akEH5Dvkof4Vp9umk8yFQzQntLkI,109010
247
248
  claude_mpm/dashboard/static/js/components/session-manager.js,sha256=pJrlMcSBNTXoK5nDLWLcIesOosk0FQtkTEM6X7eSI_I,22807
248
249
  claude_mpm/dashboard/static/js/components/socket-manager.js,sha256=KC-aOJDEPSiMPYk0ABgvCC1xmO7TVQ4SVqohi2GNsWQ,13303
249
250
  claude_mpm/dashboard/static/js/components/ui-state-manager.js,sha256=EWm0HpPI9TShChitRCyZvZCiUk5rIBVyw10BoHdnTzI,13178
250
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js,sha256=iKI_AaVX36o2JssBs0C1KR8AFb4qse47-JwfBsd9tBo,58625
251
+ claude_mpm/dashboard/static/js/components/unified-data-viewer.js,sha256=afHCGAg7v3PVhmOr77Bzx3TTZlzHI_5pq16ut3xEYWk,65302
251
252
  claude_mpm/dashboard/static/js/components/working-directory.js,sha256=BRsPYwVnhbhFl0mC0Gvb-Ev1zxAu6yZpZcl1T1aJWWA,33558
252
253
  claude_mpm/dashboard/templates/code_simple.html,sha256=xrmTLFow0M5NWFlk4ci1eLWML-IHr35i5pqIVaEg2TU,4329
253
- claude_mpm/dashboard/templates/index.html,sha256=1pPgvOCkwC3YQNV2kIa8cA2Lp9LFb-VUF9YmzMH5dgM,31036
254
+ claude_mpm/dashboard/templates/index.html,sha256=-YmK978ysSuXGON8bLKeARwihJsq6UO5JEsFXOMmjkY,30768
254
255
  claude_mpm/experimental/__init__.py,sha256=R_aclOvWpvSTHWAx9QXyg9OIPVK2dXT5tQJhxLQN11Y,369
255
256
  claude_mpm/experimental/cli_enhancements.py,sha256=rlYOMVlj8vQzuyCkHWQ7TtjcsDeFq3y1Ng5qty2fyY8,11486
256
257
  claude_mpm/generators/__init__.py,sha256=rG8vwF_BjPmeMKvyMXpUA8uJ-7mtW2HTNfalZzgRlNk,153
@@ -263,7 +264,7 @@ claude_mpm/hooks/validation_hooks.py,sha256=qTkO93lJWInqvEibKbY-Fj-qDvMtKRcE6dDf
263
264
  claude_mpm/hooks/claude_hooks/__init__.py,sha256=b4mud_g3S-3itHY_Dzpbb_SmdMEcJwtUU8fTcqpLqqs,130
264
265
  claude_mpm/hooks/claude_hooks/connection_pool.py,sha256=OSVJk4q-Zj_4UrQIKyGsJv6sab-oZfq-BB4_9mQqPYU,8618
265
266
  claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=OWglHktyzLmuNhkKmV_Bgka7M_YUB84lspYJlR3HQ7I,30312
266
- claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=6UPtFjXiKF3a5kr0xDfWsBRmDmVehrxmRee1pFe9mE0,20554
267
+ claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=jVCBaJzCTFbtTcmq5NF_v50FtrI_G8rOLSLhY0rj6i4,20213
267
268
  claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py,sha256=IZKE3cJok_gb4UGFEtftic5MjYBAPupt3iDq20L9Pfc,14848
268
269
  claude_mpm/hooks/claude_hooks/hook_handler_original.py,sha256=AOcGOf2WiA_aaRsaENKBvaj3Vi_UzeL_zaEgN3zxCrk,42964
269
270
  claude_mpm/hooks/claude_hooks/hook_handler_refactored.py,sha256=e8phCM18f-IcovV9_xVNYSV8nndVKdzmFJa-xjKGkq8,12983
@@ -273,8 +274,8 @@ claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=TXLavDM9eEoakPX_n2Wtn
273
274
  claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=4RcM54LyYeINf3A_toaSOPuD3oXS6jZtiRstHxgSOao,14990
274
275
  claude_mpm/hooks/claude_hooks/tool_analysis.py,sha256=3_o2PP9D7wEMwLriCtIBOw0cj2fSZfepN7lI4P1meSQ,7862
275
276
  claude_mpm/hooks/claude_hooks/services/__init__.py,sha256=OIYOKsUNw1BHYawOCp-KFK5kmQKuj92cCqCEPO0nwo0,585
276
- claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=brj_FrSRwusbzyQo8a8DRGruTRqucfNWZNSDiNkbLe8,8290
277
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py,sha256=-DZ2seh1tpdo_RQPo5qkkJBcbjEkSpIFWOMMij1V0So,7686
277
+ claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=nTkj3Ly5UueupA27jvW2J6NAwHi0NHBug02vN_YvAOE,8153
278
+ claude_mpm/hooks/claude_hooks/services/connection_manager_http.py,sha256=ewE80N7CnQoD-aTPJfbW6wRv1hs9jj3ob6CZ1xKudFU,8805
278
279
  claude_mpm/hooks/claude_hooks/services/duplicate_detector.py,sha256=Fh9LmEMsVmQM9t0U1v2l_fuBwvNpVkl_0EF8Wu5KLHQ,3882
279
280
  claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=c7OldfemaMU37YGJxgO2uEcTOuPc-C80SRhzEH07j7I,11072
280
281
  claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=l8fPF5CgmYnj1GqZQs3D_611xuZkRq3bFeg9axl-EEg,15229
@@ -287,10 +288,6 @@ claude_mpm/scripts/claude-hook-handler.sh,sha256=86Ywf4lHpF9wTXmxo3lhFmcFS0wk1G3
287
288
  claude_mpm/scripts/mcp_server.py,sha256=_i9ydtI7AcO-Eb7gzbIDbcJY4PKRQRYNobB8eMailI4,2259
288
289
  claude_mpm/scripts/mcp_wrapper.py,sha256=PvfHJShcsQHGJZD-RN3RnwLOzemAKYZ2kW_QfTkGzkk,1105
289
290
  claude_mpm/scripts/mpm_doctor.py,sha256=_D7w1yXPIRavfSnSTRpEUlHYve2CvlDBpH_a-cmN14c,8786
290
- claude_mpm/scripts/socketio_daemon.py,sha256=SBkLp5CSdbp3Se2f_HGGdfvjDFZL2_6gDZFX617UxCY,19910
291
- claude_mpm/scripts/socketio_daemon_hardened.py,sha256=P0xP1kUuCfmeJ9mdxwXoNOYekz-7utjdX50cI0Vm2eg,32958
292
- claude_mpm/scripts/socketio_daemon_wrapper.py,sha256=XHpW9lit9oXoOKgiaCXoQMOcoP5xK5B5lSTyTgcNw-A,2965
293
- claude_mpm/scripts/socketio_server_manager.py,sha256=42Wm_ZTw1REDPWDpx5jk2W4J6_uAoVqWb65movUaHG0,13713
294
291
  claude_mpm/scripts/start_activity_logging.py,sha256=1G9bFYiBSkpxSRXyKht73nL5gH-4zwukLutWWKAipGg,2869
295
292
  claude_mpm/services/__init__.py,sha256=VMyi1cHDrnNJtABrRC0YKU-j9GcXZnTgxGN8bbI9E2I,7478
296
293
  claude_mpm/services/agent_capabilities_service.py,sha256=uWSI7mTZvlJAYjDnyKUPczRX5uTXN0KgUp0_1J-Qsrs,10759
@@ -334,7 +331,7 @@ claude_mpm/services/agents/deployment/agent_operation_service.py,sha256=wPoGYf3F
334
331
  claude_mpm/services/agents/deployment/agent_record_service.py,sha256=0v-tWJV-AczLXPet1oqlY_fepIj4qa3l_aZMjpDXSN8,14040
335
332
  claude_mpm/services/agents/deployment/agent_restore_handler.py,sha256=YDPVY4m_4l5wSFq9fxsTqm0ixX8AeTyzERh-PtabuUY,3101
336
333
  claude_mpm/services/agents/deployment/agent_state_service.py,sha256=yjuVG-rwyXBS0T8yKfrx1QTOSmfB_Ejvm-0QLjBNDDI,11772
337
- claude_mpm/services/agents/deployment/agent_template_builder.py,sha256=vQRNma-c4CWhL5PO7nCCeuTDDhWATjx54K-3eDWI5fQ,34791
334
+ claude_mpm/services/agents/deployment/agent_template_builder.py,sha256=UKR0za1fVubmPW4BvGTVkEn3u7g6w3JSih63zqNZly4,34790
338
335
  claude_mpm/services/agents/deployment/agent_validator.py,sha256=Yyf5zG8pFYIvmRzghPZSr8Ka2p_uVe9MVN8bmtucNSc,12737
339
336
  claude_mpm/services/agents/deployment/agent_version_manager.py,sha256=Q2COYmnWDvDxsBh_ikN9Govk3o8Dy1T0X-rioMpUsis,11189
340
337
  claude_mpm/services/agents/deployment/agent_versioning.py,sha256=cDkSv12m6_XjhhD6Tr_tmcnvx4RrXhMAKpjm6E_fKyQ,989
@@ -413,12 +410,11 @@ claude_mpm/services/cli/agent_dependency_service.py,sha256=mu6RJIjEe_NrMzil3Wm6C
413
410
  claude_mpm/services/cli/agent_listing_service.py,sha256=8lzK7HKF7SsdlwA3DkhtsL6cFlHvbEwFxSkp2V5rYHc,15957
414
411
  claude_mpm/services/cli/agent_output_formatter.py,sha256=FcJ18m3CyeFr_wotJfEmIURHeZ71eomqO_vK7wsPWsM,20521
415
412
  claude_mpm/services/cli/agent_validation_service.py,sha256=rf3ztGQJ9tKpAIobE5MAFNvft-GZkB5elpSAgdQRh3I,21728
416
- claude_mpm/services/cli/dashboard_launcher.py,sha256=PCqk9e6E7SHrKmjrXZJ5Ak8yuB7ntxea8RRmGRW1834,14453
417
413
  claude_mpm/services/cli/memory_crud_service.py,sha256=ciN9Pl_12iDAqF9zPBWOzu-iXiAzpy3CiIwXRoeB5m0,22645
418
414
  claude_mpm/services/cli/memory_output_formatter.py,sha256=nbf7VsjGvH4e9fLv9c7PzjuO9COZhbK5P2fNZ79055w,24783
419
415
  claude_mpm/services/cli/session_manager.py,sha256=rla_Stbcvt93wa9G9MCMu9UqB3FLGqlPt_eN5lQb3Gg,16599
420
- claude_mpm/services/cli/socketio_manager.py,sha256=NOhb6yTB0mISdExojydYk28DcPaPwguD_IuAJDoTidw,20638
421
416
  claude_mpm/services/cli/startup_checker.py,sha256=efhuvu8ns5G16jcQ0nQZKVddmD2AktUEdlvjNcXjAuk,12232
417
+ claude_mpm/services/cli/unified_dashboard_manager.py,sha256=RzUSBwyUmUcgF1quHich1xQsQSvtWknPexeOicEeHzE,11481
422
418
  claude_mpm/services/communication/__init__.py,sha256=b4qc7_Rqy4DE9q7BAUlfUZjoYG4uimAyUnE0irPcXyU,560
423
419
  claude_mpm/services/core/__init__.py,sha256=evEayLlBqJvxMZhrhuK6aagXmNrKGSj8Jm9OOxKzqvU,2195
424
420
  claude_mpm/services/core/base.py,sha256=iA-F7DgGp-FJIMvQTiHQ68RkG_k-AtUWlArJPMw6ZPk,7297
@@ -433,7 +429,6 @@ claude_mpm/services/core/interfaces/agent.py,sha256=EaPYn6k9HjB2DRTiZIMJwEIBABZF
433
429
  claude_mpm/services/core/interfaces/communication.py,sha256=evwtLbYCFa3Zb8kEfL10LOBVdwP4-n3a3wa7NqIHmKQ,8887
434
430
  claude_mpm/services/core/interfaces/infrastructure.py,sha256=eLtr_dFhA3Ux3mPOV_4DbWhGjHpfpGnj6xOhfQcgZGk,10037
435
431
  claude_mpm/services/core/interfaces/service.py,sha256=hNfHXe45LcPCp_dToOmZCfnUZBF5axMf_TdxqCSm2-I,11536
436
- claude_mpm/services/dashboard/stable_server.py,sha256=0nd87kJRbSW0YXDzEpAn3f7v48wgG-dppZk9JWFlk-E,39076
437
432
  claude_mpm/services/diagnostics/__init__.py,sha256=WTRucANR9EwNi53rotjkeE4k75s18RjHJ8s1BfBj7ic,614
438
433
  claude_mpm/services/diagnostics/diagnostic_runner.py,sha256=cpCZ7JBvRIpGEchiwYsojmiGaI99Wf-hGxk8eem7xXQ,9164
439
434
  claude_mpm/services/diagnostics/doctor_reporter.py,sha256=Z8hYLqUbGC02gL7nX9kZKbLWRzOmTORRINfCr7EHbBI,10537
@@ -534,6 +529,17 @@ claude_mpm/services/memory/router.py,sha256=FHhoRV5Q-UwG5eUkKvF4d0Bgz5qsEiEsLx1Q
534
529
  claude_mpm/services/memory/cache/__init__.py,sha256=6M6-P8ParyxX8vOgp_IxHgLMvacrQHPnXeZIvwJKtw8,351
535
530
  claude_mpm/services/memory/cache/shared_prompt_cache.py,sha256=crnYPUT8zcS7TvoE1vW7pyaf4T77N5rJ1wUf_YQ2vvo,28704
536
531
  claude_mpm/services/memory/cache/simple_cache.py,sha256=qsTjbcsPxj-kNfaod9VN_uE5NioIwpfkUin_mMVUJCg,10218
532
+ claude_mpm/services/monitor/__init__.py,sha256=X7gxSLUm9Fg_zEsX6LtCHP2ipF0qj6Emkun20h2So7g,745
533
+ claude_mpm/services/monitor/daemon.py,sha256=YRwAZrunZ1jE-P61gNCkFLEys7mTkJLGBxUIH8H6upU,7830
534
+ claude_mpm/services/monitor/event_emitter.py,sha256=D9o38lOFkzJx40RE0igvFVdAi1w5WqV_09Rz7nCjWdI,9609
535
+ claude_mpm/services/monitor/server.py,sha256=i2mynduUMNAXU0h_SSz-cx7LaBaLrkVPgtGvKXGhQFE,16008
536
+ claude_mpm/services/monitor/handlers/__init__.py,sha256=rxPCb1jc4v0-ODRK4tTzO_IxWLlaG0d6ghF8yJgVvxw,656
537
+ claude_mpm/services/monitor/handlers/code_analysis.py,sha256=mHyI27Wp6WVmUBc0m0i991ogyFZBTvkrfR7Kf3EAk5U,11474
538
+ claude_mpm/services/monitor/handlers/dashboard.py,sha256=uGBhb-6RG6u4WLipUXgdx7RCW-vb_qek5dIfHIwAC7o,9805
539
+ claude_mpm/services/monitor/handlers/hooks.py,sha256=s9CVlDLd-onH6WCOPeN06UjpEYVfuGjHw_icz220K_M,16533
540
+ claude_mpm/services/monitor/management/__init__.py,sha256=mxaEFRgvvgV85gUpXu_DsnHtywihdP14EisvISAVZuQ,525
541
+ claude_mpm/services/monitor/management/health.py,sha256=Wm92Cli_4cWD6B89KX_CdpAvvevuEaGB8Ah59ILhFww,3772
542
+ claude_mpm/services/monitor/management/lifecycle.py,sha256=T7-NF1vous250B7gkEEuaKzzxkhnhn4M3vlXRadbOjE,9082
537
543
  claude_mpm/services/project/__init__.py,sha256=IUclN1L7ChHCNya7PJiVxu4nttxsrj3WRIpwyA1A_hw,512
538
544
  claude_mpm/services/project/analyzer.py,sha256=VHlLrP8-S5gr12w4Yzs7-6d7LWdJKISHPCFSG7SDiQU,38434
539
545
  claude_mpm/services/project/analyzer_refactored.py,sha256=USYEdPAhSoGPqZCpaT89Dw6ElFW_L1yXSURheQjAhLA,18243
@@ -555,7 +561,6 @@ claude_mpm/services/socketio/dashboard_server.py,sha256=qgLJh9ThYaQXMO_1qSq-jDc5
555
561
  claude_mpm/services/socketio/event_normalizer.py,sha256=TlhZbLgb6fSFNXNAZEEbGxHOqgTIB2S9WtEGJEV7Olw,28402
556
562
  claude_mpm/services/socketio/migration_utils.py,sha256=1pK_zGZ8Pd57pCg1O-3gKT8i7_fjEKZ377hxOMGUPQQ,11963
557
563
  claude_mpm/services/socketio/monitor_client.py,sha256=50EoobdsCOY3OhqgYinrVZfZXH-x_G-qVtDPrfZlTNY,12707
558
- claude_mpm/services/socketio/monitor_server.py,sha256=FefKteMJ_Gke6KG6e2U03p-vuxRaeLc7KeNEdg9pZYE,17751
559
564
  claude_mpm/services/socketio/handlers/__init__.py,sha256=lGYFfn5P1eB6ri3HAPuDJMfdCfHIw6mQEbweAihNuHY,873
560
565
  claude_mpm/services/socketio/handlers/base.py,sha256=DjUODCOLTQSsC_-NP9yr-8g77arawmsRrM5KC06aDmw,4845
561
566
  claude_mpm/services/socketio/handlers/code_analysis.py,sha256=BmcJiygXaCVjVJndE-GFi4eN7_b8v7mqScddMTj5DUk,26271
@@ -591,7 +596,7 @@ claude_mpm/storage/__init__.py,sha256=DXnmee6iGqC6ctFLW7_Ty1cVCjYDFuCMkwO4EV0i25
591
596
  claude_mpm/storage/state_storage.py,sha256=1fFqkFy63T32JQvhUdVBNhaLQyUlkq4unjeyl0Z6j8I,16865
592
597
  claude_mpm/tools/__init__.py,sha256=T3GuCYNAHtjVcKCeivY674PaDm48WX96AriQfTKUknY,347
593
598
  claude_mpm/tools/__main__.py,sha256=MKDuxFuujqD5FZcLTqniDNQ2BI8yg5fDSLU3ElV6m6U,5709
594
- claude_mpm/tools/code_tree_analyzer.py,sha256=iht5BATmZeUXkykfSI1YSvnr2fzFPZP17LC-A10DXn0,63910
599
+ claude_mpm/tools/code_tree_analyzer.py,sha256=JCr8TshReNKM5Qoi8JicrcpHrOR_bjYuNKqoZsZuiwg,64556
595
600
  claude_mpm/tools/code_tree_builder.py,sha256=gwnsFO5ajs55UzX3SU34OMZBwhjouruQhGdQ3fJHjeA,18126
596
601
  claude_mpm/tools/code_tree_events.py,sha256=ypUmxQRUpxQt2LQfXV_qpdL42KNvLO-K5XstxZIj9-w,13277
597
602
  claude_mpm/tools/socketio_debug.py,sha256=H0mKHO6EIYqCVm4YU-SJ4Cw8ssA7VqJ3vU7y6eF7brk,22212
@@ -615,9 +620,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=zgiwLqh_17WxHpySvUPH65pb4bzIeUGOAYUJ
615
620
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
616
621
  claude_mpm/validation/agent_validator.py,sha256=3Lo6LK-Mw9IdnL_bd3zl_R6FkgSVDYKUUM7EeVVD3jc,20865
617
622
  claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
618
- claude_mpm-4.2.9.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
619
- claude_mpm-4.2.9.dist-info/METADATA,sha256=pMGzLW9pXJ_Ki3E_GaFIIKlRmBw6ERdwUTkNkMZozZE,13776
620
- claude_mpm-4.2.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
621
- claude_mpm-4.2.9.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
622
- claude_mpm-4.2.9.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
623
- claude_mpm-4.2.9.dist-info/RECORD,,
623
+ claude_mpm-4.2.11.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
624
+ claude_mpm-4.2.11.dist-info/METADATA,sha256=bOfT109kHO6oXl8vnKSjnAw59js6kRdhHUpG5-2f3pg,13777
625
+ claude_mpm-4.2.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
626
+ claude_mpm-4.2.11.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
627
+ claude_mpm-4.2.11.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
628
+ claude_mpm-4.2.11.dist-info/RECORD,,
@@ -1,233 +0,0 @@
1
- """Socket.IO monitoring functionality for run commands.
2
-
3
- This module provides Socket.IO server management and monitoring dashboard functionality.
4
- Extracted from run.py to reduce complexity and improve maintainability.
5
- """
6
-
7
- import os
8
- import subprocess
9
- import sys
10
- import webbrowser
11
-
12
- from ...core.unified_paths import get_package_root
13
- from ...services.port_manager import PortManager
14
-
15
-
16
- class SocketIOMonitor:
17
- """Handles Socket.IO monitoring and server management."""
18
-
19
- def __init__(self, logger):
20
- """Initialize the Socket.IO monitor."""
21
- self.logger = logger
22
-
23
- def launch_monitor(self, port):
24
- """
25
- Launch the Socket.IO monitoring dashboard using static HTML file.
26
-
27
- Returns:
28
- tuple: (success: bool, browser_opened: bool)
29
- """
30
- try:
31
- # Verify Socket.IO dependencies are available
32
- try:
33
- import aiohttp
34
- import engineio
35
- import socketio
36
-
37
- self.logger.debug("Socket.IO dependencies verified")
38
- except ImportError as e:
39
- self.logger.error(f"Socket.IO dependencies not available: {e}")
40
- print(f"❌ Socket.IO dependencies missing: {e}")
41
- print(" This is unexpected - dependency installation may have failed.")
42
- return False, False
43
-
44
- print("🚀 Setting up Socket.IO monitor...")
45
- self.logger.info(f"Launching Socket.IO monitor (requested port: {port})")
46
-
47
- # First, check if there's already a running SocketIO server
48
- port_manager = PortManager()
49
- port_manager.cleanup_dead_instances()
50
- active_instances = port_manager.list_active_instances()
51
-
52
- if active_instances:
53
- # Use the first active instance (prefer port 8765 if available)
54
- socketio_port = None
55
- for instance in active_instances:
56
- if instance.get("port") == 8765:
57
- socketio_port = 8765
58
- break
59
- if not socketio_port:
60
- socketio_port = active_instances[0].get("port")
61
-
62
- print(f"🔍 Found existing SocketIO server on port {socketio_port}")
63
- server_running = True
64
- else:
65
- # No existing server, use requested port
66
- socketio_port = port
67
- server_running = self.check_server_running(socketio_port)
68
-
69
- # Use HTTP URL to access dashboard from Socket.IO server
70
- dashboard_url = f"http://localhost:{socketio_port}"
71
-
72
- if server_running:
73
- print(f"✅ Socket.IO server already running on port {socketio_port}")
74
- print(f"📊 Dashboard: {dashboard_url}")
75
-
76
- # Open browser with static HTML file
77
- try:
78
- # Check if we should suppress browser opening (for tests)
79
- if os.environ.get("CLAUDE_MPM_NO_BROWSER") != "1":
80
- print("🌐 Opening dashboard in browser...")
81
- self.open_in_browser_tab(dashboard_url)
82
- self.logger.info(f"Socket.IO dashboard opened: {dashboard_url}")
83
- else:
84
- print("🌐 Browser opening suppressed (CLAUDE_MPM_NO_BROWSER=1)")
85
- self.logger.info(
86
- "Browser opening suppressed by environment variable"
87
- )
88
- return True, True
89
- except Exception as e:
90
- self.logger.warning(f"Failed to open browser: {e}")
91
- print("⚠️ Could not open browser automatically")
92
- print(f"📊 Please open manually: {dashboard_url}")
93
- return True, False
94
- else:
95
- # Start standalone Socket.IO server
96
- print("🔧 Starting Socket.IO server...")
97
- server_started = self.start_standalone_server(socketio_port)
98
-
99
- if server_started:
100
- print("✅ Socket.IO server started successfully")
101
- print(f"📊 Dashboard: {dashboard_url}")
102
-
103
- # Open browser
104
- try:
105
- if os.environ.get("CLAUDE_MPM_NO_BROWSER") != "1":
106
- print("🌐 Opening dashboard in browser...")
107
- self.open_in_browser_tab(dashboard_url)
108
- self.logger.info(
109
- f"Socket.IO dashboard opened: {dashboard_url}"
110
- )
111
- else:
112
- print(
113
- "🌐 Browser opening suppressed (CLAUDE_MPM_NO_BROWSER=1)"
114
- )
115
- return True, True
116
- except Exception as e:
117
- self.logger.warning(f"Failed to open browser: {e}")
118
- print("⚠️ Could not open browser automatically")
119
- print(f"📊 Please open manually: {dashboard_url}")
120
- return True, False
121
- else:
122
- print("❌ Failed to start Socket.IO server")
123
- print("💡 Troubleshooting tips:")
124
- print(f" - Check if port {socketio_port} is already in use")
125
- print(
126
- " - Verify Socket.IO dependencies: pip install python-socketio aiohttp"
127
- )
128
- print(" - Try a different port with --websocket-port")
129
- return False, False
130
-
131
- except Exception as e:
132
- self.logger.error(f"Failed to launch Socket.IO monitor: {e}")
133
- print(f"❌ Failed to launch Socket.IO monitor: {e}")
134
- return False, False
135
-
136
- def check_server_running(self, port):
137
- """Check if a Socket.IO server is running on the specified port."""
138
- try:
139
- import socket
140
- import urllib.error
141
- import urllib.request
142
-
143
- # First, do a basic TCP connection check
144
- try:
145
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
146
- s.settimeout(2.0)
147
- result = s.connect_ex(("127.0.0.1", port))
148
- if result != 0:
149
- self.logger.debug(f"TCP connection to port {port} failed")
150
- return False
151
- except Exception as e:
152
- self.logger.debug(f"TCP socket check failed for port {port}: {e}")
153
- return False
154
-
155
- # If TCP connection succeeds, try HTTP health check
156
- try:
157
- response = urllib.request.urlopen(
158
- f"http://localhost:{port}/status", timeout=5
159
- )
160
- if response.getcode() == 200:
161
- self.logger.debug(
162
- f"✅ Socket.IO server health check passed on port {port}"
163
- )
164
- return True
165
- except Exception as e:
166
- self.logger.debug(f"HTTP health check failed for port {port}: {e}")
167
-
168
- except Exception as e:
169
- self.logger.debug(
170
- f"❌ Unexpected error checking Socket.IO server on port {port}: {e}"
171
- )
172
-
173
- return False
174
-
175
- def start_standalone_server(self, port):
176
- """Start a standalone Socket.IO server using the Python daemon."""
177
- try:
178
- daemon_script = get_package_root() / "scripts" / "socketio_daemon.py"
179
- if not daemon_script.exists():
180
- self.logger.error(f"Daemon script not found: {daemon_script}")
181
- return False
182
-
183
- # Start the daemon
184
- result = subprocess.run(
185
- [sys.executable, str(daemon_script), "start", "--port", str(port)],
186
- capture_output=True,
187
- text=True,
188
- timeout=30,
189
- check=False,
190
- )
191
-
192
- if result.returncode == 0:
193
- self.logger.info(
194
- f"Socket.IO daemon started successfully on port {port}"
195
- )
196
- return True
197
- self.logger.error(f"Failed to start Socket.IO daemon: {result.stderr}")
198
- return False
199
-
200
- except Exception as e:
201
- self.logger.error(f"Failed to start standalone Socket.IO server: {e}")
202
- return False
203
-
204
- def open_in_browser_tab(self, url):
205
- """Open URL in browser, attempting to reuse existing tabs when possible."""
206
- try:
207
- # Try different methods based on platform
208
- import platform
209
-
210
- system = platform.system().lower()
211
-
212
- if system == "darwin": # macOS
213
- try:
214
- # Try to open in existing tab
215
- subprocess.run(["open", "-g", url], check=True, timeout=5)
216
- return
217
- except Exception:
218
- pass
219
- elif system == "linux":
220
- try:
221
- # Try xdg-open
222
- subprocess.run(["xdg-open", url], check=True, timeout=5)
223
- return
224
- except Exception:
225
- pass
226
-
227
- # Fallback to standard webbrowser
228
- webbrowser.open(url)
229
-
230
- except Exception as e:
231
- self.logger.warning(f"Browser opening failed: {e}")
232
- # Final fallback
233
- webbrowser.open(url)