agentkit-sdk-python 0.3.3__tar.gz → 0.4.1__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 (173) hide show
  1. {agentkit_sdk_python-0.3.3/agentkit_sdk_python.egg-info → agentkit_sdk_python-0.4.1}/PKG-INFO +1 -1
  2. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/builders/ve_pipeline.py +81 -40
  3. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_config.py +53 -0
  4. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_runtime.py +8 -0
  5. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/config.py +13 -1
  6. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/config_handler.py +62 -0
  7. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/strategy_configs.py +39 -1
  8. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/runners/ve_agentkit.py +132 -1
  9. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/strategies/cloud_strategy.py +2 -0
  10. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/strategies/hybrid_strategy.py +2 -0
  11. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/services/tos_service.py +43 -3
  12. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/version.py +1 -1
  13. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1/agentkit_sdk_python.egg-info}/PKG-INFO +1 -1
  14. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/pyproject.toml +1 -1
  15. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/LICENSE +0 -0
  16. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/MANIFEST.in +0 -0
  17. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/README.md +0 -0
  18. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/__init__.py +0 -0
  19. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/__init__.py +0 -0
  20. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/a2a_app/__init__.py +0 -0
  21. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/a2a_app/a2a_app.py +0 -0
  22. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/a2a_app/telemetry.py +0 -0
  23. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/agent_server_app/__init__.py +0 -0
  24. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/agent_server_app/agent_server_app.py +0 -0
  25. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/agent_server_app/middleware.py +0 -0
  26. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/agent_server_app/telemetry.py +0 -0
  27. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/base_app.py +0 -0
  28. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/mcp_app/__init__.py +0 -0
  29. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/mcp_app/mcp_app.py +0 -0
  30. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/mcp_app/telemetry.py +0 -0
  31. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/simple_app/__init__.py +0 -0
  32. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/simple_app/simple_app.py +0 -0
  33. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/simple_app/simple_app_handlers.py +0 -0
  34. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/simple_app/telemetry.py +0 -0
  35. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/apps/utils.py +0 -0
  36. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/client/__init__.py +0 -0
  37. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/client/base_agentkit_client.py +0 -0
  38. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/client/base_iam_client.py +0 -0
  39. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/client/base_service_client.py +0 -0
  40. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/platform/__init__.py +0 -0
  41. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/platform/configuration.py +0 -0
  42. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/platform/constants.py +0 -0
  43. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/__init__.py +0 -0
  44. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/account/client.py +0 -0
  45. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/account/types.py +0 -0
  46. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/identity/__init__.py +0 -0
  47. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/identity/auth.py +0 -0
  48. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/knowledge/__init__.py +0 -0
  49. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/knowledge/client.py +0 -0
  50. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/knowledge/types.py +0 -0
  51. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/mcp/__init__.py +0 -0
  52. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/mcp/client.py +0 -0
  53. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/mcp/types.py +0 -0
  54. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/memory/__init__.py +0 -0
  55. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/memory/client.py +0 -0
  56. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/memory/types.py +0 -0
  57. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/runtime/__init__.py +0 -0
  58. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/runtime/client.py +0 -0
  59. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/runtime/types.py +0 -0
  60. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/tools/__init__.py +0 -0
  61. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/tools/client.py +0 -0
  62. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/sdk/tools/types.py +0 -0
  63. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/__init__.py +0 -0
  64. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/builders/__init__.py +0 -0
  65. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/builders/base.py +0 -0
  66. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/builders/local_docker.py +0 -0
  67. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/__init__.py +0 -0
  68. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/__main__.py +0 -0
  69. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli.py +0 -0
  70. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_build.py +0 -0
  71. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_deploy.py +0 -0
  72. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_destroy.py +0 -0
  73. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_init.py +0 -0
  74. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_invoke.py +0 -0
  75. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_knowledge.py +0 -0
  76. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_launch.py +0 -0
  77. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_memory.py +0 -0
  78. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_status.py +0 -0
  79. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_tools.py +0 -0
  80. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/cli_version.py +0 -0
  81. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/console_reporter.py +0 -0
  82. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/interactive_config.py +0 -0
  83. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/cli/utils.py +0 -0
  84. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/__init__.py +0 -0
  85. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/config_validator.py +0 -0
  86. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/constants.py +0 -0
  87. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/dataclass_utils.py +0 -0
  88. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/docker_build_config.py +0 -0
  89. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/global_config.py +0 -0
  90. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/region_resolver.py +0 -0
  91. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/config/utils.py +0 -0
  92. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/context.py +0 -0
  93. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/docker/__init__.py +0 -0
  94. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/docker/container.py +0 -0
  95. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/docker/dockerfile/__init__.py +0 -0
  96. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/docker/dockerfile/manager.py +0 -0
  97. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/docker/dockerfile/metadata.py +0 -0
  98. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/docker/utils.py +0 -0
  99. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/errors.py +0 -0
  100. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/__init__.py +0 -0
  101. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/base_executor.py +0 -0
  102. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/build_executor.py +0 -0
  103. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/deploy_executor.py +0 -0
  104. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/init_executor.py +0 -0
  105. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/invoke_executor.py +0 -0
  106. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/lifecycle_executor.py +0 -0
  107. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/executors/status_executor.py +0 -0
  108. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/models.py +0 -0
  109. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/reporter.py +0 -0
  110. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/__pycache__/customer_support_assistant.cpython-312.pyc +0 -0
  111. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/__pycache__/financial_analyst.cpython-312.pyc +0 -0
  112. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/__pycache__/simple_app_veadk.cpython-312.pyc +0 -0
  113. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/__pycache__/simple_mcp_veadk.cpython-312.pyc +0 -0
  114. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/a2a.py +0 -0
  115. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/agent_server.py +0 -0
  116. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/basic.py +0 -0
  117. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/basic_stream.py +0 -0
  118. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/customer_support_assistant.py +0 -0
  119. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/eino_a2a/agent.go +0 -0
  120. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/eino_a2a/build.sh +0 -0
  121. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/eino_a2a/go.mod +0 -0
  122. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/eino_a2a/go.sum +0 -0
  123. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/eino_a2a/main.go +0 -0
  124. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/financial_analyst.py +0 -0
  125. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/langchain_basic_stream.py +0 -0
  126. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/simple_app_veadk.py +0 -0
  127. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/samples/simple_mcp_veadk.py +0 -0
  128. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/templates/code-pipeline-tos-cr-step.j2 +0 -0
  129. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/templates/golang/Dockerfile.j2 +0 -0
  130. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/templates/python/Dockerfile.j2 +0 -0
  131. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/wrappers/wrapper_basic.py.jinja2 +0 -0
  132. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/resources/wrappers/wrapper_stream.py.jinja2 +0 -0
  133. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/runners/__init__.py +0 -0
  134. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/runners/base.py +0 -0
  135. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/runners/local_docker.py +0 -0
  136. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/__init__.py +0 -0
  137. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/bindings/__init__.py +0 -0
  138. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/bindings/memory.py +0 -0
  139. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/builder.py +0 -0
  140. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/client.py +0 -0
  141. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/config.py +0 -0
  142. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/deployer.py +0 -0
  143. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/initializer.py +0 -0
  144. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/invoker.py +0 -0
  145. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/lifecycle.py +0 -0
  146. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/sdk/status.py +0 -0
  147. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/strategies/__init__.py +0 -0
  148. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/strategies/base_strategy.py +0 -0
  149. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/strategies/local_strategy.py +0 -0
  150. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/utils/__init__.py +0 -0
  151. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/utils/agent_parser.py +0 -0
  152. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/__init__.py +0 -0
  153. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/code_pipeline.py +0 -0
  154. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/cr.py +0 -0
  155. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/iam.py +0 -0
  156. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/services/__init__.py +0 -0
  157. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/services/cr_service.py +0 -0
  158. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/sts.py +0 -0
  159. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/utils/__init__.py +0 -0
  160. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/toolkit/volcengine/utils/project_archiver.py +0 -0
  161. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/utils/__init__.py +0 -0
  162. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/utils/global_config_io.py +0 -0
  163. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/utils/logging_config.py +0 -0
  164. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/utils/misc.py +0 -0
  165. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/utils/request.py +0 -0
  166. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/utils/template_utils.py +0 -0
  167. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit/utils/ve_sign.py +0 -0
  168. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit_sdk_python.egg-info/SOURCES.txt +0 -0
  169. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit_sdk_python.egg-info/dependency_links.txt +0 -0
  170. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit_sdk_python.egg-info/entry_points.txt +0 -0
  171. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit_sdk_python.egg-info/requires.txt +0 -0
  172. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/agentkit_sdk_python.egg-info/top_level.txt +0 -0
  173. {agentkit_sdk_python-0.3.3 → agentkit_sdk_python-0.4.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentkit-sdk-python
3
- Version: 0.3.3
3
+ Version: 0.4.1
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
@@ -715,6 +715,7 @@ class VeCPCRBuilder(Builder):
715
715
  from agentkit.toolkit.volcengine.services.tos_service import (
716
716
  TOSService,
717
717
  TOSServiceConfig,
718
+ tos,
718
719
  )
719
720
 
720
721
  # Handle bucket configuration with auto-creation support
@@ -742,55 +743,95 @@ class VeCPCRBuilder(Builder):
742
743
 
743
744
  tos_service = TOSService(tos_config)
744
745
 
745
- # Check if bucket exists and create if necessary
746
- self.reporter.info(f"Checking TOS bucket existence: {bucket_name}")
747
- if not tos_service.bucket_exists():
748
- # Case 2: Bucket doesn't exist, create it
749
- self.reporter.warning(
750
- f"TOS bucket does not exist, creating: {bucket_name}"
751
- )
746
+ # Two-step safety check:
747
+ # 1) Ensure the bucket exists and is accessible.
748
+ # 2) Verify the bucket is owned by the current account via ListBuckets before uploading.
749
+ import time
752
750
 
753
- if not tos_service.create_bucket():
754
- error_msg = f"Failed to create TOS bucket: {bucket_name}"
755
- self.reporter.error(error_msg)
756
- logger.error(error_msg)
757
- raise Exception(error_msg)
751
+ created_in_this_run = False
758
752
 
759
- self.reporter.success(f"TOS bucket created successfully: {bucket_name}")
753
+ # Step 1: ensure bucket exists / accessible
754
+ if auto_created_bucket:
755
+ self.reporter.info(
756
+ f"Creating auto-generated TOS bucket in current account: {bucket_name}"
757
+ )
760
758
 
761
- # Verify bucket creation with retry logic (eventual consistency)
762
- self.reporter.info(f"Verifying TOS bucket creation: {bucket_name}")
763
- import time
759
+ # Very low probability: name collision. Retry with a new generated name.
760
+ max_attempts = 3
761
+ for attempt in range(1, max_attempts + 1):
762
+ tos_service.config.bucket = bucket_name
763
+ try:
764
+ tos_service.create_bucket()
765
+ created_in_this_run = True
766
+ break
767
+ except tos.exceptions.TosServerError as e:
768
+ if e.status_code == 409 and attempt < max_attempts:
769
+ bucket_name = TOSService.generate_bucket_name()
770
+ self.reporter.warning(
771
+ "Auto-generated bucket name already taken, retrying with a new name "
772
+ f"(attempt {attempt + 1}/{max_attempts}): {bucket_name}"
773
+ )
774
+ continue
775
+ raise
776
+ else:
777
+ # User-specified bucket: if not accessible/existing, attempt to create.
778
+ self.reporter.info(f"Checking TOS bucket accessibility: {bucket_name}")
779
+ if not tos_service.bucket_exists():
780
+ self.reporter.warning(
781
+ f"TOS bucket '{bucket_name}' is not accessible or does not exist, attempting to create it..."
782
+ )
783
+ try:
784
+ tos_service.create_bucket()
785
+ created_in_this_run = True
786
+ except tos.exceptions.TosServerError as e:
787
+ if e.status_code == 409:
788
+ # The bucket name is already taken (possibly by another account).
789
+ # Ownership verification in step 2 will block the upload.
790
+ pass
791
+ else:
792
+ raise
764
793
 
765
- start_time = time.time()
766
- timeout = 30 # 30 second timeout
767
- check_interval = 2 # Check every 2 seconds
794
+ # Step 2: verify bucket ownership via ListBuckets
795
+ self.reporter.info(f"Verifying TOS bucket ownership: {bucket_name}")
768
796
 
769
- while time.time() - start_time < timeout:
770
- if tos_service.bucket_exists():
771
- self.reporter.success(
772
- f"TOS bucket verification successful: {bucket_name}"
773
- )
774
- break
775
- else:
776
- self.reporter.info(
777
- f"Waiting for TOS bucket to be ready... ({time.time() - start_time:.1f}s)"
778
- )
779
- time.sleep(check_interval)
780
- else:
781
- # Timeout occurred
782
- error_msg = f"TOS bucket creation verification timeout ({timeout}s): {bucket_name}"
797
+ def check_owned() -> bool:
798
+ try:
799
+ return tos_service.bucket_is_owned(bucket_name)
800
+ except Exception as e:
801
+ error_msg = (
802
+ "Failed to determine TOS bucket ownership via ListBuckets. "
803
+ "Upload has been blocked for security reasons. "
804
+ "Please ensure your credentials have TOS ListBuckets permission, or set 'tos_bucket: Auto'."
805
+ )
783
806
  self.reporter.error(error_msg)
784
- logger.error(error_msg)
807
+ logger.error(f"Bucket ownership check failed: {str(e)}")
785
808
  raise Exception(error_msg)
786
809
 
787
- # Notify user if their configured bucket didn't exist and was auto-created
788
- if config.tos_bucket and config.tos_bucket != AUTO_CREATE_VE:
789
- self.reporter.info(
790
- f"Note: Your configured bucket '{config.tos_bucket}' did not exist, auto-created new bucket '{bucket_name}'"
791
- )
810
+ if created_in_this_run:
811
+ # ListBuckets may be eventually consistent shortly after creation.
812
+ timeout_s = 10
813
+ interval_s = 2
814
+ deadline = time.time() + timeout_s
815
+ owned = False
816
+ while time.time() < deadline:
817
+ owned = check_owned()
818
+ if owned:
819
+ break
820
+ time.sleep(interval_s)
792
821
  else:
793
- self.reporter.success(f"TOS bucket exists: {bucket_name}")
822
+ owned = check_owned()
823
+
824
+ if not owned:
825
+ error_msg = (
826
+ f"Security notice: The configured TOS bucket '{bucket_name}' is not owned by the current account. "
827
+ "To prevent uploading your source code to a bucket you do not own (which could leak secrets), this upload has been blocked. "
828
+ "Please choose a bucket owned by your account, use 'agentkit config --tos_bucket <your-bucket-name>' to set it."
829
+ )
830
+ raise Exception(error_msg)
831
+
832
+ self.reporter.success(
833
+ f"TOS bucket ownership verified for current account: {bucket_name}"
834
+ )
794
835
 
795
836
  # Update config with auto-generated bucket name if applicable
796
837
  if auto_created_bucket:
@@ -155,6 +155,52 @@ def config_command(
155
155
  "--runtime_jwt_allowed_clients",
156
156
  help="Allowed OAuth2 client IDs when runtime_auth_type is custom_jwt (can be used multiple times)",
157
157
  ),
158
+ # Runtime bindings (resource associations)
159
+ memory_id: Optional[str] = typer.Option(
160
+ None,
161
+ "--memory_id",
162
+ "--runtime_binding_memory_id",
163
+ help="Bind Runtime to a Memory collection ID (cloud/hybrid only)",
164
+ ),
165
+ knowledge_id: Optional[str] = typer.Option(
166
+ None,
167
+ "--knowledge_id",
168
+ "--runtime_binding_knowledge_id",
169
+ help="Bind Runtime to a Knowledge ID (cloud/hybrid only)",
170
+ ),
171
+ tool_id: Optional[str] = typer.Option(
172
+ None,
173
+ "--tool_id",
174
+ "--runtime_binding_tool_id",
175
+ help="Bind Runtime to a Tool ID (cloud/hybrid only)",
176
+ ),
177
+ mcp_toolset_id: Optional[str] = typer.Option(
178
+ None,
179
+ "--mcp_toolset_id",
180
+ "--runtime_binding_mcp_toolset_id",
181
+ help="Bind Runtime to an MCP Toolset ID (cloud/hybrid only)",
182
+ ),
183
+ # Runtime network configuration (advanced, CreateRuntime only)
184
+ runtime_network_mode: Optional[str] = typer.Option(
185
+ None,
186
+ "--runtime_network_mode",
187
+ "--runtime-network-mode",
188
+ help="Runtime network mode (cloud/hybrid, CreateRuntime only): public/private/both",
189
+ ),
190
+ runtime_vpc_id: Optional[str] = typer.Option(
191
+ None,
192
+ "--runtime_vpc_id",
193
+ "--runtime-vpc-id",
194
+ help="Runtime VPC ID (cloud/hybrid, CreateRuntime only; required for private/both)",
195
+ ),
196
+ runtime_subnet_ids: Optional[List[str]] = typer.Option(
197
+ None,
198
+ "--runtime_subnet_ids",
199
+ "--runtime_subnet_id",
200
+ "--runtime-subnet-id",
201
+ "--runtime-subnet-ids",
202
+ help="Runtime subnet ID (repeatable; cloud/hybrid, CreateRuntime only)",
203
+ ),
158
204
  ):
159
205
  """Configure AgentKit (supports interactive and non-interactive modes).
160
206
 
@@ -254,6 +300,13 @@ def config_command(
254
300
  runtime_auth_type=runtime_auth_type,
255
301
  runtime_jwt_discovery_url=runtime_jwt_discovery_url,
256
302
  runtime_jwt_allowed_clients=runtime_jwt_allowed_clients,
303
+ memory_id=memory_id,
304
+ knowledge_id=knowledge_id,
305
+ tool_id=tool_id,
306
+ mcp_toolset_id=mcp_toolset_id,
307
+ runtime_network_mode=runtime_network_mode,
308
+ runtime_vpc_id=runtime_vpc_id,
309
+ runtime_subnet_ids=runtime_subnet_ids,
257
310
  )
258
311
 
259
312
  has_cli_params = ConfigParamHandler.has_cli_params(cli_params)
@@ -57,6 +57,9 @@ def create_runtime_command(
57
57
  None, "--knowledge-id", help="Knowledge ID"
58
58
  ),
59
59
  tool_id: Optional[str] = typer.Option(None, "--tool-id", help="Tool ID"),
60
+ mcp_toolset_id: Optional[str] = typer.Option(
61
+ None, "--mcp-toolset-id", help="MCP Toolset ID"
62
+ ),
60
63
  model_agent_name: Optional[str] = typer.Option(
61
64
  None, "--model-agent-name", help="Model agent name"
62
65
  ),
@@ -169,6 +172,7 @@ def create_runtime_command(
169
172
  memory_id=memory_id,
170
173
  knowledge_id=knowledge_id,
171
174
  tool_id=tool_id,
175
+ mcp_toolset_id=mcp_toolset_id,
172
176
  model_agent_name=model_agent_name,
173
177
  authorizer_configuration=authorizer,
174
178
  network_configuration=network,
@@ -233,6 +237,9 @@ def update_runtime_command(
233
237
  None, "--knowledge-id", help="Knowledge ID"
234
238
  ),
235
239
  tool_id: Optional[str] = typer.Option(None, "--tool-id", help="Tool ID"),
240
+ mcp_toolset_id: Optional[str] = typer.Option(
241
+ None, "--mcp-toolset-id", help="MCP Toolset ID"
242
+ ),
236
243
  envs_json: Optional[str] = typer.Option(
237
244
  None, "--envs-json", help="JSON array of envs [{Key,Value}]"
238
245
  ),
@@ -278,6 +285,7 @@ def update_runtime_command(
278
285
  memory_id=memory_id,
279
286
  knowledge_id=knowledge_id,
280
287
  tool_id=tool_id,
288
+ mcp_toolset_id=mcp_toolset_id,
281
289
  envs=envs,
282
290
  tags=tags,
283
291
  )
@@ -362,10 +362,22 @@ class AgentkitConfigManager:
362
362
  self._save_config()
363
363
 
364
364
  def _filter_config_values(self, config: Dict[str, Any]) -> Dict[str, Any]:
365
- """Filter empty and meaningless values from configuration."""
365
+ """Filter empty and meaningless values from configuration.
366
+
367
+ Note: Some config sections intentionally use empty values to represent
368
+ explicit user intent. For example, `runtime_bindings` may use empty
369
+ strings ("")/null to indicate unbinding.
370
+ """
366
371
  filtered = {}
367
372
 
368
373
  for key, value in config.items():
374
+ # Keep runtime_bindings as-is. It may contain empty strings / null to
375
+ # explicitly represent "no binding" / "unbind" semantics.
376
+ if key == "runtime_bindings" and isinstance(value, dict):
377
+ if value:
378
+ filtered[key] = value
379
+ continue
380
+
369
381
  if value == "" or value is None:
370
382
  continue
371
383
 
@@ -63,6 +63,21 @@ class ConfigParamHandler:
63
63
 
64
64
  return result
65
65
 
66
+ @staticmethod
67
+ def parse_id_list(values: Optional[List[str]]) -> List[str]:
68
+ """Parse repeatable IDs, supporting comma-separated values."""
69
+ if not values:
70
+ return []
71
+ result: List[str] = []
72
+ for item in values:
73
+ if item is None:
74
+ continue
75
+ for part in str(item).split(","):
76
+ part = part.strip()
77
+ if part:
78
+ result.append(part)
79
+ return result
80
+
66
81
  @staticmethod
67
82
  def collect_cli_params(
68
83
  agent_name: Optional[str],
@@ -88,6 +103,13 @@ class ConfigParamHandler:
88
103
  runtime_auth_type: Optional[str],
89
104
  runtime_jwt_discovery_url: Optional[str],
90
105
  runtime_jwt_allowed_clients: Optional[List[str]],
106
+ memory_id: Optional[str],
107
+ knowledge_id: Optional[str],
108
+ tool_id: Optional[str],
109
+ mcp_toolset_id: Optional[str],
110
+ runtime_network_mode: Optional[str],
111
+ runtime_vpc_id: Optional[str],
112
+ runtime_subnet_ids: Optional[List[str]],
91
113
  ) -> Dict[str, Any]:
92
114
  """Collect all CLI parameters.
93
115
 
@@ -158,6 +180,32 @@ class ConfigParamHandler:
158
180
  strategy_params["runtime_role_name"] = runtime_role_name
159
181
  if runtime_apikey_name is not None:
160
182
  strategy_params["runtime_apikey_name"] = runtime_apikey_name
183
+
184
+ # Runtime bindings (resource associations)
185
+ runtime_bindings: Dict[str, Any] = {}
186
+ if memory_id is not None:
187
+ runtime_bindings["memory_id"] = memory_id
188
+ if knowledge_id is not None:
189
+ runtime_bindings["knowledge_id"] = knowledge_id
190
+ if tool_id is not None:
191
+ runtime_bindings["tool_id"] = tool_id
192
+ if mcp_toolset_id is not None:
193
+ runtime_bindings["mcp_toolset_id"] = mcp_toolset_id
194
+ if runtime_bindings:
195
+ strategy_params["runtime_bindings"] = runtime_bindings
196
+
197
+ # Runtime network configuration (advanced, CreateRuntime only)
198
+ runtime_network: Dict[str, Any] = {}
199
+ if runtime_network_mode is not None:
200
+ runtime_network["mode"] = runtime_network_mode.strip().lower()
201
+ if runtime_vpc_id is not None:
202
+ runtime_network["vpc_id"] = runtime_vpc_id
203
+ if runtime_subnet_ids is not None:
204
+ runtime_network["subnet_ids"] = ConfigParamHandler.parse_id_list(
205
+ runtime_subnet_ids
206
+ )
207
+ if runtime_network:
208
+ strategy_params["runtime_network"] = runtime_network
161
209
  if runtime_auth_type is not None:
162
210
  strategy_params["runtime_auth_type"] = runtime_auth_type
163
211
  if runtime_jwt_discovery_url is not None:
@@ -241,6 +289,20 @@ class NonInteractiveConfigHandler:
241
289
  new_strategy_config["runtime_envs"] = existing_envs
242
290
  else:
243
291
  new_strategy_config["runtime_envs"] = value
292
+ elif key == "runtime_bindings" and isinstance(value, dict):
293
+ existing_bindings = new_strategy_config.get("runtime_bindings", {})
294
+ if isinstance(existing_bindings, dict):
295
+ existing_bindings.update(value)
296
+ new_strategy_config["runtime_bindings"] = existing_bindings
297
+ else:
298
+ new_strategy_config["runtime_bindings"] = value
299
+ elif key == "runtime_network" and isinstance(value, dict):
300
+ existing_network = new_strategy_config.get("runtime_network", {})
301
+ if isinstance(existing_network, dict):
302
+ existing_network.update(value)
303
+ new_strategy_config["runtime_network"] = existing_network
304
+ else:
305
+ new_strategy_config["runtime_network"] = value
244
306
  else:
245
307
  new_strategy_config[key] = value
246
308
 
@@ -1,5 +1,5 @@
1
1
  from dataclasses import dataclass, field
2
- from typing import Dict, List
2
+ from typing import Any, Dict, List, Optional
3
3
  from .dataclass_utils import AutoSerializableMixin
4
4
  from .constants import (
5
5
  AUTH_TYPE_CUSTOM_JWT,
@@ -307,6 +307,25 @@ class HybridStrategyConfig(AutoSerializableMixin):
307
307
  "icon": "🔧",
308
308
  },
309
309
  )
310
+
311
+ runtime_bindings: Dict[str, Optional[str]] = field(
312
+ default_factory=dict,
313
+ metadata={
314
+ "hidden": True,
315
+ "description": "Runtime associated resource IDs (memory_id/knowledge_id/tool_id/mcp_toolset_id)",
316
+ "examples": "{memory_id: mem-xxx, knowledge_id: kb-xxx, tool_id: tool-xxx, mcp_toolset_id: mcp-ts-xxx}",
317
+ "icon": "🔗",
318
+ },
319
+ )
320
+
321
+ runtime_network: Dict[str, Any] = field(
322
+ default_factory=dict,
323
+ metadata={
324
+ "hidden": True,
325
+ "description": "Runtime network configuration (advanced, CreateRuntime only)",
326
+ "examples": "{mode: private, vpc_id: vpc-xxx, subnet_ids: [subnet-aaa, subnet-bbb]}",
327
+ },
328
+ )
310
329
  _config_metadata = {
311
330
  "name": "Hybrid Strategy Configuration",
312
331
  "welcome_message": "Welcome to AgentKit Hybrid Deployment Mode Configuration Wizard",
@@ -554,6 +573,25 @@ class CloudStrategyConfig(AutoSerializableMixin):
554
573
  },
555
574
  )
556
575
 
576
+ runtime_bindings: Dict[str, Optional[str]] = field(
577
+ default_factory=dict,
578
+ metadata={
579
+ "hidden": True,
580
+ "description": "Runtime associated resource IDs (memory_id/knowledge_id/tool_id/mcp_toolset_id)",
581
+ "examples": "{memory_id: mem-xxx, knowledge_id: kb-xxx, tool_id: tool-xxx, mcp_toolset_id: mcp-ts-xxx}",
582
+ "icon": "🔗",
583
+ },
584
+ )
585
+
586
+ runtime_network: Dict[str, Any] = field(
587
+ default_factory=dict,
588
+ metadata={
589
+ "hidden": True,
590
+ "description": "Runtime network configuration (advanced, CreateRuntime only)",
591
+ "examples": "{mode: private, vpc_id: vpc-xxx, subnet_ids: [subnet-aaa, subnet-bbb]}",
592
+ },
593
+ )
594
+
557
595
  # Deployment metadata
558
596
  build_timestamp: str = field(
559
597
  default="", metadata={"system": True, "description": "Timestamp of image build"}
@@ -91,6 +91,22 @@ class VeAgentkitRunnerConfig(AutoSerializableMixin):
91
91
  default_factory=dict, metadata={"description": "Runtime environment variables"}
92
92
  )
93
93
 
94
+ # Runtime bindings (resource associations)
95
+ runtime_bindings: Dict[str, Optional[str]] = field(
96
+ default_factory=dict,
97
+ metadata={
98
+ "description": "Runtime associated resources: memory_id/knowledge_id/tool_id/mcp_toolset_id",
99
+ },
100
+ )
101
+
102
+ # Runtime network configuration (advanced, CreateRuntime only)
103
+ runtime_network: Dict[str, Any] = field(
104
+ default_factory=dict,
105
+ metadata={
106
+ "description": "Runtime network configuration (advanced, CreateRuntime only)",
107
+ },
108
+ )
109
+
94
110
  # Authentication configuration
95
111
  runtime_auth_type: str = field(
96
112
  default=AUTH_TYPE_KEY_AUTH,
@@ -451,7 +467,7 @@ class VeAgentkitRuntimeRunner(Runner):
451
467
 
452
468
  # Validate based on auth type
453
469
  if not endpoint:
454
- error_msg = "Failed to obtain Runtime endpoint."
470
+ error_msg = "Failed to obtain Runtime endpoint. The 'agentkit invoke' command only supports public network endpoints."
455
471
  logger.error(f"{error_msg}, runtime: {runtime}")
456
472
  return InvokeResult(
457
473
  success=False,
@@ -604,6 +620,65 @@ class VeAgentkitRuntimeRunner(Runner):
604
620
  )
605
621
  )
606
622
 
623
+ def _build_network_config_for_create(
624
+ self, config: VeAgentkitRunnerConfig
625
+ ) -> Optional[runtime_types.NetworkForCreateRuntime]:
626
+ runtime_network = (
627
+ config.runtime_network if isinstance(config.runtime_network, dict) else {}
628
+ )
629
+ if not runtime_network:
630
+ return None
631
+
632
+ mode = runtime_network.get("mode")
633
+ vpc_id = runtime_network.get("vpc_id")
634
+ subnet_ids = runtime_network.get("subnet_ids")
635
+
636
+ # Convenience: if vpc_id is provided without an explicit mode, assume private.
637
+ if mode is None and vpc_id:
638
+ mode = "private"
639
+
640
+ if mode is None:
641
+ raise ValueError(
642
+ "runtime_network is configured but 'mode' is missing. "
643
+ "Valid values: public/private/both."
644
+ )
645
+
646
+ mode = str(mode).strip().lower()
647
+ if mode not in {"public", "private", "both"}:
648
+ raise ValueError(
649
+ f"Invalid runtime_network.mode '{mode}'. Valid values: public/private/both."
650
+ )
651
+
652
+ enable_public = mode in {"public", "both"}
653
+ enable_private = mode in {"private", "both"}
654
+
655
+ vpc_configuration = None
656
+ if enable_private:
657
+ vpc_id_str = str(vpc_id or "").strip()
658
+ if not vpc_id_str:
659
+ raise ValueError(
660
+ "runtime_network.mode requires 'vpc_id' when mode is private/both."
661
+ )
662
+
663
+ parsed_subnet_ids: Optional[List[str]] = None
664
+ if isinstance(subnet_ids, str):
665
+ ids = [s.strip() for s in subnet_ids.split(",") if s.strip()]
666
+ parsed_subnet_ids = ids or None
667
+ elif isinstance(subnet_ids, list):
668
+ ids = [str(s).strip() for s in subnet_ids if str(s).strip()]
669
+ parsed_subnet_ids = ids or None
670
+
671
+ vpc_configuration = runtime_types.NetworkVpcForCreateRuntime(
672
+ vpc_id=vpc_id_str,
673
+ subnet_ids=parsed_subnet_ids,
674
+ )
675
+
676
+ return runtime_types.NetworkForCreateRuntime(
677
+ vpc_configuration=vpc_configuration,
678
+ enable_private_network=enable_private,
679
+ enable_public_network=enable_public,
680
+ )
681
+
607
682
  def _create_new_runtime(self, config: VeAgentkitRunnerConfig) -> DeployResult:
608
683
  """Create a new Runtime instance.
609
684
 
@@ -624,9 +699,22 @@ class VeAgentkitRuntimeRunner(Runner):
624
699
  for k, v in config.runtime_envs.items()
625
700
  ]
626
701
 
702
+ bindings = (
703
+ config.runtime_bindings
704
+ if isinstance(config.runtime_bindings, dict)
705
+ else {}
706
+ )
707
+ memory_id = bindings.get("memory_id")
708
+ knowledge_id = bindings.get("knowledge_id")
709
+ tool_id = bindings.get("tool_id")
710
+ mcp_toolset_id = bindings.get("mcp_toolset_id")
711
+
627
712
  # Build authorizer configuration based on auth type
628
713
  authorizer_config = self._build_authorizer_config_for_create(config)
629
714
 
715
+ # Network configuration is only supported during CreateRuntime.
716
+ network_configuration = self._build_network_config_for_create(config)
717
+
630
718
  create_request = runtime_types.CreateRuntimeRequest(
631
719
  name=config.runtime_name,
632
720
  description=config.common_config.description
@@ -635,6 +723,13 @@ class VeAgentkitRuntimeRunner(Runner):
635
723
  artifact_type=ARTIFACT_TYPE_DOCKER_IMAGE,
636
724
  artifact_url=config.image_url,
637
725
  role_name=config.runtime_role_name,
726
+ memory_id=(memory_id if is_valid_config(memory_id) else None),
727
+ knowledge_id=(knowledge_id if is_valid_config(knowledge_id) else None),
728
+ tool_id=(tool_id if is_valid_config(tool_id) else None),
729
+ mcp_toolset_id=(
730
+ mcp_toolset_id if is_valid_config(mcp_toolset_id) else None
731
+ ),
732
+ network_configuration=network_configuration,
638
733
  envs=envs,
639
734
  project_name=PROJECT_NAME_DEFAULT,
640
735
  authorizer_configuration=authorizer_config,
@@ -985,6 +1080,12 @@ class VeAgentkitRuntimeRunner(Runner):
985
1080
  try:
986
1081
  self.reporter.info(f"Updating Runtime: {config.runtime_id}")
987
1082
 
1083
+ if isinstance(config.runtime_network, dict) and config.runtime_network:
1084
+ self.reporter.warning(
1085
+ "runtime_network is configured, but network settings only apply when creating a Runtime. "
1086
+ "UpdateRuntime does not support network_configuration; ignoring runtime_network."
1087
+ )
1088
+
988
1089
  client = self._get_runtime_client(config.region)
989
1090
 
990
1091
  # Get existing Runtime information
@@ -1048,6 +1149,32 @@ class VeAgentkitRuntimeRunner(Runner):
1048
1149
 
1049
1150
  self.reporter.info("Starting Runtime update...")
1050
1151
 
1152
+ def _binding_update_value(key: str) -> Optional[str]:
1153
+ """Translate runtime_bindings into UpdateRuntimeRequest fields.
1154
+
1155
+ Semantics:
1156
+ - key not present: return None (do not send)
1157
+ - value is None: return "" (explicit clear/unbind)
1158
+ - value is "" or whitespace: return "" (explicit clear/unbind)
1159
+ - value is non-empty: return value
1160
+ """
1161
+ if (
1162
+ not isinstance(config.runtime_bindings, dict)
1163
+ or key not in config.runtime_bindings
1164
+ ):
1165
+ return None
1166
+ raw = config.runtime_bindings.get(key)
1167
+ if raw is None:
1168
+ return ""
1169
+ if isinstance(raw, str) and not raw.strip():
1170
+ return ""
1171
+ return str(raw)
1172
+
1173
+ memory_id = _binding_update_value("memory_id")
1174
+ knowledge_id = _binding_update_value("knowledge_id")
1175
+ tool_id = _binding_update_value("tool_id")
1176
+ mcp_toolset_id = _binding_update_value("mcp_toolset_id")
1177
+
1051
1178
  envs = [
1052
1179
  {"Key": str(k), "Value": str(v)} for k, v in config.runtime_envs.items()
1053
1180
  ]
@@ -1056,6 +1183,10 @@ class VeAgentkitRuntimeRunner(Runner):
1056
1183
  runtime_id=config.runtime_id,
1057
1184
  artifact_url=config.image_url,
1058
1185
  description=config.common_config.description,
1186
+ memory_id=memory_id,
1187
+ knowledge_id=knowledge_id,
1188
+ tool_id=tool_id,
1189
+ mcp_toolset_id=mcp_toolset_id,
1059
1190
  envs=envs,
1060
1191
  client_token=generate_client_token(),
1061
1192
  )
@@ -338,6 +338,8 @@ class CloudStrategy(Strategy):
338
338
  runtime_apikey_name=strategy_config.runtime_apikey_name,
339
339
  runtime_endpoint=strategy_config.runtime_endpoint,
340
340
  runtime_envs=merged_envs,
341
+ runtime_bindings=getattr(strategy_config, "runtime_bindings", None) or {},
342
+ runtime_network=getattr(strategy_config, "runtime_network", None) or {},
341
343
  runtime_auth_type=strategy_config.runtime_auth_type,
342
344
  runtime_jwt_discovery_url=strategy_config.runtime_jwt_discovery_url,
343
345
  runtime_jwt_allowed_clients=strategy_config.runtime_jwt_allowed_clients,
@@ -505,6 +505,8 @@ class HybridStrategy(Strategy):
505
505
  runtime_apikey_name=strategy_config.runtime_apikey_name,
506
506
  runtime_endpoint=strategy_config.runtime_endpoint,
507
507
  runtime_envs=merged_envs,
508
+ runtime_bindings=getattr(strategy_config, "runtime_bindings", None) or {},
509
+ runtime_network=getattr(strategy_config, "runtime_network", None) or {},
508
510
  runtime_auth_type=strategy_config.runtime_auth_type,
509
511
  runtime_jwt_discovery_url=strategy_config.runtime_jwt_discovery_url,
510
512
  runtime_jwt_allowed_clients=strategy_config.runtime_jwt_allowed_clients,