feat: 初始化 sundynix-agentix 分层式 AI Agent 平台脚手架

5 层 + 1 条 NATS 零拷贝消息总线的 monorepo(Monolith First → Microservices Morph B)。
纵向主干(任务流 + Token 流回流)已真实跑通,横向各层能力为带注释的桩。

已贯通(real code):
- sundynix-shared: 共享契约 + JetStream/core NATS 真实收发(bus) + 内嵌 NATS(devnats) + e2e 测试
- sundynix-gateway: Gin 接入 + DSL 解析组装 + NATS Publish + SSE 流式输出
- sundynix-dispatcher: NATS 消费 + Eino Orchestrator 流式回流 + 熔断器 + LLM Pool 占位流式
- 链路: HTTP POST → DSL → sundynix.tasks.* → Dispatcher → Token 经 sundynix.streams.<id> 回流 → SSE
- 基础设施: docker-compose(nats/postgres/redis/neo4j/milvus) + Makefile(make demo/e2e)

待填(桩):
- Eino 图编排 compose.NewGraph、LLM Pool 接 vLLM/Ollama
- Gateway store 换真实 pgx/redis
- sundynix-mcp-go: Bleve+Milvus+Neo4j 混合检索 / UniOffice / 外部 API
- sundynix-mcp-py: gVisor 沙箱 / MinerU(PaddleOCR) / Docker 解释器
- sundynix-desktop: React Flow 画布 → DSL 导出 → SSE 展示
This commit is contained in:
Blizzard
2026-06-10 11:00:29 +08:00
commit c7a02c3905
74 changed files with 2570 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
// Command server 启动 sundynix-mcp-go —— 第 5 层 Go I/O 型 MCP 工具微服务。
package main
import (
"log"
"github.com/sundynix/sundynix-mcp-go/internal/mcp"
"github.com/sundynix/sundynix-mcp-go/internal/search"
)
func main() {
engine := search.NewHybrid() // LLM Wiki 混合检索:Bleve + Milvus + Neo4j
gw := mcp.NewGateway(engine)
log.Println("[mcp_go] serving MCP over sundynix.tools.go.*")
if err := gw.Serve(); err != nil {
log.Fatalf("[mcp_go] exit: %v", err)
}
}
+15
View File
@@ -0,0 +1,15 @@
nats:
url: "nats://localhost:4222"
tool_subject: "sundynix.tools.go.*"
bleve:
index_path: "./data/wiki.bleve"
milvus:
addr: "localhost:19530"
collection: "wiki"
neo4j:
uri: "bolt://localhost:7687"
user: "neo4j"
password: "sundynix"
+10
View File
@@ -0,0 +1,10 @@
module github.com/sundynix/sundynix-mcp-go
go 1.23
require (
github.com/blevesearch/bleve/v2 v2.4.2
github.com/milvus-io/milvus-sdk-go/v2 v2.4.1
github.com/neo4j/neo4j-go-driver/v5 v5.24.0
github.com/nats-io/nats.go v1.37.0
)
+4
View File
@@ -0,0 +1,4 @@
github.com/blevesearch/bleve/v2 v2.4.2/go.mod h1:ATNKj7Yl2oJv/lGuF4kx39bST2dveX6w0th2FFYLkc8=
github.com/nats-io/nats.go v1.37.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
github.com/neo4j/neo4j-go-driver/v5 v5.24.0/go.mod h1:Vff8OwT7QpLm7L2yYr85XNWe9Rbqlbeb9asNXJTHO4k=
github.com/qdrant/go-client v1.11.0/go.mod h1:j+OVRsJIZhOSRK2toPl8tTBOhwr4AxXCz9RACzv0JB4=
+15
View File
@@ -0,0 +1,15 @@
// Package external 封装对第三方外部 API 的统一调用(鉴权、重试、限流)。
package external
import "context"
// Client 是外部 API 的统一出口。
type Client struct{}
func NewClient() *Client { return &Client{} }
// Call 调用某个外部 API。
func (c *Client) Call(ctx context.Context, name string, args map[string]any) (any, error) {
// TODO: 路由到具体 provider,统一鉴权/重试/限流/审计
return nil, nil
}
+18
View File
@@ -0,0 +1,18 @@
// Package mcp 实现 MCP 协议网关,把工具注册到 NATS 并响应调用。
package mcp
import "github.com/sundynix/sundynix-mcp-go/internal/search"
// Gateway 暴露 MCP 协议端点(stdio / HTTP / NATS)。
type Gateway struct {
search *search.Hybrid
}
func NewGateway(s *search.Hybrid) *Gateway { return &Gateway{search: s} }
// Serve 监听 sundynix.tools.go.* 并按 MCP 协议分发工具调用。
func (g *Gateway) Serve() error {
// TODO: 注册工具清单 (wiki_search / render_doc / call_external_api ...)
// 订阅 NATS,按 MCP JSON-RPC 解析并路由
select {}
}
@@ -0,0 +1,15 @@
// Package office 基于 UniOffice 提供 Word/文档渲染能力。
package office
import "context"
// Renderer 把结构化数据渲染为 docx/xlsx 等文档。
type Renderer struct{}
func NewRenderer() *Renderer { return &Renderer{} }
// RenderDocx 生成 Word 文档并返回字节流。
func (r *Renderer) RenderDocx(ctx context.Context, payload map[string]any) ([]byte, error) {
// TODO: 使用 unioffice/document 构建并序列化
return nil, nil
}
+30
View File
@@ -0,0 +1,30 @@
// Package search 实现 LLM Wiki 混合检索引擎。
// Hybrid Search = Bleve(全文/BM25) + Milvus(向量) + Neo4j(知识图谱) 融合排序。
package search
import "context"
// Hybrid 聚合三路检索后端并做 RRF/加权融合。
type Hybrid struct {
// bleve *bleve.Index // Go 全文检索
// milvus client.Client // Vector DB (Milvus Go SDK)
// neo4j neo4j.DriverWithContext // Knowledge Graph
}
func NewHybrid() *Hybrid {
// TODO: 打开 bleve 索引;连接 Milvus;连接 Neo4j
return &Hybrid{}
}
// Result 是融合后的检索结果。
type Result struct {
ID string
Score float64
Text string
}
// Query 并行查询三路后端并融合排序。
func (h *Hybrid) Query(ctx context.Context, q string, topK int) ([]Result, error) {
// TODO: 并发 bleve.Search + milvus.Search + neo4j Cypher,做 RRF 融合
return nil, nil
}