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