Commit graph

4075 commits

Author SHA1 Message Date
Bryan Helmkamp
3c6a26e8c2
Merge pull request #607 from fabro-sh/feat/shared-checkout-parallel
Shared-checkout parallel execution
2026-07-24 09:33:03 -04:00
Bryan Helmkamp
7e89cb2bb3
Merge pull request #611 from fabro-sh/fix/validate-model-reasoning-effort
Return 400 for unsupported reasoning effort
2026-07-24 09:27:44 -04:00
Bryan Helmkamp
ac62585eb7
fix parallel result artifact handling 2026-07-24 09:26:22 -04:00
Bryan Helmkamp
13876edc44
Merge pull request #608 from fabro-sh/fix/linear-event-history-pagination
Make full event history traversal linear
2026-07-24 09:25:38 -04:00
Release Repro
aa67a231c4
Merge origin/main into fix/validate-model-reasoning-effort
Resolves conflicts with main's typed reasoning_effort field (#609) and
the usage-buckets test (#616). The handler's manual string parse is
superseded by serde-level validation of the typed enum, so it is
removed along with its test; the client-side unsupported-effort
validation and 400 error mapping from this branch are kept.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 09:24:07 -04:00
Bryan Helmkamp
4c7d13aff0
fix(store): enforce event sequence key limit 2026-07-24 09:18:43 -04:00
Bryan Helmkamp
d611da345b
Clarify non-validation LLM error mapping 2026-07-24 09:13:26 -04:00
Bryan Helmkamp
f2a8b4e989
Merge pull request #616 from fabro-sh/codex/expose-completion-token-usage
Expose detailed completion token usage
2026-07-24 09:01:21 -04:00
Bryan Helmkamp
856101bbd7
Merge pull request #615 from fabro-sh/fix/preflight-ready-provider-routing
Fix preflight provider routing
2026-07-24 09:01:10 -04:00
Bryan Helmkamp
a86d34a25a
Merge pull request #614 from fabro-sh/fix/forward-structured-reasoning-effort
Forward reasoning effort for structured completions
2026-07-24 09:00:49 -04:00
Bryan Helmkamp
c06c60214a
refactor: simplify readiness-fallback plumbing
The fallback provider set was always catalog.all_provider_ids(), computed
at every call site and threaded through five layers alongside the catalog
itself. Fold it into Catalog::resolve_selection_with_catalog_fallback and
carry only a catalog_fallback flag through the transform/validate/
materialize entry points.

- materialize_run delegates to resolve_run_model again instead of
  re-inlining its provider normalization and selection
- run_preflight derives ready providers from llm_result instead of
  taking both, so callers cannot pass inconsistent pairs; the legacy
  tests now exercise the production ready-first routing path
- AppState::resolve_llm_client_with_ready_ids replaces three copies of
  resolve-then-extract-provider-ids, and ready_llm_provider_ids
  delegates to it
- the unreachable "model resolution failed" preflight check becomes an
  invariant error where the materialized run is produced
- validate_prepared_manifest_with_vars/_for_preflight share the
  ValidateInput construction

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:49:01 -04:00
Bryan Helmkamp
0cd22ebd75
refactor: build structured-output GenerateParams via struct update
Replaces the per-field if-let cascade in the structured completion path
with a single struct-update expression. The cascade had to be extended
by hand for every request field and silently dropped stop_sequences and
provider_options, which the non-structured path already forwarded.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:40:55 -04:00
Bryan Helmkamp
9c403108b4
Merge remote-tracking branch 'origin/main' into fix/forward-structured-reasoning-effort 2026-07-24 08:36:22 -04:00
Release Repro
59d5b317dc
Simplify LLM error mapping and validate reasoning_effort parsing
- Return InvalidRequest (400) for unsupported speed too, matching the
  reasoning_effort check and the complete()/stream() doc comments
- Centralize fabro_llm::Error -> ApiError mapping in a From impl so the
  completions handler, playground handler, and Error::Llm arm agree on
  the InvalidRequest -> 400 / else -> 502 split
- Reject unparseable reasoning_effort values with 400 instead of
  silently dropping them
- Add classify_sdk_invalid_request test per fabro-workflow convention

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:29:12 -04:00
Bryan Helmkamp
0e4244a24a
refactor: simplify and harden the seek-based event listing
- Unify list_events_from with list_events_from_with_limit so projection
  replay shares the seek path instead of duplicating the decode loop
- Bound the event scan with keys::run_events_range instead of an
  unbounded range plus a manual prefix break, so slatedb never touches
  SSTs belonging to other runs or namespaces
- Store reader event_seq as None instead of a valid-looking sentinel of
  1, so appends through a reader-built inner fail as ReadOnly rather
  than writing duplicate sequences
- Borrow keys during scans instead of allocating a String per entry,
  drop a dead branch in cached_events_from, collapse recover_next_seq's
  single-caller parameters, and document the zero-padded key ordering
  invariant the seek depends on

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:29:06 -04:00
Bryan Helmkamp
af27e98e1c
refactor: simplify parallel handler and overview parsing
- Extract emit_branch_completed() to replace three near-identical
  ParallelBranchCompleted constructions; status now reads consistently
  from outcome.status
- Add context_diff_public() so parallel.rs and manager_loop.rs share the
  diff-minus-engine-internal-keys step; move context_diff tests next to
  the function in context.rs
- Replace fan_in's dead BranchShape struct with the canonical
  Vec<ParallelBranchResult> (from_value moves, so no payload cloning)
- Narrow parseParallelOverview to ParallelBranchSummary {id, status};
  its only consumer renders just those fields
- Drop helpers.test.ts's duplicate envelope() fixture in favor of the
  shared makeEventEnvelope

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:28:58 -04:00
Bryan Helmkamp
7b7606e4f0
Merge pull request #609 from fabro-sh/fix/typed-completion-reasoning-effort
Validate completion reasoning effort values
2026-07-24 08:19:01 -04:00
Bryan Helmkamp
40d6992148
Trim redundant reasoning effort request tests
The unknown-value rejection test duplicated strum coverage in
fabro-model and the HTTP 422 test in fabro-server. Keep only the
field-type assertion, using the same field-pinning idiom as
stage_model_usage_round_trip.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:13:54 -04:00
Bryan Helmkamp
9afd456c06
Merge pull request #610 from fabro-sh/feat/portable-model-aliases
Add portable model aliases
2026-07-24 07:39:05 -04:00
Bryan Helmkamp
a7e3bcec7c
Merge pull request #613 from fabro-sh/feat/poolside-provider-logo
Add Poolside provider logo
2026-07-24 07:38:56 -04:00
Bryan Helmkamp
142862f342
Expose detailed completion token usage 2026-07-24 07:36:56 -04:00
Bryan Helmkamp
1c1ea53093
fix: prefer ready providers during preflight 2026-07-24 07:28:51 -04:00
Bryan Helmkamp
0cc4a01882
Forward reasoning effort for structured completions 2026-07-24 07:28:06 -04:00
Bryan Helmkamp
377eb961ec
feat: add Poolside provider logo
Adapted from poolside's official favicon mark: monochrome
fill="currentColor" at 24x24 to match the other provider logos, with the
brand's gradient-fade tail preserved via the original alpha mask.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 07:26:22 -04:00
Bryan Helmkamp
5aebb17fa2
Return bad request for unsupported reasoning effort 2026-07-24 07:22:47 -04:00
Bryan Helmkamp
3cfac20343
test: capture preflight provider routing gap 2026-07-24 07:12:01 -04:00
Bryan Helmkamp
05fa485637
feat: add portable GLM and DeepSeek aliases 2026-07-24 07:07:56 -04:00
Bryan Helmkamp
673a7064fe
Validate completion reasoning effort 2026-07-24 07:04:31 -04:00
Bryan Helmkamp
7216c49e44
docs: align parallel strategy with typed StageOutcome results
Review follow-ups: the ParallelBranchResult snippet showed status as
String (it is StageOutcome), and the cancellation section implied a
cancelled branch status that the type does not have — cancelled-while-
waiting branches record a failed outcome (reason "branch cancelled")
and the handler returns Error::Cancelled to the run executor.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 07:00:44 -04:00
Bryan Helmkamp
e3011481a1
fix(store): make event history pagination linear 2026-07-24 06:56:44 -04:00
Bryan Helmkamp
4621149b6e
Merge remote-tracking branch 'origin/main' into feat/shared-checkout-parallel 2026-07-24 06:54:32 -04:00
Bryan Helmkamp
558c1010f8
Regenerate TS client to drop duplicated method from merge
The merge of main kept two copies of testProviderCredentials in the
generated models-api.ts; regeneration is authoritative.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 06:44:56 -04:00
Bryan Helmkamp
27cf30ff8b
feat: add GPT-5.6 name aliases 2026-07-24 06:33:22 -04:00
Bryan Helmkamp
85f3286c66
Merge branch 'main' into feat/shared-checkout-parallel 2026-07-24 06:29:57 -04:00
Bryan Helmkamp
0a39ba9e06
Shared-checkout parallel execution (recovered from run 01KY7YH7RYCJ1BDVTTP96ZA4HV)
Cumulative implement + simplify_fable diff recovered from the run's meta
branch (fabro/meta/01KY7YH7RYCJ1BDVTTP96ZA4HV, stage 006 diff.patch).
The run validated this tree clean: cargo nextest (7,007 passed), clippy,
fmt, TS client regen + typecheck, web tests (679 passed), docs check.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 06:19:11 -04:00
fabro-releases[bot]
df3c834581 Bump version to 0.304.0-nightly.0 2026-07-24 01:48:13 +00:00
Bryan Helmkamp
5aaddd344e
Merge pull request #606 from fabro-sh/fix/cancellation-interrupt-lifecycle
Harden cancellation and interrupt lifecycles
2026-07-23 21:33:24 -04:00
Bryan Helmkamp
22238575ac
fix: report delete-specific run errors 2026-07-23 21:27:58 -04:00
Bryan Helmkamp
9adf24348b
refactor: simplify cancellation lifecycle code from review
- Extract the quadruplicated watchdog check-and-clear logic in
  schedule_worker_cancel_escalation into ManagedRun methods
  (escalation_still_current, clear_escalation_for)
- Derive strum::IntoStaticStr for WorkerRef instead of a hand-written
  variant-to-string match in kind()
- Use the generated AgentControlState constant instead of the raw
  "waiting_for_steer" literal in run-detail.tsx
- Replace optimisticCancellationRunId state with a boolean; the
  component is keyed by run id, so the stored id could only ever be
  this run's own

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 21:15:35 -04:00
Bryan Helmkamp
84c5468722
Merge remote-tracking branch 'origin/main' into fix/cancellation-interrupt-lifecycle
# Conflicts:
#	lib/components/fabro-agent/src/subagent.rs
#	lib/components/fabro-agent/tests/it/parity_matrix.rs
2026-07-23 20:55:25 -04:00
Bryan Helmkamp
5cf1c7d183
Harden cancellation and interrupt lifecycles 2026-07-23 20:40:22 -04:00
Bryan Helmkamp
db473da2f3
Merge pull request #605 from fabro-sh/fix/remove-dead-agent-turn-limits
Remove dead agent execution limits
2026-07-23 20:15:39 -04:00
Bryan Helmkamp
7c771fc5d7
test(twin-openai): accept tool call histories 2026-07-23 20:11:21 -04:00
Bryan Helmkamp
67644c7c3c
Merge pull request #602 from fabro-sh/fix/openrouter-anthropic-prompt-caching
fix(llm): send cache_control breakpoints for Claude via OpenRouter
2026-07-23 20:06:10 -04:00
Bryan Helmkamp
43dcfa3b09
Merge pull request #604 from fabro-sh/fix/root-agent-todo-projection
Fix root-agent TODO projection ownership
2026-07-23 20:06:01 -04:00
Bryan Helmkamp
cdf1dce4f8
fix(agent): remove dead execution limits 2026-07-23 19:36:29 -04:00
Bryan Helmkamp
78718c101a
Merge remote-tracking branch 'origin/main' into fix/root-agent-todo-projection 2026-07-23 19:30:35 -04:00
Bryan Helmkamp
3c33e0fb69
Merge origin/main (three-layer crate layout) into fix/openrouter-anthropic-prompt-caching
The crate reorganization renamed lib/crates/ to lib/apps|components|foundation/.
Git followed all modified files across the rename; the only conflict was the
newly added codec/cache.rs, now placed at lib/components/fabro-llm/src/codec/cache.rs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:30:20 -04:00
Bryan Helmkamp
62c4ccaa93
Merge pull request #603 from fabro-sh/refactor/three-layer-crate-layout
Some checks are pending
Rust / Format (push) Waiting to run
Rust / Clippy (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
Rust / Generated Docs (push) Waiting to run
refactor: organize crates into apps, components, and foundation
2026-07-23 19:27:55 -04:00
Bryan Helmkamp
d8d1c14116
Clarify stage TODO ownership and plan guidance 2026-07-23 18:23:37 -04:00