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}`; 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 { export function resolveWebSearchDetail(args: unknown): string | undefined {
const record = asRecord(args); const record = asRecord(args);
if (!record) { if (!record) {

View File

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

View File

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