fix(app): more defensive todo access

This commit is contained in:
adamelmore
2026-01-09 06:01:46 -06:00
parent 559013e124
commit ec828619ca

View File

@@ -984,6 +984,22 @@ ToolRegistry.register({
ToolRegistry.register({ ToolRegistry.register({
name: "todowrite", name: "todowrite",
render(props) { 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 ( return (
<BasicTool <BasicTool
{...props} {...props}
@@ -991,14 +1007,12 @@ ToolRegistry.register({
icon="checklist" icon="checklist"
trigger={{ trigger={{
title: "To-dos", title: "To-dos",
subtitle: props.input.todos subtitle: subtitle(),
? `${props.input.todos.filter((t: Todo) => t.status === "completed").length}/${props.input.todos.length}`
: "",
}} }}
> >
<Show when={props.input.todos?.length}> <Show when={todos().length}>
<div data-component="todos"> <div data-component="todos">
<For each={props.input.todos}> <For each={todos()}>
{(todo: Todo) => ( {(todo: Todo) => (
<Checkbox readOnly checked={todo.status === "completed"}> <Checkbox readOnly checked={todo.status === "completed"}>
<div data-slot="message-part-todo-content" data-completed={todo.status === "completed"}> <div data-slot="message-part-todo-content" data-completed={todo.status === "completed"}>