mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
fix: handle option highlighting in request_user_input component
- Trim selected value to match option labels during comparison - Parse tool.result as JSON when loaded from history, as it's stored as string
This commit is contained in:
@@ -134,7 +134,8 @@ export function parseRequestUserInputAnswers(
|
||||
if (item.startsWith('user_note: ')) {
|
||||
userNote = item.slice('user_note: '.length).trim()
|
||||
} else if (!selected) {
|
||||
selected = item
|
||||
// Trim to match option labels which are also trimmed
|
||||
selected = item.trim()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,10 +9,23 @@ function getSelectionMark(isSelected: boolean): string {
|
||||
return isSelected ? '●' : '○'
|
||||
}
|
||||
|
||||
function parseResultAsAnswers(result: unknown): unknown {
|
||||
// tool.result from history may be a JSON string
|
||||
if (typeof result === 'string') {
|
||||
try {
|
||||
return JSON.parse(result)
|
||||
} catch {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
export function RequestUserInputView(props: ToolViewProps) {
|
||||
const parsed = parseRequestUserInputInput(props.block.tool.input)
|
||||
const questions = parsed.questions
|
||||
const rawAnswers = props.block.tool.permission?.answers ?? undefined
|
||||
// Try permission.answers first (live), fall back to tool.result (history)
|
||||
const rawAnswers = props.block.tool.permission?.answers ?? parseResultAsAnswers(props.block.tool.result) ?? undefined
|
||||
const parsedAnswers = rawAnswers ? parseRequestUserInputAnswers(rawAnswers) : null
|
||||
const hasAnswers = parsedAnswers && Object.keys(parsedAnswers).length > 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user