hatch-xclam 0.7.1.dev3__py3-none-any.whl → 0.8.0.dev1__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.
- hatch/__init__.py +1 -1
- hatch/cli/__init__.py +71 -0
- hatch/cli/__main__.py +1035 -0
- hatch/cli/cli_env.py +865 -0
- hatch/cli/cli_mcp.py +1965 -0
- hatch/cli/cli_package.py +566 -0
- hatch/cli/cli_system.py +136 -0
- hatch/cli/cli_utils.py +1289 -0
- hatch/cli_hatch.py +160 -2838
- hatch/mcp_host_config/__init__.py +10 -10
- hatch/mcp_host_config/adapters/__init__.py +34 -0
- hatch/mcp_host_config/adapters/base.py +170 -0
- hatch/mcp_host_config/adapters/claude.py +105 -0
- hatch/mcp_host_config/adapters/codex.py +104 -0
- hatch/mcp_host_config/adapters/cursor.py +83 -0
- hatch/mcp_host_config/adapters/gemini.py +75 -0
- hatch/mcp_host_config/adapters/kiro.py +78 -0
- hatch/mcp_host_config/adapters/lmstudio.py +79 -0
- hatch/mcp_host_config/adapters/registry.py +149 -0
- hatch/mcp_host_config/adapters/vscode.py +83 -0
- hatch/mcp_host_config/backup.py +5 -3
- hatch/mcp_host_config/fields.py +126 -0
- hatch/mcp_host_config/models.py +161 -456
- hatch/mcp_host_config/reporting.py +57 -16
- hatch/mcp_host_config/strategies.py +155 -87
- hatch/template_generator.py +1 -1
- {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/METADATA +3 -2
- {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/RECORD +52 -43
- {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/WHEEL +1 -1
- hatch_xclam-0.8.0.dev1.dist-info/entry_points.txt +2 -0
- tests/cli_test_utils.py +280 -0
- tests/integration/cli/__init__.py +14 -0
- tests/integration/cli/test_cli_reporter_integration.py +2439 -0
- tests/integration/mcp/__init__.py +0 -0
- tests/integration/mcp/test_adapter_serialization.py +173 -0
- tests/regression/cli/__init__.py +16 -0
- tests/regression/cli/test_color_logic.py +268 -0
- tests/regression/cli/test_consequence_type.py +298 -0
- tests/regression/cli/test_error_formatting.py +328 -0
- tests/regression/cli/test_result_reporter.py +586 -0
- tests/regression/cli/test_table_formatter.py +211 -0
- tests/regression/mcp/__init__.py +0 -0
- tests/regression/mcp/test_field_filtering.py +162 -0
- tests/test_cli_version.py +7 -5
- tests/test_data/fixtures/cli_reporter_fixtures.py +184 -0
- tests/unit/__init__.py +0 -0
- tests/unit/mcp/__init__.py +0 -0
- tests/unit/mcp/test_adapter_protocol.py +138 -0
- tests/unit/mcp/test_adapter_registry.py +158 -0
- tests/unit/mcp/test_config_model.py +146 -0
- hatch_xclam-0.7.1.dev3.dist-info/entry_points.txt +0 -2
- tests/integration/test_mcp_kiro_integration.py +0 -153
- tests/regression/test_mcp_codex_backup_integration.py +0 -162
- tests/regression/test_mcp_codex_host_strategy.py +0 -163
- tests/regression/test_mcp_codex_model_validation.py +0 -117
- tests/regression/test_mcp_kiro_backup_integration.py +0 -241
- tests/regression/test_mcp_kiro_cli_integration.py +0 -141
- tests/regression/test_mcp_kiro_decorator_registration.py +0 -71
- tests/regression/test_mcp_kiro_host_strategy.py +0 -214
- tests/regression/test_mcp_kiro_model_validation.py +0 -116
- tests/regression/test_mcp_kiro_omni_conversion.py +0 -104
- tests/test_mcp_atomic_operations.py +0 -276
- tests/test_mcp_backup_integration.py +0 -308
- tests/test_mcp_cli_all_host_specific_args.py +0 -496
- tests/test_mcp_cli_backup_management.py +0 -295
- tests/test_mcp_cli_direct_management.py +0 -456
- tests/test_mcp_cli_discovery_listing.py +0 -582
- tests/test_mcp_cli_host_config_integration.py +0 -823
- tests/test_mcp_cli_package_management.py +0 -360
- tests/test_mcp_cli_partial_updates.py +0 -859
- tests/test_mcp_environment_integration.py +0 -520
- tests/test_mcp_host_config_backup.py +0 -257
- tests/test_mcp_host_configuration_manager.py +0 -331
- tests/test_mcp_host_registry_decorator.py +0 -348
- tests/test_mcp_pydantic_architecture_v4.py +0 -603
- tests/test_mcp_server_config_models.py +0 -242
- tests/test_mcp_server_config_type_field.py +0 -221
- tests/test_mcp_sync_functionality.py +0 -316
- tests/test_mcp_user_feedback_reporting.py +0 -359
- {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/licenses/LICENSE +0 -0
- {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/top_level.txt +0 -0
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
hatch/__init__.py,sha256=
|
|
2
|
-
hatch/cli_hatch.py,sha256=
|
|
1
|
+
hatch/__init__.py,sha256=BNOGa-LhLD_OIejkcmE-VkOWd2CuyGYbdmot5p6I5CQ,588
|
|
2
|
+
hatch/cli_hatch.py,sha256=2Ha3Ig_1ajPgSXRVLnMP-Uwg1ypeoGk5nnAGbZf5v3I,4508
|
|
3
3
|
hatch/environment_manager.py,sha256=9R9PJYPKQLmWeGXBrOzXxty20la33LgCCYY8o2aMFBQ,60757
|
|
4
4
|
hatch/package_loader.py,sha256=Sa2JIoio1QlMT2tOGwZhC6pFJIs419cYyoodzyaTDl4,11269
|
|
5
5
|
hatch/python_environment_manager.py,sha256=guU3zz4_WG3ptuX_ATGCRIi_fDxNHlaQtMv3kiRSo8k,28894
|
|
6
6
|
hatch/registry_explorer.py,sha256=XAHUUYNUtUnHeQc4J3HInzzpZBXuYJmCYKIEWzG-dDM,6636
|
|
7
7
|
hatch/registry_retriever.py,sha256=e-6F_QcPVRvZfi9IxTAaWYxdE9qGZu0m8hhII1pVvM0,14524
|
|
8
|
-
hatch/template_generator.py,sha256=
|
|
8
|
+
hatch/template_generator.py,sha256=o3V4_NracxKx1-MdKTydRhndak5xY4jP_D2Hsu3H3Jw,5475
|
|
9
|
+
hatch/cli/__init__.py,sha256=VA9MzdqANyIVHDragQVS-sLdo03Id7eNWeo8wSMG7Ww,2148
|
|
10
|
+
hatch/cli/__main__.py,sha256=_lz4C2N-KC1XgnFPy1ErmmDtDMRdGqgbLxf6GidFOck,36392
|
|
11
|
+
hatch/cli/cli_env.py,sha256=BiOt8U-uT1LOlTDas7N-e1kBx18IZNpuOLe9ZNRhK5Y,30820
|
|
12
|
+
hatch/cli/cli_mcp.py,sha256=atKPMwAGruyA_TzoZ589yoi1jgbGb6_Hg4duHy-jpqQ,77559
|
|
13
|
+
hatch/cli/cli_package.py,sha256=Npt8xA_Hk3Fai_x-N_Gk7WcwAvivubxOHPheLq_PZEw,20724
|
|
14
|
+
hatch/cli/cli_system.py,sha256=p-QSWqZkb9pd4NxzM2bRjFWHVTSBP04JHwOo5xEk36o,4414
|
|
15
|
+
hatch/cli/cli_utils.py,sha256=a7gT-M3BHzkrjzvHDilgpAjPIL7v4eOJTT4BBKUwMRc,44347
|
|
9
16
|
hatch/installers/__init__.py,sha256=THz3NGO9lxFicFooY5HYuxH5u_kIrNhJkzsJnNI5Z3g,1190
|
|
10
17
|
hatch/installers/dependency_installation_orchestrator.py,sha256=-K8PdI8BOcAhkwDmlDoH7U2T5pGIsAySbll25e8QVBo,30221
|
|
11
18
|
hatch/installers/docker_installer.py,sha256=j4IJUczIHGzpCldszUdrmtONpqCtktPoQE9XY8PWUsY,21537
|
|
@@ -15,40 +22,34 @@ hatch/installers/installer_base.py,sha256=mId6Q_DLOQPZriq3wu3BCU-ckouom3EZgbWJQq
|
|
|
15
22
|
hatch/installers/python_installer.py,sha256=MS9Q8wKjMAy7MEWk7zcAAiFgN0KzOVJFmMzXt1MSH8g,13632
|
|
16
23
|
hatch/installers/registry.py,sha256=ZOEEMJy_kL5LVj5Mf7s1_CIovDnUVag6nB01dEU9Xeg,6831
|
|
17
24
|
hatch/installers/system_installer.py,sha256=bdrmw3I9g2EU2E94-4vtJj01RhmekX9GxylU1RPT3Lk,22869
|
|
18
|
-
hatch/mcp_host_config/__init__.py,sha256
|
|
19
|
-
hatch/mcp_host_config/backup.py,sha256=
|
|
25
|
+
hatch/mcp_host_config/__init__.py,sha256=-nBBhtbC_TbV8Mk6nBJGk_jSH8IIbL3Ij0PJazt7gFs,1754
|
|
26
|
+
hatch/mcp_host_config/backup.py,sha256=GV-QdZhfgbSEJ5tnFuFrVYKF2_6FId3r92e7_6Eecs4,17981
|
|
27
|
+
hatch/mcp_host_config/fields.py,sha256=NU69E8Cl07EVs6YtcD8wE9dVc-gsww3cNSvR4UguqIY,4836
|
|
20
28
|
hatch/mcp_host_config/host_management.py,sha256=sXyGluFQpfXKggxAVvV9riGRis29JnoEM2dTWSIwb24,23905
|
|
21
|
-
hatch/mcp_host_config/models.py,sha256=
|
|
22
|
-
hatch/mcp_host_config/reporting.py,sha256=
|
|
23
|
-
hatch/mcp_host_config/strategies.py,sha256=
|
|
24
|
-
|
|
29
|
+
hatch/mcp_host_config/models.py,sha256=v9u227n3Xxgsgyx9DAGHffVxeVA7VjPaaCbanlepZZs,18771
|
|
30
|
+
hatch/mcp_host_config/reporting.py,sha256=Zd8cb_PgyldcCFwZ0t1RirZsqK5v5fgmtUmVbJ8vHjM,8312
|
|
31
|
+
hatch/mcp_host_config/strategies.py,sha256=g8t6hbbXcKQ0hf9_eSZIxHnu7nrEij2KHW0v1TKFa5U,32593
|
|
32
|
+
hatch/mcp_host_config/adapters/__init__.py,sha256=XLk7SOPzBd2aeWHjGaTLUmvYZCNwOYcg8RtKK2jdfyo,1184
|
|
33
|
+
hatch/mcp_host_config/adapters/base.py,sha256=rDSpUx2t_Uj2FtTDXWMdtnSuWBzksF5NmOXT1N7Jqis,5835
|
|
34
|
+
hatch/mcp_host_config/adapters/claude.py,sha256=Knlq7HP2kEJnH2ESsH4fE6fBktEtqe6TX4twsrPx-7U,3746
|
|
35
|
+
hatch/mcp_host_config/adapters/codex.py,sha256=FSEIggq9bHdK_5ueqegQSZ6od0JEuCTQkAJ15eMyVb0,3609
|
|
36
|
+
hatch/mcp_host_config/adapters/cursor.py,sha256=HyykEmaiqQuCgtO41qaC_6niSiwuY8BaDGy354r2D08,2970
|
|
37
|
+
hatch/mcp_host_config/adapters/gemini.py,sha256=zwsSTha4W1Ly89cNskd7qQMzUh3hsqKmzWn2EeWIUHI,2742
|
|
38
|
+
hatch/mcp_host_config/adapters/kiro.py,sha256=-IXlN01NTB_OWksSQuPNHbYTuBk1Kpl1mqxUVhJDuTE,2625
|
|
39
|
+
hatch/mcp_host_config/adapters/lmstudio.py,sha256=3ENs-pDGTOeKFalV8lE7m5e8CYPBFtrsADpf9Fm05Cw,2840
|
|
40
|
+
hatch/mcp_host_config/adapters/registry.py,sha256=Lbm9OcWQuWCUQoCkqndDhldug9O9aGtK3X68ZA4MwXY,4981
|
|
41
|
+
hatch/mcp_host_config/adapters/vscode.py,sha256=tdnVfxJn-nURaHoO6zgCDOfQXdWznh2eHI5oPiLK-Do,2966
|
|
42
|
+
hatch_xclam-0.8.0.dev1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
25
43
|
tests/__init__.py,sha256=4I3aQWv143Y1QY_nRIBWnY9MIL-aoQOJuVlpoPQz24E,53
|
|
44
|
+
tests/cli_test_utils.py,sha256=34-GWuv8Rf07DhXL01SpP-oTD2fWupRNKrLLHr-zdXo,9226
|
|
26
45
|
tests/run_environment_tests.py,sha256=bWCr8UsPgU80SM8f_VSi0TCwDI6JNqZpvZ2W9-b2Lqk,7302
|
|
27
|
-
tests/test_cli_version.py,sha256=
|
|
46
|
+
tests/test_cli_version.py,sha256=FXW3KXXNq3LFq58hqDaQ9ormEc4SKcKGxSWFt5oMilI,4904
|
|
28
47
|
tests/test_data_utils.py,sha256=ROexE3H4Cjk8maR-r6x8s5507d0vWF5xJteO_YN78SU,21876
|
|
29
48
|
tests/test_dependency_orchestrator_consent.py,sha256=lA9Qu-3dFdXKmU8mzOS0tjM8j0yy9qMQXJJcgEoy12g,12652
|
|
30
49
|
tests/test_docker_installer.py,sha256=pcWev4fGf1p-pR5T8tDswGVZqIprC86puLEl6t8yY2w,22305
|
|
31
50
|
tests/test_env_manip.py,sha256=f3LjBX0y0wzTDjc52QDan3Fgcgtld7CvuzH5gYKxGhs,47941
|
|
32
51
|
tests/test_hatch_installer.py,sha256=qHCEcKpbe0fHvkzib2rcUJUw1Z-PCRBBJhbjoyOYiVM,8231
|
|
33
52
|
tests/test_installer_base.py,sha256=0xZiPDMf8LeFJs2SmnYhbIgL7mgvG_HKwL1myQovEZI,11818
|
|
34
|
-
tests/test_mcp_atomic_operations.py,sha256=QmwUDRNZUz6b2i50yRAMBntRDaMMYZt6flHFJfVkzNE,10563
|
|
35
|
-
tests/test_mcp_backup_integration.py,sha256=Auw6Bx1EXGwmCA-mRIy31DRLuRWyV33eB7GJiOvIPXQ,12360
|
|
36
|
-
tests/test_mcp_cli_all_host_specific_args.py,sha256=hvXUetFyoZFtHsEjpzZ0GNdEuvci3Hv8P8thVjBPm-A,18748
|
|
37
|
-
tests/test_mcp_cli_backup_management.py,sha256=GlUUNu5K1w8S2jTQ6YISp5KeXH5c-H9F0lJX2SG0JWM,14019
|
|
38
|
-
tests/test_mcp_cli_direct_management.py,sha256=7GRwHXezmImCUfpHhVjvSkGfT-OBi1tMMLgExMXjals,22184
|
|
39
|
-
tests/test_mcp_cli_discovery_listing.py,sha256=kdrCU6POLyGW9ejowNV-dUVDFVseMd_vibvgIDjZUCM,26595
|
|
40
|
-
tests/test_mcp_cli_host_config_integration.py,sha256=dD6maHP0wHWnFZwxJ5LgSK1GsrYqB4WdicZkotqIANo,32512
|
|
41
|
-
tests/test_mcp_cli_package_management.py,sha256=YFMhyh3dueel1f2R5_VMNr9AewDmVrqGbU1kj5bhdeo,14590
|
|
42
|
-
tests/test_mcp_cli_partial_updates.py,sha256=zbzW_TfmQz7umzMdGkGmRwzstWM0bwCf0OzTscMv86Q,35785
|
|
43
|
-
tests/test_mcp_environment_integration.py,sha256=_VaAaHH-CyA1p0o3mc21x7QuAnLGcPF0JV2Q5ajs2Ss,23098
|
|
44
|
-
tests/test_mcp_host_config_backup.py,sha256=HiavPCfXRv3gCg3BZ7xiAwHREh0Kr7b5pDMGALnU_Zw,10675
|
|
45
|
-
tests/test_mcp_host_configuration_manager.py,sha256=TGbdPY4IRhwZtn6QwZ665Tjfja3PLYgX9N6w2JZy1BY,12248
|
|
46
|
-
tests/test_mcp_host_registry_decorator.py,sha256=RfluDYDan252HWxlRmjRY8j6ZVdNmomLwmW3L5whe8A,14038
|
|
47
|
-
tests/test_mcp_pydantic_architecture_v4.py,sha256=cVMC2EPLn6eG52B4UeOdD1j6gF93o3MOm_J-dDBx0N8,21334
|
|
48
|
-
tests/test_mcp_server_config_models.py,sha256=zxMsVmUTtpt57ffK7Pz2QRQtSdSeiVw8x77GGa_1yHM,9595
|
|
49
|
-
tests/test_mcp_server_config_type_field.py,sha256=jix0Y_5DV5wAxAooZzPZiNXXfLzH7poqwG5TVK64H-g,7748
|
|
50
|
-
tests/test_mcp_sync_functionality.py,sha256=7K16gdJfI74E8ngQn12YtZZvGHzqBUmbGflgjL_hyMA,12960
|
|
51
|
-
tests/test_mcp_user_feedback_reporting.py,sha256=k_pg4vuWSO7V50TqG8NlW4U6xur939nUpANSY7WC3rY,12339
|
|
52
53
|
tests/test_non_tty_integration.py,sha256=TrDOS64tmGSpBHIAfZh3FGCIcrcZmGv0X5zk777up4c,10981
|
|
53
54
|
tests/test_online_package_loader.py,sha256=KAGa1e9B1AZ4f0ZUXI8DAZ99ps3Y4uCC5rwB5CNJj14,9214
|
|
54
55
|
tests/test_python_environment_manager.py,sha256=AHEooqVL_1hDX1yKxN2Md7_rWqskxmLvw2OlnbeLwYs,38972
|
|
@@ -57,17 +58,20 @@ tests/test_registry.py,sha256=nFHwRIx9n8y0nHwW9j8X3DZ07Y0BLYZMKduTXo-xXTc,2261
|
|
|
57
58
|
tests/test_registry_retriever.py,sha256=6mQQuqy2tQdw4j3VOkC_DxWqtKwaCjGPgXsdL-w48Yw,10775
|
|
58
59
|
tests/test_system_installer.py,sha256=bWuyEKakhvi51iM8xHJh62zv83HUTd8QnPlqUUMWx9c,28102
|
|
59
60
|
tests/integration/__init__.py,sha256=2mG53dv1VqjxZYHuglneK9VgDMoWCxpfmPByXXd3zVM,125
|
|
60
|
-
tests/integration/
|
|
61
|
+
tests/integration/cli/__init__.py,sha256=4LtCz6wtIRcAXvTaEN9REYylLvWTL_D8wDJ0AMlySFA,529
|
|
62
|
+
tests/integration/cli/test_cli_reporter_integration.py,sha256=UoQ8DwI4kg0KHnFM0fE3xzneUAcnfPTbl5jJkCfKKtI,105691
|
|
63
|
+
tests/integration/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
+
tests/integration/mcp/test_adapter_serialization.py,sha256=bx3PzNEBJYgTZnN816vEZO_eErdMrveW-CcOuRMtJ4U,5772
|
|
61
65
|
tests/regression/__init__.py,sha256=0pFnFuEaMf7gPFFXMv-b_vNRNyLV-wU2lYspZHFH_Uo,127
|
|
62
|
-
tests/regression/
|
|
63
|
-
tests/regression/
|
|
64
|
-
tests/regression/
|
|
65
|
-
tests/regression/
|
|
66
|
-
tests/regression/
|
|
67
|
-
tests/regression/
|
|
68
|
-
tests/regression/
|
|
69
|
-
tests/regression/
|
|
70
|
-
tests/
|
|
66
|
+
tests/regression/cli/__init__.py,sha256=SVgNuHpQv3TT2TTBzUsHJ5q4yVnE55w2cNoRzXomP-4,683
|
|
67
|
+
tests/regression/cli/test_color_logic.py,sha256=efATAdDbdYFXLvHfhOnm0JjYK7rraYv9MzGMc0FT_Jk,10961
|
|
68
|
+
tests/regression/cli/test_consequence_type.py,sha256=HlnJ-2cRo1lX2fVN997EgpcSNeHpI-k_iFBC7ijXPz8,11267
|
|
69
|
+
tests/regression/cli/test_error_formatting.py,sha256=lCBQToycfYAlw1JbvWpkc5_gf0FH30_hUN0HbAzs3dc,11000
|
|
70
|
+
tests/regression/cli/test_result_reporter.py,sha256=Q1RLOGwTpMHqHxN9uyLhJuwHtzK8x3JUoHZxODRXyjA,22939
|
|
71
|
+
tests/regression/cli/test_table_formatter.py,sha256=B-HJDnHtvXc1h2MGVGueqjyDLTUub0GU2aZRlknDDnI,7700
|
|
72
|
+
tests/regression/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
+
tests/regression/mcp/test_field_filtering.py,sha256=PCPLwPApAlOsDdOfFoU6UKMWdZGPUo3sVwAswTzEeKA,5176
|
|
74
|
+
tests/test_data/fixtures/cli_reporter_fixtures.py,sha256=uItMfefxvXCWywrC9Y0wgzdx39ceWuTA1fQ6b1UrsXI,5276
|
|
71
75
|
tests/test_data/packages/basic/base_pkg/hatch_mcp_server.py,sha256=nn9XJQz7Owq_AKZ35bUV-l5eThauxTvIQZdQmcZqbQg,350
|
|
72
76
|
tests/test_data/packages/basic/base_pkg/mcp_server.py,sha256=gzXj-n0NbcS1TF-ebKOdXQRyuVIC0Gn_b8ZB-9RckrM,422
|
|
73
77
|
tests/test_data/packages/basic/base_pkg_v2/hatch_mcp_server.py,sha256=VmGpeLPpsNyFyePNtcRQCSscLOHdZgXsGDulA4_9CJA,356
|
|
@@ -98,8 +102,13 @@ tests/test_data/packages/schema_versions/schema_v1_1_0_pkg/main.py,sha256=_B5aqX
|
|
|
98
102
|
tests/test_data/packages/schema_versions/schema_v1_2_0_pkg/main.py,sha256=rinhVySJpjXKd2sRCS0ps7xTrVqImWcZ8l4aYbidYR8,238
|
|
99
103
|
tests/test_data/packages/schema_versions/schema_v1_2_1_pkg/hatch_mcp_server.py,sha256=FT14llzHlA4i8I__8GugzBRowhg_CbLmsOwjq0IWFsY,368
|
|
100
104
|
tests/test_data/packages/schema_versions/schema_v1_2_1_pkg/mcp_server.py,sha256=BRPAyyAseE2CGR3W647SwjlluYfi7ejhZck0An5581I,467
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
106
|
+
tests/unit/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
|
+
tests/unit/mcp/test_adapter_protocol.py,sha256=Vo_vzClXBgeu4HRFeKkg65pcVHUo-yNzvaoHvuUaLOs,5087
|
|
108
|
+
tests/unit/mcp/test_adapter_registry.py,sha256=scn0HeUVoTpWxlwBfHBFrAXCqNrg8Eg_lqFyggaY-Uc,5609
|
|
109
|
+
tests/unit/mcp/test_config_model.py,sha256=wP8ta2KJR7xH0AJYwvZXbJChEpssNyPpVjc1mq22_Sk,5686
|
|
110
|
+
hatch_xclam-0.8.0.dev1.dist-info/METADATA,sha256=YdCNEJLBdtMAHXKAFfxFULWSUzetw4Y3WFpc-CZpOn0,5995
|
|
111
|
+
hatch_xclam-0.8.0.dev1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
112
|
+
hatch_xclam-0.8.0.dev1.dist-info/entry_points.txt,sha256=bbm6Kk0uxP8-qNfbFiNj-fOr7p04anVb-0W2S-SsYjw,41
|
|
113
|
+
hatch_xclam-0.8.0.dev1.dist-info/top_level.txt,sha256=GZP3Ivciwal8jVITQkQr7dSNlLJRzfNOhA76VN7Jp4Y,12
|
|
114
|
+
hatch_xclam-0.8.0.dev1.dist-info/RECORD,,
|
tests/cli_test_utils.py
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"""Test utilities for CLI handler testing.
|
|
2
|
+
|
|
3
|
+
This module provides helper functions to simplify test setup for CLI handlers,
|
|
4
|
+
particularly for creating Namespace objects and mock managers.
|
|
5
|
+
|
|
6
|
+
These utilities reduce boilerplate in test files and ensure consistent
|
|
7
|
+
test patterns across the CLI test suite.
|
|
8
|
+
|
|
9
|
+
IMPORTANT: The attribute names in create_mcp_configure_args MUST match
|
|
10
|
+
the exact names expected by handle_mcp_configure in hatch/cli/cli_mcp.py.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import sys
|
|
14
|
+
from argparse import Namespace
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Any, Dict, List, Optional
|
|
17
|
+
from unittest.mock import MagicMock
|
|
18
|
+
|
|
19
|
+
# Add the parent directory to the path to import hatch modules
|
|
20
|
+
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def create_mcp_configure_args(
|
|
24
|
+
host: str = "claude-desktop",
|
|
25
|
+
server_name: str = "test-server",
|
|
26
|
+
server_command: Optional[str] = "python",
|
|
27
|
+
args: Optional[List[str]] = None,
|
|
28
|
+
env_var: Optional[List[str]] = None,
|
|
29
|
+
url: Optional[str] = None,
|
|
30
|
+
header: Optional[List[str]] = None,
|
|
31
|
+
timeout: Optional[int] = None,
|
|
32
|
+
trust: bool = False,
|
|
33
|
+
cwd: Optional[str] = None,
|
|
34
|
+
env_file: Optional[str] = None,
|
|
35
|
+
http_url: Optional[str] = None,
|
|
36
|
+
include_tools: Optional[List[str]] = None,
|
|
37
|
+
exclude_tools: Optional[List[str]] = None,
|
|
38
|
+
input: Optional[List[str]] = None,
|
|
39
|
+
disabled: Optional[bool] = None,
|
|
40
|
+
auto_approve_tools: Optional[List[str]] = None,
|
|
41
|
+
disable_tools: Optional[List[str]] = None,
|
|
42
|
+
env_vars: Optional[List[str]] = None,
|
|
43
|
+
startup_timeout: Optional[int] = None,
|
|
44
|
+
tool_timeout: Optional[int] = None,
|
|
45
|
+
enabled: Optional[bool] = None,
|
|
46
|
+
bearer_token_env_var: Optional[str] = None,
|
|
47
|
+
env_header: Optional[List[str]] = None,
|
|
48
|
+
no_backup: bool = False,
|
|
49
|
+
dry_run: bool = False,
|
|
50
|
+
auto_approve: bool = False,
|
|
51
|
+
_use_default_args: bool = True,
|
|
52
|
+
) -> Namespace:
|
|
53
|
+
"""Create a Namespace object for handle_mcp_configure testing.
|
|
54
|
+
|
|
55
|
+
This helper creates a properly structured Namespace object that matches
|
|
56
|
+
the expected arguments for handle_mcp_configure, making tests more
|
|
57
|
+
readable and maintainable.
|
|
58
|
+
|
|
59
|
+
IMPORTANT: Attribute names MUST match those in handle_mcp_configure:
|
|
60
|
+
- server_command (not command)
|
|
61
|
+
- env_var (not env)
|
|
62
|
+
- input (not inputs)
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
host: Target MCP host (e.g., 'claude-desktop', 'cursor', 'vscode')
|
|
66
|
+
server_name: Name of the MCP server to configure
|
|
67
|
+
server_command: Command to run for local servers
|
|
68
|
+
args: Arguments for the command (defaults to ['server.py'] for local servers)
|
|
69
|
+
env_var: Environment variables in KEY=VALUE format
|
|
70
|
+
url: URL for SSE remote servers
|
|
71
|
+
header: HTTP headers in KEY=VALUE format
|
|
72
|
+
timeout: Server timeout in seconds
|
|
73
|
+
trust: Trust the server (Cursor)
|
|
74
|
+
cwd: Working directory
|
|
75
|
+
env_file: Environment file path
|
|
76
|
+
http_url: URL for HTTP remote servers (Gemini only)
|
|
77
|
+
include_tools: Tools to include (Gemini)
|
|
78
|
+
exclude_tools: Tools to exclude (Gemini)
|
|
79
|
+
input: VSCode input configurations
|
|
80
|
+
disabled: Whether the server should be disabled
|
|
81
|
+
auto_approve_tools: Tools to auto-approve (Kiro)
|
|
82
|
+
disable_tools: Tools to disable (Kiro)
|
|
83
|
+
env_vars: Additional environment variables
|
|
84
|
+
startup_timeout: Startup timeout
|
|
85
|
+
tool_timeout: Tool execution timeout
|
|
86
|
+
enabled: Whether server is enabled
|
|
87
|
+
bearer_token_env_var: Bearer token environment variable
|
|
88
|
+
env_header: Environment headers
|
|
89
|
+
no_backup: Disable backup creation
|
|
90
|
+
dry_run: Preview changes without applying
|
|
91
|
+
auto_approve: Skip confirmation prompts
|
|
92
|
+
_use_default_args: If True and args is None and server_command is set, use default args
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
Namespace object with all arguments set
|
|
96
|
+
"""
|
|
97
|
+
# Only use default args for local servers (when command is set)
|
|
98
|
+
if args is None and server_command is not None and _use_default_args:
|
|
99
|
+
args = ["server.py"]
|
|
100
|
+
|
|
101
|
+
return Namespace(
|
|
102
|
+
host=host,
|
|
103
|
+
server_name=server_name,
|
|
104
|
+
server_command=server_command,
|
|
105
|
+
args=args,
|
|
106
|
+
env_var=env_var,
|
|
107
|
+
url=url,
|
|
108
|
+
header=header,
|
|
109
|
+
timeout=timeout,
|
|
110
|
+
trust=trust,
|
|
111
|
+
cwd=cwd,
|
|
112
|
+
env_file=env_file,
|
|
113
|
+
http_url=http_url,
|
|
114
|
+
include_tools=include_tools,
|
|
115
|
+
exclude_tools=exclude_tools,
|
|
116
|
+
input=input,
|
|
117
|
+
disabled=disabled,
|
|
118
|
+
auto_approve_tools=auto_approve_tools,
|
|
119
|
+
disable_tools=disable_tools,
|
|
120
|
+
env_vars=env_vars,
|
|
121
|
+
startup_timeout=startup_timeout,
|
|
122
|
+
tool_timeout=tool_timeout,
|
|
123
|
+
enabled=enabled,
|
|
124
|
+
bearer_token_env_var=bearer_token_env_var,
|
|
125
|
+
env_header=env_header,
|
|
126
|
+
no_backup=no_backup,
|
|
127
|
+
dry_run=dry_run,
|
|
128
|
+
auto_approve=auto_approve,
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def create_mcp_remove_args(
|
|
133
|
+
host: str = "claude-desktop",
|
|
134
|
+
server_name: str = "test-server",
|
|
135
|
+
no_backup: bool = False,
|
|
136
|
+
dry_run: bool = False,
|
|
137
|
+
auto_approve: bool = False,
|
|
138
|
+
) -> Namespace:
|
|
139
|
+
"""Create a Namespace object for handle_mcp_remove testing.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
host: Target MCP host
|
|
143
|
+
server_name: Name of the MCP server to remove
|
|
144
|
+
no_backup: Disable backup creation
|
|
145
|
+
dry_run: Preview changes without applying
|
|
146
|
+
auto_approve: Skip confirmation prompts
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
Namespace object with all arguments set
|
|
150
|
+
"""
|
|
151
|
+
return Namespace(
|
|
152
|
+
host=host,
|
|
153
|
+
server_name=server_name,
|
|
154
|
+
no_backup=no_backup,
|
|
155
|
+
dry_run=dry_run,
|
|
156
|
+
auto_approve=auto_approve,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def create_mcp_remove_server_args(
|
|
161
|
+
env_manager: Any = None,
|
|
162
|
+
server_name: str = "test-server",
|
|
163
|
+
host: Optional[str] = None,
|
|
164
|
+
env: Optional[str] = None,
|
|
165
|
+
no_backup: bool = False,
|
|
166
|
+
dry_run: bool = False,
|
|
167
|
+
auto_approve: bool = False,
|
|
168
|
+
) -> Namespace:
|
|
169
|
+
"""Create a Namespace object for handle_mcp_remove_server testing.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
env_manager: Environment manager instance
|
|
173
|
+
server_name: Name of the MCP server to remove
|
|
174
|
+
host: Comma-separated list of target hosts
|
|
175
|
+
env: Environment name
|
|
176
|
+
no_backup: Disable backup creation
|
|
177
|
+
dry_run: Preview changes without applying
|
|
178
|
+
auto_approve: Skip confirmation prompts
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
Namespace object with all arguments set
|
|
182
|
+
"""
|
|
183
|
+
return Namespace(
|
|
184
|
+
env_manager=env_manager,
|
|
185
|
+
server_name=server_name,
|
|
186
|
+
host=host,
|
|
187
|
+
env=env,
|
|
188
|
+
no_backup=no_backup,
|
|
189
|
+
dry_run=dry_run,
|
|
190
|
+
auto_approve=auto_approve,
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def create_mcp_remove_host_args(
|
|
195
|
+
env_manager: Any = None,
|
|
196
|
+
host_name: str = "claude-desktop",
|
|
197
|
+
no_backup: bool = False,
|
|
198
|
+
dry_run: bool = False,
|
|
199
|
+
auto_approve: bool = False,
|
|
200
|
+
) -> Namespace:
|
|
201
|
+
"""Create a Namespace object for handle_mcp_remove_host testing.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
env_manager: Environment manager instance
|
|
205
|
+
host_name: Name of the host to remove configuration from
|
|
206
|
+
no_backup: Disable backup creation
|
|
207
|
+
dry_run: Preview changes without applying
|
|
208
|
+
auto_approve: Skip confirmation prompts
|
|
209
|
+
|
|
210
|
+
Returns:
|
|
211
|
+
Namespace object with all arguments set
|
|
212
|
+
"""
|
|
213
|
+
return Namespace(
|
|
214
|
+
env_manager=env_manager,
|
|
215
|
+
host_name=host_name,
|
|
216
|
+
no_backup=no_backup,
|
|
217
|
+
dry_run=dry_run,
|
|
218
|
+
auto_approve=auto_approve,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def create_mock_env_manager(
|
|
223
|
+
current_env: str = "default",
|
|
224
|
+
environments: Optional[List[str]] = None,
|
|
225
|
+
packages: Optional[Dict[str, Any]] = None,
|
|
226
|
+
) -> MagicMock:
|
|
227
|
+
"""Create a mock HatchEnvironmentManager for testing.
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
current_env: Name of the current environment
|
|
231
|
+
environments: List of available environment names
|
|
232
|
+
packages: Dictionary of packages in the environment
|
|
233
|
+
|
|
234
|
+
Returns:
|
|
235
|
+
MagicMock configured as a HatchEnvironmentManager
|
|
236
|
+
"""
|
|
237
|
+
if environments is None:
|
|
238
|
+
environments = ["default"]
|
|
239
|
+
if packages is None:
|
|
240
|
+
packages = {}
|
|
241
|
+
|
|
242
|
+
mock_manager = MagicMock()
|
|
243
|
+
mock_manager.get_current_environment.return_value = current_env
|
|
244
|
+
mock_manager.list_environments.return_value = environments
|
|
245
|
+
mock_manager.get_environment_packages.return_value = packages
|
|
246
|
+
mock_manager.environment_exists.side_effect = lambda name: name in environments
|
|
247
|
+
|
|
248
|
+
return mock_manager
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def create_mock_mcp_manager(
|
|
252
|
+
hosts: Optional[List[str]] = None,
|
|
253
|
+
servers: Optional[Dict[str, Dict[str, Any]]] = None,
|
|
254
|
+
) -> MagicMock:
|
|
255
|
+
"""Create a mock MCPHostConfigurationManager for testing.
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
hosts: List of available host names
|
|
259
|
+
servers: Dictionary mapping host names to their server configurations
|
|
260
|
+
|
|
261
|
+
Returns:
|
|
262
|
+
MagicMock configured as an MCPHostConfigurationManager
|
|
263
|
+
"""
|
|
264
|
+
if hosts is None:
|
|
265
|
+
hosts = ["claude-desktop", "cursor", "vscode"]
|
|
266
|
+
if servers is None:
|
|
267
|
+
servers = {}
|
|
268
|
+
|
|
269
|
+
mock_manager = MagicMock()
|
|
270
|
+
mock_manager.list_hosts.return_value = hosts
|
|
271
|
+
mock_manager.get_servers.side_effect = lambda host: servers.get(host, {})
|
|
272
|
+
|
|
273
|
+
# Configure successful operations by default
|
|
274
|
+
mock_result = MagicMock()
|
|
275
|
+
mock_result.success = True
|
|
276
|
+
mock_result.backup_path = None
|
|
277
|
+
mock_manager.configure_server.return_value = mock_result
|
|
278
|
+
mock_manager.remove_server.return_value = mock_result
|
|
279
|
+
|
|
280
|
+
return mock_manager
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Integration tests for CLI reporter infrastructure.
|
|
2
|
+
|
|
3
|
+
This package contains integration tests for CLI handler → ResultReporter flow:
|
|
4
|
+
- Handler creates ResultReporter with correct command name
|
|
5
|
+
- Handler adds consequences before confirmation prompt
|
|
6
|
+
- Dry-run flag propagates correctly
|
|
7
|
+
- ConversionReport integration in MCP handlers
|
|
8
|
+
|
|
9
|
+
These tests verify component communication and data flow integrity
|
|
10
|
+
across the CLI reporting system.
|
|
11
|
+
|
|
12
|
+
Test Groups:
|
|
13
|
+
test_cli_reporter_integration.py: Handler → ResultReporter integration
|
|
14
|
+
"""
|