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.
Files changed (81) hide show
  1. hatch/__init__.py +1 -1
  2. hatch/cli/__init__.py +71 -0
  3. hatch/cli/__main__.py +1035 -0
  4. hatch/cli/cli_env.py +865 -0
  5. hatch/cli/cli_mcp.py +1965 -0
  6. hatch/cli/cli_package.py +566 -0
  7. hatch/cli/cli_system.py +136 -0
  8. hatch/cli/cli_utils.py +1289 -0
  9. hatch/cli_hatch.py +160 -2838
  10. hatch/mcp_host_config/__init__.py +10 -10
  11. hatch/mcp_host_config/adapters/__init__.py +34 -0
  12. hatch/mcp_host_config/adapters/base.py +170 -0
  13. hatch/mcp_host_config/adapters/claude.py +105 -0
  14. hatch/mcp_host_config/adapters/codex.py +104 -0
  15. hatch/mcp_host_config/adapters/cursor.py +83 -0
  16. hatch/mcp_host_config/adapters/gemini.py +75 -0
  17. hatch/mcp_host_config/adapters/kiro.py +78 -0
  18. hatch/mcp_host_config/adapters/lmstudio.py +79 -0
  19. hatch/mcp_host_config/adapters/registry.py +149 -0
  20. hatch/mcp_host_config/adapters/vscode.py +83 -0
  21. hatch/mcp_host_config/backup.py +5 -3
  22. hatch/mcp_host_config/fields.py +126 -0
  23. hatch/mcp_host_config/models.py +161 -456
  24. hatch/mcp_host_config/reporting.py +57 -16
  25. hatch/mcp_host_config/strategies.py +155 -87
  26. hatch/template_generator.py +1 -1
  27. {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/METADATA +3 -2
  28. {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/RECORD +52 -43
  29. {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/WHEEL +1 -1
  30. hatch_xclam-0.8.0.dev1.dist-info/entry_points.txt +2 -0
  31. tests/cli_test_utils.py +280 -0
  32. tests/integration/cli/__init__.py +14 -0
  33. tests/integration/cli/test_cli_reporter_integration.py +2439 -0
  34. tests/integration/mcp/__init__.py +0 -0
  35. tests/integration/mcp/test_adapter_serialization.py +173 -0
  36. tests/regression/cli/__init__.py +16 -0
  37. tests/regression/cli/test_color_logic.py +268 -0
  38. tests/regression/cli/test_consequence_type.py +298 -0
  39. tests/regression/cli/test_error_formatting.py +328 -0
  40. tests/regression/cli/test_result_reporter.py +586 -0
  41. tests/regression/cli/test_table_formatter.py +211 -0
  42. tests/regression/mcp/__init__.py +0 -0
  43. tests/regression/mcp/test_field_filtering.py +162 -0
  44. tests/test_cli_version.py +7 -5
  45. tests/test_data/fixtures/cli_reporter_fixtures.py +184 -0
  46. tests/unit/__init__.py +0 -0
  47. tests/unit/mcp/__init__.py +0 -0
  48. tests/unit/mcp/test_adapter_protocol.py +138 -0
  49. tests/unit/mcp/test_adapter_registry.py +158 -0
  50. tests/unit/mcp/test_config_model.py +146 -0
  51. hatch_xclam-0.7.1.dev3.dist-info/entry_points.txt +0 -2
  52. tests/integration/test_mcp_kiro_integration.py +0 -153
  53. tests/regression/test_mcp_codex_backup_integration.py +0 -162
  54. tests/regression/test_mcp_codex_host_strategy.py +0 -163
  55. tests/regression/test_mcp_codex_model_validation.py +0 -117
  56. tests/regression/test_mcp_kiro_backup_integration.py +0 -241
  57. tests/regression/test_mcp_kiro_cli_integration.py +0 -141
  58. tests/regression/test_mcp_kiro_decorator_registration.py +0 -71
  59. tests/regression/test_mcp_kiro_host_strategy.py +0 -214
  60. tests/regression/test_mcp_kiro_model_validation.py +0 -116
  61. tests/regression/test_mcp_kiro_omni_conversion.py +0 -104
  62. tests/test_mcp_atomic_operations.py +0 -276
  63. tests/test_mcp_backup_integration.py +0 -308
  64. tests/test_mcp_cli_all_host_specific_args.py +0 -496
  65. tests/test_mcp_cli_backup_management.py +0 -295
  66. tests/test_mcp_cli_direct_management.py +0 -456
  67. tests/test_mcp_cli_discovery_listing.py +0 -582
  68. tests/test_mcp_cli_host_config_integration.py +0 -823
  69. tests/test_mcp_cli_package_management.py +0 -360
  70. tests/test_mcp_cli_partial_updates.py +0 -859
  71. tests/test_mcp_environment_integration.py +0 -520
  72. tests/test_mcp_host_config_backup.py +0 -257
  73. tests/test_mcp_host_configuration_manager.py +0 -331
  74. tests/test_mcp_host_registry_decorator.py +0 -348
  75. tests/test_mcp_pydantic_architecture_v4.py +0 -603
  76. tests/test_mcp_server_config_models.py +0 -242
  77. tests/test_mcp_server_config_type_field.py +0 -221
  78. tests/test_mcp_sync_functionality.py +0 -316
  79. tests/test_mcp_user_feedback_reporting.py +0 -359
  80. {hatch_xclam-0.7.1.dev3.dist-info → hatch_xclam-0.8.0.dev1.dist-info}/licenses/LICENSE +0 -0
  81. {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=5JFQZiaZQewEWg8WktQKEdT8IeH0KstndZf27VH7sq4,594
2
- hatch/cli_hatch.py,sha256=Z7-N0DdWT1xK23EL0Gr5mx2wjqhDFzFROt1nUxPAnZM,112093
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=SuZyi-_JhnRLKxpSdKppeNh2FbpSLNfyEFu_IypDaVs,5467
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=STHzYwcyO6blKSwcMRibcD_4VKHgpEjru-uY1OQM9yA,1781
19
- hatch/mcp_host_config/backup.py,sha256=X6wnLkPFYv4e5ObrWQSgQ_a_6rcmsFgysQwBZF_osWM,17831
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=1Nd3PDyGGbBm4oTgMEQ67j4b_qy23iibv9N4Tm4d9oE,29110
22
- hatch/mcp_host_config/reporting.py,sha256=Q8UKBJRfvJTbb5PM9xwLEOh3OJjf19AKpWKxs-2622k,6889
23
- hatch/mcp_host_config/strategies.py,sha256=NdA8hcbAi5xGkFRy51csmdEJESg25L8JkwTDVg2AeMw,30302
24
- hatch_xclam-0.7.1.dev3.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
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=lU8TBZfzn_8AenFNXYrLMARht91fI5twBN13L-iJebc,4778
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/test_mcp_kiro_integration.py,sha256=9y2XPacd3Y6zkqUUcCDjzj8Jv2Humby2LZ5CLSeFYCg,5566
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/test_mcp_codex_backup_integration.py,sha256=15G8tCPFtukEcZvE5NBI8BvxlD27KwmE3z8-8ZZ3GxM,7107
63
- tests/regression/test_mcp_codex_host_strategy.py,sha256=6ehG8IruT9U-fO7kDMoJfogXbpq7JV4XYl-Ho68nt1U,6413
64
- tests/regression/test_mcp_codex_model_validation.py,sha256=LkGexJrDusxRg_5Bpsm7sXRt7LYwhqqj4Y7VIynslyw,4512
65
- tests/regression/test_mcp_kiro_backup_integration.py,sha256=oBEnSSLrnHIurkrBtjSG-HT6DyODV2z9tZeZotnsR1k,9584
66
- tests/regression/test_mcp_kiro_cli_integration.py,sha256=jDQE73yJTRb2e6MPShxLHmLDtN5VBMHMAUBojPEnVBI,5123
67
- tests/regression/test_mcp_kiro_decorator_registration.py,sha256=_H9FdKdKCv__IYBS0tfnZGUP574KoDjqKInmFiDEKPc,2556
68
- tests/regression/test_mcp_kiro_host_strategy.py,sha256=t3EbNgUkDC-tF_Ztrjlrx8aDkmML2zZiPnl3iLvKWcg,8235
69
- tests/regression/test_mcp_kiro_model_validation.py,sha256=bCWzkP6gDxD4tJ6bXnyC6BNGPk3FwX5MQVJt_kK-Hsg,3877
70
- tests/regression/test_mcp_kiro_omni_conversion.py,sha256=u0g-NFKDpyVxguNHc_RxJXhBvUvABljx-IZqeOjpJZw,3559
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
- hatch_xclam-0.7.1.dev3.dist-info/METADATA,sha256=-QwerIq3PVxHdoIVq32lneCmCgh2kQBHm9N1jrIAIdY,5947
102
- hatch_xclam-0.7.1.dev3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
103
- hatch_xclam-0.7.1.dev3.dist-info/entry_points.txt,sha256=6xbkwFUtr7nRa56vUFMyJk2wjwFQ_XVaU53ruecWKI0,47
104
- hatch_xclam-0.7.1.dev3.dist-info/top_level.txt,sha256=GZP3Ivciwal8jVITQkQr7dSNlLJRzfNOhA76VN7Jp4Y,12
105
- hatch_xclam-0.7.1.dev3.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ hatch = hatch.cli:main
@@ -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
+ """