use crate::agent::{
AgentCatalogToolConfig, AgentInteraction, AgentMessage, AgentMessagePart,
AgentMessagePartImageRef, AgentMessagePartToolCall, AgentMessagePartToolResult, AgentNoTools,
AgentOutput, AgentOutputKind, AgentProviderCapabilities, AgentSession, AgentSessionStartConfig,
AgentSessionStartHook, AgentSessionStartHookOutput, AgentStructuredOutput, AgentTextOutput,
AgentToolConfig, AgentToolConfigSource, AgentTurn, AgentTurnDisplay, AgentTurnEvent,
AgentTurnOutput, AgentTurnStructuredOutput, AgentTurnTextOutput, AgentWorkspace,
AgentWorkspaceGitCheckout, CancelAgentProviderTurnRequest, CreateAgentProviderSessionRequest,
CreateAgentProviderTurnRequest, GetAgentProviderCapabilitiesRequest,
GetAgentProviderInteractionRequest, GetAgentProviderSessionRequest,
GetAgentProviderTurnRequest, ListAgentProviderInteractionsRequest,
ListAgentProviderInteractionsResponse, ListAgentProviderSessionsRequest,
ListAgentProviderSessionsResponse, ListAgentProviderTurnEventsRequest,
ListAgentProviderTurnEventsResponse, ListAgentProviderTurnsRequest,
ListAgentProviderTurnsResponse, ListedAgentTool, PreparedAgentWorkspace,
ResolveAgentProviderInteractionRequest, UpdateAgentProviderSessionRequest,
};
use crate::codec::app::{
to_wire_agent_tool_ref, to_wire_operation_annotations, to_wire_request_context,
to_wire_subject_context,
};
use crate::codec::support::{
from_wire_struct, from_wire_timestamp, from_wire_value, to_wire_struct,
};
use crate::generated::v1;
pub(crate) fn to_wire_agent_catalog_tool_config(
value: AgentCatalogToolConfig,
) -> v1::AgentCatalogToolConfig {
v1::AgentCatalogToolConfig {
refs: value.refs.into_iter().map(to_wire_agent_tool_ref).collect(),
tools: value
.tools
.into_iter()
.map(to_wire_listed_agent_tool)
.collect(),
}
}
pub(crate) fn from_wire_agent_interaction(value: v1::AgentInteraction) -> AgentInteraction {
AgentInteraction {
id: value.id,
r#type: value.r#type,
state: value.state,
title: value.title,
prompt: value.prompt,
request: value.request.map(from_wire_struct),
resolution: value.resolution.map(from_wire_struct),
created_at: value.created_at.map(from_wire_timestamp),
resolved_at: value.resolved_at.map(from_wire_timestamp),
turn_id: value.turn_id,
session_id: value.session_id,
}
}
pub(crate) fn to_wire_agent_message(value: AgentMessage) -> v1::AgentMessage {
v1::AgentMessage {
role: value.role,
text: value.text,
parts: value
.parts
.into_iter()
.map(to_wire_agent_message_part)
.collect(),
metadata: value.metadata.map(to_wire_struct),
}
}
pub(crate) fn from_wire_agent_message(value: v1::AgentMessage) -> AgentMessage {
AgentMessage {
role: value.role,
text: value.text,
parts: value
.parts
.into_iter()
.map(from_wire_agent_message_part)
.collect(),
metadata: value.metadata.map(from_wire_struct),
}
}
pub(crate) fn to_wire_agent_message_part(value: AgentMessagePart) -> v1::AgentMessagePart {
v1::AgentMessagePart {
r#type: value.r#type,
text: value.text,
json: value.json.map(to_wire_struct),
tool_call: value.tool_call.map(to_wire_agent_message_part_tool_call),
tool_result: value
.tool_result
.map(to_wire_agent_message_part_tool_result),
image_ref: value.image_ref.map(to_wire_agent_message_part_image_ref),
}
}
pub(crate) fn from_wire_agent_message_part(value: v1::AgentMessagePart) -> AgentMessagePart {
AgentMessagePart {
r#type: value.r#type,
text: value.text,
json: value.json.map(from_wire_struct),
tool_call: value.tool_call.map(from_wire_agent_message_part_tool_call),
tool_result: value
.tool_result
.map(from_wire_agent_message_part_tool_result),
image_ref: value.image_ref.map(from_wire_agent_message_part_image_ref),
}
}
pub(crate) fn to_wire_agent_message_part_image_ref(
value: AgentMessagePartImageRef,
) -> v1::AgentMessagePartImageRef {
v1::AgentMessagePartImageRef {
uri: value.uri,
mime_type: value.mime_type,
}
}
pub(crate) fn from_wire_agent_message_part_image_ref(
value: v1::AgentMessagePartImageRef,
) -> AgentMessagePartImageRef {
AgentMessagePartImageRef {
uri: value.uri,
mime_type: value.mime_type,
}
}
pub(crate) fn to_wire_agent_message_part_tool_call(
value: AgentMessagePartToolCall,
) -> v1::AgentMessagePartToolCall {
v1::AgentMessagePartToolCall {
id: value.id,
tool_id: value.tool_id,
arguments: value.arguments.map(to_wire_struct),
}
}
pub(crate) fn from_wire_agent_message_part_tool_call(
value: v1::AgentMessagePartToolCall,
) -> AgentMessagePartToolCall {
AgentMessagePartToolCall {
id: value.id,
tool_id: value.tool_id,
arguments: value.arguments.map(from_wire_struct),
}
}
pub(crate) fn to_wire_agent_message_part_tool_result(
value: AgentMessagePartToolResult,
) -> v1::AgentMessagePartToolResult {
v1::AgentMessagePartToolResult {
tool_call_id: value.tool_call_id,
status: value.status,
content: value.content,
output: value.output.map(to_wire_struct),
}
}
pub(crate) fn from_wire_agent_message_part_tool_result(
value: v1::AgentMessagePartToolResult,
) -> AgentMessagePartToolResult {
AgentMessagePartToolResult {
tool_call_id: value.tool_call_id,
status: value.status,
content: value.content,
output: value.output.map(from_wire_struct),
}
}
pub(crate) fn to_wire_agent_no_tools(_value: AgentNoTools) -> v1::AgentNoTools {
v1::AgentNoTools {}
}
pub(crate) fn to_wire_agent_output(value: AgentOutput) -> v1::AgentOutput {
v1::AgentOutput {
kind: value.kind.map(to_wire_agent_output_kind),
}
}
pub(crate) fn from_wire_agent_output(value: v1::AgentOutput) -> AgentOutput {
AgentOutput {
kind: value.kind.map(from_wire_agent_output_kind),
}
}
pub(crate) fn to_wire_agent_output_kind(value: AgentOutputKind) -> v1::agent_output::Kind {
match value {
AgentOutputKind::Text(value) => {
v1::agent_output::Kind::Text(to_wire_agent_text_output(value))
}
AgentOutputKind::Structured(value) => {
v1::agent_output::Kind::Structured(to_wire_agent_structured_output(value))
}
}
}
pub(crate) fn from_wire_agent_output_kind(value: v1::agent_output::Kind) -> AgentOutputKind {
match value {
v1::agent_output::Kind::Text(value) => {
AgentOutputKind::Text(from_wire_agent_text_output(value))
}
v1::agent_output::Kind::Structured(value) => {
AgentOutputKind::Structured(from_wire_agent_structured_output(value))
}
}
}
pub(crate) fn from_wire_agent_provider_capabilities(
value: v1::AgentProviderCapabilities,
) -> AgentProviderCapabilities {
AgentProviderCapabilities {
streaming_text: value.streaming_text,
tool_calls: value.tool_calls,
parallel_tool_calls: value.parallel_tool_calls,
interactions: value.interactions,
resumable_turns: value.resumable_turns,
reasoning_summaries: value.reasoning_summaries,
bounded_list_hydration: value.bounded_list_hydration,
supported_tool_sources: value.supported_tool_sources,
supports_session_start: value.supports_session_start,
supports_prepared_workspace: value.supports_prepared_workspace,
}
}
pub(crate) fn from_wire_agent_session(value: v1::AgentSession) -> AgentSession {
AgentSession {
id: value.id,
provider_name: value.provider_name,
model: value.model,
client_ref: value.client_ref,
state: value.state,
metadata: value.metadata.map(from_wire_struct),
created_by_subject_id: value.created_by_subject_id,
created_at: value.created_at.map(from_wire_timestamp),
updated_at: value.updated_at.map(from_wire_timestamp),
last_turn_at: value.last_turn_at.map(from_wire_timestamp),
}
}
pub(crate) fn to_wire_agent_session_start_config(
value: AgentSessionStartConfig,
) -> v1::AgentSessionStartConfig {
v1::AgentSessionStartConfig {
hooks: value
.hooks
.into_iter()
.map(to_wire_agent_session_start_hook)
.collect(),
}
}
pub(crate) fn to_wire_agent_session_start_hook(
value: AgentSessionStartHook,
) -> v1::AgentSessionStartHook {
v1::AgentSessionStartHook {
id: value.id,
r#type: value.r#type,
command: value.command,
cwd: value.cwd,
timeout: value.timeout,
env: value.env,
output: value.output.map(to_wire_agent_session_start_hook_output),
}
}
pub(crate) fn to_wire_agent_session_start_hook_output(
value: AgentSessionStartHookOutput,
) -> v1::AgentSessionStartHookOutput {
v1::AgentSessionStartHookOutput {
additional_context: value.additional_context,
metadata: value.metadata,
}
}
pub(crate) fn to_wire_agent_structured_output(
value: AgentStructuredOutput,
) -> v1::AgentStructuredOutput {
v1::AgentStructuredOutput {
schema: value.schema.map(to_wire_struct),
}
}
pub(crate) fn from_wire_agent_structured_output(
value: v1::AgentStructuredOutput,
) -> AgentStructuredOutput {
AgentStructuredOutput {
schema: value.schema.map(from_wire_struct),
}
}
pub(crate) fn to_wire_agent_text_output(_value: AgentTextOutput) -> v1::AgentTextOutput {
v1::AgentTextOutput {}
}
pub(crate) fn from_wire_agent_text_output(_value: v1::AgentTextOutput) -> AgentTextOutput {
AgentTextOutput {}
}
pub(crate) fn to_wire_agent_tool_config(value: AgentToolConfig) -> v1::AgentToolConfig {
v1::AgentToolConfig {
source: value.source.map(to_wire_agent_tool_config_source),
}
}
pub(crate) fn to_wire_agent_tool_config_source(
value: AgentToolConfigSource,
) -> v1::agent_tool_config::Source {
match value {
AgentToolConfigSource::None(value) => {
v1::agent_tool_config::Source::None(to_wire_agent_no_tools(value))
}
AgentToolConfigSource::Catalog(value) => {
v1::agent_tool_config::Source::Catalog(to_wire_agent_catalog_tool_config(value))
}
}
}
pub(crate) fn from_wire_agent_turn(value: v1::AgentTurn) -> AgentTurn {
AgentTurn {
id: value.id,
session_id: value.session_id,
provider_name: value.provider_name,
model: value.model,
status: value.status,
messages: value
.messages
.into_iter()
.map(from_wire_agent_message)
.collect(),
status_message: value.status_message,
created_by_subject_id: value.created_by_subject_id,
created_at: value.created_at.map(from_wire_timestamp),
started_at: value.started_at.map(from_wire_timestamp),
completed_at: value.completed_at.map(from_wire_timestamp),
execution_ref: value.execution_ref,
output: value.output.map(from_wire_agent_turn_output),
}
}
pub(crate) fn from_wire_agent_turn_output(value: v1::agent_turn::Output) -> AgentTurnOutput {
match value {
v1::agent_turn::Output::Text(value) => {
AgentTurnOutput::Text(from_wire_agent_turn_text_output(value))
}
v1::agent_turn::Output::Structured(value) => {
AgentTurnOutput::Structured(from_wire_agent_turn_structured_output(value))
}
}
}
pub(crate) fn from_wire_agent_turn_display(value: v1::AgentTurnDisplay) -> AgentTurnDisplay {
AgentTurnDisplay {
kind: value.kind,
phase: value.phase,
text: value.text,
label: value.label,
r#ref: value.r#ref,
parent_ref: value.parent_ref,
input: value.input.map(from_wire_value),
output: value.output.map(from_wire_value),
error: value.error.map(from_wire_value),
action: value.action,
format: value.format,
language: value.language,
}
}
pub(crate) fn from_wire_agent_turn_event(value: v1::AgentTurnEvent) -> AgentTurnEvent {
AgentTurnEvent {
id: value.id,
turn_id: value.turn_id,
seq: value.seq,
r#type: value.r#type,
source: value.source,
visibility: value.visibility,
data: value.data.map(from_wire_struct),
created_at: value.created_at.map(from_wire_timestamp),
display: value.display.map(from_wire_agent_turn_display),
}
}
pub(crate) fn from_wire_agent_turn_structured_output(
value: v1::AgentTurnStructuredOutput,
) -> AgentTurnStructuredOutput {
AgentTurnStructuredOutput {
text: value.text,
value: value.value.map(from_wire_struct),
}
}
pub(crate) fn from_wire_agent_turn_text_output(
value: v1::AgentTurnTextOutput,
) -> AgentTurnTextOutput {
AgentTurnTextOutput { text: value.text }
}
pub(crate) fn to_wire_agent_workspace(value: AgentWorkspace) -> v1::AgentWorkspace {
v1::AgentWorkspace {
checkouts: value
.checkouts
.into_iter()
.map(to_wire_agent_workspace_git_checkout)
.collect(),
cwd: value.cwd,
}
}
pub(crate) fn to_wire_agent_workspace_git_checkout(
value: AgentWorkspaceGitCheckout,
) -> v1::AgentWorkspaceGitCheckout {
v1::AgentWorkspaceGitCheckout {
url: value.url,
r#ref: value.r#ref,
path: value.path,
}
}
pub(crate) fn to_wire_cancel_agent_provider_turn_request(
value: CancelAgentProviderTurnRequest,
) -> v1::CancelAgentProviderTurnRequest {
v1::CancelAgentProviderTurnRequest {
turn_id: value.turn_id,
reason: value.reason,
subject: value.subject.map(to_wire_subject_context),
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn to_wire_create_agent_provider_session_request(
value: CreateAgentProviderSessionRequest,
) -> v1::CreateAgentProviderSessionRequest {
v1::CreateAgentProviderSessionRequest {
idempotency_key: value.idempotency_key,
model: value.model,
client_ref: value.client_ref,
metadata: value.metadata.map(to_wire_struct),
created_by_subject_id: value.created_by_subject_id,
subject: value.subject.map(to_wire_subject_context),
session_start: value.session_start.map(to_wire_agent_session_start_config),
prepared_workspace: value
.prepared_workspace
.map(to_wire_prepared_agent_workspace),
provider_name: value.provider_name,
workspace: value.workspace.map(to_wire_agent_workspace),
context: value.context.map(to_wire_request_context),
tools: value.tools.map(to_wire_agent_tool_config),
}
}
pub(crate) fn to_wire_create_agent_provider_turn_request(
value: CreateAgentProviderTurnRequest,
) -> v1::CreateAgentProviderTurnRequest {
v1::CreateAgentProviderTurnRequest {
turn_id: value.turn_id,
session_id: value.session_id,
idempotency_key: value.idempotency_key,
model: value.model,
messages: value
.messages
.into_iter()
.map(to_wire_agent_message)
.collect(),
metadata: value.metadata.map(to_wire_struct),
created_by_subject_id: value.created_by_subject_id,
execution_ref: value.execution_ref,
subject: value.subject.map(to_wire_subject_context),
model_options: value.model_options.map(to_wire_struct),
timeout_seconds: value.timeout_seconds,
output: value.output.map(to_wire_agent_output),
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn to_wire_get_agent_provider_capabilities_request(
_value: GetAgentProviderCapabilitiesRequest,
) -> v1::GetAgentProviderCapabilitiesRequest {
v1::GetAgentProviderCapabilitiesRequest {}
}
pub(crate) fn to_wire_get_agent_provider_interaction_request(
value: GetAgentProviderInteractionRequest,
) -> v1::GetAgentProviderInteractionRequest {
v1::GetAgentProviderInteractionRequest {
interaction_id: value.interaction_id,
subject: value.subject.map(to_wire_subject_context),
context: value.context.map(to_wire_request_context),
}
}
pub(crate) fn to_wire_get_agent_provider_session_request(
value: GetAgentProviderSessionRequest,
) -> v1::GetAgentProviderSessionRequest {
v1::GetAgentProviderSessionRequest {
session_id: value.session_id,
subject: value.subject.map(to_wire_subject_context),
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn to_wire_get_agent_provider_turn_request(
value: GetAgentProviderTurnRequest,
) -> v1::GetAgentProviderTurnRequest {
v1::GetAgentProviderTurnRequest {
turn_id: value.turn_id,
subject: value.subject.map(to_wire_subject_context),
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn to_wire_list_agent_provider_interactions_request(
value: ListAgentProviderInteractionsRequest,
) -> v1::ListAgentProviderInteractionsRequest {
v1::ListAgentProviderInteractionsRequest {
turn_id: value.turn_id,
subject: value.subject.map(to_wire_subject_context),
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn from_wire_list_agent_provider_interactions_response(
value: v1::ListAgentProviderInteractionsResponse,
) -> ListAgentProviderInteractionsResponse {
ListAgentProviderInteractionsResponse {
interactions: value
.interactions
.into_iter()
.map(from_wire_agent_interaction)
.collect(),
}
}
pub(crate) fn to_wire_list_agent_provider_sessions_request(
value: ListAgentProviderSessionsRequest,
) -> v1::ListAgentProviderSessionsRequest {
v1::ListAgentProviderSessionsRequest {
subject: value.subject.map(to_wire_subject_context),
session_ids: value.session_ids,
state: value.state,
limit: value.limit,
summary_only: value.summary_only,
provider_name: value.provider_name,
context: value.context.map(to_wire_request_context),
}
}
pub(crate) fn from_wire_list_agent_provider_sessions_response(
value: v1::ListAgentProviderSessionsResponse,
) -> ListAgentProviderSessionsResponse {
ListAgentProviderSessionsResponse {
sessions: value
.sessions
.into_iter()
.map(from_wire_agent_session)
.collect(),
}
}
pub(crate) fn to_wire_list_agent_provider_turn_events_request(
value: ListAgentProviderTurnEventsRequest,
) -> v1::ListAgentProviderTurnEventsRequest {
v1::ListAgentProviderTurnEventsRequest {
turn_id: value.turn_id,
after_seq: value.after_seq,
limit: value.limit,
subject: value.subject.map(to_wire_subject_context),
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn from_wire_list_agent_provider_turn_events_response(
value: v1::ListAgentProviderTurnEventsResponse,
) -> ListAgentProviderTurnEventsResponse {
ListAgentProviderTurnEventsResponse {
events: value
.events
.into_iter()
.map(from_wire_agent_turn_event)
.collect(),
}
}
pub(crate) fn to_wire_list_agent_provider_turns_request(
value: ListAgentProviderTurnsRequest,
) -> v1::ListAgentProviderTurnsRequest {
v1::ListAgentProviderTurnsRequest {
session_id: value.session_id,
subject: value.subject.map(to_wire_subject_context),
turn_ids: value.turn_ids,
status: value.status,
limit: value.limit,
summary_only: value.summary_only,
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn from_wire_list_agent_provider_turns_response(
value: v1::ListAgentProviderTurnsResponse,
) -> ListAgentProviderTurnsResponse {
ListAgentProviderTurnsResponse {
turns: value.turns.into_iter().map(from_wire_agent_turn).collect(),
}
}
pub(crate) fn to_wire_listed_agent_tool(value: ListedAgentTool) -> v1::ListedAgentTool {
v1::ListedAgentTool {
id: value.id,
mcp_name: value.mcp_name,
title: value.title,
description: value.description,
input_schema: value.input_schema,
output_schema: value.output_schema,
annotations: value.annotations.map(to_wire_operation_annotations),
r#ref: value.r#ref.map(to_wire_agent_tool_ref),
tags: value.tags,
search_text: value.search_text,
}
}
pub(crate) fn to_wire_prepared_agent_workspace(
value: PreparedAgentWorkspace,
) -> v1::PreparedAgentWorkspace {
v1::PreparedAgentWorkspace {
root: value.root,
cwd: value.cwd,
}
}
pub(crate) fn from_wire_prepared_agent_workspace(
value: v1::PreparedAgentWorkspace,
) -> PreparedAgentWorkspace {
PreparedAgentWorkspace {
root: value.root,
cwd: value.cwd,
}
}
pub(crate) fn to_wire_resolve_agent_provider_interaction_request(
value: ResolveAgentProviderInteractionRequest,
) -> v1::ResolveAgentProviderInteractionRequest {
v1::ResolveAgentProviderInteractionRequest {
interaction_id: value.interaction_id,
resolution: value.resolution.map(to_wire_struct),
subject: value.subject.map(to_wire_subject_context),
turn_id: value.turn_id,
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}
pub(crate) fn to_wire_update_agent_provider_session_request(
value: UpdateAgentProviderSessionRequest,
) -> v1::UpdateAgentProviderSessionRequest {
v1::UpdateAgentProviderSessionRequest {
session_id: value.session_id,
client_ref: value.client_ref,
state: value.state,
metadata: value.metadata.map(to_wire_struct),
subject: value.subject.map(to_wire_subject_context),
context: value.context.map(to_wire_request_context),
provider_name: value.provider_name,
}
}