feat: support MCP elicitation and rebuild release
This commit is contained in:
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user