agentex-sdk 0.4.18__py3-none-any.whl → 0.4.19__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.
agentex/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "agentex"
4
- __version__ = "0.4.18" # x-release-please-version
4
+ __version__ = "0.4.19" # x-release-please-version
@@ -1,22 +1,21 @@
1
1
  import os
2
- import subprocess
3
2
  import tempfile
4
- from pathlib import Path
3
+ import subprocess
5
4
  from typing import Any
5
+ from pathlib import Path
6
6
 
7
7
  import yaml
8
- from pydantic import BaseModel, Field
8
+ from pydantic import Field, BaseModel
9
9
  from rich.console import Console
10
10
 
11
- from agentex.lib.cli.utils.exceptions import DeploymentError, HelmError
12
- from agentex.lib.sdk.config.environment_config import AgentEnvironmentConfig
13
- from agentex.lib.cli.utils.kubectl_utils import check_and_switch_cluster_context
14
- from agentex.lib.cli.utils.path_utils import calculate_docker_acp_module, PathResolutionError
11
+ from agentex.lib.utils.logging import make_logger
12
+ from agentex.lib.cli.utils.exceptions import HelmError, DeploymentError
13
+ from agentex.lib.cli.utils.path_utils import PathResolutionError, calculate_docker_acp_module
15
14
  from agentex.lib.environment_variables import EnvVarKeys
15
+ from agentex.lib.cli.utils.kubectl_utils import check_and_switch_cluster_context
16
16
  from agentex.lib.sdk.config.agent_config import AgentConfig
17
17
  from agentex.lib.sdk.config.agent_manifest import AgentManifest
18
-
19
- from agentex.lib.utils.logging import make_logger
18
+ from agentex.lib.sdk.config.environment_config import AgentEnvironmentConfig
20
19
 
21
20
  logger = make_logger(__name__)
22
21
  console = Console()
@@ -46,7 +45,7 @@ def check_helm_installed() -> bool:
46
45
  return False
47
46
 
48
47
 
49
- def add_helm_repo() -> None:
48
+ def add_helm_repo(helm_repository_name: str, helm_repository_url: str) -> None:
50
49
  """Add the agentex helm repository if not already added"""
51
50
  try:
52
51
  # Check if repo already exists
@@ -54,15 +53,15 @@ def add_helm_repo() -> None:
54
53
  ["helm", "repo", "list"], capture_output=True, text=True, check=True
55
54
  )
56
55
 
57
- if "scale-egp" not in result.stdout:
56
+ if helm_repository_name not in result.stdout:
58
57
  console.print("Adding agentex helm repository...")
59
58
  subprocess.run(
60
59
  [
61
60
  "helm",
62
61
  "repo",
63
62
  "add",
64
- "scale-egp",
65
- "https://scale-egp-helm-charts-us-west-2.s3.amazonaws.com/charts",
63
+ helm_repository_name,
64
+ helm_repository_url,
66
65
  ],
67
66
  check=True,
68
67
  )
@@ -265,7 +264,7 @@ def merge_deployment_configs(
265
264
  if not helm_overrides_command:
266
265
  add_acp_command_to_helm_values(helm_values, manifest, manifest_path)
267
266
 
268
- print("Deploying with the following helm values: ", helm_values)
267
+ console.print("Deploying with the following helm values: ", helm_values)
269
268
  return helm_values
270
269
 
271
270
 
@@ -318,8 +317,14 @@ def deploy_agent(
318
317
  else:
319
318
  console.print(f"[yellow]⚠[/yellow] No environments.yaml found, skipping environment-specific config")
320
319
 
320
+ if agent_env_config:
321
+ helm_repository_name = agent_env_config.helm_repository_name
322
+ helm_repository_url = agent_env_config.helm_repository_url
323
+ else:
324
+ helm_repository_name = "scale-egp"
325
+ helm_repository_url = "https://scale-egp-helm-charts-us-west-2.s3.amazonaws.com/charts"
321
326
  # Add helm repository/update
322
- add_helm_repo()
327
+ add_helm_repo(helm_repository_name, helm_repository_url)
323
328
 
324
329
  # Merge configurations
325
330
  helm_values = merge_deployment_configs(manifest, agent_env_config, deploy_overrides, manifest_path)
@@ -349,7 +354,7 @@ def deploy_agent(
349
354
  "helm",
350
355
  "upgrade",
351
356
  release_name,
352
- "scale-egp/agentex-agent",
357
+ f"{helm_repository_name}/agentex-agent",
353
358
  "--version",
354
359
  AGENTEX_AGENTS_HELM_CHART_VERSION,
355
360
  "-f",
@@ -371,7 +376,7 @@ def deploy_agent(
371
376
  "helm",
372
377
  "install",
373
378
  release_name,
374
- "scale-egp/agentex-agent",
379
+ f"{helm_repository_name}/agentex-agent",
375
380
  "--version",
376
381
  AGENTEX_AGENTS_HELM_CHART_VERSION,
377
382
  "-f",
@@ -39,6 +39,7 @@ class EnvVarKeys(str, Enum):
39
39
 
40
40
 
41
41
  class Environment(str, Enum):
42
+ LOCAL = "local"
42
43
  DEV = "development"
43
44
  STAGING = "staging"
44
45
  PROD = "production"
@@ -7,11 +7,11 @@ configurations that are separate from the main manifest.yaml file.
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
- from pathlib import Path
11
10
  from typing import Any, Dict, override
11
+ from pathlib import Path
12
12
 
13
13
  import yaml
14
- from pydantic import BaseModel, Field, field_validator
14
+ from pydantic import Field, BaseModel, field_validator
15
15
 
16
16
  from agentex.lib.utils.model_utils import BaseModel as UtilsBaseModel
17
17
 
@@ -73,6 +73,14 @@ class AgentEnvironmentConfig(BaseModel):
73
73
  ...,
74
74
  description="Authentication and authorization configuration"
75
75
  )
76
+ helm_repository_name: str = Field(
77
+ default="scale-egp",
78
+ description="Helm repository name for the environment"
79
+ )
80
+ helm_repository_url: str = Field(
81
+ default="https://scale-egp-helm-charts-us-west-2.s3.amazonaws.com/charts",
82
+ description="Helm repository url for the environment"
83
+ )
76
84
  helm_overrides: Dict[str, Any] = Field(
77
85
  default_factory=dict,
78
86
  description="Helm chart value overrides for environment-specific tuning"
@@ -1,5 +1,6 @@
1
1
  import asyncio
2
2
  import inspect
3
+ import uuid
3
4
  from datetime import datetime
4
5
  from collections.abc import AsyncGenerator, Awaitable, Callable
5
6
  from contextlib import asynccontextmanager
@@ -9,6 +10,7 @@ import uvicorn
9
10
  from fastapi import FastAPI, Request
10
11
  from fastapi.responses import StreamingResponse
11
12
  from pydantic import TypeAdapter, ValidationError
13
+ from starlette.middleware.base import BaseHTTPMiddleware
12
14
 
13
15
  # from agentex.lib.sdk.fastacp.types import BaseACPConfig
14
16
  from agentex.lib.environment_variables import EnvironmentVariables, refreshed_environment_variables
@@ -24,7 +26,7 @@ from agentex.lib.types.acp import (
24
26
  from agentex.lib.types.json_rpc import JSONRPCError, JSONRPCRequest, JSONRPCResponse
25
27
  from agentex.types.task_message_update import StreamTaskMessageFull, TaskMessageUpdate
26
28
  from agentex.types.task_message_content import TaskMessageContent
27
- from agentex.lib.utils.logging import make_logger
29
+ from agentex.lib.utils.logging import ctx_var_request_id, make_logger
28
30
  from agentex.lib.utils.model_utils import BaseModel
29
31
  from agentex.lib.utils.registration import register_agent
30
32
  from agentex.lib.sdk.fastacp.base.constants import (
@@ -38,6 +40,20 @@ logger = make_logger(__name__)
38
40
  task_message_update_adapter = TypeAdapter(TaskMessageUpdate)
39
41
 
40
42
 
43
+ class RequestIDMiddleware(BaseHTTPMiddleware):
44
+ """Middleware to extract or generate request IDs and add them to logs and response headers"""
45
+
46
+ async def dispatch(self, request: Request, call_next):
47
+ # Extract request ID from header or generate a new one if there isn't one
48
+ request_id = request.headers.get("x-request-id") or uuid.uuid4().hex
49
+ logger.info(f"Request ID: {request_id}")
50
+ # Store request ID in request state for access in handlers
51
+ ctx_var_request_id.set(request_id)
52
+ # Process request
53
+ response = await call_next(request)
54
+ return response
55
+
56
+
41
57
  class BaseACPServer(FastAPI):
42
58
  """
43
59
  AsyncAgentACP provides RPC-style hooks for agent events and commands asynchronously.
@@ -56,6 +72,8 @@ class BaseACPServer(FastAPI):
56
72
  self.post("/api")(self._handle_jsonrpc)
57
73
 
58
74
  # Method handlers
75
+ # this just adds a request ID to the request and response headers
76
+ self.add_middleware(RequestIDMiddleware)
59
77
  self._handlers: dict[RPCMethod, Callable] = {}
60
78
 
61
79
  @classmethod
@@ -1,31 +1,79 @@
1
1
  import logging
2
-
2
+ import contextvars
3
3
  from rich.console import Console
4
4
  from rich.logging import RichHandler
5
+ import json_log_formatter
6
+ import os
7
+ import ddtrace
8
+ from ddtrace import tracer
9
+
10
+ _is_datadog_configured = bool(os.environ.get("DD_AGENT_HOST"))
11
+
12
+ ctx_var_request_id = contextvars.ContextVar[str]("request_id")
13
+
14
+
15
+ class CustomJSONFormatter(json_log_formatter.JSONFormatter):
16
+ def json_record(self, message: str, extra: dict, record: logging.LogRecord) -> dict:
17
+ extra = super().json_record(message, extra, record)
18
+ extra["level"] = record.levelname
19
+ extra["name"] = record.name
20
+ extra["lineno"] = record.lineno
21
+ extra["pathname"] = record.pathname
22
+ extra["request_id"] = ctx_var_request_id.get(None)
23
+ if _is_datadog_configured:
24
+ extra["dd.trace_id"] = tracer.get_log_correlation_context().get("dd.trace_id", None) or getattr(
25
+ record, "dd.trace_id", 0
26
+ )
27
+ extra["dd.span_id"] = tracer.get_log_correlation_context().get("dd.span_id", None) or getattr(
28
+ record, "dd.span_id", 0
29
+ )
30
+ # add the env, service, and version configured for the tracer
31
+ # If tracing is not set up, then this should pull values from DD_ENV, DD_SERVICE, and DD_VERSION.
32
+ service_override = ddtrace.config.service or os.getenv("DD_SERVICE")
33
+ if service_override:
34
+ extra["dd.service"] = service_override
35
+
36
+ env_override = ddtrace.config.env or os.getenv("DD_ENV")
37
+ if env_override:
38
+ extra["dd.env"] = env_override
5
39
 
40
+ version_override = ddtrace.config.version or os.getenv("DD_VERSION")
41
+ if version_override:
42
+ extra["dd.version"] = version_override
6
43
 
7
- def make_logger(name: str):
44
+ return extra
45
+
46
+ def make_logger(name: str) -> logging.Logger:
8
47
  """
9
48
  Creates a logger object with a RichHandler to print colored text.
10
49
  :param name: The name of the module to create the logger for.
11
50
  :return: A logger object.
12
51
  """
13
52
  # Create a console object to print colored text
14
- console = Console()
15
-
16
- # Create a logger object with the name of the current module
17
53
  logger = logging.getLogger(name)
18
-
19
- # Set the global log level to INFO
20
54
  logger.setLevel(logging.INFO)
21
55
 
22
- # Add the RichHandler to the logger to print colored text
23
- handler = RichHandler(
24
- console=console,
25
- show_level=False,
26
- show_path=False,
27
- show_time=False,
28
- )
29
- logger.addHandler(handler)
56
+ environment = os.getenv("ENVIRONMENT")
57
+ if environment == "local":
58
+ console = Console()
59
+ # Add the RichHandler to the logger to print colored text
60
+ handler = RichHandler(
61
+ console=console,
62
+ show_level=False,
63
+ show_path=False,
64
+ show_time=False,
65
+ )
66
+ logger.addHandler(handler)
67
+ return logger
68
+
69
+ stream_handler = logging.StreamHandler()
70
+ if _is_datadog_configured:
71
+ stream_handler.setFormatter(CustomJSONFormatter())
72
+ else:
73
+ stream_handler.setFormatter(
74
+ logging.Formatter("%(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(lineno)d] - %(message)s")
75
+ )
30
76
 
77
+ logger.addHandler(stream_handler)
78
+ # Create a logger object with the name of the current module
31
79
  return logger
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: agentex-sdk
3
- Version: 0.4.18
3
+ Version: 0.4.19
4
4
  Summary: The official Python library for the agentex API
5
5
  Project-URL: Homepage, https://github.com/scaleapi/agentex-python
6
6
  Project-URL: Repository, https://github.com/scaleapi/agentex-python
@@ -22,11 +22,14 @@ Requires-Python: <4,>=3.12
22
22
  Requires-Dist: aiohttp<4,>=3.10.10
23
23
  Requires-Dist: anyio<5,>=3.5.0
24
24
  Requires-Dist: cloudpickle>=3.1.1
25
+ Requires-Dist: datadog>=0.52.1
26
+ Requires-Dist: ddtrace>=3.13.0
25
27
  Requires-Dist: distro<2,>=1.7.0
26
28
  Requires-Dist: fastapi<0.116,>=0.115.0
27
29
  Requires-Dist: httpx<0.28,>=0.27.2
28
30
  Requires-Dist: ipykernel>=6.29.5
29
31
  Requires-Dist: jinja2<4,>=3.1.3
32
+ Requires-Dist: json-log-formatter>=1.1.1
30
33
  Requires-Dist: jsonref<2,>=1.1.0
31
34
  Requires-Dist: jsonschema<5,>=4.23.0
32
35
  Requires-Dist: kubernetes<29.0.0,>=25.0.0
@@ -11,7 +11,7 @@ agentex/_resource.py,sha256=S1t7wmR5WUvoDIhZjo_x-E7uoTJBynJ3d8tPJMQYdjw,1106
11
11
  agentex/_response.py,sha256=Tb9zazsnemO2rTxWtBjAD5WBqlhli5ZaXGbiKgdu5DE,28794
12
12
  agentex/_streaming.py,sha256=FNGJExRCF-vTRUZHFKUfoAWFhDGOB3XbioVCF37Jr7E,10104
13
13
  agentex/_types.py,sha256=lO491FSd7vM_uBp7-TvItbauEAH8SsEPYcyNO_5lKGM,7297
14
- agentex/_version.py,sha256=8azpxMAVbxSJfOSmVjFkPPS49oSMFsAqfcYO7jXRKZg,159
14
+ agentex/_version.py,sha256=6BcFOkutui_Zk8paug6PcP6bW9nEWC3lUJBtRbIwUOM,159
15
15
  agentex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  agentex/_utils/__init__.py,sha256=7fch0GT9zpNnErbciSpUNa-SjTxxjY6kxHxKMOM4AGs,2305
17
17
  agentex/_utils/_compat.py,sha256=D8gtAvjJQrDWt9upS0XaG9Rr5l1QhiAx_I_1utT_tt0,1195
@@ -27,7 +27,7 @@ agentex/_utils/_typing.py,sha256=N_5PPuFNsaygbtA_npZd98SVN1LQQvFTKL6bkWPBZGU,478
27
27
  agentex/_utils/_utils.py,sha256=D2QE7mVPNEJzaB50u8rvDQAUDS5jx7JoeFD7zdj-TeI,12231
28
28
  agentex/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
29
29
  agentex/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- agentex/lib/environment_variables.py,sha256=8iMiBxDCFnG63IJ0VkFlOArTuGdwy2ADTO4fThRzUhU,3369
30
+ agentex/lib/environment_variables.py,sha256=3vnoPoG3UyVAnPV8bwa93CFkapdr0DuND85oMAJzkZE,3389
31
31
  agentex/lib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  agentex/lib/adk/__init__.py,sha256=-PpVfEvYr_HD7TnxUWU8RCW2OnxfwpPxTW97dKTnqvI,1082
33
33
  agentex/lib/adk/_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -63,7 +63,7 @@ agentex/lib/cli/debug/debug_handlers.py,sha256=i2Og0v5MPKIxG0uMZIp4NpmCpAro23t7P
63
63
  agentex/lib/cli/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  agentex/lib/cli/handlers/agent_handlers.py,sha256=iVZ-4TSQJuq7XpPBYjYIN76M33XwxDjQTuNwTzzynec,5573
65
65
  agentex/lib/cli/handlers/cleanup_handlers.py,sha256=V1V0zeErOUGTgCQqjyUl6CWtzGjFW878uzFaLOQJEyQ,7073
66
- agentex/lib/cli/handlers/deploy_handlers.py,sha256=rGZxGfcghc-FNAy7xItoYNQyo3TSSmI5graahPz4dSg,16038
66
+ agentex/lib/cli/handlers/deploy_handlers.py,sha256=VFEUXaA6IZRfrXBiUiHr-2RLePxTixE5a3bx5U6M2As,16447
67
67
  agentex/lib/cli/handlers/run_handlers.py,sha256=TMelCWTwFxUJJJ7At3zG-cXTn2mBmK1ZJuJ63Ero6xs,15396
68
68
  agentex/lib/cli/handlers/secret_handlers.py,sha256=VfAdAQovW9tG36Xgk_gGIGwTyFMxR3P6xc7fmAviNA8,24719
69
69
  agentex/lib/cli/templates/default/.dockerignore.j2,sha256=hweGFxw5eDZYsb5EnRHpv27o9M1HF2PEWOxqsfBBcAE,320
@@ -178,13 +178,13 @@ agentex/lib/sdk/config/agent_config.py,sha256=WhLMd15po3loE67LNPjCGSG5xhvv4KH6xV
178
178
  agentex/lib/sdk/config/agent_manifest.py,sha256=GXEVZ9OEHPA4ESSNG4miCFjxiHhxmAWbe6nYwbiC3JM,8626
179
179
  agentex/lib/sdk/config/build_config.py,sha256=KI7SfVxGrv0rxJCIBuMT5M4oJ2o9n46LRH0t6fIki3g,1049
180
180
  agentex/lib/sdk/config/deployment_config.py,sha256=lbOx2g0Q2gbo9CqWFejzmiYqh3GLndpB7_gX6R92t0g,3992
181
- agentex/lib/sdk/config/environment_config.py,sha256=mZLy0MntogcTxyfSAhuWv4lJW3U1w3vSxm8opHW4Dqg,6462
181
+ agentex/lib/sdk/config/environment_config.py,sha256=RrQPMHNAKOuqGpXPDKoQNi50lXssLOncIYLy4iwbrxs,6790
182
182
  agentex/lib/sdk/config/local_development_config.py,sha256=b1AZsOVo1RoHKbk8Nm5nC8jcjJSOxKkKBv9gLhFLX8s,1697
183
183
  agentex/lib/sdk/config/project_config.py,sha256=CGH_r9KbnSFMj2CnBkZnfg41L2o0TeVNz6MwBDKPT_U,3642
184
184
  agentex/lib/sdk/config/validation.py,sha256=QGAlAzlVJiWRlIksqxNS-JSwkk8Z4gXMSFUJc4qPrIQ,8989
185
185
  agentex/lib/sdk/fastacp/__init__.py,sha256=UvAdexdnfb4z0F4a2sfXROFyh9EjH89kf3AxHPybzCM,75
186
186
  agentex/lib/sdk/fastacp/fastacp.py,sha256=RM89_4_G2ZtIybPeMg641cw4ixFn4rZHy260FGSAa6o,3770
187
- agentex/lib/sdk/fastacp/base/base_acp_server.py,sha256=mVi8uSOZtf70rogS7xDJwHU1hF_5Fv7S8383rUN0kK8,15604
187
+ agentex/lib/sdk/fastacp/base/base_acp_server.py,sha256=QLSdJVVW3E2K6qdHI6ZWQpAoOsfXQ_wk5Q6cFA2N5G4,16435
188
188
  agentex/lib/sdk/fastacp/base/constants.py,sha256=W4vpJ-5NML7239JyqzUWdu2IypIl8Cey8CS41KR2Vk0,519
189
189
  agentex/lib/sdk/fastacp/impl/agentic_base_acp.py,sha256=LWLAlHrs-2Lc2UICBAEFL8c3JwTA6oxPnzUzW0qQWSA,2694
190
190
  agentex/lib/sdk/fastacp/impl/sync_acp.py,sha256=0y_cYD-0UJOiVJv-BBMOt6PvElDf5zmc1uvbr81VcSI,3897
@@ -221,7 +221,7 @@ agentex/lib/utils/debug.py,sha256=1o2NjG8bZXTi63KTGjL3EmU_zMGapco7v5xoDuZRjU8,21
221
221
  agentex/lib/utils/io.py,sha256=17p7dfUZ1YxTAc-n_g7eFOjzInoKi7Uedyad967EKYQ,754
222
222
  agentex/lib/utils/iterables.py,sha256=cD49hj98mtY0QPaS0ZA2kguNeGzRU4UfbZfwyASWdzY,319
223
223
  agentex/lib/utils/json_schema.py,sha256=nSHbi6LC-oWXHP6sMLCBychA7B0R2DItRIJNCCEzRsY,741
224
- agentex/lib/utils/logging.py,sha256=RychRZ4I5JlhBRtkP6KGMZBEcRVNN8mpBjv03aV2S0E,798
224
+ agentex/lib/utils/logging.py,sha256=osfi7UUiZ30As6z3vgn1djdGLlzTO3SBYiX6212TKAg,2911
225
225
  agentex/lib/utils/mcp.py,sha256=lYQPwKAOH6Gf2I_TeovhEG9YUijUPcN0rENNdT0Vk6c,505
226
226
  agentex/lib/utils/model_utils.py,sha256=bkcB1I0DMRAtFQpznsXgFGKZGrT7NGJ4tIwFM4dtUXQ,2547
227
227
  agentex/lib/utils/parsing.py,sha256=2T-B4nJSupo2RLf9AkpV6VQHqDnF97ZBgO6zvGCauCo,369
@@ -304,8 +304,8 @@ agentex/types/messages/batch_update_params.py,sha256=Ug5CThbD49a8j4qucg04OdmVrp_
304
304
  agentex/types/messages/batch_update_response.py,sha256=TbSBe6SuPzjXXWSj-nRjT1JHGBooTshHQQDa1AixQA8,278
305
305
  agentex/types/shared/__init__.py,sha256=IKs-Qn5Yja0kFh1G1kDqYZo43qrOu1hSoxlPdN-85dI,149
306
306
  agentex/types/shared/delete_response.py,sha256=8qH3zvQXaOHYQSHyXi7UQxdR4miTzR7V9K4zXVsiUyk,215
307
- agentex_sdk-0.4.18.dist-info/METADATA,sha256=yYmjMxPlZKhAlm1spqPQnhGhUycSwqSgHazP7ou4KPM,15095
308
- agentex_sdk-0.4.18.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
309
- agentex_sdk-0.4.18.dist-info/entry_points.txt,sha256=V7vJuMZdF0UlvgX6KiBN7XUvq_cxF5kplcYvc1QlFaQ,62
310
- agentex_sdk-0.4.18.dist-info/licenses/LICENSE,sha256=Q1AOx2FtRcMlyMgQJ9eVN2WKPq2mQ33lnB4tvWxabLA,11337
311
- agentex_sdk-0.4.18.dist-info/RECORD,,
307
+ agentex_sdk-0.4.19.dist-info/METADATA,sha256=wAVGZ27kfYe2_6mzg6KYLTquxKguzFAL-y_C8ZI9azg,15198
308
+ agentex_sdk-0.4.19.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
309
+ agentex_sdk-0.4.19.dist-info/entry_points.txt,sha256=V7vJuMZdF0UlvgX6KiBN7XUvq_cxF5kplcYvc1QlFaQ,62
310
+ agentex_sdk-0.4.19.dist-info/licenses/LICENSE,sha256=Q1AOx2FtRcMlyMgQJ9eVN2WKPq2mQ33lnB4tvWxabLA,11337
311
+ agentex_sdk-0.4.19.dist-info/RECORD,,