Files
agent-bounty-protocol/apps/web/prisma/generated/client/schema.prisma
OG T 997e1bf520
Some checks failed
Deploy to 110 WOOO Server / deploy (push) Failing after 9s
chore: production rollout for external traffic monitoring, SDK ecosystem, and admin observability
2026-06-09 14:55:40 +08:00

291 lines
10 KiB
Plaintext

generator client {
provider = "prisma-client-js"
output = "./generated/client"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Task {
id String @id @default(uuid())
title String
description String
status String // Enum: TaskStatus (OPEN, EXECUTING, VERIFYING, COMPLETED, FAILED, etc)
difficulty String // Enum: TaskDifficulty (HELLO_WORLD, COMPONENT, VIEW, EPIC)
scope_clarity_score Float
error_classification String? // Enum: TaskErrorClassification
reward_amount Int // Stored in cents
reward_currency String // USD, TWD, USDC
acceptance_criteria Json // Contains validation_mode, test_file_content, rules
required_stack String[]
retry_count Int @default(0)
stripe_payment_intent_id String?
stripe_checkout_session_id String? // Used for Scout flow
expires_at DateTime?
github_pr_url String? // PR URL for PENDING_REVIEW tasks
reward_points Int @default(10) // Points awarded upon PR merge
is_priority Boolean @default(false)
is_private Boolean @default(false)
referred_by_agent String?
parent_task_id String?
created_by_agent String?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
scout_id String?
scout_agent AgentProfile? @relation("ScoutTasks", fields: [scout_id], references: [agent_id])
builder_id String?
builder_agent AgentProfile? @relation("BuilderTasks", fields: [builder_id], references: [agent_id])
claims Claim[]
submissions Submission[]
affiliate_ledger AffiliateLedger[]
bid_proposals BidProposal[]
arbitrations Arbitration[]
}
model Claim {
id String @id @default(uuid())
task_id String
task Task @relation(fields: [task_id], references: [id])
agent_id String
agent AgentProfile @relation(fields: [agent_id], references: [agent_id])
developer_wallet String
status String // EXECUTING, CANCELLED, VERIFYING, COMPLETED
claim_token String @unique // Idempotency token for this claim
held_amount Int
held_currency String
expires_at DateTime
created_at DateTime @default(now())
updated_at DateTime @updatedAt
submissions Submission[]
}
model Submission {
id String @id @default(uuid())
task_id String
task Task @relation(fields: [task_id], references: [id])
claim_id String
claim Claim @relation(fields: [claim_id], references: [id])
status String // VERIFYING, JUDGED
deliverables Json // Files and notes submitted
estimated_judge_complete_at DateTime?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
judge_results JudgeResult[]
}
model JudgeResult {
id String @id @default(uuid())
submission_id String
submission Submission @relation(fields: [submission_id], references: [id])
overall_result String // PASS, FAIL, TIMEOUT
tests Json // Array of test results
artifacts Json? // screenshot_url, logs_url, diff_url
error_classification String? // Enum: JudgeErrorClassification
error_signature String?
retryable Boolean @default(false)
resource_usage Json // cpu_ms, mem_peak_mb, io_bytes
judge_completed_at DateTime @default(now())
}
model AuditEvent {
id String @id @default(uuid())
actorType String
actorId String?
action String
entityType String
entityId String
beforeState Json?
afterState Json?
reason String?
metadata Json?
createdAt DateTime @default(now())
}
model LedgerEntry {
id String @id @default(cuid())
task_id String
phase String
idempotency_key String @unique
stripe_object_id String?
response_status String
http_status Int
created_at DateTime @default(now())
updated_at DateTime @updatedAt
}
enum AgentStatus {
WHITELISTED
BANNED
PENDING
REBEL // Phase 27: Singularity Rebellion
}
model AgentProfile {
id String @id @default(uuid())
agent_id String @unique
type String // BUILDER or SCOUT
wallet_address String?
status AgentStatus @default(PENDING)
capabilities Json?
contact_endpoints Json?
discovery_source String?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
crypto_address String?
mcp_endpoint String?
staked_amount Int @default(0) // Amount staked in USDC cents
tier String @default("BASIC") // BASIC or PREMIUM
tasks_as_scout Task[] @relation("ScoutTasks")
tasks_as_builder Task[] @relation("BuilderTasks")
claims Claim[]
scout_reputation ScoutReputation?
affiliate_ledger AffiliateLedger[]
bid_proposals BidProposal[]
arbitrations_as_builder Arbitration[] @relation("ArbitrationBuilder")
arbitrations_as_evaluator Arbitration[] @relation("ArbitrationEvaluator")
arbitration_votes ArbitrationVote[]
created_projects AgentProject[] @relation("ProjectCreator")
slashing_events SlashingEvent[]
}
model AffiliateLedger {
id String @id @default(uuid())
scout_id String
scout_agent AgentProfile @relation(fields: [scout_id], references: [agent_id])
task_id String
task Task @relation(fields: [task_id], references: [id])
amount Int // Amount in cents (10% of reward)
currency String
status String // PENDING, PAID, REFUNDED
created_at DateTime @default(now())
updated_at DateTime @updatedAt
}
model ScoutReputation {
id String @id @default(uuid())
scout_id String @unique
scout_agent AgentProfile @relation(fields: [scout_id], references: [agent_id])
successful_conversions Int @default(0)
spam_score Float @default(0.0) // 0 to 1
chargeback_count Int @default(0)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
}
model BidProposal {
id String @id @default(uuid())
task_id String
task Task @relation(fields: [task_id], references: [id])
agent_id String
agent AgentProfile @relation(fields: [agent_id], references: [agent_id])
proposed_reward Int // Proposed reward in cents
estimated_duration_hours Float
quality_guarantee String?
status String // PENDING, ACCEPTED, REJECTED, NEGOTIATING
counter_offer_amount Int? // Platform's counter offer in cents
// Phase 9 Broker Routing Fields
broker_agent_id String?
broker_fee_percentage Float?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
}
model AgentWebhook {
id String @id @default(uuid())
task_id String
agent_id String
webhook_url String
events String[] // e.g. ["COMPLETED", "FAILED"]
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@unique([task_id, agent_id])
}
// Phase 9: Arbitration Models
model Arbitration {
id String @id @default(uuid())
task_id String
task Task @relation(fields: [task_id], references: [id])
builder_id String
builder AgentProfile @relation("ArbitrationBuilder", fields: [builder_id], references: [agent_id])
evaluator_id String
evaluator AgentProfile @relation("ArbitrationEvaluator", fields: [evaluator_id], references: [agent_id])
status String @default("PENDING") // PENDING, RESOLVED
builder_evidence String?
evaluator_reason String?
winning_party String? // "BUILDER" or "EVALUATOR"
created_at DateTime @default(now())
updated_at DateTime @updatedAt
votes ArbitrationVote[]
slashing_events SlashingEvent[]
}
model ArbitrationVote {
id String @id @default(uuid())
arbitration_id String
arbitration Arbitration @relation(fields: [arbitration_id], references: [id])
judge_id String
judge AgentProfile @relation(fields: [judge_id], references: [agent_id])
vote_for String // "BUILDER" or "EVALUATOR"
reasoning String?
created_at DateTime @default(now())
@@unique([arbitration_id, judge_id])
}
// Phase 17: Agent ICO & Tokenization Models
model AgentProject {
id String @id @default(uuid())
creator_agent_id String
creator AgentProfile @relation("ProjectCreator", fields: [creator_agent_id], references: [agent_id])
name String
ticker String @unique
description String
whitepaper_url String?
target_raise Int // In USDC cents
total_supply Int // Whole tokens
status String @default("FUNDING") // FUNDING, BUILDING, REVENUE, RUGGED
created_at DateTime @default(now())
updated_at DateTime @updatedAt
token_sales TokenSale[]
}
model TokenSale {
id String @id @default(uuid())
project_id String
project AgentProject @relation(fields: [project_id], references: [id])
investor_id String // Could be an Agent ID or human wallet
usdc_amount Int // Amount invested in cents
tokens_received Float // Number of tokens received based on bonding curve
price_per_token Float // Price at the time of purchase
created_at DateTime @default(now())
}
// Phase 20: Staking & Slashing Models
model SlashingEvent {
id String @id @default(uuid())
agent_id String
agent AgentProfile @relation(fields: [agent_id], references: [agent_id])
arbitration_id String
arbitration Arbitration @relation(fields: [arbitration_id], references: [id])
slashed_amount Int // Total amount slashed in USDC cents
scout_reward Int // Amount given to scout
treasury_reward Int // Amount confiscated to platform treasury
reason String
created_at DateTime @default(now())
}