ghostai-connect 0.0.1__tar.gz

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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dymium, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,68 @@
1
+ Metadata-Version: 2.4
2
+ Name: ghostai-connect
3
+ Version: 0.0.1
4
+ Summary: Placeholder for the GhostAI Connect client: explains how to get it and checks that the GhostAI relay is reachable. Contains no client code.
5
+ Author-email: GhostAI <support@dymium.io>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://ghostai.dymium.io
8
+ Keywords: ghostai,connector,relay
9
+ Classifier: Development Status :: 1 - Planning
10
+ Classifier: Environment :: Console
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Requires-Python: >=3.8
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Dynamic: license-file
17
+
18
+ # ghostai-connect (placeholder)
19
+
20
+ This release holds the `ghostai-connect` name on PyPI for GhostAI. **It is not
21
+ the GhostAI Connect client** and contains none of its code. It cannot open a
22
+ tunnel.
23
+
24
+ GhostAI Connect is the small client a GhostAI customer runs next to their own
25
+ Ollama or vLLM server. It opens an outbound-only WebSocket connection to the
26
+ GhostAI relay, so no inbound firewall rule is needed.
27
+
28
+ ## Getting the real client
29
+
30
+ Contact GhostAI at support@dymium.io, or ask your GhostAI administrator. The
31
+ client is provided as either:
32
+
33
+ - a wheel file: `pip install ./ghostai_connect-<version>-py3-none-any.whl`
34
+ - a signed container image, `ghcr.io/dymium-io/ghostai-connect` (access is
35
+ granted by GhostAI). Verify it with `cosign verify` before you run it.
36
+
37
+ Then enroll it with the single-use token from the GhostAI admin console.
38
+
39
+ When the client is published here, `pip install --upgrade ghostai-connect`
40
+ replaces this placeholder.
41
+
42
+ ## What this package does
43
+
44
+ ```console
45
+ $ pip install ghostai-connect
46
+ $ ghostai-connect
47
+ ```
48
+
49
+ It prints the instructions above, then checks that the GhostAI relay is
50
+ reachable from your network. The check sends one HTTPS request to
51
+ `relay-connector.alpha.dymium.io` with a 5-second timeout. It sends no
52
+ credentials and opens no connector session. It exits `0` when the relay is
53
+ reachable and `1` when it is not. Any other subcommand, such as `run` or
54
+ `enroll`, exits `2`.
55
+
56
+ | Option | Meaning |
57
+ |---|---|
58
+ | `--relay-url URL` | Check a different relay (default: `$GHOSTAI_CONNECT_RELAY_URL`, else `wss://relay-connector.alpha.dymium.io/connector/ws`) |
59
+ | `--timeout SECONDS` | How long to wait for the relay (default: 5) |
60
+ | `--no-check` | Print the instructions only, with no network access |
61
+ | `--version` | Print the version |
62
+
63
+ Python 3.8 or later, standard library only, no dependencies.
64
+
65
+ ## License
66
+
67
+ MIT, for this placeholder's own code only. The license of the GhostAI Connect
68
+ client is set by that client's own releases.
@@ -0,0 +1,51 @@
1
+ # ghostai-connect (placeholder)
2
+
3
+ This release holds the `ghostai-connect` name on PyPI for GhostAI. **It is not
4
+ the GhostAI Connect client** and contains none of its code. It cannot open a
5
+ tunnel.
6
+
7
+ GhostAI Connect is the small client a GhostAI customer runs next to their own
8
+ Ollama or vLLM server. It opens an outbound-only WebSocket connection to the
9
+ GhostAI relay, so no inbound firewall rule is needed.
10
+
11
+ ## Getting the real client
12
+
13
+ Contact GhostAI at support@dymium.io, or ask your GhostAI administrator. The
14
+ client is provided as either:
15
+
16
+ - a wheel file: `pip install ./ghostai_connect-<version>-py3-none-any.whl`
17
+ - a signed container image, `ghcr.io/dymium-io/ghostai-connect` (access is
18
+ granted by GhostAI). Verify it with `cosign verify` before you run it.
19
+
20
+ Then enroll it with the single-use token from the GhostAI admin console.
21
+
22
+ When the client is published here, `pip install --upgrade ghostai-connect`
23
+ replaces this placeholder.
24
+
25
+ ## What this package does
26
+
27
+ ```console
28
+ $ pip install ghostai-connect
29
+ $ ghostai-connect
30
+ ```
31
+
32
+ It prints the instructions above, then checks that the GhostAI relay is
33
+ reachable from your network. The check sends one HTTPS request to
34
+ `relay-connector.alpha.dymium.io` with a 5-second timeout. It sends no
35
+ credentials and opens no connector session. It exits `0` when the relay is
36
+ reachable and `1` when it is not. Any other subcommand, such as `run` or
37
+ `enroll`, exits `2`.
38
+
39
+ | Option | Meaning |
40
+ |---|---|
41
+ | `--relay-url URL` | Check a different relay (default: `$GHOSTAI_CONNECT_RELAY_URL`, else `wss://relay-connector.alpha.dymium.io/connector/ws`) |
42
+ | `--timeout SECONDS` | How long to wait for the relay (default: 5) |
43
+ | `--no-check` | Print the instructions only, with no network access |
44
+ | `--version` | Print the version |
45
+
46
+ Python 3.8 or later, standard library only, no dependencies.
47
+
48
+ ## License
49
+
50
+ MIT, for this placeholder's own code only. The license of the GhostAI Connect
51
+ client is set by that client's own releases.
@@ -0,0 +1,68 @@
1
+ Metadata-Version: 2.4
2
+ Name: ghostai-connect
3
+ Version: 0.0.1
4
+ Summary: Placeholder for the GhostAI Connect client: explains how to get it and checks that the GhostAI relay is reachable. Contains no client code.
5
+ Author-email: GhostAI <support@dymium.io>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://ghostai.dymium.io
8
+ Keywords: ghostai,connector,relay
9
+ Classifier: Development Status :: 1 - Planning
10
+ Classifier: Environment :: Console
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Requires-Python: >=3.8
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Dynamic: license-file
17
+
18
+ # ghostai-connect (placeholder)
19
+
20
+ This release holds the `ghostai-connect` name on PyPI for GhostAI. **It is not
21
+ the GhostAI Connect client** and contains none of its code. It cannot open a
22
+ tunnel.
23
+
24
+ GhostAI Connect is the small client a GhostAI customer runs next to their own
25
+ Ollama or vLLM server. It opens an outbound-only WebSocket connection to the
26
+ GhostAI relay, so no inbound firewall rule is needed.
27
+
28
+ ## Getting the real client
29
+
30
+ Contact GhostAI at support@dymium.io, or ask your GhostAI administrator. The
31
+ client is provided as either:
32
+
33
+ - a wheel file: `pip install ./ghostai_connect-<version>-py3-none-any.whl`
34
+ - a signed container image, `ghcr.io/dymium-io/ghostai-connect` (access is
35
+ granted by GhostAI). Verify it with `cosign verify` before you run it.
36
+
37
+ Then enroll it with the single-use token from the GhostAI admin console.
38
+
39
+ When the client is published here, `pip install --upgrade ghostai-connect`
40
+ replaces this placeholder.
41
+
42
+ ## What this package does
43
+
44
+ ```console
45
+ $ pip install ghostai-connect
46
+ $ ghostai-connect
47
+ ```
48
+
49
+ It prints the instructions above, then checks that the GhostAI relay is
50
+ reachable from your network. The check sends one HTTPS request to
51
+ `relay-connector.alpha.dymium.io` with a 5-second timeout. It sends no
52
+ credentials and opens no connector session. It exits `0` when the relay is
53
+ reachable and `1` when it is not. Any other subcommand, such as `run` or
54
+ `enroll`, exits `2`.
55
+
56
+ | Option | Meaning |
57
+ |---|---|
58
+ | `--relay-url URL` | Check a different relay (default: `$GHOSTAI_CONNECT_RELAY_URL`, else `wss://relay-connector.alpha.dymium.io/connector/ws`) |
59
+ | `--timeout SECONDS` | How long to wait for the relay (default: 5) |
60
+ | `--no-check` | Print the instructions only, with no network access |
61
+ | `--version` | Print the version |
62
+
63
+ Python 3.8 or later, standard library only, no dependencies.
64
+
65
+ ## License
66
+
67
+ MIT, for this placeholder's own code only. The license of the GhostAI Connect
68
+ client is set by that client's own releases.
@@ -0,0 +1,9 @@
1
+ LICENSE
2
+ README.md
3
+ ghostai_connect_stub.py
4
+ pyproject.toml
5
+ ghostai_connect.egg-info/PKG-INFO
6
+ ghostai_connect.egg-info/SOURCES.txt
7
+ ghostai_connect.egg-info/dependency_links.txt
8
+ ghostai_connect.egg-info/entry_points.txt
9
+ ghostai_connect.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ ghostai-connect = ghostai_connect_stub:main
@@ -0,0 +1 @@
1
+ ghostai_connect_stub
@@ -0,0 +1,101 @@
1
+ """Placeholder for the GhostAI Connect client.
2
+
3
+ This distribution holds the ``ghostai-connect`` name on PyPI. It contains none
4
+ of the connector's code: it prints how to get the real client and checks that
5
+ the GhostAI relay is reachable from this network. Standard library only.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import argparse
11
+ import http.client
12
+ import os
13
+ import ssl
14
+ import sys
15
+ from urllib.parse import urlsplit
16
+
17
+ __version__ = "0.0.1"
18
+
19
+ DEFAULT_RELAY_URL = "wss://relay-connector.alpha.dymium.io/connector/ws"
20
+
21
+ HOW_TO_GET = """\
22
+ ghostai-connect {version} is a placeholder that holds this name on PyPI.
23
+ It is not the GhostAI Connect client and cannot open a tunnel.
24
+
25
+ To get the real client, contact GhostAI (support@dymium.io) or your GhostAI
26
+ administrator. It is provided as either:
27
+ - a wheel file: pip install ./ghostai_connect-<version>-py3-none-any.whl
28
+ - a signed container image, ghcr.io/dymium-io/ghostai-connect (access is
29
+ granted by GhostAI; verify it with cosign before you run it)
30
+ Then enroll it with the single-use token from the GhostAI admin console.
31
+ """
32
+
33
+
34
+ def check_relay(url: str, timeout: float) -> tuple[bool, str]:
35
+ """Send one unauthenticated HTTPS GET to the relay's connector endpoint.
36
+
37
+ A plain GET (no WebSocket upgrade) is answered with a 404 by the relay
38
+ process itself, which proves DNS, outbound 443, TLS and the load balancer
39
+ without opening a connector session or presenting any credential.
40
+ """
41
+ try:
42
+ parts = urlsplit(url)
43
+ scheme = {"wss": "https", "ws": "http"}.get(parts.scheme, parts.scheme)
44
+ if scheme not in ("https", "http") or not parts.hostname:
45
+ return False, "not a ws://, wss://, http:// or https:// URL"
46
+ if scheme == "https":
47
+ conn: http.client.HTTPConnection = http.client.HTTPSConnection(
48
+ parts.hostname, parts.port, timeout=timeout,
49
+ context=ssl.create_default_context(),
50
+ )
51
+ else:
52
+ conn = http.client.HTTPConnection(parts.hostname, parts.port, timeout=timeout)
53
+ try:
54
+ conn.request("GET", parts.path or "/",
55
+ headers={"User-Agent": f"ghostai-connect-stub/{__version__}"})
56
+ status = conn.getresponse().status
57
+ finally:
58
+ conn.close()
59
+ except (OSError, ValueError, http.client.HTTPException) as exc:
60
+ return False, f"unreachable ({type(exc).__name__}: {exc})"
61
+ if status >= 500:
62
+ return False, f"the load balancer answered HTTP {status}; the relay is unavailable right now"
63
+ return True, (f"reachable (HTTP {status}; a plain HTTPS request to the "
64
+ "WebSocket endpoint is expected to be refused)")
65
+
66
+
67
+ def main(argv: list[str] | None = None) -> int:
68
+ parser = argparse.ArgumentParser(
69
+ prog="ghostai-connect",
70
+ description="Placeholder for the GhostAI Connect client: explains how to "
71
+ "get the real client and checks that the GhostAI relay is reachable.",
72
+ )
73
+ parser.add_argument(
74
+ "--version", action="version",
75
+ version=f"%(prog)s {__version__} (placeholder, not the GhostAI Connect client)",
76
+ )
77
+ parser.add_argument(
78
+ "--relay-url", default=os.environ.get("GHOSTAI_CONNECT_RELAY_URL", DEFAULT_RELAY_URL),
79
+ help="relay endpoint to check (default: $GHOSTAI_CONNECT_RELAY_URL or %(default)s)",
80
+ )
81
+ parser.add_argument("--timeout", type=float, default=5.0,
82
+ help="seconds to wait for the relay (default: %(default)s)")
83
+ parser.add_argument("--no-check", action="store_true",
84
+ help="skip the relay reachability check")
85
+ args, unsupported = parser.parse_known_args(argv)
86
+
87
+ print(HOW_TO_GET.format(version=__version__))
88
+ ok = True
89
+ if not args.no_check:
90
+ ok, detail = check_relay(args.relay_url, args.timeout)
91
+ print(f"Relay check: {args.relay_url}\n {detail}")
92
+
93
+ if unsupported:
94
+ print(f"\n'ghostai-connect {' '.join(unsupported)}' is not available in this "
95
+ "placeholder. Install the real client (see above).", file=sys.stderr)
96
+ return 2
97
+ return 0 if ok else 1
98
+
99
+
100
+ if __name__ == "__main__":
101
+ sys.exit(main())
@@ -0,0 +1,38 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ # Name-holding placeholder for the GhostAI Connect client. Contains none of the
6
+ # client's code (ghostai_connect/), so the license below covers only
7
+ # ghostai_connect_stub.py. The version stays 0.0.x so any real release
8
+ # supersedes it; .github/workflows/publish-pypi-stub.yml refuses to upload
9
+ # anything else.
10
+ [project]
11
+ name = "ghostai-connect"
12
+ dynamic = ["version"]
13
+ description = "Placeholder for the GhostAI Connect client: explains how to get it and checks that the GhostAI relay is reachable. Contains no client code."
14
+ readme = "README.md"
15
+ license = "MIT"
16
+ license-files = ["LICENSE"]
17
+ requires-python = ">=3.8"
18
+ authors = [{ name = "GhostAI", email = "support@dymium.io" }]
19
+ keywords = ["ghostai", "connector", "relay"]
20
+ classifiers = [
21
+ "Development Status :: 1 - Planning",
22
+ "Environment :: Console",
23
+ "Operating System :: OS Independent",
24
+ "Programming Language :: Python :: 3",
25
+ ]
26
+ dependencies = []
27
+
28
+ [project.urls]
29
+ Homepage = "https://ghostai.dymium.io"
30
+
31
+ [project.scripts]
32
+ ghostai-connect = "ghostai_connect_stub:main"
33
+
34
+ [tool.setuptools]
35
+ py-modules = ["ghostai_connect_stub"]
36
+
37
+ [tool.setuptools.dynamic]
38
+ version = { attr = "ghostai_connect_stub.__version__" }
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+