Story 1.1: SDK核心架构和基础封装
Status
Draft
Story
As a TypeScript开发者,
I want 将现有的stt-demo应用中的语音转文字功能封装成通用的TypeScript SDK,
so that 我可以在任何TypeScript项目中轻松使用语音转文字功能,而不依赖特定框架。
Acceptance Criteria
- 在项目根目录创建
packages/ 目录结构,采用monorepo模式管理SDK
- 初始化
stt-sdk-core 包的基础配置,包括package.json、tsconfig.json、vite.config.ts
- 封装现有的SttManager和RtmManager类,提供适配器接口
- 实现基础的事件系统和错误处理机制
- 提供完整的TypeScript类型定义
- 确保现有stt-demo应用功能不受影响,保持向后兼容
Tasks / Subtasks
Dev Notes
技术栈信息 [Source: architecture/tech-stack.md]
- 前端框架: React 18.2.0 + TypeScript 5.2.2
- 状态管理: Redux Toolkit 1.6.2
- 构建工具: Vite 5.0.8
- Agora服务: RTC SDK 4.20.0, RTM 2.1.9
- 包管理: npm/yarn,支持workspaces
现有管理器架构 [Source: architecture.md#核心架构模式]
- 管理器模式: 将复杂业务逻辑封装在独立的管理器中
- RtcManager: 音视频通信管理
- RtmManager: 实时消息管理
- SttManager: 语音转文字管理
- 事件驱动: 管理器间通过自定义事件系统通信
源码结构信息 [Source: architecture/source-tree.md]
- 管理器位置:
src/manager/stt/stt.ts (SttManager)
- 管理器位置:
src/manager/rtm/rtm.ts (RtmManager)
- 事件系统:
src/manager/events.ts (AGEventEmitter)
- 类型定义:
src/manager/stt/types.ts, src/manager/rtm/types.ts
编码规范 [Source: architecture/coding-standards.md]
- 类型定义: 使用接口定义数据模型,优先使用interface而非type
- 导入导出: 使用绝对路径导入(@/),按类型分组导入
- 命名约定: 文件kebab-case,组件PascalCase,变量camelCase
- 错误处理: 使用try-catch处理异步错误,提供有意义的错误消息
包结构设计 [Source: docs/prd/epic-1-stt-sdk-package-structure.md]
- 核心包路径:
packages/stt-sdk-core/
- 源码结构: src/core/, src/managers/, src/types/, src/utils/
- 构建输出: dist/目录,支持CommonJS和ES Module
- 依赖管理: 外部依赖agora-rtm,peerDependencies配置
API规范参考 [Source: docs/prd/epic-1-stt-sdk-api-spec.md]
- SDK初始化接口: SttSdkConfig, SttSdk.initialize()
- 管理器接口: SttManager.init(), startTranscription(), stopTranscription()
- 客户端接口: SttClient, RtmClient的通用API设计
- 事件系统: 转录开始、停止、结果、错误等事件定义
架构设计原则 [Source: docs/prd/epic-1-stt-sdk-architecture.md]
- 框架无关性: SDK核心不依赖任何前端框架
- 模块化设计: 核心包 + 框架适配器包
- 类型安全: 完整的TypeScript类型定义
- 性能优化: 连接复用、事件去重、懒加载
项目结构对齐
- 新增文件位置: 所有SDK相关代码放在packages/目录下
- 现有代码保持: src/目录下的现有代码保持不变
- 集成方式: SDK作为独立包,主应用通过workspace引用
Testing
测试策略 [Source: architecture/tech-stack.md#测试工具]
- 测试框架: Vitest 3.2.4 (已集成)
- 测试库: Testing Library 16.3.0
- E2E测试: Playwright 1.55.0
- 测试位置:
packages/stt-sdk-core/tests/目录
- 单元测试: 针对核心类和工具函数
- 集成测试: 验证与现有管理器的集成
测试要求
- 所有核心类必须有单元测试(使用Vitest + Testing Library)
- 事件系统和错误处理需要测试覆盖
- 类型定义需要通过TypeScript编译检查
- 现有功能回归测试必须通过(使用Playwright E2E测试)
- 测试覆盖率目标:核心功能80%以上
Change Log
| Date |
Version |
Description |
Author |
| 2025-09-25 |
1.0 |
初始故事创建 |
Claude Code |
| 2025-09-25 |
1.1 |
更新测试框架信息:Vitest 3.2.4, Testing Library 16.3.0, Playwright 1.55.0 |
Claude Code |
Dev Agent Record
Agent Model Used
Debug Log References
Completion Notes List
File List
QA Results