iobroker.eos-admin 7.9.92 → 7.9.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INSTALL_TEST_V7.9.93.md +12 -0
- package/NEXOWATT_EOS_BUILD_INFO.json +18 -19
- package/{PUBLISH_STABLE_V7.9.92.md → PUBLISH_STABLE_V7.9.93.md} +4 -4
- package/README_STABILITY_V7.9.93.md +15 -0
- package/RELEASE_ACCEPTANCE_V7.9.93.md +15 -0
- package/RELEASE_NOTES_V7.9.93.md +10 -0
- package/adminWww/assets/Adapters-B5_jQ7DE-v84.js +1 -1
- package/adminWww/css/nexowatt-native-shell.css +154 -2
- package/adminWww/index.html +11 -11
- package/adminWww/js/eos-account-management.js +1 -1
- package/adminWww/js/eos-assistant.js +487 -55
- package/adminWww/js/eos-basic-settings.js +1 -1
- package/adminWww/js/eos-branding-sanitizer.js +3 -1
- package/adminWww/js/eos-native-security.js +1 -1
- package/adminWww/js/eos-policy-client.js +1 -1
- package/adminWww/js/eos-role-bootstrap.js +2 -2
- package/adminWww/js/eos-role-ui.js +1 -1
- package/adminWww/js/nexowatt-native-shell.js +1 -1
- package/build/lib/chat/assistantKnowledge.js +21 -6
- package/build/lib/chat/chatOrchestrator.js +33 -38
- package/build/lib/chat/mcpClientManager.js +1 -1
- package/build/main.js +307 -1
- package/io-package.json +13 -8
- package/package.json +9 -9
- package/tools/nexowatt-account-management-selftest.cjs +1 -1
- package/tools/nexowatt-internal-reserve-selftest.cjs +3 -1
- package/tools/nexowatt-login-layout-selftest.cjs +19 -38
- package/tools/nexowatt-modern-ui-selftest.cjs +1 -1
- package/tools/nexowatt-validate-package.cjs +5 -5
- package/INSTALL_TEST_V7.9.92.md +0 -18
- package/README_STABILITY_V7.9.92.md +0 -14
- package/RELEASE_ACCEPTANCE_V7.9.92.md +0 -12
- package/RELEASE_NOTES_V7.9.92.md +0 -17
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.eos-admin",
|
|
3
|
-
"description": "NexoWatt EOS Admin
|
|
4
|
-
"version": "7.9.
|
|
3
|
+
"description": "NexoWatt EOS Admin test candidate with compact login, visible NexoWatt publisher and live role-aware EOS Assist",
|
|
4
|
+
"version": "7.9.93",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"bluefox <dogafox@gmail.com>",
|
|
7
7
|
"apollon77",
|
|
@@ -111,14 +111,14 @@
|
|
|
111
111
|
"tools/nexowatt-account-management-selftest.cjs",
|
|
112
112
|
"tools/nexowatt-modern-ui-selftest.cjs",
|
|
113
113
|
"tools/nexowatt-login-layout-selftest.cjs",
|
|
114
|
-
"README_STABILITY_V7.9.92.md",
|
|
115
|
-
"RELEASE_NOTES_V7.9.92.md",
|
|
116
|
-
"PUBLISH_STABLE_V7.9.92.md",
|
|
117
|
-
"INSTALL_TEST_V7.9.92.md",
|
|
118
|
-
"RELEASE_ACCEPTANCE_V7.9.92.md",
|
|
119
114
|
"tools/nexowatt-internal-reserve-selftest.cjs",
|
|
120
115
|
"tools/nexowatt-ensure-release-defaults.cjs",
|
|
121
|
-
"tools/nexowatt-release-defaults-selftest.cjs"
|
|
116
|
+
"tools/nexowatt-release-defaults-selftest.cjs",
|
|
117
|
+
"README_STABILITY_V7.9.93.md",
|
|
118
|
+
"RELEASE_NOTES_V7.9.93.md",
|
|
119
|
+
"PUBLISH_STABLE_V7.9.93.md",
|
|
120
|
+
"INSTALL_TEST_V7.9.93.md",
|
|
121
|
+
"RELEASE_ACCEPTANCE_V7.9.93.md"
|
|
122
122
|
],
|
|
123
123
|
"scripts": {
|
|
124
124
|
"npm": "npm i -f && cd src-admin && npm i -f",
|
|
@@ -184,6 +184,6 @@
|
|
|
184
184
|
},
|
|
185
185
|
"nexowattReleasePolicy": {
|
|
186
186
|
"distTag": "latest",
|
|
187
|
-
"purpose": "accepted stable NexoWatt EOS sales-product release 7.9.
|
|
187
|
+
"purpose": "test candidate for accepted stable NexoWatt EOS sales-product release 7.9.93"
|
|
188
188
|
}
|
|
189
189
|
}
|
|
@@ -41,7 +41,7 @@ for (const code of [webSource, webBuilt]) {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
for (const marker of [
|
|
44
|
-
'
|
|
44
|
+
'v93-account-management-under-access-rights', "['admin', 'installer']", 'nexowatt/account/manage',
|
|
45
45
|
'nexowatt/account/reset', 'X-NexoWatt-EOS-Account-Reset', 'data.canResetInstaller === true',
|
|
46
46
|
"account.role === 'enduser'", 'Admin/Service', 'Installateure', 'NEXOWATT_EOS_ACCOUNT_MANAGEMENT',
|
|
47
47
|
'ensureEntrySurface', "currentRoute() !== 'tab-users'", 'eos-account-management-entry',
|
|
@@ -16,6 +16,7 @@ const role = read('adminWww/js/eos-role-ui.js');
|
|
|
16
16
|
const boot = read('adminWww/js/eos-role-bootstrap.js');
|
|
17
17
|
const drawer = read('src-admin/src/components/Drawer.tsx');
|
|
18
18
|
const assist = read('adminWww/js/eos-assistant.js');
|
|
19
|
+
const knowledge = read('src/lib/chat/assistantKnowledge.ts');
|
|
19
20
|
const io = json('io-package.json');
|
|
20
21
|
|
|
21
22
|
for (const code of [mainSource, mainBuilt]) {
|
|
@@ -44,7 +45,8 @@ for (const marker of ['isOfficialReserveTab', 'isCustomerBackupTab', 'backitup',
|
|
|
44
45
|
for (const marker of ['System-Notfallsicherung', 'NexoWatt Sicherung', '^tab-backitup', 'nexowatt-backup|eos-backup']) {
|
|
45
46
|
if (!drawer.includes(marker)) fail(`Drawer reserve marker missing: ${marker}`);
|
|
46
47
|
}
|
|
47
|
-
if (!assist.includes('NexoWatt
|
|
48
|
+
if (!assist.includes('NexoWatt Backup') && !assist.includes('Sicherungsstatus')) fail('EOS Assist runtime lacks backup-system context');
|
|
49
|
+
if (!knowledge.includes('NexoWatt Backup') || !knowledge.includes('Admin/Service')) fail('EOS Assist knowledge lacks role-aware backup context');
|
|
48
50
|
if (io.native?.eosHideLegacyBackupFromNonAdmins !== true) fail('eosHideLegacyBackupFromNonAdmins must default to true');
|
|
49
51
|
if (io.native?.nexowattHideLegacyBackupFromNonAdmins !== true) fail('nexowattHideLegacyBackupFromNonAdmins must default to true');
|
|
50
52
|
const reserve = (io.native?.eosProtectedAdapters || []).find(entry => entry.adapter === 'backitup');
|
|
@@ -22,33 +22,23 @@ const shellTag = String(buildInfo.shellCacheTag || buildInfo.shellCacheVersion |
|
|
|
22
22
|
|
|
23
23
|
if (css !== sourceCss) fail('login CSS source/build drift');
|
|
24
24
|
if (!css.includes('outer frame is decorative only')) fail('decorative compact-frame contract is missing');
|
|
25
|
-
if (css.includes('html.eos-login .MuiPaper-root:has(#username)'))
|
|
26
|
-
fail('broad :has selector still styles the outer login Paper');
|
|
27
|
-
}
|
|
25
|
+
if (css.includes('html.eos-login .MuiPaper-root:has(#username)')) fail('broad :has selector still styles the outer login Paper');
|
|
28
26
|
|
|
29
27
|
const outer = css.match(/html\.eos-login main\.MuiPaper-root\s*\{([\s\S]*?)\n\}/)?.[1] || '';
|
|
30
|
-
for (const marker of [
|
|
31
|
-
'position: relative',
|
|
32
|
-
'width: 100%',
|
|
33
|
-
'min-height: 100vh',
|
|
34
|
-
'place-items: center',
|
|
35
|
-
'background: transparent !important',
|
|
36
|
-
'box-shadow: none !important',
|
|
37
|
-
]) {
|
|
28
|
+
for (const marker of ['position: relative', 'width: 100%', 'min-height: 100vh', 'place-items: center', 'background: transparent !important', 'box-shadow: none !important']) {
|
|
38
29
|
if (!outer.includes(marker)) fail(`transparent viewport host rule missing: ${marker}`);
|
|
39
30
|
}
|
|
40
|
-
|
|
41
31
|
const decorative = css.match(/html\.eos-login main\.MuiPaper-root::before\s*\{([\s\S]*?)\n\}/)?.[1] || '';
|
|
42
|
-
for (const marker of [
|
|
43
|
-
"content: ''",
|
|
44
|
-
'width: min(390px, calc(100vw - 24px))',
|
|
45
|
-
'height: min(480px, calc(100vh - 24px))',
|
|
46
|
-
'transform: translate(-50%, -50%)',
|
|
47
|
-
'pointer-events: none',
|
|
48
|
-
]) {
|
|
32
|
+
for (const marker of ["content: ''", 'width: min(390px, calc(100vw - 24px))', 'height: min(480px, calc(100vh - 24px))', 'transform: translate(-50%, -50%)', 'pointer-events: none']) {
|
|
49
33
|
if (!decorative.includes(marker)) fail(`decorative rear frame rule missing: ${marker}`);
|
|
50
34
|
}
|
|
51
|
-
|
|
35
|
+
const compactBlocks = [...css.matchAll(/html\.eos-login[^\{]*eos-login-card-modern[^\{]*\{([\s\S]*?)\n\}/g)].map(match => match[1]);
|
|
36
|
+
if (!compactBlocks.length) fail('compact login card CSS block missing');
|
|
37
|
+
for (const block of compactBlocks) {
|
|
38
|
+
if (/overflow\s*:\s*auto\s*!important/.test(block) || /overflow-y\s*:\s*(?:auto|scroll)/.test(block)) {
|
|
39
|
+
fail('compact login card still creates an internal scrollbar');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
52
42
|
for (const marker of [
|
|
53
43
|
'html.eos-login main.MuiPaper-root > .eos-login-card-modern',
|
|
54
44
|
'html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#username)',
|
|
@@ -56,26 +46,17 @@ for (const marker of [
|
|
|
56
46
|
'width: min(334px, calc(100vw - 56px)) !important',
|
|
57
47
|
'height: min(424px, calc(100vh - 56px)) !important',
|
|
58
48
|
'max-height: none !important',
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (!css.includes(
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
49
|
+
'overflow: hidden !important',
|
|
50
|
+
'scrollbar-width: none !important',
|
|
51
|
+
'::-webkit-scrollbar',
|
|
52
|
+
]) if (!css.includes(marker)) fail(`inner compact card rule missing: ${marker}`);
|
|
53
|
+
if (!css.includes('.eos-login-first-status:empty { display: none; min-height: 0; margin: 0; }')) fail('empty first-login status still reserves vertical space');
|
|
66
54
|
if (!login.includes('Keep the familiar compact login page')) fail('native Login source lacks compact-page contract');
|
|
67
|
-
if (login.includes('
|
|
68
|
-
|
|
69
|
-
}
|
|
55
|
+
if (!login.includes("overflowY: 'hidden'")) fail('native Login paper still enables vertical scrolling');
|
|
56
|
+
if (login.includes('eos-login-role-selector-native') || login.includes('data-eos-account=')) fail('native Login source still renders role-selector buttons');
|
|
70
57
|
if (!bootstrap.includes('compact normal-login first activation')) fail('runtime compact first-login contract missing');
|
|
71
|
-
if (!bootstrap.includes("card.querySelectorAll('.eos-login-role-selector').forEach(element => element.remove())"))
|
|
72
|
-
fail('runtime does not remove stale role-selector surfaces');
|
|
73
|
-
}
|
|
58
|
+
if (!bootstrap.includes("card.querySelectorAll('.eos-login-role-selector').forEach(element => element.remove())")) fail('runtime does not remove stale role-selector surfaces');
|
|
74
59
|
if (/data-eos-account=|selector\.innerHTML/.test(bootstrap)) fail('runtime still injects a second role-selector panel');
|
|
75
|
-
|
|
76
|
-
if (!shellTag || !index.includes(`nexowatt-native-shell.css?v=${shellTag}`)) {
|
|
77
|
-
fail('login CSS cache key is not aligned with build information');
|
|
78
|
-
}
|
|
79
|
-
|
|
60
|
+
if (!shellTag || !index.includes(`nexowatt-native-shell.css?v=${shellTag}`)) fail('login CSS cache key is not aligned with build information');
|
|
80
61
|
if (bad) process.exit(1);
|
|
81
62
|
console.log('[NexoWatt EOS login layout] OK');
|
|
@@ -29,7 +29,7 @@ for (const marker of ['eos-account-management.js','nexowatt-native-shell.css','e
|
|
|
29
29
|
for (const marker of ['NexoWatt EOS', 'Zugänge & Rollen', 'Endkunden-Zugänge', 'ensureEntrySurface']) {
|
|
30
30
|
if (!accountUi.includes(marker)) fail(`modern account surface missing label: ${marker}`);
|
|
31
31
|
}
|
|
32
|
-
for (const marker of ['installIntegratedFirstLogin','
|
|
32
|
+
for (const marker of ['installIntegratedFirstLogin','v93 compact normal-login first activation','eos-passwordless-card','Idempotent writes are essential here']) {
|
|
33
33
|
if (!bootstrap.includes(marker)) fail(`integrated first-activation surface missing: ${marker}`);
|
|
34
34
|
}
|
|
35
35
|
if (/data-eos-account=|selector\.innerHTML/.test(bootstrap)) fail('compact login still injects role buttons or a second panel');
|
|
@@ -103,10 +103,10 @@ for (const file of [
|
|
|
103
103
|
'LICENSE',
|
|
104
104
|
'NEXOWATT_PROPRIETARY_LICENSE.md',
|
|
105
105
|
'THIRD_PARTY_NOTICES.md',
|
|
106
|
-
'README_STABILITY_V7.9.
|
|
107
|
-
'PUBLISH_STABLE_V7.9.
|
|
108
|
-
'INSTALL_TEST_V7.9.
|
|
109
|
-
'RELEASE_ACCEPTANCE_V7.9.
|
|
106
|
+
'README_STABILITY_V7.9.93.md',
|
|
107
|
+
'PUBLISH_STABLE_V7.9.93.md',
|
|
108
|
+
'INSTALL_TEST_V7.9.93.md',
|
|
109
|
+
'RELEASE_ACCEPTANCE_V7.9.93.md',
|
|
110
110
|
'tools/nexowatt-patch-built-frontend.cjs',
|
|
111
111
|
'tools/nexowatt-native-shell-selftest.cjs',
|
|
112
112
|
'tools/nexowatt-clean-legacy-runtime.cjs',
|
|
@@ -203,7 +203,7 @@ if (accountManagement.includes("launcher.className = 'eos-account-management-lau
|
|
|
203
203
|
if (accountManagement.includes('new MutationObserver')) fail('account-management runtime adds a second broad DOM observer');
|
|
204
204
|
if (read('src-admin/public/js/eos-account-management.js') !== accountManagement) fail('account-management source/build drift');
|
|
205
205
|
const roleBootstrap = read('adminWww/js/eos-role-bootstrap.js');
|
|
206
|
-
if (!roleBootstrap.includes('installIntegratedFirstLogin') || !roleBootstrap.includes('
|
|
206
|
+
if (!roleBootstrap.includes('installIntegratedFirstLogin') || !roleBootstrap.includes('v93 compact normal-login first activation')) fail('compact integrated first-login is incomplete');
|
|
207
207
|
if (/data-eos-account=|selector\.innerHTML/.test(roleBootstrap)) fail('login role buttons must not enlarge the normal login card');
|
|
208
208
|
if (!roleBootstrap.includes('nexowatt/account/passwordless-status') || !roleBootstrap.includes('eligibility.allowed')) fail('server-checked first-login eligibility is incomplete');
|
|
209
209
|
if (roleBootstrap.includes('installPasswordlessFirstLoginLauncher')) fail('old first-login launcher remains active');
|
package/INSTALL_TEST_V7.9.92.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Installation und Test 7.9.92
|
|
2
|
-
|
|
3
|
-
```bash
|
|
4
|
-
cd /opt/iobroker
|
|
5
|
-
iobroker backup
|
|
6
|
-
iobroker stop eos-admin.0
|
|
7
|
-
npm install --no-save --omit=dev iobroker.eos-admin@latest
|
|
8
|
-
iobroker upload eos-admin
|
|
9
|
-
iobroker restart eos-admin.0
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Version prüfen:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
node -p "require('/opt/iobroker/node_modules/iobroker.eos-admin/package.json').version"
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Erwartet: `7.9.92`.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# NexoWatt EOS Admin 7.9.92
|
|
2
|
-
|
|
3
|
-
Stable Verkaufsprodukt-Version. Diese Version übernimmt die Bedien-, Rollen- und Login-Korrekturen aus 7.9.91 und härtet die Release-Vorbereitung.
|
|
4
|
-
|
|
5
|
-
Vor Paketprüfung und Veröffentlichung werden folgende verbindliche Standardwerte automatisch gesetzt:
|
|
6
|
-
|
|
7
|
-
- Authentifizierung aktiv
|
|
8
|
-
- EOS Admin Standardport 8081
|
|
9
|
-
- interner Admin nur für Admin/Service
|
|
10
|
-
- interne BackItUp-Notfallreserve nur für Admin/Service
|
|
11
|
-
- NexoWatt-Backup-Sichtbarkeitskompatibilität aktiv
|
|
12
|
-
- Erstpasswort-Pflicht aktiv
|
|
13
|
-
|
|
14
|
-
Die Normalisierung verändert keine bestehenden Kundendaten auf einem installierten System; sie betrifft die Paketmetadaten des zu veröffentlichenden Adapters.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Release-Abnahme 7.9.92
|
|
2
|
-
|
|
3
|
-
- [ ] `npm run check:eos-publish-channel` erfolgreich
|
|
4
|
-
- [ ] `npm run check:eos-package` erfolgreich
|
|
5
|
-
- [ ] `npm run check:eos-stability` erfolgreich
|
|
6
|
-
- [ ] `npm publish --dry-run --tag latest` erfolgreich
|
|
7
|
-
- [ ] Admin/Service sieht `admin.0` und `backitup.0`
|
|
8
|
-
- [ ] Installateur und Endkunde sehen `admin.0` und `backitup.0` nicht
|
|
9
|
-
- [ ] NexoWatt Backup bleibt rollenabhängig erreichbar
|
|
10
|
-
- [ ] Login und Erstanmeldung funktionieren
|
|
11
|
-
- [ ] Standardport 8081
|
|
12
|
-
- [ ] Reboot- und Rollbacktest erfolgreich
|
package/RELEASE_NOTES_V7.9.92.md
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Release Notes – NexoWatt EOS Admin 7.9.92
|
|
2
|
-
|
|
3
|
-
## Behoben
|
|
4
|
-
|
|
5
|
-
- Der npm-Publish konnte in einem älteren oder unvollständig aktualisierten Arbeitsordner mit `internal backup reserve must default to Admin/Service visibility` abbrechen.
|
|
6
|
-
- Ein neuer Release-Default-Schritt stellt die beiden Backup-Reserve-Flags vor allen relevanten Prüfungen automatisch auf den verbindlichen sicheren Wert `true`.
|
|
7
|
-
- Eine eigene Regression prüft fehlende, falsche und bereits korrekte Werte.
|
|
8
|
-
|
|
9
|
-
## Unverändert
|
|
10
|
-
|
|
11
|
-
- Standardport 8081
|
|
12
|
-
- npm-Dist-Tag `latest`
|
|
13
|
-
- Admin-/BackItUp-Notfallreserve nur für Admin/Service
|
|
14
|
-
- NexoWatt Sicherung entsprechend Rollenfreigabe
|
|
15
|
-
- kompakte Anmeldung und Erstaktivierung
|
|
16
|
-
- klickbare Installer-/Endkundenübersicht
|
|
17
|
-
- EOS Assist im Header
|