livepilot 1.9.21 → 1.9.22
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 +1 -1
- package/CHANGELOG.md +9 -0
- package/livepilot/.Codex-plugin/plugin.json +1 -1
- package/livepilot/.claude-plugin/plugin.json +1 -1
- package/livepilot/commands/arrange.md +19 -10
- package/livepilot/commands/beat.md +68 -21
- package/livepilot/commands/evaluate.md +23 -13
- package/livepilot/commands/mix.md +17 -8
- package/livepilot/commands/sounddesign.md +12 -4
- package/livepilot/skills/livepilot-core/references/overview.md +1 -1
- package/m4l_device/livepilot_bridge.js +1 -1
- package/mcp_server/__init__.py +1 -1
- package/package.json +1 -1
- package/remote_script/LivePilot/__init__.py +1 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{
|
|
11
11
|
"name": "livepilot",
|
|
12
12
|
"description": "Agentic production system for Ableton Live 12 — 237 tools, 32 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
13
|
-
"version": "1.9.
|
|
13
|
+
"version": "1.9.22",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Pilot Studio"
|
|
16
16
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.22 — Skill & Command Overhaul (April 2026)
|
|
4
|
+
|
|
5
|
+
### Skill Updates
|
|
6
|
+
- **feat(beat):** Added Step 0 "Session Prep" — for fresh projects, deletes all tracks and loads M4L Analyzer on master before starting. Includes perception check (Step 11) with spectral balance verification.
|
|
7
|
+
- **feat(mix):** Added analyzer auto-load (Step 2), spectral targets by genre (Step 6), mandatory meter verification after every change (Step 8), capture+analyze loop (Step 11)
|
|
8
|
+
- **feat(sounddesign):** Added mandatory `value_string` verification (Step 5), perception check (Step 11), organic movement with perlin curves (Step 8)
|
|
9
|
+
- **feat(arrange):** Added motif detection (Step 3), gesture template execution (Step 7), perlin organic movement (Step 8), emotional arc verification (Step 9), LRA check for dynamic range (Step 10)
|
|
10
|
+
- **feat(evaluate):** Added analyzer auto-load (Step 2), full perception snapshot with track meters (Step 6), capture+analyze offline as ground truth option
|
|
11
|
+
|
|
3
12
|
## 1.9.21 — Verification Discipline Pass (April 2026)
|
|
4
13
|
|
|
5
14
|
### Systemic Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.22",
|
|
4
4
|
"description": "Agentic production system for Ableton Live 12 — 237 tools, 32 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pilot Studio"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.22",
|
|
4
4
|
"description": "Agentic production system for Ableton Live 12 — 237 tools, 32 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pilot Studio"
|
|
@@ -5,15 +5,24 @@ description: Guided arrangement — build song structure with sections, transiti
|
|
|
5
5
|
|
|
6
6
|
Guide the user through arranging their session into a full song structure.
|
|
7
7
|
|
|
8
|
-
1. **Read the session** — `get_session_info` to see all tracks and clips
|
|
9
|
-
2. **Analyze current structure** — `get_section_graph` to see inferred sections from scene names.
|
|
10
|
-
3. **
|
|
11
|
-
4. **
|
|
12
|
-
5. **
|
|
13
|
-
6. **
|
|
14
|
-
7. **
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
1. **Read the session** — `get_session_info` to see all tracks and clips. `get_scene_matrix` for the full clip grid.
|
|
9
|
+
2. **Analyze current structure** — `get_section_graph` to see inferred sections from scene names. `get_emotional_arc` to understand current energy flow.
|
|
10
|
+
3. **Detect motifs** — `get_motif_graph` to find recurring patterns, fatigue risk, and suggested developments (inversion, augmentation, fragmentation).
|
|
11
|
+
4. **Ask about the target structure** — what form? (verse-chorus, AABA, build-drop, through-composed). What energy arc? (gradual build, peaks and valleys, flat)
|
|
12
|
+
5. **Plan the arrangement** — `plan_arrangement` with the target bar count and style. Review the proposed section order, transitions, and gesture templates.
|
|
13
|
+
6. **Build sections** — for each section, create or duplicate scenes, set scene names and colors. Use `duplicate_scene` for variations. Use `transform_motif` for melodic development (inversion, retrograde, diminution, augmentation).
|
|
14
|
+
7. **Apply gesture templates** — for each transition, use `apply_gesture_template` with the planned template:
|
|
15
|
+
- `pre_arrival_vacuum` — pull energy back before a drop
|
|
16
|
+
- `harmonic_tint_rise` — gradually open filters for intro/build sections
|
|
17
|
+
- `re_entry_spotlight` — darken then snap back to highlight returning elements
|
|
18
|
+
- `tension_ratchet` — stepped build in 4-bar stages
|
|
19
|
+
- `outro_decay_dissolve` — gradual dissolution for endings
|
|
20
|
+
- `phrase_end_throw` — reverb/delay throw at section boundaries
|
|
21
|
+
Then execute each gesture plan using `apply_automation_shape` with the suggested curve_family.
|
|
22
|
+
8. **Add organic movement** — use `apply_automation_shape` with `curve_type="perlin"` on filter/send/effect parameters so nothing repeats exactly the same each cycle.
|
|
23
|
+
9. **Check emotional arc** — `get_emotional_arc` to verify the energy flow matches the target. Address any issues flagged (no_clear_build, peak_too_early, no_resolution).
|
|
24
|
+
10. **Verify with perception** — `get_master_spectrum` during each section to confirm spectral differentiation. `capture_audio` + `analyze_loudness` to check LRA (should be >2 LU for dynamic arrangements).
|
|
25
|
+
11. **Translation check** — `check_translation` to verify mono compatibility and spectral consistency across sections.
|
|
26
|
+
12. **Record to arrangement** — when satisfied, use `create_arrangement_clip` to lay out clips on the timeline, or guide the user through `back_to_arranger` and recording the session performance.
|
|
18
27
|
|
|
19
28
|
Use the livepilot-composition-engine skill for section analysis and transition planning. Present the arrangement as a visual timeline to the user.
|
|
@@ -5,26 +5,73 @@ description: Guided beat creation — create a beat from scratch with genre, tem
|
|
|
5
5
|
|
|
6
6
|
Guide the user through creating a beat from scratch. Follow these steps:
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
5. **
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
8
|
+
## Step 0: Session Prep (fresh projects only)
|
|
9
|
+
|
|
10
|
+
If the user asks for a **fresh start** (new track, clean slate, start from scratch):
|
|
11
|
+
|
|
12
|
+
1. **Read the session** — `get_session_info` to see what exists
|
|
13
|
+
2. **Delete all existing tracks** — loop through all tracks with `delete_track`, starting from the highest index down to 0 (deleting from the top prevents index shifts)
|
|
14
|
+
3. **Load the M4L Analyzer on master** — `find_and_load_device(track_index=-1000, device_name="LivePilot_Analyzer")`. This enables real-time spectral analysis, RMS metering, and key detection for the entire session. If it fails, try `search_browser(path="max_for_live", name_filter="LivePilot")` to find the URI and load manually.
|
|
15
|
+
4. **Set up master chain** — load Glue Compressor + EQ Eight + Utility on master for bus processing
|
|
16
|
+
5. **Verify analyzer** — wait 2 seconds, then call `get_master_spectrum`. If it returns data, the bridge is connected. If it errors with "UDP bridge not connected", call `reconnect_bridge` to rebind.
|
|
17
|
+
|
|
18
|
+
If the user is adding to an **existing project**, skip step 0 — just call `get_session_info` and work with what's there.
|
|
19
|
+
|
|
20
|
+
## Step 1: Ask about the vibe
|
|
21
|
+
Genre, tempo range, mood, reference tracks.
|
|
22
|
+
|
|
23
|
+
## Step 2: Set up the session
|
|
24
|
+
`set_tempo`, create tracks for drums/bass/harmony/melody with `create_midi_track`, name and color them.
|
|
25
|
+
|
|
26
|
+
## Step 3: Load instruments
|
|
27
|
+
Use `search_browser` to find devices by name, `load_browser_item` or `find_and_load_device` to load them.
|
|
28
|
+
|
|
29
|
+
## Step 4: Verify device health
|
|
30
|
+
After loading, run `get_device_info` on each loaded device. A `parameter_count` of 0 or 1 on AU/VST plugins means the plugin failed to initialize (dead plugin). If detected:
|
|
31
|
+
- Delete the dead plugin with `delete_device`
|
|
32
|
+
- Replace with a native Ableton alternative (e.g., Saturator instead of tape plugins, Operator instead of failed FM synths)
|
|
33
|
+
- Run `get_session_diagnostics` for any other issues (armed tracks, missing instruments)
|
|
34
|
+
- Inform the user which plugin failed and what replacement was used
|
|
35
|
+
|
|
36
|
+
## Step 5: Program drums first
|
|
37
|
+
Create a clip, add kick/snare/hat patterns with `add_notes`.
|
|
38
|
+
|
|
39
|
+
## Step 6: Add bass
|
|
40
|
+
Create clip, program a bassline that locks with the kick.
|
|
41
|
+
|
|
42
|
+
## Step 7: Add harmony
|
|
43
|
+
Chords or pads that set the mood.
|
|
44
|
+
|
|
45
|
+
## Step 8: Add melody
|
|
46
|
+
Top-line or lead element.
|
|
47
|
+
|
|
48
|
+
## Step 9: Mix + VERIFY
|
|
49
|
+
Balance levels with `set_track_volume` and `set_track_pan`.
|
|
50
|
+
|
|
51
|
+
**MANDATORY after every parameter change:**
|
|
52
|
+
- Read `value_string` in the response to confirm the actual Hz/dB/% value makes sense
|
|
53
|
+
- Call `get_track_meters(include_stereo=true)` and verify each track has non-zero output
|
|
54
|
+
- If a track's stereo output drops to 0, the effect is killing the signal — check `get_device_parameters` for `value_string`, fix, re-verify
|
|
55
|
+
- Parameter ranges are NOT always 0-1. Always read `value_string`.
|
|
56
|
+
|
|
57
|
+
## Step 10: Pitch & tuning audit
|
|
58
|
+
MANDATORY before firing. Run on every melodic track (skip drums):
|
|
59
|
+
- `identify_scale` on each track — verify all tracks agree on the same tonal center
|
|
60
|
+
- `analyze_harmony` on chordal tracks — verify chord quality
|
|
61
|
+
- `detect_theory_issues` with `strict=true` on each track — check for out-of-key notes, parallel fifths, voice crossing
|
|
62
|
+
- **Interpret results against the intended scale**, not just C major
|
|
63
|
+
- Report a clear tuning table to the user: which tracks are clean, which have issues
|
|
64
|
+
- Fix wrong notes with `modify_notes` before proceeding
|
|
65
|
+
|
|
66
|
+
## Step 11: Perception check
|
|
67
|
+
If the M4L Analyzer is connected:
|
|
68
|
+
- `get_master_spectrum` — check spectral balance (sub should be present but not >60% for most genres)
|
|
69
|
+
- `get_master_rms` — check levels aren't clipping
|
|
70
|
+
- `get_detected_key` — verify the analyzer agrees with the intended key
|
|
71
|
+
|
|
72
|
+
If not connected, use `capture_audio` + `analyze_loudness` + `analyze_spectrum_offline` for offline analysis.
|
|
73
|
+
|
|
74
|
+
## Step 12: Fire the scene
|
|
75
|
+
Fire to listen, iterate based on feedback.
|
|
29
76
|
|
|
30
77
|
Use the livepilot-core skill for all tool calls. Verify after each step. Keep the user informed of what you're doing and why.
|
|
@@ -11,28 +11,38 @@ Run the universal evaluation loop on recent production changes.
|
|
|
11
11
|
- `judgment_only` — no analyzer, parameter-level heuristics only
|
|
12
12
|
- `read_only` — session disconnected
|
|
13
13
|
|
|
14
|
-
2. **
|
|
14
|
+
2. **Ensure analyzer** — if mode is `judgment_only`, try to get full perception:
|
|
15
|
+
- `find_and_load_device(track_index=-1000, device_name="LivePilot_Analyzer")`
|
|
16
|
+
- Wait 2s, then `get_master_spectrum` to test the bridge
|
|
17
|
+
- If bridge disconnected: `reconnect_bridge`
|
|
18
|
+
- If still unavailable: proceed with `judgment_only` but tell the user
|
|
15
19
|
|
|
16
|
-
3. **
|
|
20
|
+
3. **Get the last move** — `get_last_move` to understand what was changed. If no recent move, `get_recent_actions` for history.
|
|
17
21
|
|
|
18
|
-
4. **
|
|
22
|
+
4. **Ask what the goal was** — what were they trying to achieve? More clarity? Wider stereo? Punchier drums?
|
|
19
23
|
|
|
20
|
-
5. **
|
|
24
|
+
5. **Compile the goal** — `compile_goal_vector(goal_description, mode="improve")`
|
|
21
25
|
|
|
22
|
-
6. **
|
|
26
|
+
6. **Capture current state** — full perception snapshot:
|
|
27
|
+
- `get_master_spectrum` + `get_master_rms` (if analyzer available)
|
|
28
|
+
- `get_track_meters(include_stereo=true)` — verify all tracks producing audio
|
|
29
|
+
- `get_mix_snapshot` — full volume/pan/send state
|
|
30
|
+
- Optionally: `capture_audio` + `analyze_loudness` + `analyze_spectrum_offline` for ground truth
|
|
23
31
|
|
|
24
|
-
7. **
|
|
32
|
+
7. **Undo the change** — `undo()` to restore the before state
|
|
25
33
|
|
|
26
|
-
8. **
|
|
34
|
+
8. **Capture before state** — same reads as step 6
|
|
27
35
|
|
|
28
|
-
9. **
|
|
29
|
-
- Mix changes: `evaluate_mix_move`
|
|
30
|
-
- Composition changes: `evaluate_composition_move`
|
|
31
|
-
- Multi-dimensional: `evaluate_with_fabric`
|
|
36
|
+
9. **Redo the change** — `redo()` to restore the after state
|
|
32
37
|
|
|
33
|
-
10. **
|
|
38
|
+
10. **Evaluate** — `evaluate_move(before_snapshot, after_snapshot, goal)` or use engine-specific:
|
|
39
|
+
- Mix changes: `evaluate_mix_move`
|
|
40
|
+
- Composition changes: `evaluate_composition_move`
|
|
41
|
+
- Multi-dimensional: `evaluate_with_fabric`
|
|
34
42
|
|
|
35
|
-
11. **
|
|
43
|
+
11. **Report results** — show: score (0-1), keep_change recommendation, goal_progress, collateral_damage, dimension changes
|
|
44
|
+
|
|
45
|
+
12. **Act on recommendation:**
|
|
36
46
|
- If `keep_change=true` — keep, suggest `memory_learn` if score > 0.7
|
|
37
47
|
- If `keep_change=false` — `undo()`, explain why (collateral damage, goal regression)
|
|
38
48
|
|
|
@@ -6,14 +6,23 @@ description: Mixing assistant — analyze and balance track levels, panning, and
|
|
|
6
6
|
Help the user mix their session. Follow these steps:
|
|
7
7
|
|
|
8
8
|
1. **Read the session** — `get_session_info` to see all tracks
|
|
9
|
-
2. **
|
|
10
|
-
3. **
|
|
11
|
-
4. **
|
|
12
|
-
5. **
|
|
13
|
-
6. **
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
2. **Ensure analyzer** — check if M4L Analyzer is on master. If `get_master_spectrum` errors, load it: `find_and_load_device(track_index=-1000, device_name="LivePilot_Analyzer")`. If bridge disconnected, try `reconnect_bridge`.
|
|
10
|
+
3. **Analyze each track** — `get_track_info` for clip and device details, `get_track_meters(include_stereo=true)` for actual output levels
|
|
11
|
+
4. **Quick mix status** — `get_mix_summary` for a fast overview (track count, dynamics, stereo, issues)
|
|
12
|
+
5. **Run critics** — `get_mix_issues` to detect problems (masking, dynamics, stereo width, headroom). For frequency collisions: `get_masking_report`
|
|
13
|
+
6. **Spectral check** — `get_master_spectrum` for 8-band frequency balance. Typical targets:
|
|
14
|
+
- Hip-hop: sub dominant, centroid 400-800 Hz
|
|
15
|
+
- Electronic: balanced, centroid 800-1500 Hz
|
|
16
|
+
- Ambient: mid-focused, low sub, centroid 500-1000 Hz
|
|
17
|
+
7. **Suggest a mix** — propose volume levels, panning positions, and send amounts based on the track types, instruments, and detected issues
|
|
18
|
+
8. **Apply with verification** — after EVERY volume/pan/send change:
|
|
19
|
+
- Read `value_string` in the response
|
|
20
|
+
- Call `get_track_meters(include_stereo=true)` to verify no track went silent
|
|
21
|
+
- Check master spectrum to verify the balance improved
|
|
22
|
+
9. **Check return tracks** — `get_return_tracks` to see shared effects
|
|
23
|
+
10. **Master chain** — `get_master_track` to review the master. Typical chain: Glue Compressor → EQ Eight → Utility → LivePilot_Analyzer
|
|
24
|
+
11. **Capture + analyze** — `capture_audio` then `analyze_loudness` for LUFS/peak/LRA, `analyze_spectrum_offline` for centroid/rolloff/balance
|
|
25
|
+
12. **Evaluate** — `evaluate_mix_move` with before/after snapshots to verify improvement. If `keep_change` is false, `undo` immediately.
|
|
17
26
|
|
|
18
27
|
Present suggestions in a clear table format. Always explain the reasoning (e.g., "panning the hi-hats slightly right to create stereo width"). Use `undo` if the user doesn't like a change.
|
|
19
28
|
|
|
@@ -8,14 +8,22 @@ Guide the user through designing a sound. Follow these steps:
|
|
|
8
8
|
1. **Ask about the target sound** — what character? (warm pad, aggressive bass, shimmering lead, atmospheric texture, etc.)
|
|
9
9
|
2. **Choose an instrument** — pick the right synth for the job, load it with `search_browser` → `load_browser_item`
|
|
10
10
|
3. **Verify device loaded** — `get_device_info` to confirm plugin initialized (AU/VST with `parameter_count` <= 1 = dead plugin — delete and replace with native alternative)
|
|
11
|
-
4. **Get parameters** — `get_device_parameters` to see what's available
|
|
11
|
+
4. **Get parameters** — `get_device_parameters` to see what's available. **Read `value_string`** to understand actual units (Hz, dB, %, ms) — raw values are often NOT in human units.
|
|
12
12
|
5. **Shape the sound** — `set_device_parameter` or `batch_set_parameters` to dial in the character
|
|
13
|
+
- **ALWAYS read `value_string` in the response** to confirm the actual value makes sense
|
|
14
|
+
- **ALWAYS call `get_track_meters(include_stereo=true)` after filter/effect changes** — verify the track still produces audio
|
|
15
|
+
- If stereo output drops to 0, the effect is killing the signal. Check `value_string`, fix, re-verify.
|
|
13
16
|
6. **Run critics** — `analyze_sound_design(track_index)` to check for static timbre, missing modulation, spectral imbalance
|
|
14
|
-
7. **Address issues** — `plan_sound_design_move(track_index)` for suggested improvements
|
|
15
|
-
8. **Add effects** — load effects
|
|
17
|
+
7. **Address issues** — `plan_sound_design_move(track_index)` for suggested improvements, `get_patch_model` to see chain structure
|
|
18
|
+
8. **Add effects** — load effects and tweak. For automation, use `apply_automation_shape` with musically appropriate curve types:
|
|
19
|
+
- Filter sweeps → exponential (perceptually even)
|
|
20
|
+
- Volume fades → logarithmic (matches ear's response)
|
|
21
|
+
- Organic movement → perlin (never repeats exactly)
|
|
22
|
+
- If using `apply_automation_recipe`, verify the recipe didn't push parameters to extremes
|
|
16
23
|
9. **Create a test pattern** — `create_clip` + `add_notes` with a simple pattern to audition
|
|
17
24
|
10. **Fire the clip** to listen, iterate based on feedback
|
|
18
|
-
11. **
|
|
25
|
+
11. **Perception check** — `get_master_spectrum` or `capture_audio` + `analyze_spectrum_offline` to verify the sound sits correctly in the frequency spectrum
|
|
26
|
+
12. **Evaluate** — `evaluate_move` with before/after snapshots to verify improvement
|
|
19
27
|
|
|
20
28
|
Explain what each parameter does as you adjust it. Use `undo` liberally if something sounds wrong.
|
|
21
29
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# LivePilot v1.9.
|
|
1
|
+
# LivePilot v1.9.22 — Architecture & Tool Reference
|
|
2
2
|
|
|
3
3
|
Agentic production system for Ableton Live 12. 237 tools across 32 domains. Device atlas (280+ devices), spectral perception (M4L analyzer), technique memory, automation intelligence (16 curve types, 15 recipes), music theory (Krumhansl-Schmuckler, species counterpoint), generative algorithms (Euclidean rhythm, tintinnabuli, phase shift, additive process), neo-Riemannian harmony (PRL transforms, Tonnetz), MIDI file I/O.
|
|
4
4
|
|
package/mcp_server/__init__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
|
|
2
|
-
__version__ = "1.9.
|
|
2
|
+
__version__ = "1.9.22"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.22",
|
|
4
4
|
"mcpName": "io.github.dreamrec/livepilot",
|
|
5
5
|
"description": "Agentic production system for Ableton Live 12 — 237 tools, 32 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
6
6
|
"author": "Pilot Studio",
|
|
@@ -5,7 +5,7 @@ Entry point for the ControlSurface. Ableton calls create_instance(c_instance)
|
|
|
5
5
|
when this script is selected in Preferences > Link, Tempo & MIDI.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
__version__ = "1.9.
|
|
8
|
+
__version__ = "1.9.22"
|
|
9
9
|
|
|
10
10
|
from _Framework.ControlSurface import ControlSurface
|
|
11
11
|
from .server import LivePilotServer
|