|
|
@@ -22,6 +22,7 @@ const props = withDefaults(defineProps<{
|
|
|
connected?: boolean
|
|
|
synced?: boolean
|
|
|
showTools?: boolean
|
|
|
+ showAssistantIdentity?: boolean
|
|
|
interaction?: UiInteraction | null
|
|
|
mentionNames?: string[]
|
|
|
}>(), {
|
|
|
@@ -38,6 +39,7 @@ const props = withDefaults(defineProps<{
|
|
|
connected: false,
|
|
|
synced: false,
|
|
|
showTools: true,
|
|
|
+ showAssistantIdentity: true,
|
|
|
interaction: null,
|
|
|
mentionNames: () => [],
|
|
|
})
|
|
|
@@ -154,9 +156,10 @@ defineExpose({ scrollToMessage, scrollToBottom })
|
|
|
:class="[`message--${message.role}`, {
|
|
|
'message--failed': message.status === 'failed',
|
|
|
'message--tool-only': message.role === 'assistant' && !message.content && !message.reasoning && Boolean(message.tools?.length),
|
|
|
+ 'message--assistant-anonymous': message.role === 'assistant' && !showAssistantIdentity,
|
|
|
}]"
|
|
|
>
|
|
|
- <div v-if="message.role !== 'user'" class="message__avatar">{{ (message.author || message.profile || (message.role === 'assistant' ? '夭' : '系')).slice(0, 1).toUpperCase() }}</div>
|
|
|
+ <div v-if="message.role !== 'user' && (message.role !== 'assistant' || showAssistantIdentity)" class="message__avatar">{{ (message.author || message.profile || (message.role === 'assistant' ? '夭' : '系')).slice(0, 1).toUpperCase() }}</div>
|
|
|
<div class="message__body">
|
|
|
<template v-if="message.timelineKind === 'delegation-complete'">
|
|
|
<details class="delegation-event">
|
|
|
@@ -165,7 +168,7 @@ defineExpose({ scrollToMessage, scrollToBottom })
|
|
|
</details>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
- <div class="message__meta">
|
|
|
+ <div v-if="message.role !== 'assistant' || showAssistantIdentity" class="message__meta">
|
|
|
<strong>{{ message.role === 'user' ? '你' : message.author || message.profile || (message.role === 'assistant' ? 'Agent' : '系统') }}</strong>
|
|
|
<time>{{ formatTime(message.createdAt) }}</time>
|
|
|
<span v-if="message.status && !['settled', 'streaming'].includes(message.status)">{{ { preparing: '准备中', attached: '附件已就绪', pending: '等待回执', accepted: '已接收', streaming: '生成中', settled: '已完成', failed: '发送失败', 'unknown-receipt': '回执未知' }[message.status] }}</span>
|
|
|
@@ -257,6 +260,7 @@ defineExpose({ scrollToMessage, scrollToBottom })
|
|
|
.message--system { justify-content: center; }.message--system .message__avatar, .message--system .message__meta { display: none; }.message--system .message__body { max-width: 82%; padding: 6px 10px; border: 1px solid var(--line); border-radius: 9px; color: var(--text-muted); text-align: center; }
|
|
|
.delegation-event { min-width: 230px; max-width: 460px; text-align: left; }.delegation-event summary { display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none; }.delegation-event summary::-webkit-details-marker { display: none; }.delegation-event summary > span { display: flex; min-width: 0; flex-direction: column; gap: 2px; }.delegation-event strong { color: var(--text-secondary); font-size: 11px; font-weight: 650; }.delegation-event small { color: var(--text-muted); font-size: 9px; }.delegation-event :deep(.markdown) { max-height: 260px; margin-top: 9px; overflow: auto; color: var(--text-secondary); font-size: 10px; }
|
|
|
.message--tool-only { margin-block: 9px; }.message--tool-only .message__avatar, .message--tool-only .message__meta, .message--tool-only .message__actions { display: none; }.message--tool-only .message__body { max-width: 100%; }
|
|
|
+.message--assistant-anonymous .message__body { max-width: min(680px, 100%); }
|
|
|
.message__reasoning { max-width: 420px; margin: 3px 0 10px; padding: 0 0 8px; border: 0; border-bottom: 1px dashed var(--line-strong); color: var(--text-secondary); font-size: 11px; }.message__reasoning summary { display: flex; align-items: center; gap: 5px; list-style: none; color: var(--text-muted); cursor: pointer; font-size: 9px; }.message__reasoning summary::-webkit-details-marker { display: none; }.message__reasoning summary::before { content: '›'; color: var(--text-muted); font-size: 14px; line-height: 1; transition: transform 120ms ease; }.message__reasoning[open] summary::before { transform: rotate(90deg); }.message__reasoning :deep(.markdown) { margin-top: 8px; }
|
|
|
.fork-divider { display: flex; align-items: center; gap: 12px; margin: 8px 0 28px; color: var(--text-muted); font-size: 10px; }.fork-divider::before, .fork-divider::after { height: 1px; flex: 1; background: var(--line); content: ''; }.fork-divider > span { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-raised); white-space: nowrap; }.fork-divider strong { max-width: 180px; overflow: hidden; color: var(--text-secondary); text-overflow: ellipsis; }
|
|
|
.message__attachments { display: flex; margin-top: 8px; flex-wrap: wrap; gap: 7px; }.message__attachments button { display: flex; min-width: 90px; max-width: 210px; min-height: 42px; align-items: center; gap: 7px; padding: 5px 8px; overflow: hidden; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); color: var(--text-secondary); cursor: pointer; }.message__attachments button:hover { border-color: var(--line-strong); }.message__attachments img { width: 48px; height: 48px; margin: -5px 0 -5px -8px; object-fit: cover; }.message__attachments button > span { display: grid; place-items: center; width: 25px; height: 25px; border-radius: 7px; background: var(--surface-soft); }.message__attachments strong { min-width: 0; overflow: hidden; font-size: 10px; font-weight: 520; text-overflow: ellipsis; white-space: nowrap; }
|