@wenathlan/extension 1.1.65 → 1.1.66
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/attentionfeed.d.ts +74 -0
- package/dist/attentionfeed.d.ts.map +1 -0
- package/dist/backgroundruns.d.ts +71 -0
- package/dist/backgroundruns.d.ts.map +1 -0
- package/dist/flowlibrary.d.ts +147 -0
- package/dist/flowlibrary.d.ts.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +686 -3
- package/dist/index.js.map +4 -4
- package/dist/memory.d.ts +67 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/outputcompare.d.ts +68 -0
- package/dist/outputcompare.d.ts.map +1 -0
- package/dist/policy.d.ts +63 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/protocol.d.ts +167 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/runreplay.d.ts +53 -0
- package/dist/runreplay.d.ts.map +1 -0
- package/dist/surfaces.d.ts +2 -2
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/syncbridge.d.ts +80 -0
- package/dist/syncbridge.d.ts.map +1 -0
- package/dist/types.d.ts +194 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/extension/dist/background.js +944 -6
- package/extension/dist/background.js.map +4 -4
- package/extension/dist/dashboardpage.html +2 -0
- package/extension/dist/dashboardpage.js +90 -0
- package/extension/dist/dashboardpage.js.map +2 -2
- package/extension/dist/manifest.json +1 -1
- package/extension/dist/optionspage.html +1 -0
- package/extension/dist/optionspage.js +73 -0
- package/extension/dist/optionspage.js.map +2 -2
- package/extension/dist/pagebridge.js.map +1 -1
- package/extension/dist/popup.html +1 -1
- package/extension/dist/popup.js +48 -36
- package/extension/dist/popup.js.map +2 -2
- package/extension/dist/sidepanel.html +1 -1
- package/extension/dist/sidepanel.js +135 -0
- package/extension/dist/sidepanel.js.map +2 -2
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,6 @@
|
|
|
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>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>
|
|
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>Ecosystem</h2><div id="ecosystem" class="panel"></div><div class="actions"><input id="replayrunid" placeholder="Sealed run id to replay" aria-label="Run replay run id"><input id="comparerunida" placeholder="Compare run a" aria-label="Output compare run a"><input id="comparerunidb" placeholder="Compare run b" aria-label="Output compare run b"></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>
|
|
@@ -7609,4 +7609,139 @@ document.querySelector("#pickerstart")?.addEventListener("click", () => {
|
|
|
7609
7609
|
void renderdatagrid().catch(() => {
|
|
7610
7610
|
});
|
|
7611
7611
|
void renderevidence();
|
|
7612
|
+
var ecosystemroot = document.querySelector("#ecosystem");
|
|
7613
|
+
var replayruninput = document.querySelector("#replayrunid");
|
|
7614
|
+
var compareruninputa = document.querySelector("#comparerunida");
|
|
7615
|
+
var compareruninputb = document.querySelector("#comparerunidb");
|
|
7616
|
+
async function renderecosystem() {
|
|
7617
|
+
if (!ecosystemroot) return;
|
|
7618
|
+
try {
|
|
7619
|
+
const view = await request({ kind: "ecosystem" });
|
|
7620
|
+
ecosystemroot.replaceChildren();
|
|
7621
|
+
const attention = document.createElement("div");
|
|
7622
|
+
attention.className = "sessionrow";
|
|
7623
|
+
const attentionheadline = document.createElement("p");
|
|
7624
|
+
attentionheadline.textContent = `Attention feed: ${view.attention.length} entr${view.attention.length === 1 ? "y" : "ies"} need a human; the statusbadge counts them on the toolbar icon.`;
|
|
7625
|
+
attention.append(attentionheadline);
|
|
7626
|
+
for (const entry of view.attention.slice(0, 10)) {
|
|
7627
|
+
const row = document.createElement("p");
|
|
7628
|
+
row.textContent = `${entry.severity} ${entry.cause} \u2014 ${entry.summary} (${entry.deeplink})`;
|
|
7629
|
+
row.append(" ", button("Dismiss", async () => {
|
|
7630
|
+
await request({ kind: "ecosystem", attention: { dismiss: { id: entry.id } } });
|
|
7631
|
+
await renderecosystem();
|
|
7632
|
+
}));
|
|
7633
|
+
attention.append(row);
|
|
7634
|
+
}
|
|
7635
|
+
if (view.attention.length === 0) {
|
|
7636
|
+
const empty = document.createElement("p");
|
|
7637
|
+
empty.textContent = "Nothing needs attention; gate waits, phishguard blocks, deferrals and failures all land here.";
|
|
7638
|
+
attention.append(empty);
|
|
7639
|
+
}
|
|
7640
|
+
ecosystemroot.append(attention);
|
|
7641
|
+
const library = document.createElement("div");
|
|
7642
|
+
library.className = "sessionrow";
|
|
7643
|
+
const libraryheadline = document.createElement("p");
|
|
7644
|
+
libraryheadline.textContent = `Installed flowlibrary entries: ${view.installed.length} beside the native workflows.`;
|
|
7645
|
+
library.append(libraryheadline);
|
|
7646
|
+
for (const entry of view.installed) {
|
|
7647
|
+
const row = document.createElement("p");
|
|
7648
|
+
row.textContent = `${entry.title} ${entry.version} (${entry.id})`;
|
|
7649
|
+
row.append(" ", button("Fork", async () => {
|
|
7650
|
+
const fork = await request({ kind: "ecosystem", library: { fork: { entryid: entry.id } } });
|
|
7651
|
+
status(`The fork created the independent local workflow ${fork.fork.id}.`);
|
|
7652
|
+
await refresh();
|
|
7653
|
+
}));
|
|
7654
|
+
row.append(" ", button("Remove", async () => {
|
|
7655
|
+
await request({ kind: "ecosystem", library: { remove: { entryid: entry.id } } });
|
|
7656
|
+
status(`The entry ${entry.id} left the flowlibrary; its local forks stayed untouched.`);
|
|
7657
|
+
await renderecosystem();
|
|
7658
|
+
}));
|
|
7659
|
+
library.append(row);
|
|
7660
|
+
}
|
|
7661
|
+
if (view.installed.length === 0) {
|
|
7662
|
+
const empty = document.createElement("p");
|
|
7663
|
+
empty.textContent = "No installed library entry yet; browse the flowlibrary on the dashboardpage and install one behind its grant diff.";
|
|
7664
|
+
library.append(empty);
|
|
7665
|
+
}
|
|
7666
|
+
ecosystemroot.append(library);
|
|
7667
|
+
const background = document.createElement("div");
|
|
7668
|
+
background.className = "sessionrow";
|
|
7669
|
+
const backgroundheadline = document.createElement("p");
|
|
7670
|
+
backgroundheadline.textContent = `Background run queue: ${view.backgroundruns.length} entr${view.backgroundruns.length === 1 ? "y" : "ies"}.`;
|
|
7671
|
+
background.append(backgroundheadline);
|
|
7672
|
+
for (const run of view.backgroundruns.slice(0, 8)) background.append(Object.assign(document.createElement("p"), { textContent: `${run.state} \u2014 ${run.workflowid} \u2014 ${run.progress}${run.keepaliveheld ? " \u2014 keepalive held" : ""}` }));
|
|
7673
|
+
if (view.backgroundruns.length === 0) background.append(Object.assign(document.createElement("p"), { textContent: "No background run stands in the queue." }));
|
|
7674
|
+
ecosystemroot.append(background);
|
|
7675
|
+
const replay = document.createElement("div");
|
|
7676
|
+
replay.className = "sessionrow";
|
|
7677
|
+
const replayheadline = document.createElement("p");
|
|
7678
|
+
replayheadline.textContent = "Run replay: open a sealed run and walk its verified chain step by step with the restored observation and capture of each step.";
|
|
7679
|
+
replay.append(replayheadline);
|
|
7680
|
+
const replaycontrols = document.createElement("div");
|
|
7681
|
+
replaycontrols.className = "actions";
|
|
7682
|
+
replaycontrols.append(button("Open replay", async () => {
|
|
7683
|
+
const runid = replayruninput?.value.trim() ?? "";
|
|
7684
|
+
if (runid === "") throw new Error("The runreplay needs its recorded run id.");
|
|
7685
|
+
const result = await request({ kind: "ecosystem", replay: { open: { runid } } });
|
|
7686
|
+
status(`Replay of ${runid}: cursor at step ${result.replay.cursor} of ${result.replay.steps.length}${result.restored.observationversion !== void 0 ? `, observation ${result.restored.observationversion}` : ""}${result.restored.captureid !== void 0 ? `, capture ${result.restored.captureid}` : ""}.`);
|
|
7687
|
+
const timeline = document.createElement("ol");
|
|
7688
|
+
timeline.className = "audit";
|
|
7689
|
+
for (const step of result.replay.steps) timeline.append(Object.assign(document.createElement("li"), { textContent: `${step.index === result.replay.cursor ? "\u25B6" : "\xB7"} ${step.stepid} \u2014 ${step.summary}${step.gateresolutions.length > 0 ? ` [gates: ${step.gateresolutions.map((gate) => `${gate.kind} ${gate.resolution}`).join(", ")}]` : ""}` }));
|
|
7690
|
+
replay.append(timeline);
|
|
7691
|
+
}));
|
|
7692
|
+
replaycontrols.append(button("Step forward", async () => {
|
|
7693
|
+
const runid = replayruninput?.value.trim() ?? "";
|
|
7694
|
+
if (runid === "") throw new Error("The runreplay needs its recorded run id.");
|
|
7695
|
+
const result = await request({ kind: "ecosystem", replay: { move: { runid, direction: "forward" } } });
|
|
7696
|
+
status(`Replay cursor at step ${result.replay.cursor} of ${result.replay.steps.length}: ${result.restored.summary}`);
|
|
7697
|
+
}));
|
|
7698
|
+
replaycontrols.append(button("Step backward", async () => {
|
|
7699
|
+
const runid = replayruninput?.value.trim() ?? "";
|
|
7700
|
+
if (runid === "") throw new Error("The runreplay needs its recorded run id.");
|
|
7701
|
+
const result = await request({ kind: "ecosystem", replay: { move: { runid, direction: "backward" } } });
|
|
7702
|
+
status(`Replay cursor at step ${result.replay.cursor}: ${result.restored.summary}`);
|
|
7703
|
+
}));
|
|
7704
|
+
replaycontrols.append(button("Play", async () => {
|
|
7705
|
+
const runid = replayruninput?.value.trim() ?? "";
|
|
7706
|
+
if (runid === "") throw new Error("The runreplay needs its recorded run id.");
|
|
7707
|
+
await request({ kind: "ecosystem", replay: { play: { runid, playing: true } } });
|
|
7708
|
+
status(`The replay of ${runid} plays through the recorded steps.`);
|
|
7709
|
+
}));
|
|
7710
|
+
replaycontrols.append(button("Pause", async () => {
|
|
7711
|
+
const runid = replayruninput?.value.trim() ?? "";
|
|
7712
|
+
if (runid === "") throw new Error("The runreplay needs its recorded run id.");
|
|
7713
|
+
await request({ kind: "ecosystem", replay: { play: { runid, playing: false } } });
|
|
7714
|
+
status(`The replay of ${runid} paused at its cursor.`);
|
|
7715
|
+
}));
|
|
7716
|
+
replay.append(replaycontrols);
|
|
7717
|
+
ecosystemroot.append(replay);
|
|
7718
|
+
const compare = document.createElement("div");
|
|
7719
|
+
compare.className = "sessionrow";
|
|
7720
|
+
const compareheadline = document.createElement("p");
|
|
7721
|
+
compareheadline.textContent = "Output compare: two runs that share a task input signature stand side by side with the first divergence highlighted; the comparison never executes a step.";
|
|
7722
|
+
compare.append(compareheadline);
|
|
7723
|
+
const comparecontrols = document.createElement("div");
|
|
7724
|
+
comparecontrols.className = "actions";
|
|
7725
|
+
comparecontrols.append(button("Compare runs", async () => {
|
|
7726
|
+
const runida = compareruninputa?.value.trim() ?? "";
|
|
7727
|
+
const runidb = compareruninputb?.value.trim() ?? "";
|
|
7728
|
+
if (runida === "" || runidb === "") throw new Error("The outputcompare needs both run ids.");
|
|
7729
|
+
const result = await request({ kind: "ecosystem", compare: { open: { runida, runidb } } });
|
|
7730
|
+
status(result.metrics.reason);
|
|
7731
|
+
const list = document.createElement("ol");
|
|
7732
|
+
list.className = "audit";
|
|
7733
|
+
for (const step of result.view) list.append(Object.assign(document.createElement("li"), { textContent: `${step.highlighted ? "\u25C0 " : ""}${step.stepid} \u2014 ${step.agreement} \u2014 ${step.summarya} vs ${step.summaryb} (${step.durationdelta >= 0 ? "+" : ""}${step.durationdelta}ms)` }));
|
|
7734
|
+
compare.append(list);
|
|
7735
|
+
}));
|
|
7736
|
+
compare.append(comparecontrols);
|
|
7737
|
+
ecosystemroot.append(compare);
|
|
7738
|
+
} catch (error) {
|
|
7739
|
+
ecosystemroot.textContent = error instanceof Error ? error.message : String(error);
|
|
7740
|
+
}
|
|
7741
|
+
}
|
|
7742
|
+
void renderecosystem();
|
|
7743
|
+
surfacechannel?.addEventListener("message", () => {
|
|
7744
|
+
void renderecosystem().catch(() => {
|
|
7745
|
+
});
|
|
7746
|
+
});
|
|
7612
7747
|
//# sourceMappingURL=sidepanel.js.map
|