Skill、流式执行优化与系统架构全面升级
本次提交对标 Claude Code 与 Hermes-Agent 的工程细节,在安全、可靠性、
会话管理、自我进化四个维度进行了系统性加固,变更总量 48 文件 / +12680 -2292 行。
═══════ 安全纵深防御 ═══════
1. Hardline 硬阻止层 (src/agent/runtime/hardline.rs, +534 行)
- 不可绕过的危险命令拦截(关重启、磁盘擦除、Fork 炸弹、rm -rf /、kill -1)
- 反规避标准化管线: ANSI 序列剥离 → Unicode NFKC → shell 反斜杠还原 → 空字面量清理
- 在 PermissionChecker 之前执行,YOLO/Bypass 模式下同样生效
- 集成到 executor Phase 2,被拒绝工具直接注入错误结果
2. Permission 优先级裁决器 (src/agent/runtime/permission.rs, +200 行)
- 7 层正式优先级规则 (P0 Deny → P7 Allow),带冲突日志
- explain() 方法支持审计追溯
- Hook PermissionRequired 与 Checker 结果的正确叠加逻辑
═══════ Checkpoint 文件快照系统 ═══════
3. git2 原生快照 (src/agent/runtime/checkpoint.rs, +920 行)
- 基于 git2 bare repo,内容寻址自动去重
- 文件变更操作前自动触发 (file_write/file_edit/run_bash)
- 每目录每 turn 最多一次快照,防止同一轮重复
- 支持 list/diff/restore API + pre-rollback 安全快照
- 旧快照自动 prune(保留最近 N 个)+ 按目录隔离 ref
- 排除规则自动过滤 node_modules/target/.git/*.pdf 等
- 集成到 executor: 文件操作前 ckpt.ensure_checkpoint()
═══════ 错误恢复系统大升级 ═══════
4. 21 种 FailoverReason 分类 (src/agent/runtime/error_recovery.rs, +1200 行)
- 参考 Hermes-Agent error_classifier.py
- 8 步分类管线: provider-specific → HTTP status → text pattern → error body → fallback
- is_retryable / should_compress / should_failover / is_permanent 方法
- Context Overflow 自动修复: 从错误消息提取 token 限制,自动下调预算
- RecoveryStep::AdjustMaxTokens 实现 (参考 Claude Code 自动修复)
- 向后兼容 ErrorKind 别名
═══════ 会话 Rewind / Branch / Retry 体系 ═══════
5. 完整 undo 栈 (src/agent/runtime/session.rs, +800 行 + 2 迁移脚本)
- Rewind (软删除): active=0 标记,审计 trail 保留,LLM 不可见
- Restore (撤销回退): 冲突检测——回退后有新消息则拒绝,引导使用 Branch
- Branch: 分叉会话,复制所有 active=1 消息到新会话
- Retry: 硬删除最后一轮对话,返回原消息文本供前端重提交
- 数据库: agent_messages.active 列 + agent_sessions.rewind_count + parent_session_id
- API: 4 个新端点 (/branch, /retry, /rewind, /rewind/restore)
- load_history_for_agent 全面使用 active=1 过滤
═══════ Hooks 系统模块化重构 ═══════
6. 单文件 → 7 模块体系 (src/agent/hooks/)
hooks.rs (994 行) 拆分为:
- mod.rs — 入口 + HookRegistry + SessionHookManager
- types.rs — 类型定义 (Context, TaggedContext, PermissionRequestAction 等)
- traits.rs — AgentHook + AsyncAgentHook + 15 种生命周期事件
- matcher.rs — 工具名/参数匹配 + session 作用域过滤
- dispatch.rs — 并行调度引擎 (run_pre/post_tool_use 等)
- registry.rs — 注册/注销/查询
- builtins.rs — CancellationHook + MetricsHook + AuditLogHook + ContextDeduplicator
关键改进:
- run_pre_tool_use 并行执行所有匹配 hooks,聚合 Block/MutateInput/Continue
- TaggedContext 带完整来源标记的上下文注入 (hook_name + event)
- ContextDeduplicator 单 dispatch cycle 内内容哈希去重
- AsyncAgentHook 支持 fire-and-forget 异步 hooks
═══════ Executor 并发执行升级 ═══════
7. 三阶段管道重写 (src/agent/runtime/executor.rs, +600 行)
- Phase 1: 死循环检测 + 参数解析 (不变)
- Phase 2: Hardline 预检查 (新增) → PermissionChecker (改进)
- Phase 3: ToolPartitioner 分区 → 逐批次执行 (重写)
- 并行批次内 FuturesUnordered 并发
- 串行批次确保非并发安全工具独占执行
- Checkpoint 预触发集成
- Hook 上下文注入: system-reminder 格式 + ContextDeduplicator 去重
- Hook 阻塞错误详细记录
═══════ 流式执行真正的流式调度 ═══════
8. StreamingExecutor 重写 (src/agent/runtime/streaming_executor.rs, ~400 行变更)
- on_tool_use 中对并发安全工具立即 tokio::spawn,不等待 flush
- executing_non_concurrent 标志阻塞后继工具直到独占工具完成
- JoinHandle 管理替代自定义 cancel channel
- completed_queue 按流顺序 yield
- Sibling Abort 通过 broadcast channel + tokio::select! 竞速
- ToolContext 实现 Clone (支持 per-task 上下文复制)
═══════ 自改进 Skill 系统 ═══════
9. PatternDetector + SkillCreator + Curator (src/agent/skills/, +1500 行)
- PatternDetector: 扫描 agent_messages 表,检测跨 session 重复工具调用模式
- SkillCreator: 将高置信度模式自动生成 SKILL.md (YAML frontmatter + 工作流步骤)
- SelfImprovePipeline: 一站式 模式检测 → 创建 → 质量审查
- Curator: 分析 skill 使用统计,标记 stale/deprecated,建议清理
- Skill frontmatter 新增 pinned 字段 (禁止 Curator 自动清理)
═══════ 基础设施优化 ═══════
10. 系统提示词缓存 (src/agent/runtime/system_prompt.rs + mod.rs)
- SystemPromptCache: 首次计算后永久复用,/clear 时失效
- 新增 SAFETY / SYSTEM_CONTEXT / TOOL_USAGE 静态 section
- 环境/tools/skills/memory 动态 section 通过 get_or_compute 缓存
11. ToolRegistry schema 缓存 (src/agent/tools/mod.rs)
- schema_cache + schema_generation 版本号
- 工具变更/过滤器变更时自动失效
- precompute_definitions() 预计算 (AgentRuntime 初始化时调用)
12. 迭代摘要融合 (src/agent/compact.rs, +100 行)
- 参考 Hermes context_compressor.py
- CollapseLog 追踪压缩历史,支持溢出合并
- extract_prior_summary: 提取已有摘要融入新压缩
13. SubAgent 系统提示词模块化 (src/agent/tools/subagent.rs)
- 复用 5 个标准 section + 子代理专有上下文 section
- 独立 ToolRegistry 构建工具列表
═══════ 前端 — CSS 变量主题系统 ═══════
14. 全新主题变量体系 (dashboard/src/index.css + App.tsx + 各面板)
- CSS 自定义属性: --bg-card, --text-main, --text-muted, --border-precision
- 语义化颜色: --accent-blueprint, --accent-star
- 全面替换硬编码 Tailwind 颜色 (slate-xxx → var(--xxx))
- 文献入库提示优化 ("核心知识节点" 替代 "向量块")
- ReaderPanel 样式变量化
|
||
|---|---|---|
| bin | ||
| dashboard | ||
| docs | ||
| migrations | ||
| profiles | ||
| skills | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| dictionary.txt | ||
| README.md | ||
AstroResearch 天文科研辅助系统
AstroResearch 是一个基于 Rust (Axum) 后端与 React (Vite + TypeScript) 前端的天文文献一体化科研辅助系统。
1. 功能概述 (Overview)
AstroResearch 为天文领域的学者与研究人员提供一站式的文献管理与智能阅读解决方案,核心功能包括:
- 🌌 统一学术检索:一键跨源检索 NASA ADS 与 arXiv 数据库,支持去重元数据卡片式展示、高级组合条件检索与多种排序方式。
- 📥 多通道文献同步与防爬绕过:支持智能后台下载(官方 HTML / ar5iv 回退)、网页端本地 PDF/HTML 手动离线上传,以及浏览器书签脚本一键直推同步(无惧 Cloudflare 等高强度 WAF 拦截)。
- 🏷️ 下载错误诊断与无资源标记:自动记录每篇文献 PDF/HTML 下载失败的具体原因(数据库
error:前缀字段),支持一键标记"无有效全文资源"并从批量任务中排除。 - 📝 结构化文献解析:解析 HTML 或调用 MinerU (PDF 降级解析) 输出标准 GFM Markdown,对 LaTeX 公式实施占位符保护。
- 🗣️ 大模型双语翻译:基于本地天文学词汇库 (Trie 树最长匹配) 构建翻译 Glossary,指导大模型进行公式级精准中英翻译。
- 🪐 引文网络星系图:基于 HTML5 Canvas 的高性能力导向拓扑渲染,双击节点支持引文深度探索。
- ✍️ 划词高亮与笔记:在双语阅读器中自由划词、多色高亮并记录学术心得,数据与文献双向绑定。
- 🩺 馆藏健康度检查:内置诊断与修复工具,检测数据库与物理文件的不一致性并支持一键自动修复。
2. 快速启动 (Quickstart)
2.1 配置环境变量
将根目录下的 .env.example 复制并重命名为 .env:
cp .env.example .env
用编辑器打开填入你的 ADS_API_KEY、LLM_API_KEY、QINIU_ 等第三方服务的认证 Token。
2.2 运行服务 (Run)
方案一:本地开发调试模式 (Development Mode)
开发模式下分别启动后端 API 服务和前端 HMR 热更新服务:
- 启动后端 (Rust Axum):
后端服务默认运行在cargo runhttp://localhost:8000,并会自动初始化本地 SQLite 数据库及运行 migrations 迁移。 - 启动前端 (React Vite):
前端开发服务器默认运行在cd dashboard npm install npm run devhttp://localhost:5173。前端的所有/api接口请求已配置反向代理,会自动转发到后端的8000端口。
方案二:生产打包与单程序部署模式 (Production Mode)
生产模式下需要先编译前端静态文件,随后由后端进程统一托管分发:
-
打包编译前端:
cd dashboard npm install npm run build静态资源将打包并输出在项目根目录下的
dashboard/dist/目录。 -
运行后端服务:
- 方式一:外部命令行模式(默认):
注意:默认模式下需下载 Obscura 二进制文件并放置在项目根目录的cd .. cargo run --releasebin/目录下。 - 方式二:进程内浏览器模式(免外部二进制分发):
此时无头浏览器将直接编译进主二进制中,首次编译较慢但能一键运行。cd .. cargo run --release --features obscura-inprocess
运行后直接访问
http://localhost:8000即可使用,此时所有 React 网页和后台 API 均由 Rust 进程统一分发托管,无需额外启动 Vite。详细配置说明参见 编译与部署指南。 - 方式一:外部命令行模式(默认):
2.3 馆藏文献健康度检查与修复 (Health Check)
系统提供内置的健康度校验脚本,可用于排查与自动修复数据库状态和物理磁盘文件的不一致问题:
- 只读扫描模式:检测损坏文件、丢失文件、报错记录和孤立 Markdown,不改动任何数据。
cargo run --bin health_check - 自动修复模式:物理清理磁盘损坏/无源文件,将失效路径重置为
NULL(安全保留error:报错诊断日志)。cargo run --bin health_check -- --fix
3. 技术文档结构 (Documentation Directory)
- 🏗️ 架构设计 — 系统宏观架构、Agent 子系统、Mermaid 流程图
- 🌐 API 接口规范 — 全部 Axum REST 端点与 SSE 事件
- 🗄️ 数据库设计 — SQLite 表结构、ER 图、迁移历史
- 🛠️ 开发指南 — 构建/测试/环境变量/项目结构
- 🎨 视觉设计 — UI 设计系统与交互体验
- 🚀 部署指南 — 生产构建与发布
- 🔧 排障指南 — 常见问题与解决方案
- 🤝 参与贡献 — 代码规范与测试要求
4. 项目目录结构 (Project Structure)
AstroResearch/
├── src/
│ ├── main.rs # Axum 服务入口:路由、中间件、静态资源托管
│ ├── lib.rs # Config 配置加载
│ ├── api/ # HTTP handlers + AppState
│ │ ├── agent.rs # SSE 智能体对话、会话管理、指标、审计
│ │ ├── papers.rs # 文献检索/下载/解析/翻译/引文/导出
│ │ ├── notes.rs # 笔记 CRUD
│ │ ├── sync.rs # 批量同步
│ │ ├── targets.rs # 天体目标识别
│ │ └── helpers.rs # 共享工具函数
│ ├── agent/ # ReAct 智能体引擎 (参考 Claude Code 分层设计)
│ │ ├── runtime/ # ReAct 循环、流式执行、Token 管理、权限、熔断
│ │ ├── tools/ # 工具系统 (filesystem/ astro/ memory/ team/)
│ │ ├── compact/ # 三层上下文压缩
│ │ ├── memory/ # 项目记忆管理 (提取/去重/衰减/保活/护栏)
│ │ ├── team/ # 多 Agent 团队协作
│ │ ├── hooks.rs # 生命周期事件系统
│ │ ├── skills.rs # 技能注册表 (热加载)
│ │ ├── subagent.rs # 上下文隔离子代理
│ │ └── terminal.rs # 循环终止信号
│ ├── clients/ # 外部 API 客户端 (ADS, arXiv, LLM, Qiniu)
│ ├── services/ # 业务逻辑
│ │ ├── parser/ # HTML/PDF → Markdown 解析器 (A&A, IOP, ar5iv, MinerU)
│ │ ├── batch/ # 批量同步引擎
│ │ ├── download.rs # 文献下载器 (反爬伪装、多级回退)
│ │ ├── translation.rs # LLM 翻译 + Trie 天文词典
│ │ └── rag.rs # 向量检索增强生成
│ └── bin/ # 独立二进制 (cli, health_check, reparse)
├── dashboard/ # React 19 + Vite + TypeScript 前端
│ └── src/features/ # search/ library/ reader/ citation/ agent/ sync/ settings/
├── skills/ # Agent Skills (Markdown 知识模块)
├── migrations/ # SQLite 迁移脚本
├── library/ # 本地文献存储 (PDF/HTML/Markdown/Translation)
├── docs/ # 技术文档 (架构/API/数据库/开发/部署/排障)
└── dictionary.txt # 天文学双语名词词典