# Phase 2:前端 Tools Tab 实现 日期:2026-04-08 状态:待开始 --- ## 1. 本阶段目的 实现 Temple 页面的 Tools Tab,包括分类树 + 详情面板 + Metrics Strip。 --- ## 2. 核心文件 | 文件 | 作用 | |------|------| | `frontend/src/api/tools.ts` | 新建,Tools API 客户端 | | `frontend/src/pages/temple/composables/useTemple.ts` | 新建,Tab/Skills 逻辑 | | `frontend/src/pages/temple/index.vue` | 重写主页面(替换占位符) | | `frontend/src/pages/temple/templePage.css` | 新建,样式 | --- ## 3. 页面布局 ``` ┌─────────────────────────────────────────────────────────────┐ │ [◈ 智慧神殿] [Tools] [Skills] ← Tab 切换器 │ ├─────────────────────────────────────────────────────────────┤ │ TOTAL: 30 │ ACTIVE: 28 │ AGENTS: 5 ← Metrics Strip │ ├──────────────────────────┬──────────────────────────────────┤ │ │ │ │ [分类树] │ [工具详情] │ │ │ │ │ ▼ 注册层 │ file_operator │ │ 文件操作 │ ──────────── │ │ 任务管理 │ 描述: 强大的文件系统操作工具 │ │ 网页抓取 │ 命令: 4 个 │ │ 联网搜索 │ 标签: file, system, essential │ │ ▼ Agent层 │ 状态: 启用 │ │ 文件工具 │ 调用: 1,234 次 │ │ 系统命令 │ 错误率: 0.2% │ │ 开发工具 │ 平均耗时: 150ms │ │ 协作工具 │ │ │ 知识检索 │ [Commands] │ │ 日程管理 │ ─────────────────────────── │ │ 任务管理 │ read_file │ │ 论坛功能 │ ─────────────────────────── │ │ 时间推理 │ write_file │ │ │ ─────────────────────────── │ │ │ list_directory │ │ │ ─────────────────────────── │ │ │ search_files │ └──────────────────────────┴──────────────────────────────────┘ ``` --- ## 4. 组件说明 ### 4.1 Tab 切换器 两个 Tab:`Tools` | `Skills` - `Tools` → 本 phase 实现 - `Skills` → Phase 3(复用现有页面) ### 4.2 Metrics Strip 三个统计指标卡片: | 指标 | 说明 | |------|------| | `TOTAL` | 系统工具总数(所有工具的 commands 总数) | | `ACTIVE` | 启用中的工具数 | | `AGENTS` | 工具绑定的 Agent 类型数(固定 5) | ### 4.3 分类树 - 两级结构:大类(注册层 / Agent 层)→ 具体分类 - 点击分类 → 右侧显示该分类下的工具列表 - 点击工具 → 右侧显示工具详情 ### 4.4 工具详情面板 当无工具选中时:显示分类下的工具列表(卡片形式) 当有工具选中时:显示工具详情 详情内容: - **Name / Display Name** - **Description** - **Category / Tags** - **Enabled status** - **Stats**: call_count, error_rate, avg_duration_ms - **Commands**: 每个 command 的 name + description(只读) --- ## 5. useTemple.ts 接口设计 ```typescript // useTemple.ts export function useTemple() { // State const activeTab = ref<'tools' | 'skills'>('tools') const categories = ref([]) const selectedCategory = ref(null) const selectedTool = ref(null) const loading = ref(false) // Computed const summary = computed(() => { ... }) const currentCategoryTools = computed(() => { ... }) // Actions async function fetchTools() { ... } function selectCategory(name: string) { ... } function selectTool(tool: ToolInfo) { ... } return { activeTab, categories, selectedCategory, selectedTool, loading, summary, currentCategoryTools, fetchTools, selectCategory, selectTool, } } ``` --- ## 6. 样式规范 沿用 Jarvis 现有风格: ```css /* templePage.css */ .temple-page { /* 复用 jarvis-* CSS 变量 */ background: var(--bg-primary); color: var(--text-primary); } .metric-card { background: var(--bg-secondary); border: 1px solid var(--border-color); } .category-tree { /* 深色终端风格 */ } ``` --- ## 7. 产出要求 - [x] Tab 切换器正常切换 Tools / Skills - [x] Metrics Strip 正确显示统计数据 - [x] 分类树正确渲染,展开/收起正常 - [x] 点击工具有详情面板,Commands 列表完整 - [x] 样式与 Jarvis 整体风格一致