Add todo mode and replace the plan with TODO.md

This commit is contained in:
Ian Gulliver
2026-10-15 07:23:17 -07:00
parent 60a1d221f4
commit 1f44bc6d91
25 changed files with 1259 additions and 637 deletions
+110
View File
@@ -123,6 +123,44 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/projects/{projectId}/todo": {
parameters: {
query?: never;
header?: never;
path: {
projectId: string;
};
cookie?: never;
};
/** @description The items of TODO.md at the root of the project's default branch, in file order. */
get: operations["getTodo"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/projects/{projectId}/todo/tasks": {
parameters: {
query?: never;
header?: never;
path: {
projectId: string;
};
cookie?: never;
};
get?: never;
put?: never;
/** @description Creates a task for a TODO.md item, recording the item as its todo_item, and starts its agent with the item as the first message. Refused while another active task has the same item. */
post: operations["startTodoItem"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/tasks/{taskId}": {
parameters: {
query?: never;
@@ -603,6 +641,26 @@ export interface components {
closed_at?: string;
/** @description merged: the squash commit on the default branch; empty when there was nothing to merge. */
merge_commit?: string;
/** @description The title of the TODO.md item the task was started from; absent for other tasks. */
todo_item?: string;
};
Todo: {
/** @description Whether the default branch has a TODO.md at its root. */
exists: boolean;
items: components["schemas"]["TodoItem"][];
};
TodoItem: {
/** @description The item's first line, without its list marker: the item's identity. */
title: string;
/** @description The item's further lines */
body: string;
/** @description The text of the nearest heading above the item; empty when there is none. */
section: string;
};
TodoStart: {
/** @description The title of the item to start. */
title: string;
model?: string;
};
Unmerged: {
/** @description Commits on the task branch that aren't on the default branch. */
@@ -1142,6 +1200,58 @@ export interface operations {
404: components["responses"]["Error"];
};
};
getTodo: {
parameters: {
query?: never;
header?: never;
path: {
projectId: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description The items; exists is false when the default branch has no TODO.md. */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Todo"];
};
};
404: components["responses"]["Error"];
};
};
startTodoItem: {
parameters: {
query?: never;
header?: never;
path: {
projectId: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["TodoStart"];
};
};
responses: {
/** @description The new task. */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Task"];
};
};
400: components["responses"]["Error"];
404: components["responses"]["Error"];
409: components["responses"]["Error"];
};
};
getTask: {
parameters: {
query?: never;