From fe2a7c68cb39155efd9b5786e7af61272aedbc80 Mon Sep 17 00:00:00 2001 From: li1553770945 <1553770945@qq.com> Date: Tue, 3 Jun 2025 21:24:50 +0800 Subject: [PATCH] =?UTF-8?q?bugfix:=E4=BF=AE=E5=A4=8D=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8D=E7=AC=A6=E5=90=88=E8=A6=81=E6=B1=82?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=95=B4=E4=B8=AA=E6=8F=92=E4=BB=B6=E5=B4=A9?= =?UTF-8?q?=E6=BA=83=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/src/hook/db.ts | 3 ++- src/sidebar/workspace.controller.ts | 30 ++++++++++++++++++++--------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/service/src/hook/db.ts b/service/src/hook/db.ts index 6626a7c..8e79fe6 100644 --- a/service/src/hook/db.ts +++ b/service/src/hook/db.ts @@ -9,6 +9,7 @@ interface Entity { } const dbConnections: Record = {}; +const DatastoreCtor = Datastore as unknown as { new(options: any): any }; export class LocalDB { private db: any; @@ -28,7 +29,7 @@ export class LocalDB { const filename = path.join(dbPath, `${this.tableName}.db`); if (!dbConnections[filename]) { - dbConnections[filename] = new Datastore.default({ + dbConnections[filename] = new DatastoreCtor({ filename, autoload: true, timestampData: true diff --git a/src/sidebar/workspace.controller.ts b/src/sidebar/workspace.controller.ts index 8d8a802..84e118d 100644 --- a/src/sidebar/workspace.controller.ts +++ b/src/sidebar/workspace.controller.ts @@ -16,25 +16,37 @@ export class McpWorkspaceConnectProvider implements vscode.TreeDataProvider { // TODO: 读取 configDir 下的所有文件,作为子节点 const connection = getWorkspaceConnectionConfig(); - const sidebarItems = connection.items.map((item, index) => { - // 连接的名字 - const nItem = Array.isArray(item) ? item[0] : item; - const itemName = `${nItem.name} (${nItem.type || nItem.connectionType})` - return new ConnectionViewItem(itemName, vscode.TreeItemCollapsibleState.None, item, 'server'); - }) + + // 校验 connection 和 connection.items + if (!connection || !Array.isArray(connection.items)) { + return Promise.resolve([]); + } + + const sidebarItems = connection.items + .filter(item => item !== null && item !== undefined) + .map((item, index) => { + // 连接的名字 + const nItem = Array.isArray(item) ? item[0] : item; + if (!nItem || typeof nItem !== 'object') { + return null; + } + const name = nItem.name || '未命名'; + const type = nItem.type || nItem.connectionType || '未知类型'; + const itemName = `${name} (${type})`; + return new ConnectionViewItem(itemName, vscode.TreeItemCollapsibleState.None, item, 'server'); + }) + .filter(Boolean) as ConnectionViewItem[]; // 过滤掉为 null 的项 // 返回子节点 return Promise.resolve(sidebarItems); } - @RegisterCommand('revealWebviewPanel') public revealWebviewPanel(context: vscode.ExtensionContext, view: ConnectionViewItem) { const item = view.item; - const masterNode = Array.isArray(item)? item[0] : item; + const masterNode = Array.isArray(item) ? item[0] : item; const name = masterNode.filePath || masterNode.name || ''; revealOpenMcpWebviewPanel(context, 'workspace', name, item); }