@wenathlan/extension 1.1.34 → 1.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../sidepanel.ts"],
4
- "sourcesContent": ["import type { a11ycapture, a11ynode, agentplan, auditevent, bannerreport, capabilityreport, clickablemap, derivedselector, diagnosticreport, focusevent, listpattern, mutationevent, planprogress, readercapture, resolvedtarget, retryoutcome, snapshotdiff, stepoutcome, tableshape, toolstep } from \"../types.js\";\n\nconst objective = document.querySelector<HTMLTextAreaElement>(\"#objective\");\nconst localbutton = document.querySelector<HTMLButtonElement>(\"#localplan\");\nconst remotebutton = document.querySelector<HTMLButtonElement>(\"#remoteplan\");\nconst diagnosticbutton = document.querySelector<HTMLButtonElement>(\"#diagnostic\");\nconst planroot = document.querySelector<HTMLElement>(\"#plan\");\nconst auditroot = document.querySelector<HTMLElement>(\"#audit\");\nconst diagnosticroot = document.querySelector<HTMLElement>(\"#diagnostics\");\nconst maproot = document.querySelector<HTMLElement>(\"#map\");\nconst a11yroot = document.querySelector<HTMLElement>(\"#a11y\");\nconst readerroot = document.querySelector<HTMLElement>(\"#reader\");\nconst detectionsroot = document.querySelector<HTMLElement>(\"#detections\");\nconst streamroot = document.querySelector<HTMLElement>(\"#stream\");\nconst diffsroot = document.querySelector<HTMLElement>(\"#diffs\");\nconst bannersroot = document.querySelector<HTMLElement>(\"#banners\");\nconst selectorsroot = document.querySelector<HTMLElement>(\"#selectors\");\nconst statusnode = document.querySelector<HTMLElement>(\"#status\");\nconst progressnode = document.querySelector<HTMLProgressElement>(\"#planprogress\");\nconst capabilitiestext = document.querySelector<HTMLElement>(\"#capabilitiestext\");\n\ntype previewresult = { ok: boolean; summary: string; resolvedtarget?: resolvedtarget; candidates?: string[] };\nconst previews = new Map<string, previewresult>();\n\n/** Safely reads the reviewed options object of one step. */\nfunction options(step: toolstep): Record<string, unknown> {\n if (!step.options) return {};\n try {\n const parsed = JSON.parse(step.options);\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed) ? (parsed as Record<string, unknown>) : {};\n } catch { return {}; }\n}\n\nfunction status(message: string, error = false): void { if (statusnode) { statusnode.textContent = message; statusnode.dataset.state = error ? \"error\" : \"ready\"; } }\nasync function request(message: unknown): Promise<unknown> { const response = await chrome.runtime.sendMessage(message) as { ok: boolean; value?: unknown; error?: string }; if (!response.ok) throw new Error(response.error); return response.value; }\nfunction button(label: string, action: () => Promise<void>, disabled = false): HTMLButtonElement { const element = document.createElement(\"button\"); element.type = \"button\"; element.textContent = label; element.disabled = disabled; element.addEventListener(\"click\", () => action().catch(error => status(error instanceof Error ? error.message : String(error), true))); return element; }\n\n/** Kinds addressable by a css target or a reviewed targetref; only these can be previewed. */\nconst previewkinds = [\"focus\", \"inspect\", \"click\", \"type\", \"scroll\", \"select\", \"hover\", \"clickdeep\", \"rightclick\", \"doubleclick\", \"drag\", \"drop\", \"upload\", \"clear\", \"check\", \"uncheck\", \"toggle\", \"submit\", \"readattribute\", \"readstyle\", \"readgeometry\", \"readvalue\", \"readtext\", \"readhtml\", \"countelements\", \"readtable\", \"highlight\", \"setattribute\", \"removeattribute\", \"waitfor\", \"shiftclick\", \"typetime\", \"appendtext\", \"setvalue\", \"typeedit\", \"submitsearch\", \"selectmulti\", \"chooseradio\", \"setslider\", \"setdate\", \"setcolor\", \"expanddetails\", \"verifyvisible\", \"verifyenabled\", \"pierceshadow\", \"clickpoint\", \"clicktext\", \"clickaria\", \"clickname\", \"resolvexpath\", \"deriveselector\", \"fingerprintsection\"];\n\n/** Topic rows that group the new interaction and observation kinds inside each risk class. */\nconst topictags: Array<{ topic: string; kinds: string[] }> = [\n { topic: \"pointer\", kinds: [\"movepointer\", \"clickpoint\", \"shiftclick\", \"clicktext\", \"clickaria\", \"clickname\", \"pierceshadow\"] },\n { topic: \"typing\", kinds: [\"typetime\", \"appendtext\", \"setvalue\", \"typeedit\", \"submitsearch\"] },\n { topic: \"keys\", kinds: [\"keyhold\", \"keyrelease\"] },\n { topic: \"controls\", kinds: [\"selectmulti\", \"chooseradio\", \"setslider\", \"setdate\", \"setcolor\", \"expanddetails\"] },\n { topic: \"dialogs\", kinds: [\"dismissdialog\"] },\n { topic: \"frames\", kinds: [\"enterframe\"] },\n { topic: \"retry\", kinds: [\"retryaction\"] },\n { topic: \"reads\", kinds: [\"mapclicks\", \"verifyvisible\", \"verifyenabled\", \"resolvexpath\"] },\n { topic: \"observation\", kinds: [\"a11ytree\", \"readvisible\", \"readertree\", \"readoutline\", \"readselection\", \"readopengraph\", \"readlang\", \"detectlanguage\", \"listshadow\", \"listframes\", \"readscrollpos\"] },\n { topic: \"detection\", kinds: [\"detectlists\", \"detecttables\", \"detectinfinitescroll\", \"detectvirtual\", \"detectlazy\", \"detectsticky\", \"detectscrolllock\", \"countpages\", \"classifypage\", \"fingerprintsection\"] },\n { topic: \"watch\", kinds: [\"watchmutate\", \"watchbanner\", \"watchfocus\", \"waitquiet\", \"readjson\", \"diffsnapshots\", \"deriveselector\"] },\n];\n\nfunction steptopic(kind: string): string | undefined {\n return topictags.find(tag => tag.kinds.includes(kind))?.topic;\n}\n\n/** Renders plan completion as a live progress ratio. */\nfunction renderprogress(plan: agentplan, completed: string[]): void {\n if (!progressnode) return;\n const total = plan.steps.length || 1;\n progressnode.max = total;\n progressnode.value = completed.length;\n progressnode.textContent = `${completed.length} of ${plan.steps.length} reviewed steps executed`;\n}\n\n/** Renders the latest structured outcome of one step beside its review entry. */\nfunction renderoutcome(step: toolstep, outcomes: stepoutcome[]): HTMLElement | null {\n const outcome = [...outcomes].reverse().find(item => item.stepid === step.id && item.ok) ?? [...outcomes].reverse().find(item => item.stepid === step.id);\n if (!outcome) return null;\n const node = document.createElement(\"details\");\n node.className = \"outcome\";\n const summary = document.createElement(\"summary\");\n summary.textContent = `${outcome.ok ? \"result\" : \"failure\"}: ${outcome.summary}`;\n node.append(summary);\n if (outcome.details && Object.keys(outcome.details).length > 0) {\n const payload = document.createElement(\"pre\");\n payload.textContent = JSON.stringify(outcome.details, null, 2).slice(0, 4000);\n node.append(payload);\n }\n return node;\n}\n\n/** Renders the hold id of a key hold or release step beside its summary. */\nfunction holddetail(step: toolstep): string {\n if (step.kind === \"keyhold\") {\n const holdid = options(step).holdid;\n return typeof holdid === \"string\" && holdid ? ` \u00B7 hold id ${holdid}` : \"\";\n }\n if (step.kind === \"keyrelease\") return step.value ? ` \u00B7 releases hold id ${step.value}` : \"\";\n return \"\";\n}\n\n/** Renders the retry attempts of one retry step on the step timeline. */\nfunction retrydetail(step: toolstep, retries: retryoutcome[]): HTMLElement | null {\n const latest = [...retries].reverse().find(item => item.stepid === step.id);\n if (!latest) return null;\n const node = document.createElement(\"p\");\n node.className = \"timeline\";\n node.textContent = `retry timeline: ${latest.attempts} attempt${latest.attempts === 1 ? \"\" : \"s\"} \u00B7 ${latest.movement.toFixed(1)} px movement \u00B7 ${latest.ok ? \"succeeded\" : \"failed\"}`;\n return node;\n}\n\n/** Renders the network quiet progress of one waitquiet step from its outcome evidence. */\nfunction quietdetail(step: toolstep, outcomes: stepoutcome[]): HTMLElement | null {\n if (step.kind !== \"waitquiet\") return null;\n const latest = [...outcomes].reverse().find(outcome => outcome.stepid === step.id);\n if (!latest) return null;\n const samples = Array.isArray(latest.details?.samples) ? latest.details?.samples as Array<{ at: number; quietfor: number }> : [];\n const idle = typeof latest.details?.idle === \"number\" ? latest.details?.idle : 0;\n const last = samples[samples.length - 1];\n const node = document.createElement(\"p\");\n node.className = \"timeline\";\n node.textContent = `network quiet: ${samples.length} sample${samples.length === 1 ? \"\" : \"s\"} \u00B7 quiet for ${Math.round(last?.quietfor ?? 0)} ms \u00B7 idle threshold ${idle} ms \u00B7 ${latest.ok ? \"quiet reached\" : \"still busy\"}`;\n return node;\n}\n\n/** Renders the resolved target details of one previewed interaction step before approval. */\nfunction renderpreview(step: toolstep): HTMLElement | null {\n const preview = previews.get(step.id);\n if (!preview) return null;\n const node = document.createElement(\"details\");\n node.className = \"outcome\";\n const summary = document.createElement(\"summary\");\n summary.textContent = `preview: ${preview.summary}`;\n node.append(summary);\n if (preview.resolvedtarget) {\n const payload = document.createElement(\"pre\");\n payload.textContent = JSON.stringify(preview.resolvedtarget, null, 2);\n node.append(payload);\n }\n if (preview.candidates && preview.candidates.length > 1) {\n const chooser = document.createElement(\"p\");\n chooser.textContent = \"Ambiguous resolution; choose one candidate as the target hint:\";\n node.append(chooser);\n for (const candidate of preview.candidates) {\n node.append(\" \", button(`Choose \"${candidate}\"`, async () => { pickhint(`target hint: ${candidate}`); }));\n }\n }\n return node;\n}\n\nfunction stepitem(plan: agentplan, step: toolstep, completed: string[], outcomes: stepoutcome[], retries: retryoutcome[]): HTMLLIElement {\n const item = document.createElement(\"li\");\n const done = completed.includes(step.id);\n item.textContent = `${done ? \"\u2713\" : \"\"} ${step.summary}${holddetail(step)}`;\n const outcome = renderoutcome(step, outcomes);\n if (outcome) item.append(outcome);\n const timeline = step.kind === \"retryaction\" ? retrydetail(step, retries) : quietdetail(step, outcomes);\n if (timeline) item.append(timeline);\n const preview = renderpreview(step);\n if (preview) item.append(preview);\n const hastarget = Boolean(step.target) || options(step).targetref !== undefined;\n if (!done && hastarget && previewkinds.includes(step.kind) && [\"pending\", \"approved\"].includes(plan.state)) item.append(\" \", button(\"Preview current target\", async () => { const result = await request({ kind: \"preview\", stepid: step.id }) as previewresult; previews.set(step.id, result); status(result.summary); await refresh(); }));\n if (!done && plan.state === \"approved\") item.append(\" \", button(\"Run this reviewed step\", async () => { const result = await request({ kind: \"execute\", stepid: step.id }) as { summary: string }; status(result.summary); await refresh(); }));\n return item;\n}\n\nfunction steplist(plan: agentplan, steps: toolstep[], completed: string[], outcomes: stepoutcome[], retries: retryoutcome[], risk: toolstep[\"risk\"]): HTMLElement | null {\n const group = steps.filter(step => step.risk === risk);\n if (group.length === 0) return null;\n const section = document.createElement(\"section\");\n const heading = document.createElement(\"h3\");\n heading.textContent = `${risk} steps`;\n section.append(heading);\n const general = group.filter(step => steptopic(step.kind) === undefined);\n if (general.length > 0) {\n const list = document.createElement(\"ol\");\n for (const step of general) list.append(stepitem(plan, step, completed, outcomes, retries));\n section.append(list);\n }\n for (const tag of topictags) {\n const tagged = group.filter(step => steptopic(step.kind) === tag.topic);\n if (tagged.length === 0) continue;\n const row = document.createElement(\"h4\");\n row.textContent = `${tag.topic} steps`;\n section.append(row);\n const list = document.createElement(\"ol\");\n for (const step of tagged) list.append(stepitem(plan, step, completed, outcomes, retries));\n section.append(list);\n }\n return section;\n}\n\nfunction renderplan(plan?: agentplan, progress?: planprogress, outcomes: stepoutcome[] = [], retries: retryoutcome[] = []): void {\n if (!planroot) return;\n planroot.replaceChildren();\n if (!plan) { planroot.textContent = \"Start a session, then request a local or endpoint plan. No task runs before review.\"; if (progressnode) progressnode.value = 0; return; }\n const title = document.createElement(\"h2\"); title.textContent = `${plan.state}: ${plan.objective}`; planroot.append(title);\n const completed = progress?.planid === plan.id ? progress.completedsteps : [];\n renderprogress(plan, completed);\n const sensitive = steplist(plan, plan.steps, completed, outcomes, retries, \"sensitive\");\n const interaction = steplist(plan, plan.steps, completed, outcomes, retries, \"interaction\");\n const read = steplist(plan, plan.steps, completed, outcomes, retries, \"read\");\n for (const group of [sensitive, interaction, read]) if (group) planroot.append(group);\n if (plan.state === \"pending\") { planroot.append(button(\"Approve reviewed plan\", async () => { await request({ kind: \"approve\" }); await refresh(); }), button(\"Reject plan\", async () => { await request({ kind: \"reject\" }); await refresh(); })); }\n if (plan.state === \"completed\" && plan.completedat) { const note = document.createElement(\"p\"); note.textContent = \"Every reviewed step has executed and the plan is closed.\"; planroot.append(note); }\n}\n\n/** Records one clickable map entry or candidate as the target hint for the next plan. */\nfunction pickhint(hint: string): void {\n if (objective) objective.value = objective.value ? `${objective.value}\\n${hint}` : hint;\n status(`${hint} recorded as the target hint for the next plan.`);\n}\n\n/** Renders the clickable map as a numbered list beside the plan and lets the user pick entries. */\nfunction rendermap(map?: clickablemap): void {\n if (!maproot) return;\n maproot.replaceChildren();\n if (!map || map.entries.length === 0) { maproot.textContent = \"Run a mapclicks step to number every clickable element on the page.\"; return; }\n for (const entry of map.entries) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `${entry.number}. ${entry.label || entry.selector} (${entry.role})`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${entry.selector} (map entry ${entry.number}, ${entry.label || entry.role})`));\n item.append(pick);\n maproot.append(item);\n }\n}\n\n/** Renders the latest accessibility tree beside the dom snapshot as indented role lines. */\nfunction rendera11y(capture?: a11ycapture): void {\n if (!a11yroot) return;\n a11yroot.replaceChildren();\n if (!capture) { a11yroot.textContent = \"Run an a11ytree step to capture the accessibility tree beside the dom snapshot.\"; return; }\n const lines: string[] = [];\n const walk = (node: a11ynode, depth: number): void => {\n if (lines.length >= 80) return;\n const states = node.states.length > 0 ? ` [${node.states.join(\", \")}]` : \"\";\n const value = node.value !== undefined ? ` = ${node.value}` : \"\";\n lines.push(`${\"\u00B7 \".repeat(depth)}${node.role}: ${node.name || \"(unnamed)\"}${states}${value}`);\n for (const child of node.children) walk(child, depth + 1);\n };\n walk(capture.tree, 0);\n const payload = document.createElement(\"pre\");\n payload.textContent = lines.join(\"\\n\");\n a11yroot.append(payload);\n}\n\n/** Renders the latest reader view text with heading blocks highlighted. */\nfunction renderreader(capture?: readercapture): void {\n if (!readerroot) return;\n readerroot.replaceChildren();\n if (!capture) { readerroot.textContent = \"Run a readertree step to extract the reader view.\"; return; }\n const title = document.createElement(\"p\");\n title.textContent = `${capture.article.title || \"Untitled\"}${capture.article.byline ? ` \u00B7 ${capture.article.byline}` : \"\"} \u00B7 ${capture.article.words} words \u00B7 ${capture.article.blocks.length} blocks`;\n readerroot.append(title);\n for (const block of capture.article.blocks.slice(0, 40)) {\n const line = document.createElement(\"p\");\n line.className = /^h\\d$/.test(block.kind) ? \"readerblock heading\" : \"readerblock\";\n line.textContent = `${block.kind}: ${block.text.slice(0, 200)}`;\n readerroot.append(line);\n }\n}\n\n/** Shows detected lists, tables and pagination shapes as plan suggestions the user can pick. */\nfunction renderdetections(plan: agentplan | undefined, outcomes: stepoutcome[]): void {\n if (!detectionsroot) return;\n detectionsroot.replaceChildren();\n if (!plan) { detectionsroot.textContent = \"Detection steps list their detected lists, tables and pagination shapes here as suggestions.\"; return; }\n const kindof = (stepid: string): string | undefined => plan.steps.find(step => step.id === stepid)?.kind;\n const latest = (kind: string): stepoutcome | undefined => [...outcomes].reverse().find(outcome => outcome.ok && kindof(outcome.stepid) === kind);\n let shown = 0;\n const listoutcome = latest(\"detectlists\");\n const lists = Array.isArray(listoutcome?.details?.lists) ? listoutcome?.details?.lists as listpattern[] : [];\n for (const pattern of lists.slice(0, 6)) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `list of ${pattern.repeat} items \u00B7 ${pattern.itemselector}`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${pattern.itemselector} (repeated list item of ${pattern.container})`));\n item.append(pick);\n detectionsroot.append(item);\n shown += 1;\n }\n const tableoutcome = latest(\"detecttables\");\n const tables = Array.isArray(tableoutcome?.details?.tables) ? tableoutcome?.details?.tables as tableshape[] : [];\n for (const table of tables.slice(0, 6)) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `table of ${table.rows} rows \u00B7 ${table.columns.length} columns \u00B7 ${table.selector}`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${table.selector} (detected data table)`));\n item.append(pick);\n detectionsroot.append(item);\n shown += 1;\n }\n const paginationoutcome = latest(\"countpages\");\n if (paginationoutcome) {\n const item = document.createElement(\"li\");\n const current = typeof paginationoutcome.details?.current === \"number\" ? paginationoutcome.details?.current : 0;\n const total = typeof paginationoutcome.details?.total === \"number\" ? paginationoutcome.details?.total : 0;\n const text = document.createElement(\"span\");\n text.textContent = `pagination: current page ${current} \u00B7 estimated total ${total}`;\n item.append(text);\n detectionsroot.append(item);\n shown += 1;\n }\n if (shown === 0) detectionsroot.textContent = \"Detected lists, tables and pagination shapes appear here as plan suggestions.\";\n}\n\n/** Shows the live mutation and focus stream observed during watched steps. */\nfunction renderstream(mutationevents: mutationevent[], focusevents: focusevent[]): void {\n if (!streamroot) return;\n streamroot.replaceChildren();\n if (mutationevents.length === 0 && focusevents.length === 0) { streamroot.textContent = \"Watched steps stream their mutation and focus events here.\"; return; }\n for (const event of mutationevents.slice(0, 6)) {\n const item = document.createElement(\"li\");\n item.textContent = `${new Date(event.at).toLocaleTimeString()} \u00B7 mutation ${event.event} \u00B7 ${event.targetpath}`;\n streamroot.append(item);\n }\n for (const event of focusevents.slice(0, 6)) {\n const item = document.createElement(\"li\");\n item.textContent = `${new Date(event.at).toLocaleTimeString()} \u00B7 focus ${event.kind} \u00B7 ${event.targetpath}`;\n streamroot.append(item);\n }\n}\n\n/** Renders the latest snapshot diff with added, removed and changed rows. */\nfunction renderdiffs(diffs: snapshotdiff[]): void {\n if (!diffsroot) return;\n diffsroot.replaceChildren();\n const latest = diffs[0];\n if (!latest) { diffsroot.textContent = \"Diff two captured observation versions with a diffsnapshots step.\"; return; }\n const heading = document.createElement(\"p\");\n heading.textContent = `version ${latest.baseversion} \u2192 ${latest.targetversion}: ${latest.added.length} added \u00B7 ${latest.removed.length} removed \u00B7 ${latest.changed.length} changed`;\n diffsroot.append(heading);\n const list = document.createElement(\"ul\");\n for (const entry of [...latest.added, ...latest.removed, ...latest.changed].slice(0, 12)) {\n const item = document.createElement(\"li\");\n item.className = `diffrow ${entry.kind}`;\n item.textContent = `${entry.kind} \u00B7 ${entry.selector} \u00B7 ${entry.summary}`;\n list.append(item);\n }\n diffsroot.append(list);\n}\n\n/** Flags consent banners with a review card before any interaction. */\nfunction renderbanners(banners: bannerreport[]): void {\n if (!bannersroot) return;\n bannersroot.replaceChildren();\n if (banners.length === 0) { bannersroot.textContent = \"No consent banner has been observed yet.\"; return; }\n for (const banner of banners.slice(0, 3)) {\n const card = document.createElement(\"div\");\n card.className = \"bannercard\";\n const title = document.createElement(\"p\");\n title.textContent = `${banner.kind} banner detected \u2014 review it before any interaction.`;\n const text = document.createElement(\"p\");\n text.textContent = banner.text.slice(0, 160) || \"(no banner text)\";\n const controls = document.createElement(\"p\");\n controls.textContent = `controls: ${banner.controls.length > 0 ? banner.controls.join(\", \") : \"none\"}`;\n card.append(title, text, controls);\n bannersroot.append(card);\n }\n}\n\n/** Shows derived selector candidates with their stability scores for reuse. */\nfunction renderselectors(selectors: derivedselector[]): void {\n if (!selectorsroot) return;\n selectorsroot.replaceChildren();\n if (selectors.length === 0) { selectorsroot.textContent = \"Run a deriveselector step to rank stable selectors.\"; return; }\n for (const record of selectors.slice(0, 8)) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `${record.selector} (${record.strategy} \u00B7 stability ${record.score})`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${record.selector} (derived ${record.strategy} selector)`));\n item.append(pick);\n selectorsroot.append(item);\n }\n}\n\nfunction rendercapabilities(report?: capabilityreport): void {\n if (!capabilitiestext) return;\n if (!report) { capabilitiestext.textContent = \"Optional capabilities unknown.\"; return; }\n capabilitiestext.textContent = `tabs ${report.tabs ? \"granted\" : \"absent\"} \u00B7 downloads ${report.downloads ? \"granted\" : \"absent\"} \u00B7 clipboard read ${report.clipboardread ? \"granted\" : \"absent\"} \u00B7 clipboard write ${report.clipboardwrite ? \"granted\" : \"absent\"}`;\n}\n\nfunction renderaudit(events: auditevent[]): void { if (!auditroot) return; auditroot.replaceChildren(); for (const event of events.slice(0, 12)) { const item = document.createElement(\"li\"); item.textContent = `${new Date(event.at).toLocaleTimeString()} \u00B7 ${event.kind} \u00B7 ${event.summary}`; auditroot.append(item); } }\nfunction renderdiagnostic(report?: diagnosticreport): void { if (!diagnosticroot) return; diagnosticroot.replaceChildren(); if (!report) { diagnosticroot.textContent = \"Run a local diagnostic after starting a session to record bridge and page-shape health.\"; return; } const values = [`origin: ${report.origin}`, `title: ${report.title || \"untitled\"}`, `interactive elements: ${report.interactivecount}`, `forms: ${report.formcount}`, `page text length: ${report.textlength}`, `bridge available: ${report.bridgeavailable ? \"yes\" : \"no\"}`]; for (const value of values) { const item = document.createElement(\"li\"); item.textContent = value; diagnosticroot.append(item); } }\nasync function refresh(): Promise<void> { const context = await request({ kind: \"context\" }) as { plan?: agentplan; progress?: planprogress; diagnostic?: diagnosticreport; audit: auditevent[]; outcomes?: stepoutcome[]; capabilities?: capabilityreport; session?: { id: string; pausedat?: number }; map?: clickablemap; retries?: retryoutcome[]; a11y?: a11ycapture; reader?: readercapture; banners?: bannerreport[]; mutationevents?: mutationevent[]; focusevents?: focusevent[]; diffs?: snapshotdiff[]; selectors?: derivedselector[] }; renderplan(context.plan, context.progress, context.outcomes ?? [], context.retries ?? []); renderdiagnostic(context.diagnostic); rendermap(context.map); rendera11y(context.a11y); renderreader(context.reader); renderdetections(context.plan, context.outcomes ?? []); renderstream(context.mutationevents ?? [], context.focusevents ?? []); renderdiffs(context.diffs ?? []); renderbanners(context.banners ?? []); renderselectors(context.selectors ?? []); renderaudit(context.audit); rendercapabilities(context.capabilities); if (context.session?.pausedat) status(\"Session paused. Reviewed actions are blocked until resume.\"); else status(context.session ? \"Active session is visible. The extension is waiting for review.\" : \"No active browser session.\"); }\nasync function create(kind: \"proposelocal\" | \"proposeremote\"): Promise<void> { await request({ kind, objective: objective?.value ?? \"\" }); await refresh(); }\nlocalbutton?.addEventListener(\"click\", () => create(\"proposelocal\").catch(error => status(error instanceof Error ? error.message : String(error), true)));\nremotebutton?.addEventListener(\"click\", () => create(\"proposeremote\").catch(error => status(error instanceof Error ? error.message : String(error), true)));\ndiagnosticbutton?.addEventListener(\"click\", () => request({ kind: \"diagnostic\" }).then(() => refresh()).catch(error => status(error instanceof Error ? error.message : String(error), true)));\nrefresh().catch(error => status(error instanceof Error ? error.message : String(error), true));\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import type { a11ycapture, a11ynode, agentplan, artifactrecord, auditevent, bannerreport, capabilityreport, clickablemap, curatedlist, derivedselector, diagnosticreport, focusevent, listpattern, mutationevent, navcontrol, navrecord, navqueues, planprogress, ratelimitstate, readercapture, resolvedtarget, retryoutcome, safetyverdict, snapshotdiff, stepoutcome, tableshape, toolstep, trailentry, waitprofilerecord } from \"../types.js\";\n\nconst objective = document.querySelector<HTMLTextAreaElement>(\"#objective\");\nconst localbutton = document.querySelector<HTMLButtonElement>(\"#localplan\");\nconst remotebutton = document.querySelector<HTMLButtonElement>(\"#remoteplan\");\nconst diagnosticbutton = document.querySelector<HTMLButtonElement>(\"#diagnostic\");\nconst planroot = document.querySelector<HTMLElement>(\"#plan\");\nconst auditroot = document.querySelector<HTMLElement>(\"#audit\");\nconst diagnosticroot = document.querySelector<HTMLElement>(\"#diagnostics\");\nconst maproot = document.querySelector<HTMLElement>(\"#map\");\nconst a11yroot = document.querySelector<HTMLElement>(\"#a11y\");\nconst readerroot = document.querySelector<HTMLElement>(\"#reader\");\nconst detectionsroot = document.querySelector<HTMLElement>(\"#detections\");\nconst streamroot = document.querySelector<HTMLElement>(\"#stream\");\nconst diffsroot = document.querySelector<HTMLElement>(\"#diffs\");\nconst bannersroot = document.querySelector<HTMLElement>(\"#banners\");\nconst selectorsroot = document.querySelector<HTMLElement>(\"#selectors\");\nconst trailroot = document.querySelector<HTMLElement>(\"#trail\");\nconst navigationroot = document.querySelector<HTMLElement>(\"#navigation\");\nconst statusnode = document.querySelector<HTMLElement>(\"#status\");\nconst progressnode = document.querySelector<HTMLProgressElement>(\"#planprogress\");\nconst capabilitiestext = document.querySelector<HTMLElement>(\"#capabilitiestext\");\n\ntype previewresult = { ok: boolean; summary: string; resolvedtarget?: resolvedtarget; candidates?: string[] };\nconst previews = new Map<string, previewresult>();\n\n/** Safely reads the reviewed options object of one step. */\nfunction options(step: toolstep): Record<string, unknown> {\n if (!step.options) return {};\n try {\n const parsed = JSON.parse(step.options);\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed) ? (parsed as Record<string, unknown>) : {};\n } catch { return {}; }\n}\n\nfunction status(message: string, error = false): void { if (statusnode) { statusnode.textContent = message; statusnode.dataset.state = error ? \"error\" : \"ready\"; } }\nasync function request(message: unknown): Promise<unknown> { const response = await chrome.runtime.sendMessage(message) as { ok: boolean; value?: unknown; error?: string }; if (!response.ok) throw new Error(response.error); return response.value; }\nfunction button(label: string, action: () => Promise<void>, disabled = false): HTMLButtonElement { const element = document.createElement(\"button\"); element.type = \"button\"; element.textContent = label; element.disabled = disabled; element.addEventListener(\"click\", () => action().catch(error => status(error instanceof Error ? error.message : String(error), true))); return element; }\n\n/** Kinds addressable by a css target or a reviewed targetref; only these can be previewed. */\nconst previewkinds = [\"focus\", \"inspect\", \"click\", \"type\", \"scroll\", \"select\", \"hover\", \"clickdeep\", \"rightclick\", \"doubleclick\", \"drag\", \"drop\", \"upload\", \"clear\", \"check\", \"uncheck\", \"toggle\", \"submit\", \"readattribute\", \"readstyle\", \"readgeometry\", \"readvalue\", \"readtext\", \"readhtml\", \"countelements\", \"readtable\", \"highlight\", \"setattribute\", \"removeattribute\", \"waitfor\", \"shiftclick\", \"typetime\", \"appendtext\", \"setvalue\", \"typeedit\", \"submitsearch\", \"selectmulti\", \"chooseradio\", \"setslider\", \"setdate\", \"setcolor\", \"expanddetails\", \"verifyvisible\", \"verifyenabled\", \"pierceshadow\", \"clickpoint\", \"clicktext\", \"clickaria\", \"clickname\", \"resolvexpath\", \"deriveselector\", \"fingerprintsection\"];\n\n/** Topic rows that group the new interaction and observation kinds inside each risk class. */\nconst topictags: Array<{ topic: string; kinds: string[] }> = [\n { topic: \"pointer\", kinds: [\"movepointer\", \"clickpoint\", \"shiftclick\", \"clicktext\", \"clickaria\", \"clickname\", \"pierceshadow\"] },\n { topic: \"typing\", kinds: [\"typetime\", \"appendtext\", \"setvalue\", \"typeedit\", \"submitsearch\"] },\n { topic: \"keys\", kinds: [\"keyhold\", \"keyrelease\"] },\n { topic: \"controls\", kinds: [\"selectmulti\", \"chooseradio\", \"setslider\", \"setdate\", \"setcolor\", \"expanddetails\"] },\n { topic: \"dialogs\", kinds: [\"dismissdialog\"] },\n { topic: \"frames\", kinds: [\"enterframe\"] },\n { topic: \"retry\", kinds: [\"retryaction\"] },\n { topic: \"reads\", kinds: [\"mapclicks\", \"verifyvisible\", \"verifyenabled\", \"resolvexpath\"] },\n { topic: \"observation\", kinds: [\"a11ytree\", \"readvisible\", \"readertree\", \"readoutline\", \"readselection\", \"readopengraph\", \"readlang\", \"detectlanguage\", \"listshadow\", \"listframes\", \"readscrollpos\"] },\n { topic: \"detection\", kinds: [\"detectlists\", \"detecttables\", \"detectinfinitescroll\", \"detectvirtual\", \"detectlazy\", \"detectsticky\", \"detectscrolllock\", \"countpages\", \"classifypage\", \"fingerprintsection\"] },\n { topic: \"watch\", kinds: [\"watchmutate\", \"watchbanner\", \"watchfocus\", \"waitquiet\", \"readjson\", \"diffsnapshots\", \"deriveselector\"] },\n { topic: \"navigation\", kinds: [\"openlink\", \"openprivate\", \"reloadcache\", \"stopnav\", \"waitload\", \"waiturl\", \"followlink\", \"spanav\", \"spawait\", \"rewritequery\", \"setfragment\", \"navlist\", \"navprofile\", \"detecthttp\", \"readredirects\", \"readfinalurl\", \"handleauth\", \"printpdf\", \"prefetch\", \"preconnect\", \"deeplink\", \"reopentab\", \"trailaudit\", \"pausenav\", \"navintent\", \"navrate\", \"openclipboard\", \"checksafe\", \"batchopen\"] },\n];\n\nfunction steptopic(kind: string): string | undefined {\n return topictags.find(tag => tag.kinds.includes(kind))?.topic;\n}\n\n/** Renders plan completion as a live progress ratio. */\nfunction renderprogress(plan: agentplan, completed: string[]): void {\n if (!progressnode) return;\n const total = plan.steps.length || 1;\n progressnode.max = total;\n progressnode.value = completed.length;\n progressnode.textContent = `${completed.length} of ${plan.steps.length} reviewed steps executed`;\n}\n\n/** Renders the latest structured outcome of one step beside its review entry. */\nfunction renderoutcome(step: toolstep, outcomes: stepoutcome[]): HTMLElement | null {\n const outcome = [...outcomes].reverse().find(item => item.stepid === step.id && item.ok) ?? [...outcomes].reverse().find(item => item.stepid === step.id);\n if (!outcome) return null;\n const node = document.createElement(\"details\");\n node.className = \"outcome\";\n const summary = document.createElement(\"summary\");\n summary.textContent = `${outcome.ok ? \"result\" : \"failure\"}: ${outcome.summary}`;\n node.append(summary);\n if (outcome.details && Object.keys(outcome.details).length > 0) {\n const payload = document.createElement(\"pre\");\n payload.textContent = JSON.stringify(outcome.details, null, 2).slice(0, 4000);\n node.append(payload);\n }\n return node;\n}\n\n/** Renders the hold id of a key hold or release step beside its summary. */\nfunction holddetail(step: toolstep): string {\n if (step.kind === \"keyhold\") {\n const holdid = options(step).holdid;\n return typeof holdid === \"string\" && holdid ? ` \u00B7 hold id ${holdid}` : \"\";\n }\n if (step.kind === \"keyrelease\") return step.value ? ` \u00B7 releases hold id ${step.value}` : \"\";\n return \"\";\n}\n\n/** Renders the retry attempts of one retry step on the step timeline. */\nfunction retrydetail(step: toolstep, retries: retryoutcome[]): HTMLElement | null {\n const latest = [...retries].reverse().find(item => item.stepid === step.id);\n if (!latest) return null;\n const node = document.createElement(\"p\");\n node.className = \"timeline\";\n node.textContent = `retry timeline: ${latest.attempts} attempt${latest.attempts === 1 ? \"\" : \"s\"} \u00B7 ${latest.movement.toFixed(1)} px movement \u00B7 ${latest.ok ? \"succeeded\" : \"failed\"}`;\n return node;\n}\n\n/** Renders the network quiet progress of one waitquiet step from its outcome evidence. */\nfunction quietdetail(step: toolstep, outcomes: stepoutcome[]): HTMLElement | null {\n if (step.kind !== \"waitquiet\") return null;\n const latest = [...outcomes].reverse().find(outcome => outcome.stepid === step.id);\n if (!latest) return null;\n const samples = Array.isArray(latest.details?.samples) ? latest.details?.samples as Array<{ at: number; quietfor: number }> : [];\n const idle = typeof latest.details?.idle === \"number\" ? latest.details?.idle : 0;\n const last = samples[samples.length - 1];\n const node = document.createElement(\"p\");\n node.className = \"timeline\";\n node.textContent = `network quiet: ${samples.length} sample${samples.length === 1 ? \"\" : \"s\"} \u00B7 quiet for ${Math.round(last?.quietfor ?? 0)} ms \u00B7 idle threshold ${idle} ms \u00B7 ${latest.ok ? \"quiet reached\" : \"still busy\"}`;\n return node;\n}\n\n/** Renders the navlist progress of one navlist step with the current url and the remaining count. */\nfunction navlistdetail(step: toolstep, progress: planprogress | undefined, outcomes: stepoutcome[]): HTMLElement | null {\n if (step.kind !== \"navlist\") return null;\n const entries = (progress?.outcomes ?? []).filter(outcome => outcome.stepid === step.id && outcome.details?.naventry !== undefined).map(outcome => outcome.details?.naventry as { index: number; url: string; ok: boolean });\n const total = entries.length > 0 ? Math.max(...entries.map(entry => entry.index)) + 1 : 0;\n const latestoutcome = [...outcomes].reverse().find(outcome => outcome.stepid === step.id);\n const remaining = typeof latestoutcome?.details?.remaining === \"number\" ? latestoutcome.details?.remaining : 0;\n const current = entries[entries.length - 1];\n const node = document.createElement(\"p\");\n node.className = \"timeline\";\n node.textContent = entries.length === 0\n ? \"navigation list: no entry completed yet\"\n : `navigation list: ${entries.filter(entry => entry.ok).length} of ${total} entries completed \u00B7 current url ${current?.url ?? \"\"} \u00B7 ${remaining} remaining`;\n return node;\n}\n\n/** Renders the redirect chain and final url of one navigation step from its outcome evidence. */\nfunction redirectdetail(step: toolstep, outcomes: stepoutcome[]): HTMLElement | null {\n if (![\"navigate\", \"followlink\", \"spanav\", \"navlist\", \"openlink\", \"reloadcache\"].includes(step.kind)) return null;\n const latest = [...outcomes].reverse().find(outcome => outcome.stepid === step.id && outcome.details?.hops !== undefined);\n if (!latest) return null;\n const hops = typeof latest.details?.hops === \"number\" ? latest.details?.hops : 0;\n const final = typeof latest.details?.finalurl === \"string\" ? latest.details?.finalurl : \"\";\n const node = document.createElement(\"p\");\n node.className = \"timeline\";\n node.textContent = `redirects: ${Math.max(0, hops - 1)} hop${hops - 1 === 1 ? \"\" : \"s\"} \u00B7 final url ${final || \"unknown\"}`;\n return node;\n}\n\n/** Renders the resolved target details of one previewed interaction step before approval. */\nfunction renderpreview(step: toolstep): HTMLElement | null {\n const preview = previews.get(step.id);\n if (!preview) return null;\n const node = document.createElement(\"details\");\n node.className = \"outcome\";\n const summary = document.createElement(\"summary\");\n summary.textContent = `preview: ${preview.summary}`;\n node.append(summary);\n if (preview.resolvedtarget) {\n const payload = document.createElement(\"pre\");\n payload.textContent = JSON.stringify(preview.resolvedtarget, null, 2);\n node.append(payload);\n }\n if (preview.candidates && preview.candidates.length > 1) {\n const chooser = document.createElement(\"p\");\n chooser.textContent = \"Ambiguous resolution; choose one candidate as the target hint:\";\n node.append(chooser);\n for (const candidate of preview.candidates) {\n node.append(\" \", button(`Choose \"${candidate}\"`, async () => { pickhint(`target hint: ${candidate}`); }));\n }\n }\n return node;\n}\n\nfunction stepitem(plan: agentplan, step: toolstep, completed: string[], outcomes: stepoutcome[], retries: retryoutcome[], progress?: planprogress): HTMLLIElement {\n const item = document.createElement(\"li\");\n const done = completed.includes(step.id);\n item.textContent = `${done ? \"\u2713\" : \"\"} ${step.summary}${holddetail(step)}`;\n const outcome = renderoutcome(step, outcomes);\n if (outcome) item.append(outcome);\n const timeline = step.kind === \"retryaction\" ? retrydetail(step, retries) : quietdetail(step, outcomes);\n if (timeline) item.append(timeline);\n const navlist = navlistdetail(step, progress, outcomes);\n if (navlist) item.append(navlist);\n const redirects = redirectdetail(step, outcomes);\n if (redirects) item.append(redirects);\n const preview = renderpreview(step);\n if (preview) item.append(preview);\n const hastarget = Boolean(step.target) || options(step).targetref !== undefined;\n if (!done && hastarget && previewkinds.includes(step.kind) && [\"pending\", \"approved\"].includes(plan.state)) item.append(\" \", button(\"Preview current target\", async () => { const result = await request({ kind: \"preview\", stepid: step.id }) as previewresult; previews.set(step.id, result); status(result.summary); await refresh(); }));\n if (!done && plan.state === \"approved\") item.append(\" \", button(\"Run this reviewed step\", async () => { const result = await request({ kind: \"execute\", stepid: step.id }) as { summary: string }; status(result.summary); await refresh(); }));\n return item;\n}\n\nfunction steplist(plan: agentplan, steps: toolstep[], completed: string[], outcomes: stepoutcome[], retries: retryoutcome[], risk: toolstep[\"risk\"], progress?: planprogress): HTMLElement | null {\n const group = steps.filter(step => step.risk === risk);\n if (group.length === 0) return null;\n const section = document.createElement(\"section\");\n const heading = document.createElement(\"h3\");\n heading.textContent = `${risk} steps`;\n section.append(heading);\n const general = group.filter(step => steptopic(step.kind) === undefined);\n if (general.length > 0) {\n const list = document.createElement(\"ol\");\n for (const step of general) list.append(stepitem(plan, step, completed, outcomes, retries, progress));\n section.append(list);\n }\n for (const tag of topictags) {\n const tagged = group.filter(step => steptopic(step.kind) === tag.topic);\n if (tagged.length === 0) continue;\n const row = document.createElement(\"h4\");\n row.textContent = `${tag.topic} steps`;\n section.append(row);\n const list = document.createElement(\"ol\");\n for (const step of tagged) list.append(stepitem(plan, step, completed, outcomes, retries, progress));\n section.append(list);\n }\n return section;\n}\n\nfunction renderplan(plan?: agentplan, progress?: planprogress, outcomes: stepoutcome[] = [], retries: retryoutcome[] = []): void {\n if (!planroot) return;\n planroot.replaceChildren();\n if (!plan) { planroot.textContent = \"Start a session, then request a local or endpoint plan. No task runs before review.\"; if (progressnode) progressnode.value = 0; return; }\n const title = document.createElement(\"h2\"); title.textContent = `${plan.state}: ${plan.objective}`; planroot.append(title);\n const completed = progress?.planid === plan.id ? progress.completedsteps : [];\n renderprogress(plan, completed);\n const sensitive = steplist(plan, plan.steps, completed, outcomes, retries, \"sensitive\", progress);\n const interaction = steplist(plan, plan.steps, completed, outcomes, retries, \"interaction\", progress);\n const read = steplist(plan, plan.steps, completed, outcomes, retries, \"read\", progress);\n for (const group of [sensitive, interaction, read]) if (group) planroot.append(group);\n if (plan.state === \"pending\") { planroot.append(button(\"Approve reviewed plan\", async () => { await request({ kind: \"approve\" }); await refresh(); }), button(\"Reject plan\", async () => { await request({ kind: \"reject\" }); await refresh(); })); }\n if (plan.state === \"completed\" && plan.completedat) { const note = document.createElement(\"p\"); note.textContent = \"Every reviewed step has executed and the plan is closed.\"; planroot.append(note); }\n}\n\n/** Records one clickable map entry or candidate as the target hint for the next plan. */\nfunction pickhint(hint: string): void {\n if (objective) objective.value = objective.value ? `${objective.value}\\n${hint}` : hint;\n status(`${hint} recorded as the target hint for the next plan.`);\n}\n\n/** Renders the clickable map as a numbered list beside the plan and lets the user pick entries. */\nfunction rendermap(map?: clickablemap): void {\n if (!maproot) return;\n maproot.replaceChildren();\n if (!map || map.entries.length === 0) { maproot.textContent = \"Run a mapclicks step to number every clickable element on the page.\"; return; }\n for (const entry of map.entries) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `${entry.number}. ${entry.label || entry.selector} (${entry.role})`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${entry.selector} (map entry ${entry.number}, ${entry.label || entry.role})`));\n item.append(pick);\n maproot.append(item);\n }\n}\n\n/** Renders the latest accessibility tree beside the dom snapshot as indented role lines. */\nfunction rendera11y(capture?: a11ycapture): void {\n if (!a11yroot) return;\n a11yroot.replaceChildren();\n if (!capture) { a11yroot.textContent = \"Run an a11ytree step to capture the accessibility tree beside the dom snapshot.\"; return; }\n const lines: string[] = [];\n const walk = (node: a11ynode, depth: number): void => {\n if (lines.length >= 80) return;\n const states = node.states.length > 0 ? ` [${node.states.join(\", \")}]` : \"\";\n const value = node.value !== undefined ? ` = ${node.value}` : \"\";\n lines.push(`${\"\u00B7 \".repeat(depth)}${node.role}: ${node.name || \"(unnamed)\"}${states}${value}`);\n for (const child of node.children) walk(child, depth + 1);\n };\n walk(capture.tree, 0);\n const payload = document.createElement(\"pre\");\n payload.textContent = lines.join(\"\\n\");\n a11yroot.append(payload);\n}\n\n/** Renders the latest reader view text with heading blocks highlighted. */\nfunction renderreader(capture?: readercapture): void {\n if (!readerroot) return;\n readerroot.replaceChildren();\n if (!capture) { readerroot.textContent = \"Run a readertree step to extract the reader view.\"; return; }\n const title = document.createElement(\"p\");\n title.textContent = `${capture.article.title || \"Untitled\"}${capture.article.byline ? ` \u00B7 ${capture.article.byline}` : \"\"} \u00B7 ${capture.article.words} words \u00B7 ${capture.article.blocks.length} blocks`;\n readerroot.append(title);\n for (const block of capture.article.blocks.slice(0, 40)) {\n const line = document.createElement(\"p\");\n line.className = /^h\\d$/.test(block.kind) ? \"readerblock heading\" : \"readerblock\";\n line.textContent = `${block.kind}: ${block.text.slice(0, 200)}`;\n readerroot.append(line);\n }\n}\n\n/** Shows detected lists, tables and pagination shapes as plan suggestions the user can pick. */\nfunction renderdetections(plan: agentplan | undefined, outcomes: stepoutcome[]): void {\n if (!detectionsroot) return;\n detectionsroot.replaceChildren();\n if (!plan) { detectionsroot.textContent = \"Detection steps list their detected lists, tables and pagination shapes here as suggestions.\"; return; }\n const kindof = (stepid: string): string | undefined => plan.steps.find(step => step.id === stepid)?.kind;\n const latest = (kind: string): stepoutcome | undefined => [...outcomes].reverse().find(outcome => outcome.ok && kindof(outcome.stepid) === kind);\n let shown = 0;\n const listoutcome = latest(\"detectlists\");\n const lists = Array.isArray(listoutcome?.details?.lists) ? listoutcome?.details?.lists as listpattern[] : [];\n for (const pattern of lists.slice(0, 6)) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `list of ${pattern.repeat} items \u00B7 ${pattern.itemselector}`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${pattern.itemselector} (repeated list item of ${pattern.container})`));\n item.append(pick);\n detectionsroot.append(item);\n shown += 1;\n }\n const tableoutcome = latest(\"detecttables\");\n const tables = Array.isArray(tableoutcome?.details?.tables) ? tableoutcome?.details?.tables as tableshape[] : [];\n for (const table of tables.slice(0, 6)) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `table of ${table.rows} rows \u00B7 ${table.columns.length} columns \u00B7 ${table.selector}`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${table.selector} (detected data table)`));\n item.append(pick);\n detectionsroot.append(item);\n shown += 1;\n }\n const paginationoutcome = latest(\"countpages\");\n if (paginationoutcome) {\n const item = document.createElement(\"li\");\n const current = typeof paginationoutcome.details?.current === \"number\" ? paginationoutcome.details?.current : 0;\n const total = typeof paginationoutcome.details?.total === \"number\" ? paginationoutcome.details?.total : 0;\n const text = document.createElement(\"span\");\n text.textContent = `pagination: current page ${current} \u00B7 estimated total ${total}`;\n item.append(text);\n detectionsroot.append(item);\n shown += 1;\n }\n if (shown === 0) detectionsroot.textContent = \"Detected lists, tables and pagination shapes appear here as plan suggestions.\";\n}\n\n/** Shows the live mutation and focus stream observed during watched steps. */\nfunction renderstream(mutationevents: mutationevent[], focusevents: focusevent[]): void {\n if (!streamroot) return;\n streamroot.replaceChildren();\n if (mutationevents.length === 0 && focusevents.length === 0) { streamroot.textContent = \"Watched steps stream their mutation and focus events here.\"; return; }\n for (const event of mutationevents.slice(0, 6)) {\n const item = document.createElement(\"li\");\n item.textContent = `${new Date(event.at).toLocaleTimeString()} \u00B7 mutation ${event.event} \u00B7 ${event.targetpath}`;\n streamroot.append(item);\n }\n for (const event of focusevents.slice(0, 6)) {\n const item = document.createElement(\"li\");\n item.textContent = `${new Date(event.at).toLocaleTimeString()} \u00B7 focus ${event.kind} \u00B7 ${event.targetpath}`;\n streamroot.append(item);\n }\n}\n\n/** Renders the latest snapshot diff with added, removed and changed rows. */\nfunction renderdiffs(diffs: snapshotdiff[]): void {\n if (!diffsroot) return;\n diffsroot.replaceChildren();\n const latest = diffs[0];\n if (!latest) { diffsroot.textContent = \"Diff two captured observation versions with a diffsnapshots step.\"; return; }\n const heading = document.createElement(\"p\");\n heading.textContent = `version ${latest.baseversion} \u2192 ${latest.targetversion}: ${latest.added.length} added \u00B7 ${latest.removed.length} removed \u00B7 ${latest.changed.length} changed`;\n diffsroot.append(heading);\n const list = document.createElement(\"ul\");\n for (const entry of [...latest.added, ...latest.removed, ...latest.changed].slice(0, 12)) {\n const item = document.createElement(\"li\");\n item.className = `diffrow ${entry.kind}`;\n item.textContent = `${entry.kind} \u00B7 ${entry.selector} \u00B7 ${entry.summary}`;\n list.append(item);\n }\n diffsroot.append(list);\n}\n\n/** Flags consent banners with a review card before any interaction. */\nfunction renderbanners(banners: bannerreport[]): void {\n if (!bannersroot) return;\n bannersroot.replaceChildren();\n if (banners.length === 0) { bannersroot.textContent = \"No consent banner has been observed yet.\"; return; }\n for (const banner of banners.slice(0, 3)) {\n const card = document.createElement(\"div\");\n card.className = \"bannercard\";\n const title = document.createElement(\"p\");\n title.textContent = `${banner.kind} banner detected \u2014 review it before any interaction.`;\n const text = document.createElement(\"p\");\n text.textContent = banner.text.slice(0, 160) || \"(no banner text)\";\n const controls = document.createElement(\"p\");\n controls.textContent = `controls: ${banner.controls.length > 0 ? banner.controls.join(\", \") : \"none\"}`;\n card.append(title, text, controls);\n bannersroot.append(card);\n }\n}\n\n/** Shows derived selector candidates with their stability scores for reuse. */\nfunction renderselectors(selectors: derivedselector[]): void {\n if (!selectorsroot) return;\n selectorsroot.replaceChildren();\n if (selectors.length === 0) { selectorsroot.textContent = \"Run a deriveselector step to rank stable selectors.\"; return; }\n for (const record of selectors.slice(0, 8)) {\n const item = document.createElement(\"li\");\n const pick = document.createElement(\"button\");\n pick.type = \"button\";\n pick.textContent = `${record.selector} (${record.strategy} \u00B7 stability ${record.score})`;\n pick.addEventListener(\"click\", () => pickhint(`target hint: ${record.selector} (derived ${record.strategy} selector)`));\n item.append(pick);\n selectorsroot.append(item);\n }\n}\n\n/** Renders the navigation trail of the session as a timeline of visited urls. */\nfunction rendertrail(trail: trailentry[]): void {\n if (!trailroot) return;\n trailroot.replaceChildren();\n if (trail.length === 0) { trailroot.textContent = \"No page has been visited inside a reviewed navigation step yet.\"; return; }\n for (const entry of [...trail].reverse().slice(0, 12)) {\n const item = document.createElement(\"li\");\n item.textContent = `${new Date(entry.at).toLocaleTimeString()} \u00B7 ${entry.url}${entry.title ? ` \u00B7 ${entry.title}` : \"\"}${entry.stepid ? ` \u00B7 step ${entry.stepid}` : \"\"}`;\n trailroot.append(item);\n }\n}\n\n/** Renders the navigation state: paused navigation, rate limit windows per domain, wait profiles, redirect chains, curated lists, safety verdicts, artifacts and the basic auth prompt behind the consent gate. */\nfunction rendernavigation(context: { session?: { stoppedat?: number; expiresat: number; origin?: string }; navcontrol?: navcontrol; ratestates?: ratelimitstate[]; waitprofiles?: waitprofilerecord[]; navrecords?: navrecord[]; curated?: curatedlist[]; safeties?: safetyverdict[]; auths?: Array<{ origin: string; username: string; reviewedat: number }>; navqueues?: navqueues; artifacts?: artifactrecord[] }): void {\n if (!navigationroot) return;\n navigationroot.replaceChildren();\n const paused = document.createElement(\"p\");\n if (context.navcontrol?.pausedat) {\n paused.className = \"bannercard\";\n paused.textContent = `Navigation is paused while ${context.navcontrol.reason ?? \"a consent prompt is open\"}; reviewed navigation steps are blocked until it resumes.`;\n } else {\n paused.textContent = \"Navigation is live; no consent prompt holds it.\";\n }\n navigationroot.append(paused);\n const rates = context.ratestates ?? [];\n if (rates.length > 0) {\n const heading = document.createElement(\"p\");\n heading.textContent = \"rate limit windows per domain:\";\n navigationroot.append(heading);\n const list = document.createElement(\"ul\");\n for (const state of rates.slice(0, 6)) {\n const item = document.createElement(\"li\");\n item.textContent = `${state.domain}: ${state.count} of ${state.limit.ceiling} navigations inside the reviewed window of ${state.limit.window} ms`;\n list.append(item);\n }\n navigationroot.append(list);\n }\n const records = context.navrecords ?? [];\n const record = records[0];\n if (record) {\n const chain = document.createElement(\"p\");\n chain.textContent = `latest navigation: ${Math.max(0, record.chain.hops.length - 1)} redirect${record.chain.hops.length - 1 === 1 ? \"\" : \"s\"} \u00B7 final url ${record.finalurl}`;\n navigationroot.append(chain);\n const hops = document.createElement(\"ul\");\n for (const hop of record.chain.hops.slice(0, 6)) {\n const item = document.createElement(\"li\");\n let path = hop.url;\n try { path = new URL(hop.url).pathname; } catch { path = hop.url; }\n item.textContent = `hop ${path} \u00B7 status ${hop.status} \u00B7 ${new Date(hop.at).toLocaleTimeString()}`;\n hops.append(item);\n }\n navigationroot.append(hops);\n }\n const curatedlists = context.curated ?? [];\n if (curatedlists.length > 0) {\n const heading = document.createElement(\"p\");\n heading.textContent = \"curated link lists with per url safety states:\";\n navigationroot.append(heading);\n for (const list of curatedlists.slice(0, 3)) {\n const card = document.createElement(\"div\");\n card.className = \"bannercard\";\n const title = document.createElement(\"p\");\n title.textContent = `${list.links.length} curated url${list.links.length === 1 ? \"\" : \"s\"}${list.reviewedat ? \" \u00B7 opened after review\" : \" \u00B7 waiting for review\"}`;\n card.append(title);\n for (const link of list.links.slice(0, 8)) {\n const line = document.createElement(\"p\");\n line.textContent = `${link.verdict === \"safe\" ? \"\u2713\" : \"\u2717\"} ${link.url}${link.reasons.length > 0 ? ` \u00B7 ${link.reasons.join(\"; \")}` : \"\"}`;\n card.append(line);\n }\n navigationroot.append(card);\n }\n }\n const safeties = context.safeties ?? [];\n const runner = document.createElement(\"p\");\n const checkinput = document.createElement(\"input\");\n checkinput.type = \"url\";\n checkinput.placeholder = \"https://external.example/link\";\n checkinput.setAttribute(\"aria-label\", \"url to verify with checksafe\");\n const checkbutton = button(\"Run checksafe\", async () => {\n const verdict = await request({ kind: \"checksafe\", url: checkinput.value }) as safetyverdict;\n status(verdict.safe ? `${verdict.url} passed every safety check.` : `${verdict.url} is unsafe: ${verdict.reasons.join(\"; \")}.`);\n await refresh();\n });\n runner.append(checkinput, \" \", checkbutton);\n navigationroot.append(runner);\n if (safeties.length > 0) {\n const list = document.createElement(\"ul\");\n for (const verdict of safeties.slice(0, 6)) {\n const item = document.createElement(\"li\");\n item.textContent = `${verdict.safe ? \"safe\" : \"unsafe\"} \u00B7 ${verdict.url}${verdict.reasons.length > 0 ? ` \u00B7 ${verdict.reasons.join(\"; \")}` : \"\"}`;\n list.append(item);\n }\n navigationroot.append(list);\n }\n const active = context.session && !context.session.stoppedat && context.session.expiresat > Date.now();\n const authcard = document.createElement(\"div\");\n authcard.className = \"bannercard\";\n const authtitle = document.createElement(\"p\");\n authtitle.textContent = active ? \"basic auth credentials (stored only after your explicit review):\" : \"basic auth credentials need an active session before they can be reviewed.\";\n authcard.append(authtitle);\n if (active) {\n const origininput = document.createElement(\"input\");\n origininput.type = \"url\";\n origininput.placeholder = context.session?.origin ?? \"https://example.com\";\n origininput.setAttribute(\"aria-label\", \"auth origin\");\n const userinput = document.createElement(\"input\");\n userinput.type = \"text\";\n userinput.placeholder = \"username\";\n userinput.setAttribute(\"aria-label\", \"auth username\");\n const passinput = document.createElement(\"input\");\n passinput.type = \"password\";\n passinput.placeholder = \"password\";\n passinput.setAttribute(\"aria-label\", \"auth password\");\n const storebutton = button(\"Store reviewed credentials\", async () => {\n const stored = await request({ kind: \"storeauth\", origin: origininput.value, username: userinput.value, password: passinput.value }) as { origin: string };\n status(`Reviewed basic auth credentials stored for ${stored.origin}.`);\n await refresh();\n });\n authcard.append(origininput, \" \", userinput, \" \", passinput, \" \", storebutton);\n }\n navigationroot.append(authcard);\n const auths = context.auths ?? [];\n if (auths.length > 0) {\n const list = document.createElement(\"ul\");\n for (const record of auths.slice(0, 4)) {\n const item = document.createElement(\"li\");\n item.textContent = `basic auth for ${record.origin} as ${record.username}, reviewed ${new Date(record.reviewedat).toLocaleString()}`;\n list.append(item);\n }\n navigationroot.append(list);\n }\n const artifacts = context.artifacts ?? [];\n if (artifacts.length > 0) {\n const heading = document.createElement(\"p\");\n heading.textContent = \"task artifacts:\";\n navigationroot.append(heading);\n const list = document.createElement(\"ul\");\n for (const artifact of artifacts.slice(0, 6)) {\n const item = document.createElement(\"li\");\n item.textContent = `${artifact.kind}: ${artifact.name} \u00B7 step ${artifact.stepid}`;\n list.append(item);\n }\n navigationroot.append(list);\n }\n}\n\nfunction rendercapabilities(report?: capabilityreport): void {\n if (!capabilitiestext) return;\n if (!report) { capabilitiestext.textContent = \"Optional capabilities unknown.\"; return; }\n capabilitiestext.textContent = `tabs ${report.tabs ? \"granted\" : \"absent\"} \u00B7 downloads ${report.downloads ? \"granted\" : \"absent\"} \u00B7 clipboard read ${report.clipboardread ? \"granted\" : \"absent\"} \u00B7 clipboard write ${report.clipboardwrite ? \"granted\" : \"absent\"}`;\n}\n\nfunction renderaudit(events: auditevent[]): void { if (!auditroot) return; auditroot.replaceChildren(); for (const event of events.slice(0, 12)) { const item = document.createElement(\"li\"); item.textContent = `${new Date(event.at).toLocaleTimeString()} \u00B7 ${event.kind} \u00B7 ${event.summary}`; auditroot.append(item); } }\nfunction renderdiagnostic(report?: diagnosticreport): void { if (!diagnosticroot) return; diagnosticroot.replaceChildren(); if (!report) { diagnosticroot.textContent = \"Run a local diagnostic after starting a session to record bridge and page-shape health.\"; return; } const values = [`origin: ${report.origin}`, `title: ${report.title || \"untitled\"}`, `interactive elements: ${report.interactivecount}`, `forms: ${report.formcount}`, `page text length: ${report.textlength}`, `bridge available: ${report.bridgeavailable ? \"yes\" : \"no\"}`]; for (const value of values) { const item = document.createElement(\"li\"); item.textContent = value; diagnosticroot.append(item); } }\nasync function refresh(): Promise<void> { const context = await request({ kind: \"context\" }) as { plan?: agentplan; progress?: planprogress; diagnostic?: diagnosticreport; audit: auditevent[]; outcomes?: stepoutcome[]; capabilities?: capabilityreport; session?: { id: string; pausedat?: number; stoppedat?: number; expiresat: number; origin?: string }; map?: clickablemap; retries?: retryoutcome[]; a11y?: a11ycapture; reader?: readercapture; banners?: bannerreport[]; mutationevents?: mutationevent[]; focusevents?: focusevent[]; diffs?: snapshotdiff[]; selectors?: derivedselector[]; trail?: { trail: trailentry[] }; navrecords?: navrecord[]; ratestates?: ratelimitstate[]; safeties?: safetyverdict[]; curated?: curatedlist[]; waitprofiles?: waitprofilerecord[]; auths?: Array<{ origin: string; username: string; reviewedat: number }>; navcontrol?: navcontrol; navqueues?: navqueues; artifacts?: artifactrecord[] }; renderplan(context.plan, context.progress, context.outcomes ?? [], context.retries ?? []); renderdiagnostic(context.diagnostic); rendermap(context.map); rendera11y(context.a11y); renderreader(context.reader); renderdetections(context.plan, context.outcomes ?? []); renderstream(context.mutationevents ?? [], context.focusevents ?? []); renderdiffs(context.diffs ?? []); renderbanners(context.banners ?? []); renderselectors(context.selectors ?? []); rendertrail(context.trail?.trail ?? []); rendernavigation(context); renderaudit(context.audit); rendercapabilities(context.capabilities); if (context.session?.pausedat) status(\"Session paused. Reviewed actions are blocked until resume.\"); else status(context.session ? \"Active session is visible. The extension is waiting for review.\" : \"No active browser session.\"); }\nasync function create(kind: \"proposelocal\" | \"proposeremote\"): Promise<void> { await request({ kind, objective: objective?.value ?? \"\" }); await refresh(); }\nlocalbutton?.addEventListener(\"click\", () => create(\"proposelocal\").catch(error => status(error instanceof Error ? error.message : String(error), true)));\nremotebutton?.addEventListener(\"click\", () => create(\"proposeremote\").catch(error => status(error instanceof Error ? error.message : String(error), true)));\ndiagnosticbutton?.addEventListener(\"click\", () => request({ kind: \"diagnostic\" }).then(() => refresh()).catch(error => status(error instanceof Error ? error.message : String(error), true)));\nrefresh().catch(error => status(error instanceof Error ? error.message : String(error), true));\n"],
5
+ "mappings": "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",
6
+ "names": ["record"]
7
7
  }
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOEjO8Z0PDgQyfvawGcaO2j+o0GLCFTLNj7TkYC/Avo9l2NenMRq7gp90Nfd7E9MViv/OMcCKSYZ5unv12QPRtv31C+a5UQWDFAOP/cH5mwMd6hsayElrSoW8ta+FwFqmr9dIFkn7cQEU3YhZr4Gcbs+ycUHOxVgDA4NBKB0rQ6e9VW5LvTw0isRYUrqM+M72vKxHk9zUIYYn/LGPvottKBYi2GLr0PHSeC2UE+Shmq7vcFIXj6hDjvD4kLJ5sKoUllEcZ1TPuBcnHUQ9ndKA5iktXDQOIJCUJmi7a0YJ2PGg7fvpYfT9k0ai/qZ+pIoRfoOEwE01bPoDn7NjeYnNQIDAQAB",
4
4
  "name": "Devthink",
5
- "version": "1.1.34",
5
+ "version": "1.1.35",
6
6
  "description": "A consent-first bridge for reviewed browser-agent tasks.",
7
7
  "permissions": [
8
8
  "activeTab",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wenathlan/extension",
3
- "version": "1.1.34",
3
+ "version": "1.1.35",
4
4
  "description": "Consent-first browser agent bridge and Manifest V3 extension.",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-only",