mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-07 03:00:29 +00:00
## Summary This PR moves Fabro’s provider/model catalog toward settings-driven provider identity by replacing the closed provider schema at the API/auth/model boundary with `ProviderId`, then loading built-in provider and model metadata from embedded per-provider TOML files. The immediate result is that built-ins now use the same settings-shaped catalog data that custom providers will use later, while request-serving paths still keep the existing bootstrap/default catalog behavior until the resolved-catalog plumbing lands. ## Changes - Replaces API-facing provider enum usage with string-backed `ProviderId`, including OpenAPI/progenitor replacements and regenerated TypeScript client models. - Routes model, auth, billing, CLI, server, and workflow call sites through provider IDs where they cross product identity boundaries. - Builds `Catalog` from settings-shaped provider/model data with validation for adapter keys, OpenAI-compatible `base_url`, duplicate aliases, provider defaults, disabled entries, model controls, and per-speed cost rows. - Replaces `catalog.json` with embedded provider TOML files under `lib/crates/fabro-model/src/catalog/providers/`. - Adds an explicit `fabro_model::bootstrap_catalog` hatch for setup/install paths and extends the dev policy test to keep bootstrap access contained. - Preserves public training and knowledge-cutoff labels in LLM model settings while still accepting bare TOML dates. ## Verification - `cargo nextest run -p fabro-model -p fabro-config -p fabro-api` — 416 passed - `cargo nextest run -p fabro-dev --features dev bootstrap_catalog_references_stay_in_allowlist` — 1 passed - `cargo +nightly-2026-04-14 fmt --check --all` - `cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D warnings` - `cargo build --workspace` - `git diff --check` --- [](https://github.com/EveryInc/compound-engineering-plugin) 🤖 Generated with GPT-5 via [Codex](https://openai.com/codex)
45 lines
1 KiB
TOML
45 lines
1 KiB
TOML
[package]
|
|
name = "fabro-config"
|
|
edition.workspace = true
|
|
version.workspace = true
|
|
publish = false
|
|
license.workspace = true
|
|
description = "Centralized configuration types for Fabro"
|
|
|
|
[lib]
|
|
doctest = false
|
|
|
|
[features]
|
|
default = []
|
|
clap = ["dep:clap", "fabro-types/clap"]
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
anyhow.workspace = true
|
|
clap = { workspace = true, optional = true }
|
|
chrono.workspace = true
|
|
fabro-macros = { path = "../fabro-macros" }
|
|
fabro-model = { path = "../fabro-model" }
|
|
fabro-options-metadata.workspace = true
|
|
fabro-proc = { path = "../fabro-proc" }
|
|
fabro-static.workspace = true
|
|
fabro-types = { path = "../fabro-types" }
|
|
fabro-util = { path = "../fabro-util" }
|
|
dirs.workspace = true
|
|
ipnet = "2.11.0"
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
strsim = "0.11"
|
|
tempfile = "3"
|
|
toml.workspace = true
|
|
tracing.workspace = true
|
|
tracing-subscriber.workspace = true
|
|
thiserror.workspace = true
|
|
ulid.workspace = true
|
|
|
|
[dev-dependencies]
|
|
toml.workspace = true
|
|
fabro-types = { path = "../fabro-types", features = ["test-support"] }
|
|
temp-env = "0.3"
|