livepilot 1.17.5 → 1.18.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/CHANGELOG.md CHANGED
@@ -1,5 +1,224 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.18.0 — Creative Director + concept packets + device affordances (April 23 2026)
4
+
5
+ A structural feature release. Addresses the "agent doesn't variate
6
+ enough, feels stuck in the same repetitive patterns" failure mode by
7
+ adding an enforcement layer on top of the existing tool surface.
8
+ **Zero new Python. Zero new MCP tools.** The entire feature is skill
9
+ documentation, structured YAML data, and prompt-level contracts.
10
+
11
+ ### Added
12
+
13
+ - **`livepilot-creative-director` skill** — new top-level skill that
14
+ routes creative intent through mandatory divergence before any
15
+ commit. Eight-phase contract: ground → compile brief → generate 3
16
+ plans with distinct `move.family` → cover 4 dimensions → preview
17
+ or rank → select + execute → evaluate → record. Critics (analyze_mix,
18
+ evaluate_move) DEFER until Phase 7 — firing them earlier pre-converges
19
+ the answer. Includes four reference files:
20
+ - `creative-brief-template.md` — YAML schema + 4 filled examples,
21
+ novelty_budget table with 6 user-framing buckets
22
+ - `move-family-diversity-rule.md` — canonical 6 families + family-vs-
23
+ dimension split + collision-avoidance rules
24
+ - `anti-repetition-rules.md` — recency threshold table (0-2/10
25
+ neutral, 3-4/10 least-weighted, ≥5/10 EXCLUDED) + borderline-
26
+ stuckness band (0.4-0.5 surfaces user option)
27
+ - `the-four-move-rule.md` — structural + rhythmic + timbral + spatial
28
+ dimension coverage with narrow-idiom exceptions for dub-techno /
29
+ ambient / beat-focused packets
30
+
31
+ - **Structured concept packets** (42 YAMLs under
32
+ `livepilot/skills/livepilot-core/references/concepts/`) — 28 artist
33
+ packets + 14 genre packets. Each packet carries `sonic_identity`,
34
+ `reach_for`, `avoid` (HARD filter), `evaluation_bias.target_dimensions`
35
+ + `protect` floors, `move_family_bias.favor` + `deprioritize`,
36
+ `dimensions_in_scope` + `dimensions_deprioritized`, and
37
+ `novelty_budget_default`. Narrative `artist-vocabularies.md` and
38
+ `genre-vocabularies.md` stay as human-facing overviews; YAMLs are
39
+ the machine source-of-truth.
40
+
41
+ - **Device affordance metadata** (20 YAMLs under
42
+ `livepilot/skills/livepilot-core/references/affordances/`) — per-
43
+ device affordance packets for Echo, Auto Filter, Convolution Reverb,
44
+ Hybrid Reverb, Ping Pong Delay, Drift, Corpus, Granulator III,
45
+ Simpler, Wavetable, Operator, Poli, Saturator, Compressor, Glue
46
+ Compressor, Utility, EQ Eight, Chorus-Ensemble, Shifter, Vinyl
47
+ Distortion. Each covers `musical_roles`, `strong_for` / `risky_for`,
48
+ `subtle` / `moderate` / `aggressive` parameter ranges, `pairings`
49
+ (with before/after/parallel order), `anti_pairings`, `remeasure`
50
+ queue, and `dimensional_impact` mapping to the four-move-rule.
51
+
52
+ - **Evaluation artistic dimensions** — `livepilot-evaluation/SKILL.md`
53
+ extended with Family B dimensions (style_fit, distinctiveness,
54
+ motif_coherence, section_contrast, restraint, surprise_without_breakage)
55
+ in addition to Family A (punch, weight, etc). Both required for
56
+ creative-director turns.
57
+
58
+ - **Creative-success verdict taxonomy** — 5 verdicts assigned at
59
+ evaluation Step 8b: `safe_win`, `bold_win`, `interesting_failure`,
60
+ `identity_break`, `generic_fallback`. Drives promotion decisions.
61
+
62
+ - **Verdict-gated reflection promotion rubric** — `memory-guide.md`
63
+ extended with a promotion matrix that keeps memory from converging
64
+ on safe_win-adjacent moves. `bold_win` promotes immediately;
65
+ `safe_win` conditional on user-keep-for-2-turns; `interesting_failure`
66
+ curiosity-store only; `identity_break` and `generic_fallback` record
67
+ anti-preferences instead.
68
+
69
+ - **Schema test harness** — `tests/test_creative_director.py` (27
70
+ passing, 1 xfail tracking missing genre YAMLs). Verifies skill file
71
+ structure, packet counts, canonical family/dimension enforcement,
72
+ cross-reference resolution, and cross-skill integration (director ↔
73
+ evaluation ↔ memory-guide).
74
+
75
+ ### Changed
76
+
77
+ - `livepilot-core/SKILL.md`: fixed semantic_moves family count (5→6,
78
+ `device_creation` was missing from the docs). Added director routing
79
+ pointer in the V2 Engine Skills table and Flow B preamble.
80
+ - `livepilot-wonder/SKILL.md`: added creative-director as a trigger
81
+ (not only stuck-rescue); split honesty rule to actively widen across
82
+ families BEFORE accepting <3 variants on first-pass creative calls.
83
+ - `livepilot-producer/AGENT.md`: director added to subagent skills
84
+ index with "load FIRST on open-ended creative intent" note.
85
+ - `artist-vocabularies.md` + `genre-vocabularies.md`: cross-reference
86
+ callouts pointing to the new YAML packets.
87
+ - `m4l_device/LivePilot_Analyzer.amxd` + `.maxpat` + `livepilot_bridge.js`:
88
+ versioning text added to analyzer UI for live identification across
89
+ instances.
90
+
91
+ ### Pressure-testing
92
+
93
+ The director was developed under TDD-for-skills discipline: three
94
+ subagent pressure-scenarios run in two rounds, with verdict-driven
95
+ fixes between rounds. Round 1 surfaced 9 issues, Round 2 verified
96
+ each was fixed and surfaced 3 more (higher-order patterns only visible
97
+ after first-order bugs were gone). PR 3 affordance work caught 3
98
+ schema-level bugs (`atlas_uri` semantic mismatch, phantom
99
+ `ir_length`, parameter-name canonicalization gap) before ship.
100
+
101
+ ### Known gaps
102
+
103
+ - ~20 narrative-only genres (downtempo, boom_bap, lo_fi, synthwave,
104
+ techno, detroit_techno, soul, footwork, deep_house, french_house,
105
+ disco, electronic, electronica, cinematic, hyperpop, drone,
106
+ bass_music, soulful_house, acid_techno, nu_disco, juke) referenced
107
+ by artist packets but not yet YAML-ified. Tracked via
108
+ `test_all_artist_genre_refs_resolve_strictly` xfail.
109
+
110
+ ### Known issues from pre-ship live verification (v1.18.1 patch targets)
111
+
112
+ 12 issues surfaced while running director end-to-end against a real
113
+ Ableton session before pushing v1.18.0. Shipping as-is rather than
114
+ blocking the release; patching in a focused follow-up. Severity is
115
+ this author's subjective production-impact rating.
116
+
117
+ **High severity — users will hit these in the first 30 seconds:**
118
+
119
+ 1. **`create_experiment` auto-proposal is broken.** When called without
120
+ explicit `seeds` or `move_ids`, the keyword-overlap selector
121
+ generates single-character `move_id` values (`"t"`, `"w"`, `"m"`)
122
+ that fail with `"Move t not found"` at run time. All three branches
123
+ fail. Workaround: director MUST pass explicit `move_ids=[...]` —
124
+ auto-proposal path is unusable. (`mcp_server/experiment/engine.py`
125
+ auto-propose logic.)
126
+ 2. **`propose_composer_branches` ignores concept packets.** A prompt
127
+ referencing Basic Channel produced generic EDM scaffold
128
+ (`Intro → Build → Drop → Breakdown → Drop 2 → Outro` + 6 standard
129
+ layers) instead of BC's continuous-evolution dub-techno form.
130
+ Composer falls back to genre-family defaults and doesn't consult
131
+ `concepts/artists/*.yaml` or `concepts/genres/*.yaml` arrangement_idioms.
132
+ 3. **Director Plan A bypasses the action ledger.** When the director
133
+ executes via raw tool calls (`load_browser_item`, `set_device_parameter`,
134
+ etc.) instead of `apply_semantic_move` / `create_experiment +
135
+ commit_experiment`, `get_last_move` returns empty and anti-repetition
136
+ goes blind. Either make semantic_move commits mandatory for director
137
+ plan execution, or add a session-state inference fallback that reads
138
+ device/track deltas directly.
139
+
140
+ **Medium severity — edges and enforcement gaps:**
141
+
142
+ 4. **Affordance YAML — Ping Pong Delay is a ghost packet.**
143
+ `affordances/devices/ping-pong-delay.yaml` describes a standalone
144
+ device that doesn't exist in Live 12 (empty `search_browser` result).
145
+ Ping-pong is a MODE of `Echo` (`Channel Mode = 1`). Merge the
146
+ affordance into `echo.yaml` or delete the file.
147
+ 5. **Affordance YAML — Auto Filter ranges are legacy.** Modern
148
+ `AutoFilter2` class uses 0-1 normalized for Frequency (display
149
+ `"448 Hz"` at raw `0.45`), NOT the 20-135 legacy range the affordance
150
+ YAML documents. Either update the affordance to reflect
151
+ AutoFilter2 OR ship separate legacy/modern variants.
152
+ 6. **Affordance YAML — `ir_length` phantom on Convolution Reverb.**
153
+ Already fixed in commit 9 by renaming to `decay_time`, but worth
154
+ flagging that this class of field-vs-actual drift needs a
155
+ systematic check (script that compares affordance parameter names
156
+ to `get_device_parameters` output for each device).
157
+ 7. **Packet `avoid` list is advisory, not runtime-enforced.** Director
158
+ SKILL.md documents the hard-filter rule but there's no code path
159
+ that compares user requests or tool args against the active packet's
160
+ `avoid` list before executing. Ask for "bump the high-end" under an
161
+ active BC packet and nothing blocks the EQ boost.
162
+ 8. **`locked_dimensions` respect is declarative only.** Same class as
163
+ (7) — director compiles a brief with explicit locks but no runtime
164
+ pre-flight check blocks tool calls that touch locked dimensions.
165
+ 9. **`propose_composer_branches` silent `count` degradation.** Requesting
166
+ 3 branches at `freshness < 0.7` returns 2 (only canonical +
167
+ energy_shift). User-visible surface returns fewer than requested
168
+ without flagging.
169
+ 10. **Wonder Mode degrades to zero executable variants on empty/sparse
170
+ session context.** Tested with `enter_wonder_mode("I'm stuck")` on
171
+ a mostly-empty session — returned 3 identical analytical-only
172
+ variants with `"No matching executable moves found"`. Needs a
173
+ cold-start path that proposes starting-point seeds from memory
174
+ or concept packets rather than requiring existing session content.
175
+ 11. **Evaluation tie-break is coarse.** 3-branch experiment with
176
+ different semantic moves (add_space, add_warmth, widen_stereo)
177
+ all scored identical 0.6. No clear winner emerges. Classifier
178
+ needs finer resolution OR explicit tie-break by novelty/taste.
179
+ 12. **Low-novelty-budget escape hatch missing from 3-plan rule.**
180
+ `"keep the vibe, just cleaner"` → `novelty_budget = 0.30`. The
181
+ 3-distinct-families rule fights against narrow cleanup requests.
182
+ Need explicit clause: "if `novelty_budget < 0.35`, 1-2 mix-family
183
+ plans is acceptable and honest."
184
+
185
+ **Also worth fixing:**
186
+
187
+ - `batch_set_parameters` schema — requires `{"Name": {"value": v}}`,
188
+ not `{"Name": v}`. Docs didn't make this obvious.
189
+ - State continuity between experiment branches — before-snapshot
190
+ track levels drifted between branches (0.76 → 0 → 0.87). Each
191
+ branch sees a different baseline. Needs transport-state locking.
192
+ - Hybrid-reference compilation algorithm — multi-packet asks
193
+ ("Basic Channel meets Dilla swing") work via LLM ad-hoc reasoning,
194
+ not via explicit union/intersection logic. Define the rule.
195
+
196
+ All 15 items are tracked for a v1.18.1 patch. The core v1.18.0
197
+ machinery (8-phase director contract, concept packets, affordances,
198
+ evaluation dimensions, verdict taxonomy) works correctly when plans
199
+ are constructed with explicit `move_ids` — which is the documented
200
+ primary path.
201
+
202
+ ### Live Ableton session result
203
+
204
+ Test scenario: build a Basic Channel dub chain on a return track, then
205
+ source (Meld Juno Square chord stab) with sends. Chain built cleanly.
206
+ User feedback on initial Plan A: "super basic" (default presets lack
207
+ character). Swapped Drift default → `Poly Juno Square.adv` preset.
208
+ Improved character. Flow A of the director (build a single plan, verify,
209
+ iterate) is production-viable today. Flow B (divergence via experiment)
210
+ has the 3 high-severity issues above.
211
+
212
+ ### Process note
213
+
214
+ This release was authored in a single session as a series of 6 PRs
215
+ (Creative Director skill → Concept packets → Affordances → Evaluation
216
+ dimensions → Reflection rubric → Test harness), each pressure-tested
217
+ before moving to the next. Outside-reviewer design plan is at
218
+ `docs/plans/livepilot_creativity_plan.md`.
219
+
220
+ ---
221
+
3
222
  ## 1.17.5 — Classify error-only commit payloads as failures (April 23 2026)
4
223
 
5
224
  ### Fixed
package/README.md CHANGED
@@ -101,7 +101,7 @@ Most MCP servers are tool collections — they execute commands. LivePilot is an
101
101
 
102
102
  **MCP Server** (`mcp_server/`) — Python FastMCP server. Validates inputs, routes commands to the Remote Script over TCP, manages the M4L bridge, runs the atlas, sample engine, composer, and all intelligence engines. This is what your AI client connects to.
103
103
 
104
- **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 32 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 30 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.
104
+ **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 32 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.
105
105
 
106
106
  **Device Atlas** (`mcp_server/atlas/`) — In-memory indexed JSON database. 1305 devices with browser URIs, 120 enriched with YAML sonic intelligence profiles (mood, genre, texture, recommended chains). 6 indexes: by_id, by_name, by_uri, by_category, by_tag, by_genre. The AI never hallucinates a device name or preset — it always resolves against the atlas first.
107
107
 
Binary file
@@ -31,6 +31,11 @@ autowatch = 1;
31
31
  inlets = 2; // 0: OSC commands, 1: dspstate~ (sample rate)
32
32
  outlets = 2; // 0: to udpsend (responses), 1: to buffer~/status
33
33
 
34
+ // Single source of truth for the bridge version — bumped alongside the
35
+ // rest of the release manifest. Surfaced in the UI via messnamed("livepilot_version", ...)
36
+ // so the frozen .amxd visibly reports which build it was last exported from.
37
+ var VERSION = "1.17.5";
38
+
34
39
  // ── State ──────────────────────────────────────────────────────────────────
35
40
 
36
41
  var cursor_a = null; // Primary LiveAPI cursor
@@ -95,7 +100,13 @@ function anything() {
95
100
  function dispatch(cmd, args) {
96
101
  switch(cmd) {
97
102
  case "ping":
98
- send_response({"ok": true, "version": "1.17.5"});
103
+ send_response({"ok": true, "version": VERSION});
104
+ break;
105
+ case "get_version":
106
+ // Side-channel for the UI label — emits on the "livepilot_version"
107
+ // named bus so a [r livepilot_version] in the patcher can set a
108
+ // [comment] without touching the OSC response outlet.
109
+ messnamed("livepilot_version", VERSION);
99
110
  break;
100
111
  case "get_params":
101
112
  cmd_get_params(args);
@@ -1,2 +1,2 @@
1
1
  """LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
2
- __version__ = "1.17.5"
2
+ __version__ = "1.18.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.17.5",
3
+ "version": "1.18.0",
4
4
  "mcpName": "io.github.dreamrec/livepilot",
5
5
  "description": "Agentic production system for Ableton Live 12 — 427 tools, 52 domains. Device atlas (1305 devices), sample engine (Splice + browser + filesystem), auto-composition, spectral perception, technique memory, creative intelligence (12 engines)",
6
6
  "author": "Pilot Studio",
@@ -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.17.5"
8
+ __version__ = "1.18.0"
9
9
 
10
10
  from _Framework.ControlSurface import ControlSurface
11
11
  from . import router
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/dreamrec/LivePilot",
7
7
  "source": "github"
8
8
  },
9
- "version": "1.17.5",
9
+ "version": "1.18.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "livepilot",
14
- "version": "1.17.5",
14
+ "version": "1.18.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  }