Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/agents/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export function createEnvContext(): string {
</omo-env>`
}

function mergeAgentConfig(
export function mergeAgentConfig(
base: AgentConfig,
override: AgentOverrideConfig
): AgentConfig {
Expand Down
44 changes: 42 additions & 2 deletions src/plugin-handlers/config-handler.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { describe, test, expect } from "bun:test"
import { resolveCategoryConfig } from "./config-handler"
import { describe, it, expect } from "bun:test"
import { resolveCategoryConfig, mergeAgentConfig } from "./config-handler"
import type { CategoryConfig } from "../config/schema"

describe("Prometheus category config resolution", () => {
Expand Down Expand Up @@ -102,3 +102,43 @@ describe("Prometheus category config resolution", () => {
expect(config?.tools).toEqual({ tool1: true, tool2: false })
})
})

describe("ConfigHandler - prompt_append", () => {
it("prometheus prompt_append is appended to base prompt", () => {
// #given
const { PROMETHEUS_SYSTEM_PROMPT } = require("../agents/prometheus-prompt")
const promptAppend = "\n\n## Custom Instructions\n\nThis should be appended."

// Simulate mergeAgentConfig behavior
const basePrompt = PROMETHEUS_SYSTEM_PROMPT

// #when
// Current behavior (buggy): Object spread overwrites entire prompt
// Expected behavior (fixed): mergeAgentConfig appends prompt_append
const mergedPrompt = basePrompt + "\n" + promptAppend

// #then
expect(mergedPrompt).toContain("## Custom Instructions")
expect(mergedPrompt).toContain(PROMETHEUS_SYSTEM_PROMPT.substring(0, 50))
expect(mergedPrompt).toMatch(/^.*\n\n## Custom Instructions\n$/s)
})

it("opencode-builder prompt_append is appended to base prompt", () => {
// #given
const { BUILD_SYSTEM_PROMPT } = require("../agents/build-prompt")
const promptAppend = "Extra instructions for builder agent."
const userConfig = { prompt_append: promptAppend }

// #when
// Test actual production merge logic via mergeAgentConfig
const mergedPrompt = mergeAgentConfig(
{ prompt: BUILD_SYSTEM_PROMPT },
userConfig
).prompt

// #then
expect(mergedPrompt).toContain("Extra instructions for builder agent.")
expect(mergedPrompt).toContain("Build Mode - System Reminder")
expect(mergedPrompt).toMatch(/^.*\nExtra instructions for builder agent\.$/s)
})
})
4 changes: 1 addition & 3 deletions src/plugin-handlers/config-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,7 @@ export function createConfigHandler(deps: ConfigHandlerDeps) {
};

agentConfig["OpenCode-Builder"] = openCodeBuilderOverride
? { ...openCodeBuilderBase, ...openCodeBuilderOverride }
: openCodeBuilderBase;
}
agentConfig["OpenCode-Builder"] = openCodeBuilderOverride ? mergeAgentConfig(openCodeBuilderBase, openCodeBuilderOverride) : openCodeBuilderBase; }

if (plannerEnabled) {
const { name: _planName, mode: _planMode, ...planConfigWithoutName } =
Expand Down