# DSH Desktop Shell 构建文档 > 极简 Wails v3 + Go 桌面壳:webview 直连 DeepSeek Harness Web GUI。 > 本文件覆盖 **Windows** 与 **macOS** 两个平台的完整构建步骤:环境准备(Go / Node.js / wails3 CLI / 系统依赖)、构建命令、产物与自测。 ## 0. 一句话流程 - **Windows**(已验证):装 Go → `go install` 装 wails3 CLI → `.\build.ps1` → 产物 `bin\dsh-shell.exe` - **macOS**(须在 Mac 上,未实测):装 Xcode CLT + Go → `go install` 装 wails3 CLI → `wails3 build -clean -platform darwin -skipbindings` → 产物 `build/bin/DSH Desktop.app` > macOS 无法在 Windows 上交叉编译(Wails v3 走 cgo / Cocoa),必须在 Mac 上构建。 --- ## 1. 环境要求(三件套 + 系统依赖) | 组件 | 版本 | 是否必需 | 官方下载 / 安装 | |---|---|---|---| | **Go** | ≥ 1.26(本仓库 go.mod 为 1.26.4) | ✅ 必需 | | | **wails3 CLI** | v3.0.0-beta.6(与 go.mod 一致) | ✅ 必需 | `go install`(见 1.2,无独立安装包) | | **Node.js** | ≥ 20(LTS 即可) | ⭕ 可选,仅图标再生成需要 | | | **WebView2 Runtime**(Windows) | 常青版 | ✅ 必需(Win10/11 一般自带) | | | **Xcode Command Line Tools**(macOS) | 最新 | ✅ 必需(编译要 clang/ld) | `xcode-select --install` | ### 1.1 Go(核心编译工具,必装) 去官方下载页选择当前平台安装包,安装后**重开终端**再验证: | 平台 | 安装包 | 官方地址 | |---|---|---| | Windows x64 | `go1.26.x.windows-amd64.msi`(一路下一步,自动写 PATH) | | | macOS Apple Silicon | `go1.26.x.darwin-arm64.pkg` | | | macOS Intel | `go1.26.x.darwin-amd64.pkg` | | 验证: ```powershell go version # 期望 go version go1.26.x windows/amd64(或 darwin/arm64) ``` ### 1.2 wails3 CLI(Wails v3 命令行,必装) Wails v3 没有独立安装包,官方安装方式就是 Go 自带的 `go install`。**版本务必与 go.mod 里的 Wails 库一致**(v3.0.0-beta.6): ```bash go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.6 ``` - 安装位置:`%GOPATH%\bin`(Windows)/ `$GOPATH/bin`(macOS),**需确保该目录在 PATH 中**(Windows 上默认 `C:\Users\<你>\go\bin`)。 - 验证: ```bash wails3 --help # 能看到 v3 系列命令 wails3 tool buildinfo # 显示 Version: v3.0.0-beta.6 ``` ### 1.3 Node.js(可选) 普通构建**不需要** Node.js。只有在需要**重新生成应用图标**(改了品牌图标时)才用:`node scripts/gen-icon.cjs`(依赖 DSH checkout 里的 sharp,路径在脚本头部硬编码;图标产物 `build/appicon.png`、`build/windows/icon.ico`、`assets/*.png` 已入库,跳过不影响构建)。 官方下载:(选 LTS 即可),或 `winget install OpenJS.NodeJS.LTS`(Windows)。 ### 1.4 系统依赖 - **Windows — WebView2 Runtime**:Win10/11 一般随 Edge 自带。若应用打开白屏/报错,去 装 Evergreen(常青版)即可。 - **macOS — Xcode Command Line Tools**:Wails v3 编译要走 cgo,必须有 clang/ld: ```bash xcode-select --install # 弹窗确认;已有则提示 already installed ``` --- ## 2. 环境自检(开始前跑一遍) ```bash go version # 1.26+ node --version # 可选;20+ wails3 --help # v3 可用 go env GOPATH # wails3 应装在 GOPATH\bin ``` 缺哪个装哪个,全部就绪再进下一步。 --- ## 3. Windows 构建(已验证 ✅) ### 3.1 发布构建(推荐) 在仓库根目录执行: ```powershell .\build.ps1 ``` 脚本自动做两件事: 1. `wails3 generate syso`:生成 exe 资源(图标 / 清单 / 版本信息),输出 `wails_windows_amd64.syso` 供链接; 2. `go build -tags production -ldflags "-s -w -H windowsgui"`:无控制台窗口的发布版。 **产物**: | 文件 | 说明 | |---|---| | `bin\dsh-shell.exe` | 发布版(production tag,关闭 devtools) | | `bin\dsh-shell-debug.exe` | 调试版(无控制台窗口,日志写 `bin\data\.dsh-shell\dsh-shell.log`) | ### 3.2 只想要调试 / 控制台变体 ```powershell # 调试版(无控制台窗口) go build -ldflags "-H windowsgui" -o bin\dsh-shell-debug.exe . # 要实时看日志的控制台变体 go build -o bin\dsh-shell-console.exe . ``` ### 3.3 运行 ```text bin\dsh-shell.exe # 直连本机 dsh(地址不可达则打开设置页) bin\dsh-shell.exe --url http://127.0.0.1:3080 # 指定地址并保存 bin\dsh-shell.exe --settings # 忽略保存的地址,打开设置页 bin\dsh-shell.exe --reset # 清除保存的地址并打开设置页 bin\dsh-shell.exe --managed # 托管模式:由壳启动并管理本地 dsh ``` 数据目录:exe 旁的 `bin\data\`(可整体拷贝即便携);覆盖用环境变量 `DSH_SHELL_DATA_ROOT`。 ### 3.4 自测 ```powershell go test ./... go vet ./... ``` --- ## 4. macOS 构建(须在 Mac 上,⚠ 未实测) ### 4.1 步骤 ```bash # 1. Xcode 命令行工具 xcode-select --install # 2. Go(官方 pkg 安装包) # https://go.dev/dl/ → go1.26.x.darwin-arm64.pkg(Apple Silicon)或 darwin-amd64.pkg(Intel) # 3. wails3 CLI(版本与 go.mod 一致) go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.6 # 4. 在仓库根目录构建 .app wails3 build -clean -platform darwin -skipbindings ``` **产物**:`build/bin/DSH Desktop.app` **数据目录**:`~/Library/Application Support/app.dsh.desktop` **ATS**:`build/darwin/Info.plist` 已配置 `NSAllowsLocalNetworking`,放行局域网 http(127.0.0.1 本就豁免)。 ### 4.2 注意事项(务必先看) - **版本匹配**:本仓库依赖 Wails v3.0.0-beta.6,wails3 CLI 也要装同版本,否则可能行为不一致。 - **Taskfile**:beta.6 的 `wails3 build` 通过 Taskfile(task runner)派发。本仓库是手写的最小壳、**未提交 Taskfile.yml**。若报 `task: No Taskfile found`,二选一: 1. 先 `wails3 generate build-assets -dir .` 生成 Taskfile.yml 与各平台构建资产(注意:生成的 `build/darwin/Info.plist` 可能与仓库手写版不同,需手工补回 ATS 局域网放行),再重试 `wails3 build`; 2. 或直接用 4.3 的“go build + 手动打包 .app”备选方案。 - **未签名**:本仓库未配置 Developer ID 签名。双击打开若被 Gatekeeper 拦截:右键 → 打开;或 `xattr -dr com.apple.quarantine "build/bin/DSH Desktop.app"`。分发正式版需 Apple 开发者账号签名 + 公证(notarization)。 ### 4.3 备选:直接 go build + 手动打包 .app(不依赖 Taskfile) 如果 wails3 打包链路不顺,可以用最小步骤出可运行的 .app(仓库已提供 Info.plist): ```bash # 1. 编译 darwin 二进制(在本机 Mac 上,CGO 默认开启) go build -tags production -ldflags "-s -w" -o build/bin/dsh-shell . # 2. 组装 .app 目录 APP="build/bin/DSH Desktop.app" mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" cp build/bin/dsh-shell "$APP/Contents/MacOS/dsh-shell" cp build/darwin/Info.plist "$APP/Contents/Info.plist" # 图标(可选):把 build/appicon.png 转成 icons.icns 放入 Resources/, # 并确保 Info.plist 的 CFBundleIconFile 指向它。 # 3. 运行 open "$APP" ``` > 该备选路径结构正确但未在本仓库实测,第一次请以 4.1 官方链路为准。 --- ## 5. 版本与产物速查 - **版本单一来源**:`build/config.yml` 的 `info.version`(main.go 启动时读取;`build/darwin/Info.plist` 的 `CFBundleShortVersionString` 与之对应)。 - **改版本号**:编辑 `build/config.yml` → Windows 重跑 `build.ps1`(自动重生成 syso 版本资源)。 - **重新生成图标**(可选):`node scripts/gen-icon.cjs`,需要 DSH checkout 的 sharp。 - **自测命令**:`go test ./...`、`go vet ./...`。 --- ## 6. 常见问题(FAQ) | 现象 | 原因 / 解决 | |---|---| | `'wails3' 不是内部或外部命令` | `%GOPATH%\bin`(`go env GOPATH` 查)不在 PATH;加到 PATH 后重开终端 | | `go: go.mod requires go >= 1.26.4` | Go 版本太低,去 装新版 | | 应用打开白屏 / WebView2 报错 | 装 WebView2 Evergreen: | | 想交叉编译 macOS 报 cgo 错误 | Wails v3 走 cgo,**不支持**跨平台编译,请在 Mac 上构建 | | exe 图标/版本没更新 | 删掉根目录 `wails_windows_amd64.syso` 后重跑 `build.ps1`(会自动 `wails3 generate syso`) | | 托盘/设置页改动后没生效 | assets/ 是 `//go:embed` 内嵌,改动后**必须重新 `go build`**,无需任何前端打包 | | `task: No Taskfile found`(macOS) | 见 4.2,用 `wails3 generate build-assets` 或 4.3 备选方案 | --- ## 7. 官方下载链接汇总 | 组件 | 链接 | |---|---| | Go | | | Node.js | | | WebView2 Runtime(Windows) | | | Xcode(macOS) | (CLT 用 `xcode-select --install`) | | Wails v3(wails3 CLI) | `go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.6`(文档:) |