fix: cherry-pick PR#94 improvements + dashboard loading fix

- ws-client: connection dedup (_connecting state), connect() guard, global singleton
- chat: 8 null guards (sendMessage/doSend/createStreamBubble/renderAttachments/showPageGuide/loadHistory)
- chat: auto-scroll control (wheel/touch/scrollBtn, disable on scroll-up)
- chat: tool call rendering (appendToolsToEl, collectToolsFromMessage, upsertTool, mergeToolEventData)
- chat: tool event tracking (agent tool events -> _toolEventData/_toolRunIndex)
- chat: extractChatContent/extractContent/dedupeHistory full tools support
- chat.css: .msg-tool collapsible card styles
- dashboard: .catch() on loadDashboardData fire-and-forget, error state + retry button
This commit is contained in:
晴天
2026-03-17 17:03:51 +08:00
parent 22a1fccd8f
commit 604ea3da96
4 changed files with 439 additions and 37 deletions

View File

@@ -855,6 +855,55 @@
color: var(--text-tertiary);
}
/* 工具调用 */
.msg-tool {
margin-bottom: 8px;
display: flex;
flex-direction: column;
gap: 8px;
}
.msg-tool-item {
border: 1px solid var(--border-primary, var(--border));
background: var(--bg-tertiary, var(--bg-secondary));
border-radius: var(--radius-md, 8px);
padding: 8px 10px;
}
.msg-tool-item > summary {
cursor: pointer;
font-size: 12px;
color: var(--text-secondary);
list-style: none;
}
.msg-tool-item > summary::-webkit-details-marker {
display: none;
}
.msg-tool-body {
margin-top: 8px;
display: none;
gap: 8px;
}
.msg-tool-item[open] > .msg-tool-body {
display: grid;
}
.msg-tool-block {
background: var(--bg-primary, var(--bg));
border: 1px solid var(--border-primary, var(--border));
border-radius: var(--radius-sm, 4px);
padding: 8px 10px;
}
.msg-tool-title {
font-size: 11px;
color: var(--text-tertiary);
margin-bottom: 6px;
}
.msg-tool-block pre {
margin: 0;
white-space: pre-wrap;
word-break: break-word;
font-size: 11px;
color: var(--text-primary);
}
/* 首次引导提示 */
.chat-page-guide {
margin: 0 16px 8px;