livepilot 1.15.0-beta → 1.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +206 -3
  2. package/README.md +11 -11
  3. package/m4l_device/LivePilot_Analyzer.amxd +0 -0
  4. package/m4l_device/livepilot_bridge.js +1 -1
  5. package/mcp_server/__init__.py +1 -1
  6. package/mcp_server/atlas/device_atlas.json +91219 -7161
  7. package/mcp_server/atlas/enrichments/audio_effects/pitch_hack.yaml +61 -0
  8. package/mcp_server/atlas/enrichments/audio_effects/pitchloop89.yaml +111 -0
  9. package/mcp_server/atlas/enrichments/audio_effects/re_enveloper.yaml +51 -0
  10. package/mcp_server/atlas/enrichments/audio_effects/snipper.yaml +36 -0
  11. package/mcp_server/atlas/enrichments/audio_effects/spectral_blur.yaml +64 -0
  12. package/mcp_server/atlas/enrichments/instruments/bell_tower.yaml +37 -0
  13. package/mcp_server/atlas/enrichments/instruments/granulator_iii.yaml +124 -0
  14. package/mcp_server/atlas/enrichments/instruments/harmonic_drone_generator.yaml +83 -0
  15. package/mcp_server/atlas/enrichments/instruments/impulse.yaml +47 -0
  16. package/mcp_server/atlas/enrichments/instruments/sting_iftah.yaml +44 -0
  17. package/mcp_server/atlas/enrichments/midi_effects/expressive_chords.yaml +38 -0
  18. package/mcp_server/atlas/enrichments/midi_effects/filler.yaml +32 -0
  19. package/mcp_server/atlas/enrichments/midi_effects/microtuner.yaml +83 -0
  20. package/mcp_server/atlas/enrichments/midi_effects/patterns_iftah.yaml +38 -0
  21. package/mcp_server/atlas/enrichments/midi_effects/phase_pattern.yaml +51 -0
  22. package/mcp_server/atlas/enrichments/midi_effects/polyrhythm.yaml +46 -0
  23. package/mcp_server/atlas/enrichments/midi_effects/retrigger.yaml +40 -0
  24. package/mcp_server/atlas/enrichments/midi_effects/slice_shuffler.yaml +39 -0
  25. package/mcp_server/atlas/enrichments/midi_effects/sq_sequencer.yaml +39 -0
  26. package/mcp_server/atlas/enrichments/midi_effects/stages.yaml +38 -0
  27. package/mcp_server/atlas/enrichments/utility/arrangement_looper.yaml +31 -0
  28. package/mcp_server/atlas/enrichments/utility/cv_clock_in.yaml +25 -0
  29. package/mcp_server/atlas/enrichments/utility/cv_clock_out.yaml +25 -0
  30. package/mcp_server/atlas/enrichments/utility/cv_envelope_follower.yaml +38 -0
  31. package/mcp_server/atlas/enrichments/utility/cv_in.yaml +26 -0
  32. package/mcp_server/atlas/enrichments/utility/cv_instrument.yaml +34 -0
  33. package/mcp_server/atlas/enrichments/utility/cv_lfo.yaml +38 -0
  34. package/mcp_server/atlas/enrichments/utility/cv_shaper.yaml +35 -0
  35. package/mcp_server/atlas/enrichments/utility/cv_triggers.yaml +26 -0
  36. package/mcp_server/atlas/enrichments/utility/cv_utility.yaml +37 -0
  37. package/mcp_server/atlas/enrichments/utility/performer.yaml +36 -0
  38. package/mcp_server/atlas/enrichments/utility/prearranger.yaml +36 -0
  39. package/mcp_server/atlas/enrichments/utility/rotating_rhythm_generator.yaml +35 -0
  40. package/mcp_server/atlas/enrichments/utility/surround_panner.yaml +40 -0
  41. package/mcp_server/atlas/enrichments/utility/variations.yaml +40 -0
  42. package/mcp_server/atlas/enrichments/utility/vector_map.yaml +36 -0
  43. package/mcp_server/atlas/tools.py +30 -2
  44. package/mcp_server/runtime/remote_commands.py +3 -0
  45. package/mcp_server/sample_engine/tools.py +738 -60
  46. package/mcp_server/server.py +18 -6
  47. package/mcp_server/splice_client/client.py +583 -65
  48. package/mcp_server/splice_client/http_bridge.py +434 -0
  49. package/mcp_server/splice_client/models.py +278 -2
  50. package/mcp_server/splice_client/quota.py +229 -0
  51. package/mcp_server/tools/_analyzer_engine/__init__.py +4 -0
  52. package/mcp_server/tools/_analyzer_engine/sample.py +73 -0
  53. package/mcp_server/tools/analyzer.py +730 -29
  54. package/mcp_server/tools/browser.py +164 -13
  55. package/mcp_server/tools/devices.py +56 -11
  56. package/mcp_server/tools/mixing.py +64 -15
  57. package/mcp_server/tools/scales.py +18 -6
  58. package/mcp_server/tools/tracks.py +92 -4
  59. package/package.json +2 -2
  60. package/remote_script/LivePilot/__init__.py +1 -1
  61. package/remote_script/LivePilot/_clip_helpers.py +86 -0
  62. package/remote_script/LivePilot/_drum_helpers.py +40 -0
  63. package/remote_script/LivePilot/_scale_helpers.py +87 -0
  64. package/remote_script/LivePilot/arrangement.py +44 -15
  65. package/remote_script/LivePilot/clips.py +182 -2
  66. package/remote_script/LivePilot/devices.py +82 -2
  67. package/remote_script/LivePilot/notes.py +17 -2
  68. package/remote_script/LivePilot/scales.py +31 -16
  69. package/remote_script/LivePilot/simpler_sample.py +105 -17
  70. package/server.json +3 -3
@@ -378,11 +378,21 @@ def _get_all_tools():
378
378
  "_local_provider._tools",
379
379
  lambda: list(mcp._local_provider._tools.values()),
380
380
  ),
381
- # Public-API future path (what we're asking for in the upstream FR);
382
- # harmless to probe now so that once it ships we can lift the ceiling
383
- # without touching this function again.
384
- ("list_tools", lambda: list(mcp.list_tools())),
381
+ # NB: mcp.list_tools() IS the public API, but it's a coroutine
382
+ # can't be iterated in a sync context. We skip it here and rely on
383
+ # the internal probes. When FastMCP exposes a sync view we'll add
384
+ # it back. (Earlier form tried `list(mcp.list_tools())` which
385
+ # raised `RuntimeWarning: coroutine was never awaited` at every
386
+ # module import — removed 2026-04-22.)
385
387
  ]
388
+ # Observation 2026-04-22: some FastMCP 3.x builds keep BOTH the legacy
389
+ # `_tool_manager._tools` dict AND the newer `_local_provider._components`
390
+ # registry populated at the same time — but the legacy one lags the
391
+ # newer one (385 vs 422 during a recent startup). Returning the FIRST
392
+ # non-empty probe accidentally picked the stale view. Instead, collect
393
+ # every working probe and return the LARGEST view (the registry with
394
+ # the most tools is the authoritative one).
395
+ best: list = []
386
396
  for label, fn in probes:
387
397
  try:
388
398
  tools = fn()
@@ -390,8 +400,10 @@ def _get_all_tools():
390
400
  continue
391
401
  except Exception: # noqa: BLE001 — any error from an internal probe means "skip"
392
402
  continue
393
- if tools:
394
- return tools
403
+ if tools and len(tools) > len(best):
404
+ best = tools
405
+ if best:
406
+ return best
395
407
 
396
408
  # All probes empty. Surface fastmcp version + attempted paths so the
397
409
  # breakage is diagnosable without re-reading the code.