test(config-handler): add tests for plan demote and prometheus mode
This commit is contained in:
parent
c4957a469d
commit
488c89156b
@ -1,6 +1,168 @@
|
|||||||
import { describe, test, expect } from "bun:test"
|
import { describe, test, expect, mock, beforeEach } from "bun:test"
|
||||||
import { resolveCategoryConfig } from "./config-handler"
|
import { resolveCategoryConfig, createConfigHandler } from "./config-handler"
|
||||||
import type { CategoryConfig } from "../config/schema"
|
import type { CategoryConfig } from "../config/schema"
|
||||||
|
import type { OhMyOpenCodeConfig } from "../config"
|
||||||
|
|
||||||
|
mock.module("../agents", () => ({
|
||||||
|
createBuiltinAgents: async () => ({
|
||||||
|
sisyphus: { name: "sisyphus", prompt: "test", mode: "primary" },
|
||||||
|
oracle: { name: "oracle", prompt: "test", mode: "subagent" },
|
||||||
|
}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../agents/sisyphus-junior", () => ({
|
||||||
|
createSisyphusJuniorAgentWithOverrides: () => ({
|
||||||
|
name: "sisyphus-junior",
|
||||||
|
prompt: "test",
|
||||||
|
mode: "subagent",
|
||||||
|
}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../features/claude-code-command-loader", () => ({
|
||||||
|
loadUserCommands: async () => ({}),
|
||||||
|
loadProjectCommands: async () => ({}),
|
||||||
|
loadOpencodeGlobalCommands: async () => ({}),
|
||||||
|
loadOpencodeProjectCommands: async () => ({}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../features/builtin-commands", () => ({
|
||||||
|
loadBuiltinCommands: () => ({}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../features/opencode-skill-loader", () => ({
|
||||||
|
loadUserSkills: async () => ({}),
|
||||||
|
loadProjectSkills: async () => ({}),
|
||||||
|
loadOpencodeGlobalSkills: async () => ({}),
|
||||||
|
loadOpencodeProjectSkills: async () => ({}),
|
||||||
|
discoverUserClaudeSkills: async () => [],
|
||||||
|
discoverProjectClaudeSkills: async () => [],
|
||||||
|
discoverOpencodeGlobalSkills: async () => [],
|
||||||
|
discoverOpencodeProjectSkills: async () => [],
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../features/claude-code-agent-loader", () => ({
|
||||||
|
loadUserAgents: () => ({}),
|
||||||
|
loadProjectAgents: () => ({}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../features/claude-code-mcp-loader", () => ({
|
||||||
|
loadMcpConfigs: async () => ({ servers: {} }),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../features/claude-code-plugin-loader", () => ({
|
||||||
|
loadAllPluginComponents: async () => ({
|
||||||
|
commands: {},
|
||||||
|
skills: {},
|
||||||
|
agents: {},
|
||||||
|
mcpServers: {},
|
||||||
|
hooksConfigs: [],
|
||||||
|
plugins: [],
|
||||||
|
errors: [],
|
||||||
|
}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../mcp", () => ({
|
||||||
|
createBuiltinMcps: () => ({}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../shared", () => ({
|
||||||
|
log: () => {},
|
||||||
|
fetchAvailableModels: async () => new Set(["anthropic/claude-opus-4-5"]),
|
||||||
|
readConnectedProvidersCache: () => null,
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../shared/opencode-config-dir", () => ({
|
||||||
|
getOpenCodeConfigPaths: () => ({
|
||||||
|
global: "/tmp/.config/opencode",
|
||||||
|
project: "/tmp/.opencode",
|
||||||
|
}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../shared/permission-compat", () => ({
|
||||||
|
migrateAgentConfig: (config: Record<string, unknown>) => config,
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../shared/migration", () => ({
|
||||||
|
AGENT_NAME_MAP: {},
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../shared/model-resolver", () => ({
|
||||||
|
resolveModelWithFallback: () => ({ model: "anthropic/claude-opus-4-5" }),
|
||||||
|
}))
|
||||||
|
|
||||||
|
mock.module("../shared/model-requirements", () => ({
|
||||||
|
AGENT_MODEL_REQUIREMENTS: {
|
||||||
|
prometheus: { fallbackChain: [{ providers: ["anthropic"], model: "claude-opus-4-5" }] },
|
||||||
|
},
|
||||||
|
}))
|
||||||
|
|
||||||
|
describe("Plan agent demote behavior", () => {
|
||||||
|
test("plan agent should be demoted to subagent mode when replacePlan is true", async () => {
|
||||||
|
// #given
|
||||||
|
const pluginConfig: OhMyOpenCodeConfig = {
|
||||||
|
sisyphus_agent: {
|
||||||
|
planner_enabled: true,
|
||||||
|
replace_plan: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
const config: Record<string, unknown> = {
|
||||||
|
model: "anthropic/claude-opus-4-5",
|
||||||
|
agent: {
|
||||||
|
plan: {
|
||||||
|
name: "plan",
|
||||||
|
mode: "primary",
|
||||||
|
prompt: "original plan prompt",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
const handler = createConfigHandler({
|
||||||
|
ctx: { directory: "/tmp" },
|
||||||
|
pluginConfig,
|
||||||
|
modelCacheState: {
|
||||||
|
anthropicContext1MEnabled: false,
|
||||||
|
modelContextLimitsCache: new Map(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
// #when
|
||||||
|
await handler(config)
|
||||||
|
|
||||||
|
// #then
|
||||||
|
const agents = config.agent as Record<string, { mode?: string; name?: string }>
|
||||||
|
expect(agents.plan).toBeDefined()
|
||||||
|
expect(agents.plan.mode).toBe("subagent")
|
||||||
|
expect(agents.plan.name).toBe("plan")
|
||||||
|
})
|
||||||
|
|
||||||
|
test("prometheus should have mode 'all' to be callable via delegate_task", async () => {
|
||||||
|
// #given
|
||||||
|
const pluginConfig: OhMyOpenCodeConfig = {
|
||||||
|
sisyphus_agent: {
|
||||||
|
planner_enabled: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
const config: Record<string, unknown> = {
|
||||||
|
model: "anthropic/claude-opus-4-5",
|
||||||
|
agent: {},
|
||||||
|
}
|
||||||
|
const handler = createConfigHandler({
|
||||||
|
ctx: { directory: "/tmp" },
|
||||||
|
pluginConfig,
|
||||||
|
modelCacheState: {
|
||||||
|
anthropicContext1MEnabled: false,
|
||||||
|
modelContextLimitsCache: new Map(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
// #when
|
||||||
|
await handler(config)
|
||||||
|
|
||||||
|
// #then
|
||||||
|
const agents = config.agent as Record<string, { mode?: string }>
|
||||||
|
expect(agents.prometheus).toBeDefined()
|
||||||
|
expect(agents.prometheus.mode).toBe("all")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("Prometheus category config resolution", () => {
|
describe("Prometheus category config resolution", () => {
|
||||||
test("resolves ultrabrain category config", () => {
|
test("resolves ultrabrain category config", () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user