|
# 原生 Agent 构建与å‘布
本文是 Go / Rust / C++ 原生 StarAgent çš„**统一构建与å‘布说明**,包括产å“ç¼–ç 约定ã€è¾“å‡ºç›®å½•ã€æ”¯æŒå¹³å°å’Œå‡çº§åŒ…匹é…规则。
## 1. 产å“ç¼–ç (ProductCode)
æ¯ç§å®žçŽ°ä½¿ç”¨ç‹¬ç«‹çš„ `ProductCode`,ä¸è¦å…±ç”¨æ ‡å‡† .NET Agent çš„ `StarAgent`:
| 实现 | ProductCode | å‡çº§åŒ… `TargetRuntime` |
|------|-------------|------------------------|
| .NET StarAgent | `StarAgent` | `6` / `7` / `8` / `9` / `10` ç‰ |
| Go 原生 Agent | `StarAgent-Go` | `go` |
| Rust 原生 Agent | `StarAgent-Rust` | `rust` |
| C++ 原生 Agent | `StarAgent-Cpp` | `cpp` |
| 移动端 .NET Agent | `StarAgent-Mobile` | —(ä¸èµ°è‡ªå‡çº§ï¼‰ |
**ä¸å»ºè®®æŠŠå¹³å°å†™è¿› ProductCode**(例如 `StarAgent-Go-Linux-Amd64`):
- æœåŠ¡ç«¯ç™»å½•æ—¶ä¼šæ ¡éªŒèŠ‚ç‚¹åŽŸæœ‰ `ProductCode` 与新登录值一致,ProductCode å˜åŒ–会导致è€èŠ‚ç‚¹è¢«åˆ¤å®šä¸ºâ€œäº§å“ç¼–ç ä¸ç¬¦â€ã€‚
- `ProductRelease` 按 `ProductCode` ç²¾ç¡®è¿‡æ»¤ï¼›å¹³å°æ‹†åˆ†åŽæ¯ä¸ªå¹³å°éƒ½è¦ç»´æŠ¤ç‹¬ç«‹ç‰ˆæœ¬è®°å½•。
- å¹³å°å·®å¼‚å·²ç»ç”± `Node.OSKind` / `Node.Architecture` 与 `ProductPackage.OSKind` / `ProductPackage.Architecture` 表达,å‡çº§æ—¶å…ˆæŒ‰äº§å“ç¼–ç éš”ç¦»ï¼Œå†æŒ‰å¹³å°é€‰æ‹©å®‰è£…包。
å› æ¤ï¼š**ProductCode 区分实现,平å°å—段区分平å°ã€‚**
## 2. 输出目录
æž„å»ºè„šæœ¬é»˜è®¤è¾“å‡ºåˆ°ä»“åº“æ ¹ç›®å½•ï¼š
```text
Bin/Agent/native/
├── BUILD-INFO.md # 本次构建清å•(大å°ã€SHA256ã€è·³è¿‡é¡¹ï¼‰
├── go/
│ ├── linux-amd64/staragent
│ ├── linux-arm64/staragent
│ ├── linux-armv7/staragent
│ ├── windows-amd64/staragent.exe
│ ├── windows-arm64/staragent.exe
│ ├── darwin-amd64/staragent
│ └── darwin-arm64/staragent
├── rust/
│ └── windows-amd64/staragent.exe # æœ¬æœºå·¥å…·é“¾å¯æž„å»ºçš„ç›®æ ‡
└── cpp/
└── windows-amd64/staragent.exe # æœ¬æœºå·¥å…·é“¾å¯æž„å»ºçš„ç›®æ ‡
```
`Bin/` 已被 `.gitignore` 忽略,构建产物ä¸ä¼šè¿›å…¥æºç æäº¤ã€‚æ¯æ¬¡è¿è¡Œè„šæœ¬ä¼šæ¸…ç†å¯¹åº”è¯è¨€çš„æ—§äº§ç‰©ï¼Œå¹¶é‡æ–°ç”Ÿæˆ `BUILD-INFO.md`。
移动端产物与原生 Agent 统一挂在 `Bin/Agent/mobile/`:
```text
Bin/Agent/mobile/
├── android/
│ ├── com.newlife.staragent-Signed.apk # dotnet build 产物
│ ├── apk/StarAgent-Aot.apk # pack-android.ps1 打包
│ └── artifacts/ # run-android.ps1 日志
└── ios/
├── *.app # dotnet build 产物
└── artifacts/ios-smoke.json # run-ios.sh 冒烟结果
```
移动端构建命令:
```powershell
pwsh ./StarAgent.Android/pack-android.ps1 -Mode Aot
pwsh ./StarAgent.Android/run-android.ps1 -Smoke
bash ./StarAgent.iOS/run-ios.sh
```
## 3. 构建命令
```powershell
# æž„å»ºå…¨éƒ¨æœ¬æœºå¯æž„å»ºç›®æ ‡ï¼ˆGo å…¨å¹³å° + 本机 Rust/C++)
pwsh ./StarAgent.Native/packaging/build.ps1
# åªæž„建 Go(Go å¯åœ¨ä»»æ„å¹³å°äº¤å‰ç¼–è¯‘å…¨éƒ¨ç›®æ ‡ï¼‰
pwsh ./StarAgent.Native/packaging/build.ps1 -SkipRust -SkipCpp
# 指定输出目录
pwsh ./StarAgent.Native/packaging/build.ps1 -OutDir D:\StarAgent\dist
```
构建完æˆåŽæ‰“å¼€ `Bin/Agent/native/BUILD-INFO.md` 查看æ¯ä¸ªå‘行文件的大å°ä¸Ž SHA256。
## 4. 平尿”¯æŒçŸ©é˜µ
当剿Œ‰ **3 个 OS å®¶æ—**设计:Windowsã€Linuxï¼ˆå« OpenWrt/musl)ã€macOS。
| 实现 | Windows x64 | Windows ARM64 | Linux x64 | Linux ARM64 | Linux ARMv7 | macOS x64 | macOS ARM64 |
|------|:-----------:|:-------------:|:---------:|:-----------:|:-----------:|:---------:|:-----------:|
| Go | ✅ 本机 | ✅ 本机 | ✅ 本机 | ✅ 本机 | ✅ 本机 | ✅ 本机 | ✅ 本机 |
| Rust | ✅ 本机 | 需 MSVC ARM64 链接器 | 需 musl 交å‰å·¥å…·é“¾ | 需 musl 交å‰å·¥å…·é“¾ | — | 需 macOS SDK | 需 macOS SDK |
| C++ | ✅ 本机 | 需 MSVC ARM64 工具链 | æºç 支æŒï¼Œéœ€ Linux 构建 | æºç 支æŒï¼Œéœ€äº¤å‰å·¥å…·é“¾ | æºç 支æŒï¼Œéœ€äº¤å‰å·¥å…·é“¾ | æºç 支æŒï¼Œéœ€ macOS 构建 | æºç 支æŒï¼Œéœ€ macOS 构建 |
说明:
- **Go**:`CGO_ENABLED=0`,7 ä¸ªç›®æ ‡å‡å¯åœ¨æœ¬æœºä¸€æ¬¡æž„建完æˆã€‚
- **Rust**:Windows x64 已实测;Linux musl 交å‰éœ€è¦ `musl-gcc` 或 `cargo-zigbuild`,macOS éœ€è¦ Apple SDKï¼Œé€šå¸¸åœ¨å¯¹åº”å¹³å°æˆ– CI 构建。
- **C++**:Windows x64 已实测;Linux/macOS æºç 路径完整,需è¦å¯¹åº”å¹³å°å·¥å…·é“¾ä¸Ž OpenSSL/IXWebSocket ä¾èµ–。
- æ ‡è®°â€œæœ¬æœºâ€è¡¨ç¤ºå½“å‰ Windows 构建机å¯ç›´æŽ¥äº§å‡ºï¼›å…¶ä½™ç›®æ ‡éœ€è¦åœ¨å¯¹åº”平尿ˆ– CI 上补é½ã€‚
按è¯è¨€æ±‡æ€»ï¼š
| 实现 | å¯å‘å¸ƒç›®æ ‡æ•° | 说明 |
|------|-------------:|------|
| Go | 7 | linux amd64/arm64/armv7ã€windows amd64/arm64ã€darwin amd64/arm64 |
| Rust | 5 | windows x64ã€linux musl x64/arm64ã€macOS x64/arm64 |
| C++ | 5 | windows x64ã€linux x64/arm64ã€macOS x64/arm64 |
> å¹³å°ç»„åˆåˆè®¡ä¸æ˜¯ç®€å•ç›¸åŠ ï¼šä¸åŒè¯è¨€è¦†ç›–çš„ç›®æ ‡é›†åˆæœ‰é‡å ,按“è¯è¨€ + OS + æž¶æž„â€åŽ»é‡åŽå…± **17 个å¯å‘布组åˆ**。本机一次构建实际产出通常为 **9 个文件**(Go 7 + Rust Windows x64 + C++ Windows x64)。
## 5. å‡çº§åŒ…匹é…
æœåŠ¡ç«¯å‡çº§æµç¨‹ï¼š
1. `ProductRelease.ProductCode` å¿…é¡»ç‰äºŽèŠ‚ç‚¹ `Node.ProductCode`,先隔离ä¸åŒå®žçŽ°ã€‚
2. 在版本内按 `ProductPackage.OSKind` / `Architecture` 过滤平å°åŒ…,精确匹é…优先于 `Any`。
3. 原生 Agent 使用 `go` / `rust` / `cpp` åŒ¹é… `TargetRuntime`ï¼›.NET Agent 使用主版本å·ã€‚
4. 原生 Agent é¦–ç‰ˆä¸æ‰§è¡Œè‡ªæ›´æ–°ï¼Œæ”¶åˆ°å‡çº§å“应åªè®°å½•日志并上报事件,由è¿ç»´æ‰‹åŠ¨æ›¿æ¢äºŒè¿›åˆ¶ã€‚
å‘布原生 Agent æ—¶ï¼Œè¯·ç¡®ä¿ `ProductRelease` 与 `ProductPackage` 的产å“ç¼–ç ã€OSKindã€Architectureã€TargetRuntime 与上表一致。
## 6. 本次实测产物
2026-10-17 在 Windows 10 x64 构建机上è¿è¡Œ `build.ps1` 的结果:
| 实现 | ç›®æ ‡å¹³å° | æ–‡ä»¶å¤§å° |
|------|----------|---------:|
| Go | linux-amd64 | 7.55 MB |
| Go | linux-arm64 | 7.00 MB |
| Go | linux-armv7 | 7.50 MB |
| Go | windows-amd64 | 7.50 MB |
| Go | windows-arm64 | 6.80 MB |
| Go | darwin-amd64 | 7.68 MB |
| Go | darwin-arm64 | 7.14 MB |
| Rust | windows-amd64 | 5.13 MB |
| C++ | windows-amd64 | 0.83 MB |
> ä»¥ä¸Šä¸ºå•æ–‡ä»¶åŽŸå§‹å¤§å°ï¼Œå®žé™…å‘布包的大å°ä¸Ž SHA256 以 `Bin/Agent/native/BUILD-INFO.md` ä¸ºå‡†ã€‚å½“å‰ C++ 本机构建未找到 OpenSSLï¼Œä»…æ”¯æŒ `http/ws`;生产环境需安装 OpenSSL åŽé‡æ–°æž„建以å¯ç”¨ `https/wss`。
三ç§å®žçŽ°çš„ `once` 模å¼å‡å·²åœ¨å…¬ç½‘ StarServer `http://star.newlifex.com:6600` 完æˆç™»å½•与心跳验è¯ã€‚
|