keepwork-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist-npm/keepwork-sdk.js +37514 -0
- package/dist-npm/keepwork-sdk.js.map +1 -0
- package/dist-npm/md5-CZ0vz1_S.js +240 -0
- package/dist-npm/md5-CZ0vz1_S.js.map +1 -0
- package/dist-npm/types/index.d.ts +42 -0
- package/dist-npm/types/index.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts +218 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts +18 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts +201 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts +297 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts +15 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts +208 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts +153 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts +150 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts +123 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts +210 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts +272 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts +72 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts.map +1 -0
- package/dist-npm/types/src/audio/Speech.d.ts +247 -0
- package/dist-npm/types/src/audio/Speech.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts +104 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts +342 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts.map +1 -0
- package/dist-npm/types/src/core/NPL.d.ts +251 -0
- package/dist-npm/types/src/core/NPL.d.ts.map +1 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts +132 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts +84 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts +129 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts +101 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts +40 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts +1316 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts +54 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts +104 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts +390 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts +59 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts +114 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts +53 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts +65 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts +268 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts +232 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts +92 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts +15 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts +127 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts +156 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts +191 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts.map +1 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts +140 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts.map +1 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts +136 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts +267 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts +13 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts +198 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts +171 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts +92 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts.map +1 -0
- package/dist-npm/types/src/store/YMLParser.d.ts +96 -0
- package/dist-npm/types/src/store/YMLParser.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts +110 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AppTools.d.ts +122 -0
- package/dist-npm/types/src/tools/AppTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts +96 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/FileTools.d.ts +77 -0
- package/dist-npm/types/src/tools/FileTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts +234 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts +53 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts +57 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts +279 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/WebTool.d.ts +106 -0
- package/dist-npm/types/src/tools/WebTool.d.ts.map +1 -0
- package/dist-npm/types/src/types/common.d.ts +164 -0
- package/dist-npm/types/src/types/common.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts +229 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts +163 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts +75 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts +23 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts.map +1 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts +184 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts.map +1 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts +173 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts.map +1 -0
- package/dist-npm/types/src/user/UserWorks.d.ts +187 -0
- package/dist-npm/types/src/user/UserWorks.d.ts.map +1 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts +107 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts.map +1 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts +111 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts.map +1 -0
- package/dist-npm/types/src/utils/translation.d.ts +95 -0
- package/dist-npm/types/src/utils/translation.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts +126 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts +96 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts +145 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speech.ts — 浏览器端 TTS/STT 助手(TypeScript 完整实现)
|
|
3
|
+
*
|
|
4
|
+
* 提供三大功能:
|
|
5
|
+
* 1. Keepwork TTS 播放(playKeepworkAudio)—— 百度 TTS,按年龄/性别自动选音色
|
|
6
|
+
* 2. Volcano TTS 播放(playSynthesizedAudio)—— 火山 TTS,支持多种音色
|
|
7
|
+
* 3. 麦克风录音 + 转写(speechToText)—— MediaRecorder + 服务端 STT
|
|
8
|
+
*/
|
|
9
|
+
import AudioEngine from './AudioEngine';
|
|
10
|
+
/** TTS 失败回退模式 */
|
|
11
|
+
export type FallbackMode = 'system' | 'silent' | 'retry';
|
|
12
|
+
/** 年龄性别音色配置 */
|
|
13
|
+
interface VoiceConfig {
|
|
14
|
+
child: {
|
|
15
|
+
male: number;
|
|
16
|
+
female: number;
|
|
17
|
+
};
|
|
18
|
+
teen: {
|
|
19
|
+
male: number;
|
|
20
|
+
female: number;
|
|
21
|
+
};
|
|
22
|
+
adult: {
|
|
23
|
+
male: number;
|
|
24
|
+
female: number;
|
|
25
|
+
};
|
|
26
|
+
senior: {
|
|
27
|
+
male: number;
|
|
28
|
+
female: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** Keepwork TTS 请求选项 */
|
|
32
|
+
export interface PlayKeepworkAudioOptions {
|
|
33
|
+
/** 发音人 ID(数字或字符串,内部统一转换) */
|
|
34
|
+
per?: string | number;
|
|
35
|
+
spd?: number;
|
|
36
|
+
pit?: number;
|
|
37
|
+
vol?: number;
|
|
38
|
+
age?: number;
|
|
39
|
+
gender?: 'male' | 'female';
|
|
40
|
+
key?: string;
|
|
41
|
+
useCache?: boolean;
|
|
42
|
+
fallbackMode?: FallbackMode;
|
|
43
|
+
onLoaded?: () => void;
|
|
44
|
+
onEnded?: () => void;
|
|
45
|
+
onError?: (error: unknown) => void;
|
|
46
|
+
[key: string]: unknown;
|
|
47
|
+
}
|
|
48
|
+
/** Volcano TTS 选项 */
|
|
49
|
+
export interface PlaySynthesizedAudioOptions {
|
|
50
|
+
voiceType?: string;
|
|
51
|
+
encoding?: string;
|
|
52
|
+
speedRatio?: number;
|
|
53
|
+
loudnessRatio?: number;
|
|
54
|
+
explicitLanguage?: string;
|
|
55
|
+
fallbackMode?: FallbackMode;
|
|
56
|
+
onLoaded?: () => void;
|
|
57
|
+
onEnded?: () => void;
|
|
58
|
+
onError?: (error: unknown) => void;
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
}
|
|
61
|
+
/** speechToText 配置 */
|
|
62
|
+
export interface SpeechToTextOptions {
|
|
63
|
+
maxDuration?: number;
|
|
64
|
+
sampleRate?: number;
|
|
65
|
+
format?: string;
|
|
66
|
+
onStart?: () => void;
|
|
67
|
+
onStop?: () => void;
|
|
68
|
+
onError?: (error: Error) => void;
|
|
69
|
+
onResult?: (result: unknown) => void;
|
|
70
|
+
[key: string]: unknown;
|
|
71
|
+
}
|
|
72
|
+
/** speechToText 返回的录音控制器 */
|
|
73
|
+
export interface SpeechToTextRecorder {
|
|
74
|
+
start: () => void;
|
|
75
|
+
stop: () => void;
|
|
76
|
+
getState: () => string;
|
|
77
|
+
isRecording: () => boolean;
|
|
78
|
+
}
|
|
79
|
+
/** TTS 服务配置 */
|
|
80
|
+
interface TTSServiceConfig {
|
|
81
|
+
url: string;
|
|
82
|
+
voiceType: string;
|
|
83
|
+
encoding: string;
|
|
84
|
+
speedRatio: number;
|
|
85
|
+
loudnessRatio: number;
|
|
86
|
+
explicitLanguage: string;
|
|
87
|
+
}
|
|
88
|
+
/** 浏览器兼容性检测结果 */
|
|
89
|
+
export interface BrowserCompatibilityResult {
|
|
90
|
+
isSupported: boolean;
|
|
91
|
+
errors: string[];
|
|
92
|
+
warnings: string[];
|
|
93
|
+
supportedFormats: string[];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Speech — 浏览器端 TTS/STT 助手。
|
|
97
|
+
*
|
|
98
|
+
* 通常通过 `window.keepwork.speech` 访问共享实例;
|
|
99
|
+
* 也可直接 `new Speech(sdk)` 创建独立实例。
|
|
100
|
+
*/
|
|
101
|
+
declare class Speech {
|
|
102
|
+
sdk: unknown;
|
|
103
|
+
api: string;
|
|
104
|
+
rate: number;
|
|
105
|
+
volume: number;
|
|
106
|
+
pitch: number;
|
|
107
|
+
ttsService: TTSServiceConfig;
|
|
108
|
+
/**
|
|
109
|
+
* TTS 失败时的全局回退模式(可被单次调用的 options.fallbackMode 覆盖):
|
|
110
|
+
* - `'system'`(默认):回退到浏览器原生 speechSynthesis
|
|
111
|
+
* - `'silent'`:静默失败,不播放任何音频
|
|
112
|
+
* - `'retry'`:重试一次远程 TTS,仍失败则静默
|
|
113
|
+
*/
|
|
114
|
+
fallbackMode: FallbackMode;
|
|
115
|
+
constructor(sdk: unknown);
|
|
116
|
+
/**
|
|
117
|
+
* 提取主域名(去掉子域名前缀)。
|
|
118
|
+
* localhost / 127.x / 192.168.x 回退到 keepwork.com。
|
|
119
|
+
*/
|
|
120
|
+
extractMainDomain(hostname: string): string;
|
|
121
|
+
setRate(rate: number): void;
|
|
122
|
+
setVolume(volume: number): void;
|
|
123
|
+
setPitch(pitch: number): void;
|
|
124
|
+
/**
|
|
125
|
+
* 设置全局 TTS 回退模式。
|
|
126
|
+
* 无效值会被忽略并发出警告。
|
|
127
|
+
*/
|
|
128
|
+
setFallbackMode(mode: FallbackMode): void;
|
|
129
|
+
/** 获取共享 AudioEngine 实例(优先 sdk.audioEngine,否则 AudioEngine.getShared())。 */
|
|
130
|
+
getAudioEngine(): ReturnType<typeof AudioEngine.getShared>;
|
|
131
|
+
/**
|
|
132
|
+
* 恢复共享 AudioEngine 的 AudioContext(绕过浏览器自动播放策略)。
|
|
133
|
+
* 失败时静默忽略。
|
|
134
|
+
*/
|
|
135
|
+
resumeSharedAudioEngine(options?: Record<string, unknown>): Promise<unknown> | null;
|
|
136
|
+
/**
|
|
137
|
+
* 将 AudioBuffer 重采样到目标采样率(使用 OfflineAudioContext)。
|
|
138
|
+
* 若浏览器不支持或采样率已匹配则原样返回。
|
|
139
|
+
*/
|
|
140
|
+
resampleAudioBuffer(audioBuffer: AudioBuffer, targetSampleRate: number): Promise<AudioBuffer>;
|
|
141
|
+
/**
|
|
142
|
+
* 调用 Keepwork TTS API,返回音频 URL。
|
|
143
|
+
* @param text - 要转换的文字
|
|
144
|
+
* @param options - 发音人 / 语速 / 音量等参数
|
|
145
|
+
*/
|
|
146
|
+
textToAudio(text: string, options?: PlayKeepworkAudioOptions): Promise<{
|
|
147
|
+
data?: string;
|
|
148
|
+
[key: string]: unknown;
|
|
149
|
+
}>;
|
|
150
|
+
/**
|
|
151
|
+
* 获取年龄/性别对应的 Keepwork 发音人 ID 配置表。
|
|
152
|
+
*/
|
|
153
|
+
getVoiceConfig(): VoiceConfig;
|
|
154
|
+
/**
|
|
155
|
+
* 根据年龄和性别获取对应的发音人 ID。
|
|
156
|
+
* @param age - 说话人年龄
|
|
157
|
+
* @param gender - 性别('male' | 'female',默认 'female')
|
|
158
|
+
*/
|
|
159
|
+
getVoiceIdByAgeGender(age: number, gender: string): number;
|
|
160
|
+
/**
|
|
161
|
+
* 播放 Keepwork TTS 音频。
|
|
162
|
+
* 若指定了 `age` / `gender` 则自动映射发音人 ID。
|
|
163
|
+
* 支持 AudioEngine 缓存(传入 `useCache: true`)。
|
|
164
|
+
*
|
|
165
|
+
* @param text - 要朗读的文字
|
|
166
|
+
* @param options - 播放选项(发音人/语速/音量/缓存/回调等)
|
|
167
|
+
*/
|
|
168
|
+
playKeepworkAudio(text: string, options?: PlayKeepworkAudioOptions): Promise<unknown>;
|
|
169
|
+
/**
|
|
170
|
+
* 调用火山 TTS API,返回 base64 音频数据。
|
|
171
|
+
*/
|
|
172
|
+
synthesizeAudio(text: string, options?: PlaySynthesizedAudioOptions): Promise<{
|
|
173
|
+
data?: {
|
|
174
|
+
audioBase64?: string;
|
|
175
|
+
};
|
|
176
|
+
}>;
|
|
177
|
+
/**
|
|
178
|
+
* 播放火山 TTS 合成音频。
|
|
179
|
+
* 自动处理 base64 → Audio 元素播放,失败时按 fallbackMode 回退。
|
|
180
|
+
*
|
|
181
|
+
* @param text - 要合成的文字
|
|
182
|
+
* @param options - 音色/语速/编码/回调等
|
|
183
|
+
*/
|
|
184
|
+
playSynthesizedAudio(text: string, options?: PlaySynthesizedAudioOptions): Promise<unknown>;
|
|
185
|
+
/**
|
|
186
|
+
* 统一处理 TTS 失败后的回退逻辑。
|
|
187
|
+
* - `silent`:静默 resolve
|
|
188
|
+
* - `retry`:重试一次,失败后 silent
|
|
189
|
+
* - `system`(默认):使用浏览器 speechSynthesis
|
|
190
|
+
* @private
|
|
191
|
+
*/
|
|
192
|
+
_handleFallback(text: string, safeOptions: Record<string, unknown>, safeResolve: (v: unknown) => void, resultData: unknown, retryFn: () => Promise<unknown>): Promise<void>;
|
|
193
|
+
/**
|
|
194
|
+
* 使用浏览器原生 speechSynthesis 朗读文字(TTS 失败时的回退路径)。
|
|
195
|
+
*/
|
|
196
|
+
playSystemAudio(text: string, options?: Record<string, unknown>): Promise<void>;
|
|
197
|
+
/**
|
|
198
|
+
* 停止所有音频播放(AudioEngine + speechSynthesis + 所有 audio 元素)。
|
|
199
|
+
*/
|
|
200
|
+
stopAllAudio(): void;
|
|
201
|
+
/** 停止所有音频(stopAllAudio 的别名)。 */
|
|
202
|
+
stop(): void;
|
|
203
|
+
/** 播放有道词典发音(英语词汇朗读)。 */
|
|
204
|
+
playYouDaoAudio(text: string): void;
|
|
205
|
+
/**
|
|
206
|
+
* 创建麦克风录音控制器,并返回 start / stop / getState / isRecording 方法。
|
|
207
|
+
* 录音停止后自动调用服务端 STT API 并通过 `options.onResult` 回调结果。
|
|
208
|
+
*
|
|
209
|
+
* @param options - 录音配置(maxDuration / sampleRate / 各种回调)
|
|
210
|
+
* @throws 浏览器不支持 / 非 HTTPS 环境时抛出错误
|
|
211
|
+
*/
|
|
212
|
+
speechToText(options?: SpeechToTextOptions): Promise<SpeechToTextRecorder>;
|
|
213
|
+
/** 获取当前浏览器支持的录音 MIME 类型(优先 opus/webm)。 */
|
|
214
|
+
getSupportedMimeType(): string;
|
|
215
|
+
/**
|
|
216
|
+
* 返回当前浏览器支持的录音音频格式简称(如 `webm` / `mp4` / `ogg`),
|
|
217
|
+
* 便于 UI 展示或作为文件扩展名。无法检测时回退为 `webm`。
|
|
218
|
+
*/
|
|
219
|
+
getSupportedAudioFormat(): string;
|
|
220
|
+
/**
|
|
221
|
+
* 将音频 Blob 转换为 WAV 格式的 base64 字符串。
|
|
222
|
+
* 内部使用 Web Audio API 解码 + 必要时重采样。
|
|
223
|
+
*/
|
|
224
|
+
convertToWavBase64(audioBlob: Blob, sampleRate?: number): Promise<string>;
|
|
225
|
+
/** 将 ArrayBuffer 分块转换为 base64 字符串(避免大缓冲区栈溢出)。 */
|
|
226
|
+
arrayBufferToBase64(buffer: ArrayBuffer): string;
|
|
227
|
+
/** 将 AudioBuffer 编码为 WAV ArrayBuffer(16-bit PCM)。 */
|
|
228
|
+
audioBufferToWav(buffer: AudioBuffer): ArrayBuffer;
|
|
229
|
+
/**
|
|
230
|
+
* 调用服务端 STT API(Keepwork audioEncode2Text)。
|
|
231
|
+
* @param speechBase64 - WAV base64 字符串
|
|
232
|
+
* @param format - 音频格式(默认 'wav')
|
|
233
|
+
*/
|
|
234
|
+
callSpeechToTextAPI(speechBase64: string, format?: string): Promise<unknown>;
|
|
235
|
+
/**
|
|
236
|
+
* 检查当前浏览器是否支持录音功能。
|
|
237
|
+
* @returns 兼容性检测结果(isSupported / errors / warnings / supportedFormats)
|
|
238
|
+
*/
|
|
239
|
+
checkBrowserCompatibility(): BrowserCompatibilityResult;
|
|
240
|
+
/**
|
|
241
|
+
* 一键录音识别(自动启动录音,录音停止后返回识别结果)。
|
|
242
|
+
* @param options - 同 speechToText 选项
|
|
243
|
+
*/
|
|
244
|
+
quickSpeechToText(options?: SpeechToTextOptions): Promise<unknown>;
|
|
245
|
+
}
|
|
246
|
+
export default Speech;
|
|
247
|
+
//# sourceMappingURL=Speech.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Speech.d.ts","sourceRoot":"","sources":["../../../../src/audio/Speech.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentConfig.ts — Agent 配置读取器(完整 TypeScript 实现)
|
|
3
|
+
*
|
|
4
|
+
* 统一入口:从 JSON / YAML / Markdown(frontmatter) / Markdown 表格 多种格式
|
|
5
|
+
* 读取并解析 agent 配置。原先是 DigitalHuman 的静态方法,抽出后任何模块
|
|
6
|
+
* (SummarizeTool / AIChatRTC / 独立脚本等)都可加载配置而不依赖 DigitalHuman。
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* import AgentConfig from './AgentConfig';
|
|
10
|
+
* const cfg = await AgentConfig.fetch('https://example.com/agent.yaml'); // URL(.json/.yml/.yaml/.md)
|
|
11
|
+
* const cfg2 = AgentConfig.parse('{ "llm_model": "keepwork-flash" }'); // 内联 JSON 字符串
|
|
12
|
+
* const cfg3 = AgentConfig.normalize({ workspace: 'ws', content: 'You are a helper.' }); // 仅归一化
|
|
13
|
+
*/
|
|
14
|
+
/** 配置文件格式 */
|
|
15
|
+
export type AgentConfigFormat = 'json' | 'yml' | 'md';
|
|
16
|
+
/** fileOps 工具配置 */
|
|
17
|
+
export interface AgentFileOpsConfig {
|
|
18
|
+
enabled?: boolean;
|
|
19
|
+
workspace?: string;
|
|
20
|
+
mountFolder?: string | Record<string, unknown>;
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
/** 归一化后的 agent 配置对象 */
|
|
24
|
+
export interface NormalizedAgentConfig {
|
|
25
|
+
/** 系统提示词(由 .md frontmatter 的 content 转换而来) */
|
|
26
|
+
system_prompt?: string;
|
|
27
|
+
/** 顶层工作区,会传播到 tools.fileOps.workspace */
|
|
28
|
+
workspace?: string;
|
|
29
|
+
/** 挂载文件夹,会传播到 tools.fileOps.mountFolder */
|
|
30
|
+
mountFolder?: string | Record<string, unknown>;
|
|
31
|
+
/** 历史长度(history_length 的 camelCase 别名) */
|
|
32
|
+
historyLength?: number;
|
|
33
|
+
/** 工具配置块 */
|
|
34
|
+
tools?: {
|
|
35
|
+
fileOps?: AgentFileOpsConfig;
|
|
36
|
+
[category: string]: unknown;
|
|
37
|
+
};
|
|
38
|
+
/** Markdown frontmatter 的正文(解析后会转为 system_prompt 并删除) */
|
|
39
|
+
content?: string;
|
|
40
|
+
/** snake_case 历史长度(解析后会转为 historyLength 并删除) */
|
|
41
|
+
history_length?: number;
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 根据 URL 文件扩展名检测配置格式。匹配前会剥离 query / fragment。
|
|
46
|
+
*/
|
|
47
|
+
declare function detectFormat(url: string): AgentConfigFormat | null;
|
|
48
|
+
/**
|
|
49
|
+
* 就地归一化已解析的配置对象:
|
|
50
|
+
* - .md frontmatter 的 `content` → `system_prompt`
|
|
51
|
+
* - 顶层 `workspace` → `tools.fileOps.workspace`
|
|
52
|
+
* - 顶层 `mountFolder` → `tools.fileOps.mountFolder`
|
|
53
|
+
* - `history_length` → `historyLength`
|
|
54
|
+
*/
|
|
55
|
+
declare function normalize(config: NormalizedAgentConfig): NormalizedAgentConfig;
|
|
56
|
+
/**
|
|
57
|
+
* 把 Markdown 表格解析为对象或对象数组。
|
|
58
|
+
*
|
|
59
|
+
* 期望管道分隔的表格(含表头行 + 分隔行):
|
|
60
|
+
* | key | value |
|
|
61
|
+
* |------------|----------------|
|
|
62
|
+
* | llm_model | keepwork-flash |
|
|
63
|
+
*
|
|
64
|
+
* 两列 key/value 表会折叠为一个扁平对象;多列则返回按表头键名的行对象数组。
|
|
65
|
+
*/
|
|
66
|
+
declare function parseTable(tableText: string): Record<string, unknown> | Array<Record<string, unknown>>;
|
|
67
|
+
/**
|
|
68
|
+
* 把配置字符串(JSON / YAML / Markdown frontmatter / Markdown 表格)解析为
|
|
69
|
+
* 归一化配置对象。**不**发起任何网络请求。
|
|
70
|
+
*
|
|
71
|
+
* 检测顺序:
|
|
72
|
+
* 1. JSON(以 `{` 或 `[` 开头)
|
|
73
|
+
* 2. Markdown frontmatter(以 `---` 开头)
|
|
74
|
+
* 3. Markdown 表格(首个非空行以 `|` 开头)
|
|
75
|
+
* 4. 纯 YAML
|
|
76
|
+
*
|
|
77
|
+
* @param text - 原始配置文本
|
|
78
|
+
* @param formatHint - 来自 URL 扩展名的可选格式提示
|
|
79
|
+
*/
|
|
80
|
+
declare function parse(text: string, formatHint?: AgentConfigFormat | null): NormalizedAgentConfig;
|
|
81
|
+
/**
|
|
82
|
+
* 从 URL / 内联 JSON 字符串 / 对象异步获取并解析 agent 配置。
|
|
83
|
+
*
|
|
84
|
+
* 支持的来源:
|
|
85
|
+
* - 普通对象 → 归一化后原样返回
|
|
86
|
+
* - JSON 字符串(以 `{`/`[` 开头)→ JSON.parse
|
|
87
|
+
* - `.json` URL → fetch + JSON.parse
|
|
88
|
+
* - `.yml`/`.yaml` URL → fetch + YMLParser
|
|
89
|
+
* - `.md` URL → fetch + YMLParser frontmatter
|
|
90
|
+
* - 未知扩展名 URL → 自动检测(JSON → frontmatter → YAML)
|
|
91
|
+
*/
|
|
92
|
+
declare function fetchConfig(source: string | Record<string, unknown>): Promise<NormalizedAgentConfig>;
|
|
93
|
+
/** AgentConfig 模块公开 API */
|
|
94
|
+
export interface IAgentConfig {
|
|
95
|
+
detectFormat(url: string): AgentConfigFormat | null;
|
|
96
|
+
normalize(config: NormalizedAgentConfig): NormalizedAgentConfig;
|
|
97
|
+
parse(text: string, formatHint?: AgentConfigFormat | null): NormalizedAgentConfig;
|
|
98
|
+
parseTable(tableText: string): Record<string, unknown> | Array<Record<string, unknown>>;
|
|
99
|
+
fetch(source: string | Record<string, unknown>): Promise<NormalizedAgentConfig>;
|
|
100
|
+
}
|
|
101
|
+
declare const AgentConfig: IAgentConfig;
|
|
102
|
+
export default AgentConfig;
|
|
103
|
+
export { detectFormat, normalize, parse, parseTable, fetchConfig };
|
|
104
|
+
//# sourceMappingURL=AgentConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentConfig.d.ts","sourceRoot":"","sources":["../../../../src/core/AgentConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,aAAa;AACb,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;AAEtD,mBAAmB;AACnB,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,uBAAuB;AACvB,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY;IACZ,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,kBAAkB,CAAC;QAC7B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;KAC7B,CAAC;IACF,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;GAEG;AACH,iBAAS,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAO3D;AAID;;;;;;GAMG;AACH,iBAAS,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,qBAAqB,CAmCvE;AAID;;;;;;;;;GASG;AACH,iBAAS,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwC/F;AAgBD;;;;;;;;;;;;GAYG;AACH,iBAAS,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG,qBAAqB,CA+BzF;AAID;;;;;;;;;;GAUG;AACH,iBAAe,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgCnG;AAeD,2BAA2B;AAC3B,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACpD,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;IAChE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG,qBAAqB,CAAC;IAClF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxF,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACjF;AAED,QAAA,MAAM,WAAW,EAAE,YAMlB,CAAC;AAEF,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC"}
|