@elizaos/plugin-suno 1.0.6-alpha.3 → 1.0.6-alpha.4
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/dist/index.js +72 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/actions/customGenerate.ts +31 -1
- package/src/actions/extend.ts +31 -1
- package/src/actions/generate.ts +31 -1
package/dist/index.js
CHANGED
|
@@ -46,8 +46,30 @@ var generateMusic = {
|
|
|
46
46
|
"CREATE_SONG",
|
|
47
47
|
"MAKE_SONG"
|
|
48
48
|
],
|
|
49
|
-
validate: async (runtime,
|
|
50
|
-
|
|
49
|
+
validate: async (runtime, message, state, options) => {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
const __avTextRaw = typeof ((_a = message == null ? void 0 : message.content) == null ? void 0 : _a.text) === "string" ? message.content.text : "";
|
|
52
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
53
|
+
const __avKeywords = ["generate", "music"];
|
|
54
|
+
const __avKeywordOk = __avKeywords.length > 0 && __avKeywords.some((word) => word.length > 0 && __avText.includes(word));
|
|
55
|
+
const __avRegex = new RegExp("\\b(?:generate|music)\\b", "i");
|
|
56
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
57
|
+
const __avSource = String(((_b = message == null ? void 0 : message.content) == null ? void 0 : _b.source) ?? (message == null ? void 0 : message.source) ?? "");
|
|
58
|
+
const __avExpectedSource = "";
|
|
59
|
+
const __avSourceOk = __avExpectedSource ? __avSource === __avExpectedSource : Boolean(__avSource || state || (runtime == null ? void 0 : runtime.agentId) || (runtime == null ? void 0 : runtime.getService) || (runtime == null ? void 0 : runtime.getSetting));
|
|
60
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
61
|
+
const __avInputOk = __avText.trim().length > 0 || Object.keys(__avOptions).length > 0 || Boolean((message == null ? void 0 : message.content) && typeof message.content === "object");
|
|
62
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const __avLegacyValidate = async (runtime2, _message) => {
|
|
66
|
+
return !!runtime2.getSetting("SUNO_API_KEY");
|
|
67
|
+
};
|
|
68
|
+
try {
|
|
69
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
70
|
+
} catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
51
73
|
},
|
|
52
74
|
handler: async (runtime, message, state, _options, callback) => {
|
|
53
75
|
try {
|
|
@@ -176,8 +198,30 @@ var customGenerateMusic = {
|
|
|
176
198
|
"CREATE_MUSIC",
|
|
177
199
|
"GENERATE_MUSIC"
|
|
178
200
|
],
|
|
179
|
-
validate: async (runtime,
|
|
180
|
-
|
|
201
|
+
validate: async (runtime, message, state, options) => {
|
|
202
|
+
var _a, _b;
|
|
203
|
+
const __avTextRaw = typeof ((_a = message == null ? void 0 : message.content) == null ? void 0 : _a.text) === "string" ? message.content.text : "";
|
|
204
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
205
|
+
const __avKeywords = ["custom", "generate", "music"];
|
|
206
|
+
const __avKeywordOk = __avKeywords.length > 0 && __avKeywords.some((word) => word.length > 0 && __avText.includes(word));
|
|
207
|
+
const __avRegex = new RegExp("\\b(?:custom|generate|music)\\b", "i");
|
|
208
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
209
|
+
const __avSource = String(((_b = message == null ? void 0 : message.content) == null ? void 0 : _b.source) ?? (message == null ? void 0 : message.source) ?? "");
|
|
210
|
+
const __avExpectedSource = "";
|
|
211
|
+
const __avSourceOk = __avExpectedSource ? __avSource === __avExpectedSource : Boolean(__avSource || state || (runtime == null ? void 0 : runtime.agentId) || (runtime == null ? void 0 : runtime.getService) || (runtime == null ? void 0 : runtime.getSetting));
|
|
212
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
213
|
+
const __avInputOk = __avText.trim().length > 0 || Object.keys(__avOptions).length > 0 || Boolean((message == null ? void 0 : message.content) && typeof message.content === "object");
|
|
214
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
const __avLegacyValidate = async (runtime2, _message) => {
|
|
218
|
+
return !!runtime2.getSetting("SUNO_API_KEY");
|
|
219
|
+
};
|
|
220
|
+
try {
|
|
221
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
222
|
+
} catch {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
181
225
|
},
|
|
182
226
|
handler: async (runtime, message, state, _options, callback) => {
|
|
183
227
|
try {
|
|
@@ -312,8 +356,30 @@ var extendAudio = {
|
|
|
312
356
|
"INCREASE_DURATION",
|
|
313
357
|
"MAKE_AUDIO_LONGER"
|
|
314
358
|
],
|
|
315
|
-
validate: async (runtime,
|
|
316
|
-
|
|
359
|
+
validate: async (runtime, message, state, options) => {
|
|
360
|
+
var _a, _b;
|
|
361
|
+
const __avTextRaw = typeof ((_a = message == null ? void 0 : message.content) == null ? void 0 : _a.text) === "string" ? message.content.text : "";
|
|
362
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
363
|
+
const __avKeywords = ["extend", "audio"];
|
|
364
|
+
const __avKeywordOk = __avKeywords.length > 0 && __avKeywords.some((word) => word.length > 0 && __avText.includes(word));
|
|
365
|
+
const __avRegex = new RegExp("\\b(?:extend|audio)\\b", "i");
|
|
366
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
367
|
+
const __avSource = String(((_b = message == null ? void 0 : message.content) == null ? void 0 : _b.source) ?? (message == null ? void 0 : message.source) ?? "");
|
|
368
|
+
const __avExpectedSource = "";
|
|
369
|
+
const __avSourceOk = __avExpectedSource ? __avSource === __avExpectedSource : Boolean(__avSource || state || (runtime == null ? void 0 : runtime.agentId) || (runtime == null ? void 0 : runtime.getService) || (runtime == null ? void 0 : runtime.getSetting));
|
|
370
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
371
|
+
const __avInputOk = __avText.trim().length > 0 || Object.keys(__avOptions).length > 0 || Boolean((message == null ? void 0 : message.content) && typeof message.content === "object");
|
|
372
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
373
|
+
return false;
|
|
374
|
+
}
|
|
375
|
+
const __avLegacyValidate = async (runtime2, _message) => {
|
|
376
|
+
return !!runtime2.getSetting("SUNO_API_KEY");
|
|
377
|
+
};
|
|
378
|
+
try {
|
|
379
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
380
|
+
} catch {
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
317
383
|
},
|
|
318
384
|
handler: async (runtime, message, state, _options, callback) => {
|
|
319
385
|
try {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/suno.ts","../src/actions/generate.ts","../src/actions/customGenerate.ts","../src/actions/extend.ts","../src/index.ts"],"sourcesContent":["import type { IAgentRuntime, Memory, State } from \"@elizaos/core\"; // Added type keyword\r\nimport type { Provider } from \"@elizaos/core\"; // Added type keyword\r\n\r\nexport interface SunoConfig {\r\n apiKey: string;\r\n baseUrl?: string;\r\n}\r\n\r\nexport class SunoProvider implements Provider {\r\n private apiKey: string;\r\n private baseUrl: string;\r\n\r\n static async get(runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<SunoProvider> {\r\n const apiKey = runtime.getSetting(\"SUNO_API_KEY\");\r\n if (!apiKey) {\r\n throw new Error(\"SUNO_API_KEY is required\");\r\n }\r\n return new SunoProvider({ apiKey });\r\n }\r\n\r\n constructor(config: SunoConfig) {\r\n this.apiKey = config.apiKey;\r\n this.baseUrl = config.baseUrl || 'https://api.suno.ai/v1';\r\n }\r\n\r\n async get(_runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<{ status: string }> {\r\n return { status: 'ready' };\r\n }\r\n\r\n async request(endpoint: string, options: RequestInit = {}) {\r\n const url = `${this.baseUrl}${endpoint}`;\r\n const headers = {\r\n 'Authorization': `Bearer ${this.apiKey}`,\r\n 'Content-Type': 'application/json',\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Suno API error: ${response.statusText}`);\r\n }\r\n\r\n return response.json();\r\n }\r\n}\r\n\r\nexport interface GenerateParams {\r\n prompt: string;\r\n duration?: number;\r\n temperature?: number;\r\n topK?: number;\r\n topP?: number;\r\n classifier_free_guidance?: number;\r\n}\r\n\r\nexport interface CustomGenerateParams extends GenerateParams {\r\n reference_audio?: string;\r\n style?: string;\r\n bpm?: number;\r\n key?: string;\r\n mode?: string;\r\n}\r\n\r\nexport interface ExtendParams {\r\n audio_id: string;\r\n duration: number;\r\n}\r\n\r\nexport interface GenerationResponse {\r\n id: string;\r\n status: 'pending' | 'processing' | 'completed' | 'failed';\r\n audio_url?: string;\r\n error?: string;\r\n}","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from \"@elizaos/core\";\r\nimport { SunoProvider } from \"../providers/suno\";\r\nimport type { GenerateParams } from \"../types\";\r\n\r\nconst generateMusic: Action = {\r\n name: \"generate-music\",\r\n description: \"Generate music using Suno AI\",\r\n similes: [\r\n \"CREATE_MUSIC\",\r\n \"MAKE_MUSIC\",\r\n \"COMPOSE_MUSIC\",\r\n \"GENERATE_AUDIO\",\r\n \"CREATE_SONG\",\r\n \"MAKE_SONG\"\r\n ],\r\n\r\n validate: async (runtime: IAgentRuntime, _message: Memory) => {\r\n return !!runtime.getSetting(\"SUNO_API_KEY\");\r\n },\r\n\r\n handler: async (\r\n runtime: IAgentRuntime,\r\n message: Memory,\r\n state: State,\r\n _options: { [key: string]: unknown },\r\n callback?: HandlerCallback\r\n ): Promise<boolean> => {\r\n try {\r\n const provider = await SunoProvider.get(runtime, message, state);\r\n const content = message.content as unknown as GenerateParams;\r\n\r\n if (!content.prompt) {\r\n throw new Error(\"Missing required parameter: prompt\");\r\n }\r\n\r\n const response = await provider.request('/generate', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n prompt: content.prompt,\r\n duration: content.duration || 30,\r\n temperature: content.temperature || 1.0,\r\n top_k: content.topK || 250,\r\n top_p: content.topP || 0.95,\r\n classifier_free_guidance: content.classifier_free_guidance || 3.0\r\n })\r\n });\r\n\r\n if (callback) {\r\n callback({\r\n text: 'Successfully generated music based on your prompt',\r\n content: response\r\n });\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n if (callback) {\r\n callback({\r\n text: `Failed to extend audio: ${(error as Error).message}`,\r\n error: error\r\n });\r\n }\r\n return false;\r\n }\r\n },\r\n\r\n examples: [\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Create a happy and energetic song\",\r\n prompt: \"A cheerful and energetic melody with upbeat rhythm\",\r\n duration: 30,\r\n temperature: 1.0\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate a happy and energetic song for you.\",\r\n action: \"generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your upbeat and energetic song.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Generate a relaxing ambient track\",\r\n prompt: \"A peaceful ambient soundscape with gentle waves and soft pads\",\r\n duration: 45,\r\n temperature: 0.8,\r\n classifier_free_guidance: 4.0\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll create a calming ambient piece for you.\",\r\n action: \"generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your relaxing ambient soundscape.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Make a short jingle for my podcast\",\r\n prompt: \"A catchy and professional podcast intro jingle\",\r\n duration: 15,\r\n temperature: 1.2,\r\n top_k: 300\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate a podcast jingle for you.\",\r\n action: \"generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your podcast jingle.\"\r\n }\r\n }\r\n ]\r\n ]\r\n};\r\n\r\nexport default generateMusic;","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from \"@elizaos/core\";\r\nimport { SunoProvider } from \"../providers/suno\";\r\nimport type { CustomGenerateParams } from \"../types\";\r\n\r\nconst customGenerateMusic: Action = {\r\n name: \"custom-generate-music\",\r\n description: \"Generate music with custom parameters using Suno AI\",\r\n similes: [\r\n \"CREATE_CUSTOM_MUSIC\",\r\n \"GENERATE_CUSTOM_AUDIO\",\r\n \"MAKE_CUSTOM_MUSIC\",\r\n \"COMPOSE_CUSTOM_MUSIC\",\r\n \"COMPOSE_MUSIC\",\r\n \"CREATE_MUSIC\",\r\n \"GENERATE_MUSIC\"\r\n\r\n ],\r\n\r\n validate: async (runtime: IAgentRuntime, _message: Memory) => {\r\n return !!runtime.getSetting(\"SUNO_API_KEY\");\r\n },\r\n\r\n handler: async (\r\n runtime: IAgentRuntime,\r\n message: Memory,\r\n state: State,\r\n _options: { [key: string]: unknown },\r\n callback?: HandlerCallback\r\n ): Promise<boolean> => {\r\n try {\r\n const provider = await SunoProvider.get(runtime, message, state);\r\n const content = message.content as unknown as CustomGenerateParams;\r\n\r\n if (!content.prompt) {\r\n throw new Error(\"Missing required parameter: prompt\");\r\n }\r\n\r\n const response = await provider.request('/custom-generate', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n prompt: content.prompt,\r\n duration: content.duration || 30,\r\n temperature: content.temperature || 1.0,\r\n top_k: content.topK || 250,\r\n top_p: content.topP || 0.95,\r\n classifier_free_guidance: content.classifier_free_guidance || 3.0,\r\n reference_audio: content.reference_audio,\r\n style: content.style,\r\n bpm: content.bpm,\r\n key: content.key,\r\n mode: content.mode\r\n })\r\n });\r\n\r\n if (callback) {\r\n callback({\r\n text: 'Successfully generated custom music',\r\n content: response\r\n });\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n if (callback) {\r\n callback({\r\n text: `Failed to generate custom music: ${(error as Error).message}`,\r\n error: error\r\n });\r\n }\r\n return false;\r\n }\r\n },\r\n\r\n examples: [\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Create an upbeat electronic dance track with heavy bass\",\r\n prompt: \"An upbeat electronic dance track with heavy bass and energetic synths\",\r\n duration: 60,\r\n style: \"electronic\",\r\n bpm: 128\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate an energetic EDM track for you.\",\r\n action: \"custom-generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your EDM track with heavy bass and synths.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Generate a calm piano melody in C major\",\r\n prompt: \"A gentle, flowing piano melody with soft dynamics\",\r\n duration: 45,\r\n style: \"classical\",\r\n key: \"C\",\r\n mode: \"major\",\r\n temperature: 0.8\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll create a calming piano piece in C major for you.\",\r\n action: \"custom-generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your peaceful piano melody in C major.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Make a rock song with guitar solos\",\r\n prompt: \"A rock song with powerful electric guitar solos and driving drums\",\r\n duration: 90,\r\n style: \"rock\",\r\n bpm: 120,\r\n classifier_free_guidance: 4.0\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate a rock track with guitar solos for you.\",\r\n action: \"custom-generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your rock song with guitar solos.\"\r\n }\r\n }\r\n ]\r\n ]\r\n};\r\n\r\nexport default customGenerateMusic;","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from \"@elizaos/core\";\r\nimport { SunoProvider } from \"../providers/suno\";\r\nimport type { ExtendParams } from \"../types\";\r\n\r\nconst extendAudio: Action = {\r\n name: \"extend-audio\",\r\n description: \"Extend the duration of an existing audio generation\",\r\n similes: [\r\n \"LENGTHEN_AUDIO\",\r\n \"PROLONG_AUDIO\",\r\n \"INCREASE_DURATION\",\r\n \"MAKE_AUDIO_LONGER\"\r\n ],\r\n\r\n validate: async (runtime: IAgentRuntime, _message: Memory) => {\r\n return !!runtime.getSetting(\"SUNO_API_KEY\");\r\n },\r\n\r\n handler: async (\r\n runtime: IAgentRuntime,\r\n message: Memory,\r\n state: State,\r\n _options: { [key: string]: unknown },\r\n callback?: HandlerCallback\r\n ): Promise<boolean> => {\r\n try {\r\n const provider = await SunoProvider.get(runtime, message, state);\r\n const content = message.content as unknown as ExtendParams;\r\n\r\n if (!content.audio_id || !content.duration) {\r\n throw new Error(\"Missing required parameters: audio_id and duration\");\r\n }\r\n\r\n const response = await provider.request('/extend', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n audio_id: content.audio_id,\r\n duration: content.duration\r\n })\r\n });\r\n\r\n if (callback) {\r\n callback({\r\n text: `Successfully extended audio ${content.audio_id}`,\r\n content: response\r\n });\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n if (callback) {\r\n callback({\r\n text: `Failed to extend audio: ${(error as Error).message}`,\r\n error: error\r\n });\r\n }\r\n return false;\r\n }\r\n },\r\n\r\n examples: [\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Make this song longer by 30 seconds\",\r\n audio_id: \"abc123\",\r\n duration: 30\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll extend your song by 30 seconds.\",\r\n action: \"extend-audio\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully extended your song by 30 seconds.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Double the length of this track\",\r\n audio_id: \"xyz789\",\r\n duration: 60\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll double the duration of your track.\",\r\n action: \"extend-audio\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully doubled the length of your track to 60 seconds.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Add 15 more seconds to this melody\",\r\n audio_id: \"def456\",\r\n duration: 15\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll add 15 seconds to your melody.\",\r\n action: \"extend-audio\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully added 15 seconds to your melody.\"\r\n }\r\n }\r\n ]\r\n ]\r\n};\r\n\r\nexport default extendAudio;","import type { Plugin } from \"@elizaos/core\";\r\nimport generateMusic from \"./actions/generate\";\r\nimport customGenerateMusic from \"./actions/customGenerate\";\r\nimport extendAudio from \"./actions/extend\";\r\nimport { SunoProvider } from \"./providers/suno\";\r\n\r\nexport {\r\n SunoProvider,\r\n generateMusic as GenerateMusic,\r\n customGenerateMusic as CustomGenerateMusic,\r\n extendAudio as ExtendAudio\r\n};\r\n\r\nexport const sunoPlugin: Plugin = {\r\n name: \"suno\",\r\n description: \"Suno AI Music Generation Plugin for Eliza\",\r\n actions: [generateMusic, customGenerateMusic, extendAudio],\r\n evaluators: [],\r\n providers: [SunoProvider],\r\n};\r\n\r\nexport default sunoPlugin;"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/suno.ts","../src/actions/generate.ts","../src/actions/customGenerate.ts","../src/actions/extend.ts","../src/index.ts"],"sourcesContent":["import type { IAgentRuntime, Memory, State } from \"@elizaos/core\"; // Added type keyword\r\nimport type { Provider } from \"@elizaos/core\"; // Added type keyword\r\n\r\nexport interface SunoConfig {\r\n apiKey: string;\r\n baseUrl?: string;\r\n}\r\n\r\nexport class SunoProvider implements Provider {\r\n private apiKey: string;\r\n private baseUrl: string;\r\n\r\n static async get(runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<SunoProvider> {\r\n const apiKey = runtime.getSetting(\"SUNO_API_KEY\");\r\n if (!apiKey) {\r\n throw new Error(\"SUNO_API_KEY is required\");\r\n }\r\n return new SunoProvider({ apiKey });\r\n }\r\n\r\n constructor(config: SunoConfig) {\r\n this.apiKey = config.apiKey;\r\n this.baseUrl = config.baseUrl || 'https://api.suno.ai/v1';\r\n }\r\n\r\n async get(_runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<{ status: string }> {\r\n return { status: 'ready' };\r\n }\r\n\r\n async request(endpoint: string, options: RequestInit = {}) {\r\n const url = `${this.baseUrl}${endpoint}`;\r\n const headers = {\r\n 'Authorization': `Bearer ${this.apiKey}`,\r\n 'Content-Type': 'application/json',\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Suno API error: ${response.statusText}`);\r\n }\r\n\r\n return response.json();\r\n }\r\n}\r\n\r\nexport interface GenerateParams {\r\n prompt: string;\r\n duration?: number;\r\n temperature?: number;\r\n topK?: number;\r\n topP?: number;\r\n classifier_free_guidance?: number;\r\n}\r\n\r\nexport interface CustomGenerateParams extends GenerateParams {\r\n reference_audio?: string;\r\n style?: string;\r\n bpm?: number;\r\n key?: string;\r\n mode?: string;\r\n}\r\n\r\nexport interface ExtendParams {\r\n audio_id: string;\r\n duration: number;\r\n}\r\n\r\nexport interface GenerationResponse {\r\n id: string;\r\n status: 'pending' | 'processing' | 'completed' | 'failed';\r\n audio_url?: string;\r\n error?: string;\r\n}","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from \"@elizaos/core\";\r\nimport { SunoProvider } from \"../providers/suno\";\r\nimport type { GenerateParams } from \"../types\";\r\n\r\nconst generateMusic: Action = {\r\n name: \"generate-music\",\r\n description: \"Generate music using Suno AI\",\r\n similes: [\r\n \"CREATE_MUSIC\",\r\n \"MAKE_MUSIC\",\r\n \"COMPOSE_MUSIC\",\r\n \"GENERATE_AUDIO\",\r\n \"CREATE_SONG\",\r\n \"MAKE_SONG\"\r\n ],\r\n\r\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n \tconst __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';\n \tconst __avText = __avTextRaw.toLowerCase();\n \tconst __avKeywords = ['generate', 'music'];\n \tconst __avKeywordOk =\n \t\t__avKeywords.length > 0 &&\n \t\t__avKeywords.some((word) => word.length > 0 && __avText.includes(word));\n \tconst __avRegex = new RegExp('\\\\b(?:generate|music)\\\\b', 'i');\n \tconst __avRegexOk = __avRegex.test(__avText);\n \tconst __avSource = String(message?.content?.source ?? message?.source ?? '');\n \tconst __avExpectedSource = '';\n \tconst __avSourceOk = __avExpectedSource\n \t\t? __avSource === __avExpectedSource\n \t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService || runtime?.getSetting);\n \tconst __avOptions = options && typeof options === 'object' ? options : {};\n \tconst __avInputOk =\n \t\t__avText.trim().length > 0 ||\n \t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n \t\tBoolean(message?.content && typeof message.content === 'object');\n\n \tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n \t\treturn false;\n \t}\n\n \tconst __avLegacyValidate = async (runtime: IAgentRuntime, _message: Memory) => {\r\n return !!runtime.getSetting(\"SUNO_API_KEY\");\r\n };\n \ttry {\n \t\treturn Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n \t} catch {\n \t\treturn false;\n \t}\n },\r\n\r\n handler: async (\r\n runtime: IAgentRuntime,\r\n message: Memory,\r\n state: State,\r\n _options: { [key: string]: unknown },\r\n callback?: HandlerCallback\r\n ): Promise<boolean> => {\r\n try {\r\n const provider = await SunoProvider.get(runtime, message, state);\r\n const content = message.content as unknown as GenerateParams;\r\n\r\n if (!content.prompt) {\r\n throw new Error(\"Missing required parameter: prompt\");\r\n }\r\n\r\n const response = await provider.request('/generate', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n prompt: content.prompt,\r\n duration: content.duration || 30,\r\n temperature: content.temperature || 1.0,\r\n top_k: content.topK || 250,\r\n top_p: content.topP || 0.95,\r\n classifier_free_guidance: content.classifier_free_guidance || 3.0\r\n })\r\n });\r\n\r\n if (callback) {\r\n callback({\r\n text: 'Successfully generated music based on your prompt',\r\n content: response\r\n });\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n if (callback) {\r\n callback({\r\n text: `Failed to extend audio: ${(error as Error).message}`,\r\n error: error\r\n });\r\n }\r\n return false;\r\n }\r\n },\r\n\r\n examples: [\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Create a happy and energetic song\",\r\n prompt: \"A cheerful and energetic melody with upbeat rhythm\",\r\n duration: 30,\r\n temperature: 1.0\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate a happy and energetic song for you.\",\r\n action: \"generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your upbeat and energetic song.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Generate a relaxing ambient track\",\r\n prompt: \"A peaceful ambient soundscape with gentle waves and soft pads\",\r\n duration: 45,\r\n temperature: 0.8,\r\n classifier_free_guidance: 4.0\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll create a calming ambient piece for you.\",\r\n action: \"generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your relaxing ambient soundscape.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Make a short jingle for my podcast\",\r\n prompt: \"A catchy and professional podcast intro jingle\",\r\n duration: 15,\r\n temperature: 1.2,\r\n top_k: 300\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate a podcast jingle for you.\",\r\n action: \"generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your podcast jingle.\"\r\n }\r\n }\r\n ]\r\n ]\r\n};\r\n\r\nexport default generateMusic;","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from \"@elizaos/core\";\r\nimport { SunoProvider } from \"../providers/suno\";\r\nimport type { CustomGenerateParams } from \"../types\";\r\n\r\nconst customGenerateMusic: Action = {\r\n name: \"custom-generate-music\",\r\n description: \"Generate music with custom parameters using Suno AI\",\r\n similes: [\r\n \"CREATE_CUSTOM_MUSIC\",\r\n \"GENERATE_CUSTOM_AUDIO\",\r\n \"MAKE_CUSTOM_MUSIC\",\r\n \"COMPOSE_CUSTOM_MUSIC\",\r\n \"COMPOSE_MUSIC\",\r\n \"CREATE_MUSIC\",\r\n \"GENERATE_MUSIC\"\r\n\r\n ],\r\n\r\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n \tconst __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';\n \tconst __avText = __avTextRaw.toLowerCase();\n \tconst __avKeywords = ['custom', 'generate', 'music'];\n \tconst __avKeywordOk =\n \t\t__avKeywords.length > 0 &&\n \t\t__avKeywords.some((word) => word.length > 0 && __avText.includes(word));\n \tconst __avRegex = new RegExp('\\\\b(?:custom|generate|music)\\\\b', 'i');\n \tconst __avRegexOk = __avRegex.test(__avText);\n \tconst __avSource = String(message?.content?.source ?? message?.source ?? '');\n \tconst __avExpectedSource = '';\n \tconst __avSourceOk = __avExpectedSource\n \t\t? __avSource === __avExpectedSource\n \t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService || runtime?.getSetting);\n \tconst __avOptions = options && typeof options === 'object' ? options : {};\n \tconst __avInputOk =\n \t\t__avText.trim().length > 0 ||\n \t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n \t\tBoolean(message?.content && typeof message.content === 'object');\n\n \tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n \t\treturn false;\n \t}\n\n \tconst __avLegacyValidate = async (runtime: IAgentRuntime, _message: Memory) => {\r\n return !!runtime.getSetting(\"SUNO_API_KEY\");\r\n };\n \ttry {\n \t\treturn Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n \t} catch {\n \t\treturn false;\n \t}\n },\r\n\r\n handler: async (\r\n runtime: IAgentRuntime,\r\n message: Memory,\r\n state: State,\r\n _options: { [key: string]: unknown },\r\n callback?: HandlerCallback\r\n ): Promise<boolean> => {\r\n try {\r\n const provider = await SunoProvider.get(runtime, message, state);\r\n const content = message.content as unknown as CustomGenerateParams;\r\n\r\n if (!content.prompt) {\r\n throw new Error(\"Missing required parameter: prompt\");\r\n }\r\n\r\n const response = await provider.request('/custom-generate', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n prompt: content.prompt,\r\n duration: content.duration || 30,\r\n temperature: content.temperature || 1.0,\r\n top_k: content.topK || 250,\r\n top_p: content.topP || 0.95,\r\n classifier_free_guidance: content.classifier_free_guidance || 3.0,\r\n reference_audio: content.reference_audio,\r\n style: content.style,\r\n bpm: content.bpm,\r\n key: content.key,\r\n mode: content.mode\r\n })\r\n });\r\n\r\n if (callback) {\r\n callback({\r\n text: 'Successfully generated custom music',\r\n content: response\r\n });\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n if (callback) {\r\n callback({\r\n text: `Failed to generate custom music: ${(error as Error).message}`,\r\n error: error\r\n });\r\n }\r\n return false;\r\n }\r\n },\r\n\r\n examples: [\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Create an upbeat electronic dance track with heavy bass\",\r\n prompt: \"An upbeat electronic dance track with heavy bass and energetic synths\",\r\n duration: 60,\r\n style: \"electronic\",\r\n bpm: 128\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate an energetic EDM track for you.\",\r\n action: \"custom-generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your EDM track with heavy bass and synths.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Generate a calm piano melody in C major\",\r\n prompt: \"A gentle, flowing piano melody with soft dynamics\",\r\n duration: 45,\r\n style: \"classical\",\r\n key: \"C\",\r\n mode: \"major\",\r\n temperature: 0.8\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll create a calming piano piece in C major for you.\",\r\n action: \"custom-generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your peaceful piano melody in C major.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Make a rock song with guitar solos\",\r\n prompt: \"A rock song with powerful electric guitar solos and driving drums\",\r\n duration: 90,\r\n style: \"rock\",\r\n bpm: 120,\r\n classifier_free_guidance: 4.0\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll generate a rock track with guitar solos for you.\",\r\n action: \"custom-generate-music\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully generated your rock song with guitar solos.\"\r\n }\r\n }\r\n ]\r\n ]\r\n};\r\n\r\nexport default customGenerateMusic;","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from \"@elizaos/core\";\r\nimport { SunoProvider } from \"../providers/suno\";\r\nimport type { ExtendParams } from \"../types\";\r\n\r\nconst extendAudio: Action = {\r\n name: \"extend-audio\",\r\n description: \"Extend the duration of an existing audio generation\",\r\n similes: [\r\n \"LENGTHEN_AUDIO\",\r\n \"PROLONG_AUDIO\",\r\n \"INCREASE_DURATION\",\r\n \"MAKE_AUDIO_LONGER\"\r\n ],\r\n\r\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n \tconst __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';\n \tconst __avText = __avTextRaw.toLowerCase();\n \tconst __avKeywords = ['extend', 'audio'];\n \tconst __avKeywordOk =\n \t\t__avKeywords.length > 0 &&\n \t\t__avKeywords.some((word) => word.length > 0 && __avText.includes(word));\n \tconst __avRegex = new RegExp('\\\\b(?:extend|audio)\\\\b', 'i');\n \tconst __avRegexOk = __avRegex.test(__avText);\n \tconst __avSource = String(message?.content?.source ?? message?.source ?? '');\n \tconst __avExpectedSource = '';\n \tconst __avSourceOk = __avExpectedSource\n \t\t? __avSource === __avExpectedSource\n \t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService || runtime?.getSetting);\n \tconst __avOptions = options && typeof options === 'object' ? options : {};\n \tconst __avInputOk =\n \t\t__avText.trim().length > 0 ||\n \t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n \t\tBoolean(message?.content && typeof message.content === 'object');\n\n \tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n \t\treturn false;\n \t}\n\n \tconst __avLegacyValidate = async (runtime: IAgentRuntime, _message: Memory) => {\r\n return !!runtime.getSetting(\"SUNO_API_KEY\");\r\n };\n \ttry {\n \t\treturn Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n \t} catch {\n \t\treturn false;\n \t}\n },\r\n\r\n handler: async (\r\n runtime: IAgentRuntime,\r\n message: Memory,\r\n state: State,\r\n _options: { [key: string]: unknown },\r\n callback?: HandlerCallback\r\n ): Promise<boolean> => {\r\n try {\r\n const provider = await SunoProvider.get(runtime, message, state);\r\n const content = message.content as unknown as ExtendParams;\r\n\r\n if (!content.audio_id || !content.duration) {\r\n throw new Error(\"Missing required parameters: audio_id and duration\");\r\n }\r\n\r\n const response = await provider.request('/extend', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n audio_id: content.audio_id,\r\n duration: content.duration\r\n })\r\n });\r\n\r\n if (callback) {\r\n callback({\r\n text: `Successfully extended audio ${content.audio_id}`,\r\n content: response\r\n });\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n if (callback) {\r\n callback({\r\n text: `Failed to extend audio: ${(error as Error).message}`,\r\n error: error\r\n });\r\n }\r\n return false;\r\n }\r\n },\r\n\r\n examples: [\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Make this song longer by 30 seconds\",\r\n audio_id: \"abc123\",\r\n duration: 30\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll extend your song by 30 seconds.\",\r\n action: \"extend-audio\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully extended your song by 30 seconds.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Double the length of this track\",\r\n audio_id: \"xyz789\",\r\n duration: 60\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll double the duration of your track.\",\r\n action: \"extend-audio\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully doubled the length of your track to 60 seconds.\"\r\n }\r\n }\r\n ],\r\n [\r\n {\r\n user: \"{{user1}}\",\r\n content: {\r\n text: \"Add 15 more seconds to this melody\",\r\n audio_id: \"def456\",\r\n duration: 15\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"I'll add 15 seconds to your melody.\",\r\n action: \"extend-audio\"\r\n }\r\n },\r\n {\r\n user: \"{{agent}}\",\r\n content: {\r\n text: \"Successfully added 15 seconds to your melody.\"\r\n }\r\n }\r\n ]\r\n ]\r\n};\r\n\r\nexport default extendAudio;","import type { Plugin } from \"@elizaos/core\";\r\nimport generateMusic from \"./actions/generate\";\r\nimport customGenerateMusic from \"./actions/customGenerate\";\r\nimport extendAudio from \"./actions/extend\";\r\nimport { SunoProvider } from \"./providers/suno\";\r\n\r\nexport {\r\n SunoProvider,\r\n generateMusic as GenerateMusic,\r\n customGenerateMusic as CustomGenerateMusic,\r\n extendAudio as ExtendAudio\r\n};\r\n\r\nexport const sunoPlugin: Plugin = {\r\n name: \"suno\",\r\n description: \"Suno AI Music Generation Plugin for Eliza\",\r\n actions: [generateMusic, customGenerateMusic, extendAudio],\r\n evaluators: [],\r\n providers: [SunoProvider],\r\n};\r\n\r\nexport default sunoPlugin;"],"mappings":";AAQO,IAAM,eAAN,MAAM,cAAiC;AAAA,EAClC;AAAA,EACA;AAAA,EAER,aAAa,IAAI,SAAwB,UAAkB,QAAuC;AAC9F,UAAM,SAAS,QAAQ,WAAW,cAAc;AAChD,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC9C;AACA,WAAO,IAAI,cAAa,EAAE,OAAO,CAAC;AAAA,EACtC;AAAA,EAEA,YAAY,QAAoB;AAC5B,SAAK,SAAS,OAAO;AACrB,SAAK,UAAU,OAAO,WAAW;AAAA,EACrC;AAAA,EAEA,MAAM,IAAI,UAAyB,UAAkB,QAA6C;AAC9F,WAAO,EAAE,QAAQ,QAAQ;AAAA,EAC7B;AAAA,EAEA,MAAM,QAAQ,UAAkB,UAAuB,CAAC,GAAG;AACvD,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,QAAQ;AACtC,UAAM,UAAU;AAAA,MACZ,iBAAiB,UAAU,KAAK,MAAM;AAAA,MACtC,gBAAgB;AAAA,MAChB,GAAG,QAAQ;AAAA,IACf;AAEA,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAC9B,GAAG;AAAA,MACH;AAAA,IACJ,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AACd,YAAM,IAAI,MAAM,mBAAmB,SAAS,UAAU,EAAE;AAAA,IAC5D;AAEA,WAAO,SAAS,KAAK;AAAA,EACzB;AACJ;;;AC5CA,IAAM,gBAAwB;AAAA,EAC1B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EAEI,UAAU,OAAO,SAAc,SAAc,OAAa,YAAoC;AAhBtG;AAiBK,UAAM,cAAc,SAAO,wCAAS,YAAT,mBAAkB,UAAS,WAAW,QAAQ,QAAQ,OAAO;AACxF,UAAM,WAAW,YAAY,YAAY;AACzC,UAAM,eAAe,CAAC,YAAY,OAAO;AACzC,UAAM,gBACL,aAAa,SAAS,KACtB,aAAa,KAAK,CAAC,SAAS,KAAK,SAAS,KAAK,SAAS,SAAS,IAAI,CAAC;AACvE,UAAM,YAAY,IAAI,OAAO,4BAA4B,GAAG;AAC5D,UAAM,cAAc,UAAU,KAAK,QAAQ;AAC3C,UAAM,aAAa,SAAO,wCAAS,YAAT,mBAAkB,YAAU,mCAAS,WAAU,EAAE;AAC3E,UAAM,qBAAqB;AAC3B,UAAM,eAAe,qBAClB,eAAe,qBACf,QAAQ,cAAc,UAAS,mCAAS,aAAW,mCAAS,gBAAc,mCAAS,WAAU;AAChG,UAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AACxE,UAAM,cACL,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,SAAQ,mCAAS,YAAW,OAAO,QAAQ,YAAY,QAAQ;AAEhE,QAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AACnE,aAAO;AAAA,IACR;AAEA,UAAM,qBAAqB,OAAOA,UAAwB,aAAqB;AAC5E,aAAO,CAAC,CAACA,SAAQ,WAAW,cAAc;AAAA,IAC9C;AACC,QAAI;AACH,aAAO,QAAQ,MAAO,mBAA2B,SAAS,SAAS,OAAO,OAAO,CAAC;AAAA,IACnF,QAAQ;AACP,aAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,SAAS,OACL,SACA,SACA,OACA,UACA,aACmB;AACnB,QAAI;AACA,YAAM,WAAW,MAAM,aAAa,IAAI,SAAS,SAAS,KAAK;AAC/D,YAAM,UAAU,QAAQ;AAExB,UAAI,CAAC,QAAQ,QAAQ;AACjB,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACxD;AAEA,YAAM,WAAW,MAAM,SAAS,QAAQ,aAAa;AAAA,QACjD,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACjB,QAAQ,QAAQ;AAAA,UAChB,UAAU,QAAQ,YAAY;AAAA,UAC9B,aAAa,QAAQ,eAAe;AAAA,UACpC,OAAO,QAAQ,QAAQ;AAAA,UACvB,OAAO,QAAQ,QAAQ;AAAA,UACvB,0BAA0B,QAAQ,4BAA4B;AAAA,QAClE,CAAC;AAAA,MACL,CAAC;AAED,UAAI,UAAU;AACV,iBAAS;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAEA,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,UAAI,UAAU;AACV,iBAAS;AAAA,UACL,MAAM,2BAA4B,MAAgB,OAAO;AAAA,UACzD;AAAA,QACJ,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,UAAU;AAAA,IACN;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,aAAa;AAAA,QACjB;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,aAAa;AAAA,UACb,0BAA0B;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,aAAa;AAAA,UACb,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAO,mBAAQ;;;AC1Kf,IAAM,sBAA8B;AAAA,EAChC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAEJ;AAAA,EAEI,UAAU,OAAO,SAAc,SAAc,OAAa,YAAoC;AAlBtG;AAmBK,UAAM,cAAc,SAAO,wCAAS,YAAT,mBAAkB,UAAS,WAAW,QAAQ,QAAQ,OAAO;AACxF,UAAM,WAAW,YAAY,YAAY;AACzC,UAAM,eAAe,CAAC,UAAU,YAAY,OAAO;AACnD,UAAM,gBACL,aAAa,SAAS,KACtB,aAAa,KAAK,CAAC,SAAS,KAAK,SAAS,KAAK,SAAS,SAAS,IAAI,CAAC;AACvE,UAAM,YAAY,IAAI,OAAO,mCAAmC,GAAG;AACnE,UAAM,cAAc,UAAU,KAAK,QAAQ;AAC3C,UAAM,aAAa,SAAO,wCAAS,YAAT,mBAAkB,YAAU,mCAAS,WAAU,EAAE;AAC3E,UAAM,qBAAqB;AAC3B,UAAM,eAAe,qBAClB,eAAe,qBACf,QAAQ,cAAc,UAAS,mCAAS,aAAW,mCAAS,gBAAc,mCAAS,WAAU;AAChG,UAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AACxE,UAAM,cACL,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,SAAQ,mCAAS,YAAW,OAAO,QAAQ,YAAY,QAAQ;AAEhE,QAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AACnE,aAAO;AAAA,IACR;AAEA,UAAM,qBAAqB,OAAOC,UAAwB,aAAqB;AAC5E,aAAO,CAAC,CAACA,SAAQ,WAAW,cAAc;AAAA,IAC9C;AACC,QAAI;AACH,aAAO,QAAQ,MAAO,mBAA2B,SAAS,SAAS,OAAO,OAAO,CAAC;AAAA,IACnF,QAAQ;AACP,aAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,SAAS,OACL,SACA,SACA,OACA,UACA,aACmB;AACnB,QAAI;AACA,YAAM,WAAW,MAAM,aAAa,IAAI,SAAS,SAAS,KAAK;AAC/D,YAAM,UAAU,QAAQ;AAExB,UAAI,CAAC,QAAQ,QAAQ;AACjB,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACxD;AAEA,YAAM,WAAW,MAAM,SAAS,QAAQ,oBAAoB;AAAA,QACxD,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACjB,QAAQ,QAAQ;AAAA,UAChB,UAAU,QAAQ,YAAY;AAAA,UAC9B,aAAa,QAAQ,eAAe;AAAA,UACpC,OAAO,QAAQ,QAAQ;AAAA,UACvB,OAAO,QAAQ,QAAQ;AAAA,UACvB,0BAA0B,QAAQ,4BAA4B;AAAA,UAC9D,iBAAiB,QAAQ;AAAA,UACzB,OAAO,QAAQ;AAAA,UACf,KAAK,QAAQ;AAAA,UACb,KAAK,QAAQ;AAAA,UACb,MAAM,QAAQ;AAAA,QAClB,CAAC;AAAA,MACL,CAAC;AAED,UAAI,UAAU;AACV,iBAAS;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAEA,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,UAAI,UAAU;AACV,iBAAS;AAAA,UACL,MAAM,oCAAqC,MAAgB,OAAO;AAAA,UAClE;AAAA,QACJ,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,UAAU;AAAA,IACN;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,QACT;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,UACL,MAAM;AAAA,UACN,aAAa;AAAA,QACjB;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,UACL,0BAA0B;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAO,yBAAQ;;;ACrLf,IAAM,cAAsB;AAAA,EACxB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EAEI,UAAU,OAAO,SAAc,SAAc,OAAa,YAAoC;AAdtG;AAeK,UAAM,cAAc,SAAO,wCAAS,YAAT,mBAAkB,UAAS,WAAW,QAAQ,QAAQ,OAAO;AACxF,UAAM,WAAW,YAAY,YAAY;AACzC,UAAM,eAAe,CAAC,UAAU,OAAO;AACvC,UAAM,gBACL,aAAa,SAAS,KACtB,aAAa,KAAK,CAAC,SAAS,KAAK,SAAS,KAAK,SAAS,SAAS,IAAI,CAAC;AACvE,UAAM,YAAY,IAAI,OAAO,0BAA0B,GAAG;AAC1D,UAAM,cAAc,UAAU,KAAK,QAAQ;AAC3C,UAAM,aAAa,SAAO,wCAAS,YAAT,mBAAkB,YAAU,mCAAS,WAAU,EAAE;AAC3E,UAAM,qBAAqB;AAC3B,UAAM,eAAe,qBAClB,eAAe,qBACf,QAAQ,cAAc,UAAS,mCAAS,aAAW,mCAAS,gBAAc,mCAAS,WAAU;AAChG,UAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AACxE,UAAM,cACL,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,SAAQ,mCAAS,YAAW,OAAO,QAAQ,YAAY,QAAQ;AAEhE,QAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AACnE,aAAO;AAAA,IACR;AAEA,UAAM,qBAAqB,OAAOC,UAAwB,aAAqB;AAC5E,aAAO,CAAC,CAACA,SAAQ,WAAW,cAAc;AAAA,IAC9C;AACC,QAAI;AACH,aAAO,QAAQ,MAAO,mBAA2B,SAAS,SAAS,OAAO,OAAO,CAAC;AAAA,IACnF,QAAQ;AACP,aAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,SAAS,OACL,SACA,SACA,OACA,UACA,aACmB;AACnB,QAAI;AACA,YAAM,WAAW,MAAM,aAAa,IAAI,SAAS,SAAS,KAAK;AAC/D,YAAM,UAAU,QAAQ;AAExB,UAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,UAAU;AACxC,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACxE;AAEA,YAAM,WAAW,MAAM,SAAS,QAAQ,WAAW;AAAA,QAC/C,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACjB,UAAU,QAAQ;AAAA,UAClB,UAAU,QAAQ;AAAA,QACtB,CAAC;AAAA,MACL,CAAC;AAED,UAAI,UAAU;AACV,iBAAS;AAAA,UACL,MAAM,+BAA+B,QAAQ,QAAQ;AAAA,UACrD,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAEA,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,UAAI,UAAU;AACV,iBAAS;AAAA,UACL,MAAM,2BAA4B,MAAgB,OAAO;AAAA,UACzD;AAAA,QACJ,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,UAAU;AAAA,IACN;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAO,iBAAQ;;;ACtJR,IAAM,aAAqB;AAAA,EAC9B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,kBAAe,wBAAqB,cAAW;AAAA,EACzD,YAAY,CAAC;AAAA,EACb,WAAW,CAAC,YAAY;AAC5B;AAEA,IAAO,gBAAQ;","names":["runtime","runtime","runtime"]}
|
package/package.json
CHANGED
|
@@ -16,8 +16,38 @@ const customGenerateMusic: Action = {
|
|
|
16
16
|
|
|
17
17
|
],
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {
|
|
20
|
+
const __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';
|
|
21
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
22
|
+
const __avKeywords = ['custom', 'generate', 'music'];
|
|
23
|
+
const __avKeywordOk =
|
|
24
|
+
__avKeywords.length > 0 &&
|
|
25
|
+
__avKeywords.some((word) => word.length > 0 && __avText.includes(word));
|
|
26
|
+
const __avRegex = new RegExp('\\b(?:custom|generate|music)\\b', 'i');
|
|
27
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
28
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? '');
|
|
29
|
+
const __avExpectedSource = '';
|
|
30
|
+
const __avSourceOk = __avExpectedSource
|
|
31
|
+
? __avSource === __avExpectedSource
|
|
32
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService || runtime?.getSetting);
|
|
33
|
+
const __avOptions = options && typeof options === 'object' ? options : {};
|
|
34
|
+
const __avInputOk =
|
|
35
|
+
__avText.trim().length > 0 ||
|
|
36
|
+
Object.keys(__avOptions as Record<string, unknown>).length > 0 ||
|
|
37
|
+
Boolean(message?.content && typeof message.content === 'object');
|
|
38
|
+
|
|
39
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const __avLegacyValidate = async (runtime: IAgentRuntime, _message: Memory) => {
|
|
20
44
|
return !!runtime.getSetting("SUNO_API_KEY");
|
|
45
|
+
};
|
|
46
|
+
try {
|
|
47
|
+
return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));
|
|
48
|
+
} catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
21
51
|
},
|
|
22
52
|
|
|
23
53
|
handler: async (
|
package/src/actions/extend.ts
CHANGED
|
@@ -12,8 +12,38 @@ const extendAudio: Action = {
|
|
|
12
12
|
"MAKE_AUDIO_LONGER"
|
|
13
13
|
],
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {
|
|
16
|
+
const __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';
|
|
17
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
18
|
+
const __avKeywords = ['extend', 'audio'];
|
|
19
|
+
const __avKeywordOk =
|
|
20
|
+
__avKeywords.length > 0 &&
|
|
21
|
+
__avKeywords.some((word) => word.length > 0 && __avText.includes(word));
|
|
22
|
+
const __avRegex = new RegExp('\\b(?:extend|audio)\\b', 'i');
|
|
23
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
24
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? '');
|
|
25
|
+
const __avExpectedSource = '';
|
|
26
|
+
const __avSourceOk = __avExpectedSource
|
|
27
|
+
? __avSource === __avExpectedSource
|
|
28
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService || runtime?.getSetting);
|
|
29
|
+
const __avOptions = options && typeof options === 'object' ? options : {};
|
|
30
|
+
const __avInputOk =
|
|
31
|
+
__avText.trim().length > 0 ||
|
|
32
|
+
Object.keys(__avOptions as Record<string, unknown>).length > 0 ||
|
|
33
|
+
Boolean(message?.content && typeof message.content === 'object');
|
|
34
|
+
|
|
35
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const __avLegacyValidate = async (runtime: IAgentRuntime, _message: Memory) => {
|
|
16
40
|
return !!runtime.getSetting("SUNO_API_KEY");
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
17
47
|
},
|
|
18
48
|
|
|
19
49
|
handler: async (
|
package/src/actions/generate.ts
CHANGED
|
@@ -14,8 +14,38 @@ const generateMusic: Action = {
|
|
|
14
14
|
"MAKE_SONG"
|
|
15
15
|
],
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {
|
|
18
|
+
const __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';
|
|
19
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
20
|
+
const __avKeywords = ['generate', 'music'];
|
|
21
|
+
const __avKeywordOk =
|
|
22
|
+
__avKeywords.length > 0 &&
|
|
23
|
+
__avKeywords.some((word) => word.length > 0 && __avText.includes(word));
|
|
24
|
+
const __avRegex = new RegExp('\\b(?:generate|music)\\b', 'i');
|
|
25
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
26
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? '');
|
|
27
|
+
const __avExpectedSource = '';
|
|
28
|
+
const __avSourceOk = __avExpectedSource
|
|
29
|
+
? __avSource === __avExpectedSource
|
|
30
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService || runtime?.getSetting);
|
|
31
|
+
const __avOptions = options && typeof options === 'object' ? options : {};
|
|
32
|
+
const __avInputOk =
|
|
33
|
+
__avText.trim().length > 0 ||
|
|
34
|
+
Object.keys(__avOptions as Record<string, unknown>).length > 0 ||
|
|
35
|
+
Boolean(message?.content && typeof message.content === 'object');
|
|
36
|
+
|
|
37
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const __avLegacyValidate = async (runtime: IAgentRuntime, _message: Memory) => {
|
|
18
42
|
return !!runtime.getSetting("SUNO_API_KEY");
|
|
43
|
+
};
|
|
44
|
+
try {
|
|
45
|
+
return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
19
49
|
},
|
|
20
50
|
|
|
21
51
|
handler: async (
|