ac8987a732
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
107 lines
3.7 KiB
TypeScript
107 lines
3.7 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"
|
|
import { getGptApplyPatchPermission } from "../gpt-apply-patch-guard"
|
|
import { applyFrontierToolSchemaPermission } from "../frontier-tool-schema-guard"
|
|
|
|
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)
|
|
}
|
|
|
|
const resolvedModel = hephaestusConfig.model ?? ""
|
|
hephaestusConfig.permission = applyFrontierToolSchemaPermission(
|
|
hephaestusConfig.permission,
|
|
resolvedModel,
|
|
hephaestusOverride?.permission,
|
|
(hephaestusOverride as { tools?: Record<string, boolean> } | undefined)?.tools
|
|
)
|
|
|
|
const gptDeny = getGptApplyPatchPermission(resolvedModel)
|
|
if (Object.keys(gptDeny).length > 0 && hephaestusConfig.permission) {
|
|
Object.assign(hephaestusConfig.permission, gptDeny)
|
|
}
|
|
|
|
return hephaestusConfig
|
|
}
|