新增: 项目多工程系统(工程表+Git 状态查询+AI 工具)
一个项目可含多个工程(Module),每个工程是独立代码仓库, 有自己的目录、Git 地址和技术栈。单仓库项目退化:项目下 只有一个工程,用户无感工程概念。 数据层: - project_modules 表(V34 迁移):工程名/目录/Git 地址/技术栈 - ProjectModuleRepo:完整 CRUD + 按项目列表(排序) 后端接口: - 工程 CRUD:添加/更新/删除/列表 - Git 状态查询:实时跑 git 命令返回当前分支/改动文件/最近提交 (10 秒超时,无 Git 仓库返回空状态) 创建项目适配: - 新建项目时自动创建一个工程(目录=绑定路径,技术栈=探测结果) AI 工具: - list_project_modules:列出项目工程列表(AI 了解项目结构) 同时新增工程系统设计方案文档。
This commit is contained in:
@@ -170,6 +170,27 @@ async fn create_with_binding(
|
||||
updated_at: now,
|
||||
};
|
||||
state.projects.insert(record.clone()).await.map_err(err_str)?;
|
||||
// 工程系统:创建项目时自动建一个工程(path = 绑定目录,stack = 探测结果)。
|
||||
// 单仓库项目退化:项目下只有一个工程,用户无感工程概念。
|
||||
// 多仓库场景用户后续可添加更多工程(add_project_module IPC)。
|
||||
if let Some(ref module_path) = record.path {
|
||||
let now_str = df_types::now_millis().to_string();
|
||||
let module = df_storage::models::ProjectModuleRecord {
|
||||
id: df_types::types::new_id(),
|
||||
project_id: record.id.clone(),
|
||||
name: record.name.clone(),
|
||||
path: module_path.clone(),
|
||||
git_url: None, // 探测 git remote 补充(失败为 None,不影响)
|
||||
stack: record.stack.clone(), // 复用项目级技术栈探测结果
|
||||
auto_detected: true, // 自动创建,重新探测时可覆盖
|
||||
sort_order: 0,
|
||||
created_at: now_str.clone(),
|
||||
updated_at: now_str,
|
||||
};
|
||||
if let Err(e) = state.project_modules.insert(module).await {
|
||||
tracing::warn!("创建项目时自动建工程失败(非阻断): {}", e);
|
||||
}
|
||||
}
|
||||
// F-260620: 绑定目录变更后立即 reload 白名单(reload_allowed_dirs 读 projects.path 合并 persistent),
|
||||
// 否则新绑定目录需重启/改 Settings 才生效 → AI 访问误弹窗(已绑定重复弹窗主因,agent3 问题5)
|
||||
if record.path.is_some() {
|
||||
|
||||
Reference in New Issue
Block a user