agentex-sdk 0.4.12__py3-none-any.whl → 0.4.13__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/_constants.py +3 -3
- agentex/_version.py +1 -1
- agentex/lib/adk/_modules/acp.py +28 -2
- agentex/lib/core/services/adk/acp/acp.py +62 -12
- agentex/lib/core/temporal/activities/adk/acp/acp_activities.py +14 -0
- agentex/lib/core/temporal/workers/worker.py +23 -2
- agentex/lib/sdk/fastacp/base/base_acp_server.py +22 -2
- agentex/lib/sdk/fastacp/base/constants.py +24 -0
- agentex/lib/types/acp.py +20 -0
- agentex/resources/agents.py +3 -0
- agentex/resources/tasks.py +4 -4
- agentex/types/agent.py +7 -1
- agentex/types/task.py +2 -0
- {agentex_sdk-0.4.12.dist-info → agentex_sdk-0.4.13.dist-info}/METADATA +1 -1
- {agentex_sdk-0.4.12.dist-info → agentex_sdk-0.4.13.dist-info}/RECORD +18 -17
- {agentex_sdk-0.4.12.dist-info → agentex_sdk-0.4.13.dist-info}/WHEEL +0 -0
- {agentex_sdk-0.4.12.dist-info → agentex_sdk-0.4.13.dist-info}/entry_points.txt +0 -0
- {agentex_sdk-0.4.12.dist-info → agentex_sdk-0.4.13.dist-info}/licenses/LICENSE +0 -0
agentex/_constants.py
CHANGED
@@ -6,9 +6,9 @@ RAW_RESPONSE_HEADER = "X-Stainless-Raw-Response"
|
|
6
6
|
OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to"
|
7
7
|
|
8
8
|
# default timeout is 1 minute
|
9
|
-
DEFAULT_TIMEOUT = httpx.Timeout(timeout=
|
10
|
-
DEFAULT_MAX_RETRIES =
|
11
|
-
DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=
|
9
|
+
DEFAULT_TIMEOUT = httpx.Timeout(timeout=300, connect=5.0)
|
10
|
+
DEFAULT_MAX_RETRIES = 0
|
11
|
+
DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=1000, max_keepalive_connections=1000)
|
12
12
|
|
13
13
|
INITIAL_RETRY_DELAY = 0.5
|
14
14
|
MAX_RETRY_DELAY = 8.0
|
agentex/_version.py
CHANGED
agentex/lib/adk/_modules/acp.py
CHANGED
@@ -59,6 +59,7 @@ class ACPModule:
|
|
59
59
|
start_to_close_timeout: timedelta = timedelta(seconds=5),
|
60
60
|
heartbeat_timeout: timedelta = timedelta(seconds=5),
|
61
61
|
retry_policy: RetryPolicy = DEFAULT_RETRY_POLICY,
|
62
|
+
request: dict[str, Any] | None = None,
|
62
63
|
) -> Task:
|
63
64
|
"""
|
64
65
|
Create a new task.
|
@@ -71,6 +72,7 @@ class ACPModule:
|
|
71
72
|
start_to_close_timeout: The start to close timeout for the task.
|
72
73
|
heartbeat_timeout: The heartbeat timeout for the task.
|
73
74
|
retry_policy: The retry policy for the task.
|
75
|
+
request: Additional request context including headers to forward to the agent.
|
74
76
|
|
75
77
|
Returns:
|
76
78
|
The task entry.
|
@@ -85,6 +87,7 @@ class ACPModule:
|
|
85
87
|
params=params,
|
86
88
|
trace_id=trace_id,
|
87
89
|
parent_span_id=parent_span_id,
|
90
|
+
request=request,
|
88
91
|
),
|
89
92
|
response_type=Task,
|
90
93
|
start_to_close_timeout=start_to_close_timeout,
|
@@ -99,6 +102,7 @@ class ACPModule:
|
|
99
102
|
params=params,
|
100
103
|
trace_id=trace_id,
|
101
104
|
parent_span_id=parent_span_id,
|
105
|
+
request=request,
|
102
106
|
)
|
103
107
|
|
104
108
|
async def send_event(
|
@@ -112,15 +116,22 @@ class ACPModule:
|
|
112
116
|
start_to_close_timeout: timedelta = timedelta(seconds=5),
|
113
117
|
heartbeat_timeout: timedelta = timedelta(seconds=5),
|
114
118
|
retry_policy: RetryPolicy = DEFAULT_RETRY_POLICY,
|
119
|
+
request: dict[str, Any] | None = None,
|
115
120
|
) -> Event:
|
116
121
|
"""
|
117
122
|
Send an event to a task.
|
118
123
|
|
119
124
|
Args:
|
120
125
|
task_id: The ID of the task to send the event to.
|
121
|
-
|
126
|
+
content: The content to send to the event.
|
122
127
|
agent_id: The ID of the agent to send the event to.
|
123
128
|
agent_name: The name of the agent to send the event to.
|
129
|
+
trace_id: The trace ID for the event.
|
130
|
+
parent_span_id: The parent span ID for the event.
|
131
|
+
start_to_close_timeout: The start to close timeout for the event.
|
132
|
+
heartbeat_timeout: The heartbeat timeout for the event.
|
133
|
+
retry_policy: The retry policy for the event.
|
134
|
+
request: Additional request context including headers to forward to the agent.
|
124
135
|
|
125
136
|
Returns:
|
126
137
|
The event entry.
|
@@ -135,6 +146,7 @@ class ACPModule:
|
|
135
146
|
content=content,
|
136
147
|
trace_id=trace_id,
|
137
148
|
parent_span_id=parent_span_id,
|
149
|
+
request=request,
|
138
150
|
),
|
139
151
|
response_type=None,
|
140
152
|
start_to_close_timeout=start_to_close_timeout,
|
@@ -149,6 +161,7 @@ class ACPModule:
|
|
149
161
|
content=content,
|
150
162
|
trace_id=trace_id,
|
151
163
|
parent_span_id=parent_span_id,
|
164
|
+
request=request,
|
152
165
|
)
|
153
166
|
|
154
167
|
async def send_message(
|
@@ -162,15 +175,22 @@ class ACPModule:
|
|
162
175
|
start_to_close_timeout: timedelta = timedelta(seconds=5),
|
163
176
|
heartbeat_timeout: timedelta = timedelta(seconds=5),
|
164
177
|
retry_policy: RetryPolicy = DEFAULT_RETRY_POLICY,
|
178
|
+
request: dict[str, Any] | None = None,
|
165
179
|
) -> List[TaskMessage]:
|
166
180
|
"""
|
167
181
|
Send a message to a task.
|
168
182
|
|
169
183
|
Args:
|
170
|
-
task_id: The ID of the task to send the message to.
|
171
184
|
content: The task message content to send to the task.
|
185
|
+
task_id: The ID of the task to send the message to.
|
172
186
|
agent_id: The ID of the agent to send the message to.
|
173
187
|
agent_name: The name of the agent to send the message to.
|
188
|
+
trace_id: The trace ID for the message.
|
189
|
+
parent_span_id: The parent span ID for the message.
|
190
|
+
start_to_close_timeout: The start to close timeout for the message.
|
191
|
+
heartbeat_timeout: The heartbeat timeout for the message.
|
192
|
+
retry_policy: The retry policy for the message.
|
193
|
+
request: Additional request context including headers to forward to the agent.
|
174
194
|
|
175
195
|
Returns:
|
176
196
|
The message entry.
|
@@ -185,6 +205,7 @@ class ACPModule:
|
|
185
205
|
content=content,
|
186
206
|
trace_id=trace_id,
|
187
207
|
parent_span_id=parent_span_id,
|
208
|
+
request=request,
|
188
209
|
),
|
189
210
|
response_type=TaskMessage,
|
190
211
|
start_to_close_timeout=start_to_close_timeout,
|
@@ -199,6 +220,7 @@ class ACPModule:
|
|
199
220
|
content=content,
|
200
221
|
trace_id=trace_id,
|
201
222
|
parent_span_id=parent_span_id,
|
223
|
+
request=request,
|
202
224
|
)
|
203
225
|
|
204
226
|
async def cancel_task(
|
@@ -212,6 +234,7 @@ class ACPModule:
|
|
212
234
|
start_to_close_timeout: timedelta = timedelta(seconds=5),
|
213
235
|
heartbeat_timeout: timedelta = timedelta(seconds=5),
|
214
236
|
retry_policy: RetryPolicy = DEFAULT_RETRY_POLICY,
|
237
|
+
request: dict[str, Any] | None = None,
|
215
238
|
) -> Task:
|
216
239
|
"""
|
217
240
|
Cancel a task by sending cancel request to the agent that owns the task.
|
@@ -226,6 +249,7 @@ class ACPModule:
|
|
226
249
|
start_to_close_timeout: The start to close timeout for the task.
|
227
250
|
heartbeat_timeout: The heartbeat timeout for the task.
|
228
251
|
retry_policy: The retry policy for the task.
|
252
|
+
request: Additional request context including headers to forward to the agent.
|
229
253
|
|
230
254
|
Returns:
|
231
255
|
The task entry.
|
@@ -244,6 +268,7 @@ class ACPModule:
|
|
244
268
|
agent_name=agent_name,
|
245
269
|
trace_id=trace_id,
|
246
270
|
parent_span_id=parent_span_id,
|
271
|
+
request=request,
|
247
272
|
),
|
248
273
|
response_type=None,
|
249
274
|
start_to_close_timeout=start_to_close_timeout,
|
@@ -258,4 +283,5 @@ class ACPModule:
|
|
258
283
|
agent_name=agent_name,
|
259
284
|
trace_id=trace_id,
|
260
285
|
parent_span_id=parent_span_id,
|
286
|
+
request=request,
|
261
287
|
)
|
@@ -9,6 +9,10 @@ from agentex.types.task import Task
|
|
9
9
|
from agentex.types.task_message import TaskMessage
|
10
10
|
from agentex.types.task_message_content import TaskMessageContent
|
11
11
|
from agentex.types.task_message_content_param import TaskMessageContentParam
|
12
|
+
from agentex.types.agent_rpc_params import (
|
13
|
+
ParamsCancelTaskRequest as RpcParamsCancelTaskRequest,
|
14
|
+
ParamsSendEventRequest as RpcParamsSendEventRequest,
|
15
|
+
)
|
12
16
|
|
13
17
|
logger = make_logger(__name__)
|
14
18
|
|
@@ -30,6 +34,7 @@ class ACPService:
|
|
30
34
|
params: dict[str, Any] | None = None,
|
31
35
|
trace_id: str | None = None,
|
32
36
|
parent_span_id: str | None = None,
|
37
|
+
request: dict[str, Any] | None = None,
|
33
38
|
) -> Task:
|
34
39
|
trace = self._tracer.trace(trace_id=trace_id)
|
35
40
|
async with trace.span(
|
@@ -43,6 +48,10 @@ class ACPService:
|
|
43
48
|
},
|
44
49
|
) as span:
|
45
50
|
heartbeat_if_in_workflow("task create")
|
51
|
+
|
52
|
+
# Extract headers from request; pass-through to agent
|
53
|
+
extra_headers = request.get("headers") if request else None
|
54
|
+
|
46
55
|
if agent_name:
|
47
56
|
json_rpc_response = await self._agentex_client.agents.rpc_by_name(
|
48
57
|
agent_name=agent_name,
|
@@ -51,6 +60,7 @@ class ACPService:
|
|
51
60
|
"name": name,
|
52
61
|
"params": params,
|
53
62
|
},
|
63
|
+
extra_headers=extra_headers,
|
54
64
|
)
|
55
65
|
elif agent_id:
|
56
66
|
json_rpc_response = await self._agentex_client.agents.rpc(
|
@@ -60,6 +70,7 @@ class ACPService:
|
|
60
70
|
"name": name,
|
61
71
|
"params": params,
|
62
72
|
},
|
73
|
+
extra_headers=extra_headers,
|
63
74
|
)
|
64
75
|
else:
|
65
76
|
raise ValueError("Either agent_name or agent_id must be provided")
|
@@ -78,6 +89,7 @@ class ACPService:
|
|
78
89
|
task_name: str | None = None,
|
79
90
|
trace_id: str | None = None,
|
80
91
|
parent_span_id: str | None = None,
|
92
|
+
request: dict[str, Any] | None = None,
|
81
93
|
) -> List[TaskMessage]:
|
82
94
|
trace = self._tracer.trace(trace_id=trace_id)
|
83
95
|
async with trace.span(
|
@@ -92,6 +104,10 @@ class ACPService:
|
|
92
104
|
},
|
93
105
|
) as span:
|
94
106
|
heartbeat_if_in_workflow("message send")
|
107
|
+
|
108
|
+
# Extract headers from request; pass-through to agent
|
109
|
+
extra_headers = request.get("headers") if request else None
|
110
|
+
|
95
111
|
if agent_name:
|
96
112
|
json_rpc_response = await self._agentex_client.agents.rpc_by_name(
|
97
113
|
agent_name=agent_name,
|
@@ -101,6 +117,7 @@ class ACPService:
|
|
101
117
|
"content": cast(TaskMessageContentParam, content.model_dump()),
|
102
118
|
"stream": False,
|
103
119
|
},
|
120
|
+
extra_headers=extra_headers,
|
104
121
|
)
|
105
122
|
elif agent_id:
|
106
123
|
json_rpc_response = await self._agentex_client.agents.rpc(
|
@@ -111,12 +128,13 @@ class ACPService:
|
|
111
128
|
"content": cast(TaskMessageContentParam, content.model_dump()),
|
112
129
|
"stream": False,
|
113
130
|
},
|
131
|
+
extra_headers=extra_headers,
|
114
132
|
)
|
115
133
|
else:
|
116
134
|
raise ValueError("Either agent_name or agent_id must be provided")
|
117
135
|
|
118
136
|
task_messages: List[TaskMessage] = []
|
119
|
-
logger.info(
|
137
|
+
logger.info("json_rpc_response: %s", json_rpc_response)
|
120
138
|
if isinstance(json_rpc_response.result, list):
|
121
139
|
for message in json_rpc_response.result:
|
122
140
|
task_message = TaskMessage.model_validate(message)
|
@@ -137,6 +155,7 @@ class ACPService:
|
|
137
155
|
task_name: str | None = None,
|
138
156
|
trace_id: str | None = None,
|
139
157
|
parent_span_id: str | None = None,
|
158
|
+
request: dict[str, Any] | None = None,
|
140
159
|
) -> Event:
|
141
160
|
trace = self._tracer.trace(trace_id=trace_id)
|
142
161
|
async with trace.span(
|
@@ -146,27 +165,33 @@ class ACPService:
|
|
146
165
|
"agent_id": agent_id,
|
147
166
|
"agent_name": agent_name,
|
148
167
|
"task_id": task_id,
|
168
|
+
"task_name": task_name,
|
149
169
|
"content": content,
|
150
170
|
},
|
151
171
|
) as span:
|
152
172
|
heartbeat_if_in_workflow("event send")
|
173
|
+
|
174
|
+
# Extract headers from request; pass-through to agent
|
175
|
+
extra_headers = request.get("headers") if request else None
|
176
|
+
|
177
|
+
rpc_event_params: RpcParamsSendEventRequest = {
|
178
|
+
"task_id": task_id,
|
179
|
+
"task_name": task_name,
|
180
|
+
"content": cast(TaskMessageContentParam, content.model_dump()),
|
181
|
+
}
|
153
182
|
if agent_name:
|
154
183
|
json_rpc_response = await self._agentex_client.agents.rpc_by_name(
|
155
184
|
agent_name=agent_name,
|
156
185
|
method="event/send",
|
157
|
-
params=
|
158
|
-
|
159
|
-
"content": cast(TaskMessageContentParam, content.model_dump()),
|
160
|
-
},
|
186
|
+
params=rpc_event_params,
|
187
|
+
extra_headers=extra_headers,
|
161
188
|
)
|
162
189
|
elif agent_id:
|
163
190
|
json_rpc_response = await self._agentex_client.agents.rpc(
|
164
191
|
agent_id=agent_id,
|
165
192
|
method="event/send",
|
166
|
-
params=
|
167
|
-
|
168
|
-
"content": cast(TaskMessageContentParam, content.model_dump()),
|
169
|
-
},
|
193
|
+
params=rpc_event_params,
|
194
|
+
extra_headers=extra_headers,
|
170
195
|
)
|
171
196
|
else:
|
172
197
|
raise ValueError("Either agent_name or agent_id must be provided")
|
@@ -184,7 +209,27 @@ class ACPService:
|
|
184
209
|
agent_name: str | None = None,
|
185
210
|
trace_id: str | None = None,
|
186
211
|
parent_span_id: str | None = None,
|
187
|
-
|
212
|
+
request: dict[str, Any] | None = None,
|
213
|
+
) -> Task:
|
214
|
+
"""
|
215
|
+
Cancel a task by sending cancel request to the agent that owns the task.
|
216
|
+
|
217
|
+
Args:
|
218
|
+
task_id: ID of the task to cancel (passed to agent in params)
|
219
|
+
task_name: Name of the task to cancel (passed to agent in params)
|
220
|
+
agent_id: ID of the agent that owns the task
|
221
|
+
agent_name: Name of the agent that owns the task
|
222
|
+
trace_id: Trace ID for tracing
|
223
|
+
parent_span_id: Parent span ID for tracing
|
224
|
+
request: Additional request context including headers to forward to the agent
|
225
|
+
|
226
|
+
Returns:
|
227
|
+
Task entry representing the cancelled task
|
228
|
+
|
229
|
+
Raises:
|
230
|
+
ValueError: If neither agent_name nor agent_id is provided,
|
231
|
+
or if neither task_name nor task_id is provided
|
232
|
+
"""
|
188
233
|
# Require agent identification
|
189
234
|
if not agent_name and not agent_id:
|
190
235
|
raise ValueError("Either agent_name or agent_id must be provided to identify the agent that owns the task")
|
@@ -192,7 +237,6 @@ class ACPService:
|
|
192
237
|
# Require task identification
|
193
238
|
if not task_name and not task_id:
|
194
239
|
raise ValueError("Either task_name or task_id must be provided to identify the task to cancel")
|
195
|
-
|
196
240
|
trace = self._tracer.trace(trace_id=trace_id)
|
197
241
|
async with trace.span(
|
198
242
|
parent_id=parent_span_id,
|
@@ -206,8 +250,11 @@ class ACPService:
|
|
206
250
|
) as span:
|
207
251
|
heartbeat_if_in_workflow("task cancel")
|
208
252
|
|
253
|
+
# Extract headers from request; pass-through to agent
|
254
|
+
extra_headers = request.get("headers") if request else None
|
255
|
+
|
209
256
|
# Build params for the agent (task identification)
|
210
|
-
params = {}
|
257
|
+
params: RpcParamsCancelTaskRequest = {}
|
211
258
|
if task_id:
|
212
259
|
params["task_id"] = task_id
|
213
260
|
if task_name:
|
@@ -219,12 +266,15 @@ class ACPService:
|
|
219
266
|
agent_name=agent_name,
|
220
267
|
method="task/cancel",
|
221
268
|
params=params,
|
269
|
+
extra_headers=extra_headers,
|
222
270
|
)
|
223
271
|
else: # agent_id is provided (validated above)
|
272
|
+
assert agent_id is not None
|
224
273
|
json_rpc_response = await self._agentex_client.agents.rpc(
|
225
274
|
agent_id=agent_id,
|
226
275
|
method="task/cancel",
|
227
276
|
params=params,
|
277
|
+
extra_headers=extra_headers,
|
228
278
|
)
|
229
279
|
|
230
280
|
task_entry = Task.model_validate(json_rpc_response.result)
|
@@ -26,6 +26,7 @@ class TaskCreateParams(BaseModelWithTraceParams):
|
|
26
26
|
agent_id: str | None = None
|
27
27
|
agent_name: str | None = None
|
28
28
|
params: dict[str, Any] | None = None
|
29
|
+
request: dict[str, Any] | None = None
|
29
30
|
|
30
31
|
|
31
32
|
class MessageSendParams(BaseModelWithTraceParams):
|
@@ -33,6 +34,7 @@ class MessageSendParams(BaseModelWithTraceParams):
|
|
33
34
|
agent_name: str | None = None
|
34
35
|
task_id: str | None = None
|
35
36
|
content: TaskMessageContent
|
37
|
+
request: dict[str, Any] | None = None
|
36
38
|
|
37
39
|
|
38
40
|
class EventSendParams(BaseModelWithTraceParams):
|
@@ -40,6 +42,7 @@ class EventSendParams(BaseModelWithTraceParams):
|
|
40
42
|
agent_name: str | None = None
|
41
43
|
task_id: str | None = None
|
42
44
|
content: TaskMessageContent
|
45
|
+
request: dict[str, Any] | None = None
|
43
46
|
|
44
47
|
|
45
48
|
class TaskCancelParams(BaseModelWithTraceParams):
|
@@ -47,6 +50,7 @@ class TaskCancelParams(BaseModelWithTraceParams):
|
|
47
50
|
task_name: str | None = None
|
48
51
|
agent_id: str | None = None
|
49
52
|
agent_name: str | None = None
|
53
|
+
request: dict[str, Any] | None = None
|
50
54
|
|
51
55
|
|
52
56
|
class ACPActivities:
|
@@ -60,6 +64,9 @@ class ACPActivities:
|
|
60
64
|
agent_id=params.agent_id,
|
61
65
|
agent_name=params.agent_name,
|
62
66
|
params=params.params,
|
67
|
+
trace_id=params.trace_id,
|
68
|
+
parent_span_id=params.parent_span_id,
|
69
|
+
request=params.request,
|
63
70
|
)
|
64
71
|
|
65
72
|
@activity.defn(name=ACPActivityName.MESSAGE_SEND)
|
@@ -69,6 +76,9 @@ class ACPActivities:
|
|
69
76
|
agent_name=params.agent_name,
|
70
77
|
task_id=params.task_id,
|
71
78
|
content=params.content,
|
79
|
+
trace_id=params.trace_id,
|
80
|
+
parent_span_id=params.parent_span_id,
|
81
|
+
request=params.request,
|
72
82
|
)
|
73
83
|
|
74
84
|
@activity.defn(name=ACPActivityName.EVENT_SEND)
|
@@ -78,6 +88,9 @@ class ACPActivities:
|
|
78
88
|
agent_name=params.agent_name,
|
79
89
|
task_id=params.task_id,
|
80
90
|
content=params.content,
|
91
|
+
trace_id=params.trace_id,
|
92
|
+
parent_span_id=params.parent_span_id,
|
93
|
+
request=params.request,
|
81
94
|
)
|
82
95
|
|
83
96
|
@activity.defn(name=ACPActivityName.TASK_CANCEL)
|
@@ -89,4 +102,5 @@ class ACPActivities:
|
|
89
102
|
agent_name=params.agent_name,
|
90
103
|
trace_id=params.trace_id,
|
91
104
|
parent_span_id=params.parent_span_id,
|
105
|
+
request=params.request,
|
92
106
|
)
|
@@ -4,7 +4,7 @@ import os
|
|
4
4
|
import uuid
|
5
5
|
from collections.abc import Callable
|
6
6
|
from concurrent.futures import ThreadPoolExecutor
|
7
|
-
from typing import Any
|
7
|
+
from typing import Any, overload
|
8
8
|
|
9
9
|
from aiohttp import web
|
10
10
|
from temporalio.client import Client
|
@@ -99,10 +99,28 @@ class AgentexWorker:
|
|
99
99
|
self.healthy = False
|
100
100
|
self.health_check_port = health_check_port
|
101
101
|
|
102
|
+
@overload
|
102
103
|
async def run(
|
103
104
|
self,
|
104
105
|
activities: list[Callable],
|
106
|
+
*,
|
105
107
|
workflow: type,
|
108
|
+
) -> None: ...
|
109
|
+
|
110
|
+
@overload
|
111
|
+
async def run(
|
112
|
+
self,
|
113
|
+
activities: list[Callable],
|
114
|
+
*,
|
115
|
+
workflows: list[type],
|
116
|
+
) -> None: ...
|
117
|
+
|
118
|
+
async def run(
|
119
|
+
self,
|
120
|
+
activities: list[Callable],
|
121
|
+
*,
|
122
|
+
workflow: type | None = None,
|
123
|
+
workflows: list[type] | None = None,
|
106
124
|
):
|
107
125
|
await self.start_health_check_server()
|
108
126
|
await self._register_agent()
|
@@ -115,11 +133,14 @@ class AgentexWorker:
|
|
115
133
|
if debug_enabled:
|
116
134
|
logger.info("🐛 [WORKER] Temporal debug mode enabled - deadlock detection disabled")
|
117
135
|
|
136
|
+
if workflow is None and workflows is None:
|
137
|
+
raise ValueError("Either workflow or workflows must be provided")
|
138
|
+
|
118
139
|
worker = Worker(
|
119
140
|
client=temporal_client,
|
120
141
|
task_queue=self.task_queue,
|
121
142
|
activity_executor=ThreadPoolExecutor(max_workers=self.max_workers),
|
122
|
-
workflows=[workflow],
|
143
|
+
workflows=[workflow] if workflows is None else workflows,
|
123
144
|
activities=activities,
|
124
145
|
workflow_runner=UnsandboxedWorkflowRunner(),
|
125
146
|
max_concurrent_activities=self.max_concurrent_activities,
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import asyncio
|
2
2
|
import inspect
|
3
|
+
from datetime import datetime
|
3
4
|
from collections.abc import AsyncGenerator, Awaitable, Callable
|
4
5
|
from contextlib import asynccontextmanager
|
5
6
|
from typing import Any
|
@@ -26,6 +27,10 @@ from agentex.types.task_message_content import TaskMessageContent
|
|
26
27
|
from agentex.lib.utils.logging import make_logger
|
27
28
|
from agentex.lib.utils.model_utils import BaseModel
|
28
29
|
from agentex.lib.utils.registration import register_agent
|
30
|
+
from agentex.lib.sdk.fastacp.base.constants import (
|
31
|
+
FASTACP_HEADER_SKIP_EXACT,
|
32
|
+
FASTACP_HEADER_SKIP_PREFIXES,
|
33
|
+
)
|
29
34
|
|
30
35
|
logger = make_logger(__name__)
|
31
36
|
|
@@ -93,6 +98,7 @@ class BaseACPServer(FastAPI):
|
|
93
98
|
async def _handle_jsonrpc(self, request: Request):
|
94
99
|
"""Main JSON-RPC endpoint handler"""
|
95
100
|
rpc_request = None
|
101
|
+
logger.info(f"[base_acp_server] received request: {datetime.now()}")
|
96
102
|
try:
|
97
103
|
data = await request.json()
|
98
104
|
rpc_request = JSONRPCRequest(**data)
|
@@ -128,9 +134,23 @@ class BaseACPServer(FastAPI):
|
|
128
134
|
),
|
129
135
|
)
|
130
136
|
|
131
|
-
#
|
137
|
+
# Extract application headers, excluding sensitive/transport headers per FASTACP_* rules
|
138
|
+
# Forward filtered headers via params.request.headers to agent handlers
|
139
|
+
custom_headers = {
|
140
|
+
key: value
|
141
|
+
for key, value in request.headers.items()
|
142
|
+
if key.lower() not in FASTACP_HEADER_SKIP_EXACT
|
143
|
+
and not any(key.lower().startswith(p) for p in FASTACP_HEADER_SKIP_PREFIXES)
|
144
|
+
}
|
145
|
+
|
146
|
+
# Parse params into appropriate model based on method and include headers
|
132
147
|
params_model = PARAMS_MODEL_BY_METHOD[method]
|
133
|
-
|
148
|
+
params_data = dict(rpc_request.params) if rpc_request.params else {}
|
149
|
+
|
150
|
+
# Add custom headers to the request structure if any headers were provided
|
151
|
+
if custom_headers:
|
152
|
+
params_data["request"] = {"headers": custom_headers}
|
153
|
+
params = params_model.model_validate(params_data)
|
134
154
|
|
135
155
|
if method in RPC_SYNC_METHODS:
|
136
156
|
handler = self._handlers[method]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
# Header filtering rules for FastACP server
|
4
|
+
|
5
|
+
# Prefixes to skip (case-insensitive beginswith checks)
|
6
|
+
FASTACP_HEADER_SKIP_PREFIXES: tuple[str, ...] = (
|
7
|
+
"content-",
|
8
|
+
"host",
|
9
|
+
"user-agent",
|
10
|
+
"x-forwarded-",
|
11
|
+
"sec-",
|
12
|
+
)
|
13
|
+
|
14
|
+
# Exact header names to skip (case-insensitive matching done by lowercasing keys)
|
15
|
+
FASTACP_HEADER_SKIP_EXACT: set[str] = {
|
16
|
+
"x-agent-api-key",
|
17
|
+
"connection",
|
18
|
+
"accept-encoding",
|
19
|
+
"cookie",
|
20
|
+
"content-length",
|
21
|
+
"transfer-encoding",
|
22
|
+
}
|
23
|
+
|
24
|
+
|
agentex/lib/types/acp.py
CHANGED
@@ -25,6 +25,7 @@ class CreateTaskParams(BaseModel):
|
|
25
25
|
agent: The agent that the task was sent to.
|
26
26
|
task: The task to be created.
|
27
27
|
params: The parameters for the task as inputted by the user.
|
28
|
+
request: Additional request context including headers forwarded to this agent.
|
28
29
|
"""
|
29
30
|
|
30
31
|
agent: Agent = Field(..., description="The agent that the task was sent to")
|
@@ -33,6 +34,10 @@ class CreateTaskParams(BaseModel):
|
|
33
34
|
None,
|
34
35
|
description="The parameters for the task as inputted by the user",
|
35
36
|
)
|
37
|
+
request: dict[str, Any] | None = Field(
|
38
|
+
default=None,
|
39
|
+
description="Additional request context including headers forwarded to this agent",
|
40
|
+
)
|
36
41
|
|
37
42
|
|
38
43
|
class SendMessageParams(BaseModel):
|
@@ -43,6 +48,7 @@ class SendMessageParams(BaseModel):
|
|
43
48
|
task: The task that the message was sent to.
|
44
49
|
content: The message that was sent to the agent.
|
45
50
|
stream: Whether to stream the message back to the agentex server from the agent.
|
51
|
+
request: Additional request context including headers forwarded to this agent.
|
46
52
|
"""
|
47
53
|
|
48
54
|
agent: Agent = Field(..., description="The agent that the message was sent to")
|
@@ -54,6 +60,10 @@ class SendMessageParams(BaseModel):
|
|
54
60
|
False,
|
55
61
|
description="Whether to stream the message back to the agentex server from the agent",
|
56
62
|
)
|
63
|
+
request: dict[str, Any] | None = Field(
|
64
|
+
default=None,
|
65
|
+
description="Additional request context including headers forwarded to this agent",
|
66
|
+
)
|
57
67
|
|
58
68
|
|
59
69
|
class SendEventParams(BaseModel):
|
@@ -63,11 +73,16 @@ class SendEventParams(BaseModel):
|
|
63
73
|
agent: The agent that the event was sent to.
|
64
74
|
task: The task that the message was sent to.
|
65
75
|
event: The event that was sent to the agent.
|
76
|
+
request: Additional request context including headers forwarded to this agent.
|
66
77
|
"""
|
67
78
|
|
68
79
|
agent: Agent = Field(..., description="The agent that the event was sent to")
|
69
80
|
task: Task = Field(..., description="The task that the message was sent to")
|
70
81
|
event: Event = Field(..., description="The event that was sent to the agent")
|
82
|
+
request: dict[str, Any] | None = Field(
|
83
|
+
default=None,
|
84
|
+
description="Additional request context including headers forwarded to this agent",
|
85
|
+
)
|
71
86
|
|
72
87
|
|
73
88
|
class CancelTaskParams(BaseModel):
|
@@ -76,10 +91,15 @@ class CancelTaskParams(BaseModel):
|
|
76
91
|
Attributes:
|
77
92
|
agent: The agent that the task was sent to.
|
78
93
|
task: The task that was cancelled.
|
94
|
+
request: Additional request context including headers forwarded to this agent.
|
79
95
|
"""
|
80
96
|
|
81
97
|
agent: Agent = Field(..., description="The agent that the task was sent to")
|
82
98
|
task: Task = Field(..., description="The task that was cancelled")
|
99
|
+
request: dict[str, Any] | None = Field(
|
100
|
+
default=None,
|
101
|
+
description="Additional request context including headers forwarded to this agent",
|
102
|
+
)
|
83
103
|
|
84
104
|
|
85
105
|
RPC_SYNC_METHODS = [
|
agentex/resources/agents.py
CHANGED
@@ -7,6 +7,7 @@ from typing import AsyncGenerator, Generator, Union, Optional
|
|
7
7
|
from typing_extensions import Literal
|
8
8
|
|
9
9
|
import httpx
|
10
|
+
from pydantic import ValidationError
|
10
11
|
|
11
12
|
from ..types import agent_rpc_params, agent_list_params, agent_rpc_by_name_params
|
12
13
|
from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
|
@@ -1073,6 +1074,8 @@ class AsyncAgentsResource(AsyncAPIResource):
|
|
1073
1074
|
except json.JSONDecodeError:
|
1074
1075
|
# Skip invalid JSON lines
|
1075
1076
|
continue
|
1077
|
+
except ValidationError:
|
1078
|
+
raise ValueError(f"Invalid SendMessageStreamResponse returned: {line}")
|
1076
1079
|
|
1077
1080
|
async def send_event(
|
1078
1081
|
self,
|
agentex/resources/tasks.py
CHANGED
@@ -232,7 +232,7 @@ class TasksResource(SyncAPIResource):
|
|
232
232
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
233
233
|
) -> Stream[object]:
|
234
234
|
"""
|
235
|
-
Stream
|
235
|
+
Stream events for a task by its unique ID.
|
236
236
|
|
237
237
|
Args:
|
238
238
|
extra_headers: Send extra headers
|
@@ -267,7 +267,7 @@ class TasksResource(SyncAPIResource):
|
|
267
267
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
268
268
|
) -> Stream[object]:
|
269
269
|
"""
|
270
|
-
Stream
|
270
|
+
Stream events for a task by its unique name.
|
271
271
|
|
272
272
|
Args:
|
273
273
|
extra_headers: Send extra headers
|
@@ -497,7 +497,7 @@ class AsyncTasksResource(AsyncAPIResource):
|
|
497
497
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
498
498
|
) -> AsyncStream[object]:
|
499
499
|
"""
|
500
|
-
Stream
|
500
|
+
Stream events for a task by its unique ID.
|
501
501
|
|
502
502
|
Args:
|
503
503
|
extra_headers: Send extra headers
|
@@ -532,7 +532,7 @@ class AsyncTasksResource(AsyncAPIResource):
|
|
532
532
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
533
533
|
) -> AsyncStream[object]:
|
534
534
|
"""
|
535
|
-
Stream
|
535
|
+
Stream events for a task by its unique name.
|
536
536
|
|
537
537
|
Args:
|
538
538
|
extra_headers: Send extra headers
|
agentex/types/agent.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
2
|
|
3
|
-
from typing import Optional
|
3
|
+
from typing import Dict, Optional
|
4
4
|
from datetime import datetime
|
5
5
|
from typing_extensions import Literal
|
6
6
|
|
@@ -29,6 +29,12 @@ class Agent(BaseModel):
|
|
29
29
|
updated_at: datetime
|
30
30
|
"""The timestamp when the agent was last updated"""
|
31
31
|
|
32
|
+
registered_at: Optional[datetime] = None
|
33
|
+
"""The timestamp when the agent was last registered"""
|
34
|
+
|
35
|
+
registration_metadata: Optional[Dict[str, object]] = None
|
36
|
+
"""The metadata for the agent's registration."""
|
37
|
+
|
32
38
|
status: Optional[Literal["Pending", "Building", "Ready", "Failed", "Unknown"]] = None
|
33
39
|
"""The status of the action, indicating if it's building, ready, failed, etc."""
|
34
40
|
|
agentex/types/task.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: agentex-sdk
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.13
|
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
|
@@ -2,7 +2,7 @@ agentex/__init__.py,sha256=j0BX5IfIjYaWdXQC7P4bh1Ev2-0bJe4Uh7IbqG551ng,2667
|
|
2
2
|
agentex/_base_client.py,sha256=Y_EaL4x9g7EsRADVD6vJ303tLO0iyB3K5SbTSvKCS2k,67048
|
3
3
|
agentex/_client.py,sha256=Fae6qw42eIjFaENpQ5nrq5SyW1310UoHZGNrG-DSa_g,20493
|
4
4
|
agentex/_compat.py,sha256=DQBVORjFb33zch24jzkhM14msvnzY7mmSmgDLaVFUM8,6562
|
5
|
-
agentex/_constants.py,sha256=
|
5
|
+
agentex/_constants.py,sha256=UWL_R-mDWXfDVTMoEAks7F9dNEbr7NFc27WQShkBB1c,466
|
6
6
|
agentex/_exceptions.py,sha256=B09aFjWFRSShb9BFJd-MNDblsGDyGk3w-vItYmjg_AI,3222
|
7
7
|
agentex/_files.py,sha256=KnEzGi_O756MvKyJ4fOCW_u3JhOeWPQ4RsmDvqihDQU,3545
|
8
8
|
agentex/_models.py,sha256=c29x_mRccdxlGwdUPfSR5eJxGXe74Ea5Dje5igZTrKQ,30024
|
@@ -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=
|
14
|
+
agentex/_version.py,sha256=N3dLunb4wcl7SK9s-2gSJpVddKvBJDMxT7Pz_dlMd8c,160
|
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
|
@@ -31,7 +31,7 @@ agentex/lib/environment_variables.py,sha256=6iWpCEURbahnLxZIjvJGES-zs7euUI8bxVXF
|
|
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
|
34
|
-
agentex/lib/adk/_modules/acp.py,sha256=
|
34
|
+
agentex/lib/adk/_modules/acp.py,sha256=_LweV8BoIyQhqL06Xie_9t_0jcbZakomb24MgojYneo,11179
|
35
35
|
agentex/lib/adk/_modules/agent_task_tracker.py,sha256=fXMDs1zgAC6n8EmWTU5_trs79EGVBCEPxd5eBOZmdE0,7022
|
36
36
|
agentex/lib/adk/_modules/agents.py,sha256=VlT_PXnyb3Knh-nx1rfflD9N6gjp5O0_6Z_QL5SCThU,2788
|
37
37
|
agentex/lib/adk/_modules/events.py,sha256=RHQZ4ircC60zdm1chRzo3cdt7LNqDoJfPLNJXEz4BH0,5262
|
@@ -131,7 +131,7 @@ agentex/lib/core/services/adk/streaming.py,sha256=keZyy7CixM2_3tf2THv-X4gGOOSAk0
|
|
131
131
|
agentex/lib/core/services/adk/tasks.py,sha256=XEX0u4skq81Fn-gjTzSE_-Iv_mKySZHchpotxAsnJwg,2618
|
132
132
|
agentex/lib/core/services/adk/tracing.py,sha256=w4mnIoq5m5iwlkDN_NOUjhi6hUpD958cYn1QR6hFgB8,1156
|
133
133
|
agentex/lib/core/services/adk/acp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
134
|
-
agentex/lib/core/services/adk/acp/acp.py,sha256=
|
134
|
+
agentex/lib/core/services/adk/acp/acp.py,sha256=ONbGc8HWNCxv5IJaItY-fvDZIwlh3d4jSmH9GGQo7q8,10971
|
135
135
|
agentex/lib/core/services/adk/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
136
136
|
agentex/lib/core/services/adk/providers/litellm.py,sha256=EKzus_xohNW-85V5hwvd1WqUd3ebv2wc9vDIWO2t1Mw,10044
|
137
137
|
agentex/lib/core/services/adk/providers/openai.py,sha256=ekxh5fvsuf_WMe-gyGYmECyfjxdvZVm-dU-ndyLzFGs,52519
|
@@ -151,7 +151,7 @@ agentex/lib/core/temporal/activities/adk/streaming_activities.py,sha256=PEXeFU9m
|
|
151
151
|
agentex/lib/core/temporal/activities/adk/tasks_activities.py,sha256=hQjdD-TfSzxsiW9eiJ5ZTvY0Ieu0tE950_Zk2PUVc9g,1442
|
152
152
|
agentex/lib/core/temporal/activities/adk/tracing_activities.py,sha256=RF8nSBA9x6Ui7_MD9He5ljlH_xZduIhx_JUTEyKdCxA,1523
|
153
153
|
agentex/lib/core/temporal/activities/adk/acp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
154
|
-
agentex/lib/core/temporal/activities/adk/acp/acp_activities.py,sha256=
|
154
|
+
agentex/lib/core/temporal/activities/adk/acp/acp_activities.py,sha256=FrIs0g4BqB5NwyHmb-3Do_ugGWgLhQ3Uoud1E0BnD_E,3503
|
155
155
|
agentex/lib/core/temporal/activities/adk/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
156
156
|
agentex/lib/core/temporal/activities/adk/providers/litellm_activities.py,sha256=Ix92XZIQIbhf-_fOWkUZDxZ1UUCOF0kOwxbcRYBzBQA,2583
|
157
157
|
agentex/lib/core/temporal/activities/adk/providers/openai_activities.py,sha256=JmP1rNsVjvf9flM9ZyaFlfOsx-aQNZ4muXoYxZVqKfk,27349
|
@@ -163,7 +163,7 @@ agentex/lib/core/temporal/services/temporal_task_service.py,sha256=oxaegtUMfr3EC
|
|
163
163
|
agentex/lib/core/temporal/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
164
164
|
agentex/lib/core/temporal/types/workflow.py,sha256=o8lBUloI44NTYFfbA1BLgzUneyN7aLbt042Eq_9OKo8,89
|
165
165
|
agentex/lib/core/temporal/workers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
166
|
-
agentex/lib/core/temporal/workers/worker.py,sha256=
|
166
|
+
agentex/lib/core/temporal/workers/worker.py,sha256=XumHnctexRP3Ir7pXTid3VKaHs5vysYQO6UcCet0yvg,7211
|
167
167
|
agentex/lib/core/temporal/workflows/workflow.py,sha256=VTS4nqwdJqqjIy6nTyvFLdAoBHnunO8-8rVY0Gx5_zo,723
|
168
168
|
agentex/lib/core/tracing/__init__.py,sha256=3dLjXGTwAJxi_xxwdh8Mt04pdLyzN9VxAl8XHmV70Ak,229
|
169
169
|
agentex/lib/core/tracing/trace.py,sha256=45Nn0Z97kC_9XNyb9N8IWUFo0OIdb7dDZShhgOTGJB0,8952
|
@@ -184,7 +184,8 @@ agentex/lib/sdk/config/project_config.py,sha256=CGH_r9KbnSFMj2CnBkZnfg41L2o0TeVN
|
|
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=K4D7a9EiJfCgWp2hrE_TbpZBaF4Uc46MfndZK3F9mA0,3061
|
187
|
-
agentex/lib/sdk/fastacp/base/base_acp_server.py,sha256=
|
187
|
+
agentex/lib/sdk/fastacp/base/base_acp_server.py,sha256=mVi8uSOZtf70rogS7xDJwHU1hF_5Fv7S8383rUN0kK8,15604
|
188
|
+
agentex/lib/sdk/fastacp/base/constants.py,sha256=W4vpJ-5NML7239JyqzUWdu2IypIl8Cey8CS41KR2Vk0,519
|
188
189
|
agentex/lib/sdk/fastacp/impl/agentic_base_acp.py,sha256=LWLAlHrs-2Lc2UICBAEFL8c3JwTA6oxPnzUzW0qQWSA,2694
|
189
190
|
agentex/lib/sdk/fastacp/impl/sync_acp.py,sha256=0y_cYD-0UJOiVJv-BBMOt6PvElDf5zmc1uvbr81VcSI,3897
|
190
191
|
agentex/lib/sdk/fastacp/impl/temporal_acp.py,sha256=hQa_zGG6l_jIHNC75H_KXlPUuVqNBc-zIm-pmCDSZ6w,3759
|
@@ -203,7 +204,7 @@ agentex/lib/sdk/state_machine/state_workflow.py,sha256=ispqxlcLPT22glgOBXjyd-BXC
|
|
203
204
|
agentex/lib/sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
204
205
|
agentex/lib/sdk/utils/messages.py,sha256=GdfT98NQRmltAnCQ2XW0XF5DO2jGi6TEZh8qqNv6WlY,8354
|
205
206
|
agentex/lib/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
206
|
-
agentex/lib/types/acp.py,sha256=
|
207
|
+
agentex/lib/types/acp.py,sha256=YYTXsJWcw6BdIWXliKQxAwtHn07ZINQ-RsppyjY9_64,3974
|
207
208
|
agentex/lib/types/agent_configs.py,sha256=3wRa2okimSzi2v8sJyMyrqRlcu_4sxes-_4smEK6fq8,2798
|
208
209
|
agentex/lib/types/agent_results.py,sha256=ev6WnPLfZRbhy2HnBmdIrZq1ExVeaweXoLRxYGspyWM,653
|
209
210
|
agentex/lib/types/converters.py,sha256=u6fLb0rBUDA6nF5hdbC8ms6H-Z21IQfLlIvYpau_P5g,2283
|
@@ -230,18 +231,18 @@ agentex/lib/utils/temporal.py,sha256=sXo8OPMMXiyrF7OSBCJBuN_ufyQOD2bLOXgDbVZoyds
|
|
230
231
|
agentex/lib/utils/dev_tools/__init__.py,sha256=oaHxw6ymfhNql-kzXHv3NWVHuqD4fHumasNXJG7kHTU,261
|
231
232
|
agentex/lib/utils/dev_tools/async_messages.py,sha256=dM01spww2Fy6ej_WDnPXs2eG-9yCU7Xc1IMKwJzq6cM,19543
|
232
233
|
agentex/resources/__init__.py,sha256=74rMqWBzQ2dSrKQqsrd7-jskPws0O_ogkFltvZO3HoU,3265
|
233
|
-
agentex/resources/agents.py,sha256=
|
234
|
+
agentex/resources/agents.py,sha256=IvnUuQZ_cpP6Kz96aD6MSB0AQ5-VLo_L-VIs6MVSu1s,47132
|
234
235
|
agentex/resources/events.py,sha256=Zc9JhUm3bq2VFnBAolC0M7KZernzj1AjZ_vj0ibP4GY,10412
|
235
236
|
agentex/resources/spans.py,sha256=wmcUs4XbXIF5rPeyU_f39c2RTbTLnkuh2LYogZEBD6s,20936
|
236
237
|
agentex/resources/states.py,sha256=O31A8--n7n0rHsng2e1oCUAzLNjQIxDUk7rq0IXfgGM,19262
|
237
|
-
agentex/resources/tasks.py,sha256=
|
238
|
+
agentex/resources/tasks.py,sha256=ovMDt0EElGYwvhYdEiC0Noo04p0GHPWZTmDub-drl88,24744
|
238
239
|
agentex/resources/tracker.py,sha256=YxSeiloMwIqrS9nY7SlHclauRA7142qrKw34xgwqYbA,14103
|
239
240
|
agentex/resources/messages/__init__.py,sha256=_J1eusFtr_k6zrAntJSuqx6LWEUBSTrV1OZZh7MaDPE,1015
|
240
241
|
agentex/resources/messages/batch.py,sha256=pegCmnjK_J0jek5ChX1pKpq5RmCucTYLbK69H6qGVS4,9629
|
241
242
|
agentex/resources/messages/messages.py,sha256=fuFmmGNOjRJVzmYHcfP2trg0yii0n9MPPCpt7F8fDs4,17930
|
242
243
|
agentex/types/__init__.py,sha256=lEuWxr1ggBzZAUGYrSmIhcSSZ7z5UQSIfNtmUrELC2s,3884
|
243
244
|
agentex/types/acp_type.py,sha256=Fj-4SzmM6m95ck_ZXtNbcWggHiD9F49bxBLPbl1fxe4,208
|
244
|
-
agentex/types/agent.py,sha256=
|
245
|
+
agentex/types/agent.py,sha256=ihRNn9mksULA5FuiyanKA7B-lmN4OVr6wBqNzUb8Tcg,1208
|
245
246
|
agentex/types/agent_list_params.py,sha256=81IWnRZ2rLfHH7GB6VkXShYjb44DO0guG1znJcV3tuI,316
|
246
247
|
agentex/types/agent_list_response.py,sha256=g0b9Cw7j2yk14veyJORpF3me8iW7g7pr2USpXGokoFI,254
|
247
248
|
agentex/types/agent_rpc_by_name_params.py,sha256=G6xkjrZKPmJvhwqgc68tAnzmb4wYh9k0zlcm9CsLQR0,2024
|
@@ -275,7 +276,7 @@ agentex/types/state_create_params.py,sha256=dIQLVdFJyhIUKlFcm-7I6M4qD1BxZwH8KCt1
|
|
275
276
|
agentex/types/state_list_params.py,sha256=jsBeE98mVvS-pk9iytNTVVSW6pz7OM4Zt-OxC2mEt3E,364
|
276
277
|
agentex/types/state_list_response.py,sha256=3UyMRzP3zdEKo9hTkJdvBHjmv6II4KnwoZ8GvlzPCSI,254
|
277
278
|
agentex/types/state_update_params.py,sha256=TpCXMrYaT2MWeOPng9-RGvGX9vE61Te9r3CFRQzzIDg,377
|
278
|
-
agentex/types/task.py,sha256=
|
279
|
+
agentex/types/task.py,sha256=PXFMFK74V_fsNnXN8vJW45FwRcXJcxDR-cQU8tNtk5Y,652
|
279
280
|
agentex/types/task_list_params.py,sha256=euvsWpK2kjJOfvrkUnSFiofZlU2sZHd2mar3qYtAA8I,328
|
280
281
|
agentex/types/task_list_response.py,sha256=8Q-RIanLmUC9vOuDXoW5gjpZeE-HR6IrBugG7-cUAZQ,249
|
281
282
|
agentex/types/task_message.py,sha256=hoLAkiQJd1Fl7EjLof-vZq6zVnDw9SKmnV6V74Po58A,918
|
@@ -303,8 +304,8 @@ agentex/types/messages/batch_update_params.py,sha256=Ug5CThbD49a8j4qucg04OdmVrp_
|
|
303
304
|
agentex/types/messages/batch_update_response.py,sha256=TbSBe6SuPzjXXWSj-nRjT1JHGBooTshHQQDa1AixQA8,278
|
304
305
|
agentex/types/shared/__init__.py,sha256=IKs-Qn5Yja0kFh1G1kDqYZo43qrOu1hSoxlPdN-85dI,149
|
305
306
|
agentex/types/shared/delete_response.py,sha256=8qH3zvQXaOHYQSHyXi7UQxdR4miTzR7V9K4zXVsiUyk,215
|
306
|
-
agentex_sdk-0.4.
|
307
|
-
agentex_sdk-0.4.
|
308
|
-
agentex_sdk-0.4.
|
309
|
-
agentex_sdk-0.4.
|
310
|
-
agentex_sdk-0.4.
|
307
|
+
agentex_sdk-0.4.13.dist-info/METADATA,sha256=hsdN9UD0NdPOxgYvhKFYuLydspi6odLpQnTN6tVFzmM,15095
|
308
|
+
agentex_sdk-0.4.13.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
309
|
+
agentex_sdk-0.4.13.dist-info/entry_points.txt,sha256=V7vJuMZdF0UlvgX6KiBN7XUvq_cxF5kplcYvc1QlFaQ,62
|
310
|
+
agentex_sdk-0.4.13.dist-info/licenses/LICENSE,sha256=Q1AOx2FtRcMlyMgQJ9eVN2WKPq2mQ33lnB4tvWxabLA,11337
|
311
|
+
agentex_sdk-0.4.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|