chore(release): bump version to 1.42.0 (minor) (#10295)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jack Amadeo <jackamadeo@squareup.com>
This commit is contained in:
github-actions[bot]
2026-07-08 11:43:50 -07:00
committed by GitHub
parent be521ff8b2
commit e6be2e9392
10 changed files with 2799 additions and 786 deletions
Generated
+6 -6
View File
@@ -4908,7 +4908,7 @@ dependencies = [
[[package]]
name = "goose"
version = "1.41.0"
version = "1.42.0"
dependencies = [
"agent-client-protocol",
"agent-client-protocol-http",
@@ -5045,7 +5045,7 @@ dependencies = [
[[package]]
name = "goose-acp-macros"
version = "1.41.0"
version = "1.42.0"
dependencies = [
"quote",
"syn 2.0.118",
@@ -5053,7 +5053,7 @@ dependencies = [
[[package]]
name = "goose-cli"
version = "1.41.0"
version = "1.42.0"
dependencies = [
"anstream",
"anyhow",
@@ -5157,7 +5157,7 @@ dependencies = [
[[package]]
name = "goose-mcp"
version = "1.41.0"
version = "1.42.0"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -5278,7 +5278,7 @@ dependencies = [
[[package]]
name = "goose-test"
version = "1.41.0"
version = "1.42.0"
dependencies = [
"clap",
"serde_json",
@@ -5286,7 +5286,7 @@ dependencies = [
[[package]]
name = "goose-test-support"
version = "1.41.0"
version = "1.42.0"
dependencies = [
"axum",
"env-lock",
+1 -1
View File
@@ -8,7 +8,7 @@ resolver = "2"
[workspace.package]
edition = "2021"
version = "1.41.0"
version = "1.42.0"
rust-version = "1.94.1"
authors = ["AAIF <ai-oss-tools@block.xyz>"]
license = "Apache-2.0"
+3 -3
View File
@@ -28,7 +28,7 @@ impl ModelMapping {
///
/// This avoids network calls by looking up all known models for the provider,
/// filtering to text-input + tool-calling models, and sorting by release date.
/// The returned names are the canonical short names (e.g. "claude-3.5-sonnet").
/// The returned names are the canonical short names (e.g. "claude-sonnet-4.5").
///
/// TODO: This trades speed for correctness — the canonical registry may not perfectly
/// match what the provider API returns (new models not yet in the registry, deprecated
@@ -110,8 +110,8 @@ mod tests {
#[test]
fn cloud_provider_retains_cost() {
let canonical = maybe_get_canonical_model("anthropic", "claude-3-5-sonnet-20241022")
.expect("claude-3.5-sonnet should resolve");
let canonical = maybe_get_canonical_model("anthropic", "claude-sonnet-4-5-20250929")
.expect("claude-sonnet-4.5 should resolve");
assert!(canonical.cost.input.is_some());
assert!(canonical.cost.output.is_some());
}
@@ -1,8 +1,8 @@
# Canonical Model System
Provides a unified view of model metadata (pricing, capabilities, context limits) across different LLM providers.
Normalizes provider-specific model names (e.g., `claude-3-5-sonnet-20241022`)
to canonical IDs (e.g., `anthropic/claude-3.5-sonnet`).
Normalizes provider-specific model names (e.g., `claude-sonnet-4-5-20250929`)
to canonical IDs (e.g., `anthropic/claude-sonnet-4.5`).
## Build Canonical Models
Fetches latest model metadata from OpenRouter and validates provider mappings:
File diff suppressed because it is too large Load Diff
@@ -52,7 +52,7 @@
"env": [
"DASHSCOPE_API_KEY"
],
"model_count": 83
"model_count": 84
},
{
"id": "alibaba-coding-plan",
@@ -285,7 +285,7 @@
"env": [
"DIGITALOCEAN_ACCESS_TOKEN"
],
"model_count": 80
"model_count": 82
},
{
"id": "dinference",
@@ -362,7 +362,7 @@
"env": [
"FRIENDLI_TOKEN"
],
"model_count": 7
"model_count": 6
},
{
"id": "frogbot",
@@ -384,7 +384,7 @@
"env": [
"GITHUB_TOKEN"
],
"model_count": 23
"model_count": 25
},
{
"id": "github-models",
@@ -439,7 +439,7 @@
"env": [
"HF_TOKEN"
],
"model_count": 50
"model_count": 51
},
{
"id": "iflowcn",
@@ -507,6 +507,17 @@
],
"model_count": 61
},
{
"id": "kenari",
"display_name": "Kenari",
"npm": "@ai-sdk/openai-compatible",
"api": "https://kenari.id/v1",
"doc": "https://kenari.id/docs",
"env": [
"KENARI_API_KEY"
],
"model_count": 23
},
{
"id": "kilo",
"display_name": "Kilo Gateway",
@@ -516,7 +527,7 @@
"env": [
"KILO_API_KEY"
],
"model_count": 345
"model_count": 346
},
{
"id": "kimi-for-coding",
@@ -560,7 +571,7 @@
"env": [
"LLMGATEWAY_API_KEY"
],
"model_count": 182
"model_count": 180
},
{
"id": "llmtr",
@@ -584,6 +595,17 @@
],
"model_count": 3
},
{
"id": "longcat",
"display_name": "LongCat",
"npm": "@ai-sdk/openai-compatible",
"api": "https://api.longcat.chat/openai",
"doc": "https://longcat.chat/platform/docs/",
"env": [
"LONGCAT_API_KEY"
],
"model_count": 1
},
{
"id": "lucidquery",
"display_name": "LucidQuery",
@@ -836,7 +858,7 @@
"env": [
"OPENCODE_API_KEY"
],
"model_count": 74
"model_count": 75
},
{
"id": "opencode-go",
@@ -1058,7 +1080,7 @@
"env": [
"STEPFUN_API_KEY"
],
"model_count": 5
"model_count": 8
},
{
"id": "stepfun-ai",
@@ -1069,18 +1091,18 @@
"env": [
"STEPFUN_API_KEY"
],
"model_count": 2
"model_count": 8
},
{
"id": "subconscious",
"display_name": "Subconscious",
"npm": "@ai-sdk/openai-compatible",
"npm": "@ai-sdk/anthropic",
"api": "https://api.subconscious.dev/v1",
"doc": "https://docs.subconscious.dev",
"env": [
"SUBCONSCIOUS_API_KEY"
],
"model_count": 1
"model_count": 2
},
{
"id": "submodel",
@@ -1115,6 +1137,17 @@
],
"model_count": 8
},
{
"id": "tencent-token-plan",
"display_name": "Tencent Token Plan",
"npm": "@ai-sdk/openai-compatible",
"api": "https://api.lkeap.cloud.tencent.com/plan/v3",
"doc": "https://cloud.tencent.com/document/product/1823/130060",
"env": [
"TENCENT_TOKEN_PLAN_API_KEY"
],
"model_count": 1
},
{
"id": "tencent-tokenhub",
"display_name": "Tencent TokenHub",
@@ -1124,7 +1157,7 @@
"env": [
"TENCENT_TOKENHUB_API_KEY"
],
"model_count": 1
"model_count": 2
},
{
"id": "the-grid-ai",
@@ -1148,6 +1181,17 @@
],
"model_count": 7
},
{
"id": "trustedrouter",
"display_name": "TrustedRouter",
"npm": "@ai-sdk/openai-compatible",
"api": "https://api.trustedrouter.com/v1",
"doc": "https://trustedrouter.com/docs",
"env": [
"TRUSTEDROUTER_API_KEY"
],
"model_count": 7
},
{
"id": "umans-ai",
"display_name": "Umans AI",
@@ -1190,7 +1234,7 @@
"env": [
"VIVGRID_API_KEY"
],
"model_count": 13
"model_count": 14
},
{
"id": "vultr",
@@ -1201,7 +1245,7 @@
"env": [
"VULTR_API_KEY"
],
"model_count": 7
"model_count": 10
},
{
"id": "wafer.ai",
@@ -1245,7 +1289,7 @@
"env": [
"XIAOMI_API_KEY"
],
"model_count": 8
"model_count": 7
},
{
"id": "xiaomi-token-plan-cn",
@@ -1256,7 +1300,7 @@
"env": [
"XIAOMI_API_KEY"
],
"model_count": 8
"model_count": 7
},
{
"id": "xiaomi-token-plan-sgp",
@@ -1267,7 +1311,7 @@
"env": [
"XIAOMI_API_KEY"
],
"model_count": 8
"model_count": 7
},
{
"id": "xpersona",
@@ -1278,7 +1322,7 @@
"env": [
"XPERSONA_API_KEY"
],
"model_count": 2
"model_count": 3
},
{
"id": "zai",
@@ -1322,7 +1366,7 @@
"env": [
"ZENMUX_API_KEY"
],
"model_count": 112
"model_count": 114
},
{
"id": "zhipuai",
@@ -329,8 +329,8 @@ mod tests {
// === Direct provider (non-hosting) ===
assert_eq!(
map_to_canonical_model("anthropic", "claude-3-5-sonnet-20241022", r),
Some("anthropic/claude-3.5-sonnet".to_string())
map_to_canonical_model("anthropic", "claude-sonnet-4-5-20250929", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
assert_eq!(
map_to_canonical_model("openai", "gpt-4o-latest", r),
@@ -353,22 +353,22 @@ mod tests {
// === Anthropic Claude - basic ===
assert_eq!(
map_to_canonical_model("databricks", "claude-3-5-sonnet", r),
Some("anthropic/claude-3.5-sonnet".to_string())
map_to_canonical_model("databricks", "claude-sonnet-4-5", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
assert_eq!(
map_to_canonical_model("databricks", "claude-3-5-sonnet-20241022", r),
Some("anthropic/claude-3.5-sonnet".to_string())
map_to_canonical_model("databricks", "claude-sonnet-4-5-20250929", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
assert_eq!(
map_to_canonical_model("databricks", "claude-3-5-sonnet-latest", r),
Some("anthropic/claude-3.5-sonnet".to_string())
map_to_canonical_model("databricks", "claude-sonnet-4-5-latest", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
// 4.x: {version}-{model} → {model}-{version}
assert_eq!(
map_to_canonical_model("databricks", "claude-4-sonnet", r),
Some("anthropic/claude-sonnet-4".to_string())
map_to_canonical_model("databricks", "claude-sonnet-4-5", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
// 4.x with minor version + prefix stripping
@@ -379,16 +379,16 @@ mod tests {
// === Claude with platform suffixes ===
assert_eq!(
map_to_canonical_model("databricks", "claude-4-sonnet-bedrock", r),
Some("anthropic/claude-sonnet-4".to_string())
map_to_canonical_model("databricks", "claude-sonnet-4-5-bedrock", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
assert_eq!(
map_to_canonical_model("databricks", "goose-claude-4-sonnet-bedrock", r),
Some("anthropic/claude-sonnet-4".to_string())
map_to_canonical_model("databricks", "goose-claude-sonnet-4-5-bedrock", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
assert_eq!(
map_to_canonical_model("bedrock", "claude-3-5-sonnet", r),
Some("anthropic/claude-3.5-sonnet".to_string())
map_to_canonical_model("bedrock", "claude-sonnet-4-5", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
assert_eq!(
map_to_canonical_model("aws_bedrock", "global.anthropic.claude-sonnet-5", r),
@@ -494,8 +494,8 @@ mod tests {
// === Provider-prefixed extraction ===
assert_eq!(
map_to_canonical_model("databricks", "anthropic-claude-3-5-sonnet", r),
Some("anthropic/claude-3.5-sonnet".to_string())
map_to_canonical_model("databricks", "anthropic-claude-sonnet-4-5", r),
Some("anthropic/claude-sonnet-4.5".to_string())
);
assert_eq!(
map_to_canonical_model("databricks", "openai-gpt-4o", r),
@@ -1395,7 +1395,7 @@ mod tests {
("ANTHROPIC_PRESERVE_THINKING_CONTEXT", None::<&str>),
]);
let mut config = cfg_with_effort("claude-3-7-sonnet-20250219", "high");
let mut config = cfg_with_effort("claude-sonnet-4-5-20250929", "high");
config.max_tokens = Some(64000);
let messages = vec![Message::user().with_text("Hello")];
@@ -1417,7 +1417,7 @@ mod tests {
("ANTHROPIC_PRESERVE_THINKING_CONTEXT", None::<&str>),
]);
let mut config = cfg_with_effort("claude-3-7-sonnet-20250219", "high");
let mut config = cfg_with_effort("claude-sonnet-4-5-20250929", "high");
let messages = vec![Message::user().with_text("Hello")];
// Budget larger than max_tokens is clamped to leave room for a response.
@@ -1769,12 +1769,12 @@ mod tests {
);
// Non-adaptive Claude with effort → enabled
assert_eq!(
thinking_type(&cfg_with_effort("claude-3-7-sonnet-20250219", "high")),
thinking_type(&cfg_with_effort("claude-sonnet-4-5-20250929", "high")),
ThinkingType::Enabled
);
// Non-adaptive Claude with off → disabled
assert_eq!(
thinking_type(&cfg_with_effort("claude-3-7-sonnet-20250219", "off")),
thinking_type(&cfg_with_effort("claude-sonnet-4-5-20250929", "off")),
ThinkingType::Disabled
);
}
@@ -1833,7 +1833,7 @@ mod tests {
ThinkingType::Disabled
);
assert_eq!(
thinking_type(&cfg_with_effort("claude-3-7-sonnet-20250219", "off")),
thinking_type(&cfg_with_effort("claude-sonnet-4-5-20250929", "off")),
ThinkingType::Disabled
);
}
@@ -1317,7 +1317,7 @@ mod tests {
#[test]
fn test_create_request_enabled_thinking_with_budget() -> anyhow::Result<()> {
let mut model_config = ModelConfig::new("databricks-claude-3-7-sonnet");
let mut model_config = ModelConfig::new("databricks-claude-sonnet-4.5");
model_config.max_tokens = Some(4096);
let mut params = std::collections::HashMap::new();
params.insert("thinking_effort".to_string(), serde_json::json!("high"));
@@ -1342,7 +1342,7 @@ mod tests {
("high", 16000),
("max", 32000),
] {
let mut model_config = ModelConfig::new("databricks-claude-3-7-sonnet");
let mut model_config = ModelConfig::new("databricks-claude-sonnet-4.5");
model_config.max_tokens = Some(4096);
let mut params = std::collections::HashMap::new();
params.insert("thinking_effort".to_string(), serde_json::json!(effort));
@@ -1361,7 +1361,7 @@ mod tests {
#[test]
fn test_response_to_message_claude_thinking() -> anyhow::Result<()> {
let response = json!({
"model": "us.anthropic.claude-3-7-sonnet-20250219-v1:0",
"model": "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
"choices": [{
"message": {
"role": "assistant",
@@ -1409,7 +1409,7 @@ mod tests {
#[test]
fn test_response_to_message_claude_encrypted_thinking() -> anyhow::Result<()> {
let response = json!({
"model": "claude-3-7-sonnet-20250219",
"model": "claude-sonnet-4-5-20250929",
"choices": [{
"message": {
"role": "assistant",
@@ -1554,7 +1554,7 @@ mod tests {
#[test]
fn test_is_claude_model() {
assert!(is_claude_model("databricks-claude-sonnet-4"));
assert!(is_claude_model("databricks-claude-3-7-sonnet"));
assert!(is_claude_model("databricks-claude-sonnet-4.5"));
assert!(is_claude_model("claude-sonnet-4"));
assert!(is_claude_model("goose-claude-sonnet"));
assert!(!is_claude_model("gpt-4o"));
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "goose-app",
"productName": "Goose",
"version": "1.41.0",
"version": "1.42.0",
"description": "Goose App",
"engines": {
"node": "^24.10.0",