Skip to content
55 changes: 55 additions & 0 deletions app/src/components/ChatKit/ChatKitPanel.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ vi.mock("../../contexts/NotebookContext", () => ({
useNotebookContext: () => ({
getNotebookData: () => undefined,
useNotebookSnapshot: () => ({ notebook: { cells: [] } }),
useNotebookList: () => [],
}),
}));

Expand Down Expand Up @@ -272,6 +273,60 @@ describe("ChatKitPanel codex harness routing", () => {
expect(bridgeMock.connect).not.toHaveBeenCalled();
});

it("handles ExecuteCode params with top-level code for NotebookService tool names", async () => {
render(<ChatKitPanel />);
const config = useChatKitMock.mock.calls.at(0)?.[0];

const result = await config.onClientTool({
name: "agent_tools_v1_NotebookService_ExecuteCode",
params: {
call_id: "call-top-level",
previous_response_id: "resp-1",
code: "console.log('ok')",
},
});

expect(result.callId).toBe("call-top-level");
expect(result.previousResponseId).toBe("resp-1");
expect(String(result.clientError ?? "")).not.toContain("Failed to decode tool params");
expect(String(result.clientError ?? "")).not.toContain('key "code" is unknown');
});

it("handles ExecuteCode params for direct ExecuteCode tool name", async () => {
render(<ChatKitPanel />);
const config = useChatKitMock.mock.calls.at(0)?.[0];

const result = await config.onClientTool({
name: "ExecuteCode",
params: {
call_id: "call-direct",
code: "console.log('direct')",
},
});

expect(result.callId).toBe("call-direct");
expect(String(result.clientError ?? "")).not.toContain("Failed to decode tool params");
expect(String(result.clientError ?? "")).not.toContain('key "code" is unknown');
});

it("returns unknown tool error for unrecognized tool names", async () => {
render(<ChatKitPanel />);
const config = useChatKitMock.mock.calls.at(0)?.[0];

const result = await config.onClientTool({
name: "unknown_tool_name",
params: {
call_id: "",
previous_response_id: "resp-1",
code: "console.log('payload-shape')",
},
});

expect(String(result.clientError ?? "")).toContain("Unknown tool unknown_tool_name");
expect(String(result.clientError ?? "")).not.toContain("Failed to decode tool params");
expect(String(result.clientError ?? "")).not.toContain('key "code" is unknown');
});

it("routes ChatKit to /codex/app-server/ws and connects codex bridge + proxy websocket", async () => {
harnessState.defaultHarness.adapter = "codex";

Expand Down
Loading
Loading