import type { ModelMessage } from "ai"; import { ContextKey } from "#context/key.js"; import type { ResolvedToolDefinition } from "#runtime/types.js"; import type { JsonObject } from "#shared/json.js"; /** * Single item in the todo list. */ export interface TodoItem { readonly content: string; readonly priority: "high" | "medium" | "low"; readonly status: "pending" | "in_progress" | "completed" | "cancelled"; } /** * Durable state for the framework todo tool. */ export interface TodoState { readonly items: readonly TodoItem[]; } export declare const TodoStateKey: ContextKey; /** * Typed input accepted by {@link executeTodoTool}. * * When `todos` is provided, the list is replaced (full replacement write). * When `todos` is omitted, the current list is returned without modification. */ export interface TodoToolInput { readonly todos?: readonly TodoItem[]; } /** * Builds the message that re-injects the current todo list after the harness * compacts message history, so the agent keeps its task list across * compaction. Returns `undefined` when there is no list to preserve. */ export declare function getTodoCompactionMessage(): ModelMessage | undefined; /** * Executes the framework todo tool. * * - Read: omit `todos` → returns the current list. * - Write: provide `todos` → replaces the entire list, returns the new list. * * Both paths return the same formatted output so the model always sees * the full current state. */ export declare function executeTodoTool(input: TodoToolInput): unknown; export declare const TODO_OUTPUT_SCHEMA: JsonObject; export declare const TODO_TOOL_DEFINITION: ResolvedToolDefinition;