docs: 订正 project_analysis.md(经源码核实 + 跟进最新进度)

修 5 处事实硬伤(原分析靠文件名/印象、且写于近期改动之前):
- 桌面端 UI:shadcn/ui → 自建 UI 原语(src/ui)
- Word 渲染:UniOffice → 自建零依赖 OOXML(unioffice.go 注释明确不用商业库)
- CORS:「未见配置」→ 实有 cors() + CORS_ALLOW_ORIGIN
- 限流:「实现程度不明」→ 实有 Redis 滑动窗口按 IP 限流
- CI/CD:「无」→ 已加 ci.yml + release.yml
另:安全沙箱被误判为「桩」→ 实已可用(run_code 已接入自主 agent)。

补录近期新增功能:Token 流可回放+断点续传(Redis Stream)、
GitHub Releases 分发 + 桌面端自动检查更新。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-06-24 09:31:06 +08:00
parent 9f2a059ce2
commit 56eee90705
+11 -9
View File
@@ -11,12 +11,12 @@
| 层级 | 模块 | 语言/框架 | 核心依赖 |
|---|---|---|---|
| **1. 客户端** | `sundynix-desktop` | Wails + React 19 + TypeScript | @xyflow/react (React Flow), shadcn/ui, TailwindCSS 3, lucide-react, react-force-graph-2d, Vite 5 |
| **1. 客户端** | `sundynix-desktop` | Wails + React 19 + TypeScript | @xyflow/react (React Flow), 自建 UI 原语(`src/ui`,非 shadcn), TailwindCSS 3, lucide-react, react-force-graph-2d, Vite 5 |
| **1b. 运维控制台** | `sundynix-admin` | React 19 + TS + Vite | react-router-dom 7, TailwindCSS |
| **2. 网关** | `sundynix-gateway` | Go · Gin | GORM + PostgreSQL 16, Redis 7, NATS JetStream, 雪花 ID, bcrypt 鉴权 |
| **3. 消息总线** | NATS Server | Go | NATS 2 (Alpine), JetStream 持久化 |
| **4. 调度器** | `sundynix-dispatcher` | Go · CloudWeGo Eino | eino (图编排/ReAct Agent), nats.go, 熔断器, LLM 自动化评测 |
| **5a. MCP 工具 (I/O)** | `sundynix-mcp-go` | Go | Milvus SDK, Bleve, Neo4j Driver, UniOffice (.docx), Snowflake ID, GORM |
| **5a. MCP 工具 (I/O)** | `sundynix-mcp-go` | Go | Milvus SDK, Bleve, Neo4j Driver, 自建零依赖 OOXML(.docx,刻意不用商业授权的 UniOffice), Snowflake ID, GORM |
| **5b. MCP 工具 (算法)** | `sundynix-mcp-py` | Python ≥3.11 | nats-py, python-docx, openpyxl, pypdf, docker (沙箱) |
| **共享层** | `sundynix-shared` | Go | nats.go, JetStream, 内嵌 NATS (devnats) |
| **基础设施** | Docker Compose | - | NATS, PostgreSQL 16, Redis 7, Milvus 2.4, Neo4j 5, MinIO |
@@ -53,7 +53,7 @@
### 3.3 报告生成
- **多步编排**:规划大纲 → 各章节并行(有界并发=4)→ RAG 检索 + LLM 撰写 → 汇聚渲染
- **Word 渲染**UniOffice 渲染 .docx 文档,一键下载
- **Word 渲染**自建零依赖 OOXML 渲染 .docx 文档(不引第三方 Office 库),一键下载
- **流式进度**:规划/撰写进度实时流回客户端
- **报告源持久化**title + sections 持久存储,支持导出 Word/PDF/Markdown
@@ -70,6 +70,7 @@
- **ExecEvent 轨迹**:每个节点的生命周期事件(start/end/error/info+ 耗时
- **双流并行**Token 流 (`sundynix.streams.<id>`) + 执行事件流 (`sundynix.exec.<id>`) 分离
- **实时节点点亮**:前端 SSE 订阅轨迹,逐节点展示执行状态
- **Token 流可回放 + 断点续传**:网关把 Token 流落 Redis StreamSSE 带 `Last-Event-ID`,连晚/刷新/网络抖动重连均不丢 token(Redis 降级时回退 live NATS
### 3.6 安全与工程化护栏
- **熔断降级** (`CircuitBreaker`):连续失败触发熔断,快速拒绝新任务 + 友好提示
@@ -87,6 +88,7 @@
- **Wails 原生应用**macOS/Windows/Linux 跨平台桌面端
- **Go/TS 强绑定**:前端调用 Go 后端(本地文件 I/O 等)
- **命令面板**:⌘K / Ctrl+K 全局命令面板(键盘优先工作站)
- **GitHub Releases 分发 + 自动检查更新**:打 `vX.Y.Z` 标签经 release workflow 自动构建 mac/win 安装包发布到 Releases;桌面端启动查 `releases/latest`,有新版弹横幅引导下载
---
@@ -173,15 +175,15 @@
| 问题 | 现状 | 建议 |
|---|---|---|
| **API Key 明文传输/存储** | ModelConfig 中 `api_key` 明文存 PG、经 NATS 广播 | API Key 加密存储(AES-256),NATS 传输走 TLS |
| **CORS 配置** | 未见显式 CORS 配置 | 生产环境需严格限制允许源 |
| **Rate Limiting** | Redis 存 session/rate limit 但实现程度不明 | 确保关键 API(登录/任务提交)有完善的速率限制 |
| **CORS 收紧** | 已有显式 `cors()` + `CORS_ALLOW_ORIGIN`(缺省 `*` 仅供开发) | 生产环境把 `CORS_ALLOW_ORIGIN` 设为具体源 |
| **Rate Limiting** | 已实现:Redis 滑动窗口、按客户端 IP 每分钟限流(`middleware.RateLimit` + `store.Allow`) | 可对登录/任务提交等关键 API 单独配更严阈值 |
| **依赖安全审计** | 无 dependabot / 漏洞扫描 | 启用 GitHub Dependabot + `go vet` / `govulncheck` CI |
### 6.5 运维与部署
| 问题 | 现状 | 建议 |
|---|---|---|
| **CI/CD 流水线** | `.github/` 目录存在但未见完整 workflow | 配置 GitHub Actionslint → test → build → deploy |
| **CI/CD(部分完成)** | ✅ 已加 `ci.yml`go build+vet+test / 前端 tsc / mcp-py 守卫)+ `release.yml`tag 触发构建发布到 GitHub Releases | 后续补:自动部署、govulncheck/Dependabot 安全扫描 |
| **无 Kubernetes 部署** | 仅 docker-compose(开发环境) | 补充 Helm Chart 或 Kustomize,面向生产集群 |
| **健康检查不统一** | dispatcher 走 NATS ping,其它走 HTTP | 统一为 Kubernetes 标准的 liveness/readiness probe |
| **无数据备份策略** | PG/Milvus/Neo4j 数据卷无备份配置 | 配置 pg_dump 定时备份 + 对象存储归档 |
@@ -197,7 +199,7 @@
| **Wails** | ⭐⭐⭐⭐ | Go+WebView 跨平台桌面端,避免 Electron 臃肿;但 WebView 兼容性不如 Electron |
| **Milvus + Bleve + Neo4j** | ⭐⭐⭐⭐ | 三路 RAG 架构领先;但三套存储的运维复杂度高 |
| **React Flow** | ⭐⭐⭐⭐⭐ | 低代码编排标配,生态成熟,@xyflow/react v12 性能好 |
| **Python MCP 层** | ⭐⭐⭐ | 算法型工具用 Python 合理;但 MCP/MinerU 仍为桩,实际价值待兑现 |
| **Python MCP 层** | ⭐⭐⭐ | 算法型工具用 Python 合理;代码沙箱已可用,但 MinerU 多模态解析仍为桩 |
---
@@ -229,7 +231,7 @@
**主要风险**在于:
1. 基础设施复杂度高(6 个存储组件),运维压力大
2. 前端缺少测试和路由,随功能增长技术债务会快速累积
3. Python MCP 层实现深度不足,核心差异化功能(MinerU OCR、安全沙箱)仍为桩
4. 缺少 CI/CD、链路追踪、集中配置等生产级工程化基础设施
3. Python MCP 层较薄:MinerU/PaddleOCR 多模态解析仍为桩(代码执行沙箱已实现可用,run_code 已接入自主 agent
4. 链路追踪、集中配置、k8s 部署、API Key 加密等生产级工程化设施待补(CI/CD 已具备)
**项目成熟度**:处于 **高完成度 MVP** 阶段,核心数据流和关键功能闭环已通,具备向生产环境演进的基础。