模块按职责划分为三个并列目录:src/lib/ 存放无框架依赖的纯函数库,src/hooks/ 暴露 React Hook,src/types/ 集中定义跨模块共享的类型。 - API 层:api.ts 通过 request<T> 统一封装 fetch,自动合并 Content-Type 与 authHeaders(),将非 2xx 响应转换为带 status 的 ApiError;所有后端端点以 export const api = { ... } 形式聚合,并附带完整的请求/响应 TypeScript 接口。 - 认证层:apiAuth.ts 从 storage.ts 读取 Bearer Token,并通过 withAuthTicket 用一次性的 /auth/sse-ticket POST 换取单票 SSE ticket,避免把长密钥放入 URL。 - 实时通信:hooks/useSSE.ts 基于原生 EventSource,实现指数退避重连、LRU 事件去重、Last-Event-ID 续传,并在连接前调用 withAuthTicket;白名单式监听已知事件类型。 - 状态与主题:lib/storage.ts 对 localStorage 做 try/catch 包装以兼容受限环境;theme-store.ts 使用 useSyncExternalStore 暴露单一 dark/light 主题源,供图表等外部渲染器订阅。 - 领域状态机:swarmStatus.ts 将后端 Swarm SSE 事件归一化为不可变 SwarmRunStatus 增量更新(applySwarmEvent),并支持从 tool result preview 反推初始状态。 - 类型边界:types/agent.ts 仅声明 Agent/ToolCall/Swarm 展示型类型,被 lib/swarmStatus.ts 与上层 UI 共同消费,形成单向依赖:UI → hooks/lib → types。 - 辅助库:tools.ts 维护 tool name → i18n 标签映射;cadence.ts、indicators.ts、markdown.ts、formatters.ts、chart-theme.ts、echarts.ts、runReports.ts、utils.ts 各自专注一个横切关注点,不互相耦合。