117 Commits
Author SHA1 Message Date
liquid 8daecd7b0c feat(workflow): 添加页面刷新后视频任务恢复和工作流同步机制
添加 onTaskCreated 回调以提前持久化 taskId 到工作流步骤,支持页面刷新后通过 useTaskWorkflowSync 进行任务-工作流映射
重构工作流状态同步为事件驱动模式,移除轮询机制,避免状态竞争和闪烁
添加 resumeWorkflow 方法以支持任务队列重试时重新激活已中止的工作流
优化任务队列服务,添加 trackExternalTask 和 syncTaskFromStorage 方法确保内存状态同步
更新 FallbackMediaExecutor 以支持从内存任务列表恢复,避免 IndexedDB 读写竞态
在 CLAUDE.md 中添加 useEffect 初始对账守卫和 fire-and-forget 写入竞态的相关编码规范
2026-03-08 20:53:47 +08:00
liquid 7d76899a22 feat(backup-restore): add backup restoration functionality with automatic chunking support
- Introduced a new restore button in the SW debug panel for restoring data from ZIP backups.
- Implemented `BackupPartManager` to handle automatic chunking during backup processes.
- Enhanced the backup process to include tasks, prompts, and assets, with progress updates.
- Updated version to 0.6.7 and adjusted build time in `version.json`.
- Refactored existing backup logic to support the new restoration features.
2026-03-08 00:34:06 +08:00
liquid 75161b60b3 Merge branch '85-controlCanvasInsertion' into develop 2026-03-07 22:21:16 +08:00
gongchengtu 1bd8048acb refactor: 模型命名重构与功能增强
核心变更:
1. 模型命名规范化
   - nano-banana-2 系列统一重命名为 nano-banana-pro 系列
   - 相关 shortCode 更新:nb2v→nbpv, nb22kv→nbp2kv, nb24kv→nbp4kv
   - 异步模型命名同步更新:nb24k-async→nbp4k-async 等

2. 新增 gemini-3.1-flash-image-preview 模型
   - 添加 nano-banana-2 模型配置(tags: ['new'])
   - 支持 tools 调用
   - 默认参数配置与 standard 模型一致

3. 新增图片质量参数支持
   - 添加 quality 参数(1k/2k 选项)
   - 适用于 gemini-3-pro-image-preview 和 gemini-3.1-flash-image-preview
   - 默认值为 '1k'

4. ModelDropdown 优化
   - 新增 NEW 标签显示(绿色徽章)
   - 模型排序逻辑优化:
     * 新模型优先(tags: ['new'])
     * VIP 模型次之
     * 按配置文件顺序作为兜底
   - 搜索时跨厂商过滤,无搜索时按厂商分类

影响范围:
- model-config.ts:模型定义与配置
- ModelDropdown.tsx:UI 展示与排序逻辑
- async-image-api-service.ts:异步生成服务注释更新
- task-queue-service.ts:支持 quality 参数传递
- gemini-api/services.ts:quality 参数适配所有支持模型
- README.md/README_en.md:用户文档更新
- docs/CODING_RULES.md:错误示例中的模型名称更新
- docs/CONCEPTS.md:概念定义中的 shortCode 更新
- docs/Prompts.md:提示词中的模型名称更新
- docs/user-manual:用户手册模型列表更新

相关模型对照表:
旧名称                    新名称
nano-banana-2           → nano-banana-pro
nano-banana-2-vip       → nano-banana-pro-vip
nano-banana-2-2k-vip    → nano-banana-pro-2k-vip
nano-banana-2-4k-vip    → nano-banana-pro-4k-vip
nano-banana-2-2k        → nano-banana-pro-2k
nano-banana-2-4k        → nano-banana-pro-4k
nano-banana-2-hd        → nano-banana-pro-hd
nano-banana-2-async     → nano-banana-pro-async
nano-banana-2-2k-async  → nano-banana-pro-2k-async
nano-banana-2-4k-async  → nano-banana-pro-4k-async
2026-02-27 15:49:28 +08:00
liquidliang 4b3aedf804 docs: 新增知识库、命令面板和任务队列文档并更新相关内容
新增知识库、命令面板和任务队列的详细用户手册文档,并在工具箱和AI生成相关文档中补充对应功能的使用说明。更新首页功能列表,添加“效率工具”分类。
2026-02-25 20:56:08 +08:00
liquidliang 7f59246568 feat: 优化PPT相关能力 2026-02-09 20:29:02 +08:00
liquid 3f6e583ca2 chore: bump version to 0.5.93 2026-02-08 22:20:57 +08:00
liquid ea3c2ccc66 fix: 视频任务状态 2026-02-08 21:05:11 +08:00
liquid bfad96d5c3 docs(claude): 添加新规则 - 自定义 Plait 组件 onContextChanged 必须处理 viewport 变化 2026-02-08 16:08:12 +08:00
liquid 47dfcf1201 feat: implement new canvas features and command palette
- Added new canvas functionalities as Plait plugins, including laser pointer and tool management through `board.pointer`.
- Introduced a command palette for enhanced user interaction, allowing quick access to commands with keyboard shortcuts.
- Implemented a canvas search feature to facilitate content discovery within the drawing area.
- Updated documentation to reflect new coding rules and cross-React root state sharing practices.
2026-02-08 01:07:12 +08:00
liquid afb9564083 docs(claude): 添加新规则 - 模块迁移接口完整性 2026-02-07 22:27:27 +08:00
liquid 8a190371d4 feat: enhance session replay management and error handling
- Added guidance on managing third-party session replay and analytics to avoid main thread blocking and 413 errors.
- Updated CLAUDE.md and CODING_RULES.md with best practices for session recording, including default disabling and error handling.
- Implemented error handling for 413 responses in session recording configuration to prevent retry storms and improve performance.
- Removed obsolete init.json file to streamline project structure.
2026-02-07 10:29:51 +08:00
liquidliang e27d14e0fd feat: unify Service Worker availability checks and enforce main thread executor in fallback scenarios
- Standardized the logic for checking Service Worker availability to include both channel initialization and ping success.
- Enforced the use of the main thread executor during fallback scenarios to prevent repeated timeouts when the Service Worker is not ready.
- Updated documentation to reflect these changes and provide clear examples for correct implementation.

This update enhances the reliability of workflow submissions and ensures smoother operation during degraded modes.
2026-02-07 03:21:29 +08:00
liquidandCursor 66db4935db fix(sw=0): 降级模式图片/视频带参考图与 1MB 限制
- 图片/视频 createTask 传入 referenceImages,executeTask 传给 executor
- 参考图转 base64 限制 1MB(compressImageBlob),图片与视频 API 一致
- 视频 fallback 使用 submitVideoGeneration,支持参考图与 1MB 压缩
- 任务失败时立即更新 UI(新对象+completedAt、清 progress)
- 文档:任务参考图传递规则(CLAUDE.md + CODING_RULES.md)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 20:43:04 +08:00
liquidliangandCursor 133b6a7252 docs: 添加编码规则 - 统计上报旁路化
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 14:32:56 +08:00
f296875d15 feat(sync): add custom tools sync and prevent remote task resumption
- Add tool-sync-service for syncing user custom tools across devices
- Add syncedFromRemote flag to prevent remote tasks from being resumed
- Update toolbox-service with import/export methods for sync
- Document the remote task resumption prevention rule

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 09:05:26 +08:00
liquid 5a10c4c4a0 docs: update localhost port references from 4200 to 7200
- Changed all instances of `http://localhost:4200` to `http://localhost:7200` across multiple documentation files, including CODEBUDDY.md, GEMINI.md, README_en.md, and various specs.
- Ensured consistency in development server instructions and debugging documentation to reflect the new port configuration.
2026-02-06 07:51:13 +08:00
liquid db99fb6da6 docs: 添加编码规则 - 配置同步到 IndexedDB 供 SW 读取
记录 SW 与主线程配置共享的新架构模式:
- 主线程通过 SettingsManager 自动同步配置到 IndexedDB
- SW 直接从 IndexedDB 读取配置,不再依赖 postMessage
- 避免通信不畅导致的任务失败
2026-02-06 07:44:34 +08:00
liquid 167a559ae2 feat: enhance error handling and logging in Service Worker and task management
- Added a new method to clean up stale pending requests in the task queue.
- Implemented timeout protection for Service Worker initialization to prevent hangs.
- Updated error handling in various Service Worker methods to ensure errors are logged instead of silently ignored.
- Added detailed logging for task operations and cleanup processes to improve traceability.
- Updated coding rules to prohibit empty catch blocks, ensuring at least debug-level logging is present.
2026-02-06 00:08:26 +08:00
liquid 26360e85ff docs: 添加编码规则 - 枚举不能使用 import type 导入
- 修复 types.ts 中 TaskType 枚举的 import type 错误
- 在 CODING_RULES.md 添加详细规则和示例
- 更新 CLAUDE.md 摘要规则
2026-02-05 23:10:13 +08:00
liquidliang f14829569f Merge branch 'domain' into develop 2026-02-05 17:43:45 +08:00
liquidliangandClaude ad341a4f88 refactor: simplify architecture by removing DDD layers and unifying types
- Remove DDD layers (domain/application/infrastructure) - 30 files deleted
- Create shared type definitions for main thread and Service Worker
- Eliminate type duplication between main thread and SW (no more "Keep in sync" comments)
- Update CLAUDE.md with 3 architecture rules (avoid over-design, delete unused code, refactor with purpose)
- Add detailed architecture guidelines to CODING_RULES.md with examples

This refactoring reduces codebase by 29 files and ~2900 lines while maintaining
all functionality. The shared types approach ensures type consistency without
manual synchronization.

Net result: -29 files, -2900 lines of code

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-05 16:22:46 +08:00
liquidliang 0002654a68 docs: 添加配置对象深拷贝规则
- CLAUDE.md 新增第 18 条规则:getSetting 等返回配置对象的方法需返回深拷贝
- CODING_RULES.md 添加详细规则和错误/正确示例
- 防止脱敏函数等外部操作意外修改全局设置状态
2026-02-05 15:53:10 +08:00
liquidliang cbe11e0865 perf: 优化同步上传性能,避免 UI 阻塞
问题:pushToRemote 在主线程连续执行大量 CPU 密集型操作(JSON.stringify、加密等),
导致事件处理器无法及时响应,页面卡顿。

解决方案:
- 在 @aitu/utils 中添加 yieldToMain() 和 processBatched() 工具函数
- 在同步相关的 CPU 密集型循环中添加 yield 点,每 3-5 次迭代让出主线程
- 更新 CLAUDE.md 和 CODING_RULES.md 记录此规则

优化的文件:
- sync-engine.ts: 画板增量比较/上传循环
- data-serializer.ts: collectSyncData、serializeToGistFiles* 方法
- task-sync-service.ts: syncTasks、uploadTaskData 方法
- workflow-sync-service.ts: syncWorkflows、uploadWorkflowData 方法
2026-02-05 14:10:43 +08:00
liquidliang 3cdc13eaf1 chore: update version to 0.5.72 and enhance LLM API logging
- Bumped application version to 0.5.72 in index.html and version.json.
- Updated build time in version.json.
- Added remoteId support in LLM API logging functions for better tracking of asynchronous tasks.
- Improved logging in image generation API for better debugging and monitoring.
2026-02-05 10:55:46 +08:00
liquidliang 708131f7c1 docs: 添加 LLM API 日志记录异步任务 remoteId 规则
在 CODING_RULES.md 中添加规则,说明 failLLMApiLog 和 completeLLMApiLog
函数参数需要支持 remoteId 字段,便于异步任务调试和恢复追踪。
2026-02-05 10:28:02 +08:00
liquid f13f809a3f docs: 添加编码规则 - SW 初始化统一入口
- CLAUDE.md: 添加第 23 条规则 - 使用 swChannelClient.ensureReady() 作为统一入口
- CODING_RULES.md: 添加详细规则和示例代码
2026-02-05 09:08:53 +08:00
liquid e6a39db673 docs: 添加编码规则 - 模块循环依赖处理
新增规则说明如何避免和解决 ES 模块循环依赖导致的 TDZ 错误:
- 将共享函数提取到独立的隔离模块
- 使用服务注册表和 Proxy 延迟服务访问
- 单例构造函数中使用 queueMicrotask 延迟
2026-02-05 09:04:43 +08:00
liquid e0f459a63d docs: 添加降级模式任务执行规则
- 合并 CLAUDE.md 规则 13 和 20(主线程直接读取 IndexedDB)
- 新增规则 15:降级模式下 createTask 后必须自动触发 executeTask
- CODING_RULES.md 添加详细示例和说明
- task-queue-service.ts: 添加 executeTask 方法,创建/重试任务后自动执行
- task-storage-writer.ts: 添加 deleteTask 方法
2026-02-05 08:24:36 +08:00
liquidliang 8dfcf4a351 docs: 更新工具函数规则 - 添加新模块和避免不必要包装
- 更新 @aitu/utils 可用函数列表(blob、device、format、indexeddb)
- 添加"避免不必要的函数包装/别名"规则
- 优化规则 15 描述:禁止二次导出或不必要的包装
2026-02-04 11:19:20 +08:00
liquidliang 5c86d02b79 docs: 添加编码规则 - 降级路径功能一致性
降级到主线程直接调用 API 时,必须保持与 SW 模式相同的功能行为,
特别是 LLM API 日志记录,否则调试工具会漏掉这些调用。
2026-02-04 10:30:55 +08:00
liquid 3d844c4250 docs: 添加 LLM 响应格式兼容性和工作流状态同步规则
- LLM 响应格式兼容性:支持多种 AI 返回格式
- 工作流状态同步:使用轮询 IndexedDB 替代 SW 事件依赖
2026-02-04 09:18:09 +08:00
liquidliang 10f953f73c docs: 添加编码规则 - IndexedDB 直接读取和 RPC 超时处理
- 主线程直接读取 IndexedDB 优于 RPC:避免 postMessage 限制
- RPC 超时与重连策略:合理超时 + 自动重连重试
2026-02-03 20:42:27 +08:00
liquidliang ebb412d1c3 docs: 添加同步数据格式一致性规则
- CLAUDE.md: 添加第19条 SW 规则摘要
- CODING_RULES.md: 添加详细示例和数据格式参考表

修复调试面板中多处使用错误数据格式的问题:
- tasks.json 结构是 { completedTasks: Task[] } 不是数组
- 画板文件是 board_{id}.json 不是 .drawnix
2026-02-03 17:21:27 +08:00
liquid 97332dc7f1 docs: 添加同步模块日志规范
- 更新 CLAUDE.md 规则6,同步模块使用统一日志服务
- 在 CODING_RULES.md 添加详细的同步模块日志规范
- 包含正确/错误示例和 API 说明
2026-02-03 09:07:45 +08:00
liquid 27064a500e feat(sync): 任务队列同步下载远程数据时双向合并
- 修改 applySyncData 中的任务合并逻辑,基于 ID 去重
- 使用 updatedAt 时间戳判断保留更新的版本
- 合并完成后自动上传任务数据到远程,确保双向同步
- 添加编码规则:同步数据双向合并
2026-02-02 07:49:49 +08:00
liquidliang 8ecc8e7571 docs: 添加 CSS 变量优先级和弹出菜单截断规则
- CLAUDE.md: 更新 createPortal 规则说明,新增组件内颜色使用规范
- CODING_RULES.md: 添加详细的 TDesign CSS 变量优先级问题说明
- CODING_RULES.md: 添加弹出菜单被 overflow 截断的解决方案
2026-02-01 22:19:02 +08:00
liquid 8a95524814 docs: 添加数据安全保护编码规则
- CLAUDE.md: 添加摘要规则 #16 数据安全保护
- CODING_RULES.md: 新增"数据安全规范"章节
  - 破坏性操作前必须进行安全检查
  - 不可逆操作需要用户输入确认文字
  - 使用软删除(Tombstone)支持数据恢复
2026-02-01 15:06:19 +08:00
liquid da0c37e11c docs: 添加 SW 任务持久化规则和敏感 ID 脱敏说明
- CLAUDE.md: 新增规则14 - 任务数据必须通过 RPC 持久化到 SW
- CLAUDE.md: 规则7 补充 maskId 函数用于敏感 ID 脱敏
- CODING_RULES.md: 添加详细示例说明主线程任务数据持久化流程
2026-02-01 09:53:55 +08:00
liquid fbfd0f1329 docs: 添加 SW 重发 Tool Request 延迟规则
问题:页面刷新后 SW claim 工作流时立即重发 pending tool request,
但主线程的 registerToolRequestHandler 可能还没准备好,导致请求失败。

解决:重发时延迟 500ms,等待主线程 handler 准备好。
2026-01-31 21:38:18 +08:00
liquidandClaude d27939f80b feat(sw): 改进工作流恢复机制和错误处理
- 修复工作流恢复时 UI 与 SW 状态不一致导致的错误失败状态
- 保持 AWAITING_CLIENT 错误处理链完整,避免错误属性丢失
- 重构 channel-manager 和 workflow-executor
- 添加崩溃恢复对话框组件
- 拆分 sw-channel 类型定义到独立文件
- 更新文档规则:工作流恢复状态不一致、错误处理链保持完整

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-31 20:53:06 +08:00
liquid a91afda0f4 docs: 更新 postmessage-duplex 规则 (v1.1.0)
- 更新通信模式:broadcast/onBroadcast 用于单向通知
- 更新初始化:enableGlobalRouting 自动管理 channel
- 新增客户端配置:autoReconnect 处理 SW 更新
- 新增任务队列双服务同步规则
2026-01-31 14:09:20 +08:00
liquidandClaude 50c94058af feat: move ai_analyze to SW and improve debug panel logging
- Move ai_analyze tool execution to Service Worker to avoid postMessage
  timeouts; system prompt built in app layer and passed to SW
- Add full response JSON display for LLM API logs (fetch on expand)
- Improve PostMessage logging: use source labels (应用页面/SW) instead
  of direction, filter debug panel messages, support request-response linking
- Add waitForStorageRestore() to ensure RPC handlers return complete data
- Remove syncTasksToClients() in favor of paginated RPC queries
- Better VideoGenerationFailedError detection for business failures
- Clean up debug console.log statements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-31 09:12:07 +08:00
liquid 597181ebca docs: 添加 postmessage-duplex 消息大小限制规则
- CLAUDE.md: 添加规则 12 - RPC 响应不超过 1MB,需后端分页+精简数据
- CODING_RULES.md: 添加详细规则和示例
  - postmessage-duplex RPC 消息大小限制
  - 分页查询必须在服务端过滤
2026-01-31 00:05:21 +08:00
liquid cac87cf458 docs: 添加 postmessage-duplex publish 模式规则
- CLAUDE.md: 新增规则 #11 - publish 模式下 ret 可能是 undefined,isReady 返回数字
- CODING_RULES.md: 新增错误示例 4-6,包含 ret 检查、isReady 检查、响应格式解析
2026-01-30 22:11:53 +08:00
liquidliang cacf6b43e5 docs: 添加 postmessage-duplex 库使用规范
- CLAUDE.md: 新增 SW 规则第 10 条摘要
- CODING_RULES.md: 详细规则包含 3 个错误/正确示例
  - subscribe 回调需从 response.data 提取数据
  - handler 必须返回响应避免发送方超时
  - 客户端需先发 SW_CHANNEL_CONNECT 让 SW 创建 channel
2026-01-30 19:27:59 +08:00
liquidliang a4ca6ca6ee refactor: rename project from Aitu to Opentu
- Updated project references across various files to reflect the new name "Opentu" instead of "Aitu".
- Adjusted ESLint configuration, documentation, and user manuals to ensure consistency with the rebranding.
- Removed outdated README backup file.

This change marks a significant rebranding effort to align the project identity with its new vision.
2026-01-29 11:24:47 +08:00
liquidliang 6abdcad300 docs: 添加工具函数组织规则
- CLAUDE.md: 新增第 15 条规则,禁止在业务包中二次导出通用函数
- CODING_RULES.md: 添加详细的错误/正确示例和 @aitu/utils 函数列表
2026-01-29 10:46:41 +08:00
gongchengtu a69c57a5b6 feat(workspace): 添加重命名验证功能,禁止同级重名
## 🎯 问题修复

修复项目管理中重命名时允许重复名称的问题,参考主流应用最佳实践。

## ✨ 核心功能

### 验证规则
1. **空名称检查** - 拒绝空字符串和纯空格
2. **长度限制** - 名称不能超过 100 个字符
3. **同级重名检查** - 同一文件夹内的画板/文件夹不能重名
4. **跨文件夹允许** - 不同文件夹内可以有同名项目
5. **类型区分** - 文件夹和画板可以同名(不同类型)

### 实现细节

**新增类型**:
- `ValidationError` - 验证错误类

**更新方法**:
- `workspace-service.ts`:
  - `validateBoardName()` - 画板名称验证
  - `validateFolderName()` - 文件夹名称验证
  - `renameBoard()` - 添加验证逻辑
  - `renameFolder()` - 添加验证逻辑

**UI 优化**:
- `ProjectDrawer.tsx`:
  - 友好的错误提示(MessagePlugin.warning)
  - 验证失败时保持编辑状态
  - 自动 trim 空格

## 📊 验证逻辑

```
同级禁止重名:
├── 文件夹A/
│   ├── 📄 设计稿 ✅
│   └── 📄 设计稿 ❌ 禁止
└── 文件夹B/
    └── 📄 设计稿 ✅(不同文件夹,允许)
```

## 🧪 测试

新增完整测试套件:
- 空名称验证
- 长度限制验证
- 同级重名验证
- 跨文件夹同名允许
- 自动 trim 空格
- 类型区分验证

## 📚 文档

- `docs/RENAME_VALIDATION_ANALYSIS.md` - 详细分析文档(617 行)
  - 主流应用对比分析
  - 方案选择与理由
  - 实施步骤与测试用例

## 🎨 用户体验

**Before**:
- ❌ 允许完全重复的名称
- ❌ 用户无法区分同名项目

**After**:
- ✅ 清晰的错误提示
- ✅ 保持编辑状态让用户修改
- ✅ 符合文件系统习惯

## 🔗 相关文件

- `packages/drawnix/src/services/workspace-service.ts`
- `packages/drawnix/src/components/project-drawer/ProjectDrawer.tsx`
- `packages/drawnix/src/types/workspace.types.ts`
- `packages/drawnix/src/services/__tests__/workspace-rename-validation.spec.ts`
2026-01-27 16:07:53 +08:00
gongchengtu 1c3fa39f3c feat(manual): 完成 AI 输入栏和 ChatDrawer 完整测试体系
🎉 项目里程碑:100% Manual 测试覆盖达成!

## 📊 完整成果

新增功能测试(9 个):
- ✅ AI 输入栏基础交互(输入/聚焦/展开/清空)
- ✅ 模型选择器(下拉/浏览/健康状态/选择)
- ✅ 参数配置(尺寸/数量/平铺展示)
- ✅ 多模态内容选择(上传/素材库/预览/移除)
- ✅ ChatDrawer 基础交互(打开/新建/列表/调整宽度)
- ✅ 会话管理(新建/重命名/切换/删除)
- ✅ 智能提示面板(历史/预设/置顶/使用)
- ✅ 灵感面板(空画布/推荐/分类/选择)
- ✅ AI 工作流(输入→配置→发送→执行→结果)

生成的 GIF(9 个):
- 📹 总大小:9.8 MB
- ⏱️  总时长:~149 秒
- 🎨 品牌色统一(#F39C12、#E91E63)
- ✨ 视觉效果完整(点击圆圈、快捷键提示)

新增代码(+1246 行):
- ✅ gif-recordings.manual.spec.ts  +575 行(9 个测试)
- ✅ 9 个 DSL 配置文件
- ✅ MANUAL_TEST_ANALYSIS.md(671 行分析文档)

## 🎯 覆盖度达成

- 静态截图:100% (21/21)
- 测试代码:100% (13/13)
- DSL 配置:100% (20/20)
- 已生成 GIF:100% (13/13)
- **总进度:100%** 🎊

## 💡 技术亮点

1. **完整的 AI 交互流程**:从输入到生成的全链路测试
2. **多模态内容支持**:上传、素材库、画布选择
3. **智能提示系统**:历史记录、预设、灵感面板
4. **对话管理完整**:会话创建、切换、管理
5. **工作流可视化**:实时状态、步骤展示

## 🎨 视觉质量

- ✅ 橙色渐变提示气泡(品牌色)
- ✅ 红色点击效果圆圈
- ✅ 流畅的动画过渡
- ✅ 所有 13 个 GIF 视觉统一

## 🔗 相关文档

- docs/MANUAL_TEST_ANALYSIS.md - 详细测试分析(671 行)
- apps/web-e2e/src/manual-gen/gifs/*.json - DSL 配置

注:GIF 文件(18MB)已生成但未提交(gitignore)
2026-01-27 15:06:52 +08:00