Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
1de0d19
feat(fleet): 完善编队规则与识别设置
ShiinaKuroko Aug 5, 2026
2c67af8
fix(statistics): 仅为昆西触发掉落彩蛋
ShiinaKuroko Aug 5, 2026
1a5ec93
feat(release): 增加双发行包与选择迁移
ShiinaKuroko Aug 5, 2026
e889de4
docs(gui): 更新发行与迁移说明
ShiinaKuroko Aug 5, 2026
f456a2f
fix(security): 修正跨平台盘符路径识别
ShiinaKuroko Aug 5, 2026
3eb8c53
fix(python): install FastOCR runtime dependencies
ShiinaKuroko Aug 7, 2026
8ca0049
feat(ship-library): sync ship names to backend
ShiinaKuroko Aug 8, 2026
226652c
fix(gui): reduce noisy status logging
ShiinaKuroko Aug 8, 2026
b874e81
refactor(scheduler): reuse expedition check
ShiinaKuroko Aug 8, 2026
0db9f44
build(release): pin personal backend revision
ShiinaKuroko Aug 8, 2026
3355816
build(release): set 2.0.1 alpha version
ShiinaKuroko Aug 8, 2026
e6d37e4
fix(logging): use logs as GUI default directory
ShiinaKuroko Aug 8, 2026
32b1da8
fix(data): correct Selfridge ship name
ShiinaKuroko Aug 8, 2026
ac8d61b
refactor(gui): 清理未使用接口与测试辅助代码
ShiinaKuroko Aug 8, 2026
6ba5a25
fix(release): 发布包跟随当前仓库更新源
ShiinaKuroko Aug 8, 2026
2e22817
fix(plan): 保留节点覆盖并保存队列计划
ShiinaKuroko Aug 8, 2026
57a07c5
refactor(release): 统一为个人 Alpha 更新链路
ShiinaKuroko Aug 8, 2026
7de9743
fix(release): 移除安装包名称中的重复 Alpha
ShiinaKuroko Aug 8, 2026
42ac623
fix(installer): close running app before overwrite
ShiinaKuroko Aug 8, 2026
1907efc
chore(release): bump version to 2.0.4-alpha
ShiinaKuroko Aug 8, 2026
a99b0ce
feat(updater): show update progress in settings
ShiinaKuroko Aug 8, 2026
8b1a51d
fix(updater): clean runtime before fast overwrite
ShiinaKuroko Aug 8, 2026
e872a58
fix(gui): correct task preview and completion counters
ShiinaKuroko Aug 9, 2026
9e9fdbc
chore(release): prepare 2.0.5-alpha
ShiinaKuroko Aug 9, 2026
83b1956
chore(release): bump version to 2.0.6-alpha
ShiinaKuroko Aug 9, 2026
8d8702a
fix(python): reuse installed dependencies on updates
ShiinaKuroko Aug 9, 2026
5079e64
fix(updater): let users choose install timing
ShiinaKuroko Aug 9, 2026
be557bb
chore(release): bump version to 2.0.7-alpha
ShiinaKuroko Aug 9, 2026
f2bf330
fix(connection): restore backend after manual ADB reconnect
ShiinaKuroko Aug 9, 2026
e2bfa4e
fix(plan): enforce endpoint node actions
ShiinaKuroko Aug 9, 2026
a187cd7
chore(release): bump version to 2.0.8-alpha
ShiinaKuroko Aug 9, 2026
998fa3e
fix: synchronize updates and fleet plan state
ShiinaKuroko Aug 9, 2026
4dc627a
chore(release): bump version to 2.0.9-alpha
ShiinaKuroko Aug 9, 2026
6b370d0
fix(scheduler): run automatic sorties only when idle
ShiinaKuroko Aug 9, 2026
9df5cdd
fix(view): match task queue and fleet preview heights
ShiinaKuroko Aug 9, 2026
4941f7d
chore(release): bump version to 2.0.10-alpha
ShiinaKuroko Aug 9, 2026
81ed614
feat: improve scheduling and plan workflows
Aug 10, 2026
78c0290
fix(view): clarify enemy rule input format
Aug 10, 2026
5381812
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
924f408
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
539640f
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
163da8a
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
0030742
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
2d4336b
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
2d043c2
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
39bda72
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
481646b
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 10, 2026
d71e3e0
fix(gui): harden automation and runtime boundaries
Aug 10, 2026
9c23ffc
chore(release): bump version to 2.0.11-alpha
ShiinaKuroko Aug 10, 2026
15724f9
fix(gui): align plan decisions and loader behavior
ShiinaKuroko Aug 10, 2026
ac35a42
chore(release): bump version to 2.0.12-alpha
ShiinaKuroko Aug 10, 2026
7b47623
chore(release): bump version to 2.0.13-alpha
Aug 11, 2026
427d287
fix(gui): expose paused task queue state
Aug 11, 2026
64b8c32
chore(release): bump version to 2.0.14-alpha
Aug 11, 2026
7861741
tools(map-intel): add standalone synchronization utility
Aug 11, 2026
3e5d81b
fix(installer): preserve shortcuts during updates
Aug 11, 2026
a7541f4
refactor(gui): modularize renderer and build contracts
Aug 11, 2026
2e8afa7
docs: align agent guidance and architecture references
Aug 11, 2026
14d3e18
fix(ui): constrain overview panel heights
ShiinaKuroko Aug 10, 2026
88f95c6
fix(ci): use backend virtualenv for fleet contract
ShiinaKuroko Aug 11, 2026
8ce3abd
docs: update agent branch workflow rules
ShiinaKuroko Aug 11, 2026
dcc18b3
chore(release): bump version to 2.0.15-alpha
ShiinaKuroko Aug 11, 2026
bee2e31
docs(agent): pin main sync to alpha
ShiinaKuroko Aug 11, 2026
d5eca09
feat: refine fleet presets and decisive plan workflows
ShiinaKuroko Aug 11, 2026
bc06613
chore(release): bump version to 2.0.16-alpha
ShiinaKuroko Aug 11, 2026
e6090c4
fix(window): focus main window after loading
Aug 12, 2026
3391cc2
docs(agent): require upstream version check before packaging
Aug 13, 2026
77e2085
docs(agent): define fork branch responsibilities
Aug 13, 2026
5c53843
docs(review): record PR 1 update bridge findings
Aug 13, 2026
73c355a
docs(review): keep PR 1 changes off Sakuya
Aug 13, 2026
e126e60
feat(plans): export 1.4.3 downgrade backups
yltx Aug 13, 2026
e5323b0
feat(updater): bridge alpha and stable channels
ShiinaKuroko Aug 13, 2026
aeb8e61
feat(release): add stable update bridge
ShiinaKuroko Aug 13, 2026
994e9ee
chore(release): bump version to 2.1.0-alpha.1
ShiinaKuroko Aug 13, 2026
2c146a0
fix(release): use valid PowerShell conditions
Aug 14, 2026
e044834
feat: 生成项目Code Wiki文档
ShiinaKuroko Aug 15, 2026
19f4dd6
fix(release): pin stable backend and bridge assets
yltx Aug 15, 2026
973cf26
release: v2.1.0
yltx Aug 15, 2026
37a83e9
Merge branch 'ShiinaKuroko' into ShiinaSakuya
ShiinaKuroko Aug 15, 2026
5abc7f3
feat(updater): link GUI and backend channels
ShiinaKuroko Aug 15, 2026
cc079d4
Merge pull request #2 from ShiinaKuroko/ShiinaSakuya
ShiinaKuroko Aug 15, 2026
bd1e740
release: v2.1.0-alpha.2
ShiinaKuroko Aug 15, 2026
6abcb09
chore(repo): keep private development files off release branch
ShiinaKuroko Aug 15, 2026
338df91
docs(updater): clarify preview channel risk
ShiinaKuroko Aug 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 20 additions & 6 deletions .github/workflows/pull-request-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ concurrency:
cancel-in-progress: true

jobs:
legacy-config-upgrade:
name: Legacy configuration upgrade compatibility
build-and-migrations:
name: Build and migration contracts
runs-on: windows-latest
timeout-minutes: 15

Expand All @@ -30,8 +30,14 @@ jobs:
- name: Install dependencies
run: npm ci

- name: Test old install directory upgrade
run: npm run test:legacy-config-upgrade
- name: Test build gate
run: npm run test:build

- name: Test scheduler domain
run: node scripts/tests/test-scheduler-domain.mjs

- name: Test migration compatibility
run: node scripts/tests/test-migrations.js

backend-fleet-contract:
name: Backend fleet contract
Expand Down Expand Up @@ -71,11 +77,19 @@ jobs:
- name: Install AutoWSGR dependencies
run: uv sync --project AutoWSGR --no-dev

- name: Build GUI
run: npm run build

- name: Test candidate-only GUI services
run: npm run test:main-services
run: node scripts/tests/test-main-services.js

- name: Check fleet type snapshot
env:
AUTOWSGR_PYTHON: ${{ github.workspace }}/AutoWSGR/.venv/bin/python
run: npm run check:fleet-types

- name: Test GUI to AutoWSGR fleet contract
env:
AUTOWSGR_REPO: ${{ github.workspace }}/AutoWSGR
AUTOWSGR_PYTHON: ${{ github.workspace }}/AutoWSGR/.venv/bin/python
run: npm run test:api-contract
run: node scripts/tests/test-api-contract.js
149 changes: 114 additions & 35 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,14 @@ jobs:
}
if ($ver -match '^\d+\.\d+\.\d+$') {
$channel = 'latest'
$stage = 'stable'
$prerelease = 'false'
} elseif ($ver -match '^\d+\.\d+\.\d+-alpha(?:\.\d+)?$') {
$channel = 'alpha'
$stage = 'prerelease'
$prerelease = 'true'
} elseif ($ver -match '^\d+\.\d+\.\d+-beta\.\d+$') {
$channel = 'beta'
$stage = 'prerelease'
$prerelease = 'true'
} elseif ($ver -match '^\d+\.\d+\.\d+-dev(?:\.\d+)?$') {
$channel = 'dev'
$stage = 'development'
$prerelease = 'true'
} else {
throw "版本 $ver 不符合 X.Y.Z、X.Y.Z-alpha、X.Y.Z-alpha.N、X.Y.Z-beta.N、X.Y.Z-dev 或 X.Y.Z-dev.N"
throw "版本 $ver 不符合 X.Y.Z、X.Y.Z-alpha 或 X.Y.Z-alpha.N"
}
echo "VERSION=$ver" >> $env:GITHUB_OUTPUT
echo "CHANNEL=$channel" >> $env:GITHUB_OUTPUT
echo "STAGE=$stage" >> $env:GITHUB_OUTPUT
echo "PRERELEASE=$prerelease" >> $env:GITHUB_OUTPUT
echo "Resolved version: $ver ($stage/$channel)"
echo "Resolved version: $ver ($channel)"

- name: Setup Node.js
uses: actions/setup-node@v4
Expand All @@ -60,62 +46,131 @@ jobs:
- name: Install dependencies
run: npm ci

- name: Sync package.json version
- name: Verify checked-in release version
shell: pwsh
run: |
$pkg = Get-Content package.json | ConvertFrom-Json
$pkg.version = "${{ steps.version.outputs.VERSION }}"
$pkg.build.publish | Add-Member `
-NotePropertyName channel `
-NotePropertyValue "${{ steps.version.outputs.CHANNEL }}" `
-Force
$pkg | ConvertTo-Json -Depth 10 | Set-Content package.json -Encoding UTF8
$version = "${{ steps.version.outputs.VERSION }}"
$lockVersion = node -p "require('./package-lock.json').version"
$lockRootVersion = node -p `
"require('./package-lock.json').packages[''].version"
if ($pkg.version -ne $version) {
throw "package.json 版本与发布版本不一致"
}
if ($lockVersion -ne $version -or $lockRootVersion -ne $version) {
throw "package-lock.json 版本与发布版本不一致"
}
if ($pkg.build.publish.owner -ne "ShiinaKuroko" -or $pkg.build.publish.repo -ne "AutoWSGR-GUI") {
throw "发布目标必须保持为 ShiinaKuroko/AutoWSGR-GUI"
}

- name: Verify pinned backend
shell: pwsh
run: |
$manifest = Get-Content build/backend-distribution.json |
ConvertFrom-Json
foreach ($channel in @("stable", "alpha")) {
$distribution = $manifest.$channel
if (
$distribution.id -ne $channel -or
$distribution.commit -notmatch '^[0-9a-f]{40}$'
) {
throw "$channel 后端发行清单必须固定到明确提交"
}
$remote = git ls-remote `
"https://github.com/$($distribution.repository).git" `
"refs/heads/$($distribution.ref)"
$remoteCommit = ($remote -split '\s+')[0]
if ($remoteCommit -ne $distribution.commit) {
throw "$channel 后端分支与固定提交不一致: $remoteCommit != $($distribution.commit)"
}
echo "Pinned $channel backend: $($distribution.repository)@$($distribution.commit)"
}

- name: Build & Package
run: npm run dist
shell: pwsh
run: |
if ("${{ steps.version.outputs.CHANNEL }}" -eq "latest") {
npm run dist:stable
} else {
npm run dist
}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: List release artifacts
shell: pwsh
run: Get-ChildItem -Path release -Recurse -File | Select-Object FullName, Length

- name: Download Alpha compatibility bridge
if: steps.version.outputs.CHANNEL == 'latest'
shell: pwsh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
$version = "${{ steps.version.outputs.VERSION }}"
$bridgeTag = gh release list `
--repo "${{ github.repository }}" `
--limit 100 `
--json tagName,isPrerelease `
--jq ".[] | select(.isPrerelease == true and (.tagName | startswith(\"v$version-alpha\"))) | .tagName" |
Select-Object -First 1
if (-not $bridgeTag) {
throw "找不到 Stable v$version 对应的 Alpha 桥接版"
}
$compat = Join-Path release "alpha-compat"
New-Item -ItemType Directory -Path $compat -Force | Out-Null
gh release download $bridgeTag `
--repo "${{ github.repository }}" `
--dir $compat `
--pattern 'alpha.yml' `
--pattern 'AutoWSGR-GUI-Setup-*.exe' `
--pattern 'AutoWSGR-GUI-Setup-*.exe.blockmap'
if (-not (Test-Path (Join-Path $compat 'alpha.yml'))) {
throw "Alpha 桥接资产不完整"
}

- name: Verify packaged runtime and resources
run: npm run test:release-package
env:
AUTOWSGR_RELEASE_CHANNEL: ${{ steps.version.outputs.CHANNEL }}

- name: Verify update channel metadata
shell: pwsh
run: |
$channel = "${{ steps.version.outputs.CHANNEL }}"
$expected = Join-Path release "$channel.yml"
$releaseRoot = Join-Path release $channel
$expected = Join-Path $releaseRoot "$channel.yml"
if (-not (Test-Path $expected)) {
throw "缺少 $channel 频道更新清单: $expected"
throw "缺少 $channel 更新清单: $expected"
}
@('latest', 'alpha', 'beta', 'dev') |
Where-Object { $_ -ne $channel } |
$allowed = @($channel)
@('latest', 'beta', 'dev') |
Where-Object { $_ -notin $allowed } |
ForEach-Object {
$unexpected = Join-Path release "$_.yml"
$unexpected = Join-Path $releaseRoot "$_.yml"
if (Test-Path $unexpected) {
throw "发布产物混入其他频道清单: $unexpected"
}
}

- name: Create Release
- name: Create Alpha Release
if: steps.version.outputs.CHANNEL == 'alpha'
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.version.outputs.VERSION }}
name: AutoWSGR-GUI v${{ steps.version.outputs.VERSION }}
prerelease: ${{ steps.version.outputs.PRERELEASE == 'true' }}
prerelease: true
generate_release_notes: true
files: |
release/*-Setup-*.exe
release/*.exe.blockmap
release/${{ steps.version.outputs.CHANNEL }}.yml
release/alpha/AutoWSGR-GUI-Setup-*.exe
release/alpha/*.exe.blockmap
release/alpha/alpha.yml
body: |
## AutoWSGR-GUI v${{ steps.version.outputs.VERSION }}

### 使用方法
1. 下载 `AutoWSGR-GUI-Setup-*.exe`(安装版)
1. 下载 `AutoWSGR-GUI-Setup-*.exe`
2. 软件已内置 Python 3.12,无需单独安装
3. 首次运行时程序会自动安装 Python 依赖(需联网)
4. 已安装用户将自动收到增量更新提示
Expand All @@ -125,3 +180,27 @@ jobs:
- 网络连接(首次运行需安装 pip 依赖)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create Stable Release
if: steps.version.outputs.CHANNEL == 'latest'
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.version.outputs.VERSION }}
name: AutoWSGR-GUI v${{ steps.version.outputs.VERSION }}
prerelease: false
generate_release_notes: true
files: |
release/latest/AutoWSGR-GUI-Setup-*.exe
release/latest/*.exe.blockmap
release/latest/latest.yml
release/alpha-compat/*
body: |
## AutoWSGR-GUI v${{ steps.version.outputs.VERSION }}

本版本使用 `latest` 更新频道,并携带 `v2.1.0-alpha.1` 桥接资产,
使仍停留在旧 2.0 Alpha 的客户端先进入桥接版,再切换到 Stable。

设置中关闭“允许测试版更新”时只接收 Stable;开启后也可接收
版本号更高的 Alpha。
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Thumbs.db
usersettings.yaml
gui_settings.json
task_groups.json
!scripts/fixtures/**/task_groups.json
!scripts/tests/fixtures/**/task_groups.json
templates.json
.env_ready
plans/
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added .trae-html-share-packages/src/view/index.html.zip
Binary file not shown.
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

在分析、修改文件或执行命令前,必须完整读取并遵守根目录 `AGENTS.md`。

`AGENTS.md` 要求继续完整读取 `docs/engineering-standards.md`、可执行配置、`CONTRIBUTING.md` 和任务相关架构文档。不得用本入口文件或任何摘要替代这些原始规则
`AGENTS.md` 是唯一 Coding 规范入口;继续按其中路由读取可执行配置、`CONTRIBUTING.md` 和任务相关架构文档。不得用本入口文件或其他摘要替代其规则
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ docs/ → 架构文档 & 教程

## 代码风格与规范

完整、强制性的工程规范见 [docs/engineering-standards.md](docs/engineering-standards.md)。其中包括架构边界、状态所有权、数据迁移、Electron 安全、验证要求、AI Agent 规则,以及连续修补失败时的 Patch 止损和干净基线重写流程。本文仅保留快速上手摘要;发生冲突时以工程规范和可执行配置为准
完整、强制性的工程规范见 [AGENTS.md](AGENTS.md)。其中包括架构边界、状态所有权、数据迁移、Electron 安全、验证要求、AI Agent 规则,以及连续修补失败时的 Patch 止损和干净基线重写流程。本文仅保留快速上手摘要;发生冲突时按 `AGENTS.md` 的事实来源规则处理

### 通用规范

Expand Down Expand Up @@ -111,4 +111,4 @@ docs: 更新架构文档

- 一个 commit 对应一个逻辑变更,避免把不相关的修改混在一起
- 如果一个功能涉及多层修改(model + controller + view),可以放在同一个 commit 中
- 同一问题连续修补失败或开始引入额外状态源、跨层补偿时,必须按照[工程规范的 Patch 止损机制](docs/engineering-standards.md#6-patch-止损机制)暂停并升级审查,不得继续叠加 workaround
- 同一问题连续修补失败或开始引入额外状态源、跨层补偿时,必须按照 [AGENTS.md 的修复止损机制](AGENTS.md#21-修复止损)暂停并升级审查,不得继续叠加 workaround
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@ GUI 保存的 YAML 必须通过当前前端校验,并最终符合 AutoWSGR 后

## 文档

- [用户使用指南(含节点索敌规则说明)](docs/user-guide.md)
- [战斗方案 YAML 说明](docs/plan-guide.md)
- [架构文档索引](docs/architecture/README.md)
- [开发环境搭建](docs/architecture/08-dev-setup.md)
Expand All @@ -267,7 +268,7 @@ GUI 保存的 YAML 必须通过当前前端校验,并最终符合 AutoWSGR 后

## 贡献

欢迎参与开发!请先阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 和强制性的[工程与代码规范](docs/engineering-standards.md)。
欢迎参与开发!请先阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 和强制性的 [AGENTS.md](AGENTS.md)。

## 许可证

Expand Down
16 changes: 16 additions & 0 deletions build/backend-distribution.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"stable": {
"id": "stable",
"repository": "OpenWSGR/AutoWSGR",
"ref": "main",
"commit": "a5effbfc606794ec30fa8bfd2f8edd2cc15d3852",
"forceUpdateOnInstall": true
},
"alpha": {
"id": "alpha",
"repository": "ShiinaKuroko/AutoWSGR",
"ref": "ShiinaKuroko",
"commit": "77f34b7b30d18f7b86cf736bdd5cf17ae35d5f78",
"forceUpdateOnInstall": true
}
}
22 changes: 22 additions & 0 deletions build/electron-builder.alpha.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const packageMetadata = require('../package.json');

const base = packageMetadata.build;

module.exports = {
...base,
directories: {
...base.directories,
output: 'release/alpha',
},
extraResources: [
...base.extraResources,
{
from: 'build/backend-distribution.json',
to: 'backend-distribution.json',
},
],
nsis: {
...base.nsis,
include: 'build/installer.nsh',
},
};
15 changes: 15 additions & 0 deletions build/electron-builder.stable.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const alpha = require('./electron-builder.alpha.cjs');

module.exports = {
...alpha,
directories: {
...alpha.directories,
output: 'release/latest',
},
publish: {
...alpha.publish,
owner: 'yltx',
repo: 'AutoWSGR-GUI',
channel: 'latest',
},
};
Loading
Loading