@quanta-intellect/vessel-browser 0.1.73 → 0.1.74

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.
@@ -778,6 +778,39 @@ function Show(props) {
778
778
  return props.fallback;
779
779
  }, void 0, void 0);
780
780
  }
781
+ function Switch(props) {
782
+ const chs = children(() => props.children);
783
+ const switchFunc = createMemo(() => {
784
+ const ch = chs();
785
+ const mps = Array.isArray(ch) ? ch : [ch];
786
+ let func = () => void 0;
787
+ for (let i = 0; i < mps.length; i++) {
788
+ const index = i;
789
+ const mp = mps[i];
790
+ const prevFunc = func;
791
+ const conditionValue = createMemo(() => prevFunc() ? void 0 : mp.when, void 0, void 0);
792
+ const condition = mp.keyed ? conditionValue : createMemo(conditionValue, void 0, {
793
+ equals: (a, b) => !a === !b
794
+ });
795
+ func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : void 0);
796
+ }
797
+ return func;
798
+ });
799
+ return createMemo(() => {
800
+ const sel = switchFunc()();
801
+ if (!sel) return props.fallback;
802
+ const [index, conditionValue, mp] = sel;
803
+ const child = mp.children;
804
+ const fn = typeof child === "function" && child.length > 0;
805
+ return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {
806
+ if (untrack(switchFunc)()?.[0] !== index) throw narrowedError("Match");
807
+ return conditionValue();
808
+ })) : child;
809
+ }, void 0, void 0);
810
+ }
811
+ function Match(props) {
812
+ return props;
813
+ }
781
814
  const booleans = [
782
815
  "allowfullscreen",
783
816
  "async",
@@ -1433,7 +1466,7 @@ function Dynamic(props) {
1433
1466
  const [, others] = splitProps(props, ["component"]);
1434
1467
  return createDynamic(() => props.component, others);
1435
1468
  }
1436
- var _tmpl$$i = /* @__PURE__ */ template(`<div class=title-bar><div class=title-bar-drag></div><div class=mcp-status-area><button class=mcp-status-indicator><span class=mcp-dot></span><span class=mcp-label>MCP</span></button></div><div class=window-controls><button class=window-btn data-tooltip=Minimize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=5 width=8 height=1 fill=currentColor></rect></svg></button><button class=window-btn data-tooltip=Maximize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=1 width=8 height=8 fill=none stroke=currentColor stroke-width=1></rect></svg></button><button class="window-btn window-btn-close"data-tooltip=Close><svg width=10 height=10 viewBox="0 0 10 10"><line x1=1 y1=1 x2=9 y2=9 stroke=currentColor stroke-width=1.2></line><line x1=9 y1=1 x2=1 y2=9 stroke=currentColor stroke-width=1.2>`);
1469
+ var _tmpl$$k = /* @__PURE__ */ template(`<div class=title-bar><div class=title-bar-drag></div><div class=mcp-status-area><button class=mcp-status-indicator><span class=mcp-dot></span><span class=mcp-label>MCP</span></button></div><div class=window-controls><button class=window-btn data-tooltip=Minimize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=5 width=8 height=1 fill=currentColor></rect></svg></button><button class=window-btn data-tooltip=Maximize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=1 width=8 height=8 fill=none stroke=currentColor stroke-width=1></rect></svg></button><button class="window-btn window-btn-close"data-tooltip=Close><svg width=10 height=10 viewBox="0 0 10 10"><line x1=1 y1=1 x2=9 y2=9 stroke=currentColor stroke-width=1.2></line><line x1=9 y1=1 x2=1 y2=9 stroke=currentColor stroke-width=1.2>`);
1437
1470
  const TitleBar = () => {
1438
1471
  const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
1439
1472
  const [mcpStatus, setMcpStatus] = createSignal("starting");
@@ -1458,15 +1491,15 @@ const TitleBar = () => {
1458
1491
  };
1459
1492
  onMount(() => {
1460
1493
  void loadHealth();
1461
- const unsubscribe = window.vessel.settings.onHealthUpdate(applyHealth);
1462
- onCleanup(unsubscribe);
1494
+ const unsubscribe2 = window.vessel.settings.onHealthUpdate(applyHealth);
1495
+ onCleanup(unsubscribe2);
1463
1496
  });
1464
1497
  const handleMcpClick = () => {
1465
1498
  if (isPrivateWindow) return;
1466
1499
  window.vessel.ui.setSettingsVisibility(true);
1467
1500
  };
1468
1501
  return (() => {
1469
- var _el$ = _tmpl$$i(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling;
1502
+ var _el$ = _tmpl$$k(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling;
1470
1503
  _el$4.$$click = handleMcpClick;
1471
1504
  _el$6.$$click = () => window.vessel.window.minimize();
1472
1505
  _el$7.$$click = () => window.vessel.window.maximize();
@@ -1507,7 +1540,7 @@ var LucideContext = createContext({
1507
1540
  absoluteStrokeWidth: false,
1508
1541
  class: ""
1509
1542
  });
1510
- var _tmpl$$h = /* @__PURE__ */ template(`<svg>`);
1543
+ var _tmpl$$j = /* @__PURE__ */ template(`<svg>`);
1511
1544
  var hasA11yProp = (props) => {
1512
1545
  for (const prop in props) {
1513
1546
  if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
@@ -1529,7 +1562,7 @@ var Icon = (props) => {
1529
1562
  const [localProps, rest] = splitProps(props, ["color", "size", "strokeWidth", "children", "class", "name", "iconNode", "absoluteStrokeWidth"]);
1530
1563
  const globalProps = useContext(LucideContext);
1531
1564
  return (() => {
1532
- var _el$ = _tmpl$$h();
1565
+ var _el$ = _tmpl$$j();
1533
1566
  spread(_el$, mergeProps(defaultAttributes_default, {
1534
1567
  get width() {
1535
1568
  return localProps.size ?? globalProps.size ?? defaultAttributes_default.width;
@@ -1564,7 +1597,7 @@ var Icon = (props) => {
1564
1597
  })();
1565
1598
  };
1566
1599
  var Icon_default = Icon;
1567
- var iconNode$d = [["path", {
1600
+ var iconNode$g = [["path", {
1568
1601
  d: "M12 7v14",
1569
1602
  key: "1akyts"
1570
1603
  }], ["path", {
@@ -1572,11 +1605,20 @@ var iconNode$d = [["path", {
1572
1605
  key: "ruj8y"
1573
1606
  }]];
1574
1607
  var BookOpen = (props) => createComponent(Icon_default, mergeProps(props, {
1575
- iconNode: iconNode$d,
1608
+ iconNode: iconNode$g,
1576
1609
  name: "book-open"
1577
1610
  }));
1578
1611
  var book_open_default = BookOpen;
1579
- var iconNode$c = [["rect", {
1612
+ var iconNode$f = [["path", {
1613
+ d: "M20 6 9 17l-5-5",
1614
+ key: "1gmf2c"
1615
+ }]];
1616
+ var Check = (props) => createComponent(Icon_default, mergeProps(props, {
1617
+ iconNode: iconNode$f,
1618
+ name: "check"
1619
+ }));
1620
+ var check_default = Check;
1621
+ var iconNode$e = [["rect", {
1580
1622
  width: "8",
1581
1623
  height: "4",
1582
1624
  x: "8",
@@ -1601,11 +1643,11 @@ var iconNode$c = [["rect", {
1601
1643
  key: "18s6g9"
1602
1644
  }]];
1603
1645
  var ClipboardList = (props) => createComponent(Icon_default, mergeProps(props, {
1604
- iconNode: iconNode$c,
1646
+ iconNode: iconNode$e,
1605
1647
  name: "clipboard-list"
1606
1648
  }));
1607
1649
  var clipboard_list_default = ClipboardList;
1608
- var iconNode$b = [["circle", {
1650
+ var iconNode$d = [["circle", {
1609
1651
  cx: "12",
1610
1652
  cy: "12",
1611
1653
  r: "10",
@@ -1615,11 +1657,11 @@ var iconNode$b = [["circle", {
1615
1657
  key: "mmk7yg"
1616
1658
  }]];
1617
1659
  var Clock = (props) => createComponent(Icon_default, mergeProps(props, {
1618
- iconNode: iconNode$b,
1660
+ iconNode: iconNode$d,
1619
1661
  name: "clock"
1620
1662
  }));
1621
1663
  var clock_default = Clock;
1622
- var iconNode$a = [["path", {
1664
+ var iconNode$c = [["path", {
1623
1665
  d: "M12 15V3",
1624
1666
  key: "m9g1x1"
1625
1667
  }], ["path", {
@@ -1630,11 +1672,11 @@ var iconNode$a = [["path", {
1630
1672
  key: "brsn70"
1631
1673
  }]];
1632
1674
  var Download = (props) => createComponent(Icon_default, mergeProps(props, {
1633
- iconNode: iconNode$a,
1675
+ iconNode: iconNode$c,
1634
1676
  name: "download"
1635
1677
  }));
1636
1678
  var download_default = Download;
1637
- var iconNode$9 = [["circle", {
1679
+ var iconNode$b = [["circle", {
1638
1680
  cx: "12",
1639
1681
  cy: "12",
1640
1682
  r: "10",
@@ -1647,11 +1689,11 @@ var iconNode$9 = [["circle", {
1647
1689
  key: "9i4pu4"
1648
1690
  }]];
1649
1691
  var Globe = (props) => createComponent(Icon_default, mergeProps(props, {
1650
- iconNode: iconNode$9,
1692
+ iconNode: iconNode$b,
1651
1693
  name: "globe"
1652
1694
  }));
1653
1695
  var globe_default = Globe;
1654
- var iconNode$8 = [["path", {
1696
+ var iconNode$a = [["path", {
1655
1697
  d: "M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 .83.18 2 2 0 0 0 .83-.18l8.58-3.9a1 1 0 0 0 0-1.831z",
1656
1698
  key: "zzgyd3"
1657
1699
  }], ["path", {
@@ -1668,11 +1710,11 @@ var iconNode$8 = [["path", {
1668
1710
  key: "jksky3"
1669
1711
  }]];
1670
1712
  var LayersPlus = (props) => createComponent(Icon_default, mergeProps(props, {
1671
- iconNode: iconNode$8,
1713
+ iconNode: iconNode$a,
1672
1714
  name: "layers-plus"
1673
1715
  }));
1674
1716
  var layers_plus_default = LayersPlus;
1675
- var iconNode$7 = [["rect", {
1717
+ var iconNode$9 = [["rect", {
1676
1718
  width: "18",
1677
1719
  height: "18",
1678
1720
  x: "3",
@@ -1684,11 +1726,11 @@ var iconNode$7 = [["rect", {
1684
1726
  key: "1pudct"
1685
1727
  }]];
1686
1728
  var PanelTop = (props) => createComponent(Icon_default, mergeProps(props, {
1687
- iconNode: iconNode$7,
1729
+ iconNode: iconNode$9,
1688
1730
  name: "panel-top"
1689
1731
  }));
1690
1732
  var panel_top_default = PanelTop;
1691
- var iconNode$6 = [["path", {
1733
+ var iconNode$8 = [["path", {
1692
1734
  d: "M5 12h14",
1693
1735
  key: "1ays0h"
1694
1736
  }], ["path", {
@@ -1696,11 +1738,11 @@ var iconNode$6 = [["path", {
1696
1738
  key: "s699le"
1697
1739
  }]];
1698
1740
  var Plus = (props) => createComponent(Icon_default, mergeProps(props, {
1699
- iconNode: iconNode$6,
1741
+ iconNode: iconNode$8,
1700
1742
  name: "plus"
1701
1743
  }));
1702
1744
  var plus_default = Plus;
1703
- var iconNode$5 = [["path", {
1745
+ var iconNode$7 = [["path", {
1704
1746
  d: "m21 21-4.34-4.34",
1705
1747
  key: "14j7rj"
1706
1748
  }], ["circle", {
@@ -1710,20 +1752,20 @@ var iconNode$5 = [["path", {
1710
1752
  key: "4ej97u"
1711
1753
  }]];
1712
1754
  var Search = (props) => createComponent(Icon_default, mergeProps(props, {
1713
- iconNode: iconNode$5,
1755
+ iconNode: iconNode$7,
1714
1756
  name: "search"
1715
1757
  }));
1716
1758
  var search_default = Search;
1717
- var iconNode$4 = [["path", {
1759
+ var iconNode$6 = [["path", {
1718
1760
  d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",
1719
1761
  key: "r04s7s"
1720
1762
  }]];
1721
1763
  var Star = (props) => createComponent(Icon_default, mergeProps(props, {
1722
- iconNode: iconNode$4,
1764
+ iconNode: iconNode$6,
1723
1765
  name: "star"
1724
1766
  }));
1725
1767
  var star_default = Star;
1726
- var iconNode$3 = [["path", {
1768
+ var iconNode$5 = [["path", {
1727
1769
  d: "M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",
1728
1770
  key: "vktsd0"
1729
1771
  }], ["circle", {
@@ -1734,11 +1776,32 @@ var iconNode$3 = [["path", {
1734
1776
  key: "kqv944"
1735
1777
  }]];
1736
1778
  var Tag = (props) => createComponent(Icon_default, mergeProps(props, {
1737
- iconNode: iconNode$3,
1779
+ iconNode: iconNode$5,
1738
1780
  name: "tag"
1739
1781
  }));
1740
1782
  var tag_default = Tag;
1741
- var iconNode$2 = [["path", {
1783
+ var iconNode$4 = [["path", {
1784
+ d: "M10 11v6",
1785
+ key: "nco0om"
1786
+ }], ["path", {
1787
+ d: "M14 11v6",
1788
+ key: "outv1u"
1789
+ }], ["path", {
1790
+ d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",
1791
+ key: "miytrc"
1792
+ }], ["path", {
1793
+ d: "M3 6h18",
1794
+ key: "d0wm0j"
1795
+ }], ["path", {
1796
+ d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",
1797
+ key: "e791ji"
1798
+ }]];
1799
+ var Trash2 = (props) => createComponent(Icon_default, mergeProps(props, {
1800
+ iconNode: iconNode$4,
1801
+ name: "trash-2"
1802
+ }));
1803
+ var trash_2_default = Trash2;
1804
+ var iconNode$3 = [["path", {
1742
1805
  d: "M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",
1743
1806
  key: "uqj9uw"
1744
1807
  }], ["path", {
@@ -1749,11 +1812,11 @@ var iconNode$2 = [["path", {
1749
1812
  key: "ijwkga"
1750
1813
  }]];
1751
1814
  var Volume2 = (props) => createComponent(Icon_default, mergeProps(props, {
1752
- iconNode: iconNode$2,
1815
+ iconNode: iconNode$3,
1753
1816
  name: "volume-2"
1754
1817
  }));
1755
1818
  var volume_2_default = Volume2;
1756
- var iconNode$1 = [["path", {
1819
+ var iconNode$2 = [["path", {
1757
1820
  d: "M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",
1758
1821
  key: "uqj9uw"
1759
1822
  }], ["line", {
@@ -1770,10 +1833,22 @@ var iconNode$1 = [["path", {
1770
1833
  key: "5ykzw1"
1771
1834
  }]];
1772
1835
  var VolumeX = (props) => createComponent(Icon_default, mergeProps(props, {
1773
- iconNode: iconNode$1,
1836
+ iconNode: iconNode$2,
1774
1837
  name: "volume-x"
1775
1838
  }));
1776
1839
  var volume_x_default = VolumeX;
1840
+ var iconNode$1 = [["path", {
1841
+ d: "M18 6 6 18",
1842
+ key: "1bl5f8"
1843
+ }], ["path", {
1844
+ d: "m6 6 12 12",
1845
+ key: "d8bk6v"
1846
+ }]];
1847
+ var X = (props) => createComponent(Icon_default, mergeProps(props, {
1848
+ iconNode: iconNode$1,
1849
+ name: "x"
1850
+ }));
1851
+ var x_default = X;
1777
1852
  var iconNode = [["path", {
1778
1853
  d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
1779
1854
  key: "1xq2db"
@@ -1819,6 +1894,44 @@ function createLogger(scope) {
1819
1894
  error: (...args) => writeLog("error", scope, args)
1820
1895
  };
1821
1896
  }
1897
+ const [securityStates, setSecurityStates] = createSignal({});
1898
+ let unsubscribe = null;
1899
+ function initSecurityStore() {
1900
+ if (unsubscribe) return;
1901
+ unsubscribe = window.vessel.security.onStateUpdate((tabId, state) => {
1902
+ setSecurityStates((prev) => ({ ...prev, [tabId]: state }));
1903
+ });
1904
+ }
1905
+ function pruneSecurityStates(activeTabIds) {
1906
+ setSecurityStates((prev) => {
1907
+ const keys = Object.keys(prev);
1908
+ if (keys.length === 0) return prev;
1909
+ let changed = false;
1910
+ const next = {};
1911
+ for (const key of keys) {
1912
+ if (activeTabIds.has(key)) {
1913
+ next[key] = prev[key];
1914
+ } else {
1915
+ changed = true;
1916
+ }
1917
+ }
1918
+ return changed ? next : prev;
1919
+ });
1920
+ }
1921
+ function useSecurity() {
1922
+ return {
1923
+ securityStates,
1924
+ getSecurityState(tabId) {
1925
+ return securityStates()[tabId];
1926
+ },
1927
+ proceedAnyway(tabId) {
1928
+ void window.vessel.security.proceedAnyway(tabId);
1929
+ },
1930
+ goBackToSafety(tabId) {
1931
+ void window.vessel.security.goBackToSafety(tabId);
1932
+ }
1933
+ };
1934
+ }
1822
1935
  const logger$5 = createLogger("TabsStore");
1823
1936
  const [tabs, setTabs] = createSignal([]);
1824
1937
  const [activeTabId, setActiveTabId] = createSignal("");
@@ -1835,6 +1948,7 @@ async function doInit() {
1835
1948
  (newTabs, newActiveId) => {
1836
1949
  setTabs(newTabs);
1837
1950
  setActiveTabId(newActiveId);
1951
+ pruneSecurityStates(new Set(newTabs.map((t) => t.id)));
1838
1952
  }
1839
1953
  );
1840
1954
  const initialState = await window.vessel.tabs.getState();
@@ -2085,7 +2199,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
2085
2199
  }
2086
2200
  return "idle";
2087
2201
  }
2088
- var _tmpl$$g = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$f = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$c = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$b = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$a = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$9 = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$6 = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$5 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$5 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$5 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2202
+ var _tmpl$$i = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$h = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$d = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$d = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$c = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$b = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$a = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$7 = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$5 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$5 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$5 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2089
2203
  const TAB_CLOSE_MS = 200;
2090
2204
  function stringToHue(str) {
2091
2205
  let hash = 0;
@@ -2112,14 +2226,14 @@ const TabFavicon = (props) => {
2112
2226
  },
2113
2227
  get fallback() {
2114
2228
  return (() => {
2115
- var _el$2 = _tmpl$2$f();
2229
+ var _el$2 = _tmpl$2$h();
2116
2230
  insert(_el$2, letter);
2117
2231
  createRenderEffect((_$p) => setStyleProperty(_el$2, "--favicon-hue", `${hue()}`));
2118
2232
  return _el$2;
2119
2233
  })();
2120
2234
  },
2121
2235
  get children() {
2122
- var _el$ = _tmpl$$g();
2236
+ var _el$ = _tmpl$$i();
2123
2237
  _el$.addEventListener("error", () => setFailed(true));
2124
2238
  createRenderEffect(() => setAttribute(_el$, "src", props.favicon));
2125
2239
  return _el$;
@@ -2179,7 +2293,7 @@ const TabBar = () => {
2179
2293
  }, TAB_CLOSE_MS);
2180
2294
  };
2181
2295
  return (() => {
2182
- var _el$3 = _tmpl$3$c(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling;
2296
+ var _el$3 = _tmpl$3$d(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling;
2183
2297
  insert(_el$4, createComponent(For, {
2184
2298
  get each() {
2185
2299
  return tabEntries();
@@ -2190,7 +2304,7 @@ const TabBar = () => {
2190
2304
  },
2191
2305
  get fallback() {
2192
2306
  return memo(() => entry.type === "group")() && (() => {
2193
- var _el$0 = _tmpl$4$c(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
2307
+ var _el$0 = _tmpl$4$d(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
2194
2308
  _el$0.$$contextmenu = (e) => {
2195
2309
  e.preventDefault();
2196
2310
  window.vessel.tabs.showGroupContextMenu(entry.groupId);
@@ -2216,7 +2330,7 @@ const TabBar = () => {
2216
2330
  return memo(() => entry.type === "tab")() && (() => {
2217
2331
  const tab = entry.tab;
2218
2332
  return (() => {
2219
- var _el$12 = _tmpl$6$a();
2333
+ var _el$12 = _tmpl$6$b();
2220
2334
  _el$12.$$contextmenu = (e) => {
2221
2335
  e.preventDefault();
2222
2336
  window.vessel.tabs.showContextMenu(tab.id);
@@ -2241,7 +2355,7 @@ const TabBar = () => {
2241
2355
  return memo(() => !!tab.isPinned)() && (tab.isAudible || tab.isMuted);
2242
2356
  },
2243
2357
  get children() {
2244
- var _el$13 = _tmpl$5$b();
2358
+ var _el$13 = _tmpl$5$c();
2245
2359
  _el$13.$$click = (e) => {
2246
2360
  e.stopPropagation();
2247
2361
  void toggleMute(tab.id);
@@ -2268,7 +2382,7 @@ const TabBar = () => {
2268
2382
  insert(_el$12, (() => {
2269
2383
  var _c$ = memo(() => !!!tab.isPinned);
2270
2384
  return () => _c$() && [memo(() => memo(() => !!modelActiveTabIds().has(tab.id))() && _tmpl$0$5()), (() => {
2271
- var _el$14 = _tmpl$7$9();
2385
+ var _el$14 = _tmpl$7$a();
2272
2386
  insert(_el$14, () => tab.title || "New Tab");
2273
2387
  return _el$14;
2274
2388
  })(), createComponent(Show, {
@@ -2276,7 +2390,7 @@ const TabBar = () => {
2276
2390
  return tab.isAudible || tab.isMuted;
2277
2391
  },
2278
2392
  get children() {
2279
- var _el$15 = _tmpl$8$6();
2393
+ var _el$15 = _tmpl$8$7();
2280
2394
  _el$15.$$click = (e) => {
2281
2395
  e.stopPropagation();
2282
2396
  void toggleMute(tab.id);
@@ -2345,6 +2459,60 @@ const TabBar = () => {
2345
2459
  })();
2346
2460
  };
2347
2461
  delegateEvents(["click", "contextmenu"]);
2462
+ var _tmpl$$h = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More`), _tmpl$2$g = /* @__PURE__ */ template(`<div class=security-popup-actions><button class=security-popup-action-proceed>Proceed Anyway</button><button class=security-popup-action-back>Go Back to Safety`);
2463
+ const SecurityPopup = (props) => {
2464
+ const statusText = () => {
2465
+ switch (props.state.status) {
2466
+ case "secure":
2467
+ return "Connection is secure. This site uses HTTPS.";
2468
+ case "insecure":
2469
+ return "Connection is not secure. Information sent to this site could be read by others.";
2470
+ case "error":
2471
+ return `Certificate error: ${props.state.errorMessage || "Unknown error"}. Proceed with caution.`;
2472
+ default:
2473
+ return "No security information available.";
2474
+ }
2475
+ };
2476
+ const handleLearnMore = () => {
2477
+ window.vessel.security.showDetails(props.state);
2478
+ props.onClose();
2479
+ };
2480
+ const handleProceedAnyway = () => {
2481
+ window.vessel.security.proceedAnyway(props.tabId);
2482
+ props.onClose();
2483
+ };
2484
+ const handleGoBackToSafety = () => {
2485
+ window.vessel.security.goBackToSafety(props.tabId);
2486
+ props.onClose();
2487
+ };
2488
+ onMount(() => {
2489
+ const handleClickOutside = (e) => {
2490
+ const target = e.target;
2491
+ if (!target.closest(".security-indicator-wrapper")) {
2492
+ props.onClose();
2493
+ }
2494
+ };
2495
+ document.addEventListener("click", handleClickOutside, true);
2496
+ onCleanup(() => document.removeEventListener("click", handleClickOutside, true));
2497
+ });
2498
+ return (() => {
2499
+ var _el$ = _tmpl$$h(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
2500
+ _el$.$$click = (e) => e.stopPropagation();
2501
+ insert(_el$3, statusText);
2502
+ _el$4.$$click = handleLearnMore;
2503
+ insert(_el$2, (() => {
2504
+ var _c$ = memo(() => !!props.state.canProceed);
2505
+ return () => _c$() && (() => {
2506
+ var _el$5 = _tmpl$2$g(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;
2507
+ _el$6.$$click = handleProceedAnyway;
2508
+ _el$7.$$click = handleGoBackToSafety;
2509
+ return _el$5;
2510
+ })();
2511
+ })(), null);
2512
+ return _el$;
2513
+ })();
2514
+ };
2515
+ delegateEvents(["click"]);
2348
2516
  const DEFAULT_SIDEBAR_WIDTH = 400;
2349
2517
  const MIN_SIDEBAR = 240;
2350
2518
  const MAX_SIDEBAR = 800;
@@ -2615,8 +2783,8 @@ const SEARCH_ENGINE_PRESETS = {
2615
2783
  ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
2616
2784
  kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
2617
2785
  };
2618
- var _tmpl$$f = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$e = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$3$b = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$4$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$5$a = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$6$9 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>What changed since </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>&times;`), _tmpl$8$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$9$4 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$0$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$1$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$10$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$12$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$14$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$16$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$18$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$21$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$22$3 = /* @__PURE__ */ template(`<li>`);
2619
- const AddressBar = () => {
2786
+ var _tmpl$$g = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$f = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$c = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$c = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$b = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$a = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$9 = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$8$6 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$0$4 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>What changed since </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>&times;`), _tmpl$1$4 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$4 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$11$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$3 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$3 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$3 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$3 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$3 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$22$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$23$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$24$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$27$3 = /* @__PURE__ */ template(`<li>`);
2787
+ const AddressBar = (props) => {
2620
2788
  const {
2621
2789
  activeTab,
2622
2790
  activeTabId: activeTabId2,
@@ -2642,12 +2810,20 @@ const AddressBar = () => {
2642
2810
  const {
2643
2811
  bookmarksState: bookmarksState2
2644
2812
  } = useBookmarks();
2813
+ const {
2814
+ getSecurityState
2815
+ } = useSecurity();
2645
2816
  const [inputValue, setInputValue] = createSignal("");
2646
2817
  const [showSuggestions, setShowSuggestions] = createSignal(false);
2647
2818
  const [selectedIndex, setSelectedIndex] = createSignal(-1);
2648
2819
  const [searchEngine, setSearchEngine] = createSignal("duckduckgo");
2820
+ const [showSecurityPopup, setShowSecurityPopup] = createSignal(false);
2649
2821
  const now2 = useNow();
2650
2822
  let inputRef;
2823
+ const securityState = createMemo(() => {
2824
+ const tabId = activeTabId2();
2825
+ return tabId ? getSecurityState(tabId) : void 0;
2826
+ });
2651
2827
  const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
2652
2828
  const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
2653
2829
  const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
@@ -2667,12 +2843,12 @@ const AddressBar = () => {
2667
2843
  }
2668
2844
  }).catch(() => {
2669
2845
  });
2670
- const unsubscribe = window.vessel.settings.onUpdate((settings) => {
2846
+ const unsubscribe2 = window.vessel.settings.onUpdate((settings) => {
2671
2847
  setSearchEngine(settings.defaultSearchEngine ?? "duckduckgo");
2672
2848
  });
2673
2849
  onCleanup(() => {
2674
2850
  disposed = true;
2675
- unsubscribe();
2851
+ unsubscribe2();
2676
2852
  });
2677
2853
  });
2678
2854
  const showIncomingDiff = (diff) => {
@@ -2716,14 +2892,14 @@ const AddressBar = () => {
2716
2892
  };
2717
2893
  createEffect(() => {
2718
2894
  if (isPrivateWindow) return;
2719
- const unsubscribe = window.vessel.pageDiff.onChanged((diff) => {
2895
+ const unsubscribe2 = window.vessel.pageDiff.onChanged((diff) => {
2720
2896
  const tab = activeTab();
2721
2897
  if (!tab) return;
2722
2898
  if (!matchesPageSnapshotUrl(tab.url, diff.url)) return;
2723
2899
  showIncomingDiff(diff);
2724
2900
  });
2725
2901
  onCleanup(() => {
2726
- unsubscribe();
2902
+ unsubscribe2();
2727
2903
  if (diffCollapseTimer) {
2728
2904
  clearTimeout(diffCollapseTimer);
2729
2905
  diffCollapseTimer = null;
@@ -2864,102 +3040,167 @@ const AddressBar = () => {
2864
3040
  };
2865
3041
  const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
2866
3042
  return (() => {
2867
- var _el$ = _tmpl$13$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$7 = _el$2.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$28 = _el$7.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild;
3043
+ var _el$ = _tmpl$17$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$34 = _el$11.nextSibling, _el$35 = _el$34.firstChild, _el$36 = _el$35.firstChild;
2868
3044
  addEventListener(_el$3, "click", goBack, true);
2869
3045
  addEventListener(_el$4, "click", goForward, true);
2870
3046
  addEventListener(_el$5, "click", reload, true);
2871
3047
  insert(_el$, createComponent(Show, {
2872
3048
  when: isPrivateWindow,
2873
3049
  get children() {
2874
- return _tmpl$$f();
3050
+ return _tmpl$$g();
3051
+ }
3052
+ }), _el$11);
3053
+ insert(_el$, createComponent(Show, {
3054
+ get when() {
3055
+ return memo(() => !!securityState()?.status)() && securityState()?.status !== "none";
3056
+ },
3057
+ get children() {
3058
+ var _el$7 = _tmpl$4$c(), _el$8 = _el$7.firstChild;
3059
+ _el$8.$$click = () => setShowSecurityPopup((prev) => !prev);
3060
+ insert(_el$8, createComponent(Switch, {
3061
+ get fallback() {
3062
+ return (() => {
3063
+ var _el$47 = _tmpl$18$3();
3064
+ _el$47.firstChild;
3065
+ return _el$47;
3066
+ })();
3067
+ },
3068
+ get children() {
3069
+ return [createComponent(Match, {
3070
+ get when() {
3071
+ return securityState()?.status === "secure";
3072
+ },
3073
+ get children() {
3074
+ var _el$9 = _tmpl$2$f();
3075
+ _el$9.firstChild;
3076
+ return _el$9;
3077
+ }
3078
+ }), createComponent(Match, {
3079
+ get when() {
3080
+ return securityState()?.status === "insecure";
3081
+ },
3082
+ get children() {
3083
+ var _el$1 = _tmpl$3$c();
3084
+ _el$1.firstChild;
3085
+ return _el$1;
3086
+ }
3087
+ })];
3088
+ }
3089
+ }));
3090
+ insert(_el$7, createComponent(Show, {
3091
+ get when() {
3092
+ return showSecurityPopup();
3093
+ },
3094
+ get children() {
3095
+ return createComponent(SecurityPopup, {
3096
+ get state() {
3097
+ return securityState();
3098
+ },
3099
+ get tabId() {
3100
+ return activeTabId2();
3101
+ },
3102
+ onClose: () => setShowSecurityPopup(false)
3103
+ });
3104
+ }
3105
+ }), null);
3106
+ createRenderEffect((_p$) => {
3107
+ var _v$ = `security-indicator ${securityState()?.status}`, _v$2 = securityState()?.status === "secure" ? "Secure connection" : securityState()?.status === "insecure" ? "Connection not secure" : "Certificate error";
3108
+ _v$ !== _p$.e && className(_el$8, _p$.e = _v$);
3109
+ _v$2 !== _p$.t && setAttribute(_el$8, "title", _p$.t = _v$2);
3110
+ return _p$;
3111
+ }, {
3112
+ e: void 0,
3113
+ t: void 0
3114
+ });
3115
+ return _el$7;
2875
3116
  }
2876
- }), _el$7);
2877
- _el$8.addEventListener("submit", handleSubmit);
2878
- _el$9.addEventListener("blur", () => {
3117
+ }), _el$11);
3118
+ _el$12.addEventListener("submit", handleSubmit);
3119
+ _el$13.addEventListener("blur", () => {
2879
3120
  setTimeout(() => {
2880
3121
  setShowSuggestions(false);
2881
3122
  setSelectedIndex(-1);
2882
3123
  }, 150);
2883
3124
  });
2884
- _el$9.$$keydown = handleInputKeyDown;
2885
- _el$9.addEventListener("focus", (e) => {
3125
+ _el$13.$$keydown = handleInputKeyDown;
3126
+ _el$13.addEventListener("focus", (e) => {
2886
3127
  e.currentTarget.select();
2887
3128
  const query = inputValue().trim();
2888
3129
  if (query.length >= 2) setShowSuggestions(true);
2889
3130
  });
2890
- _el$9.$$input = (e) => {
3131
+ _el$13.$$input = (e) => {
2891
3132
  setInputValue(e.currentTarget.value);
2892
3133
  setShowSuggestions(true);
2893
3134
  setSelectedIndex(-1);
2894
3135
  };
2895
3136
  var _ref$ = inputRef;
2896
- typeof _ref$ === "function" ? use(_ref$, _el$9) : inputRef = _el$9;
2897
- setAttribute(_el$9, "spellcheck", false);
2898
- insert(_el$7, createComponent(Show, {
3137
+ typeof _ref$ === "function" ? use(_ref$, _el$13) : inputRef = _el$13;
3138
+ setAttribute(_el$13, "spellcheck", false);
3139
+ insert(_el$11, createComponent(Show, {
2899
3140
  get when() {
2900
3141
  return memo(() => !!showSuggestions())() && suggestions().length > 0;
2901
3142
  },
2902
3143
  get children() {
2903
- var _el$0 = _tmpl$2$e();
2904
- insert(_el$0, createComponent(For, {
3144
+ var _el$14 = _tmpl$5$b();
3145
+ insert(_el$14, createComponent(For, {
2905
3146
  get each() {
2906
3147
  return suggestions();
2907
3148
  },
2908
3149
  children: (item, i) => (() => {
2909
- var _el$40 = _tmpl$14$3(), _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling, _el$43 = _el$42.firstChild, _el$44 = _el$43.nextSibling;
2910
- _el$40.addEventListener("mouseenter", () => setSelectedIndex(i()));
2911
- _el$40.$$mousedown = (e) => {
3150
+ var _el$49 = _tmpl$19$3(), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling;
3151
+ _el$49.addEventListener("mouseenter", () => setSelectedIndex(i()));
3152
+ _el$49.$$mousedown = (e) => {
2912
3153
  e.preventDefault();
2913
3154
  selectSuggestion(item.url);
2914
3155
  };
2915
- insert(_el$41, (() => {
3156
+ insert(_el$50, (() => {
2916
3157
  var _c$ = memo(() => item.source === "bookmark");
2917
3158
  return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
2918
3159
  })());
2919
- insert(_el$43, () => item.title || item.url);
2920
- insert(_el$44, () => item.subtitle || item.url);
3160
+ insert(_el$52, () => item.title || item.url);
3161
+ insert(_el$53, () => item.subtitle || item.url);
2921
3162
  createRenderEffect((_p$) => {
2922
- var _v$10 = `address-autocomplete-${i()}`, _v$11 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$12 = selectedIndex() === i();
2923
- _v$10 !== _p$.e && setAttribute(_el$40, "id", _p$.e = _v$10);
2924
- _v$11 !== _p$.t && className(_el$40, _p$.t = _v$11);
2925
- _v$12 !== _p$.a && setAttribute(_el$40, "aria-selected", _p$.a = _v$12);
3163
+ var _v$12 = `address-autocomplete-${i()}`, _v$13 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$14 = selectedIndex() === i();
3164
+ _v$12 !== _p$.e && setAttribute(_el$49, "id", _p$.e = _v$12);
3165
+ _v$13 !== _p$.t && className(_el$49, _p$.t = _v$13);
3166
+ _v$14 !== _p$.a && setAttribute(_el$49, "aria-selected", _p$.a = _v$14);
2926
3167
  return _p$;
2927
3168
  }, {
2928
3169
  e: void 0,
2929
3170
  t: void 0,
2930
3171
  a: void 0
2931
3172
  });
2932
- return _el$40;
3173
+ return _el$49;
2933
3174
  })()
2934
3175
  }));
2935
- return _el$0;
3176
+ return _el$14;
2936
3177
  }
2937
3178
  }), null);
2938
- insert(_el$7, createComponent(Show, {
3179
+ insert(_el$11, createComponent(Show, {
2939
3180
  when: !isPrivateWindow,
2940
3181
  get children() {
2941
- var _el$1 = _tmpl$3$b(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
2942
- insert(_el$11, () => agentStatusMessage() || (agentPresence() === "active" ? "Agent Active" : agentPresence() === "recent" ? "Agent Connected" : "Agent Offline"));
3182
+ var _el$15 = _tmpl$6$a(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
3183
+ insert(_el$17, () => agentStatusMessage() || (agentPresence() === "active" ? "Agent Active" : agentPresence() === "recent" ? "Agent Connected" : "Agent Offline"));
2943
3184
  createRenderEffect((_p$) => {
2944
- var _v$ = `agent-status-badge ${agentPresence()}`, _v$2 = agentStatusMessage() || (agentPresence() === "active" ? "Agent is actively using the browser" : agentPresence() === "recent" ? "Agent is connected" : "No agent connection detected");
2945
- _v$ !== _p$.e && className(_el$1, _p$.e = _v$);
2946
- _v$2 !== _p$.t && setAttribute(_el$1, "title", _p$.t = _v$2);
3185
+ var _v$3 = `agent-status-badge ${agentPresence()}`, _v$4 = agentStatusMessage() || (agentPresence() === "active" ? "Agent is actively using the browser" : agentPresence() === "recent" ? "Agent is connected" : "No agent connection detected");
3186
+ _v$3 !== _p$.e && className(_el$15, _p$.e = _v$3);
3187
+ _v$4 !== _p$.t && setAttribute(_el$15, "title", _p$.t = _v$4);
2947
3188
  return _p$;
2948
3189
  }, {
2949
3190
  e: void 0,
2950
3191
  t: void 0
2951
3192
  });
2952
- return _el$1;
3193
+ return _el$15;
2953
3194
  }
2954
3195
  }), null);
2955
- insert(_el$7, createComponent(Show, {
3196
+ insert(_el$11, createComponent(Show, {
2956
3197
  get when() {
2957
3198
  return pageDiff();
2958
3199
  },
2959
3200
  get children() {
2960
- var _el$12 = _tmpl$4$b();
2961
- _el$12.$$click = () => void openDiffTimeline();
2962
- return _el$12;
3201
+ var _el$18 = _tmpl$7$9();
3202
+ _el$18.$$click = () => void openDiffTimeline();
3203
+ return _el$18;
2963
3204
  }
2964
3205
  }), null);
2965
3206
  insert(_el$, createComponent(Show, {
@@ -2967,212 +3208,221 @@ const AddressBar = () => {
2967
3208
  return memo(() => !!pageDiff())() && diffExpanded();
2968
3209
  },
2969
3210
  get children() {
2970
- var _el$13 = _tmpl$7$8(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild;
2971
- _el$16.firstChild;
2972
- var _el$23 = _el$15.nextSibling, _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
2973
- insert(_el$16, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
2974
- insert(_el$15, createComponent(Show, {
3211
+ var _el$19 = _tmpl$0$4(), _el$20 = _el$19.firstChild, _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild;
3212
+ _el$22.firstChild;
3213
+ var _el$29 = _el$21.nextSibling, _el$30 = _el$29.firstChild, _el$31 = _el$30.nextSibling;
3214
+ insert(_el$22, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
3215
+ insert(_el$21, createComponent(Show, {
2975
3216
  get when() {
2976
3217
  return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
2977
3218
  },
2978
3219
  get children() {
2979
- var _el$18 = _tmpl$5$a(), _el$19 = _el$18.firstChild, _el$22 = _el$19.nextSibling;
2980
- _el$22.nextSibling;
2981
- insert(_el$18, () => pageDiff().burstCount, _el$22);
2982
- insert(_el$18, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
2983
- return _el$18;
3220
+ var _el$24 = _tmpl$8$6(), _el$25 = _el$24.firstChild, _el$28 = _el$25.nextSibling;
3221
+ _el$28.nextSibling;
3222
+ insert(_el$24, () => pageDiff().burstCount, _el$28);
3223
+ insert(_el$24, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
3224
+ return _el$24;
2984
3225
  }
2985
3226
  }), null);
2986
- _el$24.$$click = () => void openDiffTimeline();
2987
- _el$25.$$click = () => setDiffExpanded(false);
2988
- insert(_el$13, createComponent(Show, {
3227
+ _el$30.$$click = () => void openDiffTimeline();
3228
+ _el$31.$$click = () => setDiffExpanded(false);
3229
+ insert(_el$19, createComponent(Show, {
2989
3230
  get when() {
2990
3231
  return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
2991
3232
  },
2992
3233
  get children() {
2993
- var _el$26 = _tmpl$6$9();
2994
- _el$26.firstChild;
2995
- insert(_el$26, createComponent(For, {
3234
+ var _el$32 = _tmpl$9$4();
3235
+ _el$32.firstChild;
3236
+ insert(_el$32, createComponent(For, {
2996
3237
  get each() {
2997
3238
  return pageDiff().recentBursts;
2998
3239
  },
2999
3240
  children: (burst) => (() => {
3000
- var _el$45 = _tmpl$15$3(), _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling;
3001
- insert(_el$46, () => formatRelativeTime(burst.detectedAt));
3002
- insert(_el$47, () => burst.summary);
3003
- return _el$45;
3241
+ var _el$54 = _tmpl$20$3(), _el$55 = _el$54.firstChild, _el$56 = _el$55.nextSibling;
3242
+ insert(_el$55, () => formatRelativeTime(burst.detectedAt));
3243
+ insert(_el$56, () => burst.summary);
3244
+ return _el$54;
3004
3245
  })()
3005
3246
  }), null);
3006
- return _el$26;
3247
+ return _el$32;
3007
3248
  }
3008
3249
  }), null);
3009
- insert(_el$13, createComponent(For, {
3250
+ insert(_el$19, createComponent(For, {
3010
3251
  get each() {
3011
3252
  return pageDiff().changes;
3012
3253
  },
3013
3254
  children: (change) => (() => {
3014
- var _el$48 = _tmpl$21$3(), _el$49 = _el$48.firstChild, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
3015
- insert(_el$50, () => formatSectionLabel(change.section));
3016
- insert(_el$51, () => change.summary);
3017
- insert(_el$48, createComponent(Show, {
3255
+ var _el$57 = _tmpl$26$3(), _el$58 = _el$57.firstChild, _el$59 = _el$58.firstChild, _el$60 = _el$59.nextSibling;
3256
+ insert(_el$59, () => formatSectionLabel(change.section));
3257
+ insert(_el$60, () => change.summary);
3258
+ insert(_el$57, createComponent(Show, {
3018
3259
  get when() {
3019
3260
  return change.before || change.after;
3020
3261
  },
3021
3262
  get children() {
3022
- var _el$52 = _tmpl$18$3();
3023
- insert(_el$52, createComponent(Show, {
3263
+ var _el$61 = _tmpl$23$3();
3264
+ insert(_el$61, createComponent(Show, {
3024
3265
  get when() {
3025
3266
  return change.before;
3026
3267
  },
3027
3268
  get children() {
3028
- var _el$53 = _tmpl$16$3(), _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling;
3029
- insert(_el$55, () => change.before);
3030
- return _el$53;
3269
+ var _el$62 = _tmpl$21$3(), _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling;
3270
+ insert(_el$64, () => change.before);
3271
+ return _el$62;
3031
3272
  }
3032
3273
  }), null);
3033
- insert(_el$52, createComponent(Show, {
3274
+ insert(_el$61, createComponent(Show, {
3034
3275
  get when() {
3035
3276
  return change.after;
3036
3277
  },
3037
3278
  get children() {
3038
- var _el$56 = _tmpl$17$3(), _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling;
3039
- insert(_el$58, () => change.after);
3040
- return _el$56;
3279
+ var _el$65 = _tmpl$22$3(), _el$66 = _el$65.firstChild, _el$67 = _el$66.nextSibling;
3280
+ insert(_el$67, () => change.after);
3281
+ return _el$65;
3041
3282
  }
3042
3283
  }), null);
3043
- return _el$52;
3284
+ return _el$61;
3044
3285
  }
3045
3286
  }), null);
3046
- insert(_el$48, createComponent(Show, {
3287
+ insert(_el$57, createComponent(Show, {
3047
3288
  get when() {
3048
3289
  return change.addedItems?.length;
3049
3290
  },
3050
3291
  get children() {
3051
- var _el$59 = _tmpl$19$3(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
3052
- insert(_el$61, createComponent(For, {
3292
+ var _el$68 = _tmpl$24$3(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
3293
+ insert(_el$70, createComponent(For, {
3053
3294
  get each() {
3054
3295
  return change.addedItems;
3055
3296
  },
3056
3297
  children: (item) => (() => {
3057
- var _el$65 = _tmpl$22$3();
3058
- insert(_el$65, item);
3059
- return _el$65;
3298
+ var _el$74 = _tmpl$27$3();
3299
+ insert(_el$74, item);
3300
+ return _el$74;
3060
3301
  })()
3061
3302
  }));
3062
- return _el$59;
3303
+ return _el$68;
3063
3304
  }
3064
3305
  }), null);
3065
- insert(_el$48, createComponent(Show, {
3306
+ insert(_el$57, createComponent(Show, {
3066
3307
  get when() {
3067
3308
  return change.removedItems?.length;
3068
3309
  },
3069
3310
  get children() {
3070
- var _el$62 = _tmpl$20$3(), _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling;
3071
- insert(_el$64, createComponent(For, {
3311
+ var _el$71 = _tmpl$25$3(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
3312
+ insert(_el$73, createComponent(For, {
3072
3313
  get each() {
3073
3314
  return change.removedItems;
3074
3315
  },
3075
3316
  children: (item) => (() => {
3076
- var _el$66 = _tmpl$22$3();
3077
- insert(_el$66, item);
3078
- return _el$66;
3317
+ var _el$75 = _tmpl$27$3();
3318
+ insert(_el$75, item);
3319
+ return _el$75;
3079
3320
  })()
3080
3321
  }));
3081
- return _el$62;
3322
+ return _el$71;
3082
3323
  }
3083
3324
  }), null);
3084
- createRenderEffect(() => className(_el$48, `page-diff-item page-diff-${change.kind}`));
3085
- return _el$48;
3325
+ createRenderEffect(() => className(_el$57, `page-diff-item page-diff-${change.kind}`));
3326
+ return _el$57;
3086
3327
  })()
3087
3328
  }), null);
3088
- return _el$13;
3329
+ return _el$19;
3089
3330
  }
3090
- }), _el$28);
3091
- _el$29.$$click = async () => {
3331
+ }), _el$34);
3332
+ _el$35.$$click = async () => {
3092
3333
  const id = activeTabId2();
3093
3334
  if (!id) return;
3094
3335
  await toggleAdBlock(id);
3095
3336
  };
3096
- insert(_el$30, createComponent(Show, {
3337
+ insert(_el$36, createComponent(Show, {
3097
3338
  get when() {
3098
3339
  return activeTab()?.adBlockingEnabled;
3099
3340
  },
3100
3341
  get children() {
3101
- return _tmpl$8$5();
3342
+ return _tmpl$1$4();
3102
3343
  }
3103
3344
  }), null);
3104
- insert(_el$30, createComponent(Show, {
3345
+ insert(_el$36, createComponent(Show, {
3105
3346
  get when() {
3106
3347
  return !activeTab()?.adBlockingEnabled;
3107
3348
  },
3108
3349
  get children() {
3109
- return [_tmpl$8$5(), _tmpl$9$4()];
3350
+ return [_tmpl$1$4(), _tmpl$10$4()];
3110
3351
  }
3111
3352
  }), null);
3112
- insert(_el$28, createComponent(Show, {
3353
+ insert(_el$34, createComponent(Show, {
3113
3354
  when: !isPrivateWindow,
3114
3355
  get children() {
3115
- var _el$34 = _tmpl$0$4();
3116
- _el$34.$$click = () => window.vessel.content.toggleReader();
3117
- createRenderEffect(() => _el$34.classList.toggle("active", !!activeTab()?.isReaderMode));
3118
- return _el$34;
3356
+ var _el$40 = _tmpl$11$4();
3357
+ _el$40.$$click = () => window.vessel.content.toggleReader();
3358
+ createRenderEffect(() => _el$40.classList.toggle("active", !!activeTab()?.isReaderMode));
3359
+ return _el$40;
3119
3360
  }
3120
3361
  }), null);
3121
- insert(_el$28, createComponent(Show, {
3362
+ insert(_el$34, createComponent(Show, {
3122
3363
  when: !isPrivateWindow,
3123
3364
  get children() {
3124
- var _el$35 = _tmpl$1$4();
3125
- addEventListener(_el$35, "click", toggleDevTools, true);
3126
- createRenderEffect(() => _el$35.classList.toggle("active", !!devtoolsPanelOpen2()));
3127
- return _el$35;
3365
+ var _el$41 = _tmpl$12$4();
3366
+ addEventListener(_el$41, "click", toggleDevTools, true);
3367
+ createRenderEffect(() => _el$41.classList.toggle("active", !!devtoolsPanelOpen2()));
3368
+ return _el$41;
3128
3369
  }
3129
3370
  }), null);
3130
- insert(_el$28, createComponent(Show, {
3371
+ insert(_el$34, createComponent(Show, {
3131
3372
  when: !isPrivateWindow,
3132
3373
  get children() {
3133
- var _el$36 = _tmpl$11$4();
3134
- _el$36.firstChild;
3135
- addEventListener(_el$36, "click", toggleSidebar, true);
3136
- insert(_el$36, createComponent(Show, {
3374
+ var _el$42 = _tmpl$14$3();
3375
+ _el$42.firstChild;
3376
+ addEventListener(_el$42, "click", toggleSidebar, true);
3377
+ insert(_el$42, createComponent(Show, {
3137
3378
  get when() {
3138
3379
  return pendingApprovalCount() > 0;
3139
3380
  },
3140
3381
  get children() {
3141
- var _el$38 = _tmpl$10$4();
3142
- insert(_el$38, pendingApprovalCount);
3143
- createRenderEffect(() => setAttribute(_el$38, "aria-label", `${pendingApprovalCount()} pending`));
3144
- return _el$38;
3382
+ var _el$44 = _tmpl$13$3();
3383
+ insert(_el$44, pendingApprovalCount);
3384
+ createRenderEffect(() => setAttribute(_el$44, "aria-label", `${pendingApprovalCount()} pending`));
3385
+ return _el$44;
3145
3386
  }
3146
3387
  }), null);
3147
3388
  createRenderEffect((_p$) => {
3148
- var _v$3 = !!(pendingApprovalCount() > 0), _v$4 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
3149
- _v$3 !== _p$.e && _el$36.classList.toggle("has-approvals", _p$.e = _v$3);
3150
- _v$4 !== _p$.t && setAttribute(_el$36, "title", _p$.t = _v$4);
3389
+ var _v$5 = !!(pendingApprovalCount() > 0), _v$6 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
3390
+ _v$5 !== _p$.e && _el$42.classList.toggle("has-approvals", _p$.e = _v$5);
3391
+ _v$6 !== _p$.t && setAttribute(_el$42, "title", _p$.t = _v$6);
3151
3392
  return _p$;
3152
3393
  }, {
3153
3394
  e: void 0,
3154
3395
  t: void 0
3155
3396
  });
3156
- return _el$36;
3397
+ return _el$42;
3157
3398
  }
3158
3399
  }), null);
3159
- insert(_el$28, createComponent(Show, {
3400
+ insert(_el$34, createComponent(Show, {
3160
3401
  when: !isPrivateWindow,
3161
3402
  get children() {
3162
- var _el$39 = _tmpl$12$4();
3163
- addEventListener(_el$39, "click", openSettings, true);
3164
- return _el$39;
3403
+ return [(() => {
3404
+ var _el$45 = _tmpl$15$3();
3405
+ addEventListener(_el$45, "click", props.onClearData, true);
3406
+ insert(_el$45, createComponent(trash_2_default, {
3407
+ size: 14
3408
+ }));
3409
+ return _el$45;
3410
+ })(), (() => {
3411
+ var _el$46 = _tmpl$16$3();
3412
+ addEventListener(_el$46, "click", openSettings, true);
3413
+ return _el$46;
3414
+ })()];
3165
3415
  }
3166
3416
  }), null);
3167
3417
  createRenderEffect((_p$) => {
3168
- var _v$5 = !activeTab()?.canGoBack, _v$6 = !activeTab()?.canGoForward, _v$7 = showSuggestions() && suggestions().length > 0, _v$8 = selectedIndex() >= 0 ? `address-autocomplete-${selectedIndex()}` : void 0, _v$9 = !!activeTab()?.adBlockingEnabled, _v$0 = !activeTab()?.adBlockingEnabled, _v$1 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)";
3169
- _v$5 !== _p$.e && (_el$3.disabled = _p$.e = _v$5);
3170
- _v$6 !== _p$.t && (_el$4.disabled = _p$.t = _v$6);
3171
- _v$7 !== _p$.a && setAttribute(_el$9, "aria-expanded", _p$.a = _v$7);
3172
- _v$8 !== _p$.o && setAttribute(_el$9, "aria-activedescendant", _p$.o = _v$8);
3173
- _v$9 !== _p$.i && _el$29.classList.toggle("active", _p$.i = _v$9);
3174
- _v$0 !== _p$.n && _el$29.classList.toggle("nav-btn-muted", _p$.n = _v$0);
3175
- _v$1 !== _p$.s && setAttribute(_el$29, "title", _p$.s = _v$1);
3418
+ var _v$7 = !activeTab()?.canGoBack, _v$8 = !activeTab()?.canGoForward, _v$9 = showSuggestions() && suggestions().length > 0, _v$0 = selectedIndex() >= 0 ? `address-autocomplete-${selectedIndex()}` : void 0, _v$1 = !!activeTab()?.adBlockingEnabled, _v$10 = !activeTab()?.adBlockingEnabled, _v$11 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)";
3419
+ _v$7 !== _p$.e && (_el$3.disabled = _p$.e = _v$7);
3420
+ _v$8 !== _p$.t && (_el$4.disabled = _p$.t = _v$8);
3421
+ _v$9 !== _p$.a && setAttribute(_el$13, "aria-expanded", _p$.a = _v$9);
3422
+ _v$0 !== _p$.o && setAttribute(_el$13, "aria-activedescendant", _p$.o = _v$0);
3423
+ _v$1 !== _p$.i && _el$35.classList.toggle("active", _p$.i = _v$1);
3424
+ _v$10 !== _p$.n && _el$35.classList.toggle("nav-btn-muted", _p$.n = _v$10);
3425
+ _v$11 !== _p$.s && setAttribute(_el$35, "title", _p$.s = _v$11);
3176
3426
  return _p$;
3177
3427
  }, {
3178
3428
  e: void 0,
@@ -3183,12 +3433,12 @@ const AddressBar = () => {
3183
3433
  n: void 0,
3184
3434
  s: void 0
3185
3435
  });
3186
- createRenderEffect(() => _el$9.value = inputValue());
3436
+ createRenderEffect(() => _el$13.value = inputValue());
3187
3437
  return _el$;
3188
3438
  })();
3189
3439
  };
3190
3440
  delegateEvents(["click", "input", "keydown", "mousedown"]);
3191
- var _tmpl$$e = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
3441
+ var _tmpl$$f = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$e = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
3192
3442
  const TOAST_DURATION_MS$1 = 4200;
3193
3443
  const TOAST_EXIT_MS$2 = 300;
3194
3444
  function isBookmarkToastCandidate(action) {
@@ -3248,13 +3498,13 @@ const BookmarkNotifications = () => {
3248
3498
  timeoutIds.clear();
3249
3499
  });
3250
3500
  return (() => {
3251
- var _el$ = _tmpl$$e();
3501
+ var _el$ = _tmpl$$f();
3252
3502
  insert(_el$, createComponent(For, {
3253
3503
  get each() {
3254
3504
  return toasts();
3255
3505
  },
3256
3506
  children: (toast) => (() => {
3257
- var _el$2 = _tmpl$2$d(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
3507
+ var _el$2 = _tmpl$2$e(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
3258
3508
  insert(_el$3, () => toast.title);
3259
3509
  insert(_el$4, () => toast.message);
3260
3510
  createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!toast.leaving));
@@ -3264,7 +3514,7 @@ const BookmarkNotifications = () => {
3264
3514
  return _el$;
3265
3515
  })();
3266
3516
  };
3267
- var _tmpl$$d = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
3517
+ var _tmpl$$e = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
3268
3518
  const TOAST_DURATION_MS = 3e3;
3269
3519
  const TOAST_EXIT_MS$1 = 300;
3270
3520
  const HighlightNotifications = (props) => {
@@ -3303,7 +3553,7 @@ const HighlightNotifications = (props) => {
3303
3553
  return memo(() => !!visible())() && current();
3304
3554
  },
3305
3555
  get children() {
3306
- var _el$ = _tmpl$$d(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
3556
+ var _el$ = _tmpl$$e(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
3307
3557
  insert(_el$3, () => current().title);
3308
3558
  insert(_el$4, () => current().message);
3309
3559
  createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!leaving()));
@@ -3311,7 +3561,7 @@ const HighlightNotifications = (props) => {
3311
3561
  }
3312
3562
  });
3313
3563
  };
3314
- var _tmpl$$c = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$c = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$a = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$9 = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
3564
+ var _tmpl$$d = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$d = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$b = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$b = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$a = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$9 = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
3315
3565
  const TOAST_DONE_DURATION_MS = 4200;
3316
3566
  const TOAST_EXIT_MS = 300;
3317
3567
  function formatBytes(bytes) {
@@ -3402,20 +3652,20 @@ const DownloadToast = () => {
3402
3652
  return Math.min(100, Math.round(d.receivedBytes / d.totalBytes * 100));
3403
3653
  };
3404
3654
  return (() => {
3405
- var _el$ = _tmpl$$c();
3655
+ var _el$ = _tmpl$$d();
3406
3656
  insert(_el$, createComponent(For, {
3407
3657
  get each() {
3408
3658
  return downloads();
3409
3659
  },
3410
3660
  children: (dl) => (() => {
3411
- var _el$2 = _tmpl$7$7(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
3661
+ var _el$2 = _tmpl$7$8(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
3412
3662
  insert(_el$4, () => dl.filename);
3413
3663
  insert(_el$3, createComponent(Show, {
3414
3664
  get when() {
3415
3665
  return dl.state === "completed";
3416
3666
  },
3417
3667
  get children() {
3418
- return _tmpl$2$c();
3668
+ return _tmpl$2$d();
3419
3669
  }
3420
3670
  }), null);
3421
3671
  insert(_el$3, createComponent(Show, {
@@ -3423,7 +3673,7 @@ const DownloadToast = () => {
3423
3673
  return dl.state === "cancelled" || dl.state === "interrupted";
3424
3674
  },
3425
3675
  get children() {
3426
- return _tmpl$3$a();
3676
+ return _tmpl$3$b();
3427
3677
  }
3428
3678
  }), null);
3429
3679
  insert(_el$2, createComponent(Show, {
@@ -3432,11 +3682,11 @@ const DownloadToast = () => {
3432
3682
  },
3433
3683
  get children() {
3434
3684
  return [(() => {
3435
- var _el$7 = _tmpl$4$a(), _el$8 = _el$7.firstChild;
3685
+ var _el$7 = _tmpl$4$b(), _el$8 = _el$7.firstChild;
3436
3686
  createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
3437
3687
  return _el$7;
3438
3688
  })(), (() => {
3439
- var _el$9 = _tmpl$5$9();
3689
+ var _el$9 = _tmpl$5$a();
3440
3690
  insert(_el$9, () => formatBytes(dl.receivedBytes), null);
3441
3691
  insert(_el$9, createComponent(Show, {
3442
3692
  get when() {
@@ -3455,7 +3705,7 @@ const DownloadToast = () => {
3455
3705
  return dl.state === "completed";
3456
3706
  },
3457
3707
  get children() {
3458
- var _el$0 = _tmpl$6$8(), _el$1 = _el$0.firstChild;
3708
+ var _el$0 = _tmpl$6$9(), _el$1 = _el$0.firstChild;
3459
3709
  insert(_el$0, () => formatBytes(dl.receivedBytes), _el$1);
3460
3710
  return _el$0;
3461
3711
  }
@@ -3467,7 +3717,7 @@ const DownloadToast = () => {
3467
3717
  return _el$;
3468
3718
  })();
3469
3719
  };
3470
- var _tmpl$$b = /* @__PURE__ */ template(`<div class=find-bar><input class=find-bar-input type=text placeholder="Find in page..."><button class=find-bar-btn title="Previous (Shift+Enter)">&#9650;</button><button class=find-bar-btn title="Next (Enter)">&#9660;</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">&times;`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=find-bar-count>`);
3720
+ var _tmpl$$c = /* @__PURE__ */ template(`<div class=find-bar><input class=find-bar-input type=text placeholder="Find in page..."><button class=find-bar-btn title="Previous (Shift+Enter)">&#9650;</button><button class=find-bar-btn title="Next (Enter)">&#9660;</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">&times;`), _tmpl$2$c = /* @__PURE__ */ template(`<span class=find-bar-count>`);
3471
3721
  const FindBar = () => {
3472
3722
  const [open, setOpen] = createSignal(false);
3473
3723
  const [query, setQuery] = createSignal("");
@@ -3545,7 +3795,7 @@ const FindBar = () => {
3545
3795
  return open();
3546
3796
  },
3547
3797
  get children() {
3548
- var _el$ = _tmpl$$b(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
3798
+ var _el$ = _tmpl$$c(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
3549
3799
  _el$2.$$input = (e) => handleInput(e.currentTarget.value);
3550
3800
  var _ref$ = inputRef;
3551
3801
  typeof _ref$ === "function" ? use(_ref$, _el$2) : inputRef = _el$2;
@@ -3555,7 +3805,7 @@ const FindBar = () => {
3555
3805
  return result();
3556
3806
  },
3557
3807
  children: (r) => (() => {
3558
- var _el$6 = _tmpl$2$b();
3808
+ var _el$6 = _tmpl$2$c();
3559
3809
  insert(_el$6, (() => {
3560
3810
  var _c$ = memo(() => r().matches > 0);
3561
3811
  return () => _c$() ? `${r().activeMatchOrdinal} / ${r().matches}` : "No results";
@@ -3572,7 +3822,7 @@ const FindBar = () => {
3572
3822
  });
3573
3823
  };
3574
3824
  delegateEvents(["input", "click"]);
3575
- var _tmpl$$a = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$a = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$9 = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$9 = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
3825
+ var _tmpl$$b = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$b = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$a = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$a = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$9 = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
3576
3826
  const FlowProgress = () => {
3577
3827
  const {
3578
3828
  runtimeState: runtimeState2
@@ -3603,13 +3853,13 @@ const FlowProgress = () => {
3603
3853
  return flow() || tracker();
3604
3854
  },
3605
3855
  get children() {
3606
- var _el$ = _tmpl$$a();
3856
+ var _el$ = _tmpl$$b();
3607
3857
  insert(_el$, createComponent(Show, {
3608
3858
  get when() {
3609
3859
  return tracker();
3610
3860
  },
3611
3861
  children: (t) => (() => {
3612
- var _el$2 = _tmpl$4$9(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$3.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling;
3862
+ var _el$2 = _tmpl$4$a(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$3.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling;
3613
3863
  insert(_el$4, () => t().goal);
3614
3864
  insert(_el$5, () => progressPercent(t().steps), _el$6);
3615
3865
  insert(_el$9, createComponent(For, {
@@ -3617,7 +3867,7 @@ const FlowProgress = () => {
3617
3867
  return t().steps;
3618
3868
  },
3619
3869
  children: (step) => (() => {
3620
- var _el$12 = _tmpl$5$8(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
3870
+ var _el$12 = _tmpl$5$9(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
3621
3871
  insert(_el$14, () => step.label);
3622
3872
  createRenderEffect(() => className(_el$12, `flow-step ${stepStatusClass(step.status)}`));
3623
3873
  return _el$12;
@@ -3628,7 +3878,7 @@ const FlowProgress = () => {
3628
3878
  return t().lastAction;
3629
3879
  },
3630
3880
  get children() {
3631
- var _el$0 = _tmpl$2$a();
3881
+ var _el$0 = _tmpl$2$b();
3632
3882
  _el$0.firstChild;
3633
3883
  insert(_el$0, () => t().lastAction, null);
3634
3884
  return _el$0;
@@ -3639,7 +3889,7 @@ const FlowProgress = () => {
3639
3889
  return memo(() => !!t().nextHint)() && !t().steps.every((s) => s.status === "done");
3640
3890
  },
3641
3891
  get children() {
3642
- var _el$10 = _tmpl$3$9();
3892
+ var _el$10 = _tmpl$3$a();
3643
3893
  _el$10.firstChild;
3644
3894
  insert(_el$10, () => t().nextHint, null);
3645
3895
  return _el$10;
@@ -3654,7 +3904,7 @@ const FlowProgress = () => {
3654
3904
  return memo(() => !!flow())() && !tracker();
3655
3905
  },
3656
3906
  children: (f) => (() => {
3657
- var _el$15 = _tmpl$4$9(), _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$16.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$20.nextSibling;
3907
+ var _el$15 = _tmpl$4$a(), _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$16.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$20.nextSibling;
3658
3908
  insert(_el$17, () => f().goal);
3659
3909
  insert(_el$18, () => progressPercent(f().steps), _el$19);
3660
3910
  insert(_el$22, createComponent(For, {
@@ -3662,7 +3912,7 @@ const FlowProgress = () => {
3662
3912
  return f().steps;
3663
3913
  },
3664
3914
  children: (step) => (() => {
3665
- var _el$23 = _tmpl$5$8(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
3915
+ var _el$23 = _tmpl$5$9(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
3666
3916
  insert(_el$25, () => step.label);
3667
3917
  createRenderEffect(() => className(_el$23, `flow-step ${stepStatusClass(step.status)}`));
3668
3918
  return _el$23;
@@ -3703,7 +3953,7 @@ function formatTime(iso, options) {
3703
3953
  ...options?.includeSeconds && { second: "2-digit" }
3704
3954
  });
3705
3955
  }
3706
- var _tmpl$$9 = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$9 = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$8 = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$8 = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$7 = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$7 = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$6 = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
3956
+ var _tmpl$$a = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$a = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$9 = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$9 = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$8 = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$8 = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$7 = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
3707
3957
  const AgentTranscriptDock = () => {
3708
3958
  const {
3709
3959
  runtimeState: runtimeState2
@@ -3714,10 +3964,10 @@ const AgentTranscriptDock = () => {
3714
3964
  void window.vessel.settings.get().then((settings) => {
3715
3965
  setMode(settings.agentTranscriptMode ?? "summary");
3716
3966
  });
3717
- const unsubscribe = window.vessel.settings.onUpdate((settings) => {
3967
+ const unsubscribe2 = window.vessel.settings.onUpdate((settings) => {
3718
3968
  setMode(settings.agentTranscriptMode ?? "summary");
3719
3969
  });
3720
- onCleanup(unsubscribe);
3970
+ onCleanup(unsubscribe2);
3721
3971
  });
3722
3972
  const visibleEntries = createMemo(() => runtimeState2().transcript.slice(-6).reverse());
3723
3973
  const hasStreamingEntry = createMemo(() => visibleEntries().some((entry) => entry.status === "streaming"));
@@ -3740,7 +3990,7 @@ const AgentTranscriptDock = () => {
3740
3990
  return isSummary();
3741
3991
  },
3742
3992
  get children() {
3743
- var _el$ = _tmpl$$9();
3993
+ var _el$ = _tmpl$$a();
3744
3994
  insert(_el$, createComponent(Show, {
3745
3995
  get when() {
3746
3996
  return latestEntry();
@@ -3750,10 +4000,10 @@ const AgentTranscriptDock = () => {
3750
4000
  return hasStreamingEntry();
3751
4001
  },
3752
4002
  get children() {
3753
- return _tmpl$5$7();
4003
+ return _tmpl$5$8();
3754
4004
  }
3755
4005
  }), (() => {
3756
- var _el$10 = _tmpl$6$7(), _el$11 = _el$10.firstChild;
4006
+ var _el$10 = _tmpl$6$8(), _el$11 = _el$10.firstChild;
3757
4007
  insert(_el$10, () => entry().title || entry().kind, _el$11);
3758
4008
  insert(_el$10, (() => {
3759
4009
  var _c$ = memo(() => entry().text.length > 80);
@@ -3769,7 +4019,7 @@ const AgentTranscriptDock = () => {
3769
4019
  return !isSummary();
3770
4020
  },
3771
4021
  get children() {
3772
- var _el$2 = _tmpl$4$8(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
4022
+ var _el$2 = _tmpl$4$9(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
3773
4023
  _el$4.firstChild;
3774
4024
  var _el$7 = _el$4.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
3775
4025
  insert(_el$4, createComponent(Show, {
@@ -3777,7 +4027,7 @@ const AgentTranscriptDock = () => {
3777
4027
  return hasStreamingEntry();
3778
4028
  },
3779
4029
  get children() {
3780
- return _tmpl$2$9();
4030
+ return _tmpl$2$a();
3781
4031
  }
3782
4032
  }), null);
3783
4033
  _el$8.$$click = () => setCollapsed((value) => !value);
@@ -3788,14 +4038,14 @@ const AgentTranscriptDock = () => {
3788
4038
  return !collapsed();
3789
4039
  },
3790
4040
  get children() {
3791
- var _el$0 = _tmpl$3$8();
4041
+ var _el$0 = _tmpl$3$9();
3792
4042
  use((el) => useScrollFade(el), _el$0);
3793
4043
  insert(_el$0, createComponent(For, {
3794
4044
  get each() {
3795
4045
  return visibleEntries();
3796
4046
  },
3797
4047
  children: (entry) => (() => {
3798
- var _el$12 = _tmpl$7$6(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
4048
+ var _el$12 = _tmpl$7$7(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
3799
4049
  insert(_el$14, () => entry.title || entry.kind);
3800
4050
  insert(_el$15, () => formatTime(entry.updatedAt));
3801
4051
  insert(_el$16, () => entry.text);
@@ -4160,7 +4410,7 @@ function useAnimatedPresence(isOpen, exitDurationMs) {
4160
4410
  });
4161
4411
  return { visible, closing };
4162
4412
  }
4163
- var _tmpl$$8 = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Configure a chat provider to start using the AI assistant.</p><button class=command-bar-no-provider-btn>Open Settings <kbd>Ctrl+,`), _tmpl$2$8 = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$3$7 = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$4$7 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$5$6 = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$6$6 = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
4413
+ var _tmpl$$9 = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Configure a chat provider to start using the AI assistant.</p><button class=command-bar-no-provider-btn>Open Settings <kbd>Ctrl+,`), _tmpl$2$9 = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$3$8 = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$4$8 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$5$7 = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$6$7 = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
4164
4414
  const COMMAND_BAR_EXIT_MS = 200;
4165
4415
  const CommandBar = () => {
4166
4416
  const {
@@ -4214,7 +4464,7 @@ const CommandBar = () => {
4214
4464
  return visible();
4215
4465
  },
4216
4466
  get children() {
4217
- var _el$ = _tmpl$4$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$10 = _el$3.nextSibling, _el$11 = _el$10.firstChild;
4467
+ var _el$ = _tmpl$4$8(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$10 = _el$3.nextSibling, _el$11 = _el$10.firstChild;
4218
4468
  _el$11.nextSibling;
4219
4469
  addEventListener(_el$, "click", closeCommandBar, true);
4220
4470
  _el$2.$$click = (e) => e.stopPropagation();
@@ -4228,7 +4478,7 @@ const CommandBar = () => {
4228
4478
  return !hasProvider();
4229
4479
  },
4230
4480
  get children() {
4231
- var _el$6 = _tmpl$$8(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
4481
+ var _el$6 = _tmpl$$9(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
4232
4482
  _el$8.$$click = () => {
4233
4483
  closeCommandBar();
4234
4484
  openSettings();
@@ -4241,13 +4491,13 @@ const CommandBar = () => {
4241
4491
  return memo(() => !!(hasProvider() && recentQueries2().length > 0))() && !input().trim();
4242
4492
  },
4243
4493
  get children() {
4244
- var _el$9 = _tmpl$2$8(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
4494
+ var _el$9 = _tmpl$2$9(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
4245
4495
  insert(_el$1, createComponent(For, {
4246
4496
  get each() {
4247
4497
  return recentQueries2();
4248
4498
  },
4249
4499
  children: (q) => (() => {
4250
- var _el$14 = _tmpl$5$6();
4500
+ var _el$14 = _tmpl$5$7();
4251
4501
  _el$14.$$click = () => void handleRecentClick(q);
4252
4502
  insert(_el$14, q);
4253
4503
  return _el$14;
@@ -4261,10 +4511,10 @@ const CommandBar = () => {
4261
4511
  return hasProvider();
4262
4512
  },
4263
4513
  get fallback() {
4264
- return _tmpl$6$6();
4514
+ return _tmpl$6$7();
4265
4515
  },
4266
4516
  get children() {
4267
- return _tmpl$3$7();
4517
+ return _tmpl$3$8();
4268
4518
  }
4269
4519
  }), null);
4270
4520
  createRenderEffect((_p$) => {
@@ -5776,7 +6026,7 @@ function getBookmarkSearchMatch(args) {
5776
6026
  }
5777
6027
  return { matchedFields, score };
5778
6028
  }
5779
- var _tmpl$$7 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$6 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$6 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`);
6029
+ var _tmpl$$8 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$8 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$7 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$7 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`);
5780
6030
  const DropdownSelect = (props) => {
5781
6031
  const [open, setOpen] = createSignal(false);
5782
6032
  let rootRef;
@@ -5800,7 +6050,7 @@ const DropdownSelect = (props) => {
5800
6050
  });
5801
6051
  });
5802
6052
  return (() => {
5803
- var _el$ = _tmpl$2$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
6053
+ var _el$ = _tmpl$2$8(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
5804
6054
  var _ref$ = rootRef;
5805
6055
  typeof _ref$ === "function" ? use(_ref$, _el$) : rootRef = _el$;
5806
6056
  _el$2.$$click = () => setOpen((current) => !current);
@@ -5810,13 +6060,13 @@ const DropdownSelect = (props) => {
5810
6060
  return open();
5811
6061
  },
5812
6062
  get children() {
5813
- var _el$5 = _tmpl$$7();
6063
+ var _el$5 = _tmpl$$8();
5814
6064
  insert(_el$5, createComponent(For, {
5815
6065
  get each() {
5816
6066
  return props.options;
5817
6067
  },
5818
6068
  children: (option) => (() => {
5819
- var _el$6 = _tmpl$4$6(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
6069
+ var _el$6 = _tmpl$4$7(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
5820
6070
  _el$6.$$click = () => {
5821
6071
  props.onChange(option.value);
5822
6072
  setOpen(false);
@@ -5827,7 +6077,7 @@ const DropdownSelect = (props) => {
5827
6077
  return option.description;
5828
6078
  },
5829
6079
  get children() {
5830
- var _el$9 = _tmpl$3$6();
6080
+ var _el$9 = _tmpl$3$7();
5831
6081
  insert(_el$9, () => option.description);
5832
6082
  return _el$9;
5833
6083
  }
@@ -6013,7 +6263,7 @@ function renderKitPrompt(kit, values) {
6013
6263
  (_, key) => values[key] ?? ""
6014
6264
  );
6015
6265
  }
6016
- var _tmpl$$6 = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$6 = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$5 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$5 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$5 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$3 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$3 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$3 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$2 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$2 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$2 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$2 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$2 = /* @__PURE__ */ template(`<option>`), _tmpl$42$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
6266
+ var _tmpl$$7 = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$7 = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$6 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$6 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$6 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$6 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$6 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$5 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$3 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$3 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$3 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$2 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$2 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$2 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$2 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$2 = /* @__PURE__ */ template(`<option>`), _tmpl$42$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
6017
6267
  const ICON_MAP = {
6018
6268
  BookOpen: book_open_default,
6019
6269
  Tag: tag_default,
@@ -6338,7 +6588,7 @@ const AutomationTab = (props) => {
6338
6588
  return memo(() => !!!premiumData.loading)() && !isPremium();
6339
6589
  },
6340
6590
  get children() {
6341
- var _el$2 = _tmpl$$6(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling;
6591
+ var _el$2 = _tmpl$$7(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling;
6342
6592
  insert(_el$3, createComponent(zap_default, {
6343
6593
  size: 24
6344
6594
  }));
@@ -6352,7 +6602,7 @@ const AutomationTab = (props) => {
6352
6602
  },
6353
6603
  get children() {
6354
6604
  return [(() => {
6355
- var _el$7 = _tmpl$2$6(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$0.nextSibling;
6605
+ var _el$7 = _tmpl$2$7(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$0.nextSibling;
6356
6606
  insert(_el$0, () => allKits().length, _el$1);
6357
6607
  _el$10.$$click = () => void handleInstall();
6358
6608
  return _el$7;
@@ -6361,13 +6611,13 @@ const AutomationTab = (props) => {
6361
6611
  return installError() !== null;
6362
6612
  },
6363
6613
  get children() {
6364
- var _el$11 = _tmpl$3$5(), _el$12 = _el$11.firstChild, _el$13 = _el$12.nextSibling;
6614
+ var _el$11 = _tmpl$3$6(), _el$12 = _el$11.firstChild, _el$13 = _el$12.nextSibling;
6365
6615
  insert(_el$12, installError);
6366
6616
  _el$13.$$click = () => setInstallError(null);
6367
6617
  return _el$11;
6368
6618
  }
6369
6619
  }), (() => {
6370
- var _el$14 = _tmpl$4$5();
6620
+ var _el$14 = _tmpl$4$6();
6371
6621
  insert(_el$14, createComponent(For, {
6372
6622
  get each() {
6373
6623
  return allKits();
@@ -6427,14 +6677,14 @@ const AutomationTab = (props) => {
6427
6677
  },
6428
6678
  get children() {
6429
6679
  return [(() => {
6430
- var _el$15 = _tmpl$5$5(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
6680
+ var _el$15 = _tmpl$5$6(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
6431
6681
  insert(_el$15, createComponent(clock_default, {
6432
6682
  size: 12
6433
6683
  }), _el$16);
6434
6684
  insert(_el$17, () => scheduledJobs().length);
6435
6685
  return _el$15;
6436
6686
  })(), (() => {
6437
- var _el$18 = _tmpl$6$5();
6687
+ var _el$18 = _tmpl$6$6();
6438
6688
  insert(_el$18, createComponent(For, {
6439
6689
  get each() {
6440
6690
  return scheduledJobs();
@@ -6512,14 +6762,14 @@ const AutomationTab = (props) => {
6512
6762
  },
6513
6763
  get children() {
6514
6764
  return [(() => {
6515
- var _el$19 = _tmpl$7$5(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
6765
+ var _el$19 = _tmpl$7$6(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
6516
6766
  insert(_el$19, createComponent(zap_default, {
6517
6767
  size: 12
6518
6768
  }), _el$20);
6519
6769
  insert(_el$21, () => automationActivities2().length);
6520
6770
  return _el$19;
6521
6771
  })(), (() => {
6522
- var _el$22 = _tmpl$8$4();
6772
+ var _el$22 = _tmpl$8$5();
6523
6773
  insert(_el$22, createComponent(For, {
6524
6774
  get each() {
6525
6775
  return automationActivities2();
@@ -6852,7 +7102,7 @@ const AutomationTab = (props) => {
6852
7102
  })();
6853
7103
  };
6854
7104
  delegateEvents(["click", "input", "keydown", "contextmenu"]);
6855
- var _tmpl$$5 = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$5 = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$4 = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=agent-section-title>Recent page changes`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=page-diff-list>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$4 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$8$3 = /* @__PURE__ */ template(`<div class=page-diff-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=page-diff-content><div class=page-diff-time></div><div class=page-diff-summary>`);
7105
+ var _tmpl$$6 = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$6 = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$5 = /* @__PURE__ */ template(`<div class=agent-section-title>Recent page changes`), _tmpl$5$5 = /* @__PURE__ */ template(`<div class=page-diff-list>`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$5 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=page-diff-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=page-diff-content><div class=page-diff-time></div><div class=page-diff-summary>`);
6856
7106
  const PageDiffTimeline = () => {
6857
7107
  const {
6858
7108
  activeTab
@@ -6895,22 +7145,22 @@ const PageDiffTimeline = () => {
6895
7145
  void activeTab()?.url;
6896
7146
  void loadHistory();
6897
7147
  });
6898
- const unsubscribe = window.vessel.pageDiff.onChanged((diff) => {
7148
+ const unsubscribe2 = window.vessel.pageDiff.onChanged((diff) => {
6899
7149
  const tab = activeTab();
6900
7150
  if (!tab || !matchesPageSnapshotUrl(tab.url, diff.url)) return;
6901
7151
  void loadHistory();
6902
7152
  });
6903
7153
  onCleanup(() => {
6904
- unsubscribe();
7154
+ unsubscribe2();
6905
7155
  });
6906
7156
  return (() => {
6907
- var _el$ = _tmpl$6$4();
7157
+ var _el$ = _tmpl$6$5();
6908
7158
  insert(_el$, createComponent(Show, {
6909
7159
  get when() {
6910
7160
  return loading();
6911
7161
  },
6912
7162
  get children() {
6913
- return _tmpl$$5();
7163
+ return _tmpl$$6();
6914
7164
  }
6915
7165
  }), null);
6916
7166
  insert(_el$, createComponent(Show, {
@@ -6918,7 +7168,7 @@ const PageDiffTimeline = () => {
6918
7168
  return memo(() => !!!loading())() && error();
6919
7169
  },
6920
7170
  get children() {
6921
- var _el$3 = _tmpl$2$5();
7171
+ var _el$3 = _tmpl$2$6();
6922
7172
  insert(_el$3, error);
6923
7173
  return _el$3;
6924
7174
  }
@@ -6928,7 +7178,7 @@ const PageDiffTimeline = () => {
6928
7178
  return memo(() => !!(!loading() && !error()))() && bursts().length === 0;
6929
7179
  },
6930
7180
  get children() {
6931
- return _tmpl$3$4();
7181
+ return _tmpl$3$5();
6932
7182
  }
6933
7183
  }), null);
6934
7184
  insert(_el$, createComponent(Show, {
@@ -6936,20 +7186,20 @@ const PageDiffTimeline = () => {
6936
7186
  return memo(() => !!(!loading() && !error()))() && bursts().length > 0;
6937
7187
  },
6938
7188
  get children() {
6939
- return [_tmpl$4$4(), (() => {
6940
- var _el$6 = _tmpl$5$4();
7189
+ return [_tmpl$4$5(), (() => {
7190
+ var _el$6 = _tmpl$5$5();
6941
7191
  insert(_el$6, createComponent(For, {
6942
7192
  get each() {
6943
7193
  return bursts();
6944
7194
  },
6945
7195
  children: (burst, i) => (() => {
6946
- var _el$7 = _tmpl$8$3(), _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$1 = _el$8.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
7196
+ var _el$7 = _tmpl$8$4(), _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$1 = _el$8.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
6947
7197
  insert(_el$8, createComponent(Show, {
6948
7198
  get when() {
6949
7199
  return i() < bursts().length - 1;
6950
7200
  },
6951
7201
  get children() {
6952
- return _tmpl$7$4();
7202
+ return _tmpl$7$5();
6953
7203
  }
6954
7204
  }), null);
6955
7205
  insert(_el$10, () => new Date(burst.detectedAt).toLocaleString());
@@ -6966,7 +7216,7 @@ const PageDiffTimeline = () => {
6966
7216
  })();
6967
7217
  };
6968
7218
  const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
6969
- var _tmpl$$4 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$3 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$3 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$3 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$3 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$2 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$0$2 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$1$2 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-export-card><div><div class=bookmark-panel-title>Export</div><div class=bookmark-panel-subtitle>Save browser-ready HTML or a full Vessel archive</div></div><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Browser HTML</button><button class=bookmark-secondary-button type=button>HTML + notes</button><button class=bookmark-secondary-button type=button>Vessel JSON</button></div></div><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$10$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$11$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$12$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$13$1 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><button class=history-clear-btn>Clear</button></div><div class=history-list>`), _tmpl$14$1 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$15$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$16$1 = /* @__PURE__ */ template(`<span>`), _tmpl$17$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$18$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$19$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$20$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$21$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$23$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$24$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button></div><div class=sidebar-messages><div>`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$34$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$35$1 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$36$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$38$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$39$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$40$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$41$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$42$1 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$43 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$44 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$45 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$46 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$47 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$52 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$53 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$54 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$55 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$56 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$57 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$58 = /* @__PURE__ */ template(`<div>`), _tmpl$59 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$60 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$61 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$62 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
7219
+ var _tmpl$$5 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$5 = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$4 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$4 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$4 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$4 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$3 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$2 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$0$2 = /* @__PURE__ */ template(`<div class=bookmark-save-body><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Import HTML</button><button class=bookmark-secondary-button type=button>Import JSON`), _tmpl$1$2 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$10$2 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-export-card><div><div class=bookmark-panel-title>Export</div><div class=bookmark-panel-subtitle>Save browser-ready HTML or a full Vessel archive</div></div><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Browser HTML</button><button class=bookmark-secondary-button type=button>HTML + notes</button><button class=bookmark-secondary-button type=button>Vessel JSON</button></div></div><div class=bookmark-import-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Import Bookmarks</span><span class=bookmark-save-toggle-subtitle>Import from HTML or Vessel JSON</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$11$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$12$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$13$1 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><div class=history-panel-actions><button class=history-clear-btn>Clear</button><button class=history-clear-btn>Export HTML</button><button class=history-clear-btn>Export JSON</button><button class=history-clear-btn>Import</button></div></div><div class=history-list>`), _tmpl$15$1 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$16$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$17$1 = /* @__PURE__ */ template(`<span>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$19$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$21$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$22$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$23$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$25$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button></div><div class=sidebar-messages><div>`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$34$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$35$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$36$1 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$38$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$39$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$40$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$41$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$42$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$43$1 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$44$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$45$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$46$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$47$1 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$53 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$54 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$55 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$56 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$57 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$58 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$59 = /* @__PURE__ */ template(`<div>`), _tmpl$60 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$61 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$62 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$63 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
6970
7220
  const UNSORTED_FOLDER = {
6971
7221
  id: "unsorted",
6972
7222
  name: "Unsorted",
@@ -6975,7 +7225,7 @@ const UNSORTED_FOLDER = {
6975
7225
  const MarkdownMessage = (props) => {
6976
7226
  const html2 = createMemo(() => renderMarkdown(props.content));
6977
7227
  return (() => {
6978
- var _el$ = _tmpl$$4();
7228
+ var _el$ = _tmpl$$5();
6979
7229
  createRenderEffect(() => _el$.innerHTML = html2());
6980
7230
  return _el$;
6981
7231
  })();
@@ -6993,7 +7243,7 @@ const PremiumPromptCard = (props) => {
6993
7243
  const title = props.kind === "premium_gate" ? "This workflow needs Premium" : "Need a longer autonomous run?";
6994
7244
  const body = props.kind === "premium_gate" ? "Unlock screenshots, saved sessions, workflow tracking, table extraction, and the credential vault with a 7-day free trial." : "Free chats pause after 50 tool calls in a turn. Vessel Premium raises the ceiling so the agent can finish longer workflows without stopping.";
6995
7245
  return (() => {
6996
- var _el$2 = _tmpl$2$4(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
7246
+ var _el$2 = _tmpl$2$5(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
6997
7247
  insert(_el$4, title);
6998
7248
  insert(_el$5, body);
6999
7249
  addEventListener(_el$7, "click", props.onStartTrial, true);
@@ -7131,7 +7381,7 @@ const Sidebar = (props) => {
7131
7381
  }
7132
7382
  });
7133
7383
  createEffect(() => {
7134
- const unsubscribe = window.vessel.highlights.onCountUpdate((count) => {
7384
+ const unsubscribe2 = window.vessel.highlights.onCountUpdate((count) => {
7135
7385
  setHighlightCount(count);
7136
7386
  if (count === 0) {
7137
7387
  setHighlightIndex(-1);
@@ -7141,7 +7391,7 @@ const Sidebar = (props) => {
7141
7391
  setHighlightIndex(count - 1);
7142
7392
  }
7143
7393
  });
7144
- onCleanup(unsubscribe);
7394
+ onCleanup(unsubscribe2);
7145
7395
  });
7146
7396
  const scrollToHighlight = async (idx) => {
7147
7397
  const count = highlightCount();
@@ -7168,7 +7418,7 @@ const Sidebar = (props) => {
7168
7418
  setHighlightIndex(-1);
7169
7419
  };
7170
7420
  createEffect(() => {
7171
- const unsubscribe = window.vessel.highlights.onSidebarAction((action) => {
7421
+ const unsubscribe2 = window.vessel.highlights.onSidebarAction((action) => {
7172
7422
  if (action === "remove-current") {
7173
7423
  void removeCurrentHighlight();
7174
7424
  return;
@@ -7177,10 +7427,10 @@ const Sidebar = (props) => {
7177
7427
  void clearAllHighlights();
7178
7428
  }
7179
7429
  });
7180
- onCleanup(unsubscribe);
7430
+ onCleanup(unsubscribe2);
7181
7431
  });
7182
7432
  createEffect(() => {
7183
- const unsubscribe = window.vessel.bookmarks.onAddContextToChat((bookmarkId) => {
7433
+ const unsubscribe2 = window.vessel.bookmarks.onAddContextToChat((bookmarkId) => {
7184
7434
  const bookmark = bookmarksState2().bookmarks.find((item) => item.id === bookmarkId);
7185
7435
  if (!bookmark) return;
7186
7436
  const folder = bookmark.folderId === UNSORTED_FOLDER.id ? UNSORTED_FOLDER : bookmarksState2().folders.find((item) => item.id === bookmark.folderId) ?? null;
@@ -7199,7 +7449,7 @@ ${contextBlock}` : contextBlock);
7199
7449
  chatInputRef?.setSelectionRange(length, length);
7200
7450
  });
7201
7451
  });
7202
- onCleanup(unsubscribe);
7452
+ onCleanup(unsubscribe2);
7203
7453
  });
7204
7454
  const handleChatSend = async () => {
7205
7455
  const prompt = chatInput().trim();
@@ -7232,6 +7482,9 @@ ${contextBlock}` : contextBlock);
7232
7482
  const [bookmarkSearchQuery, setBookmarkSearchQuery] = createSignal("");
7233
7483
  const [bookmarkExportMessage, setBookmarkExportMessage] = createSignal("");
7234
7484
  const [bookmarkExporting, setBookmarkExporting] = createSignal(false);
7485
+ const [bookmarkImportExpanded, setBookmarkImportExpanded] = createSignal(false);
7486
+ const [bookmarkImporting, setBookmarkImporting] = createSignal(false);
7487
+ const [bookmarkImportMessage, setBookmarkImportMessage] = createSignal("");
7235
7488
  const [editingFolderId, setEditingFolderId] = createSignal(null);
7236
7489
  const [editingFolderName, setEditingFolderName] = createSignal("");
7237
7490
  const [editingFolderSummary, setEditingFolderSummary] = createSignal("");
@@ -7526,6 +7779,22 @@ ${contextBlock}` : contextBlock);
7526
7779
  setBookmarkExporting(false);
7527
7780
  }
7528
7781
  };
7782
+ const handleImportBookmarks = async (format) => {
7783
+ setBookmarkImporting(true);
7784
+ setBookmarkImportMessage("");
7785
+ try {
7786
+ const result = format === "json" ? await window.vessel.bookmarks.importJson() : await window.vessel.bookmarks.importHtml();
7787
+ if (!result) {
7788
+ setBookmarkImportMessage("Import canceled.");
7789
+ return;
7790
+ }
7791
+ setBookmarkImportMessage(`Imported ${result.imported} bookmarks (${result.skipped} duplicates skipped, ${result.errors} errors)`);
7792
+ } catch (error) {
7793
+ setBookmarkImportMessage(error instanceof Error ? error.message : "Could not import bookmarks.");
7794
+ } finally {
7795
+ setBookmarkImporting(false);
7796
+ }
7797
+ };
7529
7798
  const toggleFolderExpanded = (folderId) => {
7530
7799
  setExpandedFolderIds((current) => current.includes(folderId) ? current.filter((id) => id !== folderId) : [...current, folderId]);
7531
7800
  };
@@ -7543,9 +7812,9 @@ ${contextBlock}` : contextBlock);
7543
7812
  return props.forceOpen || sidebarOpen2();
7544
7813
  },
7545
7814
  get children() {
7546
- var _el$9 = _tmpl$28$1(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$1.nextSibling, _el$16 = _el$15.firstChild;
7815
+ var _el$9 = _tmpl$29$1(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$1.nextSibling, _el$16 = _el$15.firstChild;
7547
7816
  _el$16.firstChild;
7548
- var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$23.nextSibling, _el$25 = _el$15.nextSibling, _el$111 = _el$25.firstChild;
7817
+ var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$23.nextSibling, _el$25 = _el$15.nextSibling, _el$124 = _el$25.firstChild;
7549
7818
  _el$0.$$pointerdown = startResize;
7550
7819
  setAttribute(_el$11, "src", vesselLogo);
7551
7820
  addEventListener(_el$13, "click", clearHistory, true);
@@ -7556,7 +7825,7 @@ ${contextBlock}` : contextBlock);
7556
7825
  return runtimeState2().supervisor.pendingApprovals.length > 0;
7557
7826
  },
7558
7827
  get children() {
7559
- var _el$18 = _tmpl$3$3();
7828
+ var _el$18 = _tmpl$3$4();
7560
7829
  insert(_el$18, () => runtimeState2().supervisor.pendingApprovals.length);
7561
7830
  return _el$18;
7562
7831
  }
@@ -7576,7 +7845,7 @@ ${contextBlock}` : contextBlock);
7576
7845
  return sidebarTab() === "supervisor";
7577
7846
  },
7578
7847
  get children() {
7579
- var _el$26 = _tmpl$7$3(), _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$27.nextSibling, _el$33 = _el$32.firstChild, _el$34 = _el$33.nextSibling, _el$36 = _el$32.nextSibling, _el$38 = _el$36.nextSibling;
7848
+ var _el$26 = _tmpl$7$4(), _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$27.nextSibling, _el$33 = _el$32.firstChild, _el$34 = _el$33.nextSibling, _el$36 = _el$32.nextSibling, _el$38 = _el$36.nextSibling;
7580
7849
  _el$38.firstChild;
7581
7850
  insert(_el$30, () => runtimeState2().supervisor.paused ? "Agent is paused" : "Agent is live");
7582
7851
  insert(_el$31, () => runtimeState2().supervisor.paused ? "Paused" : "Running");
@@ -7599,7 +7868,7 @@ ${contextBlock}` : contextBlock);
7599
7868
  return runtimeState2().canUndo;
7600
7869
  },
7601
7870
  get children() {
7602
- var _el$35 = _tmpl$4$3();
7871
+ var _el$35 = _tmpl$4$4();
7603
7872
  _el$35.$$click = () => void undoLastAction();
7604
7873
  createRenderEffect(() => setAttribute(_el$35, "title", runtimeState2().undoInfo ? `Undo: ${runtimeState2().undoInfo.actionName}` : "Undo last action"));
7605
7874
  return _el$35;
@@ -7611,21 +7880,21 @@ ${contextBlock}` : contextBlock);
7611
7880
  return runtimeState2().supervisor.pendingApprovals.length > 0;
7612
7881
  },
7613
7882
  get fallback() {
7614
- return _tmpl$29$1();
7883
+ return _tmpl$30$1();
7615
7884
  },
7616
7885
  get children() {
7617
- return [_tmpl$5$3(), createComponent(For, {
7886
+ return [_tmpl$5$4(), createComponent(For, {
7618
7887
  get each() {
7619
7888
  return runtimeState2().supervisor.pendingApprovals;
7620
7889
  },
7621
7890
  children: (approval) => (() => {
7622
- var _el$129 = _tmpl$30$1(), _el$130 = _el$129.firstChild, _el$131 = _el$130.nextSibling, _el$132 = _el$131.nextSibling, _el$133 = _el$132.nextSibling, _el$134 = _el$133.nextSibling, _el$135 = _el$134.firstChild, _el$136 = _el$135.nextSibling;
7623
- insert(_el$131, () => approval.name);
7624
- insert(_el$132, () => approval.argsSummary);
7625
- insert(_el$133, () => approval.reason);
7626
- _el$135.$$click = () => void resolveApproval(approval.id, true);
7627
- _el$136.$$click = () => void resolveApproval(approval.id, false);
7628
- return _el$129;
7891
+ var _el$142 = _tmpl$31$1(), _el$143 = _el$142.firstChild, _el$144 = _el$143.nextSibling, _el$145 = _el$144.nextSibling, _el$146 = _el$145.nextSibling, _el$147 = _el$146.nextSibling, _el$148 = _el$147.firstChild, _el$149 = _el$148.nextSibling;
7892
+ insert(_el$144, () => approval.name);
7893
+ insert(_el$145, () => approval.argsSummary);
7894
+ insert(_el$146, () => approval.reason);
7895
+ _el$148.$$click = () => void resolveApproval(approval.id, true);
7896
+ _el$149.$$click = () => void resolveApproval(approval.id, false);
7897
+ return _el$142;
7629
7898
  })()
7630
7899
  })];
7631
7900
  }
@@ -7635,7 +7904,7 @@ ${contextBlock}` : contextBlock);
7635
7904
  return recentActions().length > 0;
7636
7905
  },
7637
7906
  get children() {
7638
- var _el$40 = _tmpl$6$3();
7907
+ var _el$40 = _tmpl$6$4();
7639
7908
  _el$40.$$click = () => setActionsExpanded((current) => !current);
7640
7909
  insert(_el$40, (() => {
7641
7910
  var _c$ = memo(() => !!actionsExpanded());
@@ -7649,7 +7918,7 @@ ${contextBlock}` : contextBlock);
7649
7918
  return recentActions().length > 0;
7650
7919
  },
7651
7920
  get fallback() {
7652
- return _tmpl$31$1();
7921
+ return _tmpl$32$1();
7653
7922
  },
7654
7923
  get children() {
7655
7924
  return createComponent(Show, {
@@ -7657,7 +7926,7 @@ ${contextBlock}` : contextBlock);
7657
7926
  return actionsExpanded();
7658
7927
  },
7659
7928
  get fallback() {
7660
- return _tmpl$32$1();
7929
+ return _tmpl$33$1();
7661
7930
  },
7662
7931
  get children() {
7663
7932
  return createComponent(For, {
@@ -7665,32 +7934,32 @@ ${contextBlock}` : contextBlock);
7665
7934
  return recentActions();
7666
7935
  },
7667
7936
  children: (action) => (() => {
7668
- var _el$139 = _tmpl$35$1(), _el$140 = _el$139.firstChild, _el$141 = _el$140.firstChild, _el$142 = _el$141.nextSibling, _el$143 = _el$140.nextSibling;
7669
- insert(_el$141, () => action.name);
7670
- insert(_el$142, () => action.status);
7671
- insert(_el$143, () => action.argsSummary);
7672
- insert(_el$139, createComponent(Show, {
7937
+ var _el$152 = _tmpl$36$1(), _el$153 = _el$152.firstChild, _el$154 = _el$153.firstChild, _el$155 = _el$154.nextSibling, _el$156 = _el$153.nextSibling;
7938
+ insert(_el$154, () => action.name);
7939
+ insert(_el$155, () => action.status);
7940
+ insert(_el$156, () => action.argsSummary);
7941
+ insert(_el$152, createComponent(Show, {
7673
7942
  get when() {
7674
7943
  return action.resultSummary;
7675
7944
  },
7676
7945
  get children() {
7677
- var _el$144 = _tmpl$33$1();
7678
- insert(_el$144, () => action.resultSummary);
7679
- return _el$144;
7946
+ var _el$157 = _tmpl$34$1();
7947
+ insert(_el$157, () => action.resultSummary);
7948
+ return _el$157;
7680
7949
  }
7681
7950
  }), null);
7682
- insert(_el$139, createComponent(Show, {
7951
+ insert(_el$152, createComponent(Show, {
7683
7952
  get when() {
7684
7953
  return action.error;
7685
7954
  },
7686
7955
  get children() {
7687
- var _el$145 = _tmpl$34$1();
7688
- insert(_el$145, () => action.error);
7689
- return _el$145;
7956
+ var _el$158 = _tmpl$35$1();
7957
+ insert(_el$158, () => action.error);
7958
+ return _el$158;
7690
7959
  }
7691
7960
  }), null);
7692
- createRenderEffect(() => className(_el$142, `agent-action-status ${action.status}`));
7693
- return _el$139;
7961
+ createRenderEffect(() => className(_el$155, `agent-action-status ${action.status}`));
7962
+ return _el$152;
7694
7963
  })()
7695
7964
  });
7696
7965
  }
@@ -7700,13 +7969,13 @@ ${contextBlock}` : contextBlock);
7700
7969
  createRenderEffect(() => _el$31.classList.toggle("paused", !!runtimeState2().supervisor.paused));
7701
7970
  return _el$26;
7702
7971
  }
7703
- }), _el$111);
7972
+ }), _el$124);
7704
7973
  insert(_el$25, createComponent(Show, {
7705
7974
  get when() {
7706
7975
  return sidebarTab() === "bookmarks";
7707
7976
  },
7708
7977
  get children() {
7709
- var _el$41 = _tmpl$1$2(), _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling, _el$47 = _el$42.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling, _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling, _el$53 = _el$52.nextSibling, _el$55 = _el$48.nextSibling, _el$56 = _el$55.firstChild, _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling, _el$69 = _el$55.nextSibling, _el$70 = _el$69.firstChild, _el$71 = _el$70.firstChild, _el$72 = _el$71.nextSibling, _el$73 = _el$70.nextSibling, _el$74 = _el$69.nextSibling;
7978
+ var _el$41 = _tmpl$10$2(), _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling, _el$47 = _el$42.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling, _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling, _el$53 = _el$52.nextSibling, _el$55 = _el$48.nextSibling, _el$56 = _el$55.firstChild, _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling, _el$64 = _el$55.nextSibling, _el$65 = _el$64.firstChild, _el$66 = _el$65.firstChild, _el$67 = _el$66.nextSibling, _el$78 = _el$64.nextSibling, _el$79 = _el$78.firstChild, _el$80 = _el$79.firstChild, _el$81 = _el$80.nextSibling, _el$82 = _el$79.nextSibling, _el$83 = _el$78.nextSibling;
7710
7979
  insert(_el$45, (() => {
7711
7980
  var _c$2 = memo(() => !!normalizedBookmarkSearch());
7712
7981
  return () => _c$2() ? `${bookmarkMatchCount()} matches for "${bookmarkSearchQuery().trim()}"` : `${bookmarksState2().bookmarks.length} saved across ${bookmarkFolders().length} folders`;
@@ -7716,7 +7985,7 @@ ${contextBlock}` : contextBlock);
7716
7985
  return currentTabSaved();
7717
7986
  },
7718
7987
  get children() {
7719
- return _tmpl$8$2();
7988
+ return _tmpl$8$3();
7720
7989
  }
7721
7990
  }), null);
7722
7991
  _el$47.$$input = (e) => setBookmarkSearchQuery(e.currentTarget.value);
@@ -7733,16 +8002,47 @@ ${contextBlock}` : contextBlock);
7733
8002
  return _el$54;
7734
8003
  }
7735
8004
  }), null);
7736
- _el$56.$$click = () => setBookmarkSaveExpanded((current) => !current);
8005
+ _el$56.$$click = () => setBookmarkImportExpanded((current) => !current);
7737
8006
  insert(_el$55, createComponent(Show, {
8007
+ get when() {
8008
+ return bookmarkImportExpanded();
8009
+ },
8010
+ get children() {
8011
+ var _el$59 = _tmpl$0$2(), _el$60 = _el$59.firstChild, _el$61 = _el$60.firstChild, _el$62 = _el$61.nextSibling;
8012
+ _el$61.$$click = () => void handleImportBookmarks("html");
8013
+ _el$62.$$click = () => void handleImportBookmarks("json");
8014
+ insert(_el$59, createComponent(Show, {
8015
+ get when() {
8016
+ return bookmarkImportMessage();
8017
+ },
8018
+ get children() {
8019
+ var _el$63 = _tmpl$9$2();
8020
+ insert(_el$63, bookmarkImportMessage);
8021
+ return _el$63;
8022
+ }
8023
+ }), null);
8024
+ createRenderEffect((_p$) => {
8025
+ var _v$ = bookmarkImporting(), _v$2 = bookmarkImporting();
8026
+ _v$ !== _p$.e && (_el$61.disabled = _p$.e = _v$);
8027
+ _v$2 !== _p$.t && (_el$62.disabled = _p$.t = _v$2);
8028
+ return _p$;
8029
+ }, {
8030
+ e: void 0,
8031
+ t: void 0
8032
+ });
8033
+ return _el$59;
8034
+ }
8035
+ }), null);
8036
+ _el$65.$$click = () => setBookmarkSaveExpanded((current) => !current);
8037
+ insert(_el$64, createComponent(Show, {
7738
8038
  get when() {
7739
8039
  return bookmarkSaveExpanded();
7740
8040
  },
7741
8041
  get children() {
7742
- var _el$59 = _tmpl$0$2(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling, _el$62 = _el$61.nextSibling, _el$63 = _el$62.firstChild, _el$64 = _el$62.nextSibling, _el$65 = _el$64.nextSibling, _el$66 = _el$65.nextSibling, _el$67 = _el$66.nextSibling, _el$68 = _el$67.nextSibling;
7743
- insert(_el$60, () => currentTab()?.title || "No active page");
7744
- insert(_el$61, () => currentTab()?.url || "Open a page to save it here.");
7745
- insert(_el$62, createComponent(DropdownSelect, {
8042
+ var _el$68 = _tmpl$1$2(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling, _el$71 = _el$70.nextSibling, _el$72 = _el$71.firstChild, _el$73 = _el$71.nextSibling, _el$74 = _el$73.nextSibling, _el$75 = _el$74.nextSibling, _el$76 = _el$75.nextSibling, _el$77 = _el$76.nextSibling;
8043
+ insert(_el$69, () => currentTab()?.title || "No active page");
8044
+ insert(_el$70, () => currentTab()?.url || "Open a page to save it here.");
8045
+ insert(_el$71, createComponent(DropdownSelect, {
7746
8046
  "class": "bookmark-select",
7747
8047
  get value() {
7748
8048
  return selectedFolderId();
@@ -7752,37 +8052,37 @@ ${contextBlock}` : contextBlock);
7752
8052
  },
7753
8053
  ariaLabel: "Bookmark folder",
7754
8054
  onChange: (value) => setSelectedFolderId(value)
7755
- }), _el$63);
7756
- _el$63.$$click = () => void handleSaveBookmark();
7757
- _el$64.$$input = (e) => setBookmarkNote(e.currentTarget.value);
7758
- _el$65.$$input = (e) => setBookmarkIntent(e.currentTarget.value);
7759
- _el$66.$$input = (e) => setBookmarkExpectedContent(e.currentTarget.value);
7760
- _el$67.$$input = (e) => setBookmarkKeyFields(e.currentTarget.value);
7761
- _el$68.$$input = (e) => setBookmarkAgentHints(e.currentTarget.value);
7762
- createRenderEffect(() => _el$63.disabled = !currentTab()?.url);
7763
- createRenderEffect(() => _el$64.value = bookmarkNote());
7764
- createRenderEffect(() => _el$65.value = bookmarkIntent());
7765
- createRenderEffect(() => _el$66.value = bookmarkExpectedContent());
7766
- createRenderEffect(() => _el$67.value = bookmarkKeyFields());
7767
- createRenderEffect(() => _el$68.value = bookmarkAgentHints());
7768
- return _el$59;
8055
+ }), _el$72);
8056
+ _el$72.$$click = () => void handleSaveBookmark();
8057
+ _el$73.$$input = (e) => setBookmarkNote(e.currentTarget.value);
8058
+ _el$74.$$input = (e) => setBookmarkIntent(e.currentTarget.value);
8059
+ _el$75.$$input = (e) => setBookmarkExpectedContent(e.currentTarget.value);
8060
+ _el$76.$$input = (e) => setBookmarkKeyFields(e.currentTarget.value);
8061
+ _el$77.$$input = (e) => setBookmarkAgentHints(e.currentTarget.value);
8062
+ createRenderEffect(() => _el$72.disabled = !currentTab()?.url);
8063
+ createRenderEffect(() => _el$73.value = bookmarkNote());
8064
+ createRenderEffect(() => _el$74.value = bookmarkIntent());
8065
+ createRenderEffect(() => _el$75.value = bookmarkExpectedContent());
8066
+ createRenderEffect(() => _el$76.value = bookmarkKeyFields());
8067
+ createRenderEffect(() => _el$77.value = bookmarkAgentHints());
8068
+ return _el$68;
7769
8069
  }
7770
8070
  }), null);
7771
- _el$69.addEventListener("submit", handleCreateFolder);
7772
- _el$71.$$input = (e) => setNewFolderName(e.currentTarget.value);
7773
- _el$72.$$input = (e) => setNewFolderSummary(e.currentTarget.value);
7774
- insert(_el$74, createComponent(Show, {
8071
+ _el$78.addEventListener("submit", handleCreateFolder);
8072
+ _el$80.$$input = (e) => setNewFolderName(e.currentTarget.value);
8073
+ _el$81.$$input = (e) => setNewFolderSummary(e.currentTarget.value);
8074
+ insert(_el$83, createComponent(Show, {
7775
8075
  get when() {
7776
8076
  return filteredGroupedBookmarks().length > 0;
7777
8077
  },
7778
8078
  get fallback() {
7779
8079
  return (() => {
7780
- var _el$146 = _tmpl$36$1();
7781
- insert(_el$146, (() => {
8080
+ var _el$159 = _tmpl$37$1();
8081
+ insert(_el$159, (() => {
7782
8082
  var _c$5 = memo(() => !!normalizedBookmarkSearch());
7783
8083
  return () => _c$5() ? `No bookmarks matched "${bookmarkSearchQuery().trim()}".` : "No bookmarks saved yet.";
7784
8084
  })());
7785
- return _el$146;
8085
+ return _el$159;
7786
8086
  })();
7787
8087
  },
7788
8088
  get children() {
@@ -7791,100 +8091,100 @@ ${contextBlock}` : contextBlock);
7791
8091
  return filteredGroupedBookmarks();
7792
8092
  },
7793
8093
  children: (folder) => (() => {
7794
- var _el$147 = _tmpl$43(), _el$148 = _el$147.firstChild, _el$149 = _el$148.firstChild, _el$150 = _el$149.firstChild, _el$151 = _el$150.nextSibling, _el$152 = _el$151.firstChild, _el$153 = _el$152.nextSibling, _el$154 = _el$153.firstChild;
7795
- _el$148.$$keydown = (e) => {
8094
+ var _el$160 = _tmpl$44$1(), _el$161 = _el$160.firstChild, _el$162 = _el$161.firstChild, _el$163 = _el$162.firstChild, _el$164 = _el$163.nextSibling, _el$165 = _el$164.firstChild, _el$166 = _el$165.nextSibling, _el$167 = _el$166.firstChild;
8095
+ _el$161.$$keydown = (e) => {
7796
8096
  if (e.key === "Enter" || e.key === " ") {
7797
8097
  e.preventDefault();
7798
8098
  toggleFolderExpanded(folder.id);
7799
8099
  }
7800
8100
  };
7801
- _el$148.$$click = () => toggleFolderExpanded(folder.id);
7802
- insert(_el$152, () => folder.name);
7803
- insert(_el$153, () => folder.items.length, _el$154);
7804
- insert(_el$151, createComponent(Show, {
8101
+ _el$161.$$click = () => toggleFolderExpanded(folder.id);
8102
+ insert(_el$165, () => folder.name);
8103
+ insert(_el$166, () => folder.items.length, _el$167);
8104
+ insert(_el$164, createComponent(Show, {
7805
8105
  get when() {
7806
8106
  return folder.summary;
7807
8107
  },
7808
8108
  get children() {
7809
- var _el$155 = _tmpl$37$1();
7810
- insert(_el$155, () => folder.summary);
7811
- return _el$155;
8109
+ var _el$168 = _tmpl$38$1();
8110
+ insert(_el$168, () => folder.summary);
8111
+ return _el$168;
7812
8112
  }
7813
8113
  }), null);
7814
- insert(_el$148, createComponent(Show, {
8114
+ insert(_el$161, createComponent(Show, {
7815
8115
  get when() {
7816
8116
  return folder.id !== UNSORTED_FOLDER.id;
7817
8117
  },
7818
8118
  get children() {
7819
- var _el$156 = _tmpl$38$1(), _el$157 = _el$156.firstChild, _el$158 = _el$157.nextSibling;
7820
- _el$157.$$click = (e) => {
8119
+ var _el$169 = _tmpl$39$1(), _el$170 = _el$169.firstChild, _el$171 = _el$170.nextSibling;
8120
+ _el$170.$$click = (e) => {
7821
8121
  e.stopPropagation();
7822
8122
  setEditingFolderId(folder.id);
7823
8123
  setEditingFolderName(folder.name);
7824
8124
  setEditingFolderSummary(folder.summary || "");
7825
8125
  };
7826
- _el$158.$$click = (e) => {
8126
+ _el$171.$$click = (e) => {
7827
8127
  e.stopPropagation();
7828
8128
  setDeletingFolderId(folder.id);
7829
8129
  };
7830
- return _el$156;
8130
+ return _el$169;
7831
8131
  }
7832
8132
  }), null);
7833
- insert(_el$147, createComponent(Show, {
8133
+ insert(_el$160, createComponent(Show, {
7834
8134
  get when() {
7835
8135
  return deletingFolderId() === folder.id;
7836
8136
  },
7837
8137
  get children() {
7838
- var _el$159 = _tmpl$40$1(), _el$160 = _el$159.firstChild, _el$161 = _el$160.firstChild, _el$163 = _el$161.nextSibling;
7839
- _el$163.nextSibling;
7840
- var _el$164 = _el$160.nextSibling, _el$166 = _el$164.firstChild, _el$167 = _el$166.nextSibling;
7841
- insert(_el$160, () => folder.name, _el$163);
7842
- insert(_el$160, (() => {
8138
+ var _el$172 = _tmpl$41$1(), _el$173 = _el$172.firstChild, _el$174 = _el$173.firstChild, _el$176 = _el$174.nextSibling;
8139
+ _el$176.nextSibling;
8140
+ var _el$177 = _el$173.nextSibling, _el$179 = _el$177.firstChild, _el$180 = _el$179.nextSibling;
8141
+ insert(_el$173, () => folder.name, _el$176);
8142
+ insert(_el$173, (() => {
7843
8143
  var _c$6 = memo(() => folder.items.length > 0);
7844
8144
  return () => _c$6() ? ` This folder has ${folder.items.length} bookmark${folder.items.length === 1 ? "" : "s"}.` : "";
7845
8145
  })(), null);
7846
- insert(_el$164, createComponent(Show, {
8146
+ insert(_el$177, createComponent(Show, {
7847
8147
  get when() {
7848
8148
  return folder.items.length > 0;
7849
8149
  },
7850
8150
  get children() {
7851
- var _el$165 = _tmpl$39$1();
7852
- _el$165.$$click = () => void handleRemoveFolder(folder.id, false);
7853
- return _el$165;
8151
+ var _el$178 = _tmpl$40$1();
8152
+ _el$178.$$click = () => void handleRemoveFolder(folder.id, false);
8153
+ return _el$178;
7854
8154
  }
7855
- }), _el$166);
7856
- _el$166.$$click = () => void handleRemoveFolder(folder.id, true);
7857
- insert(_el$166, () => folder.items.length > 0 ? "Delete all" : "Delete folder");
7858
- _el$167.$$click = () => setDeletingFolderId(null);
7859
- return _el$159;
8155
+ }), _el$179);
8156
+ _el$179.$$click = () => void handleRemoveFolder(folder.id, true);
8157
+ insert(_el$179, () => folder.items.length > 0 ? "Delete all" : "Delete folder");
8158
+ _el$180.$$click = () => setDeletingFolderId(null);
8159
+ return _el$172;
7860
8160
  }
7861
8161
  }), null);
7862
- insert(_el$147, createComponent(Show, {
8162
+ insert(_el$160, createComponent(Show, {
7863
8163
  get when() {
7864
8164
  return editingFolderId() === folder.id;
7865
8165
  },
7866
8166
  get children() {
7867
- var _el$168 = _tmpl$41$1(), _el$169 = _el$168.firstChild, _el$170 = _el$169.firstChild, _el$171 = _el$170.nextSibling, _el$172 = _el$169.nextSibling, _el$173 = _el$172.nextSibling;
7868
- _el$170.$$input = (e) => setEditingFolderName(e.currentTarget.value);
7869
- _el$171.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
7870
- _el$172.$$click = () => void handleRenameFolder(folder.id);
7871
- _el$173.$$click = () => {
8167
+ var _el$181 = _tmpl$42$1(), _el$182 = _el$181.firstChild, _el$183 = _el$182.firstChild, _el$184 = _el$183.nextSibling, _el$185 = _el$182.nextSibling, _el$186 = _el$185.nextSibling;
8168
+ _el$183.$$input = (e) => setEditingFolderName(e.currentTarget.value);
8169
+ _el$184.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
8170
+ _el$185.$$click = () => void handleRenameFolder(folder.id);
8171
+ _el$186.$$click = () => {
7872
8172
  setEditingFolderId(null);
7873
8173
  setEditingFolderName("");
7874
8174
  setEditingFolderSummary("");
7875
8175
  };
7876
- createRenderEffect(() => _el$172.disabled = !editingFolderName().trim());
7877
- createRenderEffect(() => _el$170.value = editingFolderName());
7878
- createRenderEffect(() => _el$171.value = editingFolderSummary());
7879
- return _el$168;
8176
+ createRenderEffect(() => _el$185.disabled = !editingFolderName().trim());
8177
+ createRenderEffect(() => _el$183.value = editingFolderName());
8178
+ createRenderEffect(() => _el$184.value = editingFolderSummary());
8179
+ return _el$181;
7880
8180
  }
7881
8181
  }), null);
7882
- insert(_el$147, createComponent(Show, {
8182
+ insert(_el$160, createComponent(Show, {
7883
8183
  get when() {
7884
8184
  return isFolderExpanded(folder.id);
7885
8185
  },
7886
8186
  get fallback() {
7887
- return _tmpl$44();
8187
+ return _tmpl$45$1();
7888
8188
  },
7889
8189
  get children() {
7890
8190
  return createComponent(Show, {
@@ -7892,209 +8192,211 @@ ${contextBlock}` : contextBlock);
7892
8192
  return folder.items.length > 0;
7893
8193
  },
7894
8194
  get fallback() {
7895
- return _tmpl$45();
8195
+ return _tmpl$46$1();
7896
8196
  },
7897
8197
  get children() {
7898
- var _el$174 = _tmpl$42$1();
7899
- insert(_el$174, createComponent(For, {
8198
+ var _el$187 = _tmpl$43$1();
8199
+ insert(_el$187, createComponent(For, {
7900
8200
  get each() {
7901
8201
  return folder.items;
7902
8202
  },
7903
8203
  children: (bookmark) => (() => {
7904
- var _el$177 = _tmpl$52(), _el$178 = _el$177.firstChild, _el$179 = _el$178.firstChild, _el$180 = _el$179.nextSibling, _el$205 = _el$178.nextSibling, _el$206 = _el$205.firstChild, _el$207 = _el$206.nextSibling, _el$208 = _el$207.nextSibling;
7905
- _el$178.$$click = () => void createTab(bookmark.url);
7906
- insert(_el$179, () => bookmark.title || bookmark.url);
7907
- insert(_el$180, () => bookmark.url);
7908
- insert(_el$177, createComponent(Show, {
8204
+ var _el$190 = _tmpl$53(), _el$191 = _el$190.firstChild, _el$192 = _el$191.firstChild, _el$193 = _el$192.nextSibling, _el$218 = _el$191.nextSibling, _el$219 = _el$218.firstChild, _el$220 = _el$219.nextSibling, _el$221 = _el$220.nextSibling;
8205
+ _el$191.$$click = () => void createTab(bookmark.url);
8206
+ insert(_el$192, () => bookmark.title || bookmark.url);
8207
+ insert(_el$193, () => bookmark.url);
8208
+ insert(_el$190, createComponent(Show, {
7909
8209
  get when() {
7910
8210
  return bookmark.note;
7911
8211
  },
7912
8212
  get children() {
7913
- var _el$181 = _tmpl$46();
7914
- insert(_el$181, () => bookmark.note);
7915
- return _el$181;
8213
+ var _el$194 = _tmpl$47$1();
8214
+ insert(_el$194, () => bookmark.note);
8215
+ return _el$194;
7916
8216
  }
7917
- }), _el$205);
7918
- insert(_el$177, createComponent(Show, {
8217
+ }), _el$218);
8218
+ insert(_el$190, createComponent(Show, {
7919
8219
  get when() {
7920
8220
  return bookmark.intent || bookmark.expectedContent || (bookmark.keyFields?.length || 0) > 0 || (bookmark.agentHints && Object.keys(bookmark.agentHints).length || 0) > 0;
7921
8221
  },
7922
8222
  get children() {
7923
- var _el$182 = _tmpl$46();
7924
- insert(_el$182, createComponent(Show, {
8223
+ var _el$195 = _tmpl$47$1();
8224
+ insert(_el$195, createComponent(Show, {
7925
8225
  get when() {
7926
8226
  return bookmark.intent;
7927
8227
  },
7928
8228
  get children() {
7929
- var _el$183 = _tmpl$47(), _el$184 = _el$183.firstChild;
7930
- _el$184.nextSibling;
7931
- insert(_el$183, () => bookmark.intent, null);
7932
- return _el$183;
8229
+ var _el$196 = _tmpl$48(), _el$197 = _el$196.firstChild;
8230
+ _el$197.nextSibling;
8231
+ insert(_el$196, () => bookmark.intent, null);
8232
+ return _el$196;
7933
8233
  }
7934
8234
  }), null);
7935
- insert(_el$182, createComponent(Show, {
8235
+ insert(_el$195, createComponent(Show, {
7936
8236
  get when() {
7937
8237
  return bookmark.expectedContent;
7938
8238
  },
7939
8239
  get children() {
7940
- var _el$186 = _tmpl$48(), _el$187 = _el$186.firstChild;
7941
- _el$187.nextSibling;
7942
- insert(_el$186, () => bookmark.expectedContent, null);
7943
- return _el$186;
8240
+ var _el$199 = _tmpl$49(), _el$200 = _el$199.firstChild;
8241
+ _el$200.nextSibling;
8242
+ insert(_el$199, () => bookmark.expectedContent, null);
8243
+ return _el$199;
7944
8244
  }
7945
8245
  }), null);
7946
- insert(_el$182, createComponent(Show, {
8246
+ insert(_el$195, createComponent(Show, {
7947
8247
  get when() {
7948
8248
  return (bookmark.keyFields?.length || 0) > 0;
7949
8249
  },
7950
8250
  get children() {
7951
- var _el$189 = _tmpl$49(), _el$190 = _el$189.firstChild;
7952
- _el$190.nextSibling;
7953
- insert(_el$189, () => bookmark.keyFields?.join(", "), null);
7954
- return _el$189;
8251
+ var _el$202 = _tmpl$50(), _el$203 = _el$202.firstChild;
8252
+ _el$203.nextSibling;
8253
+ insert(_el$202, () => bookmark.keyFields?.join(", "), null);
8254
+ return _el$202;
7955
8255
  }
7956
8256
  }), null);
7957
- insert(_el$182, createComponent(Show, {
8257
+ insert(_el$195, createComponent(Show, {
7958
8258
  get when() {
7959
8259
  return memo(() => !!bookmark.agentHints)() && Object.keys(bookmark.agentHints).length > 0;
7960
8260
  },
7961
8261
  get children() {
7962
- var _el$192 = _tmpl$50(), _el$193 = _el$192.firstChild;
7963
- _el$193.nextSibling;
7964
- insert(_el$192, () => Object.entries(bookmark.agentHints || {}).map(([key, hint]) => `${key}: ${hint}`).join(" • "), null);
7965
- return _el$192;
8262
+ var _el$205 = _tmpl$51(), _el$206 = _el$205.firstChild;
8263
+ _el$206.nextSibling;
8264
+ insert(_el$205, () => Object.entries(bookmark.agentHints || {}).map(([key, hint]) => `${key}: ${hint}`).join(" • "), null);
8265
+ return _el$205;
7966
8266
  }
7967
8267
  }), null);
7968
- return _el$182;
8268
+ return _el$195;
7969
8269
  }
7970
- }), _el$205);
7971
- insert(_el$177, createComponent(Show, {
8270
+ }), _el$218);
8271
+ insert(_el$190, createComponent(Show, {
7972
8272
  get when() {
7973
8273
  return editingBookmarkId() === bookmark.id;
7974
8274
  },
7975
8275
  get children() {
7976
- var _el$195 = _tmpl$51(), _el$196 = _el$195.firstChild, _el$197 = _el$196.nextSibling, _el$198 = _el$197.nextSibling, _el$199 = _el$198.nextSibling, _el$200 = _el$199.nextSibling, _el$201 = _el$200.nextSibling, _el$202 = _el$201.nextSibling, _el$203 = _el$202.firstChild, _el$204 = _el$203.nextSibling;
7977
- _el$196.$$input = (e) => setEditingBookmarkTitle(e.currentTarget.value);
7978
- _el$197.$$input = (e) => setEditingBookmarkNote(e.currentTarget.value);
7979
- _el$198.$$input = (e) => setEditingBookmarkIntent(e.currentTarget.value);
7980
- _el$199.$$input = (e) => setEditingBookmarkExpectedContent(e.currentTarget.value);
7981
- _el$200.$$input = (e) => setEditingBookmarkKeyFields(e.currentTarget.value);
7982
- _el$201.$$input = (e) => setEditingBookmarkAgentHints(e.currentTarget.value);
7983
- _el$203.$$click = () => void handleUpdateBookmark(bookmark.id);
7984
- _el$204.$$click = resetBookmarkEditor;
7985
- createRenderEffect(() => _el$196.value = editingBookmarkTitle());
7986
- createRenderEffect(() => _el$197.value = editingBookmarkNote());
7987
- createRenderEffect(() => _el$198.value = editingBookmarkIntent());
7988
- createRenderEffect(() => _el$199.value = editingBookmarkExpectedContent());
7989
- createRenderEffect(() => _el$200.value = editingBookmarkKeyFields());
7990
- createRenderEffect(() => _el$201.value = editingBookmarkAgentHints());
7991
- return _el$195;
8276
+ var _el$208 = _tmpl$52(), _el$209 = _el$208.firstChild, _el$210 = _el$209.nextSibling, _el$211 = _el$210.nextSibling, _el$212 = _el$211.nextSibling, _el$213 = _el$212.nextSibling, _el$214 = _el$213.nextSibling, _el$215 = _el$214.nextSibling, _el$216 = _el$215.firstChild, _el$217 = _el$216.nextSibling;
8277
+ _el$209.$$input = (e) => setEditingBookmarkTitle(e.currentTarget.value);
8278
+ _el$210.$$input = (e) => setEditingBookmarkNote(e.currentTarget.value);
8279
+ _el$211.$$input = (e) => setEditingBookmarkIntent(e.currentTarget.value);
8280
+ _el$212.$$input = (e) => setEditingBookmarkExpectedContent(e.currentTarget.value);
8281
+ _el$213.$$input = (e) => setEditingBookmarkKeyFields(e.currentTarget.value);
8282
+ _el$214.$$input = (e) => setEditingBookmarkAgentHints(e.currentTarget.value);
8283
+ _el$216.$$click = () => void handleUpdateBookmark(bookmark.id);
8284
+ _el$217.$$click = resetBookmarkEditor;
8285
+ createRenderEffect(() => _el$209.value = editingBookmarkTitle());
8286
+ createRenderEffect(() => _el$210.value = editingBookmarkNote());
8287
+ createRenderEffect(() => _el$211.value = editingBookmarkIntent());
8288
+ createRenderEffect(() => _el$212.value = editingBookmarkExpectedContent());
8289
+ createRenderEffect(() => _el$213.value = editingBookmarkKeyFields());
8290
+ createRenderEffect(() => _el$214.value = editingBookmarkAgentHints());
8291
+ return _el$208;
7992
8292
  }
7993
- }), _el$205);
7994
- insert(_el$206, () => formatBookmarkDate(bookmark.savedAt));
7995
- _el$207.$$click = () => editingBookmarkId() === bookmark.id ? resetBookmarkEditor() : startEditingBookmark(bookmark);
7996
- insert(_el$207, () => editingBookmarkId() === bookmark.id ? "Close" : "Edit");
7997
- _el$208.$$click = () => {
8293
+ }), _el$218);
8294
+ insert(_el$219, () => formatBookmarkDate(bookmark.savedAt));
8295
+ _el$220.$$click = () => editingBookmarkId() === bookmark.id ? resetBookmarkEditor() : startEditingBookmark(bookmark);
8296
+ insert(_el$220, () => editingBookmarkId() === bookmark.id ? "Close" : "Edit");
8297
+ _el$221.$$click = () => {
7998
8298
  if (editingBookmarkId() === bookmark.id) {
7999
8299
  resetBookmarkEditor();
8000
8300
  }
8001
8301
  void removeBookmark(bookmark.id);
8002
8302
  };
8003
- createRenderEffect(() => setAttribute(_el$177, "data-bookmark-id", bookmark.id));
8004
- return _el$177;
8303
+ createRenderEffect(() => setAttribute(_el$190, "data-bookmark-id", bookmark.id));
8304
+ return _el$190;
8005
8305
  })()
8006
8306
  }));
8007
- return _el$174;
8307
+ return _el$187;
8008
8308
  }
8009
8309
  });
8010
8310
  }
8011
8311
  }), null);
8012
- createRenderEffect(() => _el$150.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
8013
- return _el$147;
8312
+ createRenderEffect(() => _el$163.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
8313
+ return _el$160;
8014
8314
  })()
8015
8315
  });
8016
8316
  }
8017
8317
  }));
8018
8318
  createRenderEffect((_p$) => {
8019
- var _v$ = bookmarkExporting(), _v$2 = bookmarkExporting(), _v$3 = bookmarkExporting(), _v$4 = !!bookmarkSaveExpanded(), _v$5 = !newFolderName().trim();
8020
- _v$ !== _p$.e && (_el$51.disabled = _p$.e = _v$);
8021
- _v$2 !== _p$.t && (_el$52.disabled = _p$.t = _v$2);
8022
- _v$3 !== _p$.a && (_el$53.disabled = _p$.a = _v$3);
8023
- _v$4 !== _p$.o && _el$58.classList.toggle("expanded", _p$.o = _v$4);
8024
- _v$5 !== _p$.i && (_el$73.disabled = _p$.i = _v$5);
8319
+ var _v$3 = bookmarkExporting(), _v$4 = bookmarkExporting(), _v$5 = bookmarkExporting(), _v$6 = !!bookmarkImportExpanded(), _v$7 = !!bookmarkSaveExpanded(), _v$8 = !newFolderName().trim();
8320
+ _v$3 !== _p$.e && (_el$51.disabled = _p$.e = _v$3);
8321
+ _v$4 !== _p$.t && (_el$52.disabled = _p$.t = _v$4);
8322
+ _v$5 !== _p$.a && (_el$53.disabled = _p$.a = _v$5);
8323
+ _v$6 !== _p$.o && _el$58.classList.toggle("expanded", _p$.o = _v$6);
8324
+ _v$7 !== _p$.i && _el$67.classList.toggle("expanded", _p$.i = _v$7);
8325
+ _v$8 !== _p$.n && (_el$82.disabled = _p$.n = _v$8);
8025
8326
  return _p$;
8026
8327
  }, {
8027
8328
  e: void 0,
8028
8329
  t: void 0,
8029
8330
  a: void 0,
8030
8331
  o: void 0,
8031
- i: void 0
8332
+ i: void 0,
8333
+ n: void 0
8032
8334
  });
8033
8335
  createRenderEffect(() => _el$47.value = bookmarkSearchQuery());
8034
- createRenderEffect(() => _el$71.value = newFolderName());
8035
- createRenderEffect(() => _el$72.value = newFolderSummary());
8336
+ createRenderEffect(() => _el$80.value = newFolderName());
8337
+ createRenderEffect(() => _el$81.value = newFolderSummary());
8036
8338
  return _el$41;
8037
8339
  }
8038
- }), _el$111);
8340
+ }), _el$124);
8039
8341
  insert(_el$25, createComponent(Show, {
8040
8342
  get when() {
8041
8343
  return sidebarTab() === "checkpoints";
8042
8344
  },
8043
8345
  get children() {
8044
- var _el$75 = _tmpl$11$2(), _el$76 = _el$75.firstChild, _el$77 = _el$76.firstChild, _el$78 = _el$77.firstChild, _el$79 = _el$78.nextSibling, _el$80 = _el$76.nextSibling, _el$81 = _el$80.firstChild, _el$82 = _el$81.firstChild, _el$83 = _el$82.nextSibling, _el$84 = _el$83.nextSibling;
8045
- _el$81.nextSibling;
8046
- insert(_el$79, (() => {
8346
+ var _el$84 = _tmpl$12$2(), _el$85 = _el$84.firstChild, _el$86 = _el$85.firstChild, _el$87 = _el$86.firstChild, _el$88 = _el$87.nextSibling, _el$89 = _el$85.nextSibling, _el$90 = _el$89.firstChild, _el$91 = _el$90.firstChild, _el$92 = _el$91.nextSibling, _el$93 = _el$92.nextSibling;
8347
+ _el$90.nextSibling;
8348
+ insert(_el$88, (() => {
8047
8349
  var _c$3 = memo(() => recentCheckpoints().length > 0);
8048
8350
  return () => _c$3() ? `${recentCheckpoints().length} saved snapshots` : "Save and restore session snapshots";
8049
8351
  })());
8050
- _el$82.$$input = (e) => setCheckpointName(e.currentTarget.value);
8051
- _el$83.$$input = (e) => setCheckpointNote(e.currentTarget.value);
8052
- _el$84.$$click = async () => {
8352
+ _el$91.$$input = (e) => setCheckpointName(e.currentTarget.value);
8353
+ _el$92.$$input = (e) => setCheckpointNote(e.currentTarget.value);
8354
+ _el$93.$$click = async () => {
8053
8355
  const name = checkpointName().trim();
8054
8356
  await createCheckpoint(name || void 0, checkpointNote() || void 0);
8055
8357
  setCheckpointName("");
8056
8358
  setCheckpointNote("");
8057
8359
  };
8058
- insert(_el$80, createComponent(Show, {
8360
+ insert(_el$89, createComponent(Show, {
8059
8361
  get when() {
8060
8362
  return recentCheckpoints().length > 0;
8061
8363
  },
8062
8364
  get fallback() {
8063
- return _tmpl$53();
8365
+ return _tmpl$54();
8064
8366
  },
8065
8367
  get children() {
8066
- var _el$86 = _tmpl$10$2();
8067
- insert(_el$86, createComponent(For, {
8368
+ var _el$95 = _tmpl$11$2();
8369
+ insert(_el$95, createComponent(For, {
8068
8370
  get each() {
8069
8371
  return recentCheckpoints();
8070
8372
  },
8071
8373
  children: (checkpoint, i) => (() => {
8072
- var _el$210 = _tmpl$55(), _el$211 = _el$210.firstChild, _el$212 = _el$211.firstChild, _el$214 = _el$211.nextSibling, _el$215 = _el$214.firstChild, _el$216 = _el$215.nextSibling, _el$217 = _el$216.nextSibling, _el$218 = _el$217.nextSibling;
8073
- insert(_el$211, createComponent(Show, {
8374
+ var _el$223 = _tmpl$56(), _el$224 = _el$223.firstChild, _el$225 = _el$224.firstChild, _el$227 = _el$224.nextSibling, _el$228 = _el$227.firstChild, _el$229 = _el$228.nextSibling, _el$230 = _el$229.nextSibling, _el$231 = _el$230.nextSibling;
8375
+ insert(_el$224, createComponent(Show, {
8074
8376
  get when() {
8075
8377
  return i() < recentCheckpoints().length - 1;
8076
8378
  },
8077
8379
  get children() {
8078
- return _tmpl$54();
8380
+ return _tmpl$55();
8079
8381
  }
8080
8382
  }), null);
8081
- insert(_el$215, () => checkpoint.name);
8082
- insert(_el$216, () => new Date(checkpoint.createdAt).toLocaleString());
8083
- _el$217.addEventListener("blur", (e) => void updateCheckpointNote(checkpoint.id, e.currentTarget.value));
8084
- _el$218.$$click = () => void restoreCheckpoint(checkpoint.id);
8085
- createRenderEffect(() => _el$212.classList.toggle("latest", !!(i() === 0)));
8086
- createRenderEffect(() => _el$217.value = checkpoint.note || "");
8087
- return _el$210;
8383
+ insert(_el$228, () => checkpoint.name);
8384
+ insert(_el$229, () => new Date(checkpoint.createdAt).toLocaleString());
8385
+ _el$230.addEventListener("blur", (e) => void updateCheckpointNote(checkpoint.id, e.currentTarget.value));
8386
+ _el$231.$$click = () => void restoreCheckpoint(checkpoint.id);
8387
+ createRenderEffect(() => _el$225.classList.toggle("latest", !!(i() === 0)));
8388
+ createRenderEffect(() => _el$230.value = checkpoint.note || "");
8389
+ return _el$223;
8088
8390
  })()
8089
8391
  }));
8090
- return _el$86;
8392
+ return _el$95;
8091
8393
  }
8092
8394
  }), null);
8093
- createRenderEffect(() => _el$82.value = checkpointName());
8094
- createRenderEffect(() => _el$83.value = checkpointNote());
8095
- return _el$75;
8395
+ createRenderEffect(() => _el$91.value = checkpointName());
8396
+ createRenderEffect(() => _el$92.value = checkpointNote());
8397
+ return _el$84;
8096
8398
  }
8097
- }), _el$111);
8399
+ }), _el$124);
8098
8400
  insert(_el$25, createComponent(Show, {
8099
8401
  get when() {
8100
8402
  return sidebarTab() === "automation";
@@ -8104,67 +8406,79 @@ ${contextBlock}` : contextBlock);
8104
8406
  onRun: () => setSidebarTab("supervisor")
8105
8407
  });
8106
8408
  }
8107
- }), _el$111);
8409
+ }), _el$124);
8108
8410
  insert(_el$25, createComponent(Show, {
8109
8411
  get when() {
8110
8412
  return sidebarTab() === "history";
8111
8413
  },
8112
8414
  get children() {
8113
- var _el$87 = _tmpl$13$1(), _el$88 = _el$87.firstChild, _el$89 = _el$88.firstChild, _el$90 = _el$89.nextSibling, _el$91 = _el$88.nextSibling;
8114
- _el$90.$$click = async () => {
8415
+ var _el$96 = _tmpl$14$1(), _el$97 = _el$96.firstChild, _el$98 = _el$97.firstChild, _el$99 = _el$98.nextSibling, _el$100 = _el$99.firstChild, _el$101 = _el$100.nextSibling, _el$102 = _el$101.nextSibling, _el$103 = _el$102.nextSibling, _el$104 = _el$97.nextSibling;
8416
+ _el$100.$$click = async () => {
8115
8417
  await history.clear();
8116
8418
  };
8117
- insert(_el$91, createComponent(For, {
8419
+ _el$101.$$click = async () => {
8420
+ const result = await window.vessel.history.exportHtml();
8421
+ if (!result) return;
8422
+ };
8423
+ _el$102.$$click = async () => {
8424
+ const result = await window.vessel.history.exportJson();
8425
+ if (!result) return;
8426
+ };
8427
+ _el$103.$$click = async () => {
8428
+ const result = await window.vessel.history.importFile();
8429
+ if (!result) return;
8430
+ };
8431
+ insert(_el$104, createComponent(For, {
8118
8432
  get each() {
8119
8433
  return history.historyState().entries;
8120
8434
  },
8121
8435
  children: (entry) => (() => {
8122
- var _el$219 = _tmpl$56(), _el$220 = _el$219.firstChild, _el$221 = _el$220.nextSibling, _el$222 = _el$221.nextSibling;
8123
- _el$219.$$click = () => createTab(entry.url);
8124
- insert(_el$220, () => entry.title || entry.url);
8125
- insert(_el$221, () => entry.url);
8126
- insert(_el$222, () => new Date(entry.visitedAt).toLocaleString());
8127
- return _el$219;
8436
+ var _el$232 = _tmpl$57(), _el$233 = _el$232.firstChild, _el$234 = _el$233.nextSibling, _el$235 = _el$234.nextSibling;
8437
+ _el$232.$$click = () => createTab(entry.url);
8438
+ insert(_el$233, () => entry.title || entry.url);
8439
+ insert(_el$234, () => entry.url);
8440
+ insert(_el$235, () => new Date(entry.visitedAt).toLocaleString());
8441
+ return _el$232;
8128
8442
  })()
8129
8443
  }), null);
8130
- insert(_el$91, createComponent(Show, {
8444
+ insert(_el$104, createComponent(Show, {
8131
8445
  get when() {
8132
8446
  return history.historyState().entries.length === 0;
8133
8447
  },
8134
8448
  get children() {
8135
- return _tmpl$12$2();
8449
+ return _tmpl$13$1();
8136
8450
  }
8137
8451
  }), null);
8138
- return _el$87;
8452
+ return _el$96;
8139
8453
  }
8140
- }), _el$111);
8454
+ }), _el$124);
8141
8455
  insert(_el$25, createComponent(Show, {
8142
8456
  get when() {
8143
8457
  return sidebarTab() === "diff";
8144
8458
  },
8145
8459
  get children() {
8146
- var _el$93 = _tmpl$14$1(), _el$94 = _el$93.firstChild, _el$95 = _el$94.firstChild, _el$96 = _el$95.nextSibling;
8147
- insert(_el$96, () => isPremium() ? "Page change timeline" : "Premium feature");
8148
- insert(_el$93, createComponent(Show, {
8460
+ var _el$106 = _tmpl$15$1(), _el$107 = _el$106.firstChild, _el$108 = _el$107.firstChild, _el$109 = _el$108.nextSibling;
8461
+ insert(_el$109, () => isPremium() ? "Page change timeline" : "Premium feature");
8462
+ insert(_el$106, createComponent(Show, {
8149
8463
  get when() {
8150
8464
  return isPremium();
8151
8465
  },
8152
8466
  get fallback() {
8153
8467
  return (() => {
8154
- var _el$223 = _tmpl$57(), _el$224 = _el$223.firstChild, _el$225 = _el$224.nextSibling, _el$226 = _el$225.nextSibling, _el$227 = _el$226.firstChild, _el$228 = _el$227.nextSibling;
8155
- _el$227.$$click = () => void window.vessel.premium.checkout(premiumState().email || void 0).catch(() => {
8468
+ var _el$236 = _tmpl$58(), _el$237 = _el$236.firstChild, _el$238 = _el$237.nextSibling, _el$239 = _el$238.nextSibling, _el$240 = _el$239.firstChild, _el$241 = _el$240.nextSibling;
8469
+ _el$240.$$click = () => void window.vessel.premium.checkout(premiumState().email || void 0).catch(() => {
8156
8470
  });
8157
- _el$228.$$click = openPremiumDetails;
8158
- return _el$223;
8471
+ _el$241.$$click = openPremiumDetails;
8472
+ return _el$236;
8159
8473
  })();
8160
8474
  },
8161
8475
  get children() {
8162
8476
  return createComponent(PageDiffTimeline, {});
8163
8477
  }
8164
8478
  }), null);
8165
- return _el$93;
8479
+ return _el$106;
8166
8480
  }
8167
- }), _el$111);
8481
+ }), _el$124);
8168
8482
  insert(_el$25, createComponent(Show, {
8169
8483
  get when() {
8170
8484
  return sidebarTab() === "chat";
@@ -8175,23 +8489,23 @@ ${contextBlock}` : contextBlock);
8175
8489
  return !isPremium();
8176
8490
  },
8177
8491
  get children() {
8178
- var _el$97 = _tmpl$15$1(), _el$98 = _el$97.firstChild, _el$99 = _el$98.nextSibling, _el$100 = _el$99.nextSibling, _el$101 = _el$100.firstChild, _el$102 = _el$101.nextSibling;
8179
- _el$101.$$click = () => openPremiumCheckout("chat_banner_clicked");
8180
- _el$102.$$click = openPremiumDetails;
8181
- return _el$97;
8492
+ var _el$110 = _tmpl$16$1(), _el$111 = _el$110.firstChild, _el$112 = _el$111.nextSibling, _el$113 = _el$112.nextSibling, _el$114 = _el$113.firstChild, _el$115 = _el$114.nextSibling;
8493
+ _el$114.$$click = () => openPremiumCheckout("chat_banner_clicked");
8494
+ _el$115.$$click = openPremiumDetails;
8495
+ return _el$110;
8182
8496
  }
8183
8497
  }), createComponent(For, {
8184
8498
  get each() {
8185
8499
  return messages2();
8186
8500
  },
8187
8501
  children: (msg) => (() => {
8188
- var _el$229 = _tmpl$58();
8189
- insert(_el$229, createComponent(MarkdownMessage, {
8502
+ var _el$242 = _tmpl$59();
8503
+ insert(_el$242, createComponent(MarkdownMessage, {
8190
8504
  get content() {
8191
8505
  return msg.content;
8192
8506
  }
8193
8507
  }), null);
8194
- insert(_el$229, createComponent(Show, {
8508
+ insert(_el$242, createComponent(Show, {
8195
8509
  get when() {
8196
8510
  return memo(() => msg.role === "assistant")() ? getPremiumPromptKind(msg.content) : null;
8197
8511
  },
@@ -8204,31 +8518,31 @@ ${contextBlock}` : contextBlock);
8204
8518
  onOpenSettings: openPremiumDetails
8205
8519
  })
8206
8520
  }), null);
8207
- createRenderEffect(() => className(_el$229, `message message-${msg.role}`));
8208
- return _el$229;
8521
+ createRenderEffect(() => className(_el$242, `message message-${msg.role}`));
8522
+ return _el$242;
8209
8523
  })()
8210
8524
  }), createComponent(Show, {
8211
8525
  get when() {
8212
8526
  return isStreaming2();
8213
8527
  },
8214
8528
  get children() {
8215
- var _el$103 = _tmpl$18$1(), _el$104 = _el$103.firstChild;
8216
- insert(_el$104, createComponent(Show, {
8529
+ var _el$116 = _tmpl$19$1(), _el$117 = _el$116.firstChild;
8530
+ insert(_el$117, createComponent(Show, {
8217
8531
  get when() {
8218
8532
  return hasFirstChunk2();
8219
8533
  },
8220
8534
  get fallback() {
8221
- return _tmpl$59();
8535
+ return _tmpl$60();
8222
8536
  },
8223
8537
  get children() {
8224
- var _el$105 = _tmpl$17$1(), _el$106 = _el$105.firstChild, _el$107 = _el$106.firstChild;
8225
- _el$107.nextSibling;
8226
- insert(_el$105, createComponent(MarkdownMessage, {
8538
+ var _el$118 = _tmpl$18$1(), _el$119 = _el$118.firstChild, _el$120 = _el$119.firstChild;
8539
+ _el$120.nextSibling;
8540
+ insert(_el$118, createComponent(MarkdownMessage, {
8227
8541
  get content() {
8228
8542
  return streamingText2();
8229
8543
  }
8230
- }), _el$106);
8231
- insert(_el$105, createComponent(Show, {
8544
+ }), _el$119);
8545
+ insert(_el$118, createComponent(Show, {
8232
8546
  get when() {
8233
8547
  return getPremiumPromptKind(streamingText2());
8234
8548
  },
@@ -8240,21 +8554,21 @@ ${contextBlock}` : contextBlock);
8240
8554
  onStartTrial: () => openPremiumCheckout(kind() === "premium_gate" ? "premium_gate_clicked" : "iteration_limit_clicked"),
8241
8555
  onOpenSettings: openPremiumDetails
8242
8556
  })
8243
- }), _el$106);
8244
- insert(_el$106, createComponent(Show, {
8557
+ }), _el$119);
8558
+ insert(_el$119, createComponent(Show, {
8245
8559
  get when() {
8246
8560
  return elapsedSeconds() > 0;
8247
8561
  },
8248
8562
  get children() {
8249
- var _el$109 = _tmpl$16$1();
8250
- insert(_el$109, () => ` • ${elapsedSeconds()}s`);
8251
- return _el$109;
8563
+ var _el$122 = _tmpl$17$1();
8564
+ insert(_el$122, () => ` • ${elapsedSeconds()}s`);
8565
+ return _el$122;
8252
8566
  }
8253
8567
  }), null);
8254
- return _el$105;
8568
+ return _el$118;
8255
8569
  }
8256
8570
  }));
8257
- return _el$103;
8571
+ return _el$116;
8258
8572
  }
8259
8573
  }), createComponent(Show, {
8260
8574
  get when() {
@@ -8266,22 +8580,22 @@ ${contextBlock}` : contextBlock);
8266
8580
  return runtimeState2().supervisor.pendingApprovals;
8267
8581
  },
8268
8582
  children: (approval) => (() => {
8269
- var _el$231 = _tmpl$61(), _el$232 = _el$231.firstChild, _el$233 = _el$232.nextSibling, _el$234 = _el$233.firstChild, _el$235 = _el$234.firstChild, _el$236 = _el$235.nextSibling, _el$238 = _el$234.nextSibling, _el$239 = _el$238.nextSibling, _el$240 = _el$239.firstChild, _el$241 = _el$240.nextSibling;
8270
- insert(_el$236, () => approval.name);
8271
- insert(_el$233, createComponent(Show, {
8583
+ var _el$244 = _tmpl$62(), _el$245 = _el$244.firstChild, _el$246 = _el$245.nextSibling, _el$247 = _el$246.firstChild, _el$248 = _el$247.firstChild, _el$249 = _el$248.nextSibling, _el$251 = _el$247.nextSibling, _el$252 = _el$251.nextSibling, _el$253 = _el$252.firstChild, _el$254 = _el$253.nextSibling;
8584
+ insert(_el$249, () => approval.name);
8585
+ insert(_el$246, createComponent(Show, {
8272
8586
  get when() {
8273
8587
  return approval.argsSummary;
8274
8588
  },
8275
8589
  get children() {
8276
- var _el$237 = _tmpl$60();
8277
- insert(_el$237, () => approval.argsSummary);
8278
- return _el$237;
8590
+ var _el$250 = _tmpl$61();
8591
+ insert(_el$250, () => approval.argsSummary);
8592
+ return _el$250;
8279
8593
  }
8280
- }), _el$238);
8281
- insert(_el$238, () => approval.reason);
8282
- _el$240.$$click = () => void resolveApproval(approval.id, true);
8283
- _el$241.$$click = () => void resolveApproval(approval.id, false);
8284
- return _el$231;
8594
+ }), _el$251);
8595
+ insert(_el$251, () => approval.reason);
8596
+ _el$253.$$click = () => void resolveApproval(approval.id, true);
8597
+ _el$254.$$click = () => void resolveApproval(approval.id, false);
8598
+ return _el$244;
8285
8599
  })()
8286
8600
  });
8287
8601
  }
@@ -8290,13 +8604,13 @@ ${contextBlock}` : contextBlock);
8290
8604
  return memo(() => messages2().length === 0)() && !isStreaming2();
8291
8605
  },
8292
8606
  get children() {
8293
- return _tmpl$19$1();
8607
+ return _tmpl$20$1();
8294
8608
  }
8295
8609
  })];
8296
8610
  }
8297
- }), _el$111);
8611
+ }), _el$124);
8298
8612
  var _ref$ = messagesEndRef;
8299
- typeof _ref$ === "function" ? use(_ref$, _el$111) : messagesEndRef = _el$111;
8613
+ typeof _ref$ === "function" ? use(_ref$, _el$124) : messagesEndRef = _el$124;
8300
8614
  insert(_el$9, createComponent(Show, {
8301
8615
  get when() {
8302
8616
  return sidebarTab() === "chat";
@@ -8307,141 +8621,141 @@ ${contextBlock}` : contextBlock);
8307
8621
  return isStreaming2() || messages2().length > 0;
8308
8622
  },
8309
8623
  get children() {
8310
- var _el$112 = _tmpl$22$1();
8311
- insert(_el$112, createComponent(Show, {
8624
+ var _el$125 = _tmpl$23$1();
8625
+ insert(_el$125, createComponent(Show, {
8312
8626
  get when() {
8313
8627
  return isStreaming2();
8314
8628
  },
8315
8629
  get children() {
8316
- var _el$113 = _tmpl$20$1();
8317
- _el$113.$$click = () => cancel();
8318
- return _el$113;
8630
+ var _el$126 = _tmpl$21$1();
8631
+ _el$126.$$click = () => cancel();
8632
+ return _el$126;
8319
8633
  }
8320
8634
  }), null);
8321
- insert(_el$112, createComponent(Show, {
8635
+ insert(_el$125, createComponent(Show, {
8322
8636
  get when() {
8323
8637
  return memo(() => !!!isStreaming2())() && messages2().length > 0;
8324
8638
  },
8325
8639
  get children() {
8326
- var _el$114 = _tmpl$21$1();
8327
- _el$114.$$click = handleRetry;
8328
- return _el$114;
8640
+ var _el$127 = _tmpl$22$1();
8641
+ _el$127.$$click = handleRetry;
8642
+ return _el$127;
8329
8643
  }
8330
8644
  }), null);
8331
- return _el$112;
8645
+ return _el$125;
8332
8646
  }
8333
8647
  }), createComponent(Show, {
8334
8648
  get when() {
8335
8649
  return highlightCount() > 0;
8336
8650
  },
8337
8651
  get children() {
8338
- var _el$115 = _tmpl$23$1(), _el$116 = _el$115.firstChild, _el$117 = _el$116.nextSibling;
8339
- _el$117.firstChild;
8340
- var _el$119 = _el$117.nextSibling;
8341
- _el$116.$$click = () => void scrollToHighlight(highlightIndex() - 1);
8342
- _el$117.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex());
8343
- insert(_el$117, (() => {
8652
+ var _el$128 = _tmpl$24$1(), _el$129 = _el$128.firstChild, _el$130 = _el$129.nextSibling;
8653
+ _el$130.firstChild;
8654
+ var _el$132 = _el$130.nextSibling;
8655
+ _el$129.$$click = () => void scrollToHighlight(highlightIndex() - 1);
8656
+ _el$130.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex());
8657
+ insert(_el$130, (() => {
8344
8658
  var _c$4 = memo(() => highlightIndex() >= 0);
8345
8659
  return () => _c$4() ? `${highlightIndex() + 1} / ${highlightCount()}` : `${highlightCount()} highlight${highlightCount() > 1 ? "s" : ""}`;
8346
8660
  })(), null);
8347
- _el$119.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
8661
+ _el$132.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
8348
8662
  createRenderEffect((_p$) => {
8349
- var _v$6 = highlightIndex() <= 0, _v$7 = highlightIndex() >= highlightCount() - 1;
8350
- _v$6 !== _p$.e && (_el$116.disabled = _p$.e = _v$6);
8351
- _v$7 !== _p$.t && (_el$119.disabled = _p$.t = _v$7);
8663
+ var _v$9 = highlightIndex() <= 0, _v$0 = highlightIndex() >= highlightCount() - 1;
8664
+ _v$9 !== _p$.e && (_el$129.disabled = _p$.e = _v$9);
8665
+ _v$0 !== _p$.t && (_el$132.disabled = _p$.t = _v$0);
8352
8666
  return _p$;
8353
8667
  }, {
8354
8668
  e: void 0,
8355
8669
  t: void 0
8356
8670
  });
8357
- return _el$115;
8671
+ return _el$128;
8358
8672
  }
8359
8673
  }), createComponent(Show, {
8360
8674
  get when() {
8361
8675
  return queueNotice2() !== null || pendingQueryCount() > 0;
8362
8676
  },
8363
8677
  get children() {
8364
- var _el$120 = _tmpl$26$1(), _el$121 = _el$120.firstChild, _el$122 = _el$121.firstChild;
8365
- insert(_el$122, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
8366
- insert(_el$121, createComponent(Show, {
8678
+ var _el$133 = _tmpl$27$1(), _el$134 = _el$133.firstChild, _el$135 = _el$134.firstChild;
8679
+ insert(_el$135, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
8680
+ insert(_el$134, createComponent(Show, {
8367
8681
  get when() {
8368
8682
  return pendingQueryCount() > 0;
8369
8683
  },
8370
8684
  get children() {
8371
- var _el$123 = _tmpl$24$1();
8372
- _el$123.$$click = () => clearPendingQueries();
8373
- return _el$123;
8685
+ var _el$136 = _tmpl$25$1();
8686
+ _el$136.$$click = () => clearPendingQueries();
8687
+ return _el$136;
8374
8688
  }
8375
8689
  }), null);
8376
- insert(_el$120, createComponent(Show, {
8690
+ insert(_el$133, createComponent(Show, {
8377
8691
  get when() {
8378
8692
  return pendingQueries2().length > 0;
8379
8693
  },
8380
8694
  get children() {
8381
- var _el$124 = _tmpl$25$1();
8382
- insert(_el$124, createComponent(For, {
8695
+ var _el$137 = _tmpl$26$1();
8696
+ insert(_el$137, createComponent(For, {
8383
8697
  get each() {
8384
8698
  return pendingQueries2();
8385
8699
  },
8386
8700
  children: (pendingPrompt, index) => (() => {
8387
- var _el$242 = _tmpl$62(), _el$243 = _el$242.firstChild, _el$244 = _el$243.nextSibling;
8388
- setAttribute(_el$243, "title", pendingPrompt);
8389
- insert(_el$243, pendingPrompt);
8390
- _el$244.$$click = () => removePendingQuery(index());
8391
- createRenderEffect(() => setAttribute(_el$244, "aria-label", `Remove queued prompt ${index() + 1}`));
8392
- return _el$242;
8701
+ var _el$255 = _tmpl$63(), _el$256 = _el$255.firstChild, _el$257 = _el$256.nextSibling;
8702
+ setAttribute(_el$256, "title", pendingPrompt);
8703
+ insert(_el$256, pendingPrompt);
8704
+ _el$257.$$click = () => removePendingQuery(index());
8705
+ createRenderEffect(() => setAttribute(_el$257, "aria-label", `Remove queued prompt ${index() + 1}`));
8706
+ return _el$255;
8393
8707
  })()
8394
8708
  }));
8395
- return _el$124;
8709
+ return _el$137;
8396
8710
  }
8397
8711
  }), null);
8398
- return _el$120;
8712
+ return _el$133;
8399
8713
  }
8400
8714
  }), (() => {
8401
- var _el$125 = _tmpl$27$1(), _el$126 = _el$125.firstChild, _el$127 = _el$126.nextSibling;
8402
- _el$126.$$keydown = (e) => {
8715
+ var _el$138 = _tmpl$28$1(), _el$139 = _el$138.firstChild, _el$140 = _el$139.nextSibling;
8716
+ _el$139.$$keydown = (e) => {
8403
8717
  if (e.key === "Enter" && !e.shiftKey) {
8404
8718
  e.preventDefault();
8405
8719
  void handleChatSend();
8406
8720
  }
8407
8721
  };
8408
- _el$126.$$input = (e) => setChatInput(e.currentTarget.value);
8722
+ _el$139.$$input = (e) => setChatInput(e.currentTarget.value);
8409
8723
  var _ref$2 = chatInputRef;
8410
- typeof _ref$2 === "function" ? use(_ref$2, _el$126) : chatInputRef = _el$126;
8411
- _el$127.$$click = () => void handleChatSend();
8412
- insert(_el$127, () => isStreaming2() ? "Queue" : "Send");
8724
+ typeof _ref$2 === "function" ? use(_ref$2, _el$139) : chatInputRef = _el$139;
8725
+ _el$140.$$click = () => void handleChatSend();
8726
+ insert(_el$140, () => isStreaming2() ? "Queue" : "Send");
8413
8727
  createRenderEffect((_p$) => {
8414
- var _v$8 = isStreaming2() ? "Send now to queue the next prompt..." : "Ask anything...", _v$9 = !chatInput().trim();
8415
- _v$8 !== _p$.e && setAttribute(_el$126, "placeholder", _p$.e = _v$8);
8416
- _v$9 !== _p$.t && (_el$127.disabled = _p$.t = _v$9);
8728
+ var _v$1 = isStreaming2() ? "Send now to queue the next prompt..." : "Ask anything...", _v$10 = !chatInput().trim();
8729
+ _v$1 !== _p$.e && setAttribute(_el$139, "placeholder", _p$.e = _v$1);
8730
+ _v$10 !== _p$.t && (_el$140.disabled = _p$.t = _v$10);
8417
8731
  return _p$;
8418
8732
  }, {
8419
8733
  e: void 0,
8420
8734
  t: void 0
8421
8735
  });
8422
- createRenderEffect(() => _el$126.value = chatInput());
8423
- return _el$125;
8736
+ createRenderEffect(() => _el$139.value = chatInput());
8737
+ return _el$138;
8424
8738
  })()];
8425
8739
  }
8426
8740
  }), null);
8427
8741
  createRenderEffect((_p$) => {
8428
- var _v$0 = `${sidebarWidth2()}px`, _v$1 = !!isDragging(), _v$10 = !!(sidebarTab() === "supervisor"), _v$11 = sidebarTab() === "supervisor", _v$12 = !!(sidebarTab() === "bookmarks"), _v$13 = sidebarTab() === "bookmarks", _v$14 = !!(sidebarTab() === "checkpoints"), _v$15 = sidebarTab() === "checkpoints", _v$16 = !!(sidebarTab() === "chat"), _v$17 = sidebarTab() === "chat", _v$18 = !!(sidebarTab() === "automation"), _v$19 = sidebarTab() === "automation", _v$20 = !!(sidebarTab() === "history"), _v$21 = sidebarTab() === "history", _v$22 = !!(sidebarTab() === "diff"), _v$23 = sidebarTab() === "diff";
8429
- _v$0 !== _p$.e && setStyleProperty(_el$9, "width", _p$.e = _v$0);
8430
- _v$1 !== _p$.t && _el$0.classList.toggle("dragging", _p$.t = _v$1);
8431
- _v$10 !== _p$.a && _el$16.classList.toggle("active", _p$.a = _v$10);
8432
- _v$11 !== _p$.o && setAttribute(_el$16, "aria-selected", _p$.o = _v$11);
8433
- _v$12 !== _p$.i && _el$19.classList.toggle("active", _p$.i = _v$12);
8434
- _v$13 !== _p$.n && setAttribute(_el$19, "aria-selected", _p$.n = _v$13);
8435
- _v$14 !== _p$.s && _el$20.classList.toggle("active", _p$.s = _v$14);
8436
- _v$15 !== _p$.h && setAttribute(_el$20, "aria-selected", _p$.h = _v$15);
8437
- _v$16 !== _p$.r && _el$21.classList.toggle("active", _p$.r = _v$16);
8438
- _v$17 !== _p$.d && setAttribute(_el$21, "aria-selected", _p$.d = _v$17);
8439
- _v$18 !== _p$.l && _el$22.classList.toggle("active", _p$.l = _v$18);
8440
- _v$19 !== _p$.u && setAttribute(_el$22, "aria-selected", _p$.u = _v$19);
8441
- _v$20 !== _p$.c && _el$23.classList.toggle("active", _p$.c = _v$20);
8442
- _v$21 !== _p$.w && setAttribute(_el$23, "aria-selected", _p$.w = _v$21);
8443
- _v$22 !== _p$.m && _el$24.classList.toggle("active", _p$.m = _v$22);
8444
- _v$23 !== _p$.f && setAttribute(_el$24, "aria-selected", _p$.f = _v$23);
8742
+ var _v$11 = `${sidebarWidth2()}px`, _v$12 = !!isDragging(), _v$13 = !!(sidebarTab() === "supervisor"), _v$14 = sidebarTab() === "supervisor", _v$15 = !!(sidebarTab() === "bookmarks"), _v$16 = sidebarTab() === "bookmarks", _v$17 = !!(sidebarTab() === "checkpoints"), _v$18 = sidebarTab() === "checkpoints", _v$19 = !!(sidebarTab() === "chat"), _v$20 = sidebarTab() === "chat", _v$21 = !!(sidebarTab() === "automation"), _v$22 = sidebarTab() === "automation", _v$23 = !!(sidebarTab() === "history"), _v$24 = sidebarTab() === "history", _v$25 = !!(sidebarTab() === "diff"), _v$26 = sidebarTab() === "diff";
8743
+ _v$11 !== _p$.e && setStyleProperty(_el$9, "width", _p$.e = _v$11);
8744
+ _v$12 !== _p$.t && _el$0.classList.toggle("dragging", _p$.t = _v$12);
8745
+ _v$13 !== _p$.a && _el$16.classList.toggle("active", _p$.a = _v$13);
8746
+ _v$14 !== _p$.o && setAttribute(_el$16, "aria-selected", _p$.o = _v$14);
8747
+ _v$15 !== _p$.i && _el$19.classList.toggle("active", _p$.i = _v$15);
8748
+ _v$16 !== _p$.n && setAttribute(_el$19, "aria-selected", _p$.n = _v$16);
8749
+ _v$17 !== _p$.s && _el$20.classList.toggle("active", _p$.s = _v$17);
8750
+ _v$18 !== _p$.h && setAttribute(_el$20, "aria-selected", _p$.h = _v$18);
8751
+ _v$19 !== _p$.r && _el$21.classList.toggle("active", _p$.r = _v$19);
8752
+ _v$20 !== _p$.d && setAttribute(_el$21, "aria-selected", _p$.d = _v$20);
8753
+ _v$21 !== _p$.l && _el$22.classList.toggle("active", _p$.l = _v$21);
8754
+ _v$22 !== _p$.u && setAttribute(_el$22, "aria-selected", _p$.u = _v$22);
8755
+ _v$23 !== _p$.c && _el$23.classList.toggle("active", _p$.c = _v$23);
8756
+ _v$24 !== _p$.w && setAttribute(_el$23, "aria-selected", _p$.w = _v$24);
8757
+ _v$25 !== _p$.m && _el$24.classList.toggle("active", _p$.m = _v$25);
8758
+ _v$26 !== _p$.f && setAttribute(_el$24, "aria-selected", _p$.f = _v$26);
8445
8759
  return _p$;
8446
8760
  }, {
8447
8761
  e: void 0,
@@ -8466,7 +8780,7 @@ ${contextBlock}` : contextBlock);
8466
8780
  });
8467
8781
  };
8468
8782
  delegateEvents(["click", "pointerdown", "input", "keydown"]);
8469
- var _tmpl$$3 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$2 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$2 = /* @__PURE__ */ template(`<div class=devtools-network><div class=network-header><span>Method</span><span>URL</span><span>Status</span><span>Type</span><span>Time`), _tmpl$5$2 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for network requests... Network monitoring activates when an agent uses devtools.`), _tmpl$6$2 = /* @__PURE__ */ template(`<div><span class=network-method></span><span class=network-url></span><span></span><span class=network-type></span><span class=network-duration>`), _tmpl$7$2 = /* @__PURE__ */ template(`<div class=devtools-activity>`), _tmpl$8$1 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for agent devtools activity...`), _tmpl$9$1 = /* @__PURE__ */ template(`<div class=activity-entry><span class=activity-time></span><span class=activity-tool></span><span class=activity-args></span><span></span><span class=activity-duration>`), _tmpl$0$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge error">`), _tmpl$1$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge count">`), _tmpl$10$1 = /* @__PURE__ */ template(`<div class=export-date-inputs><div class=export-date-row><span class=export-date-label>From</span><input class=export-date-input type=date></div><div class=export-date-row><span class=export-date-label>To</span><input class=export-date-input type=date>`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=devtools-export-dropdown><div class=export-section><div class=export-section-label>Log Types</div><label class=export-checkbox><input type=checkbox>Console</label><label class=export-checkbox><input type=checkbox>Network</label><label class=export-checkbox><input type=checkbox>Activity</label></div><div class=export-section><div class=export-section-label>Date Range</div><div class=export-date-btns><button>Today</button><button>Custom</button></div></div><button class=export-submit>Export JSON`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=devtools-panel><div class=devtools-tabs><button>Console</button><button>Network</button><button>Activity</button><div class=devtools-tab-spacer></div><div class=devtools-export-wrap><button title="Export Logs"><svg width=13 height=13 viewBox="0 0 13 13"fill=none style=vertical-align:middle><path d="M6.5 1v7M3.5 5l3 3 3-3"stroke=currentColor stroke-width=1.3 stroke-linecap=round stroke-linejoin=round></path><path d="M1 9.5v1A1.5 1.5 0 0 0 2.5 12h8A1.5 1.5 0 0 0 12 10.5v-1"stroke=currentColor stroke-width=1.3 stroke-linecap=round></path></svg></button></div><button class=devtools-close-btn title="Close DevTools">×</button></div><div class=devtools-content>`);
8783
+ var _tmpl$$4 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$3 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$3 = /* @__PURE__ */ template(`<div class=devtools-network><div class=network-header><span>Method</span><span>URL</span><span>Status</span><span>Type</span><span>Time`), _tmpl$5$3 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for network requests... Network monitoring activates when an agent uses devtools.`), _tmpl$6$3 = /* @__PURE__ */ template(`<div><span class=network-method></span><span class=network-url></span><span></span><span class=network-type></span><span class=network-duration>`), _tmpl$7$3 = /* @__PURE__ */ template(`<div class=devtools-activity>`), _tmpl$8$2 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for agent devtools activity...`), _tmpl$9$1 = /* @__PURE__ */ template(`<div class=activity-entry><span class=activity-time></span><span class=activity-tool></span><span class=activity-args></span><span></span><span class=activity-duration>`), _tmpl$0$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge error">`), _tmpl$1$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge count">`), _tmpl$10$1 = /* @__PURE__ */ template(`<div class=export-date-inputs><div class=export-date-row><span class=export-date-label>From</span><input class=export-date-input type=date></div><div class=export-date-row><span class=export-date-label>To</span><input class=export-date-input type=date>`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=devtools-export-dropdown><div class=export-section><div class=export-section-label>Log Types</div><label class=export-checkbox><input type=checkbox>Console</label><label class=export-checkbox><input type=checkbox>Network</label><label class=export-checkbox><input type=checkbox>Activity</label></div><div class=export-section><div class=export-section-label>Date Range</div><div class=export-date-btns><button>Today</button><button>Custom</button></div></div><button class=export-submit>Export JSON`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=devtools-panel><div class=devtools-tabs><button>Console</button><button>Network</button><button>Activity</button><div class=devtools-tab-spacer></div><div class=devtools-export-wrap><button title="Export Logs"><svg width=13 height=13 viewBox="0 0 13 13"fill=none style=vertical-align:middle><path d="M6.5 1v7M3.5 5l3 3 3-3"stroke=currentColor stroke-width=1.3 stroke-linecap=round stroke-linejoin=round></path><path d="M1 9.5v1A1.5 1.5 0 0 0 2.5 12h8A1.5 1.5 0 0 0 12 10.5v-1"stroke=currentColor stroke-width=1.3 stroke-linecap=round></path></svg></button></div><button class=devtools-close-btn title="Close DevTools">×</button></div><div class=devtools-content>`);
8470
8784
  function statusClass(status) {
8471
8785
  if (status == null) return "pending";
8472
8786
  if (status >= 200 && status < 300) return "ok";
@@ -8527,10 +8841,10 @@ const ConsoleView = (props) => {
8527
8841
  return props.entries.length > 0;
8528
8842
  },
8529
8843
  get fallback() {
8530
- return _tmpl$2$3();
8844
+ return _tmpl$2$4();
8531
8845
  },
8532
8846
  get children() {
8533
- var _el$ = _tmpl$$3();
8847
+ var _el$ = _tmpl$$4();
8534
8848
  _el$.addEventListener("scroll", onScroll);
8535
8849
  var _ref$ = scrollRef;
8536
8850
  typeof _ref$ === "function" ? use(_ref$, _el$) : scrollRef = _el$;
@@ -8539,7 +8853,7 @@ const ConsoleView = (props) => {
8539
8853
  return props.entries;
8540
8854
  },
8541
8855
  children: (entry) => (() => {
8542
- var _el$3 = _tmpl$3$2(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling;
8856
+ var _el$3 = _tmpl$3$3(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling;
8543
8857
  insert(_el$4, () => entry.level);
8544
8858
  insert(_el$5, () => formatTime(entry.timestamp, {
8545
8859
  includeSeconds: true
@@ -8583,10 +8897,10 @@ const NetworkView = (props) => {
8583
8897
  return props.entries.length > 0;
8584
8898
  },
8585
8899
  get fallback() {
8586
- return _tmpl$5$2();
8900
+ return _tmpl$5$3();
8587
8901
  },
8588
8902
  get children() {
8589
- var _el$8 = _tmpl$4$2();
8903
+ var _el$8 = _tmpl$4$3();
8590
8904
  _el$8.firstChild;
8591
8905
  _el$8.addEventListener("scroll", onScroll);
8592
8906
  var _ref$2 = scrollRef;
@@ -8596,7 +8910,7 @@ const NetworkView = (props) => {
8596
8910
  return props.entries;
8597
8911
  },
8598
8912
  children: (entry) => (() => {
8599
- var _el$1 = _tmpl$6$2(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling, _el$14 = _el$13.nextSibling;
8913
+ var _el$1 = _tmpl$6$3(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling, _el$14 = _el$13.nextSibling;
8600
8914
  insert(_el$10, () => entry.method);
8601
8915
  insert(_el$11, () => shortenUrl(entry.url));
8602
8916
  insert(_el$12, (() => {
@@ -8632,10 +8946,10 @@ const ActivityView = (props) => {
8632
8946
  return props.entries.length > 0;
8633
8947
  },
8634
8948
  get fallback() {
8635
- return _tmpl$8$1();
8949
+ return _tmpl$8$2();
8636
8950
  },
8637
8951
  get children() {
8638
- var _el$15 = _tmpl$7$2();
8952
+ var _el$15 = _tmpl$7$3();
8639
8953
  insert(_el$15, createComponent(For, {
8640
8954
  get each() {
8641
8955
  return [...props.entries].reverse();
@@ -8987,7 +9301,7 @@ const PROVIDERS = {
8987
9301
  apiKeyHint: "Optional — only if your endpoint requires authentication"
8988
9302
  }
8989
9303
  };
8990
- var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$6$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$7$1 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured \`llama-server\` base URL. For agent loops, run \`llama-server\` with \`--ctx-size 16384\` minimum and \`32768\` recommended.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$15 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$16 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$17 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$18 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$20 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$21 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$22 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$24 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=default-search-engine>Default Search Engine</label><select id=default-search-engine class=settings-input><option value=none>None (disabled)</option></select><p class=settings-hint>The search engine used by the AI agent when it needs to search the web. "None" disables the fallback and forces the agent to use on-page search inputs only.</p></div><div class=settings-field><label class=settings-label for=download-path>Download Location</label><input id=download-path class=settings-input placeholder="Default: ~/Downloads"><p class=settings-hint>Directory for saved files. Leave blank to use the system default Downloads folder.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current</button></div></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label for=theme-select>Theme</label><select id=theme-select class="settings-input settings-select"><option value=dark>Dark</option><option value=light>Light</option></select><p class=settings-hint>Choose the application color scheme. Takes effect after saving.</p></div><div class=settings-field><label class=settings-label for=domain-policy-mode>Domain Restrictions</label><select id=domain-policy-mode class="settings-input settings-select"><option value=none>No restrictions</option><option value=allowlist>Allowlist (only listed domains)</option><option value=blocklist>Blocklist (block listed domains)</option></select></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$25 = /* @__PURE__ */ template(`<style>
9304
+ var _tmpl$$3 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$2 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$2 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$2 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$6$2 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$7$2 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8$1 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured \`llama-server\` base URL. For agent loops, run \`llama-server\` with \`--ctx-size 16384\` minimum and \`32768\` recommended.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$15 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$16 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$17 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$18 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Save login credentials for any website. Passwords are encrypted locally and filled directly into login forms. The agent can list and fill them with your consent, but passwords are never sent to AI providers.`), _tmpl$20 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Password`), _tmpl$21 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Title (e.g. GitHub Personal)"><input class=settings-input placeholder="URL (e.g. https://github.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><select class=settings-input><option value=login>Login</option><option value=credit_card>Credit Card</option><option value=identity>Identity</option><option value=secure_note>Secure Note</option></select><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Password</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$22 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$23 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$24 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$25 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$26 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$27 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=default-search-engine>Default Search Engine</label><select id=default-search-engine class=settings-input><option value=none>None (disabled)</option></select><p class=settings-hint>The search engine used by the AI agent when it needs to search the web. "None" disables the fallback and forces the agent to use on-page search inputs only.</p></div><div class=settings-field><label class=settings-label for=download-path>Download Location</label><input id=download-path class=settings-input placeholder="Default: ~/Downloads"><p class=settings-hint>Directory for saved files. Leave blank to use the system default Downloads folder.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current</button></div></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Passwords</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label for=theme-select>Theme</label><select id=theme-select class="settings-input settings-select"><option value=dark>Dark</option><option value=light>Light</option></select><p class=settings-hint>Choose the application color scheme. Takes effect after saving.</p></div><div class=settings-field><label class=settings-label for=domain-policy-mode>Domain Restrictions</label><select id=domain-policy-mode class="settings-input settings-select"><option value=none>No restrictions</option><option value=allowlist>Allowlist (only listed domains)</option><option value=blocklist>Blocklist (block listed domains)</option></select></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$28 = /* @__PURE__ */ template(`<style>
8991
9305
  .settings-panel {
8992
9306
  width: min(440px, calc(100vw - 32px));
8993
9307
  max-height: calc(100vh - 48px);
@@ -9529,7 +9843,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
9529
9843
  justify-content: flex-end;
9530
9844
  margin-top: 4px;
9531
9845
  }
9532
- `), _tmpl$26 = /* @__PURE__ */ template(`<option>`), _tmpl$27 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$28 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$30 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$32 = /* @__PURE__ */ template(`<div>`), _tmpl$33 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; <!> cookies &middot; <!> domains</span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Restore this session (replaces current tabs and cookies)"style="padding:2px 10px;font-size:12px">Load</button><button class=vault-entry-remove title="Delete session">&times;`), _tmpl$34 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$35 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$36 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$37 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$38 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade">Subscribe to Premium — $5.99/mo after 7-day free trial`), _tmpl$39 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$40 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$41 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; </span></div><button class=vault-entry-remove title="Remove credential">&times;`), _tmpl$42 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail></span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Fill forms on current page with this profile"style="padding:2px 10px;font-size:12px">Fill</button><button class=vault-entry-remove title="Remove profile">&times;`);
9846
+ `), _tmpl$29 = /* @__PURE__ */ template(`<option>`), _tmpl$30 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$31 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$32 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$33 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$34 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$35 = /* @__PURE__ */ template(`<div>`), _tmpl$36 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; <!> cookies &middot; <!> domains</span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Restore this session (replaces current tabs and cookies)"style="padding:2px 10px;font-size:12px">Load</button><button class=vault-entry-remove title="Delete session">&times;`), _tmpl$37 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$38 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$39 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$40 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$41 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade">Subscribe to Premium — $5.99/mo after 7-day free trial`), _tmpl$42 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$43 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$44 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; </span></div><button class=vault-entry-remove title="Remove credential">&times;`), _tmpl$45 = /* @__PURE__ */ template(`<p class=settings-hint>Your personal password manager. Save, organize, and autofill login credentials. Upgrade to Premium to unlock Passwords.`), _tmpl$46 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; </span></div><button class=vault-entry-remove title="Remove password">&times;`), _tmpl$47 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail></span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Fill forms on current page with this profile"style="padding:2px 10px;font-size:12px">Fill</button><button class=vault-entry-remove title="Remove profile">&times;`);
9533
9847
  const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
9534
9848
  id: p.id,
9535
9849
  name: p.name,
@@ -9585,6 +9899,67 @@ const Settings = () => {
9585
9899
  const [vaultNewTotp, setVaultNewTotp] = createSignal("");
9586
9900
  const [vaultNewNotes, setVaultNewNotes] = createSignal("");
9587
9901
  const [vaultMessage, setVaultMessage] = createSignal(null);
9902
+ const [humanEntries, setHumanEntries] = createSignal([]);
9903
+ const [humanAdding, setHumanAdding] = createSignal(false);
9904
+ const [humanNewTitle, setHumanNewTitle] = createSignal("");
9905
+ const [humanNewUrl, setHumanNewUrl] = createSignal("");
9906
+ const [humanNewUsername, setHumanNewUsername] = createSignal("");
9907
+ const [humanNewPassword, setHumanNewPassword] = createSignal("");
9908
+ const [humanNewNotes, setHumanNewNotes] = createSignal("");
9909
+ const [humanNewCategory, setHumanNewCategory] = createSignal("login");
9910
+ const [humanMessage, setHumanMessage] = createSignal(null);
9911
+ const loadHumanEntries = async () => {
9912
+ try {
9913
+ const entries2 = await window.vessel.humanVault.list();
9914
+ setHumanEntries(entries2);
9915
+ } catch (err) {
9916
+ logger.warn("Failed to load human vault entries:", err);
9917
+ }
9918
+ };
9919
+ const handleHumanAdd = async () => {
9920
+ if (!humanNewTitle().trim() || !humanNewUrl().trim() || !humanNewUsername().trim() || !humanNewPassword().trim()) {
9921
+ setHumanMessage({
9922
+ kind: "error",
9923
+ text: "Title, URL, username, and password are required."
9924
+ });
9925
+ return;
9926
+ }
9927
+ try {
9928
+ await window.vessel.humanVault.save({
9929
+ title: humanNewTitle().trim(),
9930
+ url: humanNewUrl().trim(),
9931
+ username: humanNewUsername().trim(),
9932
+ password: humanNewPassword(),
9933
+ notes: humanNewNotes().trim() || void 0,
9934
+ category: humanNewCategory()
9935
+ });
9936
+ setHumanMessage({
9937
+ kind: "success",
9938
+ text: "Password saved."
9939
+ });
9940
+ setHumanAdding(false);
9941
+ setHumanNewTitle("");
9942
+ setHumanNewUrl("");
9943
+ setHumanNewUsername("");
9944
+ setHumanNewPassword("");
9945
+ setHumanNewNotes("");
9946
+ setHumanNewCategory("login");
9947
+ loadHumanEntries();
9948
+ } catch (err) {
9949
+ setHumanMessage({
9950
+ kind: "error",
9951
+ text: err?.message || "Failed to save."
9952
+ });
9953
+ }
9954
+ };
9955
+ const handleHumanRemove = async (id) => {
9956
+ try {
9957
+ await window.vessel.humanVault.remove(id);
9958
+ loadHumanEntries();
9959
+ } catch (err) {
9960
+ logger.warn("Failed to remove human vault entry:", err);
9961
+ }
9962
+ };
9588
9963
  const [autofillProfiles, setAutofillProfiles] = createSignal([]);
9589
9964
  const [autofillAdding, setAutofillAdding] = createSignal(false);
9590
9965
  const [autofillLabel, setAutofillLabel] = createSignal("");
@@ -9892,12 +10267,13 @@ const Settings = () => {
9892
10267
  logger.warn("Failed to load premium state:", err);
9893
10268
  }
9894
10269
  await loadVaultEntries();
10270
+ await loadHumanEntries();
9895
10271
  await loadSessionList();
9896
10272
  };
9897
10273
  onMount(() => {
9898
10274
  void loadState();
9899
10275
  void loadAutofillProfiles();
9900
- const unsubscribe = window.vessel.settings.onHealthUpdate((nextHealth) => {
10276
+ const unsubscribe2 = window.vessel.settings.onHealthUpdate((nextHealth) => {
9901
10277
  setHealth(nextHealth);
9902
10278
  });
9903
10279
  const unsubscribePremium = window.vessel.premium.onUpdate((nextState) => {
@@ -9914,7 +10290,7 @@ const Settings = () => {
9914
10290
  }
9915
10291
  });
9916
10292
  onCleanup(() => {
9917
- unsubscribe();
10293
+ unsubscribe2();
9918
10294
  unsubscribePremium();
9919
10295
  });
9920
10296
  });
@@ -9992,13 +10368,15 @@ const Settings = () => {
9992
10368
  },
9993
10369
  get children() {
9994
10370
  return [(() => {
9995
- var _el$ = _tmpl$24(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$11 = _el$3.nextSibling, _el$18 = _el$11.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling, _el$24 = _el$23.firstChild, _el$25 = _el$21.nextSibling, _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling, _el$28 = _el$25.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$31.firstChild, _el$34 = _el$32.nextSibling, _el$35 = _el$31.nextSibling, _el$36 = _el$35.firstChild, _el$37 = _el$36.nextSibling, _el$38 = _el$35.nextSibling, _el$39 = _el$38.firstChild, _el$40 = _el$39.nextSibling, _el$41 = _el$38.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$41.nextSibling, _el$45 = _el$44.firstChild, _el$46 = _el$45.firstChild, _el$47 = _el$44.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling, _el$51 = _el$50.nextSibling, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$55 = _el$48.nextSibling, _el$56 = _el$55.nextSibling, _el$57 = _el$56.firstChild, _el$58 = _el$57.firstChild, _el$79 = _el$56.nextSibling, _el$80 = _el$79.nextSibling;
10371
+ var _el$ = _tmpl$27(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$11 = _el$3.nextSibling, _el$18 = _el$11.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling, _el$24 = _el$23.firstChild, _el$25 = _el$21.nextSibling, _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling, _el$28 = _el$25.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$31.firstChild, _el$34 = _el$32.nextSibling, _el$35 = _el$31.nextSibling, _el$36 = _el$35.firstChild, _el$37 = _el$36.nextSibling, _el$38 = _el$35.nextSibling, _el$39 = _el$38.firstChild, _el$40 = _el$39.nextSibling, _el$41 = _el$38.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$41.nextSibling, _el$45 = _el$44.firstChild, _el$46 = _el$45.firstChild, _el$47 = _el$44.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling, _el$51 = _el$50.nextSibling, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$55 = _el$48.nextSibling, _el$56 = _el$55.nextSibling, _el$57 = _el$56.firstChild, _el$58 = _el$57.firstChild, _el$79 = _el$56.nextSibling, _el$80 = _el$79.nextSibling;
9996
10372
  _el$80.firstChild;
9997
10373
  var _el$89 = _el$80.nextSibling, _el$90 = _el$89.nextSibling, _el$91 = _el$90.firstChild;
9998
10374
  _el$91.firstChild;
9999
10375
  var _el$107 = _el$90.nextSibling, _el$108 = _el$107.nextSibling, _el$109 = _el$108.firstChild;
10000
- _el$109.nextSibling;
10001
- var _el$132 = _el$108.nextSibling, _el$133 = _el$132.nextSibling, _el$134 = _el$133.firstChild, _el$135 = _el$134.firstChild, _el$136 = _el$133.nextSibling, _el$137 = _el$136.nextSibling, _el$138 = _el$137.firstChild, _el$139 = _el$138.nextSibling, _el$140 = _el$137.nextSibling, _el$141 = _el$140.firstChild, _el$142 = _el$141.nextSibling, _el$146 = _el$140.nextSibling, _el$147 = _el$146.firstChild, _el$148 = _el$147.nextSibling;
10376
+ _el$109.firstChild;
10377
+ var _el$125 = _el$108.nextSibling, _el$126 = _el$125.nextSibling, _el$127 = _el$126.firstChild;
10378
+ _el$127.nextSibling;
10379
+ var _el$150 = _el$126.nextSibling, _el$151 = _el$150.nextSibling, _el$152 = _el$151.firstChild, _el$153 = _el$152.firstChild, _el$154 = _el$151.nextSibling, _el$155 = _el$154.nextSibling, _el$156 = _el$155.firstChild, _el$157 = _el$156.nextSibling, _el$158 = _el$155.nextSibling, _el$159 = _el$158.firstChild, _el$160 = _el$159.nextSibling, _el$164 = _el$158.nextSibling, _el$165 = _el$164.firstChild, _el$166 = _el$165.nextSibling;
10002
10380
  addEventListener(_el$, "click", closeSettings, true);
10003
10381
  _el$2.$$keydown = handleKeyDown;
10004
10382
  _el$2.$$click = (e) => e.stopPropagation();
@@ -10007,14 +10385,14 @@ const Settings = () => {
10007
10385
  return showWelcome();
10008
10386
  },
10009
10387
  get children() {
10010
- var _el$4 = _tmpl$2$2(), _el$5 = _el$4.firstChild, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$5.nextSibling, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild;
10388
+ var _el$4 = _tmpl$2$3(), _el$5 = _el$4.firstChild, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$5.nextSibling, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild;
10011
10389
  _el$7.$$click = dismissWelcome;
10012
10390
  insert(_el$4, createComponent(Show, {
10013
10391
  get when() {
10014
10392
  return !premiumActive();
10015
10393
  },
10016
10394
  get children() {
10017
- var _el$1 = _tmpl$$2(), _el$10 = _el$1.firstChild;
10395
+ var _el$1 = _tmpl$$3(), _el$10 = _el$1.firstChild;
10018
10396
  _el$10.$$click = () => {
10019
10397
  void trackPremiumContext("welcome_banner_clicked");
10020
10398
  startPremiumCheckout();
@@ -10031,7 +10409,7 @@ const Settings = () => {
10031
10409
  return !premiumActive();
10032
10410
  },
10033
10411
  get children() {
10034
- var _el$12 = _tmpl$3$1(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$14.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
10412
+ var _el$12 = _tmpl$3$2(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$14.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
10035
10413
  _el$16.$$click = () => {
10036
10414
  void trackPremiumContext("settings_banner_clicked");
10037
10415
  startPremiumCheckout();
@@ -10054,10 +10432,10 @@ const Settings = () => {
10054
10432
  return Object.entries(SEARCH_ENGINE_PRESETS);
10055
10433
  },
10056
10434
  children: ([id, preset]) => (() => {
10057
- var _el$150 = _tmpl$26();
10058
- _el$150.value = id;
10059
- insert(_el$150, () => preset.label);
10060
- return _el$150;
10435
+ var _el$168 = _tmpl$29();
10436
+ _el$168.value = id;
10437
+ insert(_el$168, () => preset.label);
10438
+ return _el$168;
10061
10439
  })()
10062
10440
  }), _el$24);
10063
10441
  _el$27.$$input = (e) => setDownloadPath(e.currentTarget.value);
@@ -10069,10 +10447,10 @@ const Settings = () => {
10069
10447
  return premiumActive();
10070
10448
  },
10071
10449
  get fallback() {
10072
- return _tmpl$27();
10450
+ return _tmpl$30();
10073
10451
  },
10074
10452
  get children() {
10075
- var _el$33 = _tmpl$4$1();
10453
+ var _el$33 = _tmpl$4$2();
10076
10454
  _el$33.$$input = (e) => setMaxToolIterations(e.currentTarget.value);
10077
10455
  createRenderEffect(() => _el$33.value = maxToolIterations());
10078
10456
  return _el$33;
@@ -10090,55 +10468,55 @@ const Settings = () => {
10090
10468
  return health();
10091
10469
  },
10092
10470
  children: (currentHealth) => (() => {
10093
- var _el$152 = _tmpl$29(), _el$153 = _el$152.firstChild, _el$154 = _el$153.nextSibling, _el$155 = _el$154.firstChild, _el$157 = _el$155.nextSibling;
10094
- _el$157.nextSibling;
10095
- insert(_el$157, () => currentHealth().mcp.status);
10096
- insert(_el$154, () => currentHealth().mcp.message, null);
10097
- insert(_el$152, createComponent(Show, {
10471
+ var _el$170 = _tmpl$32(), _el$171 = _el$170.firstChild, _el$172 = _el$171.nextSibling, _el$173 = _el$172.firstChild, _el$175 = _el$173.nextSibling;
10472
+ _el$175.nextSibling;
10473
+ insert(_el$175, () => currentHealth().mcp.status);
10474
+ insert(_el$172, () => currentHealth().mcp.message, null);
10475
+ insert(_el$170, createComponent(Show, {
10098
10476
  get when() {
10099
10477
  return currentHealth().mcp.endpoint;
10100
10478
  },
10101
10479
  children: (endpoint) => (() => {
10102
- var _el$160 = _tmpl$30(), _el$161 = _el$160.firstChild, _el$162 = _el$161.nextSibling;
10103
- insert(_el$162, endpoint);
10104
- return _el$160;
10480
+ var _el$178 = _tmpl$33(), _el$179 = _el$178.firstChild, _el$180 = _el$179.nextSibling;
10481
+ insert(_el$180, endpoint);
10482
+ return _el$178;
10105
10483
  })()
10106
10484
  }), null);
10107
- insert(_el$152, createComponent(Show, {
10485
+ insert(_el$170, createComponent(Show, {
10108
10486
  get when() {
10109
10487
  return currentHealth().startupIssues.length > 0;
10110
10488
  },
10111
10489
  get children() {
10112
- var _el$159 = _tmpl$28();
10113
- insert(_el$159, () => currentHealth().startupIssues.map((issue) => (() => {
10114
- var _el$163 = _tmpl$31(), _el$164 = _el$163.firstChild, _el$165 = _el$164.nextSibling;
10115
- insert(_el$164, () => issue.title);
10116
- insert(_el$165, () => issue.detail);
10117
- insert(_el$163, createComponent(Show, {
10490
+ var _el$177 = _tmpl$31();
10491
+ insert(_el$177, () => currentHealth().startupIssues.map((issue) => (() => {
10492
+ var _el$181 = _tmpl$34(), _el$182 = _el$181.firstChild, _el$183 = _el$182.nextSibling;
10493
+ insert(_el$182, () => issue.title);
10494
+ insert(_el$183, () => issue.detail);
10495
+ insert(_el$181, createComponent(Show, {
10118
10496
  get when() {
10119
10497
  return issue.action;
10120
10498
  },
10121
10499
  children: (action) => (() => {
10122
- var _el$166 = _tmpl$32();
10123
- insert(_el$166, action);
10124
- return _el$166;
10500
+ var _el$184 = _tmpl$35();
10501
+ insert(_el$184, action);
10502
+ return _el$184;
10125
10503
  })()
10126
10504
  }), null);
10127
10505
  createRenderEffect((_p$) => {
10128
10506
  var _v$1 = !!(issue.severity === "warning"), _v$10 = !!(issue.severity === "error");
10129
- _v$1 !== _p$.e && _el$163.classList.toggle("warning", _p$.e = _v$1);
10130
- _v$10 !== _p$.t && _el$163.classList.toggle("error", _p$.t = _v$10);
10507
+ _v$1 !== _p$.e && _el$181.classList.toggle("warning", _p$.e = _v$1);
10508
+ _v$10 !== _p$.t && _el$181.classList.toggle("error", _p$.t = _v$10);
10131
10509
  return _p$;
10132
10510
  }, {
10133
10511
  e: void 0,
10134
10512
  t: void 0
10135
10513
  });
10136
- return _el$163;
10514
+ return _el$181;
10137
10515
  })()));
10138
- return _el$159;
10516
+ return _el$177;
10139
10517
  }
10140
10518
  }), null);
10141
- return _el$152;
10519
+ return _el$170;
10142
10520
  })()
10143
10521
  }), _el$35);
10144
10522
  _el$37.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
@@ -10170,20 +10548,20 @@ const Settings = () => {
10170
10548
  return sessionList().length > 0;
10171
10549
  },
10172
10550
  get children() {
10173
- var _el$54 = _tmpl$5$1();
10551
+ var _el$54 = _tmpl$5$2();
10174
10552
  insert(_el$54, createComponent(For, {
10175
10553
  get each() {
10176
10554
  return sessionList();
10177
10555
  },
10178
10556
  children: (s) => (() => {
10179
- var _el$167 = _tmpl$33(), _el$168 = _el$167.firstChild, _el$169 = _el$168.firstChild, _el$170 = _el$169.nextSibling, _el$171 = _el$170.firstChild, _el$177 = _el$171.nextSibling, _el$173 = _el$177.nextSibling, _el$178 = _el$173.nextSibling;
10180
- _el$178.nextSibling;
10181
- var _el$179 = _el$168.nextSibling, _el$180 = _el$179.firstChild, _el$181 = _el$180.nextSibling;
10182
- insert(_el$169, () => s.name);
10183
- insert(_el$170, () => new Date(s.updatedAt).toLocaleDateString(), _el$171);
10184
- insert(_el$170, () => s.cookieCount, _el$177);
10185
- insert(_el$170, () => s.domains.length, _el$178);
10186
- _el$180.$$click = async () => {
10557
+ var _el$185 = _tmpl$36(), _el$186 = _el$185.firstChild, _el$187 = _el$186.firstChild, _el$188 = _el$187.nextSibling, _el$189 = _el$188.firstChild, _el$195 = _el$189.nextSibling, _el$191 = _el$195.nextSibling, _el$196 = _el$191.nextSibling;
10558
+ _el$196.nextSibling;
10559
+ var _el$197 = _el$186.nextSibling, _el$198 = _el$197.firstChild, _el$199 = _el$198.nextSibling;
10560
+ insert(_el$187, () => s.name);
10561
+ insert(_el$188, () => new Date(s.updatedAt).toLocaleDateString(), _el$189);
10562
+ insert(_el$188, () => s.cookieCount, _el$195);
10563
+ insert(_el$188, () => s.domains.length, _el$196);
10564
+ _el$198.$$click = async () => {
10187
10565
  try {
10188
10566
  await window.vessel.sessions.load(s.name);
10189
10567
  setStatus({
@@ -10198,11 +10576,11 @@ const Settings = () => {
10198
10576
  });
10199
10577
  }
10200
10578
  };
10201
- _el$181.$$click = async () => {
10579
+ _el$199.$$click = async () => {
10202
10580
  await window.vessel.sessions.delete(s.name);
10203
10581
  await loadSessionList();
10204
10582
  };
10205
- return _el$167;
10583
+ return _el$185;
10206
10584
  })()
10207
10585
  }));
10208
10586
  return _el$54;
@@ -10215,7 +10593,7 @@ const Settings = () => {
10215
10593
  },
10216
10594
  get children() {
10217
10595
  return [(() => {
10218
- var _el$59 = _tmpl$6$1(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
10596
+ var _el$59 = _tmpl$6$2(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
10219
10597
  _el$61.addEventListener("change", (e) => {
10220
10598
  const id = e.currentTarget.value;
10221
10599
  setChatProviderId(id);
@@ -10229,10 +10607,10 @@ const Settings = () => {
10229
10607
  insert(_el$61, createComponent(For, {
10230
10608
  each: CHAT_PROVIDERS,
10231
10609
  children: (p) => (() => {
10232
- var _el$182 = _tmpl$26();
10233
- insert(_el$182, () => p.name);
10234
- createRenderEffect(() => _el$182.value = p.id);
10235
- return _el$182;
10610
+ var _el$200 = _tmpl$29();
10611
+ insert(_el$200, () => p.name);
10612
+ createRenderEffect(() => _el$200.value = p.id);
10613
+ return _el$200;
10236
10614
  })()
10237
10615
  }));
10238
10616
  createRenderEffect(() => _el$61.value = chatProviderId());
@@ -10250,7 +10628,7 @@ const Settings = () => {
10250
10628
  return !chatProviderMeta().requiresKey;
10251
10629
  },
10252
10630
  get children() {
10253
- return _tmpl$7$1();
10631
+ return _tmpl$7$2();
10254
10632
  }
10255
10633
  }), null);
10256
10634
  _el$66.$$input = (e) => {
@@ -10265,7 +10643,7 @@ const Settings = () => {
10265
10643
  return memo(() => !!chatHasStoredApiKey())() && !chatApiKey().trim();
10266
10644
  },
10267
10645
  get children() {
10268
- return _tmpl$8();
10646
+ return _tmpl$8$1();
10269
10647
  }
10270
10648
  }), null);
10271
10649
  insert(_el$62, createComponent(Show, {
@@ -10288,12 +10666,12 @@ const Settings = () => {
10288
10666
  },
10289
10667
  get fallback() {
10290
10668
  return (() => {
10291
- var _el$183 = _tmpl$34();
10292
- _el$183.$$input = (e) => setChatModel(e.currentTarget.value);
10293
- setAttribute(_el$183, "spellcheck", false);
10294
- createRenderEffect(() => setAttribute(_el$183, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
10295
- createRenderEffect(() => _el$183.value = chatModel());
10296
- return _el$183;
10669
+ var _el$201 = _tmpl$37();
10670
+ _el$201.$$input = (e) => setChatModel(e.currentTarget.value);
10671
+ setAttribute(_el$201, "spellcheck", false);
10672
+ createRenderEffect(() => setAttribute(_el$201, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
10673
+ createRenderEffect(() => _el$201.value = chatModel());
10674
+ return _el$201;
10297
10675
  })();
10298
10676
  },
10299
10677
  get children() {
@@ -10304,10 +10682,10 @@ const Settings = () => {
10304
10682
  return providerModels();
10305
10683
  },
10306
10684
  children: (m) => (() => {
10307
- var _el$184 = _tmpl$26();
10308
- _el$184.value = m;
10309
- insert(_el$184, m);
10310
- return _el$184;
10685
+ var _el$202 = _tmpl$29();
10686
+ _el$202.value = m;
10687
+ insert(_el$202, m);
10688
+ return _el$202;
10311
10689
  })()
10312
10690
  }));
10313
10691
  createRenderEffect(() => _el$72.value = chatModel());
@@ -10328,9 +10706,9 @@ const Settings = () => {
10328
10706
  return modelFetchWarning();
10329
10707
  },
10330
10708
  children: (warning) => (() => {
10331
- var _el$185 = _tmpl$35();
10332
- insert(_el$185, warning);
10333
- return _el$185;
10709
+ var _el$203 = _tmpl$38();
10710
+ insert(_el$203, warning);
10711
+ return _el$203;
10334
10712
  })()
10335
10713
  }), null);
10336
10714
  createRenderEffect(() => _el$73.disabled = modelFetchState() === "loading");
@@ -10363,8 +10741,8 @@ const Settings = () => {
10363
10741
  },
10364
10742
  get fallback() {
10365
10743
  return (() => {
10366
- var _el$186 = _tmpl$38(), _el$187 = _el$186.firstChild, _el$188 = _el$187.nextSibling, _el$189 = _el$188.firstChild, _el$190 = _el$189.nextSibling, _el$194 = _el$188.nextSibling;
10367
- _el$189.$$input = (e) => {
10744
+ var _el$204 = _tmpl$41(), _el$205 = _el$204.firstChild, _el$206 = _el$205.nextSibling, _el$207 = _el$206.firstChild, _el$208 = _el$207.nextSibling, _el$212 = _el$206.nextSibling;
10745
+ _el$207.$$input = (e) => {
10368
10746
  const nextEmail = e.currentTarget.value;
10369
10747
  if (nextEmail.trim().toLowerCase() !== premiumEmail().trim().toLowerCase()) {
10370
10748
  resetPremiumActivationFlow();
@@ -10372,8 +10750,8 @@ const Settings = () => {
10372
10750
  }
10373
10751
  setPremiumEmail(nextEmail);
10374
10752
  };
10375
- setAttribute(_el$189, "spellcheck", false);
10376
- _el$190.$$click = async () => {
10753
+ setAttribute(_el$207, "spellcheck", false);
10754
+ _el$208.$$click = async () => {
10377
10755
  setPremiumLoading(true);
10378
10756
  setPremiumMessage(null);
10379
10757
  try {
@@ -10402,23 +10780,23 @@ const Settings = () => {
10402
10780
  setPremiumLoading(false);
10403
10781
  }
10404
10782
  };
10405
- insert(_el$190, (() => {
10783
+ insert(_el$208, (() => {
10406
10784
  var _c$ = memo(() => !!premiumLoading());
10407
10785
  return () => _c$() ? "Sending..." : premiumCodeSent() ? "Resend Code" : "Send Code";
10408
10786
  })());
10409
- insert(_el$186, createComponent(Show, {
10787
+ insert(_el$204, createComponent(Show, {
10410
10788
  get when() {
10411
10789
  return premiumCodeSent();
10412
10790
  },
10413
10791
  get children() {
10414
- var _el$191 = _tmpl$36(), _el$192 = _el$191.firstChild, _el$193 = _el$192.nextSibling;
10415
- _el$192.$$input = (e) => {
10792
+ var _el$209 = _tmpl$39(), _el$210 = _el$209.firstChild, _el$211 = _el$210.nextSibling;
10793
+ _el$210.$$input = (e) => {
10416
10794
  const nextCode = e.currentTarget.value.replace(/\D+/g, "").slice(0, 6);
10417
10795
  setPremiumCode(nextCode);
10418
10796
  setPremiumMessage(null);
10419
10797
  };
10420
- setAttribute(_el$192, "spellcheck", false);
10421
- _el$193.$$click = async () => {
10798
+ setAttribute(_el$210, "spellcheck", false);
10799
+ _el$211.$$click = async () => {
10422
10800
  setPremiumLoading(true);
10423
10801
  setPremiumMessage(null);
10424
10802
  try {
@@ -10445,53 +10823,53 @@ const Settings = () => {
10445
10823
  setPremiumLoading(false);
10446
10824
  }
10447
10825
  };
10448
- insert(_el$193, () => premiumLoading() ? "Verifying..." : "Verify Code");
10449
- createRenderEffect(() => _el$193.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
10450
- createRenderEffect(() => _el$192.value = premiumCode());
10451
- return _el$191;
10826
+ insert(_el$211, () => premiumLoading() ? "Verifying..." : "Verify Code");
10827
+ createRenderEffect(() => _el$211.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
10828
+ createRenderEffect(() => _el$210.value = premiumCode());
10829
+ return _el$209;
10452
10830
  }
10453
- }), _el$194);
10454
- _el$194.$$click = () => {
10831
+ }), _el$212);
10832
+ _el$212.$$click = () => {
10455
10833
  startPremiumCheckout();
10456
10834
  };
10457
- insert(_el$186, createComponent(Show, {
10835
+ insert(_el$204, createComponent(Show, {
10458
10836
  get when() {
10459
10837
  return premiumMessage();
10460
10838
  },
10461
10839
  children: (msg) => (() => {
10462
- var _el$196 = _tmpl$39();
10463
- insert(_el$196, () => msg().text);
10840
+ var _el$214 = _tmpl$42();
10841
+ insert(_el$214, () => msg().text);
10464
10842
  createRenderEffect((_p$) => {
10465
10843
  var _v$11 = !!(msg().kind === "success"), _v$12 = !!(msg().kind === "error");
10466
- _v$11 !== _p$.e && _el$196.classList.toggle("success", _p$.e = _v$11);
10467
- _v$12 !== _p$.t && _el$196.classList.toggle("error", _p$.t = _v$12);
10844
+ _v$11 !== _p$.e && _el$214.classList.toggle("success", _p$.e = _v$11);
10845
+ _v$12 !== _p$.t && _el$214.classList.toggle("error", _p$.t = _v$12);
10468
10846
  return _p$;
10469
10847
  }, {
10470
10848
  e: void 0,
10471
10849
  t: void 0
10472
10850
  });
10473
- return _el$196;
10851
+ return _el$214;
10474
10852
  })()
10475
10853
  }), null);
10476
- insert(_el$186, createComponent(Show, {
10854
+ insert(_el$204, createComponent(Show, {
10477
10855
  get when() {
10478
10856
  return premiumState().email || premiumEmail();
10479
10857
  },
10480
10858
  get children() {
10481
- var _el$195 = _tmpl$37();
10482
- _el$195.$$click = async () => {
10859
+ var _el$213 = _tmpl$40();
10860
+ _el$213.$$click = async () => {
10483
10861
  const state = await window.vessel.premium.reset();
10484
10862
  setPremiumState(state);
10485
10863
  setPremiumEmail("");
10486
10864
  resetPremiumActivationFlow();
10487
10865
  setPremiumMessage(null);
10488
10866
  };
10489
- return _el$195;
10867
+ return _el$213;
10490
10868
  }
10491
10869
  }), null);
10492
- createRenderEffect(() => _el$190.disabled = premiumLoading() || !premiumEmail().trim());
10493
- createRenderEffect(() => _el$189.value = premiumEmail());
10494
- return _el$186;
10870
+ createRenderEffect(() => _el$208.disabled = premiumLoading() || !premiumEmail().trim());
10871
+ createRenderEffect(() => _el$207.value = premiumEmail());
10872
+ return _el$204;
10495
10873
  })();
10496
10874
  },
10497
10875
  get children() {
@@ -10537,18 +10915,18 @@ const Settings = () => {
10537
10915
  return premiumMessage();
10538
10916
  },
10539
10917
  children: (msg) => (() => {
10540
- var _el$197 = _tmpl$39();
10541
- insert(_el$197, () => msg().text);
10918
+ var _el$215 = _tmpl$42();
10919
+ insert(_el$215, () => msg().text);
10542
10920
  createRenderEffect((_p$) => {
10543
10921
  var _v$13 = !!(msg().kind === "success"), _v$14 = !!(msg().kind === "error");
10544
- _v$13 !== _p$.e && _el$197.classList.toggle("success", _p$.e = _v$13);
10545
- _v$14 !== _p$.t && _el$197.classList.toggle("error", _p$.t = _v$14);
10922
+ _v$13 !== _p$.e && _el$215.classList.toggle("success", _p$.e = _v$13);
10923
+ _v$14 !== _p$.t && _el$215.classList.toggle("error", _p$.t = _v$14);
10546
10924
  return _p$;
10547
10925
  }, {
10548
10926
  e: void 0,
10549
10927
  t: void 0
10550
10928
  });
10551
- return _el$197;
10929
+ return _el$215;
10552
10930
  })()
10553
10931
  }), null);
10554
10932
  return _el$82;
@@ -10567,7 +10945,7 @@ const Settings = () => {
10567
10945
  return premiumActive();
10568
10946
  },
10569
10947
  get fallback() {
10570
- return _tmpl$40();
10948
+ return _tmpl$43();
10571
10949
  },
10572
10950
  get children() {
10573
10951
  return [_tmpl$16(), createComponent(Show, {
@@ -10575,17 +10953,17 @@ const Settings = () => {
10575
10953
  return vaultEntries().length > 0;
10576
10954
  },
10577
10955
  get children() {
10578
- var _el$95 = _tmpl$5$1();
10956
+ var _el$95 = _tmpl$5$2();
10579
10957
  insert(_el$95, createComponent(For, {
10580
10958
  get each() {
10581
10959
  return vaultEntries();
10582
10960
  },
10583
10961
  children: (entry) => (() => {
10584
- var _el$199 = _tmpl$41(), _el$200 = _el$199.firstChild, _el$201 = _el$200.firstChild, _el$202 = _el$201.nextSibling, _el$203 = _el$202.firstChild, _el$204 = _el$200.nextSibling;
10585
- insert(_el$201, () => entry.label);
10586
- insert(_el$202, () => entry.username, _el$203);
10587
- insert(_el$202, () => entry.domainPattern, null);
10588
- insert(_el$202, createComponent(Show, {
10962
+ var _el$217 = _tmpl$44(), _el$218 = _el$217.firstChild, _el$219 = _el$218.firstChild, _el$220 = _el$219.nextSibling, _el$221 = _el$220.firstChild, _el$222 = _el$218.nextSibling;
10963
+ insert(_el$219, () => entry.label);
10964
+ insert(_el$220, () => entry.username, _el$221);
10965
+ insert(_el$220, () => entry.domainPattern, null);
10966
+ insert(_el$220, createComponent(Show, {
10589
10967
  get when() {
10590
10968
  return entry.useCount > 0;
10591
10969
  },
@@ -10593,8 +10971,8 @@ const Settings = () => {
10593
10971
  return [" ", "· Used ", memo(() => entry.useCount), "x"];
10594
10972
  }
10595
10973
  }), null);
10596
- _el$204.$$click = () => handleVaultRemove(entry.id);
10597
- return _el$199;
10974
+ _el$222.$$click = () => handleVaultRemove(entry.id);
10975
+ return _el$217;
10598
10976
  })()
10599
10977
  }));
10600
10978
  return _el$95;
@@ -10651,87 +11029,207 @@ const Settings = () => {
10651
11029
  return vaultMessage();
10652
11030
  },
10653
11031
  children: (msg) => (() => {
10654
- var _el$205 = _tmpl$39();
10655
- insert(_el$205, () => msg().text);
11032
+ var _el$223 = _tmpl$42();
11033
+ insert(_el$223, () => msg().text);
10656
11034
  createRenderEffect((_p$) => {
10657
11035
  var _v$15 = !!(msg().kind === "success"), _v$16 = !!(msg().kind === "error");
10658
- _v$15 !== _p$.e && _el$205.classList.toggle("success", _p$.e = _v$15);
10659
- _v$16 !== _p$.t && _el$205.classList.toggle("error", _p$.t = _v$16);
11036
+ _v$15 !== _p$.e && _el$223.classList.toggle("success", _p$.e = _v$15);
11037
+ _v$16 !== _p$.t && _el$223.classList.toggle("error", _p$.t = _v$16);
10660
11038
  return _p$;
10661
11039
  }, {
10662
11040
  e: void 0,
10663
11041
  t: void 0
10664
11042
  });
10665
- return _el$205;
11043
+ return _el$223;
10666
11044
  })()
10667
11045
  })];
10668
11046
  }
10669
11047
  }), null);
11048
+ insert(_el$109, createComponent(Show, {
11049
+ get when() {
11050
+ return !premiumActive();
11051
+ },
11052
+ get children() {
11053
+ return _tmpl$15();
11054
+ }
11055
+ }), null);
10670
11056
  insert(_el$108, createComponent(Show, {
11057
+ get when() {
11058
+ return premiumActive();
11059
+ },
11060
+ get fallback() {
11061
+ return _tmpl$45();
11062
+ },
11063
+ get children() {
11064
+ return [_tmpl$19(), createComponent(Show, {
11065
+ get when() {
11066
+ return humanEntries().length > 0;
11067
+ },
11068
+ get children() {
11069
+ var _el$113 = _tmpl$5$2();
11070
+ insert(_el$113, createComponent(For, {
11071
+ get each() {
11072
+ return humanEntries();
11073
+ },
11074
+ children: (entry) => (() => {
11075
+ var _el$225 = _tmpl$46(), _el$226 = _el$225.firstChild, _el$227 = _el$226.firstChild, _el$228 = _el$227.nextSibling, _el$229 = _el$228.firstChild, _el$230 = _el$226.nextSibling;
11076
+ insert(_el$227, () => entry.title);
11077
+ insert(_el$228, () => entry.username, _el$229);
11078
+ insert(_el$228, () => entry.domain, null);
11079
+ insert(_el$228, createComponent(Show, {
11080
+ get when() {
11081
+ return memo(() => !!entry.category)() && entry.category !== "login";
11082
+ },
11083
+ get children() {
11084
+ return [" ", "· ", memo(() => entry.category)];
11085
+ }
11086
+ }), null);
11087
+ insert(_el$228, createComponent(Show, {
11088
+ get when() {
11089
+ return entry.useCount > 0;
11090
+ },
11091
+ get children() {
11092
+ return [" ", "· Used ", memo(() => entry.useCount), "x"];
11093
+ }
11094
+ }), null);
11095
+ _el$230.$$click = () => handleHumanRemove(entry.id);
11096
+ return _el$225;
11097
+ })()
11098
+ }));
11099
+ return _el$113;
11100
+ }
11101
+ }), createComponent(Show, {
11102
+ get when() {
11103
+ return !humanAdding();
11104
+ },
11105
+ get children() {
11106
+ var _el$114 = _tmpl$20();
11107
+ _el$114.$$click = () => {
11108
+ setHumanAdding(true);
11109
+ setHumanMessage(null);
11110
+ };
11111
+ return _el$114;
11112
+ }
11113
+ }), createComponent(Show, {
11114
+ get when() {
11115
+ return humanAdding();
11116
+ },
11117
+ get children() {
11118
+ var _el$115 = _tmpl$21(), _el$116 = _el$115.firstChild, _el$117 = _el$116.nextSibling, _el$118 = _el$117.nextSibling, _el$119 = _el$118.nextSibling, _el$120 = _el$119.nextSibling, _el$121 = _el$120.nextSibling, _el$122 = _el$121.nextSibling, _el$123 = _el$122.firstChild, _el$124 = _el$123.nextSibling;
11119
+ _el$116.$$input = (e) => setHumanNewTitle(e.currentTarget.value);
11120
+ setAttribute(_el$116, "spellcheck", false);
11121
+ _el$117.$$input = (e) => setHumanNewUrl(e.currentTarget.value);
11122
+ setAttribute(_el$117, "spellcheck", false);
11123
+ _el$118.$$input = (e) => setHumanNewUsername(e.currentTarget.value);
11124
+ setAttribute(_el$118, "spellcheck", false);
11125
+ _el$119.$$input = (e) => setHumanNewPassword(e.currentTarget.value);
11126
+ _el$120.addEventListener("change", (e) => setHumanNewCategory(e.currentTarget.value));
11127
+ _el$121.$$input = (e) => setHumanNewNotes(e.currentTarget.value);
11128
+ setAttribute(_el$121, "spellcheck", false);
11129
+ _el$123.$$click = handleHumanAdd;
11130
+ _el$124.$$click = () => {
11131
+ setHumanAdding(false);
11132
+ setHumanNewTitle("");
11133
+ setHumanNewUrl("");
11134
+ setHumanNewUsername("");
11135
+ setHumanNewPassword("");
11136
+ setHumanNewNotes("");
11137
+ setHumanNewCategory("login");
11138
+ };
11139
+ createRenderEffect(() => _el$116.value = humanNewTitle());
11140
+ createRenderEffect(() => _el$117.value = humanNewUrl());
11141
+ createRenderEffect(() => _el$118.value = humanNewUsername());
11142
+ createRenderEffect(() => _el$119.value = humanNewPassword());
11143
+ createRenderEffect(() => _el$120.value = humanNewCategory());
11144
+ createRenderEffect(() => _el$121.value = humanNewNotes());
11145
+ return _el$115;
11146
+ }
11147
+ }), createComponent(Show, {
11148
+ get when() {
11149
+ return humanMessage();
11150
+ },
11151
+ children: (msg) => (() => {
11152
+ var _el$231 = _tmpl$42();
11153
+ insert(_el$231, () => msg().text);
11154
+ createRenderEffect((_p$) => {
11155
+ var _v$17 = !!(msg().kind === "success"), _v$18 = !!(msg().kind === "error");
11156
+ _v$17 !== _p$.e && _el$231.classList.toggle("success", _p$.e = _v$17);
11157
+ _v$18 !== _p$.t && _el$231.classList.toggle("error", _p$.t = _v$18);
11158
+ return _p$;
11159
+ }, {
11160
+ e: void 0,
11161
+ t: void 0
11162
+ });
11163
+ return _el$231;
11164
+ })()
11165
+ })];
11166
+ }
11167
+ }), null);
11168
+ insert(_el$126, createComponent(Show, {
10671
11169
  get when() {
10672
11170
  return autofillProfiles().length > 0;
10673
11171
  },
10674
11172
  get children() {
10675
- var _el$111 = _tmpl$5$1();
10676
- insert(_el$111, createComponent(For, {
11173
+ var _el$129 = _tmpl$5$2();
11174
+ insert(_el$129, createComponent(For, {
10677
11175
  get each() {
10678
11176
  return autofillProfiles();
10679
11177
  },
10680
11178
  children: (profile) => (() => {
10681
- var _el$206 = _tmpl$42(), _el$207 = _el$206.firstChild, _el$208 = _el$207.firstChild, _el$209 = _el$208.nextSibling, _el$210 = _el$207.nextSibling, _el$211 = _el$210.firstChild, _el$212 = _el$211.nextSibling;
10682
- insert(_el$208, () => profile.label);
10683
- insert(_el$209, () => profile.firstName, null);
10684
- insert(_el$209, (() => {
11179
+ var _el$232 = _tmpl$47(), _el$233 = _el$232.firstChild, _el$234 = _el$233.firstChild, _el$235 = _el$234.nextSibling, _el$236 = _el$233.nextSibling, _el$237 = _el$236.firstChild, _el$238 = _el$237.nextSibling;
11180
+ insert(_el$234, () => profile.label);
11181
+ insert(_el$235, () => profile.firstName, null);
11182
+ insert(_el$235, (() => {
10685
11183
  var _c$2 = memo(() => !!profile.lastName);
10686
11184
  return () => _c$2() ? ` ${profile.lastName}` : "";
10687
11185
  })(), null);
10688
- insert(_el$209, (() => {
11186
+ insert(_el$235, (() => {
10689
11187
  var _c$3 = memo(() => !!profile.email);
10690
11188
  return () => _c$3() ? ` · ${profile.email}` : "";
10691
11189
  })(), null);
10692
- _el$211.$$click = () => handleAutofillFill(profile.id);
10693
- _el$212.$$click = () => handleAutofillRemove(profile.id);
10694
- return _el$206;
11190
+ _el$237.$$click = () => handleAutofillFill(profile.id);
11191
+ _el$238.$$click = () => handleAutofillRemove(profile.id);
11192
+ return _el$232;
10695
11193
  })()
10696
11194
  }));
10697
- return _el$111;
11195
+ return _el$129;
10698
11196
  }
10699
11197
  }), null);
10700
- insert(_el$108, createComponent(Show, {
11198
+ insert(_el$126, createComponent(Show, {
10701
11199
  get when() {
10702
11200
  return !autofillAdding();
10703
11201
  },
10704
11202
  get children() {
10705
- var _el$112 = _tmpl$19();
10706
- _el$112.$$click = () => {
11203
+ var _el$130 = _tmpl$22();
11204
+ _el$130.$$click = () => {
10707
11205
  setAutofillAdding(true);
10708
11206
  setAutofillMessage(null);
10709
11207
  };
10710
- return _el$112;
11208
+ return _el$130;
10711
11209
  }
10712
11210
  }), null);
10713
- insert(_el$108, createComponent(Show, {
11211
+ insert(_el$126, createComponent(Show, {
10714
11212
  get when() {
10715
11213
  return autofillAdding();
10716
11214
  },
10717
11215
  get children() {
10718
- var _el$113 = _tmpl$20(), _el$114 = _el$113.firstChild, _el$115 = _el$114.nextSibling, _el$116 = _el$115.firstChild, _el$117 = _el$116.nextSibling, _el$118 = _el$115.nextSibling, _el$119 = _el$118.firstChild, _el$120 = _el$119.nextSibling, _el$121 = _el$118.nextSibling, _el$122 = _el$121.nextSibling, _el$123 = _el$122.nextSibling, _el$124 = _el$123.nextSibling, _el$125 = _el$124.firstChild, _el$126 = _el$125.nextSibling, _el$127 = _el$126.nextSibling, _el$128 = _el$124.nextSibling, _el$129 = _el$128.nextSibling, _el$130 = _el$129.firstChild, _el$131 = _el$130.nextSibling;
10719
- _el$114.$$input = (e) => setAutofillLabel(e.currentTarget.value);
10720
- setAttribute(_el$114, "spellcheck", false);
10721
- _el$116.$$input = (e) => setAutofillFirstName(e.currentTarget.value);
10722
- _el$117.$$input = (e) => setAutofillLastName(e.currentTarget.value);
10723
- _el$119.$$input = (e) => setAutofillEmail(e.currentTarget.value);
10724
- setAttribute(_el$119, "spellcheck", false);
10725
- _el$120.$$input = (e) => setAutofillPhone(e.currentTarget.value);
10726
- _el$121.$$input = (e) => setAutofillOrg(e.currentTarget.value);
10727
- _el$122.$$input = (e) => setAutofillAddr1(e.currentTarget.value);
10728
- _el$123.$$input = (e) => setAutofillAddr2(e.currentTarget.value);
10729
- _el$125.$$input = (e) => setAutofillCity(e.currentTarget.value);
10730
- _el$126.$$input = (e) => setAutofillState(e.currentTarget.value);
10731
- _el$127.$$input = (e) => setAutofillZip(e.currentTarget.value);
10732
- _el$128.$$input = (e) => setAutofillCountry(e.currentTarget.value);
10733
- _el$130.$$click = handleAutofillAdd;
10734
- _el$131.$$click = () => {
11216
+ var _el$131 = _tmpl$23(), _el$132 = _el$131.firstChild, _el$133 = _el$132.nextSibling, _el$134 = _el$133.firstChild, _el$135 = _el$134.nextSibling, _el$136 = _el$133.nextSibling, _el$137 = _el$136.firstChild, _el$138 = _el$137.nextSibling, _el$139 = _el$136.nextSibling, _el$140 = _el$139.nextSibling, _el$141 = _el$140.nextSibling, _el$142 = _el$141.nextSibling, _el$143 = _el$142.firstChild, _el$144 = _el$143.nextSibling, _el$145 = _el$144.nextSibling, _el$146 = _el$142.nextSibling, _el$147 = _el$146.nextSibling, _el$148 = _el$147.firstChild, _el$149 = _el$148.nextSibling;
11217
+ _el$132.$$input = (e) => setAutofillLabel(e.currentTarget.value);
11218
+ setAttribute(_el$132, "spellcheck", false);
11219
+ _el$134.$$input = (e) => setAutofillFirstName(e.currentTarget.value);
11220
+ _el$135.$$input = (e) => setAutofillLastName(e.currentTarget.value);
11221
+ _el$137.$$input = (e) => setAutofillEmail(e.currentTarget.value);
11222
+ setAttribute(_el$137, "spellcheck", false);
11223
+ _el$138.$$input = (e) => setAutofillPhone(e.currentTarget.value);
11224
+ _el$139.$$input = (e) => setAutofillOrg(e.currentTarget.value);
11225
+ _el$140.$$input = (e) => setAutofillAddr1(e.currentTarget.value);
11226
+ _el$141.$$input = (e) => setAutofillAddr2(e.currentTarget.value);
11227
+ _el$143.$$input = (e) => setAutofillCity(e.currentTarget.value);
11228
+ _el$144.$$input = (e) => setAutofillState(e.currentTarget.value);
11229
+ _el$145.$$input = (e) => setAutofillZip(e.currentTarget.value);
11230
+ _el$146.$$input = (e) => setAutofillCountry(e.currentTarget.value);
11231
+ _el$148.$$click = handleAutofillAdd;
11232
+ _el$149.$$click = () => {
10735
11233
  setAutofillAdding(false);
10736
11234
  setAutofillLabel("");
10737
11235
  setAutofillFirstName("");
@@ -10746,89 +11244,89 @@ const Settings = () => {
10746
11244
  setAutofillZip("");
10747
11245
  setAutofillCountry("");
10748
11246
  };
10749
- createRenderEffect(() => _el$114.value = autofillLabel());
10750
- createRenderEffect(() => _el$116.value = autofillFirstName());
10751
- createRenderEffect(() => _el$117.value = autofillLastName());
10752
- createRenderEffect(() => _el$119.value = autofillEmail());
10753
- createRenderEffect(() => _el$120.value = autofillPhone());
10754
- createRenderEffect(() => _el$121.value = autofillOrg());
10755
- createRenderEffect(() => _el$122.value = autofillAddr1());
10756
- createRenderEffect(() => _el$123.value = autofillAddr2());
10757
- createRenderEffect(() => _el$125.value = autofillCity());
10758
- createRenderEffect(() => _el$126.value = autofillState());
10759
- createRenderEffect(() => _el$127.value = autofillZip());
10760
- createRenderEffect(() => _el$128.value = autofillCountry());
10761
- return _el$113;
11247
+ createRenderEffect(() => _el$132.value = autofillLabel());
11248
+ createRenderEffect(() => _el$134.value = autofillFirstName());
11249
+ createRenderEffect(() => _el$135.value = autofillLastName());
11250
+ createRenderEffect(() => _el$137.value = autofillEmail());
11251
+ createRenderEffect(() => _el$138.value = autofillPhone());
11252
+ createRenderEffect(() => _el$139.value = autofillOrg());
11253
+ createRenderEffect(() => _el$140.value = autofillAddr1());
11254
+ createRenderEffect(() => _el$141.value = autofillAddr2());
11255
+ createRenderEffect(() => _el$143.value = autofillCity());
11256
+ createRenderEffect(() => _el$144.value = autofillState());
11257
+ createRenderEffect(() => _el$145.value = autofillZip());
11258
+ createRenderEffect(() => _el$146.value = autofillCountry());
11259
+ return _el$131;
10762
11260
  }
10763
11261
  }), null);
10764
- insert(_el$108, createComponent(Show, {
11262
+ insert(_el$126, createComponent(Show, {
10765
11263
  get when() {
10766
11264
  return autofillMessage();
10767
11265
  },
10768
11266
  children: (msg) => (() => {
10769
- var _el$213 = _tmpl$39();
10770
- insert(_el$213, () => msg().text);
11267
+ var _el$239 = _tmpl$42();
11268
+ insert(_el$239, () => msg().text);
10771
11269
  createRenderEffect((_p$) => {
10772
- var _v$17 = !!(msg().kind === "success"), _v$18 = !!(msg().kind === "error");
10773
- _v$17 !== _p$.e && _el$213.classList.toggle("success", _p$.e = _v$17);
10774
- _v$18 !== _p$.t && _el$213.classList.toggle("error", _p$.t = _v$18);
11270
+ var _v$19 = !!(msg().kind === "success"), _v$20 = !!(msg().kind === "error");
11271
+ _v$19 !== _p$.e && _el$239.classList.toggle("success", _p$.e = _v$19);
11272
+ _v$20 !== _p$.t && _el$239.classList.toggle("error", _p$.t = _v$20);
10775
11273
  return _p$;
10776
11274
  }, {
10777
11275
  e: void 0,
10778
11276
  t: void 0
10779
11277
  });
10780
- return _el$213;
11278
+ return _el$239;
10781
11279
  })()
10782
11280
  }), null);
10783
- _el$135.$$click = () => setTelemetryEnabled(!telemetryEnabled());
10784
- _el$139.addEventListener("change", (e) => setTheme(e.currentTarget.value));
10785
- _el$142.addEventListener("change", (e) => setDomainMode(e.currentTarget.value));
10786
- insert(_el$140, createComponent(Show, {
11281
+ _el$153.$$click = () => setTelemetryEnabled(!telemetryEnabled());
11282
+ _el$157.addEventListener("change", (e) => setTheme(e.currentTarget.value));
11283
+ _el$160.addEventListener("change", (e) => setDomainMode(e.currentTarget.value));
11284
+ insert(_el$158, createComponent(Show, {
10787
11285
  get when() {
10788
11286
  return domainMode() !== "none";
10789
11287
  },
10790
11288
  get children() {
10791
11289
  return [(() => {
10792
- var _el$143 = _tmpl$21();
10793
- _el$143.$$input = (e) => setDomainList(e.currentTarget.value);
10794
- setAttribute(_el$143, "spellcheck", false);
10795
- createRenderEffect(() => setAttribute(_el$143, "placeholder", domainMode() === "allowlist" ? "example.com\napi.example.com" : "ads.example.com\ntracker.io"));
10796
- createRenderEffect(() => _el$143.value = domainList());
10797
- return _el$143;
11290
+ var _el$161 = _tmpl$24();
11291
+ _el$161.$$input = (e) => setDomainList(e.currentTarget.value);
11292
+ setAttribute(_el$161, "spellcheck", false);
11293
+ createRenderEffect(() => setAttribute(_el$161, "placeholder", domainMode() === "allowlist" ? "example.com\napi.example.com" : "ads.example.com\ntracker.io"));
11294
+ createRenderEffect(() => _el$161.value = domainList());
11295
+ return _el$161;
10798
11296
  })(), (() => {
10799
- var _el$144 = _tmpl$22();
10800
- insert(_el$144, () => domainMode() === "allowlist" ? "One domain per line. Subdomains of listed domains are also allowed." : "One domain per line. Subdomains of listed domains are also blocked.");
10801
- return _el$144;
11297
+ var _el$162 = _tmpl$25();
11298
+ insert(_el$162, () => domainMode() === "allowlist" ? "One domain per line. Subdomains of listed domains are also allowed." : "One domain per line. Subdomains of listed domains are also blocked.");
11299
+ return _el$162;
10802
11300
  })()];
10803
11301
  }
10804
11302
  }), null);
10805
- insert(_el$140, createComponent(Show, {
11303
+ insert(_el$158, createComponent(Show, {
10806
11304
  get when() {
10807
11305
  return domainMode() === "none";
10808
11306
  },
10809
11307
  get children() {
10810
- return _tmpl$23();
11308
+ return _tmpl$26();
10811
11309
  }
10812
11310
  }), null);
10813
- _el$147.$$click = handleSave;
10814
- addEventListener(_el$148, "click", closeSettings, true);
11311
+ _el$165.$$click = handleSave;
11312
+ addEventListener(_el$166, "click", closeSettings, true);
10815
11313
  insert(_el$2, createComponent(Show, {
10816
11314
  get when() {
10817
11315
  return status();
10818
11316
  },
10819
11317
  children: (currentStatus) => (() => {
10820
- var _el$214 = _tmpl$39();
10821
- insert(_el$214, () => currentStatus().text);
11318
+ var _el$240 = _tmpl$42();
11319
+ insert(_el$240, () => currentStatus().text);
10822
11320
  createRenderEffect((_p$) => {
10823
- var _v$19 = !!(currentStatus().kind === "success"), _v$20 = !!(currentStatus().kind === "error");
10824
- _v$19 !== _p$.e && _el$214.classList.toggle("success", _p$.e = _v$19);
10825
- _v$20 !== _p$.t && _el$214.classList.toggle("error", _p$.t = _v$20);
11321
+ var _v$21 = !!(currentStatus().kind === "success"), _v$22 = !!(currentStatus().kind === "error");
11322
+ _v$21 !== _p$.e && _el$240.classList.toggle("success", _p$.e = _v$21);
11323
+ _v$22 !== _p$.t && _el$240.classList.toggle("error", _p$.t = _v$22);
10826
11324
  return _p$;
10827
11325
  }, {
10828
11326
  e: void 0,
10829
11327
  t: void 0
10830
11328
  });
10831
- return _el$214;
11329
+ return _el$240;
10832
11330
  })()
10833
11331
  }), null);
10834
11332
  createRenderEffect((_p$) => {
@@ -10841,8 +11339,8 @@ const Settings = () => {
10841
11339
  _v$6 !== _p$.n && (_el$53.disabled = _p$.n = _v$6);
10842
11340
  _v$7 !== _p$.s && _el$58.classList.toggle("on", _p$.s = _v$7);
10843
11341
  _v$8 !== _p$.h && setAttribute(_el$58, "aria-checked", _p$.h = _v$8);
10844
- _v$9 !== _p$.r && _el$135.classList.toggle("on", _p$.r = _v$9);
10845
- _v$0 !== _p$.d && setAttribute(_el$135, "aria-checked", _p$.d = _v$0);
11342
+ _v$9 !== _p$.r && _el$153.classList.toggle("on", _p$.r = _v$9);
11343
+ _v$0 !== _p$.d && setAttribute(_el$153, "aria-checked", _p$.d = _v$0);
10846
11344
  return _p$;
10847
11345
  }, {
10848
11346
  e: void 0,
@@ -10863,15 +11361,15 @@ const Settings = () => {
10863
11361
  createRenderEffect(() => _el$37.value = obsidianVaultPath());
10864
11362
  createRenderEffect(() => _el$40.value = agentTranscriptMode());
10865
11363
  createRenderEffect(() => _el$52.value = sessionSaveName());
10866
- createRenderEffect(() => _el$139.value = theme());
10867
- createRenderEffect(() => _el$142.value = domainMode());
11364
+ createRenderEffect(() => _el$157.value = theme());
11365
+ createRenderEffect(() => _el$160.value = domainMode());
10868
11366
  return _el$;
10869
- })(), _tmpl$25()];
11367
+ })(), _tmpl$28()];
10870
11368
  }
10871
11369
  });
10872
11370
  };
10873
11371
  delegateEvents(["click", "keydown", "input"]);
10874
- var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=keyboard-help><div class=keyboard-help-header><h2 class=keyboard-help-title>Keyboard Shortcuts</h2><button class=keyboard-help-close><kbd>Esc</kbd></button></div><div class=keyboard-help-grid>`), _tmpl$2$1 = /* @__PURE__ */ template(`<style>
11372
+ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=keyboard-help><div class=keyboard-help-header><h2 class=keyboard-help-title>Keyboard Shortcuts</h2><button class=keyboard-help-close><kbd>Esc</kbd></button></div><div class=keyboard-help-grid>`), _tmpl$2$2 = /* @__PURE__ */ template(`<style>
10875
11373
  .keyboard-help {
10876
11374
  width: min(380px, calc(100vw - 32px));
10877
11375
  background: var(--bg-elevated);
@@ -10953,7 +11451,7 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
10953
11451
  font-size: 13px;
10954
11452
  color: var(--text-secondary);
10955
11453
  }
10956
- `), _tmpl$3 = /* @__PURE__ */ template(`<div class=keyboard-help-keys>`), _tmpl$4 = /* @__PURE__ */ template(`<div class=keyboard-help-action>`), _tmpl$5 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>/`), _tmpl$6 = /* @__PURE__ */ template(`<kbd>`), _tmpl$7 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>+`);
11454
+ `), _tmpl$3$1 = /* @__PURE__ */ template(`<div class=keyboard-help-keys>`), _tmpl$4$1 = /* @__PURE__ */ template(`<div class=keyboard-help-action>`), _tmpl$5$1 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>/`), _tmpl$6$1 = /* @__PURE__ */ template(`<kbd>`), _tmpl$7$1 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>+`);
10957
11455
  const SHORTCUTS = [{
10958
11456
  keys: "Ctrl+L",
10959
11457
  action: "AI Command Bar",
@@ -11003,6 +11501,14 @@ const SHORTCUTS = [{
11003
11501
  }, {
11004
11502
  keys: "Ctrl+Shift+P",
11005
11503
  action: "Save Page as PDF"
11504
+ }, {
11505
+ keys: "Ctrl+Shift+I",
11506
+ action: "Toggle Picture-in-Picture",
11507
+ privateMode: false
11508
+ }, {
11509
+ keys: "Ctrl+Shift+Delete",
11510
+ action: "Clear Browsing Data",
11511
+ privateMode: false
11006
11512
  }, {
11007
11513
  keys: "Ctrl+,",
11008
11514
  action: "Settings",
@@ -11030,26 +11536,165 @@ const KeyboardHelp = (props) => {
11030
11536
  },
11031
11537
  get children() {
11032
11538
  return [(() => {
11033
- var _el$ = _tmpl$$1(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
11539
+ var _el$ = _tmpl$$2(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
11034
11540
  addEventListener(_el$, "click", props.onClose, true);
11035
11541
  _el$2.$$click = (e) => e.stopPropagation();
11036
11542
  addEventListener(_el$5, "click", props.onClose, true);
11037
11543
  insert(_el$6, () => shortcuts().map((s) => [(() => {
11038
- var _el$8 = _tmpl$3();
11039
- insert(_el$8, () => shortcutParts(s.keys).map((combo, comboIndex) => [comboIndex > 0 && _tmpl$5(), memo(() => combo.map((key, keyIndex) => [keyIndex > 0 && _tmpl$7(), (() => {
11040
- var _el$1 = _tmpl$6();
11544
+ var _el$8 = _tmpl$3$1();
11545
+ insert(_el$8, () => shortcutParts(s.keys).map((combo, comboIndex) => [comboIndex > 0 && _tmpl$5$1(), memo(() => combo.map((key, keyIndex) => [keyIndex > 0 && _tmpl$7$1(), (() => {
11546
+ var _el$1 = _tmpl$6$1();
11041
11547
  insert(_el$1, key);
11042
11548
  return _el$1;
11043
11549
  })()]))]));
11044
11550
  return _el$8;
11045
11551
  })(), (() => {
11046
- var _el$9 = _tmpl$4();
11552
+ var _el$9 = _tmpl$4$1();
11047
11553
  insert(_el$9, () => s.action);
11048
11554
  return _el$9;
11049
11555
  })()]));
11050
11556
  createRenderEffect(() => _el$.classList.toggle("closing", !!closing()));
11051
11557
  return _el$;
11052
- })(), _tmpl$2$1()];
11558
+ })(), _tmpl$2$2()];
11559
+ }
11560
+ });
11561
+ };
11562
+ delegateEvents(["click"]);
11563
+ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=clear-data-header><h3>Clear browsing data</h3><button class=clear-data-close>`), _tmpl$2$1 = /* @__PURE__ */ template(`<div class=clear-data-range><label>Time range</label><select class=clear-data-select>`), _tmpl$3 = /* @__PURE__ */ template(`<div class=clear-data-checks><label class=clear-data-check><input type=checkbox><span>Cached images and files</span></label><label class=clear-data-check><input type=checkbox><span>Cookies and other site data</span></label><label class=clear-data-check><input type=checkbox><span>Browsing history</span></label><label class=clear-data-check><input type=checkbox><span>Local storage`), _tmpl$4 = /* @__PURE__ */ template(`<div class=clear-data-error>`), _tmpl$5 = /* @__PURE__ */ template(`<div class=clear-data-actions><button class=clear-data-cancel>Cancel</button><button class=clear-data-confirm>`), _tmpl$6 = /* @__PURE__ */ template(`<div class=clear-data-overlay><div class=clear-data-dialog>`), _tmpl$7 = /* @__PURE__ */ template(`<div class=clear-data-done><span>Browsing data cleared`), _tmpl$8 = /* @__PURE__ */ template(`<option>`);
11564
+ const TIME_RANGES = [{
11565
+ value: "hour",
11566
+ label: "Last hour"
11567
+ }, {
11568
+ value: "day",
11569
+ label: "Last 24 hours"
11570
+ }, {
11571
+ value: "week",
11572
+ label: "Last 7 days"
11573
+ }, {
11574
+ value: "month",
11575
+ label: "Last 30 days"
11576
+ }, {
11577
+ value: "all",
11578
+ label: "All time"
11579
+ }];
11580
+ const ClearBrowsingData = (props) => {
11581
+ const [cache, setCache] = createSignal(true);
11582
+ const [cookies, setCookies] = createSignal(false);
11583
+ const [history, setHistory] = createSignal(true);
11584
+ const [localStorage2, setLocalStorage] = createSignal(false);
11585
+ const [timeRange, setTimeRange] = createSignal("all");
11586
+ const [clearing, setClearing] = createSignal(false);
11587
+ const [done, setDone] = createSignal(false);
11588
+ const [error, setError] = createSignal("");
11589
+ const handleClear = async () => {
11590
+ setClearing(true);
11591
+ setError("");
11592
+ try {
11593
+ await window.vessel.browsingData.clear({
11594
+ cache: cache(),
11595
+ cookies: cookies(),
11596
+ history: history(),
11597
+ localStorage: localStorage2(),
11598
+ timeRange: timeRange()
11599
+ });
11600
+ setDone(true);
11601
+ setTimeout(() => {
11602
+ props.onClose();
11603
+ setDone(false);
11604
+ }, 1500);
11605
+ } catch {
11606
+ setError("Could not clear browsing data.");
11607
+ } finally {
11608
+ setClearing(false);
11609
+ }
11610
+ };
11611
+ const reset = () => {
11612
+ setCache(true);
11613
+ setCookies(false);
11614
+ setHistory(true);
11615
+ setLocalStorage(false);
11616
+ setTimeRange("all");
11617
+ setDone(false);
11618
+ setError("");
11619
+ };
11620
+ return createComponent(Show, {
11621
+ get when() {
11622
+ return props.open;
11623
+ },
11624
+ get children() {
11625
+ var _el$ = _tmpl$6(), _el$2 = _el$.firstChild;
11626
+ addEventListener(_el$, "click", props.onClose, true);
11627
+ _el$2.$$click = (e) => e.stopPropagation();
11628
+ insert(_el$2, createComponent(Show, {
11629
+ get when() {
11630
+ return !done();
11631
+ },
11632
+ get fallback() {
11633
+ return (() => {
11634
+ var _el$20 = _tmpl$7(), _el$21 = _el$20.firstChild;
11635
+ insert(_el$20, createComponent(check_default, {
11636
+ size: 20,
11637
+ "stroke-width": 2.5
11638
+ }), _el$21);
11639
+ return _el$20;
11640
+ })();
11641
+ },
11642
+ get children() {
11643
+ return [(() => {
11644
+ var _el$3 = _tmpl$$1(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling;
11645
+ _el$5.$$click = () => {
11646
+ reset();
11647
+ props.onClose();
11648
+ };
11649
+ insert(_el$5, createComponent(x_default, {
11650
+ size: 14
11651
+ }));
11652
+ return _el$3;
11653
+ })(), (() => {
11654
+ var _el$6 = _tmpl$2$1(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
11655
+ _el$8.addEventListener("change", (e) => setTimeRange(e.currentTarget.value));
11656
+ insert(_el$8, () => TIME_RANGES.map((r) => (() => {
11657
+ var _el$22 = _tmpl$8();
11658
+ insert(_el$22, () => r.label);
11659
+ createRenderEffect(() => _el$22.value = r.value);
11660
+ return _el$22;
11661
+ })()));
11662
+ createRenderEffect(() => _el$8.value = timeRange());
11663
+ return _el$6;
11664
+ })(), (() => {
11665
+ var _el$9 = _tmpl$3(), _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$0.nextSibling, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$12.nextSibling, _el$15 = _el$14.firstChild;
11666
+ _el$1.addEventListener("change", (e) => setCache(e.currentTarget.checked));
11667
+ _el$11.addEventListener("change", (e) => setCookies(e.currentTarget.checked));
11668
+ _el$13.addEventListener("change", (e) => setHistory(e.currentTarget.checked));
11669
+ _el$15.addEventListener("change", (e) => setLocalStorage(e.currentTarget.checked));
11670
+ createRenderEffect(() => _el$1.checked = cache());
11671
+ createRenderEffect(() => _el$11.checked = cookies());
11672
+ createRenderEffect(() => _el$13.checked = history());
11673
+ createRenderEffect(() => _el$15.checked = localStorage2());
11674
+ return _el$9;
11675
+ })(), createComponent(Show, {
11676
+ get when() {
11677
+ return error();
11678
+ },
11679
+ get children() {
11680
+ var _el$16 = _tmpl$4();
11681
+ insert(_el$16, error);
11682
+ return _el$16;
11683
+ }
11684
+ }), (() => {
11685
+ var _el$17 = _tmpl$5(), _el$18 = _el$17.firstChild, _el$19 = _el$18.nextSibling;
11686
+ _el$18.$$click = () => {
11687
+ reset();
11688
+ props.onClose();
11689
+ };
11690
+ _el$19.$$click = handleClear;
11691
+ insert(_el$19, () => clearing() ? "Clearing..." : "Clear data");
11692
+ createRenderEffect(() => _el$19.disabled = clearing() || !cache() && !cookies() && !history() && !localStorage2());
11693
+ return _el$17;
11694
+ })()];
11695
+ }
11696
+ }));
11697
+ return _el$;
11053
11698
  }
11054
11699
  });
11055
11700
  };
@@ -11103,6 +11748,16 @@ function setupKeybindings(handlers) {
11103
11748
  handlers.printToPdf?.();
11104
11749
  return;
11105
11750
  }
11751
+ if (ctrl && key === "i" && e.shiftKey) {
11752
+ e.preventDefault();
11753
+ handlers.togglePip?.();
11754
+ return;
11755
+ }
11756
+ if (ctrl && e.shiftKey && e.key === "Delete") {
11757
+ e.preventDefault();
11758
+ handlers.clearBrowsingData?.();
11759
+ return;
11760
+ }
11106
11761
  if (ctrl && key === "p" && !e.shiftKey) {
11107
11762
  e.preventDefault();
11108
11763
  handlers.print?.();
@@ -11182,6 +11837,7 @@ const App = () => {
11182
11837
  } = useTabs();
11183
11838
  const [highlightToast, setHighlightToast] = createSignal(null);
11184
11839
  const [keyboardHelpOpen, setKeyboardHelpOpen] = createSignal(false);
11840
+ const [clearDataOpen, setClearDataOpen] = createSignal(false);
11185
11841
  const loadingPresence = useAnimatedPresence(() => !!activeTab()?.isLoading, 300);
11186
11842
  const showHighlightResult = (result) => {
11187
11843
  if (result.success && result.text) {
@@ -11220,6 +11876,7 @@ const App = () => {
11220
11876
  applyTheme(s.theme ?? "dark");
11221
11877
  };
11222
11878
  onMount(() => {
11879
+ initSecurityStore();
11223
11880
  void loadAndApplyTheme();
11224
11881
  window.vessel.ui.rendererReady(view);
11225
11882
  const cleanupSettings = window.vessel.settings.onUpdate((settings) => {
@@ -11266,12 +11923,20 @@ const App = () => {
11266
11923
  toggleDevTools: isChromeOnlyWindow ? void 0 : () => {
11267
11924
  window.vessel.devtoolsPanel.toggle();
11268
11925
  },
11269
- toggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v)
11926
+ toggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v),
11927
+ togglePip: isChromeOnlyWindow ? void 0 : () => {
11928
+ void window.vessel.pip.toggle();
11929
+ },
11930
+ clearBrowsingData: isChromeOnlyWindow ? void 0 : () => {
11931
+ setClearDataOpen(true);
11932
+ }
11270
11933
  });
11271
11934
  const cleanupCapture = window.vessel.highlights.onCaptureResult(showHighlightResult);
11935
+ const cleanupClearData = window.vessel.browsingData.onOpenDialog(() => setClearDataOpen(true));
11272
11936
  onCleanup(() => {
11273
11937
  cleanupKeys();
11274
11938
  cleanupCapture();
11939
+ cleanupClearData();
11275
11940
  });
11276
11941
  });
11277
11942
  if (view === "sidebar") {
@@ -11305,7 +11970,9 @@ const App = () => {
11305
11970
  }), _el$2);
11306
11971
  insert(_el$2, createComponent(TitleBar, {}), null);
11307
11972
  insert(_el$2, createComponent(TabBar, {}), null);
11308
- insert(_el$2, createComponent(AddressBar, {}), null);
11973
+ insert(_el$2, createComponent(AddressBar, {
11974
+ onClearData: () => setClearDataOpen(true)
11975
+ }), null);
11309
11976
  insert(_el$2, createComponent(Show, {
11310
11977
  get when() {
11311
11978
  return loadingPresence.visible();
@@ -11322,6 +11989,12 @@ const App = () => {
11322
11989
  return [createComponent(CommandBar, {}), createComponent(Settings, {})];
11323
11990
  }
11324
11991
  }), null);
11992
+ insert(_el$, createComponent(ClearBrowsingData, {
11993
+ get open() {
11994
+ return clearDataOpen();
11995
+ },
11996
+ onClose: () => setClearDataOpen(false)
11997
+ }), null);
11325
11998
  insert(_el$, createComponent(KeyboardHelp, {
11326
11999
  get open() {
11327
12000
  return keyboardHelpOpen();