diff --git a/CHANGELOG.md b/CHANGELOG.md index 0101f09..d1e8e20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Lumi changelog +## 0.3.5 + +- Released Companion 0.2.4 with silent Lumi reconnect, a direct transcription on/off control, consistent collapsed plugin navigation, and a one-click route from an active Stream Test to its Lumi viewer. +- Made private-test captions progressively reveal speech instead of waiting for a full utterance, retained readable multi-line captions, and kept stale words moving out naturally. +- Added Lumi-managed RTMPS certificates for public production ingest while retaining HTTP and RTMP for explicit localhost/private development use. +- Refreshed Song Overlay capture and delivery, shared Companion authentication across installed plugins, and completed durable redacted logging across core and bundled plugins. +- Released OBS Bridge 0.2.5 and synchronized the updated Transcription and Song Overlay plugins without replacing preserved server, plugin, pairing, or OBS data. + ## 0.3.4 - Fixed production Companion pairing and download generation behind Lumi's private HTTPS reverse proxy, while continuing to reject forged forwarding headers from public clients. diff --git a/companion/installer/Lumi.Companion.iss b/companion/installer/Lumi.Companion.iss index 94d0479..dce3b8a 100644 --- a/companion/installer/Lumi.Companion.iss +++ b/companion/installer/Lumi.Companion.iss @@ -1,5 +1,5 @@ #ifndef AppVersion - #define AppVersion "0.2.3" + #define AppVersion "0.2.4" #endif #ifndef SourceRoot #error SourceRoot must point at the self-contained Companion publish directory. diff --git a/companion/native/obs-bridge/CMakeLists.txt b/companion/native/obs-bridge/CMakeLists.txt index 4dd9222..8e10dc0 100644 --- a/companion/native/obs-bridge/CMakeLists.txt +++ b/companion/native/obs-bridge/CMakeLists.txt @@ -2,8 +2,8 @@ # Copyright (c) 2026 OokamiKunTV cmake_minimum_required(VERSION 3.28) -project(lumi-obs-bridge VERSION 0.2.4 LANGUAGES CXX) -set(LUMI_BRIDGE_VERSION "0.2.4-development" CACHE STRING "Lumi Companion bridge release version") +project(lumi-obs-bridge VERSION 0.2.5 LANGUAGES CXX) +set(LUMI_BRIDGE_VERSION "0.2.5-development" CACHE STRING "Lumi Companion bridge release version") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/companion/scripts/build-obs-bridge.ps1 b/companion/scripts/build-obs-bridge.ps1 index 34947af..18fddf5 100644 --- a/companion/scripts/build-obs-bridge.ps1 +++ b/companion/scripts/build-obs-bridge.ps1 @@ -1,6 +1,6 @@ param( [string]$ObsVersion = "31.1.1", - [string]$BridgeVersion = "0.2.4", + [string]$BridgeVersion = "0.2.5", [string]$CacheRoot = "$env:LOCALAPPDATA\LumiCompanionBuild" ) diff --git a/companion/scripts/publish-companion.ps1 b/companion/scripts/publish-companion.ps1 index b8e7a3b..aee23cd 100644 --- a/companion/scripts/publish-companion.ps1 +++ b/companion/scripts/publish-companion.ps1 @@ -1,6 +1,6 @@ param( - [string]$Version = "0.2.3", - [string]$BridgeVersion = "0.2.4", + [string]$Version = "0.2.4", + [string]$BridgeVersion = "0.2.5", [string]$ObsVersion = "31.1.1" ) diff --git a/companion/src/Lumi.Companion.App/Lumi.Companion.App.csproj b/companion/src/Lumi.Companion.App/Lumi.Companion.App.csproj index 6253a53..1738fd1 100644 --- a/companion/src/Lumi.Companion.App/Lumi.Companion.App.csproj +++ b/companion/src/Lumi.Companion.App/Lumi.Companion.App.csproj @@ -6,8 +6,8 @@ enable app.manifest Assets\Lumi.Companion.ico - 0.2.3 - 0.2.3.0 + 0.2.4 + 0.2.4.0 diff --git a/knowledge/core/lumi-core.md b/knowledge/core/lumi-core.md index a194727..ae5986e 100644 --- a/knowledge/core/lumi-core.md +++ b/knowledge/core/lumi-core.md @@ -14,7 +14,7 @@ editable: false Lumi is the core web UI and bot runtime. ## Runtime Package: lumi-bot -Version: 0.3.4 +Version: 0.3.5 ## Routes - POST /api/diagnostics/v1/run - GET /api/events diff --git a/knowledge/plugins/lumi-transcription.md b/knowledge/plugins/lumi-transcription.md index 4af94c6..416f281 100644 --- a/knowledge/plugins/lumi-transcription.md +++ b/knowledge/plugins/lumi-transcription.md @@ -14,7 +14,7 @@ editable: false Server-hosted whisper.cpp transcription for Lumi Companion and OBS closed captions. ## Metadata Plugin ID: lumi_transcription -Version: 0.2.3 +Version: 0.2.4 Default state: enabled ## Web Routes - /plugins/lumi_transcription diff --git a/knowledge/plugins/now-playing.md b/knowledge/plugins/now-playing.md index 8f8fde0..a241f2d 100644 --- a/knowledge/plugins/now-playing.md +++ b/knowledge/plugins/now-playing.md @@ -14,7 +14,7 @@ editable: false Provider-neutral song state, chat announcements, and a customizable Lumi Overlay source. ## Metadata Plugin ID: now_playing -Version: 0.1.2 +Version: 0.1.3 Default state: enabled ## Web Routes - /plugins/now_playing diff --git a/package-lock.json b/package-lock.json index 53bdf05..2676669 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lumi-bot", - "version": "0.3.4", + "version": "0.3.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "lumi-bot", - "version": "0.3.4", + "version": "0.3.5", "dependencies": { "acme-client": "^5.4.0", "adm-zip": "^0.6.0", diff --git a/package.json b/package.json index 4507fa8..b30e39e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lumi-bot", - "version": "0.3.4", + "version": "0.3.5", "private": true, "type": "commonjs", "scripts": { diff --git a/plugins/lumi_transcription/CHANGELOG.md b/plugins/lumi_transcription/CHANGELOG.md index 4ed5c28..db4d74a 100644 --- a/plugins/lumi_transcription/CHANGELOG.md +++ b/plugins/lumi_transcription/CHANGELOG.md @@ -1,5 +1,12 @@ # Lumi Transcription changelog +## 0.2.4 + +- Reveal private-test captions progressively, wrap them across readable lines, and age stale caption words out without waiting for a complete sentence. +- Add a Companion transcription toggle, silent connection recovery, consistent collapsed plugin navigation, and direct access to the active Lumi Stream Testing viewer. +- Support Lumi-managed RTMPS ingest certificates in production while retaining explicit localhost and private-network development transport. +- Release Companion 0.2.4 with OBS Bridge 0.2.5 through the normal verified installer and update path. + ## 0.2.3 - Added the MediaMTX private-test destination contract and OBS Bridge 0.2.4. diff --git a/plugins/lumi_transcription/companion_manifest.json b/plugins/lumi_transcription/companion_manifest.json index 22a34bd..ebf07eb 100644 --- a/plugins/lumi_transcription/companion_manifest.json +++ b/plugins/lumi_transcription/companion_manifest.json @@ -1,17 +1,17 @@ { "schema_version": 1, - "version": "0.2.3", + "version": "0.2.4", "signed": false, - "release_notes": "Adds the MediaMTX private-test handoff, a dedicated OBS output immune to account OAuth destination changes, exact recovery retry handling, and OBS Bridge 0.2.4.", + "release_notes": "Adds silent Lumi reconnect, a transcription toggle, consistent collapsed plugin navigation, a direct Stream Testing viewer shortcut, progressive private captions, and OBS Bridge 0.2.5.", "installer": { "id": "windows-x64-installer", "platform": "win32", "architecture": "x64", "label": "Windows x64 per-user installer", "filename": "Lumi.Companion-Setup.exe", - "url": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi/releases/download/companion-v0.2.3/Lumi.Companion-Setup.exe", - "sha256": "fddb7f25b866de0645b6e20875145170c95666000db18ed75dfc1f6af41dbd72", - "bytes": 51870710 + "url": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi/releases/download/companion-v0.2.4/Lumi.Companion-Setup.exe", + "sha256": "d94b86c5c2f9908471ecd86dd71c32d0a1e9c0e33400643a739779596f7d0e71", + "bytes": 51909250 }, "artifacts": [ { @@ -20,9 +20,9 @@ "architecture": "x64", "label": "Windows x64 self-contained", "filename": "Lumi.Companion-win-x64.zip", - "url": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi/releases/download/companion-v0.2.3/Lumi.Companion-win-x64.zip", - "sha256": "ff7d5b2c2d2928c4db4cb8c4e33702859a0739312294c32c1d95f16d50ee185a", - "bytes": 66774831, + "url": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi/releases/download/companion-v0.2.4/Lumi.Companion-win-x64.zip", + "sha256": "b0304a733b86e4b6da21216d4458210443d0b099efb24a9f2e4756d4f08780eb", + "bytes": 68486263, "entrypoint": "Lumi.Companion.App.exe" } ] diff --git a/plugins/lumi_transcription/plugin.json b/plugins/lumi_transcription/plugin.json index 1d63b7a..1e7e6ef 100644 --- a/plugins/lumi_transcription/plugin.json +++ b/plugins/lumi_transcription/plugin.json @@ -1,7 +1,7 @@ { "id": "lumi_transcription", "name": "Lumi Transcription", - "version": "0.2.3", + "version": "0.2.4", "description": "Server-hosted whisper.cpp transcription for Lumi Companion and OBS closed captions.", "main": "index.js", "channel": "stable", diff --git a/plugins/now_playing/CHANGELOG.md b/plugins/now_playing/CHANGELOG.md index ae77966..10fb3b8 100644 --- a/plugins/now_playing/CHANGELOG.md +++ b/plugins/now_playing/CHANGELOG.md @@ -1,5 +1,11 @@ # Song Overlay changelog +## 0.1.3 + +- Reuse the Companion device session for Song Overlay traffic instead of asking each installed plugin to authenticate independently. +- Refresh the active overlay when playback changes and keep the OBS pop-out surface transparent and consistent with the editor preview. +- Preserve resilient song-state delivery and the shared announcement template used by the `!music` command. + ## 0.1.2 - Added Spotify playback capture through Lumi Companion with shared paired-device authentication. diff --git a/plugins/now_playing/plugin.json b/plugins/now_playing/plugin.json index cf39062..115e1ad 100644 --- a/plugins/now_playing/plugin.json +++ b/plugins/now_playing/plugin.json @@ -1,7 +1,7 @@ { "id": "now_playing", "name": "Song Overlay", - "version": "0.1.2", + "version": "0.1.3", "description": "Provider-neutral song state, chat announcements, and a customizable Lumi Overlay source.", "main": "index.js", "channel": "stable", diff --git a/release-index.json b/release-index.json index aee0a6a..ef33995 100644 --- a/release-index.json +++ b/release-index.json @@ -2,6 +2,38 @@ "schema_version": 1, "channel": "stable", "releases": [ + { + "version": "0.3.5", + "ref": "refs/tags/v0.3.5", + "released_at": "2026-07-26", + "installable": true, + "rollback_safe": true, + "replaces_versions": [ + "1.2.0" + ], + "data_policy": "preserve", + "dependency_policy": "sync_on_restart", + "migration_notes": "Adds resilient Companion reconnect and caption controls, progressive private-test captions, improved Companion navigation and stream-viewer access, automatic Lumi-managed RTMPS certificates, refreshed Song Overlay delivery, and repository-wide durable redacted logging. Existing local and plugin data remains preserved.", + "plugins": { + "auto-vc": "0.1.6", + "birthday": "0.1.3", + "economy-framework": "0.2.10", + "economy-games": "0.1.7", + "expression-interaction": "0.2.1", + "lumi_ai": "0.8.5", + "lumi_transcription": "0.2.4", + "moderation": "0.1.5", + "now_playing": "0.1.3", + "okf": "0.1.2", + "quotes": "0.1.2", + "sample-plugin": "0.1.0", + "throne_wishlist": "0.1.2", + "welcome_messages": "0.1.1" + }, + "tools": { + "lumi_ai_web_search": "0.1.1" + } + }, { "version": "0.3.4", "ref": "refs/tags/v0.3.4", diff --git a/scripts/verify-release-metadata.js b/scripts/verify-release-metadata.js index 970f04c..ca9263d 100644 --- a/scripts/verify-release-metadata.js +++ b/scripts/verify-release-metadata.js @@ -4,13 +4,13 @@ const path = require("path"); const { findSafeTarget } = require("../src/services/versioning"); const root = path.join(__dirname, ".."); -const releaseVersion = "0.3.4"; -const previousStableVersion = "0.3.3"; -const priorStableVersion = "0.3.2"; +const releaseVersion = "0.3.5"; +const previousStableVersion = "0.3.4"; +const priorStableVersion = "0.3.3"; const earliestCompatibleCoreVersion = "0.1.9"; const introducedPlugins = { - lumi_transcription: { version: "0.2.3", knowledge: "lumi-transcription" }, - now_playing: { version: "0.1.2", knowledge: "now-playing" } + lumi_transcription: { version: "0.2.4", knowledge: "lumi-transcription" }, + now_playing: { version: "0.1.3", knowledge: "now-playing" } }; function readJson(relativePath) { @@ -82,4 +82,4 @@ assert.equal(webSearch.minimum_lumi_version, "0.2.0"); assert.equal(webSearch.minimum_lumi_ai_version, "0.8.2"); assert.equal(hasVersionHeading(readText("plugins/lumi_ai_web_search/CHANGELOG.md"), webSearch.version), true); -console.log("Release metadata verification passed: stable core 0.3.4 after 0.3.3 with synchronized Companion plugin metadata."); +console.log("Release metadata verification passed: stable core 0.3.5 after 0.3.4 with synchronized Companion plugin metadata."); diff --git a/scripts/verify-update-system.js b/scripts/verify-update-system.js index 6cb5dc1..32a989e 100644 --- a/scripts/verify-update-system.js +++ b/scripts/verify-update-system.js @@ -24,7 +24,7 @@ function readJson(relativePath) { const releaseIndex = readJson("release-index.json"); const releaseVersions = releaseIndex.releases.map((release) => release.version); -assert.deepEqual(releaseVersions, ["0.3.4", "0.3.3", "0.3.2", "0.3.1", "0.3.0", "0.2.27", "0.2.26", "0.2.25", "0.2.24", "0.2.23", "0.2.22", "0.2.21", "0.2.20", "0.2.19", "0.2.18", "0.2.17", "0.2.16", "0.2.15", "0.2.14", "0.2.13", "0.2.12", "0.2.11", "0.2.10", "0.2.9", "0.2.8", "0.2.7", "0.2.6", "0.2.5", "0.2.4", "0.2.3", "0.2.2", "0.2.1", "0.2.0", "0.1.9"]); +assert.deepEqual(releaseVersions, ["0.3.5", "0.3.4", "0.3.3", "0.3.2", "0.3.1", "0.3.0", "0.2.27", "0.2.26", "0.2.25", "0.2.24", "0.2.23", "0.2.22", "0.2.21", "0.2.20", "0.2.19", "0.2.18", "0.2.17", "0.2.16", "0.2.15", "0.2.14", "0.2.13", "0.2.12", "0.2.11", "0.2.10", "0.2.9", "0.2.8", "0.2.7", "0.2.6", "0.2.5", "0.2.4", "0.2.3", "0.2.2", "0.2.1", "0.2.0", "0.1.9"]); assert.equal(new Set(releaseVersions).size, releaseVersions.length, "release versions must be unique"); for (const release of releaseIndex.releases) { assert.equal(normalizeRepositoryRef(release.ref), release.ref); @@ -37,8 +37,8 @@ const packageVersion = readJson("package.json").version; const coreManifest = readJson("update-manifest.json"); assert.equal(packageVersion, coreManifest.version); assert.equal(coreManifest.channel, "stable"); -assert.equal(packageVersion, "0.3.4"); -assert.equal(currentRelease.version, "0.3.4"); +assert.equal(packageVersion, "0.3.5"); +assert.equal(currentRelease.version, "0.3.5"); assert.deepEqual(currentRelease.replaces_versions, ["1.2.0"]); for (const [pluginId, version] of Object.entries(currentRelease.plugins)) { assert.equal(readJson(`plugins/${pluginId}/plugin.json`).version, version, `${pluginId} release catalog version`); @@ -50,6 +50,7 @@ for (const [toolId, version] of Object.entries(currentRelease.tools)) { const baseTarget = { current_version: "0.2.4", available_versions: [ + { version: "0.3.5", ref: "refs/tags/v0.3.5", rollback_safe: true }, { version: "0.3.4", ref: "refs/tags/v0.3.4", rollback_safe: true }, { version: "0.3.3", ref: "refs/tags/v0.3.3", rollback_safe: true }, { version: "0.3.2", ref: "refs/tags/v0.3.2", rollback_safe: true }, @@ -153,7 +154,7 @@ const corrected = buildStatus({ channel: "stable" }); assert.equal(corrected.version_correction, true); -assert.equal(corrected.safe_target_version, "0.3.4"); +assert.equal(corrected.safe_target_version, "0.3.5"); assert.equal(corrected.update_available, true); assert.equal(corrected.blocked, false); diff --git a/update-manifest.json b/update-manifest.json index 767319b..cd7a4b8 100644 --- a/update-manifest.json +++ b/update-manifest.json @@ -1,6 +1,6 @@ { "name": "Lumi Core", - "version": "0.3.4", + "version": "0.3.5", "channel": "stable", "released_at": "2026-07-26", "compatible_from": "0.1.9", @@ -8,7 +8,7 @@ "replaces_versions": [ "1.2.0" ], - "migration_notes": "Fixes Companion package generation behind Lumi's private HTTPS reverse proxy, applies the same transport policy to HTTP and WebSocket device traffic, and standardizes durable redacted operational logging. Existing settings, databases, pairing records, OBS settings, credentials, overlays, uploads, models, secrets, plugin data, and local-only plugins are preserved.", + "migration_notes": "Adds resilient Companion reconnect and caption controls, progressive private-test captions, improved Companion navigation and stream-viewer access, automatic Lumi-managed RTMPS certificates, refreshed Song Overlay delivery, and repository-wide durable redacted logging. Existing settings, databases, pairing records, OBS settings, credentials, overlays, uploads, models, secrets, plugin data, and local-only plugins are preserved.", "rollback_safe": true, "requirements": [ "Node.js 18 or newer" @@ -397,6 +397,18 @@ ], "rollback_safe": true, "migration_notes": "Replaces the FFmpeg Stream Testing receiver and transcoder with Lumi-managed checksum-pinned MediaMTX source remuxing, authenticated same-origin playback, and factual receiver diagnostics. Existing settings, databases, pairing records, OBS settings, credentials, overlays, uploads, models, secrets, plugin data, and local-only plugins are preserved." + }, + { + "version": "0.3.4", + "channel": "stable", + "released_at": "2026-07-26", + "compatible_from": "0.1.9", + "migration_kind": "patch", + "replaces_versions": [ + "1.2.0" + ], + "rollback_safe": true, + "migration_notes": "Fixes Companion package generation behind Lumi's private HTTPS reverse proxy, applies the same transport policy to HTTP and WebSocket device traffic, and standardizes durable redacted operational logging. Existing settings, databases, pairing records, OBS settings, credentials, overlays, uploads, models, secrets, plugin data, and local-only plugins are preserved." } ] }