core/src/context/available_skills_instructions.rs
50 lines
use codex_core_skills::AvailableSkills;use codex_core_skills::render_available_skills_body;use codex_protocol::protocol::SKILLS_INSTRUCTIONS_CLOSE_TAG;use codex_protocol::protocol::SKILLS_INSTRUCTIONS_OPEN_TAG;use super::ContextualUserFragment;/// Model-context fragment describing the skills available to Codex.#[derive(Debug, Clone, PartialEq, Eq)]pub struct AvailableSkillsInstructions { skill_root_lines: Vec<String>, skill_lines: Vec<String>,}impl AvailableSkillsInstructions { /// Creates a skills context fragment from pre-rendered catalog lines. pub fn from_skill_lines(skill_lines: Vec<String>) -> Self { Self { skill_root_lines: Vec::new(), skill_lines, } }}impl From<AvailableSkills> for AvailableSkillsInstructions { fn from(available_skills: AvailableSkills) -> Self { Self { skill_root_lines: available_skills.skill_root_lines, skill_lines: available_skills.skill_lines, } }}impl ContextualUserFragment for AvailableSkillsInstructions { fn role(&self) -> &'static str { "developer" } fn markers(&self) -> (&'static str, &'static str) { Self::type_markers() } fn type_markers() -> (&'static str, &'static str) { (SKILLS_INSTRUCTIONS_OPEN_TAG, SKILLS_INSTRUCTIONS_CLOSE_TAG) } fn body(&self) -> String { render_available_skills_body(&self.skill_root_lines, &self.skill_lines) }}