# Changelog

本文档记录所有重要的版本变更。

格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)，
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。

---

## [Unreleased]

---

## [0.6.0] - 2026-03-31

### RMA 关系记忆系统（全新模块）
- **新增**：`src/rma/` 模块（10个文件），实现完整的关系记忆架构
  - `config-loader.js` — 从角色卡 `extensions.cola_rma_config` 加载 RMA 配置
  - `memory-store.js` — 基于 `chat_metadata.cola_rma` 的记忆存储管理
  - `analyzer.js` — 后处理 AI 分析引擎，独立 API 调用提取关系变化
  - `response-hook.js` — 监听 `CHARACTER_MESSAGE_RENDERED` / `MESSAGE_DELETED` 事件
  - `phase-manager.js` — 六阶段关系管理（stranger→bond），支持回退
  - `worldbook-sync.js` — 世界书条目同步（阶段互斥切换、质感改写、事件解锁）
  - `confirmation-ui.js` — 用户确认流程（每轮/仅重要/全自动三种模式）
  - `float-panel.js` — 悬浮面板 UI（展开/半折叠/最小化三态）
  - `timeline-view.js` — 记忆时间线视图
- **新增**：四种记忆类型 — breakthrough(⭐)、warmth(💛)、crack(⚡)、revelation(👁)
- **新增**：RMA 设置面板 — 启用开关、确认模式选择、面板状态偏好、独立 API 配置
- **新增**：`ui/rma-panel.html` — RMA 悬浮面板 HTML 模板
- **新增**：RMA 面板 CSS 样式，兼容已有多主题系统

---

## [0.5.0] - 2025-02-13

### 总结世界书拆分功能优化
- **优化**：Part 1 复用原总结世界书的 API 配置
  - 用户只需配置 Part 2、3、4... 的 API
  - 减少重复配置工作量
- **优化**：Part 配置界面统一
  - 所有 Part 使用相同的完整配置弹窗
  - 支持独立配置模型、API 地址、温度等参数
- **优化**：Part UI 样式统一
  - Part 显示改为 `mm-chip` 样式，与记忆世界书分类一致
  - 修复条目数和删除按钮挤在一起的布局问题
- **优化**：配置弹窗添加楼层+字符信息横幅
  - 显示当前 Part 的楼层范围和字符数
- **修复**：发送前检查预览中 Part 名称显示
  - 从 `Part floor_1_45` 改为 `Part 1 (1-45楼)` 格式
  - 移除多余的 "(复用)" 标签
- **修复**：进度追踪器任务注册
  - 启用拆分时正确注册每个 Part 为独立任务
  - 修复进度条一直显示的问题

### Part 调试与合并功能
- **新增**：Part 结果调试弹窗
  - 在总结世界书标题栏添加调试开关（虫子图标）
  - 处理完成后显示各 Part 的原始返回内容
  - 显示合并后的最终结果，方便排查问题
- **新增**：合并去重开关
  - 在总结世界书标题栏添加去重开关（过滤器图标）
  - 开启时：同一楼层保留内容最长的事件
  - 关闭时：相同楼层的内容放在一起，保持原始顺序
  - 仅在拆分模式下可用，非拆分模式无去重逻辑
- **优化**：合并逻辑改进
  - 移除按楼层排序，保持 AI 返回的原始顺序（按关联性排序）
  - 去重功能仅在拆分模式下生效，确保非拆分模式的多事件不被误删

### 配置管理优化
- **优化**：清除旧数据功能保留拆分配置
  - 清除旧数据时保留 `summaryPartConfigs`（Part API 配置）
  - 清除旧数据时保留 `summaryAutoSplit`（拆分功能设置）
  - 避免用户误操作丢失已配置的 Part API

### 记忆搜索助手优化
- **修复**：记忆搜索助手支持拆分模式
  - 启用拆分时，记忆搜索助手也会并发处理多个 Part
  - 支持 Part 调试弹窗和去重开关
  - 修复之前拆分模式下记忆搜索助手忽略拆分配置的问题

### Amily 表格并发优化
- **新增**：内置默认独立模板
  - 添加 `prompts/table-filler/default-independent-template.json` 内置模板
  - 独立模式自动加载内置默认模板，无需手动配置即可使用
  - 模板编辑界面显示"内置默认"状态标识
  - 用户编辑后自动转为自定义模板保存
- **新增**：恢复默认模板按钮
  - 自定义模板旁显示恢复按钮，可一键恢复内置默认
  - 设置面板显示"使用默认 X 个"状态提示
- **修复**：独立模式提示词重复问题
  - 修复 flowTemplate 中原有指令与用户模板重复的问题
  - 替换前先清理原有的 `<Instructions for filling out the form>` 和 `<需要更新的旧表格>` 标签
- **修复**：独立模式模板注入位置错误
  - 修复用户模板被插入到错误位置的问题
  - 改用 indexOf 替代正则匹配，提高标签定位可靠性
  - 移除导致提前注入的 fallback 逻辑
- **优化**：替换标签名提示文案
  - 更新悬停提示，说明默认标签名和替换逻辑

### UI 样式修复
- **修复**：图标切换按钮样式优化
  - 拆分、去重、调试等开关按钮添加背景和边框
  - 激活状态使用主题色填充，图标变白色
  - 悬停效果更明显，与整体界面风格统一
- **修复**：输入框文字不可见问题
  - 添加 `.mm-input` 通用样式类
  - 修复"替换标签名"输入框白色文字在浅色背景不可见的问题
  - 输入框颜色自动适配当前主题
- **优化**：标签过滤开关样式改进
  - "提取模式"和"排除模式"改为按钮式开关
  - 未启用时显示虚线边框和开关图标，更明显可点击
  - 启用时显示实线边框和高亮背景

### 代码修复
- **修复**：`request-collector.js` 文件编码损坏问题
  - 重写文件修复 UTF-8 编码

---

## [0.4.9] - 2025-02-12

### 总结世界书并发拆分功能（新功能）
- **新增**：自动检测与拆分
  - 导入总结世界书时自动识别内容字数
  - 约每 5 万字符自动拆分为一个 Part
  - 允许浮动范围 4~6 万字符，确保段落完整性
  - 在段落边界（`---` 分隔符）处拆分，不切断任何段落
- **新增**：Part 列表 UI
  - 在主界面「总结世界书」区域下方显示拆分后的各个 Part
  - 每个 Part 显示楼层范围和字符数
  - 配置状态指示：已配置（绿色）/ 未配置（黄色）
- **新增**：Part 独立 API 配置
  - 每个 Part 可点击配置独立的 API（复用现有配置弹窗）
  - 配置按 Part ID 保存，内容变化时自动匹配已有配置
- **新增**：功能开关
  - 在总结世界书分组标题右侧添加开关
  - 用户可选择是否启用拆分功能
- **新增**：并发触发与结果合并
  - 触发时同时发送多个 Part 的 API 请求
  - 合并所有 Part 的 AI 回复，按楼层排序去重

### Amily表格并发增强
- **新增**：失败重试横幅通知（右下角 Win10 风格通知）
  - 支持用户选择"重试"或"放弃"失败的表格
  - 重试成功后自动从失败列表移除
- **新增**：调试弹窗功能
  - 发送前检查：显示每个表格的提示词内容
  - 合并后检查：显示各表格原始响应和合并结果
- **新增**：多主题适配支持
  - 暖灰棕、淡紫薰衣草、森林绿、玫瑰灰、静谧蓝灰
  - 星空紫、星空蓝、星空黑（含星星点缀动画效果）

### UI 改进
- **优化**：提示词模式改为分段控制器（Segmented Control）样式
- **优化**：调试模式改为独立行的 iOS 风格开关
- **修复**：已配置表格支持点击行打开编辑弹窗
- **优化**：刷新表格列表按钮改为图标模式，悬停显示提示

### 提示词处理优化
- **优化**：共享模式聚焦指令通用化（移除对预设阶段结构的依赖）
- **新增**：独立模式 V2 - 按名称存储模板
  - 表格重排序不再影响配置
  - 支持 `{{tableData}}`、`{{tableName}}`、`{{tableIndex}}` 占位符
- **新增**：标签精准替换功能（`<Instructions for filling out the form>`）

### 代码优化
- **优化**：表格拆分算法改进，支持多种格式解析
  - 完整格式：`* 0:角色表\n【说明】...<角色表内容>...`
  - 内容标签格式：`<角色表内容>...</角色表内容>`
  - 简化标签格式：`<角色表>...</角色表>`
- **优化**：移除填表模式检查，只检测请求特征
- **新增**：XHR 拦截支持（覆盖 `$.ajax` 调用）

---

## [0.4.8] - 2025-02-10

### 新增功能
- **Amily表格并发**：为 Amily2 表格模块提供并发填表支持
  - 拦截 Amily2 表格填充请求，将 7 个表格拆分后并发调用 API
  - 支持双模式架构：拦截模式（立即可用）+ Bus 联动模式（预留接口）
  - 支持两种提示词模式：共享模式（复用 Amily2 提示词）/ 独立模式（导入专用预设）
  - 每个表格可配置独立 API，未配置的使用默认 API
  - 自动检测 Amily2 填表模式兼容性（仅支持分步填表模式）
  - 通过 Amily2Bus 暴露 `TableFillerProxy` 接口供未来 Amily2 调用

### 新增模块
- `src/table-filler/` - Amily表格并发核心模块
  - `index.js` - 模块入口，双模式初始化
  - `mode-manager.js` - 调用模式管理（auto/intercept_only/bus_only）
  - `bus-integration.js` - Amily2Bus 联动集成
  - `interceptor.js` - API 拦截器
  - `table-splitter.js` - 表格数据拆分与合并
  - `prompt-handler.js` - 提示词处理器
  - `parallel-executor.js` - 并发执行器
- `src/ui/components/table-filler.js` - Amily表格并发 UI 组件

### 配置扩展
- `default-config.js` 新增 `tableFillerConfig` 配置结构
- `config-manager.js` 新增表格填表配置管理函数

### UI 更新
- 设置面板新增「Amily表格并发」折叠卡片
- 支持启用开关、调用模式选择、提示词模式切换
- 支持默认 API 配置和表格独立 API 配置（弹窗式配置界面）
- 支持并发预设 JSON 导入/导出
- 备注信息改为鼠标悬停提示，界面更简洁

---

## [0.4.7] - 2025-02-04

### 插件核心功能
- **修复**：插件拦截有几率失败导致插件无法启用的问题
- **新增**：主界面插件开关添加开启/关闭 toastr 通知提示

### 剧情优化助手
- **修复**：API 界面选择多个世界书导致无法单独选择条目的问题
- **修复**：剧情优化助手界面无法额外选择世界书的问题

### 发送前检查功能
- **修复**：未启用发送前检查功能导致插件无法正常生效的问题
- **改进**：默认显示流程配置按钮

### 汇总检查功能
- **新增**：添加编辑功能，方便对最终发送内容进行修改

### 多 AI 生成功能
- **新增**：预设提示词列表内容预览功能
- **修复**：单个提示词拖拽功能区域问题
- **修复**：提示词列表中聊天历史轮次设置显示问题

### 标签过滤功能
- **新增**：用户消息与 AI 消息独立标签过滤
- **修复**：前文内容来源未应用标签过滤配置的问题
  - `getRecentContext()` 现在正确使用 `filterContentByRole()` 处理新格式配置
  - `processor.js` 中最近剧情截取也已修复
  - `plot-optimize.js` 中剧情优化助手预览和面板的前文内容也已修复
- **改进**：在 `tag-filter.js` 添加调用位置汇总注释，方便后续维护

### 世界书控制
- **新增**：世界书条目多选支持
- **改进**：统计卡片可折叠，优化界面空间
- **改进**：选中状态持久化保存

### 配置管理
- **新增**：提示词/流程配置持久化缓存
  - 加载优先级：持久化缓存 → 服务器 → 回退到缓存
  - 解决网络不稳定时加载卡住或失败的问题
  - 支持离线使用已缓存的配置
- **改进**：恢复默认功能从服务器强制刷新获取最新内置配置
- **改进**：提示词编辑器切换类型时不再卡顿

### 技术细节
- `prompt-template.js`：使用 `BUILTIN_CACHE_PREFIX` 区分内置缓存和用户导入
- `flow-config.js`：使用 `FLOW_CONFIG_CACHE_KEY` 持久化默认流程配置
- `prompt-editor.js`：文件列表和内容加载均支持持久化优先
- `ui/panel.html`：添加作者栏区域注释，方便版本号定位

---

## [0.4.1] - 2025-01-21

### 重大变更
- **模块化重构**：将 18,000+ 行单文件拆分为模块化架构
- 使用 Webpack 打包，入口文件从 `index.js` 改为 `dist/index.js`
- 打包后体积从 729KB 减少到 123KB

### 新增
- 完整的模块化源代码目录 `src/`
- 模块参考手册 `docs/MODULE_REFERENCE.md`
- 路径别名支持（@core, @config, @ui 等）

### 改进
- 提示词编辑器：修复另存为后切换类型文件消失的问题
- 提示词编辑器：优化文件类型识别（优先使用文件名前缀）
- 移除 HEAD 请求探测（SillyTavern 不支持），改用 manifest.json
- 修复 CSRF Token 缺失问题

### 模块结构
```
src/
├── core/       # 核心模块（日志、常量、错误处理、ST API）
├── config/     # 配置管理（配置、默认值、世界书、提示词）
├── worldbook/  # 世界书处理（API、解析、刷新）
├── api/        # AI API 调用（适配器、各提供商）
├── memory/     # 记忆处理（处理器、合并、提示词构建）
├── hooks/      # 钩子拦截（发送按钮、拦截器）
├── ui/         # 用户界面（组件、弹窗、事件）
└── utils/      # 工具函数（消息、标签过滤、模板）
```

---

## [0.4.0] - 2025-01-20

### 重大变更
- 切换到官方 Generate Interceptor API，替代不稳定的发送按钮 Hook 机制
- 修复浏览器刷新后消息拦截失败的问题

### 新增
- 标准化数据持久化（使用 SillyTavern extensionSettings API）
- 自动从 localStorage 迁移旧数据
- 事件监听器清理机制，防止内存泄漏
- 自定义错误类型和统一错误处理

### 改进
- 移除约 200 行不稳定的发送按钮 Hook 代码
- 规范化 API 使用，添加详细注释说明
- 简化初始化流程
- 配置默认值递归合并，支持版本升级时自动补充新字段
- 插件开关移至主界面顶部，改为开关按钮样式
- AI 配置和配置管理改为折叠卡片样式
- 优化日志输出：Logger.warn 受 showLogs 控制

### 修复
- 修复刷新后拦截器失效问题
- 修复数据持久化不一致问题
- 修复各折叠容器间距不一致问题
- 修复总结世界书内容读取问题
- 兼容 SillyTavern 的 disable 字段
- 修复总结世界书分类识别问题

### 安全
- 修复 XSS 漏洞（使用 DOMPurify 清理 HTML）
- 修复 CSRF 令牌问题
- 清理死代码和注释代码块

### 文档
- 创建独立的 README.md 项目概览
- 创建 CHANGELOG.md 版本历史
- 完善 manifest.json 元数据
- 重组文档目录结构

---

## 版本说明

v0.4.0 之前的版本为早期开发阶段，未维护详细更新日志。
从 v0.4.0 开始，所有变更将严格记录在此文档中。

### 早期版本概要

**v0.3.0**
- 插件开关移至主界面顶部
- 优化日志输出
- UI 样式改进

**v0.2.x**
- 配置存储改��使用 SillyTavern 扩展设置 API
- 移除悬浮球，改为使用酒馆扩展菜单入口
- 新增世界书自动监听功能
- 发送消息前自动刷新世界书数据

**v0.1.x**
- 初始版本
- 基本的记忆检索和注入功能
- 进度条和任务管理
- 移动端适配

---

[Unreleased]: https://github.com/Cola-Echo/memory-manager-concurrent/compare/v0.4.0...HEAD
[0.4.0]: https://github.com/Cola-Echo/memory-manager-concurrent/releases/tag/v0.4.0
