@wenathlan/extension 1.1.61 → 1.1.63

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.
Files changed (49) hide show
  1. package/README.md +5 -3
  2. package/dist/confirmgates.d.ts +60 -0
  3. package/dist/confirmgates.d.ts.map +1 -0
  4. package/dist/environments.d.ts +10 -0
  5. package/dist/environments.d.ts.map +1 -1
  6. package/dist/inboundguard.d.ts +86 -0
  7. package/dist/inboundguard.d.ts.map +1 -0
  8. package/dist/index.d.ts +8 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1299 -3
  11. package/dist/index.js.map +4 -4
  12. package/dist/memory.d.ts +187 -1
  13. package/dist/memory.d.ts.map +1 -1
  14. package/dist/originpolicy.d.ts +10 -0
  15. package/dist/originpolicy.d.ts.map +1 -1
  16. package/dist/phishguard.d.ts +24 -0
  17. package/dist/phishguard.d.ts.map +1 -0
  18. package/dist/policy.d.ts +122 -1
  19. package/dist/policy.d.ts.map +1 -1
  20. package/dist/protocol.d.ts +88 -0
  21. package/dist/protocol.d.ts.map +1 -1
  22. package/dist/redactshots.d.ts +54 -0
  23. package/dist/redactshots.d.ts.map +1 -0
  24. package/dist/secretvault.d.ts +89 -0
  25. package/dist/secretvault.d.ts.map +1 -0
  26. package/dist/sessioninterface.d.ts +213 -0
  27. package/dist/sessioninterface.d.ts.map +1 -0
  28. package/dist/transparency.d.ts +46 -0
  29. package/dist/transparency.d.ts.map +1 -0
  30. package/dist/types.d.ts +368 -3
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/version.d.ts +1 -1
  33. package/extension/dist/background.js +1710 -55
  34. package/extension/dist/background.js.map +4 -4
  35. package/extension/dist/manifest.json +5 -1
  36. package/extension/dist/offscreen.js +4 -0
  37. package/extension/dist/offscreen.js.map +2 -2
  38. package/extension/dist/pagebridge.js.map +2 -2
  39. package/extension/dist/popup.html +1 -1
  40. package/extension/dist/popup.js +41 -0
  41. package/extension/dist/popup.js.map +2 -2
  42. package/extension/dist/sidepanel.html +1 -1
  43. package/extension/dist/sidepanel.js +462 -215
  44. package/extension/dist/sidepanel.js.map +3 -3
  45. package/extension/dist/transparencypage.html +25 -0
  46. package/extension/dist/transparencypage.js +198 -0
  47. package/extension/dist/transparencypage.js.map +7 -0
  48. package/extension/manifest.json +5 -1
  49. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  <!doctype html>
2
2
  <html lang="en">
3
3
  <head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Devthink</title><link rel="stylesheet" href="style.css"></head>
4
- <body><main><header><p class="eyebrow">DEVTHINK 1.1.61</p><h1>Browser bridge</h1><p>Consent is required before page access or action.</p></header><label for="endpoint">Optional agent endpoint</label><input id="endpoint" type="url" inputmode="url" placeholder="https://agent.example/proposal" autocomplete="off"><button id="connect">Approve endpoint origin</button><div class="actions"><button id="session">Start active tab session</button><button id="pause" class="secondary">Pause session</button><button id="openpanel" class="secondary">Review plans</button><button id="stop" class="danger">Stop</button></div><p id="capabilities" role="status" class="muted">Optional capabilities: loading.</p><p id="livelogic" role="status" class="muted">Held keys: none · Open dialogs answered: none.</p><p id="navstate" role="status" class="muted">Navigation: unknown.</p><p id="windowlayout" role="status" class="muted">Window layout: unknown.</p><p id="captchastate" role="status" class="muted">Captcha handoff: none.</p><p id="datasetstate" role="status" class="muted">Datasets: none collected yet.</p><p id="downloadstate" role="status" class="muted">Downloads: none.</p><p id="clipboardstate" role="status" class="muted">Clipboard consent: none waiting.</p><p id="capturestate" role="status" class="muted">Captures: none.</p><p id="mediastate" role="status" class="muted">Media: none.</p><p id="callstate" role="status" class="muted">Outbound calls: none.</p><p id="netstate" role="status" class="muted">Observed requests: none.</p><p id="rulestate" role="status" class="muted">Traffic rules: none active.</p><p id="debugstate" role="status" class="muted">Timeline: no errors captured.</p><p id="emulationstate" role="status" class="muted">Emulation: no active layer.</p><p id="sessionstate" role="status" class="muted">Sessions: none saved yet.</p><p id="workflowstate" role="status" class="muted">Workflows: none running.</p><p id="triggerstate" role="status" class="muted">Triggers: none armed.</p><p id="mcpstate" role="status" class="muted">Mcp server: stopped.</p><p id="modelstate" role="status" class="muted">Models: none connected.</p><p id="swarmstate" role="status" class="muted">Swarm: no agents.</p><p id="environmentstate" role="status" class="muted">Environments: no run state.</p><p id="securitystate" role="status" class="muted">Security: denydefault posture.</p><div id="workflowcontrols" class="actions"></div><div id="windowcontrols" class="actions"></div><div id="environmentcontrols" class="actions"></div><div id="securitycontrols" class="actions"></div><p id="status" role="status">Loading session state.</p></main><script type="module" src="popup.js"></script></body>
4
+ <body><main><header><p class="eyebrow">DEVTHINK 1.1.63</p><h1>Browser bridge</h1><p>Consent is required before page access or action.</p></header><label for="endpoint">Optional agent endpoint</label><input id="endpoint" type="url" inputmode="url" placeholder="https://agent.example/proposal" autocomplete="off"><button id="connect">Approve endpoint origin</button><div class="actions"><button id="session">Start active tab session</button><button id="pause" class="secondary">Pause session</button><button id="openpanel" class="secondary">Review plans</button><button id="stop" class="danger">Stop</button></div><p id="capabilities" role="status" class="muted">Optional capabilities: loading.</p><p id="livelogic" role="status" class="muted">Held keys: none · Open dialogs answered: none.</p><p id="navstate" role="status" class="muted">Navigation: unknown.</p><p id="windowlayout" role="status" class="muted">Window layout: unknown.</p><p id="captchastate" role="status" class="muted">Captcha handoff: none.</p><p id="datasetstate" role="status" class="muted">Datasets: none collected yet.</p><p id="downloadstate" role="status" class="muted">Downloads: none.</p><p id="clipboardstate" role="status" class="muted">Clipboard consent: none waiting.</p><p id="capturestate" role="status" class="muted">Captures: none.</p><p id="mediastate" role="status" class="muted">Media: none.</p><p id="callstate" role="status" class="muted">Outbound calls: none.</p><p id="netstate" role="status" class="muted">Observed requests: none.</p><p id="rulestate" role="status" class="muted">Traffic rules: none active.</p><p id="debugstate" role="status" class="muted">Timeline: no errors captured.</p><p id="emulationstate" role="status" class="muted">Emulation: no active layer.</p><p id="sessionstate" role="status" class="muted">Sessions: none saved yet.</p><p id="workflowstate" role="status" class="muted">Workflows: none running.</p><p id="triggerstate" role="status" class="muted">Triggers: none armed.</p><p id="mcpstate" role="status" class="muted">Mcp server: stopped.</p><p id="modelstate" role="status" class="muted">Models: none connected.</p><p id="swarmstate" role="status" class="muted">Swarm: no agents.</p><p id="environmentstate" role="status" class="muted">Environments: no run state.</p><p id="securitystate" role="status" class="muted">Security: denydefault posture.</p><p id="sessiongridstate" role="status" class="muted">Session grid: no run yet.</p><div id="workflowcontrols" class="actions"></div><div id="windowcontrols" class="actions"></div><div id="environmentcontrols" class="actions"></div><div id="securitycontrols" class="actions"></div><div id="sessiongridcontrols" class="actions"></div><p id="status" role="status">Loading session state.</p></main><script type="module" src="popup.js"></script></body>
5
5
  </html>
@@ -42,6 +42,8 @@ var swarmstatenode = document.querySelector("#swarmstate");
42
42
  var environmentstatenode = document.querySelector("#environmentstate");
43
43
  var securitystatenode = document.querySelector("#securitystate");
44
44
  var securitycontrols = document.querySelector("#securitycontrols");
45
+ var sessiongridstatenode = document.querySelector("#sessiongridstate");
46
+ var sessiongridcontrols = document.querySelector("#sessiongridcontrols");
45
47
  var environmentcontrols = document.querySelector("#environmentcontrols");
46
48
  var workflowcontrols = document.querySelector("#workflowcontrols");
47
49
  var windowcontrols = document.querySelector("#windowcontrols");
@@ -332,6 +334,21 @@ function rendersecuritystate(view, activeorigin) {
332
334
  });
333
335
  securitycontrols.append(grant);
334
336
  }
337
+ if (profile === void 0 && origin !== "the active tab") {
338
+ const safedefaults = document.createElement("button");
339
+ safedefaults.className = "secondary";
340
+ safedefaults.textContent = `Safedefaults on ${origin}: reads only \u2014 open the originprofile editor`;
341
+ safedefaults.addEventListener("click", () => {
342
+ try {
343
+ chrome.runtime.openOptionsPage(() => {
344
+ void chrome.runtime.lastError;
345
+ });
346
+ } catch {
347
+ status("The transparencypage did not open; open it from the extensions page.", true);
348
+ }
349
+ });
350
+ securitycontrols.append(safedefaults);
351
+ }
335
352
  if (view.chain.length > 0) {
336
353
  const seal = view.chain.find((chain) => chain.sealhash !== void 0);
337
354
  if (seal?.sealhash !== void 0) {
@@ -400,6 +417,7 @@ async function restore() {
400
417
  renderswarmstate(context.swarm);
401
418
  renderenvironmentstate(context.environments);
402
419
  rendersecuritystate(context.security, context.session?.origin);
420
+ rendersessiongridstate(context.sessionview?.grid);
403
421
  renderrulestate(context.activerules, (context.traffic?.blocks ?? []).filter((rule) => rule.revertedat === void 0).reduce((total, rule) => total + rule.hits, 0), (context.traffic?.mocks ?? []).filter((spec) => spec.revertedat === void 0).reduce((total, spec) => total + spec.hits, 0));
404
422
  const active = context.session && !context.session.stoppedat && context.session.expiresat > Date.now();
405
423
  if (pausebutton) {
@@ -460,4 +478,27 @@ stopbutton?.addEventListener("click", async () => {
460
478
  });
461
479
  openbutton?.addEventListener("click", () => chrome.sidePanel.open({ windowId: chrome.windows.WINDOW_ID_CURRENT }));
462
480
  restore().catch((error) => status(error instanceof Error ? error.message : String(error), true));
481
+ function rendersessiongridstate(grid) {
482
+ if (!sessiongridstatenode) return;
483
+ if (!grid || grid.length === 0) {
484
+ sessiongridstatenode.textContent = "Session grid: no run yet.";
485
+ if (sessiongridcontrols) sessiongridcontrols.replaceChildren();
486
+ return;
487
+ }
488
+ const recent = grid.slice(0, 3);
489
+ sessiongridstatenode.textContent = `Session grid: ${grid.length} run${grid.length === 1 ? "" : "s"} \u2014 ${recent.map((row) => `${row.state} ${row.runid.slice(0, 8)} ${row.completed}/${row.steps} ${row.lock}`).join(" \xB7 ")}.`;
490
+ if (!sessiongridcontrols) return;
491
+ sessiongridcontrols.replaceChildren();
492
+ for (const row of recent) {
493
+ const deep = document.createElement("button");
494
+ deep.type = "button";
495
+ deep.className = "secondary";
496
+ deep.textContent = `Open ${row.state} run ${row.runid.slice(0, 8)}`;
497
+ deep.addEventListener("click", () => request({ kind: "sessions", grid: { open: { runid: row.runid } } }).then(() => {
498
+ status(`The session grid row of the run ${row.runid} opened in the sidepanel run view.`);
499
+ return restore();
500
+ }).catch((error) => status(error instanceof Error ? error.message : String(error), true)));
501
+ sessiongridcontrols.append(deep);
502
+ }
503
+ }
463
504
  //# sourceMappingURL=popup.js.map