diff options
| author | adamelmore <[email protected]> | 2026-01-09 06:01:46 -0600 |
|---|---|---|
| committer | adamelmore <[email protected]> | 2026-01-09 06:02:45 -0600 |
| commit | ec828619cae413439f15ea03a1604c99dbc1b55c (patch) | |
| tree | 0ddbe1e50642fdd3fcd5d7f3f8d14662db135bf0 | |
| parent | 559013e1242fa3681f8362a2f0450c3095eb3513 (diff) | |
| download | opencode-ec828619cae413439f15ea03a1604c99dbc1b55c.tar.gz opencode-ec828619cae413439f15ea03a1604c99dbc1b55c.zip | |
fix(app): more defensive todo access
| -rw-r--r-- | packages/ui/src/components/message-part.tsx | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 534ea8f50..d59f5cfa3 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -984,6 +984,22 @@ ToolRegistry.register({ ToolRegistry.register({ name: "todowrite", render(props) { + const todos = createMemo(() => { + const meta = props.metadata?.todos + if (Array.isArray(meta)) return meta + + const input = props.input.todos + if (Array.isArray(input)) return input + + return [] + }) + + const subtitle = createMemo(() => { + const list = todos() + if (list.length === 0) return "" + return `${list.filter((t: Todo) => t.status === "completed").length}/${list.length}` + }) + return ( <BasicTool {...props} @@ -991,14 +1007,12 @@ ToolRegistry.register({ icon="checklist" trigger={{ title: "To-dos", - subtitle: props.input.todos - ? `${props.input.todos.filter((t: Todo) => t.status === "completed").length}/${props.input.todos.length}` - : "", + subtitle: subtitle(), }} > - <Show when={props.input.todos?.length}> + <Show when={todos().length}> <div data-component="todos"> - <For each={props.input.todos}> + <For each={todos()}> {(todo: Todo) => ( <Checkbox readOnly checked={todo.status === "completed"}> <div data-slot="message-part-todo-content" data-completed={todo.status === "completed"}> |
