Commit graph

161 commits

Author SHA1 Message Date
fabro-releases[bot]
8f120fbf5a Bump version to 0.231.0-nightly.3 2026-05-12 14:13:31 +00:00
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
fabro-releases[bot]
00e5226521 Bump version to 0.231.0-nightly.2 2026-05-12 13:26:27 +00:00
fabro-releases[bot]
cbf81d79fb Bump version to 0.231.0-nightly.1 2026-05-12 12:40:48 +00:00
fabro-releases[bot]
ed602a1ad3 Bump version to 0.231.0-nightly.0
Some checks are pending
Rust / Test (macOS) (push) Waiting to run
Rust / Format (push) Waiting to run
Rust / Clippy (push) Waiting to run
Rust / Generated Docs (push) Waiting to run
Rust / Test (Linux) (push) Waiting to run
2026-05-12 03:52:25 +00:00
Bryan Helmkamp
234bd5663e
Add ACP backend support (#237)
## Summary
Implemented ACP support as a first-class Fabro backend alongside `api`
and `cli`. This adds a new `fabro-acp` crate using the official ACP Rust
crates, routes `backend=\"acp\"` for agent and prompt nodes, adds
sandbox stdio support for local/Docker/test-support paths, emits ACP
workflow events/projections, updates server steerability handling,
validation, documentation, and black-box CLI coverage.

## Test Plan
Passed strict non-live verification:
- `ulimit -n 4096 && cargo nextest run -p fabro-workflow --run-ignored
all --no-fail-fast` — 1162 passed, 0 skipped.
- `ulimit -n 4096 && cargo nextest run -p fabro-acp -p fabro-sandbox -p
fabro-workflow -p fabro-validate -p fabro-store -p fabro-server -p
fabro-cli --run-ignored all --no-fail-fast -E 'not
test(daytona_streaming_live_smoke)'` — 3125 passed.
- `cargo build --workspace` — passed.
- `ulimit -n 4096 && cargo nextest run --workspace --run-ignored all
--no-fail-fast -E 'not test(daytona_streaming_live_smoke)'` — 5666
passed.
- `cargo +nightly-2026-04-14 fmt --check --all` — passed.
- `cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D
warnings` — passed.

Live-environment tests skipped/excluded under explicit user override:
- `daytona_streaming_live_smoke` was excluded from final nextest runs
because it requires live Daytona infrastructure and `DAYTONA_API_KEY`.
- Confirmed with `env -u DAYTONA_API_KEY cargo test -p fabro-sandbox
--features daytona --test daytona_streaming_live
daytona_streaming_live::daytona_streaming_live_smoke -- --ignored
--exact --nocapture`: failed fast with `DAYTONA_API_KEY must be set to
run this live smoke test`.
2026-05-11 23:39:43 -04:00
fabro-releases[bot]
32c974d8f3 Bump version to 0.230.0-nightly.0 2026-05-11 10:28:17 +00:00
Bryan Helmkamp
8b522a057e
Merge remote-tracking branch 'origin/main' 2026-05-10 23:39:34 -04:00
Bryan Helmkamp
6c049dcf88
chore: dump daytona sdk 2026-05-10 10:43:59 -04:00
fabro-releases[bot]
f58f23a545 Bump version to 0.229.0-nightly.0 2026-05-10 09:43:42 +00:00
fabro-releases[bot]
b847bfaa63 Bump version to 0.228.0-nightly.0 2026-05-09 09:43:55 +00:00
Bryan Helmkamp
8f5941aeab
Bump version to 0.227.0 2026-05-08 13:31:23 -07:00
fabro-releases[bot]
d96d19a75f Bump version to 0.227.0-nightly.2 2026-05-08 19:44:39 +00:00
fabro-releases[bot]
0ef1203da4 Bump version to 0.227.0-nightly.0 2026-05-08 09:46:45 +00:00
Bryan Helmkamp
f1c247bc0f
fix(github): refresh installation tokens during workflows
Split PATs from installation access tokens so static configuration cannot accidentally store expiring ghs_* credentials. Workflow command and API agent stages now resolve GITHUB_TOKEN lazily from a refreshable source, while CLI agent stages surface their launch-time refresh limitation.
2026-05-06 07:15:18 -04:00
fabro-releases[bot]
408b5ab79d Bump version to 0.225.0-nightly.0 2026-05-06 10:02:14 +00:00
fabro-releases[bot]
a2fbac1d60 Bump version to 0.224.0-nightly.0 2026-05-05 09:52:01 +00:00
Bryan Helmkamp
88216313bf
perf(sandbox): skip throwaway reqwest::Client in Daytona probe
Two follow-ups that were still costing ~1s per credential probe:

- Bumped the daytona-sdk-rust pin to fa4870f, which deletes a dead
  underscore-prefixed _http_client field on Client. The field was
  unused but new_with_config built a fresh reqwest::Client for it on
  every call, paying the macOS proxy-discovery tax even with our
  injection seam in place.

- build_api_keys_configuration was using Configuration::new() and then
  overwriting cfg.client with our injected client. The Default impl
  generated by openapi-generator builds a reqwest::Client::new() for
  the client field eagerly, which we then threw away — another
  ~470ms hit per probe. Construct the Configuration as a struct
  literal so the injected client is the only one we ever build.

Drops the three credential-probe tests from ~700ms to ~10ms.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 12:48:44 -04:00
Bryan Helmkamp
17f1d1dfeb
perf(sandbox): inject http client into Daytona credential probe
Routes the two reqwest clients in the Daytona credential probe through
fabro_http (system-proxy) in production and fabro_test::test_http_client
(no_proxy) in tests, by threading an http_client parameter through
check_daytona_api_key_with and build_api_keys_configuration. Bumps the
daytona-sdk-rust pin to 314ffd9, which exposes DaytonaConfig::http_client
and ships on reqwest 0.13.

Drops the three credential-probe unit tests from >1s SLOW to ~0.5s by
skipping macOS proxy discovery on the localhost httpmock requests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 12:39:46 -04:00
fabro-releases[bot]
9b0e700a8d Bump version to 0.223.0-nightly.0
Some checks are pending
Rust / Format (push) Waiting to run
Rust / Clippy (push) Waiting to run
Rust / Generated Docs (push) Waiting to run
Rust / Test (Linux) (push) Waiting to run
Rust / Test (macOS) (push) Waiting to run
TypeScript / Typecheck (push) Waiting to run
TypeScript / Test (push) Waiting to run
TypeScript / Build (push) Waiting to run
2026-05-04 03:13:54 +00:00
fabro-releases[bot]
5de3dc89d6 Bump version to 0.221.0-nightly.1
Some checks are pending
Rust / Format (push) Waiting to run
Rust / Clippy (push) Waiting to run
Rust / Generated Docs (push) Waiting to run
Rust / Test (Linux) (push) Waiting to run
Rust / Test (macOS) (push) Waiting to run
TypeScript / Typecheck (push) Waiting to run
TypeScript / Test (push) Waiting to run
TypeScript / Build (push) Waiting to run
2026-05-02 16:45:20 +00:00
fabro-releases[bot]
349200f056 Bump version to 0.221.0-nightly.0 2026-05-02 09:39:00 +00:00
fabro-releases[bot]
376a421645 Bump version to 0.220.0-nightly.2 2026-05-01 18:31:35 +00:00
fabro-releases[bot]
de58474e30 Bump version to 0.220.0-nightly.1 2026-05-01 17:14:41 +00:00
Bryan Helmkamp
78979e5f66
Merge remote-tracking branch 'origin/main' 2026-05-01 08:55:38 -04:00
fabro-releases[bot]
a319177c97 Bump version to 0.220.0-nightly.0 2026-05-01 09:47:13 +00:00
Bryan Helmkamp
165b38c3ed
refactor(workflow): write metadata snapshots with git2
Replace the sandbox-side fast-import metadata writer with an in-process git2 writer that builds metadata commits locally and pushes them with worker-side GitHub credentials. Keep sandbox git probing separate from metadata runtime state so checkpoint commits and metadata snapshots have independent lifecycles.
2026-05-01 00:22:01 -04:00
Bryan Helmkamp
f5f6c76f16
fix(daytona): preserve streamed command semantics 2026-04-30 22:45:37 -04:00
Bryan Helmkamp
d4be6362cb
feat(daytona): stream session command logs 2026-04-30 22:45:37 -04:00
fabro-releases[bot]
86adabf6b6 Bump version to 0.219.0-nightly.0
Some checks are pending
Rust / Format (push) Waiting to run
Rust / Clippy (push) Waiting to run
Rust / Generated Docs (push) Waiting to run
Rust / Test (Linux) (push) Waiting to run
Rust / Test (macOS) (push) Waiting to run
TypeScript / Typecheck (push) Waiting to run
TypeScript / Test (push) Waiting to run
TypeScript / Build (push) Waiting to run
2026-04-30 01:27:32 +00:00
fabro-releases[bot]
46bbac92eb Bump version to 0.218.0-nightly.0 2026-04-29 09:55:40 +00:00
Bryan Helmkamp
a4d9979701
chore(build): reduce dev/test debug info to cut target churn
Set debug = "line-tables-only" and split-debuginfo = "off" for the dev
and test profiles. Keeps backtraces with file/line info but trims local
variable metadata and split-debug artifacts that drive APFS metadata
churn during cargo clean and incremental rebuilds on macOS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 09:42:28 -07:00
fabro-releases[bot]
2880133af2 Bump version to 0.217.0-nightly.0 2026-04-28 10:00:53 +00:00
fabro-releases[bot]
5563369492 Bump version to 0.216.0-nightly.1 2026-04-27 18:50:35 +00:00
fabro-releases[bot]
b7c3ce89ff Bump version to 0.216.0-nightly.0 2026-04-27 16:23:30 +00:00
fabro-releases[bot]
98dd4595ed Bump version to 0.215.0-nightly.0 2026-04-26 09:33:44 +00:00
fabro-releases[bot]
9951f6dcfd Bump version to 0.214.0-nightly.2 2026-04-25 23:25:21 +00:00
fabro-releases[bot]
859d7a3aa7 Bump version to 0.214.0-nightly.1 2026-04-25 14:07:53 +00:00
fabro-releases[bot]
7ea8698dbf Bump version to 0.214.0-nightly.0 2026-04-25 09:30:44 +00:00
Bryan Helmkamp
5e28ec0f82
Merge remote-tracking branch 'origin/main'
# Conflicts:
#	.github/workflows/nightly.yml
#	bin/dev/release.sh
2026-04-24 17:04:55 -04:00
fabro-releases[bot]
dfb1f308e8 Bump version to 0.213.0-nightly.2 2026-04-24 20:38:42 +00:00
Bryan Helmkamp
fc7382ce79
feat(options): add options metadata derive 2026-04-24 16:13:32 -04:00
Bryan Helmkamp
7e64bf8b69
feat(cli): render fatal errors with miette
Wrap root CLI errors at the main boundary so fatal diagnostics use miette's styled renderer while preserving existing telemetry, exit codes, and auth help hints.
2026-04-24 15:35:57 -04:00
fabro-releases[bot]
6dfb3e1a50 Bump version to 0.213.0-nightly.1 2026-04-24 19:18:35 +00:00
Bryan Helmkamp
56de394e01
refactor(redact): extract redaction into dedicated crate
Move secret redaction and DisplaySafeUrl into fabro-redact so credential handling has a narrow ownership boundary. Update direct consumers and docs to depend on fabro_redact instead of fabro_util::redact.
2026-04-24 15:02:23 -04:00
Bryan Helmkamp
828a8c4429
refactor(redact): make credentialed URL logging safe
Add DisplaySafeUrl under fabro-util::redact so URL Display and Debug output redact credentials by default. Migrate token-bearing GitHub, OAuth, server, LLM, sandbox, and workflow paths to use the wrapper at logging/error boundaries while keeping raw URLs explicit for wire and shell transit.
2026-04-24 13:39:34 -04:00
Bryan Helmkamp
80de5ca616 refactor(static): centralize env var names
Add fabro-static::EnvVars as the shared registry for fixed environment variable names and migrate env reads, clap env bindings, and subprocess/test allowlists to use it.

Add clippy bans for raw std::env lookup APIs so future dynamic env facades must be documented explicitly.
2026-04-24 12:29:51 -04:00
fabro-releases[bot]
825dff6142 Bump version to 0.213.0-nightly.0 2026-04-24 09:45:14 +00:00
fabro-releases[bot]
7fd8f5a57b Bump version to 0.212.0-nightly.0 2026-04-23 09:45:03 +00:00
Bryan Helmkamp
4bf0c40319
feat(install): add object-store step to web install 2026-04-22 19:31:09 -04:00