stem-agent 0.1.0__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.
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: stem-agent
3
+ Version: 0.1.0
4
+ Summary: One complete scientific toolkit for coding agents, with verifiable workflows.
5
+ Author: Exergy Lab
6
+ License-Expression: LicenseRef-Proprietary
7
+ Project-URL: Homepage, https://exergy-lab.com
8
+ Project-URL: Product, https://exergy-lab.com/products
9
+ Project-URL: Support, https://exergy-lab.com/contact
10
+ Keywords: science,engineering,mathematics,mcp,coding-agents
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Operating System :: Microsoft :: Windows :: Windows 11
18
+ Classifier: Operating System :: MacOS :: MacOS X
19
+ Classifier: Operating System :: POSIX :: Linux
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE.txt
23
+ License-File: THIRD_PARTY_NOTICES.txt
24
+ Dynamic: license-file
25
+
26
+ # STEM Agent Free
27
+
28
+ STEM Agent gives the coding agent you already use one complete scientific
29
+ toolkit, checked workflows, and a simple way to add specialized tools later.
30
+ The Free Alpha installs 40 standard scientific components and keeps calculated
31
+ results separate from independent verifier receipts.
32
+
33
+ STEM Agent is free to download and use. It remains proprietary software and is
34
+ not open source.
35
+
36
+ ## Install
37
+
38
+ You need Python 3.12 and `pipx`. Then run:
39
+
40
+ ```text
41
+ pipx run stem-agent
42
+ ```
43
+
44
+ The installer verifies its embedded release bundle, creates separate worker
45
+ and verifier environments, checks all 40 components, runs a verified demo, and
46
+ creates a tested connection for each of the 15 coding agents listed on the
47
+ Exergy Lab home page.
48
+
49
+ Claude Code, Codex, GitHub Copilot CLI, Gemini CLI, Qwen Code, Prime-Agent,
50
+ Grok Build, Kimi Code, and Hermes Agent connect automatically when their CLI is
51
+ installed. OpenCode, DeepSeek Harness, MiniMax Code, and NAC receive exact
52
+ native configuration files without overwriting existing settings. Apodex Agent
53
+ Harness and Exoharness use the same installed tools through the stable local
54
+ command line because their current releases do not expose MCP clients.
55
+
56
+ The release workflow tests Windows 11 x64, Ubuntu 24.04 x64, and macOS 12 or
57
+ newer on both Apple Silicon and Intel before the package can publish.
58
+
59
+ No telemetry is sent. Use the local support and feedback commands to create an
60
+ inspectable, privacy-safe report that you choose whether to share.
61
+
62
+ Support: https://exergy-lab.com/contact
@@ -0,0 +1,12 @@
1
+ stem_agent-0.1.0.dist-info/licenses/LICENSE.txt,sha256=5padhjtfEtqGR0fq5Y33448N6gR_160IhoeYy6UIOpo,1346
2
+ stem_agent-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.txt,sha256=vZ0pMLVAsX7IaCke9saIPpYGUtfCvGhr38G-QtdpGis,884
3
+ stem_agent_installer/__init__.py,sha256=qBsM-405d36VSWUvn0irWSlAKbGwYc17YIW3EvnaVns,72
4
+ stem_agent_installer/__main__.py,sha256=PSQ4rpL0dG6f-qH4N7H-gD9igQkdHzH4yVZDcW8lfZo,80
5
+ stem_agent_installer/cli.py,sha256=AT3mIzdiwdbVmi_6TWicTkuEzXJ83iQfTTMUItGFc5E,8975
6
+ stem_agent_installer/payload/payload.json,sha256=hA1AxL5x1kEG97-VbDCrIK0-QbAX83MD4tpytul2UXI,462
7
+ stem_agent_installer/payload/stem-agent-0.1.0-free-alpha.zip,sha256=-RsEjW8D81EDnQ0ls5IGRV8DhG4tvGnio9dBHHmTZxU,196192
8
+ stem_agent-0.1.0.dist-info/METADATA,sha256=k4lS0OKyn0igm5EXd1yGEzB58xJdHnLfsrZxB8EOtMU,2562
9
+ stem_agent-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
10
+ stem_agent-0.1.0.dist-info/entry_points.txt,sha256=30QpUE4BxwW0Yhm9LRBMjne0qPaSk3l1zkWmptqQs6U,112
11
+ stem_agent-0.1.0.dist-info/top_level.txt,sha256=GNdXKc_nMm3W4J6hGID7n7q_AoB9_HVN0LRq7LX0Wuo,21
12
+ stem_agent-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ stem-agent = stem_agent_installer.cli:main
3
+ stem-agent-install = stem_agent_installer.cli:main
@@ -0,0 +1,26 @@
1
+ STEM Agent Free Alpha Proprietary License
2
+
3
+ Copyright (c) 2026 Exergy Lab. All rights reserved.
4
+
5
+ STEM Agent is proprietary software. It is free to download and use under this
6
+ license, but it is not open source.
7
+
8
+ Exergy Lab grants each person or organization that obtains STEM Agent from an
9
+ authorized Exergy Lab distribution channel a non-exclusive, non-transferable,
10
+ revocable license to install and use the Free Alpha for personal, research,
11
+ educational, and internal business purposes at no charge.
12
+
13
+ You may not redistribute, sublicense, sell, rent, host for third parties,
14
+ publish, or create derivative works from STEM Agent, except with prior written
15
+ permission from Exergy Lab. You may not remove proprietary notices. Where a
16
+ restriction is prohibited by applicable law, it applies only to the maximum
17
+ extent permitted by that law.
18
+
19
+ STEM Agent is pre-release software. It is provided "as is", without warranties
20
+ or fitness guarantees. Outputs and verifier receipts are evidence about the
21
+ checks that were actually run; they are not a warranty of scientific truth or
22
+ authorization to rely on the software as the sole authority for safety-critical,
23
+ regulated, or consequential decisions.
24
+
25
+ Third-party software installed for use with STEM Agent remains subject to its
26
+ own license terms. This license neither replaces nor restricts those terms.
@@ -0,0 +1,16 @@
1
+ Third-party software notice
2
+
3
+ The STEM Agent bootstrap wheel contains Exergy Lab software and an Exergy Lab
4
+ release bundle. It does not embed the third-party scientific distribution
5
+ archives. During setup, the installer downloads a hash-locked dependency set
6
+ from the Python Package Index and installs it into the local worker runtime.
7
+
8
+ Each third-party component remains subject to its own license. The installed
9
+ license and notice files are retained in that component's Python distribution
10
+ metadata. The complete, versioned dependency set is recorded in the release
11
+ bundle's requirements lock and in the installation doctor report.
12
+
13
+ The 40 direct scientific components and the MCP runtime are declared in the
14
+ embedded STEM Agent product wheel. Transitive components are included in the
15
+ hash-locked requirements file. Exergy Lab does not claim ownership of any
16
+ third-party component.
@@ -0,0 +1 @@
1
+ stem_agent_installer
@@ -0,0 +1,3 @@
1
+ """Public PyPI bootstrap for STEM Agent Free."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,5 @@
1
+ from .cli import main
2
+
3
+
4
+ if __name__ == "__main__":
5
+ raise SystemExit(main())
@@ -0,0 +1,217 @@
1
+ """Verify and install the public STEM Agent Free Alpha bundle."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ from hashlib import sha256
7
+ from importlib import resources
8
+ import json
9
+ import os
10
+ from pathlib import Path, PurePosixPath
11
+ import shutil
12
+ import subprocess
13
+ import sys
14
+ import tempfile
15
+ from typing import Any
16
+ import zipfile
17
+
18
+
19
+ PAYLOAD_SCHEMA = "stem-agent-public-pypi-installer-payload/1"
20
+ BUNDLE_SCHEMA = "stem-agent-product-bundle-manifest/2"
21
+ DISTRIBUTION_CHANNEL = "PUBLIC_FREE_ALPHA"
22
+
23
+
24
+ def _file_sha256(path: Path) -> str:
25
+ digest = sha256()
26
+ with path.open("rb") as handle:
27
+ while chunk := handle.read(1024 * 1024):
28
+ digest.update(chunk)
29
+ return digest.hexdigest()
30
+
31
+
32
+ def _safe_members(archive: zipfile.ZipFile, destination: Path) -> None:
33
+ resolved_destination = destination.resolve()
34
+ for member in archive.infolist():
35
+ normalized = member.filename.replace("\\", "/")
36
+ relative = PurePosixPath(normalized)
37
+ if (
38
+ relative.is_absolute()
39
+ or ".." in relative.parts
40
+ or not relative.parts
41
+ or relative.parts[0].endswith(":")
42
+ ):
43
+ raise RuntimeError("the embedded STEM Agent bundle contains an unsafe path")
44
+ target = resolved_destination.joinpath(*relative.parts).resolve()
45
+ if target != resolved_destination and resolved_destination not in target.parents:
46
+ raise RuntimeError("the embedded STEM Agent bundle contains an unsafe path")
47
+
48
+
49
+ def _verify_and_extract(
50
+ archive_path: Path, record: dict[str, Any], destination: Path
51
+ ) -> dict[str, Any]:
52
+ if record.get("schema_version") != PAYLOAD_SCHEMA:
53
+ raise RuntimeError("the PyPI installer payload record is not recognized")
54
+ expected_name = record.get("bundle_filename")
55
+ if archive_path.name != expected_name:
56
+ raise RuntimeError("the embedded STEM Agent bundle name does not match its record")
57
+ observed_hash = _file_sha256(archive_path)
58
+ if observed_hash != record.get("bundle_sha256"):
59
+ raise RuntimeError("the embedded STEM Agent bundle failed its SHA-256 check")
60
+ if record.get("distribution_channel") != DISTRIBUTION_CHANNEL:
61
+ raise RuntimeError("the public Free Alpha distribution channel is missing")
62
+ if record.get("public_pypi_upload_allowed") is not True:
63
+ raise RuntimeError("the owner-authorized public PyPI boundary is missing")
64
+ if record.get("owner_authorized_public_distribution") is not True:
65
+ raise RuntimeError("public distribution has not been authorized")
66
+ if record.get("release_promoted") is not False:
67
+ raise RuntimeError("an unrecognized release state was supplied")
68
+
69
+ destination.mkdir(parents=True, exist_ok=False)
70
+ with zipfile.ZipFile(archive_path) as archive:
71
+ _safe_members(archive, destination)
72
+ archive.extractall(destination)
73
+
74
+ manifest_path = destination / "manifest.json"
75
+ if not manifest_path.is_file():
76
+ raise RuntimeError("the embedded STEM Agent bundle has no manifest")
77
+ manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
78
+ if (
79
+ manifest.get("schema_version") != BUNDLE_SCHEMA
80
+ or manifest.get("product") != "STEM Agent"
81
+ or manifest.get("distribution_channel") != DISTRIBUTION_CHANNEL
82
+ or manifest.get("license") != "PROPRIETARY_FREE_ALPHA"
83
+ or manifest.get("supported_harness_count") != 15
84
+ or manifest.get("redistribution_authorized") is not True
85
+ or manifest.get("release_promoted") is not False
86
+ ):
87
+ raise RuntimeError("the embedded bundle is not the public STEM Agent Free Alpha")
88
+
89
+ verified_artifacts = 0
90
+ for artifact in manifest.get("artifacts", []):
91
+ relative = PurePosixPath(str(artifact.get("relative_path", "")))
92
+ if relative.is_absolute() or ".." in relative.parts or not relative.parts:
93
+ raise RuntimeError("the embedded bundle manifest contains an unsafe artifact path")
94
+ artifact_path = destination.joinpath(*relative.parts)
95
+ if not artifact_path.is_file():
96
+ raise RuntimeError("the embedded STEM Agent bundle is incomplete")
97
+ if artifact_path.stat().st_size != artifact.get("size_bytes"):
98
+ raise RuntimeError("an embedded STEM Agent artifact has the wrong size")
99
+ if _file_sha256(artifact_path) != artifact.get("sha256"):
100
+ raise RuntimeError("an embedded STEM Agent artifact failed its SHA-256 check")
101
+ verified_artifacts += 1
102
+
103
+ if verified_artifacts == 0:
104
+ raise RuntimeError("the embedded STEM Agent bundle contains no recorded artifacts")
105
+ return {
106
+ "schema_version": "stem-agent-public-pypi-installer-verification/1",
107
+ "outcome": "VERIFIED",
108
+ "product": "STEM Agent",
109
+ "product_version": manifest["version"],
110
+ "distribution_channel": DISTRIBUTION_CHANNEL,
111
+ "bundle_sha256": observed_hash,
112
+ "manifest_sha256": _file_sha256(manifest_path),
113
+ "verified_artifact_count": verified_artifacts,
114
+ "supported_harness_count": 15,
115
+ "public_pypi_upload_allowed": True,
116
+ "owner_authorized_public_distribution": True,
117
+ "release_promoted": False,
118
+ "local_paths_included": False,
119
+ "credential_material_included": False,
120
+ }
121
+
122
+
123
+ def _python_312_command() -> list[str]:
124
+ configured = os.environ.get("STEM_AGENT_PYTHON")
125
+ candidates: list[list[str]] = []
126
+ if configured:
127
+ candidates.append([configured])
128
+ if sys.version_info[:2] == (3, 12):
129
+ candidates.append([sys.executable])
130
+ if os.name == "nt":
131
+ launcher = shutil.which("py")
132
+ if launcher:
133
+ candidates.append([launcher, "-3.12"])
134
+ else:
135
+ executable = shutil.which("python3.12")
136
+ if executable:
137
+ candidates.append([executable])
138
+
139
+ for candidate in candidates:
140
+ completed = subprocess.run(
141
+ [
142
+ *candidate,
143
+ "-c",
144
+ "import sys; raise SystemExit(0 if sys.version_info[:2] == (3, 12) else 1)",
145
+ ],
146
+ check=False,
147
+ stdout=subprocess.DEVNULL,
148
+ stderr=subprocess.DEVNULL,
149
+ )
150
+ if completed.returncode == 0:
151
+ return candidate
152
+ raise RuntimeError(
153
+ "Python 3.12 is required. Install it, then run this command again."
154
+ )
155
+
156
+
157
+ def _installer_command(bundle_root: Path, arguments: argparse.Namespace) -> list[str]:
158
+ command = [*_python_312_command(), str(bundle_root / "install.py")]
159
+ if arguments.install_root is not None:
160
+ command.extend(["--install-root", str(arguments.install_root)])
161
+ for option in (
162
+ "skip_agent_registration",
163
+ "skip_codex_registration",
164
+ "skip_claude_registration",
165
+ ):
166
+ if getattr(arguments, option):
167
+ command.append("--" + option.replace("_", "-"))
168
+ return command
169
+
170
+
171
+ def _parser() -> argparse.ArgumentParser:
172
+ parser = argparse.ArgumentParser(
173
+ prog="stem-agent",
174
+ description=(
175
+ "Install STEM Agent Free and connect it to supported coding agents."
176
+ ),
177
+ )
178
+ parser.add_argument("--install-root", type=Path)
179
+ parser.add_argument("--skip-agent-registration", action="store_true")
180
+ parser.add_argument("--skip-codex-registration", action="store_true")
181
+ parser.add_argument("--skip-claude-registration", action="store_true")
182
+ parser.add_argument(
183
+ "--verify-only",
184
+ action="store_true",
185
+ help="verify the embedded public release bundle without installing it",
186
+ )
187
+ parser.add_argument("--version", action="version", version="STEM Agent Free 0.1.0")
188
+ return parser
189
+
190
+
191
+ def main(argv: list[str] | None = None) -> int:
192
+ arguments = _parser().parse_args(argv)
193
+ package_root = resources.files("stem_agent_installer")
194
+ payload_root = package_root.joinpath("payload")
195
+ record = json.loads(payload_root.joinpath("payload.json").read_text(encoding="utf-8"))
196
+ archive_resource = payload_root.joinpath(str(record.get("bundle_filename", "")))
197
+
198
+ try:
199
+ with resources.as_file(archive_resource) as archive_path:
200
+ with tempfile.TemporaryDirectory(prefix="stem-agent-install-") as temporary:
201
+ bundle_root = Path(temporary) / "bundle"
202
+ verification = _verify_and_extract(Path(archive_path), record, bundle_root)
203
+ if arguments.verify_only:
204
+ print(json.dumps(verification, indent=2, sort_keys=True))
205
+ return 0
206
+ print("Verified the STEM Agent Free package.")
207
+ completed = subprocess.run(
208
+ _installer_command(bundle_root, arguments),
209
+ check=False,
210
+ )
211
+ return completed.returncode
212
+ except (OSError, RuntimeError, ValueError, zipfile.BadZipFile) as error:
213
+ raise SystemExit(f"STEM Agent installation stopped safely: {error}") from error
214
+
215
+
216
+ if __name__ == "__main__":
217
+ raise SystemExit(main())
@@ -0,0 +1,12 @@
1
+ {
2
+ "bundle_filename": "stem-agent-0.1.0-free-alpha.zip",
3
+ "bundle_sha256": "f91b048d6f03f351039d0d25b39206455f03846e2dbc69e2a3d7411c79936715",
4
+ "bundle_size_bytes": 196192,
5
+ "distribution_channel": "PUBLIC_FREE_ALPHA",
6
+ "owner_authorized_public_distribution": true,
7
+ "product": "STEM Agent",
8
+ "product_version": "0.1.0",
9
+ "public_pypi_upload_allowed": true,
10
+ "release_promoted": false,
11
+ "schema_version": "stem-agent-public-pypi-installer-payload/1"
12
+ }