albus-cli 0.8.2__tar.gz → 0.9.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.
- {albus_cli-0.8.2 → albus_cli-0.9.0}/PKG-INFO +3 -3
- {albus_cli-0.8.2 → albus_cli-0.9.0}/README.md +1 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/pyproject.toml +2 -2
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/oauth.py +4 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_auth.py +7 -7
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_billing.py +1 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_credentials.py +1 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_invites.py +1 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_oauth.py +9 -4
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_organization.py +1 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_status.py +1 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_tokens.py +1 -1
- {albus_cli-0.8.2 → albus_cli-0.9.0}/uv.lock +5 -5
- {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/pull_request_template.md +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/workflows/close-pull-requests.yml +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/.gitignore +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/AGENTS.md +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/CONTRIBUTING.md +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/LICENSE +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/Makefile +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/RELEASING.md +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/SECURITY.md +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/install.ps1 +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/install.sh +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/pyrightconfig.json +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/setup.sh +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/__init__.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/__main__.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/client.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/__init__.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/agents.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/auth.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/billing.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/invites.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/memories.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/models.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/organization.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/secrets.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/sessions.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/status.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/tokens.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/traces.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/context.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/credentials.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/docs.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/main.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/output.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/__init__.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/conftest.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_bump_sdk.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_cli.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_health.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_memories.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_models.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_release_scripts.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_traces.py +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/bump-sdk +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/check +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/mirror-release +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/publish +0 -0
- {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/release_state.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: albus-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Command-line client for the Albus REST API
|
|
5
5
|
Project-URL: Homepage, https://github.com/albusgroup/albus-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/albusgroup/albus-cli
|
|
@@ -9,7 +9,7 @@ Author: Albus
|
|
|
9
9
|
License-Expression: MIT
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Requires-Python: >=3.11
|
|
12
|
-
Requires-Dist: albus-sdk==0.
|
|
12
|
+
Requires-Dist: albus-sdk==0.17.0
|
|
13
13
|
Requires-Dist: typer<0.28,>=0.26.8
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
|
|
@@ -74,7 +74,7 @@ agent harnesses need not touch disk:
|
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
76
|
export ALBUS_API_KEY=... # organization API key
|
|
77
|
-
export ALBUS_BASE_URL=http://localhost:8080/api # optional; defaults to prod
|
|
77
|
+
export ALBUS_BASE_URL=http://localhost:8080/api/v1 # optional; defaults to prod
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
`--base-url` overrides `ALBUS_BASE_URL`, and `--timeout` bounds each request
|
|
@@ -59,7 +59,7 @@ agent harnesses need not touch disk:
|
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
export ALBUS_API_KEY=... # organization API key
|
|
62
|
-
export ALBUS_BASE_URL=http://localhost:8080/api # optional; defaults to prod
|
|
62
|
+
export ALBUS_BASE_URL=http://localhost:8080/api/v1 # optional; defaults to prod
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
`--base-url` overrides `ALBUS_BASE_URL`, and `--timeout` bounds each request
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "albus-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.9.0"
|
|
8
8
|
description = "Command-line client for the Albus REST API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -13,7 +13,7 @@ authors = [{ name = "Albus" }]
|
|
|
13
13
|
dependencies = [
|
|
14
14
|
# Pinned, not floated: the published CLI states the one SDK version it was
|
|
15
15
|
# tested against, and bumping it is a reviewed edit made when releasing.
|
|
16
|
-
"albus-sdk==0.
|
|
16
|
+
"albus-sdk==0.17.0",
|
|
17
17
|
"typer>=0.26.8,<0.28",
|
|
18
18
|
]
|
|
19
19
|
|
|
@@ -65,14 +65,16 @@ _DEV = TenantConfig(
|
|
|
65
65
|
audience="https://api.albus.dev",
|
|
66
66
|
)
|
|
67
67
|
_PRODUCTION = TenantConfig(
|
|
68
|
-
domain="
|
|
68
|
+
domain="login.albus.sh",
|
|
69
69
|
client_id="AKj5qYBdhejMt3ztROUJDBtHThmXmQL1",
|
|
70
70
|
audience="https://api.albus.sh",
|
|
71
71
|
)
|
|
72
72
|
_UNCONFIGURED = TenantConfig(domain="", client_id="", audience="")
|
|
73
73
|
_TENANTS = {
|
|
74
|
+
"http://localhost:8080/api/v1": _DEV,
|
|
74
75
|
"http://localhost:8080/api": _DEV,
|
|
75
76
|
"http://localhost:8080": _DEV,
|
|
77
|
+
"https://albus.sh/api/v1": _PRODUCTION,
|
|
76
78
|
"https://albus.sh/api": _PRODUCTION,
|
|
77
79
|
}
|
|
78
80
|
|
|
@@ -130,6 +132,7 @@ def authorize(
|
|
|
130
132
|
"redirect_uri": redirect_uri,
|
|
131
133
|
"scope": SCOPE,
|
|
132
134
|
"audience": tenant.audience,
|
|
135
|
+
"connection": "google-oauth2",
|
|
133
136
|
"code_challenge": _code_challenge(verifier),
|
|
134
137
|
"code_challenge_method": "S256",
|
|
135
138
|
"state": state,
|
|
@@ -20,7 +20,7 @@ from tests.conftest import FakeAlbus
|
|
|
20
20
|
|
|
21
21
|
runner = CliRunner()
|
|
22
22
|
|
|
23
|
-
BASE_URL = "https://albus.sh/api"
|
|
23
|
+
BASE_URL = "https://albus.sh/api/v1"
|
|
24
24
|
LOCAL_URL = "http://localhost:8080/api"
|
|
25
25
|
TENANT = oauth.TenantConfig(
|
|
26
26
|
domain="albus.us.auth0.com", client_id="cli", audience="https://api"
|
|
@@ -173,7 +173,7 @@ def test_rejected_refresh_reports_an_expired_session(
|
|
|
173
173
|
fails(monkeypatch, "sessions", "list")
|
|
174
174
|
|
|
175
175
|
reported = capsys.readouterr().err
|
|
176
|
-
assert "your session for https://albus.sh/api expired" in reported
|
|
176
|
+
assert "your session for https://albus.sh/api/v1 expired" in reported
|
|
177
177
|
assert "invalid_grant" in reported
|
|
178
178
|
assert "albus login" in reported
|
|
179
179
|
|
|
@@ -199,7 +199,7 @@ def test_no_credential_names_both_ways_to_get_one(
|
|
|
199
199
|
fails(monkeypatch, "sessions", "list")
|
|
200
200
|
|
|
201
201
|
reported = capsys.readouterr().err
|
|
202
|
-
assert "not signed in to https://albus.sh/api" in reported
|
|
202
|
+
assert "not signed in to https://albus.sh/api/v1" in reported
|
|
203
203
|
assert "albus login" in reported
|
|
204
204
|
assert "ALBUS_API_KEY" in reported
|
|
205
205
|
|
|
@@ -230,7 +230,7 @@ def test_login_stores_the_session_and_prints_whoami(
|
|
|
230
230
|
assert "Signed in as carlo@albus.sh in Albus" in result.output
|
|
231
231
|
assert '"active_organization"' in result.output
|
|
232
232
|
assert '"organizations"' in result.output
|
|
233
|
-
assert "https://albus.sh/api" in result.output
|
|
233
|
+
assert "https://albus.sh/api/v1" in result.output
|
|
234
234
|
assert str(config_dir / "credentials.json") in result.output
|
|
235
235
|
saved = credentials.load(BASE_URL)
|
|
236
236
|
assert saved is not None
|
|
@@ -366,7 +366,7 @@ def test_a_rejected_api_key_is_not_told_to_sign_in(
|
|
|
366
366
|
|
|
367
367
|
reported = capsys.readouterr().err
|
|
368
368
|
assert "the API key in ALBUS_API_KEY was rejected" in reported
|
|
369
|
-
assert "https://albus.sh/api" in reported
|
|
369
|
+
assert "https://albus.sh/api/v1" in reported
|
|
370
370
|
assert "albus login" not in reported.split("unset ALBUS_API_KEY")[0]
|
|
371
371
|
|
|
372
372
|
|
|
@@ -380,7 +380,7 @@ def test_a_rejected_session_says_to_sign_in_again(
|
|
|
380
380
|
fails(monkeypatch, "sessions", "list")
|
|
381
381
|
|
|
382
382
|
reported = capsys.readouterr().err
|
|
383
|
-
assert "your session for https://albus.sh/api was rejected" in reported
|
|
383
|
+
assert "your session for https://albus.sh/api/v1 was rejected" in reported
|
|
384
384
|
assert "albus login" in reported
|
|
385
385
|
assert "401" not in reported
|
|
386
386
|
|
|
@@ -500,7 +500,7 @@ def test_logout_forgets_the_session(signed_out: FakeAlbus) -> None:
|
|
|
500
500
|
result = runner.invoke(app, ["logout"])
|
|
501
501
|
|
|
502
502
|
assert result.exit_code == 0, result.output
|
|
503
|
-
assert "Signed out of https://albus.sh/api" in result.output
|
|
503
|
+
assert "Signed out of https://albus.sh/api/v1" in result.output
|
|
504
504
|
assert credentials.load(BASE_URL) is None
|
|
505
505
|
|
|
506
506
|
|
|
@@ -102,6 +102,7 @@ def test_authorize_exchanges_the_redirected_code_for_tokens(
|
|
|
102
102
|
assert authorization["client_id"] == "client-1"
|
|
103
103
|
assert authorization["audience"] == TENANT.audience
|
|
104
104
|
assert authorization["scope"] == oauth.SCOPE
|
|
105
|
+
assert authorization["connection"] == "google-oauth2"
|
|
105
106
|
assert authorization["code_challenge_method"] == "S256"
|
|
106
107
|
assert authorization["redirect_uri"].startswith("http://127.0.0.1:")
|
|
107
108
|
assert authorization["redirect_uri"].endswith("/callback")
|
|
@@ -307,7 +308,8 @@ def test_refresh_reports_a_revoked_refresh_token(auth0: Auth0) -> None:
|
|
|
307
308
|
@pytest.mark.parametrize(
|
|
308
309
|
"api",
|
|
309
310
|
[
|
|
310
|
-
"http://localhost:8080/api/",
|
|
311
|
+
"http://localhost:8080/api/v1/",
|
|
312
|
+
"http://localhost:8080/api/v1",
|
|
311
313
|
"http://localhost:8080/api",
|
|
312
314
|
"http://localhost:8080",
|
|
313
315
|
],
|
|
@@ -329,16 +331,19 @@ def test_tenant_config_signs_the_local_api_in_to_the_dev_tenant(
|
|
|
329
331
|
)
|
|
330
332
|
|
|
331
333
|
|
|
334
|
+
@pytest.mark.parametrize(
|
|
335
|
+
"api", ["https://albus.sh/api/v1", "https://albus.sh/api"]
|
|
336
|
+
)
|
|
332
337
|
def test_tenant_config_signs_the_default_api_in_to_the_production_tenant(
|
|
333
|
-
monkeypatch: pytest.MonkeyPatch,
|
|
338
|
+
monkeypatch: pytest.MonkeyPatch, api: str
|
|
334
339
|
) -> None:
|
|
335
340
|
for env in (oauth.DOMAIN_ENV, oauth.CLIENT_ID_ENV, oauth.AUDIENCE_ENV):
|
|
336
341
|
monkeypatch.delenv(env, raising=False)
|
|
337
342
|
|
|
338
|
-
tenant = oauth.tenant_config(
|
|
343
|
+
tenant = oauth.tenant_config(api)
|
|
339
344
|
|
|
340
345
|
assert tenant == oauth.TenantConfig(
|
|
341
|
-
domain="
|
|
346
|
+
domain="login.albus.sh",
|
|
342
347
|
client_id="AKj5qYBdhejMt3ztROUJDBtHThmXmQL1",
|
|
343
348
|
audience="https://api.albus.sh",
|
|
344
349
|
)
|
|
@@ -8,7 +8,7 @@ resolution-markers = [
|
|
|
8
8
|
|
|
9
9
|
[[package]]
|
|
10
10
|
name = "albus-cli"
|
|
11
|
-
version = "0.
|
|
11
|
+
version = "0.9.0"
|
|
12
12
|
source = { editable = "." }
|
|
13
13
|
dependencies = [
|
|
14
14
|
{ name = "albus-sdk" },
|
|
@@ -24,7 +24,7 @@ dev = [
|
|
|
24
24
|
|
|
25
25
|
[package.metadata]
|
|
26
26
|
requires-dist = [
|
|
27
|
-
{ name = "albus-sdk", specifier = "==0.
|
|
27
|
+
{ name = "albus-sdk", specifier = "==0.17.0" },
|
|
28
28
|
{ name = "typer", specifier = ">=0.26.8,<0.28" },
|
|
29
29
|
]
|
|
30
30
|
|
|
@@ -37,16 +37,16 @@ dev = [
|
|
|
37
37
|
|
|
38
38
|
[[package]]
|
|
39
39
|
name = "albus-sdk"
|
|
40
|
-
version = "0.
|
|
40
|
+
version = "0.17.0"
|
|
41
41
|
source = { registry = "https://pypi.org/simple" }
|
|
42
42
|
dependencies = [
|
|
43
43
|
{ name = "httpcore" },
|
|
44
44
|
{ name = "httpx" },
|
|
45
45
|
{ name = "pydantic" },
|
|
46
46
|
]
|
|
47
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
47
|
+
sdist = { url = "https://files.pythonhosted.org/packages/94/83/729db87ab7ea5f9d85e1ec4adae2e7a1ef07126141e099d8974af5a71318/albus_sdk-0.17.0.tar.gz", hash = "sha256:8750832936a19b7e21d641199ece24f189ff2c3888c6d38b001f46bb915f010e", size = 90624, upload-time = "2026-09-13T22:28:14.105Z" }
|
|
48
48
|
wheels = [
|
|
49
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
49
|
+
{ url = "https://files.pythonhosted.org/packages/fe/2e/5f538d30b0b4a7c5694a81a6fe210695763ca534cdc5d102fe38ec20c7a0/albus_sdk-0.17.0-py3-none-any.whl", hash = "sha256:a27c6317a97b1c75678bfe3bbba4e532221a5f7edf77a9fcdb1919e08fbbd823", size = 149472, upload-time = "2026-09-13T22:28:13.101Z" },
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
[[package]]
|
|
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
|