e63632adf5
Guardrail 中间件此前是空桩(直接 c.Next)。落地输入护栏: - 新增纯逻辑包 internal/guardrail:Inspect(body) 检测提示词注入(忽略既定指令/ 角色越权/诱导泄露提示词,中英文模式)+ 超大体(>256KB),与 HTTP 解耦便于单测; 敏感词黑名单留空可扩展。 - 中间件:仅对带 JSON 体的 POST/PUT 检查(文件上传 multipart 与 GET/SSE 跳过); 限读 + 命中拦截返回 422;未命中则还原请求体(io.NopCloser)供 handler 读取。 - 输出护栏不在网关做:Token 流是 SSE 实时流,网关缓冲会破坏流式 —— 标到路线图, 应在 dispatcher token 发射层做。 验证: - 单测:正常输入不误拦、中英文注入均拦、超大体拦、边界恰好放行。 - 实跑(nats+gateway):注入(中/英) → 422 带原因;干净输入 → 202 且 body 正确还原、 handler 正常发布到 NATS。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.8 KiB
5.8 KiB
sundynix-agentix · 进度清单
对照 architecture.md(5 层 + NATS 总线)与功能规划的完成度。活文档:完成一项就把 [ ] 勾成 [x]。
图例:[x] 已完成 · [ ] 未做 · 🟡 部分/桩(旁注说明)。最近更新:2026-06-17(至提交 79f9912)。
第 1 层 · CLIENT(sundynix-desktop)
- React 19 + TypeScript + Tailwind 工业级 UI(🟡 自建 UI primitives,未用 shadcn —— 与架构图有偏差)
- React Flow 编排画布 + JSON DSL 导出(含 branch 真/假边手柄)
- Wails 本地 Go 运行时 + TS/Go 强绑定 + 本地文件 I/O(另存为 / 系统打开 / 系统通知)
- 浏览器模式优雅降级(无 Wails 运行时也能跑)
- ⌘K 命令面板
- 运行·观测:节点级实时执行轨迹(SSE)
- 顶栏依赖健康五盏灯
- 知识库:入库可视化(解析→切块→向量化→抽取时间线)
- 知识库:批量文件 / 文件夹入库 + 列表状态
- 知识库:Obsidian 式文库(Markdown 阅读 +
[[双链]]+ 反链 + 笔记关系图) - 知识库:检索调试台 + 知识图谱(react-force-graph 力导向)
- 报告:Markdown 实时预览 + 导出 Word / PDF / Markdown
- 🟡 PDF 导出走 webview 打印 —— Wails 真机未验证(浏览器预览 OK)
第 2 层 · BUSINESS GATEWAY(sundynix-gateway · Gin)
- Gin 统一接入层 + CORS + 限流中间件
- MainDB(PgSQL):user / task / model / kb / doc / doc_link / agent
- CacheDB(Redis):会话 / 限流
- Task DSL Parser & Assembly
- 模型配置控制面(按 kind 经 NATS 下发给 dispatcher / mcp-go)
- 独立运维控制台 sundynix-admin(模型 / 数据源页)
- SSE 回流:Token 流 / 执行轨迹 / 入库进度
- Harness 输入护栏(拦提示词注入 + 超大体,纯逻辑
internal/guardrail+ 单测 + 实跑验证) - 🟡 Harness 输出护栏(应在 dispatcher token 发射层做,网关侧会破坏 SSE 流式 —— 见路线图)
- 🟡 商业化与计费模块(占位,仅统计任务数)
第 3 层 · MESSAGE BUS(NATS 零拷贝骨干网)
- 任务队列(JetStream,
sundynix.tasks.*) - Token 流(core NATS,
sundynix.streams.<id>) - 执行轨迹流(
sundynix.exec.<id>)+ 入库进度流 - 工具 request-reply(
sundynix.tools.go/py.*) - 配置控制面(按 kind 请求模型配置 + 热更新广播)
第 4 层 · AI AGENT DISPATCHER(sundynix-dispatcher · Eino)
- 按图执行引擎:拓扑 + 连线 + 分支剪枝(弃用线性拍平)
- branch 真/假边标签精确选路(无标签退回边序,向后兼容)
- map 真并行 fan-out(有界并发)+ aggregate 汇聚
- render 节点(成稿 → docx)
- LLM Pool:OpenAI 兼容流式(🟡 接 DeepSeek/百炼在线 API,非架构图的 vLLM/Ollama 集群)
- 记忆召回(画像 + 历史注入)
- 报告专用编排(规划 → 分章并行 → 汇聚 → 存源)
- 会话历史写回
- Harness 熔断降级中心(真三态状态机 Closed/Open/HalfOpen + 单测含 -race;熔断时回流提示并收尾流,不静默丢弃)
- Harness LLM 自动化评测(桩)
- 长期偏好记忆抽取(LLM 抽取 → 去重 → memory_upsert,TODO)
第 5 层 · MCP TOOLS
sundynix-mcp-go(I/O 型)
- MCP 协议网关(队列组通配订阅)
- 混合检索:Bleve + Milvus + Neo4j(RRF 融合 + rerank)
- kb_ingest / kb_search / kb_graph
- memory_get / memory_upsert · history_get / history_append
- report_render / report_store / report_export
- Word 渲染(🟡 自建零依赖 OOXML,非 UniOffice —— 偏差,UniOffice 商业授权)
- external_api(外部 API 工具)
sundynix-mcp-py(算法型)
- 🟡 parse_document(docx/pdf/xlsx 解析器在;MinerU / PaddleOCR 多模态为骨架)
- 代码解释器(docker 隔离执行,TODO)
- 安全沙箱(gVisor / KataVM 强隔离 + AST 静态守卫,全为 TODO 桩)
跨层 / 工程
- 存储扩展:文库列表/正文分离 + 双链 ID 索引 + 大文件正文存 MinIO
- DB 规约全库统一:雪花字符串 id + created/updated + 软删(gateway 各表 + mcp-go Profile)
- 文件主表,文档间关联用雪花 ID(弃用按名关联)
- 后端首批单测(19 纯逻辑用例:引擎/DSL/docx/报告)+ mcp-go 集成测试(Profile 迁移)
- 🟡 owner 隔离靠
X-User-ID头 —— 可用但可伪造,无真实鉴权 - 集成/前端测试(
runGraph/handleReport需 mock pool/tools/sink;前端无测试)
未实现的大块(路线图)
- 真实登录 / 鉴权 / 会话(替掉裸
X-User-ID,最影响"能否交付他人用") - 代码解释器 + 安全沙箱(mcp-py 核心能力,目前全桩)
- Harness 余下:输出护栏(dispatcher token 发射层)· LLM 自动化评测(熔断降级 ✅、输入护栏 ✅ 已完成)
- 长期记忆抽取 + external_api 工具
- 计费 / 商业化真实实现
- 微服务化拆分(Morph B)—— 现为 Monolith First,按设计如此,非缺陷
收尾小债
- 6 个提交待 push(
5d76652→79f9912,需在普通终端git push origin main) - PDF 导出 Wails 真机验证(不行则回退后端内嵌 CJK 字体出 PDF)
- 报告生成并发健壮性(writeSections 降并发 / 加单次超时,治偶发卡顿)
- MinIO 大文档改名/删除的孤儿对象 GC
make test目标(一键跑全后端测试)
本地起服务顺序坑见 memory
local-run-gotchas:mcp-go 必须在 Milvus 之后起,否则阻塞在 rag 初始化、不订阅工具,所有 mcp-go 工具no responders。