livepilot 1.21.1 → 1.21.3
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/CHANGELOG.md +267 -0
- package/README.md +5 -5
- package/m4l_device/LivePilot_Analyzer.amxd +0 -0
- package/m4l_device/livepilot_bridge.js +1 -1
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/atlas/__init__.py +11 -1
- package/package.json +2 -2
- package/remote_script/LivePilot/__init__.py +1 -1
- package/server.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,272 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.21.3 — Third audit-response: manual-docs drift + sync_metadata file-list widening + unicode-escape regex fix (April 24 2026)
|
|
4
|
+
|
|
5
|
+
Fourth same-day patch in 48 hours, third audit-response in 24 hours.
|
|
6
|
+
Audit #3 surfaced that v1.21.2's `sync_metadata` scope expansion had
|
|
7
|
+
added new check TYPES but didn't widen the FILE LISTS — so docs/manual
|
|
8
|
+
pages kept drifting (1305 devices, 135 enriched, 52 domains) while
|
|
9
|
+
`sync_metadata --check` passed. This patch widens the file lists AND
|
|
10
|
+
fixes a latent regex bug that v1.21.2's new "device" check would have
|
|
11
|
+
triggered with data-corrupting consequences.
|
|
12
|
+
|
|
13
|
+
No API changes. No test additions beyond what `sync_metadata` newly
|
|
14
|
+
enforces. No new features.
|
|
15
|
+
|
|
16
|
+
### P2 — Manual-doc atlas/domain drift (audit finding)
|
|
17
|
+
|
|
18
|
+
Three manual pages shipped with stale counts through v1.21.2 because
|
|
19
|
+
they weren't in the `sync_metadata` file lists for `enriched` /
|
|
20
|
+
`domain` / the new `device` check:
|
|
21
|
+
|
|
22
|
+
| File | Stale claim | Corrected to |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| `docs/manual/device-atlas.md` | 1305 devices / 135 enriched / 641 pack-indexed | 5264 / 120 / (claim dropped) |
|
|
25
|
+
| `docs/manual/index.md` | 1305 devices | 5264 |
|
|
26
|
+
| `docs/manual/tool-reference.md` | 1305 devices / 135 enriched / 52 domains | 5264 / 120 / 53 |
|
|
27
|
+
|
|
28
|
+
The 5 numeric substitutions (device count, enriched count, domain count)
|
|
29
|
+
were auto-closed by `sync_metadata --fix` once the file lists were
|
|
30
|
+
widened. The `641 pack-indexed` claim was manually dropped (the fixer
|
|
31
|
+
substitutes numbers, doesn't delete claims) — the shipped atlas has an
|
|
32
|
+
empty `.packs` list, so any specific pack-indexed number would be
|
|
33
|
+
meaningless anyway.
|
|
34
|
+
|
|
35
|
+
### Critical — Latent regex bug in `check_prose_claim` and `_fix_count`
|
|
36
|
+
|
|
37
|
+
Adding the `"device"` noun to `PROSE_CLAIM_FILES` exposed a regex
|
|
38
|
+
vulnerability that had existed since v1.15-era. `check_prose_claim`'s
|
|
39
|
+
pattern was:
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
r"(\d+)[-\s]+(?:[A-Za-z]+\s+)?{noun}s?\b"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
No word-boundary assertion at the start. In `manifest.json`, the em-dash
|
|
46
|
+
is stored as the JSON escape `\u2014`. Raw characters are
|
|
47
|
+
`\`, `u`, `2`, `0`, `1`, `4` — so the literal text "2014" appears
|
|
48
|
+
next to a space, next to "device atlas". The regex matched:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
...\u2014 device atlas...
|
|
52
|
+
^^^^^^^^^^^^^^^
|
|
53
|
+
(captures "2014", next optional word is empty, then "device")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Reported as `manifest.json: has '2014 device', expected '5264 device'`.
|
|
57
|
+
If `sync_metadata --fix` had run, it would have rewritten `\u2014`
|
|
58
|
+
(em-dash) to `\u5264` (CJK ideograph `剤`). The JSON would become
|
|
59
|
+
visually corrupted and linguistically nonsensical.
|
|
60
|
+
|
|
61
|
+
**Prior versions got away with this** because no earlier PROSE_CLAIM
|
|
62
|
+
noun could align adjacent to the 4-char "2014":
|
|
63
|
+
- "tool" starts with `t` — no match
|
|
64
|
+
- "bridge command" starts with `b` — no match
|
|
65
|
+
- "enriched" starts with `e` — no match
|
|
66
|
+
- "semantic move" / "analyzer tool" / "genre default" — none start with `d`
|
|
67
|
+
|
|
68
|
+
The new `"device"` noun (starts with `d`) was the first to align.
|
|
69
|
+
v1.21.2's extension would have shipped a corrupting `--fix` if anyone
|
|
70
|
+
had run it immediately.
|
|
71
|
+
|
|
72
|
+
Fix: leading `\b` assertion on all 4 regex patterns in sync_metadata
|
|
73
|
+
(`check_tool_count`, `check_prose_claim`, `fix_tool_count`,
|
|
74
|
+
`_fix_count`). Word-boundary before `\d+` means the digit must start
|
|
75
|
+
at a non-word-to-word transition — which excludes digits adjacent to
|
|
76
|
+
other word chars (like the `u` in `\u2014`).
|
|
77
|
+
|
|
78
|
+
Verified: post-fix, `check_prose_claim(noun="device")` reports only
|
|
79
|
+
the intended `5264 devices` in `manifest.json` — the `2014` ghost is
|
|
80
|
+
gone. All existing checks (tool count, bridge command, enriched, etc.)
|
|
81
|
+
continue to match correctly because their valid matches are always
|
|
82
|
+
preceded by non-word chars (space, parenthesis, start-of-string, etc.).
|
|
83
|
+
|
|
84
|
+
### `sync_metadata.py` expansion — new scope + 3 new file-list entries
|
|
85
|
+
|
|
86
|
+
Added:
|
|
87
|
+
* **`get_atlas_device_count()`** + `PROSE_CLAIM_FILES["device"]`
|
|
88
|
+
(threshold=1000) — enforces atlas device-count claims match
|
|
89
|
+
`stats.total_devices`. Deferred from v1.21.2 because generic
|
|
90
|
+
noun="device" was thought too broad; threshold=1000 filters
|
|
91
|
+
historical "5 devices" mentions entirely. Enabled here based on
|
|
92
|
+
audit #3 finding.
|
|
93
|
+
* **`PROSE_CLAIM_FILES["enriched"]`** file list widened: added
|
|
94
|
+
`docs/manual/device-atlas.md`, `docs/manual/tool-reference.md`.
|
|
95
|
+
These had stale "135 enriched" while README said "120".
|
|
96
|
+
* **`DOMAIN_COUNT_FILES`** file list widened: added
|
|
97
|
+
`docs/manual/tool-reference.md`. Its "52 domains" had drifted
|
|
98
|
+
while the rest of the repo was at 53.
|
|
99
|
+
|
|
100
|
+
New `sync_metadata --check` banner reports:
|
|
101
|
+
`version=1.21.3, tools=430, domains=53, bridge_cmds=31, enriched=120,
|
|
102
|
+
genres=4, moves=44, analyzer_tools=38, atlas_devices=5264`.
|
|
103
|
+
|
|
104
|
+
### Deferred to v1.22
|
|
105
|
+
|
|
106
|
+
- **`check_prose_claim` regex slash-prefix broadening** — still needs
|
|
107
|
+
doing (would let "spectral/analyzer tools" match the "analyzer tool"
|
|
108
|
+
check). Not landed in this patch because it would touch every
|
|
109
|
+
existing noun and warrants its own regression test pass.
|
|
110
|
+
- **Atlas `.enriched` schema decision** — three definitions (87 stats,
|
|
111
|
+
120 YAML files, 135 flag count). v1.21.3 standardized on 120 across
|
|
112
|
+
all descriptions via widened `enriched` check, but the schema
|
|
113
|
+
question is still open.
|
|
114
|
+
- **`dev-install` path** — still open.
|
|
115
|
+
|
|
116
|
+
### Scope stats
|
|
117
|
+
|
|
118
|
+
- 1 code fix (`sync_metadata.py` regex `\b` insertion on 4 patterns —
|
|
119
|
+
prevents future unicode-escape corruption)
|
|
120
|
+
- 1 code expansion (`sync_metadata.py` — new `device` check type +
|
|
121
|
+
file-list widening on 2 existing checks)
|
|
122
|
+
- 3 doc corrections auto-closed by `sync_metadata --fix` (9 numeric
|
|
123
|
+
substitutions across 3 manual files) + 1 manual prose-drop (641
|
|
124
|
+
pack-indexed in device-atlas.md)
|
|
125
|
+
- 15 version-string sites + `.amxd` binary patch (2 bytes) + `.maxpat`
|
|
126
|
+
source label + `package-lock.json` (2 fields) bumped 1.21.2 → 1.21.3
|
|
127
|
+
- Test suite: 3124 passed, 1 skipped (unchanged — no-regression patch)
|
|
128
|
+
|
|
129
|
+
### Credits
|
|
130
|
+
|
|
131
|
+
Third external audit by the repo owner. Fourth same-day patch since
|
|
132
|
+
v1.20.1. Audit-to-ship pattern stable at ~2h per round.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 1.21.2 — Second audit-response: atlas reconciliation + manual hygiene + sync_metadata expansion (April 24 2026)
|
|
137
|
+
|
|
138
|
+
Second same-day audit-response patch. After v1.21.1 shipped, the repo
|
|
139
|
+
owner ran another audit and surfaced one code bug (`AtlasManager`
|
|
140
|
+
reported `version="unknown"` because the atlas JSON has `.version` at
|
|
141
|
+
top level, not under `.meta.version`) plus four documentation drifts
|
|
142
|
+
(atlas claims in 11 description fields, stale "32" analyzer counts in
|
|
143
|
+
3 locations, reversibility overclaim in the manual, `.maxpat` source
|
|
144
|
+
displaying `v1.17.5`), and the meta-observation that `sync_metadata.py`
|
|
145
|
+
had been blind to the entire category of drift that keeps surfacing
|
|
146
|
+
in audit rounds.
|
|
147
|
+
|
|
148
|
+
This patch closes all five findings AND expands `sync_metadata`'s
|
|
149
|
+
scope so future drift of the same classes fails CI instead of requiring
|
|
150
|
+
another manual audit.
|
|
151
|
+
|
|
152
|
+
### P2 — `AtlasManager.version` now reads top-level `.version`
|
|
153
|
+
|
|
154
|
+
Pre-fix (`mcp_server/atlas/__init__.py:21`):
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
self._meta = data.get("meta", {})
|
|
158
|
+
# ...
|
|
159
|
+
@property
|
|
160
|
+
def version(self) -> str:
|
|
161
|
+
return self._meta.get("version", "unknown")
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The shipped `device_atlas.json` has `.version = "2.0.0"` at top level,
|
|
165
|
+
not nested under `.meta.version`. So `self._meta` was always `{}` and
|
|
166
|
+
`.version` always returned `"unknown"`. Fixed by reading both locations
|
|
167
|
+
with top-level winning; `.meta.version` preserved as fallback for any
|
|
168
|
+
internal/dev atlas using the older schema. After fix:
|
|
169
|
+
`AtlasManager.version` returns `"2.0.0"` on the shipped atlas.
|
|
170
|
+
|
|
171
|
+
### P2 — Atlas description claims: 1305 devices → 5264, drop "641 pack-indexed"
|
|
172
|
+
|
|
173
|
+
The "1305 devices" claim was false in every public surface (actual
|
|
174
|
+
shipped JSON has `stats.total_devices = 5264`). The "641 pack-indexed"
|
|
175
|
+
claim was meaningless — the shipped atlas has an empty `.packs` list;
|
|
176
|
+
device-side pack count via `.devices[*].pack` field is 50 across 13
|
|
177
|
+
unique pack names (not 641 or 655).
|
|
178
|
+
|
|
179
|
+
Updated 11 surfaces: `README.md` (5 hits), `AGENTS.md`, `CLAUDE.md`,
|
|
180
|
+
`package.json`, `server.json`, `manifest.json` (2 hits), `marketplace.json`,
|
|
181
|
+
`Codex-plugin/plugin.json`, `claude-plugin/plugin.json`,
|
|
182
|
+
`livepilot-core/SKILL.md`, `livepilot-core/references/overview.md` (2 hits).
|
|
183
|
+
|
|
184
|
+
"120 enriched" kept — defensible as the YAML enrichment file count
|
|
185
|
+
(120 files on disk). The `stats.enriched_devices` value (87) and the
|
|
186
|
+
`.enriched=true` flag count (135) are two other valid definitions; the
|
|
187
|
+
three-way divergence is a schema question for v1.22+ scope, not a
|
|
188
|
+
drift fix here.
|
|
189
|
+
|
|
190
|
+
### P2 — Manual analyzer-tool count 32 → 38
|
|
191
|
+
|
|
192
|
+
`docs/manual/getting-started.md:256` and `livepilot/skills/livepilot-release/SKILL.md`
|
|
193
|
+
(3 lines) still said "32 spectral/analyzer tools" despite the actual
|
|
194
|
+
`@mcp.tool` count in `analyzer.py` being 38. Corrected.
|
|
195
|
+
|
|
196
|
+
### P2 — `.maxpat` source label v1.17.5 → v1.21.2
|
|
197
|
+
|
|
198
|
+
`m4l_device/LivePilot_Analyzer.maxpat:1611` had a stale visible version
|
|
199
|
+
label `"text": "v1.17.5"`. The compiled `.amxd` had been binary-patched
|
|
200
|
+
to the correct version across releases, but the source patch Max uses
|
|
201
|
+
when someone opens/rebuilds the device never got updated. Fixed.
|
|
202
|
+
|
|
203
|
+
### P3 — Manual reversibility language hedge
|
|
204
|
+
|
|
205
|
+
`docs/manual/index.md:31` said "All 430 tools... reversible with undo"
|
|
206
|
+
— the README was hedged in v1.21.1 but the manual missed. Corrected
|
|
207
|
+
with matching language: Live-session mutations route through Ableton's
|
|
208
|
+
undo stack; side effects outside the Live project (Splice downloads,
|
|
209
|
+
memory/ledger writes, installer actions, atlas scans, filesystem writes)
|
|
210
|
+
persist beyond undo.
|
|
211
|
+
|
|
212
|
+
### `sync_metadata.py` expansion — converts this drift class into CI failures
|
|
213
|
+
|
|
214
|
+
Added to close the audit-memory gap that made v1.21.0, v1.21.1, and
|
|
215
|
+
now v1.21.2 each need a manual sweep:
|
|
216
|
+
|
|
217
|
+
- **`check_lockfile_version(version)`** — asserts `package-lock.json`
|
|
218
|
+
root `.version` matches `package.json`. Would have caught the
|
|
219
|
+
lockfile-stuck-at-1.17.5 drift at CI time from pre-v1.18 onwards.
|
|
220
|
+
- **`PROSE_CLAIM_FILES["semantic move"]`** — enforces every registered
|
|
221
|
+
"N semantic moves" claim matches `registry.count()` (currently 44).
|
|
222
|
+
Would have caught v1.21.0's "43 semantic moves" drift at CI time.
|
|
223
|
+
- **`PROSE_CLAIM_FILES["analyzer tool"]`** — enforces "N analyzer tools"
|
|
224
|
+
claims match `@mcp.tool` count in `analyzer.py` (currently 38).
|
|
225
|
+
Catches plain-form drift; "spectral/analyzer tools" slashed variants
|
|
226
|
+
bypass the current `check_prose_claim` regex's optional-word prefix
|
|
227
|
+
(noted in an inline comment — left for a future patch to broaden).
|
|
228
|
+
|
|
229
|
+
`sync_metadata --check` banner now reports 2 new counts:
|
|
230
|
+
`moves=44, analyzer_tools=38` alongside the previous 6.
|
|
231
|
+
|
|
232
|
+
### Deferred to v1.22
|
|
233
|
+
|
|
234
|
+
- **`sync_metadata.py` atlas-stats check** — catching drift in
|
|
235
|
+
"5264 devices" or "87 enriched" claims requires either a noun-specific
|
|
236
|
+
regex (generic "device" is too broad — false-positives on every
|
|
237
|
+
historical "5 devices" mention) or a different check strategy.
|
|
238
|
+
Worth doing but nontrivial.
|
|
239
|
+
- **`check_prose_claim` regex broadening** to catch slashed compounds
|
|
240
|
+
like "spectral/analyzer tools". Current regex's `(?:[A-Za-z]+\s+)?`
|
|
241
|
+
prefix misses `spectral/` because the slash breaks the character class.
|
|
242
|
+
- **Atlas JSON schema decision** — whether `stats.enriched_devices`,
|
|
243
|
+
`.enriched=true` flag count, or YAML file count is THE canonical
|
|
244
|
+
"enriched" number. Picking one + renaming fields ends the three-way
|
|
245
|
+
ambiguity.
|
|
246
|
+
|
|
247
|
+
### Credits
|
|
248
|
+
|
|
249
|
+
Second external audit by the repo owner, performed ~30 min after
|
|
250
|
+
v1.21.1 shipped. Same-day patch #2 ships ~2 hours after audit receipt
|
|
251
|
+
(matches the v1.20.1 / v1.21.1 same-day-hotfix precedent — this is the
|
|
252
|
+
third such same-day patch in 48 hours).
|
|
253
|
+
|
|
254
|
+
### Scope stats
|
|
255
|
+
|
|
256
|
+
- 1 code fix (`mcp_server/atlas/__init__.py` — `AtlasManager` reads
|
|
257
|
+
top-level `.version`)
|
|
258
|
+
- 1 code expansion (`scripts/sync_metadata.py` — 3 new checks:
|
|
259
|
+
move_count, analyzer_tool_count, lockfile_version)
|
|
260
|
+
- 4 doc corrections (atlas claims across 11 files + analyzer count in
|
|
261
|
+
4 files + reversibility hedge + .maxpat label)
|
|
262
|
+
- 15 version-string sites + `.amxd` binary patch (2 bytes) +
|
|
263
|
+
package-lock.json (2 fields) bumped 1.21.1 → 1.21.2
|
|
264
|
+
- Test suite: 3124 passed, 1 skipped (unchanged — this is a
|
|
265
|
+
no-regression patch; the AtlasManager fix makes a previously-
|
|
266
|
+
untested code path produce the right answer).
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
3
270
|
## 1.21.1 — Audit-response patch: experiment-commit safety + doc hygiene + lockfile (April 24 2026)
|
|
4
271
|
|
|
5
272
|
Small patch release responding to an external audit of v1.21.0 performed
|
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ Most MCP servers are tool collections — they execute commands. LivePilot is an
|
|
|
40
40
|
| Layer | What it provides |
|
|
41
41
|
|-------|-----------------|
|
|
42
42
|
| **Deterministic Tools** | Direct control: transport, tracks, clips, notes, devices, scenes, mixing, arrangement, browser, automation |
|
|
43
|
-
| **Device Atlas** | Knowledge of every device in Ableton's library —
|
|
43
|
+
| **Device Atlas** | Knowledge of every device in Ableton's library — 5264 devices indexed 7 ways (by_id, by_name, by_uri, by_category, by_tag, by_genre, by_pack). 120 enriched with YAML sonic intelligence (47 with aesthetic-tagged `signature_techniques`). 683 drum kits mapped. Free-text `atlas_describe_chain` ("a granular pad like Tim Hecker") and reverse-lookup `atlas_techniques_for_device` cross-reference 146 techniques across 58 devices |
|
|
44
44
|
| **Concept Surface** | Two reference files let the LLM's training translate into LivePilot: `artist-vocabularies.md` maps ~25 producers (Villalobos, Hawtin, Basic Channel, Gas, Basinski, Hecker, Aphex, Autechre, Dilla, Burial, Henke, Daft Punk, …) to `reach_for` / `avoid` / `key_techniques`; `genre-vocabularies.md` maps 15 genres to tempo / kick / bass / percussion / harmonic / texture / devices. The LLM reads "sound like Gas" and gets a concrete device chain, not guesswork |
|
|
45
45
|
| **Sample Engine** | Three-source sample intelligence — Ableton's browser, your filesystem, and Splice's catalog (plan-aware: Ableton Live plan uses daily quota, Sounds+/Creator uses credits, free samples bypass both). 6 fitness critics. 29 processing techniques. Collections, presets, preview-URL audition, LIVE Describe-a-Sound + Variations via Splice GraphQL |
|
|
46
46
|
| **Spectral Perception** | Real-time ears via M4L — 9-band FFT (with sub_low split at 20-60 Hz for kick fundamentals), RMS/peak metering, Krumhansl-Schmuckler key detection, pitch tracking, FluCoMa mel/chroma/onset. Auto-loaded via `ensure_analyzer_on_master` (v1.20.3) — no more silently-degraded mix moves from forgotten analyzer |
|
|
@@ -60,7 +60,7 @@ Most MCP servers are tool collections — they execute commands. LivePilot is an
|
|
|
60
60
|
│ ────────────── ────────────── ────────────── │
|
|
61
61
|
│ │
|
|
62
62
|
│ Device Atlas 9-band FFT recall by mood, │
|
|
63
|
-
│
|
|
63
|
+
│ 5264 devices RMS / peak genre, texture │
|
|
64
64
|
│ 120 enriched pitch tracking 29 techniques │
|
|
65
65
|
│ 683 drum kits key detection replay into session │
|
|
66
66
|
│ │
|
|
@@ -105,7 +105,7 @@ Most MCP servers are tool collections — they execute commands. LivePilot is an
|
|
|
105
105
|
|
|
106
106
|
**M4L Bridge** (`m4l_device/`) — Optional Max for Live Audio Effect on the master track. Provides deep LOM access through Max's LiveAPI that the ControlSurface API can't reach. UDP 9880 (M4L to server) carries spectral data and LiveAPI responses. OSC 9881 (server to M4L) sends commands. The 38 spectral/analyzer tools strictly require the bridge; device and sample tools that call the bridge also have graceful fallbacks, so core functionality works without it. Backed by 31 bridge commands for hidden parameters, Simpler internals, warp markers, display values, and Simpler warp / Compressor sidechain writes that live on child objects Python can't reach.
|
|
107
107
|
|
|
108
|
-
**Device Atlas** (`mcp_server/atlas/`) — In-memory indexed JSON database.
|
|
108
|
+
**Device Atlas** (`mcp_server/atlas/`) — In-memory indexed JSON database. 5264 devices with browser URIs, 120 enriched with YAML sonic intelligence profiles (mood, genre, texture, recommended chains). 7 indexes: by_id, by_name, by_uri, by_category, by_tag, by_genre, by_pack. Reverse-index `device_techniques_index.json` powers `atlas_techniques_for_device` (146 cross-references across 58 devices). The AI never hallucinates a device name or preset — it always resolves against the atlas first.
|
|
109
109
|
|
|
110
110
|
**Sample Engine** (`mcp_server/sample_engine/`) — Searches three sources simultaneously: BrowserSource (Ableton's library), SpliceSource (local Splice catalog via SQLite), FilesystemSource (user directories). Every result passes through a 6-critic fitness battery (key, tempo, spectral, genre, mood, technical). 29 processing techniques (Surgeon precision vs. Alchemist experimentation). Builds complete sample processing plans with warp, slice, and effect recommendations.
|
|
111
111
|
|
|
@@ -235,7 +235,7 @@ WARP ─────────── get / add / move / remove markers
|
|
|
235
235
|
The atlas is an in-memory indexed database of Ableton's entire device library.
|
|
236
236
|
|
|
237
237
|
```
|
|
238
|
-
|
|
238
|
+
5264 devices total
|
|
239
239
|
120 enriched with sonic intelligence (mood, genre, texture, chains)
|
|
240
240
|
47 with aesthetic-tagged signature_techniques
|
|
241
241
|
683 drum kits mapped with note assignments
|
|
@@ -620,7 +620,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for architecture details, code guidelines
|
|
|
620
620
|
|----------|---------------|
|
|
621
621
|
| [Manual](docs/manual/index.md) | Complete reference: architecture, all 430 tools, workflows |
|
|
622
622
|
| [Intelligence Layer](docs/manual/intelligence.md) | How the 12 engines connect — conductor, moves, preview, evaluation |
|
|
623
|
-
| [Device Atlas](docs/manual/device-atlas.md) |
|
|
623
|
+
| [Device Atlas](docs/manual/device-atlas.md) | 5264 devices indexed — search, suggest, chain building |
|
|
624
624
|
| [Samples & Slicing](docs/manual/samples.md) | 3-source search, fitness critics, slice workflows |
|
|
625
625
|
| [Automation](docs/manual/automation.md) | 16 curve types, 15 recipes, spectral suggestions |
|
|
626
626
|
| [Composition](docs/manual/composition.md) | Composer, section analysis, arrangement planning |
|
|
Binary file
|
|
@@ -34,7 +34,7 @@ outlets = 2; // 0: to udpsend (responses), 1: to buffer~/status
|
|
|
34
34
|
// Single source of truth for the bridge version — bumped alongside the
|
|
35
35
|
// rest of the release manifest. Surfaced in the UI via messnamed("livepilot_version", ...)
|
|
36
36
|
// so the frozen .amxd visibly reports which build it was last exported from.
|
|
37
|
-
var VERSION = "1.21.
|
|
37
|
+
var VERSION = "1.21.3";
|
|
38
38
|
|
|
39
39
|
// ── State ──────────────────────────────────────────────────────────────────
|
|
40
40
|
|
package/mcp_server/__init__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
|
|
2
|
-
__version__ = "1.21.
|
|
2
|
+
__version__ = "1.21.3"
|
|
@@ -18,7 +18,17 @@ class AtlasManager:
|
|
|
18
18
|
with open(atlas_path, "r") as f:
|
|
19
19
|
data = json.load(f)
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
# v1.21.2 audit-response #2: atlas JSONs ship with `.version` at
|
|
22
|
+
# top level (e.g. "2.0.0"), not under `.meta.version`. Pre-fix,
|
|
23
|
+
# `self._meta = data.get("meta", {})` always evaluated to {} on
|
|
24
|
+
# the shipped atlas because there's no `meta` key, which made
|
|
25
|
+
# `self.version` return "unknown". Read both locations and let
|
|
26
|
+
# the top-level win — falling back to `.meta.version` preserves
|
|
27
|
+
# backward-compat with any internal/dev atlas using the older
|
|
28
|
+
# schema.
|
|
29
|
+
self._meta = dict(data.get("meta", {}))
|
|
30
|
+
if "version" in data and "version" not in self._meta:
|
|
31
|
+
self._meta["version"] = data["version"]
|
|
22
32
|
self._devices: List[Dict[str, Any]] = data.get("devices", [])
|
|
23
33
|
|
|
24
34
|
# ── Build indexes ───────────────────────────────────────────
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.21.
|
|
3
|
+
"version": "1.21.3",
|
|
4
4
|
"mcpName": "io.github.dreamrec/livepilot",
|
|
5
|
-
"description": "Agentic production system for Ableton Live 12 — 430 tools, 53 domains, 44 semantic moves. Device atlas (
|
|
5
|
+
"description": "Agentic production system for Ableton Live 12 — 430 tools, 53 domains, 44 semantic moves. Device atlas (5264 devices, 120 enriched, 7 indexes), Splice intelligence (gRPC + GraphQL describe-a-sound + preview + collections + presets), 9-band spectral perception auto-loaded via ensure_analyzer_on_master, Creative Director skill, technique memory, 12 creative intelligence engines",
|
|
6
6
|
"author": "Pilot Studio",
|
|
7
7
|
"license": "BSL-1.1",
|
|
8
8
|
"type": "commonjs",
|
|
@@ -5,7 +5,7 @@ Entry point for the ControlSurface. Ableton calls create_instance(c_instance)
|
|
|
5
5
|
when this script is selected in Preferences > Link, Tempo & MIDI.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
__version__ = "1.21.
|
|
8
|
+
__version__ = "1.21.3"
|
|
9
9
|
|
|
10
10
|
from _Framework.ControlSurface import ControlSurface
|
|
11
11
|
from . import router
|
package/server.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.dreamrec/livepilot",
|
|
4
|
-
"description": "430-tool agentic MCP production system for Ableton Live 12 — 53 domains, 44 semantic moves, device atlas (
|
|
4
|
+
"description": "430-tool agentic MCP production system for Ableton Live 12 — 53 domains, 44 semantic moves, device atlas (5264 devices), Splice intelligence (gRPC + GraphQL), 9-band spectral perception auto-loaded, Creative Director skill, technique memory, 12 creative engines",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/dreamrec/LivePilot",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "1.21.
|
|
9
|
+
"version": "1.21.3",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "livepilot",
|
|
14
|
-
"version": "1.21.
|
|
14
|
+
"version": "1.21.3",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
}
|