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 +44 -0
- rly-0.1.0/PKG-INFO +47 -0
- rly-0.1.0/README.md +27 -0
- rly-0.1.0/pyproject.toml +35 -0
- rly-0.1.0/rly/__init__.py +3 -0
- rly-0.1.0/rly/__main__.py +5 -0
- rly-0.1.0/rly/cli.py +41 -0
- rly-0.1.0/tests/test_cli.py +29 -0
- rly-0.1.0/uv.lock +8 -0
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
|
rly-0.1.0/pyproject.toml
ADDED
|
@@ -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"]
|
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
|