@elizaos/plugin-suno 0.25.6-alpha.1 → 1.0.5

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 CHANGED
@@ -1,23 +1,22 @@
1
1
  // src/providers/suno.ts
2
- var SunoProvider = class _SunoProvider {
2
+ var SunoApiClient = class _SunoApiClient {
3
+ apiKey;
4
+ baseUrl;
3
5
  static async get(runtime, _message, _state) {
4
6
  const apiKey = runtime.getSetting("SUNO_API_KEY");
5
7
  if (!apiKey) {
6
8
  throw new Error("SUNO_API_KEY is required");
7
9
  }
8
- return new _SunoProvider({ apiKey });
10
+ return new _SunoApiClient({ apiKey });
9
11
  }
10
12
  constructor(config) {
11
13
  this.apiKey = config.apiKey;
12
14
  this.baseUrl = config.baseUrl || "https://api.suno.ai/v1";
13
15
  }
14
- async get(_runtime, _message, _state) {
15
- return { status: "ready" };
16
- }
17
16
  async request(endpoint, options = {}) {
18
17
  const url = `${this.baseUrl}${endpoint}`;
19
18
  const headers = {
20
- "Authorization": `Bearer ${this.apiKey}`,
19
+ Authorization: `Bearer ${this.apiKey}`,
21
20
  "Content-Type": "application/json",
22
21
  ...options.headers
23
22
  };
@@ -31,6 +30,21 @@ var SunoProvider = class _SunoProvider {
31
30
  return response.json();
32
31
  }
33
32
  };
33
+ var SunoProvider = {
34
+ name: "suno",
35
+ description: "Provides Suno AI music generation context and status",
36
+ get: async (runtime, _message, _state) => {
37
+ const apiKey = runtime.getSetting("SUNO_API_KEY");
38
+ return {
39
+ values: {
40
+ apiKeyConfigured: !!apiKey,
41
+ status: apiKey ? "ready" : "not_configured",
42
+ serviceUrl: "https://api.suno.ai/v1"
43
+ },
44
+ text: `Suno AI music generation service is ${apiKey ? "ready" : "not configured"}. API key ${apiKey ? "is set" : "is missing"}.`
45
+ };
46
+ }
47
+ };
34
48
 
35
49
  // src/actions/generate.ts
36
50
  var generateMusic = {
@@ -49,7 +63,7 @@ var generateMusic = {
49
63
  },
50
64
  handler: async (runtime, message, state, _options, callback) => {
51
65
  try {
52
- const provider = await SunoProvider.get(runtime, message, state);
66
+ const provider = await SunoApiClient.get(runtime, message, state);
53
67
  const content = message.content;
54
68
  if (!content.prompt) {
55
69
  throw new Error("Missing required parameter: prompt");
@@ -75,7 +89,7 @@ var generateMusic = {
75
89
  } catch (error) {
76
90
  if (callback) {
77
91
  callback({
78
- text: `Failed to extend audio: ${error.message}`,
92
+ text: `Failed to generate music: ${error.message}`,
79
93
  error
80
94
  });
81
95
  }
@@ -85,7 +99,7 @@ var generateMusic = {
85
99
  examples: [
86
100
  [
87
101
  {
88
- user: "{{user1}}",
102
+ name: "user1",
89
103
  content: {
90
104
  text: "Create a happy and energetic song",
91
105
  prompt: "A cheerful and energetic melody with upbeat rhythm",
@@ -94,14 +108,14 @@ var generateMusic = {
94
108
  }
95
109
  },
96
110
  {
97
- user: "{{agent}}",
111
+ name: "agent",
98
112
  content: {
99
113
  text: "I'll generate a happy and energetic song for you.",
100
114
  action: "generate-music"
101
115
  }
102
116
  },
103
117
  {
104
- user: "{{agent}}",
118
+ name: "agent",
105
119
  content: {
106
120
  text: "Successfully generated your upbeat and energetic song."
107
121
  }
@@ -109,7 +123,7 @@ var generateMusic = {
109
123
  ],
110
124
  [
111
125
  {
112
- user: "{{user1}}",
126
+ name: "user1",
113
127
  content: {
114
128
  text: "Generate a relaxing ambient track",
115
129
  prompt: "A peaceful ambient soundscape with gentle waves and soft pads",
@@ -119,14 +133,14 @@ var generateMusic = {
119
133
  }
120
134
  },
121
135
  {
122
- user: "{{agent}}",
136
+ name: "agent",
123
137
  content: {
124
138
  text: "I'll create a calming ambient piece for you.",
125
139
  action: "generate-music"
126
140
  }
127
141
  },
128
142
  {
129
- user: "{{agent}}",
143
+ name: "agent",
130
144
  content: {
131
145
  text: "Successfully generated your relaxing ambient soundscape."
132
146
  }
@@ -134,7 +148,7 @@ var generateMusic = {
134
148
  ],
135
149
  [
136
150
  {
137
- user: "{{user1}}",
151
+ name: "user1",
138
152
  content: {
139
153
  text: "Make a short jingle for my podcast",
140
154
  prompt: "A catchy and professional podcast intro jingle",
@@ -144,14 +158,14 @@ var generateMusic = {
144
158
  }
145
159
  },
146
160
  {
147
- user: "{{agent}}",
161
+ name: "agent",
148
162
  content: {
149
163
  text: "I'll generate a podcast jingle for you.",
150
164
  action: "generate-music"
151
165
  }
152
166
  },
153
167
  {
154
- user: "{{agent}}",
168
+ name: "agent",
155
169
  content: {
156
170
  text: "Successfully generated your podcast jingle."
157
171
  }
@@ -170,16 +184,16 @@ var customGenerateMusic = {
170
184
  "GENERATE_CUSTOM_AUDIO",
171
185
  "MAKE_CUSTOM_MUSIC",
172
186
  "COMPOSE_CUSTOM_MUSIC",
173
- "COMPOSE_MUSIC",
174
- "CREATE_MUSIC",
175
- "GENERATE_MUSIC"
187
+ "CUSTOM_MUSIC_GENERATION",
188
+ "ADVANCED_MUSIC_CREATION",
189
+ "PERSONALIZED_MUSIC_GENERATION"
176
190
  ],
177
191
  validate: async (runtime, _message) => {
178
192
  return !!runtime.getSetting("SUNO_API_KEY");
179
193
  },
180
194
  handler: async (runtime, message, state, _options, callback) => {
181
195
  try {
182
- const provider = await SunoProvider.get(runtime, message, state);
196
+ const provider = await SunoApiClient.get(runtime, message, state);
183
197
  const content = message.content;
184
198
  if (!content.prompt) {
185
199
  throw new Error("Missing required parameter: prompt");
@@ -220,7 +234,7 @@ var customGenerateMusic = {
220
234
  examples: [
221
235
  [
222
236
  {
223
- user: "{{user1}}",
237
+ name: "user1",
224
238
  content: {
225
239
  text: "Create an upbeat electronic dance track with heavy bass",
226
240
  prompt: "An upbeat electronic dance track with heavy bass and energetic synths",
@@ -230,14 +244,14 @@ var customGenerateMusic = {
230
244
  }
231
245
  },
232
246
  {
233
- user: "{{agent}}",
247
+ name: "agent",
234
248
  content: {
235
249
  text: "I'll generate an energetic EDM track for you.",
236
250
  action: "custom-generate-music"
237
251
  }
238
252
  },
239
253
  {
240
- user: "{{agent}}",
254
+ name: "agent",
241
255
  content: {
242
256
  text: "Successfully generated your EDM track with heavy bass and synths."
243
257
  }
@@ -245,7 +259,7 @@ var customGenerateMusic = {
245
259
  ],
246
260
  [
247
261
  {
248
- user: "{{user1}}",
262
+ name: "user1",
249
263
  content: {
250
264
  text: "Generate a calm piano melody in C major",
251
265
  prompt: "A gentle, flowing piano melody with soft dynamics",
@@ -257,14 +271,14 @@ var customGenerateMusic = {
257
271
  }
258
272
  },
259
273
  {
260
- user: "{{agent}}",
274
+ name: "agent",
261
275
  content: {
262
276
  text: "I'll create a calming piano piece in C major for you.",
263
277
  action: "custom-generate-music"
264
278
  }
265
279
  },
266
280
  {
267
- user: "{{agent}}",
281
+ name: "agent",
268
282
  content: {
269
283
  text: "Successfully generated your peaceful piano melody in C major."
270
284
  }
@@ -272,7 +286,7 @@ var customGenerateMusic = {
272
286
  ],
273
287
  [
274
288
  {
275
- user: "{{user1}}",
289
+ name: "user1",
276
290
  content: {
277
291
  text: "Make a rock song with guitar solos",
278
292
  prompt: "A rock song with powerful electric guitar solos and driving drums",
@@ -283,14 +297,14 @@ var customGenerateMusic = {
283
297
  }
284
298
  },
285
299
  {
286
- user: "{{agent}}",
300
+ name: "agent",
287
301
  content: {
288
302
  text: "I'll generate a rock track with guitar solos for you.",
289
303
  action: "custom-generate-music"
290
304
  }
291
305
  },
292
306
  {
293
- user: "{{agent}}",
307
+ name: "agent",
294
308
  content: {
295
309
  text: "Successfully generated your rock song with guitar solos."
296
310
  }
@@ -305,6 +319,7 @@ var extendAudio = {
305
319
  name: "extend-audio",
306
320
  description: "Extend the duration of an existing audio generation",
307
321
  similes: [
322
+ "EXTEND_AUDIO",
308
323
  "LENGTHEN_AUDIO",
309
324
  "PROLONG_AUDIO",
310
325
  "INCREASE_DURATION",
@@ -315,7 +330,7 @@ var extendAudio = {
315
330
  },
316
331
  handler: async (runtime, message, state, _options, callback) => {
317
332
  try {
318
- const provider = await SunoProvider.get(runtime, message, state);
333
+ const provider = await SunoApiClient.get(runtime, message, state);
319
334
  const content = message.content;
320
335
  if (!content.audio_id || !content.duration) {
321
336
  throw new Error("Missing required parameters: audio_id and duration");
@@ -347,7 +362,7 @@ var extendAudio = {
347
362
  examples: [
348
363
  [
349
364
  {
350
- user: "{{user1}}",
365
+ name: "user1",
351
366
  content: {
352
367
  text: "Make this song longer by 30 seconds",
353
368
  audio_id: "abc123",
@@ -355,14 +370,14 @@ var extendAudio = {
355
370
  }
356
371
  },
357
372
  {
358
- user: "{{agent}}",
373
+ name: "agent",
359
374
  content: {
360
375
  text: "I'll extend your song by 30 seconds.",
361
376
  action: "extend-audio"
362
377
  }
363
378
  },
364
379
  {
365
- user: "{{agent}}",
380
+ name: "agent",
366
381
  content: {
367
382
  text: "Successfully extended your song by 30 seconds."
368
383
  }
@@ -370,7 +385,7 @@ var extendAudio = {
370
385
  ],
371
386
  [
372
387
  {
373
- user: "{{user1}}",
388
+ name: "user1",
374
389
  content: {
375
390
  text: "Double the length of this track",
376
391
  audio_id: "xyz789",
@@ -378,14 +393,14 @@ var extendAudio = {
378
393
  }
379
394
  },
380
395
  {
381
- user: "{{agent}}",
396
+ name: "agent",
382
397
  content: {
383
398
  text: "I'll double the duration of your track.",
384
399
  action: "extend-audio"
385
400
  }
386
401
  },
387
402
  {
388
- user: "{{agent}}",
403
+ name: "agent",
389
404
  content: {
390
405
  text: "Successfully doubled the length of your track to 60 seconds."
391
406
  }
@@ -393,7 +408,7 @@ var extendAudio = {
393
408
  ],
394
409
  [
395
410
  {
396
- user: "{{user1}}",
411
+ name: "user1",
397
412
  content: {
398
413
  text: "Add 15 more seconds to this melody",
399
414
  audio_id: "def456",
@@ -401,14 +416,14 @@ var extendAudio = {
401
416
  }
402
417
  },
403
418
  {
404
- user: "{{agent}}",
419
+ name: "agent",
405
420
  content: {
406
421
  text: "I'll add 15 seconds to your melody.",
407
422
  action: "extend-audio"
408
423
  }
409
424
  },
410
425
  {
411
- user: "{{agent}}",
426
+ name: "agent",
412
427
  content: {
413
428
  text: "Successfully added 15 seconds to your melody."
414
429
  }
@@ -427,12 +442,7 @@ var sunoPlugin = {
427
442
  providers: [SunoProvider]
428
443
  };
429
444
  var index_default = sunoPlugin;
430
- export {
431
- customGenerate_default as CustomGenerateMusic,
432
- extend_default as ExtendAudio,
433
- generate_default as GenerateMusic,
434
- SunoProvider,
435
- index_default as default,
436
- sunoPlugin
437
- };
445
+
446
+ export { customGenerate_default as CustomGenerateMusic, extend_default as ExtendAudio, generate_default as GenerateMusic, SunoApiClient, SunoProvider, index_default as default, sunoPlugin };
447
+ //# sourceMappingURL=index.js.map
438
448
  //# sourceMappingURL=index.js.map
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"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { IAgentRuntime, Memory, State, Provider } from '@elizaos/core';\n\nexport interface SunoConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class SunoApiClient {\n private apiKey: string;\n private baseUrl: string;\n\n static async get(\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State\n ): Promise<SunoApiClient> {\n const apiKey = runtime.getSetting('SUNO_API_KEY');\n if (!apiKey) {\n throw new Error('SUNO_API_KEY is required');\n }\n return new SunoApiClient({ apiKey });\n }\n\n constructor(config: SunoConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || 'https://api.suno.ai/v1';\n }\n\n async request(endpoint: string, options: RequestInit = {}) {\n const url = `${this.baseUrl}${endpoint}`;\n const headers = {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n };\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Suno API error: ${response.statusText}`);\n }\n\n return response.json();\n }\n}\n\nexport const SunoProvider: Provider = {\n name: 'suno',\n description: 'Provides Suno AI music generation context and status',\n get: async (runtime: IAgentRuntime, _message: Memory, _state: State) => {\n const apiKey = runtime.getSetting('SUNO_API_KEY');\n return {\n values: {\n apiKeyConfigured: !!apiKey,\n status: apiKey ? 'ready' : 'not_configured',\n serviceUrl: 'https://api.suno.ai/v1',\n },\n text: `Suno AI music generation service is ${apiKey ? 'ready' : 'not configured'}. API key ${apiKey ? 'is set' : 'is missing'}.`,\n };\n },\n};\n\nexport interface GenerateParams {\n prompt: string;\n duration?: number;\n temperature?: number;\n topK?: number;\n topP?: number;\n classifier_free_guidance?: number;\n}\n\nexport interface CustomGenerateParams extends GenerateParams {\n reference_audio?: string;\n style?: string;\n bpm?: number;\n key?: string;\n mode?: string;\n}\n\nexport interface ExtendParams {\n audio_id: string;\n duration: number;\n}\n\nexport interface GenerationResponse {\n id: string;\n status: 'pending' | 'processing' | 'completed' | 'failed';\n audio_url?: string;\n error?: string;\n}\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { SunoApiClient } from '../providers/suno';\nimport type { GenerateParams } from '../types';\n\nconst generateMusic: Action = {\n name: 'generate-music',\n description: 'Generate music using Suno AI',\n similes: [\n 'CREATE_MUSIC',\n 'MAKE_MUSIC',\n 'COMPOSE_MUSIC',\n 'GENERATE_AUDIO',\n 'CREATE_SONG',\n 'MAKE_SONG',\n ],\n\n validate: async (runtime: IAgentRuntime, _message: Memory) => {\n return !!runtime.getSetting('SUNO_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n _options?: { [key: string]: unknown },\n callback?: HandlerCallback\n ): Promise<boolean> => {\n try {\n const provider = await SunoApiClient.get(runtime, message, state);\n const content = message.content as unknown as GenerateParams;\n\n if (!content.prompt) {\n throw new Error('Missing required parameter: prompt');\n }\n\n const response = await provider.request('/generate', {\n method: 'POST',\n body: JSON.stringify({\n prompt: content.prompt,\n duration: content.duration || 30,\n temperature: content.temperature || 1.0,\n top_k: content.topK || 250,\n top_p: content.topP || 0.95,\n classifier_free_guidance: content.classifier_free_guidance || 3.0,\n }),\n });\n\n if (callback) {\n callback({\n text: 'Successfully generated music based on your prompt',\n content: response,\n });\n }\n\n return true;\n } catch (error) {\n if (callback) {\n callback({\n text: `Failed to generate music: ${(error as Error).message}`,\n error: error,\n });\n }\n return false;\n }\n },\n\n examples: [\n [\n {\n name: 'user1',\n content: {\n text: 'Create a happy and energetic song',\n prompt: 'A cheerful and energetic melody with upbeat rhythm',\n duration: 30,\n temperature: 1.0,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll generate a happy and energetic song for you.\",\n action: 'generate-music',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully generated your upbeat and energetic song.',\n },\n },\n ],\n [\n {\n name: 'user1',\n content: {\n text: 'Generate a relaxing ambient track',\n prompt: 'A peaceful ambient soundscape with gentle waves and soft pads',\n duration: 45,\n temperature: 0.8,\n classifier_free_guidance: 4.0,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll create a calming ambient piece for you.\",\n action: 'generate-music',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully generated your relaxing ambient soundscape.',\n },\n },\n ],\n [\n {\n name: 'user1',\n content: {\n text: 'Make a short jingle for my podcast',\n prompt: 'A catchy and professional podcast intro jingle',\n duration: 15,\n temperature: 1.2,\n top_k: 300,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll generate a podcast jingle for you.\",\n action: 'generate-music',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully generated your podcast jingle.',\n },\n },\n ],\n ],\n};\n\nexport default generateMusic;\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { SunoApiClient } from '../providers/suno';\nimport type { CustomGenerateParams } from '../types';\n\nconst customGenerateMusic: Action = {\n name: 'custom-generate-music',\n description: 'Generate music with custom parameters using Suno AI',\n similes: [\n 'CREATE_CUSTOM_MUSIC',\n 'GENERATE_CUSTOM_AUDIO',\n 'MAKE_CUSTOM_MUSIC',\n 'COMPOSE_CUSTOM_MUSIC',\n 'CUSTOM_MUSIC_GENERATION',\n 'ADVANCED_MUSIC_CREATION',\n 'PERSONALIZED_MUSIC_GENERATION',\n ],\n\n validate: async (runtime: IAgentRuntime, _message: Memory) => {\n return !!runtime.getSetting('SUNO_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n _options?: { [key: string]: unknown },\n callback?: HandlerCallback\n ): Promise<boolean> => {\n try {\n const provider = await SunoApiClient.get(runtime, message, state);\n const content = message.content as unknown as CustomGenerateParams;\n\n if (!content.prompt) {\n throw new Error('Missing required parameter: prompt');\n }\n\n const response = await provider.request('/custom-generate', {\n method: 'POST',\n body: JSON.stringify({\n prompt: content.prompt,\n duration: content.duration || 30,\n temperature: content.temperature || 1.0,\n top_k: content.topK || 250,\n top_p: content.topP || 0.95,\n classifier_free_guidance: content.classifier_free_guidance || 3.0,\n reference_audio: content.reference_audio,\n style: content.style,\n bpm: content.bpm,\n key: content.key,\n mode: content.mode,\n }),\n });\n\n if (callback) {\n callback({\n text: 'Successfully generated custom music',\n content: response,\n });\n }\n\n return true;\n } catch (error) {\n if (callback) {\n callback({\n text: `Failed to generate custom music: ${(error as Error).message}`,\n error: error,\n });\n }\n return false;\n }\n },\n\n examples: [\n [\n {\n name: 'user1',\n content: {\n text: 'Create an upbeat electronic dance track with heavy bass',\n prompt: 'An upbeat electronic dance track with heavy bass and energetic synths',\n duration: 60,\n style: 'electronic',\n bpm: 128,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll generate an energetic EDM track for you.\",\n action: 'custom-generate-music',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully generated your EDM track with heavy bass and synths.',\n },\n },\n ],\n [\n {\n name: 'user1',\n content: {\n text: 'Generate a calm piano melody in C major',\n prompt: 'A gentle, flowing piano melody with soft dynamics',\n duration: 45,\n style: 'classical',\n key: 'C',\n mode: 'major',\n temperature: 0.8,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll create a calming piano piece in C major for you.\",\n action: 'custom-generate-music',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully generated your peaceful piano melody in C major.',\n },\n },\n ],\n [\n {\n name: 'user1',\n content: {\n text: 'Make a rock song with guitar solos',\n prompt: 'A rock song with powerful electric guitar solos and driving drums',\n duration: 90,\n style: 'rock',\n bpm: 120,\n classifier_free_guidance: 4.0,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll generate a rock track with guitar solos for you.\",\n action: 'custom-generate-music',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully generated your rock song with guitar solos.',\n },\n },\n ],\n ],\n};\n\nexport default customGenerateMusic;\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { SunoApiClient } from '../providers/suno';\nimport type { ExtendParams } from '../types';\n\nconst extendAudio: Action = {\n name: 'extend-audio',\n description: 'Extend the duration of an existing audio generation',\n similes: [\n 'EXTEND_AUDIO',\n 'LENGTHEN_AUDIO',\n 'PROLONG_AUDIO',\n 'INCREASE_DURATION',\n 'MAKE_AUDIO_LONGER',\n ],\n\n validate: async (runtime: IAgentRuntime, _message: Memory) => {\n return !!runtime.getSetting('SUNO_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n _options?: { [key: string]: unknown },\n callback?: HandlerCallback\n ): Promise<boolean> => {\n try {\n const provider = await SunoApiClient.get(runtime, message, state);\n const content = message.content as unknown as ExtendParams;\n\n if (!content.audio_id || !content.duration) {\n throw new Error('Missing required parameters: audio_id and duration');\n }\n\n const response = await provider.request('/extend', {\n method: 'POST',\n body: JSON.stringify({\n audio_id: content.audio_id,\n duration: content.duration,\n }),\n });\n\n if (callback) {\n callback({\n text: `Successfully extended audio ${content.audio_id}`,\n content: response,\n });\n }\n\n return true;\n } catch (error) {\n if (callback) {\n callback({\n text: `Failed to extend audio: ${(error as Error).message}`,\n error: error,\n });\n }\n return false;\n }\n },\n\n examples: [\n [\n {\n name: 'user1',\n content: {\n text: 'Make this song longer by 30 seconds',\n audio_id: 'abc123',\n duration: 30,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll extend your song by 30 seconds.\",\n action: 'extend-audio',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully extended your song by 30 seconds.',\n },\n },\n ],\n [\n {\n name: 'user1',\n content: {\n text: 'Double the length of this track',\n audio_id: 'xyz789',\n duration: 60,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll double the duration of your track.\",\n action: 'extend-audio',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully doubled the length of your track to 60 seconds.',\n },\n },\n ],\n [\n {\n name: 'user1',\n content: {\n text: 'Add 15 more seconds to this melody',\n audio_id: 'def456',\n duration: 15,\n },\n },\n {\n name: 'agent',\n content: {\n text: \"I'll add 15 seconds to your melody.\",\n action: 'extend-audio',\n },\n },\n {\n name: 'agent',\n content: {\n text: 'Successfully added 15 seconds to your melody.',\n },\n },\n ],\n ],\n};\n\nexport default extendAudio;\n","import type { Plugin } from '@elizaos/core';\nimport generateMusic from './actions/generate';\nimport customGenerateMusic from './actions/customGenerate';\nimport extendAudio from './actions/extend';\nimport { SunoProvider, SunoApiClient } from './providers/suno';\n\nexport {\n SunoProvider,\n SunoApiClient,\n generateMusic as GenerateMusic,\n customGenerateMusic as CustomGenerateMusic,\n extendAudio as ExtendAudio,\n};\n\nexport const sunoPlugin: Plugin = {\n name: 'suno',\n description: 'Suno AI Music Generation Plugin for Eliza',\n actions: [generateMusic, customGenerateMusic, extendAudio],\n evaluators: [],\n providers: [SunoProvider],\n};\n\nexport default sunoPlugin;\n"]}
package/package.json CHANGED
@@ -1,32 +1,74 @@
1
1
  {
2
- "name": "@elizaos/plugin-suno",
3
- "version": "0.25.6-alpha.1",
4
- "description": "Suno AI Music Generation Plugin for Eliza",
5
- "main": "dist/index.js",
6
- "type": "module",
7
- "types": "dist/index.d.ts",
8
- "scripts": {
9
- "build": "tsup --format esm --dts",
10
- "dev": "tsup --format esm --dts --watch",
11
- "lint": "biome check src/",
12
- "lint:fix": "biome check --apply src/",
13
- "format": "biome format src/",
14
- "format:fix": "biome format --write src/",
15
- "test": "jest"
16
- },
17
- "dependencies": {
18
- "@elizaos/core": "0.25.6-alpha.1"
19
- },
20
- "devDependencies": {
21
- "@biomejs/biome": "1.5.3",
22
- "@types/jest": "^27.0.0",
23
- "@types/node": "^16.0.0",
24
- "jest": "^27.0.0",
25
- "tsup": "^8.3.5",
26
- "typescript": "^5.0.0"
27
- },
28
- "publishConfig": {
29
- "access": "public"
30
- },
31
- "gitHead": "81a35281b93d5e8ca0745e9d13a1943e9a90681b"
32
- }
2
+ "name": "@elizaos/plugin-suno",
3
+ "version": "1.0.5",
4
+ "description": "Suno AI music generation plugin for ElizaOS - Enables AI-powered music creation and audio manipulation",
5
+ "type": "module",
6
+ "author": "elizaOS Contributors",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/elizaos/elizaos-plugins"
11
+ },
12
+ "keywords": [
13
+ "elizaos",
14
+ "plugin",
15
+ "suno",
16
+ "ai",
17
+ "music",
18
+ "audio",
19
+ "generation"
20
+ ],
21
+ "main": "dist/index.js",
22
+ "module": "dist/index.js",
23
+ "types": "dist/index.d.ts",
24
+ "exports": {
25
+ "./package.json": "./package.json",
26
+ ".": {
27
+ "import": {
28
+ "@elizaos/source": "./src/index.ts",
29
+ "types": "./dist/index.d.ts",
30
+ "default": "./dist/index.js"
31
+ }
32
+ }
33
+ },
34
+ "files": [
35
+ "dist"
36
+ ],
37
+ "dependencies": {
38
+ "@elizaos/core": "1.0.9",
39
+ "zod": "^3.22.4"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.0.0",
43
+ "tsup": "8.3.5",
44
+ "typescript": "^5.7.3",
45
+ "prettier": "^3.0.0",
46
+ "bun": "^1.2.15",
47
+ "@types/bun": "latest"
48
+ },
49
+ "scripts": {
50
+ "build": "tsup",
51
+ "dev": "tsup --watch",
52
+ "lint": "prettier --write ./src",
53
+ "clean": "rm -rf dist .turbo node_modules .turbo-tsconfig.json tsconfig.tsbuildinfo",
54
+ "format": "prettier --write ./src",
55
+ "format:check": "prettier --check ./src",
56
+ "test": "bun test",
57
+ "test:watch": "bun test --watch",
58
+ "test:coverage": "bun test --coverage"
59
+ },
60
+ "publishConfig": {
61
+ "access": "public"
62
+ },
63
+ "agentConfig": {
64
+ "pluginType": "elizaos:plugin:1.0.0",
65
+ "pluginParameters": {
66
+ "SUNO_API_KEY": {
67
+ "type": "string",
68
+ "description": "Suno AI API key for authentication",
69
+ "required": true,
70
+ "sensitive": true
71
+ }
72
+ }
73
+ }
74
+ }
@@ -1,17 +0,0 @@
1
-
2
- > @elizaos/plugin-suno@0.25.6-alpha.1 build /home/runner/work/eliza/eliza/packages/plugin-suno
3
- > tsup --format esm --dts
4
-
5
- CLI Building entry: src/index.ts
6
- CLI Using tsconfig: tsconfig.json
7
- CLI tsup v8.3.5
8
- CLI Using tsup config: /home/runner/work/eliza/eliza/packages/plugin-suno/tsup.config.ts
9
- CLI Target: es2020
10
- CLI Cleaning output folder
11
- ESM Build start
12
- ESM dist/index.js 11.00 KB
13
- ESM dist/index.js.map 24.40 KB
14
- ESM ⚡️ Build success in 53ms
15
- DTS Build start
16
- DTS ⚡️ Build success in 6691ms
17
- DTS dist/index.d.ts 878.00 B
package/biome.json DELETED
@@ -1,41 +0,0 @@
1
- {
2
- "$schema": "https://biomejs.dev/schemas/1.5.3/schema.json",
3
- "organizeImports": {
4
- "enabled": false
5
- },
6
- "linter": {
7
- "enabled": true,
8
- "rules": {
9
- "recommended": true,
10
- "correctness": {
11
- "noUnusedVariables": "error"
12
- },
13
- "suspicious": {
14
- "noExplicitAny": "error"
15
- },
16
- "style": {
17
- "useConst": "error",
18
- "useImportType": "off"
19
- }
20
- }
21
- },
22
- "formatter": {
23
- "enabled": true,
24
- "indentStyle": "space",
25
- "indentWidth": 4,
26
- "lineWidth": 100
27
- },
28
- "javascript": {
29
- "formatter": {
30
- "quoteStyle": "single",
31
- "trailingCommas": "es5"
32
- }
33
- },
34
- "files": {
35
- "ignore": [
36
- "dist/**/*",
37
- "extra/**/*",
38
- "node_modules/**/*"
39
- ]
40
- }
41
- }