fix(core): revert form service and mcp elicitation (#35080)

This commit is contained in:
Aiden Cline
2026-07-03 00:32:10 -05:00
committed by GitHub
parent 1de3c6e4a6
commit ef2140d121
73 changed files with 5874 additions and 5779 deletions
@@ -114,7 +114,7 @@ export async function runNonInteractivePrompt(input: Input) {
const rejectQuestion = async (request: { id: string }) => {
questionRejected = true
await input.client.question.reject({ requestID: request.id }).catch(() => {})
await input.client.v2.session.question.reject({ sessionID: input.sessionID, requestID: request.id }).catch(() => {})
}
const consume = async () => {
@@ -127,7 +127,7 @@ export async function runNonInteractivePrompt(input: Input) {
await replyPermission(event.data)
continue
}
if (event.type === "question.asked" && submitted && event.data.sessionID === input.sessionID) {
if (event.type === "question.v2.asked" && submitted && event.data.sessionID === input.sessionID) {
await rejectQuestion(event.data)
continue
}
@@ -408,11 +408,11 @@ export async function runNonInteractivePrompt(input: Input) {
const [permissions, questions] = await Promise.all([
input.client.v2.session.permission.list({ sessionID: input.sessionID }).catch(() => undefined),
input.client.question.list().catch(() => undefined),
input.client.v2.session.question.list({ sessionID: input.sessionID }).catch(() => undefined),
])
await Promise.all([
...(permissions?.data?.data ?? []).map(replyPermission),
...(questions?.data ?? []).filter((question) => question.sessionID === input.sessionID).map(rejectQuestion),
...(questions?.data?.data ?? []).map(rejectQuestion),
])
await completed
} finally {
+4 -3
View File
@@ -255,9 +255,10 @@ async function runInteractiveRuntime(input: RunRuntimeInput, deps: RunRuntimeDep
return
}
await ctx.sdk.question.reply({
await ctx.sdk.v2.session.question.reply({
sessionID: state.sessionID,
requestID: next.requestID,
answers: next.answers ?? [],
questionV2Reply: { answers: next.answers ?? [] },
})
},
onQuestionReject: async (next) => {
@@ -265,7 +266,7 @@ async function runInteractiveRuntime(input: RunRuntimeInput, deps: RunRuntimeDep
return
}
await ctx.sdk.question.reject(next)
await ctx.sdk.v2.session.question.reject({ sessionID: state.sessionID, ...next })
},
onCycleVariant: () => {
if (!state.model || state.variants.length === 0) {
@@ -3,6 +3,7 @@ import type {
PermissionRequest,
PermissionV2Request,
QuestionRequest,
QuestionV2Request,
SessionMessage,
SessionMessageAssistant,
SessionMessageAssistantTool,
@@ -132,6 +133,15 @@ function permission(request: PermissionV2Request): PermissionRequest {
}
}
function question(request: QuestionV2Request): QuestionRequest {
return {
id: request.id,
sessionID: request.sessionID,
questions: request.questions,
tool: request.tool,
}
}
function sessionID(event: RunV2Event) {
return "sessionID" in event.data && typeof event.data.sessionID === "string" ? event.data.sessionID : undefined
}
@@ -359,13 +369,13 @@ export async function createSessionTransport(input: StreamInput): Promise<Sessio
{ throwOnError: true },
),
input.sdk.v2.session.permission.list({ sessionID: input.sessionID }, { throwOnError: true }),
input.sdk.question.list({ directory: input.directory }, { throwOnError: true }),
input.sdk.v2.session.question.list({ sessionID: input.sessionID }, { throwOnError: true }),
input.sdk.v2.session.active({ throwOnError: true }),
])
const projected = messages.data.data.toReversed()
for (const message of projected) renderMessage(message, next.render, next.reuseVisibleWait)
state.permissions = permissions.data.data.map(permission)
state.questions = questions.data.filter((item) => item.sessionID === input.sessionID)
state.questions = questions.data.data.map(question)
syncBlockers()
await subagents.hydrate({ messages: projected, active: active.data.data })
const running = input.sessionID in active.data.data
@@ -534,12 +544,12 @@ export async function createSessionTransport(input: StreamInput): Promise<Sessio
syncBlockers()
return
}
if (event.type === "question.asked") {
if (!state.questions.some((item) => item.id === event.data.id)) state.questions.push(event.data)
if (event.type === "question.v2.asked") {
if (!state.questions.some((item) => item.id === event.data.id)) state.questions.push(question(event.data))
syncBlockers()
return
}
if (event.type === "question.replied" || event.type === "question.rejected") {
if (event.type === "question.v2.replied" || event.type === "question.v2.rejected") {
state.questions = state.questions.filter((item) => item.id !== event.data.requestID)
syncBlockers()
return