| create table if not exists studio_sessions ( |
| id text primary key, |
| project_id text not null, |
| workspace_id text, |
| parent_session_id text references studio_sessions(id) on delete set null, |
| agent_type text not null, |
| title text not null, |
| directory text not null, |
| permission_level text not null, |
| permission_rules jsonb not null default '[]'::jsonb, |
| created_at timestamptz not null default now(), |
| updated_at timestamptz not null default now() |
| ); |
|
|
| create table if not exists studio_messages ( |
| id text primary key, |
| session_id text not null references studio_sessions(id) on delete cascade, |
| role text not null, |
| agent text, |
| text text, |
| summary text, |
| created_at timestamptz not null default now(), |
| updated_at timestamptz not null default now() |
| ); |
|
|
| create table if not exists studio_message_parts ( |
| id text primary key, |
| message_id text not null references studio_messages(id) on delete cascade, |
| session_id text not null references studio_sessions(id) on delete cascade, |
| type text not null, |
| text text, |
| tool text, |
| call_id text, |
| state jsonb, |
| metadata jsonb, |
| time jsonb, |
| created_at timestamptz not null default now(), |
| updated_at timestamptz not null default now() |
| ); |
|
|
| create table if not exists studio_runs ( |
| id text primary key, |
| session_id text not null references studio_sessions(id) on delete cascade, |
| status text not null, |
| input_text text not null, |
| active_agent text not null, |
| created_at timestamptz not null default now(), |
| completed_at timestamptz, |
| error text |
| ); |
|
|
| create table if not exists studio_tasks ( |
| id text primary key, |
| session_id text not null references studio_sessions(id) on delete cascade, |
| run_id text references studio_runs(id) on delete set null, |
| work_id text, |
| type text not null, |
| status text not null, |
| title text not null, |
| detail text, |
| metadata jsonb, |
| created_at timestamptz not null default now(), |
| updated_at timestamptz not null default now() |
| ); |
|
|
| create table if not exists studio_works ( |
| id text primary key, |
| session_id text not null references studio_sessions(id) on delete cascade, |
| run_id text references studio_runs(id) on delete set null, |
| type text not null, |
| title text not null, |
| status text not null, |
| latest_task_id text, |
| current_result_id text, |
| metadata jsonb, |
| created_at timestamptz not null default now(), |
| updated_at timestamptz not null default now() |
| ); |
|
|
| create table if not exists studio_work_results ( |
| id text primary key, |
| work_id text not null references studio_works(id) on delete cascade, |
| kind text not null, |
| summary text not null, |
| attachments jsonb, |
| metadata jsonb, |
| created_at timestamptz not null default now() |
| ); |
|
|
| create index if not exists idx_studio_messages_session_created |
| on studio_messages(session_id, created_at); |
|
|
| create index if not exists idx_studio_message_parts_message_created |
| on studio_message_parts(message_id, created_at); |
|
|
| create index if not exists idx_studio_runs_session_created |
| on studio_runs(session_id, created_at desc); |
|
|
| create index if not exists idx_studio_tasks_session_updated |
| on studio_tasks(session_id, updated_at desc); |
|
|
| create index if not exists idx_studio_works_session_updated |
| on studio_works(session_id, updated_at desc); |
|
|
| create index if not exists idx_studio_work_results_work_created |
| on studio_work_results(work_id, created_at);
|
|
|