Move --font-display and --font-body CSS variable declarations from
workers/page.tsx into a new evals/layout.tsx so all evals sub-pages
(methodology, workers, workers/[roleId], etc.) inherit the font
variables without duplicating the setup.
- Add "Value Map: Salary vs Interview Score" scatter to comparison page
- Dots colored by tier, sized by success rate
- Sweet Spot quadrant highlight (upper-left)
- Respects existing provider/success-rate filters
- Add "AI Coding Capability Over Time" scatter to landing page
- 10 models from Jun 2025 to Feb 2026
- Dots colored by provider, sized by cost efficiency
- Dashed trend line showing upward trajectory
- Add MODEL_TIMELINE data to mock-recommendations.ts
- Atmospheric header with role-colored blur gradients
- Glass-morphism containers for chart, filters, and export
- Styled language toggle pills with role color accents
- Themed provider checkboxes and success rate slider
- Custom chart tooltip with backdrop blur
- Export buttons with press feedback
- framer-motion scroll-triggered animations
- Bottom navigation with pill-style links
- Role themes: reviewer (violet) and autonomous (cyan) added to candidates page
- Add 5 engineer roles: Junior, Senior, Staff, Architecture Reviewer, Autonomous Agent
- Build role selection landing page with hiring metaphor at /evals/workers
- Build candidate rankings page with tiered recommendations at /evals/workers/[roleId]
- Build candidate comparison page with Recharts charts at /evals/workers/[roleId]/compare
- Build "How We Interview" methodology page at /evals/methodology
- Add mock data with real eval scores from 27 model runs
- Implement "Hire This Engineer" CTA linking to Roo Code Cloud
- Implement "Configure Extension" CTA with clipboard copy
- Per-language score breakdowns (Go, Java, JS, Python, Rust)
- Daily salary pricing (80 tasks/agent/day estimate)
- framer-motion animations, glass-morphism design, role color themes
- Tone-of-voice compliance (no em dashes, no hype, workflow-first copy)
- vscode:// deep link design doc at plans/vscode-deep-link-design.md
* feat: migrate LiteLLM provider to AI SDK (@ai-sdk/openai-compatible)
- Replace raw OpenAI SDK (RouterProvider) with Vercel AI SDK's
createOpenAICompatible via OpenAICompatibleHandler base class
- Retain dynamic model fetching from LiteLLM server via /v1/model/info
- Use centralized getModelMaxOutputTokens() to cap output tokens at 20%
of context window, preventing overflow errors
- Remove LiteLLM-specific workarounds (Gemini thought signature injection,
prompt cache control headers) now handled by the proxy or AI SDK
- Rewrite tests to mock AI SDK (streamText, generateText) instead of
raw OpenAI SDK
* fix: call fetchModel() in completePrompt() before execution
Addresses review feedback - completePrompt() now fetches models
before executing to ensure correct model info for token limits,
matching the behavior of createMessage().
* fix: make removeClineFromStack() delegation-aware to prevent orphaned parent tasks
When a delegated child task is removed via removeClineFromStack() (e.g., Clear
Task, navigate to history, start new task), the parent task was left orphaned
in "delegated" status with a stale awaitingChildId. This made the parent
unresumable without manual history repair.
This fix captures parentTaskId and childTaskId before abort/dispose, then
repairs the parent metadata (status -> active, clear awaitingChildId) when
the popped task is a delegated child and awaitingChildId matches.
Parent lookup + updateTaskHistory are wrapped in try/catch so failures are
non-fatal (logged but do not block the pop).
Closes#11301
* fix: add skipDelegationRepair opt-out to removeClineFromStack() for nested delegation
---------
Co-authored-by: Roo Code <roomote@roocode.com>
* refactor: migrate LM Studio provider to Vercel AI SDK
Migrate LmStudioHandler from raw OpenAI SDK to Vercel AI SDK via
OpenAICompatibleHandler base class.
Changes:
- Extend OpenAICompatibleHandler instead of BaseProvider
- Use createOpenAICompatible from @ai-sdk/openai-compatible
- Use streamText/generateText from ai package
- Add extractReasoningMiddleware for <think> tag extraction parity
- Pass draft_model via providerOptions for speculative decoding
- Remove unused getLmStudioModels function (active version in fetchers/)
- Update all tests to mock AI SDK instead of OpenAI SDK
* fix: wrap completePrompt with handleAiSdkError for consistent error handling
---------
Co-authored-by: Roo Code <roomote@roocode.com>
Replace @anthropic-ai/vertex-sdk with @ai-sdk/google-vertex/anthropic,
using streamText/generateText from the Vercel AI SDK for consistent
provider behavior.
Changes:
- Use createVertexAnthropic from @ai-sdk/google-vertex/anthropic
- Use streamText/generateText instead of direct Anthropic API calls
- Add AI SDK transform utilities for message/tool conversion
- Handle cache control via AI SDK providerOptions
- Handle thinking/reasoning via providerOptions.anthropic.thinking
- Add thought signature and redacted thinking block tracking
- Set isAiSdkProvider() to return true
- Remove unused deps: @anthropic-ai/vertex-sdk, google-auth-library
- Rewrite tests to mock AI SDK instead of @anthropic-ai/vertex-sdk
* Latest main branch snapshot from API
* feat: add dedicated Azure OpenAI provider using @ai-sdk/azure package
* feat: add Azure provider UI component and translations
* feat: add Azure provider translations for all locales
* chore: add missing Azure placeholder translations
* Delete .changeset/azure-ai-sdk-migration.md
* fix: add Azure provider validation for onboarding workflow
- Add azureApiKey to SECRET_STATE_KEYS for proper configuration detection
- Add Azure validation case in validateModelsAndKeysProvided
- Add validation translations for azureResourceName and azureDeploymentName across all 18 locales
This fixes the issue where the Finish button does nothing when setting up Azure provider in the onboarding workflow.
* feat(azure): add model metadata, model picker, rename to Azure AI Foundry
- Add static model metadata for 29 Azure models (from models.dev)
with Roo-specific flags (reasoning, tools, verbosity) matching
openAiNativeModels
- Add model picker dropdown to Azure provider settings for model
capability detection (context window, max tokens, pricing)
- Rename provider label from 'Azure OpenAI' to 'Azure AI Foundry'
across all 18 locales
- Make API key optional (supports Azure managed identity / Entra ID)
- Update default API version from 2024-08-01-preview to 2025-04-01-preview
- Fix maxOutputTokens validation (filter invalid values <= 0)
- Handler separates deployment name (API calls) from model ID
(capability lookup) with azureDefaultModelInfo (gpt-4o) fallback
- Remove unhelpful 'Get Azure AI Foundry Access' button
- Prevent stale model IDs from other providers carrying over
- Suppress validation errors on fresh provider selection
* fix(azure): add missing isAiSdkProvider() override for reasoning block preservation
* Azure Fixes for Hannes
* Quick Fix for Respones API Only (for Hannes)
* fix: use explicit azureOpenAiDefaultApiVersion fallback when apiVersion is empty
Addresses review feedback: the UI placeholder shows '2025-04-01-preview' via
azureOpenAiDefaultApiVersion, so the handler should use the same constant as
fallback instead of silently deferring to the SDK's internal default.
* fix: remove stale Cerebras references (retired provider)
* fix: add missing retiredProviderMessage translations for all locales
* fix: do not map promptCacheMissTokens to cacheWriteTokens for Azure
Azure uses OpenAI-compatible caching which does not report cache write
tokens separately. promptCacheMissTokens represents tokens NOT found in
cache (processed from scratch), not tokens written to cache. This aligns
the Azure handler with the OpenAI native handler behavior.
---------
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>