Download codex-rs/app-server-protocol/src/protocol/v2/thread.rs from SaylorTwift/codex: direct link, hf CLI and curl.
- Browser
- Download file 77.2 kB
-
https://huggingface.co/SaylorTwift/codex/resolve/main/codex-rs/app-server-protocol/src/protocol/v2/thread.rs
- Command line
-
hf download hf://SaylorTwift/codex/codex-rs/app-server-protocol/src/protocol/v2/thread.rs
-
curl -L -o thread.rs https://huggingface.co/SaylorTwift/codex/resolve/main/codex-rs/app-server-protocol/src/protocol/v2/thread.rs
77.2 kB
| use super::ActivePermissionProfile; | |
| use super::ApprovalsReviewer; | |
| use super::AskForApproval; | |
| use super::SandboxMode; | |
| use super::SandboxPolicy; | |
| use super::Thread; | |
| use super::ThreadHistoryMode; | |
| use super::ThreadItem; | |
| use super::ThreadRealtimeItem; | |
| use super::ThreadSection; | |
| use super::ThreadSectionAppearance; | |
| use super::ThreadSource; | |
| use super::Turn; | |
| use super::TurnEnvironmentParams; | |
| use super::TurnError; | |
| use super::TurnItemsView; | |
| use super::TurnStatus; | |
| use super::UserInput; | |
| use super::shared::v2_enum_from_core; | |
| use crate::JsonSchema; | |
| use crate::TS; | |
| use codex_experimental_api_macros::ExperimentalApi; | |
| pub use codex_protocol::capabilities::CapabilityRootLocation; | |
| pub use codex_protocol::capabilities::SelectedCapabilityRoot; | |
| use codex_protocol::config_types::CollaborationMode; | |
| use codex_protocol::config_types::MultiAgentMode; | |
| use codex_protocol::config_types::Personality; | |
| use codex_protocol::config_types::ReasoningSummary; | |
| pub use codex_protocol::dynamic_tools::DynamicToolFunctionSpec; | |
| pub use codex_protocol::dynamic_tools::DynamicToolNamespaceSpec; | |
| pub use codex_protocol::dynamic_tools::DynamicToolNamespaceTool; | |
| pub use codex_protocol::dynamic_tools::DynamicToolSpec; | |
| use codex_protocol::models::ResponseItem; | |
| use codex_protocol::openai_models::ReasoningEffort; | |
| use codex_protocol::protocol::ThreadGoalStatus as CoreThreadGoalStatus; | |
| use codex_protocol::protocol::TokenUsage as CoreTokenUsage; | |
| use codex_protocol::protocol::TokenUsageInfo as CoreTokenUsageInfo; | |
| use codex_utils_absolute_path::AbsolutePathBuf; | |
| use codex_utils_path_uri::LegacyAppPathString; | |
| use codex_utils_path_uri::PathUri; | |
| use serde::Deserialize; | |
| use serde::Serialize; | |
| use serde_json::Value as JsonValue; | |
| use std::collections::HashMap; | |
| use std::path::PathBuf; | |
| pub enum ThreadStartSource { | |
| Startup, | |
| Clear, | |
| } | |
| // === Threads, Turns, and Items === | |
| // Thread APIs | |
| pub struct ThreadStartParams { | |
| pub model: Option<String>, | |
| pub model_provider: Option<String>, | |
| /// Allow a provider with an authoritative static model catalog to replace an unavailable | |
| /// requested model with its default. | |
| pub allow_provider_model_fallback: bool, | |
| pub service_tier: Option<Option<String>>, | |
| pub cwd: Option<String>, | |
| /// Replace the thread's runtime workspace roots. Paths must be absolute. | |
| pub runtime_workspace_roots: Option<Vec<AbsolutePathBuf>>, | |
| pub approval_policy: Option<AskForApproval>, | |
| /// Override where approval requests are routed for review on this thread | |
| /// and subsequent turns. | |
| pub approvals_reviewer: Option<ApprovalsReviewer>, | |
| pub sandbox: Option<SandboxMode>, | |
| /// Named profile id for this thread. Cannot be combined with `sandbox`. | |
| pub permissions: Option<String>, | |
| pub config: Option<HashMap<String, JsonValue>>, | |
| pub service_name: Option<String>, | |
| pub base_instructions: Option<String>, | |
| pub developer_instructions: Option<String>, | |
| /// @deprecated `friendly` and `pragmatic` no longer select a style. | |
| pub personality: Option<Personality>, | |
| /// @deprecated Ignored. Use Ultra reasoning effort for proactive multi-agent behavior. | |
| pub multi_agent_mode: Option<MultiAgentMode>, | |
| pub ephemeral: Option<bool>, | |
| /// Persisted thread history contract to use for this new thread. | |
| pub history_mode: Option<ThreadHistoryMode>, | |
| pub session_start_source: Option<ThreadStartSource>, | |
| /// Optional client-supplied analytics source classification for this thread. | |
| pub thread_source: Option<ThreadSource>, | |
| /// Optional project identity for this new thread. Durable threads persist | |
| /// the assignment; ephemeral threads expose it only in live responses. | |
| pub project_id: Option<String>, | |
| /// Initial Daybreak choice for this persistent thread. Omitted or null | |
| /// leaves it unset. This does not select a turn's `cyberAccessProgram` | |
| /// or grant access. Not supported for ephemeral threads. | |
| pub daybreak_enabled: Option<bool>, | |
| /// Optional sticky environments for this thread. | |
| /// | |
| /// Omitted selects the default environment when environment access is | |
| /// enabled. Empty disables environment access for turns that do not | |
| /// provide a turn override. Non-empty selects the first environment as the | |
| /// current turn environment. | |
| pub environments: Option<Vec<TurnEnvironmentParams>>, | |
| pub dynamic_tools: Option<Vec<DynamicToolSpec>>, | |
| /// Capability roots selected for this thread by the hosting platform. | |
| pub selected_capability_roots: Option<Vec<SelectedCapabilityRoot>>, | |
| /// Test-only experimental field used to validate experimental gating and | |
| /// schema filtering behavior in a stable way. | |
| pub mock_experimental_field: Option<String>, | |
| /// If true, opt into emitting raw Responses API items on the event stream. | |
| /// This is for internal use only (e.g. Codex Cloud). | |
| pub experimental_raw_events: bool, | |
| } | |
| pub struct MockExperimentalMethodParams { | |
| /// Test-only payload field. | |
| pub value: Option<String>, | |
| } | |
| pub struct MockExperimentalMethodResponse { | |
| /// Echoes the input `value`. | |
| pub echoed: Option<String>, | |
| } | |
| pub struct ThreadStartResponse { | |
| pub thread: Thread, | |
| pub model: String, | |
| pub model_provider: String, | |
| pub service_tier: Option<String>, | |
| /// Saved list of disabled plugin IDs. Does not yet filter plugin capabilities. | |
| pub disabled_plugin_ids: Vec<String>, | |
| pub cwd: AbsolutePathBuf, | |
| /// Thread-scoped runtime workspace roots used to materialize | |
| /// `:workspace_roots`. | |
| pub runtime_workspace_roots: Vec<AbsolutePathBuf>, | |
| /// Environment-native paths to instruction source files currently loaded for this thread. | |
| pub instruction_sources: Vec<LegacyAppPathString>, | |
| pub approval_policy: AskForApproval, | |
| /// Reviewer currently used for approval requests on this thread. | |
| pub approvals_reviewer: ApprovalsReviewer, | |
| /// Legacy sandbox policy retained for compatibility. Experimental clients | |
| /// should prefer `activePermissionProfile` for profile provenance. | |
| pub sandbox: SandboxPolicy, | |
| /// Named or implicit built-in profile that produced the active | |
| /// permissions, when known. | |
| pub active_permission_profile: Option<ActivePermissionProfile>, | |
| pub reasoning_effort: Option<ReasoningEffort>, | |
| /// @deprecated Always `explicitRequestOnly`. Use `reasoningEffort` for Ultra behavior. | |
| pub multi_agent_mode: MultiAgentMode, | |
| } | |
| impl ThreadStartResponse { | |
| /// Parses valid absolute instruction source paths and omits malformed legacy values. | |
| pub fn instruction_source_path_uris(&self) -> Vec<PathUri> { | |
| instruction_source_path_uris(&self.instruction_sources) | |
| } | |
| } | |
| pub struct ThreadSettingsUpdateParams { | |
| pub thread_id: String, | |
| /// Replace this thread's disabled plugin IDs. | |
| /// Omitted/null preserves the list; [] clears it. | |
| pub disabled_plugin_ids: Option<Vec<String>>, | |
| /// Override the working directory for subsequent turns. | |
| pub cwd: Option<PathBuf>, | |
| /// Override the approval policy for subsequent turns. | |
| pub approval_policy: Option<AskForApproval>, | |
| /// Override where approval requests are routed for subsequent turns. | |
| pub approvals_reviewer: Option<ApprovalsReviewer>, | |
| /// Override the sandbox policy for subsequent turns. | |
| pub sandbox_policy: Option<SandboxPolicy>, | |
| /// Select a named permissions profile id for subsequent turns. Cannot be | |
| /// combined with `sandboxPolicy`. | |
| pub permissions: Option<String>, | |
| /// Override the model for subsequent turns. | |
| pub model: Option<String>, | |
| /// Override the service tier for subsequent turns. `null` clears the | |
| /// current service tier; omission leaves it unchanged. | |
| pub service_tier: Option<Option<String>>, | |
| /// Override the reasoning effort for subsequent turns. | |
| pub effort: Option<ReasoningEffort>, | |
| /// Override the reasoning summary for subsequent turns. | |
| pub summary: Option<ReasoningSummary>, | |
| /// EXPERIMENTAL - Set a pre-set collaboration mode for subsequent turns. | |
| /// | |
| /// For `collaboration_mode.settings.developer_instructions`, `null` means | |
| /// "use the built-in instructions for the selected mode". | |
| pub collaboration_mode: Option<CollaborationMode>, | |
| /// @deprecated Ignored. Use `effort: "ultra"` for proactive multi-agent behavior. | |
| pub multi_agent_mode: Option<MultiAgentMode>, | |
| /// @deprecated `friendly` and `pragmatic` no longer select a style. | |
| /// Changing this does not rewrite the thread's existing instructions. | |
| pub personality: Option<Personality>, | |
| } | |
| pub struct ThreadSettingsUpdateResponse {} | |
| pub struct ThreadSettings { | |
| /// Saved list of disabled plugin IDs. Does not yet filter plugin capabilities. | |
| pub disabled_plugin_ids: Vec<String>, | |
| pub cwd: AbsolutePathBuf, | |
| pub approval_policy: AskForApproval, | |
| pub approvals_reviewer: ApprovalsReviewer, | |
| pub sandbox_policy: SandboxPolicy, | |
| pub active_permission_profile: Option<ActivePermissionProfile>, | |
| pub model: String, | |
| pub model_provider: String, | |
| pub service_tier: Option<String>, | |
| pub effort: Option<ReasoningEffort>, | |
| pub summary: Option<ReasoningSummary>, | |
| pub collaboration_mode: CollaborationMode, | |
| /// @deprecated Always `explicitRequestOnly`. Use `effort` for Ultra behavior. | |
| pub multi_agent_mode: MultiAgentMode, | |
| /// @deprecated Reports the saved setting; `friendly` and `pragmatic` no longer select a style. | |
| pub personality: Option<Personality>, | |
| } | |
| pub struct ThreadSettingsUpdatedNotification { | |
| pub thread_id: String, | |
| pub thread_settings: ThreadSettings, | |
| } | |
| /// There are three ways to resume a thread: | |
| /// 1. By thread_id: load the thread from disk by thread_id and resume it. | |
| /// 2. By history: instantiate the thread from memory and resume it. | |
| /// 3. By path: load the thread from disk by path and resume it. | |
| /// | |
| /// For non-running threads, the precedence is: history > non-empty path > thread_id. | |
| /// If using history or a non-empty path for a non-running thread, the thread_id | |
| /// param will be ignored. | |
| /// | |
| /// If thread_id identifies a running thread, app-server rejoins that thread and | |
| /// treats a non-empty path as a consistency check against the active rollout path. | |
| /// Empty string path values are treated as absent. | |
| /// | |
| /// Prefer using thread_id whenever possible. | |
| pub struct ThreadResumeParams { | |
| pub thread_id: String, | |
| /// [UNSTABLE] FOR CODEX CLOUD - DO NOT USE. | |
| /// If specified, the thread will be resumed with the provided history | |
| /// instead of loaded from disk. | |
| pub history: Option<Vec<ResponseItem>>, | |
| /// [UNSTABLE] Specify the rollout path to resume from. | |
| /// If specified for a non-running thread, the thread_id param will be ignored. | |
| /// If thread_id identifies a running thread, the path must match the active | |
| /// rollout path. | |
| pub path: Option<PathBuf>, | |
| /// Configuration overrides for the resumed thread, if any. | |
| pub model: Option<String>, | |
| pub model_provider: Option<String>, | |
| pub service_tier: Option<Option<String>>, | |
| pub cwd: Option<String>, | |
| /// Replace the thread's runtime workspace roots. Paths must be absolute. | |
| pub runtime_workspace_roots: Option<Vec<AbsolutePathBuf>>, | |
| pub approval_policy: Option<AskForApproval>, | |
| /// Override where approval requests are routed for review on this thread | |
| /// and subsequent turns. | |
| pub approvals_reviewer: Option<ApprovalsReviewer>, | |
| pub sandbox: Option<SandboxMode>, | |
| /// Named profile id for the resumed thread. Cannot be combined with | |
| /// `sandbox`. | |
| pub permissions: Option<String>, | |
| pub config: Option<HashMap<String, serde_json::Value>>, | |
| pub base_instructions: Option<String>, | |
| pub developer_instructions: Option<String>, | |
| /// @deprecated `friendly` and `pragmatic` no longer select a style. | |
| /// Changing this does not rewrite the thread's existing instructions. | |
| pub personality: Option<Personality>, | |
| /// When true, return only thread metadata and live-resume state without | |
| /// populating `thread.turns`. This is useful when the client plans to call | |
| /// `thread/turns/list` immediately after resuming. Full-history hydration | |
| /// is deprecated for paginated threads; use this with `thread/turns/list` | |
| /// and `thread/items/list` instead. | |
| pub exclude_turns: bool, | |
| /// When present, include a `thread/turns/list` page in the resume response | |
| /// so clients can bootstrap recent turns without a second request. | |
| pub initial_turns_page: Option<ThreadResumeInitialTurnsPageParams>, | |
| } | |
| pub struct ThreadResumeResponse { | |
| pub thread: Thread, | |
| pub model: String, | |
| pub model_provider: String, | |
| pub service_tier: Option<String>, | |
| /// Saved list of disabled plugin IDs. Does not yet filter plugin capabilities. | |
| pub disabled_plugin_ids: Vec<String>, | |
| pub cwd: AbsolutePathBuf, | |
| /// Thread-scoped runtime workspace roots used to materialize | |
| /// `:workspace_roots`. | |
| pub runtime_workspace_roots: Vec<AbsolutePathBuf>, | |
| /// Environment-native paths to instruction source files currently loaded for this thread. | |
| pub instruction_sources: Vec<LegacyAppPathString>, | |
| pub approval_policy: AskForApproval, | |
| /// Reviewer currently used for approval requests on this thread. | |
| pub approvals_reviewer: ApprovalsReviewer, | |
| /// Legacy sandbox policy retained for compatibility. Experimental clients | |
| /// should prefer `activePermissionProfile` for profile provenance. | |
| pub sandbox: SandboxPolicy, | |
| /// Named or implicit built-in profile that produced the active | |
| /// permissions, when known. | |
| pub active_permission_profile: Option<ActivePermissionProfile>, | |
| pub reasoning_effort: Option<ReasoningEffort>, | |
| /// Effective collaboration mode. Absent when resuming from an older server. | |
| pub collaboration_mode: Option<CollaborationMode>, | |
| /// @deprecated Always `explicitRequestOnly`. Use `reasoningEffort` for Ultra behavior. | |
| pub multi_agent_mode: MultiAgentMode, | |
| /// `thread/turns/list` page returned when requested by `initialTurnsPage`. | |
| pub initial_turns_page: Option<TurnsPage>, | |
| /// Opaque cursor for hydrating paginated turns backwards. | |
| /// | |
| /// Pass this as `cursor` to `thread/turns/list` with | |
| /// `sortDirection: "desc"`. The first page includes the turn identified by the cursor. | |
| pub turns_backwards_cursor: Option<String>, | |
| /// Opaque cursor for hydrating paginated items backwards. | |
| /// | |
| /// Pass this as `cursor` to `thread/items/list` with | |
| /// `sortDirection: "desc"`. The first page includes the item identified by the cursor. | |
| pub items_backwards_cursor: Option<String>, | |
| } | |
| impl ThreadResumeResponse { | |
| /// Parses valid absolute instruction source paths and omits malformed legacy values. | |
| pub fn instruction_source_path_uris(&self) -> Vec<PathUri> { | |
| instruction_source_path_uris(&self.instruction_sources) | |
| } | |
| } | |
| pub struct ThreadResumeInitialTurnsPageParams { | |
| /// Optional turn page size. | |
| pub limit: Option<u32>, | |
| /// Optional turn pagination direction; defaults to descending. | |
| pub sort_direction: Option<SortDirection>, | |
| /// How much item detail to include for each returned turn; defaults to summary. | |
| pub items_view: Option<TurnItemsView>, | |
| } | |
| pub struct TurnsPage { | |
| pub data: Vec<Turn>, | |
| pub next_cursor: Option<String>, | |
| pub backwards_cursor: Option<String>, | |
| } | |
| impl From<ThreadTurnsListResponse> for TurnsPage { | |
| fn from(response: ThreadTurnsListResponse) -> Self { | |
| Self { | |
| data: response.data, | |
| next_cursor: response.next_cursor, | |
| backwards_cursor: response.backwards_cursor, | |
| } | |
| } | |
| } | |
| /// There are two ways to fork a thread: | |
| /// 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. | |
| /// 2. By path: load the thread from disk by path and fork it into a new thread. | |
| /// | |
| /// If using a non-empty path, the thread_id param will be ignored. | |
| /// Empty string path values are treated as absent. | |
| /// | |
| /// Prefer using thread_id whenever possible. | |
| pub struct ThreadForkParams { | |
| pub thread_id: String, | |
| /// Optional last turn id to fork through, inclusive. | |
| /// | |
| /// When specified, turns after `last_turn_id` are omitted from the fork. | |
| /// The referenced turn cannot be in progress. | |
| pub last_turn_id: Option<String>, | |
| /// Optional turn id to fork before, excluding that turn and all later turns. | |
| /// Cannot be combined with `last_turn_id`. | |
| pub before_turn_id: Option<String>, | |
| /// [UNSTABLE] Specify the rollout path to fork from. | |
| /// If specified, the thread_id param will be ignored. | |
| pub path: Option<PathBuf>, | |
| /// Configuration overrides for the forked thread, if any. | |
| pub model: Option<String>, | |
| pub model_provider: Option<String>, | |
| pub service_tier: Option<Option<String>>, | |
| pub cwd: Option<String>, | |
| /// Replace the thread's runtime workspace roots. Paths must be absolute. | |
| pub runtime_workspace_roots: Option<Vec<AbsolutePathBuf>>, | |
| pub approval_policy: Option<AskForApproval>, | |
| /// Override where approval requests are routed for review on this thread | |
| /// and subsequent turns. | |
| pub approvals_reviewer: Option<ApprovalsReviewer>, | |
| pub sandbox: Option<SandboxMode>, | |
| /// Named profile id for the forked thread. Cannot be combined with | |
| /// `sandbox`. | |
| pub permissions: Option<String>, | |
| pub config: Option<HashMap<String, serde_json::Value>>, | |
| pub base_instructions: Option<String>, | |
| pub developer_instructions: Option<String>, | |
| pub ephemeral: bool, | |
| /// Optional client-supplied analytics source classification for this forked thread. | |
| pub thread_source: Option<ThreadSource>, | |
| /// When true, return only thread metadata and live fork state without | |
| /// populating `thread.turns`. This is useful when the client plans to call | |
| /// `thread/turns/list` immediately after forking. Full-history hydration | |
| /// is deprecated for paginated threads; use this with `thread/turns/list` | |
| /// and `thread/items/list` instead. | |
| pub exclude_turns: bool, | |
| /// When true, carry the source thread's current goal into the fork without | |
| /// starting its initial automatic continuation. The next explicit turn owns | |
| /// the goal lifecycle, and normal automatic continuation resumes after it. | |
| pub defer_goal_continuation: bool, | |
| } | |
| pub struct ThreadForkResponse { | |
| pub thread: Thread, | |
| pub model: String, | |
| pub model_provider: String, | |
| pub service_tier: Option<String>, | |
| /// Saved list of disabled plugin IDs. Does not yet filter plugin capabilities. | |
| pub disabled_plugin_ids: Vec<String>, | |
| pub cwd: AbsolutePathBuf, | |
| /// Thread-scoped runtime workspace roots used to materialize | |
| /// `:workspace_roots`. | |
| pub runtime_workspace_roots: Vec<AbsolutePathBuf>, | |
| /// Environment-native paths to instruction source files currently loaded for this thread. | |
| pub instruction_sources: Vec<LegacyAppPathString>, | |
| pub approval_policy: AskForApproval, | |
| /// Reviewer currently used for approval requests on this thread. | |
| pub approvals_reviewer: ApprovalsReviewer, | |
| /// Legacy sandbox policy retained for compatibility. Experimental clients | |
| /// should prefer `activePermissionProfile` for profile provenance. | |
| pub sandbox: SandboxPolicy, | |
| /// Named or implicit built-in profile that produced the active | |
| /// permissions, when known. | |
| pub active_permission_profile: Option<ActivePermissionProfile>, | |
| pub reasoning_effort: Option<ReasoningEffort>, | |
| /// @deprecated Always `explicitRequestOnly`. Use `reasoningEffort` for Ultra behavior. | |
| pub multi_agent_mode: MultiAgentMode, | |
| } | |
| impl ThreadForkResponse { | |
| /// Parses valid absolute instruction source paths and omits malformed legacy values. | |
| pub fn instruction_source_path_uris(&self) -> Vec<PathUri> { | |
| instruction_source_path_uris(&self.instruction_sources) | |
| } | |
| } | |
| fn instruction_source_path_uris(sources: &[LegacyAppPathString]) -> Vec<PathUri> { | |
| // Instruction sources are advisory diagnostics. Warn and fail open so a malformed legacy | |
| // path cannot fail thread start, resume, or fork. | |
| sources | |
| .iter() | |
| .filter_map(|source| { | |
| source.to_inferred_path_uri().or_else(|| { | |
| tracing::warn!( | |
| path = source.as_str(), | |
| "ignoring invalid instruction source path from app-server" | |
| ); | |
| None | |
| }) | |
| }) | |
| .collect() | |
| } | |
| pub struct ThreadArchiveParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadArchiveResponse {} | |
| pub struct ThreadDeleteParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadDeleteResponse {} | |
| pub struct ThreadUnsubscribeParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadUnsubscribeResponse { | |
| pub status: ThreadUnsubscribeStatus, | |
| } | |
| pub enum ThreadUnsubscribeStatus { | |
| NotLoaded, | |
| NotSubscribed, | |
| Unsubscribed, | |
| } | |
| /// Parameters for `thread/increment_elicitation`. | |
| pub struct ThreadIncrementElicitationParams { | |
| /// Thread whose out-of-band elicitation counter should be incremented. | |
| pub thread_id: String, | |
| } | |
| /// Response for `thread/increment_elicitation`. | |
| pub struct ThreadIncrementElicitationResponse { | |
| /// Current out-of-band elicitation count after the increment. | |
| pub count: i64, | |
| /// Whether timeout accounting is paused after applying the increment. | |
| pub paused: bool, | |
| } | |
| /// Parameters for `thread/decrement_elicitation`. | |
| pub struct ThreadDecrementElicitationParams { | |
| /// Thread whose out-of-band elicitation counter should be decremented. | |
| pub thread_id: String, | |
| } | |
| /// Response for `thread/decrement_elicitation`. | |
| pub struct ThreadDecrementElicitationResponse { | |
| /// Current out-of-band elicitation count after the decrement. | |
| pub count: i64, | |
| /// Whether timeout accounting remains paused after applying the decrement. | |
| pub paused: bool, | |
| } | |
| pub struct ThreadSetNameParams { | |
| pub thread_id: String, | |
| pub name: String, | |
| } | |
| pub struct ThreadUnarchiveParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadSetNameResponse {} | |
| v2_enum_from_core! { | |
| pub enum ThreadGoalStatus from CoreThreadGoalStatus { | |
| Active, | |
| Paused, | |
| Blocked, | |
| UsageLimited, | |
| BudgetLimited, | |
| Complete, | |
| } | |
| } | |
| pub struct ThreadGoal { | |
| pub thread_id: String, | |
| pub objective: String, | |
| pub status: ThreadGoalStatus, | |
| pub token_budget: Option<i64>, | |
| pub tokens_used: i64, | |
| pub time_used_seconds: i64, | |
| pub created_at: i64, | |
| pub updated_at: i64, | |
| } | |
| impl From<codex_protocol::protocol::ThreadGoal> for ThreadGoal { | |
| fn from(value: codex_protocol::protocol::ThreadGoal) -> Self { | |
| Self { | |
| thread_id: value.thread_id.to_string(), | |
| objective: value.objective, | |
| status: value.status.into(), | |
| token_budget: value.token_budget, | |
| tokens_used: value.tokens_used, | |
| time_used_seconds: value.time_used_seconds, | |
| created_at: value.created_at, | |
| updated_at: value.updated_at, | |
| } | |
| } | |
| } | |
| pub struct ThreadGoalSetParams { | |
| pub thread_id: String, | |
| pub objective: Option<String>, | |
| pub status: Option<ThreadGoalStatus>, | |
| pub token_budget: Option<Option<i64>>, | |
| } | |
| pub struct ThreadGoalSetResponse { | |
| pub goal: ThreadGoal, | |
| } | |
| pub struct ThreadGoalGetParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadGoalGetResponse { | |
| pub goal: Option<ThreadGoal>, | |
| } | |
| pub struct ThreadGoalClearParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadGoalClearResponse { | |
| pub cleared: bool, | |
| } | |
| pub struct QueuedSubmission { | |
| pub id: String, | |
| pub input: Vec<UserInput>, | |
| pub client_user_message_id: String, | |
| } | |
| pub struct ThreadQueueAddParams { | |
| pub thread_id: String, | |
| pub input: Vec<UserInput>, | |
| pub client_user_message_id: String, | |
| } | |
| pub struct ThreadQueueAddResponse { | |
| pub queued_submission: QueuedSubmission, | |
| } | |
| pub struct ThreadQueueListParams { | |
| pub thread_id: String, | |
| /// Opaque pagination cursor returned by a previous call. | |
| pub cursor: Option<String>, | |
| /// Optional page size; defaults to the standard thread-list page size. | |
| pub limit: Option<u32>, | |
| } | |
| pub struct ThreadQueueListResponse { | |
| pub data: Vec<QueuedSubmission>, | |
| /// Opaque cursor for the next page, or `null` when no submissions remain. | |
| pub next_cursor: Option<String>, | |
| } | |
| pub struct ThreadQueueUpdateParams { | |
| pub thread_id: String, | |
| pub queued_submission_id: String, | |
| pub input: Vec<UserInput>, | |
| } | |
| pub struct ThreadQueueUpdateResponse { | |
| pub queued_submission: QueuedSubmission, | |
| } | |
| pub struct ThreadQueueDeleteParams { | |
| pub thread_id: String, | |
| pub queued_submission_id: String, | |
| } | |
| pub struct ThreadQueueDeleteResponse { | |
| pub deleted: bool, | |
| } | |
| pub struct ThreadQueueReorderParams { | |
| pub thread_id: String, | |
| pub queued_submission_ids: Vec<String>, | |
| } | |
| pub struct ThreadQueueReorderResponse {} | |
| pub struct ThreadQueueStartParams { | |
| pub thread_id: String, | |
| pub queued_submission_id: Option<String>, | |
| } | |
| pub struct ThreadQueueStartResponse { | |
| pub turn: Turn, | |
| } | |
| pub struct ThreadMetadataUpdateParams { | |
| pub thread_id: String, | |
| /// Omit to leave the project unchanged, use an empty string to clear it, | |
| /// or provide an existing project ID to assign it. | |
| pub project_id: Option<String>, | |
| /// Patch the stored Git metadata for this thread. | |
| /// Omit a field to leave it unchanged, set it to `null` to clear it, or | |
| /// provide a string to replace the stored value. | |
| pub git_info: Option<ThreadMetadataGitInfoUpdateParams>, | |
| /// Save the client's Daybreak choice for this persistent thread. | |
| /// Omitted or null leaves it unchanged. This does not select a turn's | |
| /// `cyberAccessProgram` or grant access. | |
| pub daybreak_enabled: Option<bool>, | |
| } | |
| pub struct ThreadMetadataGitInfoUpdateParams { | |
| /// Omit to leave the stored commit unchanged, set to `null` to clear it, | |
| /// or provide a non-empty string to replace it. | |
| pub sha: Option<Option<String>>, | |
| /// Omit to leave the stored branch unchanged, set to `null` to clear it, | |
| /// or provide a non-empty string to replace it. | |
| pub branch: Option<Option<String>>, | |
| /// Omit to leave the stored origin URL unchanged, set to `null` to clear it, | |
| /// or provide a non-empty string to replace it. | |
| pub origin_url: Option<Option<String>>, | |
| } | |
| pub struct ThreadMetadataUpdateResponse { | |
| pub thread: Thread, | |
| } | |
| /// Parameters for moving a thread within a server-owned section ordering. | |
| pub struct ThreadSectionMoveParams { | |
| /// Thread to move into, within, or out of a section. | |
| pub thread_id: String, | |
| /// Destination section, or `null` to remove the thread from its section. | |
| pub section_id: Option<String>, | |
| /// Existing thread to insert before; omission or null appends to the section. | |
| pub before_thread_id: Option<String>, | |
| } | |
| pub struct ThreadSectionMoveResponse {} | |
| pub enum ThreadMemoryMode { | |
| Enabled, | |
| Disabled, | |
| } | |
| impl ThreadMemoryMode { | |
| pub fn as_str(self) -> &'static str { | |
| match self { | |
| Self::Enabled => "enabled", | |
| Self::Disabled => "disabled", | |
| } | |
| } | |
| pub fn to_core(self) -> codex_protocol::protocol::ThreadMemoryMode { | |
| match self { | |
| Self::Enabled => codex_protocol::protocol::ThreadMemoryMode::Enabled, | |
| Self::Disabled => codex_protocol::protocol::ThreadMemoryMode::Disabled, | |
| } | |
| } | |
| } | |
| pub struct ThreadMemoryModeSetParams { | |
| pub thread_id: String, | |
| pub mode: ThreadMemoryMode, | |
| } | |
| pub struct ThreadMemoryModeSetResponse {} | |
| pub struct MemoryResetResponse {} | |
| pub struct ThreadUnarchiveResponse { | |
| pub thread: Thread, | |
| } | |
| pub struct ThreadCompactStartParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadCompactStartResponse {} | |
| pub struct ThreadShellCommandParams { | |
| pub thread_id: String, | |
| /// Shell command string evaluated by the thread's configured shell. | |
| /// Unlike `command/exec`, this intentionally preserves shell syntax | |
| /// such as pipes, redirects, and quoting. This runs unsandboxed with full | |
| /// access rather than inheriting the thread sandbox policy. | |
| pub command: String, | |
| /// Maximum execution time in milliseconds. Defaults to one hour when omitted | |
| /// or null. Must be non-negative; zero requests an immediate timeout, not | |
| /// unlimited execution. Does not affect the immediate RPC acknowledgement. | |
| pub timeout_ms: Option<i64>, | |
| } | |
| pub struct ThreadShellCommandResponse {} | |
| pub struct ThreadApproveGuardianDeniedActionParams { | |
| pub thread_id: String, | |
| /// Serialized `codex_protocol::protocol::GuardianAssessmentEvent`. | |
| pub event: JsonValue, | |
| } | |
| pub struct ThreadApproveGuardianDeniedActionResponse {} | |
| pub struct ThreadBackgroundTerminalsCleanParams { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadBackgroundTerminalsCleanResponse {} | |
| pub struct ThreadBackgroundTerminalsListParams { | |
| pub thread_id: String, | |
| /// Opaque pagination cursor returned by a previous call. | |
| pub cursor: Option<String>, | |
| /// Optional page size. | |
| pub limit: Option<u32>, | |
| } | |
| pub struct ThreadBackgroundTerminal { | |
| pub item_id: String, | |
| pub process_id: String, | |
| pub command: String, | |
| pub cwd: LegacyAppPathString, | |
| pub os_pid: Option<u32>, | |
| pub cpu_percent: Option<f64>, | |
| pub rss_kb: Option<u64>, | |
| } | |
| pub struct ThreadBackgroundTerminalsListResponse { | |
| pub data: Vec<ThreadBackgroundTerminal>, | |
| /// Opaque cursor to pass to the next call to continue after the last item. | |
| /// If None, there are no more items to return. | |
| pub next_cursor: Option<String>, | |
| } | |
| pub struct ThreadBackgroundTerminalsTerminateParams { | |
| pub thread_id: String, | |
| pub process_id: String, | |
| } | |
| pub struct ThreadBackgroundTerminalsTerminateResponse { | |
| pub terminated: bool, | |
| } | |
| /// Replace a paginated thread's durable history with the prefix before one turn. | |
| /// | |
| /// This only changes persisted conversation history. It does not revert local file changes. | |
| pub struct ThreadRevertParams { | |
| pub thread_id: String, | |
| /// Turn excluded from the replacement history, together with every later turn. | |
| pub before_turn_id: String, | |
| } | |
| pub struct ThreadRevertResponse { | |
| /// Updated loaded thread metadata. `turns` is always empty; hydrate retained history through | |
| /// `thread/turns/list`. | |
| pub thread: Thread, | |
| /// Opaque cursor for hydrating paginated turns backwards. | |
| /// | |
| /// Pass this as `cursor` to `thread/turns/list` with | |
| /// `sortDirection: "desc"`. The first page includes the turn identified by the cursor. | |
| pub turns_backwards_cursor: Option<String>, | |
| /// Opaque cursor for hydrating paginated items backwards. | |
| /// | |
| /// Pass this as `cursor` to `thread/items/list` with | |
| /// `sortDirection: "desc"`. The first page includes the item identified by the cursor. | |
| pub items_backwards_cursor: Option<String>, | |
| } | |
| /// Parameters for listing independently persisted thread sections. | |
| pub struct ThreadSectionListParams { | |
| /// Opaque pagination cursor returned by a previous call. | |
| pub cursor: Option<String>, | |
| /// Maximum number of sections to return. | |
| pub limit: Option<u32>, | |
| } | |
| /// One page of independently persisted thread sections. | |
| pub struct ThreadSectionListResponse { | |
| pub data: Vec<ThreadSection>, | |
| /// Opaque cursor for the next page, or `null` when no sections remain. | |
| pub next_cursor: Option<String>, | |
| } | |
| /// Parameters for creating an independently persisted thread section. | |
| pub struct ThreadSectionCreateParams { | |
| /// The user-visible name of the section. | |
| pub name: String, | |
| pub appearance: Option<ThreadSectionAppearance>, | |
| } | |
| /// The independently persisted section created by the server. | |
| pub struct ThreadSectionCreateResponse { | |
| pub section: ThreadSection, | |
| } | |
| /// Parameters for updating an independently persisted thread section. | |
| pub struct ThreadSectionUpdateParams { | |
| /// The stable, server-generated identity of the section to update. | |
| pub section_id: String, | |
| /// The updated user-visible name of the section. | |
| pub name: String, | |
| /// Omit to preserve appearance, use `null` to clear it, or provide a replacement. | |
| pub appearance: Option<Option<ThreadSectionAppearance>>, | |
| } | |
| /// The independently persisted section after its name is updated. | |
| pub struct ThreadSectionUpdateResponse { | |
| pub section: ThreadSection, | |
| } | |
| /// Parameters for deleting an independently persisted thread section. | |
| pub struct ThreadSectionDeleteParams { | |
| /// The stable, server-generated identity of the section to delete. | |
| pub section_id: String, | |
| } | |
| /// Successful deletion does not return additional section data. | |
| pub struct ThreadSectionDeleteResponse {} | |
| pub struct ThreadListParams { | |
| /// Opaque pagination cursor returned by a previous call. | |
| pub cursor: Option<String>, | |
| /// Optional page size; defaults to a reasonable server-side value. | |
| pub limit: Option<u32>, | |
| /// Optional sort key; defaults to created_at. | |
| pub sort_key: Option<ThreadSortKey>, | |
| /// Optional sort direction; defaults to descending (newest first). | |
| pub sort_direction: Option<SortDirection>, | |
| /// Optional provider filter; when set, only sessions recorded under these | |
| /// providers are returned. When present but empty, includes all providers. | |
| pub model_providers: Option<Vec<String>>, | |
| /// Optional source filter; when set, only sessions from these source kinds | |
| /// are returned. When omitted or empty, defaults to interactive sources. | |
| pub source_kinds: Option<Vec<ThreadSourceKind>>, | |
| /// Optional originator allowlist, matching any supplied value exactly. | |
| /// Supported by hosted backends only; the local app-server rejects a nonempty list. | |
| /// Omitted or empty lists leave originators unrestricted. | |
| pub originators: Option<Vec<String>>, | |
| /// Optional archived filter; when set to true, only archived threads are returned. | |
| /// If false or null, only non-archived threads are returned. | |
| pub archived: Option<bool>, | |
| /// Omit to include every section, set to `null` for unsectioned threads, | |
| /// or provide a section ID to return only threads in that section. | |
| pub section_id: Option<Option<String>>, | |
| /// Omit to include every project, set to null for unassigned threads, | |
| /// or provide a project ID to return only threads in that project. | |
| pub project_id: Option<Option<String>>, | |
| /// Optional cwd filter or filters; when set, only threads whose session cwd | |
| /// exactly matches one of these paths are returned. | |
| pub cwd: Option<ThreadListCwdFilter>, | |
| /// If true, return from the state DB without scanning JSONL rollouts to | |
| /// repair thread metadata. Omitted or false preserves scan-and-repair | |
| /// behavior. | |
| pub use_state_db_only: bool, | |
| /// Optional substring filter for the extracted thread title. | |
| pub search_term: Option<String>, | |
| /// Optional direct parent thread filter. Mutually exclusive with `ancestorThreadId`. | |
| pub parent_thread_id: Option<String>, | |
| /// Optional ancestor thread filter. Returns spawned descendants at any depth, excluding the | |
| /// ancestor itself. Mutually exclusive with `parentThreadId`. | |
| pub ancestor_thread_id: Option<String>, | |
| } | |
| pub struct ThreadSearchParams { | |
| /// Opaque pagination cursor returned by a previous call. | |
| pub cursor: Option<String>, | |
| /// Optional page size; defaults to a reasonable server-side value. | |
| pub limit: Option<u32>, | |
| /// Optional sort key; defaults to created_at. | |
| pub sort_key: Option<ThreadSearchSortKey>, | |
| /// Optional sort direction; defaults to descending (newest first). | |
| pub sort_direction: Option<SortDirection>, | |
| /// Optional source filter; when set, only sessions from these source kinds | |
| /// are returned. When omitted or empty, defaults to interactive sources. | |
| pub source_kinds: Option<Vec<ThreadSourceKind>>, | |
| /// Optional archived filter; when set to true, only archived threads are returned. | |
| /// If false or null, only non-archived threads are returned. | |
| pub archived: Option<bool>, | |
| /// Required substring/full-text query for thread search. | |
| pub search_term: String, | |
| } | |
| pub enum ThreadListCwdFilter { | |
| One(String), | |
| Many(Vec<String>), | |
| } | |
| pub enum ThreadSourceKind { | |
| Cli, | |
| VsCode, | |
| Exec, | |
| AppServer, | |
| SubAgent, | |
| SubAgentReview, | |
| SubAgentCompact, | |
| SubAgentThreadSpawn, | |
| SubAgentOther, | |
| Unknown, | |
| } | |
| pub enum ThreadSortKey { | |
| CreatedAt, | |
| UpdatedAt, | |
| RecencyAt, | |
| SectionPosition, | |
| } | |
| pub enum ThreadSearchSortKey { | |
| CreatedAt, | |
| UpdatedAt, | |
| RecencyAt, | |
| } | |
| pub enum SortDirection { | |
| Asc, | |
| Desc, | |
| } | |
| pub struct ThreadListResponse { | |
| pub data: Vec<Thread>, | |
| /// Opaque cursor to pass to the next call to continue after the last item. | |
| /// if None, there are no more items to return. | |
| pub next_cursor: Option<String>, | |
| /// Opaque cursor to pass as `cursor` when reversing `sortDirection`. | |
| /// This is only populated when the page contains at least one thread. | |
| /// Use it with the opposite `sortDirection`; for timestamp sorts it anchors | |
| /// at the start of the page timestamp so same-second updates are not skipped. | |
| pub backwards_cursor: Option<String>, | |
| } | |
| pub struct ThreadSearchResult { | |
| pub thread: Thread, | |
| pub snippet: String, | |
| } | |
| pub struct ThreadSearchResponse { | |
| pub data: Vec<ThreadSearchResult>, | |
| /// Opaque cursor to pass to the next call to continue after the last item. | |
| /// if None, there are no more items to return. | |
| pub next_cursor: Option<String>, | |
| /// Opaque cursor to pass as `cursor` when reversing `sortDirection`. | |
| /// This is only populated when the page contains at least one thread. | |
| /// Use it with the opposite `sortDirection`; for timestamp sorts it anchors | |
| /// at the start of the page timestamp so same-second updates are not skipped. | |
| pub backwards_cursor: Option<String>, | |
| } | |
| /// Parameters for searching visible message occurrences within one paginated thread. | |
| pub struct ThreadSearchOccurrencesParams { | |
| pub thread_id: String, | |
| /// Case-insensitive literal substring to find in visible user messages and final assistant | |
| /// messages. | |
| pub search_term: String, | |
| /// Opaque cursor returned by a previous call for the same thread and search term. | |
| pub cursor: Option<String>, | |
| /// Optional occurrence page size. | |
| pub limit: Option<u32>, | |
| } | |
| /// UTF-16 code-unit range within `snippet`. | |
| pub struct ThreadSearchTextRange { | |
| /// Inclusive UTF-16 code-unit offset. | |
| pub start: u32, | |
| /// Exclusive UTF-16 code-unit offset. | |
| pub end: u32, | |
| } | |
| /// One visible message occurrence returned by [`ThreadSearchOccurrencesResponse`]. | |
| pub struct ThreadSearchOccurrence { | |
| pub turn_id: String, | |
| pub item_id: String, | |
| pub snippet: String, | |
| /// Match range within `snippet`, in UTF-16 code units. | |
| pub snippet_match_range: ThreadSearchTextRange, | |
| /// Opaque inclusive cursor accepted by `thread/turns/list` for this turn. | |
| pub turn_cursor: String, | |
| } | |
| pub struct ThreadSearchOccurrencesResponse { | |
| /// Occurrences in chronological message order. | |
| pub data: Vec<ThreadSearchOccurrence>, | |
| /// Opaque cursor to continue after the last returned occurrence. | |
| pub next_cursor: Option<String>, | |
| } | |
| pub struct ThreadLoadedListParams { | |
| /// Opaque pagination cursor returned by a previous call. | |
| pub cursor: Option<String>, | |
| /// Optional page size; defaults to no limit. | |
| pub limit: Option<u32>, | |
| } | |
| pub struct ThreadLoadedListResponse { | |
| /// Thread ids for sessions currently loaded in memory. | |
| pub data: Vec<String>, | |
| /// Opaque cursor to pass to the next call to continue after the last item. | |
| /// if None, there are no more items to return. | |
| pub next_cursor: Option<String>, | |
| } | |
| pub enum ThreadStatus { | |
| NotLoaded, | |
| Idle, | |
| SystemError, | |
| Active { | |
| active_flags: Vec<ThreadActiveFlag>, | |
| }, | |
| } | |
| pub enum ThreadActiveFlag { | |
| WaitingOnApproval, | |
| WaitingOnUserInput, | |
| } | |
| pub struct ThreadReadParams { | |
| pub thread_id: String, | |
| /// When true, include turns and their items from rollout history. | |
| /// Full-history hydration is deprecated for paginated threads; prefer a | |
| /// metadata-only read and page with `thread/turns/list` and | |
| /// `thread/items/list`. | |
| pub include_turns: bool, | |
| } | |
| pub struct ThreadReadResponse { | |
| pub thread: Thread, | |
| } | |
| pub struct ThreadInjectItemsParams { | |
| pub thread_id: String, | |
| /// Raw Responses API items to append to the thread's model-visible history. | |
| pub items: Vec<JsonValue>, | |
| } | |
| pub struct ThreadInjectItemsResponse {} | |
| pub struct ThreadTurnsListParams { | |
| pub thread_id: String, | |
| /// Opaque cursor to pass to the next call to continue after the last turn. | |
| pub cursor: Option<String>, | |
| /// Optional turn page size. | |
| pub limit: Option<u32>, | |
| /// Optional turn pagination direction; defaults to descending. | |
| pub sort_direction: Option<SortDirection>, | |
| /// How much item detail to include for each returned turn; defaults to summary. | |
| pub items_view: Option<TurnItemsView>, | |
| } | |
| pub struct ThreadTurnsListResponse { | |
| pub data: Vec<Turn>, | |
| /// Opaque cursor to pass to the next call to continue after the last turn. | |
| /// if None, there are no more turns to return. | |
| pub next_cursor: Option<String>, | |
| /// Opaque cursor to pass as `cursor` when reversing `sortDirection`. | |
| /// This is only populated when the page contains at least one turn. | |
| /// Use it with the opposite `sortDirection` to include the anchor turn again | |
| /// and catch updates to that turn. | |
| pub backwards_cursor: Option<String>, | |
| } | |
| pub struct ThreadItemsListParams { | |
| pub thread_id: String, | |
| /// Optional turn id to filter by. When omitted, returns items across the thread. | |
| pub turn_id: Option<String>, | |
| /// Opaque cursor to pass to the next call to continue after the last item. | |
| pub cursor: Option<String>, | |
| /// Optional item page size. | |
| pub limit: Option<u32>, | |
| /// Optional item pagination direction; defaults to ascending. | |
| pub sort_direction: Option<SortDirection>, | |
| } | |
| pub struct ThreadItemEntry { | |
| /// Turn containing this item. | |
| pub turn_id: String, | |
| pub item: ThreadItem, | |
| } | |
| pub struct ThreadItemsListResponse { | |
| pub data: Vec<ThreadItemEntry>, | |
| /// Opaque cursor to pass to the next call to continue after the last item. | |
| /// if None, there are no more items to return. | |
| pub next_cursor: Option<String>, | |
| /// Opaque cursor to pass as `cursor` when reversing `sortDirection`. | |
| /// This is only populated when the page contains at least one item. | |
| pub backwards_cursor: Option<String>, | |
| } | |
| /// EXPERIMENTAL - list ordinary and realtime thread history in rollout order. | |
| pub struct ThreadTimelineListParams { | |
| pub thread_id: String, | |
| pub cursor: Option<String>, | |
| pub limit: Option<u32>, | |
| } | |
| /// EXPERIMENTAL - one item or turn boundary in canonical rollout order. | |
| pub enum ThreadTimelineEntry { | |
| Item { | |
| position: u64, | |
| turn_id: String, | |
| item: Box<ThreadItem>, | |
| }, | |
| Realtime { | |
| position: u64, | |
| item: ThreadRealtimeItem, | |
| }, | |
| TurnStarted { | |
| position: u64, | |
| turn_id: String, | |
| started_at: Option<i64>, | |
| }, | |
| TurnCompleted { | |
| position: u64, | |
| turn_id: String, | |
| status: TurnStatus, | |
| error: Option<TurnError>, | |
| started_at: Option<i64>, | |
| completed_at: Option<i64>, | |
| duration_ms: Option<i64>, | |
| }, | |
| } | |
| /// EXPERIMENTAL - a bounded timeline page with its resolved opening voice state. | |
| pub struct ThreadTimelineListResponse { | |
| pub data: Vec<ThreadTimelineEntry>, | |
| pub next_cursor: Option<String>, | |
| pub active_realtime_session_at_page_start: Option<String>, | |
| } | |
| pub struct ThreadTokenUsageUpdatedNotification { | |
| pub thread_id: String, | |
| pub turn_id: String, | |
| pub token_usage: ThreadTokenUsage, | |
| } | |
| /// Internal-only notification containing the exact usage from one upstream | |
| /// Responses API completion. | |
| pub struct RawResponseCompletedNotification { | |
| pub thread_id: String, | |
| pub turn_id: String, | |
| pub response_id: String, | |
| pub usage: Option<TokenUsageBreakdown>, | |
| pub usage_metadata: Option<ResponseUsageMetadata>, | |
| } | |
| /// Usage metadata reported for one upstream response. | |
| pub struct ResponseUsageMetadata { | |
| pub amount: Option<String>, | |
| pub metadata: Option<JsonValue>, | |
| } | |
| impl From<codex_protocol::ResponseUsageMetadata> for ResponseUsageMetadata { | |
| fn from(value: codex_protocol::ResponseUsageMetadata) -> Self { | |
| Self { | |
| amount: value.amount, | |
| metadata: value.metadata, | |
| } | |
| } | |
| } | |
| pub struct ThreadTokenUsage { | |
| pub total: TokenUsageBreakdown, | |
| pub last: TokenUsageBreakdown, | |
| // TODO(aibrahim): make this not optional | |
| pub model_context_window: Option<i64>, | |
| } | |
| impl From<CoreTokenUsageInfo> for ThreadTokenUsage { | |
| fn from(value: CoreTokenUsageInfo) -> Self { | |
| Self { | |
| total: value.total_token_usage.into(), | |
| last: value.last_token_usage.into(), | |
| model_context_window: value.model_context_window, | |
| } | |
| } | |
| } | |
| pub struct TokenUsageBreakdown { | |
| pub total_tokens: i64, | |
| pub input_tokens: i64, | |
| pub cached_input_tokens: i64, | |
| pub cache_write_input_tokens: i64, | |
| pub output_tokens: i64, | |
| pub reasoning_output_tokens: i64, | |
| } | |
| impl From<CoreTokenUsage> for TokenUsageBreakdown { | |
| fn from(value: CoreTokenUsage) -> Self { | |
| Self { | |
| total_tokens: value.total_tokens, | |
| input_tokens: value.input_tokens, | |
| cached_input_tokens: value.cached_input_tokens, | |
| cache_write_input_tokens: value.cache_write_input_tokens, | |
| output_tokens: value.output_tokens, | |
| reasoning_output_tokens: value.reasoning_output_tokens, | |
| } | |
| } | |
| } | |
| // Thread/Turn lifecycle notifications and item progress events | |
| pub struct ThreadStartedNotification { | |
| pub thread: Thread, | |
| } | |
| pub struct ThreadStatusChangedNotification { | |
| pub thread_id: String, | |
| pub status: ThreadStatus, | |
| } | |
| pub struct ThreadArchivedNotification { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadDeletedNotification { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadUnarchivedNotification { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadClosedNotification { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadRevertedNotification { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadNameUpdatedNotification { | |
| pub thread_id: String, | |
| pub thread_name: Option<String>, | |
| } | |
| pub struct ThreadGoalUpdatedNotification { | |
| pub thread_id: String, | |
| pub turn_id: Option<String>, | |
| pub goal: ThreadGoal, | |
| } | |
| pub struct ThreadGoalClearedNotification { | |
| pub thread_id: String, | |
| } | |
| pub struct ThreadQueueChangedNotification { | |
| pub thread_id: String, | |
| } | |
| /// Deprecated: Use `ContextCompaction` item type instead. | |
| pub struct ContextCompactedNotification { | |
| pub thread_id: String, | |
| pub turn_id: String, | |
| } | |