Add expose_port previews with a Preview tab; leave setup to AGENTS.md

This commit is contained in:
Ian Gulliver
2026-10-15 13:15:49 -07:00
parent 86e4e772ed
commit f95a0e5332
32 changed files with 1042 additions and 431 deletions
+52 -2
View File
@@ -475,6 +475,25 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/tasks/{taskId}/previews": {
parameters: {
query?: never;
header?: never;
path: {
taskId: string;
};
cookie?: never;
};
/** @description The ports the task's agent exposed with expose_port, by name. Each is served by tailscale serve on the same port number of byre's host, over HTTPS, until the task is merged or discarded. */
get: operations["listPreviews"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/tasks/{taskId}/snapshots": {
parameters: {
query?: never;
@@ -793,7 +812,7 @@ export interface components {
branch: string;
worktree_path: string;
base_ref: string;
/** @description The first of the task's block of ports (port_base to port_base+9), passed to its setup script and agent as PORT. */
/** @description The first of the task's block of ports (port_base to port_base+9), passed to its agent and terminal as PORT. */
port_base: number;
/** @enum {string} */
status: "active" | "merged" | "discarded";
@@ -933,6 +952,14 @@ export interface components {
/** Format: date-time */
created_at: string;
};
Preview: {
task_id: string;
name: string;
/** @description A port in the task's block, served at https://<byre's host>:<port>/. */
port: number;
/** Format: date-time */
created_at: string;
};
AgentSession: {
id: string;
/** @description Empty for a lead session. */
@@ -1076,7 +1103,7 @@ export interface components {
focused: boolean;
};
/** @enum {string} */
TaskTab: "transcript" | "changes" | "files" | "terminal" | "inbox" | "project";
TaskTab: "transcript" | "changes" | "files" | "terminal" | "preview" | "inbox" | "project";
TerminalSize: {
cols: number;
rows: number;
@@ -1951,6 +1978,29 @@ export interface operations {
409: components["responses"]["Error"];
};
};
listPreviews: {
parameters: {
query?: never;
header?: never;
path: {
taskId: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description The previews. */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Preview"][];
};
};
404: components["responses"]["Error"];
};
};
listSnapshots: {
parameters: {
query?: never;