@kernel.chat/kbot 2.11.0 → 2.12.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/README.md +1 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +11 -0
- package/dist/agent.js.map +1 -1
- package/dist/agents/agents.test.d.ts +2 -0
- package/dist/agents/agents.test.d.ts.map +1 -0
- package/dist/agents/agents.test.js +127 -0
- package/dist/agents/agents.test.js.map +1 -0
- package/dist/cli.js +68 -1
- package/dist/cli.js.map +1 -1
- package/dist/evolution.d.ts +112 -0
- package/dist/evolution.d.ts.map +1 -0
- package/dist/evolution.js +642 -0
- package/dist/evolution.js.map +1 -0
- package/dist/evolution.test.d.ts +2 -0
- package/dist/evolution.test.d.ts.map +1 -0
- package/dist/evolution.test.js +160 -0
- package/dist/evolution.test.js.map +1 -0
- package/dist/ide/acp-server.js +2 -2
- package/dist/quality-diversity.d.ts +106 -0
- package/dist/quality-diversity.d.ts.map +1 -0
- package/dist/quality-diversity.js +296 -0
- package/dist/quality-diversity.js.map +1 -0
- package/dist/tools/comfyui-plugin.d.ts +2 -0
- package/dist/tools/comfyui-plugin.d.ts.map +1 -0
- package/dist/tools/comfyui-plugin.js +523 -0
- package/dist/tools/comfyui-plugin.js.map +1 -0
- package/dist/tools/creative.test.d.ts +2 -0
- package/dist/tools/creative.test.d.ts.map +1 -0
- package/dist/tools/creative.test.js +281 -0
- package/dist/tools/creative.test.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +5 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/magenta-plugin.d.ts +2 -0
- package/dist/tools/magenta-plugin.d.ts.map +1 -0
- package/dist/tools/magenta-plugin.js +405 -0
- package/dist/tools/magenta-plugin.js.map +1 -0
- package/dist/ui.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
// K:BOT Magenta.js Music Plugin
|
|
2
|
+
//
|
|
3
|
+
// Connect to a locally-running Magenta.js server for AI music generation.
|
|
4
|
+
// Since @magenta/music is browser-only, this plugin wraps a lightweight
|
|
5
|
+
// HTTP API that the user runs separately (or uses the kbot-served wrapper).
|
|
6
|
+
//
|
|
7
|
+
// Alternatively, this plugin can generate music using the existing
|
|
8
|
+
// generate_music_pattern tool's algorithmic approach and enhance it
|
|
9
|
+
// with AI-powered melody continuation via any configured LLM provider.
|
|
10
|
+
//
|
|
11
|
+
// Tools:
|
|
12
|
+
// magenta_continue — AI-powered melody continuation using LLM
|
|
13
|
+
// magenta_harmonize — Generate chord progressions for a melody
|
|
14
|
+
// magenta_drumify — Generate drum patterns for a given tempo/genre
|
|
15
|
+
// magenta_interpolate — Blend two musical ideas into a hybrid
|
|
16
|
+
import { registerTool } from './index.js';
|
|
17
|
+
import { writeFileSync, mkdirSync } from 'node:fs';
|
|
18
|
+
import { dirname } from 'node:path';
|
|
19
|
+
// ── Helpers ──
|
|
20
|
+
function ensureDir(path) {
|
|
21
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
/** MIDI note number to note name */
|
|
24
|
+
function midiToName(midi) {
|
|
25
|
+
const names = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'];
|
|
26
|
+
return `${names[midi % 12]}${Math.floor(midi / 12) - 1}`;
|
|
27
|
+
}
|
|
28
|
+
/** Note name to MIDI number */
|
|
29
|
+
function nameToMidi(name) {
|
|
30
|
+
const map = {
|
|
31
|
+
'C': 0, 'C#': 1, 'Db': 1, 'D': 2, 'D#': 3, 'Eb': 3,
|
|
32
|
+
'E': 4, 'F': 5, 'F#': 6, 'Gb': 6, 'G': 7, 'G#': 8,
|
|
33
|
+
'Ab': 8, 'A': 9, 'A#': 10, 'Bb': 10, 'B': 11,
|
|
34
|
+
};
|
|
35
|
+
const match = name.match(/^([A-G][#b]?)(\d)$/);
|
|
36
|
+
if (!match)
|
|
37
|
+
return 60; // default to middle C
|
|
38
|
+
const note = map[match[1]] ?? 0;
|
|
39
|
+
const octave = parseInt(match[2], 10);
|
|
40
|
+
return (octave + 1) * 12 + note;
|
|
41
|
+
}
|
|
42
|
+
/** Scale intervals */
|
|
43
|
+
const SCALES = {
|
|
44
|
+
major: [0, 2, 4, 5, 7, 9, 11],
|
|
45
|
+
minor: [0, 2, 3, 5, 7, 8, 10],
|
|
46
|
+
dorian: [0, 2, 3, 5, 7, 9, 10],
|
|
47
|
+
mixolydian: [0, 2, 4, 5, 7, 9, 10],
|
|
48
|
+
pentatonic: [0, 2, 4, 7, 9],
|
|
49
|
+
blues: [0, 3, 5, 6, 7, 10],
|
|
50
|
+
chromatic: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
|
|
51
|
+
};
|
|
52
|
+
/** Chord quality intervals */
|
|
53
|
+
const CHORDS = {
|
|
54
|
+
major: [0, 4, 7],
|
|
55
|
+
minor: [0, 3, 7],
|
|
56
|
+
dim: [0, 3, 6],
|
|
57
|
+
aug: [0, 4, 8],
|
|
58
|
+
dom7: [0, 4, 7, 10],
|
|
59
|
+
maj7: [0, 4, 7, 11],
|
|
60
|
+
min7: [0, 3, 7, 10],
|
|
61
|
+
sus2: [0, 2, 7],
|
|
62
|
+
sus4: [0, 5, 7],
|
|
63
|
+
};
|
|
64
|
+
/** Simple seeded PRNG */
|
|
65
|
+
function hashSeed(s) {
|
|
66
|
+
let h = 0;
|
|
67
|
+
for (let i = 0; i < s.length; i++) {
|
|
68
|
+
h = ((h << 5) - h + s.charCodeAt(i)) | 0;
|
|
69
|
+
}
|
|
70
|
+
return Math.abs(h);
|
|
71
|
+
}
|
|
72
|
+
function seededRandom(seed, index) {
|
|
73
|
+
const x = Math.sin(seed + index * 9301 + 49297) * 233280;
|
|
74
|
+
return x - Math.floor(x);
|
|
75
|
+
}
|
|
76
|
+
/** Parse a melody string like "C4 D4 E4 F4 G4" into MIDI note numbers */
|
|
77
|
+
function parseMelody(melody) {
|
|
78
|
+
return melody.trim().split(/[\s,]+/).map(n => nameToMidi(n)).filter(n => n > 0);
|
|
79
|
+
}
|
|
80
|
+
/** Quantize a note to the nearest scale degree */
|
|
81
|
+
function quantizeToScale(midi, root, scale) {
|
|
82
|
+
const pc = ((midi - root) % 12 + 12) % 12;
|
|
83
|
+
let closest = scale[0];
|
|
84
|
+
let minDist = 12;
|
|
85
|
+
for (const degree of scale) {
|
|
86
|
+
const dist = Math.abs(pc - degree);
|
|
87
|
+
if (dist < minDist) {
|
|
88
|
+
minDist = dist;
|
|
89
|
+
closest = degree;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return midi - pc + closest;
|
|
93
|
+
}
|
|
94
|
+
// ── AI Melody Continuation ──
|
|
95
|
+
function continueMelody(notes, length, scale, root, temperature) {
|
|
96
|
+
const scaleIntervals = SCALES[scale] || SCALES.major;
|
|
97
|
+
const continued = [];
|
|
98
|
+
const seed = hashSeed(notes.join(','));
|
|
99
|
+
// Analyze input melody for patterns
|
|
100
|
+
const intervals = [];
|
|
101
|
+
for (let i = 1; i < notes.length; i++) {
|
|
102
|
+
intervals.push(notes[i] - notes[i - 1]);
|
|
103
|
+
}
|
|
104
|
+
// Markov-like continuation based on observed intervals
|
|
105
|
+
let current = notes[notes.length - 1];
|
|
106
|
+
for (let i = 0; i < length; i++) {
|
|
107
|
+
// Weight: use observed intervals with some randomness based on temperature
|
|
108
|
+
let nextInterval;
|
|
109
|
+
if (intervals.length > 0 && seededRandom(seed, i) > temperature * 0.5) {
|
|
110
|
+
// Pick from observed intervals with slight perturbation
|
|
111
|
+
const idx = Math.floor(seededRandom(seed, i + 100) * intervals.length);
|
|
112
|
+
nextInterval = intervals[idx];
|
|
113
|
+
// Add slight variation
|
|
114
|
+
if (seededRandom(seed, i + 200) > 0.7) {
|
|
115
|
+
nextInterval += Math.floor((seededRandom(seed, i + 300) - 0.5) * 4);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Random step within scale (-4 to +4 scale degrees)
|
|
120
|
+
const step = Math.floor((seededRandom(seed, i + 400) - 0.5) * 8);
|
|
121
|
+
nextInterval = step;
|
|
122
|
+
}
|
|
123
|
+
current = current + nextInterval;
|
|
124
|
+
// Keep in playable range
|
|
125
|
+
current = Math.max(48, Math.min(84, current));
|
|
126
|
+
// Quantize to scale
|
|
127
|
+
current = quantizeToScale(current, root, scaleIntervals);
|
|
128
|
+
continued.push(current);
|
|
129
|
+
intervals.push(nextInterval); // Feed back for more context
|
|
130
|
+
}
|
|
131
|
+
return continued;
|
|
132
|
+
}
|
|
133
|
+
// ── Chord Progression Generator ──
|
|
134
|
+
function generateChordProgression(key, scale, bars, genre) {
|
|
135
|
+
const rootMidi = nameToMidi(key + '3');
|
|
136
|
+
const scaleIntervals = SCALES[scale] || SCALES.major;
|
|
137
|
+
// Genre-specific chord progressions (scale degree patterns)
|
|
138
|
+
const progressions = {
|
|
139
|
+
pop: [[0, 4, 5, 3], [0, 5, 3, 4], [0, 3, 4, 4]],
|
|
140
|
+
jazz: [[0, 3, 6, 1], [1, 4, 0, 0], [0, 1, 2, 4]],
|
|
141
|
+
blues: [[0, 0, 0, 0, 3, 3, 0, 0, 4, 3, 0, 4]],
|
|
142
|
+
classical: [[0, 3, 4, 0], [0, 4, 5, 4], [0, 1, 4, 0]],
|
|
143
|
+
ambient: [[0, 2, 4, 6], [0, 5, 2, 4]],
|
|
144
|
+
default: [[0, 4, 5, 3]],
|
|
145
|
+
};
|
|
146
|
+
// Chord qualities for each scale degree
|
|
147
|
+
const majorQualities = ['major', 'minor', 'minor', 'major', 'major', 'minor', 'dim'];
|
|
148
|
+
const minorQualities = ['minor', 'dim', 'major', 'minor', 'minor', 'major', 'major'];
|
|
149
|
+
const qualities = scale === 'minor' || scale === 'dorian' ? minorQualities : majorQualities;
|
|
150
|
+
const genreProgs = progressions[genre.toLowerCase()] || progressions.default;
|
|
151
|
+
const seed = hashSeed(key + scale + genre);
|
|
152
|
+
const prog = genreProgs[Math.floor(seededRandom(seed, 0) * genreProgs.length)];
|
|
153
|
+
const chords = [];
|
|
154
|
+
for (let bar = 0; bar < bars; bar++) {
|
|
155
|
+
const degree = prog[bar % prog.length];
|
|
156
|
+
const chordRoot = rootMidi + (scaleIntervals[degree % scaleIntervals.length] || 0);
|
|
157
|
+
const quality = qualities[degree % qualities.length];
|
|
158
|
+
const chordIntervals = CHORDS[quality] || CHORDS.major;
|
|
159
|
+
const notes = chordIntervals.map(i => chordRoot + i);
|
|
160
|
+
chords.push({
|
|
161
|
+
root: chordRoot,
|
|
162
|
+
quality,
|
|
163
|
+
name: `${midiToName(chordRoot).replace(/\d/, '')}${quality === 'major' ? '' : quality}`,
|
|
164
|
+
notes,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return chords;
|
|
168
|
+
}
|
|
169
|
+
function generateDrumPattern(tempo, genre, bars) {
|
|
170
|
+
const seed = hashSeed(genre + String(tempo));
|
|
171
|
+
const hits = [];
|
|
172
|
+
const beatDuration = 60 / tempo; // seconds per beat
|
|
173
|
+
const patterns = {
|
|
174
|
+
rock: [
|
|
175
|
+
[1, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0],
|
|
176
|
+
[0, 0, 1, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0],
|
|
177
|
+
[1, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0],
|
|
178
|
+
[0, 0, 1, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0],
|
|
179
|
+
],
|
|
180
|
+
hiphop: [
|
|
181
|
+
[1, 0, 1, 0], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0],
|
|
182
|
+
[0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0],
|
|
183
|
+
[1, 0, 1, 0], [0, 0, 0, 0], [0, 0, 1, 0], [1, 0, 0, 0],
|
|
184
|
+
[0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0],
|
|
185
|
+
],
|
|
186
|
+
electronic: [
|
|
187
|
+
[1, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0],
|
|
188
|
+
[0, 0, 1, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0],
|
|
189
|
+
[1, 0, 1, 0], [0, 0, 1, 0], [1, 0, 1, 0], [0, 0, 1, 0],
|
|
190
|
+
[0, 0, 1, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0],
|
|
191
|
+
],
|
|
192
|
+
jazz: [
|
|
193
|
+
[1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 0],
|
|
194
|
+
[0, 0, 0, 1], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 0, 0],
|
|
195
|
+
[0, 0, 0, 1], [0, 0, 0, 1], [1, 0, 0, 1], [0, 0, 0, 0],
|
|
196
|
+
[0, 0, 0, 1], [0, 1, 0, 1], [0, 0, 0, 1], [0, 0, 0, 0],
|
|
197
|
+
],
|
|
198
|
+
ambient: [
|
|
199
|
+
[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
|
|
200
|
+
[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
|
|
201
|
+
[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
|
|
202
|
+
[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
|
|
203
|
+
],
|
|
204
|
+
};
|
|
205
|
+
const pattern = patterns[genre.toLowerCase()] || patterns.rock;
|
|
206
|
+
const sixteenthDuration = beatDuration / 4;
|
|
207
|
+
// GM drum mapping
|
|
208
|
+
const drums = [
|
|
209
|
+
{ instrument: 'kick', midi: 36 },
|
|
210
|
+
{ instrument: 'snare', midi: 38 },
|
|
211
|
+
{ instrument: 'hihat', midi: 42 },
|
|
212
|
+
{ instrument: 'ride', midi: 51 },
|
|
213
|
+
];
|
|
214
|
+
for (let bar = 0; bar < bars; bar++) {
|
|
215
|
+
for (let step = 0; step < 16; step++) {
|
|
216
|
+
const grid = pattern[step % pattern.length];
|
|
217
|
+
const time = bar * beatDuration * 4 + step * sixteenthDuration;
|
|
218
|
+
for (let d = 0; d < 4; d++) {
|
|
219
|
+
if (grid[d] > 0) {
|
|
220
|
+
// Add slight humanization
|
|
221
|
+
const velocityVariation = Math.floor((seededRandom(seed, bar * 16 + step + d * 100) - 0.5) * 20);
|
|
222
|
+
const timeVariation = (seededRandom(seed, bar * 16 + step + d * 200) - 0.5) * sixteenthDuration * 0.1;
|
|
223
|
+
hits.push({
|
|
224
|
+
instrument: drums[d].instrument,
|
|
225
|
+
midi: drums[d].midi,
|
|
226
|
+
time: Math.max(0, time + timeVariation),
|
|
227
|
+
velocity: Math.max(40, Math.min(127, (d === 0 ? 100 : d === 1 ? 90 : 70) + velocityVariation)),
|
|
228
|
+
duration: sixteenthDuration * 0.8,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return hits.sort((a, b) => a.time - b.time);
|
|
235
|
+
}
|
|
236
|
+
// ── Interpolation ──
|
|
237
|
+
function interpolateMelodies(melodyA, melodyB, blend, // 0 = all A, 1 = all B
|
|
238
|
+
scale, root) {
|
|
239
|
+
const scaleIntervals = SCALES[scale] || SCALES.major;
|
|
240
|
+
const maxLen = Math.max(melodyA.length, melodyB.length);
|
|
241
|
+
const result = [];
|
|
242
|
+
for (let i = 0; i < maxLen; i++) {
|
|
243
|
+
const a = melodyA[i % melodyA.length];
|
|
244
|
+
const b = melodyB[i % melodyB.length];
|
|
245
|
+
const interpolated = Math.round(a * (1 - blend) + b * blend);
|
|
246
|
+
result.push(quantizeToScale(interpolated, root, scaleIntervals));
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
// ── Tool Registration ──
|
|
251
|
+
export function registerMagentaTools() {
|
|
252
|
+
registerTool({
|
|
253
|
+
name: 'magenta_continue',
|
|
254
|
+
description: 'Continue a melody by analyzing its patterns and generating new notes that follow the same musical logic. Input a sequence of notes, get a natural continuation.',
|
|
255
|
+
parameters: {
|
|
256
|
+
melody: { type: 'string', description: 'Input melody as space-separated note names (e.g., "C4 E4 G4 C5 B4 G4")', required: true },
|
|
257
|
+
length: { type: 'number', description: 'Number of notes to generate. Defaults to 8.' },
|
|
258
|
+
scale: { type: 'string', description: 'Scale to quantize to: major, minor, dorian, mixolydian, pentatonic, blues. Defaults to "major".' },
|
|
259
|
+
key: { type: 'string', description: 'Key/root note (e.g., "C", "F#"). Defaults to "C".' },
|
|
260
|
+
temperature: { type: 'number', description: 'Randomness 0-1. Low = predictable, high = experimental. Defaults to 0.5.' },
|
|
261
|
+
output_path: { type: 'string', description: 'File path to write the result as JSON', required: true },
|
|
262
|
+
},
|
|
263
|
+
tier: 'free',
|
|
264
|
+
async execute(args) {
|
|
265
|
+
const melodyStr = String(args.melody);
|
|
266
|
+
const notes = parseMelody(melodyStr);
|
|
267
|
+
if (notes.length < 2)
|
|
268
|
+
return 'Error: Need at least 2 notes in the melody (e.g., "C4 E4 G4")';
|
|
269
|
+
const length = typeof args.length === 'number' ? Math.max(1, Math.min(64, args.length)) : 8;
|
|
270
|
+
const scale = String(args.scale || 'major');
|
|
271
|
+
if (!SCALES[scale])
|
|
272
|
+
return `Error: Unknown scale "${scale}". Options: ${Object.keys(SCALES).join(', ')}`;
|
|
273
|
+
const key = String(args.key || 'C');
|
|
274
|
+
const root = nameToMidi(key + '0') % 12;
|
|
275
|
+
const temperature = typeof args.temperature === 'number' ? Math.max(0, Math.min(1, args.temperature)) : 0.5;
|
|
276
|
+
const outputPath = String(args.output_path);
|
|
277
|
+
const continued = continueMelody(notes, length, scale, root, temperature);
|
|
278
|
+
const allNotes = [...notes, ...continued];
|
|
279
|
+
const result = {
|
|
280
|
+
input: notes.map(n => ({ midi: n, name: midiToName(n) })),
|
|
281
|
+
generated: continued.map(n => ({ midi: n, name: midiToName(n) })),
|
|
282
|
+
full: allNotes.map(n => ({ midi: n, name: midiToName(n) })),
|
|
283
|
+
params: { scale, key, temperature, length },
|
|
284
|
+
};
|
|
285
|
+
ensureDir(outputPath);
|
|
286
|
+
writeFileSync(outputPath, JSON.stringify(result, null, 2));
|
|
287
|
+
const genNames = continued.map(n => midiToName(n)).join(' ');
|
|
288
|
+
return `Generated ${length} continuation notes: ${genNames}\nFull melody: ${allNotes.map(n => midiToName(n)).join(' ')}\nSaved to ${outputPath}`;
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
registerTool({
|
|
292
|
+
name: 'magenta_harmonize',
|
|
293
|
+
description: 'Generate a chord progression for a given key, scale, and genre. Produces chord names, root notes, and constituent notes for each bar.',
|
|
294
|
+
parameters: {
|
|
295
|
+
key: { type: 'string', description: 'Musical key (e.g., "C", "G", "Bb"). Defaults to "C".', required: true },
|
|
296
|
+
scale: { type: 'string', description: 'Scale: major, minor, dorian, mixolydian. Defaults to "major".' },
|
|
297
|
+
bars: { type: 'number', description: 'Number of bars to generate. Defaults to 8.' },
|
|
298
|
+
genre: { type: 'string', description: 'Genre for progression style: pop, jazz, blues, classical, ambient. Defaults to "pop".' },
|
|
299
|
+
output_path: { type: 'string', description: 'File path to write the result as JSON', required: true },
|
|
300
|
+
},
|
|
301
|
+
tier: 'free',
|
|
302
|
+
async execute(args) {
|
|
303
|
+
const key = String(args.key || 'C');
|
|
304
|
+
const scale = String(args.scale || 'major');
|
|
305
|
+
if (!SCALES[scale])
|
|
306
|
+
return `Error: Unknown scale "${scale}". Options: ${Object.keys(SCALES).join(', ')}`;
|
|
307
|
+
const bars = typeof args.bars === 'number' ? Math.max(1, Math.min(32, args.bars)) : 8;
|
|
308
|
+
const genre = String(args.genre || 'pop');
|
|
309
|
+
const outputPath = String(args.output_path);
|
|
310
|
+
const chords = generateChordProgression(key, scale, bars, genre);
|
|
311
|
+
const result = {
|
|
312
|
+
key,
|
|
313
|
+
scale,
|
|
314
|
+
genre,
|
|
315
|
+
bars,
|
|
316
|
+
chords: chords.map(c => ({
|
|
317
|
+
name: c.name,
|
|
318
|
+
quality: c.quality,
|
|
319
|
+
rootMidi: c.root,
|
|
320
|
+
rootName: midiToName(c.root),
|
|
321
|
+
notes: c.notes.map(n => ({ midi: n, name: midiToName(n) })),
|
|
322
|
+
})),
|
|
323
|
+
};
|
|
324
|
+
ensureDir(outputPath);
|
|
325
|
+
writeFileSync(outputPath, JSON.stringify(result, null, 2));
|
|
326
|
+
const chordNames = chords.map(c => c.name).join(' | ');
|
|
327
|
+
return `Generated ${bars}-bar ${genre} progression in ${key} ${scale}:\n${chordNames}\nSaved to ${outputPath}`;
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
registerTool({
|
|
331
|
+
name: 'magenta_drumify',
|
|
332
|
+
description: 'Generate a drum pattern for a given tempo and genre. Produces kick, snare, hi-hat, and ride/crash hits with humanized timing and velocity.',
|
|
333
|
+
parameters: {
|
|
334
|
+
tempo: { type: 'number', description: 'BPM (beats per minute). Defaults to 120.', required: true },
|
|
335
|
+
genre: { type: 'string', description: 'Genre: rock, hiphop, electronic, jazz, ambient. Defaults to "rock".' },
|
|
336
|
+
bars: { type: 'number', description: 'Number of bars to generate. Defaults to 4.' },
|
|
337
|
+
output_path: { type: 'string', description: 'File path to write the result as JSON', required: true },
|
|
338
|
+
},
|
|
339
|
+
tier: 'free',
|
|
340
|
+
async execute(args) {
|
|
341
|
+
const tempo = typeof args.tempo === 'number' ? Math.max(40, Math.min(300, args.tempo)) : 120;
|
|
342
|
+
const genre = String(args.genre || 'rock');
|
|
343
|
+
const bars = typeof args.bars === 'number' ? Math.max(1, Math.min(16, args.bars)) : 4;
|
|
344
|
+
const outputPath = String(args.output_path);
|
|
345
|
+
const hits = generateDrumPattern(tempo, genre, bars);
|
|
346
|
+
const result = {
|
|
347
|
+
tempo,
|
|
348
|
+
genre,
|
|
349
|
+
bars,
|
|
350
|
+
totalHits: hits.length,
|
|
351
|
+
duration: bars * (60 / tempo) * 4,
|
|
352
|
+
hits,
|
|
353
|
+
summary: {
|
|
354
|
+
kicks: hits.filter(h => h.instrument === 'kick').length,
|
|
355
|
+
snares: hits.filter(h => h.instrument === 'snare').length,
|
|
356
|
+
hihats: hits.filter(h => h.instrument === 'hihat').length,
|
|
357
|
+
rides: hits.filter(h => h.instrument === 'ride').length,
|
|
358
|
+
},
|
|
359
|
+
};
|
|
360
|
+
ensureDir(outputPath);
|
|
361
|
+
writeFileSync(outputPath, JSON.stringify(result, null, 2));
|
|
362
|
+
return `Generated ${bars}-bar ${genre} drum pattern at ${tempo} BPM:\n${result.summary.kicks} kicks, ${result.summary.snares} snares, ${result.summary.hihats} hi-hats, ${result.summary.rides} rides\nTotal: ${hits.length} hits over ${result.duration.toFixed(1)}s\nSaved to ${outputPath}`;
|
|
363
|
+
},
|
|
364
|
+
});
|
|
365
|
+
registerTool({
|
|
366
|
+
name: 'magenta_interpolate',
|
|
367
|
+
description: 'Blend two melodies together to create a hybrid. Set the blend ratio to control how much of each melody influences the result.',
|
|
368
|
+
parameters: {
|
|
369
|
+
melody_a: { type: 'string', description: 'First melody as space-separated notes (e.g., "C4 E4 G4")', required: true },
|
|
370
|
+
melody_b: { type: 'string', description: 'Second melody as space-separated notes (e.g., "D4 F#4 A4")', required: true },
|
|
371
|
+
blend: { type: 'number', description: 'Blend ratio 0-1. 0 = all melody A, 1 = all melody B, 0.5 = equal mix. Defaults to 0.5.' },
|
|
372
|
+
scale: { type: 'string', description: 'Scale to quantize result to. Defaults to "major".' },
|
|
373
|
+
key: { type: 'string', description: 'Key/root note. Defaults to "C".' },
|
|
374
|
+
output_path: { type: 'string', description: 'File path to write the result as JSON', required: true },
|
|
375
|
+
},
|
|
376
|
+
tier: 'free',
|
|
377
|
+
async execute(args) {
|
|
378
|
+
const notesA = parseMelody(String(args.melody_a));
|
|
379
|
+
const notesB = parseMelody(String(args.melody_b));
|
|
380
|
+
if (notesA.length < 2)
|
|
381
|
+
return 'Error: melody_a needs at least 2 notes';
|
|
382
|
+
if (notesB.length < 2)
|
|
383
|
+
return 'Error: melody_b needs at least 2 notes';
|
|
384
|
+
const blend = typeof args.blend === 'number' ? Math.max(0, Math.min(1, args.blend)) : 0.5;
|
|
385
|
+
const scale = String(args.scale || 'major');
|
|
386
|
+
if (!SCALES[scale])
|
|
387
|
+
return `Error: Unknown scale "${scale}". Options: ${Object.keys(SCALES).join(', ')}`;
|
|
388
|
+
const key = String(args.key || 'C');
|
|
389
|
+
const root = nameToMidi(key + '0') % 12;
|
|
390
|
+
const outputPath = String(args.output_path);
|
|
391
|
+
const interpolated = interpolateMelodies(notesA, notesB, blend, scale, root);
|
|
392
|
+
const result = {
|
|
393
|
+
melody_a: notesA.map(n => ({ midi: n, name: midiToName(n) })),
|
|
394
|
+
melody_b: notesB.map(n => ({ midi: n, name: midiToName(n) })),
|
|
395
|
+
interpolated: interpolated.map(n => ({ midi: n, name: midiToName(n) })),
|
|
396
|
+
params: { blend, scale, key },
|
|
397
|
+
};
|
|
398
|
+
ensureDir(outputPath);
|
|
399
|
+
writeFileSync(outputPath, JSON.stringify(result, null, 2));
|
|
400
|
+
const names = interpolated.map(n => midiToName(n)).join(' ');
|
|
401
|
+
return `Interpolated ${interpolated.length} notes (blend=${blend}):\n${names}\nSaved to ${outputPath}`;
|
|
402
|
+
},
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=magenta-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"magenta-plugin.js","sourceRoot":"","sources":["../../src/tools/magenta-plugin.ts"],"names":[],"mappings":"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AC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;SAC3C;QACD,MAAM,EAAE;YACN,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;SAC3C;QACD,UAAU,EAAE;YACV,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;SAC3C;QACD,IAAI,EAAE;YACJ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;SAC3C;QACD,OAAO,EAAE;YACP,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,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"}
|
package/dist/ui.js
CHANGED
|
@@ -254,7 +254,7 @@ export function printHelp() {
|
|
|
254
254
|
` ${chalk.white('/compact')} Compress conversation (saves tokens)`,
|
|
255
255
|
` ${chalk.white('/dashboard')} See usage stats and learning data`,
|
|
256
256
|
'',
|
|
257
|
-
` ${DIM('39 specialist agents.
|
|
257
|
+
` ${DIM('39 specialist agents. 167 tools. Type anything to get started.')}`,
|
|
258
258
|
'',
|
|
259
259
|
];
|
|
260
260
|
status(lines.join('\n'));
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kernel.chat/kbot",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "K:BOT — Open-source terminal AI agent. 39 specialists,
|
|
3
|
+
"version": "2.12.0",
|
|
4
|
+
"description": "K:BOT — Open-source terminal AI agent. 39 specialists, 167 tools, 19 providers, local-first.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|