@elizaos/plugin-suno 1.0.5 → 1.0.6-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/biome.json +41 -0
- package/dist/index.js +48 -56
- package/dist/index.js.map +1 -1
- package/package.json +34 -72
- package/src/actions/customGenerate.ts +156 -0
- package/src/actions/extend.ts +134 -0
- package/src/actions/generate.ts +145 -0
- package/src/index.ts +22 -0
- package/src/providers/suno.ts +78 -0
- package/src/types/index.ts +34 -0
- package/tsconfig.json +24 -0
- package/tsup.config.ts +11 -0
- package/LICENSE +0 -21
- package/dist/index.cjs +0 -458
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -24
- package/dist/index.d.ts +0 -24
package/biome.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/providers/suno.ts
|
|
2
|
-
var
|
|
2
|
+
var SunoProvider = class _SunoProvider {
|
|
3
3
|
apiKey;
|
|
4
4
|
baseUrl;
|
|
5
5
|
static async get(runtime, _message, _state) {
|
|
@@ -7,16 +7,19 @@ var SunoApiClient = class _SunoApiClient {
|
|
|
7
7
|
if (!apiKey) {
|
|
8
8
|
throw new Error("SUNO_API_KEY is required");
|
|
9
9
|
}
|
|
10
|
-
return new
|
|
10
|
+
return new _SunoProvider({ apiKey });
|
|
11
11
|
}
|
|
12
12
|
constructor(config) {
|
|
13
13
|
this.apiKey = config.apiKey;
|
|
14
14
|
this.baseUrl = config.baseUrl || "https://api.suno.ai/v1";
|
|
15
15
|
}
|
|
16
|
+
async get(_runtime, _message, _state) {
|
|
17
|
+
return { status: "ready" };
|
|
18
|
+
}
|
|
16
19
|
async request(endpoint, options = {}) {
|
|
17
20
|
const url = `${this.baseUrl}${endpoint}`;
|
|
18
21
|
const headers = {
|
|
19
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
22
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
20
23
|
"Content-Type": "application/json",
|
|
21
24
|
...options.headers
|
|
22
25
|
};
|
|
@@ -30,21 +33,6 @@ var SunoApiClient = class _SunoApiClient {
|
|
|
30
33
|
return response.json();
|
|
31
34
|
}
|
|
32
35
|
};
|
|
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
|
-
};
|
|
48
36
|
|
|
49
37
|
// src/actions/generate.ts
|
|
50
38
|
var generateMusic = {
|
|
@@ -63,7 +51,7 @@ var generateMusic = {
|
|
|
63
51
|
},
|
|
64
52
|
handler: async (runtime, message, state, _options, callback) => {
|
|
65
53
|
try {
|
|
66
|
-
const provider = await
|
|
54
|
+
const provider = await SunoProvider.get(runtime, message, state);
|
|
67
55
|
const content = message.content;
|
|
68
56
|
if (!content.prompt) {
|
|
69
57
|
throw new Error("Missing required parameter: prompt");
|
|
@@ -89,7 +77,7 @@ var generateMusic = {
|
|
|
89
77
|
} catch (error) {
|
|
90
78
|
if (callback) {
|
|
91
79
|
callback({
|
|
92
|
-
text: `Failed to
|
|
80
|
+
text: `Failed to extend audio: ${error.message}`,
|
|
93
81
|
error
|
|
94
82
|
});
|
|
95
83
|
}
|
|
@@ -99,7 +87,7 @@ var generateMusic = {
|
|
|
99
87
|
examples: [
|
|
100
88
|
[
|
|
101
89
|
{
|
|
102
|
-
|
|
90
|
+
user: "{{user1}}",
|
|
103
91
|
content: {
|
|
104
92
|
text: "Create a happy and energetic song",
|
|
105
93
|
prompt: "A cheerful and energetic melody with upbeat rhythm",
|
|
@@ -108,14 +96,14 @@ var generateMusic = {
|
|
|
108
96
|
}
|
|
109
97
|
},
|
|
110
98
|
{
|
|
111
|
-
|
|
99
|
+
user: "{{agent}}",
|
|
112
100
|
content: {
|
|
113
101
|
text: "I'll generate a happy and energetic song for you.",
|
|
114
102
|
action: "generate-music"
|
|
115
103
|
}
|
|
116
104
|
},
|
|
117
105
|
{
|
|
118
|
-
|
|
106
|
+
user: "{{agent}}",
|
|
119
107
|
content: {
|
|
120
108
|
text: "Successfully generated your upbeat and energetic song."
|
|
121
109
|
}
|
|
@@ -123,7 +111,7 @@ var generateMusic = {
|
|
|
123
111
|
],
|
|
124
112
|
[
|
|
125
113
|
{
|
|
126
|
-
|
|
114
|
+
user: "{{user1}}",
|
|
127
115
|
content: {
|
|
128
116
|
text: "Generate a relaxing ambient track",
|
|
129
117
|
prompt: "A peaceful ambient soundscape with gentle waves and soft pads",
|
|
@@ -133,14 +121,14 @@ var generateMusic = {
|
|
|
133
121
|
}
|
|
134
122
|
},
|
|
135
123
|
{
|
|
136
|
-
|
|
124
|
+
user: "{{agent}}",
|
|
137
125
|
content: {
|
|
138
126
|
text: "I'll create a calming ambient piece for you.",
|
|
139
127
|
action: "generate-music"
|
|
140
128
|
}
|
|
141
129
|
},
|
|
142
130
|
{
|
|
143
|
-
|
|
131
|
+
user: "{{agent}}",
|
|
144
132
|
content: {
|
|
145
133
|
text: "Successfully generated your relaxing ambient soundscape."
|
|
146
134
|
}
|
|
@@ -148,7 +136,7 @@ var generateMusic = {
|
|
|
148
136
|
],
|
|
149
137
|
[
|
|
150
138
|
{
|
|
151
|
-
|
|
139
|
+
user: "{{user1}}",
|
|
152
140
|
content: {
|
|
153
141
|
text: "Make a short jingle for my podcast",
|
|
154
142
|
prompt: "A catchy and professional podcast intro jingle",
|
|
@@ -158,14 +146,14 @@ var generateMusic = {
|
|
|
158
146
|
}
|
|
159
147
|
},
|
|
160
148
|
{
|
|
161
|
-
|
|
149
|
+
user: "{{agent}}",
|
|
162
150
|
content: {
|
|
163
151
|
text: "I'll generate a podcast jingle for you.",
|
|
164
152
|
action: "generate-music"
|
|
165
153
|
}
|
|
166
154
|
},
|
|
167
155
|
{
|
|
168
|
-
|
|
156
|
+
user: "{{agent}}",
|
|
169
157
|
content: {
|
|
170
158
|
text: "Successfully generated your podcast jingle."
|
|
171
159
|
}
|
|
@@ -184,16 +172,16 @@ var customGenerateMusic = {
|
|
|
184
172
|
"GENERATE_CUSTOM_AUDIO",
|
|
185
173
|
"MAKE_CUSTOM_MUSIC",
|
|
186
174
|
"COMPOSE_CUSTOM_MUSIC",
|
|
187
|
-
"
|
|
188
|
-
"
|
|
189
|
-
"
|
|
175
|
+
"COMPOSE_MUSIC",
|
|
176
|
+
"CREATE_MUSIC",
|
|
177
|
+
"GENERATE_MUSIC"
|
|
190
178
|
],
|
|
191
179
|
validate: async (runtime, _message) => {
|
|
192
180
|
return !!runtime.getSetting("SUNO_API_KEY");
|
|
193
181
|
},
|
|
194
182
|
handler: async (runtime, message, state, _options, callback) => {
|
|
195
183
|
try {
|
|
196
|
-
const provider = await
|
|
184
|
+
const provider = await SunoProvider.get(runtime, message, state);
|
|
197
185
|
const content = message.content;
|
|
198
186
|
if (!content.prompt) {
|
|
199
187
|
throw new Error("Missing required parameter: prompt");
|
|
@@ -234,7 +222,7 @@ var customGenerateMusic = {
|
|
|
234
222
|
examples: [
|
|
235
223
|
[
|
|
236
224
|
{
|
|
237
|
-
|
|
225
|
+
user: "{{user1}}",
|
|
238
226
|
content: {
|
|
239
227
|
text: "Create an upbeat electronic dance track with heavy bass",
|
|
240
228
|
prompt: "An upbeat electronic dance track with heavy bass and energetic synths",
|
|
@@ -244,14 +232,14 @@ var customGenerateMusic = {
|
|
|
244
232
|
}
|
|
245
233
|
},
|
|
246
234
|
{
|
|
247
|
-
|
|
235
|
+
user: "{{agent}}",
|
|
248
236
|
content: {
|
|
249
237
|
text: "I'll generate an energetic EDM track for you.",
|
|
250
238
|
action: "custom-generate-music"
|
|
251
239
|
}
|
|
252
240
|
},
|
|
253
241
|
{
|
|
254
|
-
|
|
242
|
+
user: "{{agent}}",
|
|
255
243
|
content: {
|
|
256
244
|
text: "Successfully generated your EDM track with heavy bass and synths."
|
|
257
245
|
}
|
|
@@ -259,7 +247,7 @@ var customGenerateMusic = {
|
|
|
259
247
|
],
|
|
260
248
|
[
|
|
261
249
|
{
|
|
262
|
-
|
|
250
|
+
user: "{{user1}}",
|
|
263
251
|
content: {
|
|
264
252
|
text: "Generate a calm piano melody in C major",
|
|
265
253
|
prompt: "A gentle, flowing piano melody with soft dynamics",
|
|
@@ -271,14 +259,14 @@ var customGenerateMusic = {
|
|
|
271
259
|
}
|
|
272
260
|
},
|
|
273
261
|
{
|
|
274
|
-
|
|
262
|
+
user: "{{agent}}",
|
|
275
263
|
content: {
|
|
276
264
|
text: "I'll create a calming piano piece in C major for you.",
|
|
277
265
|
action: "custom-generate-music"
|
|
278
266
|
}
|
|
279
267
|
},
|
|
280
268
|
{
|
|
281
|
-
|
|
269
|
+
user: "{{agent}}",
|
|
282
270
|
content: {
|
|
283
271
|
text: "Successfully generated your peaceful piano melody in C major."
|
|
284
272
|
}
|
|
@@ -286,7 +274,7 @@ var customGenerateMusic = {
|
|
|
286
274
|
],
|
|
287
275
|
[
|
|
288
276
|
{
|
|
289
|
-
|
|
277
|
+
user: "{{user1}}",
|
|
290
278
|
content: {
|
|
291
279
|
text: "Make a rock song with guitar solos",
|
|
292
280
|
prompt: "A rock song with powerful electric guitar solos and driving drums",
|
|
@@ -297,14 +285,14 @@ var customGenerateMusic = {
|
|
|
297
285
|
}
|
|
298
286
|
},
|
|
299
287
|
{
|
|
300
|
-
|
|
288
|
+
user: "{{agent}}",
|
|
301
289
|
content: {
|
|
302
290
|
text: "I'll generate a rock track with guitar solos for you.",
|
|
303
291
|
action: "custom-generate-music"
|
|
304
292
|
}
|
|
305
293
|
},
|
|
306
294
|
{
|
|
307
|
-
|
|
295
|
+
user: "{{agent}}",
|
|
308
296
|
content: {
|
|
309
297
|
text: "Successfully generated your rock song with guitar solos."
|
|
310
298
|
}
|
|
@@ -319,7 +307,6 @@ var extendAudio = {
|
|
|
319
307
|
name: "extend-audio",
|
|
320
308
|
description: "Extend the duration of an existing audio generation",
|
|
321
309
|
similes: [
|
|
322
|
-
"EXTEND_AUDIO",
|
|
323
310
|
"LENGTHEN_AUDIO",
|
|
324
311
|
"PROLONG_AUDIO",
|
|
325
312
|
"INCREASE_DURATION",
|
|
@@ -330,7 +317,7 @@ var extendAudio = {
|
|
|
330
317
|
},
|
|
331
318
|
handler: async (runtime, message, state, _options, callback) => {
|
|
332
319
|
try {
|
|
333
|
-
const provider = await
|
|
320
|
+
const provider = await SunoProvider.get(runtime, message, state);
|
|
334
321
|
const content = message.content;
|
|
335
322
|
if (!content.audio_id || !content.duration) {
|
|
336
323
|
throw new Error("Missing required parameters: audio_id and duration");
|
|
@@ -362,7 +349,7 @@ var extendAudio = {
|
|
|
362
349
|
examples: [
|
|
363
350
|
[
|
|
364
351
|
{
|
|
365
|
-
|
|
352
|
+
user: "{{user1}}",
|
|
366
353
|
content: {
|
|
367
354
|
text: "Make this song longer by 30 seconds",
|
|
368
355
|
audio_id: "abc123",
|
|
@@ -370,14 +357,14 @@ var extendAudio = {
|
|
|
370
357
|
}
|
|
371
358
|
},
|
|
372
359
|
{
|
|
373
|
-
|
|
360
|
+
user: "{{agent}}",
|
|
374
361
|
content: {
|
|
375
362
|
text: "I'll extend your song by 30 seconds.",
|
|
376
363
|
action: "extend-audio"
|
|
377
364
|
}
|
|
378
365
|
},
|
|
379
366
|
{
|
|
380
|
-
|
|
367
|
+
user: "{{agent}}",
|
|
381
368
|
content: {
|
|
382
369
|
text: "Successfully extended your song by 30 seconds."
|
|
383
370
|
}
|
|
@@ -385,7 +372,7 @@ var extendAudio = {
|
|
|
385
372
|
],
|
|
386
373
|
[
|
|
387
374
|
{
|
|
388
|
-
|
|
375
|
+
user: "{{user1}}",
|
|
389
376
|
content: {
|
|
390
377
|
text: "Double the length of this track",
|
|
391
378
|
audio_id: "xyz789",
|
|
@@ -393,14 +380,14 @@ var extendAudio = {
|
|
|
393
380
|
}
|
|
394
381
|
},
|
|
395
382
|
{
|
|
396
|
-
|
|
383
|
+
user: "{{agent}}",
|
|
397
384
|
content: {
|
|
398
385
|
text: "I'll double the duration of your track.",
|
|
399
386
|
action: "extend-audio"
|
|
400
387
|
}
|
|
401
388
|
},
|
|
402
389
|
{
|
|
403
|
-
|
|
390
|
+
user: "{{agent}}",
|
|
404
391
|
content: {
|
|
405
392
|
text: "Successfully doubled the length of your track to 60 seconds."
|
|
406
393
|
}
|
|
@@ -408,7 +395,7 @@ var extendAudio = {
|
|
|
408
395
|
],
|
|
409
396
|
[
|
|
410
397
|
{
|
|
411
|
-
|
|
398
|
+
user: "{{user1}}",
|
|
412
399
|
content: {
|
|
413
400
|
text: "Add 15 more seconds to this melody",
|
|
414
401
|
audio_id: "def456",
|
|
@@ -416,14 +403,14 @@ var extendAudio = {
|
|
|
416
403
|
}
|
|
417
404
|
},
|
|
418
405
|
{
|
|
419
|
-
|
|
406
|
+
user: "{{agent}}",
|
|
420
407
|
content: {
|
|
421
408
|
text: "I'll add 15 seconds to your melody.",
|
|
422
409
|
action: "extend-audio"
|
|
423
410
|
}
|
|
424
411
|
},
|
|
425
412
|
{
|
|
426
|
-
|
|
413
|
+
user: "{{agent}}",
|
|
427
414
|
content: {
|
|
428
415
|
text: "Successfully added 15 seconds to your melody."
|
|
429
416
|
}
|
|
@@ -442,7 +429,12 @@ var sunoPlugin = {
|
|
|
442
429
|
providers: [SunoProvider]
|
|
443
430
|
};
|
|
444
431
|
var index_default = sunoPlugin;
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
432
|
+
export {
|
|
433
|
+
customGenerate_default as CustomGenerateMusic,
|
|
434
|
+
extend_default as ExtendAudio,
|
|
435
|
+
generate_default as GenerateMusic,
|
|
436
|
+
SunoProvider,
|
|
437
|
+
index_default as default,
|
|
438
|
+
sunoPlugin
|
|
439
|
+
};
|
|
448
440
|
//# 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"],"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"]}
|
|
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":[]}
|
package/package.json
CHANGED
|
@@ -1,74 +1,36 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
"name": "@elizaos/plugin-suno",
|
|
3
|
+
"version": "1.0.6-alpha.0",
|
|
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
|
+
"devDependencies": {
|
|
18
|
+
"@biomejs/biome": "1.5.3",
|
|
19
|
+
"@types/jest": "^27.0.0",
|
|
20
|
+
"@types/node": "^16.0.0",
|
|
21
|
+
"jest": "^27.0.0",
|
|
22
|
+
"tsup": "^8.3.5",
|
|
23
|
+
"typescript": "^5.0.0"
|
|
24
|
+
},
|
|
25
|
+
"agentConfig": {
|
|
26
|
+
"pluginType": "elizaos:client:1.0.0",
|
|
27
|
+
"pluginParameters": {
|
|
28
|
+
"apiKey": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"description": "Your Suno API key for authentication.",
|
|
32
|
+
"optional": false
|
|
33
|
+
}
|
|
34
|
+
}
|
|
32
35
|
}
|
|
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
|
-
}
|
|
36
|
+
}
|