父史诗: Epic 1 - STT SDK包结构设计 (docs/prd/epic-1-stt-sdk-package-structure.md)
🔄 In Progress - 需要主应用集成测试
As a TypeScript开发者, I want 将现有的stt-demo应用中的语音转文字功能封装成通用的TypeScript SDK, so that 我可以在任何TypeScript项目中轻松使用语音转文字功能,而不依赖特定框架。
验收标准扩展: 在主应用中新增SDK测试页面,验证SDK在实际应用环境中的功能完整性。
packages/ 目录结构,采用monorepo模式管理SDKstt-sdk-core 包的基础配置,包括package.json、tsconfig.json、vite.config.tssrc/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安全考虑:
保护用户隐私数据
核心包路径: packages/stt-sdk-core/
源码结构: src/core/, src/managers/, src/types/, src/utils/
构建输出: dist/目录,支持CommonJS和ES Module
依赖管理: 外部依赖agora-rtm,peerDependencies配置
主应用集成SDK示例:
// 在sdk-test页面中集成SDK
import { createSttSdk } from "@stt-demo/stt-sdk-core"
// SDK初始化配置(appId和certificate为必填)
const sdkConfig = {
appId: "your-app-id",
certificate: "your-certificate", // 必填字段
token: "your-token", // 可选字段
}
// 创建SDK实例
const sttSdk = createSttSdk(sdkConfig)
// 监听SDK事件
sttSdk.on("connected", () => {
console.log("SDK连接成功")
})
sttSdk.on("transcriptionResult", (result) => {
console.log("转录结果:", result)
})
路由配置示例:
// src/router/index.tsx 中添加sdk-test路由
const SdkTestPage = lazy(() => import('../pages/sdk-test'))
const routerItems = [
<Route path="/" element={<LoginPage />} />,
<Route path="/home" element={<HomePage />} />,
<Route path="/login" element={<LoginPage />} />,
<Route path="/sdk-test" element={<SdkTestPage />} />, // 新增路由
<Route path="*" element={<NotFoundPage />} />,
]
问题分析:
修复方案:
// 更新SttSdkConfig接口
export interface SttSdkConfig {
appId: string
certificate: string // 新增必填字段
token?: string
logLevel?: 'debug' | 'info' | 'warn' | 'error'
}
// 更新SttManagerAdapter构造函数
constructor(rtmManager?: any, appId: string, certificate: string) { // 改为必填参数
super()
this._rtmManager = rtmManager
this._appId = appId // 直接赋值,不再检查
this._certificate = certificate // 直接赋值,不再检查
}
// 修复_apiGetAgoraToken方法
private async _apiGetAgoraToken(config: {
uid: string | number
channel: string
}): Promise<string | null> {
const data = {
appId: this._appId,
appCertificate: this._certificate, // 使用正确的certificate
channelName: channel,
expire: 7200,
src: 'web',
types: [1, 2],
uid: uid.toString(),
}
// ... 其他代码保持不变
}
packages/stt-sdk-core/tests/目录测试文件位置: e2e/sdk-test.spec.ts
主要测试场景:
SDK初始化测试
转录功能测试
事件系统测试
错误处理测试
测试数据示例:
// e2e/fixtures/sdk-test-data.ts
export const validAppId = "test-app-id"
export const invalidAppId = "invalid-app-id"
export const testLanguages = ["zh-CN", "en-US", "ja-JP"]
| 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 |
| 2025-09-25 | 1.2 | 更新测试策略引用:使用architecture/testing-strategy.md文档 | Claude Code |
| 2025-09-25 | 1.3 | 根据PO验证报告修复:添加史诗引用、澄清技术细节、修正包管理工具、增强安全考虑 | Bob (SM) |
| 2025-09-25 | 1.4 | 修正包管理工具:将yarn改为npm,与实际package.json保持一致 | Bob (SM) |
| 2025-09-25 | 1.5 | 重大纠正:发现SDK实现为模拟功能而非真实封装,需要重新实现真实Agora SDK集成 | Bob (SM) |
| 2025-09-25 | 1.6 | 完成真实功能集成:重新实现管理器适配器类,集成真实Agora SDK功能,修复所有测试 | Claude Code |
| 2025-09-25 | 1.7 | 更新故事状态:添加主应用集成SDK测试页面需求,将状态改为进行中 | Bob (SM) |
| 2025-09-25 | 1.8 | 完善实施细节:根据PO建议细化Task 8任务、添加SDK集成示例和E2E测试场景 | Bob (SM) |
| 2025-09-25 | 1.9 | 修复SDK初始化问题:添加CERTIFICATE支持,修复token生成功能 | Bob (SM) |
新增/修改的文件:
packages/stt-sdk-core/ - SDK核心包目录packages/stt-sdk-core/package.json - 包配置packages/stt-sdk-core/tsconfig.json - TypeScript配置packages/stt-sdk-core/vite.config.ts - 构建配置packages/stt-sdk-core/src/core/ - 核心模块packages/stt-sdk-core/src/managers/ - 管理器适配器packages/stt-sdk-core/src/types/ - 类型定义packages/stt-sdk-core/tests/ - 测试文件package.json - 根包workspaces配置更新待新增文件:
src/pages/sdk-test/ - SDK测试页面目录src/pages/sdk-test/index.tsx - SDK测试页面组件e2e/sdk-test.spec.ts - SDK功能E2E测试文件