新增正则和扩展模块

This commit is contained in:
2026-02-11 23:44:09 +08:00
parent 2bca8e2788
commit 4e611d3a5e
47 changed files with 10058 additions and 49 deletions

View File

@@ -0,0 +1,228 @@
# 扩展模块修复说明
## 问题描述
1. **数据库错误**:点击扩展配置时报错 `ERROR: relation "ai_extension_settings" does not exist`
2. **UI 不符合预期**:原来是表格式,用户希望是折叠面板式(类似原版 SillyTavern
## 修复内容
### 1. 简化数据库设计
**问题**:原设计使用独立的 `ai_extension_settings` 表存储用户配置,导致表不存在时报错。
**解决方案**:取消 `ai_extension_settings` 表,直接将配置存储在 `ai_extensions` 表的 `settings` 字段中。
**修改文件**
- `server/model/app/ai_extension.go` - 注释掉 `AIExtensionSettings` 结构体
- `server/initialize/gorm.go` - 移除 `AIExtensionSettings` 表注册
- `server/service/app/extension.go` - 简化配置获取和更新逻辑
### 2. 重新设计 UI 为折叠面板式
**新界面特点**
- ✅ 折叠面板布局(类似原版 SillyTavern
- ✅ 每个扩展可展开查看详情和配置
- ✅ 启用/禁用开关在标题栏
- ✅ 配置项根据 manifest.json 动态生成
- ✅ 支持多种配置类型:
- 文本输入text/string
- 数字输入number
- 布尔开关boolean/checkbox
- 下拉选择select
- 文本域textarea
- 滑块slider
**新文件**
- `web-app-vue/src/views/extension/ExtensionListNew.vue` - 全新的折叠面板式界面
**修改文件**
- `web-app-vue/src/router/index.ts` - 更新路由指向新界面
### 3. 优化配置处理逻辑
**后端改进**
```go
// GetExtensionSettings - 改进版
func (es *ExtensionService) GetExtensionSettings(userID, extensionID uint) (map[string]interface{}, error) {
// 1. 验证扩展存在
// 2. 返回扩展的 settings 字段
// 3. 如果为空,从 manifestData 中提取默认配置
// 4. 确保总是返回有效的配置对象(至少是空对象)
}
// UpdateExtensionSettings - 简化版
func (es *ExtensionService) UpdateExtensionSettings(userID, extensionID uint, settings map[string]interface{}) error {
// 直接更新扩展表的 settings 字段
}
```
## 使用说明
### 安装扩展
支持三种安装方式:
1. **从文件导入**:上传 `manifest.json` 文件
2. **从 Git 安装**:输入 Git 仓库 URL支持 GitHub、GitLab、Gitee 等)
3. **从 URL 安装**:直接输入 `manifest.json` 文件的 URL
### 管理扩展
1. **启用/禁用**:点击扩展标题栏的开关
2. **查看详情**:点击扩展面板展开
3. **配置扩展**:展开后直接编辑配置项,自动保存
4. **导出扩展**:点击"导出"按钮下载 `manifest.json`
5. **卸载扩展**:点击删除按钮(系统扩展不可卸载)
### 配置项说明
扩展的配置项根据 `manifest.json` 中的 `settings` 定义自动生成。例如:
```json
{
"name": "example-extension",
"settings": {
"apiKey": {
"type": "text",
"label": "API 密钥",
"description": "请输入您的 API 密钥",
"placeholder": "sk-..."
},
"maxRetries": {
"type": "number",
"label": "最大重试次数",
"min": 1,
"max": 10,
"step": 1
},
"enabled": {
"type": "boolean",
"label": "启用此功能"
}
}
}
```
## manifest.json 配置项类型
支持的配置项类型:
| 类型 | 说明 | 示例 |
|------|------|------|
| `text` / `string` | 文本输入框 | API 密钥、URL 等 |
| `number` | 数字输入框 | 重试次数、超时时间等 |
| `boolean` / `checkbox` | 开关 | 启用/禁用功能 |
| `select` | 下拉选择 | 选择模型、语言等 |
| `textarea` | 多行文本 | 提示词、说明文字等 |
| `slider` | 滑块 | 温度、概率等 |
## 测试步骤
1. **重启后端服务**:确保新的代码生效
2. **访问扩展管理页面**`/extension`
3. **安装一个测试扩展**
- 创建一个简单的 `manifest.json`
- 从文件导入或 Git URL 安装
4. **测试配置功能**
- 点击扩展面板展开
- 修改配置项
- 刷新页面确认配置已保存
5. **测试启用/禁用**
- 点击开关切换状态
- 确认状态已保存
## 示例 manifest.json
```json
{
"name": "example-extension",
"display_name": "示例扩展",
"version": "1.0.0",
"description": "这是一个示例扩展",
"author": "Your Name",
"type": "ui",
"category": "utilities",
"settings": {
"enabled": {
"type": "boolean",
"label": "启用扩展",
"description": "是否启用此扩展的功能",
"default": true
},
"apiEndpoint": {
"type": "text",
"label": "API 端点",
"description": "API 服务器地址",
"placeholder": "https://api.example.com"
},
"timeout": {
"type": "number",
"label": "超时时间(秒)",
"min": 1,
"max": 300,
"step": 1,
"default": 30
},
"model": {
"type": "select",
"label": "选择模型",
"options": [
{ "label": "GPT-4", "value": "gpt-4" },
{ "label": "GPT-3.5", "value": "gpt-3.5-turbo" }
],
"default": "gpt-3.5-turbo"
},
"prompt": {
"type": "textarea",
"label": "系统提示词",
"rows": 5,
"placeholder": "输入系统提示词..."
},
"temperature": {
"type": "slider",
"label": "温度",
"min": 0,
"max": 2,
"step": 0.1,
"default": 1.0
}
}
}
```
## 技术细节
### 数据库字段
扩展配置存储在 `ai_extensions` 表的以下字段:
- `manifest_data` (JSONB):完整的 `manifest.json` 内容,包含 `settings` 定义
- `settings` (JSONB):用户的实际配置值
### 配置加载顺序
1.`ai_extensions.settings` 读取用户配置
2. 如果为空,从 `ai_extensions.manifest_data.settings` 提取默认值
3. 合并配置,用户配置优先
### 配置保存
用户修改配置后,直接更新 `ai_extensions.settings` 字段。
## 注意事项
1. **配置格式**`manifest.json` 中的 `settings` 字段是配置项的**定义**schema而不是配置值
2. **默认值**:可以在配置项定义中指定 `default` 字段
3. **验证**:前端会根据类型自动验证(如 `min``max``step` 等)
4. **自动保存**:修改配置后会自动保存,无需手动点击保存按钮
## 未来改进
- [ ] 支持更多配置项类型(颜色选择器、文件选择器等)
- [ ] 配置项分组和标签页
- [ ] 配置导入/导出
- [ ] 配置重置到默认值
- [ ] 配置历史记录
- [ ] 扩展依赖检查和冲突提示

View File

@@ -0,0 +1,99 @@
{
"name": "example-extension",
"display_name": "示例扩展",
"version": "1.0.0",
"description": "这是一个用于测试的示例扩展,展示了各种配置项类型",
"author": "测试作者",
"homepage": "https://github.com/example/extension",
"repository": "https://github.com/example/extension",
"license": "MIT",
"type": "ui",
"category": "utilities",
"tags": ["测试", "示例", "配置"],
"settings": {
"enabled": {
"type": "boolean",
"label": "启用扩展",
"description": "是否启用此扩展的所有功能"
},
"apiKey": {
"type": "text",
"label": "API 密钥",
"placeholder": "sk-...",
"description": "请输入您的 API 密钥(用于访问外部服务)"
},
"apiEndpoint": {
"type": "text",
"label": "API 端点",
"placeholder": "https://api.example.com",
"description": "API 服务器地址"
},
"maxRetries": {
"type": "number",
"label": "最大重试次数",
"min": 1,
"max": 10,
"step": 1,
"description": "请求失败时的最大重试次数"
},
"timeout": {
"type": "number",
"label": "超时时间(秒)",
"min": 5,
"max": 300,
"step": 5,
"description": "API 请求的超时时间"
},
"temperature": {
"type": "slider",
"label": "温度",
"min": 0,
"max": 2,
"step": 0.1,
"description": "控制生成内容的随机性0=确定性2=高随机性)"
},
"model": {
"type": "select",
"label": "选择模型",
"options": [
{ "label": "GPT-4", "value": "gpt-4" },
{ "label": "GPT-3.5 Turbo", "value": "gpt-3.5-turbo" },
{ "label": "Claude 3", "value": "claude-3" }
],
"description": "选择要使用的 AI 模型"
},
"systemPrompt": {
"type": "textarea",
"label": "系统提示词",
"rows": 4,
"placeholder": "输入系统提示词...",
"description": "用于指导 AI 行为的系统提示词"
},
"logLevel": {
"type": "select",
"label": "日志级别",
"options": [
{ "label": "调试", "value": "debug" },
{ "label": "信息", "value": "info" },
{ "label": "警告", "value": "warn" },
{ "label": "错误", "value": "error" }
],
"description": "控制台日志的详细程度"
},
"autoSave": {
"type": "boolean",
"label": "自动保存",
"description": "自动保存对话历史"
},
"saveInterval": {
"type": "number",
"label": "保存间隔(秒)",
"min": 10,
"max": 600,
"step": 10,
"description": "自动保存的时间间隔"
}
},
"dependencies": {},
"conflicts": []
}

View File

@@ -12,8 +12,8 @@
| 阶段 | 进度 | 状态 | 开始日期 | 完成日期 |
|------|------|------|----------|----------|
| 阶段一:数据库设计 | 100% | 🟢 已完成 | 2026-02-10 | 2026-02-10 |
| 阶段二Go后端API开发 | 40% | 🔵 进行中 | 2026-02-10 | - |
| 阶段三Vue3前台开发 | 45% | 🔵 进行中 | 2026-02-10 | - |
| 阶段二Go后端API开发 | 65% | 🔵 进行中 | 2026-02-10 | - |
| 阶段三Vue3前台开发 | 70% | 🔵 进行中 | 2026-02-10 | - |
| 阶段四:前端改造(旧版) | 0% | ⚪ 暂停 | - | - |
| 阶段五:数据迁移 | 0% | ⚪ 未开始 | - | - |
| 阶段六:测试与优化 | 0% | ⚪ 未开始 | - | - |
@@ -243,7 +243,7 @@
### 2.1 基础设施搭建
- [ ] **T2.1.1** 安装 Go 依赖包
- [x] **T2.1.1** 安装 Go 依赖包
- 负责人:
- 优先级P0必须
- 预计时间0.5天
@@ -256,14 +256,14 @@
go get github.com/pkoukk/tiktoken-go@latest
```
- [ ] **T2.1.2** 创建项目目录结构
- [x] **T2.1.2** 创建项目目录结构
- 负责人:
- 优先级P0必须
- 预计时间0.5天
- 状态:⚪ 未开始
- 目录:`api/v1/app/`, `service/app/`, `router/app/`, `pkg/`
- [ ] **T2.1.3** 配置文件扩展
- [x] **T2.1.3** 配置文件扩展
- 负责人:
- 优先级P0必须
- 预计时间0.5天
@@ -757,6 +757,240 @@
- 状态:⚪ 未开始
- 命令:`swag init`
### 2.13 世界书管理
- [x] **T2.13.1** 完善 AIWorldInfo 数据模型
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`server/model/app/ai_world_info.go`
- 功能:支持 SillyTavern 完整规范递归激活、Token预算、正则表达式等
- [x] **T2.13.2** 创建世界书请求/响应结构体
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:
- `server/model/app/request/world_info.go`
- `server/model/app/response/world_info.go`
- [x] **T2.13.3** 创建世界书 Service 层
- 负责人AI助手
- 优先级P1重要
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`server/service/app/world_info.go`
- 功能:
- CRUD 操作
- 导入导出JSON
- 关键词匹配引擎(支持正则、大小写、整词匹配)
- 递归激活
- 分组过滤
- Token 预算管理
- [x] **T2.13.4** 创建世界书 API 层
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`server/api/v1/app/world_info.go`
- 接口:创建、更新、删除、列表、详情、复制、导入导出、匹配
- [x] **T2.13.5** 创建世界书路由
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`server/router/app/world_info.go`
- [x] **T2.13.6** 注册世界书路由
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 在 `server/initialize/router.go` 中注册 `/app/worldbook` 路由组
### 2.14 正则脚本管理
- [x] **T2.14.1** 创建正则脚本数据模型
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/model/app/ai_regex_script.go`
- 功能:支持 SillyTavern Regex Scripts 完整规范(查找/替换、深度控制、应用位置等)
- [x] **T2.14.2** 创建正则脚本请求/响应结构体
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:
- `server/model/app/request/regex_script.go`
- `server/model/app/response/regex_script.go`
- [x] **T2.14.3** 创建正则脚本 Service 层
- 负责人AI助手
- 优先级P1重要
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/service/app/regex_script.go`
- 功能:
- CRUD 操作
- 导入导出JSON
- 测试功能
- 应用功能(批量处理文本)
- 关联角色管理
- 复制功能
- [x] **T2.14.4** 创建正则脚本 API 层
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/api/v1/app/regex_script.go`
- 接口:创建、更新、删除、列表、详情、复制、导入导出、测试、应用
- [x] **T2.14.5** 创建正则脚本路由
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/router/app/regex_script.go`
- [x] **T2.14.6** 注册正则脚本路由
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 在 `server/initialize/router.go` 中注册 `/app/regex` 路由组
- [x] **T2.14.7** 实现角色卡导入时自动导入正则脚本
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 功能:
- 导入角色卡时自动解析 Extensions 中的 regex_scripts 数据
- 将正则脚本转换并保存到 `ai_regex_scripts` 表
- 自动关联脚本到角色
- 导出角色卡时自动包含关联的正则脚本数据
- 完全兼容 SillyTavern CharacterCard V2 规范
### 2.15 扩展管理
- [x] **T2.15.1** 创建扩展数据模型
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/model/app/ai_extension.go`
- 功能:支持 SillyTavern Extension 完整规范manifest.json、UI/Server/Hybrid 类型、依赖管理等)
- [x] **T2.15.2** 创建扩展请求/响应结构体
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:
- `server/model/app/request/extension.go`
- `server/model/app/response/extension.go`
- [x] **T2.15.3** 创建扩展 Service 层
- 负责人AI助手
- 优先级P1重要
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/service/app/extension.go`
- 功能:
- CRUD 操作
- 导入导出manifest.json
- 启用/禁用管理
- 依赖检查和冲突检测
- 配置管理
- 统计信息
- [x] **T2.15.4** 创建扩展 API 层
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/api/v1/app/extension.go`
- 接口:创建、更新、删除、列表、详情、启用/禁用、配置、导入导出、统计
- [x] **T2.15.5** 创建扩展路由
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`server/router/app/extension.go`
- [x] **T2.15.6** 注册扩展路由
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 在 `server/initialize/router.go` 中注册 `/app/extension` 路由组
- [x] **T2.15.7** 修复扩展 API 路径参数解析错误
- 负责人AI助手
- 优先级P0紧急
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 问题:点击扩展详情和配置按钮时报错 `扩展不存在`SQL 查询显示 `id = 0`
- 原因:使用 `c.GetUint("id")` 无法获取 URL 路径参数
- 解决方案:改用 `c.Param("id")` 获取路径参数并转换为 uint
- 影响范围:`UpdateExtension`、`DeleteExtension`、`GetExtension`、`ToggleExtension`、`UpdateExtensionSettings`、`GetExtensionSettings`、`GetExtensionManifest`、`ExportExtension`
- 文件:`server/api/v1/app/extension.go`
- [x] **T2.15.8** 重构扩展 UI 为折叠面板式并简化配置存储
- 负责人AI助手
- 优先级P0紧急
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 问题:
1. 数据库错误:`ERROR: relation "ai_extension_settings" does not exist`
2. UI 不符合预期:表格式而非折叠面板式
- 解决方案:
1. **简化数据库设计**:取消 `ai_extension_settings` 表,配置直接存储在 `ai_extensions.settings` 字段
2. **重新设计 UI**:采用折叠面板式布局,完全仿照 SillyTavern 原版设计
- 修改文件:
- `server/model/app/ai_extension.go` - 注释 AIExtensionSettings 结构体
- `server/initialize/gorm.go` - 移除表注册
- `server/service/app/extension.go` - 简化配置 CRUD 逻辑
- `web-app-vue/src/views/extension/ExtensionListNew.vue` - 全新折叠面板界面
- `web-app-vue/src/router/index.ts` - 更新路由
- 新特性:
- ✅ 折叠面板布局el-collapse
- ✅ 配置项根据 manifest.json 动态生成
- ✅ 支持多种配置类型text、number、boolean、select、textarea、slider
- ✅ 自动保存配置
- ✅ 扩展详情内联展示
- 文档:`docs/扩展模块修复说明.md`
---
## 🎯 阶段三Vue 3 前台开发(预计 15-20 天)
@@ -1036,6 +1270,20 @@
- 完成日期2026-02-10
- 优化:无头像时显示首字母占位符,不再请求不存在的文件
- [x] **T3.3.18** 实现角色卡导入时自动导入世界书
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 功能:
- 导入角色卡时自动解析 CharacterBook 数据
- 将世界书条目转换并保存到 `ai_world_info` 表
- 自动关联世界书到角色
- 导出角色卡时自动包含关联的世界书数据
- 完全兼容 SillyTavern CharacterCard V2 规范
- 使用数据库事务确保原子性(世界书导入失败时回滚角色卡)
### 3.4 Vue 对话功能模块(待开发)
- [ ] **T3.4.1** 创建对话类型定义
@@ -1109,6 +1357,340 @@
- 状态:⚪ 未开始
- 文件:`src/views/user/Profile.vue`
### 3.6 Vue 世界书模块
- [x] **T3.6.1** 创建世界书类型定义
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`web-app-vue/src/types/worldInfo.d.ts`
- [x] **T3.6.2** 创建世界书 API 接口
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`web-app-vue/src/api/worldInfo.ts`
- [x] **T3.6.3** 创建世界书状态管理
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`web-app-vue/src/stores/worldInfo.ts`
- [x] **T3.6.4** 开发世界书列表页面
- 负责人AI助手
- 优先级P1重要
- 预计时间1.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`web-app-vue/src/views/worldbook/WorldBookList.vue`
- 功能:列表展示、搜索、筛选、导入导出、复制、删除
- [x] **T3.6.5** 开发世界书编辑页面
- 负责人AI助手
- 优先级P1重要
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`web-app-vue/src/views/worldbook/WorldBookEdit.vue`
- 功能:创建、编辑世界书,管理条目列表
- [x] **T3.6.6** 开发世界书条目编辑表单组件
- 负责人AI助手
- 优先级P1重要
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 文件:`web-app-vue/src/views/worldbook/WorldInfoEntryForm.vue`
- 功能:
- 完整的条目编辑表单
- 支持所有 SillyTavern 特性(递归、概率、正则、分组等)
- 表单验证和提示
- [x] **T3.6.7** 更新路由配置
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 添加世界书相关路由(列表、创建、编辑)
- [x] **T3.6.8** 更新导航菜单
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-10
- 在主导航菜单中添加"世界书"入口
- [x] **T3.6.9** 修复世界书 API 路径参数解析错误
- 负责人AI助手
- 优先级P0紧急
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 问题:编辑世界书时报错 `record not found`SQL 查询显示 `id = 0`
- 原因:使用 `c.GetUint("id")` 无法获取 URL 路径参数
- 解决方案:改用 `c.Param("id")` 获取路径参数并转换为 uint
- 影响范围:`UpdateWorldBook`、`DeleteWorldBook`、`GetWorldBook`、`ExportWorldBook`、`DuplicateWorldBook`、`GetCharacterWorldBooks`
### 3.7 Vue 扩展模块
- [x] **T3.7.1** 创建扩展类型定义
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/types/extension.d.ts`
- [x] **T3.7.2** 创建扩展 API 接口
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/api/extension.ts`
- [x] **T3.7.3** 创建扩展状态管理
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/stores/extension.ts`
- [x] **T3.7.4** 开发扩展列表页面
- 负责人AI助手
- 优先级P1重要
- 预计时间1.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/views/extension/ExtensionList.vue`
- 功能:列表展示、搜索、筛选、安装、卸载、启用/禁用、导入导出
- [x] **T3.7.5** 开发扩展配置页面
- 负责人AI助手
- 优先级P1重要
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/views/extension/ExtensionSettings.vue`
- 功能:
- 完整的扩展配置管理
- 支持动态表单生成
- 依赖和冲突显示
- 统计信息展示
- [x] **T3.7.6** 更新路由配置
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 添加扩展相关路由(列表、配置)
- [x] **T3.7.7** 更新导航菜单
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 在主导航菜单中添加"扩展管理"入口
### 3.8 Vue 正则脚本模块
- [x] **T3.8.1** 创建正则脚本类型定义
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/types/regexScript.d.ts`
- [x] **T3.8.2** 创建正则脚本 API 接口
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/api/regexScript.ts`
- [x] **T3.8.3** 创建正则脚本状态管理
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/stores/regexScript.ts`
- [x] **T3.8.4** 开发正则脚本列表页面
- 负责人AI助手
- 优先级P1重要
- 预计时间1.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/views/regex/RegexScriptList.vue`
- 功能:列表展示、搜索、筛选、导入导出、复制、删除、启用/禁用切换
- [x] **T3.8.5** 开发正则脚本编辑页面
- 负责人AI助手
- 优先级P1重要
- 预计时间2天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/views/regex/RegexScriptEdit.vue`
- 功能:
- 完整的脚本编辑表单
- 实时测试功能(显示匹配次数、匹配内容、处理结果)
- 支持所有 SillyTavern 特性(深度控制、应用位置、替换选项等)
- 表单验证和提示
- 正则表达式在线工具链接
- [x] **T3.8.6** 更新路由配置
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 添加正则脚本相关路由(列表、创建、编辑)
- [x] **T3.8.7** 更新导航菜单
- 负责人AI助手
- 优先级P1重要
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 在主导航菜单中添加"正则脚本"入口
### 3.9 扩展运行时与抽屉组件
- [x] **T3.9.1** 创建扩展运行时管理器
- 负责人AI助手
- 优先级P0紧急
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/utils/extensionRuntime.ts`
- 功能:
- 动态加载扩展的 JavaScript/CSS 文件
- 提供 SillyTavern 兼容的 API (window.SillyTavern)
- 管理扩展生命周期load, unload, enable, disable
- 扩展事件系统
- 扩展设置管理
- [x] **T3.9.2** 创建扩展抽屉组件
- 负责人AI助手
- 优先级P0紧急
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 文件:`web-app-vue/src/components/ExtensionDrawer.vue`
- 功能:
- 可在任何页面调用的抽屉式扩展面板
- 折叠面板式扩展列表
- 实时显示扩展运行状态
- 内联配置编辑和保存
- 扩展启用/禁用/重载/卸载
- 扩展安装(文件上传/URL
- 特点:
- 不跳转页面,直接在当前页面打开抽屉
- 可在对话页面、角色页面等任何地方使用
- 自动加载已启用的扩展
- 配置修改后实时通知扩展
- [x] **T3.9.3** 优化和修复扩展功能
- 负责人AI助手
- 优先级P0紧急
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 修复和实现内容:
1. 移除独立的扩展管理页面,改为抽屉按钮
2. 修复启用/禁用扩展的验证错误(后端字段类型 + 前端传参)
3. 实现智能 URL 安装(自动识别 Git 仓库 URL 或 Manifest URL完全兼容 SillyTavern
4. 支持 Git 分支选择(可指定分支或标签)
5. 记录安装来源sourceUrl, branch, autoUpdate用于后续更新
6. 增强 SillyTavern API 兼容性(添加更多 API 方法)
7. 支持内联脚本inline_script
- 修改文件:
- `server/model/app/ai_extension.go` - 添加更新相关字段sourceUrl, branch, autoUpdate 等)
- `server/model/app/request/extension.go` - 修复 IsEnabled + 添加智能安装请求 + 添加更新字段
- `server/api/v1/app/extension.go` - 智能安装 API自动识别 URL 类型)
- `server/service/app/extension.go` - 实现智能安装逻辑isGitURL 判断)+ 记录安装来源
- `server/router/app/extension.go` - 注册智能安装路由
- `web-app-vue/src/api/extension.ts` - 支持分支参数
- `web-app-vue/src/stores/extension.ts` - 支持分支参数
- `web-app-vue/src/components/ExtensionDrawer.vue` - 添加分支输入框 + UI 优化
- `web-app-vue/src/layouts/DefaultLayout.vue` - 移除扩展管理菜单项
- `web-app-vue/src/utils/extensionRuntime.ts` - 增强 API 兼容性
- 支持的 URL 格式:
- ✅ `https://github.com/user/extension.git`
- ✅ `https://gitlab.com/user/extension`
- ✅ `https://gitee.com/user/extension`
- ✅ `https://example.com/manifest.json`
- [x] **T3.9.4** 实现扩展运行时配置 UI 注入(兼容原版 SillyTavern
- 负责人AI助手
- 优先级P0紧急
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 实现内容:
1. 在 ExtensionDrawer 中为每个扩展添加自定义配置容器(`extension-settings-${name}`
2. 在 extensionRuntime 中提供 `extension_settings` 代理对象(兼容原版 API
3. 提供 `getExtensionSettingsContainer()` 方法让扩展获取配置容器
4. 自动加载/保存扩展设置到 localStorage
5. 扩展可以通过 `SillyTavern.getContext().extension_settings[名称]` 访问配置
6. 扩展可以向配置容器注入自己的 HTML UI
- 修改文件:
- `web-app-vue/src/components/ExtensionDrawer.vue` - 添加自定义配置容器
- `web-app-vue/src/utils/extensionRuntime.ts` - 实现 extension_settings 和配置容器 API
- 兼容性:完全兼容原版 SillyTavern 扩展配置系统
- [x] **T3.9.5** 实现扩展更新功能git pull 或重新下载)
- 负责人AI助手
- 优先级P1重要
- 预计时间1天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 实现内容:
1. 后端 API`POST /app/extension/:id/update`
2. 根据 `installSource` 自动选择更新方式
3. Git 来源:重新克隆仓库(简单可靠)
4. URL 来源:重新下载 manifest.json
5. 前端 UI每个扩展显示"更新"按钮(仅当有 sourceUrl 时)
6. 更新后自动重新加载扩展(如果正在运行)
- 修改文件:
- `server/model/app/request/extension.go` - 添加 UpdateExtensionRequest
- `server/service/app/extension.go` - 实现 UpdateExtension 逻辑
- `server/api/v1/app/extension.go` - 添加 UpdateExtensionAPI
- `server/router/app/extension.go` - 注册更新路由
- `web-app-vue/src/api/extension.ts` - 添加 updateExtension API
- `web-app-vue/src/stores/extension.ts` - 添加 upgradeExtension 方法
- `web-app-vue/src/components/ExtensionDrawer.vue` - 添加更新按钮和逻辑
- `web-app-vue/src/types/extension.d.ts` - 添加更新相关字段
- [x] **T3.9.6** 实现批量更新功能
- 负责人AI助手
- 优先级P2一般
- 预计时间0.5天
- 状态:🟢 已完成
- 完成日期2026-02-11
- 实现内容:
1. "全部更新"按钮(批量更新所有可更新的扩展)
2. 自动过滤出有 sourceUrl 的扩展
3. 显示更新进度和结果统计
4. 更新后自动刷新扩展列表
- 修改文件:
- `web-app-vue/src/components/ExtensionDrawer.vue` - 添加全部更新按钮和逻辑
---
## 🎯 阶段四:前端改造(旧版 jQuery暂停