feat(environment): introduce disable_omo_env configuration option
- Added a new configuration option `disable_omo_env` to control the injection of the `<omo-env>` block in agent prompts. - Updated relevant functions and tests to support this feature, ensuring that the environment context can be toggled on or off as needed. - Enhanced documentation to reflect the new option and its implications for API cost and cache hit rates.
This commit is contained in:
@@ -662,6 +662,178 @@ describe("createBuiltinAgents with requiresProvider gating (hephaestus)", () =>
|
||||
})
|
||||
})
|
||||
|
||||
describe("Hephaestus environment context toggle", () => {
|
||||
let fetchSpy: ReturnType<typeof spyOn>
|
||||
|
||||
beforeEach(() => {
|
||||
fetchSpy = spyOn(shared, "fetchAvailableModels").mockResolvedValue(
|
||||
new Set(["openai/gpt-5.3-codex"])
|
||||
)
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
fetchSpy.mockRestore()
|
||||
})
|
||||
|
||||
async function buildAgents(disableFlag?: boolean) {
|
||||
return createBuiltinAgents(
|
||||
[],
|
||||
{},
|
||||
"/tmp/work",
|
||||
TEST_DEFAULT_MODEL,
|
||||
undefined,
|
||||
undefined,
|
||||
[],
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
disableFlag
|
||||
)
|
||||
}
|
||||
|
||||
test("includes <omo-env> tag when disable flag is unset", async () => {
|
||||
// #when
|
||||
const agents = await buildAgents(undefined)
|
||||
|
||||
// #then
|
||||
expect(agents.hephaestus).toBeDefined()
|
||||
expect(agents.hephaestus.prompt).toContain("<omo-env>")
|
||||
})
|
||||
|
||||
test("includes <omo-env> tag when disable flag is false", async () => {
|
||||
// #when
|
||||
const agents = await buildAgents(false)
|
||||
|
||||
// #then
|
||||
expect(agents.hephaestus).toBeDefined()
|
||||
expect(agents.hephaestus.prompt).toContain("<omo-env>")
|
||||
})
|
||||
|
||||
test("omits <omo-env> tag when disable flag is true", async () => {
|
||||
// #when
|
||||
const agents = await buildAgents(true)
|
||||
|
||||
// #then
|
||||
expect(agents.hephaestus).toBeDefined()
|
||||
expect(agents.hephaestus.prompt).not.toContain("<omo-env>")
|
||||
})
|
||||
})
|
||||
|
||||
describe("Sisyphus and Librarian environment context toggle", () => {
|
||||
let fetchSpy: ReturnType<typeof spyOn>
|
||||
|
||||
beforeEach(() => {
|
||||
fetchSpy = spyOn(shared, "fetchAvailableModels").mockResolvedValue(
|
||||
new Set(["anthropic/claude-opus-4-6", "google/gemini-3-flash"])
|
||||
)
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
fetchSpy.mockRestore()
|
||||
})
|
||||
|
||||
async function buildAgents(disableFlag?: boolean) {
|
||||
return createBuiltinAgents(
|
||||
[],
|
||||
{},
|
||||
"/tmp/work",
|
||||
TEST_DEFAULT_MODEL,
|
||||
undefined,
|
||||
undefined,
|
||||
[],
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
disableFlag
|
||||
)
|
||||
}
|
||||
|
||||
test("includes <omo-env> for sisyphus and librarian when disable flag is unset", async () => {
|
||||
const agents = await buildAgents(undefined)
|
||||
|
||||
expect(agents.sisyphus).toBeDefined()
|
||||
expect(agents.librarian).toBeDefined()
|
||||
expect(agents.sisyphus.prompt).toContain("<omo-env>")
|
||||
expect(agents.librarian.prompt).toContain("<omo-env>")
|
||||
})
|
||||
|
||||
test("includes <omo-env> for sisyphus and librarian when disable flag is false", async () => {
|
||||
const agents = await buildAgents(false)
|
||||
|
||||
expect(agents.sisyphus).toBeDefined()
|
||||
expect(agents.librarian).toBeDefined()
|
||||
expect(agents.sisyphus.prompt).toContain("<omo-env>")
|
||||
expect(agents.librarian.prompt).toContain("<omo-env>")
|
||||
})
|
||||
|
||||
test("omits <omo-env> for sisyphus and librarian when disable flag is true", async () => {
|
||||
const agents = await buildAgents(true)
|
||||
|
||||
expect(agents.sisyphus).toBeDefined()
|
||||
expect(agents.librarian).toBeDefined()
|
||||
expect(agents.sisyphus.prompt).not.toContain("<omo-env>")
|
||||
expect(agents.librarian.prompt).not.toContain("<omo-env>")
|
||||
})
|
||||
})
|
||||
|
||||
describe("Atlas is unaffected by environment context toggle", () => {
|
||||
let fetchSpy: ReturnType<typeof spyOn>
|
||||
|
||||
beforeEach(() => {
|
||||
fetchSpy = spyOn(shared, "fetchAvailableModels").mockResolvedValue(
|
||||
new Set(["anthropic/claude-opus-4-6", "openai/gpt-5.2"])
|
||||
)
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
fetchSpy.mockRestore()
|
||||
})
|
||||
|
||||
test("atlas prompt is unchanged and never contains <omo-env>", async () => {
|
||||
const agentsDefault = await createBuiltinAgents(
|
||||
[],
|
||||
{},
|
||||
"/tmp/work",
|
||||
TEST_DEFAULT_MODEL,
|
||||
undefined,
|
||||
undefined,
|
||||
[],
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
false
|
||||
)
|
||||
|
||||
const agentsDisabled = await createBuiltinAgents(
|
||||
[],
|
||||
{},
|
||||
"/tmp/work",
|
||||
TEST_DEFAULT_MODEL,
|
||||
undefined,
|
||||
undefined,
|
||||
[],
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
true
|
||||
)
|
||||
|
||||
expect(agentsDefault.atlas).toBeDefined()
|
||||
expect(agentsDisabled.atlas).toBeDefined()
|
||||
expect(agentsDefault.atlas.prompt).not.toContain("<omo-env>")
|
||||
expect(agentsDisabled.atlas.prompt).not.toContain("<omo-env>")
|
||||
expect(agentsDisabled.atlas.prompt).toBe(agentsDefault.atlas.prompt)
|
||||
})
|
||||
})
|
||||
|
||||
describe("createBuiltinAgents with requiresAnyModel gating (sisyphus)", () => {
|
||||
test("sisyphus is created when at least one fallback model is available", async () => {
|
||||
// #given
|
||||
|
||||
Reference in New Issue
Block a user