chore(web): upgrade all dependencies to latest stable

- @hookform/resolvers 3.10.0 → 5.2.2
- @tailwindcss/postcss 4.2.1 → 4.3.0
- @types/node 24.12.2 → 25.6.2
- @uiw/codemirror-* 4.25.8 → 4.25.9
- autoprefixer 10.4.27 → 10.5.0
- esbuild 0.27.4 → 0.28.0
- eslint 9.39.4 → 9.x (pinned; eslint 10 incompatible with eslint-config-next)
- eslint-config-next 16.2.3 → 16.2.6
- lucide-react 0.564.0 → 1.14.0
- motion 12.36.0 → 12.38.0
- next 16.2.3 → 16.2.6
- postcss 8.5.8 → 8.5.14
- react/react-dom 19.2.4 → 19.2.6
- react-day-picker 9.13.2 → 10.0.0
- react-hook-form 7.71.2 → 7.75.0
- react-resizable-panels 2.1.9 → 4.11.0
- recharts 2.15.0 → 3.8.1
- sonner 1.7.4 → 2.0.7
- tailwindcss 4.2.1 → 4.3.0
- tw-animate-css 1.3.3 → 1.4.0
- typescript 5.7.3 → 6.0.3
- zod 3.25.76 → 4.4.3

Breaking changes fixed:
- react-resizable-panels v4: PanelGroup→Group, PanelResizeHandle→Separator
- react-day-picker v10: ClassNames.table renamed to month_grid
- recharts v3: TooltipContentProps/DefaultLegendContentProps type changes,
  DataKey type for key prop
- shiki: cast createHighlighter promise to local ShikiHighlighter type
- voice/route.ts: pass requestUrl through buildDigitsResponse
- pty-chat-parser.ts: declare _lastInputAt private field
- sf-workspace-store.tsx: fix stale pi-coding-agent import path,
  add import for locally-used workspace types

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Mikael Hugo 2026-05-10 11:52:54 +02:00
parent cab8b5decc
commit e50d96e1f8
10 changed files with 866 additions and 810 deletions

View file

@ -127,6 +127,7 @@ function buildMenuResponse(
function buildDigitsResponse(
digits: string | null,
requestUrl: string,
config: VoiceRoutingConfig,
): string {
if (digits === "1") {
@ -135,7 +136,7 @@ function buildDigitsResponse(
if (digits === "2" && config.aiNumbers.length > 0) {
return buildTwiml(buildDialTargets(config.aiNumbers));
}
return buildMenuResponse(config);
return buildMenuResponse(requestUrl, config);
}
async function readDigits(request: Request): Promise<string | null> {
@ -174,7 +175,7 @@ export async function POST(request: Request): Promise<Response> {
const responseXml =
digits === null
? buildMenuResponse(request.url, getRoutingConfig())
: buildDigitsResponse(digits, getRoutingConfig());
: buildDigitsResponse(digits, request.url, getRoutingConfig());
return new Response(responseXml, {
headers: noStoreHeaders(),
});

View file

@ -536,14 +536,14 @@ function getChatHighlighter(): Promise<ShikiHighlighter> {
"ini",
"dotenv",
],
}),
}) as Promise<ShikiHighlighter>,
)
.catch((err) => {
chatHighlighterPromise = null;
throw err;
});
}) as Promise<ShikiHighlighter>;
}
return chatHighlighterPromise;
return chatHighlighterPromise!;
}
function HighlightedCode({

View file

@ -163,15 +163,15 @@ async function getHighlighter(): Promise<ShikiHighlighter> {
"ini",
"dotenv",
],
}),
}) as Promise<ShikiHighlighter>,
)
.catch((err) => {
// Reset so the next call retries instead of returning a rejected promise forever
highlighterPromise = null;
throw err;
});
}) as Promise<ShikiHighlighter>;
}
return highlighterPromise;
return highlighterPromise!;
}
function HighlightedCode({

View file

@ -87,7 +87,7 @@ function Calendar({
: "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",
defaultClassNames.caption_label,
),
table: "w-full border-collapse",
month_grid: "w-full border-collapse",
weekdays: cn("flex", defaultClassNames.weekdays),
weekday: cn(
"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",

View file

@ -114,7 +114,7 @@ function ChartTooltipContent({
color,
nameKey,
labelKey,
}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &
}: RechartsPrimitive.TooltipContentProps &
React.ComponentProps<"div"> & {
hideLabel?: boolean;
hideIndicator?: boolean;
@ -182,7 +182,7 @@ function ChartTooltipContent({
return (
<div
key={item.dataKey}
key={String(item.dataKey ?? index)}
className={cn(
"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
indicator === "dot" && "items-center",
@ -253,7 +253,7 @@ function ChartLegendContent({
verticalAlign = "bottom",
nameKey,
}: React.ComponentProps<"div"> &
Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
Pick<RechartsPrimitive.DefaultLegendContentProps, "payload" | "verticalAlign"> & {
hideIcon?: boolean;
nameKey?: string;
}) {

View file

@ -1,17 +1,17 @@
"use client";
import { GripVerticalIcon } from "lucide-react";
import type * as React from "react";
import * as ResizablePrimitive from "react-resizable-panels";
import * as React from "react";
import { Group, Panel, Separator } from "react-resizable-panels";
import { cn } from "@/lib/utils";
function ResizablePanelGroup({
className,
...props
}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {
}: React.ComponentProps<typeof Group>) {
return (
<ResizablePrimitive.PanelGroup
<Group
data-slot="resizable-panel-group"
className={cn(
"flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
@ -24,19 +24,19 @@ function ResizablePanelGroup({
function ResizablePanel({
...props
}: React.ComponentProps<typeof ResizablePrimitive.Panel>) {
return <ResizablePrimitive.Panel data-slot="resizable-panel" {...props} />;
}: React.ComponentProps<typeof Panel>) {
return <Panel data-slot="resizable-panel" {...props} />;
}
function ResizableHandle({
withHandle,
className,
...props
}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
}: React.ComponentProps<typeof Separator> & {
withHandle?: boolean;
}) {
return (
<ResizablePrimitive.PanelResizeHandle
<Separator
data-slot="resizable-handle"
className={cn(
"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90",
@ -49,7 +49,7 @@ function ResizableHandle({
<GripVerticalIcon className="size-2.5" />
</div>
)}
</ResizablePrimitive.PanelResizeHandle>
</Separator>
);
}

View file

@ -300,6 +300,9 @@ export class PtyChatParser {
*/
private _completionEmitted = false;
/** Timestamp of last received input chunk, used for completion debounce */
private _lastInputAt = 0;
/**
* True when the parser has seen a prompt boundary and is waiting for user
* input. The next non-system, non-prompt, non-TUI content line after the

View file

@ -8,7 +8,7 @@ import {
useState,
useSyncExternalStore,
} from "react";
import { ContextualTips } from "../../packages/pi-coding-agent/src/core/contextual-tips.ts";
import { ContextualTips } from "../../packages/coding-agent/src/core/contextual-tips.ts";
import { appendAuthParam, authFetch } from "./auth";
import {
type BrowserSlashCommandDispatchResult,
@ -154,6 +154,11 @@ export interface BridgeRuntimeSnapshot {
lastError: BridgeLastError | null;
}
import type {
WorkspaceMilestoneTarget,
WorkspaceSliceTarget,
} from "./workspace-types.js";
export type {
RiskLevel,
WorkspaceMilestoneTarget,

1575
web/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -14,7 +14,7 @@
"lint": "eslint ."
},
"dependencies": {
"@hookform/resolvers": "^3.9.1",
"@hookform/resolvers": "^5.2.2",
"@lezer/highlight": "^1.2.3",
"@mariozechner/jiti": "^2.6.2",
"@radix-ui/react-accordion": "1.2.12",
@ -44,49 +44,49 @@
"@radix-ui/react-toggle": "1.1.10",
"@radix-ui/react-toggle-group": "1.1.11",
"@radix-ui/react-tooltip": "1.2.8",
"@uiw/codemirror-extensions-langs": "^4.25.8",
"@uiw/codemirror-themes": "^4.25.8",
"@uiw/react-codemirror": "^4.25.8",
"@uiw/codemirror-extensions-langs": "^4.25.9",
"@uiw/codemirror-themes": "^4.25.9",
"@uiw/react-codemirror": "^4.25.9",
"@xterm/addon-fit": "^0.11.0",
"@xterm/xterm": "^6.0.0",
"autoprefixer": "^10.4.20",
"autoprefixer": "^10.5.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "1.1.1",
"date-fns": "4.1.0",
"embla-carousel-react": "8.6.0",
"input-otp": "1.4.2",
"lucide-react": "^0.564.0",
"motion": "^12.36.0",
"next": "16.2.3",
"lucide-react": "^1.14.0",
"motion": "^12.38.0",
"next": "^16.2.6",
"next-themes": "^0.4.6",
"node-pty": "^1.1.0",
"react": "19.2.4",
"react-day-picker": "9.13.2",
"react-dom": "19.2.4",
"react-hook-form": "^7.54.1",
"react": "^19.2.6",
"react-day-picker": "^10.0.0",
"react-dom": "^19.2.6",
"react-hook-form": "^7.75.0",
"react-markdown": "^10.1.0",
"react-resizable-panels": "^2.1.7",
"recharts": "2.15.0",
"react-resizable-panels": "^4.11.0",
"recharts": "^3.8.1",
"remark-gfm": "^4.0.1",
"shiki": "^4.0.2",
"sonner": "^1.7.1",
"sonner": "^2.0.7",
"tailwind-merge": "^3.3.1",
"vaul": "^1.1.2",
"zod": "^3.24.1"
"zod": "^4.4.3"
},
"devDependencies": {
"@eslint/eslintrc": "^3.3.1",
"@tailwindcss/postcss": "^4.2.0",
"@tailwindcss/postcss": "^4.3.0",
"@types/node": "^25.6.2",
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
"esbuild": "^0.27.4",
"eslint": "^9.38.0",
"eslint-config-next": "16.2.3",
"postcss": "^8.5",
"tailwindcss": "^4.2.0",
"tw-animate-css": "1.3.3",
"typescript": "5.7.3"
"esbuild": "^0.28.0",
"eslint": "^9.39.4",
"eslint-config-next": "^16.2.6",
"postcss": "^8.5.14",
"tailwindcss": "^4.3.0",
"tw-animate-css": "^1.4.0",
"typescript": "^6.0.3"
}
}