Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

76 lines
2.0 KiB
TypeScript

import type { JSX } from "react";
import { translate } from "../../../../i18n/index";
import {
dedupeToolSectionContent,
ToolMarkdownBlock,
ToolSection,
type AgentToolRendererProps
} from "./agentToolContentShared";
import {
getToolFallbackText,
getWebFetchRenderData
} from "./render-data/agentToolRenderData";
export function AgentWebFetchContent({
call,
onLinkClick
}: AgentToolRendererProps): JSX.Element | null {
"use memo";
const web = getWebFetchRenderData(call);
const urlText =
web.url && web.domain && web.domain !== web.url
? `${web.domain}\n\n${web.url}`
: web.url;
const visibleContent = dedupeToolSectionContent(
web.visibleContent,
web.url,
web.domain,
urlText
);
const fallbackText = getToolFallbackText(call);
const errorText = dedupeToolSectionContent(
fallbackText.error,
urlText,
visibleContent
);
if (!web.url && !visibleContent && !errorText) {
return null;
}
return (
<div className="workspace-agents-status-panel__detail-tool-body">
{web.url ? (
<ToolSection title={translate("agentHost.agentTool.details.url")}>
<ToolMarkdownBlock
content={urlText ?? ""}
onLinkClick={onLinkClick}
/>
</ToolSection>
) : null}
{visibleContent ? (
<ToolSection title={translate("agentHost.agentTool.details.content")}>
<ToolMarkdownBlock
content={visibleContent}
onLinkClick={onLinkClick}
collapsible
/>
</ToolSection>
) : null}
{web.isTruncated ? (
<div className="text-[10px] italic text-[var(--text-tertiary)]">
{translate("agentHost.agentTool.details.contentTruncated")}
</div>
) : null}
{errorText ? (
<ToolSection title={translate("agentHost.agentTool.details.error")}>
<ToolMarkdownBlock
content={errorText}
onLinkClick={onLinkClick}
collapsible
/>
</ToolSection>
) : null}
</div>
);
}