Skip to content

Database

Quick Reference

  • Engine: PostgreSQL
  • ORM: Drizzle ORM (drizzle-orm/pg-core)
  • Tables: 18
  • Migrations: 85 (incremental SQL)
  • Connection: DATABASE_URL environment variable
erDiagram
user ||--o{ account : "OAuth accounts"
user ||--o{ session : "auth sessions"
user ||--o{ creditLedger : "credit transactions"
user ||--o{ subscription : "billing"
user ||--o{ referral : "referrals (as referrer)"
user ||--o{ referral : "referrals (as referred)"
user ||--o{ message : "LLM calls"
user ||--o{ agentRun : "agent executions"
user ||--o{ adImpression : "ad views"
user ||--o{ encryptedApiKeys : "BYOK keys"
user ||--o{ orgMember : "org memberships"
user ||--o{ limitOverride : "rate limits"
org ||--o{ orgMember : "members"
org ||--o{ orgInvite : "invitations"
org ||--o{ orgRepo : "tracked repos"
org ||--o{ orgFeature : "feature flags"
org ||--o{ creditLedger : "org credits"
publisher ||--o{ agentConfig : "published agents"
agentRun ||--o{ agentStep : "execution steps"
fingerprint ||--o{ session : "device binding"

Core user account table.

ColumnTypeNullableDefaultDescription
idtextcrypto.randomUUID()Primary key
nametextDisplay name
emailtextUnique email address
passwordtextHashed password
emailVerifiedtimestampEmail verification date
imagetextAvatar URL
stripe_customer_idtextStripe customer reference
next_quota_resettimestampnow() + 1 monthNext credit reset date
created_attimestampnow()Account creation date
referral_codetextref-{uuid}Unique referral code
referral_limitinteger5Max referrals allowed
discord_idtextDiscord user ID
handletextUnique username handle
auto_topup_enabledbooleanfalseAuto credit top-up
bannedbooleanfalseAccount ban status
fallback_to_a_la_cartebooleanfalseBilling fallback

(packages/internal/src/db/schema.ts:66-91)

Tracks all credit transactions (grants, usage, refunds).

ColumnTypeNullableDefaultDescription
operation_idtextPrimary key (unique operation)
user_idtextFK → user.id
principalintegerCredits granted/deducted
balanceintegerRemaining balance
typegrant_typeGrant type enum
descriptiontextTransaction description
priorityintegerConsumption priority
expires_attimestampExpiration date
org_idtextFK → org.id (org credits)

(packages/internal/src/db/schema.ts:117-153)

Logs every agent execution with full hierarchy tracking.

ColumnTypeNullableDefaultDescription
idtextUUIDPrimary key
user_idtextFK → user.id
agent_idtextAgent identifier (e.g., publisher/agent@version)
publisher_idtextgeneratedExtracted from agent_id
agent_nametextgeneratedExtracted from agent_id
agent_versiontextgeneratedExtracted from agent_id
ancestor_run_idstext[]Full ancestor chain from root
root_run_idtextgeneratedFirst ancestor or self
parent_run_idtextgeneratedImmediate parent
depthintegergeneratedNesting depth
statusagent_run_statusrunningrunning/completed/failed/cancelled
total_creditsnumeric0Credits (self + descendants)
duration_msintegergeneratedExecution time

(packages/internal/src/db/schema.ts:625-736)

Logs every LLM API call with token tracking.

ColumnTypeNullableDefaultDescription
idtextPrimary key
modeltextLLM model used
requestjsonbFull request payload
responsejsonbFull response
input_tokensinteger0Input token count
output_tokensintegerOutput token count
costnumeric(100,20)Dollar cost
creditsintegerCredits consumed
byokbooleanfalseBring-your-own-key flag
user_idtextFK → user.id

(packages/internal/src/db/schema.ts:208-249)

Organization accounts for team billing.

ColumnTypeNullableDefaultDescription
idtextUUIDPrimary key
nametextOrganization name
slugtextUnique URL slug
owner_idtextFK → user.id
stripe_customer_idtextStripe customer
credit_limitintegerMonthly credit cap

(packages/internal/src/db/schema.ts:289-322)

Stripe subscription tracking.

ColumnTypeNullableDefaultDescription
stripe_subscription_idtextPrimary key
user_idtextFK → user.id
tierintegerSubscription tier
statussubscription_statusactiveSubscription state
cancel_at_period_endbooleanfalseCancellation flag

(packages/internal/src/db/schema.ts:464-500)

All Remaining Tables

OAuth provider accounts (NextAuth adapter). PK: (provider, providerAccountId).

Auth sessions with type classification (web/pat/cli). PK: sessionToken.

Email verification tokens. PK: (identifier, token).

User BYOK keys (encrypted). PK: (user_id, type). Types: anthropic, gemini, openai.

Organization membership with roles. PK: (org_id, user_id). Roles: owner/admin/member.

Organization invitations with token-based acceptance.

Tracked repositories per organization.

Feature flags per organization with JSON config.

Referral tracking with status progression (pending → completed).

Device fingerprinting for session binding.

Ad impression and click tracking with credit grants.

Per-user rate limit overrides.

Evaluation benchmark results storage.

Published agent definitions (Agent Store). Versioned with semver.

Agent Store publisher profiles. Owned by user OR org (enforced by check constraint).

Individual execution steps within agent runs.

EnumValuesUsed By
api_key_typeanthropic, gemini, openaiencryptedApiKeys
grant_type(from GrantTypeValues)creditLedger
session_typeweb, pat, clisession
agent_run_statusrunning, completed, failed, cancelledagentRun
agent_step_statusrunning, completed, skippedagentStep
subscription_statusincomplete, trialing, active, past_due, canceled, unpaid, pausedsubscription
org_roleowner, admin, memberorgMember, orgInvite
referral_status(from ReferralStatusValues)referral
TableIndexColumnsPurpose
creditLedgeridx_credit_ledger_active_balanceuser_id, balance, expires_at, priorityFast active credit lookup
messagemessage_finished_at_user_id_idxfinished_at, user_idUsage history queries
agentRunidx_agent_run_ancestors_ginancestor_run_ids (GIN)Hierarchy traversal
agentRunidx_agent_run_statusstatus (partial: running)Active run lookup
subscriptionidx_subscription_statusstatus (partial: active)Active subscription check
Migration History

The project uses 85 incremental SQL migrations managed by Drizzle Kit.

Migration files are located at packages/internal/src/db/migrations/.

Configuration: packages/internal/src/db/drizzle.config.ts