@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/dist/index.js
CHANGED
|
@@ -1,53 +1,22 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
|
|
19
|
-
// src/index.ts
|
|
20
|
-
var src_exports = {};
|
|
21
|
-
__export(src_exports, {
|
|
22
|
-
CustomGenerateMusic: () => customGenerate_default,
|
|
23
|
-
ExtendAudio: () => extend_default,
|
|
24
|
-
GenerateMusic: () => generate_default,
|
|
25
|
-
SunoProvider: () => SunoProvider,
|
|
26
|
-
default: () => src_default,
|
|
27
|
-
sunoPlugin: () => sunoPlugin
|
|
28
|
-
});
|
|
29
|
-
module.exports = __toCommonJS(src_exports);
|
|
30
|
-
|
|
31
1
|
// src/providers/suno.ts
|
|
32
|
-
var
|
|
2
|
+
var SunoApiClient = class _SunoApiClient {
|
|
3
|
+
apiKey;
|
|
4
|
+
baseUrl;
|
|
33
5
|
static async get(runtime, _message, _state) {
|
|
34
6
|
const apiKey = runtime.getSetting("SUNO_API_KEY");
|
|
35
7
|
if (!apiKey) {
|
|
36
8
|
throw new Error("SUNO_API_KEY is required");
|
|
37
9
|
}
|
|
38
|
-
return new
|
|
10
|
+
return new _SunoApiClient({ apiKey });
|
|
39
11
|
}
|
|
40
12
|
constructor(config) {
|
|
41
13
|
this.apiKey = config.apiKey;
|
|
42
14
|
this.baseUrl = config.baseUrl || "https://api.suno.ai/v1";
|
|
43
15
|
}
|
|
44
|
-
async get(_runtime, _message, _state) {
|
|
45
|
-
return { status: "ready" };
|
|
46
|
-
}
|
|
47
16
|
async request(endpoint, options = {}) {
|
|
48
17
|
const url = `${this.baseUrl}${endpoint}`;
|
|
49
18
|
const headers = {
|
|
50
|
-
|
|
19
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
51
20
|
"Content-Type": "application/json",
|
|
52
21
|
...options.headers
|
|
53
22
|
};
|
|
@@ -61,6 +30,21 @@ var SunoProvider = class _SunoProvider {
|
|
|
61
30
|
return response.json();
|
|
62
31
|
}
|
|
63
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
|
+
};
|
|
64
48
|
|
|
65
49
|
// src/actions/generate.ts
|
|
66
50
|
var generateMusic = {
|
|
@@ -79,7 +63,7 @@ var generateMusic = {
|
|
|
79
63
|
},
|
|
80
64
|
handler: async (runtime, message, state, _options, callback) => {
|
|
81
65
|
try {
|
|
82
|
-
const provider = await
|
|
66
|
+
const provider = await SunoApiClient.get(runtime, message, state);
|
|
83
67
|
const content = message.content;
|
|
84
68
|
if (!content.prompt) {
|
|
85
69
|
throw new Error("Missing required parameter: prompt");
|
|
@@ -105,7 +89,7 @@ var generateMusic = {
|
|
|
105
89
|
} catch (error) {
|
|
106
90
|
if (callback) {
|
|
107
91
|
callback({
|
|
108
|
-
text: `Failed to
|
|
92
|
+
text: `Failed to generate music: ${error.message}`,
|
|
109
93
|
error
|
|
110
94
|
});
|
|
111
95
|
}
|
|
@@ -115,7 +99,7 @@ var generateMusic = {
|
|
|
115
99
|
examples: [
|
|
116
100
|
[
|
|
117
101
|
{
|
|
118
|
-
|
|
102
|
+
name: "user1",
|
|
119
103
|
content: {
|
|
120
104
|
text: "Create a happy and energetic song",
|
|
121
105
|
prompt: "A cheerful and energetic melody with upbeat rhythm",
|
|
@@ -124,14 +108,14 @@ var generateMusic = {
|
|
|
124
108
|
}
|
|
125
109
|
},
|
|
126
110
|
{
|
|
127
|
-
|
|
111
|
+
name: "agent",
|
|
128
112
|
content: {
|
|
129
113
|
text: "I'll generate a happy and energetic song for you.",
|
|
130
114
|
action: "generate-music"
|
|
131
115
|
}
|
|
132
116
|
},
|
|
133
117
|
{
|
|
134
|
-
|
|
118
|
+
name: "agent",
|
|
135
119
|
content: {
|
|
136
120
|
text: "Successfully generated your upbeat and energetic song."
|
|
137
121
|
}
|
|
@@ -139,7 +123,7 @@ var generateMusic = {
|
|
|
139
123
|
],
|
|
140
124
|
[
|
|
141
125
|
{
|
|
142
|
-
|
|
126
|
+
name: "user1",
|
|
143
127
|
content: {
|
|
144
128
|
text: "Generate a relaxing ambient track",
|
|
145
129
|
prompt: "A peaceful ambient soundscape with gentle waves and soft pads",
|
|
@@ -149,14 +133,14 @@ var generateMusic = {
|
|
|
149
133
|
}
|
|
150
134
|
},
|
|
151
135
|
{
|
|
152
|
-
|
|
136
|
+
name: "agent",
|
|
153
137
|
content: {
|
|
154
138
|
text: "I'll create a calming ambient piece for you.",
|
|
155
139
|
action: "generate-music"
|
|
156
140
|
}
|
|
157
141
|
},
|
|
158
142
|
{
|
|
159
|
-
|
|
143
|
+
name: "agent",
|
|
160
144
|
content: {
|
|
161
145
|
text: "Successfully generated your relaxing ambient soundscape."
|
|
162
146
|
}
|
|
@@ -164,7 +148,7 @@ var generateMusic = {
|
|
|
164
148
|
],
|
|
165
149
|
[
|
|
166
150
|
{
|
|
167
|
-
|
|
151
|
+
name: "user1",
|
|
168
152
|
content: {
|
|
169
153
|
text: "Make a short jingle for my podcast",
|
|
170
154
|
prompt: "A catchy and professional podcast intro jingle",
|
|
@@ -174,14 +158,14 @@ var generateMusic = {
|
|
|
174
158
|
}
|
|
175
159
|
},
|
|
176
160
|
{
|
|
177
|
-
|
|
161
|
+
name: "agent",
|
|
178
162
|
content: {
|
|
179
163
|
text: "I'll generate a podcast jingle for you.",
|
|
180
164
|
action: "generate-music"
|
|
181
165
|
}
|
|
182
166
|
},
|
|
183
167
|
{
|
|
184
|
-
|
|
168
|
+
name: "agent",
|
|
185
169
|
content: {
|
|
186
170
|
text: "Successfully generated your podcast jingle."
|
|
187
171
|
}
|
|
@@ -200,16 +184,16 @@ var customGenerateMusic = {
|
|
|
200
184
|
"GENERATE_CUSTOM_AUDIO",
|
|
201
185
|
"MAKE_CUSTOM_MUSIC",
|
|
202
186
|
"COMPOSE_CUSTOM_MUSIC",
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
"
|
|
187
|
+
"CUSTOM_MUSIC_GENERATION",
|
|
188
|
+
"ADVANCED_MUSIC_CREATION",
|
|
189
|
+
"PERSONALIZED_MUSIC_GENERATION"
|
|
206
190
|
],
|
|
207
191
|
validate: async (runtime, _message) => {
|
|
208
192
|
return !!runtime.getSetting("SUNO_API_KEY");
|
|
209
193
|
},
|
|
210
194
|
handler: async (runtime, message, state, _options, callback) => {
|
|
211
195
|
try {
|
|
212
|
-
const provider = await
|
|
196
|
+
const provider = await SunoApiClient.get(runtime, message, state);
|
|
213
197
|
const content = message.content;
|
|
214
198
|
if (!content.prompt) {
|
|
215
199
|
throw new Error("Missing required parameter: prompt");
|
|
@@ -250,7 +234,7 @@ var customGenerateMusic = {
|
|
|
250
234
|
examples: [
|
|
251
235
|
[
|
|
252
236
|
{
|
|
253
|
-
|
|
237
|
+
name: "user1",
|
|
254
238
|
content: {
|
|
255
239
|
text: "Create an upbeat electronic dance track with heavy bass",
|
|
256
240
|
prompt: "An upbeat electronic dance track with heavy bass and energetic synths",
|
|
@@ -260,14 +244,14 @@ var customGenerateMusic = {
|
|
|
260
244
|
}
|
|
261
245
|
},
|
|
262
246
|
{
|
|
263
|
-
|
|
247
|
+
name: "agent",
|
|
264
248
|
content: {
|
|
265
249
|
text: "I'll generate an energetic EDM track for you.",
|
|
266
250
|
action: "custom-generate-music"
|
|
267
251
|
}
|
|
268
252
|
},
|
|
269
253
|
{
|
|
270
|
-
|
|
254
|
+
name: "agent",
|
|
271
255
|
content: {
|
|
272
256
|
text: "Successfully generated your EDM track with heavy bass and synths."
|
|
273
257
|
}
|
|
@@ -275,7 +259,7 @@ var customGenerateMusic = {
|
|
|
275
259
|
],
|
|
276
260
|
[
|
|
277
261
|
{
|
|
278
|
-
|
|
262
|
+
name: "user1",
|
|
279
263
|
content: {
|
|
280
264
|
text: "Generate a calm piano melody in C major",
|
|
281
265
|
prompt: "A gentle, flowing piano melody with soft dynamics",
|
|
@@ -287,14 +271,14 @@ var customGenerateMusic = {
|
|
|
287
271
|
}
|
|
288
272
|
},
|
|
289
273
|
{
|
|
290
|
-
|
|
274
|
+
name: "agent",
|
|
291
275
|
content: {
|
|
292
276
|
text: "I'll create a calming piano piece in C major for you.",
|
|
293
277
|
action: "custom-generate-music"
|
|
294
278
|
}
|
|
295
279
|
},
|
|
296
280
|
{
|
|
297
|
-
|
|
281
|
+
name: "agent",
|
|
298
282
|
content: {
|
|
299
283
|
text: "Successfully generated your peaceful piano melody in C major."
|
|
300
284
|
}
|
|
@@ -302,7 +286,7 @@ var customGenerateMusic = {
|
|
|
302
286
|
],
|
|
303
287
|
[
|
|
304
288
|
{
|
|
305
|
-
|
|
289
|
+
name: "user1",
|
|
306
290
|
content: {
|
|
307
291
|
text: "Make a rock song with guitar solos",
|
|
308
292
|
prompt: "A rock song with powerful electric guitar solos and driving drums",
|
|
@@ -313,14 +297,14 @@ var customGenerateMusic = {
|
|
|
313
297
|
}
|
|
314
298
|
},
|
|
315
299
|
{
|
|
316
|
-
|
|
300
|
+
name: "agent",
|
|
317
301
|
content: {
|
|
318
302
|
text: "I'll generate a rock track with guitar solos for you.",
|
|
319
303
|
action: "custom-generate-music"
|
|
320
304
|
}
|
|
321
305
|
},
|
|
322
306
|
{
|
|
323
|
-
|
|
307
|
+
name: "agent",
|
|
324
308
|
content: {
|
|
325
309
|
text: "Successfully generated your rock song with guitar solos."
|
|
326
310
|
}
|
|
@@ -335,6 +319,7 @@ var extendAudio = {
|
|
|
335
319
|
name: "extend-audio",
|
|
336
320
|
description: "Extend the duration of an existing audio generation",
|
|
337
321
|
similes: [
|
|
322
|
+
"EXTEND_AUDIO",
|
|
338
323
|
"LENGTHEN_AUDIO",
|
|
339
324
|
"PROLONG_AUDIO",
|
|
340
325
|
"INCREASE_DURATION",
|
|
@@ -345,7 +330,7 @@ var extendAudio = {
|
|
|
345
330
|
},
|
|
346
331
|
handler: async (runtime, message, state, _options, callback) => {
|
|
347
332
|
try {
|
|
348
|
-
const provider = await
|
|
333
|
+
const provider = await SunoApiClient.get(runtime, message, state);
|
|
349
334
|
const content = message.content;
|
|
350
335
|
if (!content.audio_id || !content.duration) {
|
|
351
336
|
throw new Error("Missing required parameters: audio_id and duration");
|
|
@@ -377,7 +362,7 @@ var extendAudio = {
|
|
|
377
362
|
examples: [
|
|
378
363
|
[
|
|
379
364
|
{
|
|
380
|
-
|
|
365
|
+
name: "user1",
|
|
381
366
|
content: {
|
|
382
367
|
text: "Make this song longer by 30 seconds",
|
|
383
368
|
audio_id: "abc123",
|
|
@@ -385,14 +370,14 @@ var extendAudio = {
|
|
|
385
370
|
}
|
|
386
371
|
},
|
|
387
372
|
{
|
|
388
|
-
|
|
373
|
+
name: "agent",
|
|
389
374
|
content: {
|
|
390
375
|
text: "I'll extend your song by 30 seconds.",
|
|
391
376
|
action: "extend-audio"
|
|
392
377
|
}
|
|
393
378
|
},
|
|
394
379
|
{
|
|
395
|
-
|
|
380
|
+
name: "agent",
|
|
396
381
|
content: {
|
|
397
382
|
text: "Successfully extended your song by 30 seconds."
|
|
398
383
|
}
|
|
@@ -400,7 +385,7 @@ var extendAudio = {
|
|
|
400
385
|
],
|
|
401
386
|
[
|
|
402
387
|
{
|
|
403
|
-
|
|
388
|
+
name: "user1",
|
|
404
389
|
content: {
|
|
405
390
|
text: "Double the length of this track",
|
|
406
391
|
audio_id: "xyz789",
|
|
@@ -408,14 +393,14 @@ var extendAudio = {
|
|
|
408
393
|
}
|
|
409
394
|
},
|
|
410
395
|
{
|
|
411
|
-
|
|
396
|
+
name: "agent",
|
|
412
397
|
content: {
|
|
413
398
|
text: "I'll double the duration of your track.",
|
|
414
399
|
action: "extend-audio"
|
|
415
400
|
}
|
|
416
401
|
},
|
|
417
402
|
{
|
|
418
|
-
|
|
403
|
+
name: "agent",
|
|
419
404
|
content: {
|
|
420
405
|
text: "Successfully doubled the length of your track to 60 seconds."
|
|
421
406
|
}
|
|
@@ -423,7 +408,7 @@ var extendAudio = {
|
|
|
423
408
|
],
|
|
424
409
|
[
|
|
425
410
|
{
|
|
426
|
-
|
|
411
|
+
name: "user1",
|
|
427
412
|
content: {
|
|
428
413
|
text: "Add 15 more seconds to this melody",
|
|
429
414
|
audio_id: "def456",
|
|
@@ -431,14 +416,14 @@ var extendAudio = {
|
|
|
431
416
|
}
|
|
432
417
|
},
|
|
433
418
|
{
|
|
434
|
-
|
|
419
|
+
name: "agent",
|
|
435
420
|
content: {
|
|
436
421
|
text: "I'll add 15 seconds to your melody.",
|
|
437
422
|
action: "extend-audio"
|
|
438
423
|
}
|
|
439
424
|
},
|
|
440
425
|
{
|
|
441
|
-
|
|
426
|
+
name: "agent",
|
|
442
427
|
content: {
|
|
443
428
|
text: "Successfully added 15 seconds to your melody."
|
|
444
429
|
}
|
|
@@ -456,13 +441,8 @@ var sunoPlugin = {
|
|
|
456
441
|
evaluators: [],
|
|
457
442
|
providers: [SunoProvider]
|
|
458
443
|
};
|
|
459
|
-
var
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
ExtendAudio,
|
|
464
|
-
GenerateMusic,
|
|
465
|
-
SunoProvider,
|
|
466
|
-
sunoPlugin
|
|
467
|
-
});
|
|
444
|
+
var index_default = sunoPlugin;
|
|
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
|
|
468
448
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/providers/suno.ts","../src/actions/generate.ts","../src/actions/customGenerate.ts","../src/actions/extend.ts"],"sourcesContent":["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;","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;"],"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,25 +1,74 @@
|
|
|
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
|
-
|
|
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
|
+
}
|
package/.turbo/turbo-build.log
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
> @elizaos/plugin-suno@0.1.9 build /Users/Shakker/WorkSpace/ShakkerNerd/ai16z/eliza/packages/plugin-suno
|
|
4
|
-
> tsup
|
|
5
|
-
|
|
6
|
-
[34mCLI[39m Building entry: src/index.ts
|
|
7
|
-
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
8
|
-
[34mCLI[39m tsup v7.3.0
|
|
9
|
-
[34mCLI[39m Using tsup config: /Users/Shakker/WorkSpace/ShakkerNerd/ai16z/eliza/packages/plugin-suno/tsup.config.ts
|
|
10
|
-
[34mCLI[39m Target: es2020
|
|
11
|
-
[34mCLI[39m Cleaning output folder
|
|
12
|
-
[34mCJS[39m Build start
|
|
13
|
-
[34mESM[39m Build start
|
|
14
|
-
[32mCJS[39m [1mdist/index.js [22m[32m12.09 KB[39m
|
|
15
|
-
[32mCJS[39m [1mdist/index.js.map [22m[32m24.46 KB[39m
|
|
16
|
-
[32mCJS[39m ⚡️ Build success in 17ms
|
|
17
|
-
[32mESM[39m [1mdist/index.mjs [22m[32m11.00 KB[39m
|
|
18
|
-
[32mESM[39m [1mdist/index.mjs.map [22m[32m24.40 KB[39m
|
|
19
|
-
[32mESM[39m ⚡️ Build success in 18ms
|
|
20
|
-
[34mDTS[39m Build start
|
|
21
|
-
[32mDTS[39m ⚡️ Build success in 1587ms
|
|
22
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m878.00 B[39m
|
|
23
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[32m878.00 B[39m
|