update some crash logs

This commit is contained in:
duanfuxiang
2025-06-17 17:45:02 +08:00
parent d57551dd23
commit 208e14f8e8
5 changed files with 37 additions and 10 deletions

View File

@@ -57,8 +57,15 @@ export class ChatView extends ItemView {
}
async render() {
// 确保容器元素存在
const containerElement = this.containerEl.children[1]
if (!containerElement || !(containerElement instanceof HTMLElement)) {
console.error('ChatView: Container element not found or invalid')
return
}
if (!this.root) {
this.root = createRoot(this.containerEl.children[1])
this.root = createRoot(containerElement)
}
const queryClient = new QueryClient({
@@ -92,7 +99,7 @@ export class ChatView extends ItemView {
<QueryClientProvider client={queryClient}>
<React.StrictMode>
<DialogProvider
container={this.containerEl.children[1] as HTMLElement}
container={containerElement}
>
<Chat ref={this.chatRef} {...this.initialChatProps} />
</DialogProvider>

View File

@@ -273,6 +273,11 @@ const McpHubView = () => {
</div>
) : (
mcpServers.map(server => {
// Add null check for server object
if (!server || !server.name) {
return null;
}
const serverKey = `${server.name}-${server.source || 'global'}`;
const isExpanded = !!expandedServers[serverKey];
const currentDetailTab = activeServerDetailTab[serverKey] || 'tools';
@@ -285,7 +290,7 @@ const McpHubView = () => {
{isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}
</div>
<span className={`infio-mcp-hub-status-indicator ${server.status === 'connected' ? 'connected' : server.status === 'connecting' ? 'connecting' : 'disconnected'} ${server.disabled ? 'disabled' : ''}`}></span>
<h3 className="infio-mcp-hub-name">{server.name.replace('infio-builtin-server', 'builtin')}</h3>
<h3 className="infio-mcp-hub-name">{server.name ? server.name.replace('infio-builtin-server', 'builtin') : 'Unknown Server'}</h3>
</div>
<div className="infio-mcp-hub-actions" onClick={(e) => e.stopPropagation()}>
@@ -352,7 +357,7 @@ const McpHubView = () => {
<div className="infio-mcp-tab-content">
{currentDetailTab === 'tools' && (
<div className="infio-mcp-tools-list">
{(server.tools && server.tools.length > 0) ? server.tools.map(tool => <ToolRow key={tool.name} tool={tool} />) : <p className="infio-mcp-empty-message">{t('mcpHub.noTools')}</p>}
{(server.tools && server.tools.length > 0) ? server.tools.filter(tool => tool && tool.name).map(tool => <ToolRow key={tool.name} tool={tool} />) : <p className="infio-mcp-empty-message">{t('mcpHub.noTools')}</p>}
</div>
)}
{currentDetailTab === 'resources' && (

View File

@@ -64,7 +64,7 @@ function FileBadge({
className="infio-chat-user-input-file-badge-name-icon"
/>
)}
<span>{mentionable.file.name}</span>
<span>{mentionable.file?.name || 'Unknown File'}</span>
</div>
</BadgeBase>
)
@@ -91,7 +91,7 @@ function FolderBadge({
className="infio-chat-user-input-file-badge-name-icon"
/>
)}
<span>{mentionable.folder.name}</span>
<span>{mentionable.folder?.name || 'Unknown Folder'}</span>
</div>
</BadgeBase>
)
@@ -147,7 +147,7 @@ function CurrentFileBadge({
className="infio-chat-user-input-file-badge-name-icon"
/>
)}
<span>{mentionable.file.name}</span>
<span>{mentionable.file?.name || 'Unknown File'}</span>
</div>
<div className="infio-chat-user-input-file-badge-name-block-suffix">
{' (Current file)'}
@@ -177,7 +177,7 @@ function BlockBadge({
className="infio-chat-user-input-file-badge-name-block-name-icon"
/>
)}
<span>{mentionable.file.name}</span>
<span>{mentionable.file?.name || 'Unknown File'}</span>
</div>
<div className="infio-chat-user-input-file-badge-name-block-suffix">
{` (${mentionable.startLine}:${mentionable.endLine})`}
@@ -234,7 +234,7 @@ function ImageBadge({
className="infio-chat-user-input-file-badge-name-icon"
/>
)}
<span>{mentionable.name}</span>
<span>{mentionable.name || 'Unknown Image'}</span>
</div>
</BadgeBase>
)

View File

@@ -27,6 +27,9 @@ export const getEmbeddingModel = (
dangerouslyAllowBrowser: true,
})
const modelInfo = GetEmbeddingModelInfo(settings.embeddingModelProvider, settings.embeddingModelId)
if (!modelInfo) {
throw new Error(`Embedding model ${settings.embeddingModelId} not found for provider ${settings.embeddingModelProvider}`)
}
return {
id: settings.embeddingModelId,
dimension: modelInfo.dimensions,
@@ -89,6 +92,9 @@ export const getEmbeddingModel = (
dangerouslyAllowBrowser: true,
})
const modelInfo = GetEmbeddingModelInfo(settings.embeddingModelProvider, settings.embeddingModelId)
if (!modelInfo) {
throw new Error(`Embedding model ${settings.embeddingModelId} not found for provider ${settings.embeddingModelProvider}`)
}
return {
id: settings.embeddingModelId,
dimension: modelInfo.dimensions,
@@ -151,6 +157,9 @@ export const getEmbeddingModel = (
dangerouslyAllowBrowser: true,
})
const modelInfo = GetEmbeddingModelInfo(settings.embeddingModelProvider, settings.embeddingModelId)
if (!modelInfo) {
throw new Error(`Embedding model ${settings.embeddingModelId} not found for provider ${settings.embeddingModelProvider}`)
}
return {
id: settings.embeddingModelId,
dimension: modelInfo.dimensions,
@@ -213,6 +222,9 @@ export const getEmbeddingModel = (
dangerouslyAllowBrowser: true,
})
const modelInfo = GetEmbeddingModelInfo(settings.embeddingModelProvider, settings.embeddingModelId)
if (!modelInfo) {
throw new Error(`Embedding model ${settings.embeddingModelId} not found for provider ${settings.embeddingModelProvider}`)
}
return {
id: settings.embeddingModelId,
dimension: modelInfo.dimensions,
@@ -271,6 +283,9 @@ export const getEmbeddingModel = (
const client = new GoogleGenerativeAI(settings.googleProvider.apiKey)
const model = client.getGenerativeModel({ model: settings.embeddingModelId })
const modelInfo = GetEmbeddingModelInfo(settings.embeddingModelProvider, settings.embeddingModelId)
if (!modelInfo) {
throw new Error(`Embedding model ${settings.embeddingModelId} not found for provider ${settings.embeddingModelProvider}`)
}
return {
id: settings.embeddingModelId,
dimension: modelInfo.dimensions,

View File

@@ -1760,7 +1760,7 @@ export const GetEmbeddingProviderModelIds = (provider: ApiProvider): string[] =>
return Object.keys(GetEmbeddingProviderModels(provider))
}
// Get embedding model info for a provider and model id
export const GetEmbeddingModelInfo = (provider: ApiProvider, modelId: string): EmbeddingModelInfo => {
export const GetEmbeddingModelInfo = (provider: ApiProvider, modelId: string): EmbeddingModelInfo | undefined => {
const models = GetEmbeddingProviderModels(provider)
return models[modelId]
}