架构重构: - Agent Runtime 由单文件拆为 runtime/ 目录 12 模块(熔断/流式执行/Token预算/文件缓存/权限等) - Agent Tools 由单文件拆为 tools/ 目录 20+ 模块(filesystem/astro/memory/skill/subagent/team 等) - 解析器体系重构(common.rs 836行变更),各解析器同步升级 - Download 服务重构(562行),反爬策略强化 - LLM 客户端重构(266行),流式调用优化 新子系统: - Hooks 生命周期系统(9种事件类型,PreToolUse/PostToolUse 支持输入输出拦截) - Skills 双层加载系统(system-reminder 轻量注入 + LoadSkillTool 按需加载,notify 文件监听热更新) - Memory 项目记忆管理(类型/提取/去重/衰减/保活/选择策略/护栏 7 模块) - SubAgent 上下文隔离子代理运行器(独立 ReAct 循环 + Hook 管道) - Team 多智能体团队协作(文件 inbox 通信、lead/teammate 协调) - TaskBoard DAG 任务依赖管理 - Trajectory 会话轨迹、Terminal 终止信号、Autonomous 自主模式、Background 异步通知 数据库: - agent_tasks 表(DAG 依赖模式,blocked_by JSON 数组) - agent_audit_log 表(工具调用审计:名称/状态/耗时/输出预览) - agent_identity 迁移(消息/审计/任务的 agent_name 归属,agent_team_members 团队注册表) API: - GET /chat/metrics 聚合指标端点 - GET /chat/sessions/:id/audit 会话审计查询 - GET /chat/questions + POST /chat/answer 人机交互问答 工程: - 新增依赖:serde_yaml、notify、glob、walkdir、lru - Skills 目录含 methodology/plotting/presentation 三个初始 SKILL.md - CLAUDE.md 完整项目架构文档
53 lines
2.0 KiB
Rust
53 lines
2.0 KiB
Rust
// build.rs
|
||
use std::path::Path;
|
||
use std::process::Command;
|
||
|
||
fn main() {
|
||
// 声明:只有当 dashboard/src/ 目录或 build.rs 发生改变时,才重新触发构建脚本
|
||
println!("cargo:rerun-if-changed=dashboard/src");
|
||
println!("cargo:rerun-if-changed=dashboard/package.json");
|
||
println!("cargo:rerun-if-changed=build.rs");
|
||
|
||
let dashboard_dir = Path::new("dashboard");
|
||
let node_modules_exist = dashboard_dir.join("node_modules").exists();
|
||
let dist_exists = dashboard_dir.join("dist").exists();
|
||
|
||
// 1. 如果没有 node_modules,自动运行 npm install
|
||
if !node_modules_exist {
|
||
println!("cargo:warning=未检测到 node_modules,正在自动为您安装前端依赖 (npm install)...");
|
||
let status = Command::new("npm")
|
||
.arg("install")
|
||
.current_dir(dashboard_dir)
|
||
.status();
|
||
|
||
match status {
|
||
Ok(s) if s.success() => {
|
||
println!("cargo:warning=前端依赖安装成功。");
|
||
}
|
||
_ => {
|
||
panic!("错误: 自动执行 npm install 失败,请检查是否安装了 Node.js / npm 并配置了正确的环境变量。");
|
||
}
|
||
}
|
||
}
|
||
|
||
// 2. 如果 dist 目录不存在,或者检测到前端源码变化,自动运行 npm run build
|
||
// 提示:因为上面 rerun-if-changed 绑定了 src 目录,只有 src 变动或者 dist 不存在时才会走到这步
|
||
if !dist_exists || node_modules_exist {
|
||
println!("cargo:warning=正在自动为您构建前端静态资源 (npm run build)...");
|
||
let status = Command::new("npm")
|
||
.arg("run")
|
||
.arg("build")
|
||
.current_dir(dashboard_dir)
|
||
.status();
|
||
|
||
match status {
|
||
Ok(s) if s.success() => {
|
||
println!("cargo:warning=前端资源构建打包成功。");
|
||
}
|
||
_ => {
|
||
panic!("错误: 自动构建前端静态资源失败 (npm run build),请进入 dashboard 目录手动排查编译错误。");
|
||
}
|
||
}
|
||
}
|
||
}
|