From d4c726ea9cff96a7cc4dc9830a58789addbe42ae Mon Sep 17 00:00:00 2001 From: XiaoFeng <117837368+Fzhiyu1@users.noreply.github.com> Date: Mon, 29 Dec 2025 09:22:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E4=BD=93=E5=8D=A1=E7=89=87=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新建 agentCard.ts 智能体卡片UI组件 - webviewContent.ts 集成样式和脚本 --- src/views/agentCard.ts | 311 ++++++++++++++++++++++++++++++++++++ src/views/webviewContent.ts | 6 + 2 files changed, 317 insertions(+) create mode 100644 src/views/agentCard.ts diff --git a/src/views/agentCard.ts b/src/views/agentCard.ts new file mode 100644 index 0000000..1515750 --- /dev/null +++ b/src/views/agentCard.ts @@ -0,0 +1,311 @@ +/** + * 智能体卡片组件 + * + * 功能说明: + * - 显示子智能体的执行过程 + * - 支持展开/收起步骤详情 + * - 显示执行状态和统计信息 + */ + +import type { + AgentStartEvent, + AgentProgressEvent, + AgentCompleteEvent, + AgentErrorEvent +} from '../types/api'; + +/** + * 获取智能体卡片样式 + */ +export function getAgentCardStyles(): string { + return ` + .agent-card { + background: var(--vscode-editor-background); + border: 1px solid var(--vscode-input-border); + border-radius: 8px; + margin: 10px 0; + overflow: hidden; + } + .agent-card-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 12px; + background: var(--vscode-sideBar-background); + cursor: pointer; + user-select: none; + } + .agent-card-header:hover { + background: var(--vscode-list-hoverBackground); + } + .agent-card-title { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; + } + .agent-card-icon { + font-size: 16px; + } + .agent-card-status { + font-size: 12px; + padding: 2px 6px; + border-radius: 4px; + } + .agent-card-status.running { + background: var(--vscode-inputValidation-infoBackground); + color: var(--vscode-inputValidation-infoForeground); + } + .agent-card-status.completed { + background: var(--vscode-testing-iconPassed); + color: white; + } + .agent-card-status.error { + background: var(--vscode-testing-iconFailed); + color: white; + } + .agent-card-toggle { + font-size: 12px; + color: var(--vscode-descriptionForeground); + } + .agent-card-body { + padding: 12px; + border-top: 1px solid var(--vscode-input-border); + } + .agent-card-body.collapsed { + display: none; + } + .agent-card-instruction { + font-size: 13px; + color: var(--vscode-descriptionForeground); + margin-bottom: 10px; + padding-bottom: 10px; + border-bottom: 1px dashed var(--vscode-input-border); + } + .agent-steps { + font-size: 13px; + } + .agent-step { + display: flex; + align-items: flex-start; + gap: 8px; + padding: 6px 0; + border-left: 2px solid var(--vscode-input-border); + padding-left: 12px; + margin-left: 6px; + } + .agent-step:last-child { + border-left-color: transparent; + } + .agent-step-icon { + flex-shrink: 0; + } + .agent-step-content { + flex: 1; + min-width: 0; + } + .agent-step-name { + font-weight: 500; + } + .agent-step-result { + font-size: 12px; + color: var(--vscode-descriptionForeground); + margin-top: 2px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .agent-card-summary { + font-size: 13px; + padding: 8px 12px; + background: var(--vscode-sideBar-background); + border-top: 1px solid var(--vscode-input-border); + } + .agent-card-error { + color: var(--vscode-errorForeground); + padding: 8px 12px; + background: var(--vscode-inputValidation-errorBackground); + } + `; +} + +/** + * 渲染智能体卡片(启动状态) + */ +export function renderAgentCardStart(event: AgentStartEvent): string { + return ` +