Search Tools Studio (中文 (简体))
Search Tools Studio 将 /dashboard/search-tools 从基础搜索试验场升级为一个包含三个标签页的 Studio,统一提供 Web 搜索、Web 抓取和并排提供者比较功能。
┌ 搜索工具 ──────────────────────────────────────────────────────────────┐│ [🔍 搜索] [📄 抓取] [⚖ 比较] 142ms · $0.001 </> ││ ⓘ [模态类型指南] │├──────────────────────────────────────────┬─────────────────────────────┤│ {当前标签页内容} │ ─ 配置 ││ │ 提供者 [自动 ∨] ││ │ 🟢 Serper $0.001 ││ │ 🟢 Tavily $0.008 ││ │ 🔥 Firecrawl(获取) ││ │ 类型 [Web | 新闻] ││ │ 完整页面 [ ](抓取) ││ │ 格式 [md|文本|html] ││ │ 重排序模型 [∨] │└──────────────────────────────────────────┴─────────────────────────────┘将现有的 SearchForm + ResultsPanel + RerankPanel 扩展为一个标签页:
- 查询 → 结果(标题、URL、摘要、相关性分数)。
- 配置窗格中的提供者元数据(成本、配额、状态)。
- 重排序部分:选择重排序模型、重新排列结果、显示
positionDelta。 - 未配置搜索提供者时,显示带有 CTA 的空状态。
- 通过
SearchHistory.tsx提供搜索历史记录。 - 调用
POST /v1/search(现有端点,无变更)。
用于通过 POST /v1/web/fetch(在计划 05 中创建)从 URL 提取内容的新标签页:
- 输入:URL + 完整页面开关 + 格式选择器(Markdown / 文本 / HTML)。
- 提交 → 获取 → 渲染
ScrapeResult.tsx。 ScrapeResult渲染 Markdown 预览和原始内容切换选项。- 上限:如果响应正文大于 256 KB,UI 将显示
(已截断,查看原始内容),并在 Monaco 模态框中打开原始内容(D21)。 - 元数据面板:提供者(firecrawl/jina-reader/tavily-search/tinyfish/nimble-search/anysearch-search)、延迟、成本、响应大小、链接数量。
- 使用
useScrapeFetch.tsHook。
跨最多 4 个提供者并行运行相同的查询/URL(D22):
- 每个提供者使用一个并排显示的列。
- 指标:延迟、成本、结果数量、响应大小。
- 搜索的 URL 重叠度计算(共享 URL 数量与初始结果的对比)。
- 根据提供者调用
POST /v1/search(搜索)或POST /v1/web/fetch(抓取)。
配置窗格(共享)
Section titled “配置窗格(共享)”SearchToolsConfigPane.tsx — 始终可见,可折叠。
| 字段 | 说明 |
|---|---|
| 提供者 | 带状态徽章的下拉菜单(已配置 / 缺失 / 受到速率限制) |
| 类型 | web 或 news(仅搜索) |
| 完整页面 | 抓取开关 — 获取整个页面,而非首屏可见内容 |
| 格式 | markdown、text 或 html(仅抓取) |
| 重排序模型 | 用于搜索后重排序的可选模型 |
| 历史记录 | 可折叠的搜索历史记录部分 |
SearchConceptCard
Section titled “SearchConceptCard”SearchConceptCard.tsx — 始终可见的可折叠手风琴组件。说明:
| 概念 | 简介 |
|---|---|
| 搜索 | 获取网页结果列表(标题、URL、摘要、相关性分数) |
| 抓取 | 提取 URL 的完整内容(markdown、文本或 HTML) |
| 比较 | 在 N 个提供者中并行运行同一查询 |
| 重排序 | 通过 LLM 重新排列结果,以提高与查询的相关性 |
| 自动(最便宜) | 自动选择当前最便宜的可用提供者 |
ProviderCatalog.tsx 展示来自 GET /api/search/providers 的完整提供者列表
(在 F4 中扩展以包含抓取提供者):
| kind | "search"(20 个提供者)或 "fetch"(firecrawl、jina-reader、tavily-search、tinyfish、nimble-search、anysearch-search) |
状态在请求时动态派生,具体方式是检查凭据是否存在,以及 所有密钥当前是否均处于冷却期。
ExportCodeModal(从 Playground Studio 导入)和 codeExport.ts 可为
/v1/search 与 /v1/web/fetch 调用生成 curl / Python / TypeScript 代码片段。
API 密钥占位符始终为 $OMNIROUTE_API_KEY(D11,与 Playground Studio 共享)。
此功能仅需要一项后端变更:
扩展 GET /api/search/providers
Section titled “扩展 GET /api/search/providers”对 src/app/api/search/providers/route.ts 进行了扩展,以:
- 在数组中包含全部 6 个抓取提供者(
firecrawl、jina-reader、tavily-search、tinyfish、nimble-search、anysearch-search)。 - 为每一项添加
kind: "search" | "fetch"。 - 添加根据实时凭据状态派生的
status: "configured" | "missing" | "rate_limited"。 - 保持向后兼容——现有字段(
id、name等)保持不变。
| 路径 | 用途 |
|---|---|
src/app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx |
Studio 外壳、选项卡编排 |
src/app/(dashboard)/dashboard/search-tools/components/SearchToolsTopBar.tsx |
选项卡 + 指标 + 导出按钮 |
src/app/(dashboard)/dashboard/search-tools/components/SearchToolsConfigPane.tsx |
共享配置面板 |
src/app/(dashboard)/dashboard/search-tools/components/SearchConceptCard.tsx |
说明卡片(始终可见) |
src/app/(dashboard)/dashboard/search-tools/components/ProviderCatalog.tsx |
包含元数据的提供者列表 |
src/app/(dashboard)/dashboard/search-tools/components/ScrapeResult.tsx |
Markdown 预览 + 原始内容切换 |
src/app/(dashboard)/dashboard/search-tools/components/tabs/SearchTab.tsx |
搜索 + 重排序选项卡 |
src/app/(dashboard)/dashboard/search-tools/components/tabs/ScrapeTab.tsx |
抓取选项卡 |
src/app/(dashboard)/dashboard/search-tools/components/tabs/CompareTab.tsx |
多提供者比较选项卡 |
src/app/(dashboard)/dashboard/search-tools/hooks/useScrapeFetch.ts |
抓取请求 Hook |
src/app/api/search/providers/route.ts |
扩展了 kind + status + 抓取提供者 |
open-sse/config/searchRegistry.ts |
搜索提供者元数据的唯一事实来源 |
| 症状 | 原因 | 修复方法 |
|---|---|---|
| 抓取选项卡显示“端点不可用” | /v1/web/fetch 未接入 |
确认计划 05 已合并;检查 src/app/api/v1/web/fetch/route.ts 是否存在 |
| 提供者目录中所有提供者均显示为“缺失” | 未配置凭据 | 在 /dashboard/providers 中添加凭据 |
| 抓取内容被截断 | 响应超过 256 KB 上限 | 预期行为 (D21)。使用“查看原始内容”按钮查看完整内容 |
| 比较选项卡仅显示 2 个提供者 | 速率限制生效 | 两个或更多提供者可能正处于冷却期——请在配置窗格中检查提供者状态 |
| 表格中的“大小”显示为原始键名 | 缺少 i18n 键 | 确认语言区域文件中存在 search.size;重新构建 i18n |
- 总体计划:
_tasks/features-v3.8.6/refactorpages/_orchestration/master-plan-group-C.md - 功能计划:
_tasks/features-v3.8.6/refactorpages/18-search-tools-studio-redesign.plan.md - 搜索提供者注册表:
open-sse/config/searchRegistry.ts - Playground Studio(共享的
ExportCodeModal+codeExport.ts):docs/frameworks/PLAYGROUND_STUDIO.md - Web fetch 后端:
src/app/api/v1/web/fetch/route.ts
HagiCode
HagiCode 是一套智能体编码工作台:结构化工作流、多 Agent 并行执行与 Hero Dungeon 视图,把想法变成真正交付的软件。
让想法更快变成好用的软件,让智能编码更聪明、更高效,也更有趣。

- Smart结构化工作流将意图转化为从想法到交付的可执行路径。
- Efficient多 Agent 工作流让调研、实现与审阅并行推进。
- FunHero Dungeon 让长时间编码协作更直观、更有参与感。