release: publish Lumi 0.3.5

This commit is contained in:
Franz Rolfsvaag 2026-07-26 17:38:59 +02:00
parent 2d8dc86b20
commit dc87b7e8e2
20 changed files with 102 additions and 36 deletions

View File

@ -1,5 +1,13 @@
# Lumi changelog # 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 ## 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. - Fixed production Companion pairing and download generation behind Lumi's private HTTPS reverse proxy, while continuing to reject forged forwarding headers from public clients.

View File

@ -1,5 +1,5 @@
#ifndef AppVersion #ifndef AppVersion
#define AppVersion "0.2.3" #define AppVersion "0.2.4"
#endif #endif
#ifndef SourceRoot #ifndef SourceRoot
#error SourceRoot must point at the self-contained Companion publish directory. #error SourceRoot must point at the self-contained Companion publish directory.

View File

@ -2,8 +2,8 @@
# Copyright (c) 2026 OokamiKunTV # Copyright (c) 2026 OokamiKunTV
cmake_minimum_required(VERSION 3.28) cmake_minimum_required(VERSION 3.28)
project(lumi-obs-bridge VERSION 0.2.4 LANGUAGES CXX) project(lumi-obs-bridge VERSION 0.2.5 LANGUAGES CXX)
set(LUMI_BRIDGE_VERSION "0.2.4-development" CACHE STRING "Lumi Companion bridge release version") set(LUMI_BRIDGE_VERSION "0.2.5-development" CACHE STRING "Lumi Companion bridge release version")
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)

View File

@ -1,6 +1,6 @@
param( param(
[string]$ObsVersion = "31.1.1", [string]$ObsVersion = "31.1.1",
[string]$BridgeVersion = "0.2.4", [string]$BridgeVersion = "0.2.5",
[string]$CacheRoot = "$env:LOCALAPPDATA\LumiCompanionBuild" [string]$CacheRoot = "$env:LOCALAPPDATA\LumiCompanionBuild"
) )

View File

@ -1,6 +1,6 @@
param( param(
[string]$Version = "0.2.3", [string]$Version = "0.2.4",
[string]$BridgeVersion = "0.2.4", [string]$BridgeVersion = "0.2.5",
[string]$ObsVersion = "31.1.1" [string]$ObsVersion = "31.1.1"
) )

View File

@ -6,8 +6,8 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>
<ApplicationIcon>Assets\Lumi.Companion.ico</ApplicationIcon> <ApplicationIcon>Assets\Lumi.Companion.ico</ApplicationIcon>
<Version>0.2.3</Version> <Version>0.2.4</Version>
<AssemblyVersion>0.2.3.0</AssemblyVersion> <AssemblyVersion>0.2.4.0</AssemblyVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<AvaloniaResource Include="Assets\Lumi.Companion.ico" /> <AvaloniaResource Include="Assets\Lumi.Companion.ico" />

View File

@ -14,7 +14,7 @@ editable: false
Lumi is the core web UI and bot runtime. Lumi is the core web UI and bot runtime.
## Runtime ## Runtime
Package: lumi-bot Package: lumi-bot
Version: 0.3.4 Version: 0.3.5
## Routes ## Routes
- POST /api/diagnostics/v1/run - POST /api/diagnostics/v1/run
- GET /api/events - GET /api/events

View File

@ -14,7 +14,7 @@ editable: false
Server-hosted whisper.cpp transcription for Lumi Companion and OBS closed captions. Server-hosted whisper.cpp transcription for Lumi Companion and OBS closed captions.
## Metadata ## Metadata
Plugin ID: lumi_transcription Plugin ID: lumi_transcription
Version: 0.2.3 Version: 0.2.4
Default state: enabled Default state: enabled
## Web Routes ## Web Routes
- /plugins/lumi_transcription - /plugins/lumi_transcription

View File

@ -14,7 +14,7 @@ editable: false
Provider-neutral song state, chat announcements, and a customizable Lumi Overlay source. Provider-neutral song state, chat announcements, and a customizable Lumi Overlay source.
## Metadata ## Metadata
Plugin ID: now_playing Plugin ID: now_playing
Version: 0.1.2 Version: 0.1.3
Default state: enabled Default state: enabled
## Web Routes ## Web Routes
- /plugins/now_playing - /plugins/now_playing

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "lumi-bot", "name": "lumi-bot",
"version": "0.3.4", "version": "0.3.5",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "lumi-bot", "name": "lumi-bot",
"version": "0.3.4", "version": "0.3.5",
"dependencies": { "dependencies": {
"acme-client": "^5.4.0", "acme-client": "^5.4.0",
"adm-zip": "^0.6.0", "adm-zip": "^0.6.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "lumi-bot", "name": "lumi-bot",
"version": "0.3.4", "version": "0.3.5",
"private": true, "private": true,
"type": "commonjs", "type": "commonjs",
"scripts": { "scripts": {

View File

@ -1,5 +1,12 @@
# Lumi Transcription changelog # 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 ## 0.2.3
- Added the MediaMTX private-test destination contract and OBS Bridge 0.2.4. - Added the MediaMTX private-test destination contract and OBS Bridge 0.2.4.

View File

@ -1,17 +1,17 @@
{ {
"schema_version": 1, "schema_version": 1,
"version": "0.2.3", "version": "0.2.4",
"signed": false, "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": { "installer": {
"id": "windows-x64-installer", "id": "windows-x64-installer",
"platform": "win32", "platform": "win32",
"architecture": "x64", "architecture": "x64",
"label": "Windows x64 per-user installer", "label": "Windows x64 per-user installer",
"filename": "Lumi.Companion-Setup.exe", "filename": "Lumi.Companion-Setup.exe",
"url": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi/releases/download/companion-v0.2.3/Lumi.Companion-Setup.exe", "url": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi/releases/download/companion-v0.2.4/Lumi.Companion-Setup.exe",
"sha256": "fddb7f25b866de0645b6e20875145170c95666000db18ed75dfc1f6af41dbd72", "sha256": "d94b86c5c2f9908471ecd86dd71c32d0a1e9c0e33400643a739779596f7d0e71",
"bytes": 51870710 "bytes": 51909250
}, },
"artifacts": [ "artifacts": [
{ {
@ -20,9 +20,9 @@
"architecture": "x64", "architecture": "x64",
"label": "Windows x64 self-contained", "label": "Windows x64 self-contained",
"filename": "Lumi.Companion-win-x64.zip", "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", "url": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi/releases/download/companion-v0.2.4/Lumi.Companion-win-x64.zip",
"sha256": "ff7d5b2c2d2928c4db4cb8c4e33702859a0739312294c32c1d95f16d50ee185a", "sha256": "b0304a733b86e4b6da21216d4458210443d0b099efb24a9f2e4756d4f08780eb",
"bytes": 66774831, "bytes": 68486263,
"entrypoint": "Lumi.Companion.App.exe" "entrypoint": "Lumi.Companion.App.exe"
} }
] ]

View File

@ -1,7 +1,7 @@
{ {
"id": "lumi_transcription", "id": "lumi_transcription",
"name": "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.", "description": "Server-hosted whisper.cpp transcription for Lumi Companion and OBS closed captions.",
"main": "index.js", "main": "index.js",
"channel": "stable", "channel": "stable",

View File

@ -1,5 +1,11 @@
# Song Overlay changelog # 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 ## 0.1.2
- Added Spotify playback capture through Lumi Companion with shared paired-device authentication. - Added Spotify playback capture through Lumi Companion with shared paired-device authentication.

View File

@ -1,7 +1,7 @@
{ {
"id": "now_playing", "id": "now_playing",
"name": "Song Overlay", "name": "Song Overlay",
"version": "0.1.2", "version": "0.1.3",
"description": "Provider-neutral song state, chat announcements, and a customizable Lumi Overlay source.", "description": "Provider-neutral song state, chat announcements, and a customizable Lumi Overlay source.",
"main": "index.js", "main": "index.js",
"channel": "stable", "channel": "stable",

View File

@ -2,6 +2,38 @@
"schema_version": 1, "schema_version": 1,
"channel": "stable", "channel": "stable",
"releases": [ "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", "version": "0.3.4",
"ref": "refs/tags/v0.3.4", "ref": "refs/tags/v0.3.4",

View File

@ -4,13 +4,13 @@ const path = require("path");
const { findSafeTarget } = require("../src/services/versioning"); const { findSafeTarget } = require("../src/services/versioning");
const root = path.join(__dirname, ".."); const root = path.join(__dirname, "..");
const releaseVersion = "0.3.4"; const releaseVersion = "0.3.5";
const previousStableVersion = "0.3.3"; const previousStableVersion = "0.3.4";
const priorStableVersion = "0.3.2"; const priorStableVersion = "0.3.3";
const earliestCompatibleCoreVersion = "0.1.9"; const earliestCompatibleCoreVersion = "0.1.9";
const introducedPlugins = { const introducedPlugins = {
lumi_transcription: { version: "0.2.3", knowledge: "lumi-transcription" }, lumi_transcription: { version: "0.2.4", knowledge: "lumi-transcription" },
now_playing: { version: "0.1.2", knowledge: "now-playing" } now_playing: { version: "0.1.3", knowledge: "now-playing" }
}; };
function readJson(relativePath) { 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(webSearch.minimum_lumi_ai_version, "0.8.2");
assert.equal(hasVersionHeading(readText("plugins/lumi_ai_web_search/CHANGELOG.md"), webSearch.version), true); 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.");

View File

@ -24,7 +24,7 @@ function readJson(relativePath) {
const releaseIndex = readJson("release-index.json"); const releaseIndex = readJson("release-index.json");
const releaseVersions = releaseIndex.releases.map((release) => release.version); 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"); assert.equal(new Set(releaseVersions).size, releaseVersions.length, "release versions must be unique");
for (const release of releaseIndex.releases) { for (const release of releaseIndex.releases) {
assert.equal(normalizeRepositoryRef(release.ref), release.ref); assert.equal(normalizeRepositoryRef(release.ref), release.ref);
@ -37,8 +37,8 @@ const packageVersion = readJson("package.json").version;
const coreManifest = readJson("update-manifest.json"); const coreManifest = readJson("update-manifest.json");
assert.equal(packageVersion, coreManifest.version); assert.equal(packageVersion, coreManifest.version);
assert.equal(coreManifest.channel, "stable"); assert.equal(coreManifest.channel, "stable");
assert.equal(packageVersion, "0.3.4"); assert.equal(packageVersion, "0.3.5");
assert.equal(currentRelease.version, "0.3.4"); assert.equal(currentRelease.version, "0.3.5");
assert.deepEqual(currentRelease.replaces_versions, ["1.2.0"]); assert.deepEqual(currentRelease.replaces_versions, ["1.2.0"]);
for (const [pluginId, version] of Object.entries(currentRelease.plugins)) { for (const [pluginId, version] of Object.entries(currentRelease.plugins)) {
assert.equal(readJson(`plugins/${pluginId}/plugin.json`).version, version, `${pluginId} release catalog version`); 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 = { const baseTarget = {
current_version: "0.2.4", current_version: "0.2.4",
available_versions: [ 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.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.3", ref: "refs/tags/v0.3.3", rollback_safe: true },
{ version: "0.3.2", ref: "refs/tags/v0.3.2", 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" channel: "stable"
}); });
assert.equal(corrected.version_correction, true); 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.update_available, true);
assert.equal(corrected.blocked, false); assert.equal(corrected.blocked, false);

View File

@ -1,6 +1,6 @@
{ {
"name": "Lumi Core", "name": "Lumi Core",
"version": "0.3.4", "version": "0.3.5",
"channel": "stable", "channel": "stable",
"released_at": "2026-07-26", "released_at": "2026-07-26",
"compatible_from": "0.1.9", "compatible_from": "0.1.9",
@ -8,7 +8,7 @@
"replaces_versions": [ "replaces_versions": [
"1.2.0" "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, "rollback_safe": true,
"requirements": [ "requirements": [
"Node.js 18 or newer" "Node.js 18 or newer"
@ -397,6 +397,18 @@
], ],
"rollback_safe": true, "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." "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."
} }
] ]
} }