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.
Files changed (63) hide show
  1. {albus_cli-0.8.2 → albus_cli-0.9.0}/PKG-INFO +3 -3
  2. {albus_cli-0.8.2 → albus_cli-0.9.0}/README.md +1 -1
  3. {albus_cli-0.8.2 → albus_cli-0.9.0}/pyproject.toml +2 -2
  4. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/oauth.py +4 -1
  5. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_auth.py +7 -7
  6. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_billing.py +1 -1
  7. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_credentials.py +1 -1
  8. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_invites.py +1 -1
  9. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_oauth.py +9 -4
  10. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_organization.py +1 -1
  11. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_status.py +1 -1
  12. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_tokens.py +1 -1
  13. {albus_cli-0.8.2 → albus_cli-0.9.0}/uv.lock +5 -5
  14. {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  15. {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/pull_request_template.md +0 -0
  17. {albus_cli-0.8.2 → albus_cli-0.9.0}/.github/workflows/close-pull-requests.yml +0 -0
  18. {albus_cli-0.8.2 → albus_cli-0.9.0}/.gitignore +0 -0
  19. {albus_cli-0.8.2 → albus_cli-0.9.0}/AGENTS.md +0 -0
  20. {albus_cli-0.8.2 → albus_cli-0.9.0}/CONTRIBUTING.md +0 -0
  21. {albus_cli-0.8.2 → albus_cli-0.9.0}/LICENSE +0 -0
  22. {albus_cli-0.8.2 → albus_cli-0.9.0}/Makefile +0 -0
  23. {albus_cli-0.8.2 → albus_cli-0.9.0}/RELEASING.md +0 -0
  24. {albus_cli-0.8.2 → albus_cli-0.9.0}/SECURITY.md +0 -0
  25. {albus_cli-0.8.2 → albus_cli-0.9.0}/install.ps1 +0 -0
  26. {albus_cli-0.8.2 → albus_cli-0.9.0}/install.sh +0 -0
  27. {albus_cli-0.8.2 → albus_cli-0.9.0}/pyrightconfig.json +0 -0
  28. {albus_cli-0.8.2 → albus_cli-0.9.0}/setup.sh +0 -0
  29. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/__init__.py +0 -0
  30. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/__main__.py +0 -0
  31. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/client.py +0 -0
  32. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/__init__.py +0 -0
  33. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/agents.py +0 -0
  34. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/auth.py +0 -0
  35. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/billing.py +0 -0
  36. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/invites.py +0 -0
  37. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/memories.py +0 -0
  38. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/models.py +0 -0
  39. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/organization.py +0 -0
  40. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/secrets.py +0 -0
  41. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/sessions.py +0 -0
  42. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/status.py +0 -0
  43. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/tokens.py +0 -0
  44. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/commands/traces.py +0 -0
  45. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/context.py +0 -0
  46. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/credentials.py +0 -0
  47. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/docs.py +0 -0
  48. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/main.py +0 -0
  49. {albus_cli-0.8.2 → albus_cli-0.9.0}/src/albus_cli/output.py +0 -0
  50. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/__init__.py +0 -0
  51. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/conftest.py +0 -0
  52. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_bump_sdk.py +0 -0
  53. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_cli.py +0 -0
  54. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_health.py +0 -0
  55. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_memories.py +0 -0
  56. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_models.py +0 -0
  57. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_release_scripts.py +0 -0
  58. {albus_cli-0.8.2 → albus_cli-0.9.0}/tests/test_traces.py +0 -0
  59. {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/bump-sdk +0 -0
  60. {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/check +0 -0
  61. {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/mirror-release +0 -0
  62. {albus_cli-0.8.2 → albus_cli-0.9.0}/tools/publish +0 -0
  63. {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.8.2
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.16.1
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.8.2"
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.1",
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="albusgroup.us.auth0.com",
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
 
@@ -16,7 +16,7 @@ from tests.conftest import FakeAlbus
16
16
 
17
17
  runner = CliRunner()
18
18
 
19
- BASE_URL = "https://albus.sh/api"
19
+ BASE_URL = "https://albus.sh/api/v1"
20
20
 
21
21
 
22
22
  def test_balance(albus: FakeAlbus) -> None:
@@ -10,7 +10,7 @@ import pytest
10
10
  from albus_cli import credentials
11
11
  from albus_cli.credentials import Credential
12
12
 
13
- BASE_URL = "https://albus.sh/api"
13
+ BASE_URL = "https://albus.sh/api/v1"
14
14
 
15
15
 
16
16
  @pytest.fixture(autouse=True)
@@ -16,7 +16,7 @@ from tests.conftest import FakeAlbus
16
16
 
17
17
  runner = CliRunner()
18
18
 
19
- BASE_URL = "https://albus.sh/api"
19
+ BASE_URL = "https://albus.sh/api/v1"
20
20
 
21
21
 
22
22
  @pytest.fixture(autouse=True)
@@ -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("https://albus.sh/api")
343
+ tenant = oauth.tenant_config(api)
339
344
 
340
345
  assert tenant == oauth.TenantConfig(
341
- domain="albusgroup.us.auth0.com",
346
+ domain="login.albus.sh",
342
347
  client_id="AKj5qYBdhejMt3ztROUJDBtHThmXmQL1",
343
348
  audience="https://api.albus.sh",
344
349
  )
@@ -15,7 +15,7 @@ from tests.test_cli import sent_organization
15
15
 
16
16
  runner = CliRunner()
17
17
 
18
- BASE_URL = "https://albus.sh/api"
18
+ BASE_URL = "https://albus.sh/api/v1"
19
19
  SESSION = Credential("access", "refresh", 1_800_000_000)
20
20
 
21
21
 
@@ -19,7 +19,7 @@ from tests.conftest import FakeAlbus
19
19
 
20
20
  runner = CliRunner()
21
21
 
22
- BASE_URL = "https://albus.sh/api"
22
+ BASE_URL = "https://albus.sh/api/v1"
23
23
 
24
24
 
25
25
  @pytest.fixture(autouse=True)
@@ -17,7 +17,7 @@ from tests.conftest import FakeAlbus
17
17
 
18
18
  runner = CliRunner()
19
19
 
20
- BASE_URL = "https://albus.sh/api"
20
+ BASE_URL = "https://albus.sh/api/v1"
21
21
 
22
22
 
23
23
  @pytest.fixture(autouse=True)
@@ -8,7 +8,7 @@ resolution-markers = [
8
8
 
9
9
  [[package]]
10
10
  name = "albus-cli"
11
- version = "0.8.2"
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.16.1" },
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.16.1"
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/a1/8e/007e87d2337f6d5688bdbdcb206c1f1cda45645e51c1cd1d39bafdd58651/albus_sdk-0.16.1.tar.gz", hash = "sha256:2aca610e5b9e2202c4826e5eee65f58bc62b5c1c046f4ca6c29c78137b03ed56", size = 89839, upload-time = "2026-09-08T14:30:41.199Z" }
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/7f/c4/be7fc85666e12332b2ae6b781f46fa30dc27c5ca57ccfc7ef43b8550ff3a/albus_sdk-0.16.1-py3-none-any.whl", hash = "sha256:502aab756bb165806a88e53d26022f503704661ccb09bb0d54d4ed17f94377ee", size = 146345, upload-time = "2026-09-08T14:30:39.786Z" },
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