Skip to main content

codex/commands/
debug.rs

1use std::ffi::OsString;
2
3use crate::{
4    ApplyDiffArtifacts, CodexClient, CodexError, DebugAppServerHelpRequest, DebugAppServerRequest,
5    DebugAppServerSendMessageV2Request, DebugCommandRequest, DebugHelpRequest, DebugModelsRequest,
6    DebugPromptInputRequest,
7};
8
9impl CodexClient {
10    /// Runs `codex debug` and returns captured output.
11    pub async fn debug(
12        &self,
13        request: DebugCommandRequest,
14    ) -> Result<ApplyDiffArtifacts, CodexError> {
15        self.run_simple_command_with_overrides(vec![OsString::from("debug")], request.overrides)
16            .await
17    }
18
19    /// Runs `codex debug help [COMMAND]...` and returns captured output.
20    pub async fn debug_help(
21        &self,
22        request: DebugHelpRequest,
23    ) -> Result<ApplyDiffArtifacts, CodexError> {
24        let DebugHelpRequest { command, overrides } = request;
25        let mut args = vec![OsString::from("debug"), OsString::from("help")];
26        args.extend(command.into_iter().map(OsString::from));
27        self.run_simple_command_with_overrides(args, overrides)
28            .await
29    }
30
31    /// Runs `codex debug app-server` and returns captured output.
32    pub async fn debug_app_server(
33        &self,
34        request: DebugAppServerRequest,
35    ) -> Result<ApplyDiffArtifacts, CodexError> {
36        self.run_simple_command_with_overrides(
37            vec![OsString::from("debug"), OsString::from("app-server")],
38            request.overrides,
39        )
40        .await
41    }
42
43    /// Runs `codex debug app-server help [COMMAND]...` and returns captured output.
44    pub async fn debug_app_server_help(
45        &self,
46        request: DebugAppServerHelpRequest,
47    ) -> Result<ApplyDiffArtifacts, CodexError> {
48        let DebugAppServerHelpRequest { command, overrides } = request;
49        let mut args = vec![
50            OsString::from("debug"),
51            OsString::from("app-server"),
52            OsString::from("help"),
53        ];
54        args.extend(command.into_iter().map(OsString::from));
55        self.run_simple_command_with_overrides(args, overrides)
56            .await
57    }
58
59    /// Runs `codex debug app-server send-message-v2 <USER_MESSAGE>` and returns captured output.
60    pub async fn debug_app_server_send_message_v2(
61        &self,
62        request: DebugAppServerSendMessageV2Request,
63    ) -> Result<ApplyDiffArtifacts, CodexError> {
64        let DebugAppServerSendMessageV2Request {
65            user_message,
66            overrides,
67        } = request;
68        self.run_simple_command_with_overrides(
69            vec![
70                OsString::from("debug"),
71                OsString::from("app-server"),
72                OsString::from("send-message-v2"),
73                OsString::from(user_message),
74            ],
75            overrides,
76        )
77        .await
78    }
79
80    /// Runs `codex debug models [--bundled]` and returns captured output.
81    pub async fn debug_models(
82        &self,
83        request: DebugModelsRequest,
84    ) -> Result<ApplyDiffArtifacts, CodexError> {
85        let DebugModelsRequest { bundled, overrides } = request;
86        let mut args = vec![OsString::from("debug"), OsString::from("models")];
87        if bundled {
88            args.push(OsString::from("--bundled"));
89        }
90        self.run_simple_command_with_overrides(args, overrides)
91            .await
92    }
93
94    /// Runs `codex debug prompt-input [--image <FILE>...] [PROMPT]` and returns captured output.
95    pub async fn debug_prompt_input(
96        &self,
97        request: DebugPromptInputRequest,
98    ) -> Result<ApplyDiffArtifacts, CodexError> {
99        let DebugPromptInputRequest {
100            prompt,
101            images,
102            overrides,
103        } = request;
104        let mut args = vec![OsString::from("debug"), OsString::from("prompt-input")];
105        for image in images {
106            args.push(OsString::from("--image"));
107            args.push(image.into_os_string());
108        }
109        if let Some(prompt) = prompt {
110            args.push(OsString::from(prompt));
111        }
112        self.run_simple_command_with_overrides(args, overrides)
113            .await
114    }
115}