Release Lumi 1.2.0
This commit is contained in:
parent
abc1760df7
commit
c91761500e
11
CHANGELOG.md
Normal file
11
CHANGELOG.md
Normal file
@ -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.
|
||||||
1
TODO.md
1
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
|
||||||
|
|
||||||
|
- 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: 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: 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.
|
- 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.
|
||||||
|
|||||||
@ -41,6 +41,13 @@ Useful metadata fields include `version`, `channel`, `compatible_from`,
|
|||||||
`migration_kind`, `migration_notes`, `rollback_safe`, `requirements`, `size`,
|
`migration_kind`, `migration_notes`, `rollback_safe`, `requirements`, `size`,
|
||||||
and changelog entries. Missing changelog data is shown as a warning.
|
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
|
Stable checks read `main` by default. The newest `experimental-*` branch is used
|
||||||
only when explicitly selected on the updates page.
|
only when explicitly selected on the updates page.
|
||||||
|
|
||||||
|
|||||||
@ -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.1.9
|
Version: 1.2.0
|
||||||
## Routes
|
## Routes
|
||||||
- GET /api/events
|
- GET /api/events
|
||||||
- POST /api/destructive-confirmations
|
- POST /api/destructive-confirmations
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Auto-create managed voice channels from lobby rooms.
|
Auto-create managed voice channels from lobby rooms.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: auto-vc
|
Plugin ID: auto-vc
|
||||||
Version: 0.1.5
|
Version: 0.1.6
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/auto-vc
|
- /plugins/auto-vc
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Birthday profiles, announcements, lookup commands, and optional birthday currency gifts.
|
Birthday profiles, announcements, lookup commands, and optional birthday currency gifts.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: birthday
|
Plugin ID: birthday
|
||||||
Version: 0.1.2
|
Version: 0.1.3
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/birthday
|
- /plugins/birthday
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Cross-platform currency framework with shared balances and extensible hooks.
|
Cross-platform currency framework with shared balances and extensible hooks.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: economy-framework
|
Plugin ID: economy-framework
|
||||||
Version: 0.2.9
|
Version: 0.2.10
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/economy-framework
|
- /plugins/economy-framework
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Express yourself through interactions with other users, such as hugging, bonking, comforting, etc
|
Express yourself through interactions with other users, such as hugging, bonking, comforting, etc
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: expression-interaction
|
Plugin ID: expression-interaction
|
||||||
Version: 0.2.0
|
Version: 0.2.1
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/expression-interaction
|
- /plugins/expression-interaction
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Managed local AI provider and scoped WebUI assistant for Lumi.
|
Managed local AI provider and scoped WebUI assistant for Lumi.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: lumi_ai
|
Plugin ID: lumi_ai
|
||||||
Version: 0.8.1
|
Version: 0.8.2
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/lumi_ai
|
- /plugins/lumi_ai
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Cross-platform moderation actions, notes, and sanctions.
|
Cross-platform moderation actions, notes, and sanctions.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: moderation
|
Plugin ID: moderation
|
||||||
Version: 0.1.4
|
Version: 0.1.5
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/moderation
|
- /plugins/moderation
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Role-gated knowledge, facts, and Q&A entries for Lumi communities.
|
Role-gated knowledge, facts, and Q&A entries for Lumi communities.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: okf
|
Plugin ID: okf
|
||||||
Version: 0.1.0
|
Version: 0.1.1
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/okf
|
- /plugins/okf
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Store, search, and manage community quotes.
|
Store, search, and manage community quotes.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: quotes
|
Plugin ID: quotes
|
||||||
Version: 0.1.1
|
Version: 0.1.2
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/quotes
|
- /plugins/quotes
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Throne wishlist webhook integration with verified payloads, debug viewer, and cross-platform event messages.
|
Throne wishlist webhook integration with verified payloads, debug viewer, and cross-platform event messages.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: throne_wishlist
|
Plugin ID: throne_wishlist
|
||||||
Version: 0.1.1
|
Version: 0.1.2
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/throne_wishlist
|
- /plugins/throne_wishlist
|
||||||
|
|||||||
@ -14,7 +14,7 @@ editable: false
|
|||||||
Randomized Discord welcome and welcome-back messages with safe pronoun preferences.
|
Randomized Discord welcome and welcome-back messages with safe pronoun preferences.
|
||||||
## Metadata
|
## Metadata
|
||||||
Plugin ID: welcome_messages
|
Plugin ID: welcome_messages
|
||||||
Version: 0.1.0
|
Version: 0.1.1
|
||||||
Default state: enabled
|
Default state: enabled
|
||||||
## Web Routes
|
## Web Routes
|
||||||
- /plugins/welcome_messages
|
- /plugins/welcome_messages
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "lumi-bot",
|
"name": "lumi-bot",
|
||||||
"version": "0.1.9",
|
"version": "1.2.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "lumi-bot",
|
"name": "lumi-bot",
|
||||||
"version": "0.1.9",
|
"version": "1.2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"adm-zip": "^0.5.12",
|
"adm-zip": "^0.5.12",
|
||||||
"better-sqlite3": "^11.5.0",
|
"better-sqlite3": "^11.5.0",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "lumi-bot",
|
"name": "lumi-bot",
|
||||||
"version": "0.1.9",
|
"version": "1.2.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
6
plugins/auto-vc/CHANGELOG.md
Normal file
6
plugins/auto-vc/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "auto-vc",
|
"id": "auto-vc",
|
||||||
"name": "Auto VC",
|
"name": "Auto VC",
|
||||||
"version": "0.1.5",
|
"version": "0.1.6",
|
||||||
"description": "Auto-create managed voice channels from lobby rooms.",
|
"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
|
||||||
|
}
|
||||||
|
|||||||
6
plugins/birthday/CHANGELOG.md
Normal file
6
plugins/birthday/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "birthday",
|
"id": "birthday",
|
||||||
"name": "Birthday",
|
"name": "Birthday",
|
||||||
"version": "0.1.2",
|
"version": "0.1.3",
|
||||||
"description": "Birthday profiles, announcements, lookup commands, and optional birthday currency gifts.",
|
"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
|
||||||
}
|
}
|
||||||
|
|||||||
7
plugins/economy-framework/CHANGELOG.md
Normal file
7
plugins/economy-framework/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "economy-framework",
|
"id": "economy-framework",
|
||||||
"name": "Economy Framework",
|
"name": "Economy Framework",
|
||||||
"version": "0.2.9",
|
"version": "0.2.10",
|
||||||
"description": "Cross-platform currency framework with shared balances and extensible hooks.",
|
"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
|
||||||
}
|
}
|
||||||
|
|||||||
6
plugins/expression-interaction/CHANGELOG.md
Normal file
6
plugins/expression-interaction/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "expression-interaction",
|
"id": "expression-interaction",
|
||||||
"name": "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",
|
"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
|
||||||
|
}
|
||||||
|
|||||||
9
plugins/lumi_ai/CHANGELOG.md
Normal file
9
plugins/lumi_ai/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "lumi_ai",
|
"id": "lumi_ai",
|
||||||
"name": "Lumi AI",
|
"name": "Lumi AI",
|
||||||
"version": "0.8.1",
|
"version": "0.8.2",
|
||||||
"description": "Managed local AI provider and scoped WebUI assistant for Lumi.",
|
"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
|
||||||
}
|
}
|
||||||
|
|||||||
6
plugins/lumi_ai_web_search/CHANGELOG.md
Normal file
6
plugins/lumi_ai_web_search/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -20,6 +20,9 @@ const { ToolLoader } = require("../../lumi_ai/backend/tool_loader");
|
|||||||
const { ToolManager } = require("../../lumi_ai/backend/tool_manager");
|
const { ToolManager } = require("../../lumi_ai/backend/tool_manager");
|
||||||
const { ToolSettings } = require("../../lumi_ai/backend/tool_settings");
|
const { ToolSettings } = require("../../lumi_ai/backend/tool_settings");
|
||||||
const { buildPrompt } = require("../../lumi_ai/backend/prompt_builder");
|
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 plugin = require("../index");
|
||||||
|
|
||||||
const PUBLIC_DNS = async () => ["93.184.216.34"];
|
const PUBLIC_DNS = async () => ["93.184.216.34"];
|
||||||
@ -378,8 +381,8 @@ async function verifyLoaderLifecycle() {
|
|||||||
installer,
|
installer,
|
||||||
settings: { getSetting: (_key, fallback) => fallback },
|
settings: { getSetting: (_key, fallback) => fallback },
|
||||||
stateFile: path.join(root, "enabled.json"),
|
stateFile: path.join(root, "enabled.json"),
|
||||||
lumiAiVersion: "0.8.1",
|
lumiAiVersion: lumiAiManifest.version,
|
||||||
lumiVersion: "0.1.0"
|
lumiVersion: corePackage.version
|
||||||
});
|
});
|
||||||
await loader.loadEnabled();
|
await loader.loadEnabled();
|
||||||
assert.equal(fs.existsSync(path.join(toolDir, "data", "settings.json")), true);
|
assert.equal(fs.existsSync(path.join(toolDir, "data", "settings.json")), true);
|
||||||
@ -490,8 +493,8 @@ function verifyRegistrationAndPrompt() {
|
|||||||
|
|
||||||
function verifyStaticFiles() {
|
function verifyStaticFiles() {
|
||||||
const root = path.resolve(__dirname, "..");
|
const root = path.resolve(__dirname, "..");
|
||||||
const metadata = require("../tool_info.json");
|
const metadata = toolMetadata;
|
||||||
assert.equal(metadata.version, "0.1.0");
|
assert.equal(metadata.version, "0.1.1");
|
||||||
assert.equal(metadata.settings_schema.provider.default, "lumi_search_broker");
|
assert.equal(metadata.settings_schema.provider.default, "lumi_search_broker");
|
||||||
assert.equal(metadata.settings_schema.policy_mode.default, "blacklist");
|
assert.equal(metadata.settings_schema.policy_mode.default, "blacklist");
|
||||||
assert.equal(metadata.default_enabled, true);
|
assert.equal(metadata.default_enabled, true);
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"tool_namespace": "web_search",
|
"tool_namespace": "web_search",
|
||||||
"name": "lumi_ai_web_search",
|
"name": "lumi_ai_web_search",
|
||||||
"display_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.",
|
"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": {
|
"scope": {
|
||||||
"label": "Assistant public web lookup",
|
"label": "Assistant public web lookup",
|
||||||
@ -75,8 +75,8 @@
|
|||||||
],
|
],
|
||||||
"status_file": "data/status.json",
|
"status_file": "data/status.json",
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"minimum_lumi_version": "0.1.0",
|
"minimum_lumi_version": "1.2.0",
|
||||||
"minimum_lumi_ai_version": "0.8.1",
|
"minimum_lumi_ai_version": "0.8.2",
|
||||||
"required_plugins": [
|
"required_plugins": [
|
||||||
"core",
|
"core",
|
||||||
"lumi_ai"
|
"lumi_ai"
|
||||||
@ -93,7 +93,7 @@
|
|||||||
"preserve_on_update": [
|
"preserve_on_update": [
|
||||||
"data"
|
"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",
|
"author": "Lumi",
|
||||||
"homepage": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi",
|
"homepage": "https://git.rolfsvaag.no/Rolfsvaag_Datateknikk/Lumi",
|
||||||
"repository_path": "plugins/lumi_ai_web_search",
|
"repository_path": "plugins/lumi_ai_web_search",
|
||||||
|
|||||||
8
plugins/moderation/CHANGELOG.md
Normal file
8
plugins/moderation/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "moderation",
|
"id": "moderation",
|
||||||
"name": "Moderation Center",
|
"name": "Moderation Center",
|
||||||
"version": "0.1.4",
|
"version": "0.1.5",
|
||||||
"description": "Cross-platform moderation actions, notes, and sanctions.",
|
"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
|
||||||
|
}
|
||||||
|
|||||||
8
plugins/okf/CHANGELOG.md
Normal file
8
plugins/okf/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "okf",
|
"id": "okf",
|
||||||
"name": "OKF Knowledge",
|
"name": "OKF Knowledge",
|
||||||
"version": "0.1.0",
|
"version": "0.1.1",
|
||||||
"description": "Role-gated knowledge, facts, and Q&A entries for Lumi communities.",
|
"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
|
||||||
}
|
}
|
||||||
|
|||||||
6
plugins/quotes/CHANGELOG.md
Normal file
6
plugins/quotes/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "quotes",
|
"id": "quotes",
|
||||||
"name": "Quotes",
|
"name": "Quotes",
|
||||||
"version": "0.1.1",
|
"version": "0.1.2",
|
||||||
"description": "Store, search, and manage community quotes.",
|
"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
|
||||||
|
}
|
||||||
|
|||||||
7
plugins/throne_wishlist/CHANGELOG.md
Normal file
7
plugins/throne_wishlist/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "throne_wishlist",
|
"id": "throne_wishlist",
|
||||||
"name": "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.",
|
"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
|
||||||
}
|
}
|
||||||
|
|||||||
6
plugins/welcome_messages/CHANGELOG.md
Normal file
6
plugins/welcome_messages/CHANGELOG.md
Normal file
@ -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.
|
||||||
@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "welcome_messages",
|
"id": "welcome_messages",
|
||||||
"name": "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.",
|
"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
|
||||||
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ const checks = [
|
|||||||
"scripts/verify-web-auth.js",
|
"scripts/verify-web-auth.js",
|
||||||
"scripts/verify-feedback-system.js",
|
"scripts/verify-feedback-system.js",
|
||||||
"scripts/verify-placeholders.js",
|
"scripts/verify-placeholders.js",
|
||||||
|
"scripts/verify-release-metadata.js",
|
||||||
"scripts/verify-plugin-update-preserves-data.js",
|
"scripts/verify-plugin-update-preserves-data.js",
|
||||||
"scripts/verify-safe-files.js",
|
"scripts/verify-safe-files.js",
|
||||||
"scripts/verify-upload-security.js",
|
"scripts/verify-upload-security.js",
|
||||||
|
|||||||
82
scripts/verify-release-metadata.js
Normal file
82
scripts/verify-release-metadata.js
Normal file
@ -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.");
|
||||||
26
update-manifest.json
Normal file
26
update-manifest.json
Normal file
@ -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."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user