@wenathlan/extension 1.1.64 → 1.1.65
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.
- package/README.md +4 -3
- package/dist/datagrid.d.ts +46 -0
- package/dist/datagrid.d.ts.map +1 -0
- package/dist/evidenceviews.d.ts +45 -0
- package/dist/evidenceviews.d.ts.map +1 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +752 -1
- package/dist/index.js.map +4 -4
- package/dist/memory.d.ts +38 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/pickerviews.d.ts +72 -0
- package/dist/pickerviews.d.ts.map +1 -0
- package/dist/policy.d.ts +59 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/portability.d.ts +35 -0
- package/dist/portability.d.ts.map +1 -0
- package/dist/protocol.d.ts +114 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/quickactions.d.ts +46 -0
- package/dist/quickactions.d.ts.map +1 -0
- package/dist/siteprefs.d.ts +45 -0
- package/dist/siteprefs.d.ts.map +1 -0
- package/dist/statusviews.d.ts +65 -0
- package/dist/statusviews.d.ts.map +1 -0
- package/dist/tourviews.d.ts +28 -0
- package/dist/tourviews.d.ts.map +1 -0
- package/dist/types.d.ts +252 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/extension/dist/background.js +900 -2
- package/extension/dist/background.js.map +4 -4
- package/extension/dist/dashboardpage.html +1 -0
- package/extension/dist/dashboardpage.js +18 -0
- package/extension/dist/dashboardpage.js.map +2 -2
- package/extension/dist/manifest.json +1 -1
- package/extension/dist/optionspage.html +4 -0
- package/extension/dist/optionspage.js +149 -0
- package/extension/dist/optionspage.js.map +2 -2
- package/extension/dist/pagebridge.js.map +1 -1
- package/extension/dist/popup.html +2 -2
- package/extension/dist/popup.js +90 -0
- package/extension/dist/popup.js.map +2 -2
- package/extension/dist/sidepanel.html +2 -2
- package/extension/dist/sidepanel.js +84 -3
- package/extension/dist/sidepanel.js.map +2 -2
- package/extension/dist/style.css +3 -1
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Devthink review</title><link rel="stylesheet" href="style.css"></head>
|
|
4
4
|
<body><main class="wide"><header><p class="eyebrow">REVIEW GATE</p><h1>Plan before action</h1><p>Every browser operation remains blocked until the user reviews and approves it here.</p></header><label for="objective">Objective</label><textarea id="objective" rows="4" placeholder="Describe a browser task to turn into a reviewable plan."></textarea><div class="actions"><button id="localplan">Create local observation plan</button><button id="remoteplan" class="secondary">Ask configured endpoint</button><button id="tasksubmit" class="secondary">Submit task goal</button><button id="diagnostic" class="secondary">Capture local diagnostics</button></div>
|
|
5
|
-
<nav class="actions" id="workspacetabs" aria-label="Workspace tabs"><button id="tabplan" data-tab="plan">Plan</button><button id="tabrun" data-tab="run" class="secondary">Run</button><button id="tabreview" data-tab="review" class="secondary">Review</button></nav>
|
|
5
|
+
<nav class="actions" id="workspacetabs" aria-label="Workspace tabs"><button id="tabplan" data-tab="plan">Plan</button><button id="tabrun" data-tab="run" class="secondary">Run</button><button id="tabreview" data-tab="review" class="secondary">Review</button><button id="tabdata" data-tab="data" class="secondary">Data</button></nav>
|
|
6
6
|
<div class="actions"><input id="command" placeholder="Ask any connected model in plain language" aria-label="Natural language command"><button id="commandsend" class="secondary">Ask model</button><span id="intentbadge" class="muted"></span></div>
|
|
7
7
|
<div class="actions"><input id="paletteinput" placeholder="Command palette (ctrl+.)" aria-label="Command palette search"><button id="paletteopen" class="secondary">Palette</button></div><div id="palettematches" class="panel"></div><p id="status" role="status">Loading session state.</p><p id="capabilitiestext" role="status" class="muted">Optional capabilities unknown.</p><section><h2>Current plan</h2><progress id="planprogress" max="1" value="0"></progress><div id="plan" class="panel"></div></section>
|
|
8
8
|
<section><h2>Plan cards</h2><div id="plancards" class="panel"></div></section>
|
|
9
9
|
<section><h2>Steps timeline</h2><div id="stepstimeline" class="panel"></div></section>
|
|
10
|
-
<section><h2>Log stream</h2><div id="logstream" class="panel"></div></section><section><h2>Clickable map</h2><ol id="map" class="audit maplist"></ol></section><section><h2>Navigation trail</h2><ol id="trail" class="audit"></ol></section><section><h2>Navigation state</h2><div id="navigation" class="panel"></div></section><section><h2>Tabs and windows</h2><div id="tabswindows" class="panel"></div></section><section><h2>Forms and data</h2><div id="forms" class="panel"></div></section><section><h2>Files and downloads</h2><div id="files" class="panel"></div></section><section><h2>Capture gallery</h2><div id="captures" class="panel"></div></section><section><h2>Media</h2><div id="media" class="panel"></div></section><section><h2>Network calls</h2><div id="calls" class="panel"></div></section><section><h2>Network view</h2><div id="netview" class="panel"></div></section><section><h2>Traffic control</h2><div id="traffic" class="panel"></div></section><section><h2>Run timeline</h2><div id="timeline" class="panel"></div></section><section><h2>Debugger</h2><div id="debugger" class="panel"></div></section><section><h2>Profiling</h2><div id="profiling" class="panel"></div></section><section><h2>Emulation</h2><div id="emulation" class="panel"></div></section><section><h2>Session grid</h2><div id="sessiongrid" class="panel"></div></section><section><h2>History search</h2><div id="historysearch" class="panel"></div></section><section><h2>Site notes</h2><div id="sitenotes" class="panel"></div></section><section><h2>Scratchpad</h2><div id="scratchpad" class="panel"></div></section><section><h2>Session memory</h2><div id="sessionmemory" class="panel"></div></section><section><h2>Workflows</h2><div id="workflows" class="panel"></div></section><section><h2>Workflow editor</h2><div id="workfloweditor" class="panel"></div></section><section><h2>Triggers</h2><div id="triggers" class="panel"></div></section><section><h2>Agent protocol</h2><div id="agentprotocol" class="panel"></div></section>
|
|
10
|
+
<section><h2>Data grid</h2><div class="actions"><input id="gridquery" placeholder="Filter rows locally" aria-label="Filter the datagrid rows locally"><button id="gridbuild" class="secondary">Preview extraction</button><button id="gridexport" class="secondary">Export csv</button></div><div id="datagrid" class="panel" role="table" aria-label="Extraction preview"></div></section><section><h2>Compare viewer</h2><div id="compareviewer" class="panel"></div></section><section><h2>Shot panel</h2><div id="shotpanel" class="panel"></div></section><section><h2>Picker overlay</h2><div class="actions"><button id="pickerstart" class="secondary">Start picker session</button></div><div id="picker" class="panel"></div></section><section><h2>Log stream</h2><div id="logstream" class="panel"></div></section><section><h2>Clickable map</h2><ol id="map" class="audit maplist"></ol></section><section><h2>Navigation trail</h2><ol id="trail" class="audit"></ol></section><section><h2>Navigation state</h2><div id="navigation" class="panel"></div></section><section><h2>Tabs and windows</h2><div id="tabswindows" class="panel"></div></section><section><h2>Forms and data</h2><div id="forms" class="panel"></div></section><section><h2>Files and downloads</h2><div id="files" class="panel"></div></section><section><h2>Capture gallery</h2><div id="captures" class="panel"></div></section><section><h2>Media</h2><div id="media" class="panel"></div></section><section><h2>Network calls</h2><div id="calls" class="panel"></div></section><section><h2>Network view</h2><div id="netview" class="panel"></div></section><section><h2>Traffic control</h2><div id="traffic" class="panel"></div></section><section><h2>Run timeline</h2><div id="timeline" class="panel"></div></section><section><h2>Debugger</h2><div id="debugger" class="panel"></div></section><section><h2>Profiling</h2><div id="profiling" class="panel"></div></section><section><h2>Emulation</h2><div id="emulation" class="panel"></div></section><section><h2>Session grid</h2><div id="sessiongrid" class="panel"></div></section><section><h2>History search</h2><div id="historysearch" class="panel"></div></section><section><h2>Site notes</h2><div id="sitenotes" class="panel"></div></section><section><h2>Scratchpad</h2><div id="scratchpad" class="panel"></div></section><section><h2>Session memory</h2><div id="sessionmemory" class="panel"></div></section><section><h2>Workflows</h2><div id="workflows" class="panel"></div></section><section><h2>Workflow editor</h2><div id="workfloweditor" class="panel"></div></section><section><h2>Triggers</h2><div id="triggers" class="panel"></div></section><section><h2>Agent protocol</h2><div id="agentprotocol" class="panel"></div></section>
|
|
11
11
|
<section><h2>Models</h2><div id="models" class="panel"></div></section><section><h2>Agents</h2><div id="agents" class="panel"></div></section><section><h2>Execution environments</h2><div id="environments" class="panel"></div></section><section><h2>Security</h2><div id="security" class="panel"></div></section><section><h2>Console diff</h2><div id="consolediff" class="panel"></div></section><section><h2>Datasets</h2><div id="datasets" class="panel"></div></section><section><h2>Consent banners</h2><div id="banners" class="panel"></div></section><section><h2>Accessibility tree</h2><div id="a11y" class="panel"></div></section><section><h2>Reader view</h2><div id="reader" class="panel"></div></section><section><h2>Detected shapes</h2><ol id="detections" class="audit maplist"></ol></section><section><h2>Watch stream</h2><ol id="stream" class="audit"></ol></section><section><h2>Snapshot diffs</h2><div id="diffs" class="panel"></div></section><section><h2>Derived selectors</h2><ol id="selectors" class="audit maplist"></ol></section><section><h2>Structured diagnostics</h2><ul id="diagnostics" class="audit"></ul></section><section><h2>Local audit</h2><ol id="audit" class="audit"></ol></section></main><script type="module" src="sidepanel.js"></script></body>
|
|
12
12
|
</html>
|
|
@@ -7258,17 +7258,18 @@ var logstreamfilter = {};
|
|
|
7258
7258
|
function applyworkspacetabs(active) {
|
|
7259
7259
|
const plantitles = ["Current plan", "Clickable map", "Detected shapes", "Derived selectors", "Structured diagnostics"];
|
|
7260
7260
|
const reviewtitles = ["Plan cards", "Steps timeline", "Log stream", "Local audit", "Session grid", "History search", "Site notes", "Scratchpad", "Session memory", "Security", "Console diff", "Datasets", "Consent banners", "Accessibility tree", "Reader view", "Snapshot diffs", "Agent protocol", "Models"];
|
|
7261
|
+
const datatitles = ["Data grid", "Compare viewer", "Shot panel", "Picker overlay"];
|
|
7261
7262
|
for (const section of Array.from(document.querySelectorAll("main > section"))) {
|
|
7262
7263
|
const title = section.querySelector("h2")?.textContent?.trim() ?? "";
|
|
7263
|
-
const tab = plantitles.includes(title) ? "plan" : reviewtitles.includes(title) ? "review" : "run";
|
|
7264
|
+
const tab = plantitles.includes(title) ? "plan" : reviewtitles.includes(title) ? "review" : datatitles.includes(title) ? "data" : "run";
|
|
7264
7265
|
section.hidden = tab !== active;
|
|
7265
7266
|
}
|
|
7266
|
-
for (const tab of ["plan", "run", "review"]) {
|
|
7267
|
+
for (const tab of ["plan", "run", "review", "data"]) {
|
|
7267
7268
|
const element = document.querySelector(`#tab${tab}`);
|
|
7268
7269
|
if (element) element.className = tab === active ? "" : "secondary";
|
|
7269
7270
|
}
|
|
7270
7271
|
}
|
|
7271
|
-
for (const tab of ["plan", "run", "review"]) {
|
|
7272
|
+
for (const tab of ["plan", "run", "review", "data"]) {
|
|
7272
7273
|
document.querySelector(`#tab${tab}`)?.addEventListener("click", () => applyworkspacetabs(tab));
|
|
7273
7274
|
}
|
|
7274
7275
|
applyworkspacetabs("plan");
|
|
@@ -7528,4 +7529,84 @@ document.addEventListener("keydown", (event) => {
|
|
|
7528
7529
|
});
|
|
7529
7530
|
void renderworkspacepalette().catch(() => {
|
|
7530
7531
|
});
|
|
7532
|
+
var gridnode = document.querySelector("#datagrid");
|
|
7533
|
+
var gridqueryinput = document.querySelector("#gridquery");
|
|
7534
|
+
var comparenode = document.querySelector("#compareviewer");
|
|
7535
|
+
var shotpanelnode = document.querySelector("#shotpanel");
|
|
7536
|
+
var pickernode = document.querySelector("#picker");
|
|
7537
|
+
var opengrid;
|
|
7538
|
+
async function renderdatagrid() {
|
|
7539
|
+
if (!gridnode) return;
|
|
7540
|
+
try {
|
|
7541
|
+
const view = await request({ kind: "context" });
|
|
7542
|
+
const rows = view.datasets?.[0]?.rows ?? [];
|
|
7543
|
+
if (rows.length === 0) {
|
|
7544
|
+
gridnode.textContent = "No extracted rows yet; run a read step and the grid previews its result.";
|
|
7545
|
+
return;
|
|
7546
|
+
}
|
|
7547
|
+
const result = await request({ kind: "views", datagrid: { view: { title: view.datasets?.[0]?.name ?? "Extraction result", rows } } });
|
|
7548
|
+
opengrid = result.view;
|
|
7549
|
+
rendergridrows(result.view, gridqueryinput?.value ?? "");
|
|
7550
|
+
} catch (error) {
|
|
7551
|
+
gridnode.textContent = error instanceof Error ? error.message : String(error);
|
|
7552
|
+
}
|
|
7553
|
+
}
|
|
7554
|
+
function rendergridrows(view, query) {
|
|
7555
|
+
if (!gridnode) return;
|
|
7556
|
+
const text = query.trim().toLowerCase();
|
|
7557
|
+
const rows = text === "" ? view.rows : view.rows.filter((row) => Object.values(row.values).some((value) => value.toLowerCase().includes(text)));
|
|
7558
|
+
gridnode.replaceChildren();
|
|
7559
|
+
const header = document.createElement("p");
|
|
7560
|
+
header.textContent = `${view.columns.length} inferred column${view.columns.length === 1 ? "" : "s"} (${view.columns.map((column) => `${column.field}:${column.type}`).join(", ")}) \u2014 ${rows.length} row${rows.length === 1 ? "" : "s"}.`;
|
|
7561
|
+
gridnode.append(header);
|
|
7562
|
+
const list = document.createElement("ul");
|
|
7563
|
+
list.className = "audit";
|
|
7564
|
+
for (const row of rows) list.append(Object.assign(document.createElement("li"), { textContent: view.columns.map((column) => `${column.field}=${row.values[column.field] ?? ""}`).join(" \xB7 ") }));
|
|
7565
|
+
gridnode.append(list);
|
|
7566
|
+
}
|
|
7567
|
+
async function exportgrid() {
|
|
7568
|
+
if (opengrid === void 0) {
|
|
7569
|
+
status("Open the datagrid preview first; the export runs on the grid view.", true);
|
|
7570
|
+
return;
|
|
7571
|
+
}
|
|
7572
|
+
const result = await request({ kind: "views", export: { run: { format: "csv", scope: "run" } } });
|
|
7573
|
+
status(`The ${result.format} export of the ${result.scope} scope runs with masked values only; the surface module renders the payload.`);
|
|
7574
|
+
}
|
|
7575
|
+
async function startpicker() {
|
|
7576
|
+
if (!pickernode) return;
|
|
7577
|
+
try {
|
|
7578
|
+
const result = await request({ kind: "views", picker: { start: { candidates: [] } } });
|
|
7579
|
+
const picker = result.picker;
|
|
7580
|
+
if (picker === void 0 || picker.candidates.length === 0) {
|
|
7581
|
+
pickernode.textContent = "The picker session started with no candidate yet; the observed elements of the granted origin join the session as the read steps run.";
|
|
7582
|
+
return;
|
|
7583
|
+
}
|
|
7584
|
+
pickernode.replaceChildren();
|
|
7585
|
+
const list = document.createElement("ol");
|
|
7586
|
+
list.className = "audit";
|
|
7587
|
+
for (const candidate of picker.candidates) list.append(Object.assign(document.createElement("li"), { textContent: `${candidate.selector} (stability ${candidate.stabilityscore}) \u2014 ${candidate.reason}` }));
|
|
7588
|
+
pickernode.append(list);
|
|
7589
|
+
} catch (error) {
|
|
7590
|
+
pickernode.textContent = error instanceof Error ? error.message : String(error);
|
|
7591
|
+
}
|
|
7592
|
+
}
|
|
7593
|
+
async function renderevidence() {
|
|
7594
|
+
if (comparenode) comparenode.textContent = "Every executed write step pairs its before and after captures here; the slider overlays the two captures so you see exactly what the step changed.";
|
|
7595
|
+
if (shotpanelnode) shotpanelnode.textContent = "The shotpanel previews the capture of a step with its redaction verdicts once a capture exists; the zoom and pan stay inside this surface.";
|
|
7596
|
+
}
|
|
7597
|
+
gridqueryinput?.addEventListener("input", () => {
|
|
7598
|
+
if (opengrid !== void 0) rendergridrows(opengrid, gridqueryinput?.value ?? "");
|
|
7599
|
+
});
|
|
7600
|
+
document.querySelector("#gridbuild")?.addEventListener("click", () => {
|
|
7601
|
+
void renderdatagrid().catch((error) => status(error instanceof Error ? error.message : String(error), true));
|
|
7602
|
+
});
|
|
7603
|
+
document.querySelector("#gridexport")?.addEventListener("click", () => {
|
|
7604
|
+
void exportgrid().catch((error) => status(error instanceof Error ? error.message : String(error), true));
|
|
7605
|
+
});
|
|
7606
|
+
document.querySelector("#pickerstart")?.addEventListener("click", () => {
|
|
7607
|
+
void startpicker().catch((error) => status(error instanceof Error ? error.message : String(error), true));
|
|
7608
|
+
});
|
|
7609
|
+
void renderdatagrid().catch(() => {
|
|
7610
|
+
});
|
|
7611
|
+
void renderevidence();
|
|
7531
7612
|
//# sourceMappingURL=sidepanel.js.map
|