livepilot 1.10.0 → 1.10.1

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.
Files changed (53) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/AGENTS.md +3 -3
  3. package/CHANGELOG.md +150 -0
  4. package/CONTRIBUTING.md +2 -2
  5. package/LICENSE +62 -21
  6. package/README.md +264 -286
  7. package/livepilot/.Codex-plugin/plugin.json +2 -2
  8. package/livepilot/.claude-plugin/plugin.json +2 -2
  9. package/livepilot/skills/livepilot-arrangement/SKILL.md +18 -1
  10. package/livepilot/skills/livepilot-core/SKILL.md +5 -5
  11. package/livepilot/skills/livepilot-core/references/overview.md +3 -3
  12. package/livepilot/skills/livepilot-devices/SKILL.md +23 -2
  13. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
  14. package/livepilot/skills/livepilot-release/SKILL.md +21 -17
  15. package/livepilot/skills/livepilot-sample-engine/SKILL.md +2 -1
  16. package/livepilot/skills/livepilot-wonder/SKILL.md +8 -6
  17. package/livepilot.mcpb +0 -0
  18. package/m4l_device/livepilot_bridge.js +1 -1
  19. package/manifest.json +4 -4
  20. package/mcp_server/__init__.py +1 -1
  21. package/mcp_server/composer/engine.py +249 -169
  22. package/mcp_server/composer/sample_resolver.py +153 -0
  23. package/mcp_server/composer/tools.py +97 -87
  24. package/mcp_server/memory/taste_accessors.py +47 -0
  25. package/mcp_server/preview_studio/engine.py +9 -2
  26. package/mcp_server/preview_studio/tools.py +78 -35
  27. package/mcp_server/project_brain/tools.py +34 -0
  28. package/mcp_server/runtime/execution_router.py +180 -38
  29. package/mcp_server/runtime/mcp_dispatch.py +46 -0
  30. package/mcp_server/runtime/remote_commands.py +4 -1
  31. package/mcp_server/runtime/tools.py +55 -32
  32. package/mcp_server/sample_engine/moves.py +12 -12
  33. package/mcp_server/sample_engine/slice_workflow.py +190 -0
  34. package/mcp_server/sample_engine/tools.py +104 -1
  35. package/mcp_server/semantic_moves/device_creation_moves.py +7 -7
  36. package/mcp_server/semantic_moves/mix_moves.py +8 -8
  37. package/mcp_server/semantic_moves/models.py +7 -7
  38. package/mcp_server/semantic_moves/performance_moves.py +4 -4
  39. package/mcp_server/semantic_moves/sample_compilers.py +14 -9
  40. package/mcp_server/semantic_moves/sound_design_moves.py +4 -4
  41. package/mcp_server/semantic_moves/tools.py +63 -10
  42. package/mcp_server/semantic_moves/transition_moves.py +4 -4
  43. package/mcp_server/server.py +20 -1
  44. package/mcp_server/session_continuity/tracker.py +4 -1
  45. package/mcp_server/tools/_conductor.py +16 -0
  46. package/mcp_server/tools/_planner_engine.py +24 -0
  47. package/mcp_server/tools/analyzer.py +2 -0
  48. package/mcp_server/tools/planner.py +3 -0
  49. package/mcp_server/wonder_mode/engine.py +59 -13
  50. package/mcp_server/wonder_mode/tools.py +33 -1
  51. package/package.json +8 -8
  52. package/remote_script/LivePilot/__init__.py +1 -1
  53. package/remote_script/LivePilot/devices.py +10 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
3
  "name": "dreamrec-LivePilot",
4
- "description": "Agentic MCP production system for Ableton Live 12 — 316 tools, 43 domains",
4
+ "description": "Agentic MCP production system for Ableton Live 12 — 317 tools, 43 domains",
5
5
  "owner": {
6
6
  "name": "dreamrec",
7
7
  "email": "dreamrec@users.noreply.github.com"
@@ -9,8 +9,8 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "livepilot",
12
- "description": "Agentic production system for Ableton Live 12 — 316 tools, 43 domains, device atlas, spectral perception, technique memory, sample intelligence, auto-composition, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
13
- "version": "1.10.0",
12
+ "description": "Agentic production system for Ableton Live 12 — 317 tools, 43 domains, device atlas, spectral perception, technique memory, sample intelligence, auto-composition, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
13
+ "version": "1.10.1",
14
14
  "author": {
15
15
  "name": "Pilot Studio"
16
16
  },
package/AGENTS.md CHANGED
@@ -1,4 +1,4 @@
1
- # LivePilot v1.10.0 — Ableton Live 12
1
+ # LivePilot v1.10.1 — Ableton Live 12
2
2
 
3
3
  ## Project
4
4
  - **Repo:** This directory (LivePilot)
@@ -22,7 +22,7 @@
22
22
  ## Key Rules
23
23
  - ALL Live Object Model (LOM) calls must execute on Ableton's main thread via schedule_message queue
24
24
  - Live 12 minimum — use modern note API (add_new_notes, get_notes_extended, apply_note_modifications)
25
- - 316 tools across 43 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine, song_brain, preview_studio, hook_hunter, stuckness_detector, wonder_mode, session_continuity, creative_constraints, device_forge, sample_engine, atlas, composer
25
+ - 317 tools across 43 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine, song_brain, preview_studio, hook_hunter, stuckness_detector, wonder_mode, session_continuity, creative_constraints, device_forge, sample_engine, atlas, composer
26
26
  - JSON over TCP, newline-delimited, port 9878
27
27
  - Structured errors with codes: INDEX_ERROR, NOT_FOUND, INVALID_PARAM, STATE_ERROR, TIMEOUT, INTERNAL
28
28
 
@@ -43,4 +43,4 @@ When modifying .amxd attributes that Max editor won't persist (e.g., `openinpres
43
43
  4. Structure: 24-byte `ampf` header + `ptch` chunk + `mx@c` header + JSON patcher + frozen deps
44
44
 
45
45
  ## Tool Count
46
- Currently 316 tools. If adding/removing tools, update: README.md, package.json description, livepilot/.Codex-plugin/plugin.json, livepilot/.claude-plugin/plugin.json, server.json, livepilot/skills/livepilot-core/SKILL.md, livepilot/skills/livepilot-core/references/overview.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, tests/test_tools_contract.py, docs/manual/index.md, docs/manual/tool-reference.md
46
+ Currently 317 tools. If adding/removing tools, update: README.md, package.json description, livepilot/.Codex-plugin/plugin.json, livepilot/.claude-plugin/plugin.json, server.json, livepilot/skills/livepilot-core/SKILL.md, livepilot/skills/livepilot-core/references/overview.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, tests/test_tools_contract.py, docs/manual/index.md, docs/manual/tool-reference.md
package/CHANGELOG.md CHANGED
@@ -1,5 +1,155 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.10.1 — Orchestration Hardening (April 14 2026)
4
+
5
+ Pure correctness pass on the execution substrate. No new public tools,
6
+ no renames, no tool count change. Thirteen commits across thirteen phases
7
+ (nine Phase 1 + four Phase 2). All new response fields are additive.
8
+
9
+ **Test results:** 1690 → **1740 passing** (+50 net, +56 new tests, −6 sync-to-async
10
+ rewrites). No regressions.
11
+
12
+ **Known carryover:** `m4l_device/LivePilot_Analyzer.amxd` is lagging —
13
+ its embedded JS is frozen at v1.9.14 while the repo source is at v1.10.1.
14
+ This is a pre-existing drift (1.10.0 shipped the same stale .amxd). The
15
+ Python/JS source in the repo is current; re-export from Max for Live at
16
+ your convenience to pick up `get_selected` ID-matching and 4-byte UTF-8
17
+ decoding in the embedded JS.
18
+
19
+ ### Fixed
20
+ - **Execution router: `load_sample_to_simpler` reclassified as MCP tool.** It
21
+ was wrongly declared in `BRIDGE_COMMANDS` despite being an async Python
22
+ function with no JS dispatch case. All six sample-family semantic moves
23
+ that compiled this step now classify it correctly. Backend annotations
24
+ in `mcp_server/sample_engine/moves.py` updated to match.
25
+ - **Execution router: dedupe `capture_audio` classification.** Removed the
26
+ dead entry from `MCP_TOOLS` — `capture_audio` lives in `BRIDGE_COMMANDS`
27
+ and is handled by `livepilot_bridge.js`.
28
+ - **Execution router: async-only substrate.** `execute_step` and
29
+ `execute_plan_steps` (the sync path) are **deleted**. The only surviving
30
+ entry point is `execute_plan_steps_async`. `apply_semantic_move` and
31
+ `render_preview_variant` both became `async def` and dispatch through the
32
+ async router. The dead sync path was the last place where a plan could
33
+ silently produce steps that only worked on one transport.
34
+ - **Bridge dispatch unpacks params positionally.** Latent bug in the Phase 1
35
+ async router: it passed the whole params dict as a single arg to
36
+ `bridge.send_command`, which would have OSC-encoded the dict and failed on
37
+ the real M4L bridge. Fixed in Phase 2 to unpack via `*list(params.values())` —
38
+ plan authors construct params in the order the bridge command expects.
39
+ - **Preview Studio: `render_preview_variant` captures audible preview BEFORE
40
+ undo.** The function previously ran undo in a `finally` block that
41
+ executed before the "audible preview" section, so `preview_mode =
42
+ "audible_preview"` was a lie — it captured pre-variant audio. Now
43
+ restructured as: capture-before → apply → capture-after → play+sample
44
+ while variant is applied → stop playback → undo applied steps. Callers
45
+ can trust the `audible_preview` label.
46
+ - **SessionKernel: shares `ctx.lifespan_context` memory stores and fixes
47
+ silent method-name bugs.** `get_session_kernel` used to instantiate fresh
48
+ `TasteMemoryStore`, `AntiMemoryStore`, and `SessionMemoryStore` and call
49
+ `list_all()` / `recent()` (neither method exists), all wrapped in silent
50
+ `try/except: pass`. Users who recorded anti-preferences or session memory
51
+ via the public tools always saw an empty kernel. Now reuses stores the
52
+ same way `mcp_server/memory/tools.py` does, calls the correct methods
53
+ (`get_anti_preferences`, `get_recent`), and surfaces store-load failures
54
+ in a non-breaking `warnings` field.
55
+ - **Taste graph shape normalized across consumers.** Both
56
+ `preview_studio/engine.py:_estimate_taste_fit` and
57
+ `session_continuity/tracker.py` read `taste_graph.get("transition_boldness")`,
58
+ but the canonical `TasteGraph.to_dict()` puts it under `dimension_weights`.
59
+ Both consumers silently defaulted to 0.5, ignoring recorded user taste.
60
+ New `mcp_server/memory/taste_accessors.get_dimension_pref` helper reads
61
+ all three observed shapes; both consumers route through it.
62
+ - **Composer: plans are executable, not aspirational.** `compose()` and
63
+ `augment_with_samples()` used to emit pseudo-tools
64
+ (`_agent_pick_best_sample`, `_apply_technique`), placeholder strings
65
+ (`{downloaded_path}`), invalid sentinels (`device_index: -1`,
66
+ `track_index: -1`), and hardcoded `clip_slot_index: 0` on newly-created
67
+ empty tracks. Plans are now rebuilt via `sample_resolver.resolve_sample_for_layer`
68
+ at plan time. Unresolved layers are kept in the descriptive `layers`
69
+ output and surfaced in `warnings`, but dropped from `plan`. Processing
70
+ chains use `step_id` + `$from_step` bindings to resolve `device_index`
71
+ from `insert_device` results at execution time.
72
+ - **Composer: arrangement clips finally work.** Re-enabled the arrangement
73
+ emission path that was stubbed in Phase 7. Each resolved layer now emits
74
+ `create_clip` → `add_notes` (C3 trigger) → `create_arrangement_clip` per
75
+ section, tiling a 1-bar source clip across each section's bar count.
76
+ Simpler in classic mode plays the full sample on every trigger, so the
77
+ minimal pattern produces a playable baseline; the agent can replace it
78
+ with a more musical pattern via `suggest_sample_technique` recipes later.
79
+ Example: a techno prompt with one resolved sample now produces a 65-step
80
+ plan with 5 arrangement clips tiling Intro / Build / Drop / Drop 2 / Outro.
81
+ - **ProjectBrain: `build_project_brain` fetches notes for role inference.**
82
+ The tool never called `get_notes`, so `build_project_state_from_data`
83
+ always ran with an empty `notes_map`, forcing `role_graph` into the
84
+ "assume all tracks active in every section" fallback — destroying the
85
+ section-scoped role confidence RoleGraph was supposed to compute.
86
+
87
+ ### Added
88
+ - **Async execution router with step-result binding** —
89
+ `mcp_server/runtime/execution_router.execute_plan_steps_async` dispatches
90
+ `remote_command`, `bridge_command`, and `mcp_tool` backends through their
91
+ correct transports. Supports step-result binding via
92
+ `{"$from_step": "<id>", "path": "a.b"}` on any param.
93
+ - **MCP dispatch registry** — `mcp_server/runtime/mcp_dispatch.py` registers
94
+ in-process Python tools (starting with `load_sample_to_simpler`) so plans
95
+ can invoke them through the async router. Lifespan-installed at startup
96
+ alongside `ableton`, `spectral`, `m4l`, and `splice_client`.
97
+ - **Splice remote download workflow in composer.** `sample_resolver` extended
98
+ with `splice_local` and `splice_remote` sources. Resolution order:
99
+ `filesystem > splice_local > splice_remote > browser`. Filesystem wins
100
+ even when Splice has a hit (local files are free). Splice remote downloads
101
+ cost 1 credit each and respect the 5-credit hard floor via
102
+ `splice_client.can_afford(1, budget)` — the floor check is upfront so
103
+ the resolver fails fast rather than thrashing per-layer.
104
+ - **`SpliceGRPCClient` wired into server lifespan.** `ctx.lifespan_context["splice_client"]`
105
+ is now populated at startup. Graceful degradation: if grpcio is missing,
106
+ Splice desktop isn't running, or the cert can't be read, `splice_client.connected`
107
+ stays False and the resolver treats it as "no splice hits".
108
+ - **Composer credit-safety prelude.** New `_credit_safety_prelude()` helper
109
+ in `composer/tools.py` runs once per compose/augment call: checks credits
110
+ remaining, trims `max_credits` to respect the floor, returns a warnings
111
+ list the tool merges into the plan output. No per-layer credit thrashing.
112
+ - **Additive return fields** (no breaking changes to existing callers):
113
+ - `insert_device.device_index` — actual index of the inserted device in
114
+ its chain/track. Composer plans bind to it.
115
+ - `load_sample_to_simpler.device_index` and `.track_index` — the real
116
+ Simpler position (was previously computed internally but not returned).
117
+ - `preview_semantic_move.compiled_plan` and `.compiled_plan_executable` —
118
+ the move compiled against a lightweight current-session kernel,
119
+ alongside the existing static `plan_template`.
120
+ - `get_session_kernel.warnings` — surfaced when memory/taste stores fail
121
+ to load. Additive, callers can ignore.
122
+ - **`mcp_server/composer/sample_resolver.py`** — async sample resolver with
123
+ filesystem-first preference, splice_local/remote hooks, and browser fallback.
124
+ - **`mcp_server/memory/taste_accessors.get_dimension_pref`** — canonical
125
+ reader for taste-graph dimension preferences. All new consumers must
126
+ use it.
127
+ - **Bridge parity test** — `tests/test_bridge_parity.py` compares Python
128
+ `BRIDGE_COMMANDS` against the `case` labels in
129
+ `m4l_device/livepilot_bridge.js`. Catches future misclassification drift.
130
+
131
+ ### Changed (internal, no public tool changes)
132
+ - **`ComposerEngine.compose`, `augment`, and `get_plan` are async.** Sample
133
+ resolution may now hit the network (Splice download), so the whole compose
134
+ chain awaits. No production callers outside `composer/tools.py`; tests use
135
+ `asyncio.run(...)` wrappers.
136
+ - **`CompositionResult.resolved_samples` shape changed** from
137
+ `{role: path_str}` to `{role: {"path": str, "source": str}}` — callers
138
+ can now tell filesystem vs splice_local vs splice_remote hits apart.
139
+
140
+ ### Tests
141
+ - Router suite: 23/23 (async-only; 6 legacy sync tests rewritten as async)
142
+ - Composer resolver suite: 13/13 (7 filesystem + 6 splice paths)
143
+ - Composer engine suite: 14/14 (9 Phase 7 + 5 Phase 2B arrangement contracts)
144
+ - Project brain suite: 47/47 (+2 Phase 8 notes_map regression)
145
+ - Preview studio suite: 17/17 (+1 ordering regression)
146
+ - Session kernel suite: 11/11 (+3 hydration regression)
147
+ - Taste accessors suite: 9/9 (new in Phase 3)
148
+ - Bridge parity suite: 2/2 (new in Phase 9)
149
+ - **Full repo: 1740 passed, 1 skipped** (up from 1690)
150
+
151
+ ---
152
+
3
153
  ## 1.10.0 — The Intelligence Release (April 13 2026)
4
154
 
5
155
  316 tools across 43 domains. Device Atlas v2, Sample Intelligence, Auto-Composition, Splice Integration, Device Forge, Live 12.3 API, Corpus Intelligence.
package/CONTRIBUTING.md CHANGED
@@ -98,7 +98,7 @@ Prefix with `fix:`, `feat:`, `docs:`, `refactor:`, `test:`, or `chore:`.
98
98
 
99
99
  ## Tool Count Discipline
100
100
 
101
- Currently **316 tools**. If you add or remove a `@mcp.tool()` decorator, update all of these files:
101
+ Currently **317 tools**. If you add or remove a `@mcp.tool()` decorator, update all of these files:
102
102
 
103
103
  - `README.md`
104
104
  - `CLAUDE.md`
@@ -128,4 +128,4 @@ By participating, you agree to uphold this code.
128
128
 
129
129
  ## License
130
130
 
131
- By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
131
+ By contributing, you agree that your contributions will be licensed under the [Business Source License 1.1](LICENSE).
package/LICENSE CHANGED
@@ -1,21 +1,62 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Pilot Studio
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ Business Source License 1.1
2
+
3
+ Parameters
4
+
5
+ Licensor: Pilot Studio
6
+ Licensed Work: LivePilot 1.10.0
7
+ The Licensed Work is (c) 2026 Pilot Studio.
8
+ Additional Use Grant: You may make production use of the Licensed Work,
9
+ provided your use does not include offering it as a
10
+ commercial hosted service to third parties.
11
+ Change Date: April 13, 2030
12
+ Change License: MIT License
13
+
14
+ Notice
15
+
16
+ The Business Source License (this document, or the "License") is not an
17
+ Open Source license. However, the Licensed Work will eventually be made
18
+ available under the Change License, on the Change Date. License text
19
+ below is the full BSL 1.1 text from MariaDB BSL version.
20
+
21
+ Terms
22
+
23
+ The Licensor hereby grants you the right to copy, modify, create
24
+ derivative works, redistribute, and make non-production use of the
25
+ Licensed Work. The Licensor may make an Additional Use Grant, above,
26
+ permitting limited production use.
27
+
28
+ Effective on the Change Date, or the fourth anniversary of the first
29
+ publicly available distribution of a specific version of the Licensed
30
+ Work under this License, whichever comes first, the Licensor hereby
31
+ grants you rights under the terms of the Change License, and the rights
32
+ granted in the paragraph above terminate.
33
+
34
+ If your use of the Licensed Work does not comply with the requirements
35
+ currently in effect as described in this License, you must purchase a
36
+ commercial license from the Licensor, its affiliated entities, or
37
+ authorized resellers, or you must refrain from using the Licensed Work.
38
+
39
+ All copies of the original and modified Licensed Work, and derivative
40
+ works of the Licensed Work, are subject to this License. This License
41
+ applies separately for each version of the Licensed Work and the Change
42
+ Date may vary for each version of the Licensed Work released by
43
+ Licensor.
44
+
45
+ You must conspicuously display this License on each original or modified
46
+ copy of the Licensed Work. If you receive the Licensed Work in original
47
+ or modified form from a third party, the terms and conditions set forth
48
+ in this License apply to your use of that work.
49
+
50
+ Any use of the Licensed Work in violation of this License will
51
+ automatically terminate your rights under this License for the current
52
+ and all other versions of the Licensed Work.
53
+
54
+ This License does not grant you any right in any trademark or logo of
55
+ Licensor or its affiliates (provided that you may use a trademark or
56
+ logo of Licensor as expressly required by this License).
57
+
58
+ TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS
59
+ PROVIDED ON AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES
60
+ AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION)
61
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
62
+ NON-INFRINGEMENT, AND TITLE.