rly 0.1.0__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.
rly-0.1.0/.gitignore ADDED
@@ -0,0 +1,44 @@
1
+ node_modules/
2
+ dist/
3
+ .env
4
+ .env.*
5
+ *.env
6
+ !.env.example
7
+ .claude/
8
+ *.log
9
+ coverage/
10
+ .turbo/
11
+ *.tsbuildinfo
12
+ __pycache__/
13
+ *.pyc
14
+ .pytest_cache/
15
+ .venv/
16
+ *.egg-info/
17
+ .DS_Store
18
+ benchmarks/cost-experiment/results.json
19
+ benchmarks/cost-experiment/*results*.json
20
+
21
+ # Stray tsc output in sdk src/ — real output lives in packages/sdk/dist/
22
+ packages/sdk/src/**/*.js
23
+ packages/sdk/src/**/*.js.map
24
+ packages/sdk/src/**/*.d.ts
25
+ packages/sdk/src/**/*.d.ts.map
26
+
27
+ # Guardrail-proxy eval/opt run outputs (corpora are tracked, results are not)
28
+ services/guardrail-proxy/eval_results*.json
29
+ services/guardrail-proxy/opt_round*.json
30
+ services/guardrail-proxy/oos_*_eval.json
31
+ scripts/.smoke-byoes-fixture.env
32
+ scripts/.smoke-byoes-extras.env
33
+
34
+ # Local-only archive of stray/orphaned files we want off the working tree
35
+ # but preserved on disk for forensics. Never committed.
36
+ archive/
37
+
38
+ # Allow eval-baseline logs as audit-trail evidence
39
+ !services/guardrail-proxy/eval_baselines/*.log
40
+
41
+ # Allow stress-test scenario evidence (stdout.log + proxy-log-excerpt.log)
42
+ # under audits/ — these are signed-verdict-anchored evidence per
43
+ # plans/granite-guardian-failover-saturation-stress-test.md §11.
44
+ !audits/**/*.log
rly-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,47 @@
1
+ Metadata-Version: 2.4
2
+ Name: rly
3
+ Version: 0.1.0
4
+ Summary: PyPI launcher for the ReplyLayer CLI
5
+ Project-URL: Homepage, https://replylayer.ai
6
+ Project-URL: Repository, https://github.com/mcintoshjames-sketch/ReplyLayer
7
+ Project-URL: Issues, https://github.com/mcintoshjames-sketch/ReplyLayer/issues
8
+ Author: ReplyLayer
9
+ License-Expression: MIT
10
+ Keywords: agent,ai,cli,email,mailbox,replylayer
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Topic :: Communications :: Email
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+
21
+ # rly
22
+
23
+ `rly` is the PyPI launcher for the ReplyLayer CLI.
24
+
25
+ ```bash
26
+ pip install rly
27
+ rly --help
28
+ ```
29
+
30
+ The installed `rly` command delegates to the official npm package:
31
+ `replylayer@latest`.
32
+
33
+ ## Requirements
34
+
35
+ - Python 3.10+
36
+ - Node.js 22+ with npm/npx on `PATH`
37
+
38
+ ## Examples
39
+
40
+ ```bash
41
+ rly auth login
42
+ rly mailbox list
43
+ rly inbox list --mailbox support-bot
44
+ ```
45
+
46
+ For full CLI documentation, see the ReplyLayer repository:
47
+ https://github.com/mcintoshjames-sketch/ReplyLayer
rly-0.1.0/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # rly
2
+
3
+ `rly` is the PyPI launcher for the ReplyLayer CLI.
4
+
5
+ ```bash
6
+ pip install rly
7
+ rly --help
8
+ ```
9
+
10
+ The installed `rly` command delegates to the official npm package:
11
+ `replylayer@latest`.
12
+
13
+ ## Requirements
14
+
15
+ - Python 3.10+
16
+ - Node.js 22+ with npm/npx on `PATH`
17
+
18
+ ## Examples
19
+
20
+ ```bash
21
+ rly auth login
22
+ rly mailbox list
23
+ rly inbox list --mailbox support-bot
24
+ ```
25
+
26
+ For full CLI documentation, see the ReplyLayer repository:
27
+ https://github.com/mcintoshjames-sketch/ReplyLayer
@@ -0,0 +1,35 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "rly"
7
+ version = "0.1.0"
8
+ description = "PyPI launcher for the ReplyLayer CLI"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.10"
12
+ keywords = ["email", "ai", "agent", "cli", "replylayer", "mailbox"]
13
+ authors = [
14
+ { name = "ReplyLayer" },
15
+ ]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Environment :: Console",
19
+ "Intended Audience :: Developers",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3 :: Only",
23
+ "Topic :: Communications :: Email",
24
+ ]
25
+
26
+ [project.urls]
27
+ Homepage = "https://replylayer.ai"
28
+ Repository = "https://github.com/mcintoshjames-sketch/ReplyLayer"
29
+ Issues = "https://github.com/mcintoshjames-sketch/ReplyLayer/issues"
30
+
31
+ [project.scripts]
32
+ rly = "rly.cli:main"
33
+
34
+ [tool.hatch.build.targets.wheel]
35
+ packages = ["rly"]
@@ -0,0 +1,3 @@
1
+ """PyPI launcher for the ReplyLayer CLI."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,5 @@
1
+ from .cli import main
2
+
3
+
4
+ if __name__ == "__main__":
5
+ main()
rly-0.1.0/rly/cli.py ADDED
@@ -0,0 +1,41 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ import shutil
5
+ import subprocess
6
+ import sys
7
+ from collections.abc import Sequence
8
+
9
+ NPM_PACKAGE = "replylayer@latest"
10
+
11
+
12
+ def main(argv: Sequence[str] | None = None) -> int:
13
+ args = list(sys.argv[1:] if argv is None else argv)
14
+ npx = shutil.which("npx")
15
+ if npx is None:
16
+ print(
17
+ "rly requires Node.js 22+ with npm/npx on PATH.\n"
18
+ "Install Node.js, then run this command again.",
19
+ file=sys.stderr,
20
+ )
21
+ return 127
22
+
23
+ env = os.environ.copy()
24
+ env.setdefault("npm_config_update_notifier", "false")
25
+
26
+ try:
27
+ completed = subprocess.run(
28
+ [npx, "--yes", NPM_PACKAGE, *args],
29
+ env=env,
30
+ check=False,
31
+ )
32
+ except FileNotFoundError:
33
+ print(
34
+ "rly could not find npx. Install Node.js 22+ with npm and try again.",
35
+ file=sys.stderr,
36
+ )
37
+ return 127
38
+ except KeyboardInterrupt:
39
+ return 130
40
+
41
+ return completed.returncode
@@ -0,0 +1,29 @@
1
+ from __future__ import annotations
2
+
3
+ import subprocess
4
+
5
+ from rly.cli import main
6
+
7
+
8
+ def test_main_forwards_args_to_replylayer(monkeypatch):
9
+ calls = []
10
+
11
+ monkeypatch.setattr("shutil.which", lambda name: "/usr/bin/npx" if name == "npx" else None)
12
+
13
+ def fake_run(cmd, env, check):
14
+ calls.append((cmd, env, check))
15
+ return subprocess.CompletedProcess(cmd, 0)
16
+
17
+ monkeypatch.setattr("subprocess.run", fake_run)
18
+
19
+ assert main(["auth", "status"]) == 0
20
+ assert calls[0][0] == ["/usr/bin/npx", "--yes", "replylayer@latest", "auth", "status"]
21
+ assert calls[0][1]["npm_config_update_notifier"] == "false"
22
+ assert calls[0][2] is False
23
+
24
+
25
+ def test_main_reports_missing_npx(monkeypatch, capsys):
26
+ monkeypatch.setattr("shutil.which", lambda name: None)
27
+
28
+ assert main(["--help"]) == 127
29
+ assert "requires Node.js 22+" in capsys.readouterr().err
rly-0.1.0/uv.lock ADDED
@@ -0,0 +1,8 @@
1
+ version = 1
2
+ revision = 3
3
+ requires-python = ">=3.10"
4
+
5
+ [[package]]
6
+ name = "rly"
7
+ version = "0.1.0"
8
+ source = { editable = "." }