chore(build): 更新.gitignore配置和清理Wails临时文件

- 添加dist/目录到.gitignore,用于排除打包输出的绿色免安装版
- 添加Wails打包过程中的临时文件和自动生成文件到.gitignore
- 删除build/windows/installer/wails_tools.nsh自动生成文件
- 添加Windows安装器临时目录和Webview2安装文件到忽略列表

feat(docs): 添加万川平台对接文档和产品素材

- 创建万川平台登录到获取模型信息的流程说明文档
- 添加万川平台对接实施计划文档
- 新增产品图片、公司简介图、宣传海报、教程截图、案例展示等素材文件

refactor(runtime): 扩展通知功能类型定义

- 添加NotificationOptions接口定义
- 添加NotificationAction接口定义
- 添加NotificationCategory接口定义
- 扩展通知相关的运行时API类型声明,包括初始化、发送、注册分类等功能
This commit is contained in:
2026-06-25 18:13:11 +08:00
parent 858cb68f4f
commit a926ee6b1b
34 changed files with 1178 additions and 275 deletions

209
scripts/build.ps1 Normal file
View File

@@ -0,0 +1,209 @@
<#
.SYNOPSIS
一键打包脚本。
.DESCRIPTION
默认产出「绿色免安装版」到 dist\qiweimanager\(不需要 NSIS解压即用
1. 定位 Go / Wails 工具链并注入 PATH。
2. 32 位编译 helper.exe编译 silk 音频解码器。
3. wails build 生成主程序 qiweimanager.exe前端一并编译
4. 汇总主程序 + helper + DLL + 工具 + 默认配置到 dist 目录。
指定 -Installer 时,额外调用现有的 scripts\package-windows.ps1 走 NSIS 生成安装包
(需本机已安装 NSIS
.PARAMETER Installer
额外生成 NSIS 安装包(委托 package-windows.ps1需要 makensis
.PARAMETER SkipTests
跳过 go test。
.PARAMETER GoPath / WailsPath
手动指定工具路径(自动探测失败时使用)。
.EXAMPLE
powershell -ExecutionPolicy Bypass -File scripts\build.ps1
powershell -ExecutionPolicy Bypass -File scripts\build.ps1 -Installer
#>
[CmdletBinding()]
param(
[switch]$Installer,
[switch]$SkipTests,
[string]$GoPath,
[string]$WailsPath
)
$ErrorActionPreference = "Stop"
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$repoRoot = (Resolve-Path (Join-Path $scriptDir "..")).Path
Set-Location $repoRoot
function Write-Step([string]$msg) { Write-Host "==> $msg" -ForegroundColor Cyan }
function Write-Ok([string]$msg) { Write-Host " $msg" -ForegroundColor Green }
function Write-Warn2([string]$msg){ Write-Host " $msg" -ForegroundColor Yellow }
function Resolve-Go {
param([string]$Hint)
$candidates = @()
if ($Hint) { $candidates += $Hint }
$cmd = Get-Command go.exe -ErrorAction SilentlyContinue
if ($cmd) { $candidates += $cmd.Source }
$candidates += "$env:LOCALAPPDATA\Programs\Go\bin\go.exe", "C:\Program Files\Go\bin\go.exe", "C:\Go\bin\go.exe"
foreach ($c in $candidates) { if ($c -and (Test-Path $c)) { return (Resolve-Path $c).Path } }
throw "未找到 Go。请安装 Go 1.24+ 后重试,或用 -GoPath 指定。"
}
function Resolve-Wails {
param([string]$Hint)
$candidates = @()
if ($Hint) { $candidates += $Hint }
$cmd = Get-Command wails.exe -ErrorAction SilentlyContinue
if ($cmd) { $candidates += $cmd.Source }
$candidates += "$env:USERPROFILE\go\bin\wails.exe"
foreach ($c in $candidates) { if ($c -and (Test-Path $c)) { return (Resolve-Path $c).Path } }
throw "未找到 Wails CLI。请先运行 scripts\dev.ps1 安装,或用 -WailsPath 指定。"
}
function Copy-Required {
param([string]$Source, [string]$Destination)
if (-not (Test-Path -LiteralPath $Source)) { throw "缺少资源: $Source" }
$dir = Split-Path -Parent $Destination
if ($dir -and -not (Test-Path -LiteralPath $dir)) { New-Item -ItemType Directory -Force -Path $dir | Out-Null }
Copy-Item -LiteralPath $Source -Destination $Destination -Force
}
# ---- 委托 NSIS 安装包构建 ----
if ($Installer) {
Write-Step "委托 package-windows.ps1 生成 NSIS 安装包"
$pkg = Join-Path $scriptDir "package-windows.ps1"
$pkgArgs = @{}
if ($SkipTests) { $pkgArgs["SkipTests"] = $true }
if ($WailsPath) { $pkgArgs["WailsPath"] = $WailsPath }
& $pkg @pkgArgs
return
}
# ---- 工具链 ----
Write-Step "定位 Go / Wails 工具链"
$go = Resolve-Go -Hint $GoPath
$goBin = Split-Path -Parent $go
$env:PATH = "$goBin;$env:USERPROFILE\go\bin;$env:PATH"
$wails = Resolve-Wails -Hint $WailsPath
Write-Ok "Go: $go"
Write-Ok "Wails: $wails"
$goCache = Join-Path $repoRoot ".gocache"
New-Item -ItemType Directory -Force -Path $goCache | Out-Null
$env:GOCACHE = $goCache
$binDir = Join-Path $repoRoot "build\bin"
$distDir = Join-Path $repoRoot "dist\qiweimanager"
# ---- 测试 ----
if (-not $SkipTests) {
Write-Step "运行 Go 测试 (go test ./...)"
& $go test ./...
Write-Ok "测试通过"
}
# ---- 结束运行中的旧进程,避免覆盖失败 ----
$running = Get-Process -Name "qiweimanager", "qiweimanager-dev", "helper", "helper_auto_reply" -ErrorAction SilentlyContinue
foreach ($p in $running) { Write-Warn2 "结束运行中的进程: $($p.ProcessName) ($($p.Id))"; Stop-Process -Id $p.Id -Force }
New-Item -ItemType Directory -Force -Path $binDir | Out-Null
# ---- 32 位 helper.exe ----
Write-Step "编译 32 位 helper.exe"
$helperOut = Join-Path $binDir "helper.exe"
$oldArch = $env:GOARCH
try {
$env:GOARCH = "386"
Push-Location (Join-Path $repoRoot "helper")
& $go build -trimpath -ldflags "-H windowsgui -s -w" -o $helperOut .
if ($LASTEXITCODE -ne 0) { throw "helper.exe 编译失败 (exit $LASTEXITCODE)" }
} finally {
Pop-Location
if ($null -eq $oldArch) { Remove-Item Env:GOARCH -ErrorAction SilentlyContinue } else { $env:GOARCH = $oldArch }
}
Write-Ok "helper.exe 完成"
# ---- silk 音频解码器(尽力而为,需要 cgo/gcc缺失则跳过仅影响语音消息转码----
Write-Step "编译 silk 音频解码器"
$silkOut = Join-Path $binDir "tools\audio\silkdecode.exe"
$silkBuilt = $false
$hasGcc = [bool](Get-Command gcc -ErrorAction SilentlyContinue)
if (-not $hasGcc) {
Write-Warn2 "未检测到 gccsilkdecode 依赖 cgo 无法编译,跳过。语音消息自动转码功能在此构建中不可用。"
Write-Warn2 "如需启用:安装 MinGW-w64如 winget install -e --id mstorsjo.llvm-mingw 或 choco install mingw再重新打包。"
} else {
New-Item -ItemType Directory -Force -Path (Split-Path $silkOut) | Out-Null
Push-Location (Join-Path $repoRoot "tools\audio\silkdecode")
try {
$oldCgo = $env:CGO_ENABLED
$env:CGO_ENABLED = "1"
& $go build -trimpath -ldflags "-s -w" -o $silkOut .
if ($LASTEXITCODE -eq 0 -and (Test-Path $silkOut)) { $silkBuilt = $true; Write-Ok "silkdecode.exe 完成" }
else { Write-Warn2 "silkdecode 编译失败,已跳过(不影响主程序)。" }
} finally {
Pop-Location
if ($null -eq $oldCgo) { Remove-Item Env:CGO_ENABLED -ErrorAction SilentlyContinue } else { $env:CGO_ENABLED = $oldCgo }
}
}
# ---- 主程序 + 前端 ----
Write-Step "构建主程序 (wails build)"
& $wails build -trimpath -webview2 embed
if ($LASTEXITCODE -ne 0) { throw "wails build 失败 (exit $LASTEXITCODE)" }
$mainExe = Join-Path $binDir "qiweimanager.exe"
if (-not (Test-Path $mainExe)) { throw "主程序未生成: $mainExe" }
Write-Ok "qiweimanager.exe 完成"
# ---- 汇总绿色免安装版 ----
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$distDirWithTime = Join-Path $repoRoot "dist\qiweimanager_$timestamp"
Write-Step "汇总绿色免安装版到 dist\qiweimanager_$timestamp"
if (Test-Path $distDirWithTime) { Remove-Item $distDirWithTime -Recurse -Force }
New-Item -ItemType Directory -Force -Path $distDirWithTime | Out-Null
New-Item -ItemType Directory -Force -Path (Join-Path $distDirWithTime "config\knowledge") | Out-Null
New-Item -ItemType Directory -Force -Path (Join-Path $distDirWithTime "config\materials") | Out-Null
$mainExeWithTime = "qiweimanager_$timestamp.exe"
Copy-Required -Source $mainExe -Destination (Join-Path $distDirWithTime $mainExeWithTime)
Copy-Required -Source $helperOut -Destination (Join-Path $distDirWithTime "helper.exe")
if ($silkBuilt) {
Copy-Required -Source $silkOut -Destination (Join-Path $distDirWithTime "tools\audio\silkdecode.exe")
} else {
Write-Warn2 "dist 不含 silkdecode.exe语音转码功能不可用"
}
Copy-Required -Source (Join-Path $repoRoot "Helper_4.1.33.6009.dll") -Destination (Join-Path $distDirWithTime "Helper_4.1.33.6009.dll")
Copy-Required -Source (Join-Path $repoRoot "Loader_4.1.33.6009.dll") -Destination (Join-Path $distDirWithTime "Loader_4.1.33.6009.dll")
Copy-Item -LiteralPath (Join-Path $repoRoot "requestdata") -Destination (Join-Path $distDirWithTime "requestdata") -Recurse -Force
Copy-Item -LiteralPath (Join-Path $repoRoot "eventdata") -Destination (Join-Path $distDirWithTime "eventdata") -Recurse -Force
# 默认配置(不含真实密钥)
$defaultConfig = @'
{
"callbackConfig": {
"callbackUrl": "",
"callbackToken": "",
"httpPort": "10001",
"enableCallback": false,
"enableCloudAuth": false,
"fileUploadUrl": "",
"deviceCode": ""
},
"lastUpdated": 0
}
'@
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText((Join-Path $distDirWithTime "config\config.json"), $defaultConfig, $utf8NoBom)
[System.IO.File]::WriteAllText((Join-Path $distDirWithTime "config\client_status.json"), "{}", $utf8NoBom)
[System.IO.File]::WriteAllText((Join-Path $distDirWithTime "config\materials\materials.json"), '{"materials":[]}', $utf8NoBom)
Write-Host ""
Write-Step "打包完成"
Write-Ok "绿色免安装版: $distDirWithTime"
Write-Ok "主程序: $mainExeWithTime"
Write-Ok "直接进入该目录双击 $mainExeWithTime 即可运行。"
Write-Host " 如需 NSIS 安装包,请安装 NSIS 后运行: scripts\build.ps1 -Installer" -ForegroundColor DarkGray