chore: centralize tool display detail resolution

This commit is contained in:
Peter Steinberger
2026-02-17 02:51:47 +01:00
parent d6226355e6
commit 5fc28fa2c8
3 changed files with 25 additions and 47 deletions

View File

@@ -220,6 +220,26 @@ export function resolveWriteDetail(toolKey: string, args: unknown): string | und
return `${destinationPrefix} ${path}`;
}
export function resolveToolSpecificDetail(key: string, args: unknown): string | undefined {
if (key === "exec") {
return resolveExecDetail(args);
}
if (key === "read") {
return resolveReadDetail(args);
}
if (key === "write" || key === "edit" || key === "attach") {
return resolveWriteDetail(key, args);
}
if (key === "web_search") {
return resolveWebSearchDetail(args);
}
if (key === "web_fetch") {
return resolveWebFetchDetail(args);
}
return undefined;
}
export function resolveWebSearchDetail(args: unknown): string | undefined {
const record = asRecord(args);
if (!record) {

View File

@@ -7,11 +7,7 @@ import {
normalizeVerb,
resolveActionSpec,
resolveDetailFromKeys,
resolveExecDetail,
resolveReadDetail,
resolveWebFetchDetail,
resolveWebSearchDetail,
resolveWriteDetail,
resolveToolSpecificDetail,
type ToolDisplaySpec as ToolDisplaySpecBase,
} from "./tool-display-common.js";
import TOOL_DISPLAY_JSON from "./tool-display.json" with { type: "json" };
@@ -83,24 +79,7 @@ export function resolveToolDisplay(params: {
: key.replace(/_/g, " ").replace(/\./g, " ");
const verb = normalizeVerb(actionSpec?.label ?? action ?? fallbackVerb);
let detail: string | undefined;
if (key === "exec") {
detail = resolveExecDetail(params.args);
}
if (!detail && key === "read") {
detail = resolveReadDetail(params.args);
}
if (!detail && (key === "write" || key === "edit" || key === "attach")) {
detail = resolveWriteDetail(key, params.args);
}
if (!detail && key === "web_search") {
detail = resolveWebSearchDetail(params.args);
}
if (!detail && key === "web_fetch") {
detail = resolveWebFetchDetail(params.args);
}
let detail: string | undefined = resolveToolSpecificDetail(key, params.args);
const detailKeys = actionSpec?.detailKeys ?? spec?.detailKeys ?? FALLBACK.detailKeys ?? [];
if (!detail && detailKeys.length > 0) {

View File

@@ -1,17 +1,13 @@
import type { IconName } from "./icons.ts";
import {
defaultTitle,
normalizeToolName,
normalizeVerb,
resolveActionSpec,
resolveDetailFromKeys,
resolveExecDetail,
resolveReadDetail,
resolveWebFetchDetail,
resolveWebSearchDetail,
resolveWriteDetail,
resolveToolSpecificDetail,
type ToolDisplaySpec as ToolDisplaySpecBase,
} from "../../../src/agents/tool-display-common.js";
import type { IconName } from "./icons.ts";
import rawConfig from "./tool-display.json" with { type: "json" };
type ToolDisplaySpec = ToolDisplaySpecBase & {
@@ -83,24 +79,7 @@ export function resolveToolDisplay(params: {
: key.replace(/_/g, " ").replace(/\./g, " ");
const verb = normalizeVerb(actionSpec?.label ?? action ?? fallbackVerb);
let detail: string | undefined;
if (key === "exec") {
detail = resolveExecDetail(params.args);
}
if (!detail && key === "read") {
detail = resolveReadDetail(params.args);
}
if (!detail && (key === "write" || key === "edit" || key === "attach")) {
detail = resolveWriteDetail(key, params.args);
}
if (!detail && key === "web_search") {
detail = resolveWebSearchDetail(params.args);
}
if (!detail && key === "web_fetch") {
detail = resolveWebFetchDetail(params.args);
}
let detail: string | undefined = resolveToolSpecificDetail(key, params.args);
const detailKeys = actionSpec?.detailKeys ?? spec?.detailKeys ?? FALLBACK.detailKeys ?? [];
if (!detail && detailKeys.length > 0) {