mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
ba5b94287e
- [x] Add tool_suggest tool. - [x] Move chatgpt/src/connectors.rs and core/src/connectors.rs into a dedicated mod so that we have all the logic and global cache in one place. - [x] Update TUI app link view to support rendering the installation view for mcp elicitation. --------- Co-authored-by: Shaqayeq <shaqayeq@openai.com> Co-authored-by: Eric Traut <etraut@openai.com> Co-authored-by: pakrym-oai <pakrym@openai.com> Co-authored-by: Ahmed Ibrahim <aibrahim@openai.com> Co-authored-by: guinness-oai <guinness@openai.com> Co-authored-by: Eugene Brevdo <ebrevdo@users.noreply.github.com> Co-authored-by: Charlie Guo <cguo@openai.com> Co-authored-by: Fouad Matin <fouad@openai.com> Co-authored-by: Fouad Matin <169186268+fouad-openai@users.noreply.github.com> Co-authored-by: xl-openai <xl@openai.com> Co-authored-by: alexsong-oai <alexsong@openai.com> Co-authored-by: Owen Lin <owenlin0@gmail.com> Co-authored-by: sdcoffey <stevendcoffey@gmail.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Won Park <won@openai.com> Co-authored-by: Dylan Hurd <dylan.hurd@openai.com> Co-authored-by: celia-oai <celia@openai.com> Co-authored-by: gabec-openai <gabec@openai.com> Co-authored-by: joeytrasatti-openai <joey.trasatti@openai.com> Co-authored-by: Leo Shimonaka <leoshimo@openai.com> Co-authored-by: Rasmus Rygaard <rasmus@openai.com> Co-authored-by: maja-openai <163171781+maja-openai@users.noreply.github.com> Co-authored-by: pash-openai <pash@openai.com> Co-authored-by: Josh McKinney <joshka@openai.com>
112 lines
3.0 KiB
Rust
112 lines
3.0 KiB
Rust
use crate::plugins::PluginCapabilitySummary;
|
|
use codex_app_server_protocol::AppInfo;
|
|
use serde::Deserialize;
|
|
use serde::Serialize;
|
|
|
|
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub(crate) enum DiscoverableToolType {
|
|
Connector,
|
|
Plugin,
|
|
}
|
|
|
|
impl DiscoverableToolType {
|
|
pub(crate) fn as_str(self) -> &'static str {
|
|
match self {
|
|
Self::Connector => "connector",
|
|
Self::Plugin => "plugin",
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub(crate) enum DiscoverableToolAction {
|
|
Install,
|
|
Enable,
|
|
}
|
|
|
|
impl DiscoverableToolAction {
|
|
pub(crate) fn as_str(self) -> &'static str {
|
|
match self {
|
|
Self::Install => "install",
|
|
Self::Enable => "enable",
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
pub(crate) enum DiscoverableTool {
|
|
Connector(Box<AppInfo>),
|
|
Plugin(Box<DiscoverablePluginInfo>),
|
|
}
|
|
|
|
impl DiscoverableTool {
|
|
pub(crate) fn tool_type(&self) -> DiscoverableToolType {
|
|
match self {
|
|
Self::Connector(_) => DiscoverableToolType::Connector,
|
|
Self::Plugin(_) => DiscoverableToolType::Plugin,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn id(&self) -> &str {
|
|
match self {
|
|
Self::Connector(connector) => connector.id.as_str(),
|
|
Self::Plugin(plugin) => plugin.id.as_str(),
|
|
}
|
|
}
|
|
|
|
pub(crate) fn name(&self) -> &str {
|
|
match self {
|
|
Self::Connector(connector) => connector.name.as_str(),
|
|
Self::Plugin(plugin) => plugin.name.as_str(),
|
|
}
|
|
}
|
|
|
|
pub(crate) fn description(&self) -> Option<&str> {
|
|
match self {
|
|
Self::Connector(connector) => connector.description.as_deref(),
|
|
Self::Plugin(plugin) => plugin.description.as_deref(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<AppInfo> for DiscoverableTool {
|
|
fn from(value: AppInfo) -> Self {
|
|
Self::Connector(Box::new(value))
|
|
}
|
|
}
|
|
|
|
impl From<DiscoverablePluginInfo> for DiscoverableTool {
|
|
fn from(value: DiscoverablePluginInfo) -> Self {
|
|
Self::Plugin(Box::new(value))
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub(crate) struct DiscoverablePluginInfo {
|
|
pub(crate) id: String,
|
|
pub(crate) name: String,
|
|
pub(crate) description: Option<String>,
|
|
pub(crate) has_skills: bool,
|
|
pub(crate) mcp_server_names: Vec<String>,
|
|
pub(crate) app_connector_ids: Vec<String>,
|
|
}
|
|
|
|
impl From<PluginCapabilitySummary> for DiscoverablePluginInfo {
|
|
fn from(value: PluginCapabilitySummary) -> Self {
|
|
Self {
|
|
id: value.config_name,
|
|
name: value.display_name,
|
|
description: value.description,
|
|
has_skills: value.has_skills,
|
|
mcp_server_names: value.mcp_server_names,
|
|
app_connector_ids: value
|
|
.app_connector_ids
|
|
.into_iter()
|
|
.map(|connector_id| connector_id.0)
|
|
.collect(),
|
|
}
|
|
}
|
|
}
|