livepilot 1.10.0 → 1.10.2

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 (55) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/AGENTS.md +3 -3
  3. package/CHANGELOG.md +214 -0
  4. package/CONTRIBUTING.md +2 -2
  5. package/LICENSE +62 -21
  6. package/README.md +264 -286
  7. package/livepilot/.Codex-plugin/plugin.json +2 -2
  8. package/livepilot/.claude-plugin/plugin.json +2 -2
  9. package/livepilot/skills/livepilot-arrangement/SKILL.md +18 -1
  10. package/livepilot/skills/livepilot-core/SKILL.md +5 -5
  11. package/livepilot/skills/livepilot-core/references/overview.md +3 -3
  12. package/livepilot/skills/livepilot-devices/SKILL.md +23 -2
  13. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
  14. package/livepilot/skills/livepilot-release/SKILL.md +21 -17
  15. package/livepilot/skills/livepilot-sample-engine/SKILL.md +2 -1
  16. package/livepilot/skills/livepilot-wonder/SKILL.md +8 -6
  17. package/livepilot.mcpb +0 -0
  18. package/m4l_device/LivePilot_Analyzer.adv +0 -0
  19. package/m4l_device/LivePilot_Analyzer.amxd +0 -0
  20. package/m4l_device/livepilot_bridge.js +1 -1
  21. package/manifest.json +4 -4
  22. package/mcp_server/__init__.py +1 -1
  23. package/mcp_server/composer/engine.py +249 -169
  24. package/mcp_server/composer/sample_resolver.py +153 -0
  25. package/mcp_server/composer/tools.py +97 -87
  26. package/mcp_server/memory/taste_accessors.py +47 -0
  27. package/mcp_server/preview_studio/engine.py +9 -2
  28. package/mcp_server/preview_studio/tools.py +78 -35
  29. package/mcp_server/project_brain/tools.py +34 -0
  30. package/mcp_server/runtime/execution_router.py +180 -38
  31. package/mcp_server/runtime/mcp_dispatch.py +46 -0
  32. package/mcp_server/runtime/remote_commands.py +4 -1
  33. package/mcp_server/runtime/tools.py +55 -32
  34. package/mcp_server/sample_engine/moves.py +12 -12
  35. package/mcp_server/sample_engine/slice_workflow.py +190 -0
  36. package/mcp_server/sample_engine/tools.py +104 -1
  37. package/mcp_server/semantic_moves/device_creation_moves.py +7 -7
  38. package/mcp_server/semantic_moves/mix_moves.py +8 -8
  39. package/mcp_server/semantic_moves/models.py +7 -7
  40. package/mcp_server/semantic_moves/performance_moves.py +4 -4
  41. package/mcp_server/semantic_moves/sample_compilers.py +14 -9
  42. package/mcp_server/semantic_moves/sound_design_moves.py +4 -4
  43. package/mcp_server/semantic_moves/tools.py +63 -10
  44. package/mcp_server/semantic_moves/transition_moves.py +4 -4
  45. package/mcp_server/server.py +20 -1
  46. package/mcp_server/session_continuity/tracker.py +4 -1
  47. package/mcp_server/tools/_conductor.py +16 -0
  48. package/mcp_server/tools/_planner_engine.py +24 -0
  49. package/mcp_server/tools/analyzer.py +2 -0
  50. package/mcp_server/tools/planner.py +3 -0
  51. package/mcp_server/wonder_mode/engine.py +59 -13
  52. package/mcp_server/wonder_mode/tools.py +33 -1
  53. package/package.json +8 -8
  54. package/remote_script/LivePilot/__init__.py +1 -1
  55. package/remote_script/LivePilot/devices.py +10 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
3
  "name": "dreamrec-LivePilot",
4
- "description": "Agentic MCP production system for Ableton Live 12 — 316 tools, 43 domains",
4
+ "description": "Agentic MCP production system for Ableton Live 12 — 317 tools, 43 domains",
5
5
  "owner": {
6
6
  "name": "dreamrec",
7
7
  "email": "dreamrec@users.noreply.github.com"
@@ -9,8 +9,8 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "livepilot",
12
- "description": "Agentic production system for Ableton Live 12 — 316 tools, 43 domains, device atlas, spectral perception, technique memory, sample intelligence, auto-composition, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
13
- "version": "1.10.0",
12
+ "description": "Agentic production system for Ableton Live 12 — 317 tools, 43 domains, device atlas, spectral perception, technique memory, sample intelligence, auto-composition, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
13
+ "version": "1.10.2",
14
14
  "author": {
15
15
  "name": "Pilot Studio"
16
16
  },
package/AGENTS.md CHANGED
@@ -1,4 +1,4 @@
1
- # LivePilot v1.10.0 — Ableton Live 12
1
+ # LivePilot v1.10.2 — Ableton Live 12
2
2
 
3
3
  ## Project
4
4
  - **Repo:** This directory (LivePilot)
@@ -22,7 +22,7 @@
22
22
  ## Key Rules
23
23
  - ALL Live Object Model (LOM) calls must execute on Ableton's main thread via schedule_message queue
24
24
  - Live 12 minimum — use modern note API (add_new_notes, get_notes_extended, apply_note_modifications)
25
- - 316 tools across 43 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine, song_brain, preview_studio, hook_hunter, stuckness_detector, wonder_mode, session_continuity, creative_constraints, device_forge, sample_engine, atlas, composer
25
+ - 317 tools across 43 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine, song_brain, preview_studio, hook_hunter, stuckness_detector, wonder_mode, session_continuity, creative_constraints, device_forge, sample_engine, atlas, composer
26
26
  - JSON over TCP, newline-delimited, port 9878
27
27
  - Structured errors with codes: INDEX_ERROR, NOT_FOUND, INVALID_PARAM, STATE_ERROR, TIMEOUT, INTERNAL
28
28
 
@@ -43,4 +43,4 @@ When modifying .amxd attributes that Max editor won't persist (e.g., `openinpres
43
43
  4. Structure: 24-byte `ampf` header + `ptch` chunk + `mx@c` header + JSON patcher + frozen deps
44
44
 
45
45
  ## Tool Count
46
- Currently 316 tools. If adding/removing tools, update: README.md, package.json description, livepilot/.Codex-plugin/plugin.json, livepilot/.claude-plugin/plugin.json, server.json, livepilot/skills/livepilot-core/SKILL.md, livepilot/skills/livepilot-core/references/overview.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, tests/test_tools_contract.py, docs/manual/index.md, docs/manual/tool-reference.md
46
+ Currently 317 tools. If adding/removing tools, update: README.md, package.json description, livepilot/.Codex-plugin/plugin.json, livepilot/.claude-plugin/plugin.json, server.json, livepilot/skills/livepilot-core/SKILL.md, livepilot/skills/livepilot-core/references/overview.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, tests/test_tools_contract.py, docs/manual/index.md, docs/manual/tool-reference.md
package/CHANGELOG.md CHANGED
@@ -1,5 +1,219 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.10.2 — npm Distribution Fix + Tool-Count Audit (April 14 2026)
4
+
5
+ Patch release. The orchestration hardening shipped in 1.10.1 was correct on
6
+ GitHub releases but the **npm-published 1.10.1 tarball had a stale `.amxd`
7
+ embedded at v1.9.14** because the package was published to npm BEFORE the
8
+ M4L Analyzer device was re-exported. Users installing via `npm install
9
+ livepilot` would have gotten the broken M4L analyzer.
10
+
11
+ This release republishes the package to npm with the corrected `.amxd`
12
+ (byte-identical to the GitHub release asset) and fixes a number of stale
13
+ tool-count references that have been wrong since the 1.10.0 line bumped
14
+ from 316 → 317.
15
+
16
+ `livepilot@1.10.1` on npm is being deprecated with a pointer to 1.10.2.
17
+
18
+ ### Fixed
19
+ - **npm package now ships the correct M4L Analyzer device.** `livepilot@1.10.2`
20
+ contains the re-exported `LivePilot_Analyzer.amxd` (6,723,726 bytes,
21
+ embeds v1.10.2 `livepilot_bridge.js` byte-perfect). `livepilot@1.10.1`
22
+ inadvertently shipped with the old v1.9.14 frozen device.
23
+ - **Git tag for the release is now properly created.** v1.10.1 was missing
24
+ a git tag on origin (the GitHub release was created with `gh release
25
+ create` against `target_commitish: main` instead of an actual tag).
26
+ v1.10.2 has a proper annotated tag pushed to origin.
27
+ - **Tool-count drift across docs** (had been wrong since 1.10.0):
28
+ - `tests/test_tools_contract.py` docstring said "316 MCP tools" while the
29
+ assertion correctly checked 317 — docstring fixed.
30
+ - `docs/patreon-content.md` said "316 tools" / "316-tool production system"
31
+ in two places — both fixed to 317.
32
+ - `README.md`, `docs/M4L_BRIDGE.md`, `docs/manual/getting-started.md` all
33
+ claimed "286 core tools + 30 bridge tools" which sums to 316 — and
34
+ contradicted the 317 total claim elsewhere. Recomputed from source:
35
+ actual split is **281 core + 36 bridge = 317** (more bridge tools than
36
+ we used to count because the spectral-cache readers were classified as
37
+ core, but they require the M4L analyzer device to be present and so
38
+ are correctly bridge-dependent).
39
+ - `livepilot/skills/livepilot-release/SKILL.md` release-checklist updated
40
+ to reference the correct 281/36 split.
41
+
42
+ ### Tests
43
+ - 1740 passing, 1 skipped — same as 1.10.1, no functional code changes
44
+ - `test_tools_contract.py::test_total_tool_count` still asserts 317 ✅
45
+
46
+ ### Note
47
+ 1.10.1 → 1.10.2 contains **no Python source changes** and **no functional
48
+ M4L bridge changes**. The orchestration hardening fixes are unchanged from
49
+ 1.10.1. This release exists purely to correct the npm distribution, the
50
+ git tag, and stale doc references.
51
+
52
+ The bundled `.amxd` is the same byte-for-byte file shipped in 1.10.1 (its
53
+ ping response still reports `"version": "1.10.1"`). The repo's
54
+ `livepilot_bridge.js` source has the ping string at `1.10.2`, which is a
55
+ one-line cosmetic difference; the .amxd will catch up on the next re-export.
56
+ All functional code (`get_selected` ID matching, 4-byte UTF-8 decoder, every
57
+ command handler) is identical between v1.10.1 and v1.10.2 — only the
58
+ version number constant differs.
59
+
60
+ If you're using LivePilot via the GitHub release `.mcpb` asset (not npm),
61
+ you already have the correct M4L analyzer in v1.10.1 and don't need to
62
+ upgrade for any user-visible functional reason.
63
+
64
+ ---
65
+
66
+ ## 1.10.1 — Orchestration Hardening (April 14 2026)
67
+
68
+ Pure correctness pass on the execution substrate. No new public tools,
69
+ no renames, no tool count change. Thirteen commits across thirteen phases
70
+ (nine Phase 1 + four Phase 2). All new response fields are additive.
71
+
72
+ **Test results:** 1690 → **1740 passing** (+50 net, +56 new tests, −6 sync-to-async
73
+ rewrites). No regressions.
74
+
75
+ **M4L Analyzer device re-exported.** `m4l_device/LivePilot_Analyzer.amxd`
76
+ was previously frozen at v1.9.14 (shipped that way in v1.10.0). For 1.10.1
77
+ the device was re-exported from Max for Live with the current
78
+ `livepilot_bridge.js` source, so the bundled `.amxd` now embeds the v1.10.1
79
+ JS including `get_selected` ID-matching (instead of name-matching, which
80
+ broke when track names duplicated) and the 4-byte UTF-8 decoder for emoji
81
+ in track/clip names. Embedded JS is byte-identical to the repo source.
82
+
83
+ ### Fixed
84
+ - **Execution router: `load_sample_to_simpler` reclassified as MCP tool.** It
85
+ was wrongly declared in `BRIDGE_COMMANDS` despite being an async Python
86
+ function with no JS dispatch case. All six sample-family semantic moves
87
+ that compiled this step now classify it correctly. Backend annotations
88
+ in `mcp_server/sample_engine/moves.py` updated to match.
89
+ - **Execution router: dedupe `capture_audio` classification.** Removed the
90
+ dead entry from `MCP_TOOLS` — `capture_audio` lives in `BRIDGE_COMMANDS`
91
+ and is handled by `livepilot_bridge.js`.
92
+ - **Execution router: async-only substrate.** `execute_step` and
93
+ `execute_plan_steps` (the sync path) are **deleted**. The only surviving
94
+ entry point is `execute_plan_steps_async`. `apply_semantic_move` and
95
+ `render_preview_variant` both became `async def` and dispatch through the
96
+ async router. The dead sync path was the last place where a plan could
97
+ silently produce steps that only worked on one transport.
98
+ - **Bridge dispatch unpacks params positionally.** Latent bug in the Phase 1
99
+ async router: it passed the whole params dict as a single arg to
100
+ `bridge.send_command`, which would have OSC-encoded the dict and failed on
101
+ the real M4L bridge. Fixed in Phase 2 to unpack via `*list(params.values())` —
102
+ plan authors construct params in the order the bridge command expects.
103
+ - **Preview Studio: `render_preview_variant` captures audible preview BEFORE
104
+ undo.** The function previously ran undo in a `finally` block that
105
+ executed before the "audible preview" section, so `preview_mode =
106
+ "audible_preview"` was a lie — it captured pre-variant audio. Now
107
+ restructured as: capture-before → apply → capture-after → play+sample
108
+ while variant is applied → stop playback → undo applied steps. Callers
109
+ can trust the `audible_preview` label.
110
+ - **SessionKernel: shares `ctx.lifespan_context` memory stores and fixes
111
+ silent method-name bugs.** `get_session_kernel` used to instantiate fresh
112
+ `TasteMemoryStore`, `AntiMemoryStore`, and `SessionMemoryStore` and call
113
+ `list_all()` / `recent()` (neither method exists), all wrapped in silent
114
+ `try/except: pass`. Users who recorded anti-preferences or session memory
115
+ via the public tools always saw an empty kernel. Now reuses stores the
116
+ same way `mcp_server/memory/tools.py` does, calls the correct methods
117
+ (`get_anti_preferences`, `get_recent`), and surfaces store-load failures
118
+ in a non-breaking `warnings` field.
119
+ - **Taste graph shape normalized across consumers.** Both
120
+ `preview_studio/engine.py:_estimate_taste_fit` and
121
+ `session_continuity/tracker.py` read `taste_graph.get("transition_boldness")`,
122
+ but the canonical `TasteGraph.to_dict()` puts it under `dimension_weights`.
123
+ Both consumers silently defaulted to 0.5, ignoring recorded user taste.
124
+ New `mcp_server/memory/taste_accessors.get_dimension_pref` helper reads
125
+ all three observed shapes; both consumers route through it.
126
+ - **Composer: plans are executable, not aspirational.** `compose()` and
127
+ `augment_with_samples()` used to emit pseudo-tools
128
+ (`_agent_pick_best_sample`, `_apply_technique`), placeholder strings
129
+ (`{downloaded_path}`), invalid sentinels (`device_index: -1`,
130
+ `track_index: -1`), and hardcoded `clip_slot_index: 0` on newly-created
131
+ empty tracks. Plans are now rebuilt via `sample_resolver.resolve_sample_for_layer`
132
+ at plan time. Unresolved layers are kept in the descriptive `layers`
133
+ output and surfaced in `warnings`, but dropped from `plan`. Processing
134
+ chains use `step_id` + `$from_step` bindings to resolve `device_index`
135
+ from `insert_device` results at execution time.
136
+ - **Composer: arrangement clips finally work.** Re-enabled the arrangement
137
+ emission path that was stubbed in Phase 7. Each resolved layer now emits
138
+ `create_clip` → `add_notes` (C3 trigger) → `create_arrangement_clip` per
139
+ section, tiling a 1-bar source clip across each section's bar count.
140
+ Simpler in classic mode plays the full sample on every trigger, so the
141
+ minimal pattern produces a playable baseline; the agent can replace it
142
+ with a more musical pattern via `suggest_sample_technique` recipes later.
143
+ Example: a techno prompt with one resolved sample now produces a 65-step
144
+ plan with 5 arrangement clips tiling Intro / Build / Drop / Drop 2 / Outro.
145
+ - **ProjectBrain: `build_project_brain` fetches notes for role inference.**
146
+ The tool never called `get_notes`, so `build_project_state_from_data`
147
+ always ran with an empty `notes_map`, forcing `role_graph` into the
148
+ "assume all tracks active in every section" fallback — destroying the
149
+ section-scoped role confidence RoleGraph was supposed to compute.
150
+
151
+ ### Added
152
+ - **Async execution router with step-result binding** —
153
+ `mcp_server/runtime/execution_router.execute_plan_steps_async` dispatches
154
+ `remote_command`, `bridge_command`, and `mcp_tool` backends through their
155
+ correct transports. Supports step-result binding via
156
+ `{"$from_step": "<id>", "path": "a.b"}` on any param.
157
+ - **MCP dispatch registry** — `mcp_server/runtime/mcp_dispatch.py` registers
158
+ in-process Python tools (starting with `load_sample_to_simpler`) so plans
159
+ can invoke them through the async router. Lifespan-installed at startup
160
+ alongside `ableton`, `spectral`, `m4l`, and `splice_client`.
161
+ - **Splice remote download workflow in composer.** `sample_resolver` extended
162
+ with `splice_local` and `splice_remote` sources. Resolution order:
163
+ `filesystem > splice_local > splice_remote > browser`. Filesystem wins
164
+ even when Splice has a hit (local files are free). Splice remote downloads
165
+ cost 1 credit each and respect the 5-credit hard floor via
166
+ `splice_client.can_afford(1, budget)` — the floor check is upfront so
167
+ the resolver fails fast rather than thrashing per-layer.
168
+ - **`SpliceGRPCClient` wired into server lifespan.** `ctx.lifespan_context["splice_client"]`
169
+ is now populated at startup. Graceful degradation: if grpcio is missing,
170
+ Splice desktop isn't running, or the cert can't be read, `splice_client.connected`
171
+ stays False and the resolver treats it as "no splice hits".
172
+ - **Composer credit-safety prelude.** New `_credit_safety_prelude()` helper
173
+ in `composer/tools.py` runs once per compose/augment call: checks credits
174
+ remaining, trims `max_credits` to respect the floor, returns a warnings
175
+ list the tool merges into the plan output. No per-layer credit thrashing.
176
+ - **Additive return fields** (no breaking changes to existing callers):
177
+ - `insert_device.device_index` — actual index of the inserted device in
178
+ its chain/track. Composer plans bind to it.
179
+ - `load_sample_to_simpler.device_index` and `.track_index` — the real
180
+ Simpler position (was previously computed internally but not returned).
181
+ - `preview_semantic_move.compiled_plan` and `.compiled_plan_executable` —
182
+ the move compiled against a lightweight current-session kernel,
183
+ alongside the existing static `plan_template`.
184
+ - `get_session_kernel.warnings` — surfaced when memory/taste stores fail
185
+ to load. Additive, callers can ignore.
186
+ - **`mcp_server/composer/sample_resolver.py`** — async sample resolver with
187
+ filesystem-first preference, splice_local/remote hooks, and browser fallback.
188
+ - **`mcp_server/memory/taste_accessors.get_dimension_pref`** — canonical
189
+ reader for taste-graph dimension preferences. All new consumers must
190
+ use it.
191
+ - **Bridge parity test** — `tests/test_bridge_parity.py` compares Python
192
+ `BRIDGE_COMMANDS` against the `case` labels in
193
+ `m4l_device/livepilot_bridge.js`. Catches future misclassification drift.
194
+
195
+ ### Changed (internal, no public tool changes)
196
+ - **`ComposerEngine.compose`, `augment`, and `get_plan` are async.** Sample
197
+ resolution may now hit the network (Splice download), so the whole compose
198
+ chain awaits. No production callers outside `composer/tools.py`; tests use
199
+ `asyncio.run(...)` wrappers.
200
+ - **`CompositionResult.resolved_samples` shape changed** from
201
+ `{role: path_str}` to `{role: {"path": str, "source": str}}` — callers
202
+ can now tell filesystem vs splice_local vs splice_remote hits apart.
203
+
204
+ ### Tests
205
+ - Router suite: 23/23 (async-only; 6 legacy sync tests rewritten as async)
206
+ - Composer resolver suite: 13/13 (7 filesystem + 6 splice paths)
207
+ - Composer engine suite: 14/14 (9 Phase 7 + 5 Phase 2B arrangement contracts)
208
+ - Project brain suite: 47/47 (+2 Phase 8 notes_map regression)
209
+ - Preview studio suite: 17/17 (+1 ordering regression)
210
+ - Session kernel suite: 11/11 (+3 hydration regression)
211
+ - Taste accessors suite: 9/9 (new in Phase 3)
212
+ - Bridge parity suite: 2/2 (new in Phase 9)
213
+ - **Full repo: 1740 passed, 1 skipped** (up from 1690)
214
+
215
+ ---
216
+
3
217
  ## 1.10.0 — The Intelligence Release (April 13 2026)
4
218
 
5
219
  316 tools across 43 domains. Device Atlas v2, Sample Intelligence, Auto-Composition, Splice Integration, Device Forge, Live 12.3 API, Corpus Intelligence.
package/CONTRIBUTING.md CHANGED
@@ -98,7 +98,7 @@ Prefix with `fix:`, `feat:`, `docs:`, `refactor:`, `test:`, or `chore:`.
98
98
 
99
99
  ## Tool Count Discipline
100
100
 
101
- Currently **316 tools**. If you add or remove a `@mcp.tool()` decorator, update all of these files:
101
+ Currently **317 tools**. If you add or remove a `@mcp.tool()` decorator, update all of these files:
102
102
 
103
103
  - `README.md`
104
104
  - `CLAUDE.md`
@@ -128,4 +128,4 @@ By participating, you agree to uphold this code.
128
128
 
129
129
  ## License
130
130
 
131
- By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
131
+ By contributing, you agree that your contributions will be licensed under the [Business Source License 1.1](LICENSE).
package/LICENSE CHANGED
@@ -1,21 +1,62 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Pilot Studio
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ Business Source License 1.1
2
+
3
+ Parameters
4
+
5
+ Licensor: Pilot Studio
6
+ Licensed Work: LivePilot 1.10.0
7
+ The Licensed Work is (c) 2026 Pilot Studio.
8
+ Additional Use Grant: You may make production use of the Licensed Work,
9
+ provided your use does not include offering it as a
10
+ commercial hosted service to third parties.
11
+ Change Date: April 13, 2030
12
+ Change License: MIT License
13
+
14
+ Notice
15
+
16
+ The Business Source License (this document, or the "License") is not an
17
+ Open Source license. However, the Licensed Work will eventually be made
18
+ available under the Change License, on the Change Date. License text
19
+ below is the full BSL 1.1 text from MariaDB BSL version.
20
+
21
+ Terms
22
+
23
+ The Licensor hereby grants you the right to copy, modify, create
24
+ derivative works, redistribute, and make non-production use of the
25
+ Licensed Work. The Licensor may make an Additional Use Grant, above,
26
+ permitting limited production use.
27
+
28
+ Effective on the Change Date, or the fourth anniversary of the first
29
+ publicly available distribution of a specific version of the Licensed
30
+ Work under this License, whichever comes first, the Licensor hereby
31
+ grants you rights under the terms of the Change License, and the rights
32
+ granted in the paragraph above terminate.
33
+
34
+ If your use of the Licensed Work does not comply with the requirements
35
+ currently in effect as described in this License, you must purchase a
36
+ commercial license from the Licensor, its affiliated entities, or
37
+ authorized resellers, or you must refrain from using the Licensed Work.
38
+
39
+ All copies of the original and modified Licensed Work, and derivative
40
+ works of the Licensed Work, are subject to this License. This License
41
+ applies separately for each version of the Licensed Work and the Change
42
+ Date may vary for each version of the Licensed Work released by
43
+ Licensor.
44
+
45
+ You must conspicuously display this License on each original or modified
46
+ copy of the Licensed Work. If you receive the Licensed Work in original
47
+ or modified form from a third party, the terms and conditions set forth
48
+ in this License apply to your use of that work.
49
+
50
+ Any use of the Licensed Work in violation of this License will
51
+ automatically terminate your rights under this License for the current
52
+ and all other versions of the Licensed Work.
53
+
54
+ This License does not grant you any right in any trademark or logo of
55
+ Licensor or its affiliates (provided that you may use a trademark or
56
+ logo of Licensor as expressly required by this License).
57
+
58
+ TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS
59
+ PROVIDED ON AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES
60
+ AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION)
61
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
62
+ NON-INFRINGEMENT, AND TITLE.