This is an automated email from the ASF dual-hosted git repository.

wu-sheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git

commit 34a776bc990fefdbd290901a7a98d15b05f53bc4
Author: Wu Sheng <[email protected]>
AuthorDate: Tue May 12 10:33:33 2026 +0800

    ui: operate section is vantage parity, drop audit log viewer
---
 apps/ui/src/components/shell/AppSidebar.vue | 12 ++++++++----
 apps/ui/src/router/index.ts                 | 17 ++++++++++-------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/apps/ui/src/components/shell/AppSidebar.vue 
b/apps/ui/src/components/shell/AppSidebar.vue
index 948e983..982db3e 100644
--- a/apps/ui/src/components/shell/AppSidebar.vue
+++ b/apps/ui/src/components/shell/AppSidebar.vue
@@ -43,16 +43,20 @@ interface NavRow {
   badge?: { text: string; kind?: 'ok' | 'warn' | 'err' | 'info' };
 }
 
-// Cross-layer operations stay global.
+// Operate = OAP runtime operations (vantage-parity) + alarms.
+// Trace search is per-layer (lives under /layer/:key/traces) so it's NOT here.
 const operate: NavRow[] = [
   { icon: 'alert', label: 'Alarms', to: '/operate/alarms', badge: { text: '7', 
kind: 'err' } },
-  { icon: 'trace', label: 'Trace search', to: '/operate/traces' },
+  { icon: 'svc', label: 'Cluster status', to: '/operate/cluster' },
+  { icon: 'set', label: 'DSL catalog', to: '/operate/dsl' },
+  { icon: 'metric', label: 'Inspect', to: '/operate/inspect' },
+  { icon: 'flame', label: 'Live debug', to: '/operate/live-debug' },
+  { icon: 'trace', label: 'OAL viewer', to: '/operate/oal' },
+  { icon: 'download', label: 'Dump', to: '/operate/dump' },
 ];
 const admin: NavRow[] = [
-  { icon: 'svc', label: 'Cluster status', to: '/cluster' },
   { icon: 'user', label: 'Users', to: '/admin/users' },
   { icon: 'set', label: 'Roles', to: '/admin/roles' },
-  { icon: 'log', label: 'Audit log', to: '/admin/audit' },
 ];
 </script>
 
diff --git a/apps/ui/src/router/index.ts b/apps/ui/src/router/index.ts
index 41c949a..d297819 100644
--- a/apps/ui/src/router/index.ts
+++ b/apps/ui/src/router/index.ts
@@ -85,15 +85,18 @@ function layerSubRoutes(): RouteRecordRaw[] {
 const shellRoutes: RouteRecordRaw[] = [
   { path: '', name: 'home', component: () => 
import('@/views/landing/LandingView.vue') },
   ...layerSubRoutes(),
-  // Cross-layer operate
-  { path: 'operate/alarms', component: placeholder, props: { title: 'Alarms', 
phase: 'Phase 5', note: 'Read-only; recovery is backend-auto.' } },
-  { path: 'operate/traces', component: placeholder, props: { title: 'Trace 
search', phase: 'Phase 5', note: 'Cross-layer trace search. Per-layer trace 
explorers live under /layer/:key/traces.' } },
-  { path: 'operate/traces/:traceId', component: placeholder, props: (r) => ({ 
title: `Trace · ${r.params.traceId}`, phase: 'Phase 5' }) },
-  // Admin
-  { path: 'cluster', component: placeholder, props: { title: 'Cluster status', 
phase: 'Phase 6 / 7', note: 'Module activity matrix · storage health · receiver 
activity · effective config tree · TTL grid.' } },
+  // Operate (vantage-parity) — OAP runtime operations
+  { path: 'operate/alarms', component: placeholder, props: { title: 'Alarms', 
phase: 'Phase 5', note: 'Read-only; recovery is backend-auto. Live debug card 
via admin REST.' } },
+  { path: 'operate/cluster', component: placeholder, props: { title: 'Cluster 
status', phase: 'Phase 6 / 7', note: 'Module activity matrix · storage health · 
receiver activity · effective config tree · TTL grid.' } },
+  { path: 'operate/dsl', component: placeholder, props: { title: 'DSL 
catalog', phase: 'Phase 6', note: 'MAL / LAL rule catalog + Monaco editor with 
diff and revert-to-bundled.' } },
+  { path: 'operate/dsl/:catalog/:name', component: placeholder, props: (r) => 
({ title: `Edit · ${r.params.name}`, phase: 'Phase 6' }) },
+  { path: 'operate/inspect', component: placeholder, props: { title: 
'Inspect', phase: 'Phase 6', note: 'OAP metric catalog browse + MQE ad-hoc 
charts with rule attribution.' } },
+  { path: 'operate/live-debug/:tab(mal|lal|oal)?', component: placeholder, 
props: (r) => ({ title: `Live debug · ${r.params.tab ?? 'mal'}`, phase: 'Phase 
6' }) },
+  { path: 'operate/oal', component: placeholder, props: { title: 'OAL viewer', 
phase: 'Phase 6', note: 'Read-only OAL files with line-numbered syntax 
highlighting.' } },
+  { path: 'operate/dump', component: placeholder, props: { title: 'Dump', 
phase: 'Phase 6', note: 'Stream OAP runtime-rule dump as tar.gz.' } },
+  // Admin (users + roles only; no audit log UI — BFF JSONL is server-side 
forensic only)
   { path: 'admin/users', component: placeholder, props: { title: 'Users', 
phase: 'Phase 7' } },
   { path: 'admin/roles', component: placeholder, props: { title: 'Roles & 
permissions', phase: 'Phase 7' } },
-  { path: 'admin/audit', component: placeholder, props: { title: 'Audit log', 
phase: 'Phase 7' } },
 ];
 
 const router = createRouter({

Reply via email to