-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
35 lines (35 loc) · 11.7 KB
/
Copy pathindex.xml
File metadata and controls
35 lines (35 loc) · 11.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<!-- Sources track raw/main so ReaPack always serves the current bridge instead
of a pinned commit that silently drifts behind HEAD. @version here MUST move
in lockstep with @version in bridge/reaper_agent_bridge.lua on every release,
and these fixes must be merged to main before this is published. A tagged,
pin-verified release pipeline is the proper next step (review Next-Level #3). -->
<index version="1" name="reaper-daemon" commit="main">
<category name="bridge">
<reapack name="reaper_agent_bridge.lua" type="script" desc="Reaper Daemon (REAPER agent file bridge)">
<metadata>
<link rel="website" href="https://github.com/wretcher207/reaper-daemon">Reaper Daemon on GitHub</link>
</metadata>
<version name="3.13.0" author="Dead Pixel Design" time="2026-07-29T16:50:00Z">
<changelog><![CDATA[Daemon Beater release. The bridge script itself is unchanged; the version moves in lockstep with the repo release. Everything new lives in the cloned repo (ReaPack installs only this bridge; clone https://github.com/wretcher207/reaper-daemon for the CLI and the drum engine): `reaperd.py profile` reads a guitar stem bar by bar (onset density, timing regularity, palm-mute vs ringing decay, silence, band balance, a 16th-note accent grid, plus suggested section boundaries and repeat groups). Point it at any bar with --start-bar/--bars/--max-seconds and it analyzes just that window, never the whole stem, with hop-aligned cuts so timing, onset, grid, decay, and band numbers from a window match a full pass (only the silence ratio is scored against a window-local loudness reference). The palm-mute vs open decay read now survives real tempos (a fixed tail window used to swallow the next hit's attack once notes came faster than ~220ms apart), and the analysis passes run about 2x faster. The verify loop fails toward honesty: exit 1 now strictly means the mutation was never sent; every post-send bridge rejection is exit 2 with the rejection code in the JSON (a handler that failed mid-edit can leave a partial change inside one closed undo block, so "nothing changed" cannot be promised from outside); tune_param can no longer crash past an applied set without restore and disclosure; malformed bridge replies return structured errors instead of tracebacks; non-finite values are refused at the edges.]]></changelog>
<source main="main">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/reaper_agent_bridge.lua</source>
<source file="json.lua">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/json.lua</source>
</version>
<version name="3.12.0" author="Dead Pixel Design" time="2026-07-23T13:30:00Z">
<changelog><![CDATA[Closed-loop verify release. The bridge script itself is unchanged — the verify loop is a client-side sequencer of existing bridge commands — but the version moves in lockstep with the repo release, which adds: `reaperd.py measure` (one preflight-gated capture with measured metrics: LUFS-I always, spectrum/peak/RMS/stereo with Post Mortem installed); `reaperd.py verify` (capture -> run one mutating command -> capture the same frozen window again on the GUID-pinned track -> measured deltas, with an honest 0 VERIFIED / 1 not-applied / 2 UNVERIFIED exit-code contract); and the MCP tools verify_change and tune_param (iterative parameter search against a measured audio target, hard-capped at 5 renders, honest converged/unconverged/non-monotone reporting). Requires the agent-side files from the repo clone — ReaPack alone does not deliver them.]]></changelog>
<source main="main">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/reaper_agent_bridge.lua</source>
<source file="json.lua">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/json.lua</source>
</version>
<version name="3.11.3" author="Dead Pixel Design" time="2026-07-14T21:16:45Z">
<changelog><![CDATA[First-run render-statistics modal fix for Post Mortem. Captures temporarily enable REAPER 7.75+'s retain-render-statistics preference together with render-window auto-close, read the statistics, then restore the user's exact setting. This prevents the synchronous bridge from hanging behind the new Yes/No prompt.]]></changelog>
<source main="main">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/reaper_agent_bridge.lua</source>
<source file="json.lua">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/json.lua</source>
</version>
<version name="3.11.2" author="Dead Pixel Design" time="2026-07-14T08:58:11Z">
<changelog><![CDATA[Fresh-heartbeat authority fix for packaged macOS clients. A current bridge heartbeat now wins over a false-negative best-effort REAPER process probe, while missing or stale heartbeats still fail closed. Includes 3.11.1. Managed startup watchdog fix for Post Mortem P3-006. setup/install.py now installs the watchdog instead of a one-shot loader, reads both the current JSON bridge lock and legacy bare-epoch locks, waits 60 seconds before reclaiming a normal stale lock, preserves a render lock for up to six hours, and never blindly deletes a live lock. Includes 3.11.0. Panel support commands (Post Mortem Phase 3, P3-002). Two new read-only commands: get_selected_track reports the first selected track (identity, fx_count, item_count, receive_count) plus what a capture would do right now — capture_source (active time selection vs edit cursor, the same resolution capture_track_audio uses), capture_start_seconds, items_at_capture_start, and expected_capture_scope (isolated_track | full_mix | master_output). get_selected_track replaces the pre-3.11 undocumented minimal reply (top-level name/guid kept for compatibility; no-selection returns selected=false instead of erroring). get_capture_preflight reports everything that would gate or degrade a capture WITHOUT rendering: the allow_risk_level_3 gate (typed capture_gated blocker; the flag is read once at REAPER startup), SWS presence, render auto-close state (render_hang_risk warning when auto-close can be neither observed on nor forced), and optionally a target track's expected capture provenance. Additive only; no existing command changed. Includes 3.10.0. Preview lifecycle (Post Mortem Verified Fix Preview, P2-002). Three new commands: preview_change snapshots first, persists preview state to disk, then applies one temporary change (track volume dB, pan, FX normalized param, FX bypass) with every supplied identity field re-verified live — any mismatch refuses with STALE_IDENTITY and mutates nothing; one active preview at a time. cancel_preview restores the full snapshot. commit_preview re-verifies identities, restores the baseline value, then re-applies the proposed value inside EXACTLY ONE named undo point; nothing else in the lifecycle touches undo history. Crash/restart recovery: a leftover preview restores automatically at startup (cancel semantics) and is surfaced in the heartbeat; previews expire after 30 minutes via the defer loop. dry_run honored inside all three (they bypass the run_command dry_run gate by design). Includes 3.9.0. Track state snapshot/restore (Post Mortem Verified Fix Preview, P2-001). Two new commands: snapshot_track_state writes a crash-safe state file BEFORE any mutation covering exactly what preview operations can change (track volume, pan, per-FX enabled state with GUID identity, named FX parameter normalized values; a parameters[] entry that doesn't resolve fails the whole snapshot closed). restore_track_state resolves the track by GUID only (deleted track fails closed, nothing written), matches FX by GUID against the live chain so a moved FX still restores at its live index, restores everything that resolves, and reports what it could not in unrestored[] with typed reasons. Restore never touches state the snapshot does not contain. Additive only; no existing command changed. Includes 3.8.3. capture_track_audio regression fix: 3.8.2's solo-based isolation silenced captures of tracks that have media items (e.g. guitar tracks whose amp-sim FX do not render when the track is isolated offline). Solo isolation is now applied ONLY to item-less routing tracks (Kontakt multi-out stems etc.), which it isolates correctly; tracks with media items fall back to the plain selected-track render instead of returning silence. IMPORTANT/known limitation: for item-based tracks that plain render returns the full master mix, not the isolated track, so single-track measurements on such tracks reflect the whole mix; the capture reply's note now says so explicitly. Item-less routing-track isolation also bypasses every downstream bus FX (parent folders + master) so the capture is the track's own signal only. True per-track isolation for item-based tracks (amp-sim offline-render problem) remains open. Includes 3.8.2. capture_track_audio isolation fix: captures of item-less routing tracks (e.g. Kontakt multi-out drum stems) were returning the full mix, not the named track. REAPER's "stems (selected tracks)" render only renders tracks that hold media items; an item-less track silently fell back to the master mix, so every stem came back identical. The capture now exclusive-solos the target track for the render (restoring every track's solo state afterward) so any track isolates correctly. Same change bypasses the master-bus FX chain for the render, so the mastering chain no longer colors per-track measurements (LUFS/peak/spectrum); master-FX state is restored afterward. This fixes Post Mortem's cross-track masking, which was comparing the mix against itself. Includes 3.8.1. Render-dialog-hang fix: a capture_track_audio or render no longer hangs the bridge on a fresh install. REAPER's render-progress window blocks the synchronous render until dismissed unless its "Automatically close when finished" checkbox is ticked; the bridge now forces that setting (renderclosewhendone bit 0) on for the render and restores the user's prior value afterward, via SWS. Without SWS it degrades gracefully and the reply carries render_autoclose_warning instead of risking the hang. Includes 3.8.0. Bridge robustness (Phase 4 of the 2026-07-02 review): a crash mid-render no longer bricks the bridge (render locks reclaim after 6h); command ids are sanitized before naming the outbox reply (path traversal + non-string crash closed); the singleton lock writes atomically; heartbeats now actually carry the in-flight-command marker so a long sampler load reads as busy, not dead; json decoder refuses null array elements (they silently shifted later elements) and lone low surrogates. Includes 3.6.0. Platform correctness (Phase 3 of the 2026-07-02 review): Windows error replies carry the real UPPER_SNAKE code (the drive letter in the script path used to decode every error as code "C"); Linux status/jam no longer report DEAD when pgrep misses the lowercase reaper binary (both names matched, and a miss defers to the heartbeat). Includes 3.5.0. Broken-features cluster (Phase 2 of the 2026-07-02 review): discover-map actually reads .midnam note names (GetTrackMIDINoteNameEx; the old call could never return a name); short drum lanes really loop (longer-than-section and non-dividing lanes tile correctly instead of rendering silence); riff accepts 24-bit PCM (REAPER's default record format) and WAVE_FORMAT_EXTENSIBLE; eq/setparam scan every FX parameter via paginated limit/offset (max_params was silently ignored, hiding EQ bands past index 200). Includes 3.4.0 (honesty cluster: requeue triage, stale-reply clear, evidence-gated eq/setparam/send exits).]]></changelog>
<source main="main">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/reaper_agent_bridge.lua</source>
<source file="json.lua">https://github.com/wretcher207/reaper-daemon/raw/main/bridge/json.lua</source>
</version>
</reapack>
</category>
</index>