livepilot 1.9.24 → 1.10.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 (185) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/AGENTS.md +3 -3
  3. package/CHANGELOG.md +223 -0
  4. package/CONTRIBUTING.md +2 -2
  5. package/LICENSE +62 -21
  6. package/README.md +291 -276
  7. package/bin/livepilot.js +87 -0
  8. package/installer/codex.js +147 -0
  9. package/livepilot/.Codex-plugin/plugin.json +2 -2
  10. package/livepilot/.claude-plugin/plugin.json +2 -2
  11. package/livepilot/skills/livepilot-arrangement/SKILL.md +18 -1
  12. package/livepilot/skills/livepilot-core/SKILL.md +22 -5
  13. package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
  14. package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
  15. package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
  16. package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
  17. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
  18. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
  19. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
  20. package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
  21. package/livepilot/skills/livepilot-core/references/overview.md +13 -9
  22. package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
  23. package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
  24. package/livepilot/skills/livepilot-devices/SKILL.md +39 -4
  25. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
  26. package/livepilot/skills/livepilot-release/SKILL.md +23 -19
  27. package/livepilot/skills/livepilot-sample-engine/SKILL.md +105 -0
  28. package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
  29. package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
  30. package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
  31. package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +45 -0
  32. package/livepilot/skills/livepilot-wonder/SKILL.md +17 -0
  33. package/livepilot.mcpb +0 -0
  34. package/m4l_device/livepilot_bridge.js +1 -1
  35. package/manifest.json +4 -4
  36. package/mcp_server/__init__.py +1 -1
  37. package/mcp_server/atlas/__init__.py +357 -0
  38. package/mcp_server/atlas/device_atlas.json +44067 -0
  39. package/mcp_server/atlas/enrichments/__init__.py +111 -0
  40. package/mcp_server/atlas/enrichments/audio_effects/auto_filter.yaml +162 -0
  41. package/mcp_server/atlas/enrichments/audio_effects/beat_repeat.yaml +183 -0
  42. package/mcp_server/atlas/enrichments/audio_effects/channel_eq.yaml +126 -0
  43. package/mcp_server/atlas/enrichments/audio_effects/chorus_ensemble.yaml +149 -0
  44. package/mcp_server/atlas/enrichments/audio_effects/color_limiter.yaml +109 -0
  45. package/mcp_server/atlas/enrichments/audio_effects/compressor.yaml +159 -0
  46. package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb.yaml +143 -0
  47. package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb_pro.yaml +178 -0
  48. package/mcp_server/atlas/enrichments/audio_effects/delay.yaml +151 -0
  49. package/mcp_server/atlas/enrichments/audio_effects/drum_buss.yaml +142 -0
  50. package/mcp_server/atlas/enrichments/audio_effects/dynamic_tube.yaml +147 -0
  51. package/mcp_server/atlas/enrichments/audio_effects/echo.yaml +167 -0
  52. package/mcp_server/atlas/enrichments/audio_effects/eq_eight.yaml +148 -0
  53. package/mcp_server/atlas/enrichments/audio_effects/eq_three.yaml +121 -0
  54. package/mcp_server/atlas/enrichments/audio_effects/erosion.yaml +103 -0
  55. package/mcp_server/atlas/enrichments/audio_effects/filter_delay.yaml +173 -0
  56. package/mcp_server/atlas/enrichments/audio_effects/gate.yaml +130 -0
  57. package/mcp_server/atlas/enrichments/audio_effects/gated_delay.yaml +133 -0
  58. package/mcp_server/atlas/enrichments/audio_effects/glue_compressor.yaml +142 -0
  59. package/mcp_server/atlas/enrichments/audio_effects/grain_delay.yaml +141 -0
  60. package/mcp_server/atlas/enrichments/audio_effects/hybrid_reverb.yaml +160 -0
  61. package/mcp_server/atlas/enrichments/audio_effects/limiter.yaml +97 -0
  62. package/mcp_server/atlas/enrichments/audio_effects/multiband_dynamics.yaml +174 -0
  63. package/mcp_server/atlas/enrichments/audio_effects/overdrive.yaml +119 -0
  64. package/mcp_server/atlas/enrichments/audio_effects/pedal.yaml +145 -0
  65. package/mcp_server/atlas/enrichments/audio_effects/phaser_flanger.yaml +161 -0
  66. package/mcp_server/atlas/enrichments/audio_effects/redux.yaml +114 -0
  67. package/mcp_server/atlas/enrichments/audio_effects/reverb.yaml +190 -0
  68. package/mcp_server/atlas/enrichments/audio_effects/roar.yaml +159 -0
  69. package/mcp_server/atlas/enrichments/audio_effects/saturator.yaml +146 -0
  70. package/mcp_server/atlas/enrichments/audio_effects/shifter.yaml +154 -0
  71. package/mcp_server/atlas/enrichments/audio_effects/spectral_resonator.yaml +141 -0
  72. package/mcp_server/atlas/enrichments/audio_effects/spectral_time.yaml +164 -0
  73. package/mcp_server/atlas/enrichments/audio_effects/vector_delay.yaml +140 -0
  74. package/mcp_server/atlas/enrichments/audio_effects/vinyl_distortion.yaml +141 -0
  75. package/mcp_server/atlas/enrichments/instruments/analog.yaml +222 -0
  76. package/mcp_server/atlas/enrichments/instruments/bass.yaml +202 -0
  77. package/mcp_server/atlas/enrichments/instruments/collision.yaml +150 -0
  78. package/mcp_server/atlas/enrichments/instruments/drift.yaml +167 -0
  79. package/mcp_server/atlas/enrichments/instruments/electric.yaml +137 -0
  80. package/mcp_server/atlas/enrichments/instruments/emit.yaml +163 -0
  81. package/mcp_server/atlas/enrichments/instruments/meld.yaml +164 -0
  82. package/mcp_server/atlas/enrichments/instruments/operator.yaml +197 -0
  83. package/mcp_server/atlas/enrichments/instruments/poli.yaml +192 -0
  84. package/mcp_server/atlas/enrichments/instruments/sampler.yaml +218 -0
  85. package/mcp_server/atlas/enrichments/instruments/simpler.yaml +217 -0
  86. package/mcp_server/atlas/enrichments/instruments/tension.yaml +156 -0
  87. package/mcp_server/atlas/enrichments/instruments/tree_tone.yaml +162 -0
  88. package/mcp_server/atlas/enrichments/instruments/vector_fm.yaml +165 -0
  89. package/mcp_server/atlas/enrichments/instruments/vector_grain.yaml +166 -0
  90. package/mcp_server/atlas/enrichments/instruments/wavetable.yaml +162 -0
  91. package/mcp_server/atlas/enrichments/midi_effects/arpeggiator.yaml +156 -0
  92. package/mcp_server/atlas/enrichments/midi_effects/bouncy_notes.yaml +93 -0
  93. package/mcp_server/atlas/enrichments/midi_effects/chord.yaml +147 -0
  94. package/mcp_server/atlas/enrichments/midi_effects/melodic_steps.yaml +97 -0
  95. package/mcp_server/atlas/enrichments/midi_effects/note_echo.yaml +108 -0
  96. package/mcp_server/atlas/enrichments/midi_effects/note_length.yaml +97 -0
  97. package/mcp_server/atlas/enrichments/midi_effects/pitch.yaml +76 -0
  98. package/mcp_server/atlas/enrichments/midi_effects/random.yaml +117 -0
  99. package/mcp_server/atlas/enrichments/midi_effects/rhythmic_steps.yaml +103 -0
  100. package/mcp_server/atlas/enrichments/midi_effects/scale.yaml +83 -0
  101. package/mcp_server/atlas/enrichments/midi_effects/step_arp.yaml +112 -0
  102. package/mcp_server/atlas/enrichments/midi_effects/velocity.yaml +119 -0
  103. package/mcp_server/atlas/enrichments/utility/amp.yaml +159 -0
  104. package/mcp_server/atlas/enrichments/utility/cabinet.yaml +109 -0
  105. package/mcp_server/atlas/enrichments/utility/corpus.yaml +150 -0
  106. package/mcp_server/atlas/enrichments/utility/resonators.yaml +131 -0
  107. package/mcp_server/atlas/enrichments/utility/spectrum.yaml +63 -0
  108. package/mcp_server/atlas/enrichments/utility/tuner.yaml +51 -0
  109. package/mcp_server/atlas/enrichments/utility/utility.yaml +136 -0
  110. package/mcp_server/atlas/enrichments/utility/vocoder.yaml +160 -0
  111. package/mcp_server/atlas/scanner.py +236 -0
  112. package/mcp_server/atlas/tools.py +224 -0
  113. package/mcp_server/composer/__init__.py +1 -0
  114. package/mcp_server/composer/engine.py +532 -0
  115. package/mcp_server/composer/layer_planner.py +427 -0
  116. package/mcp_server/composer/prompt_parser.py +329 -0
  117. package/mcp_server/composer/sample_resolver.py +153 -0
  118. package/mcp_server/composer/tools.py +211 -0
  119. package/mcp_server/connection.py +53 -8
  120. package/mcp_server/corpus/__init__.py +377 -0
  121. package/mcp_server/device_forge/__init__.py +1 -0
  122. package/mcp_server/device_forge/builder.py +377 -0
  123. package/mcp_server/device_forge/models.py +142 -0
  124. package/mcp_server/device_forge/templates.py +483 -0
  125. package/mcp_server/device_forge/tools.py +162 -0
  126. package/mcp_server/m4l_bridge.py +1 -0
  127. package/mcp_server/memory/taste_accessors.py +47 -0
  128. package/mcp_server/preview_studio/engine.py +9 -2
  129. package/mcp_server/preview_studio/tools.py +78 -35
  130. package/mcp_server/project_brain/tools.py +34 -0
  131. package/mcp_server/runtime/capability_probe.py +21 -2
  132. package/mcp_server/runtime/execution_router.py +184 -38
  133. package/mcp_server/runtime/live_version.py +102 -0
  134. package/mcp_server/runtime/mcp_dispatch.py +46 -0
  135. package/mcp_server/runtime/remote_commands.py +13 -5
  136. package/mcp_server/runtime/tools.py +66 -29
  137. package/mcp_server/sample_engine/__init__.py +1 -0
  138. package/mcp_server/sample_engine/analyzer.py +216 -0
  139. package/mcp_server/sample_engine/critics.py +390 -0
  140. package/mcp_server/sample_engine/models.py +193 -0
  141. package/mcp_server/sample_engine/moves.py +127 -0
  142. package/mcp_server/sample_engine/planner.py +186 -0
  143. package/mcp_server/sample_engine/slice_workflow.py +190 -0
  144. package/mcp_server/sample_engine/sources.py +540 -0
  145. package/mcp_server/sample_engine/techniques.py +908 -0
  146. package/mcp_server/sample_engine/tools.py +545 -0
  147. package/mcp_server/semantic_moves/__init__.py +3 -0
  148. package/mcp_server/semantic_moves/device_creation_moves.py +237 -0
  149. package/mcp_server/semantic_moves/mix_moves.py +8 -8
  150. package/mcp_server/semantic_moves/models.py +7 -7
  151. package/mcp_server/semantic_moves/performance_moves.py +4 -4
  152. package/mcp_server/semantic_moves/sample_compilers.py +377 -0
  153. package/mcp_server/semantic_moves/sound_design_moves.py +4 -4
  154. package/mcp_server/semantic_moves/tools.py +63 -10
  155. package/mcp_server/semantic_moves/transition_moves.py +4 -4
  156. package/mcp_server/server.py +71 -1
  157. package/mcp_server/session_continuity/tracker.py +4 -1
  158. package/mcp_server/sound_design/critics.py +89 -1
  159. package/mcp_server/splice_client/__init__.py +1 -0
  160. package/mcp_server/splice_client/client.py +347 -0
  161. package/mcp_server/splice_client/models.py +96 -0
  162. package/mcp_server/splice_client/protos/__init__.py +1 -0
  163. package/mcp_server/splice_client/protos/app_pb2.py +319 -0
  164. package/mcp_server/splice_client/protos/app_pb2.pyi +1153 -0
  165. package/mcp_server/splice_client/protos/app_pb2_grpc.py +1946 -0
  166. package/mcp_server/tools/_conductor.py +16 -0
  167. package/mcp_server/tools/_planner_engine.py +24 -0
  168. package/mcp_server/tools/analyzer.py +2 -0
  169. package/mcp_server/tools/arrangement.py +69 -0
  170. package/mcp_server/tools/automation.py +15 -2
  171. package/mcp_server/tools/devices.py +117 -6
  172. package/mcp_server/tools/notes.py +37 -4
  173. package/mcp_server/tools/planner.py +3 -0
  174. package/mcp_server/wonder_mode/diagnosis.py +5 -0
  175. package/mcp_server/wonder_mode/engine.py +144 -14
  176. package/mcp_server/wonder_mode/tools.py +33 -1
  177. package/package.json +14 -4
  178. package/remote_script/LivePilot/__init__.py +8 -1
  179. package/remote_script/LivePilot/arrangement.py +114 -0
  180. package/remote_script/LivePilot/browser.py +56 -1
  181. package/remote_script/LivePilot/devices.py +246 -6
  182. package/remote_script/LivePilot/mixing.py +8 -3
  183. package/remote_script/LivePilot/server.py +5 -1
  184. package/remote_script/LivePilot/transport.py +3 -0
  185. package/remote_script/LivePilot/version_detect.py +78 -0
@@ -0,0 +1,237 @@
1
+ """Device-creation-domain semantic moves — generate custom M4L devices.
2
+
3
+ These moves create new instruments and effects on the fly using the
4
+ Device Forge. Each move specifies a gen~ template and parameters.
5
+ """
6
+
7
+ from .models import SemanticMove
8
+ from .registry import register
9
+
10
+ CREATE_CHAOS_MODULATOR = SemanticMove(
11
+ move_id="create_chaos_modulator",
12
+ family="device_creation",
13
+ intent="Generate a Lorenz attractor M4L device for chaotic modulation — "
14
+ "smooth but unpredictable parameter movement",
15
+ targets={"novelty": 0.8, "motion": 0.6, "surprise": 0.7},
16
+ protect={"clarity": 0.5},
17
+ risk_level="medium",
18
+ plan_template=[
19
+ {
20
+ "tool": "generate_m4l_effect",
21
+ "params": {
22
+ "name": "Wonder Chaos Mod",
23
+ "device_type": "audio_effect",
24
+ "description": "Lorenz attractor chaotic modulation source",
25
+ },
26
+ "description": "Generate chaos modulator M4L device",
27
+ "backend": "mcp_tool",
28
+ },
29
+ {
30
+ "tool": "find_and_load_device",
31
+ "params": {"query": "Wonder Chaos Mod"},
32
+ "description": "Load generated device onto target track",
33
+ "backend": "remote_command",
34
+ },
35
+ ],
36
+ verification_plan=[
37
+ {"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
38
+ ],
39
+ )
40
+
41
+ CREATE_FEEDBACK_RESONATOR = SemanticMove(
42
+ move_id="create_feedback_resonator",
43
+ family="device_creation",
44
+ intent="Generate a tuned comb resonator M4L device — feeds harmonic resonance "
45
+ "at a specific frequency into the signal",
46
+ targets={"depth": 0.6, "texture": 0.5, "novelty": 0.4},
47
+ protect={"clarity": 0.6, "punch": 0.5},
48
+ risk_level="low",
49
+ plan_template=[
50
+ {
51
+ "tool": "generate_m4l_effect",
52
+ "params": {
53
+ "name": "Wonder Resonator",
54
+ "device_type": "audio_effect",
55
+ "description": "Tuned comb filter resonator",
56
+ },
57
+ "description": "Generate resonator M4L device",
58
+ "backend": "mcp_tool",
59
+ },
60
+ {
61
+ "tool": "find_and_load_device",
62
+ "params": {"query": "Wonder Resonator"},
63
+ "description": "Load resonator onto target track",
64
+ "backend": "remote_command",
65
+ },
66
+ ],
67
+ verification_plan=[
68
+ {"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
69
+ ],
70
+ )
71
+
72
+ CREATE_WAVEFOLDER_EFFECT = SemanticMove(
73
+ move_id="create_wavefolder_effect",
74
+ family="device_creation",
75
+ intent="Generate a Buchla-style wavefolder M4L effect — rich harmonic series "
76
+ "from waveform folding, great for adding edge and complexity",
77
+ targets={"edge": 0.6, "novelty": 0.5, "energy": 0.4},
78
+ protect={"warmth": 0.5},
79
+ risk_level="medium",
80
+ plan_template=[
81
+ {
82
+ "tool": "generate_m4l_effect",
83
+ "params": {
84
+ "name": "Wonder Wavefolder",
85
+ "device_type": "audio_effect",
86
+ "description": "Buchla-style harmonic wavefolder",
87
+ },
88
+ "description": "Generate wavefolder M4L device",
89
+ "backend": "mcp_tool",
90
+ },
91
+ {
92
+ "tool": "find_and_load_device",
93
+ "params": {"query": "Wonder Wavefolder"},
94
+ "description": "Load wavefolder onto target track",
95
+ "backend": "remote_command",
96
+ },
97
+ ],
98
+ verification_plan=[
99
+ {"tool": "get_track_meters", "check": "track producing audio with harmonic content", "backend": "remote_command"},
100
+ ],
101
+ )
102
+
103
+ CREATE_BITCRUSHER_EFFECT = SemanticMove(
104
+ move_id="create_bitcrusher_effect",
105
+ family="device_creation",
106
+ intent="Generate a bitcrusher M4L effect — sample-rate and bit-depth reduction "
107
+ "from subtle aliasing to full digital destruction",
108
+ targets={"edge": 0.5, "novelty": 0.4, "texture": 0.4},
109
+ protect={"clarity": 0.4},
110
+ risk_level="low",
111
+ plan_template=[
112
+ {
113
+ "tool": "generate_m4l_effect",
114
+ "params": {
115
+ "name": "Wonder Bitcrusher",
116
+ "device_type": "audio_effect",
117
+ "description": "Sample-rate and bit-depth crusher",
118
+ },
119
+ "description": "Generate bitcrusher M4L device",
120
+ "backend": "mcp_tool",
121
+ },
122
+ {
123
+ "tool": "find_and_load_device",
124
+ "params": {"query": "Wonder Bitcrusher"},
125
+ "description": "Load bitcrusher onto target track",
126
+ "backend": "remote_command",
127
+ },
128
+ ],
129
+ verification_plan=[
130
+ {"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
131
+ ],
132
+ )
133
+
134
+ CREATE_KARPLUS_STRING = SemanticMove(
135
+ move_id="create_karplus_string",
136
+ family="device_creation",
137
+ intent="Generate a Karplus-Strong string synth M4L instrument — plucked string "
138
+ "physical model with excitation input",
139
+ targets={"novelty": 0.5, "texture": 0.6, "depth": 0.4},
140
+ protect={"clarity": 0.6},
141
+ risk_level="low",
142
+ plan_template=[
143
+ {
144
+ "tool": "generate_m4l_effect",
145
+ "params": {
146
+ "name": "Wonder String",
147
+ "device_type": "audio_effect",
148
+ "description": "Karplus-Strong plucked string physical model",
149
+ },
150
+ "description": "Generate string synth M4L device",
151
+ "backend": "mcp_tool",
152
+ },
153
+ {
154
+ "tool": "find_and_load_device",
155
+ "params": {"query": "Wonder String"},
156
+ "description": "Load string synth onto target track",
157
+ "backend": "remote_command",
158
+ },
159
+ ],
160
+ verification_plan=[
161
+ {"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
162
+ ],
163
+ )
164
+
165
+ CREATE_STOCHASTIC_TEXTURE = SemanticMove(
166
+ move_id="create_stochastic_texture",
167
+ family="device_creation",
168
+ intent="Generate a stochastic resonance M4L effect — noise + threshold + feedback "
169
+ "creates granular textures and organic movement",
170
+ targets={"texture": 0.7, "novelty": 0.6, "motion": 0.5},
171
+ protect={"clarity": 0.4},
172
+ risk_level="medium",
173
+ plan_template=[
174
+ {
175
+ "tool": "generate_m4l_effect",
176
+ "params": {
177
+ "name": "Wonder Stochastic",
178
+ "device_type": "audio_effect",
179
+ "description": "Stochastic resonance texture generator",
180
+ },
181
+ "description": "Generate stochastic texture M4L device",
182
+ "backend": "mcp_tool",
183
+ },
184
+ {
185
+ "tool": "find_and_load_device",
186
+ "params": {"query": "Wonder Stochastic"},
187
+ "description": "Load stochastic texture device onto target track",
188
+ "backend": "remote_command",
189
+ },
190
+ ],
191
+ verification_plan=[
192
+ {"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
193
+ ],
194
+ )
195
+
196
+ CREATE_FDN_REVERB = SemanticMove(
197
+ move_id="create_fdn_reverb",
198
+ family="device_creation",
199
+ intent="Generate a feedback delay network M4L effect — dense, diffuse reverb "
200
+ "with Hadamard-like cross-coupling. Tune delay times for harmonic reverb.",
201
+ targets={"depth": 0.7, "width": 0.5, "novelty": 0.4},
202
+ protect={"punch": 0.5, "clarity": 0.5},
203
+ risk_level="low",
204
+ plan_template=[
205
+ {
206
+ "tool": "generate_m4l_effect",
207
+ "params": {
208
+ "name": "Wonder FDN Verb",
209
+ "device_type": "audio_effect",
210
+ "description": "Feedback delay network reverb",
211
+ },
212
+ "description": "Generate FDN reverb M4L device",
213
+ "backend": "mcp_tool",
214
+ },
215
+ {
216
+ "tool": "find_and_load_device",
217
+ "params": {"query": "Wonder FDN Verb"},
218
+ "description": "Load FDN reverb onto target track",
219
+ "backend": "remote_command",
220
+ },
221
+ ],
222
+ verification_plan=[
223
+ {"tool": "get_track_meters", "check": "track producing audio with reverb tail", "backend": "remote_command"},
224
+ ],
225
+ )
226
+
227
+ # Register all device creation moves
228
+ for _move in [
229
+ CREATE_CHAOS_MODULATOR,
230
+ CREATE_FEEDBACK_RESONATOR,
231
+ CREATE_WAVEFOLDER_EFFECT,
232
+ CREATE_BITCRUSHER_EFFECT,
233
+ CREATE_KARPLUS_STRING,
234
+ CREATE_STOCHASTIC_TEXTURE,
235
+ CREATE_FDN_REVERB,
236
+ ]:
237
+ register(_move)
@@ -10,7 +10,7 @@ TIGHTEN_LOW_END = SemanticMove(
10
10
  targets={"weight": 0.4, "punch": 0.3, "clarity": 0.3},
11
11
  protect={"warmth": 0.6},
12
12
  risk_level="low",
13
- compile_plan=[
13
+ plan_template=[
14
14
  {"tool": "get_master_spectrum", "params": {}, "description": "Check current sub/low balance", "backend": "mcp_tool"},
15
15
  {"tool": "set_device_parameter", "params": {"description": "High-pass sub bass around 30-40 Hz"}, "description": "HP filter sub rumble", "backend": "remote_command"},
16
16
  {"tool": "set_track_volume", "params": {"description": "Reduce sub bass volume 5-10% if sub > 50%"}, "description": "Reduce sub volume", "backend": "remote_command"},
@@ -29,7 +29,7 @@ WIDEN_STEREO = SemanticMove(
29
29
  targets={"width": 0.5, "clarity": 0.3, "depth": 0.2},
30
30
  protect={"cohesion": 0.7},
31
31
  risk_level="low",
32
- compile_plan=[
32
+ plan_template=[
33
33
  {"tool": "analyze_mix", "params": {}, "description": "Check current stereo state", "backend": "mcp_tool"},
34
34
  {"tool": "set_track_pan", "params": {"description": "Pan harmonic elements wider: +/-25-40%"}, "description": "Pan harmonics wider", "backend": "remote_command"},
35
35
  {"tool": "set_track_pan", "params": {"description": "Pan percussion subtly: +/-10-20%"}, "description": "Pan perc subtly", "backend": "remote_command"},
@@ -48,7 +48,7 @@ MAKE_PUNCHIER = SemanticMove(
48
48
  targets={"punch": 0.5, "energy": 0.3, "contrast": 0.2},
49
49
  protect={"clarity": 0.7, "warmth": 0.5},
50
50
  risk_level="low",
51
- compile_plan=[
51
+ plan_template=[
52
52
  {"tool": "get_track_meters", "params": {"include_stereo": True}, "description": "Read current levels", "backend": "remote_command"},
53
53
  {"tool": "set_track_volume", "params": {"description": "Push drum track +5-8%"}, "description": "Push drum level", "backend": "remote_command"},
54
54
  {"tool": "set_track_volume", "params": {"description": "Pull pad/texture -5-10%"}, "description": "Pull back pads", "backend": "remote_command"},
@@ -67,7 +67,7 @@ DARKEN_MIX = SemanticMove(
67
67
  targets={"warmth": 0.5, "depth": 0.3, "width": 0.2},
68
68
  protect={"width": 0.7, "clarity": 0.5},
69
69
  risk_level="low",
70
- compile_plan=[
70
+ plan_template=[
71
71
  {"tool": "get_master_spectrum", "params": {}, "description": "Check current tonal balance", "backend": "mcp_tool"},
72
72
  {"tool": "set_device_parameter", "params": {"description": "Lower EQ/Auto Filter high shelf -2-4dB on bright tracks"}, "description": "Roll off highs", "backend": "remote_command"},
73
73
  {"tool": "set_track_send", "params": {"description": "Increase reverb send on darkened elements for depth compensation"}, "description": "Compensate depth", "backend": "remote_command"},
@@ -85,7 +85,7 @@ REDUCE_REPETITION = SemanticMove(
85
85
  targets={"motion": 0.4, "novelty": 0.3, "contrast": 0.3},
86
86
  protect={"cohesion": 0.6},
87
87
  risk_level="medium",
88
- compile_plan=[
88
+ plan_template=[
89
89
  {"tool": "apply_automation_shape", "params": {"curve_type": "perlin", "description": "Perlin noise on filter cutoff"}, "description": "Add organic filter drift", "backend": "mcp_tool"},
90
90
  {"tool": "apply_automation_shape", "params": {"curve_type": "perlin", "description": "Perlin noise on send levels"}, "description": "Add depth movement", "backend": "mcp_tool"},
91
91
  {"tool": "set_device_parameter", "params": {"description": "Increase Beat Repeat variation or chance"}, "description": "Add rhythmic variation", "backend": "remote_command"},
@@ -103,7 +103,7 @@ MAKE_KICK_BASS_LOCK = SemanticMove(
103
103
  targets={"weight": 0.4, "punch": 0.3, "groove": 0.3},
104
104
  protect={"warmth": 0.6, "cohesion": 0.7},
105
105
  risk_level="low",
106
- compile_plan=[
106
+ plan_template=[
107
107
  {"tool": "get_device_parameters", "params": {"description": "Read bass EQ/filter state"}, "description": "Inspect bass chain", "backend": "remote_command"},
108
108
  {"tool": "set_device_parameter", "params": {"description": "High-pass bass at 40-60 Hz to clear space for kick sub"}, "description": "HP bass for kick clearance", "backend": "remote_command"},
109
109
  {"tool": "set_device_parameter", "params": {"description": "Sidechain compressor or volume duck on bass from kick"}, "description": "Duck bass on kick hits", "backend": "remote_command"},
@@ -121,7 +121,7 @@ CREATE_BUILDUP_TENSION = SemanticMove(
121
121
  targets={"tension": 0.5, "energy": 0.3, "contrast": 0.2},
122
122
  protect={"clarity": 0.6},
123
123
  risk_level="medium",
124
- compile_plan=[
124
+ plan_template=[
125
125
  {"tool": "apply_gesture_template", "params": {"template_name": "tension_ratchet"}, "description": "Apply staged tension ratchet", "backend": "mcp_tool"},
126
126
  {"tool": "apply_automation_shape", "params": {"curve_type": "exponential", "description": "Rising HP filter over 4-8 bars"}, "description": "HP filter rise", "backend": "mcp_tool"},
127
127
  {"tool": "set_track_send", "params": {"description": "Increase reverb send for wash effect"}, "description": "Add reverb wash", "backend": "remote_command"},
@@ -139,7 +139,7 @@ SMOOTH_SCENE_HANDOFF = SemanticMove(
139
139
  targets={"cohesion": 0.5, "motion": 0.3, "contrast": 0.2},
140
140
  protect={"clarity": 0.7},
141
141
  risk_level="low",
142
- compile_plan=[
142
+ plan_template=[
143
143
  {"tool": "apply_gesture_template", "params": {"template_name": "pre_arrival_vacuum"}, "description": "Pull energy back before transition", "backend": "mcp_tool"},
144
144
  {"tool": "apply_gesture_template", "params": {"template_name": "re_entry_spotlight"}, "description": "Spotlight returning elements", "backend": "mcp_tool"},
145
145
  ],
@@ -1,8 +1,8 @@
1
1
  """SemanticMove — high-level musical intent that compiles to tool sequences.
2
2
 
3
3
  A semantic move expresses WHAT to achieve musically, not HOW to achieve it
4
- parametrically. Each move has a compile_plan that decomposes into existing
5
- deterministic MCP tools, and a verification_plan that checks the result.
4
+ parametrically. Each move has a plan_template (static metadata for discovery)
5
+ and is compiled at runtime through compiler.compile() for executable plans.
6
6
  """
7
7
 
8
8
  from __future__ import annotations
@@ -15,13 +15,13 @@ class SemanticMove:
15
15
  """A musical action expressed as intent, not parameters."""
16
16
 
17
17
  move_id: str
18
- family: str # mix, arrangement, transition, sound_design, performance
18
+ family: str # mix, arrangement, transition, sound_design, performance, sample
19
19
  intent: str # human-readable description of the musical goal
20
20
  targets: dict = field(default_factory=dict) # dimension -> weight
21
21
  protect: dict = field(default_factory=dict) # dimension -> threshold
22
22
  risk_level: str = "low" # low, medium, high
23
23
  required_capabilities: list = field(default_factory=list)
24
- compile_plan: list = field(default_factory=list) # [{tool, params, description}]
24
+ plan_template: list = field(default_factory=list) # [{tool, params, description}] — static metadata, NOT runtime truth
25
25
  verification_plan: list = field(default_factory=list) # [{tool, check}]
26
26
  confidence: float = 0.7
27
27
 
@@ -34,13 +34,13 @@ class SemanticMove:
34
34
  "protect": self.protect,
35
35
  "risk_level": self.risk_level,
36
36
  "required_capabilities": self.required_capabilities,
37
- "compile_plan_steps": len(self.compile_plan),
37
+ "plan_template_steps": len(self.plan_template),
38
38
  "confidence": self.confidence,
39
39
  }
40
40
 
41
41
  def to_full_dict(self) -> dict:
42
- """Full representation including compile and verification plans."""
42
+ """Full representation including plan template and verification plans."""
43
43
  d = self.to_dict()
44
- d["compile_plan"] = self.compile_plan
44
+ d["plan_template"] = self.plan_template
45
45
  d["verification_plan"] = self.verification_plan
46
46
  return d
@@ -15,7 +15,7 @@ RECOVER_ENERGY = SemanticMove(
15
15
  protect={"clarity": 0.7},
16
16
  risk_level="low",
17
17
  required_capabilities=["session"],
18
- compile_plan=[
18
+ plan_template=[
19
19
  {"tool": "set_track_volume", "params": {"description": "Gradually restore drum volume"}, "description": "Bring drums back", "backend": "remote_command"},
20
20
  {"tool": "set_track_volume", "params": {"description": "Restore bass volume"}, "description": "Bring bass back", "backend": "remote_command"},
21
21
  {"tool": "set_track_send", "params": {"description": "Reduce reverb send to tighten mix"}, "description": "Tighten reverb", "backend": "remote_command"},
@@ -33,7 +33,7 @@ DECOMPRESS_TENSION = SemanticMove(
33
33
  protect={"cohesion": 0.6},
34
34
  risk_level="low",
35
35
  required_capabilities=["session"],
36
- compile_plan=[
36
+ plan_template=[
37
37
  {"tool": "set_track_volume", "params": {"description": "Pull back high-energy elements 15-20%"}, "description": "Pull energy down", "backend": "remote_command"},
38
38
  {"tool": "set_track_send", "params": {"description": "Increase reverb for spaciousness"}, "description": "Open space", "backend": "remote_command"},
39
39
  ],
@@ -50,7 +50,7 @@ SAFE_SPOTLIGHT = SemanticMove(
50
50
  protect={"cohesion": 0.7, "energy": 0.5},
51
51
  risk_level="low",
52
52
  required_capabilities=["session"],
53
- compile_plan=[
53
+ plan_template=[
54
54
  {"tool": "set_track_volume", "params": {"description": "Pull non-spotlight tracks to 30-40%"}, "description": "Pull background", "backend": "remote_command"},
55
55
  {"tool": "set_track_volume", "params": {"description": "Push spotlight track to 80-85%"}, "description": "Push spotlight", "backend": "remote_command"},
56
56
  ],
@@ -67,7 +67,7 @@ EMERGENCY_SIMPLIFY = SemanticMove(
67
67
  protect={"energy": 0.3},
68
68
  risk_level="low",
69
69
  required_capabilities=["session"],
70
- compile_plan=[
70
+ plan_template=[
71
71
  {"tool": "set_track_volume", "params": {"description": "Pull all non-rhythm tracks to 10-15%"}, "description": "Strip to essentials", "backend": "remote_command"},
72
72
  {"tool": "set_track_volume", "params": {"description": "Keep drums at current level"}, "description": "Maintain rhythm", "backend": "remote_command"},
73
73
  ],