hatch-xclam 0.7.0__py3-none-any.whl → 0.7.0.dev11__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 (67) hide show
  1. hatch_xclam-0.7.0.dev11.dist-info/METADATA +103 -0
  2. {hatch_xclam-0.7.0.dist-info → hatch_xclam-0.7.0.dev11.dist-info}/RECORD +65 -6
  3. hatch_xclam-0.7.0.dev11.dist-info/top_level.txt +3 -0
  4. node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py +45 -0
  5. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +365 -0
  6. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +206 -0
  7. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +1272 -0
  8. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +1547 -0
  9. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +59 -0
  10. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +152 -0
  11. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +270 -0
  12. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +574 -0
  13. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +704 -0
  14. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py +709 -0
  15. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +173 -0
  16. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +169 -0
  17. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +113 -0
  18. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +55 -0
  19. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  20. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +805 -0
  21. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +1172 -0
  22. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +1319 -0
  23. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +128 -0
  24. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +104 -0
  25. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +462 -0
  26. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +89 -0
  27. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +56 -0
  28. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +2745 -0
  29. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +3976 -0
  30. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +44 -0
  31. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +2965 -0
  32. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +67 -0
  33. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +1391 -0
  34. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +26 -0
  35. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py +3112 -0
  36. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +99 -0
  37. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +767 -0
  38. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +1260 -0
  39. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +174 -0
  40. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +61 -0
  41. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +373 -0
  42. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +1939 -0
  43. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +54 -0
  44. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +303 -0
  45. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +3196 -0
  46. node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +65 -0
  47. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +15 -0
  48. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +108 -0
  49. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +252 -0
  50. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +83 -0
  51. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +359 -0
  52. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +61 -0
  53. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +192 -0
  54. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/markers.py +252 -0
  55. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +825 -0
  56. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  57. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +90 -0
  58. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +1030 -0
  59. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/tags.py +553 -0
  60. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/utils.py +172 -0
  61. node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/version.py +563 -0
  62. node_modules/npm/node_modules/node-gyp/gyp/test_gyp.py +261 -0
  63. hatch_xclam-0.7.0.dist-info/METADATA +0 -150
  64. hatch_xclam-0.7.0.dist-info/top_level.txt +0 -2
  65. {hatch_xclam-0.7.0.dist-info → hatch_xclam-0.7.0.dev11.dist-info}/WHEEL +0 -0
  66. {hatch_xclam-0.7.0.dist-info → hatch_xclam-0.7.0.dev11.dist-info}/entry_points.txt +0 -0
  67. {hatch_xclam-0.7.0.dist-info → hatch_xclam-0.7.0.dev11.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,261 @@
1
+ #!/usr/bin/env python3
2
+ # Copyright (c) 2012 Google Inc. All rights reserved.
3
+ # Use of this source code is governed by a BSD-style license that can be
4
+ # found in the LICENSE file.
5
+
6
+ """gyptest.py -- test runner for GYP tests."""
7
+
8
+
9
+ import argparse
10
+ import os
11
+ import platform
12
+ import subprocess
13
+ import sys
14
+ import time
15
+
16
+
17
+ def is_test_name(f):
18
+ return f.startswith("gyptest") and f.endswith(".py")
19
+
20
+
21
+ def find_all_gyptest_files(directory):
22
+ result = []
23
+ for root, dirs, files in os.walk(directory):
24
+ result.extend([os.path.join(root, f) for f in files if is_test_name(f)])
25
+ result.sort()
26
+ return result
27
+
28
+
29
+ def main(argv=None):
30
+ if argv is None:
31
+ argv = sys.argv
32
+
33
+ parser = argparse.ArgumentParser()
34
+ parser.add_argument("-a", "--all", action="store_true", help="run all tests")
35
+ parser.add_argument("-C", "--chdir", action="store", help="change to directory")
36
+ parser.add_argument(
37
+ "-f",
38
+ "--format",
39
+ action="store",
40
+ default="",
41
+ help="run tests with the specified formats",
42
+ )
43
+ parser.add_argument(
44
+ "-G",
45
+ "--gyp_option",
46
+ action="append",
47
+ default=[],
48
+ help="Add -G options to the gyp command line",
49
+ )
50
+ parser.add_argument(
51
+ "-l", "--list", action="store_true", help="list available tests and exit"
52
+ )
53
+ parser.add_argument(
54
+ "-n",
55
+ "--no-exec",
56
+ action="store_true",
57
+ help="no execute, just print the command line",
58
+ )
59
+ parser.add_argument(
60
+ "--path", action="append", default=[], help="additional $PATH directory"
61
+ )
62
+ parser.add_argument(
63
+ "-q",
64
+ "--quiet",
65
+ action="store_true",
66
+ help="quiet, don't print anything unless there are failures",
67
+ )
68
+ parser.add_argument(
69
+ "-v",
70
+ "--verbose",
71
+ action="store_true",
72
+ help="print configuration info and test results.",
73
+ )
74
+ parser.add_argument("tests", nargs="*")
75
+ args = parser.parse_args(argv[1:])
76
+
77
+ if args.chdir:
78
+ os.chdir(args.chdir)
79
+
80
+ if args.path:
81
+ extra_path = [os.path.abspath(p) for p in args.path]
82
+ extra_path = os.pathsep.join(extra_path)
83
+ os.environ["PATH"] = extra_path + os.pathsep + os.environ["PATH"]
84
+
85
+ if not args.tests:
86
+ if not args.all:
87
+ sys.stderr.write("Specify -a to get all tests.\n")
88
+ return 1
89
+ args.tests = ["test"]
90
+
91
+ tests = []
92
+ for arg in args.tests:
93
+ if os.path.isdir(arg):
94
+ tests.extend(find_all_gyptest_files(os.path.normpath(arg)))
95
+ else:
96
+ if not is_test_name(os.path.basename(arg)):
97
+ print(arg, "is not a valid gyp test name.", file=sys.stderr)
98
+ sys.exit(1)
99
+ tests.append(arg)
100
+
101
+ if args.list:
102
+ for test in tests:
103
+ print(test)
104
+ sys.exit(0)
105
+
106
+ os.environ["PYTHONPATH"] = os.path.abspath("test/lib")
107
+
108
+ if args.verbose:
109
+ print_configuration_info()
110
+
111
+ if args.gyp_option and not args.quiet:
112
+ print("Extra Gyp options: %s\n" % args.gyp_option)
113
+
114
+ if args.format:
115
+ format_list = args.format.split(",")
116
+ else:
117
+ format_list = {
118
+ "aix5": ["make"],
119
+ "os400": ["make"],
120
+ "freebsd7": ["make"],
121
+ "freebsd8": ["make"],
122
+ "openbsd5": ["make"],
123
+ "cygwin": ["msvs"],
124
+ "win32": ["msvs", "ninja"],
125
+ "linux": ["make", "ninja"],
126
+ "linux2": ["make", "ninja"],
127
+ "linux3": ["make", "ninja"],
128
+ # TODO: Re-enable xcode-ninja.
129
+ # https://bugs.chromium.org/p/gyp/issues/detail?id=530
130
+ # 'darwin': ['make', 'ninja', 'xcode', 'xcode-ninja'],
131
+ "darwin": ["make", "ninja", "xcode"],
132
+ }[sys.platform]
133
+
134
+ gyp_options = []
135
+ for option in args.gyp_option:
136
+ gyp_options += ["-G", option]
137
+
138
+ runner = Runner(format_list, tests, gyp_options, args.verbose)
139
+ runner.run()
140
+
141
+ if not args.quiet:
142
+ runner.print_results()
143
+
144
+ return 1 if runner.failures else 0
145
+
146
+
147
+ def print_configuration_info():
148
+ print("Test configuration:")
149
+ if sys.platform == "darwin":
150
+ sys.path.append(os.path.abspath("test/lib"))
151
+ import TestMac
152
+
153
+ print(f" Mac {platform.mac_ver()[0]} {platform.mac_ver()[2]}")
154
+ print(f" Xcode {TestMac.Xcode.Version()}")
155
+ elif sys.platform == "win32":
156
+ sys.path.append(os.path.abspath("pylib"))
157
+ import gyp.MSVSVersion
158
+
159
+ print(" Win %s %s\n" % platform.win32_ver()[0:2])
160
+ print(" MSVS %s" % gyp.MSVSVersion.SelectVisualStudioVersion().Description())
161
+ elif sys.platform in ("linux", "linux2"):
162
+ print(" Linux %s" % " ".join(platform.linux_distribution()))
163
+ print(f" Python {platform.python_version()}")
164
+ print(f" PYTHONPATH={os.environ['PYTHONPATH']}")
165
+ print()
166
+
167
+
168
+ class Runner:
169
+ def __init__(self, formats, tests, gyp_options, verbose):
170
+ self.formats = formats
171
+ self.tests = tests
172
+ self.verbose = verbose
173
+ self.gyp_options = gyp_options
174
+ self.failures = []
175
+ self.num_tests = len(formats) * len(tests)
176
+ num_digits = len(str(self.num_tests))
177
+ self.fmt_str = "[%%%dd/%%%dd] (%%s) %%s" % (num_digits, num_digits)
178
+ self.isatty = sys.stdout.isatty() and not self.verbose
179
+ self.env = os.environ.copy()
180
+ self.hpos = 0
181
+
182
+ def run(self):
183
+ run_start = time.time()
184
+
185
+ i = 1
186
+ for fmt in self.formats:
187
+ for test in self.tests:
188
+ self.run_test(test, fmt, i)
189
+ i += 1
190
+
191
+ if self.isatty:
192
+ self.erase_current_line()
193
+
194
+ self.took = time.time() - run_start
195
+
196
+ def run_test(self, test, fmt, i):
197
+ if self.isatty:
198
+ self.erase_current_line()
199
+
200
+ msg = self.fmt_str % (i, self.num_tests, fmt, test)
201
+ self.print_(msg)
202
+
203
+ start = time.time()
204
+ cmd = [sys.executable, test] + self.gyp_options
205
+ self.env["TESTGYP_FORMAT"] = fmt
206
+ proc = subprocess.Popen(
207
+ cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=self.env
208
+ )
209
+ proc.wait()
210
+ took = time.time() - start
211
+
212
+ stdout = proc.stdout.read().decode("utf8")
213
+ if proc.returncode == 2:
214
+ res = "skipped"
215
+ elif proc.returncode:
216
+ res = "failed"
217
+ self.failures.append(f"({test}) {fmt}")
218
+ else:
219
+ res = "passed"
220
+ res_msg = f" {res} {took:.3f}s"
221
+ self.print_(res_msg)
222
+
223
+ if stdout and not stdout.endswith(("PASSED\n", "NO RESULT\n")):
224
+ print()
225
+ print("\n".join(f" {line}" for line in stdout.splitlines()))
226
+ elif not self.isatty:
227
+ print()
228
+
229
+ def print_(self, msg):
230
+ print(msg, end="")
231
+ index = msg.rfind("\n")
232
+ if index == -1:
233
+ self.hpos += len(msg)
234
+ else:
235
+ self.hpos = len(msg) - index
236
+ sys.stdout.flush()
237
+
238
+ def erase_current_line(self):
239
+ print("\b" * self.hpos + " " * self.hpos + "\b" * self.hpos, end="")
240
+ sys.stdout.flush()
241
+ self.hpos = 0
242
+
243
+ def print_results(self):
244
+ num_failures = len(self.failures)
245
+ if num_failures:
246
+ print()
247
+ if num_failures == 1:
248
+ print("Failed the following test:")
249
+ else:
250
+ print("Failed the following %d tests:" % num_failures)
251
+ print("\t" + "\n\t".join(sorted(self.failures)))
252
+ print()
253
+ print(
254
+ "Ran %d tests in %.3fs, %d failed."
255
+ % (self.num_tests, self.took, num_failures)
256
+ )
257
+ print()
258
+
259
+
260
+ if __name__ == "__main__":
261
+ sys.exit(main())
@@ -1,150 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: hatch-xclam
3
- Version: 0.7.0
4
- Summary: Package manager for the Cracking Shells ecosystem
5
- Author: Cracking Shells Team
6
- Project-URL: Homepage, https://github.com/CrackingShells/Hatch
7
- Project-URL: Bug Tracker, https://github.com/CrackingShells/Hatch/issues
8
- Classifier: Programming Language :: Python :: 3.12
9
- Classifier: License :: OSI Approved :: GNU Affero General Public License v3
10
- Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.12
12
- Description-Content-Type: text/markdown
13
- License-File: LICENSE
14
- Requires-Dist: jsonschema>=4.0.0
15
- Requires-Dist: requests>=2.25.0
16
- Requires-Dist: packaging>=20.0
17
- Requires-Dist: docker>=7.1.0
18
- Requires-Dist: pydantic>=2.0.0
19
- Requires-Dist: hatch-validator>=0.8.0
20
- Provides-Extra: docs
21
- Requires-Dist: mkdocs>=1.4.0; extra == "docs"
22
- Requires-Dist: mkdocstrings[python]>=0.20.0; extra == "docs"
23
- Provides-Extra: dev
24
- Requires-Dist: wobble>=0.2.0; extra == "dev"
25
- Dynamic: license-file
26
-
27
- # Hatch
28
-
29
- ![Hatch Logo](https://raw.githubusercontent.com/CrackingShells/Hatch/refs/heads/main/docs/resources/images/Logo/hatch_wide_dark_bg_transparent.png)
30
-
31
- ## Introduction
32
-
33
- Hatch is the package manager for managing Model Context Protocol (MCP) servers with environment isolation, multi-type dependency resolution, and multi-host deployment. Deploy MCP servers to Claude Desktop, VS Code, Cursor, and other platforms with automatic dependency management.
34
-
35
- The canonical documentation is at `docs/index.md` and published at <https://hatch.readthedocs.io/en/latest/>.
36
-
37
- ## Key Features
38
-
39
- - **Environment Isolation** — Create separate, isolated workspaces for different projects without conflicts
40
- - **Multi-Type Dependency Resolution** — Automatically resolve and install system packages, Python packages, Docker containers, and Hatch packages
41
- - **Multi-Host Deployment** — Deploy MCP servers to Claude Desktop, Claude Code, VS Code, Cursor, LM Studio, and Google Gemini CLI
42
- - **Package Validation** — Ensure packages meet schema requirements before distribution
43
- - **Development-Focused** — Optimized for rapid development and testing of MCP server ecosystems
44
-
45
- ## Supported MCP Hosts
46
-
47
- Hatch supports deployment to the following MCP host platforms:
48
-
49
- - **Claude Desktop** — Anthropic's desktop application for Claude with native MCP support
50
- - **Claude Code** — Claude integration for VS Code with MCP capabilities
51
- - **VS Code** — Visual Studio Code with the MCP extension for tool integration
52
- - **Cursor** — AI-first code editor with built-in MCP server support
53
- - **LM Studio** — Local LLM inference platform with MCP server integration
54
- - **Google Gemini CLI** — Command-line interface for Google's Gemini model with MCP support
55
-
56
- ## Quick Start
57
-
58
- ### Install from PyPI
59
-
60
- ```bash
61
- pip install hatch-xclam
62
- ```
63
-
64
- Verify installation:
65
-
66
- ```bash
67
- hatch --version
68
- ```
69
-
70
- ### Install from source
71
-
72
- ```bash
73
- git clone https://github.com/CrackingShells/Hatch.git
74
- cd Hatch
75
- pip install -e .
76
- ```
77
-
78
- ### Create your first environment and *Hatch!* MCP server package
79
-
80
- ```bash
81
- # Create an isolated environment
82
- hatch env create my_project
83
-
84
- # Switch to it
85
- hatch env use my_project
86
-
87
- # Create a package template
88
- hatch create my_mcp_server --description "My MCP server"
89
-
90
- # Validate the package
91
- hatch validate ./my_mcp_server
92
- ```
93
-
94
- ### Deploy MCP servers to your tools
95
-
96
- **Package-First Deployment (Recommended)** — Add a Hatch package and automatically configure it on Claude Desktop and Cursor:
97
-
98
- ```bash
99
- hatch package add ./my_mcp_server --host claude-desktop,cursor
100
- ```
101
-
102
- **Direct Configuration (Advanced)** — Configure arbitrary MCP servers on your hosts:
103
-
104
- ```bash
105
- # Remote server example: GitHub MCP Server with authentication
106
- export GIT_PAT_TOKEN=your_github_personal_access_token
107
- hatch mcp configure github-mcp --host gemini \
108
- --httpUrl https://api.github.com/mcp \
109
- --header Authorization="Bearer $GIT_PAT_TOKEN"
110
-
111
- # Local server example: Context7 via npx
112
- hatch mcp configure context7 --host vscode \
113
- --command npx --args "-y @upstash/context7-mcp"
114
- ```
115
-
116
- ## Documentation
117
-
118
- - **[Full Documentation](https://hatch.readthedocs.io/en/latest/)** — Complete reference and guides
119
- - **[Getting Started](./docs/articles/users/GettingStarted.md)** — Quick start for users
120
- - **[CLI Reference](./docs/articles/users/CLIReference.md)** — All commands and options
121
- - **[Tutorials](./docs/articles/users/tutorials/)** — Step-by-step guides from installation to package authoring
122
- - **[MCP Host Configuration](./docs/articles/users/MCPHostConfiguration.md)** — Deploy to multiple platforms
123
- - **[Developer Docs](./docs/articles/devs/)** — Architecture, implementation guides, and contribution guidelines
124
- - **[Troubleshooting](./docs/articles/users/Troubleshooting/ReportIssues.md)** — Common issues and solutions
125
-
126
- ## Contributing
127
-
128
- We welcome contributions! See the [How to Contribute](./docs/articles/devs/contribution_guides/how_to_contribute.md) guide for details.
129
-
130
- ### Quick start for developers
131
-
132
- 1. **Fork and clone** the repository
133
- 2. **Install dependencies**: `pip install -e .` and `npm install`
134
- 3. **Create a feature branch**: `git checkout -b feat/your-feature`
135
- 4. **Make changes** and add tests
136
- 5. **Use conventional commits**: `npm run commit` for guided commits
137
- 6. **Run tests**: `wobble`
138
- 7. **Create a pull request**
139
-
140
- We use [Conventional Commits](https://www.conventionalcommits.org/) for automated versioning. Use `npm run commit` for guided commit messages.
141
-
142
- ## Getting Help
143
-
144
- - Search existing [GitHub Issues](https://github.com/CrackingShells/Hatch/issues)
145
- - Read [Troubleshooting](./docs/articles/users/Troubleshooting/ReportIssues.md) for common problems
146
- - Check [Developer Onboarding](./docs/articles/devs/development_processes/developer_onboarding.md) for setup help
147
-
148
- ## License
149
-
150
- This project is licensed under the GNU Affero General Public License v3 — see `LICENSE` for details.
@@ -1,2 +0,0 @@
1
- hatch
2
- tests