aac-cli 0.2.10__tar.gz → 0.2.11__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.
- {aac_cli-0.2.10/aac_cli.egg-info → aac_cli-0.2.11}/PKG-INFO +36 -9
- {aac_cli-0.2.10 → aac_cli-0.2.11}/README.md +35 -8
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/__init__.py +1 -1
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/admin_key_pem.py +3 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/api_key_rotation_state.py +4 -1
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/cli.py +320 -240
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/config.py +44 -14
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/idp_recovery.py +6 -3
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/registration_state.py +30 -18
- aac_cli-0.2.11/aac_cli/safe_output.py +311 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/sso_login.py +363 -58
- {aac_cli-0.2.10 → aac_cli-0.2.11/aac_cli.egg-info}/PKG-INFO +36 -9
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli.egg-info/SOURCES.txt +1 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/pyproject.toml +1 -1
- {aac_cli-0.2.10 → aac_cli-0.2.11}/LICENSE +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/MANIFEST.in +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/NOTICE +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/THIRD_PARTY_NOTICES.md +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/__main__.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/__init__.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/cli.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/data/action-taken-v1.json +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/data/predicates-v1.json +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/data/renderer-source.json +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/from_sidecar.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/inputs.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/model.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/narrative.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/provenance.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/schemas.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/temporal.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/theme.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/timeline_source.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/_aeg/visualizer.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/aeg_cli.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/aeg_list.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/agent_cli.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/agent_config.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/agent_health.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/agent_layout.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/agent_record.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/chain_list.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/config_render.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/dev_material.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/init_cli.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/interrupts.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/material_cases.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/profiles.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/reference.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/secure_files.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/supplied_material.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli/trace_query.py +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli.egg-info/dependency_links.txt +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli.egg-info/requires.txt +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/aac_cli.egg-info/top_level.txt +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/launchers/aac +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/launchers/aeg +0 -0
- {aac_cli-0.2.10 → aac_cli-0.2.11}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aac-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.11
|
|
4
4
|
Summary: The aac platform CLI — headless operator interface to the AAC control plane (tenant registration, chain audit).
|
|
5
5
|
Author: Agent Authority Cloud Project
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -46,8 +46,8 @@ The `aac` command is how a tenant's operator does everything that is not
|
|
|
46
46
|
done by the sidecar itself: register the tenant, sign in, manage keys,
|
|
47
47
|
workloads and domains, and prepare a runnable local workload. Everything
|
|
48
48
|
works from a terminal or a script; there is no web console to click
|
|
49
|
-
through. Output is JSON by default
|
|
50
|
-
|
|
49
|
+
through. Output is JSON by default. Commands that support table output offer
|
|
50
|
+
`--output table`; `aac sso describe` returns JSON only.
|
|
51
51
|
|
|
52
52
|
Two kinds of tenant use the same tool:
|
|
53
53
|
|
|
@@ -857,8 +857,16 @@ aac sso logout --profile stage
|
|
|
857
857
|
A developer tenant signs in with `--idp github` or `--idp google`; if you
|
|
858
858
|
need another sign-in provider, contact support@cascadeauth.com. An
|
|
859
859
|
enterprise tenant signs in through its Microsoft Entra ID connection, named
|
|
860
|
-
by the connection's exact URL with `--idp-url
|
|
861
|
-
|
|
860
|
+
by the connection's exact URL with `--idp-url`. With neither flag, the
|
|
861
|
+
tenant's own connections take precedence over the shared developer sign-ins;
|
|
862
|
+
when several remain, a terminal shows a numbered list to choose from and then
|
|
863
|
+
prints the flag that skips the prompt next time, while a script (no terminal)
|
|
864
|
+
gets exit 3 and one copy-ready command per connection. The list marks which
|
|
865
|
+
connection the cached session was last obtained through; it never shows
|
|
866
|
+
which connections have members. A developer tenant admits only the provider
|
|
867
|
+
and account it was registered with: when the AAC STS does not accept a shared
|
|
868
|
+
sign-in, the CLI reminds you of that rule and lists any other shared sign-ins. GitHub connections accept the device flow
|
|
869
|
+
only: `--flow pkce` with a GitHub connection stops locally with exit 3.
|
|
862
870
|
|
|
863
871
|
Sessions last **4 hours by default**. Your administrator may configure a
|
|
864
872
|
different lifetime for the deployment or connection. You can run
|
|
@@ -868,12 +876,20 @@ with the four-hour default, signing in at 09:00 gives an expiry of 13:00;
|
|
|
868
876
|
signing in successfully again at 12:00 gives the new session an expiry of 16:00.
|
|
869
877
|
Use `aac sso whoami --profile NAME --output table` to check the current
|
|
870
878
|
expiration. If the session expires, sign in again; no refresh token is issued.
|
|
879
|
+
A command that needs a session stops locally with exit 3 when none is cached,
|
|
880
|
+
before anything is sent, and prints the `aac sso login` command for the same
|
|
881
|
+
profile and endpoints; commands that also accept a bootstrap token name that
|
|
882
|
+
alternative.
|
|
871
883
|
|
|
872
884
|
Sign-in uses the device flow by default, so the browser can be on another
|
|
873
|
-
machine and headless hosts work.
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
885
|
+
machine and headless hosts work. On a terminal with a browser at hand
|
|
886
|
+
(macOS, a desktop session, or `BROWSER` set), the device flow also offers to
|
|
887
|
+
open the sign-in page for you: press Enter to open it in your browser, or copy
|
|
888
|
+
the printed link and code into a browser yourself; `--no-browser` turns the
|
|
889
|
+
offer off, and a script (no terminal) or a headless host never sees it. Google
|
|
890
|
+
connections use a loopback flow instead, because Google's device flow is
|
|
891
|
+
scope-restricted; `--flow` overrides the choice. `whoami` and `logout` work
|
|
892
|
+
offline and never contact AAC.
|
|
877
893
|
|
|
878
894
|
## Output and exit codes
|
|
879
895
|
|
|
@@ -921,6 +937,17 @@ a callback gives up after 300 seconds with exit `3`. HTTP timeouts remain exit
|
|
|
921
937
|
If AAC asks you to slow down, the command shows the interval to wait. The
|
|
922
938
|
CLI never replays a change on its own; wait and rerun deliberately.
|
|
923
939
|
|
|
940
|
+
The commands that can present a ceremony token (`aac tenant register`,
|
|
941
|
+
`reissue-api-key`, `assign-hosted-domain`, `reactivate-hosted-domain`,
|
|
942
|
+
`bind-trust-domain`, `list-trust-domains`, `revoke-trust-domain`,
|
|
943
|
+
`rotate-admin-key`, `aac sso register-idp`, `enroll-idp-recovery-key` and
|
|
944
|
+
`approve-idp-repair`) and `aac sso login` report a failure by HTTP status and
|
|
945
|
+
AAC error code only, never the server's message or response body, because
|
|
946
|
+
either can echo the credential the request carried; their transport failures
|
|
947
|
+
show the error class and the operating system's reason, not the library's
|
|
948
|
+
text. Other commands still print the server's message with the status and
|
|
949
|
+
code.
|
|
950
|
+
|
|
924
951
|
## Enterprise tenants
|
|
925
952
|
|
|
926
953
|
Enterprise tenants are registered through an onboarding ceremony: AAC
|
|
@@ -19,8 +19,8 @@ The `aac` command is how a tenant's operator does everything that is not
|
|
|
19
19
|
done by the sidecar itself: register the tenant, sign in, manage keys,
|
|
20
20
|
workloads and domains, and prepare a runnable local workload. Everything
|
|
21
21
|
works from a terminal or a script; there is no web console to click
|
|
22
|
-
through. Output is JSON by default
|
|
23
|
-
|
|
22
|
+
through. Output is JSON by default. Commands that support table output offer
|
|
23
|
+
`--output table`; `aac sso describe` returns JSON only.
|
|
24
24
|
|
|
25
25
|
Two kinds of tenant use the same tool:
|
|
26
26
|
|
|
@@ -830,8 +830,16 @@ aac sso logout --profile stage
|
|
|
830
830
|
A developer tenant signs in with `--idp github` or `--idp google`; if you
|
|
831
831
|
need another sign-in provider, contact support@cascadeauth.com. An
|
|
832
832
|
enterprise tenant signs in through its Microsoft Entra ID connection, named
|
|
833
|
-
by the connection's exact URL with `--idp-url
|
|
834
|
-
|
|
833
|
+
by the connection's exact URL with `--idp-url`. With neither flag, the
|
|
834
|
+
tenant's own connections take precedence over the shared developer sign-ins;
|
|
835
|
+
when several remain, a terminal shows a numbered list to choose from and then
|
|
836
|
+
prints the flag that skips the prompt next time, while a script (no terminal)
|
|
837
|
+
gets exit 3 and one copy-ready command per connection. The list marks which
|
|
838
|
+
connection the cached session was last obtained through; it never shows
|
|
839
|
+
which connections have members. A developer tenant admits only the provider
|
|
840
|
+
and account it was registered with: when the AAC STS does not accept a shared
|
|
841
|
+
sign-in, the CLI reminds you of that rule and lists any other shared sign-ins. GitHub connections accept the device flow
|
|
842
|
+
only: `--flow pkce` with a GitHub connection stops locally with exit 3.
|
|
835
843
|
|
|
836
844
|
Sessions last **4 hours by default**. Your administrator may configure a
|
|
837
845
|
different lifetime for the deployment or connection. You can run
|
|
@@ -841,12 +849,20 @@ with the four-hour default, signing in at 09:00 gives an expiry of 13:00;
|
|
|
841
849
|
signing in successfully again at 12:00 gives the new session an expiry of 16:00.
|
|
842
850
|
Use `aac sso whoami --profile NAME --output table` to check the current
|
|
843
851
|
expiration. If the session expires, sign in again; no refresh token is issued.
|
|
852
|
+
A command that needs a session stops locally with exit 3 when none is cached,
|
|
853
|
+
before anything is sent, and prints the `aac sso login` command for the same
|
|
854
|
+
profile and endpoints; commands that also accept a bootstrap token name that
|
|
855
|
+
alternative.
|
|
844
856
|
|
|
845
857
|
Sign-in uses the device flow by default, so the browser can be on another
|
|
846
|
-
machine and headless hosts work.
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
858
|
+
machine and headless hosts work. On a terminal with a browser at hand
|
|
859
|
+
(macOS, a desktop session, or `BROWSER` set), the device flow also offers to
|
|
860
|
+
open the sign-in page for you: press Enter to open it in your browser, or copy
|
|
861
|
+
the printed link and code into a browser yourself; `--no-browser` turns the
|
|
862
|
+
offer off, and a script (no terminal) or a headless host never sees it. Google
|
|
863
|
+
connections use a loopback flow instead, because Google's device flow is
|
|
864
|
+
scope-restricted; `--flow` overrides the choice. `whoami` and `logout` work
|
|
865
|
+
offline and never contact AAC.
|
|
850
866
|
|
|
851
867
|
## Output and exit codes
|
|
852
868
|
|
|
@@ -894,6 +910,17 @@ a callback gives up after 300 seconds with exit `3`. HTTP timeouts remain exit
|
|
|
894
910
|
If AAC asks you to slow down, the command shows the interval to wait. The
|
|
895
911
|
CLI never replays a change on its own; wait and rerun deliberately.
|
|
896
912
|
|
|
913
|
+
The commands that can present a ceremony token (`aac tenant register`,
|
|
914
|
+
`reissue-api-key`, `assign-hosted-domain`, `reactivate-hosted-domain`,
|
|
915
|
+
`bind-trust-domain`, `list-trust-domains`, `revoke-trust-domain`,
|
|
916
|
+
`rotate-admin-key`, `aac sso register-idp`, `enroll-idp-recovery-key` and
|
|
917
|
+
`approve-idp-repair`) and `aac sso login` report a failure by HTTP status and
|
|
918
|
+
AAC error code only, never the server's message or response body, because
|
|
919
|
+
either can echo the credential the request carried; their transport failures
|
|
920
|
+
show the error class and the operating system's reason, not the library's
|
|
921
|
+
text. Other commands still print the server's message with the status and
|
|
922
|
+
code.
|
|
923
|
+
|
|
897
924
|
## Enterprise tenants
|
|
898
925
|
|
|
899
926
|
Enterprise tenants are registered through an onboarding ceremony: AAC
|
|
@@ -223,6 +223,9 @@ def require_ed25519_public_key_pem(text: str) -> str:
|
|
|
223
223
|
try:
|
|
224
224
|
der = base64.b64decode(encoded, validate=True)
|
|
225
225
|
except (binascii.Error, ValueError) as exc:
|
|
226
|
+
# The decoder's text names the fault ("Incorrect padding", a bad
|
|
227
|
+
# character's position) and never quotes the data, which is what keeps
|
|
228
|
+
# AdminKeyPemError on the CLI-composed list of the diagnostic contract.
|
|
226
229
|
raise AdminKeyPemError(f"PEM body is not valid base64: {exc}") from exc
|
|
227
230
|
|
|
228
231
|
if len(der) != _ED25519_SPKI_LENGTH or not der.startswith(_ED25519_SPKI_PREFIX):
|
|
@@ -16,6 +16,7 @@ from aac_cli.config import (
|
|
|
16
16
|
cli_home,
|
|
17
17
|
credentials_path,
|
|
18
18
|
)
|
|
19
|
+
from aac_cli.safe_output import failure_class
|
|
19
20
|
|
|
20
21
|
__all__ = [
|
|
21
22
|
"ROTATION_STATE_WARNING",
|
|
@@ -97,7 +98,9 @@ def read_rotation_state(profile: str) -> RotationIssueState | None:
|
|
|
97
98
|
except FileNotFoundError:
|
|
98
99
|
return None
|
|
99
100
|
except OSError as exc:
|
|
100
|
-
raise CliConfigError(
|
|
101
|
+
raise CliConfigError(
|
|
102
|
+
f"cannot read API-key rotation state {path}: {failure_class(exc)}"
|
|
103
|
+
) from exc
|
|
101
104
|
if len(raw) > _MAX_STATE_BYTES:
|
|
102
105
|
raise CliConfigError(f"API-key rotation state {path} exceeds {_MAX_STATE_BYTES} bytes")
|
|
103
106
|
try:
|