Arena is a new pane kind for competitive AI evaluation. A Battle runs the same prompt against 2-6 Contestants across two concurrent lanes: local lane (llama-swap models, serial) and cloud lane (parallel). Added to all three registries: @boocode/contracts WsFrameSchema, server InferenceFrame, and web WsFrame. Backend (apps/coder): - arena-runner: battle scheduler, lane classifier, benchmark, results writer, resume, user winner override - arena-analyzer: two-stage digest→judge analysis on DEFAULT_MODEL - arena-decisions: status transitions and resume logic (unit-tested) - arena-analyzer-helpers: pure helper functions (unit-tested) - arena-model-call: model call utility for analysis - arena routes: create/get/list/stop/analyze/cross-examine/winner/diff - schema: battles, contestants, cross_examinations tables (idempotent) - remove old /api/arena* routes and tasks.arena_id column Frontend (apps/web): - ArenaLauncherDialog: battle type, prompt, contestant selection - ArenaPane: live roster, streaming output, analysis, cross-exam - DiffView: unified diff with line-by-line color for coding contests - Winner override per-row dropdown (Trophy icon) - battle_updated WS handler for live winner/analysis updates - arena pane kind in Workspace, ChatTabBar, useSidebar Cross-app: - ArenaState and ArenaContestantShape/WsFrame types (contracts) - battle_* frames in WsFrameSchema, InferenceFrame, and web WsFrame - manifest.json written per battle results folder - /Arena added to .gitignore Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
51 lines
1.2 KiB
JSON
51 lines
1.2 KiB
JSON
{
|
|
"name": "@boocode/contracts",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"main": "dist/index.js",
|
|
"exports": {
|
|
".": {
|
|
"types": "./dist/index.d.ts",
|
|
"default": "./dist/index.js"
|
|
},
|
|
"./ws-frames": {
|
|
"types": "./dist/ws-frames.d.ts",
|
|
"default": "./dist/ws-frames.js"
|
|
},
|
|
"./provider-snapshot": {
|
|
"types": "./dist/provider-snapshot.d.ts",
|
|
"default": "./dist/provider-snapshot.js"
|
|
},
|
|
"./provider-config": {
|
|
"types": "./dist/provider-config.d.ts",
|
|
"default": "./dist/provider-config.js"
|
|
},
|
|
"./message-metadata": {
|
|
"types": "./dist/message-metadata.d.ts",
|
|
"default": "./dist/message-metadata.js"
|
|
},
|
|
"./worktree-risk": {
|
|
"types": "./dist/worktree-risk.d.ts",
|
|
"default": "./dist/worktree-risk.js"
|
|
},
|
|
"./arena": {
|
|
"types": "./dist/arena.d.ts",
|
|
"default": "./dist/arena.js"
|
|
}
|
|
},
|
|
"scripts": {
|
|
"build": "tsc",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"zod": "^3.23.8"
|
|
},
|
|
"devDependencies": {
|
|
"typescript": "^5.5.0",
|
|
"vitest": "^3.2.4"
|
|
},
|
|
"license": "MIT"
|
|
}
|