feat(proxy): add agent/session/run Prisma models

Add 4 new tables for the agent_session_endpoints module (Cursor SDK on LiteLLM):

- LiteLLM_Agent: agent definition (model, system prompt, default repos)
- LiteLLM_AgentSession: VM-backed conversation owned by an agent
- LiteLLM_AgentRun: single turn within a session
- LiteLLM_AgentRunEvent: append-only event log for resumable SSE

Includes cascade deletes, idempotency unique constraints, and indexes
for the cleanup sweeper and ownership lookups.
This commit is contained in:
Ishaan Jaffer 2026-05-06 14:52:01 -07:00
parent 487479eff7
commit 725a9c7311
No known key found for this signature in database

View file

@ -1374,3 +1374,97 @@ model LiteLLM_WorkflowMessage {
@@unique([run_id, sequence_number])
@@index([run_id])
}
// ===========================================================================
// Agent Sessions / Runs (Cursor SDK on LiteLLM)
//
// Three-level hierarchy:
// Agent — definition (model, system prompt, default repos, tools)
// Session — VM-backed conversation, owned by an Agent
// Run — single turn within a Session
// RunEvent — append-only event log per run (for resumable SSE)
// ===========================================================================
model LiteLLM_Agent {
id String @id // "agent_<uuid>"
name String
user_api_key_hash String
team_id String?
model String
system_prompt String?
default_repos Json?
default_env_vars Json?
tools_config Json?
metadata Json?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
sessions LiteLLM_AgentSession[]
@@index([user_api_key_hash])
@@index([team_id])
}
model LiteLLM_AgentSession {
id String @id // "sess_<uuid>"
agent_id String
user_api_key_hash String
team_id String?
vm_id String?
vm_provider String?
repos Json
env_vars Json?
status String @default("provisioning")
daemon_token_hash String?
expires_at DateTime
last_heartbeat_at DateTime?
idempotency_key String?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
terminated_at DateTime?
agent LiteLLM_Agent @relation(fields: [agent_id], references: [id], onDelete: Cascade)
runs LiteLLM_AgentRun[]
@@unique([user_api_key_hash, idempotency_key])
@@index([agent_id])
@@index([status, expires_at])
@@index([user_api_key_hash])
}
model LiteLLM_AgentRun {
id String @id // "run_<uuid>"
session_id String
parent_run_id String?
status String @default("queued")
prompt Json
result String?
git_branches Json?
idempotency_key String?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
started_at DateTime?
terminated_at DateTime?
session LiteLLM_AgentSession @relation(fields: [session_id], references: [id], onDelete: Cascade)
events LiteLLM_AgentRunEvent[]
@@unique([session_id, idempotency_key])
@@index([session_id, status])
@@index([session_id, created_at])
}
model LiteLLM_AgentRunEvent {
id String @id @default(uuid())
run_id String
seq Int
event_type String
payload Json
created_at DateTime @default(now())
run LiteLLM_AgentRun @relation(fields: [run_id], references: [id], onDelete: Cascade)
@@unique([run_id, seq])
@@index([run_id, seq])
}