feat: 完成第二版类型清理

This commit is contained in:
claude-code-best committed 2026-03-31 23:03:47 +08:00
1 parent 4c0a655a1c
commit d7a729ca68
604 files changed
+595 -953

No files matched your search

@@ -70,4 +70,3 @@ export function MCPConnectionManager(t0) {
}
return t2;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJSZWFjdE5vZGUiLCJ1c2VDb250ZXh0IiwidXNlTWVtbyIsIkNvbW1hbmQiLCJUb29sIiwiTUNQU2VydmVyQ29ubmVjdGlvbiIsIlNjb3BlZE1jcFNlcnZlckNvbmZpZyIsIlNlcnZlclJlc291cmNlIiwidXNlTWFuYWdlTUNQQ29ubmVjdGlvbnMiLCJNQ1BDb25uZWN0aW9uQ29udGV4dFZhbHVlIiwicmVjb25uZWN0TWNwU2VydmVyIiwic2VydmVyTmFtZSIsIlByb21pc2UiLCJjbGllbnQiLCJ0b29scyIsImNvbW1hbmRzIiwicmVzb3VyY2VzIiwidG9nZ2xlTWNwU2VydmVyIiwiTUNQQ29ubmVjdGlvbkNvbnRleHQiLCJ1c2VNY3BSZWNvbm5lY3QiLCJjb250ZXh0IiwiRXJyb3IiLCJ1c2VNY3BUb2dnbGVFbmFibGVkIiwiTUNQQ29ubmVjdGlvbk1hbmFnZXJQcm9wcyIsImNoaWxkcmVuIiwiZHluYW1pY01jcENvbmZpZyIsIlJlY29yZCIsImlzU3RyaWN0TWNwQ29uZmlnIiwiTUNQQ29ubmVjdGlvbk1hbmFnZXIiLCJ0MCIsIiQiLCJfYyIsInQxIiwidmFsdWUiLCJ0MiJdLCJzb3VyY2VzIjpbIk1DUENvbm5lY3Rpb25NYW5hZ2VyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgdHlwZSB7IFRvb2wgfSBmcm9tICcuLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHR5cGUge1xuICBNQ1BTZXJ2ZXJDb25uZWN0aW9uLFxuICBTY29wZWRNY3BTZXJ2ZXJDb25maWcsXG4gIFNlcnZlclJlc291cmNlLFxufSBmcm9tICcuL3R5cGVzLmpzJ1xuaW1wb3J0IHsgdXNlTWFuYWdlTUNQQ29ubmVjdGlvbnMgfSBmcm9tICcuL3VzZU1hbmFnZU1DUENvbm5lY3Rpb25zLmpzJ1xuXG5pbnRlcmZhY2UgTUNQQ29ubmVjdGlvbkNvbnRleHRWYWx1ZSB7XG4gIHJlY29ubmVjdE1jcFNlcnZlcjogKHNlcnZlck5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTx7XG4gICAgY2xpZW50OiBNQ1BTZXJ2ZXJDb25uZWN0aW9uXG4gICAgdG9vbHM6IFRvb2xbXVxuICAgIGNvbW1hbmRzOiBDb21tYW5kW11cbiAgICByZXNvdXJjZXM/OiBTZXJ2ZXJSZXNvdXJjZVtdXG4gIH0+XG4gIHRvZ2dsZU1jcFNlcnZlcjogKHNlcnZlck5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxufVxuXG5jb25zdCBNQ1BDb25uZWN0aW9uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8TUNQQ29ubmVjdGlvbkNvbnRleHRWYWx1ZSB8IG51bGw+KFxuICBudWxsLFxuKVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlTWNwUmVjb25uZWN0KCkge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNQ1BDb25uZWN0aW9uQ29udGV4dClcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VNY3BSZWNvbm5lY3QgbXVzdCBiZSB1c2VkIHdpdGhpbiBNQ1BDb25uZWN0aW9uTWFuYWdlcicpXG4gIH1cbiAgcmV0dXJuIGNvbnRleHQucmVjb25uZWN0TWNwU2VydmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNY3BUb2dnbGVFbmFibGVkKCkge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNQ1BDb25uZWN0aW9uQ29udGV4dClcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3VzZU1jcFRvZ2dsZUVuYWJsZWQgbXVzdCBiZSB1c2VkIHdpdGhpbiBNQ1BDb25uZWN0aW9uTWFuYWdlcicsXG4gICAgKVxuICB9XG4gIHJldHVybiBjb250ZXh0LnRvZ2dsZU1jcFNlcnZlclxufVxuXG5pbnRlcmZhY2UgTUNQQ29ubmVjdGlvbk1hbmFnZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgZHluYW1pY01jcENvbmZpZzogUmVjb3JkPHN0cmluZywgU2NvcGVkTWNwU2VydmVyQ29uZmlnPiB8IHVuZGVmaW5lZFxuICBpc1N0cmljdE1jcENvbmZpZzogYm9vbGVhblxufVxuXG4vLyBUT0RPIChvbGxpZSk6IFdlIG1heSBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhpcyBjb250ZXh0IGJ5IHB1dHRpbmcgdGhlc2UgZnVuY3Rpb24gb24gYXBwIHN0YXRlXG5leHBvcnQgZnVuY3Rpb24gTUNQQ29ubmVjdGlvbk1hbmFnZXIoe1xuICBjaGlsZHJlbixcbiAgZHluYW1pY01jcENvbmZpZyxcbiAgaXNTdHJpY3RNY3BDb25maWcsXG59OiBNQ1BDb25uZWN0aW9uTWFuYWdlclByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyByZWNvbm5lY3RNY3BTZXJ2ZXIsIHRvZ2dsZU1jcFNlcnZlciB9ID0gdXNlTWFuYWdlTUNQQ29ubmVjdGlvbnMoXG4gICAgZHluYW1pY01jcENvbmZpZyxcbiAgICBpc1N0cmljdE1jcENvbmZpZyxcbiAgKVxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHsgcmVjb25uZWN0TWNwU2VydmVyLCB0b2dnbGVNY3BTZXJ2ZXIgfSksXG4gICAgW3JlY29ubmVjdE1jcFNlcnZlciwgdG9nZ2xlTWNwU2VydmVyXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPE1DUENvbm5lY3Rpb25Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9NQ1BDb25uZWN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsS0FBSyxJQUNWQyxhQUFhLEVBQ2IsS0FBS0MsU0FBUyxFQUNkQyxVQUFVLEVBQ1ZDLE9BQU8sUUFDRixPQUFPO0FBQ2QsY0FBY0MsT0FBTyxRQUFRLG1CQUFtQjtBQUNoRCxjQUFjQyxJQUFJLFFBQVEsZUFBZTtBQUN6QyxjQUNFQyxtQkFBbUIsRUFDbkJDLHFCQUFxQixFQUNyQkMsY0FBYyxRQUNULFlBQVk7QUFDbkIsU0FBU0MsdUJBQXVCLFFBQVEsOEJBQThCO0FBRXRFLFVBQVVDLHlCQUF5QixDQUFDO0VBQ2xDQyxrQkFBa0IsRUFBRSxDQUFDQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUdDLE9BQU8sQ0FBQztJQUNsREMsTUFBTSxFQUFFUixtQkFBbUI7SUFDM0JTLEtBQUssRUFBRVYsSUFBSSxFQUFFO0lBQ2JXLFFBQVEsRUFBRVosT0FBTyxFQUFFO0lBQ25CYSxTQUFTLENBQUMsRUFBRVQsY0FBYyxFQUFFO0VBQzlCLENBQUMsQ0FBQztFQUNGVSxlQUFlLEVBQUUsQ0FBQ04sVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hEO0FBRUEsTUFBTU0sb0JBQW9CLEdBQUduQixhQUFhLENBQUNVLHlCQUF5QixHQUFHLElBQUksQ0FBQyxDQUMxRSxJQUNGLENBQUM7QUFFRCxPQUFPLFNBQUFVLGdCQUFBO0VBQ0wsTUFBQUMsT0FBQSxHQUFnQm5CLFVBQVUsQ0FBQ2lCLG9CQUFvQixDQUFDO0VBQ2hELElBQUksQ0FBQ0UsT0FBTztJQUNWLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDO0VBQUE7RUFDNUUsT0FDTUQsT0FBTyxDQUFBVixrQkFBbUI7QUFBQTtBQUduQyxPQUFPLFNBQUFZLG9CQUFBO0VBQ0wsTUFBQUYsT0FBQSxHQUFnQm5CLFVBQVUsQ0FBQ2lCLG9CQUFvQixDQUFDO0VBQ2hELElBQUksQ0FBQ0UsT0FBTztJQUNWLE1BQU0sSUFBSUMsS0FBSyxDQUNiLDhEQUNGLENBQUM7RUFBQTtFQUNGLE9BQ01ELE9BQU8sQ0FBQUgsZUFBZ0I7QUFBQTtBQUdoQyxVQUFVTSx5QkFBeUIsQ0FBQztFQUNsQ0MsUUFBUSxFQUFFeEIsU0FBUztFQUNuQnlCLGdCQUFnQixFQUFFQyxNQUFNLENBQUMsTUFBTSxFQUFFcEIscUJBQXFCLENBQUMsR0FBRyxTQUFTO0VBQ25FcUIsaUJBQWlCLEVBQUUsT0FBTztBQUM Line truncated
+14 -11
View File
@@ -139,6 +139,7 @@ import type {
ConnectedMCPServer,
MCPServerConnection,
McpSdkServerConfig,
McpStdioServerConfig,
ScopedMcpServerConfig,
ServerResource,
} from './types.js'
@@ -903,7 +904,7 @@ export const connectToServer = memoize(
)
logMCPDebug(name, `claude.ai proxy transport created successfully`)
} else if (
(serverRef.type === 'stdio' || !serverRef.type) &&
((serverRef as ScopedMcpServerConfig).type === 'stdio' || !(serverRef as ScopedMcpServerConfig).type) &&
isClaudeInChromeMCPServer(name)
) {
// Run the Chrome MCP server in-process to avoid spawning a ~325 MB subprocess
@@ -916,7 +917,7 @@ export const connectToServer = memoize(
const { createLinkedTransportPair } = await import(
'./InProcessTransport.js'
)
const context = createChromeContext(serverRef.env)
const context = createChromeContext((serverRef as McpStdioServerConfig).env)
inProcessServer = createClaudeForChromeMcpServer(context)
const [clientTransport, serverTransport] = createLinkedTransportPair()
await inProcessServer.connect(serverTransport)
@@ -924,7 +925,7 @@ export const connectToServer = memoize(
logMCPDebug(name, `In-process Chrome MCP server started`)
} else if (
feature('CHICAGO_MCP') &&
(serverRef.type === 'stdio' || !serverRef.type) &&
((serverRef as ScopedMcpServerConfig).type === 'stdio' || !(serverRef as ScopedMcpServerConfig).type) &&
isComputerUseMCPServer!(name)
) {
// Run the Computer Use MCP server in-process — same rationale as
@@ -941,23 +942,24 @@ export const connectToServer = memoize(
await inProcessServer.connect(serverTransport)
transport = clientTransport
logMCPDebug(name, `In-process Computer Use MCP server started`)
} else if (serverRef.type === 'stdio' || !serverRef.type) {
} else if ((serverRef as ScopedMcpServerConfig).type === 'stdio' || !(serverRef as ScopedMcpServerConfig).type) {
const stdioRef = serverRef as McpStdioServerConfig
const finalCommand =
process.env.CLAUDE_CODE_SHELL_PREFIX || serverRef.command
process.env.CLAUDE_CODE_SHELL_PREFIX || stdioRef.command
const finalArgs = process.env.CLAUDE_CODE_SHELL_PREFIX
? [[serverRef.command, ...serverRef.args].join(' ')]
: serverRef.args
? [[stdioRef.command, ...stdioRef.args].join(' ')]
: stdioRef.args
transport = new StdioClientTransport({
command: finalCommand,
args: finalArgs,
env: {
...subprocessEnv(),
...serverRef.env,
...stdioRef.env,
} as Record<string, string>,
stderr: 'pipe', // prevents error output from the MCP server from printing to the UI
})
} else {
throw new Error(`Unsupported server type: ${serverRef.type}`)
throw new Error(`Unsupported server type: ${(serverRef as ScopedMcpServerConfig).type}`)
}
// Set up stderr logging for stdio transport before connecting in case there are any stderr
@@ -3245,10 +3247,11 @@ async function callMCPTool({
}
function extractToolUseId(message: AssistantMessage): string | undefined {
if (message.message.content[0]?.type !== 'tool_use') {
const firstBlock = (message.message.content as ContentBlockParam[] | undefined)?.[0]
if (!firstBlock || typeof firstBlock === 'string' || firstBlock.type !== 'tool_use') {
return undefined
}
return message.message.content[0].id
return firstBlock.id
}
/**