Files
sundynix-agentix/PROGRESS.md
T
Blizzard b6a6875795 feat(gateway): 可观测性 —— Prometheus 指标 + 结构化日志 + 探针
往"生产可运维"推一步(网关前门):
- Prometheus /metrics:sundynix_http_requests_total{method,route,status}、
  request_duration_seconds 直方图、requests_in_flight。route 用 c.FullPath()
  路由模板(/tasks/:id/...)避免按真实路径高基数。
- 结构化访问日志:slog JSON 到 stderr(request_id/method/route/status/latency_ms/
  ip/uid/bytes),替代 gin 默认文本日志;gin.New()+Recovery 自管中间件链。
- RequestID 中间件:生成/透传 X-Request-ID,写上下文+响应头,供日志关联。
- 探针:/healthz(liveness,不查依赖)、/readyz(readiness,DB+Redis 就绪才 200,
  否则 503),供 k8s 等导流判断;/api/v1/health 深度聚合保留。
- 三个根端点不挂业务鉴权(/metrics 生产应由网络层限制抓取来源)。

验证:单测(计数 +1 / X-Request-ID 生成与透传);实跑 /healthz 200、/readyz 200
(db,redis ready)、/metrics 输出真实指标、访问日志 JSON 正常、X-Request-ID 回写。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 10:38:31 +08:00

111 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sundynix-agentix · 进度清单
对照 [architecture.md](architecture.md)(5 层 + NATS 总线)与功能规划的完成度。**活文档:完成一项就把 `[ ]` 勾成 `[x]`。**
图例:`[x]` 已完成 · `[ ]` 未做 · 🟡 部分/桩(旁注说明)。最近更新:2026-06-17(至提交 `79f9912`)。
---
## 第 1 层 · CLIENTsundynix-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 GATEWAYsundynix-gateway · Gin
- [x] Gin 统一接入层 + CORS + 限流中间件
- [x] MainDBPgSQL):user / task / model / kb / doc / doc_link / agent
- [x] CacheDBRedis):会话 / 限流
- [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 + 轨迹标记 + 单测)
- [ ] 🟡 商业化与计费模块(占位,仅统计任务数)
## 第 3 层 · MESSAGE BUSNATS 零拷贝骨干网)
- [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 DISPATCHERsundynix-dispatcher · Eino
- [x] 按图执行引擎:拓扑 + 连线 + 分支剪枝(弃用线性拍平)
- [x] branch 真/假边标签精确选路(无标签退回边序,向后兼容)
- [x] map 真并行 fan-out(有界并发)+ aggregate 汇聚
- [x] render 节点(成稿 → docx
- [x] LLM PoolOpenAI 兼容流式(🟡 接 DeepSeek/百炼在线 API,非架构图的 vLLM/Ollama 集群)
- [x] 记忆召回(画像 + 历史注入)
- [x] 报告专用编排(规划 → 分章并行 → 汇聚 → 存源)
- [x] 会话历史写回
- [x] Harness 熔断降级中心(真三态状态机 Closed/Open/HalfOpen + 单测含 -race;熔断时回流提示并收尾流,不静默丢弃)
- [x] Harness LLM 自动化评测(规则检查 + LLM-as-judge,异步 off 热路径评分记录 + 单测)
- [ ] 长期偏好记忆抽取(LLM 抽取 → 去重 → memory_upsertTODO
## 第 5 层 · MCP TOOLS
### sundynix-mcp-goI/O 型)
- [x] MCP 协议网关(队列组通配订阅)
- [x] 混合检索:Bleve + Milvus + Neo4jRRF 融合 + 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(通用出站 HTTPSSRF 防护 + 可选主机白名单 + 超时/限重定向/限体;含单测)
### sundynix-mcp-py(算法型)
- [ ] 🟡 parse_documentdocx/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 加 RequireAdminADMIN_USER_IDS 白名单)· CORS 来源可配(CORS_ALLOW_ORIGIN
- [ ] 集成/前端测试(`runGraph` / `handleReport` 需 mock pool/tools/sink;前端无测试)
---
## 未实现的大块(路线图)
- [x] **真实登录 / 鉴权(JWT** —— 后端 + 前端闭环已完成 ✅
- [x] **代码解释器 + 安全沙箱**AST 守卫 + Docker 隔离已落地 ✅;生产可换 gVisor/Kata
- [x] **Harness 三件全完成** ✅:熔断降级 · 输入护栏 · LLM 评测 · 输出护栏(密钥脱敏)
- [ ] **长期记忆抽取**external_api 工具已完成 ✅)
- [ ] **计费 / 商业化**真实实现
- [ ] 微服务化拆分(Morph B)—— 现为 Monolith First**按设计如此,非缺陷**
## 收尾小债
- [ ] 6 个提交待 push`5d76652``79f9912`,需在普通终端 `git push origin main`
- [ ] 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`。