Skip to content

Commit 27a8602

Browse files
authored
Merge branch 'main' into fix/tri-12817-sidebar-feedback-popover
2 parents 7f4a619 + 14824b0 commit 27a8602

80 files changed

Lines changed: 6817 additions & 519 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@trigger.dev/sdk": patch
3+
---
4+
5+
Fix a preloaded `chat.agent` run dropping an in-flight message when it retries after an out-of-memory error. The message being processed when the run hit the OOM is now recovered and re-run on the retry, instead of being skipped while the run waited for a new message.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@trigger.dev/core": patch
3+
---
4+
5+
Fix a chunk occasionally dropped when a chat.agent run takes over from the warm first turn. The realtime stream writer now reports the inclusive last-written position as the resume cursor, so the agent's first record after the handover is no longer skipped.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@trigger.dev/core": patch
3+
"@trigger.dev/sdk": patch
4+
"trigger.dev": patch
5+
---
6+
7+
`AgentChat.reconnect()` now settles promptly when reconnecting to an idle chat instead of holding the connection open for the full long-poll window. Also upgrades the S2 streamstore client to 0.25 and moves realtime streams to S2's current hosts.

.github/workflows/e2e-webapp.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
e2eTests:
1616
name: "🧪 E2E Tests: Webapp"
1717
runs-on: warp-ubuntu-latest-x64-16x
18-
timeout-minutes: 20
18+
timeout-minutes: 30
1919
env:
2020
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
2121
steps:
@@ -80,6 +80,8 @@ jobs:
8080
docker pull postgres:14
8181
docker pull redis:7.2
8282
docker pull testcontainers/ryuk:0.11.0
83+
docker pull ghcr.io/s2-streamstore/s2:0.40.0@sha256:b26249e2ede0949755f5af8028185dc2bcfc3aa2db21eb9610543d144eb6ee9d
84+
docker pull minio/minio:latest
8385
echo "Image pre-pull complete"
8486
8587
- name: 📥 Download deps
@@ -91,6 +93,9 @@ jobs:
9193
- name: 🏗️ Build Webapp
9294
run: pnpm run build --filter webapp
9395

96+
- name: 🎭 Install Playwright Chromium
97+
run: cd apps/webapp && pnpm exec playwright install chromium
98+
9499
- name: 🧪 Run Webapp E2E Tests
95100
run: cd apps/webapp && pnpm exec vitest run --config vitest.e2e.config.ts --reporter=default
96101
env:
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
area: webapp
3+
type: fix
4+
---
5+
6+
Fixed a rare case where a single run or span carrying data that could not be ingested would make other runs or trace events in the same batch go missing from the runs list, traces, and logs. Now the rest of the batch is always kept: an affected run still appears with its status (only its un-ingestable output is dropped), and an affected trace event or payload is skipped instead of taking down everything around it.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
area: webapp
3+
type: improvement
4+
---
5+
6+
Speeds up resolving the latest worker version and deployment for an environment, removing an occasional stall when triggering runs in projects that have accumulated many deployed versions.

apps/webapp/app/components/layout/MetricsLayout.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,12 @@ function MetricsLayoutMain({ children, scroll }: { children: ReactNode; scroll:
175175
return (
176176
<div className="flex h-full min-h-0 flex-col">
177177
{filters}
178+
{/* overflow-x-clip: without it `overflow-y-auto` promotes x to auto and wide content drags
179+
the charts sideways. Wide children must scroll in their own container. */}
178180
<div
179181
className={
180182
scroll === "page"
181-
? "flex min-h-0 flex-1 flex-col gap-2.5 overflow-y-auto py-2.5 scrollbar-thin scrollbar-track-transparent scrollbar-thumb-surface-control"
183+
? "flex min-h-0 flex-1 flex-col gap-2.5 overflow-y-auto overflow-x-clip py-2.5 scrollbar-thin scrollbar-track-transparent scrollbar-thumb-surface-control"
182184
: "flex min-h-0 flex-1 flex-col overflow-hidden"
183185
}
184186
>
@@ -286,7 +288,7 @@ function MetricsLayoutFilters({
286288
return (
287289
<div
288290
className={cn(
289-
"flex h-10 shrink-0 items-center justify-between gap-2 border-b border-grid-dimmed pl-2.5 pr-3",
291+
"flex h-10 shrink-0 items-center justify-between gap-2 border-b border-grid-dimmed px-2",
290292
className
291293
)}
292294
>

apps/webapp/app/components/primitives/Headers.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { cn } from "~/utils/cn";
22

3-
const headerVariants = {
3+
export const headerVariants = {
44
header1: {
55
text: "font-sans text-2xl leading-5 md:leading-6 lg:leading-7 font-semibold tracking-tight",
66
spacing: "mb-2",

apps/webapp/app/components/primitives/Table.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ type TableCellBasicProps = {
181181
type TableHeaderCellProps = TableCellBasicProps & {
182182
hiddenLabel?: boolean;
183183
tooltip?: ReactNode;
184-
/** Extra class merged onto the tooltip content — e.g. widen it past the default max-width. */
184+
/** Extra class merged onto the tooltip content. */
185185
tooltipContentClassName?: string;
186186
disableTooltipHoverableContent?: boolean;
187187
/**

apps/webapp/app/components/primitives/Tabs.tsx

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,19 @@ import { motion } from "framer-motion";
33
import { type ReactNode, useRef } from "react";
44
import { type ShortcutDefinition, useShortcutKeys } from "~/hooks/useShortcutKeys";
55
import { cn } from "~/utils/cn";
6+
import { headerVariants } from "./Headers";
67
import { ShortcutKey } from "./ShortcutKey";
78

8-
export type Variants = "underline" | "pipe-divider" | "segmented";
9+
/** `"title"` names the table below it: header2 text, filter-bar height, underline on the border. */
10+
export type Variants = "underline" | "pipe-divider" | "segmented" | "title";
11+
12+
/** Shared with `TitleBar` so the tabbed and tab-less bars match. */
13+
export const TITLE_BAR_CHROME = "flex h-10 shrink-0 gap-x-6 border-b border-grid-bright";
14+
15+
const titleTabLabel = cn(headerVariants.header2.text, "transition duration-200");
16+
const titleTabIndicator = "h-0.5 w-full bg-indigo-500";
17+
const titleTabIndicatorIdle =
18+
"h-0.5 w-full bg-surface-control-active opacity-0 transition duration-200 group-hover:opacity-100";
919

1020
export type TabsProps = {
1121
tabs: {
@@ -58,6 +68,10 @@ export function TabContainer({
5868
);
5969
}
6070

71+
if (variant === "title") {
72+
return <div className={cn(TITLE_BAR_CHROME, "items-stretch", className)}>{children}</div>;
73+
}
74+
6175
if (variant === "underline") {
6276
return (
6377
<div className={cn(`flex gap-x-6 border-b border-grid-bright`, className)}>{children}</div>
@@ -117,6 +131,39 @@ export function TabLink({
117131
);
118132
}
119133

134+
if (variant === "title") {
135+
return (
136+
<NavLink to={to} className="group flex h-full flex-col focus-custom" end={end}>
137+
{({ isActive, isPending }) => {
138+
const active = isActive || isPending;
139+
return (
140+
<>
141+
<div className="flex flex-1 items-center">
142+
<span
143+
className={cn(
144+
titleTabLabel,
145+
active ? "text-text-bright" : "text-text-dimmed group-hover:text-text-bright"
146+
)}
147+
>
148+
{children}
149+
</span>
150+
</div>
151+
{active ? (
152+
<motion.div
153+
layoutId={layoutId}
154+
transition={{ type: "spring", stiffness: 500, damping: 30 }}
155+
className={titleTabIndicator}
156+
/>
157+
) : (
158+
<div className={titleTabIndicatorIdle} />
159+
)}
160+
</>
161+
);
162+
}}
163+
</NavLink>
164+
);
165+
}
166+
120167
if (variant === "pipe-divider") {
121168
return (
122169
<NavLink
@@ -177,11 +224,13 @@ export function TabButton({
177224
isActive,
178225
layoutId,
179226
shortcut,
227+
variant = "underline",
180228
...props
181229
}: {
182230
isActive: boolean;
183231
shortcut?: ShortcutDefinition;
184232
layoutId: string;
233+
variant?: Variants;
185234
} & React.ButtonHTMLAttributes<HTMLButtonElement>) {
186235
const ref = useRef<HTMLButtonElement>(null);
187236

@@ -197,10 +246,13 @@ export function TabButton({
197246
});
198247
}
199248

249+
const title = variant === "title";
250+
200251
return (
201252
<button
202253
className={cn(
203-
"group flex flex-col items-center pt-1 focus-custom",
254+
"group flex flex-col items-center focus-custom",
255+
title ? "h-full" : "pt-1",
204256
props.className,
205257
props.disabled && "pointer-events-none opacity-50"
206258
)}
@@ -209,8 +261,18 @@ export function TabButton({
209261
{...props}
210262
>
211263
<>
212-
<div className="flex items-center gap-1">
213-
<span className={"text-sm transition duration-200 text-text-bright"}>
264+
<div className={cn("flex items-center gap-1", title && "flex-1")}>
265+
<span
266+
className={cn(
267+
"transition duration-200",
268+
title
269+
? cn(
270+
headerVariants.header2.text,
271+
isActive ? "text-text-bright" : "text-text-dimmed group-hover:text-text-bright"
272+
)
273+
: "text-sm text-text-bright"
274+
)}
275+
>
214276
{props.children}
215277
</span>
216278
{shortcut && <ShortcutKey className={cn("")} shortcut={shortcut} variant={"small"} />}
@@ -219,10 +281,15 @@ export function TabButton({
219281
<motion.div
220282
layoutId={layoutId}
221283
transition={{ type: "spring", stiffness: 500, damping: 30 }}
222-
className="mt-1 h-0.5 w-full bg-indigo-500"
284+
className={cn("h-0.5 w-full bg-indigo-500", !title && "mt-1")}
223285
/>
224286
) : (
225-
<div className="mt-1 h-0.5 w-full bg-surface-control-active opacity-0 transition duration-200 group-hover:opacity-100" />
287+
<div
288+
className={cn(
289+
"h-0.5 w-full bg-surface-control-active opacity-0 transition duration-200 group-hover:opacity-100",
290+
!title && "mt-1"
291+
)}
292+
/>
226293
)}
227294
</>
228295
</button>

0 commit comments

Comments
 (0)