@@ -356,6 +335,7 @@ import type { Conversation, Agent, ModelConfig, ProviderInfo, ActiveModelsInfo,
import MessageList from '@/components/chat/MessageList.vue'
import RecoverableModelBanner from '@/components/chat/RecoverableModelBanner.vue'
import SkillIcon from '@/components/common/SkillIcon.vue'
+import AgentPickerDialog from '@/components/common/AgentPickerDialog.vue'
import { parsePrompt, deriveTagline } from '@/utils/agentPromptProfile'
import { agentIconColor } from '@/utils/agentIconColor'
import ChatInput from '@/components/chat/ChatInput.vue'
@@ -467,14 +447,12 @@ const thinkingLevel = computed(() => thinkingEnabled.value ? 'high' : 'off')
watch(thinkingEnabled, (v) => localStorage.setItem('mateclaw_thinking', v ? 'on' : 'off'))
// Dropdowns & menus
-const agentDropdownOpen = ref(false)
-
const headerMenuOpen = ref(false)
-function selectAgent(agent: Agent) {
- agentDropdownOpen.value = false
- if (String(agent.id) !== String(selectedAgentId.value)) {
- selectedAgentId.value = agent.id
+function onAgentPicked(value: string | number | null) {
+ if (value == null) return
+ if (String(value) !== String(selectedAgentId.value)) {
+ selectedAgentId.value = value
newConversation()
}
}
@@ -1557,8 +1535,6 @@ async function clearMessages() {
}
}
-// onAgentChange removed — replaced by selectAgent()
-
// onModelChange removed — replaced by selectModel()
function goToModelSettings(providerId?: string) {
@@ -2090,19 +2066,6 @@ function handleCodeCopy(e: MouseEvent) {
padding: 10px 6px 12px;
}
-.conversation-panel.conv-collapsed .agent-select-trigger {
- justify-content: center;
- padding: 8px;
-}
-
-.conversation-panel.conv-collapsed .agent-dropdown {
- position: fixed;
- top: auto;
- left: 62px;
- right: auto;
- min-width: 260px;
-}
-
.conversation-panel.conv-collapsed .conv-item {
justify-content: center;
padding: 10px 6px;
@@ -2187,52 +2150,6 @@ function handleCodeCopy(e: MouseEvent) {
position: relative;
}
-.agent-select-trigger {
- width: 100%;
- display: flex;
- align-items: center;
- gap: 8px;
- padding: 8px 12px;
- border: 1px solid var(--mc-border);
- border-radius: 12px;
- font-size: 13px;
- color: var(--mc-text-primary);
- background: var(--mc-bg-sunken);
- cursor: pointer;
- outline: none;
- transition: all 0.15s;
-}
-
-.agent-select-trigger:hover {
- border-color: var(--mc-primary);
- background: var(--mc-bg-elevated);
-}
-
-.agent-select-trigger__icon {
- font-size: 18px;
- line-height: 1;
-}
-
-.agent-select-trigger__name {
- flex: 1;
- text-align: left;
- font-weight: 500;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.agent-select-trigger__arrow {
- flex-shrink: 0;
- color: var(--mc-text-tertiary);
- transition: transform 0.2s;
-}
-
-.agent-select-trigger__arrow.open {
- transform: rotate(180deg);
-}
-
-.agent-dropdown-backdrop,
.model-dropdown-backdrop,
.header-menu-backdrop {
position: fixed;
@@ -2240,80 +2157,6 @@ function handleCodeCopy(e: MouseEvent) {
z-index: 99;
}
-.agent-dropdown {
- position: absolute;
- top: calc(100% + 4px);
- left: 12px;
- right: 12px;
- min-width: 240px;
- z-index: 100;
- background: var(--mc-bg-elevated);
- border: 1px solid var(--mc-border);
- border-radius: 14px;
- padding: 6px;
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
- max-height: 320px;
- overflow-y: auto;
-}
-
-.agent-dropdown-item {
- display: flex;
- align-items: center;
- gap: 10px;
- padding: 10px 12px;
- border-radius: 10px;
- cursor: pointer;
- transition: background 0.12s;
-}
-
-.agent-dropdown-item:hover {
- background: var(--mc-bg-sunken);
-}
-
-.agent-dropdown-item.active {
- background: var(--mc-primary-bg);
-}
-
-.agent-dropdown-item__icon {
- font-size: 24px;
- line-height: 1;
- flex-shrink: 0;
-}
-
-.agent-dropdown-item__info {
- flex: 1;
- min-width: 0;
- display: flex;
- flex-direction: column;
- gap: 2px;
-}
-
-.agent-dropdown-item__name {
- font-size: 13px;
- font-weight: 600;
- color: var(--mc-text-primary);
-}
-
-.agent-dropdown-item__desc {
- font-size: 11px;
- color: var(--mc-text-tertiary);
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.agent-dropdown-item__check {
- flex-shrink: 0;
- color: var(--mc-primary);
-}
-
-.agent-dropdown-empty {
- padding: 16px;
- text-align: center;
- font-size: 13px;
- color: var(--mc-text-tertiary);
-}
-
.agent-dropdown-enter-active {
transition: all 0.15s ease-out;
}
diff --git a/mateclaw-ui/src/views/Memory/components/FactList.vue b/mateclaw-ui/src/views/Memory/components/FactList.vue
index 08b09918..9ec3cc26 100644
--- a/mateclaw-ui/src/views/Memory/components/FactList.vue
+++ b/mateclaw-ui/src/views/Memory/components/FactList.vue
@@ -75,7 +75,7 @@ import { mcToast } from '@/composables/useMcToast'
import { http } from '@/api'
import FactTrustBar from './FactTrustBar.vue'
-const props = defineProps<{ agentId: number }>()
+const props = defineProps<{ agentId: string | number }>()
const { t } = useI18n()
const facts = ref
([])
diff --git a/mateclaw-ui/src/views/Memory/components/MemoryBrowser.vue b/mateclaw-ui/src/views/Memory/components/MemoryBrowser.vue
index 5e5c7c6b..8ce4e8d1 100644
--- a/mateclaw-ui/src/views/Memory/components/MemoryBrowser.vue
+++ b/mateclaw-ui/src/views/Memory/components/MemoryBrowser.vue
@@ -66,7 +66,7 @@ import { useI18n } from 'vue-i18n'
import { mcToast } from '@/composables/useMcToast'
import { http, agentContextApi } from '@/api'
-const props = defineProps<{ agentId: number }>()
+const props = defineProps<{ agentId: string | number }>()
const { t } = useI18n()
interface FileInfo { filename: string; fileSize: number; enabled: boolean }
diff --git a/mateclaw-ui/src/views/Memory/components/MorningCard.vue b/mateclaw-ui/src/views/Memory/components/MorningCard.vue
index 39601594..05b3216a 100644
--- a/mateclaw-ui/src/views/Memory/components/MorningCard.vue
+++ b/mateclaw-ui/src/views/Memory/components/MorningCard.vue
@@ -22,7 +22,7 @@ import { ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { http } from '@/api'
-const props = defineProps<{ agentId: number }>()
+const props = defineProps<{ agentId: string | number }>()
const { t } = useI18n()
const card = ref(null)
diff --git a/mateclaw-ui/src/views/Memory/index.vue b/mateclaw-ui/src/views/Memory/index.vue
index a004461f..b841400c 100644
--- a/mateclaw-ui/src/views/Memory/index.vue
+++ b/mateclaw-ui/src/views/Memory/index.vue
@@ -14,36 +14,15 @@
-
+