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); }