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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +127 -21
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/agents.py +0 -31
- claude_mpm/cli/commands/skills.py +193 -187
- claude_mpm/cli/parsers/agents_parser.py +0 -9
- claude_mpm/cli/parsers/auto_configure_parser.py +0 -138
- claude_mpm/cli/startup.py +237 -25
- claude_mpm/commands/mpm-config.md +1 -2
- claude_mpm/commands/mpm-help.md +14 -95
- claude_mpm/commands/mpm-organize.md +350 -153
- claude_mpm/hooks/claude_hooks/event_handlers.py +5 -0
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/command_deployment_service.py +10 -0
- claude_mpm/services/skills/selective_skill_deployer.py +475 -1
- claude_mpm/services/skills_deployer.py +62 -6
- {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/METADATA +1 -1
- {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/RECORD +23 -28
- claude_mpm/cli/commands/agents_detect.py +0 -380
- claude_mpm/cli/commands/agents_recommend.py +0 -309
- claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
- claude_mpm/commands/mpm-agents-detect.md +0 -177
- claude_mpm/commands/mpm-agents-list.md +0 -131
- claude_mpm/commands/mpm-agents-recommend.md +0 -223
- {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.14.dist-info → claude_mpm-5.4.21.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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-
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
774
|
-
claude_mpm-5.4.
|
|
775
|
-
claude_mpm-5.4.
|
|
776
|
-
claude_mpm-5.4.
|
|
777
|
-
claude_mpm-5.4.
|
|
778
|
-
claude_mpm-5.4.
|
|
779
|
-
claude_mpm-5.4.
|
|
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)
|