Files
learnharness/src/core/pending.ts
T

25 lines
779 B
TypeScript
Raw Normal View History

import { isToolUIPart, type UIMessage } from "ai";
/**
* The pending-question gate: an unanswered interaction tool part (quiz/ask)
* blocks the composer — one question at a time, mirroring the teacher's
* prompt contract. Derived client state; the server enforces nothing.
*/
export interface PendingToolCall {
toolCallId: string;
tool: string;
}
export function findPendingToolCall(messages: UIMessage[]): PendingToolCall | null {
for (let m = messages.length - 1; m >= 0; m--) {
const msg = messages[m]!;
for (let p = msg.parts.length - 1; p >= 0; p--) {
const part = msg.parts[p]!;
if (isToolUIPart(part) && part.state === "input-available") {
return { toolCallId: part.toolCallId, tool: part.type.slice("tool-".length) };
}
}
}
return null;
}