diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 2b502cc9..747c1555 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -72,6 +72,7 @@ "awooop": "AwoooP", "awooopHome": "AwoooP 總覽", "awooopWorkbench": "AwoooP 操作台", + "codeReview": "程式碼審查", "knowledgeAutomation": "知識與自動化", "governanceSecurity": "治理與安全", "workItems": "工作鏈路", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index 2b502cc9..747c1555 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -72,6 +72,7 @@ "awooop": "AwoooP", "awooopHome": "AwoooP 總覽", "awooopWorkbench": "AwoooP 操作台", + "codeReview": "程式碼審查", "knowledgeAutomation": "知識與自動化", "governanceSecurity": "治理與安全", "workItems": "工作鏈路", diff --git a/apps/web/src/app/[locale]/awooop/layout.tsx b/apps/web/src/app/[locale]/awooop/layout.tsx index b78d3d19..999d00e4 100644 --- a/apps/web/src/app/[locale]/awooop/layout.tsx +++ b/apps/web/src/app/[locale]/awooop/layout.tsx @@ -8,7 +8,7 @@ "use client"; import { AppLayout } from "@/components/layout"; -import { Link, usePathname } from "@/i18n/routing"; +import { usePathname } from "@/i18n/routing"; import { BrainCircuit, CalendarDays, @@ -116,29 +116,6 @@ export default function AwoooPLayout({ {t("status.score")} -
diff --git a/apps/web/src/components/layout/sidebar.tsx b/apps/web/src/components/layout/sidebar.tsx index 17b6bb37..39587d75 100644 --- a/apps/web/src/components/layout/sidebar.tsx +++ b/apps/web/src/components/layout/sidebar.tsx @@ -26,14 +26,21 @@ import { usePathname } from 'next/navigation' import Link from 'next/link' import { cn } from '@/lib/utils' import { + BarChart3, + Bell, BookOpen, BrainCircuit, + Building2, ChevronLeft, ChevronRight, + ClipboardList, + FileText, + GitPullRequest, HelpCircle, LayoutDashboard, Monitor, Package, + PlayCircle, Radar, Settings, ShieldCheck, @@ -71,10 +78,10 @@ type NavSection = { } // ============================================================ -// 2026-06-04: Operator-first IA +// 2026-06-26: Operator-first IA repair // ============================================================ // 參考 Material / Atlassian / Carbon 的 app shell 模式: -// 側欄放高頻任務與產品導航,Header 留給搜尋與全域工具。 +// 側欄放高頻任務與產品導航,頁面內不再重複用二層分頁藏入口。 // ============================================================ const NAV_SECTIONS: NavSection[] = [ @@ -83,22 +90,54 @@ const NAV_SECTIONS: NavSection[] = [ items: [ { id: 'command-center', href: '/', labelKey: 'commandCenter', Icon: LayoutDashboard }, { - id: 'awooop-workbench', + id: 'awooop-overview', href: '/awooop', - labelKey: 'awooopWorkbench', + labelKey: 'awooopHome', Icon: BrainCircuit, exact: true, - badge: true, - aliases: [ - '/awooop/work-items', - '/awooop/runs', - '/awooop/approvals', - '/awooop/contracts', - '/awooop/tenants', - '/alerts', - '/authorizations', - ], }, + ], + }, + { + sectionKey: 'queues', + items: [ + { + id: 'awooop-work-items', + href: '/awooop/work-items', + labelKey: 'workItems', + Icon: ClipboardList, + }, + { + id: 'awooop-runs', + href: '/awooop/runs', + labelKey: 'runMonitor', + Icon: PlayCircle, + }, + { + id: 'awooop-approvals', + href: '/awooop/approvals', + labelKey: 'approvalQueue', + Icon: ShieldCheck, + aliases: ['/authorizations'], + badge: true, + }, + { + id: 'awooop-contracts', + href: '/awooop/contracts', + labelKey: 'contracts', + Icon: FileText, + }, + { + id: 'awooop-tenants', + href: '/awooop/tenants', + labelKey: 'tenants', + Icon: Building2, + }, + ], + }, + { + sectionKey: 'monitoring', + items: [ { id: 'observability', href: '/observability', @@ -107,11 +146,11 @@ const NAV_SECTIONS: NavSection[] = [ aliases: ['/monitoring', '/apm', '/errors', '/apps', '/services', '/topology'], }, { - id: 'knowledge-automation', - href: '/knowledge-base', - labelKey: 'knowledgeAutomation', - Icon: BookOpen, - aliases: ['/knowledge', '/automation', '/auto-repair', '/drift', '/neural-command'], + id: 'alerts', + href: '/alerts', + labelKey: 'alerts', + Icon: Bell, + aliases: ['/alert-operation-logs', '/notifications'], }, { id: 'iwooos-security', @@ -119,14 +158,38 @@ const NAV_SECTIONS: NavSection[] = [ labelKey: 'iwooos', Icon: ShieldCheck, aliases: ['/security-compliance'], - relatedPaths: ['/iwooos', '/code-review', '/security', '/compliance'], + relatedPaths: ['/iwooos', '/security', '/compliance'], + }, + { + id: 'code-review', + href: '/code-review', + labelKey: 'codeReview', + Icon: GitPullRequest, + }, + ], + }, + { + sectionKey: 'knowledge', + items: [ + { + id: 'knowledge-automation', + href: '/knowledge-base', + labelKey: 'knowledgeAutomation', + Icon: BookOpen, + aliases: ['/knowledge', '/automation', '/auto-repair', '/drift', '/neural-command'], + }, + { + id: 'reports', + href: '/reports', + labelKey: 'reports', + Icon: BarChart3, }, { id: 'operations', href: '/operations', labelKey: 'operationsOverview', Icon: Package, - aliases: ['/deployments', '/tickets', '/cost', '/billing', '/action-logs', '/reports'], + aliases: ['/deployments', '/tickets', '/cost', '/billing', '/action-logs'], }, ], },