diff --git a/mateclaw-ui/src/components/workspace/WorkspaceSwitcher.vue b/mateclaw-ui/src/components/workspace/WorkspaceSwitcher.vue
index 7896cb24..b002c635 100644
--- a/mateclaw-ui/src/components/workspace/WorkspaceSwitcher.vue
+++ b/mateclaw-ui/src/components/workspace/WorkspaceSwitcher.vue
@@ -70,7 +70,7 @@ onMounted(() => {
function onSwitch(id: number | string) {
if (id === '__manage__') {
- router.push('/security/workspaces')
+ router.push('/settings/workspaces')
return
}
store.switchWorkspace(id as number)
diff --git a/mateclaw-ui/src/router/index.ts b/mateclaw-ui/src/router/index.ts
index ca6ba6be..e5cade1a 100644
--- a/mateclaw-ui/src/router/index.ts
+++ b/mateclaw-ui/src/router/index.ts
@@ -100,6 +100,25 @@ const router = createRouter({
component: () => import('@/views/Settings/Video/index.vue'),
meta: { title: 'Settings - Video' },
},
+ // Workspace management
+ {
+ path: 'workspaces',
+ name: 'SettingsWorkspaces',
+ component: () => import('@/views/Security/Workspaces/index.vue'),
+ meta: { title: 'Settings - Workspaces' },
+ },
+ {
+ path: 'members',
+ name: 'SettingsMembers',
+ component: () => import('@/views/Security/Members/index.vue'),
+ meta: { title: 'Settings - Members' },
+ },
+ {
+ path: 'activity',
+ name: 'SettingsActivity',
+ component: () => import('@/views/Security/Activity/index.vue'),
+ meta: { title: 'Settings - Activity' },
+ },
// Advanced (absorbed from top-level nav)
{
path: 'agent-context',
@@ -163,29 +182,14 @@ const router = createRouter({
component: () => import('@/views/Security/AuditLogs/index.vue'),
meta: { title: 'Security - Audit Logs' },
},
- {
- path: 'members',
- name: 'SecurityMembers',
- component: () => import('@/views/Security/Members/index.vue'),
- meta: { title: 'Security - Members' },
- },
- {
- path: 'workspaces',
- name: 'SecurityWorkspaces',
- component: () => import('@/views/Security/Workspaces/index.vue'),
- meta: { title: 'Security - Workspaces' },
- },
- {
- path: 'activity',
- name: 'SecurityActivity',
- component: () => import('@/views/Security/Activity/index.vue'),
- meta: { title: 'Security - Activity' },
- },
],
},
// ==================== Redirects (backward compatibility) ====================
{ path: 'sessions', redirect: '/chat' },
{ path: 'workspace', redirect: '/settings/agent-context' },
+ { path: 'security/workspaces', redirect: '/settings/workspaces' },
+ { path: 'security/members', redirect: '/settings/members' },
+ { path: 'security/activity', redirect: '/settings/activity' },
{ path: 'cron-jobs', redirect: '/settings/cron-jobs' },
{ path: 'datasources', redirect: '/settings/datasources' },
{ path: 'mcp-servers', redirect: '/settings/mcp-servers' },
diff --git a/mateclaw-ui/src/views/Security/Layout.vue b/mateclaw-ui/src/views/Security/Layout.vue
index 16a147fa..8acc49df 100644
--- a/mateclaw-ui/src/views/Security/Layout.vue
+++ b/mateclaw-ui/src/views/Security/Layout.vue
@@ -57,24 +57,6 @@ const sections = computed(() => [
label: t('security.sections.auditLogs'),
icon: '',
},
- {
- id: 'members',
- path: '/security/members',
- label: t('security.sections.members', 'Members'),
- icon: '',
- },
- {
- id: 'workspaces',
- path: '/security/workspaces',
- label: t('security.sections.workspaces', 'Workspaces'),
- icon: '',
- },
- {
- id: 'activity',
- path: '/security/activity',
- label: t('security.sections.activity', 'Activity'),
- icon: '',
- },
])
function isActive(path: string) {
diff --git a/mateclaw-ui/src/views/Settings/Layout.vue b/mateclaw-ui/src/views/Settings/Layout.vue
index 0ab466b0..df1c7cfa 100644
--- a/mateclaw-ui/src/views/Settings/Layout.vue
+++ b/mateclaw-ui/src/views/Settings/Layout.vue
@@ -83,6 +83,26 @@ const sections = computed(() => [
label: t('settings.sections.video'),
icon: '',
},
+ // Divider: Workspace
+ { id: 'divider-workspace', path: '', label: t('settings.sections.workspace', 'Workspace'), icon: '', isDivider: true },
+ {
+ id: 'workspaces',
+ path: '/settings/workspaces',
+ label: t('security.sections.workspaces', 'Workspaces'),
+ icon: '',
+ },
+ {
+ id: 'members',
+ path: '/settings/members',
+ label: t('security.sections.members', 'Members'),
+ icon: '',
+ },
+ {
+ id: 'activity',
+ path: '/settings/activity',
+ label: t('security.sections.activity', 'Activity'),
+ icon: '',
+ },
// Divider: Advanced
{ id: 'divider-advanced', path: '', label: t('settings.sections.advanced'), icon: '', isDivider: true },
{