livepilot 1.10.4 → 1.10.6

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 (74) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/AGENTS.md +3 -3
  3. package/CHANGELOG.md +148 -0
  4. package/CONTRIBUTING.md +1 -1
  5. package/README.md +6 -6
  6. package/livepilot/.Codex-plugin/plugin.json +2 -2
  7. package/livepilot/.claude-plugin/plugin.json +2 -2
  8. package/livepilot/skills/livepilot-core/SKILL.md +4 -4
  9. package/livepilot/skills/livepilot-core/references/overview.md +3 -3
  10. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
  11. package/livepilot/skills/livepilot-release/SKILL.md +5 -5
  12. package/m4l_device/LivePilot_Analyzer.amxd +0 -0
  13. package/m4l_device/livepilot_bridge.js +12 -1
  14. package/manifest.json +3 -3
  15. package/mcp_server/__init__.py +1 -1
  16. package/mcp_server/composer/sample_resolver.py +10 -6
  17. package/mcp_server/composer/tools.py +10 -6
  18. package/mcp_server/connection.py +6 -1
  19. package/mcp_server/creative_constraints/tools.py +9 -8
  20. package/mcp_server/experiment/engine.py +9 -5
  21. package/mcp_server/experiment/tools.py +9 -9
  22. package/mcp_server/hook_hunter/tools.py +14 -9
  23. package/mcp_server/m4l_bridge.py +11 -0
  24. package/mcp_server/memory/taste_graph.py +7 -2
  25. package/mcp_server/mix_engine/tools.py +8 -3
  26. package/mcp_server/musical_intelligence/tools.py +15 -10
  27. package/mcp_server/performance_engine/tools.py +6 -2
  28. package/mcp_server/preview_studio/tools.py +21 -15
  29. package/mcp_server/project_brain/tools.py +18 -10
  30. package/mcp_server/reference_engine/tools.py +7 -5
  31. package/mcp_server/runtime/capability_probe.py +10 -4
  32. package/mcp_server/runtime/tools.py +8 -2
  33. package/mcp_server/sample_engine/tools.py +394 -33
  34. package/mcp_server/semantic_moves/tools.py +5 -1
  35. package/mcp_server/server.py +10 -9
  36. package/mcp_server/services/motif_service.py +9 -3
  37. package/mcp_server/session_continuity/tools.py +7 -3
  38. package/mcp_server/session_continuity/tracker.py +9 -8
  39. package/mcp_server/song_brain/tools.py +17 -12
  40. package/mcp_server/splice_client/client.py +19 -6
  41. package/mcp_server/stuckness_detector/tools.py +8 -5
  42. package/mcp_server/tools/_agent_os_engine/__init__.py +52 -0
  43. package/mcp_server/tools/_agent_os_engine/critics.py +134 -0
  44. package/mcp_server/tools/_agent_os_engine/evaluation.py +206 -0
  45. package/mcp_server/tools/_agent_os_engine/models.py +132 -0
  46. package/mcp_server/tools/_agent_os_engine/taste.py +192 -0
  47. package/mcp_server/tools/_agent_os_engine/techniques.py +161 -0
  48. package/mcp_server/tools/_agent_os_engine/world_model.py +170 -0
  49. package/mcp_server/tools/_composition_engine/__init__.py +67 -0
  50. package/mcp_server/tools/_composition_engine/analysis.py +174 -0
  51. package/mcp_server/tools/_composition_engine/critics.py +522 -0
  52. package/mcp_server/tools/_composition_engine/gestures.py +230 -0
  53. package/mcp_server/tools/_composition_engine/harmony.py +70 -0
  54. package/mcp_server/tools/_composition_engine/models.py +193 -0
  55. package/mcp_server/tools/_composition_engine/sections.py +371 -0
  56. package/mcp_server/tools/_perception_engine.py +18 -11
  57. package/mcp_server/tools/agent_os.py +23 -15
  58. package/mcp_server/tools/analyzer.py +166 -7
  59. package/mcp_server/tools/automation.py +6 -1
  60. package/mcp_server/tools/composition.py +25 -16
  61. package/mcp_server/tools/devices.py +10 -6
  62. package/mcp_server/tools/motif.py +7 -2
  63. package/mcp_server/tools/planner.py +6 -2
  64. package/mcp_server/tools/research.py +13 -10
  65. package/mcp_server/transition_engine/tools.py +6 -1
  66. package/mcp_server/translation_engine/tools.py +8 -6
  67. package/mcp_server/wonder_mode/engine.py +8 -3
  68. package/mcp_server/wonder_mode/tools.py +29 -21
  69. package/package.json +2 -2
  70. package/remote_script/LivePilot/__init__.py +1 -1
  71. package/requirements.txt +6 -0
  72. package/livepilot.mcpb +0 -0
  73. package/mcp_server/tools/_agent_os_engine.py +0 -947
  74. package/mcp_server/tools/_composition_engine.py +0 -1530
@@ -7,19 +7,23 @@
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
+ import logging
11
+
10
12
  from fastmcp import Context
11
13
 
12
14
  from ..server import mcp
13
15
  from . import engine
14
16
 
17
+ logger = logging.getLogger(__name__)
18
+
15
19
 
16
20
  def _get_song_brain_dict() -> dict:
17
21
  try:
18
22
  from ..song_brain.tools import _current_brain
19
23
  if _current_brain is not None:
20
24
  return _current_brain.to_dict()
21
- except Exception:
22
- pass
25
+ except Exception as exc:
26
+ logger.warning("song_brain lookup failed: %s", exc)
23
27
  return {}
24
28
 
25
29
 
@@ -37,8 +41,8 @@ def _get_taste_graph(ctx: Context):
37
41
  taste_store=taste_store, anti_store=anti_store,
38
42
  persistent_store=persistent,
39
43
  )
40
- except Exception:
41
- pass
44
+ except Exception as exc:
45
+ logger.warning("taste_graph build failed: %s", exc)
42
46
  return None
43
47
 
44
48
 
@@ -47,7 +51,8 @@ def _get_active_constraints():
47
51
  try:
48
52
  from ..creative_constraints.tools import _active_constraints
49
53
  return _active_constraints
50
- except Exception:
54
+ except Exception as exc:
55
+ logger.debug("creative_constraints not importable: %s", exc)
51
56
  return None
52
57
 
53
58
 
@@ -60,7 +65,8 @@ def _get_ledger_entries(ctx: Context) -> list[dict]:
60
65
  )
61
66
  entries = ledger.get_recent_moves(limit=20)
62
67
  return [e.to_dict() for e in entries]
63
- except Exception:
68
+ except Exception as exc:
69
+ logger.warning("action_ledger recent_moves failed: %s", exc)
64
70
  return []
65
71
 
66
72
 
@@ -77,15 +83,16 @@ def _get_stuckness_report(ctx: Context, song_brain: dict) -> dict | None:
77
83
  ableton = ctx.lifespan_context.get("ableton")
78
84
  if ableton:
79
85
  session_info = ableton.send_command("get_session_info", {})
80
- except Exception:
81
- pass
86
+ except Exception as exc:
87
+ logger.warning("session_info fetch for stuckness failed: %s", exc)
82
88
  report = detect_stuckness(
83
89
  action_history=action_ledger,
84
90
  session_info=session_info,
85
91
  song_brain=song_brain,
86
92
  )
87
93
  return report.to_dict()
88
- except Exception:
94
+ except Exception as exc:
95
+ logger.warning("stuckness detection failed: %s", exc)
89
96
  return None
90
97
 
91
98
 
@@ -144,8 +151,9 @@ def enter_wonder_mode(
144
151
  sample_context["sample_file_path"] = best.get("file_path", "")
145
152
  sample_context["sample_name"] = best.get("name", "")
146
153
  sample_context["material_type"] = best.get("material_type", "")
147
- except Exception:
148
- pass # Graceful degradation — analytical variants still work
154
+ except Exception as exc:
155
+ # Graceful degradation — analytical variants still work
156
+ logger.warning("sample opportunity search failed: %s", exc)
149
157
 
150
158
  # 1c. Get session info for kernel
151
159
  session_info = {}
@@ -153,8 +161,8 @@ def enter_wonder_mode(
153
161
  ableton = ctx.lifespan_context.get("ableton")
154
162
  if ableton:
155
163
  session_info = ableton.send_command("get_session_info", {})
156
- except Exception:
157
- pass
164
+ except Exception as exc:
165
+ logger.warning("session_info fetch for kernel failed: %s", exc)
158
166
 
159
167
  # 2. Generate variants
160
168
  result = engine.generate_wonder_variants(
@@ -194,8 +202,8 @@ def enter_wonder_mode(
194
202
  domain=thread_domain,
195
203
  )
196
204
  ws.creative_thread_id = thread.thread_id
197
- except Exception:
198
- pass
205
+ except Exception as exc:
206
+ logger.warning("open creative thread failed: %s", exc)
199
207
 
200
208
  # 5. Store session
201
209
  store_wonder_session(ws)
@@ -290,8 +298,8 @@ def discard_wonder_session(
290
298
  identity_effect="",
291
299
  user_sentiment="disliked",
292
300
  )
293
- except Exception:
294
- pass
301
+ except Exception as exc:
302
+ logger.warning("record_turn_resolution(rejected) failed: %s", exc)
295
303
 
296
304
  # Update taste graph — rejection is a negative signal for all executable variants
297
305
  try:
@@ -304,16 +312,16 @@ def discard_wonder_session(
304
312
  family=v["family"],
305
313
  kept=False,
306
314
  )
307
- except Exception:
308
- pass
315
+ except Exception as exc:
316
+ logger.warning("taste_graph negative-signal update failed: %s", exc)
309
317
 
310
318
  # Discard linked preview set
311
319
  if ws.preview_set_id:
312
320
  try:
313
321
  from ..preview_studio.engine import discard_set
314
322
  discard_set(ws.preview_set_id)
315
- except Exception:
316
- pass
323
+ except Exception as exc:
324
+ logger.warning("discard_set(%s) failed: %s", ws.preview_set_id, exc)
317
325
 
318
326
  return {
319
327
  "discarded": True,
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.10.4",
3
+ "version": "1.10.6",
4
4
  "mcpName": "io.github.dreamrec/livepilot",
5
- "description": "Agentic production system for Ableton Live 12 — 317 tools, 43 domains. Device atlas (1305 devices), sample engine (Splice + browser + filesystem), auto-composition, spectral perception, technique memory, creative intelligence (12 engines)",
5
+ "description": "Agentic production system for Ableton Live 12 — 320 tools, 43 domains. Device atlas (1305 devices), sample engine (Splice + browser + filesystem), auto-composition, spectral perception, technique memory, creative intelligence (12 engines)",
6
6
  "author": "Pilot Studio",
7
7
  "license": "BSL-1.1",
8
8
  "type": "commonjs",
@@ -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.10.4"
8
+ __version__ = "1.10.6"
9
9
 
10
10
  from _Framework.ControlSurface import ControlSurface
11
11
  from .server import LivePilotServer
package/requirements.txt CHANGED
@@ -8,6 +8,12 @@ pyloudnorm>=0.1.0
8
8
  soundfile>=0.12.0
9
9
  scipy>=1.11.0
10
10
  mutagen>=1.47.0
11
+ # v1.10.5 Splice online catalog integration — required, not optional.
12
+ # Without these, SpliceGRPCClient silently disables itself and search_samples
13
+ # falls back to the SQLite sounds.db which only returns locally downloaded
14
+ # samples (see docs/2026-04-14-bugs-discovered.md — P0-2).
15
+ grpcio>=1.60.0
16
+ protobuf>=4.25.0
11
17
 
12
18
  # Development / testing (not required for runtime)
13
19
  # pip install pytest pytest-asyncio
package/livepilot.mcpb DELETED
Binary file