Преглед на файлове

Move evals into pnpm workspace, switch from SQLite to Postgres (#4278)

Chris Estreich преди 6 месеца
родител
ревизия
d87f890556
променени са 100 файла, в които са добавени 113 реда и са изтрити 2035 реда
  1. 0 0
      apps/web-docs/.gitkeep
  2. 1 0
      apps/web-docs/README.md
  3. 1 0
      apps/web-evals/.env
  4. 8 0
      apps/web-evals/.gitignore
  5. 0 0
      apps/web-evals/components.json
  6. 1 1
      apps/web-evals/eslint.config.mjs
  7. 5 0
      apps/web-evals/next-env.d.ts
  8. 0 0
      apps/web-evals/next.config.ts
  9. 15 15
      apps/web-evals/package.json
  10. 0 0
      apps/web-evals/postcss.config.mjs
  11. 0 0
      apps/web-evals/public/.gitkeep
  12. 3 3
      apps/web-evals/src/app/api/runs/[id]/stream/route.ts
  13. 1 1
      apps/web-evals/src/app/api/runs/route.ts
  14. 1 1
      apps/web-evals/src/app/api/tasks/route.ts
  15. 0 0
      apps/web-evals/src/app/favicon.ico
  16. 0 0
      apps/web-evals/src/app/globals.css
  17. 1 1
      apps/web-evals/src/app/home.tsx
  18. 0 0
      apps/web-evals/src/app/layout.tsx
  19. 1 1
      apps/web-evals/src/app/page.tsx
  20. 0 0
      apps/web-evals/src/app/runs/[id]/connection-status.tsx
  21. 1 1
      apps/web-evals/src/app/runs/[id]/page.tsx
  22. 3 3
      apps/web-evals/src/app/runs/[id]/run.tsx
  23. 1 1
      apps/web-evals/src/app/runs/[id]/task-status.tsx
  24. 1 1
      apps/web-evals/src/app/runs/new/defaults.ts
  25. 2 1
      apps/web-evals/src/app/runs/new/new-run.tsx
  26. 0 0
      apps/web-evals/src/app/runs/new/page.tsx
  27. 3 1
      apps/web-evals/src/app/runs/new/settings-diff.tsx
  28. 0 0
      apps/web-evals/src/components/layout/header.tsx
  29. 0 0
      apps/web-evals/src/components/layout/logo.tsx
  30. 0 0
      apps/web-evals/src/components/providers/index.ts
  31. 0 0
      apps/web-evals/src/components/providers/react-query-provider.tsx
  32. 0 0
      apps/web-evals/src/components/providers/theme-provider.tsx
  33. 0 0
      apps/web-evals/src/components/ui/alert-dialog.tsx
  34. 0 0
      apps/web-evals/src/components/ui/badge.tsx
  35. 0 0
      apps/web-evals/src/components/ui/button.tsx
  36. 0 0
      apps/web-evals/src/components/ui/command.tsx
  37. 0 0
      apps/web-evals/src/components/ui/dialog.tsx
  38. 0 0
      apps/web-evals/src/components/ui/drawer.tsx
  39. 0 0
      apps/web-evals/src/components/ui/dropdown-menu.tsx
  40. 0 0
      apps/web-evals/src/components/ui/form.tsx
  41. 0 0
      apps/web-evals/src/components/ui/index.ts
  42. 0 0
      apps/web-evals/src/components/ui/input.tsx
  43. 0 0
      apps/web-evals/src/components/ui/label.tsx
  44. 0 0
      apps/web-evals/src/components/ui/multi-select.tsx
  45. 0 0
      apps/web-evals/src/components/ui/popover.tsx
  46. 1 1
      apps/web-evals/src/components/ui/scroll-area.tsx
  47. 0 0
      apps/web-evals/src/components/ui/select.tsx
  48. 0 0
      apps/web-evals/src/components/ui/separator.tsx
  49. 0 0
      apps/web-evals/src/components/ui/slider.tsx
  50. 0 0
      apps/web-evals/src/components/ui/sonner.tsx
  51. 0 0
      apps/web-evals/src/components/ui/table.tsx
  52. 0 0
      apps/web-evals/src/components/ui/tabs.tsx
  53. 0 0
      apps/web-evals/src/components/ui/textarea.tsx
  54. 0 0
      apps/web-evals/src/components/ui/tooltip.tsx
  55. 0 0
      apps/web-evals/src/hooks/use-event-source.ts
  56. 1 1
      apps/web-evals/src/hooks/use-exercises.ts
  57. 32 0
      apps/web-evals/src/hooks/use-open-router-models.ts
  58. 0 0
      apps/web-evals/src/hooks/use-process-tree.ts
  59. 4 4
      apps/web-evals/src/hooks/use-run-status.ts
  60. 0 0
      apps/web-evals/src/lib/formatters.ts
  61. 1 1
      apps/web-evals/src/lib/schemas.ts
  62. 2 2
      apps/web-evals/src/lib/server/exercises.ts
  63. 0 0
      apps/web-evals/src/lib/server/processes.ts
  64. 19 16
      apps/web-evals/src/lib/server/runs.ts
  65. 0 0
      apps/web-evals/src/lib/server/sse-stream.ts
  66. 2 2
      apps/web-evals/src/lib/server/tasks.ts
  67. 0 0
      apps/web-evals/src/lib/utils.ts
  68. 1 1
      apps/web-evals/tsconfig.json
  69. 0 0
      apps/web-roo-code/.gitkeep
  70. 1 0
      apps/web-roo-code/README.md
  71. 0 1
      evals/.env.sample
  72. 0 42
      evals/.gitignore
  73. 0 2
      evals/.npmrc
  74. 0 4
      evals/.tool-versions
  75. 0 27
      evals/apps/cli/package.json
  76. 0 31
      evals/apps/cli/src/exercises.ts
  77. 0 7
      evals/apps/cli/src/paths.ts
  78. 0 5
      evals/apps/cli/tsconfig.json
  79. 0 75
      evals/apps/web/src/hooks/use-open-router-models.ts
  80. 0 32
      evals/config/eslint/base.js
  81. 0 50
      evals/config/eslint/next.js
  82. 0 21
      evals/config/eslint/package.json
  83. 0 19
      evals/config/typescript/base.json
  84. 0 14
      evals/config/typescript/cjs.json
  85. 0 12
      evals/config/typescript/nextjs.json
  86. 0 7
      evals/config/typescript/package.json
  87. 0 33
      evals/package.json
  88. 0 1
      evals/packages/db/.gitignore
  89. 0 15
      evals/packages/db/README.md
  90. 0 18
      evals/packages/db/drizzle.config.ts
  91. 0 40
      evals/packages/db/drizzle/0000_elite_raza.sql
  92. 0 1
      evals/packages/db/drizzle/0001_lush_reavers.sql
  93. 0 1
      evals/packages/db/drizzle/0002_white_flatman.sql
  94. 0 1
      evals/packages/db/drizzle/0003_sweet_chimera.sql
  95. 0 10
      evals/packages/db/drizzle/0004_absent_slapstick.sql
  96. 0 274
      evals/packages/db/drizzle/meta/0000_snapshot.json
  97. 0 281
      evals/packages/db/drizzle/meta/0001_snapshot.json
  98. 0 289
      evals/packages/db/drizzle/meta/0002_snapshot.json
  99. 0 296
      evals/packages/db/drizzle/meta/0003_snapshot.json
  100. 0 367
      evals/packages/db/drizzle/meta/0004_snapshot.json

+ 0 - 0
evals/apps/web/public/.gitkeep → apps/web-docs/.gitkeep


+ 1 - 0
apps/web-docs/README.md

@@ -0,0 +1 @@
+TODO

+ 1 - 0
apps/web-evals/.env

@@ -0,0 +1 @@
+DATABASE_URL=postgres://postgres:password@localhost:5432/evals_development

+ 8 - 0
apps/web-evals/.gitignore

@@ -0,0 +1,8 @@
+# .env
+!.env
+
+# next.js
+.next
+
+# typescript
+tsconfig.tsbuildinfo

+ 0 - 0
evals/apps/web/components.json → apps/web-evals/components.json


+ 1 - 1
evals/apps/web/eslint.config.mjs → apps/web-evals/eslint.config.mjs

@@ -1,4 +1,4 @@
-import { nextJsConfig } from "@evals/eslint-config/next-js"
+import { nextJsConfig } from "@roo-code/config-eslint/next-js"
 
 
 /** @type {import("eslint").Linter.Config} */
 /** @type {import("eslint").Linter.Config} */
 export default [
 export default [

+ 5 - 0
apps/web-evals/next-env.d.ts

@@ -0,0 +1,5 @@
+/// <reference types="next" />
+/// <reference types="next/image-types/global" />
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

+ 0 - 0
evals/apps/web/next.config.ts → apps/web-evals/next.config.ts


+ 15 - 15
evals/apps/web/package.json → apps/web-evals/package.json

@@ -1,18 +1,15 @@
 {
 {
-	"name": "@evals/web",
+	"name": "@roo-code/web-evals",
 	"private": true,
 	"private": true,
 	"scripts": {
 	"scripts": {
 		"lint": "next lint",
 		"lint": "next lint",
 		"check-types": "tsc -b",
 		"check-types": "tsc -b",
-		"dev": "dotenvx run -f ../../.env -- next dev --turbopack",
+		"dev": "next dev --turbopack",
 		"format": "prettier --write src",
 		"format": "prettier --write src",
 		"build": "next build",
 		"build": "next build",
 		"start": "next start"
 		"start": "next start"
 	},
 	},
 	"dependencies": {
 	"dependencies": {
-		"@evals/db": "workspace:^",
-		"@evals/ipc": "workspace:^",
-		"@evals/types": "workspace:^",
 		"@hookform/resolvers": "^4.1.3",
 		"@hookform/resolvers": "^4.1.3",
 		"@radix-ui/react-alert-dialog": "^1.1.7",
 		"@radix-ui/react-alert-dialog": "^1.1.7",
 		"@radix-ui/react-dialog": "^1.1.6",
 		"@radix-ui/react-dialog": "^1.1.6",
@@ -26,33 +23,36 @@
 		"@radix-ui/react-slot": "^1.1.2",
 		"@radix-ui/react-slot": "^1.1.2",
 		"@radix-ui/react-tabs": "^1.1.3",
 		"@radix-ui/react-tabs": "^1.1.3",
 		"@radix-ui/react-tooltip": "^1.1.8",
 		"@radix-ui/react-tooltip": "^1.1.8",
+		"@roo-code/evals": "workspace:^",
+		"@roo-code/ipc": "workspace:^",
+		"@roo-code/types": "workspace:^",
 		"@tanstack/react-query": "^5.69.0",
 		"@tanstack/react-query": "^5.69.0",
 		"class-variance-authority": "^0.7.1",
 		"class-variance-authority": "^0.7.1",
 		"clsx": "^2.1.1",
 		"clsx": "^2.1.1",
 		"cmdk": "^1.1.0",
 		"cmdk": "^1.1.0",
 		"fuzzysort": "^3.1.0",
 		"fuzzysort": "^3.1.0",
 		"lucide-react": "^0.511.0",
 		"lucide-react": "^0.511.0",
-		"next": "15.3.3",
+		"next": "^15.2.5",
 		"next-themes": "^0.4.6",
 		"next-themes": "^0.4.6",
 		"p-map": "^7.0.3",
 		"p-map": "^7.0.3",
 		"ps-tree": "^1.2.0",
 		"ps-tree": "^1.2.0",
-		"react": "^19.0.0",
-		"react-dom": "^19.0.0",
-		"react-hook-form": "^7.54.2",
+		"react": "^18.3.1",
+		"react-dom": "^18.3.1",
+		"react-hook-form": "^7.57.0",
 		"react-use": "^17.6.0",
 		"react-use": "^17.6.0",
-		"sonner": "^2.0.2",
-		"tailwind-merge": "^3.0.2",
+		"sonner": "^2.0.5",
+		"tailwind-merge": "^3.3.0",
 		"tailwindcss-animate": "^1.0.7",
 		"tailwindcss-animate": "^1.0.7",
 		"vaul": "^1.1.2",
 		"vaul": "^1.1.2",
 		"zod": "^3.24.2"
 		"zod": "^3.24.2"
 	},
 	},
 	"devDependencies": {
 	"devDependencies": {
-		"@evals/eslint-config": "workspace:^",
-		"@evals/typescript-config": "workspace:^",
+		"@roo-code/config-eslint": "workspace:^",
+		"@roo-code/config-typescript": "workspace:^",
 		"@tailwindcss/postcss": "^4",
 		"@tailwindcss/postcss": "^4",
 		"@types/ps-tree": "^1.1.6",
 		"@types/ps-tree": "^1.1.6",
-		"@types/react": "^19",
-		"@types/react-dom": "^19",
+		"@types/react": "^18.3.18",
+		"@types/react-dom": "^18.3.5",
 		"tailwindcss": "^4"
 		"tailwindcss": "^4"
 	}
 	}
 }
 }

+ 0 - 0
evals/apps/web/postcss.config.mjs → apps/web-evals/postcss.config.mjs


+ 0 - 0
apps/web-evals/public/.gitkeep


+ 3 - 3
evals/apps/web/src/app/api/runs/[id]/stream/route.ts → apps/web-evals/src/app/api/runs/[id]/stream/route.ts

@@ -1,8 +1,8 @@
 import type { NextRequest } from "next/server"
 import type { NextRequest } from "next/server"
 
 
-import { findRun } from "@evals/db"
-import { IpcMessageType } from "@evals/types"
-import { IpcClient } from "@evals/ipc"
+import { findRun } from "@roo-code/evals"
+import { IpcClient } from "@roo-code/ipc"
+import { IpcMessageType } from "@roo-code/types"
 
 
 import { SSEStream } from "@/lib/server/sse-stream"
 import { SSEStream } from "@/lib/server/sse-stream"
 
 

+ 1 - 1
evals/apps/web/src/app/api/runs/route.ts → apps/web-evals/src/app/api/runs/route.ts

@@ -1,6 +1,6 @@
 import { NextResponse } from "next/server"
 import { NextResponse } from "next/server"
 
 
-import { createRun } from "@evals/db"
+import { createRun } from "@roo-code/evals"
 
 
 export async function POST(request: Request) {
 export async function POST(request: Request) {
 	try {
 	try {

+ 1 - 1
evals/apps/web/src/app/api/tasks/route.ts → apps/web-evals/src/app/api/tasks/route.ts

@@ -1,6 +1,6 @@
 import { NextResponse } from "next/server"
 import { NextResponse } from "next/server"
 
 
-import { createTask } from "@evals/db"
+import { createTask } from "@roo-code/evals"
 
 
 export async function POST(request: Request) {
 export async function POST(request: Request) {
 	try {
 	try {

+ 0 - 0
evals/apps/web/src/app/favicon.ico → apps/web-evals/src/app/favicon.ico


+ 0 - 0
evals/apps/web/src/app/globals.css → apps/web-evals/src/app/globals.css


+ 1 - 1
evals/apps/web/src/app/home.tsx → apps/web-evals/src/app/home.tsx

@@ -5,7 +5,7 @@ import { useRouter } from "next/navigation"
 import Link from "next/link"
 import Link from "next/link"
 import { Ellipsis, Rocket } from "lucide-react"
 import { Ellipsis, Rocket } from "lucide-react"
 
 
-import type { Run, TaskMetrics } from "@evals/db"
+import type { Run, TaskMetrics } from "@roo-code/evals"
 
 
 import { deleteRun } from "@/lib/server/runs"
 import { deleteRun } from "@/lib/server/runs"
 import { formatCurrency, formatDuration, formatTokens, formatToolUsageSuccessRate } from "@/lib/formatters"
 import { formatCurrency, formatDuration, formatTokens, formatToolUsageSuccessRate } from "@/lib/formatters"

+ 0 - 0
evals/apps/web/src/app/layout.tsx → apps/web-evals/src/app/layout.tsx


+ 1 - 1
evals/apps/web/src/app/page.tsx → apps/web-evals/src/app/page.tsx

@@ -1,4 +1,4 @@
-import { getRuns } from "@evals/db"
+import { getRuns } from "@roo-code/evals"
 
 
 import { Home } from "./home"
 import { Home } from "./home"
 
 

+ 0 - 0
evals/apps/web/src/app/runs/[id]/connection-status.tsx → apps/web-evals/src/app/runs/[id]/connection-status.tsx


+ 1 - 1
evals/apps/web/src/app/runs/[id]/page.tsx → apps/web-evals/src/app/runs/[id]/page.tsx

@@ -1,4 +1,4 @@
-import { findRun } from "@evals/db"
+import { findRun } from "@roo-code/evals"
 
 
 import { Run } from "./run"
 import { Run } from "./run"
 
 

+ 3 - 3
evals/apps/web/src/app/runs/[id]/run.tsx → apps/web-evals/src/app/runs/[id]/run.tsx

@@ -3,7 +3,7 @@
 import { useMemo } from "react"
 import { useMemo } from "react"
 import { LoaderCircle } from "lucide-react"
 import { LoaderCircle } from "lucide-react"
 
 
-import * as db from "@evals/db"
+import type { Run, TaskMetrics as _TaskMetrics } from "@roo-code/evals"
 
 
 import { formatCurrency, formatDuration, formatTokens } from "@/lib/formatters"
 import { formatCurrency, formatDuration, formatTokens } from "@/lib/formatters"
 import { useRunStatus } from "@/hooks/use-run-status"
 import { useRunStatus } from "@/hooks/use-run-status"
@@ -12,9 +12,9 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@
 import { TaskStatus } from "./task-status"
 import { TaskStatus } from "./task-status"
 import { ConnectionStatus } from "./connection-status"
 import { ConnectionStatus } from "./connection-status"
 
 
-type TaskMetrics = Pick<db.TaskMetrics, "tokensIn" | "tokensOut" | "tokensContext" | "duration" | "cost">
+type TaskMetrics = Pick<_TaskMetrics, "tokensIn" | "tokensOut" | "tokensContext" | "duration" | "cost">
 
 
-export function Run({ run }: { run: db.Run }) {
+export function Run({ run }: { run: Run }) {
 	const { tasks, status, tokenUsage, usageUpdatedAt } = useRunStatus(run)
 	const { tasks, status, tokenUsage, usageUpdatedAt } = useRunStatus(run)
 
 
 	const taskMetrics: Record<number, TaskMetrics> = useMemo(() => {
 	const taskMetrics: Record<number, TaskMetrics> = useMemo(() => {

+ 1 - 1
evals/apps/web/src/app/runs/[id]/task-status.tsx → apps/web-evals/src/app/runs/[id]/task-status.tsx

@@ -1,6 +1,6 @@
 import { CircleCheck, CircleDashed, CircleSlash, LoaderCircle } from "lucide-react"
 import { CircleCheck, CircleDashed, CircleSlash, LoaderCircle } from "lucide-react"
 
 
-import { type Task } from "@evals/db"
+import type { Task } from "@roo-code/evals"
 
 
 type TaskStatusProps = {
 type TaskStatusProps = {
 	task: Task
 	task: Task

+ 1 - 1
evals/packages/types/src/roo-code-defaults.ts → apps/web-evals/src/app/runs/new/defaults.ts

@@ -1,4 +1,4 @@
-import { RooCodeSettings } from "./roo-code.js"
+import { RooCodeSettings } from "@roo-code/types"
 
 
 export const rooCodeDefaults: RooCodeSettings = {
 export const rooCodeDefaults: RooCodeSettings = {
 	apiProvider: "openrouter",
 	apiProvider: "openrouter",

+ 2 - 1
evals/apps/web/src/app/runs/new/new-run.tsx → apps/web-evals/src/app/runs/new/new-run.tsx

@@ -9,7 +9,7 @@ import fuzzysort from "fuzzysort"
 import { toast } from "sonner"
 import { toast } from "sonner"
 import { X, Rocket, Check, ChevronsUpDown, SlidersHorizontal, Book, CircleCheck } from "lucide-react"
 import { X, Rocket, Check, ChevronsUpDown, SlidersHorizontal, Book, CircleCheck } from "lucide-react"
 
 
-import { globalSettingsSchema, providerSettingsSchema, rooCodeDefaults } from "@evals/types"
+import { globalSettingsSchema, providerSettingsSchema } from "@roo-code/types"
 
 
 import { createRun } from "@/lib/server/runs"
 import { createRun } from "@/lib/server/runs"
 import {
 import {
@@ -51,6 +51,7 @@ import {
 	DialogFooter,
 	DialogFooter,
 } from "@/components/ui"
 } from "@/components/ui"
 
 
+import { rooCodeDefaults } from "./defaults"
 import { SettingsDiff } from "./settings-diff"
 import { SettingsDiff } from "./settings-diff"
 
 
 export function NewRun() {
 export function NewRun() {

+ 0 - 0
evals/apps/web/src/app/runs/new/page.tsx → apps/web-evals/src/app/runs/new/page.tsx


+ 3 - 1
evals/apps/web/src/app/runs/new/settings-diff.tsx → apps/web-evals/src/app/runs/new/settings-diff.tsx

@@ -1,9 +1,11 @@
 import { Fragment, HTMLAttributes } from "react"
 import { Fragment, HTMLAttributes } from "react"
 
 
-import { RooCodeSettings, ROO_CODE_SETTINGS_KEYS } from "@evals/types"
+import { type Keys, type RooCodeSettings, GLOBAL_SETTINGS_KEYS, PROVIDER_SETTINGS_KEYS } from "@roo-code/types"
 
 
 import { cn } from "@/lib/utils"
 import { cn } from "@/lib/utils"
 
 
+export const ROO_CODE_SETTINGS_KEYS = [...GLOBAL_SETTINGS_KEYS, ...PROVIDER_SETTINGS_KEYS] as Keys<RooCodeSettings>[]
+
 type SettingsDiffProps = HTMLAttributes<HTMLDivElement> & {
 type SettingsDiffProps = HTMLAttributes<HTMLDivElement> & {
 	defaultSettings: RooCodeSettings
 	defaultSettings: RooCodeSettings
 	customSettings: RooCodeSettings
 	customSettings: RooCodeSettings

+ 0 - 0
evals/apps/web/src/components/layout/header.tsx → apps/web-evals/src/components/layout/header.tsx


+ 0 - 0
evals/apps/web/src/components/layout/logo.tsx → apps/web-evals/src/components/layout/logo.tsx


+ 0 - 0
evals/apps/web/src/components/providers/index.ts → apps/web-evals/src/components/providers/index.ts


+ 0 - 0
evals/apps/web/src/components/providers/react-query-provider.tsx → apps/web-evals/src/components/providers/react-query-provider.tsx


+ 0 - 0
evals/apps/web/src/components/providers/theme-provider.tsx → apps/web-evals/src/components/providers/theme-provider.tsx


+ 0 - 0
evals/apps/web/src/components/ui/alert-dialog.tsx → apps/web-evals/src/components/ui/alert-dialog.tsx


+ 0 - 0
evals/apps/web/src/components/ui/badge.tsx → apps/web-evals/src/components/ui/badge.tsx


+ 0 - 0
evals/apps/web/src/components/ui/button.tsx → apps/web-evals/src/components/ui/button.tsx


+ 0 - 0
evals/apps/web/src/components/ui/command.tsx → apps/web-evals/src/components/ui/command.tsx


+ 0 - 0
evals/apps/web/src/components/ui/dialog.tsx → apps/web-evals/src/components/ui/dialog.tsx


+ 0 - 0
evals/apps/web/src/components/ui/drawer.tsx → apps/web-evals/src/components/ui/drawer.tsx


+ 0 - 0
evals/apps/web/src/components/ui/dropdown-menu.tsx → apps/web-evals/src/components/ui/dropdown-menu.tsx


+ 0 - 0
evals/apps/web/src/components/ui/form.tsx → apps/web-evals/src/components/ui/form.tsx


+ 0 - 0
evals/apps/web/src/components/ui/index.ts → apps/web-evals/src/components/ui/index.ts


+ 0 - 0
evals/apps/web/src/components/ui/input.tsx → apps/web-evals/src/components/ui/input.tsx


+ 0 - 0
evals/apps/web/src/components/ui/label.tsx → apps/web-evals/src/components/ui/label.tsx


+ 0 - 0
evals/apps/web/src/components/ui/multi-select.tsx → apps/web-evals/src/components/ui/multi-select.tsx


+ 0 - 0
evals/apps/web/src/components/ui/popover.tsx → apps/web-evals/src/components/ui/popover.tsx


+ 1 - 1
evals/apps/web/src/components/ui/scroll-area.tsx → apps/web-evals/src/components/ui/scroll-area.tsx

@@ -6,7 +6,7 @@ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
 import { cn } from "@/lib/utils"
 import { cn } from "@/lib/utils"
 
 
 type ScrollAreaProps = React.ComponentProps<typeof ScrollAreaPrimitive.Root> & {
 type ScrollAreaProps = React.ComponentProps<typeof ScrollAreaPrimitive.Root> & {
-	viewportRef?: React.RefObject<HTMLDivElement | null>
+	viewportRef?: React.RefObject<HTMLDivElement>
 }
 }
 
 
 function ScrollArea({ className, children, viewportRef, ...props }: ScrollAreaProps) {
 function ScrollArea({ className, children, viewportRef, ...props }: ScrollAreaProps) {

+ 0 - 0
evals/apps/web/src/components/ui/select.tsx → apps/web-evals/src/components/ui/select.tsx


+ 0 - 0
evals/apps/web/src/components/ui/separator.tsx → apps/web-evals/src/components/ui/separator.tsx


+ 0 - 0
evals/apps/web/src/components/ui/slider.tsx → apps/web-evals/src/components/ui/slider.tsx


+ 0 - 0
evals/apps/web/src/components/ui/sonner.tsx → apps/web-evals/src/components/ui/sonner.tsx


+ 0 - 0
evals/apps/web/src/components/ui/table.tsx → apps/web-evals/src/components/ui/table.tsx


+ 0 - 0
evals/apps/web/src/components/ui/tabs.tsx → apps/web-evals/src/components/ui/tabs.tsx


+ 0 - 0
evals/apps/web/src/components/ui/textarea.tsx → apps/web-evals/src/components/ui/textarea.tsx


+ 0 - 0
evals/apps/web/src/components/ui/tooltip.tsx → apps/web-evals/src/components/ui/tooltip.tsx


+ 0 - 0
evals/apps/web/src/hooks/use-event-source.ts → apps/web-evals/src/hooks/use-event-source.ts


+ 1 - 1
evals/apps/web/src/hooks/use-exercises.ts → apps/web-evals/src/hooks/use-exercises.ts

@@ -2,4 +2,4 @@ import { useQuery } from "@tanstack/react-query"
 
 
 import { getExercises } from "@/lib/server/exercises"
 import { getExercises } from "@/lib/server/exercises"
 
 
-export const useExercises = () => useQuery({ queryKey: ["exercises"], queryFn: getExercises })
+export const useExercises = () => useQuery({ queryKey: ["exercises"], queryFn: () => getExercises() })

+ 32 - 0
apps/web-evals/src/hooks/use-open-router-models.ts

@@ -0,0 +1,32 @@
+import { z } from "zod"
+import { useQuery } from "@tanstack/react-query"
+
+export const openRouterModelSchema = z.object({
+	id: z.string(),
+	name: z.string(),
+})
+
+export type OpenRouterModel = z.infer<typeof openRouterModelSchema>
+
+export const getOpenRouterModels = async (): Promise<OpenRouterModel[]> => {
+	const response = await fetch("https://openrouter.ai/api/v1/models")
+
+	if (!response.ok) {
+		return []
+	}
+
+	const result = z.object({ data: z.array(openRouterModelSchema) }).safeParse(await response.json())
+
+	if (!result.success) {
+		console.error(result.error)
+		return []
+	}
+
+	return result.data.data.sort((a, b) => a.name.localeCompare(b.name))
+}
+
+export const useOpenRouterModels = () =>
+	useQuery({
+		queryKey: ["getOpenRouterModels"],
+		queryFn: getOpenRouterModels,
+	})

+ 0 - 0
evals/apps/web/src/hooks/use-process-tree.ts → apps/web-evals/src/hooks/use-process-tree.ts


+ 4 - 4
evals/apps/web/src/hooks/use-run-status.ts → apps/web-evals/src/hooks/use-run-status.ts

@@ -1,8 +1,8 @@
 import { useState, useCallback, useRef } from "react"
 import { useState, useCallback, useRef } from "react"
 import { useQuery, keepPreviousData } from "@tanstack/react-query"
 import { useQuery, keepPreviousData } from "@tanstack/react-query"
 
 
-import { TokenUsage, taskEventSchema, RooCodeEventName, EvalEventName } from "@evals/types"
-import { Run } from "@evals/db"
+import { type TokenUsage, RooCodeEventName, taskEventSchema } from "@roo-code/types"
+import type { Run } from "@roo-code/evals"
 
 
 import { getTasks } from "@/lib/server/tasks"
 import { getTasks } from "@/lib/server/tasks"
 import { useEventSource } from "@/hooks/use-event-source"
 import { useEventSource } from "@/hooks/use-event-source"
@@ -58,8 +58,8 @@ export const useRunStatus = (run: Run) => {
 				setUsageUpdatedAt(Date.now())
 				setUsageUpdatedAt(Date.now())
 				break
 				break
 			}
 			}
-			case EvalEventName.Pass:
-			case EvalEventName.Fail:
+			case RooCodeEventName.EvalPass:
+			case RooCodeEventName.EvalFail:
 				setTasksUpdatedAt(Date.now())
 				setTasksUpdatedAt(Date.now())
 				break
 				break
 		}
 		}

+ 0 - 0
evals/apps/web/src/lib/formatters.ts → apps/web-evals/src/lib/formatters.ts


+ 1 - 1
evals/apps/web/src/lib/schemas.ts → apps/web-evals/src/lib/schemas.ts

@@ -1,6 +1,6 @@
 import { z } from "zod"
 import { z } from "zod"
 
 
-import { rooCodeSettingsSchema } from "@evals/types"
+import { rooCodeSettingsSchema } from "@roo-code/types"
 
 
 /**
 /**
  * CreateRun
  * CreateRun

+ 2 - 2
evals/apps/web/src/lib/server/exercises.ts → apps/web-evals/src/lib/server/exercises.ts

@@ -4,7 +4,7 @@ import * as fs from "fs/promises"
 import * as path from "path"
 import * as path from "path"
 import { fileURLToPath } from "url"
 import { fileURLToPath } from "url"
 
 
-import { ExerciseLanguage, exerciseLanguages } from "@evals/types"
+import { type ExerciseLanguage, exerciseLanguages } from "@roo-code/evals"
 
 
 const __dirname = path.dirname(fileURLToPath(import.meta.url))
 const __dirname = path.dirname(fileURLToPath(import.meta.url))
 
 
@@ -20,7 +20,7 @@ export const listDirectories = async (relativePath: string) => {
 }
 }
 
 
 // __dirname = <repo>/evals/apps/web/src/lib/server
 // __dirname = <repo>/evals/apps/web/src/lib/server
-const EXERCISES_BASE_PATH = path.resolve(__dirname, "../../../../../../../evals")
+const EXERCISES_BASE_PATH = path.resolve(__dirname, "../../../../../../evals")
 
 
 export const getExercises = async () => {
 export const getExercises = async () => {
 	const result = await Promise.all(
 	const result = await Promise.all(

+ 0 - 0
evals/apps/web/src/lib/server/processes.ts → apps/web-evals/src/lib/server/processes.ts


+ 19 - 16
evals/apps/web/src/lib/server/runs.ts → apps/web-evals/src/lib/server/runs.ts

@@ -8,14 +8,21 @@ import fs from "fs"
 import { revalidatePath } from "next/cache"
 import { revalidatePath } from "next/cache"
 import pMap from "p-map"
 import pMap from "p-map"
 
 
-import { ExerciseLanguage, exerciseLanguages } from "@evals/types"
-import * as db from "@evals/db"
+import {
+	type ExerciseLanguage,
+	exerciseLanguages,
+	createRun as _createRun,
+	updateRun as _updateRun,
+	deleteRun as _deleteRun,
+	createTask,
+} from "@roo-code/evals"
 
 
 import { CreateRun } from "@/lib/schemas"
 import { CreateRun } from "@/lib/schemas"
+
 import { getExercisesForLanguage } from "./exercises"
 import { getExercisesForLanguage } from "./exercises"
 
 
 export async function createRun({ suite, exercises = [], systemPrompt, ...values }: CreateRun) {
 export async function createRun({ suite, exercises = [], systemPrompt, ...values }: CreateRun) {
-	const run = await db.createRun({
+	const run = await _createRun({
 		...values,
 		...values,
 		socketPath: path.join(os.tmpdir(), `roo-code-evals-${crypto.randomUUID()}.sock`),
 		socketPath: path.join(os.tmpdir(), `roo-code-evals-${crypto.randomUUID()}.sock`),
 	})
 	})
@@ -28,13 +35,13 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values
 				throw new Error("Invalid exercise path: " + path)
 				throw new Error("Invalid exercise path: " + path)
 			}
 			}
 
 
-			await db.createTask({ ...values, runId: run.id, language: language as ExerciseLanguage, exercise })
+			await createTask({ ...values, runId: run.id, language: language as ExerciseLanguage, exercise })
 		}
 		}
 	} else {
 	} else {
 		for (const language of exerciseLanguages) {
 		for (const language of exerciseLanguages) {
 			const exercises = await getExercisesForLanguage(language)
 			const exercises = await getExercisesForLanguage(language)
 
 
-			await pMap(exercises, (exercise) => db.createTask({ ...values, runId: run.id, language, exercise }), {
+			await pMap(exercises, (exercise) => createTask({ ...values, runId: run.id, language, exercise }), {
 				concurrency: 10,
 				concurrency: 10,
 			})
 			})
 		}
 		}
@@ -49,18 +56,14 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values
 			? { ...process.env, FOOTGUN_SYSTEM_PROMPT: systemPrompt }
 			? { ...process.env, FOOTGUN_SYSTEM_PROMPT: systemPrompt }
 			: process.env
 			: process.env
 
 
-		const childProcess = spawn(
-			"pnpm",
-			["--filter", "@evals/cli", "dev", "run", "all", "--runId", run.id.toString()],
-			{
-				detached: true,
-				stdio: ["ignore", logFile, logFile],
-				env,
-			},
-		)
+		const childProcess = spawn("pnpm", ["--filter", "@roo-code/evals", "cli", run.id.toString()], {
+			detached: true,
+			stdio: ["ignore", logFile, logFile],
+			env,
+		})
 
 
 		childProcess.unref()
 		childProcess.unref()
-		await db.updateRun(run.id, { pid: childProcess.pid })
+		await _updateRun(run.id, { pid: childProcess.pid })
 	} catch (error) {
 	} catch (error) {
 		console.error(error)
 		console.error(error)
 	}
 	}
@@ -69,6 +72,6 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values
 }
 }
 
 
 export async function deleteRun(runId: number) {
 export async function deleteRun(runId: number) {
-	await db.deleteRun(runId)
+	await _deleteRun(runId)
 	revalidatePath("/runs")
 	revalidatePath("/runs")
 }
 }

+ 0 - 0
evals/apps/web/src/lib/server/sse-stream.ts → apps/web-evals/src/lib/server/sse-stream.ts


+ 2 - 2
evals/apps/web/src/lib/server/tasks.ts → apps/web-evals/src/lib/server/tasks.ts

@@ -2,10 +2,10 @@
 
 
 import { revalidatePath } from "next/cache"
 import { revalidatePath } from "next/cache"
 
 
-import * as db from "@evals/db"
+import { getTasks as _getTasks } from "@roo-code/evals"
 
 
 export async function getTasks(runId: number) {
 export async function getTasks(runId: number) {
-	const tasks = await db.getTasks(runId)
+	const tasks = await _getTasks(runId)
 	revalidatePath(`/runs/${runId}`)
 	revalidatePath(`/runs/${runId}`)
 	return tasks
 	return tasks
 }
 }

+ 0 - 0
evals/apps/web/src/lib/utils.ts → apps/web-evals/src/lib/utils.ts


+ 1 - 1
evals/apps/web/tsconfig.json → apps/web-evals/tsconfig.json

@@ -1,5 +1,5 @@
 {
 {
-	"extends": "@evals/typescript-config/nextjs.json",
+	"extends": "@roo-code/config-typescript/nextjs.json",
 	"compilerOptions": {
 	"compilerOptions": {
 		"plugins": [{ "name": "next" }],
 		"plugins": [{ "name": "next" }],
 		"paths": { "@/*": ["./src/*"] }
 		"paths": { "@/*": ["./src/*"] }

+ 0 - 0
apps/web-roo-code/.gitkeep


+ 1 - 0
apps/web-roo-code/README.md

@@ -0,0 +1 @@
+TODO

+ 0 - 1
evals/.env.sample

@@ -1 +0,0 @@
-BENCHMARKS_DB_PATH=file:/tmp/evals.db

+ 0 - 42
evals/.gitignore

@@ -1,42 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# Dependencies
-node_modules
-.pnp
-.pnp.js
-
-# Local env files
-.env
-.env.*
-!.env.sample
-
-# Testing
-coverage
-
-# Turbo
-.turbo
-
-# Vercel
-.vercel
-
-# Next.js
-next-env.d.ts
-
-# Build Outputs
-.next/
-out/
-build
-dist
-*.tsbuildinfo
-
-# Debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Misc
-.DS_Store
-*.pem
-
-# Evals
-evals

+ 0 - 2
evals/.npmrc

@@ -1,2 +0,0 @@
-# https://github.com/vercel/next.js/issues/68805
-public-hoist-pattern[]=*libsql*

+ 0 - 4
evals/.tool-versions

@@ -1,4 +0,0 @@
-python 3.13.2
-golang 1.24.2
-rust 1.85.1
-nodejs 20.19.2

+ 0 - 27
evals/apps/cli/package.json

@@ -1,27 +0,0 @@
-{
-	"name": "@evals/cli",
-	"private": true,
-	"type": "module",
-	"scripts": {
-		"lint": "eslint src/**/*.ts --max-warnings=0",
-		"check-types": "tsc --noEmit",
-		"format": "prettier --write src",
-		"dev": "dotenvx run -f ../../.env -- tsx src/index.ts"
-	},
-	"dependencies": {
-		"@evals/db": "workspace:^",
-		"@evals/ipc": "workspace:^",
-		"@evals/lib": "workspace:^",
-		"@evals/types": "workspace:^",
-		"execa": "^9.5.2",
-		"gluegun": "^5.1.2",
-		"p-map": "^7.0.3",
-		"p-wait-for": "^5.0.2",
-		"ps-tree": "^1.2.0"
-	},
-	"devDependencies": {
-		"@evals/eslint-config": "workspace:^",
-		"@evals/typescript-config": "workspace:^",
-		"@types/ps-tree": "^1.1.6"
-	}
-}

+ 0 - 31
evals/apps/cli/src/exercises.ts

@@ -1,31 +0,0 @@
-import * as path from "path"
-import * as fs from "fs"
-
-import { filesystem } from "gluegun"
-
-import { type ExerciseLanguage, exerciseLanguages } from "@evals/types"
-
-import { exercisesPath } from "./paths.js"
-
-let exercisesByLanguage: Record<ExerciseLanguage, string[]> | null = null
-
-export const getExercises = () => {
-	if (exercisesByLanguage !== null) {
-		return exercisesByLanguage
-	}
-
-	const getLanguageExercises = (language: ExerciseLanguage) =>
-		fs.existsSync(path.resolve(exercisesPath, language))
-			? filesystem
-					.subdirectories(path.resolve(exercisesPath, language))
-					.map((exercise) => path.basename(exercise))
-					.filter((exercise) => !exercise.startsWith("."))
-			: []
-
-	exercisesByLanguage = exerciseLanguages.reduce(
-		(collect, language) => ({ ...collect, [language]: getLanguageExercises(language) }),
-		{} as Record<ExerciseLanguage, string[]>,
-	)
-
-	return exercisesByLanguage
-}

+ 0 - 7
evals/apps/cli/src/paths.ts

@@ -1,7 +0,0 @@
-import * as path from "path"
-import { fileURLToPath } from "url"
-
-export const __dirname = path.dirname(fileURLToPath(import.meta.url))
-
-export const extensionDevelopmentPath = path.resolve(__dirname, "..", "..", "..", "..")
-export const exercisesPath = path.resolve(extensionDevelopmentPath, "..", "evals")

+ 0 - 5
evals/apps/cli/tsconfig.json

@@ -1,5 +0,0 @@
-{
-	"extends": "@evals/typescript-config/base.json",
-	"include": ["src"],
-	"exclude": ["node_modules"]
-}

+ 0 - 75
evals/apps/web/src/hooks/use-open-router-models.ts

@@ -1,75 +0,0 @@
-import { z } from "zod"
-import { useQuery } from "@tanstack/react-query"
-
-import { type ModelInfo } from "@evals/types"
-
-const supportsPromptCache = ["anthropic/claude-3.7-sonnet", "anthropic/claude-3.5-sonnet", "anthropic/claude-3-5-haiku"]
-
-const supportsComputerUse = ["anthropic/claude-3.7-sonnet", "anthropic/claude-3.5-sonnet"]
-
-const supportsThinking = ["anthropic/claude-3.7-sonnet:thinking"]
-
-const parsePrice = (price?: string) => (price ? parseFloat(price) * 1_000_000 : undefined)
-
-export const openRouterModelSchema = z.object({
-	id: z.string(),
-	name: z.string(),
-	description: z.string(),
-	created: z.number(),
-	context_length: z.number(),
-	pricing: z.object({
-		prompt: z.string().optional(),
-		completion: z.string().optional(),
-	}),
-	top_provider: z
-		.object({
-			max_completion_tokens: z.number().nullish(),
-		})
-		.optional(),
-	architecture: z
-		.object({
-			modality: z.string(),
-		})
-		.optional(),
-})
-
-export type OpenRouterModel = z.infer<typeof openRouterModelSchema> & { modelInfo: ModelInfo }
-
-export const getOpenRouterModels = async (): Promise<OpenRouterModel[]> => {
-	const response = await fetch("https://openrouter.ai/api/v1/models")
-
-	if (!response.ok) {
-		console.error("Failed to fetch OpenRouter models")
-		return []
-	}
-
-	const result = z.object({ data: z.array(openRouterModelSchema) }).safeParse(await response.json())
-
-	if (!result.success) {
-		console.error(result.error)
-		return []
-	}
-
-	return result.data.data
-		.sort((a, b) => a.name.localeCompare(b.name))
-		.map((rawModel) => ({
-			...rawModel,
-			modelInfo: {
-				maxTokens: rawModel.top_provider?.max_completion_tokens ?? undefined,
-				contextWindow: rawModel.context_length,
-				supportsImages: rawModel.architecture?.modality?.includes("image"),
-				supportsPromptCache: supportsPromptCache.some((model) => rawModel.id.startsWith(model)),
-				supportsComputerUse: supportsComputerUse.some((model) => rawModel.id.startsWith(model)),
-				inputPrice: parsePrice(rawModel.pricing?.prompt),
-				outputPrice: parsePrice(rawModel.pricing?.completion),
-				description: rawModel.description,
-				thinking: supportsThinking.some((model) => rawModel.id.startsWith(model)),
-			},
-		}))
-}
-
-export const useOpenRouterModels = () =>
-	useQuery<OpenRouterModel[]>({
-		queryKey: ["getOpenRouterModels"],
-		queryFn: getOpenRouterModels,
-	})

+ 0 - 32
evals/config/eslint/base.js

@@ -1,32 +0,0 @@
-import js from "@eslint/js"
-import eslintConfigPrettier from "eslint-config-prettier"
-import turboPlugin from "eslint-plugin-turbo"
-import tseslint from "typescript-eslint"
-import onlyWarn from "eslint-plugin-only-warn"
-
-/**
- * A shared ESLint configuration for the repository.
- *
- * @type {import("eslint").Linter.Config[]}
- * */
-export const config = [
-	js.configs.recommended,
-	eslintConfigPrettier,
-	...tseslint.configs.recommended,
-	{
-		plugins: {
-			turbo: turboPlugin,
-		},
-		rules: {
-			"turbo/no-undeclared-env-vars": "warn",
-		},
-	},
-	{
-		plugins: {
-			onlyWarn,
-		},
-	},
-	{
-		ignores: ["dist/**"],
-	},
-]

+ 0 - 50
evals/config/eslint/next.js

@@ -1,50 +0,0 @@
-import js from "@eslint/js"
-import eslintConfigPrettier from "eslint-config-prettier"
-import tseslint from "typescript-eslint"
-import pluginReactHooks from "eslint-plugin-react-hooks"
-import pluginReact from "eslint-plugin-react"
-import globals from "globals"
-import pluginNext from "@next/eslint-plugin-next"
-
-import { config as baseConfig } from "./base.js"
-
-/**
- * A custom ESLint configuration for libraries that use Next.js.
- *
- * @type {import("eslint").Linter.Config[]}
- * */
-export const nextJsConfig = [
-	...baseConfig,
-	js.configs.recommended,
-	eslintConfigPrettier,
-	...tseslint.configs.recommended,
-	{
-		...pluginReact.configs.flat.recommended,
-		languageOptions: {
-			...pluginReact.configs.flat.recommended.languageOptions,
-			globals: {
-				...globals.serviceworker,
-			},
-		},
-	},
-	{
-		plugins: {
-			"@next/next": pluginNext,
-		},
-		rules: {
-			...pluginNext.configs.recommended.rules,
-			...pluginNext.configs["core-web-vitals"].rules,
-		},
-	},
-	{
-		plugins: {
-			"react-hooks": pluginReactHooks,
-		},
-		settings: { react: { version: "detect" } },
-		rules: {
-			...pluginReactHooks.configs.recommended.rules,
-			// React scope no longer necessary with new JSX transform.
-			"react/react-in-jsx-scope": "off",
-		},
-	},
-]

+ 0 - 21
evals/config/eslint/package.json

@@ -1,21 +0,0 @@
-{
-	"name": "@evals/eslint-config",
-	"private": true,
-	"type": "module",
-	"exports": {
-		"./base": "./base.js",
-		"./next-js": "./next.js"
-	},
-	"devDependencies": {
-		"@eslint/js": "^9.22.0",
-		"@next/eslint-plugin-next": "^15.2.1",
-		"eslint": "^9.22.0",
-		"eslint-config-prettier": "^10.1.1",
-		"eslint-plugin-only-warn": "^1.1.0",
-		"eslint-plugin-react": "^7.37.4",
-		"eslint-plugin-react-hooks": "^5.2.0",
-		"eslint-plugin-turbo": "^2.4.4",
-		"globals": "^16.0.0",
-		"typescript-eslint": "^8.26.0"
-	}
-}

+ 0 - 19
evals/config/typescript/base.json

@@ -1,19 +0,0 @@
-{
-	"$schema": "https://json.schemastore.org/tsconfig",
-	"compilerOptions": {
-		"declaration": true,
-		"declarationMap": true,
-		"esModuleInterop": true,
-		"incremental": false,
-		"isolatedModules": true,
-		"lib": ["es2022", "DOM", "DOM.Iterable"],
-		"module": "NodeNext",
-		"moduleDetection": "force",
-		"moduleResolution": "NodeNext",
-		"noUncheckedIndexedAccess": true,
-		"resolveJsonModule": true,
-		"skipLibCheck": true,
-		"strict": true,
-		"target": "ES2022"
-	}
-}

+ 0 - 14
evals/config/typescript/cjs.json

@@ -1,14 +0,0 @@
-{
-	"$schema": "https://json.schemastore.org/tsconfig",
-	"compilerOptions": {
-		"module": "CommonJS",
-		"moduleResolution": "Node",
-		"esModuleInterop": true,
-		"target": "ES2022",
-		"lib": ["ES2022", "ESNext.Disposable", "DOM"],
-		"sourceMap": true,
-		"strict": true,
-		"skipLibCheck": true,
-		"useUnknownInCatchVariables": false
-	}
-}

+ 0 - 12
evals/config/typescript/nextjs.json

@@ -1,12 +0,0 @@
-{
-	"$schema": "https://json.schemastore.org/tsconfig",
-	"extends": "./base.json",
-	"compilerOptions": {
-		"plugins": [{ "name": "next" }],
-		"module": "ESNext",
-		"moduleResolution": "bundler",
-		"allowJs": true,
-		"jsx": "preserve",
-		"noEmit": true
-	}
-}

+ 0 - 7
evals/config/typescript/package.json

@@ -1,7 +0,0 @@
-{
-	"name": "@evals/typescript-config",
-	"private": true,
-	"publishConfig": {
-		"access": "public"
-	}
-}

+ 0 - 33
evals/package.json

@@ -1,33 +0,0 @@
-{
-	"name": "@evals/monorepo",
-	"private": true,
-	"packageManager": "[email protected]",
-	"scripts": {
-		"lint": "turbo lint --log-order grouped --output-logs new-only",
-		"check-types": "turbo check-types --log-order grouped --output-logs new-only",
-		"test": "turbo test --log-order grouped --output-logs new-only",
-		"format": "turbo format --log-order grouped --output-logs new-only",
-		"build": "turbo build --log-order grouped --output-logs new-only",
-		"web": "turbo dev --filter @evals/web",
-		"cli": "turbo dev --filter @evals/cli -- run",
-		"drizzle:studio": "pnpm --filter @evals/db db:studio",
-		"docker:build": "docker build -f Dockerfile -t roo-code-eval --progress=plain ..",
-		"docker:run": "touch /tmp/evals.db && docker run -d -it -p 3000:3000 -v /tmp/evals.db:/tmp/evals.db roo-code-eval",
-		"docker:start": "pnpm docker:build && pnpm docker:run",
-		"docker:shell": "docker exec -it $(docker ps --filter \"ancestor=roo-code-eval\" -q) /bin/bash",
-		"docker:stop": "docker stop $(docker ps --filter \"ancestor=roo-code-eval\" -q)",
-		"docker:rm": "docker rm $(docker ps -a --filter \"ancestor=roo-code-eval\" -q)",
-		"docker:clean": "pnpm docker:stop && pnpm docker:rm"
-	},
-	"devDependencies": {
-		"@dotenvx/dotenvx": "^1.41.0",
-		"@eslint/js": "^9.25.1",
-		"eslint": "^9.25.1",
-		"globals": "^16.0.0",
-		"prettier": "^3.5.3",
-		"tsx": "^4.19.4",
-		"turbo": "^2.5.2",
-		"typescript": "5.8.3",
-		"typescript-eslint": "^8.31.1"
-	}
-}

+ 0 - 1
evals/packages/db/.gitignore

@@ -1 +0,0 @@
-test.db

+ 0 - 15
evals/packages/db/README.md

@@ -1,15 +0,0 @@
-## Running Migrations
-
-Update `src/schema.ts` as needed, and then run:
-
-```sh
-pnpm db:generate
-```
-
-Inspect the sql in the migration file added to `drizzle/`.
-
-If it looks okay, then run:
-
-```sh
-pnpm db:migrate
-```

+ 0 - 18
evals/packages/db/drizzle.config.ts

@@ -1,18 +0,0 @@
-import { defineConfig } from "drizzle-kit"
-
-if ((!process.env.TURSO_CONNECTION_URL || !process.env.TURSO_AUTH_TOKEN) && !process.env.BENCHMARKS_DB_PATH) {
-	throw new Error("TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN or BENCHMARKS_DB_PATH must be set")
-}
-
-const dialect = process.env.BENCHMARKS_DB_PATH ? "sqlite" : "turso"
-
-const dbCredentials = process.env.BENCHMARKS_DB_PATH
-	? { url: process.env.BENCHMARKS_DB_PATH }
-	: { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! }
-
-export default defineConfig({
-	out: "./drizzle",
-	schema: "./src/schema.ts",
-	dialect,
-	dbCredentials,
-})

+ 0 - 40
evals/packages/db/drizzle/0000_elite_raza.sql

@@ -1,40 +0,0 @@
-CREATE TABLE `runs` (
-	`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-	`taskMetricsId` integer,
-	`model` text NOT NULL,
-	`description` text,
-	`pid` integer,
-	`socketPath` text NOT NULL,
-	`passed` integer DEFAULT 0 NOT NULL,
-	`failed` integer DEFAULT 0 NOT NULL,
-	`createdAt` integer NOT NULL,
-	FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action
-);
---> statement-breakpoint
-CREATE TABLE `taskMetrics` (
-	`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-	`tokensIn` integer NOT NULL,
-	`tokensOut` integer NOT NULL,
-	`tokensContext` integer NOT NULL,
-	`cacheWrites` integer NOT NULL,
-	`cacheReads` integer NOT NULL,
-	`cost` real NOT NULL,
-	`duration` integer NOT NULL,
-	`createdAt` integer NOT NULL
-);
---> statement-breakpoint
-CREATE TABLE `tasks` (
-	`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-	`runId` integer NOT NULL,
-	`taskMetricsId` integer,
-	`language` text NOT NULL,
-	`exercise` text NOT NULL,
-	`passed` integer,
-	`startedAt` integer,
-	`finishedAt` integer,
-	`createdAt` integer NOT NULL,
-	FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action,
-	FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action
-);
---> statement-breakpoint
-CREATE UNIQUE INDEX `tasks_language_exercise_idx` ON `tasks` (`runId`,`language`,`exercise`);

+ 0 - 1
evals/packages/db/drizzle/0001_lush_reavers.sql

@@ -1 +0,0 @@
-ALTER TABLE `runs` ADD `settings` blob;

+ 0 - 1
evals/packages/db/drizzle/0002_white_flatman.sql

@@ -1 +0,0 @@
-ALTER TABLE `runs` ADD `concurrency` integer DEFAULT 2 NOT NULL;

+ 0 - 1
evals/packages/db/drizzle/0003_sweet_chimera.sql

@@ -1 +0,0 @@
-ALTER TABLE `taskMetrics` ADD `toolUsage` text;

+ 0 - 10
evals/packages/db/drizzle/0004_absent_slapstick.sql

@@ -1,10 +0,0 @@
-CREATE TABLE `toolErrors` (
-	`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-	`runId` integer,
-	`taskId` integer,
-	`toolName` text NOT NULL,
-	`error` text NOT NULL,
-	`createdAt` integer NOT NULL,
-	FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action,
-	FOREIGN KEY (`taskId`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE no action
-);

+ 0 - 274
evals/packages/db/drizzle/meta/0000_snapshot.json

@@ -1,274 +0,0 @@
-{
-	"version": "6",
-	"dialect": "sqlite",
-	"id": "c0fa8491-b5c0-493d-aa32-ddf280259c30",
-	"prevId": "00000000-0000-0000-0000-000000000000",
-	"tables": {
-		"runs": {
-			"name": "runs",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"model": {
-					"name": "model",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"description": {
-					"name": "description",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"pid": {
-					"name": "pid",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"socketPath": {
-					"name": "socketPath",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"failed": {
-					"name": "failed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {
-				"runs_taskMetricsId_taskMetrics_id_fk": {
-					"name": "runs_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "runs",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"taskMetrics": {
-			"name": "taskMetrics",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"tokensIn": {
-					"name": "tokensIn",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensOut": {
-					"name": "tokensOut",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensContext": {
-					"name": "tokensContext",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheWrites": {
-					"name": "cacheWrites",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheReads": {
-					"name": "cacheReads",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cost": {
-					"name": "cost",
-					"type": "real",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"duration": {
-					"name": "duration",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"tasks": {
-			"name": "tasks",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"runId": {
-					"name": "runId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"language": {
-					"name": "language",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"exercise": {
-					"name": "exercise",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"startedAt": {
-					"name": "startedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"finishedAt": {
-					"name": "finishedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {
-				"tasks_language_exercise_idx": {
-					"name": "tasks_language_exercise_idx",
-					"columns": ["runId", "language", "exercise"],
-					"isUnique": true
-				}
-			},
-			"foreignKeys": {
-				"tasks_runId_runs_id_fk": {
-					"name": "tasks_runId_runs_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "runs",
-					"columnsFrom": ["runId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				},
-				"tasks_taskMetricsId_taskMetrics_id_fk": {
-					"name": "tasks_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		}
-	},
-	"views": {},
-	"enums": {},
-	"_meta": {
-		"schemas": {},
-		"tables": {},
-		"columns": {}
-	},
-	"internal": {
-		"indexes": {}
-	}
-}

+ 0 - 281
evals/packages/db/drizzle/meta/0001_snapshot.json

@@ -1,281 +0,0 @@
-{
-	"version": "6",
-	"dialect": "sqlite",
-	"id": "8906647f-81d6-498a-897c-b1638c04c69a",
-	"prevId": "c0fa8491-b5c0-493d-aa32-ddf280259c30",
-	"tables": {
-		"runs": {
-			"name": "runs",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"model": {
-					"name": "model",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"description": {
-					"name": "description",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"settings": {
-					"name": "settings",
-					"type": "blob",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"pid": {
-					"name": "pid",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"socketPath": {
-					"name": "socketPath",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"failed": {
-					"name": "failed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {
-				"runs_taskMetricsId_taskMetrics_id_fk": {
-					"name": "runs_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "runs",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"taskMetrics": {
-			"name": "taskMetrics",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"tokensIn": {
-					"name": "tokensIn",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensOut": {
-					"name": "tokensOut",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensContext": {
-					"name": "tokensContext",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheWrites": {
-					"name": "cacheWrites",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheReads": {
-					"name": "cacheReads",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cost": {
-					"name": "cost",
-					"type": "real",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"duration": {
-					"name": "duration",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"tasks": {
-			"name": "tasks",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"runId": {
-					"name": "runId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"language": {
-					"name": "language",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"exercise": {
-					"name": "exercise",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"startedAt": {
-					"name": "startedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"finishedAt": {
-					"name": "finishedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {
-				"tasks_language_exercise_idx": {
-					"name": "tasks_language_exercise_idx",
-					"columns": ["runId", "language", "exercise"],
-					"isUnique": true
-				}
-			},
-			"foreignKeys": {
-				"tasks_runId_runs_id_fk": {
-					"name": "tasks_runId_runs_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "runs",
-					"columnsFrom": ["runId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				},
-				"tasks_taskMetricsId_taskMetrics_id_fk": {
-					"name": "tasks_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		}
-	},
-	"views": {},
-	"enums": {},
-	"_meta": {
-		"schemas": {},
-		"tables": {},
-		"columns": {}
-	},
-	"internal": {
-		"indexes": {}
-	}
-}

+ 0 - 289
evals/packages/db/drizzle/meta/0002_snapshot.json

@@ -1,289 +0,0 @@
-{
-	"version": "6",
-	"dialect": "sqlite",
-	"id": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce",
-	"prevId": "8906647f-81d6-498a-897c-b1638c04c69a",
-	"tables": {
-		"runs": {
-			"name": "runs",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"model": {
-					"name": "model",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"description": {
-					"name": "description",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"settings": {
-					"name": "settings",
-					"type": "blob",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"pid": {
-					"name": "pid",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"socketPath": {
-					"name": "socketPath",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"concurrency": {
-					"name": "concurrency",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 2
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"failed": {
-					"name": "failed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {
-				"runs_taskMetricsId_taskMetrics_id_fk": {
-					"name": "runs_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "runs",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"taskMetrics": {
-			"name": "taskMetrics",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"tokensIn": {
-					"name": "tokensIn",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensOut": {
-					"name": "tokensOut",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensContext": {
-					"name": "tokensContext",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheWrites": {
-					"name": "cacheWrites",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheReads": {
-					"name": "cacheReads",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cost": {
-					"name": "cost",
-					"type": "real",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"duration": {
-					"name": "duration",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"tasks": {
-			"name": "tasks",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"runId": {
-					"name": "runId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"language": {
-					"name": "language",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"exercise": {
-					"name": "exercise",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"startedAt": {
-					"name": "startedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"finishedAt": {
-					"name": "finishedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {
-				"tasks_language_exercise_idx": {
-					"name": "tasks_language_exercise_idx",
-					"columns": ["runId", "language", "exercise"],
-					"isUnique": true
-				}
-			},
-			"foreignKeys": {
-				"tasks_runId_runs_id_fk": {
-					"name": "tasks_runId_runs_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "runs",
-					"columnsFrom": ["runId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				},
-				"tasks_taskMetricsId_taskMetrics_id_fk": {
-					"name": "tasks_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		}
-	},
-	"views": {},
-	"enums": {},
-	"_meta": {
-		"schemas": {},
-		"tables": {},
-		"columns": {}
-	},
-	"internal": {
-		"indexes": {}
-	}
-}

+ 0 - 296
evals/packages/db/drizzle/meta/0003_snapshot.json

@@ -1,296 +0,0 @@
-{
-	"version": "6",
-	"dialect": "sqlite",
-	"id": "61d48d20-f662-445d-9962-cf9cb165cbe7",
-	"prevId": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce",
-	"tables": {
-		"runs": {
-			"name": "runs",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"model": {
-					"name": "model",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"description": {
-					"name": "description",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"settings": {
-					"name": "settings",
-					"type": "blob",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"pid": {
-					"name": "pid",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"socketPath": {
-					"name": "socketPath",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"concurrency": {
-					"name": "concurrency",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 2
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"failed": {
-					"name": "failed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {
-				"runs_taskMetricsId_taskMetrics_id_fk": {
-					"name": "runs_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "runs",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"taskMetrics": {
-			"name": "taskMetrics",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"tokensIn": {
-					"name": "tokensIn",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensOut": {
-					"name": "tokensOut",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensContext": {
-					"name": "tokensContext",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheWrites": {
-					"name": "cacheWrites",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheReads": {
-					"name": "cacheReads",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cost": {
-					"name": "cost",
-					"type": "real",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"duration": {
-					"name": "duration",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"toolUsage": {
-					"name": "toolUsage",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"tasks": {
-			"name": "tasks",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"runId": {
-					"name": "runId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"language": {
-					"name": "language",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"exercise": {
-					"name": "exercise",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"startedAt": {
-					"name": "startedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"finishedAt": {
-					"name": "finishedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {
-				"tasks_language_exercise_idx": {
-					"name": "tasks_language_exercise_idx",
-					"columns": ["runId", "language", "exercise"],
-					"isUnique": true
-				}
-			},
-			"foreignKeys": {
-				"tasks_runId_runs_id_fk": {
-					"name": "tasks_runId_runs_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "runs",
-					"columnsFrom": ["runId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				},
-				"tasks_taskMetricsId_taskMetrics_id_fk": {
-					"name": "tasks_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		}
-	},
-	"views": {},
-	"enums": {},
-	"_meta": {
-		"schemas": {},
-		"tables": {},
-		"columns": {}
-	},
-	"internal": {
-		"indexes": {}
-	}
-}

+ 0 - 367
evals/packages/db/drizzle/meta/0004_snapshot.json

@@ -1,367 +0,0 @@
-{
-	"version": "6",
-	"dialect": "sqlite",
-	"id": "ae766c54-aff4-4ce6-b492-24813790c279",
-	"prevId": "61d48d20-f662-445d-9962-cf9cb165cbe7",
-	"tables": {
-		"runs": {
-			"name": "runs",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"model": {
-					"name": "model",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"description": {
-					"name": "description",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"settings": {
-					"name": "settings",
-					"type": "blob",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"pid": {
-					"name": "pid",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"socketPath": {
-					"name": "socketPath",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"concurrency": {
-					"name": "concurrency",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 2
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"failed": {
-					"name": "failed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false,
-					"default": 0
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {
-				"runs_taskMetricsId_taskMetrics_id_fk": {
-					"name": "runs_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "runs",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"taskMetrics": {
-			"name": "taskMetrics",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"tokensIn": {
-					"name": "tokensIn",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensOut": {
-					"name": "tokensOut",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"tokensContext": {
-					"name": "tokensContext",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheWrites": {
-					"name": "cacheWrites",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cacheReads": {
-					"name": "cacheReads",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"cost": {
-					"name": "cost",
-					"type": "real",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"duration": {
-					"name": "duration",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"toolUsage": {
-					"name": "toolUsage",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"tasks": {
-			"name": "tasks",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"runId": {
-					"name": "runId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"taskMetricsId": {
-					"name": "taskMetricsId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"language": {
-					"name": "language",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"exercise": {
-					"name": "exercise",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"passed": {
-					"name": "passed",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"startedAt": {
-					"name": "startedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"finishedAt": {
-					"name": "finishedAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {
-				"tasks_language_exercise_idx": {
-					"name": "tasks_language_exercise_idx",
-					"columns": ["runId", "language", "exercise"],
-					"isUnique": true
-				}
-			},
-			"foreignKeys": {
-				"tasks_runId_runs_id_fk": {
-					"name": "tasks_runId_runs_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "runs",
-					"columnsFrom": ["runId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				},
-				"tasks_taskMetricsId_taskMetrics_id_fk": {
-					"name": "tasks_taskMetricsId_taskMetrics_id_fk",
-					"tableFrom": "tasks",
-					"tableTo": "taskMetrics",
-					"columnsFrom": ["taskMetricsId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		},
-		"toolErrors": {
-			"name": "toolErrors",
-			"columns": {
-				"id": {
-					"name": "id",
-					"type": "integer",
-					"primaryKey": true,
-					"notNull": true,
-					"autoincrement": true
-				},
-				"runId": {
-					"name": "runId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"taskId": {
-					"name": "taskId",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": false,
-					"autoincrement": false
-				},
-				"toolName": {
-					"name": "toolName",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"error": {
-					"name": "error",
-					"type": "text",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				},
-				"createdAt": {
-					"name": "createdAt",
-					"type": "integer",
-					"primaryKey": false,
-					"notNull": true,
-					"autoincrement": false
-				}
-			},
-			"indexes": {},
-			"foreignKeys": {
-				"toolErrors_runId_runs_id_fk": {
-					"name": "toolErrors_runId_runs_id_fk",
-					"tableFrom": "toolErrors",
-					"tableTo": "runs",
-					"columnsFrom": ["runId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				},
-				"toolErrors_taskId_tasks_id_fk": {
-					"name": "toolErrors_taskId_tasks_id_fk",
-					"tableFrom": "toolErrors",
-					"tableTo": "tasks",
-					"columnsFrom": ["taskId"],
-					"columnsTo": ["id"],
-					"onDelete": "no action",
-					"onUpdate": "no action"
-				}
-			},
-			"compositePrimaryKeys": {},
-			"uniqueConstraints": {},
-			"checkConstraints": {}
-		}
-	},
-	"views": {},
-	"enums": {},
-	"_meta": {
-		"schemas": {},
-		"tables": {},
-		"columns": {}
-	},
-	"internal": {
-		"indexes": {}
-	}
-}

Някои файлове не бяха показани, защото твърде много файлове са промени