Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
  •  
  •  
  •  
6 changes: 2 additions & 4 deletions dashboard/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# AstrBot React Dashboard

这是 AstrBot Dashboard 的 React + TypeScript 实现。所有启用路由均由 React 提供,新版开发和构建流程不再启动、构建或复制 Vue Dashboard
这是 AstrBot Dashboard 的 React + TypeScript 实现,也是桌面端唯一维护的 WebUI

旧版 `dashboard/` 仍作为只读的行为与样式参考保留,不属于新版运行时依赖。

请从仓库根目录使用统一命令启动或构建,详见 [`../docs/dashboard-react-migration.md`](../docs/dashboard-react-migration.md)。
请从仓库根目录使用统一命令启动或构建,详见 [`../docs/development.md`](../docs/development.md)。
迁移期 endpoint、存储和响应兼容层的删除条件见
[`../docs/dashboard-compatibility-exit-plan.md`](../docs/dashboard-compatibility-exit-plan.md)。

Expand Down
2 changes: 1 addition & 1 deletion dashboard/src/api/compat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const compatibilityExitPlan: readonly CompatibilityExitItem[] = [
{
id: 'legacy-storage',
minimumBackendVersion: 'Not backend-dependent',
removalCondition: 'One stable release has migrated uiTheme and the Vue Dashboard rollback window is closed.',
removalCondition: 'One stable release has migrated uiTheme and no supported release requires the old key.',
targetDashboardVersion: '2.0.0',
},
{
Expand Down
2 changes: 1 addition & 1 deletion dashboard/src/api/http.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { memoryStorage } from '@/test/storage';
import { ApiError, apiRequest, fetchWithAuth } from './http';

describe('apiRequest', () => {
it('preserves token and locale headers used by the legacy dashboard', async () => {
it('preserves the established token and locale headers', async () => {
const fetchMock = vi.fn<typeof fetch>().mockResolvedValue(
jsonResponse({
data: { ready: true },
Expand Down
2 changes: 1 addition & 1 deletion dashboard/src/routes/configuration/providerIcons.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { describe, expect, it } from 'vitest';
import { getProviderIcon, PROVIDER_ICON_URLS } from './providerIcons';

describe('provider icons', () => {
it('ports every provider icon mapping from the legacy dashboard', () => {
it('covers every supported provider icon mapping', () => {
expect(Object.keys(PROVIDER_ICON_URLS)).toEqual([
'openai',
'azure',
Expand Down
2 changes: 1 addition & 1 deletion dashboard/src/routes/extensions/extensionModel.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ describe('extension model helpers', () => {
expect(markdownContent({ content: '# README' })).toBe('# README');
});

it('normalizes the keyed marketplace response used by the legacy dashboard', () => {
it('normalizes keyed marketplace responses', () => {
const payload = {
$meta: { name: 'AstrBot', total: 2 },
astrbot_plugin_weather: { author: 'Alice', desc: 'Forecast' },
Expand Down
4 changes: 2 additions & 2 deletions dashboard/src/styles/features/_extensions.scss
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@
.extension-market-card footer .button--primary { background: var(--astrbot-primary); color: #fff; }
.extension-market-card footer .is-installed { background: var(--astrbot-success); color: #fff; opacity: .72; }

/* Legacy Dashboard MCP and Skills sections */
/* MCP and Skills sections */
.resource-page { position: relative; min-height: 100%; padding: 8px 4px 100px; }
.resource-list { display: flex; flex-direction: column; gap: 12px; }
.resource-list-item { display: flex; min-height: 104px; align-items: center; justify-content: space-between; gap: 16px; padding: 16px; border: 1px solid var(--astrbot-border); border-radius: 10px; background: var(--astrbot-surface); cursor: pointer; transition: background .16s; }
Expand Down Expand Up @@ -419,7 +419,7 @@
.extension-config-editor--detail { height: 60vh; margin-top: 18px; padding: 14px; border: 1px solid var(--astrbot-border); border-radius: 12px; }
.extension-config-editor--detail > div:last-child { display: flex; justify-content: flex-end; gap: 8px; margin-top: 10px; }

/* Installed plugin cards mirror the legacy dashboard layout and interactions. */
/* Installed plugin cards */
.extension-installed__header { display: flex; min-width: 0; align-items: center; justify-content: space-between; gap: 18px; margin: 16px 0 24px; }
.extension-installed__header h2 { margin: 0; font-size: clamp(24px, 2.2vw, 32px); }
.extension-installed__search { display: flex; width: min(340px, 100%); min-height: 44px; align-items: center; gap: 8px; padding: 0 12px; border-radius: 10px; background: color-mix(in srgb, var(--astrbot-text) 5%, var(--astrbot-surface)); color: color-mix(in srgb, var(--astrbot-text) 52%, transparent); }
Expand Down
8 changes: 4 additions & 4 deletions docs/dashboard-compatibility-exit-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

1. 产品声明的最低 AstrBot Core 版本已经包含对应的 v1 API 或稳定数据契约。
2. 至少一个稳定发布周期内未收到旧分支命中报告,并完成旧 Core、升级中断和浏览器存储升级场景回归。
3. Vue Dashboard 回退窗口已经由维护者明确关闭
3. 旧版主题与持久化格式的兼容周期已经由维护者明确结束

当前仓库只声明兼容 AstrBot Core 4.x,没有更精确的后端最低版本合同。因此,表中的“Core 4.x
兼容基线”是继续保留兼容的最低版本,不代表可以立即删除;维护者提高产品最低 Core 版本时,必须在同一
Expand All @@ -18,13 +18,13 @@ PR 中填入已验证的精确版本并执行删除检查。
| --- | --- | --- | --- | --- |
| `api-endpoint-fallback` | `dashboard/src/api/compat.ts`、`dashboard/src/api/auth.ts`:认证、版本、统计、更新与 pip 操作先请求 v1,只有 v1 返回 404 或历史 `Missing API key` 响应时请求 unversioned endpoint | Core 4.x 兼容基线 | 产品最低 Core 版本提供登记的全部 v1 endpoint;404/缺 key 回退连续一个稳定周期为零;认证、更新、重启回归通过 | dashboard 2.0.0 |
| `legacy-recovery` | `dashboard/src/api/compat.ts`、`dashboard/src/auth/upgradeRecovery.ts`:WebUI 已更新但 Core 进程未重启时,以 token 请求 `/api/stat/version`、`start-time`、`restart-core` | Core 4.x 兼容基线 | 更新流程保证 WebUI/Core 原子切换,或最低 Core 提供不依赖当前进程版本的 v1 恢复端点;升级中断测试通过 | dashboard 2.0.0 |
| `legacy-storage` | `dashboard/src/config/storageKeys.ts`、`preferences.ts`、`stores/layout.ts`:读取并双写 Vue 使用的 `uiTheme`;其他 `token`、`user`、聊天和代理 key 是新旧 Dashboard 的共享持久化合同,不是可直接删除的双写 | 不依赖后端 | `themeMode` 已随一个稳定版本写入用户浏览器;Vue 回退窗口关闭;删除 `uiTheme` 读取、双写和对应测试后,明暗/跟随系统主题回归通过 | dashboard 2.0.0 |
| `legacy-storage` | `dashboard/src/config/storageKeys.ts`、`preferences.ts`、`stores/layout.ts`:读取并双写历史版本使用的 `uiTheme`;其他 `token`、`user`、聊天和代理 key 是跨版本共享的持久化合同,不是可直接删除的双写 | 不依赖后端 | `themeMode` 已随一个稳定版本写入用户浏览器;旧格式兼容周期结束;删除 `uiTheme` 读取、双写和对应测试后,明暗/跟随系统主题回归通过 | dashboard 2.0.0 |
| `response-envelope` | `dashboard/src/api/response.ts`、`dashboard/src/desktop/DesktopProvider.tsx`:兼容 Axios 外层 `data`、API envelope 和桌面端历史嵌套 envelope | OpenAPI v1 合同,Core 4.x 兼容基线 | 所有启用 endpoint 和桌面桥使用单一生成类型;移除兼容分支后 API、桌面启动及错误 envelope 测试通过 | dashboard 2.0.0 |
| `legacy-chat-files` | `dashboard/src/config/endpoints.ts`、`dashboard/src/routes/chat/ChatMessageList.tsx`:聊天附件仍使用 `/api/chat/attachment` 与 `/api/chat/get_file`,当前没有双请求 | Core 4.x 兼容基线 | 后端提供并发布等价 v1 文件 endpoint,产品最低 Core 版本包含它;历史消息附件回归通过 | 后端 v1 文件 API 发布后的下一个 dashboard major |
| `persistence-envelope` | `dashboard/src/config/persistence.ts`:把未版本化 localStorage 值一次性迁移为 `{ data, version }` | 不依赖后端 | 所有受支持浏览器数据至少经历一个稳定迁移周期,且产品接受清除更旧的本地偏好 | dashboard 2.0.0 |

样式中的 `legacy-resource-*`、`legacy-fab-stack` 以及 Vue 迁移说明不承担运行时兼容职责,已在建立本计划时
改为领域命名;以后不允许以 `legacy` 或 `Vue` 注释代替明确的兼容登记。
样式中的历史迁移命名不承担运行时兼容职责,已在建立本计划时改为领域命名;以后不允许以模糊的
`legacy` 注释代替明确的兼容登记。

## 回退触发合同

Expand Down
61 changes: 0 additions & 61 deletions docs/dashboard-react-migration.md

This file was deleted.

7 changes: 3 additions & 4 deletions docs/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ ASTRBOT_SOURCE_GIT_URL=https://github.com/AstrBotDevs/AstrBot.git
ASTRBOT_SOURCE_GIT_REF=master
```

`.env` 仅用于本机且已被 Git 忽略。`pnpm run dev` 会自动把远端源码准备到 `vendor/AstrBot` 后再启动;`pnpm run build` 和资源准备脚本也会自动加载 `.env`。已有的进程环境变量优先级高于 `.env`。仅在明确需要使用现有本地源码时才设置 `ASTRBOT_SOURCE_DIR`。
`.env` 仅用于本机且已被 Git 忽略。`pnpm run dev` 会自动把远端源码准备到 `vendor/AstrBot` 后再启动;`pnpm run build` 和资源准备脚本也会自动加载 `.env`。已有的进程环境变量优先级高于 `.env`。托管源码同步完成后会删除上游仓库自带的 `dashboard/`,确保桌面端只使用本仓库维护的 React Dashboard。仅在明确需要使用现有本地源码时才设置 `ASTRBOT_SOURCE_DIR`;显式指定的源码目录由用户管理,不会执行上述删除

推荐直接使用 Makefile:

Expand Down Expand Up @@ -75,9 +75,8 @@ pnpm --dir dashboard dev

独立前端开发服务默认监听 `1420`,并把 `/api` 代理到本机 AstrBot 后端 `http://127.0.0.1:6185/`。

React Dashboard 已成为唯一默认前端,目录位于 `dashboard/`。旧版 Vue 工程仅保留在
`legacy-dashboard/` 供人工对照,不参与默认命令、资源准备或 CI。迁移边界见
[`dashboard-react-migration.md`](./dashboard-react-migration.md)。
React Dashboard 是唯一维护和构建的前端,目录位于 `dashboard/`。默认命令、资源准备、
桌面打包和 CI 均以该目录为准。

本地执行 `pnpm run build` 时,如果未设置 `TAURI_SIGNING_PRIVATE_KEY`,启动脚本会保留 MSI/NSIS 安装包构建,但跳过需要发布私钥的 updater 签名产物。正式发布流水线提供该私钥,因此仍会按 `tauri.conf.json` 生成并签名 updater artifacts。

Expand Down
2 changes: 1 addition & 1 deletion docs/environment-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ WebUI 源码固定来自本仓库 `dashboard/`,`pnpm run prepare:webui` 不解

本地开发推荐把这些变量写入仓库根目录 `.env`(从 `.env.example` 复制)。Tauri 的 `dev`/`build` 启动脚本及资源准备入口会自动加载该文件,同时保留外部进程环境变量的更高优先级。

默认开发流程不设置 `ASTRBOT_SOURCE_DIR`;`pnpm run dev` 会根据 `ASTRBOT_SOURCE_GIT_URL` / `ASTRBOT_SOURCE_GIT_REF` 将源码准备到 `vendor/AstrBot`。`ASTRBOT_SOURCE_DIR` 仅作为显式本地源码覆盖项。
默认开发流程不设置 `ASTRBOT_SOURCE_DIR`;`pnpm run dev` 会根据 `ASTRBOT_SOURCE_GIT_URL` / `ASTRBOT_SOURCE_GIT_REF` 将源码准备到 `vendor/AstrBot`,并在同步后删除上游源码中的 `dashboard/`。`ASTRBOT_SOURCE_DIR` 仅作为显式本地源码覆盖项,其目录内容不会被资源准备脚本删除

| 变量 | 用途 | 默认值/行为 |
| --- | --- | --- |
Expand Down
2 changes: 0 additions & 2 deletions docs/repository-structure.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
- 桌面壳层核心(Rust + Tauri 配置)。
- `dashboard/`
- Desktop 仓库直接维护的 React/Vite WebUI 源码、OpenAPI 快照与前端静态资源。
- `legacy-dashboard/`
- 只读保留的旧版 Vue Dashboard,仅供人工迁移对照,不参与默认构建与 CI。
- `scripts/`
- 构建、资源准备、CI 辅助脚本。
- `resources/`
Expand Down
4 changes: 0 additions & 4 deletions legacy-dashboard/.gitignore

This file was deleted.

21 changes: 0 additions & 21 deletions legacy-dashboard/LICENSE

This file was deleted.

16 changes: 0 additions & 16 deletions legacy-dashboard/README.md

This file was deleted.

1 change: 0 additions & 1 deletion legacy-dashboard/env.d.ts

This file was deleted.

49 changes: 0 additions & 49 deletions legacy-dashboard/index.html

This file was deleted.

Loading
Loading