What's Changed
Features
- feat(topics): proper cost tracking for executions by @nimarb in #19432
- feat(external-media-storage): make external media storage an enterprise feature by @wochinge in #19778
- feat(web): use Langfuse by ClickHouse logo in the app shell and auth screens by @marcklingen in #19740
- feat(ai-gateway): add Amazon Bedrock upstream with API key auth by @wochinge in #19732
- feat(skills): open Markdown file links in the editor by @tobi12345 in #19822
- feat(ai-gateway): size the memory budget from the cgroup limit by @hassiebp in #19813
- feat(ingestion): compute event size in ClickHouse by @sumerman in #19727
- feat(topics): run per-trace Topics summaries on their own queue by @LysanderKie in #19397
- feat(ai-gateway): custom base URLs and extra headers for OpenAI and Anthropic connections by @wochinge in #19768
- feat(halo): load complete skill bundles through Mastra SkillSource by @tobi12345 in #19791
- perf(ai-gateway): pre-connect web clients before reporting ready by @wochinge in #19848
- feat(api): point legacy traces deprecation at the per-trace recipe by @niklassemmler in #19844
- feat(events-dispatch): store transcripts and enqueue per-trace Topics jobs from recorded rules by @LysanderKie in #19797
- feat(ui): guide users to submit missing token usage by @sumerman in #19803
- perf(ai-gateway): re-render only the toggled model row by @wochinge in #19858
- feat(worker): stop inferring observation usage from content by @sumerman in #19802
- feat(external-media-storage): support IAM role auth for Amazon S3 buckets by @wochinge in #19721
- feat(events-dispatch): optionally read and store every dispatched trace by @LysanderKie in #19850
- feat(web): top banner for legacy v3 usage on Langfuse Cloud by @maxdeichmann in #19591
- feat(blob-storage): support IAM role auth for Amazon S3 exports by @wochinge in #19723
- feat(monitors): show the metric value and unit in alert messages by @marksalpeter in #19872
- feat(ai-gateway): show model routes as badges with overflow by @wochinge in #19876
- feat: Add support for project_id by @jordibosch20 in #19860
- feat(audit-logs): record read-access events for public API list routes by @Steffen911 in #19758
- feat(events-dispatch): trace each job separately with its read shape by @LysanderKie in #19890
- feat(web): AI Gateway sidebar section and org landing by @wochinge in #19888
- feat(normalized-io): improve langchain normalization by @marliessophie in #19019
Fixes
- fix(sessions): Session tab in trace ui improvements by @bezbac in #19786
- fix(web): badge colours follow one naming and border rule by @nmtrang29 in #19317
- fix(web): load score configs for read-only users by @marliessophie in #19837
- fix(monitors): carry alert filters to the observations data link by @marksalpeter in #19781
- fix(analytics): keep ids and names out of app landing paths, read gbraid and wbraid by @AbdallahAHO in #19799
- fix(web): keep switcher names out of session replay by @nkabardin in #19827
- fix(web): escape header row when exporting widget chart data as CSV by @rajatnagda45 in #18128
- fix(dashboards): show a scroll fade on overflowing chart lists (LFE-16442) by @nkabardin in #19818
- fix(storage-role-auth): make the trust policy copyable before the external ID is shown by @wochinge in #19871
- fix(web): show trace-level CORRECTION scores in the single-trace UI by @marliessophie in #19700
- fix(query-ast): bind a tuple element of a lambda parameter by value by @niklassemmler in #19885
- fix(prompts): ignore empty all-of/none-of array filters in Postgres filters by @wochinge in #19903
- fix(worker): truncate oversized score fields in PostHog and Mixpanel exports by @niklassemmler in #19798
- fix(dashboards): skip WITH FILL when fill bounds would overflow ClickHouse DateTime by @niklassemmler in #19886
- fix(dashboards): exclude deleted scores from the scores join when FINAL is skipped by @niklassemmler in #19884
- fix(ai-gateway): block custom base URLs from session replay by @wochinge in #19919
- fix(evals): block evaluators on a bare HTTP 403 like Topics does by @wochinge in #19940
- fix(query-ast): parenthesise the existing condition when injecting tenancy and soft-delete filters by @niklassemmler in #19918
- fix(query-ast): always qualify the tenancy-injected project_id by @niklassemmler in #19946
- fix(ai-gateway): label the provider card refresh action as refreshing models by @wochinge in #19952
Chores
- test(skills): cover tenant isolation and viewer write denials by @tobi12345 in #19819
- chore(deps): bump posthog-js to 1.444.0 and posthog-node to 5.61.1 by @AbdallahAHO in #19800
- chore(agentmd): prune for topics by @nimarb in #19811
- refactor(web): remove eslint disables from UsersTable by @cursor[bot] in #19838
- test(shared): cover external media storage allowed-hosts mode by @wochinge in #19839
- test(ai-gateway): cover cross-organization and missing-scope calls to the model test route by @wochinge in #19841
- test(shared): golden SQL snapshots for metrics v2 score views by @niklassemmler in #19843
- test(query-ast): record golden SQL baselines for v2 observations dashboard view by @niklassemmler in #19812
- chore(topics): drop trace target compatibility read by @marliessophie in #19792
- chore(worker): remove background tokenizer pool by @sumerman in #19846
- chore(clickhouse): label id, session, time-range and project scans in query_shape by @niklassemmler in #19881
- refactor(storage): pass a single credentials object to StorageServiceFactory by @wochinge in #19882
- test(shared): drop isEnrichedBlobExportAvailable deletion guard by @nkabardin in #19801
- test(worker): drop duplicate silent score-batch reject by @nkabardin in #19892
- refactor(web): search bar adapter also emits a shared Predicate by @niklassemmler in #19849
- chore(query-ast): add a WHERE-only condition compiler and metadata-aware events routing by @niklassemmler in #19806
- ci: mask generated AI gateway signing secrets in e2e job logs by @wochinge in #19937
- ci: drop pipeline.yml from the AI gateway e2e path filter by @wochinge in #19938
- test(ai-gateway): cover private-network destinations on custom endpoint routes by @wochinge in #19921
- test(blob-storage): cover cross-project and missing-scope external ID reads by @wochinge in #19920
- test(ai-gateway): reject forbidden extra headers on every connection route by @wochinge in #19922
- fix(ci): recompile agentic workflows with gh-aw v1.0.1 to ride out release download outages by @wochinge in #19939
- chore(query-ast): lower events predicates to Kysely with a FilterList-equivalent SQL bridge by @niklassemmler in #19793
New Contributors
- @rajatnagda45 made their first contribution in #18128
Full Changelog: v4.76.0...v4.77.0