diff --git a/config/permissions/pending_requests.json b/config/permissions/pending_requests.json index 41b43a3..cf3e0e2 100644 --- a/config/permissions/pending_requests.json +++ b/config/permissions/pending_requests.json @@ -592,5 +592,27 @@ "framework.command.execute" ], "timestamp": 36655.279458412 + }, + "c4fe1ca1": { + "plugin_name": "example_plugin", + "permissions": [ + "plugin.example.read", + "plugin.example.write", + "plugin.example.execute", + "framework.event.subscribe", + "framework.command.execute" + ], + "timestamp": 36827.036816679 + }, + "0fdbf97b": { + "plugin_name": "sentinel", + "permissions": [ + "plugin.sentinel.read", + "plugin.sentinel.write", + "plugin.network.access", + "framework.event.subscribe", + "framework.command.execute" + ], + "timestamp": 36827.042118711 } } \ No newline at end of file diff --git a/config/plugins/commands.yaml b/config/plugins/commands.yaml index 1a3a280..510a50f 100644 --- a/config/plugins/commands.yaml +++ b/config/plugins/commands.yaml @@ -101,7 +101,7 @@ commands: permissions: - framework.command.test source: internal -last_updated: 36655.235712682 +last_updated: 36827.020697669 plugin_commands: example_plugin: echo: *id001 diff --git a/config/services/network_routes.yaml b/config/services/network_routes.yaml index 14a596f..5cf5c09 100644 --- a/config/services/network_routes.yaml +++ b/config/services/network_routes.yaml @@ -1,5 +1,5 @@ http_port: 4200 -last_updated: 36655.277279818 +last_updated: 36827.037929596 plugin_routes: example_plugin: - methods: diff --git a/static/web_panel/pages/plugins.html b/static/web_panel/pages/plugins.html index 2c75709..880982e 100644 --- a/static/web_panel/pages/plugins.html +++ b/static/web_panel/pages/plugins.html @@ -78,7 +78,7 @@ var plugins = data.plugins||[]; if (!plugins.length) { list.innerHTML = '
暂无插件
'; return; } list.innerHTML = plugins.map(function(p){ - return '
'+esc(p.name)+'
v'+esc(p.version||'?')+(p.running?' ✅':' ⏸')+'
'+(p.error?'
'+esc(p.error)+'
':'')+'
'+ + return '
'+esc(p.name)+'
v'+esc(p.version||'?')+(p.running?' ✓':' ⏸')+'
'+(p.error?'
'+esc(p.error)+'
':'')+'
'+ ''+ '
'; }).join(""); @@ -99,9 +99,9 @@ try { var r = await fetch("./api/plugins/import", {method:"POST", body:fd}); var d = await r.json(); - if (d.ok) { s.textContent = "✅ " + d.name + (d.loaded?" 已加载":" 待手动加载"); s.style.color = "var(--success)"; } - else { s.textContent = "❌ " + (d.error||"失败"); s.style.color = "var(--error)"; } - } catch(e) { s.textContent = "❌ " + e; s.style.color = "var(--error)"; } + if (d.ok) { s.textContent = "✓ " + d.name + (d.loaded?" 已加载":" 待手动加载"); s.style.color = "var(--success)"; } + else { s.textContent = "✗ " + (d.error||"失败"); s.style.color = "var(--error)"; } + } catch(e) { s.textContent = "✗ " + e; s.style.color = "var(--error)"; } load(); } @@ -113,9 +113,9 @@ try { var r = await fetch("./api/plugins/import", {method:"POST", headers:{"Content-Type":"application/json"}, body:JSON.stringify({url:url})}); var d = await r.json(); - if (d.ok) { s.textContent = "✅ " + d.name + (d.loaded?" 已加载":" 待手动加载"); s.style.color = "var(--success)"; } - else { s.textContent = "❌ " + (d.error||"失败"); s.style.color = "var(--error)"; } - } catch(e) { s.textContent = "❌ " + e; s.style.color = "var(--error)"; } + if (d.ok) { s.textContent = "✓ " + d.name + (d.loaded?" 已加载":" 待手动加载"); s.style.color = "var(--success)"; } + else { s.textContent = "✗ " + (d.error||"失败"); s.style.color = "var(--error)"; } + } catch(e) { s.textContent = "✗ " + e; s.style.color = "var(--error)"; } load(); } diff --git a/static/web_panel/pages/settings.html b/static/web_panel/pages/settings.html index 5e80e91..e754404 100644 --- a/static/web_panel/pages/settings.html +++ b/static/web_panel/pages/settings.html @@ -70,7 +70,7 @@
@@ -93,13 +93,13 @@ document.getElementById("ver-current").textContent = d.current_version || d.latest_version || "?"; var badge = document.getElementById("ver-badge"); if (d.update_available) { - badge.textContent = "🔄 " + d.latest_version + " 可用"; + badge.textContent = "↻ " + d.latest_version + " 可用"; badge.style.background = "var(--success,#4caf50)"; badge.style.color = "#fff"; document.getElementById("btn-apply").style.display = "inline-block"; document.getElementById("update-notes").innerHTML = d.latest_version ? "最新版本: "+esc(d.latest_version)+"" : ""; } else if (d.checked) { - badge.textContent = "✅ 已是最新"; + badge.textContent = "✓ 已是最新"; badge.style.background = "var(--md-sys-color-surface-container-lowest)"; badge.style.color = "var(--text)"; document.getElementById("btn-apply").style.display = "none"; @@ -124,9 +124,9 @@ document.getElementById("btn-apply").textContent = "⏳ 更新中..."; try { var r = await fetch("./api/updates/apply", {method:"POST"}), d = await r.json(); - if (d.ok) alert("✅ " + d.msg); - else alert("❌ " + (d.error||"失败")); - } catch(e) { alert("❌ " + e); } + if (d.ok) alert("✓ " + d.msg); + else alert("✗ " + (d.error||"失败")); + } catch(e) { alert("✗ " + e); } loadVersion(); } @@ -147,9 +147,9 @@ if (!confirm("确认回滚到 "+name+"? 当前版本将被覆盖。")) return; try { var r = await fetch("./api/updates/rollback", {method:"POST", headers:{"Content-Type":"application/json"}, body:JSON.stringify({name:name})}), d = await r.json(); - if (d.ok) alert("✅ " + d.msg); - else alert("❌ " + (d.error||"失败")); - } catch(e) { alert("❌ " + e); } + if (d.ok) alert("✓ " + d.msg); + else alert("✗ " + (d.error||"失败")); + } catch(e) { alert("✗ " + e); } } // ── 加载 API Keys ──