Review every new snapshot with an agent from the other vendor

This commit is contained in:
Ian Gulliver
2026-10-15 16:33:17 -07:00
parent a539ddab43
commit e9039cceb4
39 changed files with 1737 additions and 218 deletions
+70 -3
View File
@@ -513,6 +513,25 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/tasks/{taskId}/reviews": {
parameters: {
query?: never;
header?: never;
path: {
taskId: string;
};
cookie?: never;
};
/** @description The task's reviews, one per snapshot, oldest first. */
get: operations["listReviews"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/tasks/{taskId}/snapshots/{n}/fork": {
parameters: {
query?: never;
@@ -962,6 +981,26 @@ export interface components {
/** Format: date-time */
created_at: string;
};
/** @description An agent session on the vendor the task's agent doesn't use, reviewing one snapshot's change. */
Review: {
id: string;
task_id: string;
snapshot_n: number;
/** @description The reviewer's session. */
agent_session_id: string;
vendor: string;
model: string;
/** @enum {string} */
state: "running" | "done" | "failed";
/** @description done: the reviewer's submit_review arguments: summary (Markdown) and findings, each with severity, category, title, detail, path and line. */
result?: Record<string, never>;
/** @description failed: why. */
error: string;
/** Format: date-time */
created_at: string;
/** Format: date-time */
finished_at?: string;
};
AgentSession: {
id: string;
/** @description Empty for a lead session. */
@@ -979,8 +1018,11 @@ export interface components {
vendor_session_id: string;
/** @enum {string} */
state: "idle" | "running" | "completed";
/** @enum {string} */
role: "implementer" | "lead";
/**
* @description reviewer: a review's session (see Review); a task's sessions list leaves these out.
* @enum {string}
*/
role: "implementer" | "lead" | "reviewer";
created_by: string;
/** Format: date-time */
created_at: string;
@@ -1044,6 +1086,8 @@ export interface components {
/** @description question: context (Markdown with the choices inline as `- ( ) text` / `- (*) text` pick-one or `- [ ] text` / `- [x] text` pick-any list items), question, why_blocked, options (each choice's text, in order), multiple (true for pick-any), recommended (the marked choices' text), attachments. report: text (the final message of a turn that ended normally). session_error: error. rate_limited: vendor, rate_limit (the vendor's rate-limit status), error. */
payload: Record<string, never>;
state: components["schemas"]["InboxState"];
/** @description question: the review of the first snapshot the task took after the question was asked (the snapshot at the end of the turn that asked it), once that snapshot exists; empty for other items. */
reviews: components["schemas"]["Review"][];
/** Format: date-time */
created_at: string;
resolved_by?: string;
@@ -1106,7 +1150,7 @@ export interface components {
focused: boolean;
};
/** @enum {string} */
TaskTab: "transcript" | "changes" | "files" | "terminal" | "preview" | "inbox" | "project";
TaskTab: "transcript" | "changes" | "files" | "terminal" | "preview" | "inbox" | "reviews" | "project";
TerminalSize: {
cols: number;
rows: number;
@@ -2016,6 +2060,29 @@ export interface operations {
404: components["responses"]["Error"];
};
};
listReviews: {
parameters: {
query?: never;
header?: never;
path: {
taskId: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description The reviews. */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Review"][];
};
};
404: components["responses"]["Error"];
};
};
forkSnapshot: {
parameters: {
query?: never;