7c67256f87
CI / Go · build + vet + test (pull_request) Failing after 30m3s
CI / Frontend · tsc (sundynix-admin) (pull_request) Failing after 9m42s
CI / Frontend · tsc (sundynix-desktop/frontend) (pull_request) Failing after 16m53s
CI / Frontend · tsc (sundynix-web) (pull_request) Has been cancelled
CI / mcp-py · sandbox guard (pull_request) Has been cancelled
SaaS P3 收口第二刀(设计见 SAAS_DESIGN.md §8)。第三个产品面:desktop=用户 工作产品、admin=平台超管控制塔、web=租户客户的自助柜台——做「装桌面端之前 就要能用」的那些事,三者不合并。 - 骨架抄 admin(HashRouter+路由注册表+me()/sdx:logout 鉴权门+vite/vitest 单文件配置);UI 整目录搬 desktop 的 ui/ 组件+ink/brand 主题 token(亮暗 双主题),品牌观感与桌面端一致;api.ts 抄 desktop 的 auth/tenant/usage 段 (纯 fetch 零 Wails 依赖),成员管理/建组织打新的租户自助接口。 - 页面:登录注册(一页两态)/概览(组织+角色+余额+桌面端下载指引)/团队(名册+ 邀请+改角色+移除,写控件按角色显隐、真闸在后端)/组织(列表+自助新建+切换)/ 用量与账单(余额 hero+趋势+合计+最近消耗,数据全来自现成 /me/usage;充值 只放说明占位,支付 P5 再接,不做假入口)。 - 工程:vite :5175、launch.json 配置、make webface、ci.yml web 矩阵纳入。 - 测试:tsc 干净;vitest 3 例(fmtCredits 去尾零——测试先行抓出 1.50 毛刺; ASSIGNABLE_ROLES 不含 owner)。浏览器 live 全流程:甲(owner)登录→概览→ 团队邀请乙→乙(member)登录写控件全隐藏、名册只读,组织/用量页真数据渲染。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
106 lines
5.5 KiB
Markdown
106 lines
5.5 KiB
Markdown
# sundynix-agentix
|
||
|
||
分层式 AI Agent 平台 — **Monolith First → Microservices (Morph B)**。
|
||
架构总览见 [architecture.md](architecture.md) / [architecture.png](architecture.png)。
|
||
|
||
## 仓库结构(Monorepo)
|
||
|
||
| 目录 | 层 | 语言 / 技术栈 | 职责 |
|
||
|---|---|---|---|
|
||
| [`sundynix-desktop/`](sundynix-desktop) | 1 · Client | Wails + React 19 + TS + shadcn/ui | 桌面端、React Flow Agent 编排、导出 JSON DSL、LLM Wiki 面板 |
|
||
| [`sundynix-gateway/`](sundynix-gateway) | 2 · Gateway | Go · Gin | 统一接入、DSL 解析组装、计费、Guardrail、PgSQL + Redis |
|
||
| [`deploy/nats/`](deploy/nats) | 3 · Message Bus | NATS (Go) | 零拷贝骨干网:Queue + Stream |
|
||
| [`sundynix-dispatcher/`](sundynix-dispatcher) | 4 · Dispatcher | Go · Eino | 图编排、LLM Pool 调度、自动化评测、熔断降级 |
|
||
| [`sundynix-mcp-go/`](sundynix-mcp-go) | 5a · MCP Tools (I/O) | Go | MCP 网关、Wiki 混合检索(Bleve/Milvus/Neo4j)、UniOffice、外部 API |
|
||
| [`sundynix-mcp-py/`](sundynix-mcp-py) | 5b · MCP Tools (算法) | Python | MCP 网关、安全沙箱(gVisor/KataVM)、MinerU(PaddleOCR)、Docker 解释器 |
|
||
| [`sundynix-shared/`](sundynix-shared) | 共享契约 | Go | Task 数据契约、NATS subject 约定、JetStream 收发逻辑(bus)、内嵌 NATS(devnats) |
|
||
|
||
## 核心数据流
|
||
|
||
1. `Gateway` 解析 DSL → **Publish** `sundynix.tasks.*` (NATS Queue)
|
||
2. `Dispatcher` 订阅任务 → `Eino` 图编排 → 调用 `LLM Pool`
|
||
3. 经 NATS **request-reply** 同步调用第 5 层 `MCP Tools`(`sundynix.tools.go.*` 队列组负载均衡,工具不可用即降级)
|
||
4. 结果以零拷贝 Token Stream 经 `sundynix.streams.task_id` 回流 → SSE/WS 推给 `Client`
|
||
|
||
## 快速开始
|
||
|
||
### 生产 / 独立部署 — 一条命令拉起整套(应用 + 基建)
|
||
|
||
```bash
|
||
cp .env.example .env # 按提示填密钥(openssl rand -base64 32)
|
||
docker compose -f docker-compose.prod.yml up -d --build
|
||
# 控制台 http://<IP>:80 | 网关 http://<IP>:8080 | 链路 UI http://<IP>:16686
|
||
```
|
||
|
||
应用全部容器化(gateway / dispatcher / mcp-go / mcp-py / admin-nginx),经服务名互连,
|
||
基建端口不对外;模型 API key 部署后在控制台配(加密存库)。详见 **[DEPLOY.md](DEPLOY.md)**、
|
||
备份恢复见 `scripts/backup.sh`。
|
||
|
||
### 无 Docker — 一键验证任务流(推荐先跑这个)
|
||
|
||
```bash
|
||
make demo # 内嵌NATS + Gateway + Dispatcher + MCP-Go,提交 DSL 任务,看任务流+工具调用+Token流闭环
|
||
make e2e # 仅跑共享 bus 的端到端测试(go test,内嵌 NATS):任务流 / 工具调用 / Token 流
|
||
```
|
||
|
||
`make demo` 实测输出:
|
||
```
|
||
Gateway: POST /api/v1/tasks → task_xxx → published (seq=1)
|
||
Dispatcher: [eino] task_xxx received → streaming tokens...
|
||
SSE 客户端: event:token data:已 event:token data:编 ... event:done ← 流式闭环打通
|
||
```
|
||
完整链路:HTTP POST → DSL 解析 → NATS 任务队列 → Dispatcher 消费 → LLM 流式推理
|
||
→ Token 经 `sundynix.streams.<id>` 回流 → Gateway SSE → 客户端逐 token 收到。
|
||
|
||
### 完整环境(git clone 后零配置直跑)
|
||
|
||
**前置**:Docker、Go ≥1.24、Node ≥20、Python ≥3.11。
|
||
跑**真实桌面端**还需:Wails v3 CLI(`go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha2.117`,版本须与 `sundynix-desktop/go.mod` 一致);macOS 再装 Xcode 命令行工具(`xcode-select --install`,webkit 编译用)。
|
||
|
||
> 各服务默认配置已对齐 docker-compose(NATS:4222 / PG sundynix\@5432 / Redis:6379 /
|
||
> Milvus:19530 / Neo4j neo4j-sundynix\@7687),**clone 后无需改任何配置**即可连上。
|
||
|
||
```bash
|
||
make infra # 1) 启动 NATS / Postgres / Redis / Milvus / Neo4j (docker-compose)
|
||
make gateway # 2) 各开一个终端运行后端
|
||
make dispatcher
|
||
make mcp-go
|
||
make mcp-py # 首次自动建 venv + 装解析依赖
|
||
make admin # 3) 运维控制台 (Vite :5174)
|
||
make webface # 3b) 薄 Web 面:租户自助注册/组织/团队/账单 (Vite :5175)
|
||
```
|
||
|
||
4) 打开运维控制台(`:5174`),在「模型 / 数据源」登记并激活:**对话模型(chat)** 与 **Embedding 模型**
|
||
(开发期填第三方在线 API:base_url + api_key + model,OpenAI 兼容)。激活后经 NATS 热更新到各服务。
|
||
— 这是唯一需要自己填的配置(API key),其余零配置。
|
||
|
||
5) 启动客户端(任选其一):
|
||
|
||
```bash
|
||
make desktop # ★ 真实桌面端:Wails 原生窗口(热重载)——独立 App,非浏览器
|
||
# 或
|
||
make web # 浏览器预览版(Vite :5173,前端代码同上)
|
||
```
|
||
|
||
打包桌面端为可双击的原生应用:
|
||
|
||
```bash
|
||
make desktop-build # → sundynix-desktop/build/bin/sundynix_desktop.app
|
||
```
|
||
|
||
完成后即可:编排 Agent 图 → 运行(注入画像/历史,真实流式);知识库入库(docx/xlsx/pdf) →
|
||
三路混合检索(向量+全文+图谱);**报告生成**(「报告」页输入主题 → 规划大纲 → 各章并行检索+撰写 →
|
||
渲染真实 Word(.docx) → 一键下载)。桌面端是客户端,经 HTTP 连 Gateway:8080,需先起后端。
|
||
|
||
> 后端 4 模块用根 `go.work` 串联;`sundynix-shared` 经各 go.mod `replace` 指向本地。
|
||
> 桌面端是自包含模块,`make desktop`/`desktop-build` 用 `GOWORK=off` 独立构建(不入 go.work)。
|
||
|
||
## NATS Subject 约定
|
||
|
||
| Subject | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `sundynix.tasks.*` | Queue | 分布式任务队列 |
|
||
| `sundynix.streams.<task_id>` | Stream | 零拷贝 Token 字节管道 |
|
||
| `sundynix.tools.go.*` | Queue | Go MCP 工具调用 |
|
||
| `sundynix.tools.py.*` | Queue | Python MCP 工具调用 |
|