chore: generate

This commit is contained in:
opencode-agent[bot] 2026-06-24 07:50:33 +00:00
parent a4551a94b4
commit d465cd476a
6 changed files with 88 additions and 87 deletions

View File

@ -18,9 +18,7 @@ export function summarizeFirstNavigation(samples: FirstNavigationSample[]) {
const categories = samples.map(category) const categories = samples.map(category)
const stable = categories.findIndex( const stable = categories.findIndex(
(value, index) => (value, index) =>
value === "destination" && value === "destination" && categories[index + 1] === "destination" && categories[index + 2] === "destination",
categories[index + 1] === "destination" &&
categories[index + 2] === "destination",
) )
return { return {
samples: samples.length, samples: samples.length,

View File

@ -72,7 +72,8 @@ export async function measureFirstNavigation(
) )
await input.navigate() await input.navigate()
await page.waitForFunction(() => { await page.waitForFunction(() => {
const samples = (window as Window & { __firstNavigationProbe?: FirstNavigationProbe }).__firstNavigationProbe?.samples const samples = (window as Window & { __firstNavigationProbe?: FirstNavigationProbe }).__firstNavigationProbe
?.samples
if (!samples) return false if (!samples) return false
return samples.length >= 3 && samples.slice(-3).every((sample) => sample.destination && !sample.source) return samples.length >= 3 && samples.slice(-3).every((sample) => sample.destination && !sample.source)
}) })

View File

@ -20,7 +20,9 @@ export function summarizeNavigationMilestones(samples: NavigationMilestoneSample
} }
return { return {
samples: samples.length, samples: samples.length,
milestones: Object.fromEntries(names.map((name) => [name, summarize((sample) => sample.milestones[name] === true)])), milestones: Object.fromEntries(
names.map((name) => [name, summarize((sample) => sample.milestones[name] === true)]),
),
all: summarize((sample) => names.every((name) => sample.milestones[name] === true)), all: summarize((sample) => names.every((name) => sample.milestones[name] === true)),
} }
} }
@ -38,75 +40,78 @@ export async function measureNavigationMilestones(
navigate: () => Promise<void> navigate: () => Promise<void>
}, },
) { ) {
await page.evaluate(({ triggerSelector, milestones }) => { await page.evaluate(
const samples: NavigationMilestoneSample[] = [] ({ triggerSelector, milestones }) => {
const streaks = new Map<string, number>() const samples: NavigationMilestoneSample[] = []
const marked = new Set<string>() const streaks = new Map<string, number>()
let started: number | undefined const marked = new Set<string>()
let running = true let started: number | undefined
const visible = (selector: string) => let running = true
[...document.querySelectorAll<HTMLElement>(selector)].some((element) => { const visible = (selector: string) =>
const rect = element.getBoundingClientRect() [...document.querySelectorAll<HTMLElement>(selector)].some((element) => {
const style = getComputedStyle(element) const rect = element.getBoundingClientRect()
return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none" const style = getComputedStyle(element)
}) return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none"
const sample = () => { })
if (!running || started === undefined) return const sample = () => {
requestAnimationFrame(() => { if (!running || started === undefined) return
setTimeout(() => { requestAnimationFrame(() => {
if (!running || started === undefined) return setTimeout(() => {
const current = Object.fromEntries( if (!running || started === undefined) return
Object.entries(milestones).map(([name, milestone]) => [ const current = Object.fromEntries(
name, Object.entries(milestones).map(([name, milestone]) => [
milestone.visible === false ? !document.querySelector(milestone.selector) : visible(milestone.selector), name,
]), milestone.visible === false ? !document.querySelector(milestone.selector) : visible(milestone.selector),
) ]),
samples.push({ )
observedAtMs: performance.now() - started, samples.push({
milestones: current, observedAtMs: performance.now() - started,
}) milestones: current,
Object.entries(current).forEach(([name, value]) => { })
if (!value) { Object.entries(current).forEach(([name, value]) => {
streaks.set(name, 0) if (!value) {
return streaks.set(name, 0)
return
}
if (!marked.has(`${name}.first`)) {
performance.mark(`opencode.navigation.${name}.first`)
marked.add(`${name}.first`)
}
const streak = (streaks.get(name) ?? 0) + 1
streaks.set(name, streak)
if (streak === 3) performance.mark(`opencode.navigation.${name}.stable`)
})
const all = Object.values(current).every(Boolean)
const allStreak = all ? (streaks.get("all") ?? 0) + 1 : 0
streaks.set("all", allStreak)
if (all && !marked.has("all.first")) {
performance.mark("opencode.navigation.all.first")
marked.add("all.first")
} }
if (!marked.has(`${name}.first`)) { if (allStreak === 3) performance.mark("opencode.navigation.all.stable")
performance.mark(`opencode.navigation.${name}.first`) sample()
marked.add(`${name}.first`) }, 0)
} })
const streak = (streaks.get(name) ?? 0) + 1 }
streaks.set(name, streak) document.addEventListener(
if (streak === 3) performance.mark(`opencode.navigation.${name}.stable`) "click",
}) (event) => {
const all = Object.values(current).every(Boolean) if (!(event.target instanceof Element) || !event.target.closest(triggerSelector)) return
const allStreak = all ? (streaks.get("all") ?? 0) + 1 : 0 started = performance.now()
streaks.set("all", allStreak) performance.mark("opencode.navigation.click")
if (all && !marked.has("all.first")) {
performance.mark("opencode.navigation.all.first")
marked.add("all.first")
}
if (allStreak === 3) performance.mark("opencode.navigation.all.stable")
sample() sample()
}, 0) },
}) { capture: true, once: true },
} )
document.addEventListener( ;(window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones = {
"click", samples,
(event) => { stop: () => {
if (!(event.target instanceof Element) || !event.target.closest(triggerSelector)) return running = false
started = performance.now() },
performance.mark("opencode.navigation.click") }
sample() },
}, { triggerSelector: input.triggerSelector, milestones: input.milestones },
{ capture: true, once: true }, )
)
;(window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones = {
samples,
stop: () => {
running = false
},
}
}, { triggerSelector: input.triggerSelector, milestones: input.milestones })
await input.navigate() await input.navigate()
await page.waitForFunction(() => { await page.waitForFunction(() => {
const samples = (window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones const samples = (window as Window & { __navigationMilestones?: NavigationMilestoneProbe }).__navigationMilestones

View File

@ -344,9 +344,7 @@ export const fixture = {
targetMessageIDs: targetMessages targetMessageIDs: targetMessages
.filter((message) => message.info.role === "user") .filter((message) => message.info.role === "user")
.map((message) => message.info.id), .map((message) => message.info.id),
childMessageIDs: childMessages childMessageIDs: childMessages.filter((message) => message.info.role === "user").map((message) => message.info.id),
.filter((message) => message.info.role === "user")
.map((message) => message.info.id),
targetPartIDs: targetMessages.flatMap((message) => targetPartIDs: targetMessages.flatMap((message) =>
orderedParts(message) orderedParts(message)
.filter(renderable) .filter(renderable)

View File

@ -47,17 +47,15 @@ export async function installStressSessionTabs(page: Page, input?: { draftID?: s
) )
localStorage.setItem( localStorage.setItem(
"opencode.global.dat:tabs", "opencode.global.dat:tabs",
JSON.stringify( JSON.stringify([
[ ...sessionIDs.map((sessionId) => ({
...sessionIDs.map((sessionId) => ({ type: "session",
type: "session", server,
server, dirBase64,
dirBase64, sessionId,
sessionId, })),
})), ...(draftID ? [{ type: "draft", draftID, server, directory }] : []),
...(draftID ? [{ type: "draft", draftID, server, directory }] : []), ]),
],
),
) )
}, },
{ {

View File

@ -1149,7 +1149,8 @@ export default function Page() {
}) })
} }
const onHistoryScroll = () => { const onHistoryScroll = () => {
if (historyRequest || historyLoading() || !autoScroll.userScrolled() || !scroller || scroller.scrollTop >= 200) return if (historyRequest || historyLoading() || !autoScroll.userScrolled() || !scroller || scroller.scrollTop >= 200)
return
void loadOlder() void loadOlder()
} }