@map-audio/pam-mcp-server 1.12.0 → 1.21.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 +21 -3
- package/dist/bridge.d.ts +17 -3
- package/dist/bridge.js +81 -20
- package/dist/bridge.js.map +1 -1
- package/dist/drumSynth.d.ts +96 -0
- package/dist/drumSynth.js +193 -0
- package/dist/drumSynth.js.map +1 -0
- package/dist/drumSynthEngines.json +1360 -0
- package/dist/fgemma-format.d.ts +119 -0
- package/dist/fgemma-format.js +292 -0
- package/dist/fgemma-format.js.map +1 -0
- package/dist/fgemma-runner.d.ts +27 -0
- package/dist/fgemma-runner.js +475 -0
- package/dist/fgemma-runner.js.map +1 -0
- package/dist/generated/variationSnapshot.d.ts +31 -0
- package/dist/generated/variationSnapshot.js +62 -0
- package/dist/generated/variationSnapshot.js.map +1 -0
- package/dist/manifest-cell1.json +8245 -0
- package/dist/manifest-mfx.json +14060 -0
- package/dist/manifest.d.ts +14 -1
- package/dist/manifest.js +133 -34
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.json +2322 -157
- package/dist/mixAssist.d.ts +155 -0
- package/dist/mixAssist.js +652 -0
- package/dist/mixAssist.js.map +1 -0
- package/dist/presetSave.d.ts +10 -0
- package/dist/presetSave.js +22 -0
- package/dist/presetSave.js.map +1 -0
- package/dist/server.js +2667 -236
- package/dist/server.js.map +1 -1
- package/dist/variationSessionKeys.json +110 -0
- package/package.json +8 -3
package/dist/manifest.d.ts
CHANGED
|
@@ -23,12 +23,25 @@ export interface Manifest {
|
|
|
23
23
|
bundleId: string;
|
|
24
24
|
pluginCode: string;
|
|
25
25
|
parameters: ManifestParameter[];
|
|
26
|
+
/** Non-automatable state (effect enables, sequence lanes, router vars). */
|
|
27
|
+
stateVariables?: ManifestParameter[];
|
|
26
28
|
window: {
|
|
27
29
|
width: number;
|
|
28
30
|
height: number;
|
|
29
31
|
};
|
|
30
32
|
}
|
|
31
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Cell effect names for THIS product, derived from the manifest's
|
|
35
|
+
* `cell1_<name>Enabled` keys.
|
|
36
|
+
*
|
|
37
|
+
* Hardcoding the list is what let three catalogs drift apart: the overview
|
|
38
|
+
* listed 8 effects, the mutation schema 12, and neither knew about `limiter`,
|
|
39
|
+
* `qverb`, or MFX's `wavefold`/`resonator`. The manifest is the artifact both
|
|
40
|
+
* the UI and C++ already agree on, so it is the projection source.
|
|
41
|
+
*/
|
|
42
|
+
export declare function cellEffectNames(manifest: Manifest): string[];
|
|
43
|
+
export declare function setActiveProductHint(product: string | undefined): void;
|
|
44
|
+
export declare function loadManifest(productOverride?: string): Promise<Manifest>;
|
|
32
45
|
export declare function getParameterIndex(): Promise<Map<string, ManifestParameter>>;
|
|
33
46
|
export declare function getParametersByCell(cellId: string): Promise<ManifestParameter[]>;
|
|
34
47
|
export declare function getGlobalParameters(): Promise<ManifestParameter[]>;
|
package/dist/manifest.js
CHANGED
|
@@ -2,8 +2,38 @@ import { readFile, readdir, stat } from "node:fs/promises";
|
|
|
2
2
|
import { resolve, dirname, join, basename, extname, sep } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/** Sync toggles share the `…Enabled` suffix but are not effects. */
|
|
6
|
+
const NON_EFFECT_ENABLED = /^(delay|flanger|gate|retrigger|stretch)Sync$/;
|
|
7
|
+
/**
|
|
8
|
+
* Cell effect names for THIS product, derived from the manifest's
|
|
9
|
+
* `cell1_<name>Enabled` keys.
|
|
10
|
+
*
|
|
11
|
+
* Hardcoding the list is what let three catalogs drift apart: the overview
|
|
12
|
+
* listed 8 effects, the mutation schema 12, and neither knew about `limiter`,
|
|
13
|
+
* `qverb`, or MFX's `wavefold`/`resonator`. The manifest is the artifact both
|
|
14
|
+
* the UI and C++ already agree on, so it is the projection source.
|
|
15
|
+
*/
|
|
16
|
+
export function cellEffectNames(manifest) {
|
|
17
|
+
const all = [...(manifest.parameters ?? []), ...(manifest.stateVariables ?? [])];
|
|
18
|
+
const names = new Set();
|
|
19
|
+
for (const p of all) {
|
|
20
|
+
const m = /^cell1_([A-Za-z0-9]+)Enabled$/.exec(p.paramId ?? "");
|
|
21
|
+
if (!m)
|
|
22
|
+
continue;
|
|
23
|
+
if (NON_EFFECT_ENABLED.test(m[1]))
|
|
24
|
+
continue;
|
|
25
|
+
names.add(m[1]);
|
|
26
|
+
}
|
|
27
|
+
return [...names].sort();
|
|
28
|
+
}
|
|
29
|
+
let cachedManifest = new Map();
|
|
30
|
+
let paramIndex = new Map();
|
|
31
|
+
const DISCOVERY_FILE = resolve(homedir(), ".pam-mcp-bridge.json");
|
|
32
|
+
const MANIFEST_BY_PRODUCT = {
|
|
33
|
+
pam: "manifest.json",
|
|
34
|
+
cell1: "manifest-cell1.json",
|
|
35
|
+
mfx: "manifest-mfx.json",
|
|
36
|
+
};
|
|
7
37
|
function getProjectRoot() {
|
|
8
38
|
// Allow override via env var for standalone / outside-repo usage
|
|
9
39
|
if (process.env.PAM_PROJECT_ROOT) {
|
|
@@ -13,49 +43,93 @@ function getProjectRoot() {
|
|
|
13
43
|
// packages/mcp-server/src (or dist) -> project root
|
|
14
44
|
return resolve(__dirname, "..", "..", "..");
|
|
15
45
|
}
|
|
16
|
-
function
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
46
|
+
function normalizeProduct(product) {
|
|
47
|
+
const p = (product ?? "").trim().toLowerCase();
|
|
48
|
+
if (p.includes("cell1") || p.includes("cell 1"))
|
|
49
|
+
return "cell1";
|
|
50
|
+
if (p.includes("mfx"))
|
|
51
|
+
return "mfx";
|
|
52
|
+
return "pam";
|
|
53
|
+
}
|
|
54
|
+
// Product of the instance the bridge is actually connected to (set by the
|
|
55
|
+
// server after a successful connect / select_instance). Steers offline tools
|
|
56
|
+
// to the matching bundled manifest when several products are running. Env
|
|
57
|
+
// overrides still win — they're deliberate user config.
|
|
58
|
+
let activeProductHint;
|
|
59
|
+
export function setActiveProductHint(product) {
|
|
60
|
+
activeProductHint = product;
|
|
61
|
+
}
|
|
62
|
+
async function discoverProductFromBridge() {
|
|
63
|
+
try {
|
|
64
|
+
const raw = await readFile(DISCOVERY_FILE, "utf-8");
|
|
65
|
+
const data = JSON.parse(raw);
|
|
66
|
+
const entries = Array.isArray(data) ? data : [data];
|
|
67
|
+
const alive = entries.find((entry) => {
|
|
68
|
+
if (!entry || typeof entry.pid !== "number" || entry.pid <= 0)
|
|
69
|
+
return false;
|
|
70
|
+
try {
|
|
71
|
+
process.kill(entry.pid, 0);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
return err.code === "EPERM";
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return typeof alive?.product === "string" ? alive.product : undefined;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return undefined;
|
|
26
82
|
}
|
|
27
|
-
return rootManifest;
|
|
28
83
|
}
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
84
|
+
async function findManifestCandidates(productOverride) {
|
|
85
|
+
if (process.env.PAM_MANIFEST_PATH) {
|
|
86
|
+
return [resolve(process.env.PAM_MANIFEST_PATH)];
|
|
87
|
+
}
|
|
88
|
+
const envProduct = process.env.PAM_MANIFEST_PRODUCT ??
|
|
89
|
+
process.env.PAM_PRODUCT ??
|
|
90
|
+
process.env.PAM_MCP_PRODUCT;
|
|
91
|
+
const product = normalizeProduct(productOverride ?? envProduct ?? activeProductHint ?? (await discoverProductFromBridge()));
|
|
92
|
+
const manifestFile = MANIFEST_BY_PRODUCT[product] ?? MANIFEST_BY_PRODUCT.pam;
|
|
93
|
+
const root = getProjectRoot();
|
|
34
94
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
35
|
-
|
|
36
|
-
|
|
95
|
+
return [
|
|
96
|
+
resolve(root, manifestFile),
|
|
97
|
+
resolve(__dirname, manifestFile),
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
export async function loadManifest(productOverride) {
|
|
101
|
+
const candidates = await findManifestCandidates(productOverride);
|
|
102
|
+
const cacheKey = candidates.join("|");
|
|
103
|
+
const cached = cachedManifest.get(cacheKey);
|
|
104
|
+
if (cached)
|
|
105
|
+
return cached;
|
|
106
|
+
for (const manifestPath of candidates) {
|
|
37
107
|
try {
|
|
38
108
|
const raw = await readFile(manifestPath, "utf-8");
|
|
39
|
-
|
|
40
|
-
|
|
109
|
+
const manifest = JSON.parse(raw);
|
|
110
|
+
cachedManifest.set(cacheKey, manifest);
|
|
111
|
+
return manifest;
|
|
41
112
|
}
|
|
42
113
|
catch {
|
|
43
114
|
continue;
|
|
44
115
|
}
|
|
45
116
|
}
|
|
46
|
-
throw new Error("PAM manifest
|
|
47
|
-
"or PAM_MANIFEST_PATH to the manifest file location. " +
|
|
117
|
+
throw new Error("PAM manifest not found. Set PAM_PROJECT_ROOT to the PAM repo root, " +
|
|
118
|
+
"PAM_MANIFEST_PRODUCT to pam|cell1|mfx, or PAM_MANIFEST_PATH to the manifest file location. " +
|
|
48
119
|
"Live tools (set_parameters, trigger_midi, etc.) work without the manifest.");
|
|
49
120
|
}
|
|
50
121
|
export async function getParameterIndex() {
|
|
51
|
-
if (paramIndex)
|
|
52
|
-
return paramIndex;
|
|
53
122
|
const manifest = await loadManifest();
|
|
54
|
-
|
|
123
|
+
const cacheKey = manifest.bundleId || manifest.name;
|
|
124
|
+
const cached = paramIndex.get(cacheKey);
|
|
125
|
+
if (cached)
|
|
126
|
+
return cached;
|
|
127
|
+
const index = new Map();
|
|
55
128
|
for (const p of manifest.parameters) {
|
|
56
|
-
|
|
129
|
+
index.set(p.paramId, p);
|
|
57
130
|
}
|
|
58
|
-
|
|
131
|
+
paramIndex.set(cacheKey, index);
|
|
132
|
+
return index;
|
|
59
133
|
}
|
|
60
134
|
export async function getParametersByCell(cellId) {
|
|
61
135
|
const manifest = await loadManifest();
|
|
@@ -65,15 +139,40 @@ export async function getGlobalParameters() {
|
|
|
65
139
|
const manifest = await loadManifest();
|
|
66
140
|
return manifest.parameters.filter((p) => !p.cell);
|
|
67
141
|
}
|
|
68
|
-
|
|
142
|
+
// C++ namespaces the preset directory by PLUGIN_NAME (PluginUtils::getBasePath),
|
|
143
|
+
// so each product owns a sibling tree under "MAP Audio". Hardcoding "PAM" here
|
|
144
|
+
// pointed MFX's list_presets / read_preset at PAM's presets.
|
|
145
|
+
const PRESET_FOLDER_BY_PRODUCT = {
|
|
146
|
+
pam: "PAM",
|
|
147
|
+
cell1: "CELL1",
|
|
148
|
+
mfx: "MFX",
|
|
149
|
+
};
|
|
150
|
+
// Factory trees shipped in the repo. Router products keep their own — an MFX
|
|
151
|
+
// patch is meaningless to the sampler and vice versa.
|
|
152
|
+
const REPO_PRESET_DIR_BY_PRODUCT = {
|
|
153
|
+
pam: ["installer", "prepared-presets", "Presets"],
|
|
154
|
+
cell1: ["installer", "prepared-presets", "Presets"],
|
|
155
|
+
mfx: ["installer", "mfx-factory-presets", "Presets"],
|
|
156
|
+
};
|
|
157
|
+
function getUserPresetsDir(product) {
|
|
158
|
+
const folder = PRESET_FOLDER_BY_PRODUCT[product] ?? PRESET_FOLDER_BY_PRODUCT.pam;
|
|
69
159
|
if (process.platform === "win32") {
|
|
70
|
-
return resolve(process.env.APPDATA ?? homedir(), "MAP Audio",
|
|
160
|
+
return resolve(process.env.APPDATA ?? homedir(), "MAP Audio", folder, "Presets");
|
|
71
161
|
}
|
|
72
|
-
return resolve(homedir(), "Library", "Application Support", "MAP Audio",
|
|
162
|
+
return resolve(homedir(), "Library", "Application Support", "MAP Audio", folder, "Presets");
|
|
163
|
+
}
|
|
164
|
+
/** The product the offline tools should read, resolved exactly like the manifest. */
|
|
165
|
+
async function resolveActiveProduct() {
|
|
166
|
+
const envProduct = process.env.PAM_MANIFEST_PRODUCT ??
|
|
167
|
+
process.env.PAM_PRODUCT ??
|
|
168
|
+
process.env.PAM_MCP_PRODUCT;
|
|
169
|
+
return normalizeProduct(envProduct ?? activeProductHint ?? (await discoverProductFromBridge()));
|
|
73
170
|
}
|
|
74
171
|
export async function findPresetDirs() {
|
|
172
|
+
const product = await resolveActiveProduct();
|
|
75
173
|
const dirs = [];
|
|
76
|
-
const
|
|
174
|
+
const repoSegments = REPO_PRESET_DIR_BY_PRODUCT[product] ?? REPO_PRESET_DIR_BY_PRODUCT.pam;
|
|
175
|
+
const repoPresets = resolve(getProjectRoot(), ...repoSegments);
|
|
77
176
|
try {
|
|
78
177
|
await stat(repoPresets);
|
|
79
178
|
dirs.push(repoPresets);
|
|
@@ -82,7 +181,7 @@ export async function findPresetDirs() {
|
|
|
82
181
|
// not available
|
|
83
182
|
}
|
|
84
183
|
try {
|
|
85
|
-
const userPresets = getUserPresetsDir();
|
|
184
|
+
const userPresets = getUserPresetsDir(product);
|
|
86
185
|
await stat(userPresets);
|
|
87
186
|
dirs.push(userPresets);
|
|
88
187
|
}
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|