feat: support MCP elicitation and rebuild release

This commit is contained in:
shiyue
2026-08-24 17:39:41 +08:00
parent dd233a40e8
commit bd20a79d4b
69 changed files with 8978 additions and 13 deletions

View File

@@ -826,6 +826,44 @@ function completeApprovalTurn(thread, turnId) {
});
}
function completeElicitationTurn(thread, turnId, text) {
const isUrl = /elicitation\s+url/i.test(text);
const isOpenAiForm = /elicitation\s+openai/i.test(text);
const params = isUrl
? {
threadId: thread.id,
turnId,
serverName: 'fixture-mcp',
mode: 'url',
message: '请完成测试授权后返回 cc-web。',
url: 'https://example.com/mcp-elicitation-fixture',
elicitationId: 'fixture-elicitation-url',
_meta: { fixture: true },
}
: {
threadId: thread.id,
turnId,
serverName: 'fixture-mcp',
mode: isOpenAiForm ? 'openai/form' : 'form',
message: '请填写 MCP 测试信息。',
requestedSchema: {
type: 'object',
properties: {
displayName: { type: 'string', title: '显示名称', description: '用于回归断言。' },
count: { type: 'integer', title: '数量', minimum: 1, default: 2 },
enabled: { type: 'boolean', title: '启用', default: true },
tags: { type: 'array', title: '标签', items: { type: 'string', enum: ['alpha', 'beta'] } },
},
required: ['displayName'],
},
_meta: { fixture: true },
};
requestClient('mcpServer/elicitation/request', params, (message) => {
const result = message.result || {};
completeTurn(thread, turnId, `elicitation result: ${JSON.stringify(result)}`);
});
}
function completeEmptyReasoningTurn(thread, turnId, text) {
send({
method: 'item/started',
@@ -983,6 +1021,11 @@ function startTurn(params) {
return { turn: { id: turnId, status: 'running', items: [] } };
}
if (/elicitation/i.test(text)) {
completeElicitationTurn(thread, turnId, text);
return { turn: { id: turnId, status: 'running', items: [] } };
}
const delay = /recover/i.test(text) ? 5000 : /slow/i.test(text) ? 900 : 80;
if (/recover/i.test(text)) {
send({