新增天文观测数据获取能力,覆盖星表查询与一维光谱下载两大场景:
星表检索(CDS VizieR)
- VizieR TAP 客户端(JSON 优先 + VOTable 降级),共享 IVOA VOTable 解析层
- 业务层支持自由 ADQL、锥形检索、交叉证认、星表发现与 CSV 导出
- ADQL 注入防护(标识符清洗 + 字符串字面量转义),TTL 缓存(7 天)
跨望远镜光谱下载(统一入口)
- 接入 LAMOST(ConeSearch + FITS.gz)、Gaia(TAP + DataLink ZIP)、
SDSS(Data Lab TAP + SAS)、DESI(HEALPix coadd)四源
- 双模式:坐标模式(cone 检索 → 选源 → 下载)/ 标识符模式(直按 ID 下载)
- 光谱文件永久缓存(不可变),按 source+source_id 去重
Agent 与 API
- +4 工具:query_vizier / cone_search / find_spectrum / catalog_operation(22 → 26)
- +6 路由:/catalog/vizier、/cone、/crossmatch、/spectrum/{download,list}
- 前端新增 VizierResultCard / FindSpectrumCard 可视化卡片
工程重构
- services/target.rs (832 行) 拆分为 services/cds/{target,vizier}.rs + clients/cds/sesame.rs,
贯彻 client(通信)/ service(缓存+编排)分层
- ADS 返回字段新增 data(关联数据表 URL),与星表功能联动
88 lines
2.5 KiB
TypeScript
88 lines
2.5 KiB
TypeScript
// dashboard/src/components/agent/toolDisplayNames.ts
|
|
// 工具名称 → 人类可读中文名称(所有面板共用)
|
|
|
|
export function getToolDisplayName(name: string): string {
|
|
switch (name) {
|
|
// 文件系统工具
|
|
case 'read_file':
|
|
return '读取文件内容';
|
|
case 'grep_files':
|
|
return '正则搜索文件';
|
|
case 'glob_files':
|
|
return '通配符匹配文件';
|
|
case 'run_bash':
|
|
return '执行 Shell 命令';
|
|
case 'file_write':
|
|
return '写入文件';
|
|
case 'file_edit':
|
|
return '精确编辑文件';
|
|
// 天文科研工具
|
|
case 'search_papers':
|
|
return '检索 ADS/arXiv 文献';
|
|
case 'get_paper_metadata':
|
|
return '获取文献详细元数据';
|
|
case 'download_paper':
|
|
return '下载文献全文资源';
|
|
case 'parse_paper':
|
|
return '结构化解析文献内容';
|
|
case 'get_paper_content':
|
|
return '获取文献全文内容';
|
|
case 'rag_search':
|
|
return '检索馆藏知识库';
|
|
case 'query_target':
|
|
return '查询天体物理参数 (CDS)';
|
|
case 'query_vizier':
|
|
return '查询 VizieR 星表';
|
|
case 'cone_search':
|
|
return '锥形检索天体';
|
|
case 'find_spectrum':
|
|
return '检索下载光谱';
|
|
case 'catalog_operation':
|
|
return '星表操作';
|
|
case 'save_note':
|
|
return '保存文献手札';
|
|
// Agent 控制工具
|
|
case 'todo_write':
|
|
return '管理任务列表';
|
|
case 'compress_context':
|
|
return '压缩上下文窗口';
|
|
case 'load_skill':
|
|
return '加载专家技能';
|
|
case 'subagent':
|
|
return '派发子代理';
|
|
case 'delegate_research':
|
|
return '派发子代理';
|
|
case 'ask_user':
|
|
return '向用户提问';
|
|
// 记忆系统
|
|
case 'save_memory':
|
|
return '保存项目记忆';
|
|
case 'load_memory':
|
|
return '读取项目记忆';
|
|
// 图片分析
|
|
case 'analyze_image':
|
|
return '分析图像内容';
|
|
// 后台任务
|
|
case 'bg_task_run':
|
|
return '启动后台任务';
|
|
case 'bg_task_check':
|
|
return '检查后台任务状态';
|
|
// 团队协作
|
|
case 'spawn_teammate':
|
|
return '创建团队成员';
|
|
case 'send_teammate_message':
|
|
return '发送团队成员消息';
|
|
case 'team_broadcast':
|
|
return '团队广播消息';
|
|
case 'check_team_inbox':
|
|
return '检查团队收件箱';
|
|
default: {
|
|
// 子代理工具名带 [sub] 前缀
|
|
if (name.startsWith('[sub] ')) {
|
|
return `子代理: ${getToolDisplayName(name.slice(6))}`;
|
|
}
|
|
return name;
|
|
}
|
|
}
|
|
}
|