AI 應用元件
子代理狀態卡
巢狀在父訊息下的子代理狀態卡 React 元件:顯示任務、進度條與目前步驟,可展開查看其串流輸出,完成後收成一行摘要;附 Group 以共用連接線依序進場。
主代理把工作分派給多個子代理時,用這張卡片在主訊息下方以縮排巢狀列出每個子代理的狀態。標頭一列放狀態圖示、名稱、任務與已執行時間/token 數;下方是 2px 細進度條(沒給進度時改為不確定掃光)與交叉淡接的目前步驟。點標頭可展開子代理的串流輸出,最大高度內捲動並在底部時自動貼底;完成且有摘要時進度條淡出、改顯示一行摘要。搭配 SubagentStatusCard.Group 可讓多張卡共用左側連接線並依序進場。
把這個效果裝進你的專案
在專案資料夾執行指令,CLI 會加入原始碼與依賴套件,再依下方使用範例引用元件。
npx webberui@latest add subagent-status-cardPlayground
即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。
0.4
200
120
編輯中的呼叫預設屬性
<SubagentStatusCard/>
完整範例包含預覽的排版與資料。先安裝元件,再把範例檔貼入你的專案。
安裝
npx webberui@latest add https://webberui.com/r/subagent-status-card.json或在 components.json 設定 registries 後,改用 @webberui/subagent-status-card 安裝。
使用
import { SubagentStatusCard } from "@/components/ui/subagent-status-card";
<SubagentStatusCard.Group aria-label="市場調查子代理">
<SubagentStatusCard
name="資料蒐集員"
task="搜尋近一年的手搖飲市場報導"
status="running"
progress={0.4}
currentStep="正在讀取第 3 份文件"
output={"・展店放緩\n・重心南移"}
elapsed={12}
tokens={1240}
/>
<SubagentStatusCard
name="撰稿員"
task="產出 800 字摘要"
status="done"
summary="完成 812 字摘要,含 3 個重點"
/>
</SubagentStatusCard.Group>Props
| Prop | 型別 | 預設值 | 說明 |
|---|---|---|---|
name | string | — | 子代理名稱,例如「資料蒐集員」 |
task | string | — | 指派給子代理的任務(一句話) |
status | "queued" | "running" | "done" | "failed" | — | 目前狀態 |
progress | number | — | 進度(0–1);未提供且狀態為 running 時,進度條改為不確定掃光 |
currentStep | string | — | 目前步驟,變化時交叉淡接 |
output | React.ReactNode | — | 子代理的輸出;字串會保留換行 |
mono | boolean | false | 字串輸出是否使用等寬字體 |
summary | string | — | 完成後收合時顯示的一行摘要 |
elapsed | number | — | 已執行秒數,顯示為「已執行 12 秒」 |
tokens | number | — | 已使用的 token 數,以 compact 格式顯示(例 1.2k tokens) |
expanded | boolean | — | 受控的展開狀態 |
defaultExpanded | boolean | — | 非受控模式的初始展開狀態;未提供時依狀態決定(failed 展開,其餘收合) |
onExpandedChange | (expanded: boolean) => void | — | 展開狀態變動時回呼 |
depth | number | 1 | 巢狀層級,每層左縮排 16px 並畫連接線 |
icon | React.ReactNode | — | 名稱前的自訂圖示(例如子代理頭像) |
stiffness | number | 120 | 進度條 spring 的剛性 |
damping | number | 20 | 進度條 spring 的阻尼 |
duration | number | 200 | 展開動畫與色彩過渡的時長(毫秒) |
className | string | — | 透傳到最外層容器 |
SubagentStatusCard.Group
| 欄位 | 型別 | 預設值 | 說明 |
|---|---|---|---|
children | React.ReactNode | — | 子代理卡片(通常是多個 SubagentStatusCard) |
stagger | number | 60 | 子卡依序進場的間隔(毫秒) |
aria-label | string | "子代理" | 群組的無障礙名稱 |
className | string | — | 透傳到最外層容器 |
細節
- 進度條以
scaleXspring 推進,stiffness/damping可調;status為done時一律補滿,queued時歸零。 - 不確定狀態:
running且沒有progress時,一條 40% 寬的亮條以 1.4 秒往返掃光。 - 輸出區最大高度 240px、內部捲動;使用者停在底部時新內容會自動貼底,往上捲閱讀時不會被拉回。
- 非受控模式下,使用者尚未手動切換前,展開狀態跟著
status走——轉為failed時自動展開讓錯誤一眼可見。 - 外層寫入
--wb-subagent-status-card-duration,色彩與 Chevron 旋轉過渡都使用它,可在全域覆寫。 - 每層
depth左縮排 16px;SubagentStatusCard.Group在左側畫一條共用主幹線,各卡以短橫線接上,子卡間隔 60ms 依序進場(opacity 與 x 位移)。
可及性
- 每張卡為
role="group",aria-label完整描述狀態,例如「子代理:資料蒐集員,執行中,進度 40%」 - 有輸出時標頭是
button,帶aria-expanded與指向輸出區的aria-controls,可用鍵盤 Tab 聚焦、Enter/Space 切換,聚焦時有 focus-visible 外框 - 進度條為
role="progressbar"並提供aria-valuenow;不確定狀態時省略數值、以aria-valuetext說明進行中 - 狀態變化透過
aria-live="polite"區域宣告;連接線與裝飾圖示皆aria-hidden - 使用者系統開啟「減少動態效果」時,進度條直接到位、不確定掃光改為靜態條、狀態圖示不彈跳、輸出區直接出現、Group 不做依序進場