livepilot 1.1.0 → 1.1.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.1 — 2026-03-17
4
+
5
+ ### Fixes
6
+ - Fixed `create_arrangement_clip` ignoring `loop_length` parameter (was always using source clip length for tiling)
7
+ - Fixed double `end_undo_step()` calls in `create_arrangement_clip` and `set_arrangement_automation` (now uses `try/finally`)
8
+ - Fixed `back_to_arranger` setting wrong value (`False` → `True`)
9
+ - Added guard against `None` clip index after arrangement placement failure
10
+ - Fixed `--doctor` summary not reflecting connection test result in exit code
11
+
3
12
  ## 1.1.0 — 2026-03-17
4
13
 
5
14
  ### New Tools (+7)
package/bin/livepilot.js CHANGED
@@ -246,7 +246,10 @@ async function doctor() {
246
246
  // 8. TCP connection to Ableton
247
247
  console.log("");
248
248
  console.log("Connection test:");
249
- await checkStatus();
249
+ const connected = await checkStatus();
250
+ if (!connected) {
251
+ ok = false;
252
+ }
250
253
 
251
254
  // Summary
252
255
  console.log("");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "mcpName": "io.github.dreamrec/livepilot",
5
5
  "description": "AI copilot for Ableton Live 12 — 91 MCP tools for production, sound design, and mixing",
6
6
  "author": "Pilot Studio",
@@ -89,18 +89,15 @@ def create_arrangement_clip(song, params):
89
89
  break
90
90
 
91
91
  clip_count += 1
92
- pos += source_length
93
- except Exception as e:
92
+ pos += loop_length
93
+ finally:
94
94
  song.end_undo_step()
95
- raise ValueError(
96
- "duplicate_clip_to_arrangement failed: %s" % str(e)
97
- )
98
-
99
- song.end_undo_step()
100
95
 
101
96
  # Re-read to get accurate final state
102
97
  arr_clips = list(track.arrangement_clips)
103
- first_clip = arr_clips[first_clip_index] if first_clip_index is not None else None
98
+ if first_clip_index is None or first_clip_index >= len(arr_clips):
99
+ raise ValueError("Failed to place any clips in arrangement")
100
+ first_clip = arr_clips[first_clip_index]
104
101
 
105
102
  return {
106
103
  "track_index": track_index,
@@ -499,7 +496,6 @@ def set_arrangement_automation(song, params):
499
496
  if temp_envelope is None:
500
497
  # Neither direct nor session clip approach works
501
498
  slot.delete_clip()
502
- song.end_undo_step()
503
499
  raise ValueError(
504
500
  "Cannot create automation envelope for parameter '%s' "
505
501
  "(neither arrangement nor session clip supports it)"
@@ -519,13 +515,8 @@ def set_arrangement_automation(song, params):
519
515
 
520
516
  # Clean up the temporary session clip
521
517
  slot.delete_clip()
522
- except Exception as e:
518
+ finally:
523
519
  song.end_undo_step()
524
- raise ValueError(
525
- "Automation workaround failed: %s" % str(e)
526
- )
527
-
528
- song.end_undo_step()
529
520
 
530
521
  return {
531
522
  "track_index": track_index,
@@ -674,5 +665,5 @@ def toggle_cue_point(song, params):
674
665
  @register("back_to_arranger")
675
666
  def back_to_arranger(song, params):
676
667
  """Switch playback from session clips back to the arrangement timeline."""
677
- song.back_to_arranger = False
668
+ song.back_to_arranger = True
678
669
  return {"back_to_arranger": song.back_to_arranger}
@@ -1,10 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Read(//Users/visansilviugeorge/Music/Ableton/User Library/Remote Scripts/LivePilot/**)",
5
- "Read(//Applications/**)",
6
- "Bash(npm list:*)",
7
- "mcp__plugin_livepilot_LivePilot__get_session_info"
8
- ]
9
- }
10
- }
@@ -1 +0,0 @@
1
- ghu_HBMOaCx3m6AhzGz0LCfV04JgwolYFP2b7pv9
@@ -1 +0,0 @@
1
- {"token":"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJtY3AtcmVnaXN0cnkiLCJleHAiOjE3NzM3NjM1NTQsIm5iZiI6MTc3Mzc2MzI1NCwiaWF0IjoxNzczNzYzMjU0LCJhdXRoX21ldGhvZCI6ImdpdGh1Yi1hdCIsImF1dGhfbWV0aG9kX3N1YiI6ImRyZWFtcmVjIiwicGVybWlzc2lvbnMiOlt7ImFjdGlvbiI6InB1Ymxpc2giLCJyZXNvdXJjZSI6ImlvLmdpdGh1Yi5kcmVhbXJlYy8qIn1dfQ.f0qqH3xlVr08nLhOgS9JeFJQGVpMNWKhTXEXKZ4CL22zI6IlsELBFb1ReC5zRK-ViHFh1ZZzA03IsOn5qOaMDg","expires_at":1773763554}
@@ -1,10 +0,0 @@
1
- [ 944ms] ReferenceError: __name is not defined
2
- at https://mcp.so/:10:13
3
- at https://mcp.so/:17:13
4
- [ 5151ms] [ERROR] Not signed in with the identity provider. @ https://mcp.so/:0
5
- [ 8070ms] [ERROR] [GSI_LOGGER]: FedCM get() rejects with NetworkError: Error retrieving a token. @ https://mcp.so/_next/static/chunks/5774-3c92e2fd4a5f0665.js:0
6
- [ 51793ms] ReferenceError: __name is not defined
7
- at https://mcp.so/submit:10:13
8
- at https://mcp.so/submit:17:13
9
- [ 52509ms] [ERROR] Not signed in with the identity provider. @ https://mcp.so/submit:0
10
- [ 64373ms] [ERROR] [GSI_LOGGER]: FedCM get() rejects with NetworkError: Error retrieving a token. @ https://mcp.so/_next/static/chunks/5774-3c92e2fd4a5f0665.js:0
@@ -1,10 +0,0 @@
1
- [ 2220ms] Error: Minified React error #418; visit https://react.dev/errors/418?args[]=text&args[]= for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
2
- at Li (https://static.glama.ai/client/react-BhmDw-jB.js:54:31190)
3
- at Lc (https://static.glama.ai/client/react-BhmDw-jB.js:54:87415)
4
- at Ru (https://static.glama.ai/client/react-BhmDw-jB.js:54:116726)
5
- at Fu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115990)
6
- at Pu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115901)
7
- at Nu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115759)
8
- at yu (https://static.glama.ai/client/react-BhmDw-jB.js:54:111299)
9
- at fd (https://static.glama.ai/client/react-BhmDw-jB.js:54:123284)
10
- at MessagePort.D (https://static.glama.ai/client/react-BhmDw-jB.js:47:33962)
@@ -1,12 +0,0 @@
1
- [ 1229ms] [WARNING] You should call navigate() in a React.useEffect(), not when your component is first rendered. @ https://static.glama.ai/client/react-BhmDw-jB.js:54
2
- [ 1237ms] [WARNING] You should call navigate() in a React.useEffect(), not when your component is first rendered. @ https://static.glama.ai/client/react-BhmDw-jB.js:54
3
- [ 1256ms] Error: Minified React error #418; visit https://react.dev/errors/418?args[]=text&args[]= for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
4
- at Li (https://static.glama.ai/client/react-BhmDw-jB.js:54:31190)
5
- at Lc (https://static.glama.ai/client/react-BhmDw-jB.js:54:87415)
6
- at Ru (https://static.glama.ai/client/react-BhmDw-jB.js:54:116726)
7
- at Fu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115990)
8
- at Pu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115901)
9
- at Nu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115759)
10
- at yu (https://static.glama.ai/client/react-BhmDw-jB.js:54:111299)
11
- at fd (https://static.glama.ai/client/react-BhmDw-jB.js:54:123284)
12
- at MessagePort.D (https://static.glama.ai/client/react-BhmDw-jB.js:47:33962)
@@ -1,10 +0,0 @@
1
- [ 3510ms] Error: Minified React error #418; visit https://react.dev/errors/418?args[]=text&args[]= for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
2
- at Li (https://static.glama.ai/client/react-BhmDw-jB.js:54:31190)
3
- at Lc (https://static.glama.ai/client/react-BhmDw-jB.js:54:87415)
4
- at Ru (https://static.glama.ai/client/react-BhmDw-jB.js:54:116726)
5
- at Fu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115990)
6
- at Pu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115901)
7
- at Nu (https://static.glama.ai/client/react-BhmDw-jB.js:54:115759)
8
- at yu (https://static.glama.ai/client/react-BhmDw-jB.js:54:111299)
9
- at fd (https://static.glama.ai/client/react-BhmDw-jB.js:54:123284)
10
- at MessagePort.D (https://static.glama.ai/client/react-BhmDw-jB.js:47:33962)
@@ -1 +0,0 @@
1
- [ 609ms] [ERROR] Failed to load resource: the server responded with a status of 404 () @ https://glama.ai/mcp/servers/dreamrec/LivePilot:0