Files
sundynix-agentix/README.md
Blizzard 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
feat(web): 薄 Web 面 sundynix-web —— 注册/组织/团队/账单自助入口
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>
2026-07-16 17:47:23 +08:00

106 lines
5.5 KiB
Markdown
Raw Permalink 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
分层式 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-composeNATS: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 模型**
(开发期填第三方在线 APIbase_url + api_key + modelOpenAI 兼容)。激活后经 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 工具调用 |