aboutsummaryrefslogtreecommitdiff
path: root/modules/core
diff options
context:
space:
mode:
authorAgando <roduccomm@gmail.com>2026-10-18 14:05:18 +0200
committerAgando <roduccomm@gmail.com>2026-10-18 14:05:18 +0200
commit0d0d936e7b5cd41a31773069540b1ddb8836ef44 (patch)
tree273e7ee9a72453655119bf0f63efb9b61e193d7f /modules/core
parent526c420f4591f0a58f805b473fa76d3da2981eae (diff)
newOS4: interactive AI course (terminal module, portal, atlas, telemetry, daily maintenance+cron) + free store card
Diffstat (limited to 'modules/core')
-rw-r--r--modules/core/core-bundle.js12
-rw-r--r--modules/core/module-loader.js4
-rw-r--r--modules/core/terminal.js12
3 files changed, 22 insertions, 6 deletions
diff --git a/modules/core/core-bundle.js b/modules/core/core-bundle.js
index dd86773..2714dd3 100644
--- a/modules/core/core-bundle.js
+++ b/modules/core/core-bundle.js
@@ -4283,9 +4283,17 @@ Only output XML function calls for tool tasks. If no tool is needed, answer norm
for (const modName in this.moduleManager.modules) {
const mod = this.moduleManager.modules[modName];
if (mod.commands && mod.commands[cmd]) {
+ if (cmd !== 'course') {
+ for (const _m of Object.values(this.moduleManager.modules)) {
+ if (typeof _m.onCommandStart === 'function') { try { _m.onCommandStart(cmd, args); } catch (_e) {} }
+ }
+ }
try { await mod.commands[cmd](args);
- // Notify tutorial module for quest tracking
- if (this.tutorialModule && cmd !== 'tutorial') this.tutorialModule.onCommandExecuted(cmd, args);
+ if (cmd !== 'tutorial' && cmd !== 'course') {
+ for (const _m of Object.values(this.moduleManager.modules)) {
+ if (typeof _m.onCommandExecuted === 'function') { try { _m.onCommandExecuted(cmd, args); } catch (_e) {} }
+ }
+ }
// Memory graph: record file access for read/file commands
if (cmd === 'cat' || cmd === 'view_module' || cmd === 'edit_module') {
try {
diff --git a/modules/core/module-loader.js b/modules/core/module-loader.js
index 5e69094..53efb08 100644
--- a/modules/core/module-loader.js
+++ b/modules/core/module-loader.js
@@ -4,7 +4,7 @@
// Core module bundle loaded synchronously in main.html.
// This loader only handles version cache-busting, splash, terminal init, and optional ext modules.
- const LATEST_VER = 'v4.6.26';
+ const LATEST_VER = 'v4.6.27';
const CACHE = '?v=' + LATEST_VER;
const stored = localStorage.getItem('webx11_cache_ver');
if (stored !== LATEST_VER) {
@@ -53,7 +53,7 @@
setSplash('Initializing terminal (3/3)', total, total, '');
// webx11 already created synchronously above — just init ext modules
if (typeof webx11._loadExtModules === 'function') {
- let extKeys = ['calc', 'voice', 'debug-panel', 'cron', 'theme', 'wpm', 'mindmap', 'webdav', 'skill-pack-core', 'cryptogzip', 'tutorial', 'floating', 'console', 'media', 'three', 'kanban'];
+ let extKeys = ['calc', 'voice', 'debug-panel', 'cron', 'theme', 'wpm', 'mindmap', 'webdav', 'skill-pack-core', 'cryptogzip', 'tutorial', 'floating', 'console', 'media', 'three', 'kanban', 'course'];
const saved = localStorage.getItem('webx11_startup_modules');
let selected = null;
try { if (saved) selected = JSON.parse(saved); } catch (e) {}
diff --git a/modules/core/terminal.js b/modules/core/terminal.js
index 123c224..425c5d6 100644
--- a/modules/core/terminal.js
+++ b/modules/core/terminal.js
@@ -1857,9 +1857,17 @@
for (const modName in this.moduleManager.modules) {
const mod = this.moduleManager.modules[modName];
if (mod.commands && mod.commands[cmd]) {
+ if (cmd !== 'course') {
+ for (const _m of Object.values(this.moduleManager.modules)) {
+ if (typeof _m.onCommandStart === 'function') { try { _m.onCommandStart(cmd, args); } catch (_e) {} }
+ }
+ }
try { await mod.commands[cmd](args);
- // Notify tutorial module for quest tracking
- if (this.tutorialModule && cmd !== 'tutorial') this.tutorialModule.onCommandExecuted(cmd, args);
+ if (cmd !== 'tutorial' && cmd !== 'course') {
+ for (const _m of Object.values(this.moduleManager.modules)) {
+ if (typeof _m.onCommandExecuted === 'function') { try { _m.onCommandExecuted(cmd, args); } catch (_e) {} }
+ }
+ }
// Memory graph: record file access for read/file commands
if (cmd === 'cat' || cmd === 'view_module' || cmd === 'edit_module') {
try {