Skip to content

ReaLackey v0.3.0

Choose a tag to compare

@github-actions github-actions released this 16 Jul 15:14

Added

  • Reasoning display: models that expose their chain-of-thought — DeepSeek-R1,
    Qwen3, and Ollama "thinking" models over the OpenAI-compatible endpoint (via
    reasoning_content) — now stream it into a collapsible Reasoning block above
    the answer. It's shown separately from the reply and is not spoken as the final
    answer.
  • Anthropic extended thinking, as a per-provider toggle ("Extended thinking
    (reasoning)" in the provider settings dialog, Anthropic only). When on, the
    request asks for adaptive thinking — the model reasons more on hard tasks, less
    on easy ones — and streams that reasoning into the same collapsible Reasoning
    block as above. The thinking blocks are stored and replayed verbatim (with their
    signatures) so multi-step tool-use conversations keep their reasoning continuity;
    toggling thinking back off cleanly drops them from the ongoing conversation.
    Requires a model that supports adaptive thinking (Claude Opus 4.8 / 4.7 / 4.6,
    Sonnet 4.6+); older models reject it.
  • Lower per-request token usage (helps free-tier keys, which meter tokens/minute
    and re-charge the whole tool list + prompt every agentic turn):
    • Trimmed the tool descriptions and system prompt (deduped boilerplate now
      stated once) — ~12% off the static overhead, no behaviour change.
    • Media eviction: past screenshots/audio/video-clip frames were re-uploaded
      every later turn; now only the most recent captures stay live (older ones
      become a placeholder). Tunable via RAAI_MEDIA_KEEP (default 2).
    • Prompt caching on the Anthropic path (cache_control on the tools+system
      prefix): repeated turns re-read it as a rate-limit-free cache read.
      RAAI_PROMPT_CACHE=off to disable.
    • Progressive tool disclosure (opt-in RAAI_PROGRESSIVE_TOOLS=on): only a
      core set + a load_tools(query) loader are sent; the model pulls in the rest
      by capability on demand (session-persisted, with keyword pre-loading). Cuts the
      tool payload ~70–90% for the turn — aimed at free tiers like Gemini.
  • Video-clip vision (capture_video_clip): instead of a single screenshot of
    REAPER's Video window, the assistant can grab several frames across a time
    range
    (stepping the edit cursor, playback stopped) and — for audio-capable
    models — the clip's audio, so it can reason about motion, cuts, transitions,
    on-screen text timing, and A/V sync. One consent covers the whole clip. Range
    defaults to the time selection; frame count defaults to 6 (2–12). The
    seek-to-frame settle delay is tunable via RAAI_VIDEO_SETTLE_MS (default 250 ms)
    if a heavy video-FX chain needs longer to re-render.
  • Per-provider "Supports audio (listening)" checkbox in the provider settings
    dialog, next to "Supports images". Audio input was previously auto-detected from
    the model id only, so a locally-run multimodal model (e.g. Google Gemma
    3n/4 via Ollama or LM Studio) had no way to enable listening; now you can toggle
    it explicitly. Gemma is also recognized as vision-capable by default. (Whether a
    given local server accepts audio input is up to the server/model.)
  • Prompt presets: save reusable prompts and drop them into the chat composer
    instead of retyping. Manage them (add / edit / delete) from Extensions →
    ReaLackey → "Prompt presets…"
    ; in the chat window the Presets button (or
    Alt+P) opens a picker that inserts the chosen prompt into the composer so
    you can tweak it before sending. Stored globally in presets.json, next to
    providers.json.
  • Chat message navigation + copy: Alt+1 … Alt+0 (and the key right of 0) jump
    to that message and move focus to it (the screen reader reads it); a quick second
    press of the same combo copies that message — your request or the model's
    response — to the clipboard.
  • Action & keyboard-shortcut tools: search_actions (find actions by name),
    get_action_info (an action's name, toggle state, and bound shortcuts),
    run_action (run any action by id or named command — a catch-all for anything
    without a dedicated tool), delete_action_shortcut, and add_action_shortcut
    (opens REAPER's key-assignment dialog, since the API can't bind a key directly).
  • Time-selection tools: get_time_selection, set_time_selection (with an
    optional seek to move the edit cursor to the start), and
    clear_time_selection; the time selection is also reported by get_transport.
    The assistant can now mark a range and then analyse, render, or measure it (the
    analysis/render tools default to the time selection).

Fixed

  • The assistant no longer finishes silently when the model returns an empty
    response (no answer and no tool call). Previously the status just went to
    "Ready." with nothing shown — which reads as a crash — most visibly with local
    models (Ollama) that don't reliably do tool use. It now says the response was
    empty and hints at likely causes.
  • macOS: the release .dylib is now a universal binary (Apple Silicon + Intel).
    It previously shipped arm64-only, so it silently failed to load in REAPER on
    Intel Macs or under Rosetta.
  • macOS: the release is now Developer-ID-signed and Apple-notarized (when the
    repo's signing secrets are configured — see docs/macos-notarization.md), so
    it loads without the manual quarantine step. Without the secrets it falls back
    to an ad-hoc signature (users then run xattr -dr com.apple.quarantine).
  • macOS: keyboard handling in the chat window. Keys typed in the composer could be
    swallowed by REAPER — arrow keys jumping focus to the arrange, and Cmd+C/V/X not
    reaching the text field (they hit REAPER's Edit menu). When the window is in
    front, its keystrokes are now handed to the webview's native editing
    (copy/paste/cut/select-all, arrow keys, typing) instead of REAPER's global
    shortcuts/menu.