mirror of
https://github.com/EthanMarti/infio-copilot.git
synced 2026-05-09 00:20:09 +00:00
update some crash logs
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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' && (
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user