core/src/state/additional_context.rs
37 lines
use std::collections::BTreeMap;use crate::context::AdditionalContextDeveloperFragment;use crate::context::AdditionalContextUserFragment;use crate::context::ContextualUserFragment;use codex_protocol::models::ResponseInputItem;use codex_protocol::protocol::AdditionalContextEntry;use codex_protocol::protocol::AdditionalContextKind;#[derive(Debug, Clone, Default, PartialEq, Eq)]pub(crate) struct AdditionalContextStore { values: BTreeMap<String, AdditionalContextEntry>,}impl AdditionalContextStore { pub(crate) fn merge( &mut self, values: BTreeMap<String, AdditionalContextEntry>, ) -> Vec<ResponseInputItem> { let fragments = values .iter() .filter(|(key, value)| self.values.get(*key) != Some(*value)) .map(|(key, entry)| match entry.kind { AdditionalContextKind::Untrusted => { AdditionalContextUserFragment::new(key.clone(), entry.value.clone()) .into_response_input_item() } AdditionalContextKind::Application => { AdditionalContextDeveloperFragment::new(key.clone(), entry.value.clone()) .into_response_input_item() } }) .collect(); self.values = values; fragments }}