mirror of
https://github.com/openai/codex.git
synced 2026-10-21 17:48:44 +00:00
## Why The skills extension needs the resolved turn environments to build a real per-turn `SkillListQuery`. The previous `TurnLifecycleContributor` hook only had a turn id, so it could only seed a placeholder query and never carry the executor authorities that executor-scoped skill routing will need. Moving catalog resolution onto `TurnInputContributor` puts the skills extension on the same turn-preparation path that already has the environment ids and working directories for the submitted turn, while keeping the actual prompt injection work for follow-up changes. ## What changed - switch `ext/skills` from `TurnLifecycleContributor` to `TurnInputContributor` - build `executor_authorities` from `TurnInputContext.environments` and pass them through `SkillListQuery` - keep storing the resolved catalog in `SkillsTurnState`, but drop the placeholder query helper that no longer matches the real data flow - update the extension TODOs to reflect that per-turn catalog resolution now happens in the turn-input contributor, and that prompt/context injection still needs to move later ## Testing - Not run locally.
53 lines
1.5 KiB
Rust
53 lines
1.5 KiB
Rust
use std::future::Future;
|
|
|
|
use crate::catalog::SkillAuthority;
|
|
use crate::catalog::SkillCatalog;
|
|
use crate::catalog::SkillPackageId;
|
|
use crate::catalog::SkillProviderResult;
|
|
use crate::catalog::SkillReadResult;
|
|
use crate::catalog::SkillResourceId;
|
|
use crate::catalog::SkillSearchResult;
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct SkillListQuery {
|
|
pub turn_id: String,
|
|
pub executor_authorities: Vec<SkillAuthority>,
|
|
pub include_host_skills: bool,
|
|
pub include_remote_skills: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct SkillReadRequest {
|
|
pub authority: SkillAuthority,
|
|
pub resource: SkillResourceId,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct SkillSearchRequest {
|
|
pub authority: SkillAuthority,
|
|
pub package: SkillPackageId,
|
|
pub query: String,
|
|
}
|
|
|
|
/// Source-specific skill catalog and resource access.
|
|
///
|
|
/// Implementations must preserve authority boundaries: a resource listed by a
|
|
/// provider must be read or searched through the same provider/authority rather
|
|
/// than converted into an ambient local path.
|
|
pub trait SkillProvider: Send + Sync {
|
|
fn list(
|
|
&self,
|
|
query: SkillListQuery,
|
|
) -> impl Future<Output = SkillProviderResult<SkillCatalog>> + Send;
|
|
|
|
fn read(
|
|
&self,
|
|
request: SkillReadRequest,
|
|
) -> impl Future<Output = SkillProviderResult<SkillReadResult>> + Send;
|
|
|
|
fn search(
|
|
&self,
|
|
request: SkillSearchRequest,
|
|
) -> impl Future<Output = SkillProviderResult<SkillSearchResult>> + Send;
|
|
}
|