trap-cli 0.0.3__tar.gz → 0.0.4__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.
- {trap_cli-0.0.3 → trap_cli-0.0.4}/PKG-INFO +1 -1
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/_version.py +2 -2
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/cli/__init__.py +19 -10
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/cli/_auth.py +2 -4
- trap_cli-0.0.4/src/trap/cli/_console.py +22 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/.gitignore +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/LICENSE +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/README.md +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/examples/echo/task/README.md +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/pyproject.toml +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/auth/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/auth/client.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/auth/login.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/auth/oauth.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/auth/store.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/cost/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/cost/calculator.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/cost/providers.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/cost/proxy.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/display/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/display/progress.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/display/submit.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/environment/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/environment/detector.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/git_ops/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/git_ops/base.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/git_ops/local.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/git_ops/remote.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/git_ops/rev.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/git_ops/url.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/loader/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/loader/errors.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/loader/trap_yaml.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/loader/traptask_yaml.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/cost.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/environment.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/provenance.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/report.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/results.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/trap_yaml.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/models/traptask_yaml.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/report/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/report/base.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/report/handle.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/report/json.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/report/rich.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/__init__.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/capture.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/grader.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/judge.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/layout.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/proc.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/solution.py +0 -0
- {trap_cli-0.0.3 → trap_cli-0.0.4}/src/trap/runner/task.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: trap-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.4
|
|
4
4
|
Summary: tp — non-invasive CLI testing framework for AI workflows. Submits results to trapstreet.run.
|
|
5
5
|
Project-URL: Homepage, https://trapstreet.run
|
|
6
6
|
Project-URL: Repository, https://github.com/trapstreet/trap
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 0,
|
|
21
|
+
__version__ = version = '0.0.4'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 4)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -8,10 +8,11 @@ from pathlib import Path
|
|
|
8
8
|
from typing import Annotated
|
|
9
9
|
|
|
10
10
|
import typer
|
|
11
|
-
from rich.console import Console
|
|
12
11
|
|
|
12
|
+
from trap import __version__
|
|
13
13
|
from trap.auth import DEFAULT_SERVER, ApiClient, ApiError, AuthStore
|
|
14
14
|
from trap.cli._auth import auth_app
|
|
15
|
+
from trap.cli._console import _die, _env_truthy, console, err_console
|
|
15
16
|
from trap.display import CaseProgress, render_submit_result
|
|
16
17
|
from trap.environment import EnvironmentDetector
|
|
17
18
|
from trap.git_ops import GitOpsError, LocalRepo, ParsedGitUrl
|
|
@@ -22,19 +23,27 @@ from trap.runner import TaskRunner
|
|
|
22
23
|
|
|
23
24
|
app = typer.Typer(help="AI prompt / agent / workflow / testing framework.")
|
|
24
25
|
app.add_typer(auth_app, name="auth")
|
|
25
|
-
console = Console()
|
|
26
|
-
# Warnings go to stderr so `-o json` stdout stays machine-parseable.
|
|
27
|
-
err_console = Console(stderr=True)
|
|
28
26
|
|
|
29
27
|
|
|
30
|
-
def
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
def _version_callback(value: bool) -> None:
|
|
29
|
+
if value:
|
|
30
|
+
console.print(f"tp {__version__}")
|
|
31
|
+
raise typer.Exit()
|
|
34
32
|
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
@app.callback()
|
|
35
|
+
def _main(
|
|
36
|
+
version: Annotated[
|
|
37
|
+
bool,
|
|
38
|
+
typer.Option(
|
|
39
|
+
"--version",
|
|
40
|
+
help="Show the trap version and exit.",
|
|
41
|
+
callback=_version_callback,
|
|
42
|
+
is_eager=True,
|
|
43
|
+
),
|
|
44
|
+
] = False,
|
|
45
|
+
) -> None:
|
|
46
|
+
"""AI prompt / agent / workflow / testing framework."""
|
|
38
47
|
|
|
39
48
|
|
|
40
49
|
def _confirm_remote(url: str, *, trust: bool) -> None:
|
|
@@ -4,12 +4,11 @@ import sys
|
|
|
4
4
|
from typing import Annotated
|
|
5
5
|
|
|
6
6
|
import typer
|
|
7
|
-
from rich.console import Console
|
|
8
7
|
|
|
9
8
|
from trap.auth import DEFAULT_SERVER, ApiClient, ApiError, AuthStore, BrowserProvider, TokenProvider
|
|
9
|
+
from trap.cli._console import _die, console
|
|
10
10
|
|
|
11
11
|
auth_app = typer.Typer(help="Manage authentication.")
|
|
12
|
-
console = Console()
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
@auth_app.command("login")
|
|
@@ -50,8 +49,7 @@ def auth_login(
|
|
|
50
49
|
console.print(provider.pre_message)
|
|
51
50
|
auth_data = provider.acquire()
|
|
52
51
|
except (ValueError, TimeoutError) as e:
|
|
53
|
-
|
|
54
|
-
raise typer.Exit(code=2) from None
|
|
52
|
+
raise _die(e) from None
|
|
55
53
|
|
|
56
54
|
path = AuthStore().save(auth_data)
|
|
57
55
|
console.print(
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Shared CLI console objects and small helpers used across command modules."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
|
|
7
|
+
import typer
|
|
8
|
+
from rich.console import Console
|
|
9
|
+
|
|
10
|
+
console = Console()
|
|
11
|
+
# Warnings go to stderr so `-o json` stdout stays machine-parseable.
|
|
12
|
+
err_console = Console(stderr=True)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _die(msg: object) -> typer.Exit:
|
|
16
|
+
"""Print an error and return an Exit(2) to raise."""
|
|
17
|
+
console.print(f"[red]error[/red]: {msg}")
|
|
18
|
+
return typer.Exit(code=2)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _env_truthy(name: str) -> bool:
|
|
22
|
+
return os.environ.get(name, "").strip().lower() in ("1", "true", "yes", "on")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|