claude-mpm 5.4.14__py3-none-any.whl → 5.4.21__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 (30) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +1 -1
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +127 -21
  4. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  5. claude_mpm/cli/commands/agents.py +0 -31
  6. claude_mpm/cli/commands/skills.py +193 -187
  7. claude_mpm/cli/parsers/agents_parser.py +0 -9
  8. claude_mpm/cli/parsers/auto_configure_parser.py +0 -138
  9. claude_mpm/cli/startup.py +237 -25
  10. claude_mpm/commands/mpm-config.md +1 -2
  11. claude_mpm/commands/mpm-help.md +14 -95
  12. claude_mpm/commands/mpm-organize.md +350 -153
  13. claude_mpm/hooks/claude_hooks/event_handlers.py +5 -0
  14. claude_mpm/scripts/start_activity_logging.py +0 -0
  15. claude_mpm/services/command_deployment_service.py +10 -0
  16. claude_mpm/services/skills/selective_skill_deployer.py +475 -1
  17. claude_mpm/services/skills_deployer.py +62 -6
  18. {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/METADATA +1 -1
  19. {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/RECORD +23 -28
  20. claude_mpm/cli/commands/agents_detect.py +0 -380
  21. claude_mpm/cli/commands/agents_recommend.py +0 -309
  22. claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
  23. claude_mpm/commands/mpm-agents-detect.md +0 -177
  24. claude_mpm/commands/mpm-agents-list.md +0 -131
  25. claude_mpm/commands/mpm-agents-recommend.md +0 -223
  26. {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/WHEEL +0 -0
  27. {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/entry_points.txt +0 -0
  28. {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/licenses/LICENSE +0 -0
  29. {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  30. {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,14 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
2
- claude_mpm/VERSION,sha256=dc2BOKgofQADmubEeCH4bNyfy5xpiN4Hm5S_jlKTbWw,7
2
+ claude_mpm/VERSION,sha256=kC5KP0J1J6g09jLzhYJFharVb69QZDaepj6fAegCFhA,7
3
3
  claude_mpm/__init__.py,sha256=AGfh00BHKvLYD-UVFw7qbKtl7NMRIzRXOWw7vEuZ-h4,2214
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=CU7v8LZT-cFCNNLZU4dpaMD-4c3ib16v8fVE620wUjk,6761
6
6
  claude_mpm/init.py,sha256=RbfJjCvycHDzAlmMqUaVnPs6-j5nzemPI_I2AG70sgA,15131
7
7
  claude_mpm/ticket_wrapper.py,sha256=qe5xY579t7_7fK5nyeAfHN_fr7CXdeOD3jfXEc8-7yo,828
8
8
  claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md,sha256=bBmup61VKuohq19VEJI2EPRRkHKZLjcaGbyMMLwng8Y,12149
9
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md,sha256=hzEPi4LTpQ3wwfetjSfbLKlJ2GSE181jSxHR4r_LtaI,58561
9
+ claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md,sha256=OZLYIXjkMi9sDzDgtthfx3ndpMBGr80urWIWbFV5dDM,58587
10
10
  claude_mpm/agents/MEMORY.md,sha256=KbRwY_RYdOvTvFC2DD-ATfwjHkQWJ5PIjlGws_7RmjI,3307
11
- claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=g2Xtep4OjEK0KoTWFW_5Y0_Gaw6GcyPI3VAa4VZtaSI,55364
11
+ claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=5u-HGTZW4lOUpp9S1_GVQzx-JGTS3pDjgOKV5DzOo5Q,60827
12
12
  claude_mpm/agents/WORKFLOW.md,sha256=NJXaHBo6PZYF_Gw9B7o-fjP5KBJl4N8GjUfX8WAcWZs,12248
13
13
  claude_mpm/agents/__init__.py,sha256=3cCQh2Hf_-2F9XDT5In533Bw7oKuGIqZvOdBW7af6dY,3403
14
14
  claude_mpm/agents/agent-template.yaml,sha256=mRlz5Yd0SmknTeoJWgFkZXzEF5T7OmGBJGs2-KPT93k,1969
@@ -34,10 +34,11 @@ claude_mpm/agents/templates/ticketing-examples.md,sha256=T2bAR9yr4H8BN2LdgeieV7c
34
34
  claude_mpm/agents/templates/validation-templates.md,sha256=Y4_D7dphQaKigZWqKWvJ4jVu3N-eA5OOSr8f59Q0LUM,13148
35
35
  claude_mpm/cli/__init__.py,sha256=JU_sLmqtAoqAwSrCdOCbeFM4Z6-M6jNL8D-vGO4eZrI,4311
36
36
  claude_mpm/cli/__main__.py,sha256=KSy-J-vbTM2yXHOjsBJNZ60I2CJ2i5QP5zxsZV7-cjo,997
37
+ claude_mpm/cli/chrome_devtools_installer.py,sha256=efA_ZX1iR3oaJi3222079BQw6DEG8KYr2HVGtgVj2Gs,5637
37
38
  claude_mpm/cli/executor.py,sha256=sCm0VV9fjGJBQwn8pr7VayfGBd_J3Uta28T5r-5vZ5Q,10205
38
39
  claude_mpm/cli/helpers.py,sha256=CypEhw0tbNH6_GzVTaQdi4w7ThCWO43Ep92YbJzPR4I,3638
39
40
  claude_mpm/cli/parser.py,sha256=Vqx9n-6Xo1uNhXR4rThmgWpZXTr0nOtkgDf3oMS9b0g,5855
40
- claude_mpm/cli/startup.py,sha256=vtyljIrBhTidIUyEckX2_K4LAPr6z6Ak4GCVWn42TwA,50386
41
+ claude_mpm/cli/startup.py,sha256=LIFiGXsZ38BV05CHBQ3RJz0sLhV9u5Dmj6K8LCPZ3_8,58658
41
42
  claude_mpm/cli/startup_display.py,sha256=R_QIamjfdaY5o_VxpIeymyYj1Qde2B9hPXy1P-KmUKI,14972
42
43
  claude_mpm/cli/startup_logging.py,sha256=RTuyd6CbhiFQz7Z07LDDhK_ZAnZfuJ9B0NghVSntHFI,29390
43
44
  claude_mpm/cli/utils.py,sha256=FSMPftBZM8MeUyTtiB63Lz7oFOgkzwTetQs58RbRb_Q,8785
@@ -45,11 +46,9 @@ claude_mpm/cli/commands/__init__.py,sha256=-JkPmY_gq6ZZSyw1F9K0mc5CRXwZurVq1HXvx
45
46
  claude_mpm/cli/commands/agent_manager.py,sha256=8XracGTw8zkdXvsX14e36GNJwxqKkGMJhospMJyeNyE,56642
46
47
  claude_mpm/cli/commands/agent_source.py,sha256=NIBO_CvClxW7cMMp6J5VFac3fMyCbTT_lI3bZShwe3M,25513
47
48
  claude_mpm/cli/commands/agent_state_manager.py,sha256=vI4RzUbMqZTD4u_WsYBIP72rLJropk6271O2Qp8ftKw,13526
48
- claude_mpm/cli/commands/agents.py,sha256=owjmkV4-PAnGgQJX_XBlDZCo_QnO4I4j14y1S6z1tDA,107574
49
+ claude_mpm/cli/commands/agents.py,sha256=Tl_ictgSm_OIIf4zQAWNxRFlx7yhrGr8yicyqgY9I-I,106323
49
50
  claude_mpm/cli/commands/agents_cleanup.py,sha256=-azyvc5Z1kKZ7cjzW66pW9or4kcy-jOCNBhynuWoRpo,7381
50
- claude_mpm/cli/commands/agents_detect.py,sha256=Ml17bHNy5nIj2OTQv6zglPcVD2KIa1m0-6kP8SGuzzA,14653
51
51
  claude_mpm/cli/commands/agents_discover.py,sha256=GpGoILbtjhGO81lXGoLROH6ajFuGQ1INs2rGFVkgi-M,10969
52
- claude_mpm/cli/commands/agents_recommend.py,sha256=3b4uHueNeUAJiOHeeGWsra7TY7ymkLp-2B7uAZEFkrU,12005
53
52
  claude_mpm/cli/commands/aggregate.py,sha256=v5JzzoWf6Omc4DaWfx_3gm5EWiUmUp6ps3BdmNcwOaY,18196
54
53
  claude_mpm/cli/commands/analyze.py,sha256=NuSreG9PINgf_1_41adMT_sOXz-z695Zqjwef4OEc9w,19162
55
54
  claude_mpm/cli/commands/analyze_code.py,sha256=5FAoubjZbEO_GlErj3xNgNbJXBjhtqSOWE2FkhAzTaM,17256
@@ -92,7 +91,7 @@ claude_mpm/cli/commands/postmortem.py,sha256=kQhVop9rLgR1zvx8cKMsKIJVH13wHW3AC8t
92
91
  claude_mpm/cli/commands/run.py,sha256=NFrxb4skoVVFXETnaKCeSKDuqFxHkp4shqpkvdvPZPw,46430
93
92
  claude_mpm/cli/commands/search.py,sha256=alv6udvKcn-xkqeBlLuPRvfSDV1yxEX4n9mjjRT5uLM,16581
94
93
  claude_mpm/cli/commands/skill_source.py,sha256=UlEA7O3rGT14zmqifMclSXyDJvp7lDUBc1pbZ4qp_0k,22436
95
- claude_mpm/cli/commands/skills.py,sha256=9hShbkDrBguRAAYeuGuRfgupy74JCtJJQF9Fh55S2Ng,51559
94
+ claude_mpm/cli/commands/skills.py,sha256=x44DyfwuLNaUFos1QKgHDRTO4k536iKrUL3kwds9VR0,52062
96
95
  claude_mpm/cli/commands/summarize.py,sha256=1eb6i3IEZ3DqLNBT_HRzEygQ3NPHvrLOTdvQI0pURso,12460
97
96
  claude_mpm/cli/commands/tickets.py,sha256=kl2dklTBnG3Y4jUUJ_PcEVsTx4CtVJfkGWboWBx_mQM,21234
98
97
  claude_mpm/cli/commands/uninstall.py,sha256=KGlVG6veEs1efLVjrZ3wSty7e1zVR9wpt-VXQA1RzWw,5945
@@ -111,10 +110,10 @@ claude_mpm/cli/interactive/skills_wizard.py,sha256=9cuRyRGOGv36sQcEBPUqKLX9mWrcy
111
110
  claude_mpm/cli/parsers/__init__.py,sha256=B-p07lgtefapDHt0SZm7XkSBtXH51uegUWvoDcFtjhw,1084
112
111
  claude_mpm/cli/parsers/agent_manager_parser.py,sha256=TQEIm638ELM4X_AAGcn6WrJxlti9wFLfEkHjr-6AtZA,13761
113
112
  claude_mpm/cli/parsers/agent_source_parser.py,sha256=3IMbkK5DXlRLxCQtTlSPfTo2TmhyWeXpU8cKaXmZWJM,5076
114
- claude_mpm/cli/parsers/agents_parser.py,sha256=4Edl9vntg4L-o3epdGE0kcCag-NnY0bqfGZYo5oLT3w,20780
113
+ claude_mpm/cli/parsers/agents_parser.py,sha256=lJ_9M1IRHoNU9-WLXLqinxEmDk1rRL6EhweFsWBRHtU,20496
115
114
  claude_mpm/cli/parsers/analyze_code_parser.py,sha256=cpJSMFbc3mqB4qrMBIEZiikzPekC2IQX-cjt9U2fHW4,5356
116
115
  claude_mpm/cli/parsers/analyze_parser.py,sha256=E00Ao0zwzbJPchs_AJt-aoQ7LQEtJPXRCNQ6Piivb4o,3908
117
- claude_mpm/cli/parsers/auto_configure_parser.py,sha256=qE6fgv7SJ9ksOT1ZCv3bloed1dzXRuxSejnrY_7ZlM4,7642
116
+ claude_mpm/cli/parsers/auto_configure_parser.py,sha256=CZOk_nJZrNtRo8WnYWQKdfXywq6l6ZLMHU7U9hA7A_4,3699
118
117
  claude_mpm/cli/parsers/base_parser.py,sha256=qXEDo47KPBI2WVGacWh9TjDKrsSdWjbOaLsaX78AveM,19730
119
118
  claude_mpm/cli/parsers/config_parser.py,sha256=i8kv6XWhftzZlEBruAl58Fl6IcyeOb7QVkfPeEayjCk,6255
120
119
  claude_mpm/cli/parsers/configure_parser.py,sha256=t3cwAQX3BfljDDRJH3i0LplpRprw5jdKcI9Uy3M8xtE,4382
@@ -141,16 +140,12 @@ claude_mpm/cli_module/args.py,sha256=50_Y3AgMNeidtPjQ5-WZ1o-5Y7G2GAGQwMmllYjVScE
141
140
  claude_mpm/cli_module/commands.py,sha256=7ZzLm_R0wUkuYV1Hqe1BUDsP8b3BH33i5arkSEugm3U,7013
142
141
  claude_mpm/cli_module/migration_example.py,sha256=DtQ59RyoBD6r8FIfrjKXCQ8-xnUiOqP5McBiS6_W1Qc,5183
143
142
  claude_mpm/commands/__init__.py,sha256=paX5Ub5-UmRgiQ8UgKWIKwU2-RjLu67OmNJND-fVtjg,588
144
- claude_mpm/commands/mpm-agents-auto-configure.md,sha256=iX58nxLKFSIsFmWrm_SRqvxBCLG3O9AeZF6Iiiz34tU,7236
145
- claude_mpm/commands/mpm-agents-detect.md,sha256=9IwcevTP4Ma7ugNuRTARM_kbVp_6KKmVjO-3pZKL6uk,5111
146
- claude_mpm/commands/mpm-agents-list.md,sha256=zQOtU9U5jWHNlwn053yJC57Q330MkfkZVQ7PO8HDCMg,3828
147
- claude_mpm/commands/mpm-agents-recommend.md,sha256=SQvn4gdQp3Xv9vLVshUlAboIHuuefrHB3nZO0O8D8zw,7369
148
- claude_mpm/commands/mpm-config.md,sha256=PiOPqAwpqvYGTBd6GcQkCNLffLCo-pXMWErA5HWasHE,6822
143
+ claude_mpm/commands/mpm-config.md,sha256=AbXypKXMjqk_vSM9U-PGcQD1AsTD1BXfZxRxGMWUO24,6819
149
144
  claude_mpm/commands/mpm-doctor.md,sha256=vPQ7l1c5Yur6hfoOkUns0AnjHUBCDbxZ2j1lMrmBFjY,811
150
- claude_mpm/commands/mpm-help.md,sha256=Gfph7EjHlsbHW4Dp8tvfQywbc4H3ZsTtH84Pahx8uuk,7332
145
+ claude_mpm/commands/mpm-help.md,sha256=j-v1E8DsWN2TRwK6QvPzgz-0k3v8UPdK3yT086BBehU,5693
151
146
  claude_mpm/commands/mpm-init.md,sha256=q7ayvnnqT_V6UpodgP95AjJjvpJKdLyuDZdYt_FDpG4,20752
152
147
  claude_mpm/commands/mpm-monitor.md,sha256=p0zO62tAaiUOmb_sWxNybjPgD9ZdlPlHRMh58F-Io4c,12425
153
- claude_mpm/commands/mpm-organize.md,sha256=vjRKj8llBnQFPVASpkOu0uFOnyNve6Kgp2f7G2Ul2lI,10376
148
+ claude_mpm/commands/mpm-organize.md,sha256=8G06wZCalKVyyqC2J-WiD-lvQAaOCc3qksE3Ua5GMyc,18458
154
149
  claude_mpm/commands/mpm-postmortem.md,sha256=uC7TnwygS0ODv-yYB6I3ejM09f-iThHUjhmCAcziM_A,3814
155
150
  claude_mpm/commands/mpm-session-resume.md,sha256=KuVscndlgG4_siJ5NVhp341OjpJCsyNcUpDABizQp1A,12501
156
151
  claude_mpm/commands/mpm-status.md,sha256=vTpEfgckqpBRSb2IKeo_YJXt0RTc6tsEidIgaexMQL8,2147
@@ -255,7 +250,7 @@ claude_mpm/hooks/validation_hooks.py,sha256=i5uOaXifItwJfIdjjLCxAwrkKdkmo2Qa4qMc
255
250
  claude_mpm/hooks/claude_hooks/__init__.py,sha256=b4mud_g3S-3itHY_Dzpbb_SmdMEcJwtUU8fTcqpLqqs,130
256
251
  claude_mpm/hooks/claude_hooks/connection_pool.py,sha256=vpi-XbVf61GWhh85tHBzubbOgbJly_I-5-QmsleND2M,8658
257
252
  claude_mpm/hooks/claude_hooks/correlation_manager.py,sha256=3n-RxzqE8egG4max_NcpJgL9gzrBY6Ti529LrjleI1g,2033
258
- claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=iHJ9c24TK5jcq0bRWp5AMlRp97Pe7DLAWpj9ud-RJtw,36011
253
+ claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=4w1CDdKtLQwuyjillq8M1RdE2r9P7RGq1yRIMmjIY-Y,36273
259
254
  claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=7MdGUXsdFGYGN8VK1vx44Xk9TiJhhC-9vSAyEpl68-Q,21455
260
255
  claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=4lG3TlLVoVfTJipPj1X_ICUlS-KpnkbUp1U3oSq80Bw,2476
261
256
  claude_mpm/hooks/claude_hooks/installer.py,sha256=VbvVGMcrmCXQB3Pf9zOdjeGET2AFqbUDMHDy5KXuvz0,30463
@@ -290,7 +285,7 @@ claude_mpm/services/__init__.py,sha256=a9gM6IlUDHWPy_lFhkb5jpSuuooowACnYG25zit6B
290
285
  claude_mpm/services/agent_capabilities_service.py,sha256=uWSI7mTZvlJAYjDnyKUPczRX5uTXN0KgUp0_1J-Qsrs,10759
291
286
  claude_mpm/services/async_session_logger.py,sha256=u8yw3EAhOEvuZfky3Snb9JOaZ9TWQgznh08O0Zf4GfM,23881
292
287
  claude_mpm/services/claude_session_logger.py,sha256=c2SPLhAq0JaUIyCmg6RsylZ2upaaqlb88ETneuYo8O0,11162
293
- claude_mpm/services/command_deployment_service.py,sha256=l1YkXUX_1SiNRDwWBLvFz09qdMXOsCo5jhrXTL9d8Sc,15980
288
+ claude_mpm/services/command_deployment_service.py,sha256=GgSxRehQY-PR-yeztz9WP8w6cT5_8NO9bXfn0aTN1Lc,16685
294
289
  claude_mpm/services/command_handler_service.py,sha256=8iru6eRdQloXrGiE75E1zoUbD_Ajldu3sw17Yx772Lw,7280
295
290
  claude_mpm/services/event_aggregator.py,sha256=V_5Wln1RzozLMDZawIPl5gSjIN5KHniNPaaSP11Lihc,20251
296
291
  claude_mpm/services/exceptions.py,sha256=5lVZETr_6-xk0ItH7BTfYUiX5RlckS1e8ah_UalYG9c,26475
@@ -311,7 +306,7 @@ claude_mpm/services/self_upgrade_service.py,sha256=O5-uqjdt9BHt0bxLNzuYdzlwgtWF_
311
306
  claude_mpm/services/session_management_service.py,sha256=za_ljDawCJjOq5ezEdxw71MFFFFIbWlV6ujlWL3vImg,10723
312
307
  claude_mpm/services/session_manager.py,sha256=ddVdINaHzBol24KvFCLOyM5SuBG_-Vd8_iT2YTBlGiU,12328
313
308
  claude_mpm/services/skills_config.py,sha256=R9F3BV3BEVmjqlxBy2mZycH4cCH4Ieh3K1n_8w9a5zQ,18005
314
- claude_mpm/services/skills_deployer.py,sha256=7WCIGMzkbK4uM3_5h5nKl-xk9dYAm8rarLUOEK-l6dc,38171
309
+ claude_mpm/services/skills_deployer.py,sha256=ul_9ts74swTpvREeVVe9mxxs5lAcjgbytsEKGkMk5O8,40472
315
310
  claude_mpm/services/socketio_client_manager.py,sha256=cZjIsnoi2VPXFA-5pNhoz5Vv3qv0iuSTy510TgAJU4U,18179
316
311
  claude_mpm/services/socketio_server.py,sha256=yE14_4pHERXBC5L1WQCpIBHuy0tpklsUY_icyl-nLkg,3033
317
312
  claude_mpm/services/subprocess_launcher_service.py,sha256=lYSlg2G_oDAv1dHrOdHaOEIppDwisANCASuNFdp0WqY,11226
@@ -614,7 +609,7 @@ claude_mpm/services/shared/manager_base.py,sha256=kmjhpVqgfYC1N4YQnPAilCfdrSpAh9
614
609
  claude_mpm/services/shared/service_factory.py,sha256=9yvnD62urrNQCGmtk_3OcR5tVUCnoS6wHkaI5PK34mg,9891
615
610
  claude_mpm/services/skills/__init__.py,sha256=X1fPRCGZjteLd35HlhWv2M6tAJ_WbYrEv84kbaqBAiU,742
616
611
  claude_mpm/services/skills/git_skill_source_manager.py,sha256=9icey8hX7S-yzipdyditVDIfjJLrB8ryERNgsZvX57Q,45594
617
- claude_mpm/services/skills/selective_skill_deployer.py,sha256=yEpNDP72UrA0tlgoEWUJsF5J3FDGc66JiLgbifG5tUE,7739
612
+ claude_mpm/services/skills/selective_skill_deployer.py,sha256=SnurkAWLgfnpaoBTldBSaqLr15BCdudikgYegThf3cY,23917
618
613
  claude_mpm/services/skills/skill_discovery_service.py,sha256=riy0PTnJS8e5R2ai8y1KPhBIR7SxlYIa9bnI9YccRMQ,20247
619
614
  claude_mpm/services/skills/skill_to_agent_mapper.py,sha256=4PRwcSDSNGS55lg4t-VmBK2ottE_cGFq1zsvjiumAlI,14847
620
615
  claude_mpm/services/socketio/__init__.py,sha256=PS-2twllga-2mhSfKdu4MgpikfKp_730gMLAqU_9YX4,556
@@ -770,10 +765,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
770
765
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
771
766
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
772
767
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
773
- claude_mpm-5.4.14.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
774
- claude_mpm-5.4.14.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
775
- claude_mpm-5.4.14.dist-info/METADATA,sha256=5W_Lite1sN_D4phfbAkECKpyjzam9krrbTvSuHyui7c,37773
776
- claude_mpm-5.4.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
777
- claude_mpm-5.4.14.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
778
- claude_mpm-5.4.14.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
779
- claude_mpm-5.4.14.dist-info/RECORD,,
768
+ claude_mpm-5.4.21.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
769
+ claude_mpm-5.4.21.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
770
+ claude_mpm-5.4.21.dist-info/METADATA,sha256=WDxo6CLrRz8nmqTS1wOQ6lPgrk-7AV7rMa4Tia_riAg,37773
771
+ claude_mpm-5.4.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
772
+ claude_mpm-5.4.21.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
773
+ claude_mpm-5.4.21.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
774
+ claude_mpm-5.4.21.dist-info/RECORD,,
@@ -1,380 +0,0 @@
1
- """
2
- Agents Detect CLI Command for Claude MPM Framework
3
- ===================================================
4
-
5
- WHY: This module provides a CLI interface for detecting project toolchain
6
- without making any changes. Useful for debugging and verification of the
7
- toolchain detection system.
8
-
9
- DESIGN DECISION: Focused solely on detection and display, with no side effects.
10
- Supports multiple output formats for different use cases (human-readable,
11
- JSON for scripting).
12
-
13
- Part of TSK-0054: Auto-Configuration Feature - Phase 5
14
- """
15
-
16
- import json
17
- from pathlib import Path
18
- from typing import Optional
19
-
20
- try:
21
- from rich.console import Console
22
- from rich.table import Table
23
-
24
- RICH_AVAILABLE = True
25
- except ImportError:
26
- RICH_AVAILABLE = False
27
-
28
- from ...services.project.toolchain_analyzer import ToolchainAnalyzerService
29
- from ..shared import BaseCommand, CommandResult
30
-
31
-
32
- class AgentsDetectCommand(BaseCommand):
33
- """
34
- Handle agents detect CLI command.
35
-
36
- This command analyzes the project to detect languages, frameworks,
37
- and deployment targets without making any configuration changes.
38
- """
39
-
40
- def __init__(self):
41
- """Initialize the agents detect command."""
42
- super().__init__("agents-detect")
43
- self.console = Console() if RICH_AVAILABLE else None
44
- self._toolchain_analyzer = None
45
-
46
- @property
47
- def toolchain_analyzer(self) -> ToolchainAnalyzerService:
48
- """Get toolchain analyzer (lazy loaded)."""
49
- if self._toolchain_analyzer is None:
50
- self._toolchain_analyzer = ToolchainAnalyzerService()
51
- return self._toolchain_analyzer
52
-
53
- def validate_args(self, args) -> Optional[str]:
54
- """Validate command arguments."""
55
- # Validate project path
56
- project_path = (
57
- Path(args.project_path)
58
- if hasattr(args, "project_path") and args.project_path
59
- else Path.cwd()
60
- )
61
- if not project_path.exists():
62
- return f"Project path does not exist: {project_path}"
63
-
64
- return None
65
-
66
- def run(self, args) -> CommandResult:
67
- """
68
- Execute agents detect command.
69
-
70
- Returns:
71
- CommandResult with success status and exit code
72
- """
73
- try:
74
- # Setup logging
75
- self.setup_logging(args)
76
-
77
- # Validate arguments
78
- error = self.validate_args(args)
79
- if error:
80
- return CommandResult.error_result(error)
81
-
82
- # Get configuration options
83
- project_path = (
84
- Path(args.project_path)
85
- if hasattr(args, "project_path") and args.project_path
86
- else Path.cwd()
87
- )
88
- json_output = args.json if hasattr(args, "json") and args.json else False
89
- verbose = (
90
- args.verbose if hasattr(args, "verbose") and args.verbose else False
91
- )
92
-
93
- # Analyze toolchain
94
- if self.console and not json_output:
95
- with self.console.status("[bold green]Analyzing project toolchain..."):
96
- analysis = self.toolchain_analyzer.analyze_project(
97
- str(project_path)
98
- )
99
- else:
100
- analysis = self.toolchain_analyzer.analyze_project(str(project_path))
101
-
102
- # Output results
103
- if json_output:
104
- return self._output_json(analysis, verbose)
105
- return self._display_results(analysis, verbose)
106
-
107
- except KeyboardInterrupt:
108
- if self.console:
109
- self.console.print("\n\n❌ Operation cancelled by user")
110
- else:
111
- print("\n\nOperation cancelled by user")
112
- return CommandResult.error_result("Operation cancelled", exit_code=130)
113
-
114
- except Exception as e:
115
- self.logger.exception("Toolchain detection failed")
116
- error_msg = f"Toolchain detection failed: {e!s}"
117
- if self.console:
118
- self.console.print(f"\n❌ {error_msg}")
119
- else:
120
- print(f"\n{error_msg}")
121
- return CommandResult.error_result(error_msg)
122
-
123
- def _display_results(self, analysis, verbose: bool) -> CommandResult:
124
- """Display toolchain analysis results with Rich formatting."""
125
- if not self.console:
126
- return self._display_results_plain(analysis, verbose)
127
-
128
- # Display header
129
- self.console.print("\n📊 Project Toolchain Analysis", style="bold blue")
130
- self.console.print(f"Project: {analysis.project_path}\n")
131
-
132
- # Display detected languages
133
- if analysis.languages:
134
- self.console.print("🔤 Detected Languages:", style="bold green")
135
- lang_table = Table(show_header=True, header_style="bold")
136
- lang_table.add_column("Language", style="cyan")
137
- lang_table.add_column("Version", style="yellow")
138
- lang_table.add_column("Confidence", style="green")
139
- if verbose:
140
- lang_table.add_column("Evidence", style="dim")
141
-
142
- for lang in analysis.languages:
143
- confidence_pct = int(lang.confidence * 100)
144
- bar = "█" * (confidence_pct // 10) + "░" * (10 - confidence_pct // 10)
145
- confidence_str = f"{bar} {confidence_pct}%"
146
-
147
- if verbose:
148
- evidence = ", ".join(lang.evidence[:3]) # First 3 items
149
- if len(lang.evidence) > 3:
150
- evidence += f" (+{len(lang.evidence) - 3} more)"
151
- lang_table.add_row(
152
- lang.language,
153
- lang.version or "Unknown",
154
- confidence_str,
155
- evidence,
156
- )
157
- else:
158
- lang_table.add_row(
159
- lang.language, lang.version or "Unknown", confidence_str
160
- )
161
-
162
- self.console.print(lang_table)
163
- else:
164
- self.console.print(" No languages detected", style="yellow")
165
-
166
- # Display detected frameworks
167
- if analysis.frameworks:
168
- self.console.print("\n🏗️ Detected Frameworks:", style="bold green")
169
- fw_table = Table(show_header=True, header_style="bold")
170
- fw_table.add_column("Framework", style="cyan")
171
- fw_table.add_column("Version", style="yellow")
172
- fw_table.add_column("Category", style="magenta")
173
- fw_table.add_column("Confidence", style="green")
174
-
175
- for fw in analysis.frameworks:
176
- confidence_pct = int(fw.confidence * 100)
177
- bar = "█" * (confidence_pct // 10) + "░" * (10 - confidence_pct // 10)
178
- confidence_str = f"{bar} {confidence_pct}%"
179
-
180
- fw_table.add_row(
181
- fw.name,
182
- fw.version or "Unknown",
183
- (
184
- fw.category.value
185
- if hasattr(fw.category, "value")
186
- else str(fw.category)
187
- ),
188
- confidence_str,
189
- )
190
-
191
- self.console.print(fw_table)
192
- else:
193
- self.console.print("\n No frameworks detected", style="yellow")
194
-
195
- # Display deployment targets
196
- if analysis.deployment_targets:
197
- self.console.print("\n🚀 Deployment Targets:", style="bold green")
198
- dt_table = Table(show_header=True, header_style="bold")
199
- dt_table.add_column("Target", style="cyan")
200
- dt_table.add_column("Confidence", style="green")
201
- if verbose:
202
- dt_table.add_column("Evidence", style="dim")
203
-
204
- for target in analysis.deployment_targets:
205
- confidence_pct = int(target.confidence * 100)
206
- bar = "█" * (confidence_pct // 10) + "░" * (10 - confidence_pct // 10)
207
- confidence_str = f"{bar} {confidence_pct}%"
208
-
209
- if verbose:
210
- evidence = ", ".join(target.evidence[:3])
211
- if len(target.evidence) > 3:
212
- evidence += f" (+{len(target.evidence) - 3} more)"
213
- dt_table.add_row(
214
- (
215
- target.target_type.value
216
- if hasattr(target.target_type, "value")
217
- else str(target.target_type)
218
- ),
219
- confidence_str,
220
- evidence,
221
- )
222
- else:
223
- dt_table.add_row(
224
- (
225
- target.target_type.value
226
- if hasattr(target.target_type, "value")
227
- else str(target.target_type)
228
- ),
229
- confidence_str,
230
- )
231
-
232
- self.console.print(dt_table)
233
- else:
234
- self.console.print("\n No deployment targets detected", style="yellow")
235
-
236
- # Display all components summary
237
- if analysis.components:
238
- self.console.print("\n📦 All Components:", style="bold blue")
239
- comp_table = Table(show_header=True, header_style="bold")
240
- comp_table.add_column("Type", style="cyan")
241
- comp_table.add_column("Name", style="yellow")
242
- comp_table.add_column("Version", style="magenta")
243
- comp_table.add_column("Confidence", style="green")
244
-
245
- for comp in analysis.components:
246
- confidence_pct = int(comp.confidence * 100)
247
- bar = "█" * (confidence_pct // 10) + "░" * (10 - confidence_pct // 10)
248
- confidence_str = f"{bar} {confidence_pct}%"
249
-
250
- comp_table.add_row(
251
- comp.type.value if hasattr(comp.type, "value") else str(comp.type),
252
- comp.name or "-",
253
- comp.version or "Unknown",
254
- confidence_str,
255
- )
256
-
257
- self.console.print(comp_table)
258
-
259
- # Summary
260
- self.console.print(
261
- f"\n✅ Analysis complete: {len(analysis.languages)} language(s), "
262
- f"{len(analysis.frameworks)} framework(s), "
263
- f"{len(analysis.deployment_targets)} deployment target(s)",
264
- style="bold green",
265
- )
266
-
267
- return CommandResult.success_result()
268
-
269
- def _display_results_plain(self, analysis, verbose: bool) -> CommandResult:
270
- """Display results in plain text (fallback)."""
271
- print("\n📊 Project Toolchain Analysis")
272
- print(f"Project: {analysis.project_path}\n")
273
-
274
- # Languages
275
- if analysis.languages:
276
- print("Detected Languages:")
277
- for lang in analysis.languages:
278
- confidence_pct = int(lang.confidence * 100)
279
- print(
280
- f" - {lang.language} {lang.version or 'Unknown'} ({confidence_pct}%)"
281
- )
282
- if verbose:
283
- print(f" Evidence: {', '.join(lang.evidence[:5])}")
284
- else:
285
- print("No languages detected")
286
-
287
- # Frameworks
288
- if analysis.frameworks:
289
- print("\nDetected Frameworks:")
290
- for fw in analysis.frameworks:
291
- confidence_pct = int(fw.confidence * 100)
292
- print(
293
- f" - {fw.name} {fw.version or 'Unknown'} ({fw.category}) ({confidence_pct}%)"
294
- )
295
- else:
296
- print("\nNo frameworks detected")
297
-
298
- # Deployment targets
299
- if analysis.deployment_targets:
300
- print("\nDeployment Targets:")
301
- for target in analysis.deployment_targets:
302
- confidence_pct = int(target.confidence * 100)
303
- print(f" - {target.target_type} ({confidence_pct}%)")
304
- if verbose:
305
- print(f" Evidence: {', '.join(target.evidence[:5])}")
306
- else:
307
- print("\nNo deployment targets detected")
308
-
309
- print(
310
- f"\nAnalysis complete: {len(analysis.languages)} language(s), "
311
- f"{len(analysis.frameworks)} framework(s), "
312
- f"{len(analysis.deployment_targets)} deployment target(s)"
313
- )
314
-
315
- return CommandResult.success_result()
316
-
317
- def _output_json(self, analysis, verbose: bool) -> CommandResult:
318
- """Output toolchain analysis as JSON."""
319
- output = {
320
- "project_path": analysis.project_path,
321
- "analysis_time": analysis.analysis_time,
322
- "languages": [
323
- {
324
- "language": lang.language,
325
- "version": lang.version,
326
- "confidence": lang.confidence,
327
- "evidence": lang.evidence if verbose else None,
328
- }
329
- for lang in analysis.languages
330
- ],
331
- "frameworks": [
332
- {
333
- "name": fw.name,
334
- "version": fw.version,
335
- "category": (
336
- fw.category.value
337
- if hasattr(fw.category, "value")
338
- else str(fw.category)
339
- ),
340
- "confidence": fw.confidence,
341
- "config_file": fw.config_file,
342
- }
343
- for fw in analysis.frameworks
344
- ],
345
- "deployment_targets": [
346
- {
347
- "target_type": (
348
- target.target_type.value
349
- if hasattr(target.target_type, "value")
350
- else str(target.target_type)
351
- ),
352
- "confidence": target.confidence,
353
- "evidence": target.evidence if verbose else None,
354
- }
355
- for target in analysis.deployment_targets
356
- ],
357
- "components": [
358
- {
359
- "type": (
360
- comp.type.value
361
- if hasattr(comp.type, "value")
362
- else str(comp.type)
363
- ),
364
- "name": comp.name,
365
- "version": comp.version,
366
- "confidence": comp.confidence,
367
- }
368
- for comp in analysis.components
369
- ],
370
- }
371
-
372
- # Remove None values if not verbose
373
- if not verbose:
374
- for lang in output["languages"]:
375
- lang.pop("evidence", None)
376
- for target in output["deployment_targets"]:
377
- target.pop("evidence", None)
378
-
379
- print(json.dumps(output, indent=2))
380
- return CommandResult.success_result(data=output)