@elizaos/plugin-suno 0.1.9 → 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/LICENSE +21 -21
- package/dist/{index.mjs → index.cjs} +70 -50
- package/dist/index.cjs.map +1 -0
- package/dist/{index.d.mts → index.d.cts} +5 -7
- package/dist/index.d.ts +5 -7
- package/dist/index.js +59 -79
- package/dist/index.js.map +1 -1
- package/package.json +73 -24
- package/.turbo/turbo-build.log +0 -23
- package/dist/index.mjs.map +0 -1
- package/eslint.config.mjs +0 -3
- package/src/actions/customGenerate.ts +0 -156
- package/src/actions/extend.ts +0 -134
- package/src/actions/generate.ts +0 -145
- package/src/index.ts +0 -22
- package/src/providers/suno.ts +0 -78
- package/src/types/index.ts +0 -34
- package/tsconfig.json +0 -11
- package/tsup.config.ts +0 -11
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c)
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 ElizaOS
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
1
5
|
// src/providers/suno.ts
|
|
2
|
-
var
|
|
6
|
+
var SunoApiClient = class _SunoApiClient {
|
|
7
|
+
apiKey;
|
|
8
|
+
baseUrl;
|
|
3
9
|
static async get(runtime, _message, _state) {
|
|
4
10
|
const apiKey = runtime.getSetting("SUNO_API_KEY");
|
|
5
11
|
if (!apiKey) {
|
|
6
12
|
throw new Error("SUNO_API_KEY is required");
|
|
7
13
|
}
|
|
8
|
-
return new
|
|
14
|
+
return new _SunoApiClient({ apiKey });
|
|
9
15
|
}
|
|
10
16
|
constructor(config) {
|
|
11
17
|
this.apiKey = config.apiKey;
|
|
12
18
|
this.baseUrl = config.baseUrl || "https://api.suno.ai/v1";
|
|
13
19
|
}
|
|
14
|
-
async get(_runtime, _message, _state) {
|
|
15
|
-
return { status: "ready" };
|
|
16
|
-
}
|
|
17
20
|
async request(endpoint, options = {}) {
|
|
18
21
|
const url = `${this.baseUrl}${endpoint}`;
|
|
19
22
|
const headers = {
|
|
20
|
-
|
|
23
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
21
24
|
"Content-Type": "application/json",
|
|
22
25
|
...options.headers
|
|
23
26
|
};
|
|
@@ -31,6 +34,21 @@ var SunoProvider = class _SunoProvider {
|
|
|
31
34
|
return response.json();
|
|
32
35
|
}
|
|
33
36
|
};
|
|
37
|
+
var SunoProvider = {
|
|
38
|
+
name: "suno",
|
|
39
|
+
description: "Provides Suno AI music generation context and status",
|
|
40
|
+
get: async (runtime, _message, _state) => {
|
|
41
|
+
const apiKey = runtime.getSetting("SUNO_API_KEY");
|
|
42
|
+
return {
|
|
43
|
+
values: {
|
|
44
|
+
apiKeyConfigured: !!apiKey,
|
|
45
|
+
status: apiKey ? "ready" : "not_configured",
|
|
46
|
+
serviceUrl: "https://api.suno.ai/v1"
|
|
47
|
+
},
|
|
48
|
+
text: `Suno AI music generation service is ${apiKey ? "ready" : "not configured"}. API key ${apiKey ? "is set" : "is missing"}.`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
};
|
|
34
52
|
|
|
35
53
|
// src/actions/generate.ts
|
|
36
54
|
var generateMusic = {
|
|
@@ -49,7 +67,7 @@ var generateMusic = {
|
|
|
49
67
|
},
|
|
50
68
|
handler: async (runtime, message, state, _options, callback) => {
|
|
51
69
|
try {
|
|
52
|
-
const provider = await
|
|
70
|
+
const provider = await SunoApiClient.get(runtime, message, state);
|
|
53
71
|
const content = message.content;
|
|
54
72
|
if (!content.prompt) {
|
|
55
73
|
throw new Error("Missing required parameter: prompt");
|
|
@@ -75,7 +93,7 @@ var generateMusic = {
|
|
|
75
93
|
} catch (error) {
|
|
76
94
|
if (callback) {
|
|
77
95
|
callback({
|
|
78
|
-
text: `Failed to
|
|
96
|
+
text: `Failed to generate music: ${error.message}`,
|
|
79
97
|
error
|
|
80
98
|
});
|
|
81
99
|
}
|
|
@@ -85,7 +103,7 @@ var generateMusic = {
|
|
|
85
103
|
examples: [
|
|
86
104
|
[
|
|
87
105
|
{
|
|
88
|
-
|
|
106
|
+
name: "user1",
|
|
89
107
|
content: {
|
|
90
108
|
text: "Create a happy and energetic song",
|
|
91
109
|
prompt: "A cheerful and energetic melody with upbeat rhythm",
|
|
@@ -94,14 +112,14 @@ var generateMusic = {
|
|
|
94
112
|
}
|
|
95
113
|
},
|
|
96
114
|
{
|
|
97
|
-
|
|
115
|
+
name: "agent",
|
|
98
116
|
content: {
|
|
99
117
|
text: "I'll generate a happy and energetic song for you.",
|
|
100
118
|
action: "generate-music"
|
|
101
119
|
}
|
|
102
120
|
},
|
|
103
121
|
{
|
|
104
|
-
|
|
122
|
+
name: "agent",
|
|
105
123
|
content: {
|
|
106
124
|
text: "Successfully generated your upbeat and energetic song."
|
|
107
125
|
}
|
|
@@ -109,7 +127,7 @@ var generateMusic = {
|
|
|
109
127
|
],
|
|
110
128
|
[
|
|
111
129
|
{
|
|
112
|
-
|
|
130
|
+
name: "user1",
|
|
113
131
|
content: {
|
|
114
132
|
text: "Generate a relaxing ambient track",
|
|
115
133
|
prompt: "A peaceful ambient soundscape with gentle waves and soft pads",
|
|
@@ -119,14 +137,14 @@ var generateMusic = {
|
|
|
119
137
|
}
|
|
120
138
|
},
|
|
121
139
|
{
|
|
122
|
-
|
|
140
|
+
name: "agent",
|
|
123
141
|
content: {
|
|
124
142
|
text: "I'll create a calming ambient piece for you.",
|
|
125
143
|
action: "generate-music"
|
|
126
144
|
}
|
|
127
145
|
},
|
|
128
146
|
{
|
|
129
|
-
|
|
147
|
+
name: "agent",
|
|
130
148
|
content: {
|
|
131
149
|
text: "Successfully generated your relaxing ambient soundscape."
|
|
132
150
|
}
|
|
@@ -134,7 +152,7 @@ var generateMusic = {
|
|
|
134
152
|
],
|
|
135
153
|
[
|
|
136
154
|
{
|
|
137
|
-
|
|
155
|
+
name: "user1",
|
|
138
156
|
content: {
|
|
139
157
|
text: "Make a short jingle for my podcast",
|
|
140
158
|
prompt: "A catchy and professional podcast intro jingle",
|
|
@@ -144,14 +162,14 @@ var generateMusic = {
|
|
|
144
162
|
}
|
|
145
163
|
},
|
|
146
164
|
{
|
|
147
|
-
|
|
165
|
+
name: "agent",
|
|
148
166
|
content: {
|
|
149
167
|
text: "I'll generate a podcast jingle for you.",
|
|
150
168
|
action: "generate-music"
|
|
151
169
|
}
|
|
152
170
|
},
|
|
153
171
|
{
|
|
154
|
-
|
|
172
|
+
name: "agent",
|
|
155
173
|
content: {
|
|
156
174
|
text: "Successfully generated your podcast jingle."
|
|
157
175
|
}
|
|
@@ -170,16 +188,16 @@ var customGenerateMusic = {
|
|
|
170
188
|
"GENERATE_CUSTOM_AUDIO",
|
|
171
189
|
"MAKE_CUSTOM_MUSIC",
|
|
172
190
|
"COMPOSE_CUSTOM_MUSIC",
|
|
173
|
-
"
|
|
174
|
-
"
|
|
175
|
-
"
|
|
191
|
+
"CUSTOM_MUSIC_GENERATION",
|
|
192
|
+
"ADVANCED_MUSIC_CREATION",
|
|
193
|
+
"PERSONALIZED_MUSIC_GENERATION"
|
|
176
194
|
],
|
|
177
195
|
validate: async (runtime, _message) => {
|
|
178
196
|
return !!runtime.getSetting("SUNO_API_KEY");
|
|
179
197
|
},
|
|
180
198
|
handler: async (runtime, message, state, _options, callback) => {
|
|
181
199
|
try {
|
|
182
|
-
const provider = await
|
|
200
|
+
const provider = await SunoApiClient.get(runtime, message, state);
|
|
183
201
|
const content = message.content;
|
|
184
202
|
if (!content.prompt) {
|
|
185
203
|
throw new Error("Missing required parameter: prompt");
|
|
@@ -220,7 +238,7 @@ var customGenerateMusic = {
|
|
|
220
238
|
examples: [
|
|
221
239
|
[
|
|
222
240
|
{
|
|
223
|
-
|
|
241
|
+
name: "user1",
|
|
224
242
|
content: {
|
|
225
243
|
text: "Create an upbeat electronic dance track with heavy bass",
|
|
226
244
|
prompt: "An upbeat electronic dance track with heavy bass and energetic synths",
|
|
@@ -230,14 +248,14 @@ var customGenerateMusic = {
|
|
|
230
248
|
}
|
|
231
249
|
},
|
|
232
250
|
{
|
|
233
|
-
|
|
251
|
+
name: "agent",
|
|
234
252
|
content: {
|
|
235
253
|
text: "I'll generate an energetic EDM track for you.",
|
|
236
254
|
action: "custom-generate-music"
|
|
237
255
|
}
|
|
238
256
|
},
|
|
239
257
|
{
|
|
240
|
-
|
|
258
|
+
name: "agent",
|
|
241
259
|
content: {
|
|
242
260
|
text: "Successfully generated your EDM track with heavy bass and synths."
|
|
243
261
|
}
|
|
@@ -245,7 +263,7 @@ var customGenerateMusic = {
|
|
|
245
263
|
],
|
|
246
264
|
[
|
|
247
265
|
{
|
|
248
|
-
|
|
266
|
+
name: "user1",
|
|
249
267
|
content: {
|
|
250
268
|
text: "Generate a calm piano melody in C major",
|
|
251
269
|
prompt: "A gentle, flowing piano melody with soft dynamics",
|
|
@@ -257,14 +275,14 @@ var customGenerateMusic = {
|
|
|
257
275
|
}
|
|
258
276
|
},
|
|
259
277
|
{
|
|
260
|
-
|
|
278
|
+
name: "agent",
|
|
261
279
|
content: {
|
|
262
280
|
text: "I'll create a calming piano piece in C major for you.",
|
|
263
281
|
action: "custom-generate-music"
|
|
264
282
|
}
|
|
265
283
|
},
|
|
266
284
|
{
|
|
267
|
-
|
|
285
|
+
name: "agent",
|
|
268
286
|
content: {
|
|
269
287
|
text: "Successfully generated your peaceful piano melody in C major."
|
|
270
288
|
}
|
|
@@ -272,7 +290,7 @@ var customGenerateMusic = {
|
|
|
272
290
|
],
|
|
273
291
|
[
|
|
274
292
|
{
|
|
275
|
-
|
|
293
|
+
name: "user1",
|
|
276
294
|
content: {
|
|
277
295
|
text: "Make a rock song with guitar solos",
|
|
278
296
|
prompt: "A rock song with powerful electric guitar solos and driving drums",
|
|
@@ -283,14 +301,14 @@ var customGenerateMusic = {
|
|
|
283
301
|
}
|
|
284
302
|
},
|
|
285
303
|
{
|
|
286
|
-
|
|
304
|
+
name: "agent",
|
|
287
305
|
content: {
|
|
288
306
|
text: "I'll generate a rock track with guitar solos for you.",
|
|
289
307
|
action: "custom-generate-music"
|
|
290
308
|
}
|
|
291
309
|
},
|
|
292
310
|
{
|
|
293
|
-
|
|
311
|
+
name: "agent",
|
|
294
312
|
content: {
|
|
295
313
|
text: "Successfully generated your rock song with guitar solos."
|
|
296
314
|
}
|
|
@@ -305,6 +323,7 @@ var extendAudio = {
|
|
|
305
323
|
name: "extend-audio",
|
|
306
324
|
description: "Extend the duration of an existing audio generation",
|
|
307
325
|
similes: [
|
|
326
|
+
"EXTEND_AUDIO",
|
|
308
327
|
"LENGTHEN_AUDIO",
|
|
309
328
|
"PROLONG_AUDIO",
|
|
310
329
|
"INCREASE_DURATION",
|
|
@@ -315,7 +334,7 @@ var extendAudio = {
|
|
|
315
334
|
},
|
|
316
335
|
handler: async (runtime, message, state, _options, callback) => {
|
|
317
336
|
try {
|
|
318
|
-
const provider = await
|
|
337
|
+
const provider = await SunoApiClient.get(runtime, message, state);
|
|
319
338
|
const content = message.content;
|
|
320
339
|
if (!content.audio_id || !content.duration) {
|
|
321
340
|
throw new Error("Missing required parameters: audio_id and duration");
|
|
@@ -347,7 +366,7 @@ var extendAudio = {
|
|
|
347
366
|
examples: [
|
|
348
367
|
[
|
|
349
368
|
{
|
|
350
|
-
|
|
369
|
+
name: "user1",
|
|
351
370
|
content: {
|
|
352
371
|
text: "Make this song longer by 30 seconds",
|
|
353
372
|
audio_id: "abc123",
|
|
@@ -355,14 +374,14 @@ var extendAudio = {
|
|
|
355
374
|
}
|
|
356
375
|
},
|
|
357
376
|
{
|
|
358
|
-
|
|
377
|
+
name: "agent",
|
|
359
378
|
content: {
|
|
360
379
|
text: "I'll extend your song by 30 seconds.",
|
|
361
380
|
action: "extend-audio"
|
|
362
381
|
}
|
|
363
382
|
},
|
|
364
383
|
{
|
|
365
|
-
|
|
384
|
+
name: "agent",
|
|
366
385
|
content: {
|
|
367
386
|
text: "Successfully extended your song by 30 seconds."
|
|
368
387
|
}
|
|
@@ -370,7 +389,7 @@ var extendAudio = {
|
|
|
370
389
|
],
|
|
371
390
|
[
|
|
372
391
|
{
|
|
373
|
-
|
|
392
|
+
name: "user1",
|
|
374
393
|
content: {
|
|
375
394
|
text: "Double the length of this track",
|
|
376
395
|
audio_id: "xyz789",
|
|
@@ -378,14 +397,14 @@ var extendAudio = {
|
|
|
378
397
|
}
|
|
379
398
|
},
|
|
380
399
|
{
|
|
381
|
-
|
|
400
|
+
name: "agent",
|
|
382
401
|
content: {
|
|
383
402
|
text: "I'll double the duration of your track.",
|
|
384
403
|
action: "extend-audio"
|
|
385
404
|
}
|
|
386
405
|
},
|
|
387
406
|
{
|
|
388
|
-
|
|
407
|
+
name: "agent",
|
|
389
408
|
content: {
|
|
390
409
|
text: "Successfully doubled the length of your track to 60 seconds."
|
|
391
410
|
}
|
|
@@ -393,7 +412,7 @@ var extendAudio = {
|
|
|
393
412
|
],
|
|
394
413
|
[
|
|
395
414
|
{
|
|
396
|
-
|
|
415
|
+
name: "user1",
|
|
397
416
|
content: {
|
|
398
417
|
text: "Add 15 more seconds to this melody",
|
|
399
418
|
audio_id: "def456",
|
|
@@ -401,14 +420,14 @@ var extendAudio = {
|
|
|
401
420
|
}
|
|
402
421
|
},
|
|
403
422
|
{
|
|
404
|
-
|
|
423
|
+
name: "agent",
|
|
405
424
|
content: {
|
|
406
425
|
text: "I'll add 15 seconds to your melody.",
|
|
407
426
|
action: "extend-audio"
|
|
408
427
|
}
|
|
409
428
|
},
|
|
410
429
|
{
|
|
411
|
-
|
|
430
|
+
name: "agent",
|
|
412
431
|
content: {
|
|
413
432
|
text: "Successfully added 15 seconds to your melody."
|
|
414
433
|
}
|
|
@@ -426,13 +445,14 @@ var sunoPlugin = {
|
|
|
426
445
|
evaluators: [],
|
|
427
446
|
providers: [SunoProvider]
|
|
428
447
|
};
|
|
429
|
-
var
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
//# sourceMappingURL=index.
|
|
448
|
+
var index_default = sunoPlugin;
|
|
449
|
+
|
|
450
|
+
exports.CustomGenerateMusic = customGenerate_default;
|
|
451
|
+
exports.ExtendAudio = extend_default;
|
|
452
|
+
exports.GenerateMusic = generate_default;
|
|
453
|
+
exports.SunoApiClient = SunoApiClient;
|
|
454
|
+
exports.SunoProvider = SunoProvider;
|
|
455
|
+
exports.default = index_default;
|
|
456
|
+
exports.sunoPlugin = sunoPlugin;
|
|
457
|
+
//# sourceMappingURL=index.cjs.map
|
|
458
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":";;;;;AAOO,IAAM,aAAA,GAAN,MAAM,cAAA,CAAc;AAAA,EACjB,MAAA;AAAA,EACA,OAAA;AAAA,EAER,aAAa,GAAA,CACX,OAAA,EACA,QAAA,EACA,MAAA,EACwB;AACxB,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,UAAA,CAAW,cAAc,CAAA;AAChD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA;AAE5C,IAAA,OAAO,IAAI,cAAA,CAAc,EAAE,MAAA,EAAQ,CAAA;AAAA;AACrC,EAEA,YAAY,MAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,wBAAA;AAAA;AACnC,EAEA,MAAM,OAAA,CAAQ,QAAA,EAAkB,OAAA,GAAuB,EAAC,EAAG;AACzD,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,QAAQ,CAAA,CAAA;AACtC,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,MACpC,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,OAAA,CAAQ;AAAA,KACb;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,GAAG,OAAA;AAAA,MACH;AAAA,KACD,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA;AAG1D,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA;AAEzB;AAEO,IAAM,YAAA,GAAyB;AAAA,EACpC,IAAA,EAAM,MAAA;AAAA,EACN,WAAA,EAAa,sDAAA;AAAA,EACb,GAAA,EAAK,OAAO,OAAA,EAAwB,QAAA,EAAkB,MAAA,KAAkB;AACtE,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,UAAA,CAAW,cAAc,CAAA;AAChD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,gBAAA,EAAkB,CAAC,CAAC,MAAA;AAAA,QACpB,MAAA,EAAQ,SAAS,OAAA,GAAU,gBAAA;AAAA,QAC3B,UAAA,EAAY;AAAA,OACd;AAAA,MACA,IAAA,EAAM,uCAAuC,MAAA,GAAS,OAAA,GAAU,gBAAgB,CAAA,UAAA,EAAa,MAAA,GAAS,WAAW,YAAY,CAAA,CAAA;AAAA,KAC/H;AAAA;AAEJ;;;AC3DA,IAAM,aAAA,GAAwB;AAAA,EAC5B,IAAA,EAAM,gBAAA;AAAA,EACN,WAAA,EAAa,8BAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,cAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,QAAA,EAAU,OAAO,OAAA,EAAwB,QAAA,KAAqB;AAC5D,IAAA,OAAO,CAAC,CAAC,OAAA,CAAQ,UAAA,CAAW,cAAc,CAAA;AAAA,GAC5C;AAAA,EAEA,SAAS,OACP,OAAA,EACA,OAAA,EACA,KAAA,EACA,UACA,QAAA,KACqB;AACrB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,aAAA,CAAc,GAAA,CAAI,OAAA,EAAS,SAAS,KAAK,CAAA;AAChE,MAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AAExB,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,QAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA;AAGtD,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa;AAAA,QACnD,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAA;AAAA,UAC9B,WAAA,EAAa,QAAQ,WAAA,IAAe,CAAA;AAAA,UACpC,KAAA,EAAO,QAAQ,IAAA,IAAQ,GAAA;AAAA,UACvB,KAAA,EAAO,QAAQ,IAAA,IAAQ,IAAA;AAAA,UACvB,wBAAA,EAA0B,QAAQ,wBAAA,IAA4B;AAAA,SAC/D;AAAA,OACF,CAAA;AAED,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,mDAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACV,CAAA;AAAA;AAGH,MAAA,OAAO,IAAA;AAAA,aACA,KAAA,EAAO;AACd,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,CAAA,0BAAA,EAA8B,KAAA,CAAgB,OAAO,CAAA,CAAA;AAAA,UAC3D;AAAA,SACD,CAAA;AAAA;AAEH,MAAA,OAAO,KAAA;AAAA;AACT,GACF;AAAA,EAEA,QAAA,EAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,mCAAA;AAAA,UACN,MAAA,EAAQ,oDAAA;AAAA,UACR,QAAA,EAAU,EAAA;AAAA,UACV,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,mDAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,mCAAA;AAAA,UACN,MAAA,EAAQ,+DAAA;AAAA,UACR,QAAA,EAAU,EAAA;AAAA,UACV,WAAA,EAAa,GAAA;AAAA,UACb,wBAAA,EAA0B;AAAA;AAC5B,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,8CAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,oCAAA;AAAA,UACN,MAAA,EAAQ,gDAAA;AAAA,UACR,QAAA,EAAU,EAAA;AAAA,UACV,WAAA,EAAa,GAAA;AAAA,UACb,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,yCAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF;AACF;AAEJ,CAAA;AAEA,IAAO,gBAAA,GAAQ;;;AC5If,IAAM,mBAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,uBAAA;AAAA,EACN,WAAA,EAAa,qDAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,qBAAA;AAAA,IACA,uBAAA;AAAA,IACA,mBAAA;AAAA,IACA,sBAAA;AAAA,IACA,yBAAA;AAAA,IACA,yBAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,QAAA,EAAU,OAAO,OAAA,EAAwB,QAAA,KAAqB;AAC5D,IAAA,OAAO,CAAC,CAAC,OAAA,CAAQ,UAAA,CAAW,cAAc,CAAA;AAAA,GAC5C;AAAA,EAEA,SAAS,OACP,OAAA,EACA,OAAA,EACA,KAAA,EACA,UACA,QAAA,KACqB;AACrB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,aAAA,CAAc,GAAA,CAAI,OAAA,EAAS,SAAS,KAAK,CAAA;AAChE,MAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AAExB,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,QAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA;AAGtD,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA,CAAQ,kBAAA,EAAoB;AAAA,QAC1D,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAA;AAAA,UAC9B,WAAA,EAAa,QAAQ,WAAA,IAAe,CAAA;AAAA,UACpC,KAAA,EAAO,QAAQ,IAAA,IAAQ,GAAA;AAAA,UACvB,KAAA,EAAO,QAAQ,IAAA,IAAQ,IAAA;AAAA,UACvB,wBAAA,EAA0B,QAAQ,wBAAA,IAA4B,CAAA;AAAA,UAC9D,iBAAiB,OAAA,CAAQ,eAAA;AAAA,UACzB,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,KAAK,OAAA,CAAQ,GAAA;AAAA,UACb,KAAK,OAAA,CAAQ,GAAA;AAAA,UACb,MAAM,OAAA,CAAQ;AAAA,SACf;AAAA,OACF,CAAA;AAED,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,qCAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACV,CAAA;AAAA;AAGH,MAAA,OAAO,IAAA;AAAA,aACA,KAAA,EAAO;AACd,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,CAAA,iCAAA,EAAqC,KAAA,CAAgB,OAAO,CAAA,CAAA;AAAA,UAClE;AAAA,SACD,CAAA;AAAA;AAEH,MAAA,OAAO,KAAA;AAAA;AACT,GACF;AAAA,EAEA,QAAA,EAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,yDAAA;AAAA,UACN,MAAA,EAAQ,uEAAA;AAAA,UACR,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,YAAA;AAAA,UACP,GAAA,EAAK;AAAA;AACP,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,+CAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,yCAAA;AAAA,UACN,MAAA,EAAQ,mDAAA;AAAA,UACR,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,WAAA;AAAA,UACP,GAAA,EAAK,GAAA;AAAA,UACL,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,uDAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,oCAAA;AAAA,UACN,MAAA,EAAQ,mEAAA;AAAA,UACR,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,MAAA;AAAA,UACP,GAAA,EAAK,GAAA;AAAA,UACL,wBAAA,EAA0B;AAAA;AAC5B,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,uDAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF;AACF;AAEJ,CAAA;AAEA,IAAO,sBAAA,GAAQ;;;ACtJf,IAAM,WAAA,GAAsB;AAAA,EAC1B,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,qDAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,QAAA,EAAU,OAAO,OAAA,EAAwB,QAAA,KAAqB;AAC5D,IAAA,OAAO,CAAC,CAAC,OAAA,CAAQ,UAAA,CAAW,cAAc,CAAA;AAAA,GAC5C;AAAA,EAEA,SAAS,OACP,OAAA,EACA,OAAA,EACA,KAAA,EACA,UACA,QAAA,KACqB;AACrB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,aAAA,CAAc,GAAA,CAAI,OAAA,EAAS,SAAS,KAAK,CAAA;AAChE,MAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AAExB,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,IAAY,CAAC,QAAQ,QAAA,EAAU;AAC1C,QAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA;AAGtE,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA,CAAQ,SAAA,EAAW;AAAA,QACjD,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,UAAU,OAAA,CAAQ;AAAA,SACnB;AAAA,OACF,CAAA;AAED,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,CAAA,4BAAA,EAA+B,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAAA,UACrD,OAAA,EAAS;AAAA,SACV,CAAA;AAAA;AAGH,MAAA,OAAO,IAAA;AAAA,aACA,KAAA,EAAO;AACd,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,CAAA,wBAAA,EAA4B,KAAA,CAAgB,OAAO,CAAA,CAAA;AAAA,UACzD;AAAA,SACD,CAAA;AAAA;AAEH,MAAA,OAAO,KAAA;AAAA;AACT,GACF;AAAA,EAEA,QAAA,EAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,qCAAA;AAAA,UACN,QAAA,EAAU,QAAA;AAAA,UACV,QAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,sCAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,iCAAA;AAAA,UACN,QAAA,EAAU,QAAA;AAAA,UACV,QAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,yCAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,oCAAA;AAAA,UACN,QAAA,EAAU,QAAA;AAAA,UACV,QAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,qCAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF;AACF;AAEJ,CAAA;AAEA,IAAO,cAAA,GAAQ;;;ACxHR,IAAM,UAAA,GAAqB;AAAA,EAChC,IAAA,EAAM,MAAA;AAAA,EACN,WAAA,EAAa,2CAAA;AAAA,EACb,OAAA,EAAS,CAAC,gBAAA,EAAe,sBAAA,EAAqB,cAAW,CAAA;AAAA,EACzD,YAAY,EAAC;AAAA,EACb,SAAA,EAAW,CAAC,YAAY;AAC1B;AAEA,IAAO,aAAA,GAAQ","file":"index.cjs","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"]}
|
|
@@ -10,17 +10,15 @@ interface SunoConfig {
|
|
|
10
10
|
apiKey: string;
|
|
11
11
|
baseUrl?: string;
|
|
12
12
|
}
|
|
13
|
-
declare class
|
|
13
|
+
declare class SunoApiClient {
|
|
14
14
|
private apiKey;
|
|
15
15
|
private baseUrl;
|
|
16
|
-
static get(runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<
|
|
16
|
+
static get(runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<SunoApiClient>;
|
|
17
17
|
constructor(config: SunoConfig);
|
|
18
|
-
|
|
19
|
-
status: string;
|
|
20
|
-
}>;
|
|
21
|
-
request(endpoint: string, options?: RequestInit): Promise<any>;
|
|
18
|
+
request(endpoint: string, options?: RequestInit): Promise<unknown>;
|
|
22
19
|
}
|
|
20
|
+
declare const SunoProvider: Provider;
|
|
23
21
|
|
|
24
22
|
declare const sunoPlugin: Plugin;
|
|
25
23
|
|
|
26
|
-
export { customGenerateMusic as CustomGenerateMusic, extendAudio as ExtendAudio, generateMusic as GenerateMusic, SunoProvider, sunoPlugin as default, sunoPlugin };
|
|
24
|
+
export { customGenerateMusic as CustomGenerateMusic, extendAudio as ExtendAudio, generateMusic as GenerateMusic, SunoApiClient, SunoProvider, sunoPlugin as default, sunoPlugin };
|
package/dist/index.d.ts
CHANGED
|
@@ -10,17 +10,15 @@ interface SunoConfig {
|
|
|
10
10
|
apiKey: string;
|
|
11
11
|
baseUrl?: string;
|
|
12
12
|
}
|
|
13
|
-
declare class
|
|
13
|
+
declare class SunoApiClient {
|
|
14
14
|
private apiKey;
|
|
15
15
|
private baseUrl;
|
|
16
|
-
static get(runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<
|
|
16
|
+
static get(runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<SunoApiClient>;
|
|
17
17
|
constructor(config: SunoConfig);
|
|
18
|
-
|
|
19
|
-
status: string;
|
|
20
|
-
}>;
|
|
21
|
-
request(endpoint: string, options?: RequestInit): Promise<any>;
|
|
18
|
+
request(endpoint: string, options?: RequestInit): Promise<unknown>;
|
|
22
19
|
}
|
|
20
|
+
declare const SunoProvider: Provider;
|
|
23
21
|
|
|
24
22
|
declare const sunoPlugin: Plugin;
|
|
25
23
|
|
|
26
|
-
export { customGenerateMusic as CustomGenerateMusic, extendAudio as ExtendAudio, generateMusic as GenerateMusic, SunoProvider, sunoPlugin as default, sunoPlugin };
|
|
24
|
+
export { customGenerateMusic as CustomGenerateMusic, extendAudio as ExtendAudio, generateMusic as GenerateMusic, SunoApiClient, SunoProvider, sunoPlugin as default, sunoPlugin };
|