fabro/lib/crates
fabro-sh-0530[bot] 10de9fd16c
Add foundation for settings-driven LLM catalog (#207)
## Summary

This lays the groundwork for settings-driven LLM providers and models
without switching production routing yet. The new schemas and shared
vocabulary let later catalog construction treat provider/model identity
as data while keeping adapter behavior and control values Rust-owned.

## What changed

- Added `[llm.providers]` and `[llm.models]` settings layers with sparse
per-entry merging, whole-array replacement for credential/alias/control
lists, TOML date support for `knowledge_cutoff`, and typed `credential:`
/ `env:` references that reject literal secrets.
- Added `ProviderId`, `ModelId`, and a shared `ReasoningEffort` enum in
`fabro-model`, plus adapter metadata for `anthropic`, `openai`,
`gemini`, and `openai_compatible`.
- Added a matching `fabro-llm` adapter factory registry with parity
tests to keep metadata keys and factory keys in sync.
- Added `[run.model.controls]` defaults through config resolution and
runtime settings types.
- Added a workspace policy test to prevent future `bootstrap_catalog`
use outside install/test-support paths.

### Plan Summary

- This is the foundation slice of the settings-driven catalog plan.
- Production still uses the existing `Provider` enum and
`Catalog::builtin()` call paths.
- ProviderId routing, OpenAPI regeneration, auth resolver changes,
resolved `Arc<Catalog>` injection, typed request speed, and per-speed
billing are deferred follow-ups.

⚒️ Generated with [Fabro](https://fabro.sh)

---------

Co-authored-by: Fabro <noreply@fabro.sh>
Co-authored-by: fabro-bot <fabro-bot@fabro.sh>
Co-authored-by: Bryan Helmkamp <bryan@brynary.com>
2026-05-12 10:01:57 -04:00
..
build-support fix(build): refresh embedded git sha on branch commits 2026-05-09 14:10:04 -04:00
fabro-acp fix(acp): tolerate clean stdio exit after final response 2026-05-12 09:03:53 -04:00
fabro-agent Add ACP backend support (#237) 2026-05-11 23:39:43 -04:00
fabro-api refactor(types): remove legacy run summary shape 2026-05-10 23:29:41 -04:00
fabro-auth refactor(api): unify secret metadata types 2026-04-29 20:26:13 -04:00
fabro-checkpoint Make git metadata sandbox-native 2026-04-27 21:43:15 -07:00
fabro-cli Add foundation for settings-driven LLM catalog (#207) 2026-05-12 10:01:57 -04:00
fabro-client feat(cli): add Fabro MCP server (#236) 2026-05-11 18:20:50 -04:00
fabro-config Add foundation for settings-driven LLM catalog (#207) 2026-05-12 10:01:57 -04:00
fabro-core Cancel in-flight agent stages with CancellationToken (#211) 2026-05-05 09:54:22 -04:00
fabro-dev Add foundation for settings-driven LLM catalog (#207) 2026-05-12 10:01:57 -04:00
fabro-devcontainer refactor(static): centralize env var names 2026-04-24 12:29:51 -04:00
fabro-dump feat(api): unify public run shape 2026-05-10 20:48:55 -04:00
fabro-github fix(github): refresh installation tokens during workflows 2026-05-06 07:15:18 -04:00
fabro-graphviz refactor: simplify Rust review cleanup 2026-05-02 15:41:17 -04:00
fabro-hooks fix(github): refresh installation tokens during workflows 2026-05-06 07:15:18 -04:00
fabro-http refactor(static): centralize env var names 2026-04-24 12:29:51 -04:00
fabro-install fix(server): default foreground logs to stdout 2026-05-06 12:41:52 -04:00
fabro-interview Wire end-to-end steering for running agents (#209) 2026-05-05 15:34:16 -04:00
fabro-llm Add foundation for settings-driven LLM catalog (#207) 2026-05-12 10:01:57 -04:00
fabro-macros refactor(dev): simplify generated docs tooling 2026-04-24 18:41:00 -04:00
fabro-manifest Add foundation for settings-driven LLM catalog (#207) 2026-05-12 10:01:57 -04:00
fabro-mcp feat(cli): add Fabro MCP server (#236) 2026-05-11 18:20:50 -04:00
fabro-mcp-server feat(cli): add Fabro MCP server (#236) 2026-05-11 18:20:50 -04:00
fabro-model Add foundation for settings-driven LLM catalog (#207) 2026-05-12 10:01:57 -04:00
fabro-oauth fix(error): preserve remaining error context 2026-05-02 10:51:15 -04:00
fabro-options-metadata refactor(dev): simplify generated docs tooling 2026-04-24 18:41:00 -04:00
fabro-proc refactor(static): centralize env var names 2026-04-24 12:29:51 -04:00
fabro-redact refactor(integrations): make chat integrations Slack-only 2026-05-09 11:43:16 -04:00
fabro-sandbox fix(acp): tolerate clean stdio exit after final response 2026-05-12 09:03:53 -04:00
fabro-server Add ACP backend support (#237) 2026-05-11 23:39:43 -04:00
fabro-slack refactor: simplify auth and actor handling 2026-05-02 11:44:17 -04:00
fabro-spa feat(dev): gitignore embedded spa assets 2026-04-26 21:31:11 -04:00
fabro-static fix(server): preserve worker terminal color env 2026-05-06 15:54:00 -04:00
fabro-store Add ACP backend support (#237) 2026-05-11 23:39:43 -04:00
fabro-telemetry refactor(workflow): remove retro stage (#230) 2026-05-09 10:18:20 -04:00
fabro-template feat(cli): support sparse input overrides (#222) 2026-05-09 10:00:35 -04:00
fabro-test feat(cli): add Fabro MCP server (#236) 2026-05-11 18:20:50 -04:00
fabro-tracker fix(github): refresh installation tokens during workflows 2026-05-06 07:15:18 -04:00
fabro-types Add foundation for settings-driven LLM catalog (#207) 2026-05-12 10:01:57 -04:00
fabro-util refactor(error): drop String error shims and DisplayContains test traits 2026-05-01 19:35:22 -04:00
fabro-validate Add ACP backend support (#237) 2026-05-11 23:39:43 -04:00
fabro-vault refactor(api): unify secret metadata types 2026-04-29 20:26:13 -04:00
fabro-workflow Add ACP backend support (#237) 2026-05-11 23:39:43 -04:00