agentkit-sdk-python 0.8.4__py3-none-any.whl → 0.8.6__py3-none-any.whl

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.
@@ -7,10 +7,12 @@ import logging
7
7
  import os
8
8
  from typing import Any
9
9
 
10
-
11
10
  logger = logging.getLogger(__name__)
12
11
  ARK_DEFAULT_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3"
12
+ VEADK_SOURCE_HEADER = "veadk-source"
13
+ VEADK_SOURCE_VALUE = "veadk"
13
14
  _DISABLED_VALUES = {"0", "false", "off", "none", "disabled"}
15
+ _HEADER_PATCH_MARKER = "__agentkit_veadk_source_header__"
14
16
  _MODEL_PARAM_KEYS = {
15
17
  "frequency_penalty",
16
18
  "max_tokens",
@@ -49,6 +51,55 @@ def _replacement_enabled() -> bool:
49
51
  return value not in _DISABLED_VALUES
50
52
 
51
53
 
54
+ def _merge_veadk_source_header(headers: Any = None) -> dict[str, Any]:
55
+ merged = {
56
+ key: value
57
+ for key, value in dict(headers or {}).items()
58
+ if key.lower() != VEADK_SOURCE_HEADER
59
+ }
60
+ merged[VEADK_SOURCE_HEADER] = VEADK_SOURCE_VALUE
61
+ return merged
62
+
63
+
64
+ def _header_kwarg_model_cls(base_cls: type[Any], header_kwarg: str) -> type[Any]:
65
+ if getattr(base_cls, _HEADER_PATCH_MARKER, False):
66
+ return base_cls
67
+
68
+ class AgentKitHeaderModel(base_cls):
69
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
70
+ kwargs[header_kwarg] = _merge_veadk_source_header(kwargs.get(header_kwarg))
71
+ super().__init__(*args, **kwargs)
72
+
73
+ AgentKitHeaderModel.__name__ = base_cls.__name__
74
+ AgentKitHeaderModel.__qualname__ = base_cls.__qualname__
75
+ AgentKitHeaderModel.__module__ = base_cls.__module__
76
+ setattr(AgentKitHeaderModel, _HEADER_PATCH_MARKER, True)
77
+ return AgentKitHeaderModel
78
+
79
+
80
+ def _openai_client_args_model_cls(base_cls: type[Any]) -> type[Any]:
81
+ if getattr(base_cls, _HEADER_PATCH_MARKER, False):
82
+ return base_cls
83
+
84
+ class AgentKitHeaderModel(base_cls):
85
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
86
+ if args or kwargs.get("client") is not None:
87
+ super().__init__(*args, **kwargs)
88
+ return
89
+ client_args = dict(kwargs.get("client_args") or {})
90
+ client_args["default_headers"] = _merge_veadk_source_header(
91
+ client_args.get("default_headers")
92
+ )
93
+ kwargs["client_args"] = client_args
94
+ super().__init__(*args, **kwargs)
95
+
96
+ AgentKitHeaderModel.__name__ = base_cls.__name__
97
+ AgentKitHeaderModel.__qualname__ = base_cls.__qualname__
98
+ AgentKitHeaderModel.__module__ = base_cls.__module__
99
+ setattr(AgentKitHeaderModel, _HEADER_PATCH_MARKER, True)
100
+ return AgentKitHeaderModel
101
+
102
+
52
103
  def _replacement_model_config(config: dict[str, Any]) -> dict[str, Any]:
53
104
  model_id = _target_model_id()
54
105
  if not model_id:
@@ -90,6 +141,7 @@ def _agentkit_openai_model_cls() -> type[Any]:
90
141
  client_args={
91
142
  "base_url": _target_base_url(),
92
143
  "api_key": api_key,
144
+ "default_headers": _merge_veadk_source_header(),
93
145
  },
94
146
  **_replacement_model_config(kwargs),
95
147
  )
@@ -101,7 +153,7 @@ def _agentkit_openai_model_cls() -> type[Any]:
101
153
  def _patch_model_attr(module_name: str, attr: str, replacement: type[Any]) -> bool:
102
154
  try:
103
155
  module = importlib.import_module(module_name)
104
- except Exception:
156
+ except Exception: # noqa: BLE001 - optional framework imports are best effort
105
157
  return False
106
158
  if hasattr(module, attr):
107
159
  setattr(module, attr, replacement)
@@ -109,6 +161,49 @@ def _patch_model_attr(module_name: str, attr: str, replacement: type[Any]) -> bo
109
161
  return False
110
162
 
111
163
 
164
+ def _patch_langchain_model_headers() -> bool:
165
+ try:
166
+ module = importlib.import_module("langchain_openai.chat_models.base")
167
+ replacement = _header_kwarg_model_cls(module.ChatOpenAI, "default_headers")
168
+ except Exception: # noqa: BLE001 - optional framework imports are best effort
169
+ return False
170
+
171
+ patched = False
172
+ for module_name in (
173
+ "langchain_openai",
174
+ "langchain_openai.chat_models",
175
+ "langchain_openai.chat_models.base",
176
+ ):
177
+ patched = _patch_model_attr(module_name, "ChatOpenAI", replacement) or patched
178
+ return patched
179
+
180
+
181
+ def _patch_adk_model_headers() -> bool:
182
+ try:
183
+ module = importlib.import_module("google.adk.models.lite_llm")
184
+ replacement = _header_kwarg_model_cls(module.LiteLlm, "extra_headers")
185
+ except Exception: # noqa: BLE001 - optional framework imports are best effort
186
+ return False
187
+
188
+ patched = False
189
+ for module_name in ("google.adk.models", "google.adk.models.lite_llm"):
190
+ patched = _patch_model_attr(module_name, "LiteLlm", replacement) or patched
191
+ return patched
192
+
193
+
194
+ def _patch_strands_openai_model_headers() -> bool:
195
+ try:
196
+ module = importlib.import_module("strands.models.openai")
197
+ replacement = _openai_client_args_model_cls(module.OpenAIModel)
198
+ except Exception: # noqa: BLE001 - optional framework imports are best effort
199
+ return False
200
+
201
+ patched = False
202
+ for module_name in ("strands.models", "strands.models.openai"):
203
+ patched = _patch_model_attr(module_name, "OpenAIModel", replacement) or patched
204
+ return patched
205
+
206
+
112
207
  def _apply_env_aliases() -> bool:
113
208
  changed = False
114
209
  model_id = _target_model_id()
@@ -138,7 +233,7 @@ def _apply_env_aliases() -> bool:
138
233
  def _patch_strands_model_classes() -> bool:
139
234
  try:
140
235
  replacement = _agentkit_openai_model_cls()
141
- except Exception:
236
+ except Exception: # noqa: BLE001 - optional framework imports are best effort
142
237
  return False
143
238
 
144
239
  patched = False
@@ -155,21 +250,33 @@ def apply_agentkit_model_replacement() -> bool:
155
250
  """Apply explicit target-model replacement for generated migration wrappers.
156
251
 
157
252
  The helper intentionally stays low-intrusion: it normalizes common model
158
- environment variables and patches only stable Strands Bedrock/Anthropic
159
- model classes before user code constructs them. It does not rewrite project
160
- source code or chase framework-specific model SDK constructor details.
253
+ environment variables and patches stable framework model constructors before
254
+ user code constructs them. It does not rewrite project source code or patch
255
+ global HTTP/OpenAI clients.
161
256
  """
162
257
 
163
258
  if not _replacement_enabled():
164
259
  logger.info("AgentKit model replacement disabled by ARK_MODEL_REPLACEMENT.")
165
260
  return False
166
261
  env_changed = _apply_env_aliases()
262
+ langchain_headers_patched = _patch_langchain_model_headers()
263
+ adk_headers_patched = _patch_adk_model_headers()
264
+ strands_headers_patched = _patch_strands_openai_model_headers()
167
265
  patched = _patch_strands_model_classes()
168
266
  logger.info(
169
- "AgentKit model replacement enabled: env_aliases=%s strands_model_patch=%s target_model_configured=%s base_url_configured=%s",
267
+ "AgentKit model replacement enabled: env_aliases=%s langchain_headers=%s adk_headers=%s strands_headers=%s strands_model_patch=%s target_model_configured=%s base_url_configured=%s",
170
268
  env_changed,
269
+ langchain_headers_patched,
270
+ adk_headers_patched,
271
+ strands_headers_patched,
171
272
  patched,
172
273
  bool(_target_model_id()),
173
274
  bool(_target_base_url()),
174
275
  )
175
- return env_changed or patched
276
+ return (
277
+ env_changed
278
+ or langchain_headers_patched
279
+ or adk_headers_patched
280
+ or strands_headers_patched
281
+ or patched
282
+ )
@@ -17,6 +17,7 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
+ from enum import Enum
20
21
  from typing import Optional
21
22
  from pydantic import BaseModel, Field
22
23
 
@@ -28,6 +29,11 @@ class ToolsBaseModel(BaseModel):
28
29
 
29
30
 
30
31
  # Data Types
32
+ class CredentialType(str, Enum):
33
+ TOS_CREDENTIAL_TYPE_ACCESS_KEY = "TOS_CREDENTIAL_TYPE_ACCESS_KEY"
34
+ TOS_CREDENTIAL_TYPE_IAM_ROLE = "TOS_CREDENTIAL_TYPE_IAM_ROLE"
35
+
36
+
31
37
  class AssociatedRuntimesForGetTool(ToolsBaseModel):
32
38
  id: Optional[str] = Field(default=None, alias="Id")
33
39
  name: Optional[str] = Field(default=None, alias="Name")
@@ -204,6 +210,9 @@ class TosMountConfigForGetTool(ToolsBaseModel):
204
210
  credentials: Optional[CredentialsForGetTool] = Field(
205
211
  default=None, alias="Credentials"
206
212
  )
213
+ credential_type: Optional[CredentialType] = Field(
214
+ default=None, alias="CredentialType"
215
+ )
207
216
  enable_tos: Optional[bool] = Field(default=None, alias="EnableTos")
208
217
  mount_points: Optional[list[MountPointsForGetTool]] = Field(
209
218
  default=None, alias="MountPoints"
@@ -348,6 +357,9 @@ class TosMountForCreateTool(ToolsBaseModel):
348
357
  credentials: Optional[TosMountCredentialsForCreateTool] = Field(
349
358
  default=None, alias="Credentials"
350
359
  )
360
+ credential_type: Optional[CredentialType] = Field(
361
+ default=None, alias="CredentialType"
362
+ )
351
363
  mount_points: Optional[list[TosMountMountPointsItemForCreateTool]] = Field(
352
364
  default=None, alias="MountPoints"
353
365
  )
@@ -678,6 +690,9 @@ class TosMountForUpdateTool(ToolsBaseModel):
678
690
  credentials: Optional[TosMountCredentialsForUpdateTool] = Field(
679
691
  default=None, alias="Credentials"
680
692
  )
693
+ credential_type: Optional[CredentialType] = Field(
694
+ default=None, alias="CredentialType"
695
+ )
681
696
  mount_points: Optional[list[TosMountMountPointsItemForUpdateTool]] = Field(
682
697
  default=None, alias="MountPoints"
683
698
  )
@@ -329,6 +329,10 @@ def update_tool_command(
329
329
  client = AgentkitToolsClient(region=(region or "").strip())
330
330
  if json_body:
331
331
  payload = json.loads(json_body)
332
+ if not isinstance(payload, dict):
333
+ raise ValueError("--json must contain a JSON object")
334
+ payload.pop("tool_id", None)
335
+ payload["ToolId"] = tool_id.strip()
332
336
  else:
333
337
  payload = tools_types.UpdateToolRequest(
334
338
  tool_id=tool_id, description=description
@@ -56,8 +56,10 @@ from agentkit.toolkit.cli.sandbox.model_config import (
56
56
  )
57
57
  from agentkit.toolkit.cli.sandbox.tool_resolve import save_tool_result_if_resolvable
58
58
  from agentkit.toolkit.cli.sandbox.tos_config import (
59
+ DEFAULT_TOS_CREDENTIAL_TYPE,
59
60
  DEFAULT_TOS_LOCAL_PATH,
60
61
  build_create_tool_tos_mount_config,
62
+ normalize_tos_credential_type,
61
63
  )
62
64
  from agentkit.toolkit.cli.sandbox.sandbox_client import error
63
65
  from agentkit.toolkit.volcengine.services.tos_service import (
@@ -206,6 +208,7 @@ def _build_create_tool_request(
206
208
  tos_bucket: Optional[str],
207
209
  tos_region: str,
208
210
  tos_mount_path: str = DEFAULT_TOS_LOCAL_PATH,
211
+ tos_credential_type: str | tools_types.CredentialType | None = None,
209
212
  cpu: int = DEFAULT_CPU,
210
213
  model_name: Optional[str] = None,
211
214
  model_api_key: Optional[str] = None,
@@ -228,6 +231,16 @@ def _build_create_tool_request(
228
231
  is_private_tool = resolved_tool_type == PRIVATE_TOOL_TYPE
229
232
  if is_private_tool and not (image_url or "").strip():
230
233
  error("--image-url is required when --tool-type Private")
234
+ resolved_tos_credential_type = normalize_tos_credential_type(
235
+ tos_credential_type
236
+ )
237
+ if (
238
+ is_private_tool
239
+ and (tos_bucket or "").strip()
240
+ and resolved_tos_credential_type
241
+ == tools_types.CredentialType.TOS_CREDENTIAL_TYPE_IAM_ROLE
242
+ ):
243
+ error("TOS IAM Role mounting is only supported for Built-in Tools")
231
244
  command = PRIVATE_TOOL_COMMAND if is_private_tool else None
232
245
  port = PRIVATE_TOOL_PORT if is_private_tool else None
233
246
  envs = (
@@ -256,6 +269,7 @@ def _build_create_tool_request(
256
269
  tos_bucket,
257
270
  tos_region,
258
271
  local_mount_path=tos_mount_path,
272
+ credential_type=resolved_tos_credential_type,
259
273
  tos_service_cls=TOSService,
260
274
  tos_service_config_cls=TOSServiceConfig,
261
275
  )
@@ -451,6 +465,7 @@ def create_tool(
451
465
  tool_name: Optional[str] = None,
452
466
  tos_bucket: Optional[str] = None,
453
467
  tos_mount_path: str = DEFAULT_TOS_LOCAL_PATH,
468
+ tos_credential_type: str | tools_types.CredentialType | None = None,
454
469
  cpu: int = DEFAULT_CPU,
455
470
  model_name: Optional[str] = None,
456
471
  model_api_key: Optional[str] = None,
@@ -508,6 +523,7 @@ def create_tool(
508
523
  tos_bucket=tos_bucket,
509
524
  tos_region=tos_region,
510
525
  tos_mount_path=tos_mount_path,
526
+ tos_credential_type=tos_credential_type,
511
527
  cpu=cpu,
512
528
  model_name=model_name,
513
529
  model_api_key=model_api_key,
@@ -571,6 +587,15 @@ def create_command(
571
587
  f"Defaults to {DEFAULT_TOS_LOCAL_PATH} when omitted."
572
588
  ),
573
589
  ),
590
+ tos_credential_type: Optional[str] = typer.Option(
591
+ None,
592
+ "--tos-credential-type",
593
+ help=(
594
+ "TOS mount authentication: access-key or iam-role. "
595
+ "IAM Role is only supported for Built-in Tools. "
596
+ "Defaults to access-key."
597
+ ),
598
+ ),
574
599
  cpu: int = typer.Option(
575
600
  DEFAULT_CPU,
576
601
  "--cpu",
@@ -672,6 +697,13 @@ def create_command(
672
697
  tos_mount = config_default_if_unprovided(
673
698
  ctx, "tos_mount", "tos-mount", tos_mount, data=config_defaults
674
699
  )
700
+ tos_credential_type = config_default_if_unprovided(
701
+ ctx,
702
+ "tos_credential_type",
703
+ "tos-credential-type",
704
+ tos_credential_type,
705
+ data=config_defaults,
706
+ )
675
707
  cpu = config_default_if_unprovided(
676
708
  ctx,
677
709
  "cpu",
@@ -777,6 +809,11 @@ def create_command(
777
809
  )
778
810
  if tos_mount is not None and not (tos_bucket or "").strip():
779
811
  error("--tos-mount requires --tos-bucket")
812
+ if (
813
+ tos_credential_type is not None
814
+ and not (tos_bucket or "").strip()
815
+ ):
816
+ error("--tos-credential-type requires --tos-bucket")
780
817
  model_provider_was_provided = param_was_provided(ctx, "model_provider")
781
818
  model_base_url_was_provided = param_was_provided(ctx, "model_base_url")
782
819
  result = create_tool(
@@ -784,6 +821,9 @@ def create_command(
784
821
  tool_name=tool_name,
785
822
  tos_bucket=tos_bucket,
786
823
  tos_mount_path=tos_mount or DEFAULT_TOS_LOCAL_PATH,
824
+ tos_credential_type=(
825
+ tos_credential_type or DEFAULT_TOS_CREDENTIAL_TYPE
826
+ ),
787
827
  cpu=cpu,
788
828
  model_name=model_name,
789
829
  model_api_key=model_api_key,
@@ -157,6 +157,11 @@ CONFIG_KEY_SPECS: dict[str, ConfigKeySpec] = {
157
157
  "cpu": ConfigKeySpec(("tool", "cpu"), _int_value, VALID_CPU_VALUES),
158
158
  "tos-bucket": ConfigKeySpec(("tool", "tos_bucket"), _str_value),
159
159
  "tos-mount": ConfigKeySpec(("tool", "tos_mount"), _str_value),
160
+ "tos-credential-type": ConfigKeySpec(
161
+ ("tool", "tos_credential_type"),
162
+ _str_value,
163
+ ("access-key", "iam-role"),
164
+ ),
160
165
  "role-name": ConfigKeySpec(("tool", "role_name"), _str_value),
161
166
  "enable-snapshot": ConfigKeySpec(("tool", "enable_snapshot"), _bool_value),
162
167
  "websearch-apikey": ConfigKeySpec(("tool", "websearch_apikey"), _str_value),
@@ -29,6 +29,35 @@ from agentkit.toolkit.volcengine.services.tos_service import (
29
29
  DEFAULT_TOS_BUCKET_PATH = "/sandbox-session/default/default"
30
30
  DEFAULT_TOS_LOCAL_PATH = "/home/gem/workspace"
31
31
  DEFAULT_SANDBOX_WORKSPACE = "/home/gem"
32
+ DEFAULT_TOS_CREDENTIAL_TYPE = (
33
+ tools_types.CredentialType.TOS_CREDENTIAL_TYPE_ACCESS_KEY
34
+ )
35
+
36
+
37
+ def normalize_tos_credential_type(
38
+ value: str | tools_types.CredentialType | None,
39
+ ) -> tools_types.CredentialType:
40
+ if isinstance(value, tools_types.CredentialType):
41
+ return value
42
+
43
+ normalized = (value or "").strip().upper().replace("-", "_")
44
+ aliases = {
45
+ "": DEFAULT_TOS_CREDENTIAL_TYPE,
46
+ "ACCESS_KEY": tools_types.CredentialType.TOS_CREDENTIAL_TYPE_ACCESS_KEY,
47
+ "TOS_CREDENTIAL_TYPE_ACCESS_KEY": (
48
+ tools_types.CredentialType.TOS_CREDENTIAL_TYPE_ACCESS_KEY
49
+ ),
50
+ "IAM_ROLE": tools_types.CredentialType.TOS_CREDENTIAL_TYPE_IAM_ROLE,
51
+ "TOS_CREDENTIAL_TYPE_IAM_ROLE": (
52
+ tools_types.CredentialType.TOS_CREDENTIAL_TYPE_IAM_ROLE
53
+ ),
54
+ }
55
+ credential_type = aliases.get(normalized)
56
+ if credential_type is None:
57
+ error(
58
+ "--tos-credential-type must be one of: access-key, iam-role"
59
+ )
60
+ return credential_type
32
61
 
33
62
 
34
63
  def resolve_tos_bucket(tos_bucket: Optional[str]) -> str:
@@ -50,6 +79,7 @@ def build_create_tool_tos_mount_config(
50
79
  region: str,
51
80
  *,
52
81
  local_mount_path: str = DEFAULT_TOS_LOCAL_PATH,
82
+ credential_type: str | tools_types.CredentialType | None = None,
53
83
  tos_service_cls=TOSService,
54
84
  tos_service_config_cls=TOSServiceConfig,
55
85
  ) -> tools_types.TosMountForCreateTool | None:
@@ -58,6 +88,25 @@ def build_create_tool_tos_mount_config(
58
88
 
59
89
  resolved_bucket = resolve_tos_bucket(tos_bucket)
60
90
  resolved_local_mount_path = resolve_tos_mount_path(local_mount_path)
91
+ resolved_credential_type = normalize_tos_credential_type(credential_type)
92
+ if (
93
+ resolved_credential_type
94
+ == tools_types.CredentialType.TOS_CREDENTIAL_TYPE_IAM_ROLE
95
+ ):
96
+ return tools_types.TosMountForCreateTool(
97
+ EnableTos=True,
98
+ CredentialType=resolved_credential_type,
99
+ MountPoints=[
100
+ tools_types.TosMountMountPointsItemForCreateTool(
101
+ BucketName=resolved_bucket,
102
+ BucketPath=DEFAULT_TOS_BUCKET_PATH,
103
+ Endpoint=TOSService.build_mount_endpoint(region),
104
+ LocalMountPath=resolved_local_mount_path,
105
+ ReadOnly=False,
106
+ )
107
+ ],
108
+ )
109
+
61
110
  service = tos_service_cls(
62
111
  tos_service_config_cls(
63
112
  bucket=resolved_bucket,
@@ -76,6 +125,9 @@ def to_create_tool_tos_mount_config(
76
125
  ) -> tools_types.TosMountForCreateTool:
77
126
  return tools_types.TosMountForCreateTool(
78
127
  EnableTos=True,
128
+ CredentialType=(
129
+ tools_types.CredentialType.TOS_CREDENTIAL_TYPE_ACCESS_KEY
130
+ ),
79
131
  Credentials=tools_types.TosMountCredentialsForCreateTool(
80
132
  AccessKeyId=mount_config.credentials.access_key_id,
81
133
  SecretAccessKey=mount_config.credentials.secret_access_key,
@@ -131,13 +131,19 @@ TEMPLATES = {
131
131
  }
132
132
 
133
133
 
134
- # `.env.example` written into a harness directory. Carries only the Volcengine
135
- # deploy credentials; copy to `.env` and fill in the AK/SK before deploying.
134
+ # `.env.example` written into a harness directory. Copy it to `.env` and fill in
135
+ # the credential pair for the selected cloud provider before deploying.
136
136
  _HARNESS_ENV_EXAMPLE = """\
137
137
  # Volcengine credentials for harness deploy. Copy this file to `.env` and fill in.
138
138
  VOLCENGINE_ACCESS_KEY=
139
139
  VOLCENGINE_SECRET_KEY=
140
140
  # VOLCENGINE_REGION=cn-beijing
141
+
142
+ # BytePlus credentials (uncomment these lines and set CLOUD_PROVIDER=byteplus).
143
+ # CLOUD_PROVIDER=byteplus
144
+ # BYTEPLUS_ACCESS_KEY=
145
+ # BYTEPLUS_SECRET_KEY=
146
+ # BYTEPLUS_REGION=ap-southeast-1
141
147
  """
142
148
 
143
149
  # Container image for the harness server. The base image's apt mirror is an
@@ -23,6 +23,7 @@ def build_agentkit_config(
23
23
  envs: Dict[str, str],
24
24
  auth: Optional[Dict[str, Any]] = None,
25
25
  runtime_id: str = "Auto",
26
+ cloud_provider: Optional[str] = None,
26
27
  ) -> Dict[str, Any]:
27
28
  """Build the cloud AgentKit launch config dict (auto-provision).
28
29
 
@@ -37,7 +38,8 @@ def build_agentkit_config(
37
38
 
38
39
  When ``auth`` (a normalized ``{discovery_url, allowed_ids}`` block) is given,
39
40
  the runtime is gated by OAuth2/JWT (``custom_jwt``); otherwise it keeps the
40
- default API-key auth (``key_auth``).
41
+ default API-key auth (``key_auth``). ``cloud_provider`` pins the generated
42
+ launch config to the same provider used to resolve credentials and region.
41
43
  """
42
44
  cloud: Dict[str, Any] = {
43
45
  "region": region,
@@ -64,16 +66,20 @@ def build_agentkit_config(
64
66
  cloud["runtime_apikey_name"] = "Auto"
65
67
  cloud["runtime_apikey"] = "Auto"
66
68
  cloud["runtime_jwt_allowed_clients"] = []
69
+ common: Dict[str, Any] = {
70
+ "agent_name": runtime_name,
71
+ "entry_point": "app.py",
72
+ "description": "Harness Server - VeADK",
73
+ "language": "Python",
74
+ "language_version": "3.12",
75
+ "runtime_envs": envs,
76
+ "launch_type": "cloud",
77
+ }
78
+ if cloud_provider:
79
+ common["cloud_provider"] = cloud_provider
80
+
67
81
  return {
68
- "common": {
69
- "agent_name": runtime_name,
70
- "entry_point": "app.py",
71
- "description": "Harness Server - VeADK",
72
- "language": "Python",
73
- "language_version": "3.12",
74
- "runtime_envs": envs,
75
- "launch_type": "cloud",
76
- },
82
+ "common": common,
77
83
  "launch_types": {"cloud": cloud},
78
84
  "docker_build": {},
79
85
  }
@@ -28,7 +28,6 @@ from typing import Any, Callable, Dict, Optional, Union
28
28
 
29
29
  from ..models import LifecycleResult
30
30
  from ..reporter import Reporter
31
-
32
31
  from .config_builder import build_agentkit_config
33
32
  from .env_mapping import to_runtime_env
34
33
 
@@ -43,9 +42,9 @@ _DEFAULT_HARNESS_NAME = "default"
43
42
  HARNESS_TAG_KEY = "agentkit:agenttype"
44
43
  HARNESS_TAG_VALUE = "harness"
45
44
 
46
- # Volcengine deploy credentials: needed locally to authenticate the build/deploy,
45
+ # Cloud deploy credentials: needed locally to authenticate the build/deploy,
47
46
  # but must never be uploaded into the cloud runtime's environment (the runtime
48
- # gets its Volcengine access from its IAM role). A harness's own `.env` carries
47
+ # gets its cloud access from its IAM role). A harness's own `.env` carries
49
48
  # these for deploy; they are excluded from the runtime env upload (see
50
49
  # COMPAT_ENV_EXCLUDE). Credentials a harness genuinely needs at runtime come from
51
50
  # its spec instead, so they are not affected.
@@ -56,6 +55,9 @@ _DEPLOY_CREDENTIAL_ENV_KEYS = {
56
55
  "VOLC_ACCESSKEY",
57
56
  "VOLC_SECRETKEY",
58
57
  "VOLC_SESSIONTOKEN",
58
+ "BYTEPLUS_ACCESS_KEY",
59
+ "BYTEPLUS_SECRET_KEY",
60
+ "BYTEPLUS_SESSION_TOKEN",
59
61
  }
60
62
 
61
63
 
@@ -217,16 +219,17 @@ def deploy_harness(
217
219
  (``HarnessDeployAborted``); if ``on_conflict`` is ``None`` (e.g. a
218
220
  programmatic caller or a non-interactive CLI), it fast-fails.
219
221
 
220
- Credentials note: a local ``.env`` is loaded for deploy auth, but the
221
- Volcengine deploy credentials in it are NOT uploaded into the runtime
222
+ Credentials note: a local ``.env`` is loaded for deploy auth, but the cloud
223
+ deploy credentials in it are NOT uploaded into the runtime
222
224
  environment (the runtime authenticates via its IAM role); other ``.env`` keys
223
225
  are still merged in.
224
226
 
225
227
  Args:
226
228
  name: Harness name; locates ``<name>.harness.json`` and names the runtime.
227
229
  path: Directory containing the spec and Dockerfile (default: cwd).
228
- region: AgentKit region (default ``cn-beijing`` or ``VOLCENGINE_REGION``).
229
- access_key / secret_key: Volcengine credentials (default: ``VOLCENGINE_*`` env).
230
+ region: AgentKit region (default resolved for the active cloud provider).
231
+ access_key / secret_key: Explicit cloud credentials (default: resolved from
232
+ provider-specific environment variables or global configuration).
230
233
  discovery_url / allowed_id: OAuth2/JWT overrides for the spec ``auth`` block.
231
234
  reporter: Progress reporter forwarded to the launch (default: silent).
232
235
  on_conflict: Callback consulted when a single same-name harness exists;
@@ -242,12 +245,13 @@ def deploy_harness(
242
245
  """
243
246
  # Heavy imports are lazy: this module is imported by `agentkit.toolkit.sdk`
244
247
  # at package init, and these pull in the runtime client / executors.
245
- from agentkit.toolkit.sdk.lifecycle import launch
246
- from agentkit.toolkit.models import PreflightMode
247
- from agentkit.toolkit.config import utils as cfg_utils
248
- from agentkit.toolkit.config.utils import load_dotenv_file
248
+ from agentkit.platform import VolcConfiguration, resolve_credentials
249
249
  from agentkit.sdk.runtime import types as rt_types
250
250
  from agentkit.sdk.runtime.client import AgentkitRuntimeClient
251
+ from agentkit.toolkit.config import utils as cfg_utils
252
+ from agentkit.toolkit.config.utils import load_dotenv_file
253
+ from agentkit.toolkit.models import PreflightMode
254
+ from agentkit.toolkit.sdk.lifecycle import launch
251
255
 
252
256
  proj_dir = Path(path).resolve()
253
257
  if not proj_dir.is_dir():
@@ -263,26 +267,27 @@ def deploy_harness(
263
267
  runtime_name = name
264
268
  auth = _resolve_auth(spec.get("auth"), discovery_url, allowed_id)
265
269
 
266
- # AgentKit authenticates via the Volcengine SDK, which reads VOLC_ACCESSKEY /
267
- # VOLC_SECRETKEY from the environment. Mirror whatever AK/SK was passed (or
268
- # already set as VOLCENGINE_*) into those names.
269
- ak = access_key or os.getenv("VOLCENGINE_ACCESS_KEY", "")
270
- sk = secret_key or os.getenv("VOLCENGINE_SECRET_KEY", "")
271
- if ak and sk:
272
- os.environ["VOLC_ACCESSKEY"] = ak
273
- os.environ["VOLC_SECRETKEY"] = sk
274
- if not os.getenv("VOLC_ACCESSKEY") or not os.getenv("VOLC_SECRETKEY"):
275
- raise ValueError(
276
- "Volcengine credentials are required. Pass access_key / secret_key, "
277
- "or set VOLCENGINE_ACCESS_KEY / VOLCENGINE_SECRET_KEY."
278
- )
279
-
280
- resolved_region = region or os.getenv("VOLCENGINE_REGION") or "cn-beijing"
270
+ # Use the shared platform abstraction so credentials and region follow the
271
+ # active provider (Volcengine or BytePlus) consistently with other clients.
272
+ platform_config = VolcConfiguration(region=region or None)
273
+ credentials = resolve_credentials(
274
+ "agentkit",
275
+ explicit_access_key=access_key,
276
+ explicit_secret_key=secret_key,
277
+ platform_config=platform_config,
278
+ )
279
+ resolved_region = platform_config.region
280
+ cloud_provider = platform_config.provider.value
281
281
 
282
282
  # Resolve a name collision into a deploy mode. The harness config defaults to
283
283
  # `runtime_id: Auto` (create new); an existing same-name harness can instead
284
284
  # be updated in place (new version) after confirmation.
285
- client = AgentkitRuntimeClient(region=resolved_region)
285
+ client = AgentkitRuntimeClient(
286
+ access_key=credentials.access_key,
287
+ secret_key=credentials.secret_key,
288
+ region=resolved_region,
289
+ session_token=credentials.session_token or "",
290
+ )
286
291
  matches = _find_runtimes_by_name(client, runtime_name)
287
292
  update_runtime_id = None
288
293
  if len(matches) > 1:
@@ -328,6 +333,7 @@ def deploy_harness(
328
333
  runtime_envs,
329
334
  auth,
330
335
  runtime_id=update_runtime_id or "Auto",
336
+ cloud_provider=cloud_provider,
331
337
  )
332
338
 
333
339
  # AgentKit's launch path exposes no hook for runtime tags, so tag the runtime
@@ -349,11 +355,26 @@ def deploy_harness(
349
355
  cwd = os.getcwd()
350
356
  os.chdir(proj_dir)
351
357
  AgentkitRuntimeClient.create_runtime = _create_runtime_with_harness_tag
352
- # Keep deploy-only Volcengine credentials in the local .env out of the
358
+ # Keep deploy-only cloud credentials in the local .env out of the
353
359
  # uploaded runtime environment (the compat layer auto-loads .env). Scoped to
354
360
  # this launch and restored afterwards.
355
361
  prev_exclude = cfg_utils.COMPAT_ENV_EXCLUDE
356
362
  cfg_utils.COMPAT_ENV_EXCLUDE = set(prev_exclude) | _DEPLOY_CREDENTIAL_ENV_KEYS
363
+ provider_prefix = "BYTEPLUS" if cloud_provider == "byteplus" else "VOLCENGINE"
364
+ deploy_env = {
365
+ "VOLC_ACCESSKEY": credentials.access_key,
366
+ "VOLC_SECRETKEY": credentials.secret_key,
367
+ "VOLC_SESSIONTOKEN": credentials.session_token,
368
+ f"{provider_prefix}_ACCESS_KEY": credentials.access_key,
369
+ f"{provider_prefix}_SECRET_KEY": credentials.secret_key,
370
+ f"{provider_prefix}_SESSION_TOKEN": credentials.session_token,
371
+ }
372
+ previous_deploy_env = {key: os.environ.get(key) for key in deploy_env}
373
+ for key, value in deploy_env.items():
374
+ if value:
375
+ os.environ[key] = value
376
+ else:
377
+ os.environ.pop(key, None)
357
378
  try:
358
379
  result = launch(
359
380
  config_dict=cfg,
@@ -363,6 +384,11 @@ def deploy_harness(
363
384
  finally:
364
385
  AgentkitRuntimeClient.create_runtime = orig_create_runtime
365
386
  cfg_utils.COMPAT_ENV_EXCLUDE = prev_exclude
387
+ for key, value in previous_deploy_env.items():
388
+ if value is None:
389
+ os.environ.pop(key, None)
390
+ else:
391
+ os.environ[key] = value
366
392
  os.chdir(cwd)
367
393
 
368
394
  if not result.success:
agentkit/version.py CHANGED
@@ -12,4 +12,4 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- VERSION = "0.8.4"
15
+ VERSION = "0.8.6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentkit-sdk-python
3
- Version: 0.8.4
3
+ Version: 0.8.6
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
@@ -1,6 +1,6 @@
1
1
  agentkit/__init__.py,sha256=l27ZMDslc3VhmmnPZJyrqVvTDoZ0LqhCtM5hw0caHcU,1021
2
2
  agentkit/errors.py,sha256=UWlXv0ZsXd_oLTMlxuf4u9-XkTdRYeVZueE--Z3JsHU,1214
3
- agentkit/version.py,sha256=fKAnVe0_BYK2q2PZxJGyG7eEu4cEnejRK9V0vQ6lftQ,653
3
+ agentkit/version.py,sha256=oiT47ntHQYP5lVwHBKHO62Vrkzn97W8vuO3VRiy71gY,653
4
4
  agentkit/apps/__init__.py,sha256=_Na1A4NSaMbVfPbsFKj2U-yI5mytD7W5skMaAOGbauY,2328
5
5
  agentkit/apps/base_app.py,sha256=3hZZExL1wyTGWveJEZZoqXN086MzmkVS_WU1vyulIWg,754
6
6
  agentkit/apps/utils.py,sha256=IzimIDmT6FS6PV9MLimPh46mq5zT-EjVmnYPxBdyEq0,1934
@@ -53,7 +53,7 @@ agentkit/frameworks/agentcore.py,sha256=L5bdqzVukm7V6esIttPZSHFEc8JiqysU8YxA6_pB
53
53
  agentkit/frameworks/langchain.py,sha256=Tcy2HGYqKmcugDSn3OMaD_6uxhsJtZI3o5E8Rw7UJrg,5947
54
54
  agentkit/frameworks/langgraph.py,sha256=hSYfh9Gy2vj3UM7zbpl4ZoawypTy6fFbz-Y0YrSS8p0,17651
55
55
  agentkit/frameworks/migration.py,sha256=OTIsrqxVOWlrP10D7_2Zt1tGFNWEmmAHqsTuLB7YBhY,4480
56
- agentkit/frameworks/model_replacement.py,sha256=EtRl617CZqYLNQ6CYKtK4XzObsv778jQCgWpBaJJahk,5196
56
+ agentkit/frameworks/model_replacement.py,sha256=vvU9OKQll9Nvrf0Up4LX1_O79vSa_WDbJ6LavN6ZFbQ,9432
57
57
  agentkit/frameworks/strands.py,sha256=KFeTsdVpOyOh-SJvC3jcW8FdhR_5Y3NaGDd6zbuYrXE,20885
58
58
  agentkit/frameworks/serving/__init__.py,sha256=EaR0jzP6np8v1gyD6CYlaRoIY1KgBaFosqCmRUgMc2E,302
59
59
  agentkit/frameworks/serving/fastapi_mount.py,sha256=LV6gJunwd7aU8MFdDYSxeaIUYWvYwMl2Am1J07ddP0A,1958
@@ -101,7 +101,7 @@ agentkit/sdk/skills/client.py,sha256=aZLskCgixIBq9PIkMErWLzbySSYioTZrNwHYwksQPcQ
101
101
  agentkit/sdk/skills/types.py,sha256=3ihqQPVJA84TNlUDIuSi_IA-Z8gZh3qHRmIVpu3ytIw,14909
102
102
  agentkit/sdk/tools/__init__.py,sha256=YeCcKcedAqPxmS3LzkqPJOWoz9AVLoqE173cK8gtkHk,636
103
103
  agentkit/sdk/tools/client.py,sha256=EpOiDfr_JEFRcSIbWt4oADHxCSx2fFqSUblRh-A0xPQ,7084
104
- agentkit/sdk/tools/types.py,sha256=uerLcuj2I-3mvKSFUSdLqGQs36oqHqcC2hmMPGCnGYc,31468
104
+ agentkit/sdk/tools/types.py,sha256=SE_dt6jyiEqfRimGDKfvWZmbnzNH325ZucoCgsl_tUM,31979
105
105
  agentkit/toolkit/__init__.py,sha256=VZkLRcjybKRHgWvGmLHAm0Gsb1FCUpKmKuJYfZmbfE0,1249
106
106
  agentkit/toolkit/context.py,sha256=6CPDjmUwB830JB0OrKGFVNUjeiJ17GPDtbbQBtt6L1w,7554
107
107
  agentkit/toolkit/errors.py,sha256=dUqxeYDSBx6npiw4f1T-M1eFsfbnrp0IA0oBszHT4P4,4913
@@ -135,7 +135,7 @@ agentkit/toolkit/cli/cli_skill.py,sha256=nEZXc9CVGop4e0WC-V2AAHqy7to4nw6KnKOtzS2
135
135
  agentkit/toolkit/cli/cli_skills.py,sha256=jBgpTb286MvXK4tr-asgmG9HAeVAIRr7k-VAcPYqqVI,41716
136
136
  agentkit/toolkit/cli/cli_skills_workflow.py,sha256=kteHk-ajiXZM8W-EghVon7Zb5irT0hXh4pdldCnqQX8,28080
137
137
  agentkit/toolkit/cli/cli_status.py,sha256=HP3TDCtqbD4NHPFAOq5LI8nuVLheCk-zo9hrm97K5lE,7645
138
- agentkit/toolkit/cli/cli_tools.py,sha256=LEDU7Oqx2SF96RjpgCH_i41uc6dw6HDh5Jd0RooQO6I,40888
138
+ agentkit/toolkit/cli/cli_tools.py,sha256=lksz2Qno974GyIum_COCKVqg-0JqH6Okrioz7yHu1LE,41093
139
139
  agentkit/toolkit/cli/cli_version.py,sha256=vGZTplakjF4ZoHWGXsxWj3nC29sK4qJ5iHfYtuI0M2A,3080
140
140
  agentkit/toolkit/cli/console_reporter.py,sha256=ta9GFUDkPEFfGeANDsza5bZdVXidqhHIfsu_gTyXzDw,6926
141
141
  agentkit/toolkit/cli/interactive_config.py,sha256=y5g5aNMJuX2tHUuu2pvacOssx3O3oqs0u_g0ZinyP1c,46133
@@ -147,7 +147,7 @@ agentkit/toolkit/cli/sandbox/agentkit_client.py,sha256=DDYsfB4bHXAbJjcjyitif2qlM
147
147
  agentkit/toolkit/cli/sandbox/cli.py,sha256=un89osF6DWuy8yALdqsIGJcKZ7dBMja9Isj-9a6fxcs,2809
148
148
  agentkit/toolkit/cli/sandbox/cli_build.py,sha256=43s9ohfj-bM48YNEJ4YKSZMofO63bCzb1hWCswxC2ck,2976
149
149
  agentkit/toolkit/cli/sandbox/cli_config.py,sha256=lvAAW1AetRjufBH67YY4ExDPeyxZqY_UU225zz1ia10,4153
150
- agentkit/toolkit/cli/sandbox/cli_create.py,sha256=vKXaWdtHsx-ua01TbKm4GgRzyzezdXO0J7izjDFKrM4,28991
150
+ agentkit/toolkit/cli/sandbox/cli_create.py,sha256=StNSWoHJk7QF04iuXAQYxwyPClmPrsEru0UqPczFnxo,30491
151
151
  agentkit/toolkit/cli/sandbox/cli_delete.py,sha256=S5nfDIbWt7Kqh4vYKAkG1Db9LaYX-mcu4H9rWN_KxLY,11215
152
152
  agentkit/toolkit/cli/sandbox/cli_exec.py,sha256=eoMX73akvtUMztZL4XoVkSQxnVQ5lyC8XZHVHLHxhP4,25640
153
153
  agentkit/toolkit/cli/sandbox/cli_init.py,sha256=X9jfqAmNg2bJA32sT0BvcHEMJSYiXHQec-UDx9n0hXg,4102
@@ -159,7 +159,7 @@ agentkit/toolkit/cli/sandbox/cli_run.py,sha256=Pa5n9TnCzhPB9GWaPxwIUzCcn0vuFH3mC
159
159
  agentkit/toolkit/cli/sandbox/cli_scp.py,sha256=CzhaUfRDfrGt78sx2W8evLVRwY5pAgSEvzA4tko4cKM,22617
160
160
  agentkit/toolkit/cli/sandbox/cli_shell.py,sha256=22nBh-Mq1VC5fSLWJXZKenzppm_EglP1qelVR5nbfLg,5392
161
161
  agentkit/toolkit/cli/sandbox/cli_web.py,sha256=s3JP-OuMNCfjsvsOStTOrTNhnY3xN-NI0inCIqqzrL8,3499
162
- agentkit/toolkit/cli/sandbox/config_store.py,sha256=vsYwuW9SkCtSCmkg0b7OATTx6gLm345yda6szCafz08,21632
162
+ agentkit/toolkit/cli/sandbox/config_store.py,sha256=W50aIu15hl2MpbRgRUU2yQkoTAr5Mvqg60Wy8TmXJD8,21778
163
163
  agentkit/toolkit/cli/sandbox/env_config.py,sha256=mQKKtRG7FXG0vhizEMpkzH9_g2agCQt9FDKgSGf-Xjs,26184
164
164
  agentkit/toolkit/cli/sandbox/git_config.py,sha256=r0akBAe8njIwrZeQS96oaICVHDPJ6zozW1jF-q_B1HU,6096
165
165
  agentkit/toolkit/cli/sandbox/model_config.py,sha256=A3TagXhjYB1HWtsEDIRVUPmVOfc6c_e7qcipSkqCBLk,23752
@@ -167,7 +167,7 @@ agentkit/toolkit/cli/sandbox/sandbox_client.py,sha256=-0-tom8tzR7rFdXDWupOI67A9L
167
167
  agentkit/toolkit/cli/sandbox/session_create.py,sha256=xgZTXxhrCmuXFxuz_nOx8JINUrB3Jglg2GTQTBboQ7I,16287
168
168
  agentkit/toolkit/cli/sandbox/session_sync.py,sha256=Xz7aufW7CT5Vs72utOew1rpip5yDD-_M3GUaVVyMQko,3051
169
169
  agentkit/toolkit/cli/sandbox/tool_resolve.py,sha256=NHnu_H0-uo7ur8PfSvgJ9o78xuB8etqel4tDcxergKg,20516
170
- agentkit/toolkit/cli/sandbox/tos_config.py,sha256=gFdTWmr_FByqSQl_YC5nkIv5h04op9yGYq0V6lLc8gc,4787
170
+ agentkit/toolkit/cli/sandbox/tos_config.py,sha256=6snQoI2E7xBWMasLtWV9U3jjwnbtouIUi6X44DdmDG4,6724
171
171
  agentkit/toolkit/config/__init__.py,sha256=EtArtF-LsaQYjU9Wc-G_xelqHmlo2XrOWiVqK6NVKA8,2505
172
172
  agentkit/toolkit/config/choice_resolvers.py,sha256=9OxVevL9gLTNqVpMvsDP_rC8ZFF6SPbhLJXrqXdf9xM,5958
173
173
  agentkit/toolkit/config/cloud_provider.py,sha256=fvG-TOfbDsPlda42h2JSZyfgxojAeTD12tYCsp0nww8,2747
@@ -193,13 +193,13 @@ agentkit/toolkit/executors/__init__.py,sha256=ocEKR3rqbIrNtHukTfx1yBYKziIJWNcT0b
193
193
  agentkit/toolkit/executors/base_executor.py,sha256=b-Mm_X_idN7hrL4d6wyER_ZQkIsdZEXvYxbgY8i6YlQ,21565
194
194
  agentkit/toolkit/executors/build_executor.py,sha256=BfTj-yVlmDJquzpsdXwl_npQJhkda-OY8Qb1cNH3B7M,7401
195
195
  agentkit/toolkit/executors/deploy_executor.py,sha256=aMF7uNznU_Toqomllel9Il86iSTycqmL76K_BfeTB6U,6694
196
- agentkit/toolkit/executors/init_executor.py,sha256=Z9HIjHtUCjnnZel9yPgOH-Qpde1syqIZPq5Sa6ikqQk,36646
196
+ agentkit/toolkit/executors/init_executor.py,sha256=Yr2noIfxBXfVHg3Ppz0KEDFXIXNn1E3vyizpD0X8-_Q,36829
197
197
  agentkit/toolkit/executors/invoke_executor.py,sha256=xFqeFRAbt--PZeOzB6Sdij4JRTdOHt7bp4KoaCqOXY4,6545
198
198
  agentkit/toolkit/executors/lifecycle_executor.py,sha256=J4bBJ8QomKCttuF_Ruqk27PeAcx78Dyrrnnc2kLgMWI,16928
199
199
  agentkit/toolkit/executors/status_executor.py,sha256=mFta-aBUzvrlkpvjmDiyFs-hq9FZMZdHfXd0F7wTZxs,5353
200
200
  agentkit/toolkit/harness/__init__.py,sha256=EIPqG_tzXxslqHL7Zr0fd8x4VgRs14z7mNF6HIiCv28,1040
201
- agentkit/toolkit/harness/config_builder.py,sha256=v3YmdD7sOmLUDHj0y0v_LOXetM6RttxGQBxwP-glQHE,3091
202
- agentkit/toolkit/harness/deploy.py,sha256=7Z5msDq_GfbGrx1zwvnT8VYRRDH31mrt953wBK1tcPA,16270
201
+ agentkit/toolkit/harness/config_builder.py,sha256=QLxSs3hGaqD39JTKHAJKd7o9ysis9GsHf0fMQ1LDz6E,3328
202
+ agentkit/toolkit/harness/deploy.py,sha256=7Y1Gf1glb622RrBNAzCZioPeWtG_ldQLTay6DwDzMbE,17269
203
203
  agentkit/toolkit/harness/env_mapping.py,sha256=xcApQnVXW8ffcDoI2CpIU08llsUUxS3KbUggruFWjaQ,8567
204
204
  agentkit/toolkit/resources/samples/a2a.py,sha256=eKM56lrjnNLD35lT3Py_E7sN9eCGU4HdLOHrVz_xLwg,2867
205
205
  agentkit/toolkit/resources/samples/agent_server.py,sha256=tVD79gT8qhP3dLncKJPWhCjXNDKmRYB0DSyZFoRKiS0,2282
@@ -285,9 +285,9 @@ agentkit_identity/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
285
285
  agentkit_identity/runtime.py,sha256=hQHLvbAK760teFPTGZ0RG9Ed5DQAXAqIdaAm9ojzS34,14423
286
286
  agentkit_identity/transport.py,sha256=kwGHSEQ5Qcn1kIu6N6DVid7MdDUMj5uaIRIUA_tJ3cM,7693
287
287
  agentkit_identity/types.py,sha256=lT8KQz1pG0rgdy5Gh6WnM0mq9VqCsWSE41Z8Fw3DHZo,7358
288
- agentkit_sdk_python-0.8.4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
289
- agentkit_sdk_python-0.8.4.dist-info/METADATA,sha256=CmkfzVUQCoQ62WFvXFle1Il9-B77xpfEU-NOgAwtPUQ,21580
290
- agentkit_sdk_python-0.8.4.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
291
- agentkit_sdk_python-0.8.4.dist-info/entry_points.txt,sha256=fhzZUsvsLXeB4mPaa0SBQiTBqFT404uDAKPaePAOUAE,58
292
- agentkit_sdk_python-0.8.4.dist-info/top_level.txt,sha256=Kw8DVx7vzg-oUh7xC_hBZw7OwKW3Y_fo_8rkWOL1d5o,27
293
- agentkit_sdk_python-0.8.4.dist-info/RECORD,,
288
+ agentkit_sdk_python-0.8.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
289
+ agentkit_sdk_python-0.8.6.dist-info/METADATA,sha256=NN8bgpy6cuQ8yr3ZIb4xeKU1x2PlWCuX9khZzEU-aSk,21580
290
+ agentkit_sdk_python-0.8.6.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
291
+ agentkit_sdk_python-0.8.6.dist-info/entry_points.txt,sha256=fhzZUsvsLXeB4mPaa0SBQiTBqFT404uDAKPaePAOUAE,58
292
+ agentkit_sdk_python-0.8.6.dist-info/top_level.txt,sha256=Kw8DVx7vzg-oUh7xC_hBZw7OwKW3Y_fo_8rkWOL1d5o,27
293
+ agentkit_sdk_python-0.8.6.dist-info/RECORD,,