2.8 KiB
2.8 KiB
ADDED Requirements
Requirement: Duplex Communication Channel
应用层与 Service Worker 之间 SHALL 使用 postmessage-duplex 库建立双工通信通道。
Scenario: 页面初始化通道
- WHEN 页面加载完成
- THEN 自动创建
ServiceWorkerChannel实例 - AND 等待 SW 就绪后建立连接
- AND 连接就绪前的消息 SHALL 自动缓存
Scenario: SW 接受新连接
- WHEN SW 收到新客户端连接消息
- THEN 为该客户端创建独立的通道实例
- AND 将通道存入
Map<clientId, channel>
Requirement: Request-Response Task Creation
任务创建操作 SHALL 使用请求-响应模式,由 SW 返回创建结果。
Scenario: 成功创建新任务
- GIVEN 用户提交任务创建请求
- WHEN SW 验证任务不重复
- THEN SW 创建任务并返回
{success: true, task: SWTask} - AND 应用层根据响应更新本地状态
- AND SW 广播
task:created给其他客户端
Scenario: 拒绝重复任务
- GIVEN 用户提交任务创建请求
- WHEN SW 检测到相同参数的任务已存在
- THEN SW 返回
{success: false, existingTaskId: string, reason: 'duplicate'} - AND 应用层 SHALL 不创建新任务
Scenario: 多页面同时提交相同任务
- GIVEN Tab A 和 Tab B 几乎同时提交相同任务
- WHEN SW 串行处理请求
- THEN 第一个请求成功创建任务
- AND 第二个请求收到重复拒绝响应
- AND 两个页面最终状态一致
Requirement: Event-Based Status Updates
任务状态变更 SHALL 使用订阅模式通知所有客户端。
Scenario: 订阅任务状态变更
- GIVEN 页面订阅
task:status事件 - WHEN 任何任务状态发生变更
- THEN 所有订阅客户端收到状态更新
- AND 事件包含
{taskId, status, progress?, phase?}
Scenario: 任务完成通知
- GIVEN 页面订阅
task:completed事件 - WHEN 任务执行成功完成
- THEN 所有订阅客户端收到完成通知
- AND 事件包含
{taskId, result}
Requirement: Chat Streaming via Subscribe
Chat 流式输出 SHALL 使用订阅模式。
Scenario: 订阅 Chat 流式输出
- GIVEN 页面发起 Chat 请求
- WHEN SW 开始生成响应
- THEN 订阅该 chatId 的客户端收到
chat:chunk事件 - AND 响应完成时收到
chat:done事件
Requirement: Multi-Tab Isolation
多标签页 SHALL 独立管理各自的通道连接。
Scenario: 页面刷新重建连接
- WHEN 页面刷新
- THEN 旧通道自动销毁
- AND 新页面建立新通道
- AND SW 清理旧 clientId 的通道引用
Scenario: 页面关闭清理
- WHEN 页面关闭
- THEN SW 检测到客户端断开
- AND 清理对应的通道资源