codex_skills_extension/
provider.rs1use std::future::Future;
2use std::pin::Pin;
3use std::sync::Arc;
4
5mod executor;
6mod host;
7mod orchestrator;
8
9use codex_core_skills::HostSkillsSnapshot;
10use codex_exec_server::ExecutorCapabilityDiscoverySnapshot;
11use codex_mcp::McpResourceClient;
12use codex_protocol::capabilities::SelectedCapabilityRoot;
13
14use crate::catalog::SkillAuthority;
15use crate::catalog::SkillCatalog;
16use crate::catalog::SkillPackageId;
17use crate::catalog::SkillProviderResult;
18use crate::catalog::SkillReadResult;
19use crate::catalog::SkillResourceId;
20use crate::catalog::SkillSearchResult;
21
22pub use executor::ExecutorSkillProvider;
23pub use host::HostSkillProvider;
24pub use orchestrator::OrchestratorSkillProvider;
25
26#[derive(Clone, Debug)]
27pub struct SkillListQuery {
28 pub turn_id: String,
29 pub executor_roots: Vec<SelectedCapabilityRoot>,
30 pub host_snapshot: Option<Arc<HostSkillsSnapshot>>,
31 pub include_host_skills: bool,
32 pub include_bundled_skills: bool,
33 pub include_orchestrator_skills: bool,
34 pub mcp_resources: Option<Arc<McpResourceClient>>,
35 pub executor_capability_discovery: Option<ExecutorCapabilityDiscoverySnapshot>,
37}
38
39#[derive(Clone, Debug)]
40pub struct SkillReadRequest {
41 pub authority: SkillAuthority,
42 pub package: SkillPackageId,
43 pub resource: SkillResourceId,
44 pub host_snapshot: Option<Arc<HostSkillsSnapshot>>,
45 pub mcp_resources: Option<Arc<McpResourceClient>>,
46}
47
48#[derive(Clone, Debug, PartialEq, Eq)]
49pub struct SkillSearchRequest {
50 pub authority: SkillAuthority,
51 pub package: SkillPackageId,
52 pub query: String,
53}
54
55pub type SkillProviderFuture<'a, T> =
56 Pin<Box<dyn Future<Output = SkillProviderResult<T>> + Send + 'a>>;
57
58pub trait SkillProvider: Send + Sync {
64 fn list(&self, query: SkillListQuery) -> SkillProviderFuture<'_, SkillCatalog>;
65
66 fn read(&self, request: SkillReadRequest) -> SkillProviderFuture<'_, SkillReadResult>;
67
68 fn search(&self, request: SkillSearchRequest) -> SkillProviderFuture<'_, SkillSearchResult>;
69}