mirror of
https://github.com/nexu-io/open-design.git
synced 2026-06-01 03:14:35 +07:00
fix opencode todowrite footer state (#1046)
This commit is contained in:
parent
6f74ac304d
commit
b020f1e39a
2 changed files with 41 additions and 1 deletions
|
|
@ -35,7 +35,7 @@ export function latestTodosFromEvents(events: AgentEvent[] | undefined): TodoIte
|
|||
if (!events) return [];
|
||||
for (let i = events.length - 1; i >= 0; i -= 1) {
|
||||
const event = events[i];
|
||||
if (event?.kind !== 'tool_use' || event.name !== 'TodoWrite') continue;
|
||||
if (event?.kind !== 'tool_use' || !isTodoWriteToolName(event.name)) continue;
|
||||
return parseTodoWriteInput(event.input);
|
||||
}
|
||||
return [];
|
||||
|
|
@ -44,3 +44,7 @@ export function latestTodosFromEvents(events: AgentEvent[] | undefined): TodoIte
|
|||
export function unfinishedTodosFromEvents(events: AgentEvent[] | undefined): TodoItem[] {
|
||||
return latestTodosFromEvents(events).filter((todo) => todo.status !== 'completed');
|
||||
}
|
||||
|
||||
function isTodoWriteToolName(name: string): boolean {
|
||||
return name === 'TodoWrite' || name === 'todowrite';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,42 @@ describe('todo event helpers', () => {
|
|||
]);
|
||||
});
|
||||
|
||||
it('recognizes lowercase OpenCode todowrite events', () => {
|
||||
const events: AgentEvent[] = [
|
||||
{
|
||||
kind: 'tool_use',
|
||||
id: 'todo-1',
|
||||
name: 'todowrite',
|
||||
input: {
|
||||
todos: [
|
||||
{ content: 'Self-check template', status: 'completed' },
|
||||
{ content: 'Emit single artifact', status: 'pending' },
|
||||
],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
expect(unfinishedTodosFromEvents(events)).toEqual([
|
||||
{ content: 'Emit single artifact', status: 'pending', activeForm: undefined },
|
||||
]);
|
||||
});
|
||||
|
||||
it('uses lowercase todowrite as the latest todo truth over older TodoWrite events', () => {
|
||||
const events: AgentEvent[] = [
|
||||
{ kind: 'tool_use', id: 'todo-1', name: 'TodoWrite', input: firstTodoInput },
|
||||
{
|
||||
kind: 'tool_use',
|
||||
id: 'todo-2',
|
||||
name: 'todowrite',
|
||||
input: { todos: [{ content: 'Emit single artifact', status: 'pending' }] },
|
||||
},
|
||||
];
|
||||
|
||||
expect(latestTodosFromEvents(events)).toEqual([
|
||||
{ content: 'Emit single artifact', status: 'pending', activeForm: undefined },
|
||||
]);
|
||||
});
|
||||
|
||||
it('treats an empty latest TodoWrite event as authoritative', () => {
|
||||
const events: AgentEvent[] = [
|
||||
{ kind: 'tool_use', id: 'todo-1', name: 'TodoWrite', input: firstTodoInput },
|
||||
|
|
|
|||
Loading…
Reference in a new issue