Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/AUTHOR_MAP
Original file line number Diff line number Diff line change
Expand Up @@ -263,3 +263,6 @@ Arlo = Arlo <253300483+xiaoray-blip@users.noreply.github.com>
xyzs996 = Mark Yan <396284+xyzs996@users.noreply.github.com>
xyzs996@gmail.com = Mark Yan <396284+xyzs996@users.noreply.github.com>
Mark Yan = Mark Yan <396284+xyzs996@users.noreply.github.com>
henrikdukefoss = Henrik Bakke Dukefoss <76407537+henrikdukefoss@users.noreply.github.com>
Henrik Bakke Dukefoss = Henrik Bakke Dukefoss <76407537+henrikdukefoss@users.noreply.github.com>
henrikdukef@gmail.com = Henrik Bakke Dukefoss <76407537+henrikdukefoss@users.noreply.github.com>
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,7 @@ launcher guidance.

### Contributors

- **[@henrikdukefoss](https://github.com/henrikdukefoss)** — added the Standard Compute compatible-host descriptor, with live model discovery and its billing basis kept Unknown ([#6985](https://github.com/codewhale-hq/Codewhale/pull/6985)).
- **[@LIghtJUNction](https://github.com/LIghtJUNction)** — plugin shell install and in-TUI plugin OAuth sign-in ([#6950](https://github.com/codewhale-hq/Codewhale/pull/6950)).
- **[@SparkofSpike](https://github.com/SparkofSpike)** — live network-policy updates and goal milestone hand-back ([#6928](https://github.com/codewhale-hq/Codewhale/pull/6928), [#6930](https://github.com/codewhale-hq/Codewhale/pull/6930)), and a relocated Codewhale home ([#6947](https://github.com/codewhale-hq/Codewhale/issues/6947)).
- **[@dajiaohuang](https://github.com/dajiaohuang)** — cache-write token accounting ([#6913](https://github.com/codewhale-hq/Codewhale/pull/6913)).
Expand Down
15 changes: 15 additions & 0 deletions crates/config/assets/provider_descriptors.json
Original file line number Diff line number Diff line change
Expand Up @@ -2227,6 +2227,21 @@
"meituan-sensenova-cn"
]
},
{
"id": "standardcompute",
"label": "Standard Compute",
"wire": "openai-compatible",
"base_url": "https://api.stdcmpt.com/v1",
"api_key_env": "STANDARDCOMPUTE_API_KEY",
"default_model": "standardcompute",
"discovery": "models_endpoint",
"docs_url": "https://docs.standardcompute.com/quickstart",
"credential_url": "https://standardcompute.com/dashboard/api-keys",
"guidance": "OpenAI-compatible host (Chat Completions + GET /v1/models). The standardcompute model id routes each request across models and providers; vendor-prefixed ids such as deepseek/deepseek-v4-pro pin one model. Live /v1/models is the model authority. Store STANDARDCOMPUTE_API_KEY, not a raw key.",
"aliases": [
"standard-compute"
]
},
{
"id": "tsubasa",
"label": "Tsubasa",
Expand Down
16 changes: 15 additions & 1 deletion crates/config/src/descriptors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,20 @@ mod tests {
);
}

#[test]
fn standard_compute_is_a_descriptor_row() {
let row = provider_descriptor("standard-compute").expect("standardcompute");
assert_eq!(row.id, "standardcompute");
assert_eq!(row.wire, DescriptorWire::OpenaiCompatible);
assert_eq!(row.base_url, "https://api.stdcmpt.com/v1");
assert_eq!(row.api_key_env, "STANDARDCOMPUTE_API_KEY");
assert_eq!(row.default_model, "standardcompute");
assert_eq!(
provider_descriptor("standard_compute").map(|row| row.id.as_str()),
Some("standardcompute")
);
}

#[test]
fn descriptors_do_not_embed_model_rosters() {
let raw = DESCRIPTORS_JSON;
Expand Down Expand Up @@ -404,6 +418,6 @@ mod tests {
// reusing its name; compatible-host lookup remains separately scoped.
assert!(provider_descriptor("openai").is_none());
assert!(provider_descriptor("deepseek").is_none());
assert_eq!(bundled_provider_descriptors().len(), 10);
assert_eq!(bundled_provider_descriptors().len(), 11);
}
}
1 change: 1 addition & 0 deletions crates/tui/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,7 @@ launcher guidance.

### Contributors

- **[@henrikdukefoss](https://github.com/henrikdukefoss)** — added the Standard Compute compatible-host descriptor, with live model discovery and its billing basis kept Unknown ([#6985](https://github.com/codewhale-hq/Codewhale/pull/6985)).
- **[@LIghtJUNction](https://github.com/LIghtJUNction)** — plugin shell install and in-TUI plugin OAuth sign-in ([#6950](https://github.com/codewhale-hq/Codewhale/pull/6950)).
- **[@SparkofSpike](https://github.com/SparkofSpike)** — live network-policy updates and goal milestone hand-back ([#6928](https://github.com/codewhale-hq/Codewhale/pull/6928), [#6930](https://github.com/codewhale-hq/Codewhale/pull/6930)), and a relocated Codewhale home ([#6947](https://github.com/codewhale-hq/Codewhale/issues/6947)).
- **[@dajiaohuang](https://github.com/dajiaohuang)** — cache-write token accounting ([#6913](https://github.com/codewhale-hq/Codewhale/pull/6913)).
Expand Down
2 changes: 1 addition & 1 deletion crates/tui/src/pricing/default_coverage_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ fn shipped_default_routes_have_reviewed_pricing_coverage() {
assert_eq!(built_in_count, 51, "review changed shipped-default breadth");
assert_eq!(
defaults.len() - built_in_count,
10,
11,
"review compatible-default breadth"
);
let recorded_at = Utc.with_ymd_and_hms(2026, 9, 8, 12, 0, 0).unwrap();
Expand Down
3 changes: 2 additions & 1 deletion crates/tui/src/pricing/default_coverage_unpriced.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
},
{
"reason": "unknown_billing_basis",
"review": "No mode/credential product is supplied. Both MiniMax dialects share a PAYG/plan endpoint that cannot prove product (route_billing.rs:253,402; pricing.rs:534); Ollama Cloud is unclassified possible spend, not local/free (pricing.rs:411). Generic Custom and nine non-Baseten compatible defaults are transport descriptors without a reviewed product; production envelope refuses Unknown at cost_status.rs:239. AICraft is the sixth compatible default: dc170add3 restored its row from the closed PR #6171 with endpoint, credential env and bootstrap model only, and no billing product or pricing row was reviewed for it. Its default is claude-4.6-sonnet, which has no bundled/hand row either; that omission is recorded here on the shape of the descriptor, and a real source review of AICraft's billing basis is still owed. Tsubasa (#6695) is the seventh: endpoint, credential env and bootstrap model tsubasa-pro only; its public site lists prepaid-credit per-token rates, but no pricing row was reviewed or frozen for it, so it stays Unknown here too. Yolo-Auto is the eighth: its row carries endpoint, credential env and bootstrap model (qwen3.8-flash, the vendor's recommended start model on free and paid plans) only, the gateway sells flat-rate subscription tiers with no published per-token catalog to review, and the URL proves no plan product, so the route stays Unknown rather than being guessed into subscription or local-no-bill; a source review of Yolo-Auto's billing basis is owed. Cheaper Inference is the ninth non-Baseten compatible default: its gpt-5.4-mini bootstrap model and API endpoint do not establish a billing product or reviewed price, so it also remains Unknown. ChatGPT source review: the official API endpoint alone does not prove a ChatGPT plan product. route_billing.rs capture_product requires the Config's owned official registration for Subscription; the offline default inventory has none and remains Unknown. The retired backend endpoint supplies no transport or billing authority.",
"review": "No mode/credential product is supplied. Both MiniMax dialects share a PAYG/plan endpoint that cannot prove product (route_billing.rs:253,402; pricing.rs:534); Ollama Cloud is unclassified possible spend, not local/free (pricing.rs:411). Generic Custom and ten non-Baseten compatible defaults are transport descriptors without a reviewed product; production envelope refuses Unknown at cost_status.rs:239. AICraft is the sixth compatible default: dc170add3 restored its row from the closed PR #6171 with endpoint, credential env and bootstrap model only, and no billing product or pricing row was reviewed for it. Its default is claude-4.6-sonnet, which has no bundled/hand row either; that omission is recorded here on the shape of the descriptor, and a real source review of AICraft's billing basis is still owed. Tsubasa (#6695) is the seventh: endpoint, credential env and bootstrap model tsubasa-pro only; its public site lists prepaid-credit per-token rates, but no pricing row was reviewed or frozen for it, so it stays Unknown here too. Yolo-Auto is the eighth: its row carries endpoint, credential env and bootstrap model (qwen3.8-flash, the vendor's recommended start model on free and paid plans) only, the gateway sells flat-rate subscription tiers with no published per-token catalog to review, and the URL proves no plan product, so the route stays Unknown rather than being guessed into subscription or local-no-bill; a source review of Yolo-Auto's billing basis is owed. Cheaper Inference is the ninth non-Baseten compatible default: its gpt-5.4-mini bootstrap model and API endpoint do not establish a billing product or reviewed price, so it also remains Unknown. Standard Compute is the tenth: its row carries endpoint, credential env and the standardcompute router id only; the gateway sells flat monthly plans with a per-plan compute budget, and neither the URL nor the router id proves a plan product or per-request price, so the route stays Unknown. ChatGPT source review: the official API endpoint alone does not prove a ChatGPT plan product. route_billing.rs capture_product requires the Config's owned official registration for Subscription; the offline default inventory has none and remains Unknown. The retired backend endpoint supplies no transport or billing authority.",
"routes": [
["aicraft", "claude-4.6-sonnet", "https://aicraftapi.com/v1", "chat_completions", "unknown"],
["cerebras", "llama-3.3-70b", "https://api.cerebras.ai/v1", "chat_completions", "unknown"],
Expand All @@ -50,6 +50,7 @@
["ollama-cloud", "gpt-oss:120b", "https://ollama.com/v1", "chat_completions", "unknown"],
["openai-codex", "gpt-5.6", "https://api.openai.com/v1", "responses", "unknown"],
["sensenova", "deepseek-v4-flash", "https://token.sensenova.cn/v1", "chat_completions", "unknown"],
["standardcompute", "standardcompute", "https://api.stdcmpt.com/v1", "chat_completions", "unknown"],
["tsubasa", "tsubasa-pro", "https://api.tsubasa.sh/v1", "chat_completions", "unknown"],
["yolo-auto", "qwen3.8-flash", "https://yolo-auto.com/v1", "chat_completions", "unknown"]
]
Expand Down
1 change: 1 addition & 0 deletions docs/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ changelog or release notes, and this contributor record.

**Contributions**

- **[Henrik Bakke Dukefoss / henrikdukefoss](https://github.com/henrikdukefoss)** — added the Standard Compute compatible-host descriptor, with live model discovery and its billing basis kept Unknown ([#6985](https://github.com/codewhale-hq/Codewhale/pull/6985)).
- **[Sh1Zuku / SparkofSpike](https://github.com/SparkofSpike)** — live network-policy updates and goal milestone hand-back ([#6928](https://github.com/codewhale-hq/Codewhale/pull/6928), [#6930](https://github.com/codewhale-hq/Codewhale/pull/6930)), and a Codewhale home reached through a symlink or junction ([#6947](https://github.com/codewhale-hq/Codewhale/issues/6947)).
- **[dajiaohuang](https://github.com/dajiaohuang)** — cache-write token accounting, with missing and explicit-zero usage preserved ([#6913](https://github.com/codewhale-hq/Codewhale/pull/6913)).
- **[gaord](https://github.com/gaord)** — embedder-declared telemetry surface support without changing collection policy ([#6916](https://github.com/codewhale-hq/Codewhale/pull/6916)).
Expand Down
10 changes: 10 additions & 0 deletions docs/PROVIDERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ against the vendor's own docs before trusting any value here:
| Tsubasa | `https://api.tsubasa.sh/v1` | `tsubasa-pro`, `tsubasa-fast` (32,768-token context) | `TSUBASA_API_KEY` |
| Cheaper Inference | `https://api.cheaperinference.com/v1` | `gpt-5.4-mini`, `claude-sonnet-5`, `gemini-3.1-pro` | `CHEAPER_INFERENCE_API_KEY` |
| Yolo-Auto | `https://yolo-auto.com/v1` | `qwen3.8-flash`; `yolo` / `yolo-small` | `YOLO_AUTO_API_KEY` |
| Standard Compute | `https://api.stdcmpt.com/v1` | `standardcompute` (router); `deepseek/deepseek-v4-pro`, `anthropic/claude-sonnet-5.5` | `STANDARDCOMPUTE_API_KEY` |

AICraft's roster spans DeepSeek, Anthropic Claude, Google Gemini, Qwen, GLM,
MiniMax and Doubao ids on its OpenAI-compatible endpoint. The authority is
Expand All @@ -65,6 +66,15 @@ Pricing varies by model and route; consult the provider’s current catalog.
The authority is `GET https://api.cheaperinference.com/v1/models` with your key.
Docs: <https://cheaperinference.com/docs>.

Standard Compute offers flat monthly plans with a compute budget. By default,
requests return HTTP 402 when it is used; eligible plans can enable Pay as you go
to continue with additional prepaid charges. See its
[budget policy](https://docs.standardcompute.com/budgets-and-limits).
The `standardcompute` model id routes each request across models and providers;
vendor-prefixed ids such as `deepseek/deepseek-v4-pro` pin one model. The
authority is `GET https://api.stdcmpt.com/v1/models`.
Docs: <https://docs.standardcompute.com/quickstart>.

OpenCode Zen and OpenCode Go are first-class provider routes, configured like
any other provider below; they are not part of this table. In `/provider`,
type to filter the list (letters not bound to a row action); `Ctrl+T` probes the
Expand Down
2 changes: 2 additions & 0 deletions docs/zh_hans/PROVIDERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ DeepSeek 仍是默认提供商,但 `ProviderKind::ALL` 中的每个条目都
| Tsubasa | `https://api.tsubasa.sh/v1` | `tsubasa-pro`, `tsubasa-fast`(32,768 token 上下文) | `TSUBASA_API_KEY` |
| Yolo-Auto | `https://yolo-auto.com/v1` | `qwen3.8-flash`;`yolo` / `yolo-small` | `YOLO_AUTO_API_KEY` |
| Cheaper Inference | `https://api.cheaperinference.com/v1` | `gpt-5.4-mini`、`claude-sonnet-5`、`gemini-3.1-pro` | `CHEAPER_INFERENCE_API_KEY` |
| Standard Compute | `https://api.stdcmpt.com/v1` | `standardcompute`(路由);`deepseek/deepseek-v4-pro`、`anthropic/claude-sonnet-5.5` | `STANDARDCOMPUTE_API_KEY` |

AICraft 的 OpenAI 兼容端点提供 DeepSeek、Anthropic Claude、Google Gemini、Qwen、GLM、MiniMax 和 Doubao 的模型 ID。权威来源是带上你的密钥请求 `GET https://aicraftapi.com/v1/models` 的结果:请从该列表中选择模型,而不是从上表中选。
Tsubasa 只实现了 `GET /v1/models` 和 Chat Completions。它的两个公开模型 ID 共用 32,768 token 的上下文,小于 Codewhale 对未知模型假定的 128,000 token,因此保存后请在该路由上设置:
`codewhale config set providers.tsubasa.context_window 32768`。
Cheaper Inference 是 OpenAI 兼容网关,模型 ID 不带前缀(例如 `gpt-5.4-mini`、`claude-sonnet-5`),以带密钥请求 `GET https://api.cheaperinference.com/v1/models` 的结果为准;价格随模型和路由而变,请以提供商的实时目录为准。
Standard Compute 提供按月固定套餐和算力预算。默认情况下,预算用尽后请求返回 HTTP 402;符合条件的套餐可启用按量付费,通过额外预付费用继续请求,详见其[预算政策](https://docs.standardcompute.com/budgets-and-limits)。模型 ID `standardcompute` 会在多个模型和提供商之间路由每个请求;带厂商前缀的 ID(例如 `deepseek/deepseek-v4-pro`)则固定使用单个模型,以 `GET https://api.stdcmpt.com/v1/models` 的结果为准。
OpenCode Zen 和 OpenCode Go 是一等提供商路由,配置方式与下文其他提供商相同;它们不在上表之列。在 `/provider` 中,直接输入即可筛选列表(未绑定行操作的字母);`Ctrl+T` 探测所选行的 `/models`,只记录可达性(2xx 并不代表模型可用)。

需要保持同步的来源:
Expand Down
8 changes: 4 additions & 4 deletions web/data/agent-docs.generated.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions web/lib/release-credits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

/** Contributors whose PRs were merged or harvested into this release. */
export const RELEASE_CONTRIBUTORS: string[] = [
"@henrikdukefoss",
"@SparkofSpike",
"@dajiaohuang",
"@gaord",
Expand Down
Loading