diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index 9e1b5d56b..69bcdd353 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -50,11 +50,40 @@ import { hasValidMetaName, hasValidMetaPrefix, isReservedMetaKey, -} from "@/utils/metaUtils"; +} from "../utils/metaUtils"; + +/** + * Extended Tool type that includes optional fields used by the inspector. + */ +interface ExtendedTool extends Tool, WithIcons { + _meta?: Record; + execution?: { + taskSupport?: "forbidden" | "required" | "optional"; + }; +} // Type guard to safely detect the optional _meta field without using `any` -const hasMeta = (tool: Tool): tool is Tool & { _meta: unknown } => - typeof (tool as { _meta?: unknown })._meta !== "undefined"; +const hasMeta = ( + tool: Tool, +): tool is ExtendedTool & { _meta: Record } => + typeof (tool as ExtendedTool)._meta !== "undefined"; + +// Type guard to detect execution.taskSupport +const getTaskSupport = ( + tool: Tool | null, +): "forbidden" | "required" | "optional" => { + if (!tool) return "forbidden"; + const extendedTool = tool as ExtendedTool; + const taskSupport = extendedTool.execution?.taskSupport; + if ( + taskSupport === "forbidden" || + taskSupport === "required" || + taskSupport === "optional" + ) { + return taskSupport; + } + return "optional"; +}; const ToolsTab = ({ tools, @@ -131,7 +160,8 @@ const ToolsTab = ({ ]; }); setParams(Object.fromEntries(params)); - setRunAsTask(false); + const taskSupport = getTaskSupport(selectedTool); + setRunAsTask(taskSupport === "required"); // Reset validation errors when switching tools setHasValidationErrors(false); @@ -170,7 +200,7 @@ const ToolsTab = ({ renderItem={(tool) => (
- +
{tool.name} @@ -191,7 +221,7 @@ const ToolsTab = ({
{selectedTool && ( )} @@ -659,21 +689,24 @@ const ToolsTab = ({
)} -
- - setRunAsTask(checked) - } - /> - -
+ {getTaskSupport(selectedTool) !== "forbidden" && ( +
+ + setRunAsTask(checked) + } + disabled={getTaskSupport(selectedTool) === "required"} + /> + +
+ )}