agentkit-sdk-python 0.8.3__tar.gz → 0.8.5__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.
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/PKG-INFO +1 -1
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/_openapi.py +50 -15
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/admin.py +142 -23
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/profile.py +2 -1
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/resolve.py +2 -1
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/session.py +1 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/sso.py +5 -3
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/sts.py +13 -8
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/configuration.py +6 -2
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/client.py +8 -2
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/types.py +41 -49
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/tools/types.py +15 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_auth.py +21 -8
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_delete.py +2 -17
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_list.py +36 -24
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_memory.py +16 -8
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_tools.py +4 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_create.py +40 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/config_store.py +5 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/tos_config.py +52 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/init_executor.py +8 -2
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/config_builder.py +16 -10
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/deploy.py +54 -28
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/version.py +1 -1
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/PKG-INFO +1 -1
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/pyproject.toml +1 -1
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/LICENSE +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/MANIFEST.in +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/README.md +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/a2a_app/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/a2a_app/a2a_app.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/a2a_app/telemetry.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/agent_server_app.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/credential_service.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/inbound_auth.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/inbound_auth_adapter.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/middleware.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/origin.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/telemetry.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/auth/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/auth/inbound.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/base_app.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/langgraph_server_app/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/langgraph_server_app/langgraph_server_app.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/mcp_app/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/mcp_app/mcp_app.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/mcp_app/telemetry.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/simple_app.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/simple_app_handlers.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/telemetry.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/utils.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/_redact.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/_sigv4.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/credential_hosting.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/errors.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/model_login.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/oauth.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/providers.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/ssl_trust.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/store.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/base_agentkit_client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/base_iam_client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/base_service_client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/errors.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/_common.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/agentcore.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/langchain.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/langgraph.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/migration.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/model_replacement.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/serving/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/serving/fastapi_mount.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/serving/langserve.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/strands.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/_runtime_dependency.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/context.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/errors.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/jwt.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/middleware.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/runtime.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/transport.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/console_urls.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/constants.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/context.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/provider.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/account/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/account/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/auth.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/knowledge/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/knowledge/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/knowledge/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/mcp/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/mcp/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/mcp/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/memory/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/memory/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/memory/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/model_gateway/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/model_gateway/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/model_gateway/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/runtime/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/runtime/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/runtime/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/skills/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/skills/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/skills/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/tools/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/tools/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/base.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/local_docker.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/ve_pipeline.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/ve_sandbox_pipeline.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/__main__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_add.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_build.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_deploy.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_destroy.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_init.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_invoke.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_knowledge.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_launch.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_logs.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_model_gateway.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_runtime.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_skill.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_skills.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_skills_workflow.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_status.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_version.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/console_reporter.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/interactive_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/a2a_client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/agentkit_client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_build.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_delete.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_exec.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_init.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_invoke.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_list.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_model_login.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_mount.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_run.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_scp.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_shell.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_web.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/env_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/git_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/model_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/sandbox_client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/session_create.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/session_sync.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/tool_resolve.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/tool_lookup.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/utils.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/choice_resolvers.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/cloud_provider.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/config_handler.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/config_validator.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/constants.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/dataclass_utils.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/docker_build_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/global_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/region_defaults.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/region_resolver.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/strategy_configs.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/utils.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/context.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/base_images.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/container.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/dockerfile/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/dockerfile/manager.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/dockerfile/metadata.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/utils.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/errors.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/base_executor.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/build_executor.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/deploy_executor.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/invoke_executor.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/lifecycle_executor.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/status_executor.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/env_mapping.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/models.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/reporter.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/a2a.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/agent_server.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/basic.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/basic_stream.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/customer_support_assistant.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/agent.go +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/build.sh +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/go.mod +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/go.sum +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/main.go +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/financial_analyst.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/langchain_basic_stream.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/simple_app_veadk.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/simple_mcp_veadk.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/agent.go +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/build.sh +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/go.mod +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/go.sum +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/main.go +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/agent.go +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/build.sh +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/go.mod +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/go.sum +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/main.go +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/code-pipeline-sandbox-tos-cr-step.j2 +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/code-pipeline-tos-cr-step.j2 +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/golang/Dockerfile.j2 +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/python/Dockerfile.j2 +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/sandbox/Dockerfile.install-package +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/sandbox/Dockerfile.install-skills +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/sandbox/Dockerfile.web-server +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/wrappers/wrapper_basic.py.jinja2 +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/wrappers/wrapper_stream.py.jinja2 +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/base.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/local_docker.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/ve_agentkit.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/bindings/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/bindings/memory.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/builder.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/client.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/deployer.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/initializer.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/invoker.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/lifecycle.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/status.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/base_strategy.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/cloud_strategy.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/hybrid_strategy.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/local_strategy.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/utils/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/utils/agent_parser.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/apmplus_logs.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/code_pipeline.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/cr.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/iam.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/services/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/services/cr_service.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/services/tos_service.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/sts.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/utils/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/utils/project_archiver.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/global_config_io.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/http_defaults.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/logging_config.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/misc.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/redact.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/request.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/template_utils.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/ve_sign.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/__init__.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/context.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/errors.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/jwt.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/middleware.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/py.typed +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/runtime.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/transport.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/types.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/SOURCES.txt +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/dependency_links.txt +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/entry_points.txt +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/requires.txt +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/top_level.txt +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/setup.cfg +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/tests/test_client_uses_platform_context.py +0 -0
- {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/tests/test_error_hierarchy.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentkit-sdk-python
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.5
|
|
4
4
|
Summary: Python SDK for transforming any AI agent into a production-ready application. Framework-agnostic primitives for runtime, memory, authentication, and tools with volcengine-managed infrastructure.
|
|
5
5
|
Author-email: Xiangrui Cheng <innsdcc@gmail.com>, Yumeng Bao <baoyumeng.123@gmail.com>, Yaozheng Fang <fangyozheng@gmail.com>, Guodong Li <cu.eric.lee@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -12,18 +12,22 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
"""Minimal signed
|
|
15
|
+
"""Minimal signed OpenAPI client for the auth ADMIN commands.
|
|
16
16
|
|
|
17
17
|
Stdlib-only SigV4 (reusing :mod:`agentkit.auth._sigv4`) so the admin path that
|
|
18
18
|
provisions the UserPool client / IAM OIDC provider / STS role carries no
|
|
19
19
|
third-party dependency. Used only by ``agentkit auth admin`` — the end-user login
|
|
20
20
|
path never touches it. A mandatory ``GetCallerIdentity`` guard runs before any write.
|
|
21
|
+
|
|
22
|
+
Credentials and the OpenAPI gateway host are resolved through the SDK's unified,
|
|
23
|
+
Cloud-Provider-aware chain (:class:`agentkit.platform.configuration.VolcConfiguration`),
|
|
24
|
+
so ``CLOUD_PROVIDER=byteplus`` uses ``BYTEPLUS_ACCESS_KEY`` / ``BYTEPLUS_SECRET_KEY``
|
|
25
|
+
and ``open.byteplusapi.com`` instead of the Volcengine equivalents.
|
|
21
26
|
"""
|
|
22
27
|
|
|
23
28
|
from __future__ import annotations
|
|
24
29
|
|
|
25
30
|
import json
|
|
26
|
-
import os
|
|
27
31
|
import urllib.error
|
|
28
32
|
import urllib.parse
|
|
29
33
|
import urllib.request
|
|
@@ -31,8 +35,9 @@ import urllib.request
|
|
|
31
35
|
from agentkit.auth._sigv4 import sign_headers
|
|
32
36
|
from agentkit.auth.errors import AuthError
|
|
33
37
|
from agentkit.auth.ssl_trust import harden_default_ssl_context
|
|
38
|
+
from agentkit.platform.configuration import VolcConfiguration
|
|
39
|
+
from agentkit.platform.provider import CloudProvider
|
|
34
40
|
|
|
35
|
-
_HOST = "open.volcengineapi.com"
|
|
36
41
|
# Services whose OpenAPI reads parameters from the query string, not a JSON body.
|
|
37
42
|
_QUERY_PARAM_SERVICES = {"iam"}
|
|
38
43
|
|
|
@@ -85,21 +90,51 @@ class OpenApiClient:
|
|
|
85
90
|
access_key: str | None = None,
|
|
86
91
|
secret_key: str | None = None,
|
|
87
92
|
session_token: str | None = None,
|
|
88
|
-
region: str =
|
|
93
|
+
region: str | None = None,
|
|
89
94
|
expect_account: str | None = None,
|
|
90
95
|
harden_ssl: bool = True,
|
|
91
96
|
) -> None:
|
|
92
97
|
if harden_ssl:
|
|
93
98
|
harden_default_ssl_context()
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
# Credentials/region come from the SDK's unified provider-aware chain
|
|
100
|
+
# (CLOUD_PROVIDER=volcengine|byteplus), so the admin path accepts the same
|
|
101
|
+
# sources as the runtime clients: BYTEPLUS_* on BytePlus, VOLCENGINE_* /
|
|
102
|
+
# VOLC_* on Volcengine, plus ~/.agentkit/config.yaml.
|
|
103
|
+
cfg = VolcConfiguration(
|
|
104
|
+
region=region,
|
|
105
|
+
access_key=access_key,
|
|
106
|
+
secret_key=secret_key,
|
|
107
|
+
session_token=session_token,
|
|
108
|
+
)
|
|
109
|
+
self.provider = cfg.provider
|
|
110
|
+
if self.provider == CloudProvider.BYTEPLUS:
|
|
111
|
+
provider_label = "BytePlus"
|
|
112
|
+
self.cred_env_hint = "BYTEPLUS_ACCESS_KEY / BYTEPLUS_SECRET_KEY"
|
|
113
|
+
else:
|
|
114
|
+
provider_label = "Volcengine"
|
|
115
|
+
self.cred_env_hint = "VOLCENGINE_ACCESS_KEY / VOLCENGINE_SECRET_KEY"
|
|
116
|
+
try:
|
|
117
|
+
creds = cfg.get_service_credentials("iam")
|
|
118
|
+
except ValueError as exc:
|
|
119
|
+
raise AuthError(
|
|
120
|
+
f"admin provisioning needs {provider_label} credentials.",
|
|
121
|
+
hint=f"export {self.cred_env_hint} for the account that owns the UserPool.",
|
|
122
|
+
) from exc
|
|
123
|
+
if creds.source == "sso-sts":
|
|
124
|
+
# `agentkit login` stores the END-USER sandbox STS role; provisioning
|
|
125
|
+
# UserPool/IAM resources needs the account's long-lived admin AK/SK.
|
|
98
126
|
raise AuthError(
|
|
99
|
-
"admin provisioning
|
|
100
|
-
|
|
127
|
+
"admin provisioning cannot use the SSO login session (it carries the "
|
|
128
|
+
"end-user sandbox role, not account admin rights).",
|
|
129
|
+
hint=f"export {self.cred_env_hint} for the account that owns the UserPool.",
|
|
101
130
|
)
|
|
102
|
-
self.
|
|
131
|
+
self.ak = creds.access_key
|
|
132
|
+
self.sk = creds.secret_key
|
|
133
|
+
self.token = session_token or creds.session_token
|
|
134
|
+
# Every admin control-plane call signs against the provider's top OpenAPI
|
|
135
|
+
# gateway — the same host that serves the provider's IAM service.
|
|
136
|
+
self._host = cfg.get_service_endpoint("iam").host
|
|
137
|
+
self.region = cfg.region
|
|
103
138
|
ident = self.call("sts", "GetCallerIdentity", "2018-01-01", {})
|
|
104
139
|
self.account_id = str(ident.get("AccountId") or "")
|
|
105
140
|
if expect_account and self.account_id != expect_account:
|
|
@@ -121,11 +156,11 @@ class OpenApiClient:
|
|
|
121
156
|
query = {"Action": action, "Version": version}
|
|
122
157
|
payload = json.dumps(body).encode()
|
|
123
158
|
headers = sign_headers(
|
|
124
|
-
"POST",
|
|
159
|
+
"POST", self._host, query, payload,
|
|
125
160
|
access_key=self.ak, secret_key=self.sk, service=service, region=self.region,
|
|
126
161
|
session_token=self.token,
|
|
127
162
|
)
|
|
128
|
-
url = f"https://{
|
|
163
|
+
url = f"https://{self._host}/?{urllib.parse.urlencode(query)}"
|
|
129
164
|
req = urllib.request.Request(url, data=payload, headers=headers, method="POST")
|
|
130
165
|
try:
|
|
131
166
|
raw = urllib.request.urlopen(req, timeout=30).read()
|
|
@@ -147,11 +182,11 @@ class OpenApiClient:
|
|
|
147
182
|
else:
|
|
148
183
|
query[k] = str(v)
|
|
149
184
|
headers = sign_headers(
|
|
150
|
-
"GET",
|
|
185
|
+
"GET", self._host, query, b"",
|
|
151
186
|
access_key=self.ak, secret_key=self.sk, service=service, region=self.region,
|
|
152
187
|
session_token=self.token,
|
|
153
188
|
)
|
|
154
|
-
url = f"https://{
|
|
189
|
+
url = f"https://{self._host}/?{urllib.parse.urlencode(query)}"
|
|
155
190
|
req = urllib.request.Request(url, headers=headers, method="GET")
|
|
156
191
|
try:
|
|
157
192
|
raw = urllib.request.urlopen(req, timeout=30).read()
|
|
@@ -73,9 +73,10 @@ class CliAccessCoords:
|
|
|
73
73
|
client_id: str
|
|
74
74
|
role_trn: str
|
|
75
75
|
provider_trn: str
|
|
76
|
+
sts_host: str | None = None # provider STS endpoint (None = Volcengine default)
|
|
76
77
|
|
|
77
78
|
def discovery_doc(self) -> dict:
|
|
78
|
-
|
|
79
|
+
doc = {
|
|
79
80
|
"issuer": self.issuer,
|
|
80
81
|
"client_id": self.client_id,
|
|
81
82
|
"role_trn": self.role_trn,
|
|
@@ -84,12 +85,68 @@ class CliAccessCoords:
|
|
|
84
85
|
"transport": "sts",
|
|
85
86
|
"scope": "openid profile email offline_access",
|
|
86
87
|
}
|
|
88
|
+
if self.sts_host:
|
|
89
|
+
doc["sts_host"] = self.sts_host
|
|
90
|
+
return doc
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def tos_public_host(region: str) -> str:
|
|
94
|
+
"""Provider-aware public host of the TOS static-site endpoint for *region*.
|
|
95
|
+
|
|
96
|
+
``tos-<region>.volces.com`` on Volcengine, ``tos-<region>.bytepluses.com`` on
|
|
97
|
+
BytePlus — resolved from the platform service registry, not hardcoded here.
|
|
98
|
+
"""
|
|
99
|
+
from agentkit.platform.configuration import VolcConfiguration
|
|
100
|
+
|
|
101
|
+
return VolcConfiguration(region=region).get_service_endpoint("tos").host
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def sts_public_host(region: str) -> str:
|
|
105
|
+
"""Provider-aware STS endpoint for *region*, from the platform service registry.
|
|
106
|
+
|
|
107
|
+
Published in the discovery doc as ``sts_host`` so the end-user login exchanges
|
|
108
|
+
the id_token against the pool's own cloud (BytePlus pools must not call the
|
|
109
|
+
Volcengine STS).
|
|
110
|
+
"""
|
|
111
|
+
from agentkit.platform.configuration import VolcConfiguration
|
|
112
|
+
|
|
113
|
+
return VolcConfiguration(region=region).get_service_endpoint("sts").host
|
|
87
114
|
|
|
88
115
|
|
|
89
116
|
def _issuer(user_pool_uid: str, region: str) -> str:
|
|
117
|
+
# Volcengine UserPool issuer domain template — LAST-RESORT fallback only.
|
|
118
|
+
# The real issuer is read from the platform (GetUserPool.IssuerUrl), which is
|
|
119
|
+
# provider-correct by construction; this template is wrong on BytePlus.
|
|
90
120
|
return f"https://userpool-{user_pool_uid}.userpool.auth.id.{region}.volces.com"
|
|
91
121
|
|
|
92
122
|
|
|
123
|
+
def _pool_info(api: OpenApiClient, user_pool_uid: str) -> dict:
|
|
124
|
+
"""Best-effort GetUserPool detail; {} when the call fails."""
|
|
125
|
+
try:
|
|
126
|
+
return api.call("id", "GetUserPool", "2025-10-30", {"UserPoolUid": user_pool_uid})
|
|
127
|
+
except (ApiError, AuthError):
|
|
128
|
+
return {}
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def resolve_issuer(api: OpenApiClient, user_pool_uid: str, region: str) -> str:
|
|
132
|
+
"""The pool's real issuer URL, read from the platform.
|
|
133
|
+
|
|
134
|
+
``GetUserPool`` returns ``IssuerUrl`` (and ``Domain`` / ``CustomDomain``), so the
|
|
135
|
+
issuer is whatever domain the current cloud provider actually serves — no
|
|
136
|
+
hardcoded domain. IAM's ``CreateOIDCProvider`` validates the issuer's OIDC
|
|
137
|
+
discovery endpoint, so a template-guessed domain fails on BytePlus.
|
|
138
|
+
Falls back to the Volcengine template only if the platform returns nothing.
|
|
139
|
+
"""
|
|
140
|
+
info = _pool_info(api, user_pool_uid)
|
|
141
|
+
issuer = str(info.get("IssuerUrl") or "").rstrip("/")
|
|
142
|
+
if issuer:
|
|
143
|
+
return issuer
|
|
144
|
+
domain = str(info.get("CustomDomain") or info.get("Domain") or "").strip()
|
|
145
|
+
if domain:
|
|
146
|
+
return f"https://{domain}"
|
|
147
|
+
return _issuer(user_pool_uid, region)
|
|
148
|
+
|
|
149
|
+
|
|
93
150
|
def identity_console_url(region: str = "cn-beijing", *, user_pool_uid: str | None = None) -> str:
|
|
94
151
|
"""Volcengine console URL for the Identity (UserPool) management page.
|
|
95
152
|
|
|
@@ -100,16 +157,47 @@ def identity_console_url(region: str = "cn-beijing", *, user_pool_uid: str | Non
|
|
|
100
157
|
|
|
101
158
|
|
|
102
159
|
def create_user_pool(name: str, *, region: str = "cn-beijing", api: OpenApiClient | None = None) -> tuple[str, str]:
|
|
103
|
-
"""Create a UserPool
|
|
160
|
+
"""Create (or, on a re-run, reuse) the UserPool named ``name``; return ``(uid, issuer)``.
|
|
161
|
+
|
|
162
|
+
A same-name pool left by an earlier run is reused instead of failing with
|
|
163
|
+
``Duplicated`` — sso-setup must stay idempotent to re-run.
|
|
164
|
+
"""
|
|
104
165
|
api = api or OpenApiClient(region=region)
|
|
105
|
-
|
|
106
|
-
"
|
|
107
|
-
|
|
108
|
-
|
|
166
|
+
try:
|
|
167
|
+
res = api.call("id", "CreateUserPool", "2025-10-30", {
|
|
168
|
+
"Name": name, "Description": "AgentKit CLI login pool",
|
|
169
|
+
"PasswordSignInEnabled": True, "SelfSignUpEnabled": False,
|
|
170
|
+
})
|
|
171
|
+
except ApiError as exc:
|
|
172
|
+
if not any(k in exc.code for k in ("Duplicat", "Exist", "Conflict")):
|
|
173
|
+
raise
|
|
174
|
+
existing = _find_pool_by_name(api, name)
|
|
175
|
+
if not existing:
|
|
176
|
+
raise
|
|
177
|
+
return existing, resolve_issuer(api, existing, region)
|
|
109
178
|
uid = str(res.get("Uid") or res.get("uid") or "")
|
|
110
179
|
if not uid:
|
|
111
180
|
raise AuthError(f"CreateUserPool returned no uid: {json.dumps(res)[:200]}")
|
|
112
|
-
return uid,
|
|
181
|
+
return uid, resolve_issuer(api, uid, region)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _find_pool_by_name(api: OpenApiClient, name: str) -> str | None:
|
|
185
|
+
"""Uid of the pool named ``name``, or None. Raises if the name is ambiguous."""
|
|
186
|
+
matches: list[str] = []
|
|
187
|
+
page = 1
|
|
188
|
+
while page <= 10: # 500 pools is far beyond any real account
|
|
189
|
+
r = api.call("id", "ListUserPools", "2025-10-30", {"PageNumber": page, "PageSize": 50})
|
|
190
|
+
data = r.get("Data") or []
|
|
191
|
+
matches += [str(p.get("Uid")) for p in data if p.get("Name") == name and p.get("Uid")]
|
|
192
|
+
if len(data) < 50:
|
|
193
|
+
break
|
|
194
|
+
page += 1
|
|
195
|
+
if len(matches) > 1:
|
|
196
|
+
raise AuthError(
|
|
197
|
+
f"{len(matches)} user pools are named {name!r}; pass the intended one "
|
|
198
|
+
"explicitly with --user-pool <uid>."
|
|
199
|
+
)
|
|
200
|
+
return matches[0] if matches else None
|
|
113
201
|
|
|
114
202
|
|
|
115
203
|
def _ensure_cli_client(api: OpenApiClient, user_pool_uid: str, client_name: str = CLI_CLIENT_NAME) -> str:
|
|
@@ -182,18 +270,33 @@ def _ensure_role(
|
|
|
182
270
|
) -> None:
|
|
183
271
|
trust = {"Statement": [{"Effect": "Allow", "Principal": {"Federated": [provider_trn]},
|
|
184
272
|
"Action": ["sts:AssumeRoleWithOIDC"]}]}
|
|
273
|
+
# Probe existence BEFORE CreateRole: an account at its RolesPerAccount quota
|
|
274
|
+
# returns LimitExceeded before the duplicate-name check, which would wrongly
|
|
275
|
+
# kill re-runs (and --role-name reuse) even though the role is already there.
|
|
276
|
+
role_exists = True
|
|
185
277
|
try:
|
|
186
|
-
api.call("iam", "
|
|
187
|
-
"RoleName": role_name, "DisplayName": role_name,
|
|
188
|
-
"TrustPolicyDocument": json.dumps(trust), "MaxSessionDuration": 3600,
|
|
189
|
-
"Description": "STS role for AgentKit CLI (UserPool federated)",
|
|
190
|
-
})
|
|
278
|
+
api.call("iam", "GetRole", "2018-01-01", {"RoleName": role_name})
|
|
191
279
|
except ApiError as exc:
|
|
192
|
-
if
|
|
280
|
+
if not any(k in exc.code for k in ("NotExist", "NoSuchEntity", "NotFound")):
|
|
193
281
|
raise
|
|
282
|
+
role_exists = False
|
|
283
|
+
if role_exists:
|
|
194
284
|
api.call("iam", "UpdateRole", "2018-01-01",
|
|
195
285
|
{"RoleName": role_name, "TrustPolicyDocument": json.dumps(trust),
|
|
196
286
|
"MaxSessionDuration": 3600})
|
|
287
|
+
else:
|
|
288
|
+
try:
|
|
289
|
+
api.call("iam", "CreateRole", "2018-01-01", {
|
|
290
|
+
"RoleName": role_name, "DisplayName": role_name,
|
|
291
|
+
"TrustPolicyDocument": json.dumps(trust), "MaxSessionDuration": 3600,
|
|
292
|
+
"Description": "STS role for AgentKit CLI (UserPool federated)",
|
|
293
|
+
})
|
|
294
|
+
except ApiError as exc:
|
|
295
|
+
if "Exist" not in exc.code and "Conflict" not in exc.code:
|
|
296
|
+
raise
|
|
297
|
+
api.call("iam", "UpdateRole", "2018-01-01",
|
|
298
|
+
{"RoleName": role_name, "TrustPolicyDocument": json.dumps(trust),
|
|
299
|
+
"MaxSessionDuration": 3600})
|
|
197
300
|
doc = {"Statement": [{"Effect": "Allow", "Action": list(ROLE_ACTIONS), "Resource": ["*"]}]}
|
|
198
301
|
api.call_ok("iam", "CreatePolicy", "2018-01-01",
|
|
199
302
|
{"PolicyName": policy_name, "PolicyDocument": json.dumps(doc),
|
|
@@ -233,7 +336,7 @@ def provision_cli_access(
|
|
|
233
336
|
"""
|
|
234
337
|
api = api or OpenApiClient(region=region, expect_account=account_id)
|
|
235
338
|
acct = account_id or api.account_id
|
|
236
|
-
issuer =
|
|
339
|
+
issuer = resolve_issuer(api, user_pool_uid, region)
|
|
237
340
|
client_id = _ensure_cli_client(api, user_pool_uid, client_name)
|
|
238
341
|
if not client_id:
|
|
239
342
|
raise AuthError("could not create or find the public CLI client")
|
|
@@ -243,6 +346,7 @@ def provision_cli_access(
|
|
|
243
346
|
return CliAccessCoords(
|
|
244
347
|
account_id=acct, region=region, user_pool_uid=user_pool_uid, issuer=issuer,
|
|
245
348
|
client_id=client_id, role_trn=f"trn:iam::{acct}:role/{role_name}", provider_trn=provider_trn,
|
|
349
|
+
sts_host=sts_public_host(region),
|
|
246
350
|
)
|
|
247
351
|
|
|
248
352
|
|
|
@@ -277,7 +381,12 @@ def ensure_federation(
|
|
|
277
381
|
preset = _IDP_PRESETS.get(idp)
|
|
278
382
|
if not preset:
|
|
279
383
|
raise AuthError(f"unknown idp {idp!r}; supported: {', '.join(_IDP_PRESETS)}")
|
|
280
|
-
callback
|
|
384
|
+
# The platform publishes the pool's exact OAuth callback; derive it from the
|
|
385
|
+
# resolved issuer only when the field is absent.
|
|
386
|
+
info = _pool_info(api, user_pool_uid)
|
|
387
|
+
callback = str(info.get("OauthLoginCallbackUrl") or "") or (
|
|
388
|
+
f"{resolve_issuer(api, user_pool_uid, region)}/login/generic_oauth/callback"
|
|
389
|
+
)
|
|
281
390
|
lst = api.call("id", "ListIdentityProviders", "2025-10-30",
|
|
282
391
|
{"UserPoolUID": user_pool_uid, "PageNumber": 1, "PageSize": 50})
|
|
283
392
|
for it in (lst.get("Data") or lst.get("data") or []):
|
|
@@ -349,7 +458,7 @@ def sso_setup(
|
|
|
349
458
|
if custom_domain:
|
|
350
459
|
manual.append(
|
|
351
460
|
f"把自定义域名指向该 bucket:CNAME {custom_domain} -> "
|
|
352
|
-
f"{bucket}.
|
|
461
|
+
f"{bucket}.{tos_public_host(region)},并配置 https 证书(TOS/CDN)。"
|
|
353
462
|
)
|
|
354
463
|
return SsoSetupResult(login_address=url, coords=coords, manual_steps=manual)
|
|
355
464
|
|
|
@@ -371,18 +480,28 @@ def publish_discovery(
|
|
|
371
480
|
The returned URL is what the end user types: ``agentkit login <url>``.
|
|
372
481
|
"""
|
|
373
482
|
try:
|
|
374
|
-
import os as _os
|
|
375
|
-
|
|
376
483
|
import tos # type: ignore
|
|
377
484
|
except Exception as exc: # pragma: no cover - optional dep
|
|
378
485
|
raise AuthError(
|
|
379
486
|
"publishing needs the `tos` package (`pip install tos`), or host the "
|
|
380
487
|
"discovery doc yourself.",
|
|
381
488
|
) from exc
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
489
|
+
from agentkit.platform.configuration import VolcConfiguration
|
|
490
|
+
|
|
491
|
+
cfg = VolcConfiguration(
|
|
492
|
+
region=coords.region, access_key=access_key, secret_key=secret_key,
|
|
493
|
+
session_token=session_token,
|
|
494
|
+
)
|
|
495
|
+
try:
|
|
496
|
+
creds = cfg.get_service_credentials("tos")
|
|
497
|
+
except ValueError as exc:
|
|
498
|
+
raise AuthError(
|
|
499
|
+
"publishing the discovery doc needs cloud credentials for TOS.",
|
|
500
|
+
hint=str(exc).split("\n")[0],
|
|
501
|
+
) from exc
|
|
502
|
+
ak, sk = creds.access_key, creds.secret_key
|
|
503
|
+
token = session_token or creds.session_token
|
|
504
|
+
endpoint = cfg.get_service_endpoint("tos").host
|
|
386
505
|
client = tos.TosClientV2(ak, sk, endpoint, coords.region, security_token=token)
|
|
387
506
|
try:
|
|
388
507
|
client.create_bucket(bucket, acl=tos.ACLType.ACL_Public_Read)
|
|
@@ -453,7 +572,7 @@ def preflight(api: OpenApiClient, *, credential_hosting: bool = True) -> list[di
|
|
|
453
572
|
checks.append({"name": name, "status": "warn", "detail": str(exc)[:80], "fix": fix})
|
|
454
573
|
|
|
455
574
|
probe("caller identity (STS)", lambda: f"account {api.account_id}",
|
|
456
|
-
"export a valid admin
|
|
575
|
+
f"export a valid admin {api.cred_env_hint}")
|
|
457
576
|
def _pools():
|
|
458
577
|
r = api.call("id", "ListUserPools", "2025-10-30", {"PageNumber": 1, "PageSize": 1})
|
|
459
578
|
return f"reachable ({r.get('TotalCount') or r.get('Total') or len(r.get('Items') or r.get('Data') or [])}+ pools)"
|
|
@@ -35,7 +35,7 @@ from agentkit.auth.errors import AuthError
|
|
|
35
35
|
|
|
36
36
|
_PROFILE_FIELDS = {
|
|
37
37
|
"name", "issuer", "client_id", "role_trn", "provider_trn",
|
|
38
|
-
"region", "scope", "transport", "address",
|
|
38
|
+
"region", "scope", "transport", "address", "sts_host",
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
|
|
@@ -52,6 +52,7 @@ class AuthProfile:
|
|
|
52
52
|
scope: str = "openid profile email offline_access"
|
|
53
53
|
transport: str = "sts" # "sts" (sandbox) | reserved for future transports
|
|
54
54
|
address: str | None = None # the login address this profile was resolved from
|
|
55
|
+
sts_host: str | None = None # provider STS endpoint from the discovery doc (None = Volcengine default)
|
|
55
56
|
|
|
56
57
|
def validate(self) -> "AuthProfile":
|
|
57
58
|
missing = [k for k in ("name", "issuer", "client_id", "role_trn") if not getattr(self, k)]
|
|
@@ -55,6 +55,7 @@ _ALIASES = {
|
|
|
55
55
|
"region": ("region",),
|
|
56
56
|
"transport": ("transport",),
|
|
57
57
|
"scope": ("scope",),
|
|
58
|
+
"sts_host": ("sts_host", "stsHost"),
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
|
|
@@ -175,7 +176,7 @@ def resolve_profile(address: str, *, timeout: float = _TIMEOUT, harden_ssl: bool
|
|
|
175
176
|
return AuthProfile(
|
|
176
177
|
name=name, issuer=str(issuer), client_id=str(client_id), role_trn=str(role_trn),
|
|
177
178
|
provider_trn=provider_trn, region=region, scope=scope, transport=transport,
|
|
178
|
-
address=base,
|
|
179
|
+
address=base, sts_host=disc.get("sts_host"),
|
|
179
180
|
).validate()
|
|
180
181
|
|
|
181
182
|
|
|
@@ -80,13 +80,14 @@ def login(
|
|
|
80
80
|
refresh_token = token.get("refresh_token")
|
|
81
81
|
|
|
82
82
|
assumed = assume_role_with_oidc(
|
|
83
|
-
id_token, prof.role_trn, prof.provider_trn, duration_seconds=duration_seconds
|
|
83
|
+
id_token, prof.role_trn, prof.provider_trn, duration_seconds=duration_seconds,
|
|
84
|
+
host=prof.sts_host,
|
|
84
85
|
)
|
|
85
86
|
account = None
|
|
86
87
|
try:
|
|
87
88
|
ident = get_caller_identity(
|
|
88
89
|
assumed.access_key_id, assumed.secret_access_key, assumed.session_token,
|
|
89
|
-
region=prof.region,
|
|
90
|
+
region=prof.region, host=prof.sts_host,
|
|
90
91
|
)
|
|
91
92
|
account = ident.get("AccountId")
|
|
92
93
|
except Exception:
|
|
@@ -154,7 +155,8 @@ def whoami(profile: str | None = None, *, harden_ssl: bool = True) -> dict:
|
|
|
154
155
|
raise AuthError("not logged in.", hint="run `agentkit login` first.")
|
|
155
156
|
creds = session.credentials()
|
|
156
157
|
ident = get_caller_identity(
|
|
157
|
-
creds.access_key, creds.secret_key, creds.session_token,
|
|
158
|
+
creds.access_key, creds.secret_key, creds.session_token,
|
|
159
|
+
region=session.profile.region, host=session.profile.sts_host,
|
|
158
160
|
)
|
|
159
161
|
ident["_profile"] = session.profile.name
|
|
160
162
|
ident["_expires_at"] = creds.expires_at.isoformat() if creds.expires_at else None
|
|
@@ -73,13 +73,16 @@ def assume_role_with_oidc(
|
|
|
73
73
|
role_session_name: str = "agentkit-cli",
|
|
74
74
|
duration_seconds: int = 3600,
|
|
75
75
|
timeout: float = _TIMEOUT,
|
|
76
|
+
host: str | None = None,
|
|
76
77
|
) -> AssumedRole:
|
|
77
78
|
"""Exchange an OIDC ``id_token`` for temporary STS credentials.
|
|
78
79
|
|
|
79
|
-
Anonymous call — the token is the credential
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
Anonymous call — the token is the credential; it is too long for the query
|
|
81
|
+
string so it travels in the POST body. ``host`` is the STS endpoint from the
|
|
82
|
+
login profile (the discovery doc's ``sts_host``, so BytePlus pools use the
|
|
83
|
+
BytePlus STS); it defaults to the Volcengine endpoint for older docs.
|
|
82
84
|
"""
|
|
85
|
+
sts_host = host or STS_HOST
|
|
83
86
|
params = {
|
|
84
87
|
"RoleTrn": role_trn,
|
|
85
88
|
"OIDCToken": id_token,
|
|
@@ -89,7 +92,7 @@ def assume_role_with_oidc(
|
|
|
89
92
|
if provider_trn:
|
|
90
93
|
params["OIDCProviderTrn"] = provider_trn
|
|
91
94
|
body = urllib.parse.urlencode(params).encode("utf-8")
|
|
92
|
-
url = f"https://{
|
|
95
|
+
url = f"https://{sts_host}/?Action=AssumeRoleWithOIDC&Version={STS_VERSION}"
|
|
93
96
|
req = urllib.request.Request(
|
|
94
97
|
url, data=body, headers={"Content-Type": "application/x-www-form-urlencoded"}, method="POST"
|
|
95
98
|
)
|
|
@@ -103,7 +106,7 @@ def assume_role_with_oidc(
|
|
|
103
106
|
"id_token's aud is in the provider's client-id allow-list.",
|
|
104
107
|
) from exc
|
|
105
108
|
except urllib.error.URLError as exc:
|
|
106
|
-
raise NetworkError(f"cannot reach STS endpoint ({
|
|
109
|
+
raise NetworkError(f"cannot reach STS endpoint ({sts_host}): {exc.reason}") from exc
|
|
107
110
|
|
|
108
111
|
try:
|
|
109
112
|
creds = json.loads(raw)["Result"]["Credentials"]
|
|
@@ -121,15 +124,17 @@ def get_caller_identity(
|
|
|
121
124
|
*,
|
|
122
125
|
region: str = "cn-beijing",
|
|
123
126
|
timeout: float = _TIMEOUT,
|
|
127
|
+
host: str | None = None,
|
|
124
128
|
) -> dict:
|
|
125
129
|
"""Return the verified identity (``AccountId`` / ``IdentityType`` / ``UserId``)."""
|
|
130
|
+
sts_host = host or STS_HOST
|
|
126
131
|
query = {"Action": "GetCallerIdentity", "Version": STS_VERSION}
|
|
127
132
|
headers = sign_headers(
|
|
128
|
-
"POST",
|
|
133
|
+
"POST", sts_host, query, b"",
|
|
129
134
|
access_key=access_key, secret_key=secret_key, service="sts", region=region,
|
|
130
135
|
session_token=session_token,
|
|
131
136
|
)
|
|
132
|
-
url = f"https://{
|
|
137
|
+
url = f"https://{sts_host}/?" + urllib.parse.urlencode(query)
|
|
133
138
|
req = urllib.request.Request(url, data=b"", headers=headers, method="POST")
|
|
134
139
|
try:
|
|
135
140
|
raw = urllib.request.urlopen(req, timeout=timeout).read()
|
|
@@ -137,5 +142,5 @@ def get_caller_identity(
|
|
|
137
142
|
detail = redact(exc.read().decode("utf-8", "replace"))[:200]
|
|
138
143
|
raise SsoError(f"GetCallerIdentity failed: {detail}") from exc
|
|
139
144
|
except urllib.error.URLError as exc:
|
|
140
|
-
raise NetworkError(f"cannot reach STS endpoint ({
|
|
145
|
+
raise NetworkError(f"cannot reach STS endpoint ({sts_host}): {exc.reason}") from exc
|
|
141
146
|
return json.loads(raw).get("Result") or {}
|
|
@@ -146,7 +146,8 @@ class VolcConfiguration:
|
|
|
146
146
|
1. Explicitly passed in constructor
|
|
147
147
|
2. Environment variable (VOLCENGINE_REGION / VOLC_REGION)
|
|
148
148
|
3. Global config file (~/.agentkit/config.yaml)
|
|
149
|
-
4.
|
|
149
|
+
4. Environment variable (REGION)
|
|
150
|
+
5. Default (cn-beijing)
|
|
150
151
|
"""
|
|
151
152
|
if self._region:
|
|
152
153
|
return self._region
|
|
@@ -163,6 +164,7 @@ class VolcConfiguration:
|
|
|
163
164
|
or os.getenv("VOLC_REGION")
|
|
164
165
|
or get_global_config_str("region")
|
|
165
166
|
or get_global_config_str("volcengine", "region")
|
|
167
|
+
or os.getenv("REGION")
|
|
166
168
|
)
|
|
167
169
|
|
|
168
170
|
if base_region:
|
|
@@ -409,7 +411,9 @@ class VolcConfiguration:
|
|
|
409
411
|
else:
|
|
410
412
|
ak = os.getenv("VOLCENGINE_ACCESS_KEY") or os.getenv("VOLC_ACCESSKEY")
|
|
411
413
|
sk = os.getenv("VOLCENGINE_SECRET_KEY") or os.getenv("VOLC_SECRETKEY")
|
|
412
|
-
token = os.getenv("VOLCENGINE_SESSION_TOKEN") or os.getenv(
|
|
414
|
+
token = os.getenv("VOLCENGINE_SESSION_TOKEN") or os.getenv(
|
|
415
|
+
"VOLC_SESSIONTOKEN"
|
|
416
|
+
)
|
|
413
417
|
|
|
414
418
|
if ak and sk:
|
|
415
419
|
return Credentials(
|
|
@@ -16,7 +16,8 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
from typing import Dict
|
|
18
18
|
|
|
19
|
-
from agentkit.client import
|
|
19
|
+
from agentkit.client.base_service_client import BaseServiceClient
|
|
20
|
+
from agentkit.platform.configuration import VolcConfiguration
|
|
20
21
|
from agentkit.sdk.identity.types import (
|
|
21
22
|
CreateInboundAuthConfigRequest,
|
|
22
23
|
CreateInboundAuthConfigResponse,
|
|
@@ -27,7 +28,7 @@ from agentkit.sdk.identity.types import (
|
|
|
27
28
|
)
|
|
28
29
|
|
|
29
30
|
|
|
30
|
-
class AgentkitIdentityClient(
|
|
31
|
+
class AgentkitIdentityClient(BaseServiceClient):
|
|
31
32
|
"""AgentKit Identity / Inbound Auth Config Service."""
|
|
32
33
|
|
|
33
34
|
API_ACTIONS: Dict[str, str] = {
|
|
@@ -44,11 +45,16 @@ class AgentkitIdentityClient(BaseAgentkitClient):
|
|
|
44
45
|
session_token: str = "",
|
|
45
46
|
) -> None:
|
|
46
47
|
super().__init__(
|
|
48
|
+
service="agent_identity",
|
|
47
49
|
access_key=access_key,
|
|
48
50
|
secret_key=secret_key,
|
|
49
51
|
region=region,
|
|
50
52
|
session_token=session_token,
|
|
51
53
|
service_name="identity",
|
|
54
|
+
platform_config=VolcConfiguration(
|
|
55
|
+
region=region or None,
|
|
56
|
+
provider="volcengine",
|
|
57
|
+
),
|
|
52
58
|
)
|
|
53
59
|
|
|
54
60
|
def create_inbound_auth_config(
|