fix(app): keep tool call summaries neutral (#2090)
Individual tool outcomes remain visible in the expanded list. The aggregate header no longer treats a handled tool result as a failure of the overall work.
This commit is contained in:
@@ -1420,7 +1420,6 @@ export const ar: TranslationResources = {
|
||||
other: "استدعى Paseo {{count}} مرات",
|
||||
},
|
||||
and: "و",
|
||||
failed: "فشل {{count}}",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "إعادة تسمية",
|
||||
|
||||
@@ -1428,7 +1428,6 @@ export const en = {
|
||||
other: "called Paseo {{count}} times",
|
||||
},
|
||||
and: "and",
|
||||
failed: "{{count}} failed",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "Rename",
|
||||
|
||||
@@ -1459,7 +1459,6 @@ export const es: TranslationResources = {
|
||||
other: "llamó a Paseo {{count}} veces",
|
||||
},
|
||||
and: "y",
|
||||
failed: "{{count}} con error",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "Rebautizar",
|
||||
|
||||
@@ -1462,7 +1462,6 @@ export const fr: TranslationResources = {
|
||||
other: "a appelé Paseo {{count}} fois",
|
||||
},
|
||||
and: "et",
|
||||
failed: "{{count}} en échec",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "Rebaptiser",
|
||||
|
||||
@@ -1437,7 +1437,6 @@ export const ja: TranslationResources = {
|
||||
other: "Paseoを{{count}}回呼び出し",
|
||||
},
|
||||
and: "および",
|
||||
failed: "{{count}}件失敗",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "名前を変更",
|
||||
|
||||
@@ -1445,7 +1445,6 @@ export const ptBR: TranslationResources = {
|
||||
other: "chamou o Paseo {{count}} vezes",
|
||||
},
|
||||
and: "e",
|
||||
failed: "{{count}} com falha",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "Renomear",
|
||||
|
||||
@@ -1451,7 +1451,6 @@ export const ru: TranslationResources = {
|
||||
other: "Paseo вызван {{count}} раз",
|
||||
},
|
||||
and: "и",
|
||||
failed: "С ошибкой: {{count}}",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "Переименовать",
|
||||
|
||||
@@ -1404,7 +1404,6 @@ export const zhCN: TranslationResources = {
|
||||
other: "调用了 Paseo {{count}} 次",
|
||||
},
|
||||
and: "并",
|
||||
failed: "{{count}} 次失败",
|
||||
},
|
||||
renameModal: {
|
||||
rename: "重命名",
|
||||
|
||||
@@ -17,7 +17,6 @@ export interface OverviewToolCallGroup {
|
||||
mode: "overview";
|
||||
run: ToolCallRun;
|
||||
summary: OverviewSummary;
|
||||
failedCount: number;
|
||||
isLoading: boolean;
|
||||
}
|
||||
|
||||
@@ -32,7 +31,6 @@ function isSearchCall(name: string): boolean {
|
||||
export function buildOverviewGroup(run: ToolCallRun): OverviewToolCallGroup {
|
||||
const editedFiles = new Set<string>();
|
||||
const readFiles = new Set<string>();
|
||||
let failedCount = 0;
|
||||
let isLoading = false;
|
||||
let commandCount = 0;
|
||||
let searchCount = 0;
|
||||
@@ -42,7 +40,6 @@ export function buildOverviewGroup(run: ToolCallRun): OverviewToolCallGroup {
|
||||
for (const call of run.calls) {
|
||||
const descriptor = describeToolCall(call);
|
||||
const normalizedName = descriptor.name.trim().toLowerCase();
|
||||
failedCount += descriptor.status === "failed" ? 1 : 0;
|
||||
isLoading ||= descriptor.status === "running" || descriptor.status === "executing";
|
||||
if (isPaseoCall(descriptor.name, normalizedName)) {
|
||||
paseoCallCount += 1;
|
||||
@@ -70,7 +67,6 @@ export function buildOverviewGroup(run: ToolCallRun): OverviewToolCallGroup {
|
||||
return {
|
||||
mode: "overview",
|
||||
run,
|
||||
failedCount,
|
||||
isLoading,
|
||||
summary,
|
||||
};
|
||||
|
||||
@@ -58,11 +58,8 @@ export const OverviewToolCallGroupView = memo(function OverviewToolCallGroupView
|
||||
onExpandedChange,
|
||||
children,
|
||||
}: OverviewGroupProps) {
|
||||
const { t } = useTranslation();
|
||||
const scrollRef = useRef<ScrollView>(null);
|
||||
const aggregateSummary = useOverviewSummary(group.summary);
|
||||
const failedSummary =
|
||||
group.failedCount > 0 ? t("toolCallGroup.failed", { count: group.failedCount }) : undefined;
|
||||
const scrollToLatest = useCallback(() => {
|
||||
scrollRef.current?.scrollToEnd({ animated: false });
|
||||
}, []);
|
||||
@@ -89,10 +86,8 @@ export const OverviewToolCallGroupView = memo(function OverviewToolCallGroupView
|
||||
<ExpandableBadge
|
||||
testID="tool-call-group"
|
||||
label={aggregateSummary}
|
||||
secondaryLabel={failedSummary}
|
||||
icon={Wrench}
|
||||
isLoading={group.isLoading}
|
||||
isError={group.failedCount > 0}
|
||||
isExpanded={expanded}
|
||||
isLastInSequence={isLastInSequence}
|
||||
onToggle={toggle}
|
||||
|
||||
@@ -231,7 +231,6 @@ describe("tool call detail-level projection", () => {
|
||||
expect(overview.groupsByHostId.get("1")).toEqual({
|
||||
mode: "overview",
|
||||
run: expect.any(Object),
|
||||
failedCount: 1,
|
||||
isLoading: false,
|
||||
summary: {
|
||||
editedFileCount: 1,
|
||||
@@ -260,7 +259,6 @@ describe("tool call detail-level projection", () => {
|
||||
const result = project({ level: "overview", head: calls });
|
||||
|
||||
expect(result.groupsByHostId.get("1")).toMatchObject({
|
||||
failedCount: 1,
|
||||
summary: {
|
||||
editedFileCount: 0,
|
||||
commandCount: 0,
|
||||
|
||||
Reference in New Issue
Block a user