fix(tools): conditionally register look_at when multimodal-looker enabled (#1016)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com> Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
parent
15c4637e0a
commit
39d2d44e22
81
src/index.test.ts
Normal file
81
src/index.test.ts
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
import { describe, expect, it } from "bun:test"
|
||||||
|
import { includesCaseInsensitive } from "./shared"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for conditional tool registration logic in index.ts
|
||||||
|
*
|
||||||
|
* The actual plugin initialization is complex to test directly,
|
||||||
|
* so we test the underlying logic that determines tool registration.
|
||||||
|
*/
|
||||||
|
describe("look_at tool conditional registration", () => {
|
||||||
|
describe("isMultimodalLookerEnabled logic", () => {
|
||||||
|
// #given multimodal-looker is in disabled_agents
|
||||||
|
// #when checking if agent is enabled
|
||||||
|
// #then should return false (disabled)
|
||||||
|
it("returns false when multimodal-looker is disabled (exact case)", () => {
|
||||||
|
const disabledAgents = ["multimodal-looker"]
|
||||||
|
const isEnabled = !includesCaseInsensitive(disabledAgents, "multimodal-looker")
|
||||||
|
expect(isEnabled).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
// #given multimodal-looker is in disabled_agents with different case
|
||||||
|
// #when checking if agent is enabled
|
||||||
|
// #then should return false (case-insensitive match)
|
||||||
|
it("returns false when multimodal-looker is disabled (case-insensitive)", () => {
|
||||||
|
const disabledAgents = ["Multimodal-Looker"]
|
||||||
|
const isEnabled = !includesCaseInsensitive(disabledAgents, "multimodal-looker")
|
||||||
|
expect(isEnabled).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
// #given multimodal-looker is NOT in disabled_agents
|
||||||
|
// #when checking if agent is enabled
|
||||||
|
// #then should return true (enabled)
|
||||||
|
it("returns true when multimodal-looker is not disabled", () => {
|
||||||
|
const disabledAgents = ["oracle", "librarian"]
|
||||||
|
const isEnabled = !includesCaseInsensitive(disabledAgents, "multimodal-looker")
|
||||||
|
expect(isEnabled).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
// #given disabled_agents is empty
|
||||||
|
// #when checking if agent is enabled
|
||||||
|
// #then should return true (enabled by default)
|
||||||
|
it("returns true when disabled_agents is empty", () => {
|
||||||
|
const disabledAgents: string[] = []
|
||||||
|
const isEnabled = !includesCaseInsensitive(disabledAgents, "multimodal-looker")
|
||||||
|
expect(isEnabled).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
// #given disabled_agents is undefined (simulated as empty array)
|
||||||
|
// #when checking if agent is enabled
|
||||||
|
// #then should return true (enabled by default)
|
||||||
|
it("returns true when disabled_agents is undefined (fallback to empty)", () => {
|
||||||
|
const disabledAgents = undefined
|
||||||
|
const isEnabled = !includesCaseInsensitive(disabledAgents ?? [], "multimodal-looker")
|
||||||
|
expect(isEnabled).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("conditional tool spread pattern", () => {
|
||||||
|
// #given lookAt is not null (agent enabled)
|
||||||
|
// #when spreading into tool object
|
||||||
|
// #then look_at should be included
|
||||||
|
it("includes look_at when lookAt is not null", () => {
|
||||||
|
const lookAt = { execute: () => {} } // mock tool
|
||||||
|
const tools = {
|
||||||
|
...(lookAt ? { look_at: lookAt } : {}),
|
||||||
|
}
|
||||||
|
expect(tools).toHaveProperty("look_at")
|
||||||
|
})
|
||||||
|
|
||||||
|
// #given lookAt is null (agent disabled)
|
||||||
|
// #when spreading into tool object
|
||||||
|
// #then look_at should NOT be included
|
||||||
|
it("excludes look_at when lookAt is null", () => {
|
||||||
|
const lookAt = null
|
||||||
|
const tools = {
|
||||||
|
...(lookAt ? { look_at: lookAt } : {}),
|
||||||
|
}
|
||||||
|
expect(tools).not.toHaveProperty("look_at")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@ -230,7 +230,11 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
|
|||||||
const backgroundTools = createBackgroundTools(backgroundManager, ctx.client);
|
const backgroundTools = createBackgroundTools(backgroundManager, ctx.client);
|
||||||
|
|
||||||
const callOmoAgent = createCallOmoAgent(ctx, backgroundManager);
|
const callOmoAgent = createCallOmoAgent(ctx, backgroundManager);
|
||||||
const lookAt = createLookAt(ctx);
|
const isMultimodalLookerEnabled = !includesCaseInsensitive(
|
||||||
|
pluginConfig.disabled_agents ?? [],
|
||||||
|
"multimodal-looker"
|
||||||
|
);
|
||||||
|
const lookAt = isMultimodalLookerEnabled ? createLookAt(ctx) : null;
|
||||||
const delegateTask = createDelegateTask({
|
const delegateTask = createDelegateTask({
|
||||||
manager: backgroundManager,
|
manager: backgroundManager,
|
||||||
client: ctx.client,
|
client: ctx.client,
|
||||||
@ -300,7 +304,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
|
|||||||
...builtinTools,
|
...builtinTools,
|
||||||
...backgroundTools,
|
...backgroundTools,
|
||||||
call_omo_agent: callOmoAgent,
|
call_omo_agent: callOmoAgent,
|
||||||
look_at: lookAt,
|
...(lookAt ? { look_at: lookAt } : {}),
|
||||||
delegate_task: delegateTask,
|
delegate_task: delegateTask,
|
||||||
skill: skillTool,
|
skill: skillTool,
|
||||||
skill_mcp: skillMcpTool,
|
skill_mcp: skillMcpTool,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user