Allows clients to explore the browser tree by category and path,
returning the names of child nodes at the given location.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ControlSurface exposes song and application as properties, not callable
methods. Replace manager.song() and manager.application() with the correct
attribute access throughout handler, application, browser, and view modules.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Live scans the Remote Scripts folder for __init__.py with create_instance()
at the *root* of the script folder. Our create_instance was buried inside
the AbletonOSC/ subpackage, so Live never found it.
Also:
- Inner AbletonOSC/__init__.py: guard import with try/except for pytest compat
- Manager: use show_message() (Live status bar) instead of log_message()
- Manager: wrap OSCServer.start() in try/except OSError so a port conflict
surfaces as a readable status message instead of a silent crash
- Manager: run handler init inside component_guard() as required by the
Ableton ControlSurface framework
- Manager stub: add show_message, schedule_message, component_guard no-ops
so out-of-Ableton tooling/tests don't break
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
setuptools.backends.legacy is not available in older pip environments;
switch to the standard setuptools.build_meta and add wheel to requires.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Covers all major Live API objects with get/set/listen/method handlers:
song, track, return_track, clip, clip_slot, device (incl. rack chains
and drum pads), scene, view, application, browser, groove.
Zero external runtime dependencies — OSC encoded/decoded in osc_server.py.
Wildcard * support for track/scene indices. Listener callbacks fire to
matching /get/ addresses for bidirectional state sync.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>