- 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.
91 lines
3.1 KiB
TypeScript
91 lines
3.1 KiB
TypeScript
import type { AgentConfig } from "@opencode-ai/sdk"
|
|
import type { AgentOverrides } from "../types"
|
|
import type { CategoryConfig } from "../../config/schema"
|
|
import type { AvailableAgent, AvailableCategory, AvailableSkill } from "../dynamic-agent-prompt-builder"
|
|
import { AGENT_MODEL_REQUIREMENTS, isAnyProviderConnected } from "../../shared"
|
|
import { createHephaestusAgent } from "../hephaestus"
|
|
import { applyEnvironmentContext } from "./environment-context"
|
|
import { applyCategoryOverride, mergeAgentConfig } from "./agent-overrides"
|
|
import { applyModelResolution, getFirstFallbackModel } from "./model-resolution"
|
|
|
|
export function maybeCreateHephaestusConfig(input: {
|
|
disabledAgents: string[]
|
|
agentOverrides: AgentOverrides
|
|
availableModels: Set<string>
|
|
systemDefaultModel?: string
|
|
isFirstRunNoCache: boolean
|
|
availableAgents: AvailableAgent[]
|
|
availableSkills: AvailableSkill[]
|
|
availableCategories: AvailableCategory[]
|
|
mergedCategories: Record<string, CategoryConfig>
|
|
directory?: string
|
|
useTaskSystem: boolean
|
|
disableOmoEnv?: boolean
|
|
}): AgentConfig | undefined {
|
|
const {
|
|
disabledAgents,
|
|
agentOverrides,
|
|
availableModels,
|
|
systemDefaultModel,
|
|
isFirstRunNoCache,
|
|
availableAgents,
|
|
availableSkills,
|
|
availableCategories,
|
|
mergedCategories,
|
|
directory,
|
|
useTaskSystem,
|
|
disableOmoEnv = false,
|
|
} = input
|
|
|
|
if (disabledAgents.includes("hephaestus")) return undefined
|
|
|
|
const hephaestusOverride = agentOverrides["hephaestus"]
|
|
const hephaestusRequirement = AGENT_MODEL_REQUIREMENTS["hephaestus"]
|
|
const hasHephaestusExplicitConfig = hephaestusOverride !== undefined
|
|
|
|
const hasRequiredProvider =
|
|
!hephaestusRequirement?.requiresProvider ||
|
|
hasHephaestusExplicitConfig ||
|
|
isFirstRunNoCache ||
|
|
isAnyProviderConnected(hephaestusRequirement.requiresProvider, availableModels)
|
|
|
|
if (!hasRequiredProvider) return undefined
|
|
|
|
let hephaestusResolution = applyModelResolution({
|
|
userModel: hephaestusOverride?.model,
|
|
requirement: hephaestusRequirement,
|
|
availableModels,
|
|
systemDefaultModel,
|
|
})
|
|
|
|
if (isFirstRunNoCache && !hephaestusOverride?.model) {
|
|
hephaestusResolution = getFirstFallbackModel(hephaestusRequirement)
|
|
}
|
|
|
|
if (!hephaestusResolution) return undefined
|
|
const { model: hephaestusModel, variant: hephaestusResolvedVariant } = hephaestusResolution
|
|
|
|
let hephaestusConfig = createHephaestusAgent(
|
|
hephaestusModel,
|
|
availableAgents,
|
|
undefined,
|
|
availableSkills,
|
|
availableCategories,
|
|
useTaskSystem
|
|
)
|
|
|
|
hephaestusConfig = { ...hephaestusConfig, variant: hephaestusResolvedVariant ?? "medium" }
|
|
|
|
const hepOverrideCategory = (hephaestusOverride as Record<string, unknown> | undefined)?.category as string | undefined
|
|
if (hepOverrideCategory) {
|
|
hephaestusConfig = applyCategoryOverride(hephaestusConfig, hepOverrideCategory, mergedCategories)
|
|
}
|
|
|
|
hephaestusConfig = applyEnvironmentContext(hephaestusConfig, directory, { disableOmoEnv })
|
|
|
|
if (hephaestusOverride) {
|
|
hephaestusConfig = mergeAgentConfig(hephaestusConfig, hephaestusOverride, directory)
|
|
}
|
|
return hephaestusConfig
|
|
}
|