@mastra/voice-cloudflare 0.12.1 → 0.12.2

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 (121) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/_types/@internal_voice/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +8888 -0
  3. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/base/index.d.ts +31 -0
  4. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/logger/index.d.ts +217 -0
  5. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +147 -0
  6. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/types/index.d.ts +3 -0
  7. package/dist/_types/@internal_voice/dist/_types/zod/v3/ZodError.d.ts +164 -0
  8. package/dist/_types/@internal_voice/dist/_types/zod/v3/errors.d.ts +5 -0
  9. package/dist/_types/@internal_voice/dist/_types/zod/v3/external.d.ts +6 -0
  10. package/dist/_types/@internal_voice/dist/_types/zod/v3/helpers/enumUtil.d.ts +8 -0
  11. package/dist/_types/@internal_voice/dist/_types/zod/v3/helpers/errorUtil.d.ts +9 -0
  12. package/dist/_types/@internal_voice/dist/_types/zod/v3/helpers/parseUtil.d.ts +78 -0
  13. package/dist/_types/@internal_voice/dist/_types/zod/v3/helpers/partialUtil.d.ts +8 -0
  14. package/dist/_types/@internal_voice/dist/_types/zod/v3/helpers/typeAliases.d.ts +2 -0
  15. package/dist/_types/@internal_voice/dist/_types/zod/v3/helpers/util.d.ts +85 -0
  16. package/dist/_types/@internal_voice/dist/_types/zod/v3/index.d.cts +4 -0
  17. package/dist/_types/@internal_voice/dist/_types/zod/v3/index.d.ts +4 -0
  18. package/dist/_types/@internal_voice/dist/_types/zod/v3/locales/en.d.ts +3 -0
  19. package/dist/_types/@internal_voice/dist/_types/zod/v3/standard-schema.d.ts +102 -0
  20. package/dist/_types/@internal_voice/dist/_types/zod/v3/types.d.ts +1034 -0
  21. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/checks.d.ts +1 -0
  22. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/coerce.d.ts +17 -0
  23. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/compat.d.ts +50 -0
  24. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/errors.d.ts +30 -0
  25. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/external.d.ts +16 -0
  26. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/from-json-schema.d.ts +12 -0
  27. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/index.d.ts +4 -0
  28. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/iso.d.ts +22 -0
  29. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/parse.d.ts +31 -0
  30. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/schemas.d.ts +767 -0
  31. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/api.d.ts +325 -0
  32. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/checks.d.ts +278 -0
  33. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/core.d.ts +70 -0
  34. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/doc.d.ts +14 -0
  35. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/errors.d.ts +221 -0
  36. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/index.d.ts +16 -0
  37. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema-generator.d.ts +65 -0
  38. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema-processors.d.ts +49 -0
  39. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema.d.ts +88 -0
  40. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/parse.d.ts +49 -0
  41. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/regexes.d.ts +85 -0
  42. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/registries.d.ts +35 -0
  43. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/schemas.d.ts +1184 -0
  44. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/standard-schema.d.ts +126 -0
  45. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/to-json-schema.d.ts +114 -0
  46. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/util.d.ts +200 -0
  47. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/versions.d.ts +5 -0
  48. package/dist/_types/@internal_voice/dist/_types/zod/v4/index.d.cts +3 -0
  49. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ar.d.ts +4 -0
  50. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/az.d.ts +4 -0
  51. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/be.d.ts +4 -0
  52. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/bg.d.ts +4 -0
  53. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ca.d.ts +4 -0
  54. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/cs.d.ts +4 -0
  55. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/da.d.ts +4 -0
  56. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/de.d.ts +4 -0
  57. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/el.d.ts +4 -0
  58. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/en.d.ts +4 -0
  59. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/eo.d.ts +4 -0
  60. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/es.d.ts +4 -0
  61. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/fa.d.ts +4 -0
  62. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/fi.d.ts +4 -0
  63. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/fr-CA.d.ts +4 -0
  64. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/fr.d.ts +4 -0
  65. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/he.d.ts +4 -0
  66. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/hr.d.ts +4 -0
  67. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/hu.d.ts +4 -0
  68. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/hy.d.ts +4 -0
  69. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/id.d.ts +4 -0
  70. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/index.d.ts +52 -0
  71. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/is.d.ts +4 -0
  72. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/it.d.ts +4 -0
  73. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ja.d.ts +4 -0
  74. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ka.d.ts +4 -0
  75. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/kh.d.ts +5 -0
  76. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/km.d.ts +4 -0
  77. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ko.d.ts +4 -0
  78. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/lt.d.ts +4 -0
  79. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/mk.d.ts +4 -0
  80. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ms.d.ts +4 -0
  81. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/nl.d.ts +4 -0
  82. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/no.d.ts +4 -0
  83. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ota.d.ts +4 -0
  84. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/pl.d.ts +4 -0
  85. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ps.d.ts +4 -0
  86. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/pt.d.ts +4 -0
  87. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ro.d.ts +4 -0
  88. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ru.d.ts +4 -0
  89. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/sl.d.ts +4 -0
  90. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/sv.d.ts +4 -0
  91. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ta.d.ts +4 -0
  92. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/th.d.ts +4 -0
  93. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/tr.d.ts +4 -0
  94. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ua.d.ts +5 -0
  95. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/uk.d.ts +4 -0
  96. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ur.d.ts +4 -0
  97. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/uz.d.ts +4 -0
  98. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/vi.d.ts +4 -0
  99. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/yo.d.ts +4 -0
  100. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/zh-CN.d.ts +4 -0
  101. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/zh-TW.d.ts +4 -0
  102. package/dist/_types/@internal_voice/dist/index.d.ts +16 -0
  103. package/dist/_types/@internal_voice/dist/voice/aisdk/index.d.ts +3 -0
  104. package/dist/_types/@internal_voice/dist/voice/aisdk/speech.d.ts +23 -0
  105. package/dist/_types/@internal_voice/dist/voice/aisdk/transcription.d.ts +22 -0
  106. package/dist/_types/@internal_voice/dist/voice/composite-voice.d.ts +72 -0
  107. package/dist/_types/@internal_voice/dist/voice/default-voice.d.ts +13 -0
  108. package/dist/_types/@internal_voice/dist/voice/index.d.ts +5 -0
  109. package/dist/_types/@internal_voice/dist/voice/voice.d.ts +172 -0
  110. package/dist/docs/SKILL.md +1 -1
  111. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  112. package/dist/docs/references/docs-agents-adding-voice.md +55 -23
  113. package/dist/docs/references/docs-voice-overview.md +317 -26
  114. package/dist/docs/references/reference-voice-cloudflare.md +3 -3
  115. package/dist/index.cjs +259 -3
  116. package/dist/index.cjs.map +1 -1
  117. package/dist/index.d.ts +1 -1
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +258 -2
  120. package/dist/index.js.map +1 -1
  121. package/package.json +11 -12
@@ -78,6 +78,6 @@ Returns an array of available voice options, where each node contains:
78
78
 
79
79
  If you need speech-to-text capabilities in addition to text-to-speech, consider using one of these providers:
80
80
 
81
- - [OpenAI](https://mastra.ai/reference/voice/openai) - Provides both TTS and STT
82
- - [Google](https://mastra.ai/reference/voice/google) - Provides both TTS and STT
83
- - [Azure](https://mastra.ai/reference/voice/azure) - Provides both TTS and STT
81
+ - [OpenAI](https://mastra.ai/reference/voice/openai): Provides both TTS and STT
82
+ - [Google](https://mastra.ai/reference/voice/google): Provides both TTS and STT
83
+ - [Azure](https://mastra.ai/reference/voice/azure): Provides both TTS and STT
package/dist/index.cjs CHANGED
@@ -1,19 +1,275 @@
1
1
  'use strict';
2
2
 
3
- var voice = require('@mastra/core/voice');
4
3
  var Cloudflare = require('cloudflare');
5
4
 
6
5
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
6
 
8
7
  var Cloudflare__default = /*#__PURE__*/_interopDefault(Cloudflare);
9
8
 
10
- // src/index.ts
9
+ // ../../packages/_internal-core/dist/chunk-HDURQPU2.js
10
+ var RegisteredLogger = {
11
+ LLM: "LLM"};
12
+ var LogLevel = {
13
+ DEBUG: "debug",
14
+ INFO: "info",
15
+ WARN: "warn",
16
+ ERROR: "error"};
17
+ var MastraLogger = class {
18
+ name;
19
+ level;
20
+ transports;
21
+ constructor(options = {}) {
22
+ this.name = options.name || "Mastra";
23
+ this.level = options.level || LogLevel.ERROR;
24
+ this.transports = new Map(Object.entries(options.transports || {}));
25
+ }
26
+ getTransports() {
27
+ return this.transports;
28
+ }
29
+ trackException(_error, _metadata) {
30
+ }
31
+ async listLogs(transportId, params) {
32
+ if (!transportId || !this.transports.has(transportId)) {
33
+ return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
34
+ }
35
+ return this.transports.get(transportId).listLogs?.(params) ?? {
36
+ logs: [],
37
+ total: 0,
38
+ page: params?.page ?? 1,
39
+ perPage: params?.perPage ?? 100,
40
+ hasMore: false
41
+ };
42
+ }
43
+ async listLogsByRunId({
44
+ transportId,
45
+ runId,
46
+ fromDate,
47
+ toDate,
48
+ logLevel,
49
+ filters,
50
+ page,
51
+ perPage
52
+ }) {
53
+ if (!transportId || !this.transports.has(transportId) || !runId) {
54
+ return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
55
+ }
56
+ return this.transports.get(transportId).listLogsByRunId?.({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
57
+ logs: [],
58
+ total: 0,
59
+ page: page ?? 1,
60
+ perPage: perPage ?? 100,
61
+ hasMore: false
62
+ };
63
+ }
64
+ };
65
+ var ConsoleLogger = class _ConsoleLogger extends MastraLogger {
66
+ component;
67
+ filter;
68
+ constructor(options = {}) {
69
+ super(options);
70
+ this.component = options.component;
71
+ this.filter = options.filter;
72
+ }
73
+ child(componentOrBindings) {
74
+ const component = typeof componentOrBindings === "string" ? componentOrBindings : componentOrBindings?.component ?? this.component;
75
+ return new _ConsoleLogger({
76
+ name: this.name,
77
+ level: this.level,
78
+ component,
79
+ filter: this.filter
80
+ });
81
+ }
82
+ shouldLog(level, message, args) {
83
+ if (!this.filter) return true;
84
+ try {
85
+ return this.filter({ component: this.component, level, message, args });
86
+ } catch (e) {
87
+ console.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);
88
+ return true;
89
+ }
90
+ }
91
+ prefix() {
92
+ return this.component ? `[${this.component}] ` : "";
93
+ }
94
+ debug(message, ...args) {
95
+ if (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) {
96
+ console.info(`${this.prefix()}${message}`, ...args);
97
+ }
98
+ }
99
+ info(message, ...args) {
100
+ if ((this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.INFO, message, args)) {
101
+ console.info(`${this.prefix()}${message}`, ...args);
102
+ }
103
+ }
104
+ warn(message, ...args) {
105
+ if ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) {
106
+ console.info(`${this.prefix()}${message}`, ...args);
107
+ }
108
+ }
109
+ error(message, ...args) {
110
+ if ((this.level === LogLevel.ERROR || this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.ERROR, message, args)) {
111
+ console.error(`${this.prefix()}${message}`, ...args);
112
+ }
113
+ }
114
+ async listLogs(_transportId, _params) {
115
+ return { logs: [], total: 0, page: _params?.page ?? 1, perPage: _params?.perPage ?? 100, hasMore: false };
116
+ }
117
+ async listLogsByRunId(_args) {
118
+ return { logs: [], total: 0, page: _args.page ?? 1, perPage: _args.perPage ?? 100, hasMore: false };
119
+ }
120
+ };
121
+
122
+ // ../../packages/_internal-core/dist/base/index.js
123
+ var MastraBase = class {
124
+ component = RegisteredLogger.LLM;
125
+ logger;
126
+ name;
127
+ #rawConfig;
128
+ constructor({
129
+ component,
130
+ name,
131
+ rawConfig
132
+ }) {
133
+ this.component = component || RegisteredLogger.LLM;
134
+ this.name = name;
135
+ this.#rawConfig = rawConfig;
136
+ this.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });
137
+ }
138
+ /**
139
+ * Returns the raw storage configuration this primitive was created from,
140
+ * or undefined if it was created from code.
141
+ */
142
+ toRawConfig() {
143
+ return this.#rawConfig;
144
+ }
145
+ /**
146
+ * Sets the raw storage configuration for this primitive.
147
+ * @internal
148
+ */
149
+ __setRawConfig(rawConfig) {
150
+ this.#rawConfig = rawConfig;
151
+ }
152
+ /**
153
+ * Set the logger for the agent
154
+ * @param logger
155
+ */
156
+ __setLogger(logger) {
157
+ this.logger = "child" in logger && typeof logger.child === "function" ? logger.child({ component: this.component }) : logger;
158
+ }
159
+ };
160
+
161
+ // ../../packages/_internals/voice/dist/chunk-NWNKSBZV.js
162
+ var MastraVoice = class extends MastraBase {
163
+ listeningModel;
164
+ speechModel;
165
+ speaker;
166
+ realtimeConfig;
167
+ constructor({ listeningModel, speechModel, speaker, realtimeConfig, name } = {}) {
168
+ super({
169
+ component: "VOICE",
170
+ name
171
+ });
172
+ this.listeningModel = listeningModel;
173
+ this.speechModel = speechModel;
174
+ this.speaker = speaker;
175
+ this.realtimeConfig = realtimeConfig;
176
+ }
177
+ /**
178
+ * Custom serialization for tracing/observability spans.
179
+ * Excludes `apiKey` from listeningModel / speechModel / realtimeConfig
180
+ * and any provider-specific state held by subclasses. Subclasses that
181
+ * need to expose additional non-sensitive fields can override.
182
+ */
183
+ serializeForSpan() {
184
+ return {
185
+ component: "VOICE",
186
+ name: this.name,
187
+ speaker: this.speaker,
188
+ listeningModel: this.listeningModel ? { name: this.listeningModel.name } : void 0,
189
+ speechModel: this.speechModel ? { name: this.speechModel.name } : void 0,
190
+ realtimeModel: this.realtimeConfig?.model
191
+ };
192
+ }
193
+ updateConfig(_options) {
194
+ this.logger.debug("updateConfig not implemented by this voice provider");
195
+ }
196
+ /**
197
+ * Initializes a WebSocket or WebRTC connection for real-time communication
198
+ * @returns Promise that resolves when the connection is established
199
+ */
200
+ async connect(_options) {
201
+ this.logger.debug("connect not implemented by this voice provider");
202
+ }
203
+ /**
204
+ * Relay audio data to the voice provider for real-time processing
205
+ * @param audioData Audio data to relay
206
+ */
207
+ async send(_audioData) {
208
+ this.logger.debug("relay not implemented by this voice provider");
209
+ }
210
+ /**
211
+ * Trigger voice providers to respond
212
+ */
213
+ async answer(_options) {
214
+ this.logger.debug("answer not implemented by this voice provider");
215
+ }
216
+ /**
217
+ * Equip the voice provider with instructions
218
+ * @param instructions Instructions to add
219
+ */
220
+ addInstructions(_instructions) {
221
+ }
222
+ /**
223
+ * Equip the voice provider with tools
224
+ * @param tools Array of tools to add
225
+ */
226
+ addTools(_tools) {
227
+ }
228
+ /**
229
+ * Disconnect from the WebSocket or WebRTC connection
230
+ */
231
+ close() {
232
+ this.logger.debug("close not implemented by this voice provider");
233
+ }
234
+ /**
235
+ * Register an event listener
236
+ * @param event Event name (e.g., 'speaking', 'writing', 'error')
237
+ * @param callback Callback function that receives event data
238
+ */
239
+ on(_event, _callback) {
240
+ this.logger.debug("on not implemented by this voice provider");
241
+ }
242
+ /**
243
+ * Remove an event listener
244
+ * @param event Event name (e.g., 'speaking', 'writing', 'error')
245
+ * @param callback Callback function to remove
246
+ */
247
+ off(_event, _callback) {
248
+ this.logger.debug("off not implemented by this voice provider");
249
+ }
250
+ /**
251
+ * Get available speakers/voices
252
+ * @returns Array of available voice IDs and their metadata
253
+ */
254
+ getSpeakers() {
255
+ this.logger.debug("getSpeakers not implemented by this voice provider");
256
+ return Promise.resolve([]);
257
+ }
258
+ /**
259
+ * Get available speakers/voices
260
+ * @returns Array of available voice IDs and their metadata
261
+ */
262
+ getListener() {
263
+ this.logger.debug("getListener not implemented by this voice provider");
264
+ return Promise.resolve({ enabled: false });
265
+ }
266
+ };
11
267
  var defaultListeningModel = {
12
268
  model: "@cf/openai/whisper-large-v3-turbo",
13
269
  apiKey: process.env.CLOUDFLARE_AI_API_KEY,
14
270
  account_id: process.env.CLOUDFLARE_ACCOUNT_ID
15
271
  };
16
- var CloudflareVoice = class extends voice.MastraVoice {
272
+ var CloudflareVoice = class extends MastraVoice {
17
273
  apiToken;
18
274
  client = null;
19
275
  binding;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["MastraVoice","Cloudflare"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n Ai,\n Ai_Cf_Openai_Whisper_Large_V3_Turbo_Output,\n Ai_Cf_Openai_Whisper_Output,\n Ai_Cf_Openai_Whisper_Tiny_En_Output,\n} from '@cloudflare/workers-types';\nimport { MastraVoice } from '@mastra/core/voice';\nimport Cloudflare from 'cloudflare';\n\ninterface CloudflareListenOptions {\n apiKey?: string;\n model?: '@cf/openai/whisper-tiny-en' | '@cf/openai/whisper' | '@cf/openai/whisper-large-v3-turbo';\n account_id?: string;\n}\n\ntype CloudflareListenOutput =\n | Ai_Cf_Openai_Whisper_Tiny_En_Output\n | Ai_Cf_Openai_Whisper_Large_V3_Turbo_Output\n | Ai_Cf_Openai_Whisper_Output;\n\nconst defaultListeningModel = {\n model: '@cf/openai/whisper-large-v3-turbo' as const,\n apiKey: process.env.CLOUDFLARE_AI_API_KEY,\n account_id: process.env.CLOUDFLARE_ACCOUNT_ID!,\n};\n\nexport class CloudflareVoice extends MastraVoice {\n private apiToken?: string;\n private client: Cloudflare | null = null;\n private binding?: Ai;\n\n constructor({\n listeningModel,\n binding,\n }: {\n listeningModel?: CloudflareListenOptions;\n binding?: Ai;\n } = {}) {\n super({\n listeningModel: {\n name: listeningModel?.model ?? defaultListeningModel.model,\n apiKey: listeningModel?.apiKey ?? defaultListeningModel.apiKey,\n },\n });\n\n // Store Workers AI binding if provided\n this.binding = binding;\n\n // Only setup REST client if no binding provided or both are needed\n if (!binding) {\n this.apiToken = listeningModel?.apiKey || defaultListeningModel.apiKey;\n if (!this.apiToken) {\n throw new Error('CLOUDFLARE_AI_API_KEY must be set when not using bindings');\n }\n this.client = new Cloudflare({ apiToken: this.apiToken });\n }\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: CloudflareListenOptions): Promise<string> {\n // Collect audio data into buffer\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n const audioBuffer = Buffer.concat(chunks);\n const base64Audio = audioBuffer.toString('base64');\n\n const model = options?.model || defaultListeningModel.model;\n\n // Use native binding if available, otherwise use REST API\n if (this.binding) {\n // Using Workers AI binding\n const response = (await this.binding.run(model, {\n audio: base64Audio,\n })) as CloudflareListenOutput;\n return response.text;\n } else if (this.client) {\n // Using REST API client\n const payload = { audio: base64Audio, account_id: options?.account_id || defaultListeningModel.account_id };\n const response = (await this.client.ai.run(model, payload)) as any;\n return response.text as string;\n } else {\n throw new Error('Neither binding nor REST client is configured');\n }\n }\n async speak(): Promise<NodeJS.ReadableStream> {\n throw new Error('This feature is not yet implemented.');\n }\n async getSpeakers(): Promise<Array<{ voiceId: string; [key: string]: any }>> {\n throw new Error('This feature is not yet implemented.');\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../packages/_internal-core/src/logger/index.ts","../../../packages/_internal-core/src/base/MastraBase.ts","../../../packages/_internals/voice/src/voice/voice.ts","../src/index.ts"],"names":["Cloudflare"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Transform } from 'node:stream';\n\nexport const RegisteredLogger = {\n AGENT: 'AGENT',\n OBSERVABILITY: 'OBSERVABILITY',\n AUTH: 'AUTH',\n BROWSER: 'BROWSER',\n NETWORK: 'NETWORK',\n WORKFLOW: 'WORKFLOW',\n LLM: 'LLM',\n TTS: 'TTS',\n VOICE: 'VOICE',\n VECTOR: 'VECTOR',\n BUNDLER: 'BUNDLER',\n DEPLOYER: 'DEPLOYER',\n MEMORY: 'MEMORY',\n STORAGE: 'STORAGE',\n EMBEDDINGS: 'EMBEDDINGS',\n MCP_SERVER: 'MCP_SERVER',\n SERVER_CACHE: 'SERVER_CACHE',\n SERVER: 'SERVER',\n WORKSPACE: 'WORKSPACE',\n CHANNEL: 'CHANNEL',\n} as const;\n\nexport type RegisteredLogger = (typeof RegisteredLogger)[keyof typeof RegisteredLogger];\n\nexport const LogLevel = {\n DEBUG: 'debug',\n INFO: 'info',\n WARN: 'warn',\n ERROR: 'error',\n NONE: 'silent',\n} as const;\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\nexport interface BaseLogMessage {\n runId?: string;\n msg: string;\n level: LogLevel;\n time: Date;\n pid: number;\n hostname: string;\n name: string;\n}\n\nexport abstract class LoggerTransport extends Transform {\n constructor(opts: any = {}) {\n super({ ...opts, objectMode: true });\n }\n\n async listLogsByRunId(_args: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n\n async listLogs(_args?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n}\n\nexport const createCustomTransport = (\n stream: Transform,\n listLogs?: LoggerTransport['listLogs'],\n listLogsByRunId?: LoggerTransport['listLogsByRunId'],\n) => {\n let transport = stream as LoggerTransport;\n if (listLogs) {\n transport.listLogs = listLogs;\n }\n if (listLogsByRunId) {\n transport.listLogsByRunId = listLogsByRunId;\n }\n return transport as LoggerTransport;\n};\n\nexport interface IMastraLogger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n trackException(error: Error, metadata?: Record<string, unknown>): void;\n\n getTransports(): Map<string, LoggerTransport>;\n listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }>;\n}\n\nexport abstract class MastraLogger implements IMastraLogger {\n protected name: string;\n protected level: LogLevel;\n protected transports: Map<string, LoggerTransport>;\n\n constructor(\n options: {\n name?: string;\n level?: LogLevel;\n transports?: Record<string, LoggerTransport>;\n } = {},\n ) {\n this.name = options.name || 'Mastra';\n this.level = options.level || LogLevel.ERROR;\n this.transports = new Map(Object.entries(options.transports || {}));\n }\n\n abstract debug(message: string, ...args: any[]): void;\n abstract info(message: string, ...args: any[]): void;\n abstract warn(message: string, ...args: any[]): void;\n abstract error(message: string, ...args: any[]): void;\n\n getTransports() {\n return this.transports;\n }\n\n trackException(_error: Error, _metadata?: Record<string, unknown>) {}\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId || !this.transports.has(transportId)) {\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports.get(transportId)!.listLogs?.(params) ?? {\n logs: [],\n total: 0,\n page: params?.page ?? 1,\n perPage: params?.perPage ?? 100,\n hasMore: false,\n }\n );\n }\n\n async listLogsByRunId({\n transportId,\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId || !this.transports.has(transportId) || !runId) {\n return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };\n }\n\n return (\n this.transports\n .get(transportId)!\n .listLogsByRunId?.({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {\n logs: [],\n total: 0,\n page: page ?? 1,\n perPage: perPage ?? 100,\n hasMore: false,\n }\n );\n }\n}\n\nexport type LogFilterContext = {\n component?: RegisteredLogger;\n level: LogLevel;\n message: string;\n args: unknown[];\n};\n\nexport type LogFilter = (ctx: LogFilterContext) => boolean;\n\nexport interface ConsoleLoggerOptions {\n name?: string;\n level?: LogLevel;\n component?: RegisteredLogger;\n filter?: LogFilter;\n}\n\nexport class ConsoleLogger extends MastraLogger {\n protected component?: RegisteredLogger;\n protected filter?: LogFilter;\n\n constructor(options: ConsoleLoggerOptions = {}) {\n super(options);\n this.component = options.component;\n this.filter = options.filter;\n }\n\n child(componentOrBindings: RegisteredLogger | Record<string, unknown>): ConsoleLogger {\n const component =\n typeof componentOrBindings === 'string'\n ? componentOrBindings\n : ((componentOrBindings?.component as RegisteredLogger) ?? this.component);\n return new ConsoleLogger({\n name: this.name,\n level: this.level,\n component,\n filter: this.filter,\n });\n }\n\n private shouldLog(level: LogLevel, message: string, args: unknown[]): boolean {\n if (!this.filter) return true;\n try {\n return this.filter({ component: this.component, level, message, args });\n } catch (e) {\n console.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n return true;\n }\n }\n\n private prefix(): string {\n return this.component ? `[${this.component}] ` : '';\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.INFO, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.WARN, message, args)\n ) {\n console.info(`${this.prefix()}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (\n (this.level === LogLevel.ERROR ||\n this.level === LogLevel.WARN ||\n this.level === LogLevel.INFO ||\n this.level === LogLevel.DEBUG) &&\n this.shouldLog(LogLevel.ERROR, message, args)\n ) {\n console.error(`${this.prefix()}${message}`, ...args);\n }\n }\n\n async listLogs(\n _transportId: string,\n _params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n return { logs: [], total: 0, page: _params?.page ?? 1, perPage: _params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(_args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n return { logs: [], total: 0, page: _args.page ?? 1, perPage: _args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { IMastraLogger } from '../logger';\nimport { ConsoleLogger, RegisteredLogger } from '../logger';\n\nexport class MastraBase {\n component: RegisteredLogger = RegisteredLogger.LLM;\n protected logger: IMastraLogger;\n name?: string;\n #rawConfig?: Record<string, unknown>;\n\n constructor({\n component,\n name,\n rawConfig,\n }: {\n component?: RegisteredLogger;\n name?: string;\n rawConfig?: Record<string, unknown>;\n }) {\n this.component = component || RegisteredLogger.LLM;\n this.name = name;\n this.#rawConfig = rawConfig;\n this.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n }\n\n /**\n * Returns the raw storage configuration this primitive was created from,\n * or undefined if it was created from code.\n */\n toRawConfig(): Record<string, unknown> | undefined {\n return this.#rawConfig;\n }\n\n /**\n * Sets the raw storage configuration for this primitive.\n * @internal\n */\n __setRawConfig(rawConfig: Record<string, unknown>): void {\n this.#rawConfig = rawConfig;\n }\n\n /**\n * Set the logger for the agent\n * @param logger\n */\n __setLogger(logger: IMastraLogger) {\n this.logger =\n 'child' in logger && typeof (logger as any).child === 'function'\n ? (logger as any).child({ component: this.component })\n : logger;\n }\n}\n","import { MastraBase } from '@internal/core/base';\nimport type { ToolsInput } from '@internal/core/types';\n\nexport type VoiceEventType = 'speaking' | 'writing' | 'error' | string;\n\nexport interface VoiceEventMap {\n speaker: NodeJS.ReadableStream;\n speaking: { audio?: string };\n writing: { text: string; role: 'assistant' | 'user' };\n error: { message: string; code?: string; details?: unknown };\n [key: string]: unknown;\n}\n\ninterface BuiltInModelConfig {\n name: string;\n apiKey?: string;\n}\n\nexport interface VoiceConfig<T = unknown> {\n listeningModel?: BuiltInModelConfig;\n speechModel?: BuiltInModelConfig;\n speaker?: string;\n name?: string;\n realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: T;\n };\n}\n\nexport interface VoiceSpanConfig {\n component: 'VOICE';\n name?: string;\n speaker?: string;\n listeningModel?: { name: string };\n speechModel?: { name: string };\n realtimeModel?: string;\n}\n\nexport interface IMastraVoice<\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n> {\n serializeForSpan(): VoiceSpanConfig;\n speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n listen(\n audioStream: NodeJS.ReadableStream | unknown,\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n updateConfig(options: Record<string, unknown>): void;\n connect(options?: Record<string, unknown>): Promise<void>;\n send(audioData: NodeJS.ReadableStream | Int16Array): Promise<void>;\n answer(options?: Record<string, unknown>): Promise<void>;\n addInstructions(instructions?: string): void;\n addTools(tools: TTools): void;\n close(): void;\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void;\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n >;\n getListener(): Promise<{ enabled: boolean }>;\n}\n\nexport abstract class MastraVoice<\n TOptions = unknown,\n TSpeakOptions = unknown,\n TListenOptions = unknown,\n TTools extends ToolsInput = ToolsInput,\n TEventArgs extends VoiceEventMap = VoiceEventMap,\n TSpeakerMetadata = unknown,\n>\n extends MastraBase\n implements IMastraVoice<TSpeakOptions, TListenOptions, TTools, TEventArgs, TSpeakerMetadata>\n{\n protected listeningModel?: BuiltInModelConfig;\n protected speechModel?: BuiltInModelConfig;\n protected speaker?: string;\n protected realtimeConfig?: {\n model?: string;\n apiKey?: string;\n options?: TOptions;\n };\n\n constructor({ listeningModel, speechModel, speaker, realtimeConfig, name }: VoiceConfig<TOptions> = {}) {\n super({\n component: 'VOICE',\n name,\n });\n this.listeningModel = listeningModel;\n this.speechModel = speechModel;\n this.speaker = speaker;\n this.realtimeConfig = realtimeConfig;\n }\n\n /**\n * Custom serialization for tracing/observability spans.\n * Excludes `apiKey` from listeningModel / speechModel / realtimeConfig\n * and any provider-specific state held by subclasses. Subclasses that\n * need to expose additional non-sensitive fields can override.\n */\n serializeForSpan(): VoiceSpanConfig {\n return {\n component: 'VOICE',\n name: this.name,\n speaker: this.speaker,\n listeningModel: this.listeningModel ? { name: this.listeningModel.name } : undefined,\n speechModel: this.speechModel ? { name: this.speechModel.name } : undefined,\n realtimeModel: this.realtimeConfig?.model,\n };\n }\n\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream\n */\n /**\n * Convert text to speech\n * @param input Text or text stream to convert to speech\n * @param options Speech options including speaker and provider-specific options\n * @returns Audio stream or void if in chat mode\n */\n abstract speak(\n input: string | NodeJS.ReadableStream,\n options?: {\n speaker?: string;\n } & TSpeakOptions,\n ): Promise<NodeJS.ReadableStream | void>;\n\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text or text stream\n */\n /**\n * Convert speech to text\n * @param audioStream Audio stream to transcribe\n * @param options Provider-specific transcription options\n * @returns Text, text stream, or void if in chat mode\n */\n abstract listen(\n audioStream: NodeJS.ReadableStream | unknown, // Allow other audio input types for OpenAI realtime API\n options?: TListenOptions,\n ): Promise<string | NodeJS.ReadableStream | void>;\n\n updateConfig(_options: Record<string, unknown>): void {\n this.logger.debug('updateConfig not implemented by this voice provider');\n }\n\n /**\n * Initializes a WebSocket or WebRTC connection for real-time communication\n * @returns Promise that resolves when the connection is established\n */\n async connect(_options?: Record<string, unknown>): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('connect not implemented by this voice provider');\n }\n\n /**\n * Relay audio data to the voice provider for real-time processing\n * @param audioData Audio data to relay\n */\n async send(_audioData: NodeJS.ReadableStream | Int16Array): Promise<void> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('relay not implemented by this voice provider');\n }\n\n /**\n * Trigger voice providers to respond\n */\n async answer(_options?: Record<string, unknown>): Promise<void> {\n this.logger.debug('answer not implemented by this voice provider');\n }\n\n /**\n * Equip the voice provider with instructions\n * @param instructions Instructions to add\n */\n addInstructions(_instructions?: string): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Equip the voice provider with tools\n * @param tools Array of tools to add\n */\n addTools(_tools: TTools): void {\n // Default implementation - voice providers can override if they support this feature\n }\n\n /**\n * Disconnect from the WebSocket or WebRTC connection\n */\n close(): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('close not implemented by this voice provider');\n }\n\n /**\n * Register an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function that receives event data\n */\n on<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('on not implemented by this voice provider');\n }\n\n /**\n * Remove an event listener\n * @param event Event name (e.g., 'speaking', 'writing', 'error')\n * @param callback Callback function to remove\n */\n off<E extends VoiceEventType>(\n _event: E,\n _callback: (data: E extends keyof TEventArgs ? TEventArgs[E] : unknown) => void,\n ): void {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('off not implemented by this voice provider');\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getSpeakers(): Promise<\n Array<\n {\n voiceId: string;\n } & TSpeakerMetadata\n >\n > {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('getSpeakers not implemented by this voice provider');\n return Promise.resolve([]);\n }\n\n /**\n * Get available speakers/voices\n * @returns Array of available voice IDs and their metadata\n */\n getListener(): Promise<{ enabled: boolean }> {\n // Default implementation - voice providers can override if they support this feature\n this.logger.debug('getListener not implemented by this voice provider');\n return Promise.resolve({ enabled: false });\n }\n}\n","import type {\n Ai,\n Ai_Cf_Openai_Whisper_Large_V3_Turbo_Output,\n Ai_Cf_Openai_Whisper_Output,\n Ai_Cf_Openai_Whisper_Tiny_En_Output,\n} from '@cloudflare/workers-types';\nimport { MastraVoice } from '@internal/voice';\nimport Cloudflare from 'cloudflare';\n\ninterface CloudflareListenOptions {\n apiKey?: string;\n model?: '@cf/openai/whisper-tiny-en' | '@cf/openai/whisper' | '@cf/openai/whisper-large-v3-turbo';\n account_id?: string;\n}\n\ntype CloudflareListenOutput =\n | Ai_Cf_Openai_Whisper_Tiny_En_Output\n | Ai_Cf_Openai_Whisper_Large_V3_Turbo_Output\n | Ai_Cf_Openai_Whisper_Output;\n\nconst defaultListeningModel = {\n model: '@cf/openai/whisper-large-v3-turbo' as const,\n apiKey: process.env.CLOUDFLARE_AI_API_KEY,\n account_id: process.env.CLOUDFLARE_ACCOUNT_ID!,\n};\n\nexport class CloudflareVoice extends MastraVoice {\n private apiToken?: string;\n private client: Cloudflare | null = null;\n private binding?: Ai;\n\n constructor({\n listeningModel,\n binding,\n }: {\n listeningModel?: CloudflareListenOptions;\n binding?: Ai;\n } = {}) {\n super({\n listeningModel: {\n name: listeningModel?.model ?? defaultListeningModel.model,\n apiKey: listeningModel?.apiKey ?? defaultListeningModel.apiKey,\n },\n });\n\n // Store Workers AI binding if provided\n this.binding = binding;\n\n // Only setup REST client if no binding provided or both are needed\n if (!binding) {\n this.apiToken = listeningModel?.apiKey || defaultListeningModel.apiKey;\n if (!this.apiToken) {\n throw new Error('CLOUDFLARE_AI_API_KEY must be set when not using bindings');\n }\n this.client = new Cloudflare({ apiToken: this.apiToken });\n }\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: true };\n }\n\n async listen(audioStream: NodeJS.ReadableStream, options?: CloudflareListenOptions): Promise<string> {\n // Collect audio data into buffer\n const chunks: Buffer[] = [];\n for await (const chunk of audioStream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n const audioBuffer = Buffer.concat(chunks);\n const base64Audio = audioBuffer.toString('base64');\n\n const model = options?.model || defaultListeningModel.model;\n\n // Use native binding if available, otherwise use REST API\n if (this.binding) {\n // Using Workers AI binding\n const response = (await this.binding.run(model, {\n audio: base64Audio,\n })) as CloudflareListenOutput;\n return response.text;\n } else if (this.client) {\n // Using REST API client\n const payload = { audio: base64Audio, account_id: options?.account_id || defaultListeningModel.account_id };\n const response = (await this.client.ai.run(model, payload)) as any;\n return response.text as string;\n } else {\n throw new Error('Neither binding nor REST client is configured');\n }\n }\n async speak(): Promise<NodeJS.ReadableStream> {\n throw new Error('This feature is not yet implemented.');\n }\n async getSpeakers(): Promise<Array<{ voiceId: string; [key: string]: any }>> {\n throw new Error('This feature is not yet implemented.');\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Ai } from '@cloudflare/workers-types';
2
- import { MastraVoice } from '@mastra/core/voice';
2
+ import { MastraVoice } from './_types/@internal_voice/dist/index.d.ts';
3
3
  interface CloudflareListenOptions {
4
4
  apiKey?: string;
5
5
  model?: '@cf/openai/whisper-tiny-en' | '@cf/openai/whisper' | '@cf/openai/whisper-large-v3-turbo';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EAIH,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,4BAA4B,GAAG,oBAAoB,GAAG,mCAAmC,CAAC;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAAC,CAAK;gBAET,EACV,cAAc,EACd,OAAO,GACR,GAAE;QACD,cAAc,CAAC,EAAE,uBAAuB,CAAC;QACzC,OAAO,CAAC,EAAE,EAAE,CAAC;KACT;IAqBN;;;;OAIG;IACG,WAAW;;;IAIX,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B9F,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;IAGvC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAC;CAG7E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EAIH,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,4BAA4B,GAAG,oBAAoB,GAAG,mCAAmC,CAAC;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAAC,CAAK;gBAET,EACV,cAAc,EACd,OAAO,GACR,GAAE;QACD,cAAc,CAAC,EAAE,uBAAuB,CAAC;QACzC,OAAO,CAAC,EAAE,EAAE,CAAC;KACT;IAqBN;;;;OAIG;IACG,WAAW;;;IAIX,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B9F,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;IAGvC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAC;CAG7E"}
package/dist/index.js CHANGED
@@ -1,7 +1,263 @@
1
- import { MastraVoice } from '@mastra/core/voice';
2
1
  import Cloudflare from 'cloudflare';
3
2
 
4
- // src/index.ts
3
+ // ../../packages/_internal-core/dist/chunk-HDURQPU2.js
4
+ var RegisteredLogger = {
5
+ LLM: "LLM"};
6
+ var LogLevel = {
7
+ DEBUG: "debug",
8
+ INFO: "info",
9
+ WARN: "warn",
10
+ ERROR: "error"};
11
+ var MastraLogger = class {
12
+ name;
13
+ level;
14
+ transports;
15
+ constructor(options = {}) {
16
+ this.name = options.name || "Mastra";
17
+ this.level = options.level || LogLevel.ERROR;
18
+ this.transports = new Map(Object.entries(options.transports || {}));
19
+ }
20
+ getTransports() {
21
+ return this.transports;
22
+ }
23
+ trackException(_error, _metadata) {
24
+ }
25
+ async listLogs(transportId, params) {
26
+ if (!transportId || !this.transports.has(transportId)) {
27
+ return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
28
+ }
29
+ return this.transports.get(transportId).listLogs?.(params) ?? {
30
+ logs: [],
31
+ total: 0,
32
+ page: params?.page ?? 1,
33
+ perPage: params?.perPage ?? 100,
34
+ hasMore: false
35
+ };
36
+ }
37
+ async listLogsByRunId({
38
+ transportId,
39
+ runId,
40
+ fromDate,
41
+ toDate,
42
+ logLevel,
43
+ filters,
44
+ page,
45
+ perPage
46
+ }) {
47
+ if (!transportId || !this.transports.has(transportId) || !runId) {
48
+ return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
49
+ }
50
+ return this.transports.get(transportId).listLogsByRunId?.({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
51
+ logs: [],
52
+ total: 0,
53
+ page: page ?? 1,
54
+ perPage: perPage ?? 100,
55
+ hasMore: false
56
+ };
57
+ }
58
+ };
59
+ var ConsoleLogger = class _ConsoleLogger extends MastraLogger {
60
+ component;
61
+ filter;
62
+ constructor(options = {}) {
63
+ super(options);
64
+ this.component = options.component;
65
+ this.filter = options.filter;
66
+ }
67
+ child(componentOrBindings) {
68
+ const component = typeof componentOrBindings === "string" ? componentOrBindings : componentOrBindings?.component ?? this.component;
69
+ return new _ConsoleLogger({
70
+ name: this.name,
71
+ level: this.level,
72
+ component,
73
+ filter: this.filter
74
+ });
75
+ }
76
+ shouldLog(level, message, args) {
77
+ if (!this.filter) return true;
78
+ try {
79
+ return this.filter({ component: this.component, level, message, args });
80
+ } catch (e) {
81
+ console.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);
82
+ return true;
83
+ }
84
+ }
85
+ prefix() {
86
+ return this.component ? `[${this.component}] ` : "";
87
+ }
88
+ debug(message, ...args) {
89
+ if (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) {
90
+ console.info(`${this.prefix()}${message}`, ...args);
91
+ }
92
+ }
93
+ info(message, ...args) {
94
+ if ((this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.INFO, message, args)) {
95
+ console.info(`${this.prefix()}${message}`, ...args);
96
+ }
97
+ }
98
+ warn(message, ...args) {
99
+ if ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) {
100
+ console.info(`${this.prefix()}${message}`, ...args);
101
+ }
102
+ }
103
+ error(message, ...args) {
104
+ if ((this.level === LogLevel.ERROR || this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.ERROR, message, args)) {
105
+ console.error(`${this.prefix()}${message}`, ...args);
106
+ }
107
+ }
108
+ async listLogs(_transportId, _params) {
109
+ return { logs: [], total: 0, page: _params?.page ?? 1, perPage: _params?.perPage ?? 100, hasMore: false };
110
+ }
111
+ async listLogsByRunId(_args) {
112
+ return { logs: [], total: 0, page: _args.page ?? 1, perPage: _args.perPage ?? 100, hasMore: false };
113
+ }
114
+ };
115
+
116
+ // ../../packages/_internal-core/dist/base/index.js
117
+ var MastraBase = class {
118
+ component = RegisteredLogger.LLM;
119
+ logger;
120
+ name;
121
+ #rawConfig;
122
+ constructor({
123
+ component,
124
+ name,
125
+ rawConfig
126
+ }) {
127
+ this.component = component || RegisteredLogger.LLM;
128
+ this.name = name;
129
+ this.#rawConfig = rawConfig;
130
+ this.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });
131
+ }
132
+ /**
133
+ * Returns the raw storage configuration this primitive was created from,
134
+ * or undefined if it was created from code.
135
+ */
136
+ toRawConfig() {
137
+ return this.#rawConfig;
138
+ }
139
+ /**
140
+ * Sets the raw storage configuration for this primitive.
141
+ * @internal
142
+ */
143
+ __setRawConfig(rawConfig) {
144
+ this.#rawConfig = rawConfig;
145
+ }
146
+ /**
147
+ * Set the logger for the agent
148
+ * @param logger
149
+ */
150
+ __setLogger(logger) {
151
+ this.logger = "child" in logger && typeof logger.child === "function" ? logger.child({ component: this.component }) : logger;
152
+ }
153
+ };
154
+
155
+ // ../../packages/_internals/voice/dist/chunk-NWNKSBZV.js
156
+ var MastraVoice = class extends MastraBase {
157
+ listeningModel;
158
+ speechModel;
159
+ speaker;
160
+ realtimeConfig;
161
+ constructor({ listeningModel, speechModel, speaker, realtimeConfig, name } = {}) {
162
+ super({
163
+ component: "VOICE",
164
+ name
165
+ });
166
+ this.listeningModel = listeningModel;
167
+ this.speechModel = speechModel;
168
+ this.speaker = speaker;
169
+ this.realtimeConfig = realtimeConfig;
170
+ }
171
+ /**
172
+ * Custom serialization for tracing/observability spans.
173
+ * Excludes `apiKey` from listeningModel / speechModel / realtimeConfig
174
+ * and any provider-specific state held by subclasses. Subclasses that
175
+ * need to expose additional non-sensitive fields can override.
176
+ */
177
+ serializeForSpan() {
178
+ return {
179
+ component: "VOICE",
180
+ name: this.name,
181
+ speaker: this.speaker,
182
+ listeningModel: this.listeningModel ? { name: this.listeningModel.name } : void 0,
183
+ speechModel: this.speechModel ? { name: this.speechModel.name } : void 0,
184
+ realtimeModel: this.realtimeConfig?.model
185
+ };
186
+ }
187
+ updateConfig(_options) {
188
+ this.logger.debug("updateConfig not implemented by this voice provider");
189
+ }
190
+ /**
191
+ * Initializes a WebSocket or WebRTC connection for real-time communication
192
+ * @returns Promise that resolves when the connection is established
193
+ */
194
+ async connect(_options) {
195
+ this.logger.debug("connect not implemented by this voice provider");
196
+ }
197
+ /**
198
+ * Relay audio data to the voice provider for real-time processing
199
+ * @param audioData Audio data to relay
200
+ */
201
+ async send(_audioData) {
202
+ this.logger.debug("relay not implemented by this voice provider");
203
+ }
204
+ /**
205
+ * Trigger voice providers to respond
206
+ */
207
+ async answer(_options) {
208
+ this.logger.debug("answer not implemented by this voice provider");
209
+ }
210
+ /**
211
+ * Equip the voice provider with instructions
212
+ * @param instructions Instructions to add
213
+ */
214
+ addInstructions(_instructions) {
215
+ }
216
+ /**
217
+ * Equip the voice provider with tools
218
+ * @param tools Array of tools to add
219
+ */
220
+ addTools(_tools) {
221
+ }
222
+ /**
223
+ * Disconnect from the WebSocket or WebRTC connection
224
+ */
225
+ close() {
226
+ this.logger.debug("close not implemented by this voice provider");
227
+ }
228
+ /**
229
+ * Register an event listener
230
+ * @param event Event name (e.g., 'speaking', 'writing', 'error')
231
+ * @param callback Callback function that receives event data
232
+ */
233
+ on(_event, _callback) {
234
+ this.logger.debug("on not implemented by this voice provider");
235
+ }
236
+ /**
237
+ * Remove an event listener
238
+ * @param event Event name (e.g., 'speaking', 'writing', 'error')
239
+ * @param callback Callback function to remove
240
+ */
241
+ off(_event, _callback) {
242
+ this.logger.debug("off not implemented by this voice provider");
243
+ }
244
+ /**
245
+ * Get available speakers/voices
246
+ * @returns Array of available voice IDs and their metadata
247
+ */
248
+ getSpeakers() {
249
+ this.logger.debug("getSpeakers not implemented by this voice provider");
250
+ return Promise.resolve([]);
251
+ }
252
+ /**
253
+ * Get available speakers/voices
254
+ * @returns Array of available voice IDs and their metadata
255
+ */
256
+ getListener() {
257
+ this.logger.debug("getListener not implemented by this voice provider");
258
+ return Promise.resolve({ enabled: false });
259
+ }
260
+ };
5
261
  var defaultListeningModel = {
6
262
  model: "@cf/openai/whisper-large-v3-turbo",
7
263
  apiKey: process.env.CLOUDFLARE_AI_API_KEY,