Skip to content

feat(providers): add Runcrate built-in presets for Claude and Codex - #545

Open
heydryft wants to merge 1 commit into
SaladDay:mainfrom
heydryft:feat/runcrate-provider
Open

heydryft wants to merge 1 commit into
SaladDay:mainfrom
heydryft:feat/runcrate-provider

Conversation

@heydryft

Copy link
Copy Markdown

Summary

Adds Runcrate as a built-in provider preset for Claude and Codex in the TUI provider form, next to the other built-in presets. Runcrate serves open-weight models (Kimi, DeepSeek, GLM, Qwen, gpt-oss) and exposes both the Anthropic Messages API and the OpenAI Responses API, so one key works in both apps.

  • provider_preset_builtin.rs: new BuiltinProviderPresetId::Runcrate.
    • Claude: ANTHROPIC_BASE_URL=https://api.runcrate.ai, ANTHROPIC_AUTH_TOKEN, main and Sonnet model moonshotai/Kimi-K2.6, Haiku deepseek-ai/DeepSeek-V4.1-Flash, Opus zai-org/GLM-5.3.
    • Codex: base_url = "https://api.runcrate.ai/v1", wire_api = "responses", apiFormat: openai_responses, model moonshotai/Kimi-K2.6, plus a three-model catalog with context windows and input modalities.
  • cli/tui/form/provider_templates.rs: Runcrate appended to the Claude and Codex built-in template lists (after OpenRouter, so built-ins still come after partner presets).
  • cli/tui/form/tests.rs: label lists, the Claude and Codex preset field tables, and the "last template" assertion updated.
  • CHANGELOG.md and docs/CHANGELOG.md: entry under Unreleased.

Verification

  • cargo fmt --check: clean.
  • cargo test --lib cli::tui::form: 250 passed.
  • cargo test --lib proxy::providers::codex: 64 passed.
  • cargo test --lib provider_preset: 11 passed.
  • The full cargo test --lib timed out on my machine in the proxy service tests, both with and without this change, so I ran the targeted modules above instead. cargo clippy --lib stops on an existing empty range error in src/cli/tui/ui/home_chart.rs; it reports nothing in the files this PR touches.
  • Live, with a real Runcrate key: a streaming POST https://api.runcrate.ai/v1/messages with Authorization: Bearer and a tool definition (deepseek-ai/DeepSeek-V4.1-Flash) returned HTTP 200 with message_start, thinking_delta, a tool_use block, input_json_delta and message_stop events. A streaming POST /v1/responses returned HTTP 200. A non-streaming /v1/messages call with moonshotai/Kimi-K2.6 replied ok.

This PR was prepared with AI assistance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant