mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
bf667c7003
## Why We already have the machinery to support multiple environments on a single thread, but we only show the model the contents of `AGENTS.md` files in the primary environment. We should show the model all of the relevant project instructions when we know there's more than one environment. ## Known Gaps As discussed in the RFC, this implementation: 1. doesn't handle environments being added/removed to/from the thread after its creation 2. it doesn't enforce an aggregate context budget across environments, and instead applies the configured project maximum independently to each environment ## Implementation - Discover project instructions in environment order with an independent byte budget per environment and preserve source provenance/order. - Keep the legacy fragment byte-for-byte when exactly one environment contributes project instructions; use environment-labeled sections when two or more environments contribute. - Freeze the complete rendered fragment in `LoadedAgentsMd`, insert it directly into requests, and recognize both layouts in contextual and memory filtering. - Add exact rendering, independent-budget, source-order, creation-snapshot, and consumer coverage without changing app-server schemas.
31 lines
774 B
Rust
31 lines
774 B
Rust
use super::ContextualUserFragment;
|
|
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
pub(crate) struct UserInstructions {
|
|
pub(crate) directory: Option<String>,
|
|
pub(crate) text: String,
|
|
}
|
|
|
|
impl ContextualUserFragment for UserInstructions {
|
|
fn role(&self) -> &'static str {
|
|
"user"
|
|
}
|
|
|
|
fn markers(&self) -> (&'static str, &'static str) {
|
|
Self::type_markers()
|
|
}
|
|
|
|
fn type_markers() -> (&'static str, &'static str) {
|
|
("# AGENTS.md instructions", "</INSTRUCTIONS>")
|
|
}
|
|
|
|
fn body(&self) -> String {
|
|
let directory = self
|
|
.directory
|
|
.as_ref()
|
|
.map(|directory| format!(" for {directory}"))
|
|
.unwrap_or_default();
|
|
format!("{directory}\n\n<INSTRUCTIONS>\n{}\n", self.text)
|
|
}
|
|
}
|