fix(sisyphus-agent): prevent duplicate build/plan agents when replacement enabled

- Filter out original 'build' and 'plan' agents when Builder-Sisyphus/Planner-Sisyphus are enabled with replacement
- Previously both agents could coexist even with replace_build/replace_plan: true
- Now only the replacement agent exists when both enabled and replacement flags are true
- Maintains backward compatibility for all configuration combinations

Fixes #231
This commit is contained in:
sisyphus-dev-ai
2025-12-25 10:34:15 +00:00
parent 0734167516
commit 3b17ee9bd0

View File

@@ -426,14 +426,25 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
: plannerSisyphusBase;
}
// Filter out build/plan from config.agent if they will be replaced
const filteredConfigAgents = config.agent ?
Object.fromEntries(
Object.entries(config.agent).filter(([key]) => {
if (key === "build" && builderEnabled && replaceBuild) return false;
if (key === "plan" && plannerEnabled && replacePlan) return false;
return true;
})
) : {};
config.agent = {
...agentConfig,
...Object.fromEntries(Object.entries(builtinAgents).filter(([k]) => k !== "Sisyphus")),
...userAgents,
...projectAgents,
...config.agent,
...(replaceBuild ? { build: { ...config.agent?.build, mode: "subagent" } } : {}),
...(replacePlan ? { plan: { ...config.agent?.plan, mode: "subagent" } } : {}),
...filteredConfigAgents, // Filtered config agents (excludes build/plan if replaced)
// Only set to subagent mode if NOT being replaced (for backward compatibility)
...(replaceBuild && !builderEnabled ? { build: { ...config.agent?.build, mode: "subagent" } } : {}),
...(replacePlan && !plannerEnabled ? { plan: { ...config.agent?.plan, mode: "subagent" } } : {}),
};
} else {
config.agent = {