- EASYBOT CONTROL CENTER
运行总览
社区接入与 Minecraft 服务配置
{{ apiOnline ? 'API 在线' : 'API 离线' }}
+ EASYBOTCE CONTROL CENTER
运行总览
社区接入与 Minecraft 服务配置
{{ apiOnline ? 'API 在线' : 'API 离线' }}
{{ error }}
配置概况最近同步 {{ updatedAt || '等待服务连接' }}
diff --git a/dev/web/vite.config.ts b/dev/web/vite.config.ts
index 3c3d92d..b3d9b53 100644
--- a/dev/web/vite.config.ts
+++ b/dev/web/vite.config.ts
@@ -5,5 +5,5 @@ import { defineConfig } from 'vite'
export default defineConfig({
plugins: [vue(), tailwindcss()],
build: { cssMinify: false },
- server: { proxy: { '/api': 'http://127.0.0.1:26990' } },
+ server: { host: '127.0.0.1', proxy: { '/api': 'http://127.0.0.1:5001' } },
})
From c5be38c36967ccfe8e83d507d60dd666fda63650 Mon Sep 17 00:00:00 2001
From: BaiZhouziYou <111175934+BaizhouziYou@users.noreply.github.com>
Date: Sat, 7 Nov 2026 17:12:52 +0800
Subject: [PATCH 2/3] =?UTF-8?q?build(release):=20=E6=8F=90=E4=BE=9B?=
=?UTF-8?q?=E8=A7=A3=E5=8E=8B=E5=8D=B3=E7=94=A8=E7=9A=84=E4=BE=BF=E6=90=BA?=
=?UTF-8?q?=E5=8C=85=E5=92=8C=E8=87=AA=E5=8A=A8=E6=9E=84=E5=BB=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
增加 node build.mjs,统一完成前端依赖安装、页面构建、Go 编译和便携包打包。
便携包包含 easybotce 程序、默认启动配置、网页资源、许可证与中文使用说明。Windows 用户解压后可直接双击启动,无需安装开发工具或另行启动脚本。
CI 在 Windows 和 Linux 上执行 Go 检查、构建并上传便携包,同步使用与升级说明。
验证:Windows 便携包构建及解压运行通过;用户配置和运行数据不进入发布包。
---
.github/workflows/ci.yml | 20 ++++++++++-
README.md | 44 ++++++++++++++++++++-----
build.mjs | 71 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 125 insertions(+), 10 deletions(-)
create mode 100644 build.mjs
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c2e3b1c..8a82651 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -10,7 +10,10 @@ permissions:
jobs:
go:
- runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-latest]
+ runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
@@ -23,6 +26,21 @@ jobs:
- name: Vet
working-directory: dev
run: go vet ./...
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: npm
+ cache-dependency-path: dev/web/package-lock.json
+ - name: 构建便携包
+ run: node build.mjs
+ - name: 上传便携包
+ uses: actions/upload-artifact@v4
+ with:
+ name: easybotce-${{ runner.os }}-${{ runner.arch }}
+ path: |
+ release/*.zip
+ release/*.tar.gz
+ if-no-files-found: error
web:
runs-on: ubuntu-latest
diff --git a/README.md b/README.md
index 63e0ef7..21308c0 100644
--- a/README.md
+++ b/README.md
@@ -9,27 +9,53 @@ EasybotCE 的主程序。当前重建项目由 Go HTTP API 和 Vue 3 管理台
- `REMAINING_PLAN.md`: 后续版本产品范围、验收标准和工作包。
- `.github/workflows/`: 本地构建及数据库集成测试。
-当前运行时已覆盖管理员初始化/认证、管理台概览、基础配置 CRUD 和内存运行日志。OneBot 11 已选为首发社交平台;协议连接、Minecraft 网络桥接和消息同步仍在开发中。MySQL/PostgreSQL 是否正式支持以对应 CI 集成测试通过为准。
+当前运行时已覆盖管理员初始化/认证、管理台概览、配置 CRUD、持久化运行日志及 OneBot 11 正向 WebSocket 连接;OneBot 模拟器验证已完成,真实账号仍待验收。Minecraft 网络桥接和消息同步尚未实现。MySQL/PostgreSQL 是否正式支持以对应 CI 集成测试通过为准。
## License and attribution
This repository is licensed under [CC BY-NC 4.0 (`CC-BY-NC-4.0`)](https://creativecommons.org/licenses/by-nc/4.0/). Commercial use is not permitted by that license. When sharing or adapting this project, credit EasybotCE and link to this repository and the license, identify changes, and retain existing author, copyright, and license notices. See [`AUTHORS.md`](AUTHORS.md).
+## 运行
+
+Windows 用户下载便携压缩包,解压到可写目录后双击 `easybotce.exe`,浏览器打开 `http://127.0.0.1:5001`。默认本机回环监听直接进入管理台,无需注册或登录。包内已包含页面资源,默认使用 SQLite,无需安装 Go、Node.js 或数据库服务器,也无需启动脚本。运行期间保持程序窗口打开。
+
+非本地监听使用原版式 Token 登录,不需要用户名或独立 API Key。首次自动生成 12 位登录 Token,仅在控制台显示一次;`token.txt` 保存原版格式的 SHA-256 哈希,后续沿用。非本地地址可直接使用 HTTP,HTTPS 可选;公网传输 Token 时建议使用 HTTPS。
+
+保留包内的 `web` 目录。首次启动自动创建 `appdata` 数据目录;升级前停止程序、备份并保留 `appdata`,再替换程序和页面资源。已有数据库可通过 `EASYBOT_SQLITE_PATH` 指定。
+
+Windows 双击启动失败时,窗口会保留并显示原因,按回车后关闭。从已有终端或自动化环境运行时直接返回错误码。
+
+## 启动配置与原版迁移
+
+便携包自带 `appsettings.json`,缺失时首次启动自动生成。修改后重启生效,程序不会重写已有配置。沿用原版字段:
+
+- `Kestrel.Endpoints.web_api.Url`:WebUI 地址,CE 默认 `http://127.0.0.1:5001`。
+- `ServerOptions.Host`、`ServerOptions.Port`:Bridge 地址,CE 默认 `127.0.0.1:26991`;运行时尚未实现。
+- `Serilog.MinimumLevel.Default`:控制台日志级别。
+- `AllowedHosts`:允许的 HTTP Host,支持 `*`、分号分隔的主机名及 `*.example.com`。
+
+迁移启动配置时,将原版 `appsettings.json` 直接复制到 CE 的 exe 旁边即可,现有字段及端口按原值读取。已有原版 `token.txt` 也可一并复制,继续使用同一个登录 Token。你本机原版使用的 5000/26990 会保留;同时运行原版时请改成不同端口。CE 新增配置缺失时使用默认值,原版数据库需要单独迁移,不能直接替换 CE 数据库。
+
+忘记 Token 时,先停止程序并删除 `token.txt`,非本地模式重启后会生成新的 Token,并使旧登录会话失效。升级请保留自己的 `appsettings.json`、`token.txt` 和 `appdata`。旧 CE 用户名/密码登录由 Token 登录替代,业务数据保留。
+
+`EASYBOT_CONFIG` 可指定其他配置文件,原有环境变量优先于 JSON 配置。开发构建默认生成 `dev/appsettings.json`;exe 旁已有配置时优先读取它。配置示例见 [appsettings.example.json](dev/internal/config/appsettings.example.json)。
+
## 开发
环境要求:Go 1.24+、Node.js 20.19+。
-```powershell
-cd dev/web
-npm ci
-npm run dev
-```
+运行端口:`127.0.0.1:5001` 同时提供 WebUI 和管理 API;`26991` 用于 Bridge 与插件/模组通信(运行时尚未实现,当前不监听)。构建后的程序不需要独立前端服务器。WebUI 地址可通过 `EASYBOT_ADDR` 覆盖。
+
+贡献者与开发代理须遵守 [贡献规范](CONTRIBUTING.md) 和 [协作约定](AGENTS.md):所有后续 commit 使用中文。
-另开终端启动 API:
+在仓库根目录执行一条命令,完成依赖下载、前端构建、Go 编译和便携包打包:
```powershell
-cd dev
-go run ./cmd/easybot
+node build.mjs
```
+Windows 输出 `release/easybotce-windows-amd64.zip`,Linux 输出对应平台的 `.tar.gz`(程序名为 `easybotce`);CI 生成的便携包可从运行记录的 Artifacts 下载。本地编译程序同时保存在 `dev/bin`。
+
+浏览器打开 `http://127.0.0.1:5001`。可选热更新开发方式见开发说明,日常运行无需启动 Vite。
+
运行方式、配置项和安全说明见 [`dev/README.md`](dev/README.md)。
diff --git a/build.mjs b/build.mjs
new file mode 100644
index 0000000..1d5541e
--- /dev/null
+++ b/build.mjs
@@ -0,0 +1,71 @@
+import { spawnSync } from 'node:child_process'
+import { copyFileSync, cpSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { dirname, join } from 'node:path'
+import { fileURLToPath } from 'node:url'
+
+const root = dirname(fileURLToPath(import.meta.url))
+const dev = join(root, 'dev')
+const env = { ...process.env, CGO_ENABLED: '0' }
+
+function run(command, args, cwd) {
+ if (process.platform === 'win32' && command === 'npm') {
+ // npm 的参数均为下方固定命令,不拼接用户输入。
+ args = ['/d', '/s', '/c', `npm ${args.join(' ')}`]
+ command = 'cmd.exe'
+ }
+ const result = spawnSync(command, args, {
+ cwd,
+ env,
+ stdio: 'inherit',
+ })
+ if (result.error || result.status !== 0) {
+ throw new Error(`${command} 执行失败(${result.status ?? result.error?.message})`)
+ }
+}
+
+run('npm', ['ci', '--no-audit', '--no-fund'], join(dev, 'web'))
+run('npm', ['run', 'build'], join(dev, 'web'))
+mkdirSync(join(dev, 'bin'), { recursive: true })
+const target = env.GOOS || (process.platform === 'win32' ? 'windows' : process.platform)
+const output = join('bin', target === 'windows' ? 'easybotce.exe' : 'easybotce')
+run('go', ['build', '-trimpath', '-o', output, './cmd/easybot'], dev)
+
+const arch = env.GOARCH || ({ x64: 'amd64', ia32: '386' }[process.arch] || process.arch)
+const name = `easybotce-${target}-${arch}`
+const release = join(root, 'release')
+if (!/^easybotce-[a-z0-9]+-[a-z0-9]+$/.test(name)) throw new Error('无效的目标平台')
+mkdirSync(release, { recursive: true })
+const folder = mkdtempSync(join(release, '.package-'))
+try {
+ copyFileSync(join(dev, output), join(folder, target === 'windows' ? 'easybotce.exe' : 'easybotce'))
+ copyFileSync(join(dev, 'internal', 'config', 'appsettings.example.json'), join(folder, 'appsettings.json'))
+ cpSync(join(dev, 'web', 'dist'), join(folder, 'web', 'dist'), { recursive: true })
+ for (const file of ['LICENSE', 'AUTHORS.md']) copyFileSync(join(root, file), join(folder, file))
+ writeFileSync(join(folder, '使用说明.txt'), [
+ 'EasybotCE 便携包',
+ target === 'windows' ? '解压到可写目录后,双击 easybotce.exe 启动,运行期间保持窗口打开。' : '解压后运行 ./easybotce;若缺少执行权限,先执行 chmod +x easybotce。',
+ '浏览器打开 http://127.0.0.1:5001,默认本机监听直接进入管理台,无需注册或登录。',
+ '修改同目录 appsettings.json 中 Kestrel.Endpoints.web_api.Url 可调整 WebUI 地址,保存后重启生效。',
+ 'ServerOptions 是 Bridge 配置,默认端口 26991;当前 Bridge 运行时尚未实现。',
+ '迁移时可复制原版 appsettings.json,已有文件不会被重写;旧端口按原值保留。',
+ '非本地监听可直接使用 HTTP;网页只需输入登录 Token,不需要用户名或独立 API Key。',
+ '首次自动生成 12 位 Token,在控制台显示一次;token.txt 保存哈希,后续沿用。已有原版 token.txt 可直接复制到 exe 旁。',
+ '双击启动失败时,窗口显示错误原因并等待回车关闭。',
+ '请保留包内 web 目录。运行数据自动保存到 appdata 目录。',
+ '升级前停止程序、备份并保留 appsettings.json、token.txt 和 appdata,再替换程序和 web 目录。',
+ '默认使用 SQLite,无需安装开发环境或数据库服务器。',
+ ].join('\n') + '\n', 'utf8')
+
+ if (target === 'windows' && process.platform === 'win32') {
+ env.EASYBOT_PACKAGE_DIR = folder
+ env.EASYBOT_ARCHIVE_PATH = join(release, `${name}.zip`)
+ run('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', 'Compress-Archive -Path (Join-Path $env:EASYBOT_PACKAGE_DIR "*") -DestinationPath $env:EASYBOT_ARCHIVE_PATH -Force'], root)
+ } else {
+ run('tar', ['-czf', join(release, `${name}.tar.gz`), '-C', folder, '.'], root)
+ }
+} finally {
+ // 只删除本次新建的临时打包目录,已解压的程序及数据不受影响。
+ if (dirname(folder) !== release) throw new Error('无效的清理目录')
+ rmSync(folder, { recursive: true, force: true })
+}
+console.log(`便携包已生成:${release}`)
From 1c51bd3d94df2fa905e164bb4f63aaf3f05c4aa8 Mon Sep 17 00:00:00 2001
From: BaiZhouziYou <111175934+BaizhouziYou@users.noreply.github.com>
Date: Sat, 7 Nov 2026 17:12:52 +0800
Subject: [PATCH 3/3] =?UTF-8?q?chore(contributing):=20=E7=BB=9F=E4=B8=80?=
=?UTF-8?q?=E4=B8=AD=E6=96=87=E6=8F=90=E4=BA=A4=E8=A7=84=E8=8C=83=E5=B9=B6?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AE=E7=8A=B6=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
增加中文贡献说明与开发协作约定,要求后续提交标题和正文使用中文,并通过 CI 检查新增提交标题。
明确复刻参考来源、真实功能状态与验证要求,更新 Token 登录流程和当前实现进度;保留既有英文提交历史。
---
.github/workflows/commit-language.yml | 44 +++++++++++++++++++++++++++
AGENTS.md | 12 ++++++++
CONTRIBUTING.md | 21 +++++++++++++
PLAN.md | 18 +++++------
4 files changed, 86 insertions(+), 9 deletions(-)
create mode 100644 .github/workflows/commit-language.yml
create mode 100644 AGENTS.md
create mode 100644 CONTRIBUTING.md
diff --git a/.github/workflows/commit-language.yml b/.github/workflows/commit-language.yml
new file mode 100644
index 0000000..4556521
--- /dev/null
+++ b/.github/workflows/commit-language.yml
@@ -0,0 +1,44 @@
+name: 中文提交检查
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, edited]
+ push:
+
+permissions:
+ contents: read
+
+jobs:
+ commit-language:
+ name: 提交标题使用中文
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
+ - name: 检查新增提交
+ env:
+ BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
+ HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
+ run: |
+ python3 - <<'PY'
+ import os
+ import re
+ import subprocess
+
+ base, head = os.environ['BASE_SHA'], os.environ['HEAD_SHA']
+ if not base or set(base) == {'0'}:
+ # 新分支只检查不在其他远程分支上的提交,避免追溯检查历史。
+ others = subprocess.check_output(['git', 'for-each-ref', '--format=%(objectname)', 'refs/remotes/origin/'], text=True).splitlines()
+ others = [sha for sha in others if sha != head]
+ revisions = [head, '--not', *others] if others else ['-1', head]
+ else:
+ revisions = [f'{base}..{head}']
+ commits = subprocess.check_output(['git', 'log', '--format=%h %s', *revisions], text=True).splitlines()
+ invalid = [line for line in commits if not re.search(r'[\u4e00-\u9fff]', line.partition(' ')[2])]
+ if invalid:
+ print('以下提交标题必须改为中文:\n' + '\n'.join(invalid))
+ raise SystemExit(1)
+ print(f'已检查 {len(commits)} 个新增提交。')
+ PY
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..6ced2d7
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,12 @@
+# 开发协作约定
+
+本文件适用于整个 Core 仓库及后续开发代理。
+
+- 项目目标:在已获授权的范围内复刻闭源 EasyBot 的功能和使用流程;以可验证的协议、行为和测试为依据。
+- 中文交流、中文开发文档、中文 commit 标题及正文。技术名、路径、类型标记可以保留英文,例如 `fix(web): 修复管理员登录失败`。
+- 不得改写既有历史以追溯修改英文提交。
+- 反编译参考仓库位于同组织的 EasyBot-Recovered。本地建议与 Core 并列;只用于功能、协议和接口对照。不得直接把私有参考源码或 DLL 提交到 Core。
+- 不把配置 CRUD、页面入口或模拟器通过描述为真实运行时已完成。状态说明必须区分已实现、模拟验证、真实环境验证和待实现。
+- WebUI 与管理 API 共用默认端口 5001,由 Go 进程提供构建后的页面;Bridge 独立使用 26991。Vite 仅供可选热更新,不是产品运行依赖。Bridge 运行时尚未实现时不得宣称已监听或已兼容原版插件。
+- 修改入口、配置或协议时,同步检查调用方、测试、文档及构建流程。保持修复最小,不为目录规范一次性迁移整个项目。
+- 提交前运行与改动相关的 Go 测试、go vet、前端构建;不能运行的检查写明原因。运行数据、凭据、构建产物及反编译文件不得进入版本控制。
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..c8a92f3
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,21 @@
+# 贡献规范
+
+## 中文提交规范
+
+所有后续提交的标题和正文使用中文,技术术语、代码标识和类型前缀可保留英文。推荐格式:`类型(范围): 中文摘要`,例如 `feat(bridge): 增加连接身份校验`。正文说明原因、行为变化与验证结果。合并和回滚提交同样使用中文;不追溯重写历史英文提交。
+
+CI 的中文提交检查校验每个新增提交标题是否含汉字;它只能做基本格式检查,正文语言和语义仍由人工评审。要强制所有贡献者遵守中文提交规范,需要在 GitHub 分支保护中将该检查设置为必需,并限制直接推送与绕过权限。
+
+## 开发与验证
+
+当前实现位于 `dev/`:`cmd/easybot` 为入口,`internal` 为后端,`web` 为前端。使用 Go 1.24+ 与 Node.js 20.19+,依赖以 `go.mod/go.sum` 和 `package-lock.json` 为准。详细运行方法见 [开发说明](dev/README.md)。
+
+后端在 `dev` 执行 `go test ./...` 和 `go vet ./...`;前端在 `dev/web` 执行 `npm ci` 和 `npm run build`。涉及 MySQL/PostgreSQL 时使用空的专用测试库执行集成检查。Windows 启动改动需要验证从其他工作目录启动 exe,并在验证后停止服务。
+
+PR 使用中文说明问题、最终行为和验证结果。为非平凡修复保留能暴露原问题的测试;不要把默认跳过的外部数据库测试描述为已验证通过。
+
+## 复刻依据与边界
+
+EasyBot-Recovered 是同组织的私有参考仓库,包含发布包恢复记录、反编译模块以及独立 .NET 重建脚手架。它不是可直接构建的原版源码;Go Core 是独立实现。
+
+新增功能先记录原版模块或接口依据,再定义当前实现的协议、数据及验收标准。NativeAOT 无法恢复的内容标注为未知,不推断实现细节。参考代码及 DLL 不复制进公开 Core;如确有复制需求,先确认授权与分发范围。
diff --git a/PLAN.md b/PLAN.md
index 2a0ff9a..748a23f 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -46,7 +46,7 @@ EasyBot 是连接 Minecraft 服务器与 QQ 等社交平台的机器人管理工
- 明确配置格式、环境变量覆盖规则、数据目录、日志格式和版本策略。
- 建立 Go 模块边界:配置、存储、HTTP API、运行时、适配器、Minecraft 网关、消息路由、日志与安全。
- 建立数据库迁移机制、健康检查、优雅关闭、结构化日志、API 错误格式和分页规范。
-- 完成首次管理员初始化、密码/API 凭据安全存储、会话/令牌策略、CSRF/CORS/来源约束及敏感配置脱敏。
+- 完成原版式 Token 登录、凭据安全存储、会话/令牌策略、CSRF/CORS/来源约束及敏感配置脱敏。
- 交付:可启动的单体服务、Vue 管理壳、安装文档、SQLite 默认配置和三种数据库的 CI 测试。
### 阶段 1:最小可用消息闭环(MVP)
@@ -180,13 +180,13 @@ Vue 管理台 --HTTP/SSE--> Go API 与认证
## 11. 当前仓库基线与下一步
-截至 2026-11-01,`dev/` 已有 Go HTTP 主机、SQLite/MySQL/PostgreSQL 驱动、版本化迁移、基础 CRUD、适配器类型登记、适配器启动接口占位、有界内存运行日志、仪表盘汇总接口,以及 Vue 3/TypeScript/Tailwind v4 管理台。当前迁移版本为 v2:保留原通用 `records` 表,并新增单管理员 `users`、哈希会话 `sessions` 和一次性初始化状态 `setup_state`。首次管理员初始化要求回环远端地址及本机 Host/Origin;密码以 bcrypt 保存,会话仅存 SHA-256 摘要,浏览器使用 HttpOnly、SameSite=Strict Cookie,12 小时过期;登录按远端 IP 限流。管理 API 默认要求会话,显式设置 `EASYBOT_API_KEY` 时也接受 Bearer 认证。前端现有首次初始化、登录、退出和受保护控制台入口。监听地址校验仍要求非回环监听配置 API Key 与 TLS,服务支持优雅退出。
+截至 2026-11-07,`dev/` 已有 Go HTTP 主机、SQLite/MySQL/PostgreSQL 驱动、版本化迁移、基础 CRUD、OneBot 11 正向 WebSocket 适配器、有界内存与持久化运行日志、仪表盘汇总接口,以及 Vue 3/TypeScript/Tailwind v4 管理台。当前迁移版本为 v4。回环监听且访问来源、Host/Origin 均为本机时免登录;非回环监听统一使用 Token 登录,无需用户名或独立 API Key,支持 HTTP 和可选 HTTPS。`token.txt` 沿用原版 SHA-256 原始 32 字节格式,缺失时首次生成 12 位 Token 并在控制台显示一次。会话只保存 SHA-256 摘要,浏览器使用 HttpOnly、SameSite=Strict Cookie,7 天过期;更换 Token 后重启会清除旧会话,登录按远端 IP 限流。前端提供 Token 登录、退出和受保护控制台入口,服务支持优雅退出。
-这些交付只完成了管理底座的一部分,不代表规划功能已完成:目前只有单管理员认证,没有角色/多用户、CSRF Token、权限矩阵和持久审计;适配器/服务器/群组/玩家/命令等业务数据仍使用通用 `records` 表;MySQL/PostgreSQL 尚未完成集成迁移验证;适配器和 Minecraft Bridge 运行时未实现;群组发现、消息路由投递、玩家绑定、命令执行、持久化统计、备份恢复和扩展能力均未形成端到端功能。概览只显示数据库配置数和明确标注的待连接状态,不能把配置存在推断成连接在线或消息成功。
+这些交付只完成了管理底座的一部分,不代表规划功能已完成:目前使用单 Token 认证,没有角色/多用户、CSRF Token、权限矩阵和持久审计;适配器/服务器/群组/玩家/命令等业务数据仍使用通用 `records` 表;MySQL/PostgreSQL 尚未完成本机集成迁移验证;OneBot 11 已有模拟器验证,真实账号尚未验证,其他平台适配器和 Minecraft Bridge 运行时未实现;跨平台消息路由投递、玩家绑定、命令执行、持久化统计、备份恢复和扩展能力均未形成端到端功能。概览不能把配置存在推断成连接在线或消息成功。
建议按以下次序继续实施:
-1. 明确单管理员首版范围,补充会话密钥/轮换、CSRF 策略和操作审计;将通用 `records` 逐步拆为正式领域模型,并验证 SQLite/MySQL/PostgreSQL 同一迁移契约。
+1. 补充单 Token 认证的 CSRF 策略和操作审计;将通用 `records` 逐步拆为正式领域模型,并验证 SQLite/MySQL/PostgreSQL 同一迁移契约。
2. 冻结平台事件、消息、路由规则和 Minecraft 桥接协议的数据契约。
3. 选定一个目标社交适配器和一种服务器桥接端,完成最小端到端消息闭环,并以真实健康状态驱动概览。
4. 将账号绑定、访问控制和命令纳入该闭环,再开展 AI、图片模板和脚本扩展。
@@ -195,15 +195,15 @@ Vue 管理台 --HTTP/SSE--> Go API 与认证
## 12. 关键业务流程
-### 12.1 首次启动与管理员初始化
+### 12.1 首次启动与 Token 登录
1. 程序读取配置文件,叠加环境变量,校验监听地址、数据库 DSN、数据目录和密钥引用。
2. 建立数据库连接,读取迁移版本;执行向前迁移。迁移失败时停止启动并输出可诊断错误,不启动半初始化服务。
-3. 如果没有管理员账号,服务只开放健康检查和本机初始化页面/API;初始化凭据只能在本机回环访问,成功创建后立即失效。
-4. 管理员设置用户名、密码和可选的恢复密钥;系统生成会话密钥并提示配置备份策略。
+3. 回环监听时允许本机直接进入管理台;非回环监听时读取原版格式的 `token.txt`,缺失则自动生成 12 位 Token,明文仅在首次启动控制台显示。
+4. 非本地模式在网页输入 Token 登录,获得 7 天会话;忘记 Token 时停止程序并删除 `token.txt`,重启生成新 Token 并清除旧会话。
5. 进入控制台后按引导顺序配置社交适配器、服务器桥接端和同步规则。
-验收点:未初始化服务不能从非本机地址创建管理员;初始化入口只能成功使用一次;敏感值在日志和 API 响应中不可见。
+验收点:非本地模式不能绕过 Token 访问管理 API;重启沿用 Token,替换 Token 后旧会话失效;除首次控制台提示外,不在运行日志或 API JSON 响应中暴露凭据。
### 12.2 消息同步
@@ -308,7 +308,7 @@ Vue 管理台 --HTTP/SSE--> Go API 与认证
```yaml
server:
- listen: 127.0.0.1:26990
+ listen: 127.0.0.1:5001
public_url: ""
database:
driver: sqlite