Files
Kilo-Org_kilocode/packages/opencode/test/kilocode/agent-manager-tool.test.ts
2026-05-04 11:15:19 +02:00

72 lines
2.1 KiB
TypeScript

import { describe, expect, test } from "bun:test"
import { Effect, Layer, ManagedRuntime } from "effect"
import { MessageID, SessionID } from "../../src/session/schema"
import { provideTmpdirInstance } from "../fixture/fixture"
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
import { AgentManagerTool } from "../../src/kilocode/tool/agent-manager"
import { Bus } from "../../src/bus"
import { Tool } from "../../src/tool/tool"
import { Truncate } from "../../src/tool/truncate"
import { Agent } from "../../src/agent/agent"
const runtime = ManagedRuntime.make(
Layer.mergeAll(Truncate.defaultLayer, Agent.defaultLayer, Bus.defaultLayer, CrossSpawnSpawner.defaultLayer),
)
async function init() {
return runtime.runPromise(
Effect.gen(function* () {
const info = yield* AgentManagerTool
return yield* Tool.init(info)
}),
)
}
const ctx = {
sessionID: SessionID.make("ses_test"),
messageID: MessageID.make("msg_test"),
callID: "call_agent_manager",
agent: "build",
abort: AbortSignal.any([]),
messages: [],
metadata: () => Effect.void,
ask: () => Effect.void,
}
describe("agent_manager tool", () => {
test("asks for agent_manager permission", async () => {
const tool = await init()
const calls: unknown[] = []
await runtime.runPromise(
provideTmpdirInstance(() =>
tool.execute(
{ mode: "local", tasks: [{ prompt: "Fix issue" }] },
{ ...ctx, ask: (input: unknown) => Effect.sync(() => calls.push(input)) },
),
).pipe(Effect.scoped),
)
expect(calls).toEqual([
{
permission: "agent_manager",
patterns: ["local"],
always: ["local"],
metadata: { mode: "local", count: 1 },
},
])
})
test("rejects empty tasks", async () => {
const tool = await init()
await expect(
runtime.runPromise(
provideTmpdirInstance(() =>
tool.execute({ mode: "local", tasks: [{}] }, { ...ctx, ask: () => Effect.void }),
).pipe(Effect.scoped),
),
).rejects.toThrow("Each task must include prompt, name, or branchName")
})
})