livepilot 1.9.24 → 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 +73 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +56 -19
- 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 +5 -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/m4l_bridge.py +1 -0
- package/mcp_server/preview_studio/tools.py +4 -4
- package/mcp_server/runtime/capability_probe.py +21 -2
- package/mcp_server/runtime/execution_router.py +4 -0
- package/mcp_server/runtime/live_version.py +102 -0
- package/mcp_server/runtime/remote_commands.py +9 -4
- 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/sample_compilers.py +372 -0
- package/mcp_server/server.py +51 -0
- 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/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
|
@@ -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,78 @@
|
|
|
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
|
+
|
|
3
76
|
## 1.9.24 — Stability & Intelligence Upgrade (April 2026)
|
|
4
77
|
|
|
5
78
|
### Truth and Boundaries (Wave 1)
|
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,7 @@ 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.
|
|
75
76
|
|
|
76
77
|
<br>
|
|
77
78
|
|
|
@@ -81,7 +82,7 @@ All three feed into 293 deterministic tools that execute on Ableton's main threa
|
|
|
81
82
|
|
|
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.
|
|
83
84
|
|
|
84
|
-
This is the V2 intelligence layer: 12 engines that sit on top of the
|
|
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.
|
|
85
86
|
|
|
86
87
|
### SongBrain — What the Song Is
|
|
87
88
|
|
|
@@ -97,7 +98,7 @@ Every time you accept or reject a suggestion, the graph updates. Over time, it p
|
|
|
97
98
|
|
|
98
99
|
### Semantic Moves — Musical Actions, Not Parameters
|
|
99
100
|
|
|
100
|
-
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
|
|
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.
|
|
101
102
|
|
|
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.
|
|
103
104
|
|
|
@@ -150,7 +151,7 @@ This closes the gap between "the AI did something" and "the AI did something tha
|
|
|
150
151
|
|
|
151
152
|
## Tools
|
|
152
153
|
|
|
153
|
-
|
|
154
|
+
316 tools across 43 domains. Highlights below — [full catalog here](docs/manual/tool-catalog.md).
|
|
154
155
|
|
|
155
156
|
<br>
|
|
156
157
|
|
|
@@ -162,11 +163,11 @@ This closes the gap between "the AI did something" and "the AI did something tha
|
|
|
162
163
|
| Tracks | 17 | create MIDI/audio/return, delete, duplicate, arm, mute, solo, color, freeze, flatten |
|
|
163
164
|
| Clips | 11 | create, delete, duplicate, fire, stop, loop, launch mode, warp mode, quantize |
|
|
164
165
|
| Notes | 8 | add/get/remove/modify MIDI notes, transpose, duplicate, per-note probability |
|
|
165
|
-
| 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 |
|
|
166
167
|
| Scenes | 12 | create, delete, duplicate, fire, name, color, tempo, scene matrix |
|
|
167
168
|
| Browser | 4 | search library, browse tree, load items, filter by category |
|
|
168
169
|
| Mixing | 11 | volume, pan, sends, routing, meters, return tracks, master, full mix snapshot |
|
|
169
|
-
| Arrangement |
|
|
170
|
+
| Arrangement | 21 | timeline clips, native arrangement clips (12.1.10+), arrangement notes, arrangement automation, recording, cue points |
|
|
170
171
|
|
|
171
172
|
<br>
|
|
172
173
|
|
|
@@ -176,7 +177,7 @@ The M4L Analyzer sits on the master track. UDP 9880 carries spectral data
|
|
|
176
177
|
from Max to the server. OSC 9881 sends commands back.
|
|
177
178
|
|
|
178
179
|
> [!TIP]
|
|
179
|
-
> All
|
|
180
|
+
> All 289 core tools work without the analyzer — it adds 27 bridge tools and closes the feedback loop.
|
|
180
181
|
|
|
181
182
|
```
|
|
182
183
|
SPECTRAL ─────── 8-band frequency decomposition (sub → air)
|
|
@@ -393,7 +394,7 @@ read_audio_metadata Format, duration, sample rate, tags
|
|
|
393
394
|
|
|
394
395
|
<br>
|
|
395
396
|
|
|
396
|
-
### Agentic Intelligence —
|
|
397
|
+
### Agentic Intelligence — 106 tools
|
|
397
398
|
|
|
398
399
|
The V2 intelligence layer. These tools don't just execute commands — they analyze, diagnose, plan, evaluate, and learn.
|
|
399
400
|
|
|
@@ -403,20 +404,24 @@ The V2 intelligence layer. These tools don't just execute commands — they anal
|
|
|
403
404
|
| Composition | 9 | section analysis, motif detection, emotional arc, form planning, section transforms |
|
|
404
405
|
| Evaluation | 1 | before/after evaluation with structured scoring |
|
|
405
406
|
| Mix Engine | 6 | critic-driven mix analysis, issue detection, move planning, masking reports |
|
|
406
|
-
| Sound Design |
|
|
407
|
+
| Sound Design | 4 | patch analysis, modulation planning, timbre scoring |
|
|
407
408
|
| Transition Engine | 5 | transition classification, scoring, archetype-based planning |
|
|
408
409
|
| Reference Engine | 5 | reference profiling, principle distillation, gap analysis, move mapping |
|
|
409
410
|
| Translation Engine | 3 | cross-domain translation, issue detection |
|
|
410
|
-
| Performance Engine |
|
|
411
|
-
| Song Brain |
|
|
411
|
+
| Performance Engine | 3 | safety-constrained suggestions, safe move lists, scene handoff planning |
|
|
412
|
+
| Song Brain | 3 | identity inference, sacred element detection, drift monitoring |
|
|
412
413
|
| Hook Hunter | 9 | hook detection, salience scoring, development strategies, neglect detection, phrase impact |
|
|
413
414
|
| Stuckness Detector | 3 | momentum analysis, rescue classification, structured rescue workflows |
|
|
414
415
|
| Wonder Mode | 3 | diagnosis-driven variant generation, taste-aware ranking, session discard |
|
|
415
416
|
| Session Continuity | 7 | creative threads, turn resolution, taste vs identity ranking, session story |
|
|
416
417
|
| Creative Constraints | 5 | constraint activation, reference-inspired variants, constrained generation |
|
|
417
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** |
|
|
418
423
|
|
|
419
|
-
> **[View all
|
|
424
|
+
> **[View all 316 tools →](docs/manual/tool-catalog.md)**
|
|
420
425
|
|
|
421
426
|
<br>
|
|
422
427
|
|
|
@@ -466,6 +471,11 @@ claude mcp add LivePilot -- npx livepilot
|
|
|
466
471
|
claude plugin add github:dreamrec/LivePilot/plugin
|
|
467
472
|
```
|
|
468
473
|
|
|
474
|
+
**Codex App:**
|
|
475
|
+
```bash
|
|
476
|
+
npx livepilot --install-codex-plugin
|
|
477
|
+
```
|
|
478
|
+
|
|
469
479
|
**Claude Desktop (macOS)** — `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
470
480
|
```json
|
|
471
481
|
{
|
|
@@ -535,6 +545,17 @@ npx livepilot --status
|
|
|
535
545
|
|
|
536
546
|
## Plugin
|
|
537
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
|
+
|
|
538
559
|
```bash
|
|
539
560
|
claude plugin add github:dreamrec/LivePilot/plugin
|
|
540
561
|
```
|
|
@@ -565,6 +586,8 @@ Check memory before creative decisions. Verify every mutation.
|
|
|
565
586
|
npx livepilot # Start MCP server (stdio)
|
|
566
587
|
npx livepilot --install # Install Remote Script
|
|
567
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
|
|
568
591
|
npx livepilot --status # Check Ableton connection
|
|
569
592
|
npx livepilot --doctor # Full diagnostic check
|
|
570
593
|
npx livepilot --version # Show version
|
|
@@ -612,6 +635,20 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for architecture details, code guidelines
|
|
|
612
635
|
|
|
613
636
|
---
|
|
614
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
|
+
|
|
615
652
|
<p align="center">
|
|
616
653
|
<a href="LICENSE">MIT</a> — Pilot Studio
|
|
617
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();
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
|
|
7
|
+
const ROOT = path.resolve(__dirname, "..");
|
|
8
|
+
const SOURCE_DIR = path.join(ROOT, "livepilot");
|
|
9
|
+
const SOURCE_MANIFEST = path.join(SOURCE_DIR, ".Codex-plugin", "plugin.json");
|
|
10
|
+
const DEFAULT_PLUGIN_DIR = path.join(os.homedir(), "plugins", "livepilot");
|
|
11
|
+
const DEFAULT_MARKETPLACE_PATH = path.join(os.homedir(), ".agents", "plugins", "marketplace.json");
|
|
12
|
+
|
|
13
|
+
const SKIP = new Set(["__pycache__", ".DS_Store"]);
|
|
14
|
+
|
|
15
|
+
function copyDirSync(src, dest) {
|
|
16
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
17
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
if (SKIP.has(entry.name)) continue;
|
|
20
|
+
const srcPath = path.join(src, entry.name);
|
|
21
|
+
const destPath = path.join(dest, entry.name);
|
|
22
|
+
if (entry.isDirectory()) {
|
|
23
|
+
copyDirSync(srcPath, destPath);
|
|
24
|
+
} else {
|
|
25
|
+
fs.copyFileSync(srcPath, destPath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function targetPluginDir() {
|
|
31
|
+
return process.env.LIVEPILOT_CODEX_PLUGIN_PATH || DEFAULT_PLUGIN_DIR;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function marketplacePath() {
|
|
35
|
+
return process.env.LIVEPILOT_CODEX_MARKETPLACE_PATH || DEFAULT_MARKETPLACE_PATH;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function loadManifest() {
|
|
39
|
+
if (!fs.existsSync(SOURCE_MANIFEST)) {
|
|
40
|
+
throw new Error(`Codex plugin manifest not found at ${SOURCE_MANIFEST}`);
|
|
41
|
+
}
|
|
42
|
+
return JSON.parse(fs.readFileSync(SOURCE_MANIFEST, "utf-8"));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function ensureMarketplace(pluginName) {
|
|
46
|
+
const file = marketplacePath();
|
|
47
|
+
let marketplace = {
|
|
48
|
+
name: "local-plugins",
|
|
49
|
+
interface: { displayName: "Local Plugins" },
|
|
50
|
+
plugins: [],
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
if (fs.existsSync(file)) {
|
|
54
|
+
const raw = JSON.parse(fs.readFileSync(file, "utf-8"));
|
|
55
|
+
marketplace = {
|
|
56
|
+
name: raw.name || marketplace.name,
|
|
57
|
+
interface: raw.interface || marketplace.interface,
|
|
58
|
+
plugins: Array.isArray(raw.plugins) ? raw.plugins : [],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const entry = {
|
|
63
|
+
name: pluginName,
|
|
64
|
+
source: {
|
|
65
|
+
source: "local",
|
|
66
|
+
path: `./plugins/${pluginName}`,
|
|
67
|
+
},
|
|
68
|
+
policy: {
|
|
69
|
+
installation: "AVAILABLE",
|
|
70
|
+
authentication: "ON_INSTALL",
|
|
71
|
+
},
|
|
72
|
+
category: "Integration",
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const idx = marketplace.plugins.findIndex((plugin) => plugin && plugin.name === pluginName);
|
|
76
|
+
if (idx >= 0) {
|
|
77
|
+
marketplace.plugins[idx] = entry;
|
|
78
|
+
} else {
|
|
79
|
+
marketplace.plugins.push(entry);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
83
|
+
fs.writeFileSync(file, JSON.stringify(marketplace, null, 2) + "\n");
|
|
84
|
+
return file;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function removeMarketplaceEntry(pluginName) {
|
|
88
|
+
const file = marketplacePath();
|
|
89
|
+
if (!fs.existsSync(file)) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const raw = JSON.parse(fs.readFileSync(file, "utf-8"));
|
|
94
|
+
const marketplace = {
|
|
95
|
+
name: raw.name || "local-plugins",
|
|
96
|
+
interface: raw.interface || { displayName: "Local Plugins" },
|
|
97
|
+
plugins: Array.isArray(raw.plugins) ? raw.plugins.filter((plugin) => plugin && plugin.name !== pluginName) : [],
|
|
98
|
+
};
|
|
99
|
+
fs.writeFileSync(file, JSON.stringify(marketplace, null, 2) + "\n");
|
|
100
|
+
return file;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function installCodexPlugin() {
|
|
104
|
+
const manifest = loadManifest();
|
|
105
|
+
const pluginName = manifest.name || "livepilot";
|
|
106
|
+
const destDir = targetPluginDir();
|
|
107
|
+
const marketFile = ensureMarketplace(pluginName);
|
|
108
|
+
|
|
109
|
+
console.log("Installing LivePilot Codex plugin...");
|
|
110
|
+
console.log(" Source: %s", SOURCE_DIR);
|
|
111
|
+
console.log(" Target: %s", destDir);
|
|
112
|
+
console.log(" Marketplace: %s", marketFile);
|
|
113
|
+
console.log("");
|
|
114
|
+
|
|
115
|
+
fs.mkdirSync(path.dirname(destDir), { recursive: true });
|
|
116
|
+
fs.rmSync(destDir, { recursive: true, force: true });
|
|
117
|
+
copyDirSync(SOURCE_DIR, destDir);
|
|
118
|
+
|
|
119
|
+
console.log("Done! Next steps:");
|
|
120
|
+
console.log(" 1. Open or refresh Codex");
|
|
121
|
+
console.log(" 2. Check that LivePilot appears in Local Plugins");
|
|
122
|
+
console.log(" 3. Start a new thread or reload tools if Codex was already open");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function uninstallCodexPlugin() {
|
|
126
|
+
const manifest = loadManifest();
|
|
127
|
+
const pluginName = manifest.name || "livepilot";
|
|
128
|
+
const destDir = targetPluginDir();
|
|
129
|
+
const marketFile = removeMarketplaceEntry(pluginName);
|
|
130
|
+
|
|
131
|
+
if (fs.existsSync(destDir)) {
|
|
132
|
+
console.log("Removing Codex plugin: %s", destDir);
|
|
133
|
+
fs.rmSync(destDir, { recursive: true, force: true });
|
|
134
|
+
} else {
|
|
135
|
+
console.log("Codex plugin not found at %s", destDir);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (marketFile) {
|
|
139
|
+
console.log("Updated marketplace: %s", marketFile);
|
|
140
|
+
}
|
|
141
|
+
console.log("Restart or refresh Codex to remove the plugin from the UI.");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
module.exports = {
|
|
145
|
+
installCodexPlugin,
|
|
146
|
+
uninstallCodexPlugin,
|
|
147
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Agentic production system for Ableton Live 12 —
|
|
3
|
+
"version": "1.10.0",
|
|
4
|
+
"description": "Agentic production system for Ableton Live 12 — 316 tools, 43 domains, device atlas, sample intelligence, auto-composition, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pilot Studio"
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Agentic production system for Ableton Live 12 —
|
|
3
|
+
"version": "1.10.0",
|
|
4
|
+
"description": "Agentic production system for Ableton Live 12 — 316 tools, 43 domains, device atlas, sample intelligence, auto-composition, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pilot Studio"
|
|
7
7
|
}
|