From 4542119157d9f7cffaa7322f061b5f9144cfd341 Mon Sep 17 00:00:00 2001 From: jjjuk Date: Mon, 14 Jul 2025 02:00:49 +0300 Subject: [PATCH 1/5] feature(client): tool parameters raw input mode, togglegroup component --- client/src/components/ToolsTab.tsx | 269 ++++++++++++----------- client/src/components/ui/togglegroup.tsx | 38 ++++ package-lock.json | 55 +++++ package.json | 1 + 4 files changed, 240 insertions(+), 123 deletions(-) create mode 100644 client/src/components/ui/togglegroup.tsx diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index 3c7db84e..0d8d59c0 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -18,6 +18,8 @@ import { useEffect, useState } from "react"; import ListPane from "./ListPane"; import JsonView from "./JsonView"; import ToolResults from "./ToolResults"; +import JsonEditor from "./JsonEditor"; +import { ToggleGroup, ToggleGroupItem } from "./ui/togglegroup"; const ToolsTab = ({ tools, @@ -46,6 +48,14 @@ const ToolsTab = ({ const [params, setParams] = useState>({}); const [isToolRunning, setIsToolRunning] = useState(false); const [isOutputSchemaExpanded, setIsOutputSchemaExpanded] = useState(false); + const [paramsInputMode, setParamsInputMode] = useState("raw"); + + const jsonEditor = JsonEditor({ + value: JSON.stringify(params, null, 2), + onChange: (str: string) => { + setParams(JSON.parse(str)); + }, + }); useEffect(() => { const params = Object.entries( @@ -97,118 +107,121 @@ const ToolsTab = ({

{selectedTool.description}

- {Object.entries(selectedTool.inputSchema.properties ?? []).map( - ([key, value]) => { - const prop = value as JsonSchemaType; - const inputSchema = - selectedTool.inputSchema as JsonSchemaType; - const required = isPropertyRequired(key, inputSchema); - return ( -
- - {prop.type === "boolean" ? ( -
- { + const prop = value as JsonSchemaType; + const inputSchema = + selectedTool.inputSchema as JsonSchemaType; + const required = isPropertyRequired(key, inputSchema); + return ( +
+ + {prop.type === "boolean" ? ( +
+ + setParams({ + ...params, + [key]: checked, + }) + } + /> + +
+ ) : prop.type === "string" ? ( +