@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.
@@ -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
- export declare function loadManifest(): Promise<Manifest>;
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
- let cachedManifest = null;
6
- let paramIndex = null;
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 findManifestPath() {
17
- const root = getProjectRoot();
18
- // Primary: manifest.json at project root
19
- const rootManifest = resolve(root, "manifest.json");
20
- // Fallback: bundled manifest next to compiled server (dist/manifest.json)
21
- const __dirname = dirname(fileURLToPath(import.meta.url));
22
- const bundledManifest = resolve(__dirname, "manifest.json");
23
- // Check env override
24
- if (process.env.PAM_MANIFEST_PATH) {
25
- return resolve(process.env.PAM_MANIFEST_PATH);
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
- export async function loadManifest() {
30
- if (cachedManifest)
31
- return cachedManifest;
32
- const primaryPath = findManifestPath();
33
- // Try primary path, then bundled fallback
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
- const bundledPath = resolve(__dirname, "manifest.json");
36
- for (const manifestPath of [primaryPath, bundledPath]) {
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
- cachedManifest = JSON.parse(raw);
40
- return cachedManifest;
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.json not found. Set PAM_PROJECT_ROOT to the PAM repo root, " +
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
- paramIndex = new Map();
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
- paramIndex.set(p.paramId, p);
129
+ index.set(p.paramId, p);
57
130
  }
58
- return paramIndex;
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
- function getUserPresetsDir() {
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", "PAM", "Presets");
160
+ return resolve(process.env.APPDATA ?? homedir(), "MAP Audio", folder, "Presets");
71
161
  }
72
- return resolve(homedir(), "Library", "Application Support", "MAP Audio", "PAM", "Presets");
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 repoPresets = resolve(getProjectRoot(), "installer", "prepared-presets", "Presets");
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}