@mingxy/ocosay 1.0.35 → 1.1.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.
Files changed (43) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/config.js +2 -0
  3. package/dist/config.js.map +1 -1
  4. package/dist/core/backends/index.d.ts.map +1 -1
  5. package/dist/core/backends/index.js +8 -3
  6. package/dist/core/backends/index.js.map +1 -1
  7. package/dist/core/speaker.d.ts.map +1 -1
  8. package/dist/core/speaker.js +1 -0
  9. package/dist/core/speaker.js.map +1 -1
  10. package/dist/core/streaming-synthesizer.d.ts.map +1 -1
  11. package/dist/core/streaming-synthesizer.js +2 -0
  12. package/dist/core/streaming-synthesizer.js.map +1 -1
  13. package/dist/index.d.ts +0 -13
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -23
  16. package/dist/index.js.map +1 -1
  17. package/dist/plugin.d.ts.map +1 -1
  18. package/dist/plugin.js +956 -575
  19. package/dist/plugin.js.map +4 -4
  20. package/dist/providers/minimax.d.ts.map +1 -1
  21. package/dist/providers/minimax.js +43 -20
  22. package/dist/providers/minimax.js.map +1 -1
  23. package/dist/services/notification-service.d.ts +17 -0
  24. package/dist/services/notification-service.d.ts.map +1 -0
  25. package/dist/services/notification-service.js +74 -0
  26. package/dist/services/notification-service.js.map +1 -0
  27. package/dist/services/speaker-service.d.ts +34 -0
  28. package/dist/services/speaker-service.d.ts.map +1 -0
  29. package/dist/services/speaker-service.js +74 -0
  30. package/dist/services/speaker-service.js.map +1 -0
  31. package/dist/services/streaming-service.d.ts +109 -0
  32. package/dist/services/streaming-service.d.ts.map +1 -0
  33. package/dist/services/streaming-service.js +281 -0
  34. package/dist/services/streaming-service.js.map +1 -0
  35. package/dist/tools/tts.d.ts.map +1 -1
  36. package/dist/tools/tts.js +30 -18
  37. package/dist/tools/tts.js.map +1 -1
  38. package/package.json +2 -2
  39. package/tsconfig.jest.json +21 -0
  40. package/dist/core/logger.d.ts +0 -46
  41. package/dist/core/logger.d.ts.map +0 -1
  42. package/dist/core/logger.js +0 -126
  43. package/dist/core/logger.js.map +0 -1
@@ -0,0 +1,281 @@
1
+ /**
2
+ * StreamingService - 流式TTS服务(Service层)
3
+ *
4
+ * 功能:
5
+ * - 调用Provider层获取流式TTS
6
+ * - 调用Backend层播放音频
7
+ * - 支持边接收边播放(豆包模式)
8
+ *
9
+ * 数据流:
10
+ * stream(text) → MiniMaxProvider.speak(stream) → StreamPlayer (边收边播)
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ import { getProvider } from '../providers/base';
14
+ import { TTSError, TTSErrorCode } from '../core/types';
15
+ import { StreamPlayer } from '../core/stream-player';
16
+ import { BackendType } from '../core/backends';
17
+ import { logger } from '../utils/logger';
18
+ export class StreamingService extends EventEmitter {
19
+ player = null;
20
+ providerName;
21
+ voice;
22
+ speed;
23
+ volume;
24
+ pitch;
25
+ backendType;
26
+ _isActive = false;
27
+ _bytesWritten = 0;
28
+ constructor(options = {}) {
29
+ super();
30
+ this.providerName = options.provider || 'minimax';
31
+ this.voice = options.voice;
32
+ this.speed = options.speed;
33
+ this.volume = options.volume;
34
+ this.pitch = options.pitch;
35
+ this.backendType = options.backendType || BackendType.NAUDIODON;
36
+ }
37
+ /**
38
+ * 获取时间戳
39
+ */
40
+ getTimestamp() {
41
+ const now = new Date();
42
+ const pad = (n) => n.toString().padStart(2, '0');
43
+ return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`;
44
+ }
45
+ /**
46
+ * 初始化播放器
47
+ */
48
+ initPlayer() {
49
+ if (this.player) {
50
+ this.player.stop();
51
+ this.player = null;
52
+ }
53
+ const playerOptions = {
54
+ format: 'mp3',
55
+ backendType: this.backendType,
56
+ events: {
57
+ onStart: () => {
58
+ const timestamp = this.getTimestamp();
59
+ logger.info(`[Ocosay][${timestamp}][INFO][Streaming] 对应事件{流式播放开始}`);
60
+ this.emit('start');
61
+ },
62
+ onEnd: () => {
63
+ const timestamp = this.getTimestamp();
64
+ logger.info(`[Ocosay][${timestamp}][INFO][Streaming] 对应事件{流式播放结束}`);
65
+ this._isActive = false;
66
+ this.emit('end');
67
+ },
68
+ onError: (error) => {
69
+ const timestamp = this.getTimestamp();
70
+ logger.error(`[Ocosay][${timestamp}][ERROR][Streaming] 对应事件{流式播放错误} - ${error.message}`);
71
+ this._isActive = false;
72
+ this.emit('error', error);
73
+ },
74
+ onProgress: (bytes) => {
75
+ this._bytesWritten = bytes;
76
+ this.emit('progress', bytes);
77
+ },
78
+ onPause: () => {
79
+ const timestamp = this.getTimestamp();
80
+ logger.info(`[Ocosay][${timestamp}][INFO][Streaming] 对应事件{流式播放暂停}`);
81
+ this.emit('pause');
82
+ },
83
+ onResume: () => {
84
+ const timestamp = this.getTimestamp();
85
+ logger.info(`[Ocosay][${timestamp}][INFO][Streaming] 对应事件{流式播放恢复}`);
86
+ this.emit('resume');
87
+ },
88
+ onStop: () => {
89
+ const timestamp = this.getTimestamp();
90
+ logger.info(`[Ocosay][${timestamp}][INFO][Streaming] 对应事件{流式播放停止}`);
91
+ this._isActive = false;
92
+ this._bytesWritten = 0;
93
+ this.emit('stop');
94
+ }
95
+ }
96
+ };
97
+ this.player = new StreamPlayer(playerOptions);
98
+ return this.player;
99
+ }
100
+ /**
101
+ * 流式播放文本
102
+ * 边接收边播放(豆包模式)
103
+ */
104
+ async stream(text) {
105
+ if (!text || text.trim().length === 0) {
106
+ const timestamp = this.getTimestamp();
107
+ logger.warn(`[Ocosay][${timestamp}][WARNING][Streaming] 对应事件{空文本跳过}`);
108
+ return;
109
+ }
110
+ const timestamp = this.getTimestamp();
111
+ logger.info(`[Ocosay][${timestamp}][INFO][Streaming] 对应事件{流式播放开始} - 文本长度: ${text.length}`);
112
+ try {
113
+ // 获取 Provider
114
+ const provider = getProvider(this.providerName);
115
+ if (!provider) {
116
+ throw new TTSError(`Provider ${this.providerName} not found`, TTSErrorCode.UNKNOWN, this.providerName);
117
+ }
118
+ // 初始化播放器
119
+ const player = this.initPlayer();
120
+ player.start();
121
+ this._isActive = true;
122
+ this._bytesWritten = 0;
123
+ // 调用 Provider 的流式合成
124
+ const result = await provider.speak(text, {
125
+ voice: this.voice,
126
+ model: 'stream',
127
+ speed: this.speed,
128
+ volume: this.volume,
129
+ pitch: this.pitch
130
+ });
131
+ // 处理音频结果
132
+ await this.processAudioResult(result, player);
133
+ }
134
+ catch (error) {
135
+ const ts = this.getTimestamp();
136
+ const errorMsg = error instanceof Error ? error.message : String(error);
137
+ logger.error(`[Ocosay][${ts}][ERROR][Streaming] 对应事件{流式播放错误} - ${errorMsg}`);
138
+ this._isActive = false;
139
+ throw error;
140
+ }
141
+ }
142
+ /**
143
+ * 处理音频结果
144
+ */
145
+ async processAudioResult(result, player) {
146
+ if (result.isStream && result.audioData instanceof ReadableStream) {
147
+ // 流式数据:边收边播
148
+ await this.streamAudioChunks(result.audioData, player);
149
+ }
150
+ else if (Buffer.isBuffer(result.audioData)) {
151
+ // 非流式数据:直接写入
152
+ player.write(result.audioData);
153
+ player.end();
154
+ }
155
+ }
156
+ /**
157
+ * 流式处理音频chunk
158
+ */
159
+ async streamAudioChunks(stream, player) {
160
+ const reader = stream.getReader();
161
+ try {
162
+ while (true) {
163
+ const { done, value } = await reader.read();
164
+ if (done) {
165
+ break;
166
+ }
167
+ if (value) {
168
+ const chunk = Buffer.isBuffer(value) ? value : Buffer.from(value);
169
+ player.write(chunk);
170
+ }
171
+ }
172
+ }
173
+ finally {
174
+ reader.releaseLock();
175
+ player.end();
176
+ }
177
+ }
178
+ /**
179
+ * 停止流式播放
180
+ */
181
+ stop() {
182
+ if (this.player) {
183
+ this.player.stop();
184
+ }
185
+ this._isActive = false;
186
+ this._bytesWritten = 0;
187
+ }
188
+ /**
189
+ * 暂停流式播放
190
+ */
191
+ pause() {
192
+ if (this.player) {
193
+ this.player.pause();
194
+ }
195
+ }
196
+ /**
197
+ * 恢复流式播放
198
+ */
199
+ resume() {
200
+ if (this.player) {
201
+ this.player.resume();
202
+ }
203
+ }
204
+ /**
205
+ * 获取流式播放状态
206
+ */
207
+ getStatus() {
208
+ return {
209
+ isActive: this._isActive,
210
+ bytesWritten: this._bytesWritten,
211
+ state: this.player?.isStopped() ? 'stopped' :
212
+ this.player?.isPaused() ? 'paused' :
213
+ this._isActive ? 'playing' : 'idle'
214
+ };
215
+ }
216
+ /**
217
+ * 是否处于活跃状态
218
+ */
219
+ isActive() {
220
+ return this._isActive;
221
+ }
222
+ /**
223
+ * 销毁服务
224
+ */
225
+ async destroy() {
226
+ if (this.player) {
227
+ this.player.stop();
228
+ this.player = null;
229
+ }
230
+ this._isActive = false;
231
+ this._bytesWritten = 0;
232
+ }
233
+ }
234
+ // 单例实例
235
+ let defaultStreamingService;
236
+ /**
237
+ * 获取默认流式服务实例
238
+ */
239
+ export function getDefaultStreamingService() {
240
+ if (!defaultStreamingService) {
241
+ defaultStreamingService = new StreamingService();
242
+ }
243
+ return defaultStreamingService;
244
+ }
245
+ /**
246
+ * 导出 stream 方法
247
+ */
248
+ export async function stream(text, options) {
249
+ const service = options ? new StreamingService(options) : getDefaultStreamingService();
250
+ return service.stream(text);
251
+ }
252
+ /**
253
+ * 导出 stop 方法
254
+ */
255
+ export function streamStop() {
256
+ const service = getDefaultStreamingService();
257
+ service.stop();
258
+ }
259
+ /**
260
+ * 导出 pause 方法
261
+ */
262
+ export function streamPause() {
263
+ const service = getDefaultStreamingService();
264
+ service.pause();
265
+ }
266
+ /**
267
+ * 导出 resume 方法
268
+ */
269
+ export function streamResume() {
270
+ const service = getDefaultStreamingService();
271
+ service.resume();
272
+ }
273
+ /**
274
+ * 导出 getStreamStatus 方法
275
+ */
276
+ export function getStreamStatus() {
277
+ const service = getDefaultStreamingService();
278
+ return service.getStatus();
279
+ }
280
+ export default StreamingService;
281
+ //# sourceMappingURL=streaming-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-service.js","sourceRoot":"","sources":["../../src/services/streaming-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../src/tools/tts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyDH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2EpB,CAAA;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,GAAG,CAAC,CAoId"}
1
+ {"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../src/tools/tts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2EpB,CAAA;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,GAAG,CAAC,CAoId"}
package/dist/tools/tts.js CHANGED
@@ -2,10 +2,11 @@
2
2
  * OpenCode TTS 工具定义
3
3
  * 用于 OpenCode Plugin 注册
4
4
  */
5
- import { speak, stop, pause, resume, listVoices, getDefaultSpeaker } from '../core/speaker';
5
+ import { speak, stop, pause, resume, listVoices, getDefaultSpeakerService } from '../services/speaker-service';
6
+ import { stream, getDefaultStreamingService } from '../services/streaming-service';
6
7
  import { TTSError, TTSErrorCode } from '../core/types';
7
8
  import { logger } from '../utils/logger';
8
- import { isStreamEnabled, isAutoReadEnabled, getStreamStatus, getStreamReader, getStreamingSynthesizer, getStreamPlayer } from '../index';
9
+ import { isStreamEnabled, isAutoReadEnabled, getStreamStatus } from '../index';
9
10
  function extractTextArg(args) {
10
11
  if (!args || typeof args !== 'object') {
11
12
  return undefined;
@@ -21,11 +22,22 @@ function extractTextArg(args) {
21
22
  logger.warn('received text7 instead of text from OpenCode framework');
22
23
  return text7.trim();
23
24
  }
24
- if (typeof text7 === 'object' && 'content' in text7) {
25
- const content = text7.content;
26
- if (typeof content === 'string' && content.trim().length > 0) {
27
- logger.warn('text7 is an object with content field');
28
- return content.trim();
25
+ if (typeof text7 === 'object') {
26
+ // Handle { split: true, content: "..." } format
27
+ if ('split' in text7 && 'content' in text7) {
28
+ const content = text7.content;
29
+ if (typeof content === 'string' && content.trim().length > 0) {
30
+ logger.info('text7 split format detected');
31
+ return content.trim();
32
+ }
33
+ }
34
+ // Handle simple { content: "..." } format
35
+ if ('content' in text7) {
36
+ const content = text7.content;
37
+ if (typeof content === 'string' && content.trim().length > 0) {
38
+ logger.info('text7 content format detected');
39
+ return content.trim();
40
+ }
29
41
  }
30
42
  }
31
43
  logger.warn({ type: typeof text7 }, 'text7 is not a valid string or object with content');
@@ -148,12 +160,12 @@ export async function handleToolCall(toolName, args) {
148
160
  return { success: true, voices };
149
161
  }
150
162
  case 'tts_list_providers': {
151
- const speaker = getDefaultSpeaker();
163
+ const speaker = getDefaultSpeakerService();
152
164
  const providers = speaker.getProviders();
153
165
  return { success: true, providers };
154
166
  }
155
167
  case 'tts_status': {
156
- const s = getDefaultSpeaker();
168
+ const s = getDefaultSpeakerService();
157
169
  return {
158
170
  success: true,
159
171
  isPlaying: s.isPlaying(),
@@ -167,14 +179,14 @@ export async function handleToolCall(toolName, args) {
167
179
  if (!isStreamEnabled()) {
168
180
  throw new TTSError('Stream components not initialized. Please initialize with autoRead enabled.', TTSErrorCode.UNKNOWN, 'tts_stream');
169
181
  }
170
- const streamReader = getStreamReader();
171
- const synthesizer = getStreamingSynthesizer();
172
- if (streamReader && synthesizer) {
173
- streamReader.start();
182
+ const streamingService = getDefaultStreamingService();
183
+ if (streamingService) {
174
184
  const textArg = extractTextArg(args);
175
185
  if (textArg && typeof textArg === 'string' && textArg.trim().length > 0) {
176
186
  logger.info({ text: textArg.substring(0, 50) + '...' }, 'synthesizing text');
177
- synthesizer.synthesize(textArg);
187
+ stream(textArg).catch((error) => {
188
+ logger.error({ error }, 'stream failed');
189
+ });
178
190
  }
179
191
  return { success: true, message: 'Stream speak started' };
180
192
  }
@@ -184,12 +196,12 @@ export async function handleToolCall(toolName, args) {
184
196
  if (!isStreamEnabled()) {
185
197
  throw new TTSError('Stream mode is not enabled. Please enable autoRead in configuration.', TTSErrorCode.UNKNOWN, 'tts_stream');
186
198
  }
187
- const player = getStreamPlayer();
188
- if (player) {
189
- player.stop();
199
+ const streamingService = getDefaultStreamingService();
200
+ if (streamingService) {
201
+ streamingService.stop();
190
202
  return { success: true, message: 'Stream stopped' };
191
203
  }
192
- throw new TTSError('Stream player not available', TTSErrorCode.UNKNOWN, 'tts_stream');
204
+ throw new TTSError('Stream service not available', TTSErrorCode.UNKNOWN, 'tts_stream');
193
205
  }
194
206
  case 'tts_stream_status':
195
207
  if (!isStreamEnabled()) {
@@ -1 +1 @@
1
- {"version":3,"file":"tts.js","sourceRoot":"","sources":["../../src/tools/tts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,eAAe,EAChB,MAAM,UAAU,CAAA;AAEjB,SAAS,cAAc,CAAC,IAAa;IACnC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,IAA+B,CAAA;IAE9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAC1B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;YACrE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;QACrB,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACpD,MAAM,OAAO,GAAI,KAAa,CAAC,OAAO,CAAA;YACtC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7D,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;gBACpD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;YACvB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,KAAK,EAAE,EAAE,oDAAoD,CAAC,CAAA;QACzF,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAChE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,gCAAgC,CAAC,CAAA;IACtE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,UAAU;iBACxB;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,aAAa;KAC3B;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,aAAa;KAC3B;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,cAAc;KAC5B;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,wBAAwB;KACtC;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,kBAAkB;KAChC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,eAAe;QAC5B,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC9B,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aAC9B;SACF;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,UAAU;iBACxB;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,UAAU;KACxB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,YAAY;QACzB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC7B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAChC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC1B;SACF;KACF;CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,IAA0B;IAE1B,IAAI,CAAC;QACH,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;gBACjC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAA;gBACjE,CAAC;gBACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;gBACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAA;YACvD,CAAC;YAED,KAAK,UAAU;gBACb,MAAM,IAAI,EAAE,CAAA;gBACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;YAE9C,KAAK,WAAW;gBACd,KAAK,EAAE,CAAA;gBACP,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;YAE7C,KAAK,YAAY;gBACf,MAAM,EAAE,CAAA;gBACR,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;YAE9C,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,QAA8B,CAAC,CAAA;gBACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;YAClC,CAAC;YAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAA;gBACnC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAA;gBACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;YACrC,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAA;gBAC7B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE;oBACxB,QAAQ,EAAE,CAAC,CAAC,aAAa,EAAE;iBAC5B,CAAA;YACH,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBACzB,MAAM,IAAI,QAAQ,CAChB,gGAAgG,EAChG,YAAY,CAAC,OAAO,EACpB,YAAY,CACb,CAAA;gBACH,CAAC;gBACD,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;oBACvB,MAAM,IAAI,QAAQ,CAChB,6EAA6E,EAC7E,YAAY,CAAC,OAAO,EACpB,YAAY,CACb,CAAA;gBACH,CAAC;gBACD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;gBACtC,MAAM,WAAW,GAAG,uBAAuB,EAAE,CAAA;gBAC7C,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;oBAChC,YAAY,CAAC,KAAK,EAAE,CAAA;oBACpB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;oBACpC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAA;wBAC5E,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;oBACjC,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAA;gBAC3D,CAAC;gBACD,MAAM,IAAI,QAAQ,CAChB,iCAAiC,EACjC,YAAY,CAAC,OAAO,EACpB,YAAY,CACb,CAAA;YACH,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;oBACvB,MAAM,IAAI,QAAQ,CAChB,sEAAsE,EACtE,YAAY,CAAC,OAAO,EACpB,YAAY,CACb,CAAA;gBACH,CAAC;gBACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;gBAChC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,EAAE,CAAA;oBACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAA;gBACrD,CAAC;gBACD,MAAM,IAAI,QAAQ,CAChB,6BAA6B,EAC7B,YAAY,CAAC,OAAO,EACpB,YAAY,CACb,CAAA;YACH,CAAC;YAED,KAAK,mBAAmB;gBACtB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;oBACvB,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,KAAK;wBACf,YAAY,EAAE,CAAC;wBACf,KAAK,EAAE,iBAAiB;qBACzB,CAAA;gBACH,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,GAAG,eAAe,EAAE;iBACrB,CAAA;YAEH;gBACE,MAAM,IAAI,QAAQ,CAChB,iBAAiB,QAAQ,EAAE,EAC3B,YAAY,CAAC,OAAO,EACpB,OAAO,CACR,CAAA;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAA;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tts.js","sourceRoot":"","sources":["../../src/tools/tts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mingxy/ocosay",
3
- "version": "1.0.35",
3
+ "version": "1.1.0",
4
4
  "description": "OpenCode TTS 播放插件 - 支持豆包模式边接收边朗读",
5
5
  "type": "module",
6
6
  "main": "dist/plugin.js",
@@ -37,7 +37,7 @@
37
37
  "opencode",
38
38
  "plugin"
39
39
  ],
40
- "author": "",
40
+ "author": "mingxy",
41
41
  "license": "MIT",
42
42
  "dependencies": {
43
43
  "@opencode-ai/plugin": "^1.3.15",
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "esnext",
5
+ "lib": ["ES2022"],
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "declaration": false,
9
+ "sourceMap": true,
10
+ "strict": true,
11
+ "esModuleInterop": true,
12
+ "skipLibCheck": true,
13
+ "forceConsistentCasingInFileNames": true,
14
+ "moduleResolution": "bundler",
15
+ "resolveJsonModule": true,
16
+ "types": ["node", "jest"],
17
+ "typeRoots": ["./src/types", "./node_modules/@types"]
18
+ },
19
+ "include": ["src/**/*", "tests/**/*"],
20
+ "exclude": ["node_modules", "dist"]
21
+ }
@@ -1,46 +0,0 @@
1
- /**
2
- * 统一日志模块
3
- * 支持日志级别、控制台输出、文件输出
4
- */
5
- export declare enum LogLevel {
6
- DEBUG = "DEBUG",
7
- INFO = "INFO",
8
- WARN = "WARN",
9
- ERROR = "ERROR"
10
- }
11
- export interface LoggerConfig {
12
- /** 最小日志级别,低于此级别的日志不输出 */
13
- minLevel?: LogLevel;
14
- /** 是否输出到控制台 */
15
- console?: boolean;
16
- /** 日志文件路径,为空则不输出到文件 */
17
- filePath?: string;
18
- /** 日志文件最大大小(bytes),超过则轮转 */
19
- maxFileSize?: number;
20
- }
21
- export declare class Logger {
22
- private minLevel;
23
- private consoleEnabled;
24
- private filePath?;
25
- private maxFileSize;
26
- private writeStream?;
27
- constructor(config?: LoggerConfig);
28
- private initFileStream;
29
- private shouldLog;
30
- private formatTimestamp;
31
- private formatMessage;
32
- private stringify;
33
- private log;
34
- private writeToConsole;
35
- private writeToFile;
36
- debug(message: string, ...args: unknown[]): void;
37
- info(message: string, ...args: unknown[]): void;
38
- warn(message: string, ...args: unknown[]): void;
39
- error(message: string, ...args: unknown[]): void;
40
- /**
41
- * 关闭日志系统,释放文件流
42
- */
43
- close(): void;
44
- }
45
- export declare const logger: Logger;
46
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AASD,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,eAAe;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAA2B;gBAEnC,MAAM,GAAE,YAAiB;IAWrC,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,GAAG;IAcX,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,WAAW;IAMnB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAMD,eAAO,MAAM,MAAM,QAIjB,CAAC"}
@@ -1,126 +0,0 @@
1
- /**
2
- * 统一日志模块
3
- * 支持日志级别、控制台输出、文件输出
4
- */
5
- export var LogLevel;
6
- (function (LogLevel) {
7
- LogLevel["DEBUG"] = "DEBUG";
8
- LogLevel["INFO"] = "INFO";
9
- LogLevel["WARN"] = "WARN";
10
- LogLevel["ERROR"] = "ERROR";
11
- })(LogLevel || (LogLevel = {}));
12
- const LEVEL_PRIORITY = {
13
- [LogLevel.DEBUG]: 0,
14
- [LogLevel.INFO]: 1,
15
- [LogLevel.WARN]: 2,
16
- [LogLevel.ERROR]: 3,
17
- };
18
- export class Logger {
19
- minLevel;
20
- consoleEnabled;
21
- filePath;
22
- maxFileSize;
23
- writeStream;
24
- constructor(config = {}) {
25
- this.minLevel = config.minLevel ?? LogLevel.INFO;
26
- this.consoleEnabled = config.console ?? true;
27
- this.filePath = config.filePath;
28
- this.maxFileSize = config.maxFileSize ?? 10 * 1024 * 1024;
29
- if (this.filePath) {
30
- this.initFileStream();
31
- }
32
- }
33
- initFileStream() {
34
- if (!this.filePath)
35
- return;
36
- import('fs').then((fs) => {
37
- this.writeStream = fs.createWriteStream(this.filePath, { flags: 'a' });
38
- }).catch(() => { });
39
- }
40
- shouldLog(level) {
41
- return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[this.minLevel];
42
- }
43
- formatTimestamp(date) {
44
- const pad = (n) => n.toString().padStart(2, '0');
45
- return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
46
- }
47
- formatMessage(level, message, args) {
48
- const timestamp = this.formatTimestamp(new Date());
49
- const formattedArgs = args?.length ? ' ' + args.map((a) => this.stringify(a)).join(' ') : '';
50
- return `[${timestamp}] [${level}] ${message}${formattedArgs}`;
51
- }
52
- stringify(value) {
53
- if (typeof value === 'string')
54
- return value;
55
- if (value instanceof Error)
56
- return `${value.message}\n${value.stack}`;
57
- try {
58
- return JSON.stringify(value);
59
- }
60
- catch {
61
- return String(value);
62
- }
63
- }
64
- log(entry) {
65
- if (!this.shouldLog(entry.level))
66
- return;
67
- const formatted = this.formatMessage(entry.level, entry.message, entry.args);
68
- if (this.consoleEnabled) {
69
- this.writeToConsole(entry.level, formatted);
70
- }
71
- if (this.writeStream) {
72
- this.writeToFile(formatted + '\n');
73
- }
74
- }
75
- writeToConsole(level, message) {
76
- switch (level) {
77
- case LogLevel.DEBUG:
78
- console.debug(message);
79
- break;
80
- case LogLevel.INFO:
81
- console.info(message);
82
- break;
83
- case LogLevel.WARN:
84
- console.warn(message);
85
- break;
86
- case LogLevel.ERROR:
87
- console.error(message);
88
- break;
89
- }
90
- }
91
- writeToFile(message) {
92
- if (this.writeStream) {
93
- this.writeStream.write(message);
94
- }
95
- }
96
- debug(message, ...args) {
97
- this.log({ timestamp: new Date(), level: LogLevel.DEBUG, message, args });
98
- }
99
- info(message, ...args) {
100
- this.log({ timestamp: new Date(), level: LogLevel.INFO, message, args });
101
- }
102
- warn(message, ...args) {
103
- this.log({ timestamp: new Date(), level: LogLevel.WARN, message, args });
104
- }
105
- error(message, ...args) {
106
- this.log({ timestamp: new Date(), level: LogLevel.ERROR, message, args });
107
- }
108
- /**
109
- * 关闭日志系统,释放文件流
110
- */
111
- close() {
112
- if (this.writeStream) {
113
- this.writeStream.end();
114
- this.writeStream = undefined;
115
- }
116
- }
117
- }
118
- import { homedir } from 'os';
119
- import { join } from 'path';
120
- const logPath = join(homedir(), '.ocosay', 'ocosay.log');
121
- export const logger = new Logger({
122
- minLevel: LogLevel.DEBUG,
123
- console: true,
124
- filePath: logPath,
125
- });
126
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}