feat: add app status tracking to the backend (#17163)

This does ~95% of the backend work required to integrate the AI work.

Most left to integrate from the tasks branch is just frontend, which
will be a lot smaller I believe.

The real difference between this branch and that one is the abstraction
-- this now attaches statuses to apps, and returns the latest status
reported as part of a workspace.

This change enables us to have a similar UX to in the tasks branch, but
for agents other than Claude Code as well. Any app can report status
now.
This commit is contained in:
Kyle Carberry
2025-03-31 10:55:44 -04:00
committed by GitHub
parent 489641d0be
commit 8ea956fc11
35 changed files with 1668 additions and 69 deletions

View File

@ -0,0 +1,28 @@
CREATE TYPE workspace_app_status_state AS ENUM ('working', 'complete', 'failure');
-- Workspace app statuses allow agents to report statuses per-app in the UI.
CREATE TABLE workspace_app_statuses (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- The agent that the status is for.
agent_id UUID NOT NULL REFERENCES workspace_agents(id),
-- The slug of the app that the status is for. This will be used
-- to reference the app in the UI - with an icon.
app_id UUID NOT NULL REFERENCES workspace_apps(id),
-- workspace_id is the workspace that the status is for.
workspace_id UUID NOT NULL REFERENCES workspaces(id),
-- The status determines how the status is displayed in the UI.
state workspace_app_status_state NOT NULL,
-- Whether the status needs user attention.
needs_user_attention BOOLEAN NOT NULL,
-- The message is the main text that will be displayed in the UI.
message TEXT NOT NULL,
-- The URI of the resource that the status is for.
-- e.g. https://github.com/org/repo/pull/123
-- e.g. file:///path/to/file
uri TEXT,
-- Icon is an external URL to an icon that will be rendered in the UI.
icon TEXT
);
CREATE INDEX idx_workspace_app_statuses_workspace_id_created_at ON workspace_app_statuses(workspace_id, created_at DESC);