Skip to main content

gestalt/
agent.rs

1// Code generated by sdkgen. DO NOT EDIT.
2
3//! Generated native types and clients for agent.proto.
4
5use crate::app::{AgentToolRef, OperationAnnotations, RequestContext, SubjectContext};
6use crate::codec::agent::{
7    from_wire_agent_interaction, from_wire_agent_provider_capabilities, from_wire_agent_session,
8    from_wire_agent_turn, from_wire_list_agent_provider_interactions_response,
9    from_wire_list_agent_provider_sessions_response,
10    from_wire_list_agent_provider_turn_events_response,
11    from_wire_list_agent_provider_turns_response, to_wire_cancel_agent_provider_turn_request,
12    to_wire_create_agent_provider_session_request, to_wire_create_agent_provider_turn_request,
13    to_wire_get_agent_provider_capabilities_request,
14    to_wire_get_agent_provider_interaction_request, to_wire_get_agent_provider_session_request,
15    to_wire_get_agent_provider_turn_request, to_wire_list_agent_provider_interactions_request,
16    to_wire_list_agent_provider_sessions_request, to_wire_list_agent_provider_turn_events_request,
17    to_wire_list_agent_provider_turns_request, to_wire_resolve_agent_provider_interaction_request,
18    to_wire_update_agent_provider_session_request,
19};
20use crate::codec::host_service::{HostServiceChannel, connect_host_service, plain_channel};
21use crate::generated::v1;
22use crate::rpc_support::GestaltError;
23
24/// Open enum for `gestalt.provider.v1.AgentExecutionStatus`; unknown numeric values are preserved.
25pub type AgentExecutionStatus = i32;
26
27/// Named values of `AgentExecutionStatus`.
28pub mod agent_execution_status {
29    /// AGENT_EXECUTION_STATUS_UNSPECIFIED.
30    pub const AGENT_EXECUTION_STATUS_UNSPECIFIED: i32 = 0;
31    /// AGENT_EXECUTION_STATUS_PENDING.
32    pub const AGENT_EXECUTION_STATUS_PENDING: i32 = 1;
33    /// AGENT_EXECUTION_STATUS_RUNNING.
34    pub const AGENT_EXECUTION_STATUS_RUNNING: i32 = 2;
35    /// AGENT_EXECUTION_STATUS_SUCCEEDED.
36    pub const AGENT_EXECUTION_STATUS_SUCCEEDED: i32 = 3;
37    /// AGENT_EXECUTION_STATUS_FAILED.
38    pub const AGENT_EXECUTION_STATUS_FAILED: i32 = 4;
39    /// AGENT_EXECUTION_STATUS_CANCELED.
40    pub const AGENT_EXECUTION_STATUS_CANCELED: i32 = 5;
41    /// AGENT_EXECUTION_STATUS_WAITING_FOR_INPUT.
42    pub const AGENT_EXECUTION_STATUS_WAITING_FOR_INPUT: i32 = 6;
43}
44
45/// Open enum for `gestalt.provider.v1.AgentInteractionState`; unknown numeric values are preserved.
46pub type AgentInteractionState = i32;
47
48/// Named values of `AgentInteractionState`.
49pub mod agent_interaction_state {
50    /// AGENT_INTERACTION_STATE_UNSPECIFIED.
51    pub const AGENT_INTERACTION_STATE_UNSPECIFIED: i32 = 0;
52    /// AGENT_INTERACTION_STATE_PENDING.
53    pub const AGENT_INTERACTION_STATE_PENDING: i32 = 1;
54    /// AGENT_INTERACTION_STATE_RESOLVED.
55    pub const AGENT_INTERACTION_STATE_RESOLVED: i32 = 2;
56    /// AGENT_INTERACTION_STATE_CANCELED.
57    pub const AGENT_INTERACTION_STATE_CANCELED: i32 = 3;
58}
59
60/// Open enum for `gestalt.provider.v1.AgentInteractionType`; unknown numeric values are preserved.
61pub type AgentInteractionType = i32;
62
63/// Named values of `AgentInteractionType`.
64pub mod agent_interaction_type {
65    /// AGENT_INTERACTION_TYPE_UNSPECIFIED.
66    pub const AGENT_INTERACTION_TYPE_UNSPECIFIED: i32 = 0;
67    /// AGENT_INTERACTION_TYPE_APPROVAL.
68    pub const AGENT_INTERACTION_TYPE_APPROVAL: i32 = 1;
69    /// AGENT_INTERACTION_TYPE_CLARIFICATION.
70    pub const AGENT_INTERACTION_TYPE_CLARIFICATION: i32 = 2;
71    /// AGENT_INTERACTION_TYPE_INPUT.
72    pub const AGENT_INTERACTION_TYPE_INPUT: i32 = 3;
73}
74
75/// Open enum for `gestalt.provider.v1.AgentMessagePartType`; unknown numeric values are preserved.
76pub type AgentMessagePartType = i32;
77
78/// Named values of `AgentMessagePartType`.
79pub mod agent_message_part_type {
80    /// AGENT_MESSAGE_PART_TYPE_UNSPECIFIED.
81    pub const AGENT_MESSAGE_PART_TYPE_UNSPECIFIED: i32 = 0;
82    /// AGENT_MESSAGE_PART_TYPE_TEXT.
83    pub const AGENT_MESSAGE_PART_TYPE_TEXT: i32 = 1;
84    /// AGENT_MESSAGE_PART_TYPE_JSON.
85    pub const AGENT_MESSAGE_PART_TYPE_JSON: i32 = 2;
86    /// AGENT_MESSAGE_PART_TYPE_TOOL_CALL.
87    pub const AGENT_MESSAGE_PART_TYPE_TOOL_CALL: i32 = 3;
88    /// AGENT_MESSAGE_PART_TYPE_TOOL_RESULT.
89    pub const AGENT_MESSAGE_PART_TYPE_TOOL_RESULT: i32 = 4;
90    /// AGENT_MESSAGE_PART_TYPE_IMAGE_REF.
91    pub const AGENT_MESSAGE_PART_TYPE_IMAGE_REF: i32 = 5;
92}
93
94/// Open enum for `gestalt.provider.v1.AgentSessionState`; unknown numeric values are preserved.
95pub type AgentSessionState = i32;
96
97/// Named values of `AgentSessionState`.
98pub mod agent_session_state {
99    /// AGENT_SESSION_STATE_UNSPECIFIED.
100    pub const AGENT_SESSION_STATE_UNSPECIFIED: i32 = 0;
101    /// AGENT_SESSION_STATE_ACTIVE.
102    pub const AGENT_SESSION_STATE_ACTIVE: i32 = 1;
103    /// AGENT_SESSION_STATE_ARCHIVED.
104    pub const AGENT_SESSION_STATE_ARCHIVED: i32 = 2;
105}
106
107/// Open enum for `gestalt.provider.v1.AgentToolSourceMode`; unknown numeric values are preserved.
108pub type AgentToolSourceMode = i32;
109
110/// Named values of `AgentToolSourceMode`.
111pub mod agent_tool_source_mode {
112    /// AGENT_TOOL_SOURCE_MODE_UNSPECIFIED.
113    pub const AGENT_TOOL_SOURCE_MODE_UNSPECIFIED: i32 = 0;
114    /// AGENT_TOOL_SOURCE_MODE_CATALOG.
115    pub const AGENT_TOOL_SOURCE_MODE_CATALOG: i32 = 2;
116    /// AGENT_TOOL_SOURCE_MODE_NONE.
117    pub const AGENT_TOOL_SOURCE_MODE_NONE: i32 = 3;
118}
119
120/// Native message type for `gestalt.provider.v1.AgentCatalogToolConfig`.
121#[derive(Clone, Debug, Default, PartialEq)]
122pub struct AgentCatalogToolConfig {
123    /// The `refs` field.
124    pub refs: Vec<AgentToolRef>,
125    /// The `tools` field.
126    pub tools: Vec<ListedAgentTool>,
127}
128
129/// Native message type for `gestalt.provider.v1.AgentInteraction`.
130#[derive(Clone, Debug, Default, PartialEq)]
131pub struct AgentInteraction {
132    /// The `id` field.
133    pub id: String,
134    /// The `type` field.
135    pub r#type: AgentInteractionType,
136    /// The `state` field.
137    pub state: AgentInteractionState,
138    /// The `title` field.
139    pub title: String,
140    /// The `prompt` field.
141    pub prompt: String,
142    /// The `request` field; None when unset.
143    pub request: Option<serde_json::Map<String, serde_json::Value>>,
144    /// The `resolution` field; None when unset.
145    pub resolution: Option<serde_json::Map<String, serde_json::Value>>,
146    /// The `created_at` field; None when unset.
147    pub created_at: Option<std::time::SystemTime>,
148    /// The `resolved_at` field; None when unset.
149    pub resolved_at: Option<std::time::SystemTime>,
150    /// The `turn_id` field.
151    pub turn_id: String,
152    /// The `session_id` field.
153    pub session_id: String,
154}
155
156/// Native message type for `gestalt.provider.v1.AgentMessage`.
157#[derive(Clone, Debug, Default, PartialEq)]
158pub struct AgentMessage {
159    /// The `role` field.
160    pub role: String,
161    /// The `text` field.
162    pub text: String,
163    /// The `parts` field.
164    pub parts: Vec<AgentMessagePart>,
165    /// The `metadata` field; None when unset.
166    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
167}
168
169/// Native message type for `gestalt.provider.v1.AgentMessagePart`.
170#[derive(Clone, Debug, Default, PartialEq)]
171pub struct AgentMessagePart {
172    /// The `type` field.
173    pub r#type: AgentMessagePartType,
174    /// The `text` field.
175    pub text: String,
176    /// The `json` field; None when unset.
177    pub json: Option<serde_json::Map<String, serde_json::Value>>,
178    /// The `tool_call` field; None when unset.
179    pub tool_call: Option<AgentMessagePartToolCall>,
180    /// The `tool_result` field; None when unset.
181    pub tool_result: Option<AgentMessagePartToolResult>,
182    /// The `image_ref` field; None when unset.
183    pub image_ref: Option<AgentMessagePartImageRef>,
184}
185
186/// Native message type for `gestalt.provider.v1.AgentMessagePartImageRef`.
187#[derive(Clone, Debug, Default, PartialEq)]
188pub struct AgentMessagePartImageRef {
189    /// The `uri` field.
190    pub uri: String,
191    /// The `mime_type` field.
192    pub mime_type: String,
193}
194
195/// Native message type for `gestalt.provider.v1.AgentMessagePartToolCall`.
196#[derive(Clone, Debug, Default, PartialEq)]
197pub struct AgentMessagePartToolCall {
198    /// The `id` field.
199    pub id: String,
200    /// The `tool_id` field.
201    pub tool_id: String,
202    /// The `arguments` field; None when unset.
203    pub arguments: Option<serde_json::Map<String, serde_json::Value>>,
204}
205
206/// Native message type for `gestalt.provider.v1.AgentMessagePartToolResult`.
207#[derive(Clone, Debug, Default, PartialEq)]
208pub struct AgentMessagePartToolResult {
209    /// The `tool_call_id` field.
210    pub tool_call_id: String,
211    /// The `status` field.
212    pub status: i32,
213    /// The `content` field.
214    pub content: String,
215    /// The `output` field; None when unset.
216    pub output: Option<serde_json::Map<String, serde_json::Value>>,
217}
218
219/// Native message type for `gestalt.provider.v1.AgentNoTools`.
220#[derive(Clone, Debug, Default, PartialEq)]
221pub struct AgentNoTools {}
222
223/// Values of the `kind` oneof in `AgentOutput`; the message field is None when unset.
224#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
225#[derive(Clone, Debug, PartialEq)]
226pub enum AgentOutputKind {
227    /// The `text` variant.
228    Text(AgentTextOutput),
229    /// The `structured` variant.
230    Structured(AgentStructuredOutput),
231}
232
233/// Native message type for `gestalt.provider.v1.AgentOutput`.
234#[derive(Clone, Debug, Default, PartialEq)]
235pub struct AgentOutput {
236    /// The `kind` oneof; None when unset.
237    pub kind: Option<AgentOutputKind>,
238}
239
240/// Native message type for `gestalt.provider.v1.AgentProviderCapabilities`.
241#[derive(Clone, Debug, Default, PartialEq)]
242pub struct AgentProviderCapabilities {
243    /// The `streaming_text` field.
244    pub streaming_text: bool,
245    /// The `tool_calls` field.
246    pub tool_calls: bool,
247    /// The `parallel_tool_calls` field.
248    pub parallel_tool_calls: bool,
249    /// The `interactions` field.
250    pub interactions: bool,
251    /// The `resumable_turns` field.
252    pub resumable_turns: bool,
253    /// The `reasoning_summaries` field.
254    pub reasoning_summaries: bool,
255    /// Provider list APIs can apply non-zero limits and summary projections without
256    /// hydrating every source record. Providers that set this must order sessions
257    /// and turns by the relevant newest-first recency fields before applying limit.
258    ///
259    /// The `bounded_list_hydration` field.
260    pub bounded_list_hydration: bool,
261    /// The `supported_tool_sources` field.
262    pub supported_tool_sources: Vec<AgentToolSourceMode>,
263    /// The `supports_session_start` field.
264    pub supports_session_start: bool,
265    /// The `supports_prepared_workspace` field.
266    pub supports_prepared_workspace: bool,
267}
268
269/// Native message type for `gestalt.provider.v1.AgentSession`.
270#[derive(Clone, Debug, Default, PartialEq)]
271pub struct AgentSession {
272    /// The `id` field.
273    pub id: String,
274    /// The `provider_name` field.
275    pub provider_name: String,
276    /// The `model` field.
277    pub model: String,
278    /// The `client_ref` field.
279    pub client_ref: String,
280    /// The `state` field.
281    pub state: AgentSessionState,
282    /// The `metadata` field; None when unset.
283    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
284    /// The `created_by_subject_id` field.
285    pub created_by_subject_id: String,
286    /// The `created_at` field; None when unset.
287    pub created_at: Option<std::time::SystemTime>,
288    /// The `updated_at` field; None when unset.
289    pub updated_at: Option<std::time::SystemTime>,
290    /// The `last_turn_at` field; None when unset.
291    pub last_turn_at: Option<std::time::SystemTime>,
292}
293
294/// Native message type for `gestalt.provider.v1.AgentSessionStartConfig`.
295#[derive(Clone, Debug, Default, PartialEq)]
296pub struct AgentSessionStartConfig {
297    /// The `hooks` field.
298    pub hooks: Vec<AgentSessionStartHook>,
299}
300
301/// Native message type for `gestalt.provider.v1.AgentSessionStartHook`.
302#[derive(Clone, Debug, Default, PartialEq)]
303pub struct AgentSessionStartHook {
304    /// The `id` field.
305    pub id: String,
306    /// The `type` field.
307    pub r#type: String,
308    /// The `command` field.
309    pub command: Vec<String>,
310    /// The `cwd` field.
311    pub cwd: String,
312    /// The `timeout` field.
313    pub timeout: String,
314    /// The `env` field.
315    pub env: std::collections::BTreeMap<String, String>,
316    /// The `output` field; None when unset.
317    pub output: Option<AgentSessionStartHookOutput>,
318}
319
320/// Native message type for `gestalt.provider.v1.AgentSessionStartHookOutput`.
321#[derive(Clone, Debug, Default, PartialEq)]
322pub struct AgentSessionStartHookOutput {
323    /// The `additional_context` field.
324    pub additional_context: bool,
325    /// The `metadata` field.
326    pub metadata: bool,
327}
328
329/// Native message type for `gestalt.provider.v1.AgentStructuredOutput`.
330#[derive(Clone, Debug, Default, PartialEq)]
331pub struct AgentStructuredOutput {
332    /// The `schema` field; None when unset.
333    pub schema: Option<serde_json::Map<String, serde_json::Value>>,
334}
335
336/// Native message type for `gestalt.provider.v1.AgentTextOutput`.
337#[derive(Clone, Debug, Default, PartialEq)]
338pub struct AgentTextOutput {}
339
340/// Values of the `source` oneof in `AgentToolConfig`; the message field is None when unset.
341#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
342#[derive(Clone, Debug, PartialEq)]
343pub enum AgentToolConfigSource {
344    /// The `none` variant.
345    None(AgentNoTools),
346    /// The `catalog` variant.
347    Catalog(AgentCatalogToolConfig),
348}
349
350/// Native message type for `gestalt.provider.v1.AgentToolConfig`.
351#[derive(Clone, Debug, Default, PartialEq)]
352pub struct AgentToolConfig {
353    /// The `source` oneof; None when unset.
354    pub source: Option<AgentToolConfigSource>,
355}
356
357/// Values of the `output` oneof in `AgentTurn`; the message field is None when unset.
358#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
359#[derive(Clone, Debug, PartialEq)]
360pub enum AgentTurnOutput {
361    /// The `text` variant.
362    Text(AgentTurnTextOutput),
363    /// The `structured` variant.
364    Structured(AgentTurnStructuredOutput),
365}
366
367/// Native message type for `gestalt.provider.v1.AgentTurn`.
368#[derive(Clone, Debug, Default, PartialEq)]
369pub struct AgentTurn {
370    /// The `id` field.
371    pub id: String,
372    /// The `session_id` field.
373    pub session_id: String,
374    /// The `provider_name` field.
375    pub provider_name: String,
376    /// The `model` field.
377    pub model: String,
378    /// The `status` field.
379    pub status: AgentExecutionStatus,
380    /// The `messages` field.
381    pub messages: Vec<AgentMessage>,
382    /// The `status_message` field.
383    pub status_message: String,
384    /// The `created_by_subject_id` field.
385    pub created_by_subject_id: String,
386    /// The `created_at` field; None when unset.
387    pub created_at: Option<std::time::SystemTime>,
388    /// The `started_at` field; None when unset.
389    pub started_at: Option<std::time::SystemTime>,
390    /// The `completed_at` field; None when unset.
391    pub completed_at: Option<std::time::SystemTime>,
392    /// The `execution_ref` field.
393    pub execution_ref: String,
394    /// The `output` oneof; None when unset.
395    pub output: Option<AgentTurnOutput>,
396}
397
398/// Native message type for `gestalt.provider.v1.AgentTurnDisplay`.
399#[derive(Clone, Debug, Default, PartialEq)]
400pub struct AgentTurnDisplay {
401    /// The `kind` field.
402    pub kind: String,
403    /// The `phase` field.
404    pub phase: String,
405    /// The `text` field.
406    pub text: String,
407    /// The `label` field.
408    pub label: String,
409    /// The `ref` field.
410    pub r#ref: String,
411    /// The `parent_ref` field.
412    pub parent_ref: String,
413    /// The `input` field; None when unset.
414    pub input: Option<serde_json::Value>,
415    /// The `output` field; None when unset.
416    pub output: Option<serde_json::Value>,
417    /// The `error` field; None when unset.
418    pub error: Option<serde_json::Value>,
419    /// The `action` field.
420    pub action: String,
421    /// The `format` field.
422    pub format: String,
423    /// The `language` field.
424    pub language: String,
425}
426
427/// Native message type for `gestalt.provider.v1.AgentTurnEvent`.
428#[derive(Clone, Debug, Default, PartialEq)]
429pub struct AgentTurnEvent {
430    /// The `id` field.
431    pub id: String,
432    /// The `turn_id` field.
433    pub turn_id: String,
434    /// The `seq` field.
435    pub seq: i64,
436    /// The `type` field.
437    pub r#type: String,
438    /// The `source` field.
439    pub source: String,
440    /// The `visibility` field.
441    pub visibility: String,
442    /// The `data` field; None when unset.
443    pub data: Option<serde_json::Map<String, serde_json::Value>>,
444    /// The `created_at` field; None when unset.
445    pub created_at: Option<std::time::SystemTime>,
446    /// The `display` field; None when unset.
447    pub display: Option<AgentTurnDisplay>,
448}
449
450/// Native message type for `gestalt.provider.v1.AgentTurnStructuredOutput`.
451#[derive(Clone, Debug, Default, PartialEq)]
452pub struct AgentTurnStructuredOutput {
453    /// The `text` field.
454    pub text: String,
455    /// The `value` field; None when unset.
456    pub value: Option<serde_json::Map<String, serde_json::Value>>,
457}
458
459/// Native message type for `gestalt.provider.v1.AgentTurnTextOutput`.
460#[derive(Clone, Debug, Default, PartialEq)]
461pub struct AgentTurnTextOutput {
462    /// The `text` field.
463    pub text: String,
464}
465
466/// Native message type for `gestalt.provider.v1.AgentWorkspace`.
467#[derive(Clone, Debug, Default, PartialEq)]
468pub struct AgentWorkspace {
469    /// The `checkouts` field.
470    pub checkouts: Vec<AgentWorkspaceGitCheckout>,
471    /// The `cwd` field.
472    pub cwd: String,
473}
474
475/// Native message type for `gestalt.provider.v1.AgentWorkspaceGitCheckout`.
476#[derive(Clone, Debug, Default, PartialEq)]
477pub struct AgentWorkspaceGitCheckout {
478    /// The `url` field.
479    pub url: String,
480    /// The `ref` field.
481    pub r#ref: String,
482    /// The `path` field.
483    pub path: String,
484}
485
486/// Native message type for `gestalt.provider.v1.CancelAgentProviderTurnRequest`.
487#[derive(Clone, Debug, Default, PartialEq)]
488pub struct CancelAgentProviderTurnRequest {
489    /// The `turn_id` field.
490    pub turn_id: String,
491    /// The `reason` field.
492    pub reason: String,
493    /// The `subject` field; None when unset.
494    pub subject: Option<SubjectContext>,
495    /// The `context` field; None when unset.
496    pub context: Option<RequestContext>,
497    /// The `provider_name` field.
498    pub provider_name: String,
499}
500
501/// Native message type for `gestalt.provider.v1.CreateAgentProviderSessionRequest`.
502#[derive(Clone, Debug, Default, PartialEq)]
503pub struct CreateAgentProviderSessionRequest {
504    /// The provider mints the session id returned on AgentSession. Creation is
505    /// idempotent on idempotency_key scoped per subject (created_by_subject_id):
506    /// a replayed key returns the existing session, an empty key always creates.
507    /// Idempotency is scoped to the provider's session store.
508    ///
509    /// The `idempotency_key` field.
510    pub idempotency_key: String,
511    /// The `model` field.
512    pub model: String,
513    /// The `client_ref` field.
514    pub client_ref: String,
515    /// The `metadata` field; None when unset.
516    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
517    /// The `created_by_subject_id` field.
518    pub created_by_subject_id: String,
519    /// The `subject` field; None when unset.
520    pub subject: Option<SubjectContext>,
521    /// The `session_start` field; None when unset.
522    pub session_start: Option<AgentSessionStartConfig>,
523    /// The `prepared_workspace` field; None when unset.
524    pub prepared_workspace: Option<PreparedAgentWorkspace>,
525    /// The `provider_name` field.
526    pub provider_name: String,
527    /// The `workspace` field; None when unset.
528    pub workspace: Option<AgentWorkspace>,
529    /// The `context` field; None when unset.
530    pub context: Option<RequestContext>,
531    /// The `tools` field; None when unset.
532    pub tools: Option<AgentToolConfig>,
533}
534
535/// Native message type for `gestalt.provider.v1.CreateAgentProviderTurnRequest`.
536#[derive(Clone, Debug, Default, PartialEq)]
537pub struct CreateAgentProviderTurnRequest {
538    /// The `turn_id` field.
539    pub turn_id: String,
540    /// The `session_id` field.
541    pub session_id: String,
542    /// The `idempotency_key` field.
543    pub idempotency_key: String,
544    /// The `model` field.
545    pub model: String,
546    /// The `messages` field.
547    pub messages: Vec<AgentMessage>,
548    /// The `metadata` field; None when unset.
549    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
550    /// The `created_by_subject_id` field.
551    pub created_by_subject_id: String,
552    /// The `execution_ref` field.
553    pub execution_ref: String,
554    /// The `subject` field; None when unset.
555    pub subject: Option<SubjectContext>,
556    /// The `model_options` field; None when unset.
557    pub model_options: Option<serde_json::Map<String, serde_json::Value>>,
558    /// Optional provider-owned turn execution budget, in seconds.
559    /// If unset or zero, the provider chooses its own execution timeout. This does
560    /// not control the CreateTurn RPC deadline.
561    ///
562    /// The `timeout_seconds` field.
563    pub timeout_seconds: i32,
564    /// The `output` field; None when unset.
565    pub output: Option<AgentOutput>,
566    /// The `context` field; None when unset.
567    pub context: Option<RequestContext>,
568    /// The `provider_name` field.
569    pub provider_name: String,
570}
571
572/// Native message type for `gestalt.provider.v1.GetAgentProviderCapabilitiesRequest`.
573#[derive(Clone, Debug, Default, PartialEq)]
574pub struct GetAgentProviderCapabilitiesRequest {}
575
576/// Native message type for `gestalt.provider.v1.GetAgentProviderInteractionRequest`.
577#[derive(Clone, Debug, Default, PartialEq)]
578pub struct GetAgentProviderInteractionRequest {
579    /// The `interaction_id` field.
580    pub interaction_id: String,
581    /// The `subject` field; None when unset.
582    pub subject: Option<SubjectContext>,
583    /// The `context` field; None when unset.
584    pub context: Option<RequestContext>,
585}
586
587/// Native message type for `gestalt.provider.v1.GetAgentProviderSessionRequest`.
588#[derive(Clone, Debug, Default, PartialEq)]
589pub struct GetAgentProviderSessionRequest {
590    /// The `session_id` field.
591    pub session_id: String,
592    /// The `subject` field; None when unset.
593    pub subject: Option<SubjectContext>,
594    /// The `context` field; None when unset.
595    pub context: Option<RequestContext>,
596    /// The `provider_name` field.
597    pub provider_name: String,
598}
599
600/// Native message type for `gestalt.provider.v1.GetAgentProviderTurnRequest`.
601#[derive(Clone, Debug, Default, PartialEq)]
602pub struct GetAgentProviderTurnRequest {
603    /// The `turn_id` field.
604    pub turn_id: String,
605    /// The `subject` field; None when unset.
606    pub subject: Option<SubjectContext>,
607    /// The `context` field; None when unset.
608    pub context: Option<RequestContext>,
609    /// The `provider_name` field.
610    pub provider_name: String,
611}
612
613/// Native message type for `gestalt.provider.v1.ListAgentProviderInteractionsRequest`.
614#[derive(Clone, Debug, Default, PartialEq)]
615pub struct ListAgentProviderInteractionsRequest {
616    /// The `turn_id` field.
617    pub turn_id: String,
618    /// The `subject` field; None when unset.
619    pub subject: Option<SubjectContext>,
620    /// The `context` field; None when unset.
621    pub context: Option<RequestContext>,
622    /// The `provider_name` field.
623    pub provider_name: String,
624}
625
626/// Native message type for `gestalt.provider.v1.ListAgentProviderInteractionsResponse`.
627#[derive(Clone, Debug, Default, PartialEq)]
628pub struct ListAgentProviderInteractionsResponse {
629    /// The `interactions` field.
630    pub interactions: Vec<AgentInteraction>,
631}
632
633/// Native message type for `gestalt.provider.v1.ListAgentProviderSessionsRequest`.
634#[derive(Clone, Debug, Default, PartialEq)]
635pub struct ListAgentProviderSessionsRequest {
636    /// The `subject` field; None when unset.
637    pub subject: Option<SubjectContext>,
638    /// The `session_ids` field.
639    pub session_ids: Vec<String>,
640    /// The `state` field.
641    pub state: AgentSessionState,
642    /// When non-zero and bounded_list_hydration is supported, cap results after
643    /// ordering sessions newest-first by last_turn_at, updated_at, then created_at.
644    ///
645    /// The `limit` field.
646    pub limit: i32,
647    /// When true and bounded_list_hydration is supported, omit heavy fields such as
648    /// metadata unless exact session_ids require direct lookup.
649    ///
650    /// The `summary_only` field.
651    pub summary_only: bool,
652    /// The `provider_name` field.
653    pub provider_name: String,
654    /// The `context` field; None when unset.
655    pub context: Option<RequestContext>,
656}
657
658/// Native message type for `gestalt.provider.v1.ListAgentProviderSessionsResponse`.
659#[derive(Clone, Debug, Default, PartialEq)]
660pub struct ListAgentProviderSessionsResponse {
661    /// The `sessions` field.
662    pub sessions: Vec<AgentSession>,
663}
664
665/// Native message type for `gestalt.provider.v1.ListAgentProviderTurnEventsRequest`.
666#[derive(Clone, Debug, Default, PartialEq)]
667pub struct ListAgentProviderTurnEventsRequest {
668    /// The `turn_id` field.
669    pub turn_id: String,
670    /// The `after_seq` field.
671    pub after_seq: i64,
672    /// The `limit` field.
673    pub limit: i32,
674    /// The `subject` field; None when unset.
675    pub subject: Option<SubjectContext>,
676    /// The `context` field; None when unset.
677    pub context: Option<RequestContext>,
678    /// The `provider_name` field.
679    pub provider_name: String,
680}
681
682/// Native message type for `gestalt.provider.v1.ListAgentProviderTurnEventsResponse`.
683#[derive(Clone, Debug, Default, PartialEq)]
684pub struct ListAgentProviderTurnEventsResponse {
685    /// The `events` field.
686    pub events: Vec<AgentTurnEvent>,
687}
688
689/// Native message type for `gestalt.provider.v1.ListAgentProviderTurnsRequest`.
690#[derive(Clone, Debug, Default, PartialEq)]
691pub struct ListAgentProviderTurnsRequest {
692    /// The `session_id` field.
693    pub session_id: String,
694    /// The `subject` field; None when unset.
695    pub subject: Option<SubjectContext>,
696    /// The `turn_ids` field.
697    pub turn_ids: Vec<String>,
698    /// The `status` field.
699    pub status: AgentExecutionStatus,
700    /// When non-zero and bounded_list_hydration is supported, cap results after
701    /// ordering turns newest-first by created_at.
702    ///
703    /// The `limit` field.
704    pub limit: i32,
705    /// When true and bounded_list_hydration is supported, omit heavy fields such as
706    /// messages, output text, and structured output unless exact turn_ids require
707    /// direct lookup.
708    ///
709    /// The `summary_only` field.
710    pub summary_only: bool,
711    /// The `context` field; None when unset.
712    pub context: Option<RequestContext>,
713    /// The `provider_name` field.
714    pub provider_name: String,
715}
716
717/// Native message type for `gestalt.provider.v1.ListAgentProviderTurnsResponse`.
718#[derive(Clone, Debug, Default, PartialEq)]
719pub struct ListAgentProviderTurnsResponse {
720    /// The `turns` field.
721    pub turns: Vec<AgentTurn>,
722}
723
724/// Native message type for `gestalt.provider.v1.ListedAgentTool`.
725#[derive(Clone, Debug, Default, PartialEq)]
726pub struct ListedAgentTool {
727    /// The `id` field.
728    pub id: String,
729    /// The `mcp_name` field.
730    pub mcp_name: String,
731    /// The `title` field.
732    pub title: String,
733    /// The `description` field.
734    pub description: String,
735    /// The `input_schema` field.
736    pub input_schema: String,
737    /// The `output_schema` field.
738    pub output_schema: String,
739    /// The `annotations` field; None when unset.
740    pub annotations: Option<OperationAnnotations>,
741    /// The `ref` field; None when unset.
742    pub r#ref: Option<AgentToolRef>,
743    /// The `tags` field.
744    pub tags: Vec<String>,
745    /// The `search_text` field.
746    pub search_text: String,
747}
748
749/// Native message type for `gestalt.provider.v1.PreparedAgentWorkspace`.
750#[derive(Clone, Debug, Default, PartialEq)]
751pub struct PreparedAgentWorkspace {
752    /// The `root` field.
753    pub root: String,
754    /// The `cwd` field.
755    pub cwd: String,
756}
757
758/// Native message type for `gestalt.provider.v1.ResolveAgentProviderInteractionRequest`.
759#[derive(Clone, Debug, Default, PartialEq)]
760pub struct ResolveAgentProviderInteractionRequest {
761    /// The `interaction_id` field.
762    pub interaction_id: String,
763    /// The `resolution` field; None when unset.
764    pub resolution: Option<serde_json::Map<String, serde_json::Value>>,
765    /// The `subject` field; None when unset.
766    pub subject: Option<SubjectContext>,
767    /// The `turn_id` field.
768    pub turn_id: String,
769    /// The `context` field; None when unset.
770    pub context: Option<RequestContext>,
771    /// The `provider_name` field.
772    pub provider_name: String,
773}
774
775/// Native message type for `gestalt.provider.v1.UpdateAgentProviderSessionRequest`.
776#[derive(Clone, Debug, Default, PartialEq)]
777pub struct UpdateAgentProviderSessionRequest {
778    /// The `session_id` field.
779    pub session_id: String,
780    /// The `client_ref` field.
781    pub client_ref: String,
782    /// The `state` field.
783    pub state: AgentSessionState,
784    /// The `metadata` field; None when unset.
785    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
786    /// The `subject` field; None when unset.
787    pub subject: Option<SubjectContext>,
788    /// The `context` field; None when unset.
789    pub context: Option<RequestContext>,
790    /// The `provider_name` field.
791    pub provider_name: String,
792}
793
794/// Agent is the authoritative agent data boundary. Read RPCs for
795/// sessions, turns, turn events, and interactions should use provider-owned
796/// control-plane state and should not require a live execution sandbox,
797/// pod-level transport, or cached tunnel.
798///
799/// Client for the `gestalt.provider.v1.Agent` service.
800pub struct Agent {
801    inner: v1::agent_client::AgentClient<HostServiceChannel>,
802    timeout: Option<std::time::Duration>,
803    context: Option<RequestContext>,
804}
805
806impl Agent {
807    /// Creates a client over an established channel.
808    pub fn new(channel: tonic::transport::Channel) -> Self {
809        Self {
810            inner: v1::agent_client::AgentClient::new(plain_channel(channel)),
811            timeout: None,
812            context: None,
813        }
814    }
815
816    /// Sets a deadline applied to every unary call; calls that run past it
817    /// fail with DEADLINE_EXCEEDED. Streaming calls are unaffected.
818    pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
819        self.timeout = Some(timeout);
820        self
821    }
822
823    /// Sets the default request context, injected into outgoing requests
824    /// that do not carry one.
825    pub fn with_context(mut self, context: RequestContext) -> Self {
826        self.context = Some(context);
827        self
828    }
829
830    /// Connects to the `agent` host service described by the environment.
831    pub async fn connect() -> Result<Self, GestaltError> {
832        Self::connect_named("").await
833    }
834
835    /// Connects to the named `agent` host-service binding.
836    pub async fn connect_named(name: &str) -> Result<Self, GestaltError> {
837        Ok(Self {
838            inner: v1::agent_client::AgentClient::new(connect_host_service("agent", name).await?),
839            timeout: None,
840            context: None,
841        })
842    }
843
844    /// Calls `gestalt.provider.v1.Agent.CreateSession`.
845    pub async fn create_session(
846        &mut self,
847        idempotency_key: String,
848        model: String,
849        options: AgentCreateSessionOptions,
850    ) -> Result<AgentSession, GestaltError> {
851        let request = CreateAgentProviderSessionRequest {
852            idempotency_key,
853            model,
854            provider_name: options.provider_name,
855            client_ref: options.client_ref,
856            metadata: options.metadata,
857            workspace: options.workspace,
858            tools: options.tools,
859            context: self.context.clone(),
860            ..Default::default()
861        };
862        let mut tonic_request =
863            tonic::Request::new(to_wire_create_agent_provider_session_request(request));
864        if let Some(timeout) = self.timeout {
865            tonic_request.set_timeout(timeout);
866        }
867        let response = self.inner.create_session(tonic_request).await?;
868        Ok(from_wire_agent_session(response.into_inner()))
869    }
870
871    /// Calls `gestalt.provider.v1.Agent.CreateSession` with the full request and response messages.
872    pub async fn create_session_raw(
873        &mut self,
874        request: CreateAgentProviderSessionRequest,
875    ) -> Result<AgentSession, GestaltError> {
876        let mut request = request;
877        if request.context.is_none() {
878            request.context = self.context.clone();
879        }
880        let mut tonic_request =
881            tonic::Request::new(to_wire_create_agent_provider_session_request(request));
882        if let Some(timeout) = self.timeout {
883            tonic_request.set_timeout(timeout);
884        }
885        let response = self.inner.create_session(tonic_request).await?;
886        Ok(from_wire_agent_session(response.into_inner()))
887    }
888
889    /// Calls `gestalt.provider.v1.Agent.GetSession`.
890    pub async fn get_session(
891        &mut self,
892        session_id: String,
893        options: AgentGetSessionOptions,
894    ) -> Result<AgentSession, GestaltError> {
895        let request = GetAgentProviderSessionRequest {
896            session_id,
897            provider_name: options.provider_name,
898            context: self.context.clone(),
899            ..Default::default()
900        };
901        let mut tonic_request =
902            tonic::Request::new(to_wire_get_agent_provider_session_request(request));
903        if let Some(timeout) = self.timeout {
904            tonic_request.set_timeout(timeout);
905        }
906        let response = self.inner.get_session(tonic_request).await?;
907        Ok(from_wire_agent_session(response.into_inner()))
908    }
909
910    /// Calls `gestalt.provider.v1.Agent.GetSession` with the full request and response messages.
911    pub async fn get_session_raw(
912        &mut self,
913        request: GetAgentProviderSessionRequest,
914    ) -> Result<AgentSession, GestaltError> {
915        let mut request = request;
916        if request.context.is_none() {
917            request.context = self.context.clone();
918        }
919        let mut tonic_request =
920            tonic::Request::new(to_wire_get_agent_provider_session_request(request));
921        if let Some(timeout) = self.timeout {
922            tonic_request.set_timeout(timeout);
923        }
924        let response = self.inner.get_session(tonic_request).await?;
925        Ok(from_wire_agent_session(response.into_inner()))
926    }
927
928    /// Calls `gestalt.provider.v1.Agent.ListSessions`.
929    pub async fn list_sessions(
930        &mut self,
931        options: AgentListSessionsOptions,
932    ) -> Result<Vec<AgentSession>, GestaltError> {
933        let request = ListAgentProviderSessionsRequest {
934            session_ids: options.session_ids,
935            state: options.state,
936            limit: options.limit,
937            summary_only: options.summary_only,
938            provider_name: options.provider_name,
939            context: self.context.clone(),
940            ..Default::default()
941        };
942        let mut tonic_request =
943            tonic::Request::new(to_wire_list_agent_provider_sessions_request(request));
944        if let Some(timeout) = self.timeout {
945            tonic_request.set_timeout(timeout);
946        }
947        let response = from_wire_list_agent_provider_sessions_response(
948            self.inner.list_sessions(tonic_request).await?.into_inner(),
949        );
950        Ok(response.sessions)
951    }
952
953    /// Calls `gestalt.provider.v1.Agent.ListSessions` with the full request and response messages.
954    pub async fn list_sessions_raw(
955        &mut self,
956        request: ListAgentProviderSessionsRequest,
957    ) -> Result<ListAgentProviderSessionsResponse, GestaltError> {
958        let mut request = request;
959        if request.context.is_none() {
960            request.context = self.context.clone();
961        }
962        let mut tonic_request =
963            tonic::Request::new(to_wire_list_agent_provider_sessions_request(request));
964        if let Some(timeout) = self.timeout {
965            tonic_request.set_timeout(timeout);
966        }
967        let response = self.inner.list_sessions(tonic_request).await?;
968        Ok(from_wire_list_agent_provider_sessions_response(
969            response.into_inner(),
970        ))
971    }
972
973    /// Calls `gestalt.provider.v1.Agent.UpdateSession`.
974    pub async fn update_session(
975        &mut self,
976        session_id: String,
977        options: AgentUpdateSessionOptions,
978    ) -> Result<AgentSession, GestaltError> {
979        let request = UpdateAgentProviderSessionRequest {
980            session_id,
981            client_ref: options.client_ref,
982            state: options.state,
983            provider_name: options.provider_name,
984            metadata: options.metadata,
985            context: self.context.clone(),
986            ..Default::default()
987        };
988        let mut tonic_request =
989            tonic::Request::new(to_wire_update_agent_provider_session_request(request));
990        if let Some(timeout) = self.timeout {
991            tonic_request.set_timeout(timeout);
992        }
993        let response = self.inner.update_session(tonic_request).await?;
994        Ok(from_wire_agent_session(response.into_inner()))
995    }
996
997    /// Calls `gestalt.provider.v1.Agent.UpdateSession` with the full request and response messages.
998    pub async fn update_session_raw(
999        &mut self,
1000        request: UpdateAgentProviderSessionRequest,
1001    ) -> Result<AgentSession, GestaltError> {
1002        let mut request = request;
1003        if request.context.is_none() {
1004            request.context = self.context.clone();
1005        }
1006        let mut tonic_request =
1007            tonic::Request::new(to_wire_update_agent_provider_session_request(request));
1008        if let Some(timeout) = self.timeout {
1009            tonic_request.set_timeout(timeout);
1010        }
1011        let response = self.inner.update_session(tonic_request).await?;
1012        Ok(from_wire_agent_session(response.into_inner()))
1013    }
1014
1015    /// Calls `gestalt.provider.v1.Agent.CreateTurn`.
1016    pub async fn create_turn(
1017        &mut self,
1018        session_id: String,
1019        idempotency_key: String,
1020        model: String,
1021        messages: Vec<AgentMessage>,
1022        options: AgentCreateTurnOptions,
1023    ) -> Result<AgentTurn, GestaltError> {
1024        let request = CreateAgentProviderTurnRequest {
1025            session_id,
1026            idempotency_key,
1027            model,
1028            messages,
1029            execution_ref: options.execution_ref,
1030            timeout_seconds: options.timeout_seconds,
1031            provider_name: options.provider_name,
1032            metadata: options.metadata,
1033            model_options: options.model_options,
1034            output: options.output,
1035            context: self.context.clone(),
1036            ..Default::default()
1037        };
1038        let mut tonic_request =
1039            tonic::Request::new(to_wire_create_agent_provider_turn_request(request));
1040        if let Some(timeout) = self.timeout {
1041            tonic_request.set_timeout(timeout);
1042        }
1043        let response = self.inner.create_turn(tonic_request).await?;
1044        Ok(from_wire_agent_turn(response.into_inner()))
1045    }
1046
1047    /// Calls `gestalt.provider.v1.Agent.CreateTurn` with the full request and response messages.
1048    pub async fn create_turn_raw(
1049        &mut self,
1050        request: CreateAgentProviderTurnRequest,
1051    ) -> Result<AgentTurn, GestaltError> {
1052        let mut request = request;
1053        if request.context.is_none() {
1054            request.context = self.context.clone();
1055        }
1056        let mut tonic_request =
1057            tonic::Request::new(to_wire_create_agent_provider_turn_request(request));
1058        if let Some(timeout) = self.timeout {
1059            tonic_request.set_timeout(timeout);
1060        }
1061        let response = self.inner.create_turn(tonic_request).await?;
1062        Ok(from_wire_agent_turn(response.into_inner()))
1063    }
1064
1065    /// Calls `gestalt.provider.v1.Agent.GetTurn`.
1066    pub async fn get_turn(
1067        &mut self,
1068        turn_id: String,
1069        options: AgentGetTurnOptions,
1070    ) -> Result<AgentTurn, GestaltError> {
1071        let request = GetAgentProviderTurnRequest {
1072            turn_id,
1073            provider_name: options.provider_name,
1074            context: self.context.clone(),
1075            ..Default::default()
1076        };
1077        let mut tonic_request =
1078            tonic::Request::new(to_wire_get_agent_provider_turn_request(request));
1079        if let Some(timeout) = self.timeout {
1080            tonic_request.set_timeout(timeout);
1081        }
1082        let response = self.inner.get_turn(tonic_request).await?;
1083        Ok(from_wire_agent_turn(response.into_inner()))
1084    }
1085
1086    /// Calls `gestalt.provider.v1.Agent.GetTurn` with the full request and response messages.
1087    pub async fn get_turn_raw(
1088        &mut self,
1089        request: GetAgentProviderTurnRequest,
1090    ) -> Result<AgentTurn, GestaltError> {
1091        let mut request = request;
1092        if request.context.is_none() {
1093            request.context = self.context.clone();
1094        }
1095        let mut tonic_request =
1096            tonic::Request::new(to_wire_get_agent_provider_turn_request(request));
1097        if let Some(timeout) = self.timeout {
1098            tonic_request.set_timeout(timeout);
1099        }
1100        let response = self.inner.get_turn(tonic_request).await?;
1101        Ok(from_wire_agent_turn(response.into_inner()))
1102    }
1103
1104    /// Calls `gestalt.provider.v1.Agent.ListTurns`.
1105    pub async fn list_turns(
1106        &mut self,
1107        session_id: String,
1108        options: AgentListTurnsOptions,
1109    ) -> Result<Vec<AgentTurn>, GestaltError> {
1110        let request = ListAgentProviderTurnsRequest {
1111            session_id,
1112            turn_ids: options.turn_ids,
1113            status: options.status,
1114            limit: options.limit,
1115            summary_only: options.summary_only,
1116            provider_name: options.provider_name,
1117            context: self.context.clone(),
1118            ..Default::default()
1119        };
1120        let mut tonic_request =
1121            tonic::Request::new(to_wire_list_agent_provider_turns_request(request));
1122        if let Some(timeout) = self.timeout {
1123            tonic_request.set_timeout(timeout);
1124        }
1125        let response = from_wire_list_agent_provider_turns_response(
1126            self.inner.list_turns(tonic_request).await?.into_inner(),
1127        );
1128        Ok(response.turns)
1129    }
1130
1131    /// Calls `gestalt.provider.v1.Agent.ListTurns` with the full request and response messages.
1132    pub async fn list_turns_raw(
1133        &mut self,
1134        request: ListAgentProviderTurnsRequest,
1135    ) -> Result<ListAgentProviderTurnsResponse, GestaltError> {
1136        let mut request = request;
1137        if request.context.is_none() {
1138            request.context = self.context.clone();
1139        }
1140        let mut tonic_request =
1141            tonic::Request::new(to_wire_list_agent_provider_turns_request(request));
1142        if let Some(timeout) = self.timeout {
1143            tonic_request.set_timeout(timeout);
1144        }
1145        let response = self.inner.list_turns(tonic_request).await?;
1146        Ok(from_wire_list_agent_provider_turns_response(
1147            response.into_inner(),
1148        ))
1149    }
1150
1151    /// Calls `gestalt.provider.v1.Agent.CancelTurn`.
1152    pub async fn cancel_turn(
1153        &mut self,
1154        turn_id: String,
1155        options: AgentCancelTurnOptions,
1156    ) -> Result<AgentTurn, GestaltError> {
1157        let request = CancelAgentProviderTurnRequest {
1158            turn_id,
1159            reason: options.reason,
1160            provider_name: options.provider_name,
1161            context: self.context.clone(),
1162            ..Default::default()
1163        };
1164        let mut tonic_request =
1165            tonic::Request::new(to_wire_cancel_agent_provider_turn_request(request));
1166        if let Some(timeout) = self.timeout {
1167            tonic_request.set_timeout(timeout);
1168        }
1169        let response = self.inner.cancel_turn(tonic_request).await?;
1170        Ok(from_wire_agent_turn(response.into_inner()))
1171    }
1172
1173    /// Calls `gestalt.provider.v1.Agent.CancelTurn` with the full request and response messages.
1174    pub async fn cancel_turn_raw(
1175        &mut self,
1176        request: CancelAgentProviderTurnRequest,
1177    ) -> Result<AgentTurn, GestaltError> {
1178        let mut request = request;
1179        if request.context.is_none() {
1180            request.context = self.context.clone();
1181        }
1182        let mut tonic_request =
1183            tonic::Request::new(to_wire_cancel_agent_provider_turn_request(request));
1184        if let Some(timeout) = self.timeout {
1185            tonic_request.set_timeout(timeout);
1186        }
1187        let response = self.inner.cancel_turn(tonic_request).await?;
1188        Ok(from_wire_agent_turn(response.into_inner()))
1189    }
1190
1191    /// Calls `gestalt.provider.v1.Agent.ListTurnEvents`.
1192    pub async fn list_turn_events(
1193        &mut self,
1194        turn_id: String,
1195        options: AgentListTurnEventsOptions,
1196    ) -> Result<Vec<AgentTurnEvent>, GestaltError> {
1197        let request = ListAgentProviderTurnEventsRequest {
1198            turn_id,
1199            after_seq: options.after_seq,
1200            limit: options.limit,
1201            provider_name: options.provider_name,
1202            context: self.context.clone(),
1203            ..Default::default()
1204        };
1205        let mut tonic_request =
1206            tonic::Request::new(to_wire_list_agent_provider_turn_events_request(request));
1207        if let Some(timeout) = self.timeout {
1208            tonic_request.set_timeout(timeout);
1209        }
1210        let response = from_wire_list_agent_provider_turn_events_response(
1211            self.inner
1212                .list_turn_events(tonic_request)
1213                .await?
1214                .into_inner(),
1215        );
1216        Ok(response.events)
1217    }
1218
1219    /// Calls `gestalt.provider.v1.Agent.ListTurnEvents` with the full request and response messages.
1220    pub async fn list_turn_events_raw(
1221        &mut self,
1222        request: ListAgentProviderTurnEventsRequest,
1223    ) -> Result<ListAgentProviderTurnEventsResponse, GestaltError> {
1224        let mut request = request;
1225        if request.context.is_none() {
1226            request.context = self.context.clone();
1227        }
1228        let mut tonic_request =
1229            tonic::Request::new(to_wire_list_agent_provider_turn_events_request(request));
1230        if let Some(timeout) = self.timeout {
1231            tonic_request.set_timeout(timeout);
1232        }
1233        let response = self.inner.list_turn_events(tonic_request).await?;
1234        Ok(from_wire_list_agent_provider_turn_events_response(
1235            response.into_inner(),
1236        ))
1237    }
1238
1239    /// Calls `gestalt.provider.v1.Agent.GetInteraction`.
1240    pub async fn get_interaction(
1241        &mut self,
1242        interaction_id: String,
1243    ) -> Result<AgentInteraction, GestaltError> {
1244        let request = GetAgentProviderInteractionRequest {
1245            interaction_id,
1246            context: self.context.clone(),
1247            ..Default::default()
1248        };
1249        let mut tonic_request =
1250            tonic::Request::new(to_wire_get_agent_provider_interaction_request(request));
1251        if let Some(timeout) = self.timeout {
1252            tonic_request.set_timeout(timeout);
1253        }
1254        let response = self.inner.get_interaction(tonic_request).await?;
1255        Ok(from_wire_agent_interaction(response.into_inner()))
1256    }
1257
1258    /// Calls `gestalt.provider.v1.Agent.GetInteraction` with the full request and response messages.
1259    pub async fn get_interaction_raw(
1260        &mut self,
1261        request: GetAgentProviderInteractionRequest,
1262    ) -> Result<AgentInteraction, GestaltError> {
1263        let mut request = request;
1264        if request.context.is_none() {
1265            request.context = self.context.clone();
1266        }
1267        let mut tonic_request =
1268            tonic::Request::new(to_wire_get_agent_provider_interaction_request(request));
1269        if let Some(timeout) = self.timeout {
1270            tonic_request.set_timeout(timeout);
1271        }
1272        let response = self.inner.get_interaction(tonic_request).await?;
1273        Ok(from_wire_agent_interaction(response.into_inner()))
1274    }
1275
1276    /// Calls `gestalt.provider.v1.Agent.ListInteractions`.
1277    pub async fn list_interactions(
1278        &mut self,
1279        turn_id: String,
1280        options: AgentListInteractionsOptions,
1281    ) -> Result<Vec<AgentInteraction>, GestaltError> {
1282        let request = ListAgentProviderInteractionsRequest {
1283            turn_id,
1284            provider_name: options.provider_name,
1285            context: self.context.clone(),
1286            ..Default::default()
1287        };
1288        let mut tonic_request =
1289            tonic::Request::new(to_wire_list_agent_provider_interactions_request(request));
1290        if let Some(timeout) = self.timeout {
1291            tonic_request.set_timeout(timeout);
1292        }
1293        let response = from_wire_list_agent_provider_interactions_response(
1294            self.inner
1295                .list_interactions(tonic_request)
1296                .await?
1297                .into_inner(),
1298        );
1299        Ok(response.interactions)
1300    }
1301
1302    /// Calls `gestalt.provider.v1.Agent.ListInteractions` with the full request and response messages.
1303    pub async fn list_interactions_raw(
1304        &mut self,
1305        request: ListAgentProviderInteractionsRequest,
1306    ) -> Result<ListAgentProviderInteractionsResponse, GestaltError> {
1307        let mut request = request;
1308        if request.context.is_none() {
1309            request.context = self.context.clone();
1310        }
1311        let mut tonic_request =
1312            tonic::Request::new(to_wire_list_agent_provider_interactions_request(request));
1313        if let Some(timeout) = self.timeout {
1314            tonic_request.set_timeout(timeout);
1315        }
1316        let response = self.inner.list_interactions(tonic_request).await?;
1317        Ok(from_wire_list_agent_provider_interactions_response(
1318            response.into_inner(),
1319        ))
1320    }
1321
1322    /// Calls `gestalt.provider.v1.Agent.ResolveInteraction`.
1323    pub async fn resolve_interaction(
1324        &mut self,
1325        interaction_id: String,
1326        resolution: Option<serde_json::Map<String, serde_json::Value>>,
1327        options: AgentResolveInteractionOptions,
1328    ) -> Result<AgentInteraction, GestaltError> {
1329        let request = ResolveAgentProviderInteractionRequest {
1330            interaction_id,
1331            resolution,
1332            turn_id: options.turn_id,
1333            provider_name: options.provider_name,
1334            context: self.context.clone(),
1335            ..Default::default()
1336        };
1337        let mut tonic_request =
1338            tonic::Request::new(to_wire_resolve_agent_provider_interaction_request(request));
1339        if let Some(timeout) = self.timeout {
1340            tonic_request.set_timeout(timeout);
1341        }
1342        let response = self.inner.resolve_interaction(tonic_request).await?;
1343        Ok(from_wire_agent_interaction(response.into_inner()))
1344    }
1345
1346    /// Calls `gestalt.provider.v1.Agent.ResolveInteraction` with the full request and response messages.
1347    pub async fn resolve_interaction_raw(
1348        &mut self,
1349        request: ResolveAgentProviderInteractionRequest,
1350    ) -> Result<AgentInteraction, GestaltError> {
1351        let mut request = request;
1352        if request.context.is_none() {
1353            request.context = self.context.clone();
1354        }
1355        let mut tonic_request =
1356            tonic::Request::new(to_wire_resolve_agent_provider_interaction_request(request));
1357        if let Some(timeout) = self.timeout {
1358            tonic_request.set_timeout(timeout);
1359        }
1360        let response = self.inner.resolve_interaction(tonic_request).await?;
1361        Ok(from_wire_agent_interaction(response.into_inner()))
1362    }
1363
1364    /// Calls `gestalt.provider.v1.Agent.GetCapabilities`.
1365    pub async fn get_capabilities(
1366        &mut self,
1367        request: GetAgentProviderCapabilitiesRequest,
1368    ) -> Result<AgentProviderCapabilities, GestaltError> {
1369        let mut tonic_request =
1370            tonic::Request::new(to_wire_get_agent_provider_capabilities_request(request));
1371        if let Some(timeout) = self.timeout {
1372            tonic_request.set_timeout(timeout);
1373        }
1374        let response = self.inner.get_capabilities(tonic_request).await?;
1375        Ok(from_wire_agent_provider_capabilities(response.into_inner()))
1376    }
1377}
1378
1379/// Optional parameters of [`Agent::create_session`]; the default value leaves every
1380/// option unset.
1381#[derive(Clone, Debug, Default)]
1382pub struct AgentCreateSessionOptions {
1383    /// The `provider_name` field.
1384    pub provider_name: String,
1385    /// The `client_ref` field.
1386    pub client_ref: String,
1387    /// The `metadata` field; None when unset.
1388    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
1389    /// The `workspace` field; None when unset.
1390    pub workspace: Option<AgentWorkspace>,
1391    /// The `tools` field; None when unset.
1392    pub tools: Option<AgentToolConfig>,
1393}
1394
1395/// Optional parameters of [`Agent::get_session`]; the default value leaves every
1396/// option unset.
1397#[derive(Clone, Debug, Default)]
1398pub struct AgentGetSessionOptions {
1399    /// The `provider_name` field.
1400    pub provider_name: String,
1401}
1402
1403/// Optional parameters of [`Agent::list_sessions`]; the default value leaves every
1404/// option unset.
1405#[derive(Clone, Debug, Default)]
1406pub struct AgentListSessionsOptions {
1407    /// The `session_ids` field.
1408    pub session_ids: Vec<String>,
1409    /// The `state` field.
1410    pub state: AgentSessionState,
1411    /// When non-zero and bounded_list_hydration is supported, cap results after
1412    /// ordering sessions newest-first by last_turn_at, updated_at, then created_at.
1413    ///
1414    /// The `limit` field.
1415    pub limit: i32,
1416    /// When true and bounded_list_hydration is supported, omit heavy fields such as
1417    /// metadata unless exact session_ids require direct lookup.
1418    ///
1419    /// The `summary_only` field.
1420    pub summary_only: bool,
1421    /// The `provider_name` field.
1422    pub provider_name: String,
1423}
1424
1425/// Optional parameters of [`Agent::update_session`]; the default value leaves every
1426/// option unset.
1427#[derive(Clone, Debug, Default)]
1428pub struct AgentUpdateSessionOptions {
1429    /// The `client_ref` field.
1430    pub client_ref: String,
1431    /// The `state` field.
1432    pub state: AgentSessionState,
1433    /// The `provider_name` field.
1434    pub provider_name: String,
1435    /// The `metadata` field; None when unset.
1436    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
1437}
1438
1439/// Optional parameters of [`Agent::create_turn`]; the default value leaves every
1440/// option unset.
1441#[derive(Clone, Debug, Default)]
1442pub struct AgentCreateTurnOptions {
1443    /// The `execution_ref` field.
1444    pub execution_ref: String,
1445    /// Optional provider-owned turn execution budget, in seconds.
1446    /// If unset or zero, the provider chooses its own execution timeout. This does
1447    /// not control the CreateTurn RPC deadline.
1448    ///
1449    /// The `timeout_seconds` field.
1450    pub timeout_seconds: i32,
1451    /// The `provider_name` field.
1452    pub provider_name: String,
1453    /// The `metadata` field; None when unset.
1454    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
1455    /// The `model_options` field; None when unset.
1456    pub model_options: Option<serde_json::Map<String, serde_json::Value>>,
1457    /// The `output` field; None when unset.
1458    pub output: Option<AgentOutput>,
1459}
1460
1461/// Optional parameters of [`Agent::get_turn`]; the default value leaves every
1462/// option unset.
1463#[derive(Clone, Debug, Default)]
1464pub struct AgentGetTurnOptions {
1465    /// The `provider_name` field.
1466    pub provider_name: String,
1467}
1468
1469/// Optional parameters of [`Agent::list_turns`]; the default value leaves every
1470/// option unset.
1471#[derive(Clone, Debug, Default)]
1472pub struct AgentListTurnsOptions {
1473    /// The `turn_ids` field.
1474    pub turn_ids: Vec<String>,
1475    /// The `status` field.
1476    pub status: AgentExecutionStatus,
1477    /// When non-zero and bounded_list_hydration is supported, cap results after
1478    /// ordering turns newest-first by created_at.
1479    ///
1480    /// The `limit` field.
1481    pub limit: i32,
1482    /// When true and bounded_list_hydration is supported, omit heavy fields such as
1483    /// messages, output text, and structured output unless exact turn_ids require
1484    /// direct lookup.
1485    ///
1486    /// The `summary_only` field.
1487    pub summary_only: bool,
1488    /// The `provider_name` field.
1489    pub provider_name: String,
1490}
1491
1492/// Optional parameters of [`Agent::cancel_turn`]; the default value leaves every
1493/// option unset.
1494#[derive(Clone, Debug, Default)]
1495pub struct AgentCancelTurnOptions {
1496    /// The `reason` field.
1497    pub reason: String,
1498    /// The `provider_name` field.
1499    pub provider_name: String,
1500}
1501
1502/// Optional parameters of [`Agent::list_turn_events`]; the default value leaves every
1503/// option unset.
1504#[derive(Clone, Debug, Default)]
1505pub struct AgentListTurnEventsOptions {
1506    /// The `after_seq` field.
1507    pub after_seq: i64,
1508    /// The `limit` field.
1509    pub limit: i32,
1510    /// The `provider_name` field.
1511    pub provider_name: String,
1512}
1513
1514/// Optional parameters of [`Agent::list_interactions`]; the default value leaves every
1515/// option unset.
1516#[derive(Clone, Debug, Default)]
1517pub struct AgentListInteractionsOptions {
1518    /// The `provider_name` field.
1519    pub provider_name: String,
1520}
1521
1522/// Optional parameters of [`Agent::resolve_interaction`]; the default value leaves every
1523/// option unset.
1524#[derive(Clone, Debug, Default)]
1525pub struct AgentResolveInteractionOptions {
1526    /// The `turn_id` field.
1527    pub turn_id: String,
1528    /// The `provider_name` field.
1529    pub provider_name: String,
1530}