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.
Files changed (301) hide show
  1. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/PKG-INFO +1 -1
  2. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/_openapi.py +50 -15
  3. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/admin.py +142 -23
  4. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/profile.py +2 -1
  5. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/resolve.py +2 -1
  6. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/session.py +1 -0
  7. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/sso.py +5 -3
  8. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/sts.py +13 -8
  9. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/configuration.py +6 -2
  10. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/client.py +8 -2
  11. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/types.py +41 -49
  12. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/tools/types.py +15 -0
  13. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_auth.py +21 -8
  14. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_delete.py +2 -17
  15. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_list.py +36 -24
  16. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_memory.py +16 -8
  17. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_tools.py +4 -0
  18. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_create.py +40 -0
  19. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/config_store.py +5 -0
  20. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/tos_config.py +52 -0
  21. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/init_executor.py +8 -2
  22. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/config_builder.py +16 -10
  23. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/deploy.py +54 -28
  24. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/version.py +1 -1
  25. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/PKG-INFO +1 -1
  26. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/pyproject.toml +1 -1
  27. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/LICENSE +0 -0
  28. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/MANIFEST.in +0 -0
  29. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/README.md +0 -0
  30. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/__init__.py +0 -0
  31. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/__init__.py +0 -0
  32. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/a2a_app/__init__.py +0 -0
  33. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/a2a_app/a2a_app.py +0 -0
  34. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/a2a_app/telemetry.py +0 -0
  35. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/__init__.py +0 -0
  36. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/agent_server_app.py +0 -0
  37. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/credential_service.py +0 -0
  38. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/inbound_auth.py +0 -0
  39. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/inbound_auth_adapter.py +0 -0
  40. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/middleware.py +0 -0
  41. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/origin.py +0 -0
  42. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/agent_server_app/telemetry.py +0 -0
  43. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/auth/__init__.py +0 -0
  44. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/auth/inbound.py +0 -0
  45. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/base_app.py +0 -0
  46. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/langgraph_server_app/__init__.py +0 -0
  47. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/langgraph_server_app/langgraph_server_app.py +0 -0
  48. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/mcp_app/__init__.py +0 -0
  49. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/mcp_app/mcp_app.py +0 -0
  50. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/mcp_app/telemetry.py +0 -0
  51. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/__init__.py +0 -0
  52. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/simple_app.py +0 -0
  53. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/simple_app_handlers.py +0 -0
  54. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/simple_app/telemetry.py +0 -0
  55. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/apps/utils.py +0 -0
  56. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/__init__.py +0 -0
  57. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/_redact.py +0 -0
  58. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/_sigv4.py +0 -0
  59. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/credential_hosting.py +0 -0
  60. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/errors.py +0 -0
  61. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/model_login.py +0 -0
  62. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/oauth.py +0 -0
  63. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/providers.py +0 -0
  64. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/ssl_trust.py +0 -0
  65. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/auth/store.py +0 -0
  66. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/__init__.py +0 -0
  67. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/base_agentkit_client.py +0 -0
  68. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/base_iam_client.py +0 -0
  69. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/client/base_service_client.py +0 -0
  70. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/errors.py +0 -0
  71. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/__init__.py +0 -0
  72. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/_common.py +0 -0
  73. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/agentcore.py +0 -0
  74. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/langchain.py +0 -0
  75. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/langgraph.py +0 -0
  76. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/migration.py +0 -0
  77. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/model_replacement.py +0 -0
  78. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/serving/__init__.py +0 -0
  79. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/serving/fastapi_mount.py +0 -0
  80. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/serving/langserve.py +0 -0
  81. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/frameworks/strands.py +0 -0
  82. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/__init__.py +0 -0
  83. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/_runtime_dependency.py +0 -0
  84. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/client.py +0 -0
  85. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/context.py +0 -0
  86. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/errors.py +0 -0
  87. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/jwt.py +0 -0
  88. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/middleware.py +0 -0
  89. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/runtime.py +0 -0
  90. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/transport.py +0 -0
  91. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/identity/types.py +0 -0
  92. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/__init__.py +0 -0
  93. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/console_urls.py +0 -0
  94. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/constants.py +0 -0
  95. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/context.py +0 -0
  96. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/platform/provider.py +0 -0
  97. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/__init__.py +0 -0
  98. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/account/client.py +0 -0
  99. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/account/types.py +0 -0
  100. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/__init__.py +0 -0
  101. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/identity/auth.py +0 -0
  102. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/knowledge/__init__.py +0 -0
  103. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/knowledge/client.py +0 -0
  104. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/knowledge/types.py +0 -0
  105. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/mcp/__init__.py +0 -0
  106. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/mcp/client.py +0 -0
  107. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/mcp/types.py +0 -0
  108. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/memory/__init__.py +0 -0
  109. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/memory/client.py +0 -0
  110. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/memory/types.py +0 -0
  111. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/model_gateway/__init__.py +0 -0
  112. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/model_gateway/client.py +0 -0
  113. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/model_gateway/types.py +0 -0
  114. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/runtime/__init__.py +0 -0
  115. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/runtime/client.py +0 -0
  116. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/runtime/types.py +0 -0
  117. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/skills/__init__.py +0 -0
  118. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/skills/client.py +0 -0
  119. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/skills/types.py +0 -0
  120. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/tools/__init__.py +0 -0
  121. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/sdk/tools/client.py +0 -0
  122. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/__init__.py +0 -0
  123. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/__init__.py +0 -0
  124. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/base.py +0 -0
  125. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/local_docker.py +0 -0
  126. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/ve_pipeline.py +0 -0
  127. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/builders/ve_sandbox_pipeline.py +0 -0
  128. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/__init__.py +0 -0
  129. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/__main__.py +0 -0
  130. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli.py +0 -0
  131. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_add.py +0 -0
  132. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_build.py +0 -0
  133. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_config.py +0 -0
  134. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_deploy.py +0 -0
  135. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_destroy.py +0 -0
  136. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_init.py +0 -0
  137. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_invoke.py +0 -0
  138. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_knowledge.py +0 -0
  139. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_launch.py +0 -0
  140. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_logs.py +0 -0
  141. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_model_gateway.py +0 -0
  142. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_runtime.py +0 -0
  143. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_skill.py +0 -0
  144. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_skills.py +0 -0
  145. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_skills_workflow.py +0 -0
  146. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_status.py +0 -0
  147. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/cli_version.py +0 -0
  148. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/console_reporter.py +0 -0
  149. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/interactive_config.py +0 -0
  150. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/__init__.py +0 -0
  151. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/a2a_client.py +0 -0
  152. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/agentkit_client.py +0 -0
  153. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli.py +0 -0
  154. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_build.py +0 -0
  155. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_config.py +0 -0
  156. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_delete.py +0 -0
  157. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_exec.py +0 -0
  158. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_init.py +0 -0
  159. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_invoke.py +0 -0
  160. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_list.py +0 -0
  161. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_model_login.py +0 -0
  162. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_mount.py +0 -0
  163. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_run.py +0 -0
  164. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_scp.py +0 -0
  165. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_shell.py +0 -0
  166. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/cli_web.py +0 -0
  167. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/env_config.py +0 -0
  168. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/git_config.py +0 -0
  169. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/model_config.py +0 -0
  170. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/sandbox_client.py +0 -0
  171. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/session_create.py +0 -0
  172. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/session_sync.py +0 -0
  173. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/sandbox/tool_resolve.py +0 -0
  174. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/tool_lookup.py +0 -0
  175. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/cli/utils.py +0 -0
  176. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/__init__.py +0 -0
  177. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/choice_resolvers.py +0 -0
  178. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/cloud_provider.py +0 -0
  179. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/config.py +0 -0
  180. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/config_handler.py +0 -0
  181. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/config_validator.py +0 -0
  182. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/constants.py +0 -0
  183. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/dataclass_utils.py +0 -0
  184. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/docker_build_config.py +0 -0
  185. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/global_config.py +0 -0
  186. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/region_defaults.py +0 -0
  187. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/region_resolver.py +0 -0
  188. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/strategy_configs.py +0 -0
  189. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/config/utils.py +0 -0
  190. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/context.py +0 -0
  191. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/__init__.py +0 -0
  192. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/base_images.py +0 -0
  193. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/container.py +0 -0
  194. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/dockerfile/__init__.py +0 -0
  195. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/dockerfile/manager.py +0 -0
  196. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/dockerfile/metadata.py +0 -0
  197. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/docker/utils.py +0 -0
  198. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/errors.py +0 -0
  199. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/__init__.py +0 -0
  200. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/base_executor.py +0 -0
  201. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/build_executor.py +0 -0
  202. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/deploy_executor.py +0 -0
  203. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/invoke_executor.py +0 -0
  204. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/lifecycle_executor.py +0 -0
  205. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/executors/status_executor.py +0 -0
  206. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/__init__.py +0 -0
  207. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/harness/env_mapping.py +0 -0
  208. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/models.py +0 -0
  209. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/reporter.py +0 -0
  210. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/a2a.py +0 -0
  211. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/agent_server.py +0 -0
  212. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/basic.py +0 -0
  213. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/basic_stream.py +0 -0
  214. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/customer_support_assistant.py +0 -0
  215. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/agent.go +0 -0
  216. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/build.sh +0 -0
  217. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/go.mod +0 -0
  218. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/go.sum +0 -0
  219. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/eino_a2a/main.go +0 -0
  220. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/financial_analyst.py +0 -0
  221. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/langchain_basic_stream.py +0 -0
  222. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/simple_app_veadk.py +0 -0
  223. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/simple_mcp_veadk.py +0 -0
  224. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/agent.go +0 -0
  225. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/build.sh +0 -0
  226. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/go.mod +0 -0
  227. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/go.sum +0 -0
  228. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_a2a/main.go +0 -0
  229. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/agent.go +0 -0
  230. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/build.sh +0 -0
  231. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/go.mod +0 -0
  232. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/go.sum +0 -0
  233. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/samples/veadk_go_basic/main.go +0 -0
  234. {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
  235. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/code-pipeline-tos-cr-step.j2 +0 -0
  236. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/golang/Dockerfile.j2 +0 -0
  237. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/python/Dockerfile.j2 +0 -0
  238. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/sandbox/Dockerfile.install-package +0 -0
  239. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/sandbox/Dockerfile.install-skills +0 -0
  240. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/templates/sandbox/Dockerfile.web-server +0 -0
  241. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/wrappers/wrapper_basic.py.jinja2 +0 -0
  242. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/resources/wrappers/wrapper_stream.py.jinja2 +0 -0
  243. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/__init__.py +0 -0
  244. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/base.py +0 -0
  245. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/local_docker.py +0 -0
  246. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/runners/ve_agentkit.py +0 -0
  247. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/__init__.py +0 -0
  248. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/bindings/__init__.py +0 -0
  249. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/bindings/memory.py +0 -0
  250. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/builder.py +0 -0
  251. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/client.py +0 -0
  252. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/config.py +0 -0
  253. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/deployer.py +0 -0
  254. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/initializer.py +0 -0
  255. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/invoker.py +0 -0
  256. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/lifecycle.py +0 -0
  257. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/sdk/status.py +0 -0
  258. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/__init__.py +0 -0
  259. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/base_strategy.py +0 -0
  260. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/cloud_strategy.py +0 -0
  261. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/hybrid_strategy.py +0 -0
  262. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/strategies/local_strategy.py +0 -0
  263. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/utils/__init__.py +0 -0
  264. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/utils/agent_parser.py +0 -0
  265. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/__init__.py +0 -0
  266. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/apmplus_logs.py +0 -0
  267. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/code_pipeline.py +0 -0
  268. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/cr.py +0 -0
  269. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/iam.py +0 -0
  270. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/services/__init__.py +0 -0
  271. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/services/cr_service.py +0 -0
  272. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/services/tos_service.py +0 -0
  273. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/sts.py +0 -0
  274. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/utils/__init__.py +0 -0
  275. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/toolkit/volcengine/utils/project_archiver.py +0 -0
  276. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/__init__.py +0 -0
  277. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/global_config_io.py +0 -0
  278. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/http_defaults.py +0 -0
  279. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/logging_config.py +0 -0
  280. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/misc.py +0 -0
  281. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/redact.py +0 -0
  282. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/request.py +0 -0
  283. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/template_utils.py +0 -0
  284. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit/utils/ve_sign.py +0 -0
  285. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/__init__.py +0 -0
  286. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/context.py +0 -0
  287. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/errors.py +0 -0
  288. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/jwt.py +0 -0
  289. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/middleware.py +0 -0
  290. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/py.typed +0 -0
  291. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/runtime.py +0 -0
  292. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/transport.py +0 -0
  293. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_identity/types.py +0 -0
  294. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/SOURCES.txt +0 -0
  295. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/dependency_links.txt +0 -0
  296. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/entry_points.txt +0 -0
  297. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/requires.txt +0 -0
  298. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/agentkit_sdk_python.egg-info/top_level.txt +0 -0
  299. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/setup.cfg +0 -0
  300. {agentkit_sdk_python-0.8.3 → agentkit_sdk_python-0.8.5}/tests/test_client_uses_platform_context.py +0 -0
  301. {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
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 Volcengine OpenAPI client for the auth ADMIN commands.
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 = "cn-beijing",
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
- self.ak = access_key or os.getenv("VOLCENGINE_ACCESS_KEY") or os.getenv("VOLC_ACCESSKEY")
95
- self.sk = secret_key or os.getenv("VOLCENGINE_SECRET_KEY") or os.getenv("VOLC_SECRETKEY")
96
- self.token = session_token or os.getenv("VOLCENGINE_SESSION_TOKEN")
97
- if not (self.ak and self.sk):
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 needs Volcengine credentials.",
100
- hint="export VOLCENGINE_ACCESS_KEY / VOLCENGINE_SECRET_KEY for the account that owns the UserPool.",
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.region = region
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", _HOST, query, payload,
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://{_HOST}/?{urllib.parse.urlencode(query)}"
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", _HOST, query, b"",
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://{_HOST}/?{urllib.parse.urlencode(query)}"
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
- return {
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; return ``(uid, issuer)``."""
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
- res = api.call("id", "CreateUserPool", "2025-10-30", {
106
- "Name": name, "Description": "AgentKit CLI login pool",
107
- "PasswordSignInEnabled": True, "SelfSignUpEnabled": False,
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, _issuer(uid, region)
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", "CreateRole", "2018-01-01", {
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 "Exist" not in exc.code and "Conflict" not in exc.code:
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 = _issuer(user_pool_uid, region)
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 = f"{_issuer(user_pool_uid, region)}/login/generic_oauth/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}.tos-{region}.volces.com,并配置 https 证书(TOS/CDN)。"
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
- ak = access_key or _os.getenv("VOLCENGINE_ACCESS_KEY")
383
- sk = secret_key or _os.getenv("VOLCENGINE_SECRET_KEY")
384
- token = session_token or _os.getenv("VOLCENGINE_SESSION_TOKEN")
385
- endpoint = f"tos-{coords.region}.volces.com"
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 VOLCENGINE_ACCESS_KEY / _SECRET_KEY")
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
 
@@ -304,6 +304,7 @@ class AuthSession:
304
304
  self.profile.role_trn,
305
305
  self.profile.provider_trn,
306
306
  duration_seconds=self._duration,
307
+ host=self.profile.sts_host,
307
308
  )
308
309
  self._sts = StsCredentials(
309
310
  access_key=assumed.access_key_id,
@@ -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, region=session.profile.region
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. ``host`` MUST be
80
- ``sts.volcengineapi.com``; the token is too long for the query string so it
81
- travels in the POST body.
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://{STS_HOST}/?Action=AssumeRoleWithOIDC&Version={STS_VERSION}"
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 ({STS_HOST}): {exc.reason}") from exc
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", STS_HOST, query, b"",
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://{STS_HOST}/?" + urllib.parse.urlencode(query)
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 ({STS_HOST}): {exc.reason}") from exc
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. Default (cn-beijing)
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("VOLC_SESSIONTOKEN")
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 BaseAgentkitClient
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(BaseAgentkitClient):
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(