# sundynix-agentix · 进度清单

对照 [architecture.md](architecture.md)（5 层 + NATS 总线）与功能规划的完成度。**活文档：完成一项就把 `[ ]` 勾成 `[x]`。**

图例：`[x]` 已完成 · `[ ]` 未做 · 🟡 部分/桩（旁注说明）。最近更新：2026-06-19（至提交 `b6a6875`）。

---

## 第 1 层 · CLIENT（sundynix-desktop）




- [x] React 19 + TypeScript + Tailwind 工业级 UI（🟡 自建 UI primitives，未用 shadcn —— 与架构图有偏差）
- [x] React Flow 编排画布 + JSON DSL 导出（含 branch 真/假边手柄）
- [x] Wails 本地 Go 运行时 + TS/Go 强绑定 + 本地文件 I/O（另存为 / 系统打开 / 系统通知）
- [x] 浏览器模式优雅降级（无 Wails 运行时也能跑）
- [x] ⌘K 命令面板
- [x] 运行·观测：节点级实时执行轨迹（SSE）
- [x] 顶栏依赖健康五盏灯
- [x] 知识库：入库可视化（解析→切块→向量化→抽取时间线）
- [x] 知识库：批量文件 / 文件夹入库 + 列表状态
- [x] 知识库：Obsidian 式文库（Markdown 阅读 + `[[双链]]` + 反链 + 笔记关系图）
- [x] 知识库：检索调试台 + 知识图谱（react-force-graph 力导向）
- [x] 报告：Markdown 实时预览 + 导出 Word / PDF / Markdown
- [ ] 🟡 PDF 导出走 webview 打印 —— **Wails 真机未验证**（浏览器预览 OK）

## 第 2 层 · BUSINESS GATEWAY（sundynix-gateway · Gin）

- [x] Gin 统一接入层 + CORS + 限流中间件
- [x] MainDB（PgSQL）：user / task / model / kb / doc / doc_link / agent
- [x] CacheDB（Redis）：会话 / 限流
- [x] Task DSL Parser & Assembly
- [x] 模型配置控制面（按 kind 经 NATS 下发给 dispatcher / mcp-go）
- [x] 独立运维控制台 sundynix-admin（模型 / 数据源页）
- [x] SSE 回流：Token 流 / 执行轨迹 / 入库进度
- [x] 可观测性：Prometheus /metrics（请求数/耗时/在途，路由模板低基数）· 结构化 JSON 访问日志 + X-Request-ID · /healthz(存活) + /readyz(就绪) 探针
- [x] Harness **输入**护栏（拦提示词注入 + 超大体，纯逻辑 `internal/guardrail` + 单测 + 实跑验证）
- [x] Harness **输出**护栏（dispatcher 发射层逐片脱敏疑似密钥/令牌 sk-/AKIA/JWT/Bearer + 轨迹标记 + 单测）
- [x] 计价配置（按模型·分输入/输出每1K单价+币种；admin 计价页 + /admin/pricing 端点 + sundynix_pricing 表）
- [ ] 🟡 计费/商业化：用量计量×单价折算 + 配额（计价配置已完成，计量待做）

## 第 3 层 · MESSAGE BUS（NATS 零拷贝骨干网）

- [x] 任务队列（JetStream，`sundynix.tasks.*`）
- [x] Token 流（core NATS，`sundynix.streams.<id>`）
- [x] 执行轨迹流（`sundynix.exec.<id>`）+ 入库进度流
- [x] 工具 request-reply（`sundynix.tools.go/py.*`）
- [x] 配置控制面（按 kind 请求模型配置 + 热更新广播）

## 第 4 层 · AI AGENT DISPATCHER（sundynix-dispatcher · Eino）

- [x] 按图执行引擎：拓扑 + 连线 + 分支剪枝（弃用线性拍平）
- [x] branch 真/假边标签精确选路（无标签退回边序，向后兼容）
- [x] map 真并行 fan-out（有界并发）+ aggregate 汇聚
- [x] render 节点（成稿 → docx）
- [x] LLM Pool：OpenAI 兼容流式（🟡 接 DeepSeek/百炼在线 API，非架构图的 vLLM/Ollama 集群）
- [x] 记忆召回（画像 + 历史注入）
- [x] 报告专用编排（规划 → 分章并行 → 汇聚 → 存源）
- [x] 会话历史写回
- [x] Harness 熔断降级中心（真三态状态机 Closed/Open/HalfOpen + 单测含 -race；熔断时回流提示并收尾流，不静默丢弃）
- [x] Harness LLM 自动化评测（规则检查 + LLM-as-judge，异步 off 热路径评分记录 + 单测）
- [x] 长期记忆 P1：异步攒批 Consolidate（每3轮1次 LLM 对账→ADD/UPDATE/DELETE/NOOP）+ 软删 + Profile 加 importance/last_seen（为 Generative Agents 打分铺路）；纯逻辑+store集成单测
- [x] 长期记忆 P2：读路径按 Score(Recency+Importance) 排序+衰减+截断top30（rank单测）；桌面端记忆面板可看/改/删(软删)；memory_list/delete 工具+端点；🟡 Relevance(Milvus)待P3

## 第 5 层 · MCP TOOLS

### sundynix-mcp-go（I/O 型）

- [x] MCP 协议网关（队列组通配订阅）
- [x] 混合检索：Bleve + Milvus + Neo4j（RRF 融合 + rerank）
- [x] kb_ingest / kb_search / kb_graph
- [x] memory_get / memory_upsert · history_get / history_append
- [x] report_render / report_store / report_export
- [x] Word 渲染（🟡 自建零依赖 OOXML，非 UniOffice —— 偏差，UniOffice 商业授权）
- [x] external_api（通用出站 HTTP：SSRF 防护 + 可选主机白名单 + 超时/限重定向/限体；含单测）

### sundynix-mcp-py（算法型）

- [ ] 🟡 parse_document（docx/pdf/xlsx 解析器在；MinerU / PaddleOCR 多模态为骨架）
- [x] 代码解释器（Docker 隔离真执行：禁网/非root(65534)/丢能力/只读根+tmpfs/限内存CPU进程/超时kill/一次性；无 Docker 优雅降级）
- [x] 安全沙箱 AST 静态守卫（拦危险导入/调用/逃逸属性，6 单测）+ 4 项隔离实跑验证（正常/非root/禁网/超时）；gVisor/Kata 作生产加固标注

## 跨层 / 工程

- [x] 存储扩展：文库列表/正文分离 + 双链 ID 索引 + 大文件正文存 MinIO
- [x] DB 规约全库统一：雪花字符串 id + created/updated + 软删（gateway 各表 + mcp-go Profile）
- [x] 文件主表，文档间关联用雪花 ID（弃用按名关联）
- [x] 后端首批单测（19 纯逻辑用例：引擎/DSL/docx/报告）+ mcp-go 集成测试（Profile 迁移）
- [x] **真实鉴权（JWT）闭环**：后端注册/登录/校验 + RequireAuth 保护路由 + owner=已验证 uid（去掉 header 兜底）；前端登录/注册门 + 存 token + Bearer + 401 自动登出 + 顶栏用户/登出。实跑验证（含 CORS Authorization 修复）
- [x] 生产安全硬化：JWT 默认密钥生产 fail-fast · /admin 加 RequireAdmin（ADMIN_USER_IDS 白名单）· CORS 来源可配（CORS_ALLOW_ORIGIN）
- [x] 后端集成测试：pool 抽成 LLM 接口，runGraph(分支/工具/map/脱敏)+handleReport 端到端假替身测试(含 -race)；🟡 前端测试仍无

---

## 未实现的大块（路线图）

- [x] **真实登录 / 鉴权（JWT）** —— 后端 + 前端闭环已完成 ✅
- [x] **代码解释器 + 安全沙箱**（AST 守卫 + Docker 隔离已落地 ✅；生产可换 gVisor/Kata）
- [x] **Harness 三件全完成** ✅：熔断降级 · 输入护栏 · LLM 评测 · 输出护栏（密钥脱敏）
- [x] **长期记忆抽取** ✅ + external_api ✅（记忆闭环全通）
- [ ] **计费 / 商业化**真实实现
- [ ] 微服务化拆分（Morph B）—— 现为 Monolith First，**按设计如此，非缺陷**

## 收尾小债

- [ ] push：本地 1 个提交待 push（b6a6875）；其余已 push
- [ ] PDF 导出 Wails 真机验证（不行则回退后端内嵌 CJK 字体出 PDF）
- [x] 报告生成并发健壮性（每次 LLM 调用 60s 超时上限，挂死自释放；规划/分章/撰写均套）
- [x] MinIO 孤儿 GC：重名覆盖后旧对象（转内联/换键）从 MinIO 删除（SaveDoc 返回旧键，runIngest 清理）
- [x] `make test` 目标（test-go / test-web / test-py 一键跑）

---

> 本地起服务顺序坑见 memory `local-run-gotchas`：**mcp-go 必须在 Milvus 之后起**，否则阻塞在 rag 初始化、不订阅工具，所有 mcp-go 工具 `no responders`。
