Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .trivyignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# trivy ignores
CVE-2026-40345
5 changes: 5 additions & 0 deletions osv-scanner.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,8 @@ ignoreUntil = 2026-10-28
# lint toolchain; the prod-reachable 5.x line is pinned to the fixed 5.0.8. Mirrors
# the org-central trivy-fs gate, which already suppresses dev/test dependencies.
reason = "brace-expansion 1.1.15 reachable only via dev-only ESLint toolchain (minimatch@3.1.5); the 1.1.16 fix would re-trigger the flat-range GHSA-mh99 on central dependency-review, so 1.x is pinned base-exact and both dev-only advisories are ignored."

[[IgnoredVulns]]
id = "GHSA-ggr8-5vv4-36mx"
ignoreUntil = 2026-10-28
reason = "deepmerge-ts is not a prod issue"
Comment on lines +44 to +47

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: New OSV ignore lacks required documentation

The file header requires each entry to document a real advisory unfixable without breaking the build, with reachability reasoning. The new GHSA-ggr8-5vv4-36mx entry only states reason = "deepmerge-ts is not a prod issue", far short of the convention the other entries follow.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

12 changes: 7 additions & 5 deletions packages/web/src/components/dashboard/session-timeline-chart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,20 @@ function buildChartData(
toolCalls: ToolCallPoint[],
sessionStartedAt: string
): ChartDataItem[] {
const sortedUsage = [...usageTimeline].sort(
(a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp)
)
// ⚡ Bolt Optimization: Pre-parse dates before sorting to avoid O(N log N) Date.parse overhead and reuse parsed value.
const sortedUsage = usageTimeline
.map((usage) => ({ usage, parsedTimestamp: Date.parse(usage.timestamp) }))
.sort((a, b) => a.parsedTimestamp - b.parsedTimestamp)

const sortedTools = [...toolCalls].sort(
(a, b) => a.parsedTimestamp - b.parsedTimestamp
)

let toolIndex = 0
const cumulativeToolCounts = new Map<string, number>()

return sortedUsage.map((usage) => {
const currentTimestamp = Date.parse(usage.timestamp)
return sortedUsage.map(({ usage, parsedTimestamp }) => {
const currentTimestamp = parsedTimestamp

while (
toolIndex < sortedTools.length &&
Expand Down
Loading