From fe4142630c7dddf19e81b2f3363e06b4aba8194a Mon Sep 17 00:00:00 2001 From: chrarnoldus <12196001+chrarnoldus@users.noreply.github.com> Date: Wed, 15 Jul 2026 17:14:55 +0000 Subject: [PATCH 1/3] fix(cli): add object type to agent manager schema Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> --- .changeset/calm-tools-speak.md | 5 +++++ packages/opencode/src/kilocode/tool/agent-manager.ts | 2 ++ .../opencode/test/kilocode/agent-manager-tool.test.ts | 9 +++++++++ 3 files changed, 16 insertions(+) create mode 100644 .changeset/calm-tools-speak.md diff --git a/.changeset/calm-tools-speak.md b/.changeset/calm-tools-speak.md new file mode 100644 index 0000000000..3d6dd503da --- /dev/null +++ b/.changeset/calm-tools-speak.md @@ -0,0 +1,5 @@ +--- +"@kilocode/cli": patch +--- + +Fix Agent Manager tool calls through providers that require object-root input schemas. diff --git a/packages/opencode/src/kilocode/tool/agent-manager.ts b/packages/opencode/src/kilocode/tool/agent-manager.ts index 38812128cd..6b68276eae 100644 --- a/packages/opencode/src/kilocode/tool/agent-manager.ts +++ b/packages/opencode/src/kilocode/tool/agent-manager.ts @@ -8,6 +8,7 @@ import * as SandboxInheritance from "@/kilocode/sandbox/inheritance" import { KiloSessionMessageOrder } from "@/kilocode/session/message-order" import { Provider } from "@/provider/provider" import { SessionID } from "@/session/schema" +import * as ToolJsonSchema from "@/tool/json-schema" import { Tool } from "@/tool/tool" import { Effect, Schema } from "effect" import { matchesQuery } from "./model-search" @@ -237,6 +238,7 @@ export const AgentManagerTool = Tool.define< return { description: DESCRIPTION, parameters: Params, + jsonSchema: { ...ToolJsonSchema.fromSchema(Params), type: "object" }, execute: (params, ctx) => Effect.gen(function* () { if ("action" in params) { diff --git a/packages/opencode/test/kilocode/agent-manager-tool.test.ts b/packages/opencode/test/kilocode/agent-manager-tool.test.ts index 3db754f68e..32c668980d 100644 --- a/packages/opencode/test/kilocode/agent-manager-tool.test.ts +++ b/packages/opencode/test/kilocode/agent-manager-tool.test.ts @@ -8,6 +8,7 @@ import { AgentManagerEvent, type AgentManagerStart } from "../../src/kilocode/ag import { AgentManager } from "../../src/kilocode/agent-manager/service" import { Bus } from "../../src/bus" import { Tool } from "../../src/tool/tool" +import * as ToolJsonSchema from "../../src/tool/json-schema" import { Truncate } from "../../src/tool/truncate" import { Agent } from "../../src/agent/agent" import { Provider } from "../../src/provider/provider" @@ -149,6 +150,14 @@ function publish( } describe("agent_manager tool", () => { + test("uses an object-root input schema", async () => { + const tool = await init() + const schema = ToolJsonSchema.fromTool(tool) + + expect(schema.type).toBe("object") + expect(schema.anyOf).toHaveLength(3) + }) + test("asks for agent_manager permission", async () => { const tool = await init() const calls: unknown[] = [] From 1b126c2fa7c6afd9f4a9bdca7f51d2f0c4bf004a Mon Sep 17 00:00:00 2001 From: chrarnoldus <12196001+chrarnoldus@users.noreply.github.com> Date: Wed, 15 Jul 2026 18:03:02 +0000 Subject: [PATCH 2/3] fix(cli): flatten agent manager tool schema Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> --- .../opencode/src/kilocode/tool/agent-manager.ts | 12 +++++++++++- .../test/kilocode/agent-manager-tool.test.ts | 15 +++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/kilocode/tool/agent-manager.ts b/packages/opencode/src/kilocode/tool/agent-manager.ts index 6b68276eae..17607c9a7a 100644 --- a/packages/opencode/src/kilocode/tool/agent-manager.ts +++ b/packages/opencode/src/kilocode/tool/agent-manager.ts @@ -77,6 +77,16 @@ const PromptParams = Schema.Struct({ export const Params = Schema.Union([StartParams, ListParams, PromptParams]) +const WireParams = Schema.Struct({ + mode: Schema.optional(StartParams.fields.mode), + versions: Schema.optional(StartParams.fields.versions), + tasks: Schema.optional(StartParams.fields.tasks), + action: Schema.optional(Schema.Literals(["list", "prompt"])), + filter: Schema.optional(ListParams.fields.filter), + sessionID: Schema.optional(PromptParams.fields.sessionID), + prompt: Schema.optional(PromptParams.fields.prompt), +}) + type Input = Schema.Schema.Type type Selected = { task?: AgentManagerTask; error?: string } type Candidate = { providerID: string; model: Provider.Info["models"][string] } @@ -238,7 +248,7 @@ export const AgentManagerTool = Tool.define< return { description: DESCRIPTION, parameters: Params, - jsonSchema: { ...ToolJsonSchema.fromSchema(Params), type: "object" }, + jsonSchema: ToolJsonSchema.fromSchema(WireParams), execute: (params, ctx) => Effect.gen(function* () { if ("action" in params) { diff --git a/packages/opencode/test/kilocode/agent-manager-tool.test.ts b/packages/opencode/test/kilocode/agent-manager-tool.test.ts index 32c668980d..177f9ebe86 100644 --- a/packages/opencode/test/kilocode/agent-manager-tool.test.ts +++ b/packages/opencode/test/kilocode/agent-manager-tool.test.ts @@ -150,12 +150,23 @@ function publish( } describe("agent_manager tool", () => { - test("uses an object-root input schema", async () => { + test("uses an object-root input schema without combinators", async () => { const tool = await init() const schema = ToolJsonSchema.fromTool(tool) expect(schema.type).toBe("object") - expect(schema.anyOf).toHaveLength(3) + expect(schema.anyOf).toBeUndefined() + expect(schema.oneOf).toBeUndefined() + expect(schema.allOf).toBeUndefined() + expect(Object.keys(schema.properties ?? {})).toEqual([ + "mode", + "versions", + "tasks", + "action", + "filter", + "sessionID", + "prompt", + ]) }) test("asks for agent_manager permission", async () => { From 7e9285a259ba8d79053f826966545a89ab495ac4 Mon Sep 17 00:00:00 2001 From: chrarnoldus <12196001+chrarnoldus@users.noreply.github.com> Date: Wed, 15 Jul 2026 18:11:00 +0000 Subject: [PATCH 3/3] docs: clarify agent manager schema compatibility Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> --- .changeset/calm-tools-speak.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/calm-tools-speak.md b/.changeset/calm-tools-speak.md index 3d6dd503da..9e288ffcff 100644 --- a/.changeset/calm-tools-speak.md +++ b/.changeset/calm-tools-speak.md @@ -2,4 +2,4 @@ "@kilocode/cli": patch --- -Fix Agent Manager tool calls through providers that require object-root input schemas. +Fix Agent Manager tool calls through providers that require object-root input schemas without root combinators.