Skip to content

chore: release 2.8.0 - #422

Merged
scott merged 1 commit into
mainfrom
cursor/release-2.8.0-6b08
Oct 22, 2026
Merged

scott merged 1 commit into
mainfrom
cursor/release-2.8.0-6b08

Conversation

@scott

@scott scott commented Oct 22, 2026

Copy link
Copy Markdown
Owner

[2.8.0] - 2026-10-21

Added

  • Direct Anthropic inference. anthropic-api/<model> uses native ChatAnthropic and ANTHROPIC_API_KEY against https://api.anthropic.com/v1. An exported ANTHROPIC_BASE_URL routes builder calls through that proxy, with or without /v1. /model lists active Claude ids with x-api-key and anthropic-version, and falls back to claude-sonnet-5-5, claude-opus-5-5, and claude-haiku-5-5. The lifecycle query is dropped only after HTTP 400 or 422. The builder sends temperature 0.7 and omits it when the langchain-anthropic profile rejects temperature. An unknown id uses the Claude 4.7 and later pattern, including fable and mythos 5.x, and a family output floor. Opus 4 and Opus 4.1, including dated snapshots, use 32000. Claude 3 Haiku and Opus use 4096. The client sets a 600 second request timeout. anthropic/ stays on OpenRouter. Deploy forwards ANTHROPIC_API_KEY only for an anthropic-api/ model and never forwards ANTHROPIC_BASE_URL. (#418)
  • xAI is a direct inference provider. xai/<model> calls https://api.x.ai/v1 with XAI_API_KEY. x-ai/ stays on OpenRouter. The model list keeps chat models and drops image, video, voice, embedding, multi-agent, and latest aliases. The builder sends temperature 0.7 and does not send stop, presence_penalty, or frequency_penalty. Deploy forwards XAI_API_KEY only for an xai/ model and never forwards XAI_BASE_URL. (#414)
  • Direct OpenAI inference. openai-api/<model> uses OPENAI_API_KEY and https://api.openai.com/v1. The model list keeps chat ids and drops embedding, TTS, image, moderation, search, pro, deep-research, codex, and instruct ids. Reasoning models such as o3 and gpt-5 omit temperature. openai/ stays on OpenRouter. Deploy forwards OPENAI_API_KEY only when that is the key brain.model needs. (#415)
  • Google Gemini is a builder and runtime inference provider. gemini/<model> calls https://generativelanguage.googleapis.com/v1beta/openai with GEMINI_API_KEY. /model lists chat models and strips a leading models/ from ids the list endpoint returns, including a hand-typed gemini/models/<id>. Video ids such as gemini-omni-1.1-flash are excluded. Gemini 3 and 4 tool calls return extra_content.google.thought_signature, and Cast echoes that object from the assistant message on the next request, including when several streams share one client. A signature repeated on two chunks of one tool call is echoed once. google/... stays on OpenRouter. Deploy forwards only GEMINI_API_KEY. The builder omits temperature so Gemini 3 thinking models keep the API default of 1.0. (#416)
  • Ollama is a local, keyless inference provider. ollama/<model> calls http://localhost:11434/v1 with no API key. The chat client sends the placeholder ollama so the request does not carry an empty Bearer token. OLLAMA_API_KEY is optional and is used only when set, for Ollama cloud (OLLAMA_BASE_URL=https://ollama.com/v1). /model lists models from the OpenAI-compatible GET /v1/models endpoint without a token and leaves out embedding names. When Ollama answers, cast provider ollama keeps ollama/qwen3 only if that pull is present (qwen3 and qwen3:latest match; qwen3:8b does not) and otherwise stores the first pulled chat model. When Ollama does not answer, it stores ollama/qwen3 and prints ollama pull qwen3. qwen3, llama3.1, and gpt-oss are starting points. Ollama's default context length is 4096 tokens; raise it with OLLAMA_CONTEXT_LENGTH or num_ctx. cast deploy to Fly, Railway, Sprites, DigitalOcean, or MicroVM refuses an ollama/ agent model before extract, git, or login. Docker rewrites a loopback base URL (127.0.0.0/8, ::1, localhost, localhost., and IPv4-mapped loopback) to http://host.docker.internal:<port>/v1 and does not copy OLLAMA_API_KEY or the builder's base URL. 0.0.0.0 and https on loopback are refused. On Linux, deploy prints that Ollama must listen beyond 127.0.0.1 (OLLAMA_HOST=0.0.0.0 with a firewall, or the docker0 bridge IP, often 172.17.0.1). A non-loopback builder URL is refused for Docker as well. Deploy forwards no Ollama credential. (#420)
  • OpenAI-compatible inference providers share one class filled in from python/cast/providers/manifest.json. A new provider is a row with "impl": "openai-compatible" (base URL, key, model list, keyless flag, curated models, and non-secret settings such as a region). A module is only needed for a model-id rewrite. Direct prefixes openai-api/, anthropic-api/, gemini/, bedrock/, ollama/, and xai/ are reserved in the manifest and are not registered yet. (#413)

Changed

  • OpenRouter and DigitalOcean serverless inference use that shared class. Prefixes, environment variables, model lists, keychain and token-file lookup, and deploy forwarding are unchanged. openai/, anthropic/, google/, x-ai/, and the other OpenRouter vendor ids still use OpenRouter. A bare alias such as claude-sonnet-4 still uses OpenRouter, including the memory reflection fallback claude-haiku-latest. (#413)
  • A reserved direct prefix, or a bare id OpenRouter does not already accept, is an error. cast model not-a-real-model names the prefix convention and does not list the catalog. cast model qwen/qwen3-coder is an unknown curated OpenRouter id and lists the available ids. Deploy forwards OPENROUTER_API_KEY for any slash prefix that is not registered and not reserved, including qwen/ and z-ai/. Deploy forwards no inference key for a reserved prefix. openai-api/gpt-4o tells you that openai/gpt-4o still uses OpenRouter. The runtime and reflection catch a routing error and stay in echo mode. (#413)
  • The builder takes sampling parameters from the provider row. OpenRouter and DigitalOcean still send temperature 0.7. Models that match omitTemperatureModels omit temperature: reasoning-style ids such as o1 and gpt-5, and Claude opus, sonnet, or haiku 4.7 and later (dotted or dashed, including 5.x). Explicit Claude 4.7 and later ids are sent as written. Earlier aliases such as claude-opus-4 and claude-sonnet-4 still pin to 4.5 and 4.6. A provider with no defaultParams no longer receives a hardcoded 0.7. The runtime and reflection still pass no temperature. (#413)

Fixed

  • StdioJsonRpcBridge ignores EPIPE and ERR_STREAM_DESTROYED on the builder's stdin when the process exits before stdin.write finishes. The close handler still reports the builder error, and the write is not an uncaught exception. (#418)

#413 wording

Restored the #413 entry to the wording introduced in 3f4d997. Later provider pull requests had rewritten that entry and left the link on #413:

Those two bullets match 3f4d997 again. The other #413 bullets were already unchanged. #414, #415, #416, #418, and #420 keep their own entries and pull request numbers. The restored #413 sentence still describes the prefixes it reserved as not registered yet. Providers that landed after that commit are documented in their own entries. This release does not include a Bedrock provider.

#418 also includes the stdio EPIPE guard for #421. That fix was not in the Unreleased notes, so this release adds a Fixed bullet linked to #418.

Release workflow after merge

.github/workflows/release.yml finds no changesets on this commit, so changesets/action@v1 does not open a Version Packages pull request. It runs npx changeset tag, which creates cast-cli@2.8.0 and cast-tui@2.8.0. The private root package is not tagged.

The action's createGithubReleases input defaults to true, so it also opens GitHub releases for those two package tags. That is the same pair v2.7.0 already published. It does not create v2.8.0.

published is then true. The next step reads the root package.json version (2.8.0) and runs gh release create v2.8.0. That tag does not exist, so this creates it. It does not recreate v2.7.0.

Nothing in that path fails the previous "GitHub Actions is not permitted to create or approve pull requests" check, and nothing creates a second v2.8.0 tag or release. Generated notes start at the second-newest v* tag (v2.6.0), so they include commits already shipped in v2.7.0. That is the same notes range the workflow used for earlier releases.

Open in Web Open in Cursor 

Consume the pending changesets and bump the shared version to 2.8.0
so the main release workflow can tag cast-cli and cast-tui and publish
GitHub release v2.8.0 from the root package version.

Restore the #413 changelog entry to the wording from 3f4d997. Later
provider pulls had rewritten that entry. Note the stdio EPIPE guard
that landed with the Anthropic provider.

Co-authored-by: Scott Miller <scott.miller.utah@gmail.com>
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Test Coverage Report

Component Coverage
No coverage reports available.

Provider smoke: pass (26 passed, 0 failed, 2 skipped)
CLI snapshots: pass (13 passed, 0 failed)
PR vs main: no new failures (0 already failing on main)

@scott
scott marked this pull request as ready for review October 22, 2026 03:51
@scott
scott merged commit a7f8cfc into main Oct 22, 2026
13 checks passed
@scott scott mentioned this pull request Oct 22, 2026
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.

2 participants