/// import { describe, expect, mock, test } from "bun:test" import { tool } from "@opencode-ai/plugin" import { OhMyOpenCodeConfigSchema } from "../config" import type { OpencodeClient } from "../tools/delegate-task/types" import { createToolRegistry } from "./tool-registry" const fakeTool = tool({ description: "test tool", args: {}, async execute(): Promise { return "ok" }, }) function createPluginConfig() { return OhMyOpenCodeConfigSchema.parse({ git_master: { commit_footer: false, include_co_authored_by: false, git_env_prefix: "", }, team_mode: { enabled: true, }, }) } describe("team-mode tool registry wiring", () => { test("passes ctx.client into every team tool factory", () => { // given const client = {} as OpencodeClient const createTeamCreateTool = mock(() => fakeTool) const createTeamDeleteTool = mock(() => fakeTool) const createTeamShutdownRequestTool = mock(() => fakeTool) const createTeamApproveShutdownTool = mock(() => fakeTool) const createTeamRejectShutdownTool = mock(() => fakeTool) const createTeamSendMessageTool = mock(() => fakeTool) const createTeamTaskCreateTool = mock(() => fakeTool) const createTeamTaskListTool = mock(() => fakeTool) const createTeamTaskUpdateTool = mock(() => fakeTool) const createTeamTaskGetTool = mock(() => fakeTool) const createTeamStatusTool = mock(() => fakeTool) const createTeamListTool = mock(() => fakeTool) // when createToolRegistry({ ctx: { directory: "/tmp/team-mode", client } as Parameters[0]["ctx"], pluginConfig: createPluginConfig(), managers: { backgroundManager: {}, tmuxSessionManager: {}, skillMcpManager: {}, } as Parameters[0]["managers"], skillContext: { mergedSkills: [], availableSkills: [], browserProvider: "playwright", disabledSkills: new Set(), }, availableCategories: [], toolFactories: { builtinTools: { bash: fakeTool, read: fakeTool }, createBackgroundTools: mock(() => ({})), createCallOmoAgent: mock(() => fakeTool), createLookAt: mock(() => fakeTool), createSkillMcpTool: mock(() => fakeTool), createSkillTool: mock(() => fakeTool), createGrepTools: mock(() => ({})), createGlobTools: mock(() => ({})), createAstGrepTools: mock(() => ({})), createSessionManagerTools: mock(() => ({})), createDelegateTask: mock(() => fakeTool), discoverCommandsSync: mock(() => []), interactive_bash: fakeTool, createTaskCreateTool: mock(() => fakeTool), createTaskGetTool: mock(() => fakeTool), createTaskList: mock(() => fakeTool), createTaskUpdateTool: mock(() => fakeTool), createHashlineEditTool: mock(() => fakeTool), createTeamCreateTool, createTeamDeleteTool, createTeamShutdownRequestTool, createTeamApproveShutdownTool, createTeamRejectShutdownTool, createTeamSendMessageTool, createTeamTaskCreateTool, createTeamTaskListTool, createTeamTaskUpdateTool, createTeamTaskGetTool, createTeamStatusTool, createTeamListTool, }, }) // then expect(createTeamCreateTool).toHaveBeenCalledWith(expect.anything(), client, expect.anything(), expect.anything(), expect.anything()) expect(createTeamDeleteTool).toHaveBeenCalledWith(expect.anything(), client, expect.anything(), expect.anything()) expect(createTeamShutdownRequestTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamApproveShutdownTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamRejectShutdownTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamSendMessageTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamTaskCreateTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamTaskListTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamTaskUpdateTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamTaskGetTool).toHaveBeenCalledWith(expect.anything(), client) expect(createTeamStatusTool).toHaveBeenCalledWith(expect.anything(), client, expect.anything()) expect(createTeamListTool).toHaveBeenCalledWith(expect.anything(), client) }) })