Skip to main content

codex/commands/
plugin.rs

1use std::ffi::OsString;
2
3use crate::{
4    ApplyDiffArtifacts, CodexClient, CodexError, PluginCommandRequest, PluginHelpRequest,
5    PluginMarketplaceAddRequest, PluginMarketplaceCommandRequest, PluginMarketplaceHelpRequest,
6    PluginMarketplaceRemoveRequest, PluginMarketplaceUpgradeRequest,
7};
8
9impl CodexClient {
10    /// Runs `codex plugin` and returns captured output.
11    pub async fn plugin(
12        &self,
13        request: PluginCommandRequest,
14    ) -> Result<ApplyDiffArtifacts, CodexError> {
15        self.run_simple_command_with_overrides(vec![OsString::from("plugin")], request.overrides)
16            .await
17    }
18
19    /// Runs `codex plugin help [COMMAND]...` and returns captured output.
20    pub async fn plugin_help(
21        &self,
22        request: PluginHelpRequest,
23    ) -> Result<ApplyDiffArtifacts, CodexError> {
24        let PluginHelpRequest { command, overrides } = request;
25        let mut args = vec![OsString::from("plugin"), 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 plugin marketplace` and returns captured output.
32    pub async fn plugin_marketplace(
33        &self,
34        request: PluginMarketplaceCommandRequest,
35    ) -> Result<ApplyDiffArtifacts, CodexError> {
36        self.run_simple_command_with_overrides(
37            vec![OsString::from("plugin"), OsString::from("marketplace")],
38            request.overrides,
39        )
40        .await
41    }
42
43    /// Runs `codex plugin marketplace help [COMMAND]...` and returns captured output.
44    pub async fn plugin_marketplace_help(
45        &self,
46        request: PluginMarketplaceHelpRequest,
47    ) -> Result<ApplyDiffArtifacts, CodexError> {
48        let PluginMarketplaceHelpRequest { command, overrides } = request;
49        let mut args = vec![
50            OsString::from("plugin"),
51            OsString::from("marketplace"),
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 plugin marketplace add <SOURCE>` and returns captured output.
60    pub async fn plugin_marketplace_add(
61        &self,
62        request: PluginMarketplaceAddRequest,
63    ) -> Result<ApplyDiffArtifacts, CodexError> {
64        let PluginMarketplaceAddRequest {
65            source,
66            source_ref,
67            sparse_path,
68            overrides,
69        } = request;
70
71        let mut args = vec![
72            OsString::from("plugin"),
73            OsString::from("marketplace"),
74            OsString::from("add"),
75        ];
76        if let Some(source_ref) = source_ref {
77            args.push(OsString::from("--ref"));
78            args.push(OsString::from(source_ref));
79        }
80        if let Some(sparse_path) = sparse_path {
81            args.push(OsString::from("--sparse"));
82            args.push(OsString::from(sparse_path));
83        }
84        args.push(OsString::from(source));
85
86        self.run_simple_command_with_overrides(args, overrides)
87            .await
88    }
89
90    /// Runs `codex plugin marketplace remove <MARKETPLACE_NAME>` and returns captured output.
91    pub async fn plugin_marketplace_remove(
92        &self,
93        request: PluginMarketplaceRemoveRequest,
94    ) -> Result<ApplyDiffArtifacts, CodexError> {
95        let PluginMarketplaceRemoveRequest {
96            marketplace_name,
97            overrides,
98        } = request;
99
100        self.run_simple_command_with_overrides(
101            vec![
102                OsString::from("plugin"),
103                OsString::from("marketplace"),
104                OsString::from("remove"),
105                OsString::from(marketplace_name),
106            ],
107            overrides,
108        )
109        .await
110    }
111
112    /// Runs `codex plugin marketplace upgrade [MARKETPLACE_NAME]` and returns captured output.
113    pub async fn plugin_marketplace_upgrade(
114        &self,
115        request: PluginMarketplaceUpgradeRequest,
116    ) -> Result<ApplyDiffArtifacts, CodexError> {
117        let PluginMarketplaceUpgradeRequest {
118            marketplace_name,
119            overrides,
120        } = request;
121
122        let mut args = vec![
123            OsString::from("plugin"),
124            OsString::from("marketplace"),
125            OsString::from("upgrade"),
126        ];
127        if let Some(marketplace_name) = marketplace_name {
128            args.push(OsString::from(marketplace_name));
129        }
130
131        self.run_simple_command_with_overrides(args, overrides)
132            .await
133    }
134}