mirror of
https://fastgit.cc/https://github.com/anomalyco/opencode
synced 2026-04-21 05:10:58 +08:00
unify blocker labels and base view picking
This commit is contained in:
@@ -205,39 +205,46 @@ function out(data: SessionData, commits: SessionCommit[], footer?: FooterOutput)
|
||||
}
|
||||
}
|
||||
|
||||
function pickView(data: SessionData): FooterView {
|
||||
const permission = data.permissions[0]
|
||||
if (permission) {
|
||||
return { type: "permission", request: permission }
|
||||
export function pickBlockerView(input: {
|
||||
permission?: PermissionRequest
|
||||
question?: QuestionRequest
|
||||
}): FooterView {
|
||||
if (input.permission) {
|
||||
return { type: "permission", request: input.permission }
|
||||
}
|
||||
|
||||
const question = data.questions[0]
|
||||
if (question) {
|
||||
return { type: "question", request: question }
|
||||
if (input.question) {
|
||||
return { type: "question", request: input.question }
|
||||
}
|
||||
|
||||
return { type: "prompt" }
|
||||
}
|
||||
|
||||
function queueFooter(data: SessionData): FooterOutput {
|
||||
const view = pickView(data)
|
||||
export function blockerStatus(view: FooterView) {
|
||||
if (view.type === "permission") {
|
||||
return {
|
||||
view,
|
||||
patch: { status: "awaiting permission" },
|
||||
}
|
||||
return "awaiting permission"
|
||||
}
|
||||
|
||||
if (view.type === "question") {
|
||||
return {
|
||||
view,
|
||||
patch: { status: "awaiting answer" },
|
||||
}
|
||||
return "awaiting answer"
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
function pickSessionView(data: SessionData): FooterView {
|
||||
return pickBlockerView({
|
||||
permission: data.permissions[0],
|
||||
question: data.questions[0],
|
||||
})
|
||||
}
|
||||
|
||||
function queueFooter(data: SessionData): FooterOutput {
|
||||
const view = pickSessionView(data)
|
||||
|
||||
return {
|
||||
view,
|
||||
patch: { status: "" },
|
||||
patch: { status: blockerStatus(view) },
|
||||
}
|
||||
}
|
||||
|
||||
@@ -348,7 +355,7 @@ function syncPermission(data: SessionData, part: ToolPart): FooterOutput | undef
|
||||
}
|
||||
|
||||
return {
|
||||
view: pickView(data),
|
||||
view: pickSessionView(data),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,9 +14,11 @@
|
||||
// delayed idle from an older turn cannot complete a newer busy turn.
|
||||
import type { Event, OpencodeClient } from "@opencode-ai/sdk/v2"
|
||||
import {
|
||||
blockerStatus,
|
||||
bootstrapSessionData,
|
||||
createSessionData,
|
||||
flushInterrupted,
|
||||
pickBlockerView,
|
||||
reduceSessionData,
|
||||
type SessionData,
|
||||
} from "./session-data"
|
||||
@@ -212,18 +214,6 @@ function sameView(a: FooterView, b: FooterView) {
|
||||
return a.request === b.request
|
||||
}
|
||||
|
||||
function blockerStatus(view: FooterView) {
|
||||
if (view.type === "permission") {
|
||||
return "awaiting permission"
|
||||
}
|
||||
|
||||
if (view.type === "question") {
|
||||
return "awaiting answer"
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
function blockerOrder(order: Map<string, number>, id: string) {
|
||||
return order.get(id) ?? Number.MAX_SAFE_INTEGER
|
||||
}
|
||||
@@ -240,17 +230,10 @@ function firstByOrder<T extends { id: string }>(left: T[], right: T[], order: Ma
|
||||
}
|
||||
|
||||
function pickView(data: SessionData, subagent: SubagentData, order: Map<string, number>): FooterView {
|
||||
const permission = firstByOrder(data.permissions, listSubagentPermissions(subagent), order)
|
||||
if (permission) {
|
||||
return { type: "permission", request: permission }
|
||||
}
|
||||
|
||||
const question = firstByOrder(data.questions, listSubagentQuestions(subagent), order)
|
||||
if (question) {
|
||||
return { type: "question", request: question }
|
||||
}
|
||||
|
||||
return { type: "prompt" }
|
||||
return pickBlockerView({
|
||||
permission: firstByOrder(data.permissions, listSubagentPermissions(subagent), order),
|
||||
question: firstByOrder(data.questions, listSubagentQuestions(subagent), order),
|
||||
})
|
||||
}
|
||||
|
||||
function composeFooter(input: {
|
||||
|
||||
Reference in New Issue
Block a user