diff --git a/openspec/specs/ai-message-blocks/spec.md b/openspec/specs/ai-message-blocks/spec.md new file mode 100644 index 0000000..9cc99e8 --- /dev/null +++ b/openspec/specs/ai-message-blocks/spec.md @@ -0,0 +1,89 @@ +## Purpose + +定义AI消息中思考过程、工具调用和对话正文的多Block结构规范。 + +## ADDED Requirements + +### Requirement: AI消息Block结构 +AI消息气泡内 SHALL 支持多个Block的灵活组织,Block类型包括thinking、tool、content三种。 + +#### Scenario: 单个Thinking Block +- **WHEN** AI消息包含thinking过程 +- **THEN** 在消息气泡内显示thinking Block,包含标题、执行时间、可展开的详细内容 + +#### Scenario: 单个Tool Block +- **WHEN** AI消息包含工具调用 +- **THEN** 在消息气泡内显示tool Block,包含工具名称、状态(input/output) + +#### Scenario: 多个Block组合 +- **WHEN** AI消息包含多个thinking和tool +- **THEN** 按声明顺序依次显示,最后显示content +- **AND** 所有thinking和tool必须在content之前 + +### Requirement: 可折叠容器 +Thinking和Tool Block SHALL 使用统一的可折叠容器样式。 + +#### Scenario: 展开状态 +- **WHEN** 用户点击Block头部 +- **THEN** 显示详细内容区域 + +#### Scenario: 收起状态 +- **WHEN** Block初始状态为收起 +- **THEN** 只显示头部标题和状态,点击后展开 + +#### Scenario: Thinking默认展开 +- **WHEN** 渲染thinking Block +- **THEN** 默认展开显示内容 + +#### Scenario: Tool默认收起 +- **WHEN** 渲染tool Block +- **THEN** 默认收起,只显示头部 + +### Requirement: 工具调用显示 +Tool Block SHALL 清晰展示input和output内容。 + +#### Scenario: 显示输入参数 +- **WHEN** tool Block展开 +- **THEN** 显示INPUT区域,包含JSON格式化的调用参数 + +#### Scenario: 显示返回结果 +- **WHEN** tool执行完成 +- **THEN** 显示OUTPUT区域,包含JSON格式化的返回值 + +#### Scenario: 执行状态 +- **WHEN** 渲染tool Block +- **THEN** 显示执行状态:running(运行中)/completed(完成)/error(失败) +- **AND** running状态带脉冲动画 + +### Requirement: 时间显示 +时间显示在Block头部的status区域中。 + +#### Scenario: Block执行时间 +- **WHEN** 渲染thinking或tool Block +- **THEN** 在头部status区域显示执行耗时,如"2.1s" + +#### Scenario: Content时间 +- **WHEN** 渲染content Block +- **THEN** 在Block底部显示消息发送时间,如"14:31" + +### Requirement: 消息气泡样式 +AI消息气泡 SHALL 使用毛玻璃效果和精细阴影。 + +#### Scenario: 毛玻璃效果 +- **WHEN** 渲染AI消息气泡 +- **THEN** 使用backdrop-filter: blur(12px)实现毛玻璃效果 + +#### Scenario: 精细阴影 +- **WHEN** 渲染AI消息气泡 +- **THEN** 使用多层阴影实现精细立体效果 + +### Requirement: 场景数据 +消息场景数据 SHALL 符合新的Block结构。 + +#### Scenario: 删除File场景 +- **WHEN** 系统加载场景列表 +- **THEN** 不包含file场景 + +#### Scenario: 场景消息结构 +- **WHEN** 渲染场景消息 +- **THEN** 使用blocks结构组织thinking、tool、content \ No newline at end of file diff --git a/src/data/conversations.js b/src/data/conversations.js index 4408164..0f4c9a5 100644 --- a/src/data/conversations.js +++ b/src/data/conversations.js @@ -4,7 +4,6 @@ export const conversations = [ { id: 'welcome', title: '新对话', time: '欢迎页', scene: 'welcome', status: 'running' }, { id: 'text', title: '代码重构方案讨论', time: '普通对话', scene: 'text', status: 'running' }, { id: 'skill', title: '查询客户数据', time: '调用 Skill', scene: 'skill', status: 'running' }, - { id: 'file', title: '分析上传的报表', time: '上传文件', scene: 'file', status: 'running' }, { id: 'code', title: '生成 Python 函数', time: '代码展示', scene: 'code', status: 'running' }, { id: 'table', title: '查询销售报表', time: '表格数据', scene: 'table', status: 'running' }, { id: 'multiTurn', title: '产品方案讨论', time: '多轮对话', scene: 'multiTurn', status: 'running' }, @@ -74,12 +73,13 @@ export function getChatScenes() {