diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5bb9ccd --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11 @@ +# Lumi changelog + +## 1.2.0 + +- Added the OBS overlay management and Browser Source system, including scenes, live updates, visual editing, multimedia, external web sources, and OBS bridge extension points. +- Added the role-gated Open Knowledge Foundation plugin with file-backed community/correction knowledge, generated reference material, administration workflows, and Lumi AI retrieval. +- Made Lumi AI OKF-first, improved conversational grounding and fast replies, hardened read-only web-search sourcing, and expanded controller, diagnostics, feedback, and runtime management behavior. +- Added shared placeholder, upload-security, WebUI authentication, destructive-confirmation, safe-file, feedback, and user-lookup capabilities reused across core and plugins. +- Improved update safety with compressed snapshots, model/runtime exclusions, retention controls, transactional replacement, rollback recovery, and preserved local data. +- Added the OBS, OKF, command-list, update, settings, feedback, and repository-wide responsive UI/UX improvements included in this release. +- Added focused verification for WebUI, authentication, feedback, placeholders, uploads, updates, OKF, Lumi AI, destructive actions, overlays, and webhooks. diff --git a/TODO.md b/TODO.md index 44bb065..760a71f 100644 --- a/TODO.md +++ b/TODO.md @@ -679,6 +679,7 @@ This section is for Lumi chat answer feedback and AI Improvement Center work, no ### 2026-07-18 +- 2026-07-18: Published Lumi Core 1.2.0 release metadata with a safe compatibility bridge from 0.1.9, patch-bumped all changed plugin/tool packages, added core and package-specific changelogs, synchronized generated OKF version references, and added release-metadata verification. - 2026-07-18: Fixed community OKF discovery end-to-end: Community Knowledge now lists and opens visible file-backed community entries alongside general entries, keeps admin-only files role-filtered, tolerates a single-character name typo such as `jejee`/`Jejeee`, and carries the earlier user subject into explicit OKF follow-ups without treating previous assistant text as evidence. - 2026-07-18: Made Lumi AI OKF-first: role-filtered OKF retrieval now precedes normal gate routing, the fast model can answer sufficient local facts, verified link questions return exact OKF URLs, early context is reused instead of searched twice, and Web Search is unavailable whenever the fast gate confirms OKF is sufficient. - 2026-07-18: Improved fast OKF reply quality: compact evidence now preserves useful roles, relationships, aliases, activities, and channel names; one-word or incomplete identity replies are rejected; grounded terse drafts receive one bounded fast-model rewrite; and relationship follow-ups must explicitly answer the requested relationship before bypassing the main model. diff --git a/docs/updates.md b/docs/updates.md index 04f813e..f697663 100644 --- a/docs/updates.md +++ b/docs/updates.md @@ -41,6 +41,13 @@ Useful metadata fields include `version`, `channel`, `compatible_from`, `migration_kind`, `migration_notes`, `rollback_safe`, `requirements`, `size`, and changelog entries. Missing changelog data is shown as a warning. +Stable core releases keep `package.json`, `package-lock.json`, +`update-manifest.json`, and the matching `CHANGELOG.md` heading synchronized. +Changed plugins use their `plugin.json` version and a matching plugin +`CHANGELOG.md`; Lumi AI tools use `tool_info.json` and their own changelog. +`scripts/verify-release-metadata.js` checks those relationships, compatibility +metadata, and generated OKF version references before publication. + Stable checks read `main` by default. The newest `experimental-*` branch is used only when explicitly selected on the updates page. diff --git a/knowledge/core/lumi-core.md b/knowledge/core/lumi-core.md index 0256530..b212215 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.1.9 +Version: 1.2.0 ## Routes - GET /api/events - POST /api/destructive-confirmations diff --git a/knowledge/plugins/auto-vc.md b/knowledge/plugins/auto-vc.md index ad09bd0..d3674a4 100644 --- a/knowledge/plugins/auto-vc.md +++ b/knowledge/plugins/auto-vc.md @@ -14,7 +14,7 @@ editable: false Auto-create managed voice channels from lobby rooms. ## Metadata Plugin ID: auto-vc -Version: 0.1.5 +Version: 0.1.6 Default state: enabled ## Web Routes - /plugins/auto-vc diff --git a/knowledge/plugins/birthday.md b/knowledge/plugins/birthday.md index 626fe58..556b281 100644 --- a/knowledge/plugins/birthday.md +++ b/knowledge/plugins/birthday.md @@ -14,7 +14,7 @@ editable: false Birthday profiles, announcements, lookup commands, and optional birthday currency gifts. ## Metadata Plugin ID: birthday -Version: 0.1.2 +Version: 0.1.3 Default state: enabled ## Web Routes - /plugins/birthday diff --git a/knowledge/plugins/economy-framework.md b/knowledge/plugins/economy-framework.md index a4acbd4..59a755d 100644 --- a/knowledge/plugins/economy-framework.md +++ b/knowledge/plugins/economy-framework.md @@ -14,7 +14,7 @@ editable: false Cross-platform currency framework with shared balances and extensible hooks. ## Metadata Plugin ID: economy-framework -Version: 0.2.9 +Version: 0.2.10 Default state: enabled ## Web Routes - /plugins/economy-framework diff --git a/knowledge/plugins/expression-interaction.md b/knowledge/plugins/expression-interaction.md index 3cffc29..b49828b 100644 --- a/knowledge/plugins/expression-interaction.md +++ b/knowledge/plugins/expression-interaction.md @@ -14,7 +14,7 @@ editable: false Express yourself through interactions with other users, such as hugging, bonking, comforting, etc ## Metadata Plugin ID: expression-interaction -Version: 0.2.0 +Version: 0.2.1 Default state: enabled ## Web Routes - /plugins/expression-interaction diff --git a/knowledge/plugins/lumi-ai.md b/knowledge/plugins/lumi-ai.md index 2a8250b..52d387d 100644 --- a/knowledge/plugins/lumi-ai.md +++ b/knowledge/plugins/lumi-ai.md @@ -14,7 +14,7 @@ editable: false Managed local AI provider and scoped WebUI assistant for Lumi. ## Metadata Plugin ID: lumi_ai -Version: 0.8.1 +Version: 0.8.2 Default state: enabled ## Web Routes - /plugins/lumi_ai diff --git a/knowledge/plugins/moderation.md b/knowledge/plugins/moderation.md index 1f700bb..ae00d6c 100644 --- a/knowledge/plugins/moderation.md +++ b/knowledge/plugins/moderation.md @@ -14,7 +14,7 @@ editable: false Cross-platform moderation actions, notes, and sanctions. ## Metadata Plugin ID: moderation -Version: 0.1.4 +Version: 0.1.5 Default state: enabled ## Web Routes - /plugins/moderation diff --git a/knowledge/plugins/okf.md b/knowledge/plugins/okf.md index 40120ad..b77f522 100644 --- a/knowledge/plugins/okf.md +++ b/knowledge/plugins/okf.md @@ -14,7 +14,7 @@ editable: false Role-gated knowledge, facts, and Q&A entries for Lumi communities. ## Metadata Plugin ID: okf -Version: 0.1.0 +Version: 0.1.1 Default state: enabled ## Web Routes - /plugins/okf diff --git a/knowledge/plugins/quotes.md b/knowledge/plugins/quotes.md index 287e6df..6f7fb54 100644 --- a/knowledge/plugins/quotes.md +++ b/knowledge/plugins/quotes.md @@ -14,7 +14,7 @@ editable: false Store, search, and manage community quotes. ## Metadata Plugin ID: quotes -Version: 0.1.1 +Version: 0.1.2 Default state: enabled ## Web Routes - /plugins/quotes diff --git a/knowledge/plugins/throne-wishlist.md b/knowledge/plugins/throne-wishlist.md index d663e98..8474597 100644 --- a/knowledge/plugins/throne-wishlist.md +++ b/knowledge/plugins/throne-wishlist.md @@ -14,7 +14,7 @@ editable: false Throne wishlist webhook integration with verified payloads, debug viewer, and cross-platform event messages. ## Metadata Plugin ID: throne_wishlist -Version: 0.1.1 +Version: 0.1.2 Default state: enabled ## Web Routes - /plugins/throne_wishlist diff --git a/knowledge/plugins/welcome-messages.md b/knowledge/plugins/welcome-messages.md index c8e0c86..af312c6 100644 --- a/knowledge/plugins/welcome-messages.md +++ b/knowledge/plugins/welcome-messages.md @@ -14,7 +14,7 @@ editable: false Randomized Discord welcome and welcome-back messages with safe pronoun preferences. ## Metadata Plugin ID: welcome_messages -Version: 0.1.0 +Version: 0.1.1 Default state: enabled ## Web Routes - /plugins/welcome_messages diff --git a/package-lock.json b/package-lock.json index 71b4f6e..e6d8e3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lumi-bot", - "version": "0.1.9", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "lumi-bot", - "version": "0.1.9", + "version": "1.2.0", "dependencies": { "adm-zip": "^0.5.12", "better-sqlite3": "^11.5.0", diff --git a/package.json b/package.json index 6fb2d69..fcccefd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lumi-bot", - "version": "0.1.9", + "version": "1.2.0", "private": true, "type": "commonjs", "scripts": { diff --git a/plugins/auto-vc/CHANGELOG.md b/plugins/auto-vc/CHANGELOG.md new file mode 100644 index 0000000..e1ddb63 --- /dev/null +++ b/plugins/auto-vc/CHANGELOG.md @@ -0,0 +1,6 @@ +# Auto VC changelog + +## 0.1.6 + +- Connected lobby deletion to the shared timed-confirmation flow. +- Improved settings actions and deletion guidance without changing existing lobby data. diff --git a/plugins/auto-vc/plugin.json b/plugins/auto-vc/plugin.json index 543b303..27bf1fe 100644 --- a/plugins/auto-vc/plugin.json +++ b/plugins/auto-vc/plugin.json @@ -1,7 +1,11 @@ { "id": "auto-vc", "name": "Auto VC", - "version": "0.1.5", + "version": "0.1.6", "description": "Auto-create managed voice channels from lobby rooms.", - "main": "index.js" -} + "main": "index.js", + "channel": "stable", + "compatible_from": "0.1.5", + "migration_notes": "No manual migration is required.", + "rollback_safe": true +} diff --git a/plugins/birthday/CHANGELOG.md b/plugins/birthday/CHANGELOG.md new file mode 100644 index 0000000..9cd10e3 --- /dev/null +++ b/plugins/birthday/CHANGELOG.md @@ -0,0 +1,6 @@ +# Birthday changelog + +## 0.1.3 + +- Clarified gift, leap-day, channel, and date wording in the administration UI. +- Connected birthday and message-template removal to shared confirmation controls and improved action styling. diff --git a/plugins/birthday/plugin.json b/plugins/birthday/plugin.json index 13acc92..4ed022d 100644 --- a/plugins/birthday/plugin.json +++ b/plugins/birthday/plugin.json @@ -1,7 +1,11 @@ { "id": "birthday", "name": "Birthday", - "version": "0.1.2", + "version": "0.1.3", "description": "Birthday profiles, announcements, lookup commands, and optional birthday currency gifts.", - "main": "index.js" + "main": "index.js", + "channel": "stable", + "compatible_from": "0.1.2", + "migration_notes": "No manual migration is required.", + "rollback_safe": true } diff --git a/plugins/economy-framework/CHANGELOG.md b/plugins/economy-framework/CHANGELOG.md new file mode 100644 index 0000000..ed9756e --- /dev/null +++ b/plugins/economy-framework/CHANGELOG.md @@ -0,0 +1,7 @@ +# Economy Framework changelog + +## 0.2.10 + +- Added shared linked-account user lookup to transfers and administrative balance adjustments. +- Hardened currency-icon uploads with shared type, size, and cleanup validation. +- Connected destructive reward actions to shared confirmation controls and streamlined banking/settings layouts. diff --git a/plugins/economy-framework/plugin.json b/plugins/economy-framework/plugin.json index 8a227d8..92b870a 100644 --- a/plugins/economy-framework/plugin.json +++ b/plugins/economy-framework/plugin.json @@ -1,7 +1,11 @@ { "id": "economy-framework", "name": "Economy Framework", - "version": "0.2.9", + "version": "0.2.10", "description": "Cross-platform currency framework with shared balances and extensible hooks.", - "main": "index.js" + "main": "index.js", + "channel": "stable", + "compatible_from": "0.2.9", + "migration_notes": "Existing accounts and balances are retained; no manual migration is required.", + "rollback_safe": true } diff --git a/plugins/expression-interaction/CHANGELOG.md b/plugins/expression-interaction/CHANGELOG.md new file mode 100644 index 0000000..6b82f76 --- /dev/null +++ b/plugins/expression-interaction/CHANGELOG.md @@ -0,0 +1,6 @@ +# Expression Interaction changelog + +## 0.2.1 + +- Connected expression archival to the shared confirmation flow. +- Improved action placement and visual consistency with the Lumi WebUI. diff --git a/plugins/expression-interaction/plugin.json b/plugins/expression-interaction/plugin.json index d8fe86b..5cf2a6a 100644 --- a/plugins/expression-interaction/plugin.json +++ b/plugins/expression-interaction/plugin.json @@ -1,7 +1,11 @@ { "id": "expression-interaction", "name": "Expression Interaction", - "version": "0.2.0", + "version": "0.2.1", "description": "Express yourself through interactions with other users, such as hugging, bonking, comforting, etc", - "main": "index.js" -} + "main": "index.js", + "channel": "stable", + "compatible_from": "0.2.0", + "migration_notes": "No manual migration is required.", + "rollback_safe": true +} diff --git a/plugins/lumi_ai/CHANGELOG.md b/plugins/lumi_ai/CHANGELOG.md new file mode 100644 index 0000000..fa3e344 --- /dev/null +++ b/plugins/lumi_ai/CHANGELOG.md @@ -0,0 +1,9 @@ +# Lumi AI changelog + +## 0.8.2 + +- Added OKF-first, role-aware retrieval with compact fast-model answers, conversational subject resolution, deterministic verified links, and main-model fallback when local evidence is insufficient. +- Added controller-directed response modes, retrieval depth, output sizing, lifecycle metrics, grouped work history, and richer diagnostics. +- Hardened Web Search tool exposure and source grounding so external lookup is used only when relevant local knowledge is insufficient. +- Improved runtime/model installation, hardware guidance, failure recovery, tool management, feedback/correction workflows, and settings usability. +- Preserved local models, runtimes, settings, metrics, feedback, and tool data during updates and snapshots. diff --git a/plugins/lumi_ai/plugin.json b/plugins/lumi_ai/plugin.json index 7085817..d830498 100644 --- a/plugins/lumi_ai/plugin.json +++ b/plugins/lumi_ai/plugin.json @@ -1,7 +1,11 @@ { "id": "lumi_ai", "name": "Lumi AI", - "version": "0.8.1", + "version": "0.8.2", "description": "Managed local AI provider and scoped WebUI assistant for Lumi.", - "main": "index.js" + "main": "index.js", + "channel": "stable", + "compatible_from": "0.8.1", + "migration_notes": "Existing models, runtimes, settings, feedback, metrics, and tool data are retained. No manual migration is required.", + "rollback_safe": true } diff --git a/plugins/lumi_ai_web_search/CHANGELOG.md b/plugins/lumi_ai_web_search/CHANGELOG.md new file mode 100644 index 0000000..cdb8f88 --- /dev/null +++ b/plugins/lumi_ai_web_search/CHANGELOG.md @@ -0,0 +1,6 @@ +# Lumi AI Web Search changelog + +## 0.1.1 + +- Aligned compatibility metadata with Lumi 1.2.0 and Lumi AI 0.8.2. +- Added integration verification for OKF-first tool exposure and grounded source handling. diff --git a/plugins/lumi_ai_web_search/tests/verify.js b/plugins/lumi_ai_web_search/tests/verify.js index 28d4b0c..16daebd 100644 --- a/plugins/lumi_ai_web_search/tests/verify.js +++ b/plugins/lumi_ai_web_search/tests/verify.js @@ -20,6 +20,9 @@ const { ToolLoader } = require("../../lumi_ai/backend/tool_loader"); const { ToolManager } = require("../../lumi_ai/backend/tool_manager"); const { ToolSettings } = require("../../lumi_ai/backend/tool_settings"); const { buildPrompt } = require("../../lumi_ai/backend/prompt_builder"); +const corePackage = require("../../../package.json"); +const lumiAiManifest = require("../../lumi_ai/plugin.json"); +const toolMetadata = require("../tool_info.json"); const plugin = require("../index"); const PUBLIC_DNS = async () => ["93.184.216.34"]; @@ -378,8 +381,8 @@ async function verifyLoaderLifecycle() { installer, settings: { getSetting: (_key, fallback) => fallback }, stateFile: path.join(root, "enabled.json"), - lumiAiVersion: "0.8.1", - lumiVersion: "0.1.0" + lumiAiVersion: lumiAiManifest.version, + lumiVersion: corePackage.version }); await loader.loadEnabled(); assert.equal(fs.existsSync(path.join(toolDir, "data", "settings.json")), true); @@ -490,8 +493,8 @@ function verifyRegistrationAndPrompt() { function verifyStaticFiles() { const root = path.resolve(__dirname, ".."); - const metadata = require("../tool_info.json"); - assert.equal(metadata.version, "0.1.0"); + const metadata = toolMetadata; + assert.equal(metadata.version, "0.1.1"); assert.equal(metadata.settings_schema.provider.default, "lumi_search_broker"); assert.equal(metadata.settings_schema.policy_mode.default, "blacklist"); assert.equal(metadata.default_enabled, true); diff --git a/plugins/lumi_ai_web_search/tool_info.json b/plugins/lumi_ai_web_search/tool_info.json index 421cc49..e14d51a 100644 --- a/plugins/lumi_ai_web_search/tool_info.json +++ b/plugins/lumi_ai_web_search/tool_info.json @@ -3,7 +3,7 @@ "tool_namespace": "web_search", "name": "lumi_ai_web_search", "display_name": "Lumi AI Web Search", - "version": "0.1.0", + "version": "0.1.1", "description": "Self-contained, policy-controlled public web search and safe URL extraction for Lumi Assistant. The default provider requires no API key or external service setup.", "scope": { "label": "Assistant public web lookup", @@ -75,8 +75,8 @@ ], "status_file": "data/status.json", "dependencies": [], - "minimum_lumi_version": "0.1.0", - "minimum_lumi_ai_version": "0.8.1", + "minimum_lumi_version": "1.2.0", + "minimum_lumi_ai_version": "0.8.2", "required_plugins": [ "core", "lumi_ai" @@ -93,7 +93,7 @@ "preserve_on_update": [ "data" ], - "update_notes": "Adds a self-contained no-key search broker plus independent search, fetch URL, and summarize URL capabilities.", + "update_notes": "Aligns Web Search with Lumi 1.2.0 and Lumi AI 0.8.2 OKF-first routing, source grounding, and tool-exposure verification.", "author": "Lumi", "homepage": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi", "repository_path": "plugins/lumi_ai_web_search", diff --git a/plugins/moderation/CHANGELOG.md b/plugins/moderation/CHANGELOG.md new file mode 100644 index 0000000..5e36a09 --- /dev/null +++ b/plugins/moderation/CHANGELOG.md @@ -0,0 +1,8 @@ +# Moderation Center changelog + +## 0.1.5 + +- Added shared linked-account user lookup for moderation targets. +- Hardened evidence uploads with bounded image validation, cleanup, and safe downloads. +- Added administrator note deletion and connected destructive moderation actions to shared confirmation controls. +- Streamlined moderation and sanctions layouts while retaining existing records. diff --git a/plugins/moderation/plugin.json b/plugins/moderation/plugin.json index 58b55c6..b485cc1 100644 --- a/plugins/moderation/plugin.json +++ b/plugins/moderation/plugin.json @@ -1,7 +1,11 @@ { "id": "moderation", "name": "Moderation Center", - "version": "0.1.4", + "version": "0.1.5", "description": "Cross-platform moderation actions, notes, and sanctions.", - "main": "index.js" -} + "main": "index.js", + "channel": "stable", + "compatible_from": "0.1.4", + "migration_notes": "Existing moderation records are retained; no manual migration is required.", + "rollback_safe": true +} diff --git a/plugins/okf/CHANGELOG.md b/plugins/okf/CHANGELOG.md new file mode 100644 index 0000000..a96c774 --- /dev/null +++ b/plugins/okf/CHANGELOG.md @@ -0,0 +1,8 @@ +# OKF Knowledge changelog + +## 0.1.1 + +- Added role-gated database and Markdown-backed knowledge with user, moderator, and administrator visibility controls. +- Added community and correction files, generated core/plugin references, placeholders, version history, administration workflows, search/filtering, and Markdown preview. +- Added relevance-ranked Lumi AI context, typo-tolerant identity retrieval, combined file/database ranking, and permission-safe community browsing. +- Preserved authored community and correction knowledge during repository and plugin updates. diff --git a/plugins/okf/plugin.json b/plugins/okf/plugin.json index d1a58a5..eb8beda 100644 --- a/plugins/okf/plugin.json +++ b/plugins/okf/plugin.json @@ -1,7 +1,11 @@ { "id": "okf", "name": "OKF Knowledge", - "version": "0.1.0", + "version": "0.1.1", "description": "Role-gated knowledge, facts, and Q&A entries for Lumi communities.", - "main": "index.js" + "main": "index.js", + "channel": "stable", + "compatible_from": "0.1.0", + "migration_notes": "Published database entries and local community/correction knowledge files are retained. No manual migration is required.", + "rollback_safe": true } diff --git a/plugins/quotes/CHANGELOG.md b/plugins/quotes/CHANGELOG.md new file mode 100644 index 0000000..36c1f7d --- /dev/null +++ b/plugins/quotes/CHANGELOG.md @@ -0,0 +1,6 @@ +# Quotes changelog + +## 0.1.2 + +- Connected quote archival to the shared confirmation flow. +- Aligned quote actions with the shared Lumi WebUI styling. diff --git a/plugins/quotes/plugin.json b/plugins/quotes/plugin.json index fef1a2e..efaac5a 100644 --- a/plugins/quotes/plugin.json +++ b/plugins/quotes/plugin.json @@ -1,7 +1,11 @@ { "id": "quotes", "name": "Quotes", - "version": "0.1.1", + "version": "0.1.2", "description": "Store, search, and manage community quotes.", - "main": "index.js" -} + "main": "index.js", + "channel": "stable", + "compatible_from": "0.1.1", + "migration_notes": "Existing quotes are retained; no manual migration is required.", + "rollback_safe": true +} diff --git a/plugins/throne_wishlist/CHANGELOG.md b/plugins/throne_wishlist/CHANGELOG.md new file mode 100644 index 0000000..62adb20 --- /dev/null +++ b/plugins/throne_wishlist/CHANGELOG.md @@ -0,0 +1,7 @@ +# Throne Wishlist changelog + +## 0.1.2 + +- Added scoped double-brace placeholders and shared placeholder validation for event messages. +- Preserved legacy single-brace rendering for existing templates while guiding new templates to namespaced placeholders. +- Improved placeholder documentation, template safety, and administration UI consistency. diff --git a/plugins/throne_wishlist/plugin.json b/plugins/throne_wishlist/plugin.json index b190bd3..e76507d 100644 --- a/plugins/throne_wishlist/plugin.json +++ b/plugins/throne_wishlist/plugin.json @@ -1,7 +1,11 @@ { "id": "throne_wishlist", "name": "Throne Wishlist", - "version": "0.1.1", + "version": "0.1.2", "description": "Throne wishlist webhook integration with verified payloads, debug viewer, and cross-platform event messages.", - "main": "index.js" + "main": "index.js", + "channel": "stable", + "compatible_from": "0.1.1", + "migration_notes": "Existing webhook settings, secrets, and event history are retained. No manual migration is required.", + "rollback_safe": true } diff --git a/plugins/welcome_messages/CHANGELOG.md b/plugins/welcome_messages/CHANGELOG.md new file mode 100644 index 0000000..ba09d31 --- /dev/null +++ b/plugins/welcome_messages/CHANGELOG.md @@ -0,0 +1,6 @@ +# Welcome Messages changelog + +## 0.1.1 + +- Improved welcome-message action placement and visual consistency with shared Lumi controls. +- Retained existing welcome-message configuration and behavior. diff --git a/plugins/welcome_messages/plugin.json b/plugins/welcome_messages/plugin.json index 7850e06..35030c0 100644 --- a/plugins/welcome_messages/plugin.json +++ b/plugins/welcome_messages/plugin.json @@ -1,7 +1,11 @@ { "id": "welcome_messages", "name": "Welcome Messages", - "version": "0.1.0", + "version": "0.1.1", "description": "Randomized Discord welcome and welcome-back messages with safe pronoun preferences.", - "main": "index.js" -} + "main": "index.js", + "channel": "stable", + "compatible_from": "0.1.0", + "migration_notes": "Existing welcome-message configuration is retained; no manual migration is required.", + "rollback_safe": true +} diff --git a/scripts/verify-all.js b/scripts/verify-all.js index dbabc60..dd28c21 100644 --- a/scripts/verify-all.js +++ b/scripts/verify-all.js @@ -9,6 +9,7 @@ const checks = [ "scripts/verify-web-auth.js", "scripts/verify-feedback-system.js", "scripts/verify-placeholders.js", + "scripts/verify-release-metadata.js", "scripts/verify-plugin-update-preserves-data.js", "scripts/verify-safe-files.js", "scripts/verify-upload-security.js", diff --git a/scripts/verify-release-metadata.js b/scripts/verify-release-metadata.js new file mode 100644 index 0000000..0dd32cd --- /dev/null +++ b/scripts/verify-release-metadata.js @@ -0,0 +1,82 @@ +const assert = require("assert"); +const fs = require("fs"); +const path = require("path"); +const { findSafeTarget } = require("../src/services/versioning"); + +const root = path.join(__dirname, ".."); +const releaseVersion = "1.2.0"; +const previousCoreVersion = "0.1.9"; +const changedPlugins = { + "auto-vc": { from: "0.1.5", to: "0.1.6", knowledge: "auto-vc" }, + birthday: { from: "0.1.2", to: "0.1.3", knowledge: "birthday" }, + "economy-framework": { from: "0.2.9", to: "0.2.10", knowledge: "economy-framework" }, + "expression-interaction": { from: "0.2.0", to: "0.2.1", knowledge: "expression-interaction" }, + lumi_ai: { from: "0.8.1", to: "0.8.2", knowledge: "lumi-ai" }, + moderation: { from: "0.1.4", to: "0.1.5", knowledge: "moderation" }, + okf: { from: "0.1.0", to: "0.1.1", knowledge: "okf" }, + quotes: { from: "0.1.1", to: "0.1.2", knowledge: "quotes" }, + throne_wishlist: { from: "0.1.1", to: "0.1.2", knowledge: "throne-wishlist" }, + welcome_messages: { from: "0.1.0", to: "0.1.1", knowledge: "welcome-messages" } +}; + +function readJson(relativePath) { + return JSON.parse(fs.readFileSync(path.join(root, relativePath), "utf8")); +} + +function readText(relativePath) { + return fs.readFileSync(path.join(root, relativePath), "utf8"); +} + +function escapeRegex(value) { + return String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +function hasVersionHeading(markdown, version) { + return new RegExp(`^#{1,3}\\s+\\[?v?${escapeRegex(version)}\\]?(?:\\s|$)`, "m").test(markdown); +} + +const packageJson = readJson("package.json"); +const packageLock = readJson("package-lock.json"); +const coreManifest = readJson("update-manifest.json"); +assert.equal(packageJson.version, releaseVersion); +assert.equal(packageLock.version, releaseVersion); +assert.equal(packageLock.packages?.[""]?.version, releaseVersion); +assert.equal(coreManifest.version, releaseVersion); +assert.equal(coreManifest.channel, "stable"); +assert.equal(coreManifest.compatible_from, previousCoreVersion); +assert.equal(coreManifest.rollback_safe, true); +assert.equal(hasVersionHeading(readText("CHANGELOG.md"), releaseVersion), true); +assert.match(readText("knowledge/core/lumi-core.md"), new RegExp(`^Version: ${escapeRegex(releaseVersion)}$`, "m")); + +const safeCoreTarget = findSafeTarget(previousCoreVersion, [ + ...(Array.isArray(coreManifest.versions) ? coreManifest.versions : []), + coreManifest +]); +assert.equal(safeCoreTarget.blocked, false); +assert.equal(safeCoreTarget.target?.version, releaseVersion); + +for (const [pluginId, expected] of Object.entries(changedPlugins)) { + const manifest = readJson(`plugins/${pluginId}/plugin.json`); + assert.equal(manifest.version, expected.to, `${pluginId} manifest version`); + assert.equal(manifest.compatible_from, expected.from, `${pluginId} compatible_from`); + assert.equal(manifest.channel, "stable", `${pluginId} release channel`); + assert.equal(manifest.rollback_safe, true, `${pluginId} rollback metadata`); + assert.equal( + hasVersionHeading(readText(`plugins/${pluginId}/CHANGELOG.md`), expected.to), + true, + `${pluginId} changelog heading` + ); + assert.match( + readText(`knowledge/plugins/${expected.knowledge}.md`), + new RegExp(`^Version: ${escapeRegex(expected.to)}$`, "m"), + `${pluginId} generated knowledge version` + ); +} + +const webSearch = readJson("plugins/lumi_ai_web_search/tool_info.json"); +assert.equal(webSearch.version, "0.1.1"); +assert.equal(webSearch.minimum_lumi_version, releaseVersion); +assert.equal(webSearch.minimum_lumi_ai_version, changedPlugins.lumi_ai.to); +assert.equal(hasVersionHeading(readText("plugins/lumi_ai_web_search/CHANGELOG.md"), webSearch.version), true); + +console.log("Release metadata verification passed: core 1.2.0 and 11 changed plugin/tool packages."); diff --git a/update-manifest.json b/update-manifest.json new file mode 100644 index 0000000..0330c91 --- /dev/null +++ b/update-manifest.json @@ -0,0 +1,26 @@ +{ + "name": "Lumi Core", + "version": "1.2.0", + "channel": "stable", + "released_at": "2026-07-18", + "compatible_from": "0.1.9", + "compatibility_bridge": true, + "migration_kind": "compatibility_bridge", + "migration_notes": "Lumi performs required database and generated-knowledge migrations automatically. Local configuration, plugin data, community knowledge, AI models, runtimes, uploads, logs, and secrets remain preserved.", + "rollback_safe": true, + "requirements": [ + "Node.js 18 or newer" + ], + "versions": [ + { + "version": "1.2.0", + "channel": "stable", + "released_at": "2026-07-18", + "compatible_from": "0.1.9", + "compatibility_bridge": true, + "migration_kind": "compatibility_bridge", + "rollback_safe": true, + "migration_notes": "Automatic migrations only; preserved local data is not replaced." + } + ] +}