Skip to content

Commit b6ddbea

Browse files
committed
chore: typing
1 parent 36c0ce5 commit b6ddbea

7 files changed

Lines changed: 88 additions & 80 deletions

File tree

src/agentpool/agents/agui_agent/agui_converters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def agui_to_native_event(event: Event) -> Iterator[RichAgentStreamEvent[Any]]:
126126
# === Thinking/Reasoning Events ===
127127

128128
case (
129-
ThinkingTextMessageContentEvent(delta=delta) # type: ignore[misc]
129+
ThinkingTextMessageContentEvent(delta=delta)
130130
| ReasoningMessageContentEvent(delta=delta)
131131
| ReasoningMessageChunkEvent(delta=str() as delta)
132132
):

src/agentpool/agents/claude_code_agent/claude_code_agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ async def _on_elicitation(self, request: SDKControlElicitationRequest) -> Elicit
528528
case ErrorData():
529529
return ElicitResult(action="decline")
530530
case _ as unreachable_:
531-
assert_never(unreachable_) # ty:ignore[type-assertion-failure]
531+
assert_never(unreachable_)
532532

533533
async def __aenter__(self) -> Self:
534534
"""Connect to Claude Code with deferred client connection."""

src/agentpool/mcp_server/client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,8 @@ async def elicitation_handler[T](
397397
return ElicitResult(action="cancel")
398398
case MCPElicitResult(action="decline"):
399399
return ElicitResult(action="decline")
400-
case ErrorData():
400+
case ErrorData(code=code, message=message, data=data):
401+
logger.error("Elicitation error", code=code, message=message, data=data)
401402
return ElicitResult(action="decline")
402403
case _:
403404
return ElicitResult(action="decline")

src/agentpool/talk/talk.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -263,15 +263,15 @@ async def _handle_message(
263263
for target in self.targets
264264
if await self._evaluate_condition(
265265
self.filter_condition,
266-
processed_message,
266+
processed_message, # ty:ignore[invalid-argument-type]
267267
target,
268268
default_return=True,
269269
)
270270
]
271271
# 7. emit connection processed event
272272
await self.connection_processed.emit(
273273
self.ConnectionProcessed(
274-
message=processed_message,
274+
message=processed_message, # ty:ignore[invalid-argument-type]
275275
source=self.source,
276276
targets=target_list,
277277
queued=self.queued,
@@ -288,9 +288,9 @@ async def _handle_message(
288288
responses: list[ChatMessage[Any]] = []
289289
for target in target_list:
290290
if self.queued:
291-
self._pending_messages[target.name].append(processed_message)
291+
self._pending_messages[target.name].append(processed_message) # ty:ignore[invalid-argument-type]
292292
continue
293-
if response := await self._process_for_target(processed_message, target, prompt):
293+
if response := await self._process_for_target(processed_message, target, prompt): # ty:ignore[invalid-argument-type]
294294
responses.append(response)
295295

296296
return responses
@@ -447,9 +447,9 @@ async def chainedtransform_fn(
447447
intermediate = await execute(oldtransform_fn, data)
448448
return await execute(transformer, intermediate) # ty: ignore[invalid-return-type]
449449

450-
new_talk.transform_fn = chainedtransform_fn # type: ignore[assignment]
450+
new_talk.transform_fn = chainedtransform_fn # type: ignore[assignment] # ty:ignore[invalid-assignment]
451451
else:
452-
new_talk.transform_fn = transformer # type: ignore[assignment]
452+
new_talk.transform_fn = transformer # type: ignore[assignment] # ty:ignore[invalid-assignment]
453453

454454
return new_talk
455455

src/agentpool/tool_impls/bash/tool.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ async def _execute( # noqa: PLR0915
125125
except Exception as e: # noqa: BLE001
126126
error_id = process_id or f"cmd_{uuid.uuid4().hex[:8]}"
127127
await ctx.events.process_started(error_id, command, success=False, error=str(e))
128-
meta = {"output": "", "exit": None, "description": command}
128+
meta: dict[str, Any] = {"output": "", "exit": None, "description": command}
129129
return ToolResult(content=f"Error executing command: {e}", metadata=meta)
130130

131131
stdout = "".join(stdout_parts)
@@ -136,7 +136,7 @@ async def _execute( # noqa: PLR0915
136136
stderr = apply_linewise_regex_filter(stderr, filter_lines)
137137
except re.error as regex_err:
138138
error_msg = f"Invalid filter regex: {regex_err}"
139-
meta: dict[str, Any] = {"output": "", "exit": None, "description": command}
139+
meta = {"output": "", "exit": None, "description": command}
140140
return ToolResult(content=error_msg, metadata=meta)
141141
# Apply output limit if specified
142142
truncated = False

src/agentpool_server/acp_server/input_provider.py

Lines changed: 75 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -212,75 +212,82 @@ async def get_elicitation( # noqa: PLR0911
212212
"""
213213
try:
214214
# Handle URL mode elicitation (OAuth, credentials, payments)
215-
if isinstance(params, types.ElicitRequestURLParams):
216-
msg = "URL elicitation request"
217-
elicit_id = params.elicitationId
218-
logger.info(msg, message=params.message, url=params.url, elicitation_id=elicit_id)
219-
tool_call_id = f"elicit_url_{elicit_id}"
220-
title = f"URL Authorization: {params.message}"
221-
url_options = [
222-
PermissionOption(option_id="accept", name="Open URL", kind="allow_once"),
223-
PermissionOption(option_id="decline", name="Decline", kind="reject_once"),
224-
]
225-
response = await self.session.requests.request_permission(
226-
tool_call_id=tool_call_id,
227-
title=title,
228-
options=url_options,
229-
)
230-
match response.outcome:
231-
case AllowedOutcome(option_id="accept"):
232-
webbrowser.open(params.url)
233-
return types.ElicitResult(action="accept")
234-
case AllowedOutcome():
235-
return types.ElicitResult(action="decline")
236-
case DeniedOutcome():
237-
return types.ElicitResult(action="cancel")
238-
case _ as unreachable:
239-
assert_never(unreachable) # ty:ignore[type-assertion-failure]
240-
241-
# Form mode elicitation
242-
schema = params.requestedSchema
243-
logger.info("Elicitation request", message=params.message, schema=schema)
244-
tool_call_id = f"elicit_{hash(params.message)}"
245-
title = f"Elicitation: {params.message}"
246-
247-
if _is_boolean_schema(schema):
248-
options: list[PermissionOption] | None = _create_boolean_elicitation_options()
249-
response = await self.session.requests.request_permission(
250-
tool_call_id=tool_call_id,
251-
title=title,
252-
options=options,
253-
)
254-
return self._handle_boolean_elicitation_response(response, schema)
255-
if _is_enum_schema(schema) and (options := _create_enum_elicitation_options(schema)):
256-
response = await self.session.requests.request_permission(
257-
tool_call_id=tool_call_id,
258-
title=title,
259-
options=options,
260-
)
261-
return _handle_enum_elicitation_response(response, schema)
262-
263-
options = [
264-
PermissionOption(option_id="accept", name="Accept", kind="allow_once"),
265-
PermissionOption(option_id="decline", name="Decline", kind="reject_once"),
266-
]
267-
response = await self.session.requests.request_permission(
268-
tool_call_id=tool_call_id,
269-
title=title,
270-
options=options,
271-
)
272-
273-
# Convert permission response to elicitation result
274-
match response.outcome:
275-
case AllowedOutcome(option_id="accept"):
276-
# For non-boolean schemas, return empty content
277-
return types.ElicitResult(action="accept", content={})
278-
case AllowedOutcome():
279-
return types.ElicitResult(action="decline")
280-
case DeniedOutcome():
281-
return types.ElicitResult(action="cancel")
215+
match params:
216+
case types.ElicitRequestURLParams(
217+
elicitationId=elicit_id,
218+
message=message,
219+
url=url,
220+
):
221+
msg = "URL elicitation request"
222+
logger.info(msg, message=message, url=url, elicitation_id=elicit_id)
223+
tool_call_id = f"elicit_url_{elicit_id}"
224+
title = f"URL Authorization: {message}"
225+
url_options = [
226+
PermissionOption(option_id="accept", name="Open URL", kind="allow_once"),
227+
PermissionOption(option_id="decline", name="Decline", kind="reject_once"),
228+
]
229+
response = await self.session.requests.request_permission(
230+
tool_call_id=tool_call_id,
231+
title=title,
232+
options=url_options,
233+
)
234+
match response.outcome:
235+
case AllowedOutcome(option_id="accept"):
236+
webbrowser.open(params.url)
237+
return types.ElicitResult(action="accept")
238+
case AllowedOutcome():
239+
return types.ElicitResult(action="decline")
240+
case DeniedOutcome():
241+
return types.ElicitResult(action="cancel")
242+
case _ as unreachable:
243+
assert_never(unreachable)
244+
case types.ElicitRequestFormParams(requestedSchema=schema, message=message):
245+
logger.info("Elicitation request", message=message, schema=schema)
246+
tool_call_id = f"elicit_{hash(message)}"
247+
title = f"Elicitation: {message}"
248+
if _is_boolean_schema(schema):
249+
options: list[PermissionOption] | None = (
250+
_create_boolean_elicitation_options()
251+
)
252+
response = await self.session.requests.request_permission(
253+
tool_call_id=tool_call_id,
254+
title=title,
255+
options=options,
256+
)
257+
return self._handle_boolean_elicitation_response(response, schema)
258+
if _is_enum_schema(schema) and (
259+
options := _create_enum_elicitation_options(schema)
260+
):
261+
response = await self.session.requests.request_permission(
262+
tool_call_id=tool_call_id,
263+
title=title,
264+
options=options,
265+
)
266+
return _handle_enum_elicitation_response(response, schema)
267+
268+
options = [
269+
PermissionOption(option_id="accept", name="Accept", kind="allow_once"),
270+
PermissionOption(option_id="decline", name="Decline", kind="reject_once"),
271+
]
272+
response = await self.session.requests.request_permission(
273+
tool_call_id=tool_call_id,
274+
title=title,
275+
options=options,
276+
)
277+
278+
# Convert permission response to elicitation result
279+
match response.outcome:
280+
case AllowedOutcome(option_id="accept"):
281+
# For non-boolean schemas, return empty content
282+
return types.ElicitResult(action="accept", content={})
283+
case AllowedOutcome():
284+
return types.ElicitResult(action="decline")
285+
case DeniedOutcome():
286+
return types.ElicitResult(action="cancel")
287+
case _ as unreachable:
288+
assert_never(unreachable)
282289
case _ as unreachable:
283-
assert_never(unreachable) # ty:ignore[type-assertion-failure]
290+
assert_never(unreachable)
284291

285292
except Exception as e:
286293
logger.exception("Failed to handle elicitation")

src/agentpool_toolsets/mcp_discovery/toolset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def _get_search_index(self) -> Any:
112112
raise FileNotFoundError(msg)
113113

114114
# Load parquet
115-
arrow_table = pq.read_table(PARQUET_PATH)
115+
arrow_table = pq.read_table(PARQUET_PATH) # type: ignore[no-untyped-call]
116116

117117
# Convert vector column to fixed-size list for LanceDB vector search
118118
# LanceDB requires fixed-size vectors, not variable-length lists

0 commit comments

Comments
 (0)