外壳收尾 - 后端:内置「通用智能助手」(specialist.state = system)—— 它是任务的默认归属, 不是可安装的专员,常规列表一律挡掉,只有显式带 state=system 才查得到 - config/nav.js:一级导航、二级 tab、搜索面板共用一份配置,替代原先散在 layout/ 与 config/workbench.js 里的两套,旧的那批导航导出随之下架 - NavSearch.vue / SectionTabs.vue 组件化;考试 8 个页面收进 ExamTabsView 统一外壳 - 新增 /apps 专员选择页(SpecialistPickerPage.vue) - ChatInputBar 重构:输入框的 + 拆为独立组件 PlusMenu.vue,新增 update:mode 事件 - 删除 LibraryTabs.vue(已被 SectionTabs 取代) 冻结旧导航(新增 frontend/src/_frozen/ + FROZEN.md 登记表) - 工作区胶囊条连通知铃铛一起冻:外壳重构后成了冗余的第二套导航。不删代码, 抽成自包含的 WorkspaceTabs.frozen.vue 归档,将来能原样放回 - 同源孤儿一并收拢:旧 SideNav / SectionTabs / navigation.js / Notification.vue - 统一加 .frozen 后缀,登记表逐条写明原位置 / 冻结原因 / 外部依赖 / 解冻条件 / 解冻步骤 - 已验:冻结物不进构建产物(dist 里搜不到 wb-tabs),src/ 下无代码引用, 只有 MainLayout 里指向 FROZEN.md 的指引注释 - 后端通知四接口与 store/api 层保留(BusinessAppPage 仍在用),解冻是纯前端工作量 我的任务 - 任务记录延迟到发出第一条消息时创建:新建任务只回到开场画布,不落库, 标题取第一句话,专员取输入框 + 里先选的那个(pendingSpecialistKey 暂存, 建任务时一并提交)。原实现点一次落一条「新任务」,是「最近任务」堆满空行的根因 - 最近任务行菜单:重命名(就地编辑,回车提交 / Esc 取消)、置顶、删除 (硬删无回收站,确认框写明无法恢复)。新增 worker_task.pinned 字段、 DELETE /api/worker/my-tasks/:id,列表排序改为 pinned DESC, updated_at DESC; el-dropdown 加 :persistent="false"(默认每行留一份隐藏菜单在 DOM 里) - 对照 ChatGPT / WorkBuddy 后决定不做:分享任务(纯内网)、打开文件夹(Web 无此能力)、 保存到工作空间(无 workspace 概念)、归档(没有「已归档」入口可找回) - 当前任务高亮改用 WorkBuddy 绿;空列表给出「发送第一条消息后出现在这里」提示 - PROJECT_STATE.md 补记 D21(冻结机制)/ D22(延迟建任务)/ D23(行菜单) Co-Authored-By: Claude Code <noreply@anthropic.com>
111 lines
9.5 KiB
Markdown
111 lines
9.5 KiB
Markdown
# 项目状态总览(PROJECT_STATE)
|
||
|
||
> 单一事实源:新对话默认先读此文件恢复上下文;每次关键决策后必须更新。
|
||
> 最后更新:2026-08-24
|
||
|
||
## 1. 项目是什么
|
||
|
||
**eai_agentplatform_app** — EAI 数字员工平台(AI Agent Platform)。
|
||
纯内网本地化的企业 AI 数字员工平台,围绕数字员工(专员)、知识库底座、自动化工坊、
|
||
考试评估与系统管理组织业务能力。配套全局 AI 助手。
|
||
|
||
## 2. 当前状态
|
||
|
||
### 已完成
|
||
- ✅ PRD V1.1 最终定稿(docs/PRD.md / 设计稿)
|
||
- ✅ 文档架构搭建(docs/ 体系)
|
||
- ✅ 编码规范制定(CODING_RULES.md / CLAUDE.md / PROJECT_STATE.md)
|
||
- ✅ 知识入库体系(BE05)后端代码落地:knowledge_source 表 + 解析/扫描/摄入 + 审批 API + 脚本
|
||
|
||
### 已完成(Go 后端)
|
||
- ✅ 后端重写为 Go 完成:认证 / CRUD / 考试 / 素材媒体 / 知识入库 / AI PathCoach / 系统管理
|
||
- ✅ 交付形态落地:单二进制 + systemd + Clonezilla 清理清单(backend-go/deploy/)
|
||
- ✅ 岗位与知识对应能力(P0):Position / PositionKnowledge 表 + 岗位 CRUD + 知识映射 +
|
||
用户设岗(`user.position_id`)+ 岗位驱动组卷(`exam_paper.position_id` → `pickQuestions` 岗位过滤分支);
|
||
前端「岗位管理」页 + 映射编辑面板 + 用户/考试关联岗位下拉
|
||
- ✅ 岗位能力闭环(P1 + P2):学员「我的岗位应学清单」(`/api/my/position`)+
|
||
成绩按岗位聚合(`/api/system/exam-stats-by-position`)+ 岗位考试蓝图(`position_exam_blueprint`);
|
||
错题本(`mistake_record`)+ 简答题 LLM 评分(`essay` 题型 + `essay_grade` 能力)+
|
||
后端自动化测试(`_test.go`,`go test ./...` 全绿)
|
||
- ✅ 学员成长体系(对标竞品,突破「极简/禁止学情分析」边界):学习积分 + 排行榜(`point_event` +
|
||
`user.learning_points`);考试合格证书(`certificate`,正式通过自动颁发);学习档案/能力雷达
|
||
(`/api/my/profile`,按域掌握度 + 薄弱域 + 成绩趋势);前端新增「我的学习档案 / 我的证书 / 学习排行榜」页
|
||
- ✅ 组织架构 + 消息通知:部门字典(`department`)+ 按部门学情统计(`/api/system/department-stats`);
|
||
站内通知(`notification`,考试发布/考试通过发证/设岗三事件推送)+ 侧栏铃铛角标;
|
||
社交社区/讨论区**定死不做**
|
||
|
||
### 待开始
|
||
- ⬜ 按 `docs/01_System_Overall/SY19_Universal_Digital_Worker_Product_Planning.md`
|
||
将当前项目从“已有专员雏形”进一步收口为“通用数字员工平台 V1.0”
|
||
|
||
## 3. 已拍板决策
|
||
|
||
| # | 决策 | 状态 |
|
||
|---|------|------|
|
||
| D01 | 前端:Vue3 + Vite + Element Plus | 已定 |
|
||
| D02 | 后端:Go + Gin + GORM + SQLite(modernc 纯Go驱动,接口留 MySQL 兼容) | 已定 |
|
||
| D03 | 认证:JWT(golang-jwt)+ bcrypt | 已定 |
|
||
| D04 | 文档转换:LibreOffice(裸进程)+ pdftotext | 已定 |
|
||
| D05 | AI 底座:内网 OpenAI 兼容接口(非公网) | 已定 |
|
||
| D06 | 视频仅预览、不提取文本、不进 AI | 已定 |
|
||
| D07 | 知识检索:混合检索(向量 brute-force + 关键词兜底),数据量小无需 ANN | 已定 |
|
||
| D08 | 审批通过后异步转换/提取 | 已定 |
|
||
| D09 | 视频 > 100MB 分片上传 + 断点续传 | 已定 |
|
||
| D10 | 题库 + 组卷配置(随机/固定抽题) | 已定 |
|
||
| D11 | 角色:employee / admin 两级,无复杂权限 | 已定 |
|
||
| D12 | 结构化知识源通道:backend-go/knowledge_source/ md → knowledge_source 表审批 → 摄入 product/question/chunk | 已定 |
|
||
| D13 | 向量检索:brute-force 余弦 + Ollama bge-m3 embedding(单容器双模型,随盘交付) | 已定 |
|
||
| D14 | 交付形态:裸进程 + systemd + Clonezilla 整盘克隆,Go 单二进制无源码交付 | 已定 |
|
||
| D15 | 岗位与知识对应:Position/PositionKnowledge 表 + 用户单岗位(`user.position_id`)+ 岗位驱动组卷 | 已定(P0 落地) |
|
||
| D16 | 岗位考试蓝图:`position_exam_blueprint` 按「域 + 题型」抽样(题目无级别字段,不做级别加权);蓝图存在时优先于岗位映射抽题 | 已定(P1 落地) |
|
||
| D17 | 错题本(学员自助,非学情分析,自测/正式均写)+ 简答题 LLM 评分(`essay` 题型,复用 title_gen 路由,`essay_grade` 不扣点) | 已定(P2 落地) |
|
||
| D18 | 突破原「极致极简/杜绝学情分析」边界:新增学员成长体系 = 学习积分+排行榜(游戏化)+ 考试证书(认证)+ 学习档案/能力雷达(学情,学员自助视角);积分规则集中常量可调 | 已定(V1.6 落地) |
|
||
| D19 | 部门组织架构(department 字典表,用户以 department 字符串归属、改名同步)+ 按部门学情统计;站内消息通知(考试发布/通过发证/设岗三事件);**社交社区/讨论区定死不做** | 已定(V1.7 落地) |
|
||
| D20 | 当前阶段产品路线收口为「先通用、后定制」:先做标准化通用数字员工产品包,不直接追 WorkBuddy 的高自由度路线;第一批优先沉淀知识运营、培训考试、内容生成、任务推进 4 个通用数字员工,后续再长行业包与企业半定制 | 已定(见 `docs/01_System_Overall/SY19_Universal_Digital_Worker_Product_Planning.md`) |
|
||
| D21 | 前端建立「冻结归档」机制:停用代码不删除,集中到 `frontend/src/_frozen/`(统一 `.frozen` 后缀 + `FROZEN.md` 登记表,逐条记录原位置/冻结原因/外部依赖/**解冻条件**/解冻步骤)。首批冻结:工作区胶囊条(外壳重构后成了冗余的第二套导航)及外壳重构遗留的四个孤儿文件。**D19 的站内通知只冻前端 UI** —— 后端四个接口保留,`store`/`api` 层保留(`BusinessAppPage` 仍在用),解冻为纯前端工作量 | 已定(见 `frontend/src/_frozen/FROZEN.md`) |
|
||
| D22 | 任务记录**延迟到发出第一条消息时创建**(对齐 WorkBuddy:新建任务只是导航动作,不落库)。「新建任务」只做「回到 /home 开场画布 + 清空当前任务」,任务标题由第一句话决定、专员取输入框 `+` 里先选的那个(`pendingSpecialistKey` 暂存,建任务时作为 `specialist_key` 一并提交,后端已支持)。**不允许存在没聊过天的空任务** —— 原实现点一次落一条 `新任务`,是「最近任务」堆满空行的根因 | 已定(V1.8 落地) |
|
||
| D23 | 侧边栏「最近任务」的行菜单(对齐 ChatGPT 悬停 `⋯` + WorkBuddy 任务卡「更多」):**重命名**(就地编辑,回车提交/Esc 取消)、**置顶**(新增 `worker_task.pinned`,排序 `pinned DESC, updated_at DESC`)、**删除**(新增 `DELETE /api/worker/my-tasks/:id`,硬删、无回收站,确认框写明「无法恢复」)。对照后**不做**:分享任务(纯内网无意义)、打开文件夹(Web 无此能力)、保存到工作空间(项目无 workspace 概念)、归档(没有「已归档」入口可找回,等于软删陷阱)。`el-dropdown` 加 `:persistent="false"` —— 默认每行留一份隐藏菜单在 DOM 里,50 条任务就是 50 份 | 已定 |
|
||
|
||
## 4. 文档索引
|
||
|
||
| 文档 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| PRD | `../docs/PRD.md` | 产品需求文档(V1.1 最终版) |
|
||
| 设计稿 | `../docs/eai_agentplatform_app设计稿.md` | 完整 PRD 中文原稿 |
|
||
| DB Schema | `../docs/db_schema.md` | 9 张核心表字段设计 |
|
||
| API 文档 | `../docs/api.md` | API 接口定义 |
|
||
| 部署文档 | `../docs/deploy.md` | 部署架构与步骤 |
|
||
| 变更日志 | `../docs/changelog.md` | 版本变更记录 |
|
||
| 知识入库体系 | `../docs/04_Backend/BE05_Knowledge_Ingest_Module.md` | 上传→生成→审批→入库总设计 |
|
||
| 知识源目录 | `backend-go/knowledge_source/` | 结构化知识源 md(5 份,28 产品 + 20 题) |
|
||
| 编码准则 | `../CODING_RULES.md` | 编码与调试最高准则 |
|
||
| AI 协作锚点 | `CLAUDE.md` | AI 新对话启动仪式 |
|
||
|
||
## 5. 目录结构(当前)
|
||
|
||
```
|
||
pj0231-eai_agentplatforming/ # 工作区根(仓库根)
|
||
├── CODING_RULES.md # 编码与调试最高准则
|
||
├── start_dev_10231_10232.sh # 开发启动脚本
|
||
├── docs/ # 设计文档(项目级,与代码分离)
|
||
│ ├── 00_AI_Context/ # AI 协作上下文
|
||
│ ├── 01_System_Overall/ # 系统总览
|
||
│ ├── 02_Architecture/ # 架构设计
|
||
│ ├── 04_Backend/ # 后端设计与 API
|
||
│ ├── 06_Product_Lines/ # 产品线与前端设计
|
||
│ ├── 08_Design_Rules/ # UI/UX 设计规范
|
||
│ ├── PRD.md / db_schema.md / api.md / deploy.md / changelog.md
|
||
│ ├── eai_agentplatform_app设计稿.md # 完整 PRD 中文原稿
|
||
│ └── 博昇产品与渠道合作表.md # 知识源权威数据
|
||
└── eai_agentplatform_app/ # 应用代码
|
||
├── backend-go/ # Go 后端(正式,唯一后端,已完成)
|
||
│ ├── cmd/ internal/ # Go 源码
|
||
│ ├── knowledge_source/ # 知识源 Markdown(运行时数据)
|
||
│ ├── data/ # 运行时数据(db+media,git 忽略)
|
||
│ └── deploy/ # 交付物(systemd/env/清理脚本/DELIVERY.md)
|
||
├── frontend/ # 前端代码
|
||
├── CLAUDE.md
|
||
├── PROJECT_STATE.md
|
||
└── .gitignore
|
||
```
|