livepilot 1.9.23 → 1.10.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/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +3 -3
- package/CHANGELOG.md +119 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +144 -13
- package/bin/livepilot.js +87 -0
- package/installer/codex.js +147 -0
- package/livepilot/.Codex-plugin/plugin.json +2 -2
- package/livepilot/.claude-plugin/plugin.json +2 -2
- package/livepilot/skills/livepilot-core/SKILL.md +21 -4
- package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
- package/livepilot/skills/livepilot-core/references/overview.md +13 -9
- package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
- package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
- package/livepilot/skills/livepilot-devices/SKILL.md +16 -2
- package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
- package/livepilot/skills/livepilot-release/SKILL.md +19 -5
- package/livepilot/skills/livepilot-sample-engine/SKILL.md +104 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
- package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +45 -0
- package/livepilot/skills/livepilot-wonder/SKILL.md +15 -0
- package/livepilot.mcpb +0 -0
- package/m4l_device/livepilot_bridge.js +1 -1
- package/manifest.json +2 -2
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/atlas/__init__.py +357 -0
- package/mcp_server/atlas/device_atlas.json +44067 -0
- package/mcp_server/atlas/enrichments/__init__.py +111 -0
- package/mcp_server/atlas/enrichments/audio_effects/auto_filter.yaml +162 -0
- package/mcp_server/atlas/enrichments/audio_effects/beat_repeat.yaml +183 -0
- package/mcp_server/atlas/enrichments/audio_effects/channel_eq.yaml +126 -0
- package/mcp_server/atlas/enrichments/audio_effects/chorus_ensemble.yaml +149 -0
- package/mcp_server/atlas/enrichments/audio_effects/color_limiter.yaml +109 -0
- package/mcp_server/atlas/enrichments/audio_effects/compressor.yaml +159 -0
- package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb.yaml +143 -0
- package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb_pro.yaml +178 -0
- package/mcp_server/atlas/enrichments/audio_effects/delay.yaml +151 -0
- package/mcp_server/atlas/enrichments/audio_effects/drum_buss.yaml +142 -0
- package/mcp_server/atlas/enrichments/audio_effects/dynamic_tube.yaml +147 -0
- package/mcp_server/atlas/enrichments/audio_effects/echo.yaml +167 -0
- package/mcp_server/atlas/enrichments/audio_effects/eq_eight.yaml +148 -0
- package/mcp_server/atlas/enrichments/audio_effects/eq_three.yaml +121 -0
- package/mcp_server/atlas/enrichments/audio_effects/erosion.yaml +103 -0
- package/mcp_server/atlas/enrichments/audio_effects/filter_delay.yaml +173 -0
- package/mcp_server/atlas/enrichments/audio_effects/gate.yaml +130 -0
- package/mcp_server/atlas/enrichments/audio_effects/gated_delay.yaml +133 -0
- package/mcp_server/atlas/enrichments/audio_effects/glue_compressor.yaml +142 -0
- package/mcp_server/atlas/enrichments/audio_effects/grain_delay.yaml +141 -0
- package/mcp_server/atlas/enrichments/audio_effects/hybrid_reverb.yaml +160 -0
- package/mcp_server/atlas/enrichments/audio_effects/limiter.yaml +97 -0
- package/mcp_server/atlas/enrichments/audio_effects/multiband_dynamics.yaml +174 -0
- package/mcp_server/atlas/enrichments/audio_effects/overdrive.yaml +119 -0
- package/mcp_server/atlas/enrichments/audio_effects/pedal.yaml +145 -0
- package/mcp_server/atlas/enrichments/audio_effects/phaser_flanger.yaml +161 -0
- package/mcp_server/atlas/enrichments/audio_effects/redux.yaml +114 -0
- package/mcp_server/atlas/enrichments/audio_effects/reverb.yaml +190 -0
- package/mcp_server/atlas/enrichments/audio_effects/roar.yaml +159 -0
- package/mcp_server/atlas/enrichments/audio_effects/saturator.yaml +146 -0
- package/mcp_server/atlas/enrichments/audio_effects/shifter.yaml +154 -0
- package/mcp_server/atlas/enrichments/audio_effects/spectral_resonator.yaml +141 -0
- package/mcp_server/atlas/enrichments/audio_effects/spectral_time.yaml +164 -0
- package/mcp_server/atlas/enrichments/audio_effects/vector_delay.yaml +140 -0
- package/mcp_server/atlas/enrichments/audio_effects/vinyl_distortion.yaml +141 -0
- package/mcp_server/atlas/enrichments/instruments/analog.yaml +222 -0
- package/mcp_server/atlas/enrichments/instruments/bass.yaml +202 -0
- package/mcp_server/atlas/enrichments/instruments/collision.yaml +150 -0
- package/mcp_server/atlas/enrichments/instruments/drift.yaml +167 -0
- package/mcp_server/atlas/enrichments/instruments/electric.yaml +137 -0
- package/mcp_server/atlas/enrichments/instruments/emit.yaml +163 -0
- package/mcp_server/atlas/enrichments/instruments/meld.yaml +164 -0
- package/mcp_server/atlas/enrichments/instruments/operator.yaml +197 -0
- package/mcp_server/atlas/enrichments/instruments/poli.yaml +192 -0
- package/mcp_server/atlas/enrichments/instruments/sampler.yaml +218 -0
- package/mcp_server/atlas/enrichments/instruments/simpler.yaml +217 -0
- package/mcp_server/atlas/enrichments/instruments/tension.yaml +156 -0
- package/mcp_server/atlas/enrichments/instruments/tree_tone.yaml +162 -0
- package/mcp_server/atlas/enrichments/instruments/vector_fm.yaml +165 -0
- package/mcp_server/atlas/enrichments/instruments/vector_grain.yaml +166 -0
- package/mcp_server/atlas/enrichments/instruments/wavetable.yaml +162 -0
- package/mcp_server/atlas/enrichments/midi_effects/arpeggiator.yaml +156 -0
- package/mcp_server/atlas/enrichments/midi_effects/bouncy_notes.yaml +93 -0
- package/mcp_server/atlas/enrichments/midi_effects/chord.yaml +147 -0
- package/mcp_server/atlas/enrichments/midi_effects/melodic_steps.yaml +97 -0
- package/mcp_server/atlas/enrichments/midi_effects/note_echo.yaml +108 -0
- package/mcp_server/atlas/enrichments/midi_effects/note_length.yaml +97 -0
- package/mcp_server/atlas/enrichments/midi_effects/pitch.yaml +76 -0
- package/mcp_server/atlas/enrichments/midi_effects/random.yaml +117 -0
- package/mcp_server/atlas/enrichments/midi_effects/rhythmic_steps.yaml +103 -0
- package/mcp_server/atlas/enrichments/midi_effects/scale.yaml +83 -0
- package/mcp_server/atlas/enrichments/midi_effects/step_arp.yaml +112 -0
- package/mcp_server/atlas/enrichments/midi_effects/velocity.yaml +119 -0
- package/mcp_server/atlas/enrichments/utility/amp.yaml +159 -0
- package/mcp_server/atlas/enrichments/utility/cabinet.yaml +109 -0
- package/mcp_server/atlas/enrichments/utility/corpus.yaml +150 -0
- package/mcp_server/atlas/enrichments/utility/resonators.yaml +131 -0
- package/mcp_server/atlas/enrichments/utility/spectrum.yaml +63 -0
- package/mcp_server/atlas/enrichments/utility/tuner.yaml +51 -0
- package/mcp_server/atlas/enrichments/utility/utility.yaml +136 -0
- package/mcp_server/atlas/enrichments/utility/vocoder.yaml +160 -0
- package/mcp_server/atlas/scanner.py +236 -0
- package/mcp_server/atlas/tools.py +224 -0
- package/mcp_server/composer/__init__.py +1 -0
- package/mcp_server/composer/engine.py +452 -0
- package/mcp_server/composer/layer_planner.py +427 -0
- package/mcp_server/composer/prompt_parser.py +329 -0
- package/mcp_server/composer/tools.py +201 -0
- package/mcp_server/connection.py +53 -8
- package/mcp_server/corpus/__init__.py +377 -0
- package/mcp_server/device_forge/__init__.py +1 -0
- package/mcp_server/device_forge/builder.py +377 -0
- package/mcp_server/device_forge/models.py +142 -0
- package/mcp_server/device_forge/templates.py +483 -0
- package/mcp_server/device_forge/tools.py +162 -0
- package/mcp_server/hook_hunter/analyzer.py +23 -0
- package/mcp_server/hook_hunter/models.py +1 -0
- package/mcp_server/hook_hunter/tools.py +4 -2
- package/mcp_server/m4l_bridge.py +1 -0
- package/mcp_server/memory/taste_graph.py +68 -1
- package/mcp_server/memory/tools.py +15 -4
- package/mcp_server/musical_intelligence/detectors.py +14 -1
- package/mcp_server/musical_intelligence/tools.py +11 -8
- package/mcp_server/persistence/__init__.py +1 -0
- package/mcp_server/persistence/base_store.py +82 -0
- package/mcp_server/persistence/project_store.py +106 -0
- package/mcp_server/persistence/taste_store.py +122 -0
- package/mcp_server/preview_studio/models.py +1 -0
- package/mcp_server/preview_studio/tools.py +56 -13
- package/mcp_server/runtime/capability.py +66 -0
- package/mcp_server/runtime/capability_probe.py +137 -0
- package/mcp_server/runtime/execution_router.py +143 -0
- package/mcp_server/runtime/live_version.py +102 -0
- package/mcp_server/runtime/remote_commands.py +87 -0
- package/mcp_server/runtime/tools.py +18 -4
- package/mcp_server/sample_engine/__init__.py +1 -0
- package/mcp_server/sample_engine/analyzer.py +216 -0
- package/mcp_server/sample_engine/critics.py +390 -0
- package/mcp_server/sample_engine/models.py +193 -0
- package/mcp_server/sample_engine/moves.py +127 -0
- package/mcp_server/sample_engine/planner.py +186 -0
- package/mcp_server/sample_engine/sources.py +540 -0
- package/mcp_server/sample_engine/techniques.py +908 -0
- package/mcp_server/sample_engine/tools.py +442 -0
- package/mcp_server/semantic_moves/__init__.py +3 -0
- package/mcp_server/semantic_moves/device_creation_moves.py +237 -0
- package/mcp_server/semantic_moves/mix_moves.py +41 -41
- package/mcp_server/semantic_moves/performance_moves.py +13 -13
- package/mcp_server/semantic_moves/sample_compilers.py +372 -0
- package/mcp_server/semantic_moves/sound_design_moves.py +15 -15
- package/mcp_server/semantic_moves/tools.py +18 -17
- package/mcp_server/semantic_moves/transition_moves.py +16 -16
- package/mcp_server/server.py +51 -0
- package/mcp_server/services/__init__.py +1 -0
- package/mcp_server/services/motif_service.py +67 -0
- package/mcp_server/session_continuity/tracker.py +29 -1
- package/mcp_server/song_brain/builder.py +28 -1
- package/mcp_server/song_brain/models.py +4 -0
- package/mcp_server/song_brain/tools.py +20 -2
- package/mcp_server/sound_design/critics.py +89 -1
- package/mcp_server/splice_client/__init__.py +1 -0
- package/mcp_server/splice_client/client.py +347 -0
- package/mcp_server/splice_client/models.py +96 -0
- package/mcp_server/splice_client/protos/__init__.py +1 -0
- package/mcp_server/splice_client/protos/app_pb2.py +319 -0
- package/mcp_server/splice_client/protos/app_pb2.pyi +1153 -0
- package/mcp_server/splice_client/protos/app_pb2_grpc.py +1946 -0
- package/mcp_server/tools/arrangement.py +69 -0
- package/mcp_server/tools/automation.py +15 -2
- package/mcp_server/tools/devices.py +117 -6
- package/mcp_server/tools/notes.py +37 -4
- package/mcp_server/wonder_mode/diagnosis.py +5 -0
- package/mcp_server/wonder_mode/engine.py +85 -1
- package/mcp_server/wonder_mode/tools.py +6 -1
- package/package.json +12 -2
- package/remote_script/LivePilot/__init__.py +8 -1
- package/remote_script/LivePilot/arrangement.py +114 -0
- package/remote_script/LivePilot/browser.py +56 -1
- package/remote_script/LivePilot/devices.py +236 -6
- package/remote_script/LivePilot/mixing.py +8 -3
- package/remote_script/LivePilot/server.py +5 -1
- package/remote_script/LivePilot/transport.py +3 -0
- package/remote_script/LivePilot/version_detect.py +78 -0
- package/scripts/sync_metadata.py +132 -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 —
|
|
4
|
+
"description": "Agentic MCP production system for Ableton Live 12 — 316 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 —
|
|
13
|
-
"version": "1.
|
|
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",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Pilot Studio"
|
|
16
16
|
},
|
package/AGENTS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# LivePilot v1.
|
|
1
|
+
# LivePilot v1.10.0 — 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
|
-
-
|
|
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
|
|
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
|
|
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
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,124 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.10.0 — The Intelligence Release (April 13 2026)
|
|
4
|
+
|
|
5
|
+
316 tools across 43 domains. Device Atlas v2, Sample Intelligence, Auto-Composition, Splice Integration, Device Forge, Live 12.3 API, Corpus Intelligence.
|
|
6
|
+
|
|
7
|
+
### Device Atlas v2 — 1305 Devices, 81 Enriched (+6 tools)
|
|
8
|
+
- **`atlas_search`** — fuzzy search across all devices by name, sonic character, use case, or genre
|
|
9
|
+
- **`atlas_device_info`** — full knowledge entry for any device — parameters, recipes, gotchas
|
|
10
|
+
- **`atlas_suggest`** — intent-driven recommendation: "warm bass for techno" → Drift + recipe
|
|
11
|
+
- **`atlas_chain_suggest`** — full device chain for a track role: instrument + effects with rationale
|
|
12
|
+
- **`atlas_compare`** — side-by-side comparison of two devices for a given role
|
|
13
|
+
- **`scan_full_library`** — deep browser scan to build/refresh the atlas
|
|
14
|
+
- 32 instruments (16 enriched), 70 audio effects (35 enriched), 23 MIDI effects (12 enriched), 497 M4L devices, 683 drum kits
|
|
15
|
+
- 71 YAML enrichment files with parameter guides, recipes, and production knowledge
|
|
16
|
+
|
|
17
|
+
### Composer Engine — Prompt to Multi-Layer Session (+3 tools)
|
|
18
|
+
- **`compose`** — full multi-layer composition from text prompt ("dark minimal techno 128bpm with industrial textures")
|
|
19
|
+
- **`augment_with_samples`** — add sample-based layers to existing session
|
|
20
|
+
- **`get_composition_plan`** — dry run preview without executing
|
|
21
|
+
- NLP parser extracts genre, mood, tempo, key, energy from free text
|
|
22
|
+
- Layer planner with role templates (drums/bass/lead/pad/texture/vocal)
|
|
23
|
+
- 7 genre defaults: techno, house, hip hop, ambient, drum and bass, trap, lo-fi
|
|
24
|
+
- Credit safety system for Splice integration
|
|
25
|
+
|
|
26
|
+
### Sample Engine — AI Sample Intelligence (+6 tools)
|
|
27
|
+
- **`analyze_sample`**, **`evaluate_sample_fit`**, **`search_samples`**, **`suggest_sample_technique`**, **`plan_sample_workflow`**, **`get_sample_opportunities`**
|
|
28
|
+
- SpliceSource — reads Splice's local sounds.db (read-only) for key, BPM, genre, tags, pack info, popularity
|
|
29
|
+
- BrowserSource + FilesystemSource — Ableton browser and local directory scanning
|
|
30
|
+
- 6-critic fitness battery: key fit, tempo fit, frequency fit, role fit, vibe fit, intent fit
|
|
31
|
+
- 29-technique library: rhythmic (Dilla, Burial, Premier), textural (Paulstretch, granular), melodic (Bon Iver), resampling (Amon Tobin)
|
|
32
|
+
- Dual philosophy: Surgeon (precision integration) vs Alchemist (creative transformation)
|
|
33
|
+
- 6 sample-domain semantic moves for Wonder Mode: chop_rhythm, texture_layer, vocal_ghost, break_layer, resample_destroy, one_shot_accent
|
|
34
|
+
- Sample-aware stuckness diagnosis: no_organic_texture, stale_drums, vocal_processing_monotony, dense_but_static
|
|
35
|
+
|
|
36
|
+
### Splice gRPC Client
|
|
37
|
+
- Live connection to Splice desktop API for downloading new samples
|
|
38
|
+
- Port auto-detected from port.conf, TLS with self-signed certs
|
|
39
|
+
- Credit safety floor (never drain below 5 credits)
|
|
40
|
+
- Graceful degradation when Splice is not running
|
|
41
|
+
|
|
42
|
+
### Device Forge — Programmatic M4L Generation (+3 tools)
|
|
43
|
+
- **`generate_m4l_effect`**, **`list_genexpr_templates`**, **`install_m4l_device`**
|
|
44
|
+
- .amxd binary builder from pure Python (reverse-engineered binary format)
|
|
45
|
+
- gen~ DSP template library: 15 building blocks (Lorenz, Karplus-Strong, wavefolder, FDN reverb, bitcrusher, etc.)
|
|
46
|
+
- 7 device_creation semantic moves for Wonder Mode
|
|
47
|
+
- Safety: auto `clip(out, -1, 1)` on all generated gen~ code
|
|
48
|
+
- Auto-installs to Ableton User Library
|
|
49
|
+
|
|
50
|
+
### Live 12.3 API Integration (+4 tools)
|
|
51
|
+
- **`create_native_arrangement_clip`** — arrangement clips with automation envelope (12.1.10+)
|
|
52
|
+
- **`insert_device`** — insert native device by name, 10x faster than browser (12.3+)
|
|
53
|
+
- **`insert_rack_chain`** — add chains to Instrument/Audio/Drum Racks (12.3+)
|
|
54
|
+
- **`set_drum_chain_note`** — assign MIDI notes to Drum Rack chains (12.3+)
|
|
55
|
+
- Version detection at startup with feature flags via `get_session_info`
|
|
56
|
+
- Three capability tiers: Core (12.0+), Enhanced Arrangement (12.1.10+), Full Intelligence (12.3+)
|
|
57
|
+
- Display values on device parameters (12.2+) — human-readable like "26.0 Hz"
|
|
58
|
+
- `find_and_load_device` auto-routes to `insert_device` on 12.3+ (10x speedup)
|
|
59
|
+
|
|
60
|
+
### Corpus Intelligence Layer
|
|
61
|
+
- Parses device-knowledge markdown into queryable Python structures at runtime
|
|
62
|
+
- EmotionalRecipe, GenreChain, PhysicalModelRecipe, AutomationGesture data types
|
|
63
|
+
- Consumed by Wonder Mode, Sound Design critics, and Composer Engine
|
|
64
|
+
|
|
65
|
+
### Wonder Mode Enhancements
|
|
66
|
+
- Corpus intelligence integration — emotional/genre/material hints in variants
|
|
67
|
+
- Sample-domain diagnosis patterns
|
|
68
|
+
- 13 new semantic moves (6 sample + 7 device creation)
|
|
69
|
+
|
|
70
|
+
### New Domains
|
|
71
|
+
- **atlas** — device knowledge database (6 tools)
|
|
72
|
+
- **composer** — auto-composition engine (3 tools)
|
|
73
|
+
- **sample_engine** — sample intelligence (6 tools)
|
|
74
|
+
- **device_forge** — M4L device generation (3 tools)
|
|
75
|
+
|
|
76
|
+
## 1.9.24 — Stability & Intelligence Upgrade (April 2026)
|
|
77
|
+
|
|
78
|
+
### Truth and Boundaries (Wave 1)
|
|
79
|
+
- **feat(runtime):** Capability contract — every advanced tool reports `full/fallback/analytical_only/unavailable` with confidence scores
|
|
80
|
+
- **feat(runtime):** Command boundary audit — CI catches any `send_command()` targeting a non-existent Remote Script command
|
|
81
|
+
- **fix(song_brain):** `get_motif_graph` now uses pure-Python engine instead of invalid TCP call
|
|
82
|
+
- **fix(hook_hunter):** Same motif routing fix
|
|
83
|
+
- **fix(musical_intelligence):** Same motif routing fix + `analyze_phrase_arc` now calls perception engine directly
|
|
84
|
+
- **fix(memory):** `record_positive_preference` actually updates taste dimensions (was a silent no-op due to key mismatch)
|
|
85
|
+
- **fix(metadata):** AGENTS.md synced to v1.9.23/293 tools, test docstring corrected
|
|
86
|
+
|
|
87
|
+
### Unified Execution Layer (Wave 2)
|
|
88
|
+
- **feat(runtime):** Execution router — classifies steps as `remote_command/bridge_command/mcp_tool/unknown`, dispatches correctly
|
|
89
|
+
- **feat(semantic_moves):** `apply_semantic_move` explore mode uses execution router
|
|
90
|
+
- **feat(preview_studio):** `render_preview_variant` uses execution router
|
|
91
|
+
|
|
92
|
+
### Persistent Memory (Waves 2-3)
|
|
93
|
+
- **feat(persistence):** Base persistent JSON store (atomic write, corruption recovery, thread-safe)
|
|
94
|
+
- **feat(persistence):** Taste store at `~/.livepilot/taste.json` — move outcomes, novelty band, device affinity, anti-preferences survive restart
|
|
95
|
+
- **feat(persistence):** Project store at `~/.livepilot/projects/<hash>/state.json` — threads, turns, Wonder outcomes per song
|
|
96
|
+
- **feat(memory):** TasteGraph.record_move_outcome writes to persistent backing
|
|
97
|
+
- **feat(session_continuity):** tracker flushes threads and turns to project store on write
|
|
98
|
+
|
|
99
|
+
### Move Annotations (Wave 3)
|
|
100
|
+
- **feat(semantic_moves):** All 20 moves annotated with explicit `backend` per compile_plan step
|
|
101
|
+
- **test:** Static audit verifies all annotations match the execution router classifier
|
|
102
|
+
|
|
103
|
+
### Intelligence Upgrade (Waves 3-4)
|
|
104
|
+
- **feat(services):** Shared motif service — one entry point consumed by SongBrain, HookHunter, musical_intelligence
|
|
105
|
+
- **feat(song_brain):** Evidence-weighted identity confidence (motif=0.4, composition=0.2, roles=0.15, scenes=0.15, moves=0.1)
|
|
106
|
+
- **feat(song_brain):** `evidence_breakdown` field shows per-source contributions
|
|
107
|
+
- **feat(hook_hunter):** Hooks carry `evidence_sources` (motif_recurrence, track_name, clip_reuse)
|
|
108
|
+
- **feat(hook_hunter):** Section-placement analysis boosts hooks recurring across sections
|
|
109
|
+
- **feat(detectors):** Motif appearing in >60% of sections triggers fatigue signal
|
|
110
|
+
|
|
111
|
+
### Preview and Doctor (Wave 4)
|
|
112
|
+
- **feat(preview_studio):** Three explicit preview modes: `audible_preview` (M4L+spectrum), `metadata_only_preview`, `analytical_preview`
|
|
113
|
+
- **feat(preview_studio):** `bars` parameter used for audible preview playback duration
|
|
114
|
+
- **feat(preview_studio):** `preview_mode` field in response — no ambiguity about what was measured
|
|
115
|
+
- **feat(runtime):** Capability probe — 6-area runtime detection (Ableton, Remote Script, M4L, numpy, persistence, tier)
|
|
116
|
+
|
|
117
|
+
### Release Infrastructure (Wave 5)
|
|
118
|
+
- **feat(scripts):** `sync_metadata.py` — single source of truth for version and tool count, CI-checkable
|
|
119
|
+
- **docs:** README Intelligence Layer section with all 12 engines described
|
|
120
|
+
- **docs:** Manual index rewritten with three-layer architecture and 39-domain map
|
|
121
|
+
|
|
3
122
|
## 1.9.23-wonder-v1.5 — Wonder Mode V1.5: Stuck-Rescue Workflow (April 2026)
|
|
4
123
|
|
|
5
124
|
### Wonder Mode Redesign (292->293 tools)
|
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 **
|
|
101
|
+
Currently **316 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`
|
package/README.md
CHANGED
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
<a href="https://www.npmjs.com/package/livepilot"><img src="https://img.shields.io/npm/dm/livepilot?style=flat-square" alt="npm downloads"></a>
|
|
14
14
|
<a href="https://github.com/dreamrec/LivePilot/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dreamrec/LivePilot?style=flat-square" alt="License"></a>
|
|
15
15
|
<a href="https://github.com/dreamrec/LivePilot/releases"><img src="https://img.shields.io/github/v/release/dreamrec/LivePilot?style=flat-square&label=release" alt="Latest Release"></a>
|
|
16
|
+
<a href="https://www.patreon.com/c/dreamrec"><img src="https://img.shields.io/badge/Patreon-Support%20LivePilot-ff424d?style=flat-square&logo=patreon&logoColor=white" alt="Patreon"></a>
|
|
16
17
|
</p>
|
|
17
18
|
|
|
18
19
|
<p align="center">
|
|
19
20
|
An agentic production system for Ableton Live 12.<br>
|
|
20
|
-
|
|
21
|
+
316 tools. Device atlas. Spectral perception. Technique memory.
|
|
21
22
|
</p>
|
|
22
23
|
|
|
23
24
|
<br>
|
|
@@ -37,10 +38,10 @@
|
|
|
37
38
|
│ KNOWLEDGE PERCEPTION MEMORY │
|
|
38
39
|
│ ─────────── ────────── ────── │
|
|
39
40
|
│ │
|
|
40
|
-
│
|
|
41
|
-
│
|
|
42
|
-
│
|
|
43
|
-
│
|
|
41
|
+
│ 1305 devices 8-band FFT recall by │
|
|
42
|
+
│ 81 enriched RMS / peak mood, genre, │
|
|
43
|
+
│ 683 drum kits pitch tracking texture │
|
|
44
|
+
│ Splice catalog key detection │
|
|
44
45
|
│ │
|
|
45
46
|
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
|
46
47
|
│ │ Device │─────▶│ M4L │─────▶│ Technique │ │
|
|
@@ -49,8 +50,8 @@
|
|
|
49
50
|
│ └───────────────────┼───────────────────┘ │
|
|
50
51
|
│ ▼ │
|
|
51
52
|
│ ┌─────────────────┐ │
|
|
52
|
-
│ │
|
|
53
|
-
│ │
|
|
53
|
+
│ │ 316 MCP Tools │ │
|
|
54
|
+
│ │ 43 domains │ │
|
|
54
55
|
│ └────────┬────────┘ │
|
|
55
56
|
│ │ │
|
|
56
57
|
│ Remote Script ──┤── TCP 9878 │
|
|
@@ -71,7 +72,78 @@ via a Max for Live device.
|
|
|
71
72
|
The **memory** gives it history — a searchable library of production decisions
|
|
72
73
|
that persists across sessions.
|
|
73
74
|
|
|
74
|
-
All three feed into
|
|
75
|
+
All three feed into 316 deterministic tools that execute on Ableton's main thread.
|
|
76
|
+
|
|
77
|
+
<br>
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## The Intelligence Layer
|
|
82
|
+
|
|
83
|
+
Most MCP servers are tool collections — they execute commands. LivePilot is an **agentic production system** — it understands what a song is becoming, diagnoses when a session is stuck, generates real creative options, learns from your decisions, and tracks its own impact.
|
|
84
|
+
|
|
85
|
+
This is the V2 intelligence layer: 12 engines that sit on top of the 316 tools and give the AI musical judgment, not just musical execution.
|
|
86
|
+
|
|
87
|
+
### SongBrain — What the Song Is
|
|
88
|
+
|
|
89
|
+
SongBrain builds a real-time model of the current session: what the defining idea is (identity core), what elements must not be casually damaged (sacred elements), what each section is trying to do emotionally (section purposes), and where the energy arc is heading. It answers the question every producer asks: *"What is this track?"*
|
|
90
|
+
|
|
91
|
+
It detects when the song's identity is drifting — when recent edits are pulling the track away from what made it work. When identity confidence is high, the system makes bolder suggestions. When it's fragile, it protects what's there.
|
|
92
|
+
|
|
93
|
+
### Taste Graph — What You Like
|
|
94
|
+
|
|
95
|
+
The Taste Graph learns your production preferences across sessions. Not just "prefers reverb" — it tracks which move families you keep vs. undo (mix moves? arrangement moves?), which devices you gravitate toward, how experimental you want suggestions to be (your novelty band), and which dimensions you actively avoid.
|
|
96
|
+
|
|
97
|
+
Every time you accept or reject a suggestion, the graph updates. Over time, it personalizes which creative options are offered and how they're ranked. Two producers using the same tools get different recommendations.
|
|
98
|
+
|
|
99
|
+
### Semantic Moves — Musical Actions, Not Parameters
|
|
100
|
+
|
|
101
|
+
A semantic move is a high-level musical intent — "add contrast," "tighten the low end," "build tension toward the chorus" — that compiles into a specific sequence of tool calls. The system has 26+ moves across 6 families (mix, arrangement, transition, sound design, sample, device creation), each with an executable plan.
|
|
102
|
+
|
|
103
|
+
Moves carry risk levels, target dimensions, and protection thresholds. "Add a filter sweep build" targets energy and tension while protecting clarity. The AI doesn't just know what to do — it knows what it's risking.
|
|
104
|
+
|
|
105
|
+
### Wonder Mode — Stuck-Rescue Workflow
|
|
106
|
+
|
|
107
|
+
When a session is stuck — too many undos, polishing the same loop, no structural progress — Wonder Mode activates. It's not "surprise me." It's a structured diagnosis-and-rescue workflow:
|
|
108
|
+
|
|
109
|
+
1. **Diagnose** — Why is the session stuck? Repeated undos? Overpolished loop? Missing contrast? Identity unclear? The stuckness detector analyzes the action history and classifies the problem.
|
|
110
|
+
|
|
111
|
+
2. **Generate** — Based on the diagnosis, Wonder searches for semantic moves that address the specific problem. It enforces real distinctness — each variant must differ by move family or execution approach. If only one real option exists, it says so honestly instead of relabeling the same idea three times.
|
|
112
|
+
|
|
113
|
+
3. **Preview** — Each executable variant can be applied, captured, and undone using Ableton's undo system. You hear what each option would actually sound like before committing.
|
|
114
|
+
|
|
115
|
+
4. **Commit or Reject** — Choose one, and the system records it into taste and session continuity. Reject all, and the creative thread stays open for another attempt. No fake outcomes are recorded.
|
|
116
|
+
|
|
117
|
+
### Creative Engines
|
|
118
|
+
|
|
119
|
+
Six specialized engines handle different aspects of production intelligence:
|
|
120
|
+
|
|
121
|
+
| Engine | What it does |
|
|
122
|
+
|--------|-------------|
|
|
123
|
+
| **Mix Engine** | Critic-driven mix analysis. Identifies masking, headroom issues, stereo problems. Plans corrective moves with before/after evaluation. |
|
|
124
|
+
| **Sound Design Engine** | Analyzes patches for static timbre, missing modulation, weak transients. Suggests parameter moves and evaluates the result. |
|
|
125
|
+
| **Transition Engine** | Classifies transition types (drop, build, breakdown). Scores transition quality and plans improvements using archetypes. |
|
|
126
|
+
| **Composition Engine** | Analyzes song structure, detects motifs, infers section purposes, scores emotional arcs. Plans arrangement moves. |
|
|
127
|
+
| **Performance Engine** | Safety-constrained suggestions for live performance. Knows which moves are safe during playback and which risk audio dropouts. |
|
|
128
|
+
| **Reference Engine** | Distills principles from reference tracks. Maps those principles to your current session as concrete, actionable moves. |
|
|
129
|
+
|
|
130
|
+
### Hook Hunter — Finding What Matters
|
|
131
|
+
|
|
132
|
+
The Hook Hunter identifies the most salient musical idea in a session — the element listeners would remember. It ranks candidates by rhythmic distinctiveness, melodic contour, and repetition. Then it tracks whether hooks are being developed, neglected, or undermined by arrangement choices.
|
|
133
|
+
|
|
134
|
+
When the hook is strong but underused, it flags it. When a transition fails to deliver the expected payoff, it diagnoses why.
|
|
135
|
+
|
|
136
|
+
### Session Continuity — The Story of Your Session
|
|
137
|
+
|
|
138
|
+
Session Continuity tracks what happened, what changed, and what's still unresolved. It maintains creative threads (open questions like "the chorus needs more lift") and records turn resolutions (what you tried, whether you kept it, how it affected identity).
|
|
139
|
+
|
|
140
|
+
When you return to a project, the session story tells the AI: *"Last time, you were working on making the bridge darker. You tried three approaches and kept the filter sweep. The chorus lift thread is still open."*
|
|
141
|
+
|
|
142
|
+
### Evaluation Loop — Verify Before Claiming Success
|
|
143
|
+
|
|
144
|
+
Every creative engine follows the same discipline: **measure before, act, measure after, compare**. The evaluation system captures session state snapshots, runs the change, captures again, and scores the difference. If the change made things worse — more masking, lost headroom, identity drift — the system flags it before you move on.
|
|
145
|
+
|
|
146
|
+
This closes the gap between "the AI did something" and "the AI did something that actually helped."
|
|
75
147
|
|
|
76
148
|
<br>
|
|
77
149
|
|
|
@@ -79,7 +151,7 @@ All three feed into 293 deterministic tools that execute on Ableton's main threa
|
|
|
79
151
|
|
|
80
152
|
## Tools
|
|
81
153
|
|
|
82
|
-
|
|
154
|
+
316 tools across 43 domains. Highlights below — [full catalog here](docs/manual/tool-catalog.md).
|
|
83
155
|
|
|
84
156
|
<br>
|
|
85
157
|
|
|
@@ -91,11 +163,11 @@ All three feed into 293 deterministic tools that execute on Ableton's main threa
|
|
|
91
163
|
| Tracks | 17 | create MIDI/audio/return, delete, duplicate, arm, mute, solo, color, freeze, flatten |
|
|
92
164
|
| Clips | 11 | create, delete, duplicate, fire, stop, loop, launch mode, warp mode, quantize |
|
|
93
165
|
| Notes | 8 | add/get/remove/modify MIDI notes, transpose, duplicate, per-note probability |
|
|
94
|
-
| Devices |
|
|
166
|
+
| Devices | 19 | load by name or URI, insert native (12.3+), get/set parameters, batch edit, racks, chains, drum chain note assignment, presets, plugin deep control |
|
|
95
167
|
| Scenes | 12 | create, delete, duplicate, fire, name, color, tempo, scene matrix |
|
|
96
168
|
| Browser | 4 | search library, browse tree, load items, filter by category |
|
|
97
169
|
| Mixing | 11 | volume, pan, sends, routing, meters, return tracks, master, full mix snapshot |
|
|
98
|
-
| Arrangement |
|
|
170
|
+
| Arrangement | 21 | timeline clips, native arrangement clips (12.1.10+), arrangement notes, arrangement automation, recording, cue points |
|
|
99
171
|
|
|
100
172
|
<br>
|
|
101
173
|
|
|
@@ -105,7 +177,7 @@ The M4L Analyzer sits on the master track. UDP 9880 carries spectral data
|
|
|
105
177
|
from Max to the server. OSC 9881 sends commands back.
|
|
106
178
|
|
|
107
179
|
> [!TIP]
|
|
108
|
-
> All
|
|
180
|
+
> All 289 core tools work without the analyzer — it adds 27 bridge tools and closes the feedback loop.
|
|
109
181
|
|
|
110
182
|
```
|
|
111
183
|
SPECTRAL ─────── 8-band frequency decomposition (sub → air)
|
|
@@ -322,7 +394,34 @@ read_audio_metadata Format, duration, sample rate, tags
|
|
|
322
394
|
|
|
323
395
|
<br>
|
|
324
396
|
|
|
325
|
-
|
|
397
|
+
### Agentic Intelligence — 106 tools
|
|
398
|
+
|
|
399
|
+
The V2 intelligence layer. These tools don't just execute commands — they analyze, diagnose, plan, evaluate, and learn.
|
|
400
|
+
|
|
401
|
+
| Domain | # | What it does |
|
|
402
|
+
|--------|:-:|-------------|
|
|
403
|
+
| Agent OS | 8 | session kernel, action ledger, capability state, routing, turn budget |
|
|
404
|
+
| Composition | 9 | section analysis, motif detection, emotional arc, form planning, section transforms |
|
|
405
|
+
| Evaluation | 1 | before/after evaluation with structured scoring |
|
|
406
|
+
| Mix Engine | 6 | critic-driven mix analysis, issue detection, move planning, masking reports |
|
|
407
|
+
| Sound Design | 4 | patch analysis, modulation planning, timbre scoring |
|
|
408
|
+
| Transition Engine | 5 | transition classification, scoring, archetype-based planning |
|
|
409
|
+
| Reference Engine | 5 | reference profiling, principle distillation, gap analysis, move mapping |
|
|
410
|
+
| Translation Engine | 3 | cross-domain translation, issue detection |
|
|
411
|
+
| Performance Engine | 3 | safety-constrained suggestions, safe move lists, scene handoff planning |
|
|
412
|
+
| Song Brain | 3 | identity inference, sacred element detection, drift monitoring |
|
|
413
|
+
| Hook Hunter | 9 | hook detection, salience scoring, development strategies, neglect detection, phrase impact |
|
|
414
|
+
| Stuckness Detector | 3 | momentum analysis, rescue classification, structured rescue workflows |
|
|
415
|
+
| Wonder Mode | 3 | diagnosis-driven variant generation, taste-aware ranking, session discard |
|
|
416
|
+
| Session Continuity | 7 | creative threads, turn resolution, taste vs identity ranking, session story |
|
|
417
|
+
| Creative Constraints | 5 | constraint activation, reference-inspired variants, constrained generation |
|
|
418
|
+
| Preview Studio | 5 | variant creation, preview rendering, comparison, commit, discard |
|
|
419
|
+
| **Device Atlas** | **6** | **search 1305 devices, suggest by intent, chain building, device comparison, library scan** |
|
|
420
|
+
| **Sample Engine** | **6** | **multi-source sample search (Splice/Browser/filesystem), fitness critics, technique library** |
|
|
421
|
+
| **Device Forge** | **3** | **generate M4L devices from gen~ templates, install to browser** |
|
|
422
|
+
| **Composer** | **3** | **prompt → multi-layer composition, sample augmentation, plan preview** |
|
|
423
|
+
|
|
424
|
+
> **[View all 316 tools →](docs/manual/tool-catalog.md)**
|
|
326
425
|
|
|
327
426
|
<br>
|
|
328
427
|
|
|
@@ -372,6 +471,11 @@ claude mcp add LivePilot -- npx livepilot
|
|
|
372
471
|
claude plugin add github:dreamrec/LivePilot/plugin
|
|
373
472
|
```
|
|
374
473
|
|
|
474
|
+
**Codex App:**
|
|
475
|
+
```bash
|
|
476
|
+
npx livepilot --install-codex-plugin
|
|
477
|
+
```
|
|
478
|
+
|
|
375
479
|
**Claude Desktop (macOS)** — `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
376
480
|
```json
|
|
377
481
|
{
|
|
@@ -441,6 +545,17 @@ npx livepilot --status
|
|
|
441
545
|
|
|
442
546
|
## Plugin
|
|
443
547
|
|
|
548
|
+
**Codex App**
|
|
549
|
+
|
|
550
|
+
```bash
|
|
551
|
+
npx livepilot --install-codex-plugin
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
Installs the bundled plugin into `~/plugins/livepilot` and registers it in
|
|
555
|
+
`~/.agents/plugins/marketplace.json`.
|
|
556
|
+
|
|
557
|
+
**Claude Code**
|
|
558
|
+
|
|
444
559
|
```bash
|
|
445
560
|
claude plugin add github:dreamrec/LivePilot/plugin
|
|
446
561
|
```
|
|
@@ -471,6 +586,8 @@ Check memory before creative decisions. Verify every mutation.
|
|
|
471
586
|
npx livepilot # Start MCP server (stdio)
|
|
472
587
|
npx livepilot --install # Install Remote Script
|
|
473
588
|
npx livepilot --uninstall # Remove Remote Script
|
|
589
|
+
npx livepilot --install-codex-plugin # Install bundled Codex plugin
|
|
590
|
+
npx livepilot --uninstall-codex-plugin # Remove bundled Codex plugin
|
|
474
591
|
npx livepilot --status # Check Ableton connection
|
|
475
592
|
npx livepilot --doctor # Full diagnostic check
|
|
476
593
|
npx livepilot --version # Show version
|
|
@@ -518,6 +635,20 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for architecture details, code guidelines
|
|
|
518
635
|
|
|
519
636
|
---
|
|
520
637
|
|
|
638
|
+
## Support
|
|
639
|
+
|
|
640
|
+
LivePilot is free and open source. Building it takes hundreds of hours, an Ableton Suite license, and a Claude subscription. If LivePilot saves you time in your sessions, consider supporting development:
|
|
641
|
+
|
|
642
|
+
<p align="center">
|
|
643
|
+
<a href="https://www.patreon.com/c/dreamrec"><strong>Support on Patreon</strong></a> · <a href="https://github.com/sponsors/dreamrec">GitHub Sponsors</a>
|
|
644
|
+
</p>
|
|
645
|
+
|
|
646
|
+
Supporters get early access to new features, premium skills, curated technique libraries, and direct support.
|
|
647
|
+
|
|
648
|
+
<br>
|
|
649
|
+
|
|
650
|
+
---
|
|
651
|
+
|
|
521
652
|
<p align="center">
|
|
522
653
|
<a href="LICENSE">MIT</a> — Pilot Studio
|
|
523
654
|
<br><br>
|
package/bin/livepilot.js
CHANGED
|
@@ -211,6 +211,45 @@ function checkStatus() {
|
|
|
211
211
|
});
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
+
function probeAnalyzer(venvPy) {
|
|
215
|
+
const probeCode = `
|
|
216
|
+
import asyncio
|
|
217
|
+
import json
|
|
218
|
+
import sys
|
|
219
|
+
from types import SimpleNamespace
|
|
220
|
+
|
|
221
|
+
sys.path.insert(0, ${JSON.stringify(ROOT)})
|
|
222
|
+
|
|
223
|
+
from mcp_server.server import lifespan, _master_has_livepilot_analyzer
|
|
224
|
+
from mcp_server.runtime.capability_probe import probe_capabilities
|
|
225
|
+
|
|
226
|
+
async def main():
|
|
227
|
+
async with lifespan(None) as ctx:
|
|
228
|
+
loaded = _master_has_livepilot_analyzer(ctx["ableton"])
|
|
229
|
+
report = probe_capabilities(
|
|
230
|
+
ableton=ctx["ableton"],
|
|
231
|
+
ctx=SimpleNamespace(lifespan_context=ctx),
|
|
232
|
+
)
|
|
233
|
+
print(json.dumps({
|
|
234
|
+
"loaded_on_master": loaded,
|
|
235
|
+
"m4l_bridge": report["m4l_bridge"],
|
|
236
|
+
"tier": report["tier"]["active"],
|
|
237
|
+
}))
|
|
238
|
+
|
|
239
|
+
asyncio.run(main())
|
|
240
|
+
`;
|
|
241
|
+
|
|
242
|
+
const out = execFileSync(venvPy, ["-c", probeCode], {
|
|
243
|
+
cwd: ROOT,
|
|
244
|
+
encoding: "utf-8",
|
|
245
|
+
timeout: 15000,
|
|
246
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
247
|
+
}).trim();
|
|
248
|
+
|
|
249
|
+
const lines = out.split(/\r?\n/).filter(Boolean);
|
|
250
|
+
return JSON.parse(lines[lines.length - 1]);
|
|
251
|
+
}
|
|
252
|
+
|
|
214
253
|
// ---------------------------------------------------------------------------
|
|
215
254
|
// Doctor — comprehensive diagnostic
|
|
216
255
|
// ---------------------------------------------------------------------------
|
|
@@ -312,6 +351,37 @@ async function doctor() {
|
|
|
312
351
|
ok = false;
|
|
313
352
|
}
|
|
314
353
|
|
|
354
|
+
// 9. Analyzer / bridge capability
|
|
355
|
+
if (connected && fs.existsSync(venvPy)) {
|
|
356
|
+
const HOST = process.env.LIVE_MCP_HOST || "127.0.0.1";
|
|
357
|
+
const PORT = parseInt(process.env.LIVE_MCP_PORT || "9878", 10);
|
|
358
|
+
const otherClient = findOtherLiveClient(HOST, PORT);
|
|
359
|
+
|
|
360
|
+
if (otherClient) {
|
|
361
|
+
console.log(" Analyzer: skipped (another LivePilot client is connected: %s)", otherClient);
|
|
362
|
+
} else {
|
|
363
|
+
try {
|
|
364
|
+
const analyzer = probeAnalyzer(venvPy);
|
|
365
|
+
if (analyzer.loaded_on_master) {
|
|
366
|
+
console.log(
|
|
367
|
+
" Analyzer: %s",
|
|
368
|
+
analyzer.m4l_bridge.status === "ok"
|
|
369
|
+
? "loaded on master and bridge is active"
|
|
370
|
+
: `loaded on master but bridge unavailable (${analyzer.m4l_bridge.detail})`,
|
|
371
|
+
);
|
|
372
|
+
if (analyzer.m4l_bridge.status !== "ok") {
|
|
373
|
+
ok = false;
|
|
374
|
+
}
|
|
375
|
+
} else {
|
|
376
|
+
console.log(" Analyzer: not detected on master track (optional)");
|
|
377
|
+
}
|
|
378
|
+
} catch (err) {
|
|
379
|
+
console.log(" Analyzer: could not probe (%s)", err.message || String(err));
|
|
380
|
+
ok = false;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
315
385
|
// Summary
|
|
316
386
|
console.log("");
|
|
317
387
|
console.log("─".repeat(50));
|
|
@@ -580,6 +650,7 @@ async function setup() {
|
|
|
580
650
|
console.log(" 3. Set Control Surface to 'LivePilot'");
|
|
581
651
|
console.log(" 4. Start making music with AI!");
|
|
582
652
|
console.log("");
|
|
653
|
+
console.log(" Codex App: npx livepilot --install-codex-plugin");
|
|
583
654
|
console.log(" Claude Code: claude mcp add LivePilot -- npx livepilot");
|
|
584
655
|
console.log(" Claude Desktop: Already configured if using Desktop Extension");
|
|
585
656
|
} else {
|
|
@@ -613,6 +684,8 @@ async function main() {
|
|
|
613
684
|
console.log(" --setup Full setup wizard (install + configure + test)");
|
|
614
685
|
console.log(" --install Install Remote Script into Ableton Live");
|
|
615
686
|
console.log(" --uninstall Remove Remote Script from Ableton Live");
|
|
687
|
+
console.log(" --install-codex-plugin Install the bundled Codex plugin locally");
|
|
688
|
+
console.log(" --uninstall-codex-plugin Remove the locally installed Codex plugin");
|
|
616
689
|
console.log(" --status Check if Ableton Live is reachable");
|
|
617
690
|
console.log(" --doctor Run diagnostics (Python, deps, connection)");
|
|
618
691
|
console.log(" --version Show version");
|
|
@@ -639,6 +712,20 @@ async function main() {
|
|
|
639
712
|
return;
|
|
640
713
|
}
|
|
641
714
|
|
|
715
|
+
// --install-codex-plugin
|
|
716
|
+
if (flag === "--install-codex-plugin") {
|
|
717
|
+
const { installCodexPlugin } = require(path.join(ROOT, "installer", "codex.js"));
|
|
718
|
+
installCodexPlugin();
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
// --uninstall-codex-plugin
|
|
723
|
+
if (flag === "--uninstall-codex-plugin") {
|
|
724
|
+
const { uninstallCodexPlugin } = require(path.join(ROOT, "installer", "codex.js"));
|
|
725
|
+
uninstallCodexPlugin();
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
728
|
+
|
|
642
729
|
// --status
|
|
643
730
|
if (flag === "--status") {
|
|
644
731
|
const reachable = await checkStatus();
|