@quanta-intellect/vessel-browser 0.1.121 → 0.1.124

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.
@@ -1474,7 +1474,7 @@ function Dynamic(props) {
1474
1474
  const [, others] = splitProps(props, ["component"]);
1475
1475
  return createDynamic(() => props.component, others);
1476
1476
  }
1477
- var _tmpl$$s = /* @__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=Downloads>↓</button><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>`);
1477
+ var _tmpl$$t = /* @__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=Downloads>↓</button><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>`);
1478
1478
  const TitleBar = (props) => {
1479
1479
  const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
1480
1480
  const [mcpStatus, setMcpStatus] = createSignal("starting");
@@ -1507,7 +1507,7 @@ const TitleBar = (props) => {
1507
1507
  window.vessel.ui.setSettingsVisibility(true);
1508
1508
  };
1509
1509
  return (() => {
1510
- var _el$ = _tmpl$$s(), _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, _el$9 = _el$8.nextSibling;
1510
+ var _el$ = _tmpl$$t(), _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, _el$9 = _el$8.nextSibling;
1511
1511
  _el$4.$$click = handleMcpClick;
1512
1512
  _el$6.$$click = () => props.onOpenDownloads?.();
1513
1513
  _el$7.$$click = () => window.vessel.window.minimize();
@@ -1549,7 +1549,7 @@ var LucideContext = createContext({
1549
1549
  absoluteStrokeWidth: false,
1550
1550
  class: ""
1551
1551
  });
1552
- var _tmpl$$r = /* @__PURE__ */ template(`<svg>`);
1552
+ var _tmpl$$s = /* @__PURE__ */ template(`<svg>`);
1553
1553
  var hasA11yProp = (props) => {
1554
1554
  for (const prop in props) {
1555
1555
  if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
@@ -1571,7 +1571,7 @@ var Icon = (props) => {
1571
1571
  const [localProps, rest] = splitProps(props, ["color", "size", "strokeWidth", "children", "class", "name", "iconNode", "absoluteStrokeWidth"]);
1572
1572
  const globalProps = useContext(LucideContext);
1573
1573
  return (() => {
1574
- var _el$ = _tmpl$$r();
1574
+ var _el$ = _tmpl$$s();
1575
1575
  spread(_el$, mergeProps(defaultAttributes_default, {
1576
1576
  get width() {
1577
1577
  return localProps.size ?? globalProps.size ?? defaultAttributes_default.width;
@@ -1606,7 +1606,29 @@ var Icon = (props) => {
1606
1606
  })();
1607
1607
  };
1608
1608
  var Icon_default = Icon;
1609
- var iconNode$m = [["path", {
1609
+ var iconNode$A = [["rect", {
1610
+ x: "2",
1611
+ y: "4",
1612
+ width: "20",
1613
+ height: "16",
1614
+ rx: "2",
1615
+ key: "izxlao"
1616
+ }], ["path", {
1617
+ d: "M10 4v4",
1618
+ key: "pp8u80"
1619
+ }], ["path", {
1620
+ d: "M2 8h20",
1621
+ key: "d11cs7"
1622
+ }], ["path", {
1623
+ d: "M6 4v4",
1624
+ key: "1svtjw"
1625
+ }]];
1626
+ var AppWindow = (props) => createComponent(Icon_default, mergeProps(props, {
1627
+ iconNode: iconNode$A,
1628
+ name: "app-window"
1629
+ }));
1630
+ var app_window_default = AppWindow;
1631
+ var iconNode$z = [["path", {
1610
1632
  d: "M12 7v14",
1611
1633
  key: "1akyts"
1612
1634
  }], ["path", {
@@ -1614,20 +1636,65 @@ var iconNode$m = [["path", {
1614
1636
  key: "ruj8y"
1615
1637
  }]];
1616
1638
  var BookOpen = (props) => createComponent(Icon_default, mergeProps(props, {
1617
- iconNode: iconNode$m,
1639
+ iconNode: iconNode$z,
1618
1640
  name: "book-open"
1619
1641
  }));
1620
1642
  var book_open_default = BookOpen;
1621
- var iconNode$l = [["path", {
1643
+ var iconNode$y = [["path", {
1644
+ d: "M12 8V4H8",
1645
+ key: "hb8ula"
1646
+ }], ["rect", {
1647
+ width: "16",
1648
+ height: "12",
1649
+ x: "4",
1650
+ y: "8",
1651
+ rx: "2",
1652
+ key: "enze0r"
1653
+ }], ["path", {
1654
+ d: "M2 14h2",
1655
+ key: "vft8re"
1656
+ }], ["path", {
1657
+ d: "M20 14h2",
1658
+ key: "4cs60a"
1659
+ }], ["path", {
1660
+ d: "M15 13v2",
1661
+ key: "1xurst"
1662
+ }], ["path", {
1663
+ d: "M9 13v2",
1664
+ key: "rq6x2g"
1665
+ }]];
1666
+ var Bot = (props) => createComponent(Icon_default, mergeProps(props, {
1667
+ iconNode: iconNode$y,
1668
+ name: "bot"
1669
+ }));
1670
+ var bot_default = Bot;
1671
+ var iconNode$x = [["path", {
1622
1672
  d: "M20 6 9 17l-5-5",
1623
1673
  key: "1gmf2c"
1624
1674
  }]];
1625
1675
  var Check = (props) => createComponent(Icon_default, mergeProps(props, {
1626
- iconNode: iconNode$l,
1676
+ iconNode: iconNode$x,
1627
1677
  name: "check"
1628
1678
  }));
1629
1679
  var check_default = Check;
1630
- var iconNode$k = [["rect", {
1680
+ var iconNode$w = [["circle", {
1681
+ cx: "12",
1682
+ cy: "12",
1683
+ r: "10",
1684
+ key: "1mglay"
1685
+ }], ["path", {
1686
+ d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",
1687
+ key: "1u773s"
1688
+ }], ["path", {
1689
+ d: "M12 17h.01",
1690
+ key: "p32p05"
1691
+ }]];
1692
+ var CircleQuestionMark = (props) => createComponent(Icon_default, mergeProps(props, {
1693
+ iconNode: iconNode$w,
1694
+ name: "circle-question-mark"
1695
+ }));
1696
+ var circle_question_mark_default = CircleQuestionMark;
1697
+ var iconNode$v = [["rect", {
1631
1698
  width: "8",
1632
1699
  height: "4",
1633
1700
  x: "8",
@@ -1652,11 +1719,11 @@ var iconNode$k = [["rect", {
1652
1719
  key: "18s6g9"
1653
1720
  }]];
1654
1721
  var ClipboardList = (props) => createComponent(Icon_default, mergeProps(props, {
1655
- iconNode: iconNode$k,
1722
+ iconNode: iconNode$v,
1656
1723
  name: "clipboard-list"
1657
1724
  }));
1658
1725
  var clipboard_list_default = ClipboardList;
1659
- var iconNode$j = [["circle", {
1726
+ var iconNode$u = [["circle", {
1660
1727
  cx: "12",
1661
1728
  cy: "12",
1662
1729
  r: "10",
@@ -1666,11 +1733,11 @@ var iconNode$j = [["circle", {
1666
1733
  key: "mmk7yg"
1667
1734
  }]];
1668
1735
  var Clock = (props) => createComponent(Icon_default, mergeProps(props, {
1669
- iconNode: iconNode$j,
1736
+ iconNode: iconNode$u,
1670
1737
  name: "clock"
1671
1738
  }));
1672
1739
  var clock_default = Clock;
1673
- var iconNode$i = [["path", {
1740
+ var iconNode$t = [["path", {
1674
1741
  d: "M12 20v2",
1675
1742
  key: "1lh1kg"
1676
1743
  }], ["path", {
@@ -1722,11 +1789,11 @@ var iconNode$i = [["path", {
1722
1789
  key: "z9xiuo"
1723
1790
  }]];
1724
1791
  var Cpu = (props) => createComponent(Icon_default, mergeProps(props, {
1725
- iconNode: iconNode$i,
1792
+ iconNode: iconNode$t,
1726
1793
  name: "cpu"
1727
1794
  }));
1728
1795
  var cpu_default = Cpu;
1729
- var iconNode$h = [["path", {
1796
+ var iconNode$s = [["path", {
1730
1797
  d: "M12 15V3",
1731
1798
  key: "m9g1x1"
1732
1799
  }], ["path", {
@@ -1737,11 +1804,23 @@ var iconNode$h = [["path", {
1737
1804
  key: "brsn70"
1738
1805
  }]];
1739
1806
  var Download = (props) => createComponent(Icon_default, mergeProps(props, {
1740
- iconNode: iconNode$h,
1807
+ iconNode: iconNode$s,
1741
1808
  name: "download"
1742
1809
  }));
1743
1810
  var download_default = Download;
1744
- var iconNode$g = [["path", {
1811
+ var iconNode$r = [["path", {
1812
+ d: "M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21",
1813
+ key: "g5wo59"
1814
+ }], ["path", {
1815
+ d: "m5.082 11.09 8.828 8.828",
1816
+ key: "1wx5vj"
1817
+ }]];
1818
+ var Eraser = (props) => createComponent(Icon_default, mergeProps(props, {
1819
+ iconNode: iconNode$r,
1820
+ name: "eraser"
1821
+ }));
1822
+ var eraser_default = Eraser;
1823
+ var iconNode$q = [["path", {
1745
1824
  d: "M15 3h6v6",
1746
1825
  key: "1q9fwt"
1747
1826
  }], ["path", {
@@ -1752,11 +1831,52 @@ var iconNode$g = [["path", {
1752
1831
  key: "a6xqqp"
1753
1832
  }]];
1754
1833
  var ExternalLink = (props) => createComponent(Icon_default, mergeProps(props, {
1755
- iconNode: iconNode$g,
1834
+ iconNode: iconNode$q,
1756
1835
  name: "external-link"
1757
1836
  }));
1758
1837
  var external_link_default = ExternalLink;
1759
- var iconNode$f = [["circle", {
1838
+ var iconNode$p = [["path", {
1839
+ d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
1840
+ key: "1oefj6"
1841
+ }], ["path", {
1842
+ d: "M14 2v5a1 1 0 0 0 1 1h5",
1843
+ key: "wfsgrz"
1844
+ }], ["path", {
1845
+ d: "M12 18v-6",
1846
+ key: "17g6i2"
1847
+ }], ["path", {
1848
+ d: "m9 15 3 3 3-3",
1849
+ key: "1npd3o"
1850
+ }]];
1851
+ var FileDown = (props) => createComponent(Icon_default, mergeProps(props, {
1852
+ iconNode: iconNode$p,
1853
+ name: "file-down"
1854
+ }));
1855
+ var file_down_default = FileDown;
1856
+ var iconNode$o = [["circle", {
1857
+ cx: "12",
1858
+ cy: "12",
1859
+ r: "3",
1860
+ key: "1v7zrd"
1861
+ }], ["path", {
1862
+ d: "M3 7V5a2 2 0 0 1 2-2h2",
1863
+ key: "aa7l1z"
1864
+ }], ["path", {
1865
+ d: "M17 3h2a2 2 0 0 1 2 2v2",
1866
+ key: "4qcy5o"
1867
+ }], ["path", {
1868
+ d: "M21 17v2a2 2 0 0 1-2 2h-2",
1869
+ key: "6vwrx8"
1870
+ }], ["path", {
1871
+ d: "M7 21H5a2 2 0 0 1-2-2v-2",
1872
+ key: "ioqczr"
1873
+ }]];
1874
+ var Focus = (props) => createComponent(Icon_default, mergeProps(props, {
1875
+ iconNode: iconNode$o,
1876
+ name: "focus"
1877
+ }));
1878
+ var focus_default = Focus;
1879
+ var iconNode$n = [["circle", {
1760
1880
  cx: "12",
1761
1881
  cy: "12",
1762
1882
  r: "10",
@@ -1769,11 +1889,11 @@ var iconNode$f = [["circle", {
1769
1889
  key: "9i4pu4"
1770
1890
  }]];
1771
1891
  var Globe = (props) => createComponent(Icon_default, mergeProps(props, {
1772
- iconNode: iconNode$f,
1892
+ iconNode: iconNode$n,
1773
1893
  name: "globe"
1774
1894
  }));
1775
1895
  var globe_default = Globe;
1776
- var iconNode$e = [["path", {
1896
+ var iconNode$m = [["path", {
1777
1897
  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",
1778
1898
  key: "zzgyd3"
1779
1899
  }], ["path", {
@@ -1790,11 +1910,11 @@ var iconNode$e = [["path", {
1790
1910
  key: "jksky3"
1791
1911
  }]];
1792
1912
  var LayersPlus = (props) => createComponent(Icon_default, mergeProps(props, {
1793
- iconNode: iconNode$e,
1913
+ iconNode: iconNode$m,
1794
1914
  name: "layers-plus"
1795
1915
  }));
1796
1916
  var layers_plus_default = LayersPlus;
1797
- var iconNode$d = [["rect", {
1917
+ var iconNode$l = [["rect", {
1798
1918
  width: "18",
1799
1919
  height: "11",
1800
1920
  x: "3",
@@ -1807,11 +1927,27 @@ var iconNode$d = [["rect", {
1807
1927
  key: "fwvmzm"
1808
1928
  }]];
1809
1929
  var Lock = (props) => createComponent(Icon_default, mergeProps(props, {
1810
- iconNode: iconNode$d,
1930
+ iconNode: iconNode$l,
1811
1931
  name: "lock"
1812
1932
  }));
1813
1933
  var lock_default = Lock;
1814
- var iconNode$c = [["rect", {
1934
+ var iconNode$k = [["rect", {
1935
+ width: "18",
1936
+ height: "18",
1937
+ x: "3",
1938
+ y: "3",
1939
+ rx: "2",
1940
+ key: "afitv7"
1941
+ }], ["path", {
1942
+ d: "M9 3v18",
1943
+ key: "fh3hqa"
1944
+ }]];
1945
+ var PanelLeft = (props) => createComponent(Icon_default, mergeProps(props, {
1946
+ iconNode: iconNode$k,
1947
+ name: "panel-left"
1948
+ }));
1949
+ var panel_left_default = PanelLeft;
1950
+ var iconNode$j = [["rect", {
1815
1951
  width: "18",
1816
1952
  height: "18",
1817
1953
  x: "3",
@@ -1826,11 +1962,27 @@ var iconNode$c = [["rect", {
1826
1962
  key: "12hl5m"
1827
1963
  }]];
1828
1964
  var PanelRightClose = (props) => createComponent(Icon_default, mergeProps(props, {
1829
- iconNode: iconNode$c,
1965
+ iconNode: iconNode$j,
1830
1966
  name: "panel-right-close"
1831
1967
  }));
1832
1968
  var panel_right_close_default = PanelRightClose;
1833
- var iconNode$b = [["rect", {
1969
+ var iconNode$i = [["rect", {
1970
+ width: "18",
1971
+ height: "18",
1972
+ x: "3",
1973
+ y: "3",
1974
+ rx: "2",
1975
+ key: "afitv7"
1976
+ }], ["path", {
1977
+ d: "M15 3v18",
1978
+ key: "14nvp0"
1979
+ }]];
1980
+ var PanelRight = (props) => createComponent(Icon_default, mergeProps(props, {
1981
+ iconNode: iconNode$i,
1982
+ name: "panel-right"
1983
+ }));
1984
+ var panel_right_default = PanelRight;
1985
+ var iconNode$h = [["rect", {
1834
1986
  width: "18",
1835
1987
  height: "18",
1836
1988
  x: "3",
@@ -1842,11 +1994,11 @@ var iconNode$b = [["rect", {
1842
1994
  key: "1pudct"
1843
1995
  }]];
1844
1996
  var PanelTop = (props) => createComponent(Icon_default, mergeProps(props, {
1845
- iconNode: iconNode$b,
1997
+ iconNode: iconNode$h,
1846
1998
  name: "panel-top"
1847
1999
  }));
1848
2000
  var panel_top_default = PanelTop;
1849
- var iconNode$a = [["path", {
2001
+ var iconNode$g = [["path", {
1850
2002
  d: "M5 12h14",
1851
2003
  key: "1ays0h"
1852
2004
  }], ["path", {
@@ -1854,11 +2006,42 @@ var iconNode$a = [["path", {
1854
2006
  key: "s699le"
1855
2007
  }]];
1856
2008
  var Plus = (props) => createComponent(Icon_default, mergeProps(props, {
1857
- iconNode: iconNode$a,
2009
+ iconNode: iconNode$g,
1858
2010
  name: "plus"
1859
2011
  }));
1860
2012
  var plus_default = Plus;
1861
- var iconNode$9 = [["path", {
2013
+ var iconNode$f = [["path", {
2014
+ d: "M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",
2015
+ key: "143wyd"
2016
+ }], ["path", {
2017
+ d: "M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",
2018
+ key: "1itne7"
2019
+ }], ["rect", {
2020
+ x: "6",
2021
+ y: "14",
2022
+ width: "12",
2023
+ height: "8",
2024
+ rx: "1",
2025
+ key: "1ue0tg"
2026
+ }]];
2027
+ var Printer = (props) => createComponent(Icon_default, mergeProps(props, {
2028
+ iconNode: iconNode$f,
2029
+ name: "printer"
2030
+ }));
2031
+ var printer_default = Printer;
2032
+ var iconNode$e = [["path", {
2033
+ d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
2034
+ key: "1357e3"
2035
+ }], ["path", {
2036
+ d: "M3 3v5h5",
2037
+ key: "1xhq8a"
2038
+ }]];
2039
+ var RotateCcw = (props) => createComponent(Icon_default, mergeProps(props, {
2040
+ iconNode: iconNode$e,
2041
+ name: "rotate-ccw"
2042
+ }));
2043
+ var rotate_ccw_default = RotateCcw;
2044
+ var iconNode$d = [["path", {
1862
2045
  d: "m21 21-4.34-4.34",
1863
2046
  key: "14j7rj"
1864
2047
  }], ["circle", {
@@ -1868,29 +2051,43 @@ var iconNode$9 = [["path", {
1868
2051
  key: "4ej97u"
1869
2052
  }]];
1870
2053
  var Search = (props) => createComponent(Icon_default, mergeProps(props, {
1871
- iconNode: iconNode$9,
2054
+ iconNode: iconNode$d,
1872
2055
  name: "search"
1873
2056
  }));
1874
2057
  var search_default = Search;
1875
- var iconNode$8 = [["path", {
2058
+ var iconNode$c = [["path", {
2059
+ d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",
2060
+ key: "1i5ecw"
2061
+ }], ["circle", {
2062
+ cx: "12",
2063
+ cy: "12",
2064
+ r: "3",
2065
+ key: "1v7zrd"
2066
+ }]];
2067
+ var Settings$1 = (props) => createComponent(Icon_default, mergeProps(props, {
2068
+ iconNode: iconNode$c,
2069
+ name: "settings"
2070
+ }));
2071
+ var settings_default = Settings$1;
2072
+ var iconNode$b = [["path", {
1876
2073
  d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
1877
2074
  key: "oel41y"
1878
2075
  }]];
1879
2076
  var Shield = (props) => createComponent(Icon_default, mergeProps(props, {
1880
- iconNode: iconNode$8,
2077
+ iconNode: iconNode$b,
1881
2078
  name: "shield"
1882
2079
  }));
1883
2080
  var shield_default = Shield;
1884
- var iconNode$7 = [["path", {
2081
+ var iconNode$a = [["path", {
1885
2082
  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",
1886
2083
  key: "r04s7s"
1887
2084
  }]];
1888
2085
  var Star = (props) => createComponent(Icon_default, mergeProps(props, {
1889
- iconNode: iconNode$7,
2086
+ iconNode: iconNode$a,
1890
2087
  name: "star"
1891
2088
  }));
1892
2089
  var star_default = Star;
1893
- var iconNode$6 = [["path", {
2090
+ var iconNode$9 = [["path", {
1894
2091
  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",
1895
2092
  key: "vktsd0"
1896
2093
  }], ["circle", {
@@ -1901,11 +2098,11 @@ var iconNode$6 = [["path", {
1901
2098
  key: "kqv944"
1902
2099
  }]];
1903
2100
  var Tag = (props) => createComponent(Icon_default, mergeProps(props, {
1904
- iconNode: iconNode$6,
2101
+ iconNode: iconNode$9,
1905
2102
  name: "tag"
1906
2103
  }));
1907
2104
  var tag_default = Tag;
1908
- var iconNode$5 = [["path", {
2105
+ var iconNode$8 = [["path", {
1909
2106
  d: "M10 11v6",
1910
2107
  key: "nco0om"
1911
2108
  }], ["path", {
@@ -1922,11 +2119,23 @@ var iconNode$5 = [["path", {
1922
2119
  key: "e791ji"
1923
2120
  }]];
1924
2121
  var Trash2 = (props) => createComponent(Icon_default, mergeProps(props, {
1925
- iconNode: iconNode$5,
2122
+ iconNode: iconNode$8,
1926
2123
  name: "trash-2"
1927
2124
  }));
1928
2125
  var trash_2_default = Trash2;
1929
- var iconNode$4 = [["path", {
2126
+ var iconNode$7 = [["path", {
2127
+ d: "M9 14 4 9l5-5",
2128
+ key: "102s5s"
2129
+ }], ["path", {
2130
+ d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",
2131
+ key: "f3b9sd"
2132
+ }]];
2133
+ var Undo2 = (props) => createComponent(Icon_default, mergeProps(props, {
2134
+ iconNode: iconNode$7,
2135
+ name: "undo-2"
2136
+ }));
2137
+ var undo_2_default = Undo2;
2138
+ var iconNode$6 = [["path", {
1930
2139
  d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",
1931
2140
  key: "975kel"
1932
2141
  }], ["circle", {
@@ -1936,11 +2145,11 @@ var iconNode$4 = [["path", {
1936
2145
  key: "17ys0d"
1937
2146
  }]];
1938
2147
  var User = (props) => createComponent(Icon_default, mergeProps(props, {
1939
- iconNode: iconNode$4,
2148
+ iconNode: iconNode$6,
1940
2149
  name: "user"
1941
2150
  }));
1942
2151
  var user_default = User;
1943
- var iconNode$3 = [["path", {
2152
+ var iconNode$5 = [["path", {
1944
2153
  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",
1945
2154
  key: "uqj9uw"
1946
2155
  }], ["path", {
@@ -1951,11 +2160,11 @@ var iconNode$3 = [["path", {
1951
2160
  key: "ijwkga"
1952
2161
  }]];
1953
2162
  var Volume2 = (props) => createComponent(Icon_default, mergeProps(props, {
1954
- iconNode: iconNode$3,
2163
+ iconNode: iconNode$5,
1955
2164
  name: "volume-2"
1956
2165
  }));
1957
2166
  var volume_2_default = Volume2;
1958
- var iconNode$2 = [["path", {
2167
+ var iconNode$4 = [["path", {
1959
2168
  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",
1960
2169
  key: "uqj9uw"
1961
2170
  }], ["line", {
@@ -1972,11 +2181,11 @@ var iconNode$2 = [["path", {
1972
2181
  key: "5ykzw1"
1973
2182
  }]];
1974
2183
  var VolumeX = (props) => createComponent(Icon_default, mergeProps(props, {
1975
- iconNode: iconNode$2,
2184
+ iconNode: iconNode$4,
1976
2185
  name: "volume-x"
1977
2186
  }));
1978
2187
  var volume_x_default = VolumeX;
1979
- var iconNode$1 = [["path", {
2188
+ var iconNode$3 = [["path", {
1980
2189
  d: "M18 6 6 18",
1981
2190
  key: "1bl5f8"
1982
2191
  }], ["path", {
@@ -1984,19 +2193,71 @@ var iconNode$1 = [["path", {
1984
2193
  key: "d8bk6v"
1985
2194
  }]];
1986
2195
  var X = (props) => createComponent(Icon_default, mergeProps(props, {
1987
- iconNode: iconNode$1,
2196
+ iconNode: iconNode$3,
1988
2197
  name: "x"
1989
2198
  }));
1990
2199
  var x_default = X;
1991
- var iconNode = [["path", {
2200
+ var iconNode$2 = [["path", {
1992
2201
  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",
1993
2202
  key: "1xq2db"
1994
2203
  }]];
1995
2204
  var Zap = (props) => createComponent(Icon_default, mergeProps(props, {
1996
- iconNode,
2205
+ iconNode: iconNode$2,
1997
2206
  name: "zap"
1998
2207
  }));
1999
2208
  var zap_default = Zap;
2209
+ var iconNode$1 = [["circle", {
2210
+ cx: "11",
2211
+ cy: "11",
2212
+ r: "8",
2213
+ key: "4ej97u"
2214
+ }], ["line", {
2215
+ x1: "21",
2216
+ x2: "16.65",
2217
+ y1: "21",
2218
+ y2: "16.65",
2219
+ key: "13gj7c"
2220
+ }], ["line", {
2221
+ x1: "11",
2222
+ x2: "11",
2223
+ y1: "8",
2224
+ y2: "14",
2225
+ key: "1vmskp"
2226
+ }], ["line", {
2227
+ x1: "8",
2228
+ x2: "14",
2229
+ y1: "11",
2230
+ y2: "11",
2231
+ key: "durymu"
2232
+ }]];
2233
+ var ZoomIn = (props) => createComponent(Icon_default, mergeProps(props, {
2234
+ iconNode: iconNode$1,
2235
+ name: "zoom-in"
2236
+ }));
2237
+ var zoom_in_default = ZoomIn;
2238
+ var iconNode = [["circle", {
2239
+ cx: "11",
2240
+ cy: "11",
2241
+ r: "8",
2242
+ key: "4ej97u"
2243
+ }], ["line", {
2244
+ x1: "21",
2245
+ x2: "16.65",
2246
+ y1: "21",
2247
+ y2: "16.65",
2248
+ key: "13gj7c"
2249
+ }], ["line", {
2250
+ x1: "8",
2251
+ x2: "14",
2252
+ y1: "11",
2253
+ y2: "11",
2254
+ key: "durymu"
2255
+ }]];
2256
+ var ZoomOut = (props) => createComponent(Icon_default, mergeProps(props, {
2257
+ iconNode,
2258
+ name: "zoom-out"
2259
+ }));
2260
+ var zoom_out_default = ZoomOut;
2000
2261
  function getEnvFlag(name) {
2001
2262
  const globalProcess = typeof globalThis === "object" && "process" in globalThis ? globalThis.process : void 0;
2002
2263
  return globalProcess?.env?.[name];
@@ -2230,6 +2491,53 @@ function useRuntime() {
2230
2491
  restoreSession: () => window.vessel.ai.restoreSession()
2231
2492
  };
2232
2493
  }
2494
+ function formatAgentActionName(name) {
2495
+ return name.split(/[_-]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
2496
+ }
2497
+ function summarizeAgentAction(action) {
2498
+ if (action.status === "waiting-approval") {
2499
+ return action.argsSummary || "Waiting for approval";
2500
+ }
2501
+ if (action.status === "running") {
2502
+ return action.argsSummary || "Running";
2503
+ }
2504
+ if (action.status === "failed") {
2505
+ return action.error || action.resultSummary || "Action failed";
2506
+ }
2507
+ return action.resultSummary || action.argsSummary || "Completed";
2508
+ }
2509
+ function formatAgentTimelineDuration(durationMs) {
2510
+ if (!durationMs || durationMs < 1) return null;
2511
+ if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
2512
+ return `${(durationMs / 1e3).toFixed(durationMs < 1e4 ? 1 : 0)}s`;
2513
+ }
2514
+ function buildAgentTimelineItems(state, limit = 12) {
2515
+ const transcriptItems = state.transcript.map((entry) => ({
2516
+ id: `transcript:${entry.id}`,
2517
+ type: "transcript",
2518
+ timestamp: entry.updatedAt,
2519
+ status: entry.status,
2520
+ kind: entry.kind,
2521
+ label: entry.title || entry.kind,
2522
+ detail: entry.text
2523
+ }));
2524
+ const actionItems = state.actions.map((action) => ({
2525
+ id: `action:${action.id}`,
2526
+ type: "action",
2527
+ timestamp: action.finishedAt || action.startedAt,
2528
+ status: action.status,
2529
+ kind: "action",
2530
+ label: formatAgentActionName(action.name),
2531
+ detail: summarizeAgentAction(action),
2532
+ durationMs: action.durationMs
2533
+ }));
2534
+ return [...transcriptItems, ...actionItems].sort(
2535
+ (left, right) => new Date(right.timestamp).getTime() - new Date(left.timestamp).getTime()
2536
+ ).slice(0, limit);
2537
+ }
2538
+ function isLiveAgentTimelineItem(item) {
2539
+ return item.status === "streaming" || item.status === "running";
2540
+ }
2233
2541
  const AGENT_ACTIVITY_WINDOW_MS = 6e3;
2234
2542
  const AGENT_RECENT_WINDOW_MS = 3e4;
2235
2543
  const AGENT_RUNNING_STALE_WINDOW_MS = 5 * 6e4;
@@ -2253,7 +2561,7 @@ function summarizeTranscriptText(entry) {
2253
2561
  return singleLine.length > 96 ? `${singleLine.slice(0, 93).trimEnd()}...` : singleLine;
2254
2562
  }
2255
2563
  function summarizeActionText(action) {
2256
- const name = action.name.split(/[_-]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
2564
+ const name = formatAgentActionName(action.name);
2257
2565
  if (action.status === "running") {
2258
2566
  return `${name} in progress`;
2259
2567
  }
@@ -2343,7 +2651,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
2343
2651
  }
2344
2652
  return "idle";
2345
2653
  }
2346
- var _tmpl$$q = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$p = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$l = /* @__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$l = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$i = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$g = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$e = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$a = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$9 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2654
+ var _tmpl$$r = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$q = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$m = /* @__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$m = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$i = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$g = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$e = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$a = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$9 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2347
2655
  const TAB_CLOSE_MS = 200;
2348
2656
  function stringToHue(str) {
2349
2657
  let hash = 0;
@@ -2370,14 +2678,14 @@ const TabFavicon = (props) => {
2370
2678
  },
2371
2679
  get fallback() {
2372
2680
  return (() => {
2373
- var _el$2 = _tmpl$2$p();
2681
+ var _el$2 = _tmpl$2$q();
2374
2682
  insert(_el$2, letter);
2375
2683
  createRenderEffect((_$p) => setStyleProperty(_el$2, "--favicon-hue", `${hue()}`));
2376
2684
  return _el$2;
2377
2685
  })();
2378
2686
  },
2379
2687
  get children() {
2380
- var _el$ = _tmpl$$q();
2688
+ var _el$ = _tmpl$$r();
2381
2689
  _el$.addEventListener("error", () => setFailed(true));
2382
2690
  createRenderEffect(() => setAttribute(_el$, "src", props.favicon));
2383
2691
  return _el$;
@@ -2443,7 +2751,7 @@ const TabBar = () => {
2443
2751
  }, TAB_CLOSE_MS);
2444
2752
  };
2445
2753
  return (() => {
2446
- var _el$3 = _tmpl$3$l(), _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;
2754
+ var _el$3 = _tmpl$3$m(), _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;
2447
2755
  insert(_el$4, createComponent(For, {
2448
2756
  get each() {
2449
2757
  return tabEntries();
@@ -2454,7 +2762,7 @@ const TabBar = () => {
2454
2762
  },
2455
2763
  get fallback() {
2456
2764
  return memo(() => entry.type === "group")() && (() => {
2457
- var _el$0 = _tmpl$4$l(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
2765
+ var _el$0 = _tmpl$4$m(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
2458
2766
  _el$0.$$contextmenu = (e) => {
2459
2767
  e.preventDefault();
2460
2768
  window.vessel.tabs.showGroupContextMenu(entry.groupId);
@@ -2609,7 +2917,7 @@ const TabBar = () => {
2609
2917
  })();
2610
2918
  };
2611
2919
  delegateEvents(["click", "contextmenu"]);
2612
- var _tmpl$$p = /* @__PURE__ */ template(`<button class=security-popup-link>Reset permissions for this site`), _tmpl$2$o = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More</button><div class=security-popup-section><div class=security-popup-section-title>Site permissions`), _tmpl$3$k = /* @__PURE__ */ template(`<p class=security-popup-muted>No saved permission decisions for this site.`), _tmpl$4$k = /* @__PURE__ */ template(`<div class=security-popup-permission-row><span></span><strong>`), _tmpl$5$h = /* @__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`);
2920
+ var _tmpl$$q = /* @__PURE__ */ template(`<button class=security-popup-link>Reset permissions for this site`), _tmpl$2$p = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More</button><div class=security-popup-section><div class=security-popup-section-title>Site permissions`), _tmpl$3$l = /* @__PURE__ */ template(`<p class=security-popup-muted>No saved permission decisions for this site.`), _tmpl$4$l = /* @__PURE__ */ template(`<div class=security-popup-permission-row><span></span><strong>`), _tmpl$5$h = /* @__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`);
2613
2921
  const SecurityPopup = (props) => {
2614
2922
  const statusText = () => {
2615
2923
  switch (props.state.status) {
@@ -2662,7 +2970,7 @@ const SecurityPopup = (props) => {
2662
2970
  onCleanup(() => document.removeEventListener("click", handleClickOutside, true));
2663
2971
  });
2664
2972
  return (() => {
2665
- var _el$ = _tmpl$2$o(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
2973
+ var _el$ = _tmpl$2$p(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
2666
2974
  _el$5.firstChild;
2667
2975
  _el$.$$click = (e) => e.stopPropagation();
2668
2976
  insert(_el$3, statusText);
@@ -2672,7 +2980,7 @@ const SecurityPopup = (props) => {
2672
2980
  return sitePermissions().length > 0;
2673
2981
  },
2674
2982
  get fallback() {
2675
- return _tmpl$3$k();
2983
+ return _tmpl$3$l();
2676
2984
  },
2677
2985
  get children() {
2678
2986
  return [createComponent(For, {
@@ -2680,14 +2988,14 @@ const SecurityPopup = (props) => {
2680
2988
  return sitePermissions();
2681
2989
  },
2682
2990
  children: (item) => (() => {
2683
- var _el$9 = _tmpl$4$k(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
2991
+ var _el$9 = _tmpl$4$l(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
2684
2992
  insert(_el$0, () => item.permission);
2685
2993
  insert(_el$1, () => item.decision);
2686
2994
  createRenderEffect(() => className(_el$1, item.decision));
2687
2995
  return _el$9;
2688
2996
  })()
2689
2997
  }), (() => {
2690
- var _el$7 = _tmpl$$p();
2998
+ var _el$7 = _tmpl$$q();
2691
2999
  _el$7.$$click = async () => {
2692
3000
  await window.vessel.permissions.clearOrigin(origin());
2693
3001
  await loadPermissions();
@@ -2709,30 +3017,32 @@ const SecurityPopup = (props) => {
2709
3017
  })();
2710
3018
  };
2711
3019
  delegateEvents(["click"]);
3020
+ const SIDEBAR_MIN_WIDTH = 240;
3021
+ const SIDEBAR_MAX_WIDTH = 800;
3022
+ function clampSidebarWidth(width) {
3023
+ return Math.max(
3024
+ SIDEBAR_MIN_WIDTH,
3025
+ Math.min(SIDEBAR_MAX_WIDTH, Math.round(width))
3026
+ );
3027
+ }
2712
3028
  const DEFAULT_SIDEBAR_WIDTH = 400;
2713
- const MIN_SIDEBAR = 240;
2714
- const MAX_SIDEBAR = 800;
2715
3029
  const [sidebarOpen, setSidebarOpen] = createSignal(true);
2716
3030
  const [sidebarWidth, setSidebarWidth] = createSignal(DEFAULT_SIDEBAR_WIDTH);
2717
3031
  const [sidebarDetached, setSidebarDetached] = createSignal(false);
2718
3032
  window.vessel?.settings?.get().then((settings) => {
2719
3033
  if (settings?.sidebarWidth && typeof settings.sidebarWidth === "number") {
2720
- setSidebarWidth(
2721
- Math.max(MIN_SIDEBAR, Math.min(MAX_SIDEBAR, settings.sidebarWidth))
2722
- );
3034
+ setSidebarWidth(clampSidebarWidth(settings.sidebarWidth));
2723
3035
  }
2724
3036
  }).catch(() => {
2725
3037
  });
2726
3038
  const [focusMode, setFocusMode] = createSignal(false);
2727
3039
  const [commandBarOpen, setCommandBarOpen] = createSignal(false);
3040
+ const [browserCommandPaletteOpen, setBrowserCommandPaletteOpen] = createSignal(false);
2728
3041
  const [settingsOpen, setSettingsOpen] = createSignal(false);
2729
3042
  const [devtoolsPanelOpen, setDevtoolsPanelOpen] = createSignal(false);
2730
3043
  let lastIpcTime = 0;
2731
3044
  const IPC_THROTTLE_MS = 8;
2732
3045
  let sidebarStateListenerInitialized = false;
2733
- function clampSidebarWidth(width) {
2734
- return Math.max(MIN_SIDEBAR, Math.min(MAX_SIDEBAR, Math.round(width)));
2735
- }
2736
3046
  function applySidebarState(result) {
2737
3047
  setSidebarOpen(result.open);
2738
3048
  setSidebarWidth(result.width);
@@ -2751,6 +3061,7 @@ function useUI() {
2751
3061
  sidebarDetached,
2752
3062
  focusMode,
2753
3063
  commandBarOpen,
3064
+ browserCommandPaletteOpen,
2754
3065
  settingsOpen,
2755
3066
  devtoolsPanelOpen,
2756
3067
  toggleSidebar: async () => {
@@ -2790,6 +3101,8 @@ function useUI() {
2790
3101
  },
2791
3102
  openCommandBar: () => setCommandBarOpen(true),
2792
3103
  closeCommandBar: () => setCommandBarOpen(false),
3104
+ openBrowserCommandPalette: () => setBrowserCommandPaletteOpen(true),
3105
+ closeBrowserCommandPalette: () => setBrowserCommandPaletteOpen(false),
2793
3106
  openSettings: async () => {
2794
3107
  setSidebarOpen(false);
2795
3108
  setSettingsOpen(true);
@@ -3089,7 +3402,7 @@ const SEARCH_ENGINE_PRESETS = {
3089
3402
  ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
3090
3403
  kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
3091
3404
  };
3092
- var _tmpl$$o = /* @__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$n = /* @__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$j = /* @__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$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$d = /* @__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$9 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$8 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </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$6 = /* @__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$6 = /* @__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$6 = /* @__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$6 = /* @__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$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__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$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$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$17$4 = /* @__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$4 = /* @__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$4 = /* @__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$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$3 = /* @__PURE__ */ template(`<li>`);
3405
+ var _tmpl$$p = /* @__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$o = /* @__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$k = /* @__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$k = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$d = /* @__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$9 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$8 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </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$6 = /* @__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$6 = /* @__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$6 = /* @__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$6 = /* @__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$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__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$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$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$17$4 = /* @__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$4 = /* @__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$4 = /* @__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$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$3 = /* @__PURE__ */ template(`<li>`);
3093
3406
  const AddressBar = (props) => {
3094
3407
  const {
3095
3408
  activeTab,
@@ -3392,7 +3705,7 @@ const AddressBar = (props) => {
3392
3705
  insert(_el$, createComponent(Show, {
3393
3706
  when: isPrivateWindow,
3394
3707
  get children() {
3395
- return _tmpl$$o();
3708
+ return _tmpl$$p();
3396
3709
  }
3397
3710
  }), _el$11);
3398
3711
  insert(_el$, createComponent(Show, {
@@ -3400,7 +3713,7 @@ const AddressBar = (props) => {
3400
3713
  return memo(() => !!securityState()?.status)() && securityState()?.status !== "none";
3401
3714
  },
3402
3715
  get children() {
3403
- var _el$7 = _tmpl$4$j(), _el$8 = _el$7.firstChild;
3716
+ var _el$7 = _tmpl$4$k(), _el$8 = _el$7.firstChild;
3404
3717
  _el$8.$$click = () => setShowSecurityPopup((prev) => !prev);
3405
3718
  insert(_el$8, createComponent(Switch, {
3406
3719
  get fallback() {
@@ -3416,7 +3729,7 @@ const AddressBar = (props) => {
3416
3729
  return securityState()?.status === "secure";
3417
3730
  },
3418
3731
  get children() {
3419
- var _el$9 = _tmpl$2$n();
3732
+ var _el$9 = _tmpl$2$o();
3420
3733
  _el$9.firstChild;
3421
3734
  return _el$9;
3422
3735
  }
@@ -3425,7 +3738,7 @@ const AddressBar = (props) => {
3425
3738
  return securityState()?.status === "insecure";
3426
3739
  },
3427
3740
  get children() {
3428
- var _el$1 = _tmpl$3$j();
3741
+ var _el$1 = _tmpl$3$k();
3429
3742
  _el$1.firstChild;
3430
3743
  return _el$1;
3431
3744
  }
@@ -3806,7 +4119,7 @@ const AddressBar = (props) => {
3806
4119
  })();
3807
4120
  };
3808
4121
  delegateEvents(["click", "input", "keydown", "mousedown"]);
3809
- var _tmpl$$n = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$m = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
4122
+ var _tmpl$$o = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$n = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
3810
4123
  const TOAST_DURATION_MS$1 = 4200;
3811
4124
  const TOAST_EXIT_MS$2 = 300;
3812
4125
  function isBookmarkToastCandidate(action) {
@@ -3866,13 +4179,13 @@ const BookmarkNotifications = () => {
3866
4179
  timeoutIds.clear();
3867
4180
  });
3868
4181
  return (() => {
3869
- var _el$ = _tmpl$$n();
4182
+ var _el$ = _tmpl$$o();
3870
4183
  insert(_el$, createComponent(For, {
3871
4184
  get each() {
3872
4185
  return toasts();
3873
4186
  },
3874
4187
  children: (toast) => (() => {
3875
- var _el$2 = _tmpl$2$m(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
4188
+ var _el$2 = _tmpl$2$n(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
3876
4189
  insert(_el$4, () => toast.title);
3877
4190
  _el$5.$$click = () => dismissToast(toast.id);
3878
4191
  insert(_el$6, () => toast.message);
@@ -3884,7 +4197,7 @@ const BookmarkNotifications = () => {
3884
4197
  })();
3885
4198
  };
3886
4199
  delegateEvents(["click"]);
3887
- var _tmpl$$m = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
4200
+ var _tmpl$$n = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
3888
4201
  const TOAST_DURATION_MS = 3e3;
3889
4202
  const TOAST_EXIT_MS$1 = 300;
3890
4203
  const HighlightNotifications = (props) => {
@@ -3923,7 +4236,7 @@ const HighlightNotifications = (props) => {
3923
4236
  return memo(() => !!visible())() && current();
3924
4237
  },
3925
4238
  get children() {
3926
- var _el$ = _tmpl$$m(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
4239
+ var _el$ = _tmpl$$n(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
3927
4240
  insert(_el$4, () => current().title);
3928
4241
  _el$5.$$click = dismiss;
3929
4242
  insert(_el$6, () => current().message);
@@ -3933,7 +4246,7 @@ const HighlightNotifications = (props) => {
3933
4246
  });
3934
4247
  };
3935
4248
  delegateEvents(["click"]);
3936
- var _tmpl$$l = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$l = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$i = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$i = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$f = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$e = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$c = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
4249
+ var _tmpl$$m = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$j = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$j = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$f = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$e = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$c = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
3937
4250
  const TOAST_DONE_DURATION_MS = 4200;
3938
4251
  const TOAST_EXIT_MS = 300;
3939
4252
  function formatBytes$1(bytes) {
@@ -4024,7 +4337,7 @@ const DownloadToast = () => {
4024
4337
  return Math.min(100, Math.round(d.receivedBytes / d.totalBytes * 100));
4025
4338
  };
4026
4339
  return (() => {
4027
- var _el$ = _tmpl$$l();
4340
+ var _el$ = _tmpl$$m();
4028
4341
  insert(_el$, createComponent(For, {
4029
4342
  get each() {
4030
4343
  return downloads();
@@ -4037,7 +4350,7 @@ const DownloadToast = () => {
4037
4350
  return dl.state === "completed";
4038
4351
  },
4039
4352
  get children() {
4040
- return _tmpl$2$l();
4353
+ return _tmpl$2$m();
4041
4354
  }
4042
4355
  }), null);
4043
4356
  insert(_el$3, createComponent(Show, {
@@ -4045,7 +4358,7 @@ const DownloadToast = () => {
4045
4358
  return dl.state === "cancelled" || dl.state === "interrupted";
4046
4359
  },
4047
4360
  get children() {
4048
- return _tmpl$3$i();
4361
+ return _tmpl$3$j();
4049
4362
  }
4050
4363
  }), null);
4051
4364
  insert(_el$2, createComponent(Show, {
@@ -4054,7 +4367,7 @@ const DownloadToast = () => {
4054
4367
  },
4055
4368
  get children() {
4056
4369
  return [(() => {
4057
- var _el$7 = _tmpl$4$i(), _el$8 = _el$7.firstChild;
4370
+ var _el$7 = _tmpl$4$j(), _el$8 = _el$7.firstChild;
4058
4371
  createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
4059
4372
  return _el$7;
4060
4373
  })(), (() => {
@@ -4089,7 +4402,7 @@ const DownloadToast = () => {
4089
4402
  return _el$;
4090
4403
  })();
4091
4404
  };
4092
- var _tmpl$$k = /* @__PURE__ */ template(`<div class=modal-backdrop><div class=downloads-panel><div class=downloads-panel-header><div><h2>Downloads</h2><p>Recent files saved by Vessel</p></div><div class=downloads-panel-actions><button>Clear</button><button>Close</button></div></div><div class=downloads-panel-list>`), _tmpl$2$k = /* @__PURE__ */ template(`<div class=downloads-empty>No downloads yet.`), _tmpl$3$h = /* @__PURE__ */ template(`<div class=downloads-row><div class=downloads-file><strong></strong><span></span><small> · </small></div><div class=downloads-row-actions><button>Open</button><button>Show in folder`), _tmpl$4$h = /* @__PURE__ */ template(`<span>Source: `);
4405
+ var _tmpl$$l = /* @__PURE__ */ template(`<div class=modal-backdrop><div class=downloads-panel><div class=downloads-panel-header><div><h2>Downloads</h2><p>Recent files saved by Vessel</p></div><div class=downloads-panel-actions><button>Clear</button><button>Close</button></div></div><div class=downloads-panel-list>`), _tmpl$2$l = /* @__PURE__ */ template(`<div class=downloads-empty>No downloads yet.`), _tmpl$3$i = /* @__PURE__ */ template(`<div class=downloads-row><div class=downloads-file><strong></strong><span></span><small> · </small></div><div class=downloads-row-actions><button>Open</button><button>Show in folder`), _tmpl$4$i = /* @__PURE__ */ template(`<span>Source: `);
4093
4406
  const formatBytes = (bytes) => {
4094
4407
  if (!bytes) return "0 B";
4095
4408
  const units = ["B", "KB", "MB", "GB"];
@@ -4114,7 +4427,7 @@ const DownloadsPanel = (props) => {
4114
4427
  return props.open;
4115
4428
  },
4116
4429
  get children() {
4117
- var _el$ = _tmpl$$k(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$3.nextSibling;
4430
+ var _el$ = _tmpl$$l(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$3.nextSibling;
4118
4431
  addEventListener(_el$, "click", props.onClose, true);
4119
4432
  _el$2.$$click = (e) => e.stopPropagation();
4120
4433
  _el$6.$$click = async () => {
@@ -4127,10 +4440,10 @@ const DownloadsPanel = (props) => {
4127
4440
  return items();
4128
4441
  },
4129
4442
  get fallback() {
4130
- return _tmpl$2$k();
4443
+ return _tmpl$2$l();
4131
4444
  },
4132
4445
  children: (item) => (() => {
4133
- var _el$0 = _tmpl$3$h(), _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$1.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.nextSibling;
4446
+ var _el$0 = _tmpl$3$i(), _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$1.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.nextSibling;
4134
4447
  insert(_el$10, () => item.filename);
4135
4448
  insert(_el$11, () => item.savePath);
4136
4449
  insert(_el$1, createComponent(Show, {
@@ -4138,7 +4451,7 @@ const DownloadsPanel = (props) => {
4138
4451
  return item.url;
4139
4452
  },
4140
4453
  children: (url) => (() => {
4141
- var _el$17 = _tmpl$4$h();
4454
+ var _el$17 = _tmpl$4$i();
4142
4455
  _el$17.firstChild;
4143
4456
  insert(_el$17, url, null);
4144
4457
  return _el$17;
@@ -4161,7 +4474,7 @@ const DownloadsPanel = (props) => {
4161
4474
  });
4162
4475
  };
4163
4476
  delegateEvents(["click"]);
4164
- var _tmpl$$j = /* @__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$j = /* @__PURE__ */ template(`<span class=find-bar-count>`);
4477
+ var _tmpl$$k = /* @__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$k = /* @__PURE__ */ template(`<span class=find-bar-count>`);
4165
4478
  const FindBar = () => {
4166
4479
  const [open, setOpen] = createSignal(false);
4167
4480
  const [query, setQuery] = createSignal("");
@@ -4239,7 +4552,7 @@ const FindBar = () => {
4239
4552
  return open();
4240
4553
  },
4241
4554
  get children() {
4242
- var _el$ = _tmpl$$j(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
4555
+ var _el$ = _tmpl$$k(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
4243
4556
  _el$2.$$input = (e) => handleInput(e.currentTarget.value);
4244
4557
  var _ref$ = inputRef;
4245
4558
  typeof _ref$ === "function" ? use(_ref$, _el$2) : inputRef = _el$2;
@@ -4249,7 +4562,7 @@ const FindBar = () => {
4249
4562
  return result();
4250
4563
  },
4251
4564
  children: (r) => (() => {
4252
- var _el$6 = _tmpl$2$j();
4565
+ var _el$6 = _tmpl$2$k();
4253
4566
  insert(_el$6, (() => {
4254
4567
  var _c$ = memo(() => r().matches > 0);
4255
4568
  return () => _c$() ? `${r().activeMatchOrdinal} / ${r().matches}` : "No results";
@@ -4266,7 +4579,7 @@ const FindBar = () => {
4266
4579
  });
4267
4580
  };
4268
4581
  delegateEvents(["input", "click"]);
4269
- var _tmpl$$i = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$i = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$g = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$g = /* @__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$e = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
4582
+ var _tmpl$$j = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$j = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$h = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$h = /* @__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$e = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
4270
4583
  const FlowProgress = () => {
4271
4584
  const {
4272
4585
  runtimeState: runtimeState2
@@ -4297,13 +4610,13 @@ const FlowProgress = () => {
4297
4610
  return flow() || tracker();
4298
4611
  },
4299
4612
  get children() {
4300
- var _el$ = _tmpl$$i();
4613
+ var _el$ = _tmpl$$j();
4301
4614
  insert(_el$, createComponent(Show, {
4302
4615
  get when() {
4303
4616
  return tracker();
4304
4617
  },
4305
4618
  children: (t) => (() => {
4306
- var _el$2 = _tmpl$4$g(), _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;
4619
+ var _el$2 = _tmpl$4$h(), _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;
4307
4620
  insert(_el$4, () => t().goal);
4308
4621
  insert(_el$5, () => progressPercent(t().steps), _el$6);
4309
4622
  insert(_el$9, createComponent(For, {
@@ -4322,7 +4635,7 @@ const FlowProgress = () => {
4322
4635
  return t().lastAction;
4323
4636
  },
4324
4637
  get children() {
4325
- var _el$0 = _tmpl$2$i();
4638
+ var _el$0 = _tmpl$2$j();
4326
4639
  _el$0.firstChild;
4327
4640
  insert(_el$0, () => t().lastAction, null);
4328
4641
  return _el$0;
@@ -4333,7 +4646,7 @@ const FlowProgress = () => {
4333
4646
  return memo(() => !!t().nextHint)() && !t().steps.every((s) => s.status === "done");
4334
4647
  },
4335
4648
  get children() {
4336
- var _el$10 = _tmpl$3$g();
4649
+ var _el$10 = _tmpl$3$h();
4337
4650
  _el$10.firstChild;
4338
4651
  insert(_el$10, () => t().nextHint, null);
4339
4652
  return _el$10;
@@ -4348,7 +4661,7 @@ const FlowProgress = () => {
4348
4661
  return memo(() => !!flow())() && !tracker();
4349
4662
  },
4350
4663
  children: (f) => (() => {
4351
- var _el$15 = _tmpl$4$g(), _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;
4664
+ var _el$15 = _tmpl$4$h(), _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;
4352
4665
  insert(_el$17, () => f().goal);
4353
4666
  insert(_el$18, () => progressPercent(f().steps), _el$19);
4354
4667
  insert(_el$22, createComponent(For, {
@@ -4397,7 +4710,7 @@ function formatTime(iso, options) {
4397
4710
  ...options?.includeSeconds && { second: "2-digit" }
4398
4711
  });
4399
4712
  }
4400
- var _tmpl$$h = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$h = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$f = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$f = /* @__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$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$b = /* @__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>`);
4713
+ var _tmpl$$i = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$i = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$g = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$g = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Timeline</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$b = /* @__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>`);
4401
4714
  const AgentTranscriptDock = () => {
4402
4715
  const {
4403
4716
  runtimeState: runtimeState2
@@ -4413,20 +4726,20 @@ const AgentTranscriptDock = () => {
4413
4726
  });
4414
4727
  onCleanup(unsubscribe2);
4415
4728
  });
4416
- const visibleEntries = createMemo(() => runtimeState2().transcript.slice(-6).reverse());
4417
- const hasStreamingEntry = createMemo(() => visibleEntries().some((entry) => entry.status === "streaming"));
4729
+ const timelineItems = createMemo(() => buildAgentTimelineItems(runtimeState2()));
4730
+ const hasStreamingEntry = createMemo(() => timelineItems().some(isLiveAgentTimelineItem));
4418
4731
  const hideDock = async () => {
4419
4732
  setMode("off");
4420
4733
  await window.vessel.settings.set("agentTranscriptMode", "off");
4421
4734
  };
4422
4735
  const isSummary = createMemo(() => mode() === "summary");
4423
4736
  const latestEntry = createMemo(() => {
4424
- const entries2 = visibleEntries();
4737
+ const entries2 = timelineItems();
4425
4738
  return entries2.length > 0 ? entries2[0] : null;
4426
4739
  });
4427
4740
  return createComponent(Show, {
4428
4741
  get when() {
4429
- return memo(() => mode() !== "off")() && visibleEntries().length > 0;
4742
+ return memo(() => mode() !== "off")() && timelineItems().length > 0;
4430
4743
  },
4431
4744
  get children() {
4432
4745
  return [createComponent(Show, {
@@ -4434,7 +4747,7 @@ const AgentTranscriptDock = () => {
4434
4747
  return isSummary();
4435
4748
  },
4436
4749
  get children() {
4437
- var _el$ = _tmpl$$h();
4750
+ var _el$ = _tmpl$$i();
4438
4751
  insert(_el$, createComponent(Show, {
4439
4752
  get when() {
4440
4753
  return latestEntry();
@@ -4448,10 +4761,10 @@ const AgentTranscriptDock = () => {
4448
4761
  }
4449
4762
  }), (() => {
4450
4763
  var _el$10 = _tmpl$6$d(), _el$11 = _el$10.firstChild;
4451
- insert(_el$10, () => entry().title || entry().kind, _el$11);
4764
+ insert(_el$10, () => entry().label, _el$11);
4452
4765
  insert(_el$10, (() => {
4453
- var _c$ = memo(() => entry().text.length > 80);
4454
- return () => _c$() ? entry().text.slice(0, 77) + "..." : entry().text;
4766
+ var _c$ = memo(() => entry().detail.length > 80);
4767
+ return () => _c$() ? entry().detail.slice(0, 77) + "..." : entry().detail;
4455
4768
  })(), null);
4456
4769
  return _el$10;
4457
4770
  })()]
@@ -4463,7 +4776,7 @@ const AgentTranscriptDock = () => {
4463
4776
  return !isSummary();
4464
4777
  },
4465
4778
  get children() {
4466
- var _el$2 = _tmpl$4$f(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
4779
+ var _el$2 = _tmpl$4$g(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
4467
4780
  _el$4.firstChild;
4468
4781
  var _el$7 = _el$4.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
4469
4782
  insert(_el$4, createComponent(Show, {
@@ -4471,7 +4784,7 @@ const AgentTranscriptDock = () => {
4471
4784
  return hasStreamingEntry();
4472
4785
  },
4473
4786
  get children() {
4474
- return _tmpl$2$h();
4787
+ return _tmpl$2$i();
4475
4788
  }
4476
4789
  }), null);
4477
4790
  _el$8.$$click = () => setCollapsed((value) => !value);
@@ -4482,28 +4795,41 @@ const AgentTranscriptDock = () => {
4482
4795
  return !collapsed();
4483
4796
  },
4484
4797
  get children() {
4485
- var _el$0 = _tmpl$3$f();
4798
+ var _el$0 = _tmpl$3$g();
4486
4799
  use((el) => useScrollFade(el), _el$0);
4487
4800
  insert(_el$0, createComponent(For, {
4488
4801
  get each() {
4489
- return visibleEntries();
4802
+ return timelineItems();
4490
4803
  },
4491
- children: (entry) => (() => {
4492
- var _el$12 = _tmpl$7$b(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
4493
- insert(_el$14, () => entry.title || entry.kind);
4494
- insert(_el$15, () => formatTime(entry.updatedAt));
4495
- insert(_el$16, () => entry.text);
4496
- createRenderEffect((_p$) => {
4497
- var _v$3 = `agent-transcript-entry ${entry.kind}`, _v$4 = !!(entry.status === "streaming");
4498
- _v$3 !== _p$.e && className(_el$12, _p$.e = _v$3);
4499
- _v$4 !== _p$.t && _el$12.classList.toggle("streaming", _p$.t = _v$4);
4500
- return _p$;
4501
- }, {
4502
- e: void 0,
4503
- t: void 0
4504
- });
4505
- return _el$12;
4506
- })()
4804
+ children: (entry) => {
4805
+ const duration = () => entry.type === "action" ? formatAgentTimelineDuration(entry.durationMs) : null;
4806
+ return (() => {
4807
+ var _el$13 = _tmpl$7$b(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.nextSibling, _el$17 = _el$14.nextSibling;
4808
+ insert(_el$15, () => entry.label);
4809
+ insert(_el$16, () => formatTime(entry.timestamp), null);
4810
+ insert(_el$16, createComponent(Show, {
4811
+ get when() {
4812
+ return duration();
4813
+ },
4814
+ children: (value) => [" · ", memo(value)]
4815
+ }), null);
4816
+ insert(_el$17, () => entry.detail);
4817
+ createRenderEffect((_p$) => {
4818
+ var _v$3 = `agent-transcript-entry ${entry.kind}`, _v$4 = !!isLiveAgentTimelineItem(entry), _v$5 = !!(entry.status === "failed"), _v$6 = !!(entry.status === "waiting-approval");
4819
+ _v$3 !== _p$.e && className(_el$13, _p$.e = _v$3);
4820
+ _v$4 !== _p$.t && _el$13.classList.toggle("streaming", _p$.t = _v$4);
4821
+ _v$5 !== _p$.a && _el$13.classList.toggle("failed", _p$.a = _v$5);
4822
+ _v$6 !== _p$.o && _el$13.classList.toggle("waiting-approval", _p$.o = _v$6);
4823
+ return _p$;
4824
+ }, {
4825
+ e: void 0,
4826
+ t: void 0,
4827
+ a: void 0,
4828
+ o: void 0
4829
+ });
4830
+ return _el$13;
4831
+ })();
4832
+ }
4507
4833
  }));
4508
4834
  return _el$0;
4509
4835
  }
@@ -4524,6 +4850,541 @@ const AgentTranscriptDock = () => {
4524
4850
  });
4525
4851
  };
4526
4852
  delegateEvents(["click"]);
4853
+ function useAnimatedPresence(isOpen, exitDurationMs) {
4854
+ const [visible, setVisible] = createSignal(false);
4855
+ const [closing, setClosing] = createSignal(false);
4856
+ let exitTimer;
4857
+ createEffect(() => {
4858
+ const open = isOpen();
4859
+ if (open) {
4860
+ if (exitTimer) {
4861
+ clearTimeout(exitTimer);
4862
+ exitTimer = void 0;
4863
+ }
4864
+ setClosing(false);
4865
+ setVisible(true);
4866
+ } else if (visible()) {
4867
+ setClosing(true);
4868
+ exitTimer = window.setTimeout(() => {
4869
+ setVisible(false);
4870
+ setClosing(false);
4871
+ exitTimer = void 0;
4872
+ }, exitDurationMs);
4873
+ }
4874
+ });
4875
+ onCleanup(() => {
4876
+ if (exitTimer) clearTimeout(exitTimer);
4877
+ });
4878
+ return { visible, closing };
4879
+ }
4880
+ const BROWSER_COMMAND_DEFINITIONS = [
4881
+ {
4882
+ id: "browser-command-palette",
4883
+ label: "Browser Command Palette",
4884
+ hint: "Search browser actions",
4885
+ keywords: "command palette actions",
4886
+ shortcuts: [{ ctrl: true, key: "k" }],
4887
+ shortcutLabel: "Ctrl+K",
4888
+ icon: "search",
4889
+ privateMode: false,
4890
+ showInPalette: false
4891
+ },
4892
+ {
4893
+ id: "ask-agent",
4894
+ label: "Ask Agent",
4895
+ hint: "Open the AI command bar",
4896
+ keywords: "ai ask chat command bar",
4897
+ shortcuts: [{ ctrl: true, key: "l" }],
4898
+ shortcutLabel: "Ctrl+L",
4899
+ icon: "bot",
4900
+ privateMode: false
4901
+ },
4902
+ {
4903
+ id: "toggle-sidebar",
4904
+ label: "Toggle Agent Panel",
4905
+ hint: "Show or hide the docked agent sidebar",
4906
+ keywords: "agent sidebar panel chat",
4907
+ shortcuts: [{ ctrl: true, shift: true, key: "l" }],
4908
+ shortcutLabel: "Ctrl+Shift+L",
4909
+ icon: "sidebar",
4910
+ privateMode: false
4911
+ },
4912
+ {
4913
+ id: "focus-mode",
4914
+ label: "Toggle Focus Mode",
4915
+ hint: "Hide or restore browser chrome",
4916
+ keywords: "focus fullscreen chrome",
4917
+ shortcuts: [{ ctrl: true, shift: true, key: "f" }],
4918
+ shortcutLabel: "Ctrl+Shift+F",
4919
+ icon: "focus",
4920
+ privateMode: false
4921
+ },
4922
+ {
4923
+ id: "new-tab",
4924
+ label: "New Tab",
4925
+ hint: "Open a fresh browser tab",
4926
+ keywords: "tab create open",
4927
+ shortcuts: [{ ctrl: true, key: "t" }],
4928
+ shortcutLabel: "Ctrl+T",
4929
+ icon: "plus"
4930
+ },
4931
+ {
4932
+ id: "close-tab",
4933
+ label: "Close Tab",
4934
+ hint: "Close the active browser tab",
4935
+ keywords: "tab close remove",
4936
+ shortcuts: [{ ctrl: true, key: "w" }],
4937
+ shortcutLabel: "Ctrl+W",
4938
+ icon: "eraser"
4939
+ },
4940
+ {
4941
+ id: "reopen-tab",
4942
+ label: "Reopen Closed Tab",
4943
+ hint: "Restore the most recently closed tab",
4944
+ keywords: "undo restore closed tab",
4945
+ shortcuts: [{ ctrl: true, shift: true, key: "t" }],
4946
+ shortcutLabel: "Ctrl+Shift+T",
4947
+ icon: "undo"
4948
+ },
4949
+ {
4950
+ id: "new-window",
4951
+ label: "New Window",
4952
+ hint: "Open another Vessel window",
4953
+ keywords: "window browser",
4954
+ shortcuts: [{ ctrl: true, key: "n" }],
4955
+ shortcutLabel: "Ctrl+N",
4956
+ icon: "app-window"
4957
+ },
4958
+ {
4959
+ id: "private-window",
4960
+ label: "New Private Window",
4961
+ hint: "Browse without saving local session data",
4962
+ keywords: "incognito private window",
4963
+ shortcuts: [{ ctrl: true, shift: true, key: "n" }],
4964
+ shortcutLabel: "Ctrl+Shift+N",
4965
+ icon: "shield"
4966
+ },
4967
+ {
4968
+ id: "reload",
4969
+ label: "Reload Page",
4970
+ hint: (context) => context.activeTabTitle() || "Reload the active tab",
4971
+ keywords: "refresh reload page",
4972
+ icon: "rotate"
4973
+ },
4974
+ {
4975
+ id: "go-back",
4976
+ label: "Go Back",
4977
+ hint: "Navigate the active tab backward",
4978
+ keywords: "history previous back",
4979
+ icon: "undo"
4980
+ },
4981
+ {
4982
+ id: "go-forward",
4983
+ label: "Go Forward",
4984
+ hint: "Navigate the active tab forward",
4985
+ keywords: "history next forward",
4986
+ icon: "panel-right"
4987
+ },
4988
+ {
4989
+ id: "find-page",
4990
+ label: "Find in Page",
4991
+ hint: "Search text in the active page",
4992
+ keywords: "find search page text",
4993
+ shortcuts: [{ ctrl: true, key: "f" }],
4994
+ shortcutLabel: "Ctrl+F",
4995
+ icon: "search",
4996
+ showInPalette: false
4997
+ },
4998
+ {
4999
+ id: "settings",
5000
+ label: "Settings",
5001
+ hint: "Open runtime settings",
5002
+ keywords: "preferences configuration provider",
5003
+ shortcuts: [{ ctrl: true, key: "," }],
5004
+ shortcutLabel: "Ctrl+,",
5005
+ icon: "settings",
5006
+ privateMode: false
5007
+ },
5008
+ {
5009
+ id: "downloads",
5010
+ label: "Downloads",
5011
+ hint: "Show recent downloads",
5012
+ keywords: "download files",
5013
+ icon: "download"
5014
+ },
5015
+ {
5016
+ id: "clear-data",
5017
+ label: "Clear Browsing Data",
5018
+ hint: "Open privacy cleanup options",
5019
+ keywords: "privacy cache cookies history",
5020
+ shortcuts: [{ ctrl: true, shift: true, key: "Delete" }],
5021
+ shortcutLabel: "Ctrl+Shift+Delete",
5022
+ icon: "eraser",
5023
+ privateMode: false
5024
+ },
5025
+ {
5026
+ id: "keyboard-help",
5027
+ label: "Keyboard Shortcuts",
5028
+ hint: "Show available browser shortcuts",
5029
+ keywords: "help shortcuts keys",
5030
+ shortcuts: [{ shift: true, key: "?" }],
5031
+ shortcutLabel: "?",
5032
+ icon: "help-circle",
5033
+ ignoreEditableTarget: true
5034
+ },
5035
+ {
5036
+ id: "devtools",
5037
+ label: "Toggle Agent DevTools",
5038
+ hint: "Open or close the agent debugging panel",
5039
+ keywords: "debug devtools activity network console",
5040
+ shortcuts: [{ key: "F12" }],
5041
+ shortcutLabel: "F12",
5042
+ icon: "shield",
5043
+ privateMode: false
5044
+ },
5045
+ {
5046
+ id: "zoom-in",
5047
+ label: "Zoom In",
5048
+ hint: "Increase active page zoom",
5049
+ keywords: "page scale larger",
5050
+ shortcuts: [
5051
+ { ctrl: true, key: "+" },
5052
+ { ctrl: true, key: "=" }
5053
+ ],
5054
+ shortcutLabel: "Ctrl++ / Ctrl+=",
5055
+ icon: "zoom-in"
5056
+ },
5057
+ {
5058
+ id: "zoom-out",
5059
+ label: "Zoom Out",
5060
+ hint: "Decrease active page zoom",
5061
+ keywords: "page scale smaller",
5062
+ shortcuts: [{ ctrl: true, key: "-" }],
5063
+ shortcutLabel: "Ctrl+-",
5064
+ icon: "zoom-out"
5065
+ },
5066
+ {
5067
+ id: "zoom-reset",
5068
+ label: "Reset Zoom",
5069
+ hint: "Return active page zoom to default",
5070
+ keywords: "page scale normal",
5071
+ shortcuts: [{ ctrl: true, key: "0" }],
5072
+ shortcutLabel: "Ctrl+0",
5073
+ icon: "search"
5074
+ },
5075
+ {
5076
+ id: "print",
5077
+ label: "Print Page",
5078
+ hint: "Open print options for the active tab",
5079
+ keywords: "printer paper",
5080
+ shortcuts: [{ ctrl: true, key: "p" }],
5081
+ shortcutLabel: "Ctrl+P",
5082
+ icon: "printer"
5083
+ },
5084
+ {
5085
+ id: "save-pdf",
5086
+ label: "Save Page as PDF",
5087
+ hint: "Export the active tab to a PDF",
5088
+ keywords: "print pdf export",
5089
+ shortcuts: [{ ctrl: true, shift: true, key: "p" }],
5090
+ shortcutLabel: "Ctrl+Shift+P",
5091
+ icon: "file-down"
5092
+ },
5093
+ {
5094
+ id: "toggle-pip",
5095
+ label: "Toggle Picture-in-Picture",
5096
+ hint: "Toggle picture-in-picture for supported media",
5097
+ keywords: "video picture in picture pip",
5098
+ shortcuts: [{ ctrl: true, shift: true, key: "i" }],
5099
+ shortcutLabel: "Ctrl+Shift+I",
5100
+ icon: "panel-right",
5101
+ privateMode: false
5102
+ },
5103
+ {
5104
+ id: "capture-highlight",
5105
+ label: "Capture Highlight",
5106
+ hint: "Save the current page selection",
5107
+ keywords: "highlight selection save quote",
5108
+ shortcuts: [{ ctrl: true, key: "h" }],
5109
+ shortcutLabel: "Ctrl+H",
5110
+ icon: "plus",
5111
+ privateMode: false
5112
+ }
5113
+ ];
5114
+ function createBrowserCommands(context) {
5115
+ const actions = {
5116
+ "browser-command-palette": context.openBrowserCommandPalette,
5117
+ "ask-agent": context.openCommandBar,
5118
+ "toggle-sidebar": context.toggleSidebar,
5119
+ "focus-mode": context.toggleFocusMode,
5120
+ "new-tab": context.createTab,
5121
+ "close-tab": context.closeActiveTab,
5122
+ "reopen-tab": context.reopenClosedTab,
5123
+ "new-window": context.openNewWindow,
5124
+ "private-window": context.openPrivateWindow,
5125
+ reload: context.reload,
5126
+ "go-back": context.goBack,
5127
+ "go-forward": context.goForward,
5128
+ "find-page": () => void 0,
5129
+ settings: context.openSettings,
5130
+ downloads: context.openDownloads,
5131
+ "clear-data": context.clearBrowsingData,
5132
+ "keyboard-help": context.toggleKeyboardHelp,
5133
+ devtools: context.toggleDevTools,
5134
+ "zoom-in": context.zoomIn,
5135
+ "zoom-out": context.zoomOut,
5136
+ "zoom-reset": context.zoomReset,
5137
+ print: context.print,
5138
+ "save-pdf": context.printToPdf,
5139
+ "toggle-pip": context.togglePip,
5140
+ "capture-highlight": context.captureHighlight
5141
+ };
5142
+ return BROWSER_COMMAND_DEFINITIONS.filter(
5143
+ (definition) => definition.showInPalette !== false
5144
+ ).map((definition) => ({
5145
+ id: definition.id,
5146
+ label: definition.label,
5147
+ hint: typeof definition.hint === "function" ? definition.hint(context) : definition.hint,
5148
+ keywords: definition.keywords,
5149
+ shortcut: definition.shortcutLabel,
5150
+ icon: definition.icon,
5151
+ run: actions[definition.id]
5152
+ }));
5153
+ }
5154
+ function getBrowserCommandShortcutHelp(privateMode = false) {
5155
+ return BROWSER_COMMAND_DEFINITIONS.filter(
5156
+ (definition) => definition.shortcutLabel && (!privateMode || definition.privateMode !== false)
5157
+ ).map((definition) => ({
5158
+ keys: definition.shortcutLabel,
5159
+ action: definition.label
5160
+ }));
5161
+ }
5162
+ function getBrowserCommandIdForKeyboardEvent(event) {
5163
+ for (const definition of BROWSER_COMMAND_DEFINITIONS) {
5164
+ if (!definition.shortcuts) continue;
5165
+ if (definition.ignoreEditableTarget && isEditableTarget(event.target)) {
5166
+ continue;
5167
+ }
5168
+ if (definition.shortcuts.some((shortcut) => matchesShortcut(event, shortcut))) {
5169
+ return definition.id;
5170
+ }
5171
+ }
5172
+ return null;
5173
+ }
5174
+ function matchesShortcut(event, shortcut) {
5175
+ const ctrl = event.ctrlKey || event.metaKey;
5176
+ return ctrl === Boolean(shortcut.ctrl) && event.shiftKey === Boolean(shortcut.shift) && event.altKey === Boolean(shortcut.alt) && event.key.toLowerCase() === shortcut.key.toLowerCase();
5177
+ }
5178
+ function isEditableTarget(target) {
5179
+ if (typeof HTMLElement === "undefined" || !(target instanceof HTMLElement)) {
5180
+ return false;
5181
+ }
5182
+ return target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable;
5183
+ }
5184
+ var _tmpl$$h = /* @__PURE__ */ template(`<div class=browser-command-overlay><section class=browser-command-palette><div class=browser-command-search><input placeholder="Search browser commands..."><kbd>Esc</kbd></div><div class=browser-command-list role=listbox>`), _tmpl$2$h = /* @__PURE__ */ template(`<div class=browser-command-empty>No matching commands`), _tmpl$3$f = /* @__PURE__ */ template(`<button type=button class=browser-command-item role=option><span class=browser-command-icon></span><span class=browser-command-copy><span class=browser-command-label></span><span class=browser-command-hint>`), _tmpl$4$f = /* @__PURE__ */ template(`<kbd class=browser-command-shortcut>`);
5185
+ const PALETTE_EXIT_MS = 160;
5186
+ const COMMAND_ICONS = {
5187
+ "app-window": app_window_default,
5188
+ bot: bot_default,
5189
+ download: download_default,
5190
+ eraser: eraser_default,
5191
+ "file-down": file_down_default,
5192
+ focus: focus_default,
5193
+ "help-circle": circle_question_mark_default,
5194
+ "panel-right": panel_right_default,
5195
+ plus: plus_default,
5196
+ printer: printer_default,
5197
+ rotate: rotate_ccw_default,
5198
+ search: search_default,
5199
+ settings: settings_default,
5200
+ shield: shield_default,
5201
+ sidebar: panel_left_default,
5202
+ undo: undo_2_default,
5203
+ "zoom-in": zoom_in_default,
5204
+ "zoom-out": zoom_out_default
5205
+ };
5206
+ const BrowserCommandPalette = (props) => {
5207
+ const {
5208
+ browserCommandPaletteOpen: browserCommandPaletteOpen2,
5209
+ closeBrowserCommandPalette,
5210
+ openCommandBar,
5211
+ toggleSidebar,
5212
+ toggleFocusMode,
5213
+ toggleDevTools,
5214
+ openSettings
5215
+ } = useUI();
5216
+ const {
5217
+ activeTab,
5218
+ activeTabId: activeTabId2,
5219
+ createTab,
5220
+ closeTab,
5221
+ reload,
5222
+ goBack,
5223
+ goForward,
5224
+ reopenClosed,
5225
+ zoomIn,
5226
+ zoomOut,
5227
+ zoomReset,
5228
+ print,
5229
+ printToPdf
5230
+ } = useTabs();
5231
+ const {
5232
+ visible,
5233
+ closing
5234
+ } = useAnimatedPresence(browserCommandPaletteOpen2, PALETTE_EXIT_MS);
5235
+ const [query, setQuery] = createSignal("");
5236
+ const [selectedIndex, setSelectedIndex] = createSignal(0);
5237
+ let inputRef;
5238
+ const runForActiveTab = (action) => {
5239
+ const id = activeTabId2();
5240
+ if (id) return action(id);
5241
+ };
5242
+ const commands = createMemo(() => createBrowserCommands({
5243
+ activeTabTitle: () => activeTab()?.title,
5244
+ createTab: () => createTab(),
5245
+ closeActiveTab: () => runForActiveTab((id) => closeTab(id)),
5246
+ reopenClosedTab: () => reopenClosed(),
5247
+ openNewWindow: () => window.vessel.tabs.openNewWindow(),
5248
+ openPrivateWindow: () => window.vessel.tabs.openPrivateWindow(),
5249
+ reload: () => reload(),
5250
+ goBack: () => goBack(),
5251
+ goForward: () => goForward(),
5252
+ openBrowserCommandPalette: () => void 0,
5253
+ openCommandBar: () => openCommandBar(),
5254
+ toggleSidebar: () => toggleSidebar(),
5255
+ toggleFocusMode: () => toggleFocusMode(),
5256
+ openSettings: () => openSettings(),
5257
+ openDownloads: props.onOpenDownloads,
5258
+ clearBrowsingData: props.onOpenClearData,
5259
+ toggleKeyboardHelp: props.onToggleKeyboardHelp,
5260
+ toggleDevTools: () => toggleDevTools(),
5261
+ zoomIn: () => runForActiveTab((id) => zoomIn(id)),
5262
+ zoomOut: () => runForActiveTab((id) => zoomOut(id)),
5263
+ zoomReset: () => runForActiveTab((id) => zoomReset(id)),
5264
+ print: () => runForActiveTab((id) => print(id)),
5265
+ printToPdf: () => runForActiveTab((id) => printToPdf(id)),
5266
+ togglePip: () => window.vessel.pip.toggle(),
5267
+ captureHighlight: props.onCaptureHighlight
5268
+ }));
5269
+ const filteredCommands = createMemo(() => {
5270
+ const needle = query().trim().toLowerCase();
5271
+ if (!needle) return commands();
5272
+ return commands().filter((command) => `${command.label} ${command.hint} ${command.keywords}`.toLowerCase().includes(needle));
5273
+ });
5274
+ createEffect(() => {
5275
+ if (!browserCommandPaletteOpen2()) return;
5276
+ setQuery("");
5277
+ setSelectedIndex(0);
5278
+ queueMicrotask(() => inputRef?.focus());
5279
+ });
5280
+ createEffect(() => {
5281
+ const count = filteredCommands().length;
5282
+ if (selectedIndex() >= count) {
5283
+ setSelectedIndex(Math.max(0, count - 1));
5284
+ }
5285
+ });
5286
+ const close = () => closeBrowserCommandPalette();
5287
+ const runCommand = async (command) => {
5288
+ close();
5289
+ await command.run();
5290
+ };
5291
+ const onKeyDown = (event) => {
5292
+ if (event.key === "Escape") {
5293
+ event.preventDefault();
5294
+ close();
5295
+ return;
5296
+ }
5297
+ if (event.key === "ArrowDown") {
5298
+ event.preventDefault();
5299
+ const count = filteredCommands().length;
5300
+ if (count > 0) setSelectedIndex((selectedIndex() + 1) % count);
5301
+ return;
5302
+ }
5303
+ if (event.key === "ArrowUp") {
5304
+ event.preventDefault();
5305
+ const count = filteredCommands().length;
5306
+ if (count > 0) setSelectedIndex((selectedIndex() - 1 + count) % count);
5307
+ return;
5308
+ }
5309
+ if (event.key === "Enter") {
5310
+ event.preventDefault();
5311
+ const command = filteredCommands()[selectedIndex()];
5312
+ if (command) void runCommand(command);
5313
+ }
5314
+ };
5315
+ return createComponent(Show, {
5316
+ get when() {
5317
+ return visible();
5318
+ },
5319
+ get children() {
5320
+ var _el$ = _tmpl$$h(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling;
5321
+ _el$.$$click = close;
5322
+ _el$2.$$click = (event) => event.stopPropagation();
5323
+ insert(_el$3, createComponent(search_default, {
5324
+ size: 17,
5325
+ "aria-hidden": "true"
5326
+ }), _el$4);
5327
+ _el$4.$$keydown = onKeyDown;
5328
+ _el$4.$$input = (event) => setQuery(event.currentTarget.value);
5329
+ var _ref$ = inputRef;
5330
+ typeof _ref$ === "function" ? use(_ref$, _el$4) : inputRef = _el$4;
5331
+ setAttribute(_el$4, "spellcheck", false);
5332
+ insert(_el$5, createComponent(Show, {
5333
+ get when() {
5334
+ return filteredCommands().length > 0;
5335
+ },
5336
+ get fallback() {
5337
+ return _tmpl$2$h();
5338
+ },
5339
+ get children() {
5340
+ return createComponent(For, {
5341
+ get each() {
5342
+ return filteredCommands();
5343
+ },
5344
+ children: (command, index) => {
5345
+ const Icon2 = COMMAND_ICONS[command.icon];
5346
+ return (() => {
5347
+ var _el$7 = _tmpl$3$f(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
5348
+ _el$7.$$click = () => void runCommand(command);
5349
+ _el$7.addEventListener("mouseenter", () => setSelectedIndex(index()));
5350
+ insert(_el$8, createComponent(Icon2, {
5351
+ size: 16,
5352
+ "aria-hidden": "true"
5353
+ }));
5354
+ insert(_el$0, () => command.label);
5355
+ insert(_el$1, () => command.hint);
5356
+ insert(_el$7, createComponent(Show, {
5357
+ get when() {
5358
+ return command.shortcut;
5359
+ },
5360
+ children: (shortcut) => (() => {
5361
+ var _el$10 = _tmpl$4$f();
5362
+ insert(_el$10, shortcut);
5363
+ return _el$10;
5364
+ })()
5365
+ }), null);
5366
+ createRenderEffect((_p$) => {
5367
+ var _v$ = !!(index() === selectedIndex()), _v$2 = index() === selectedIndex();
5368
+ _v$ !== _p$.e && _el$7.classList.toggle("selected", _p$.e = _v$);
5369
+ _v$2 !== _p$.t && setAttribute(_el$7, "aria-selected", _p$.t = _v$2);
5370
+ return _p$;
5371
+ }, {
5372
+ e: void 0,
5373
+ t: void 0
5374
+ });
5375
+ return _el$7;
5376
+ })();
5377
+ }
5378
+ });
5379
+ }
5380
+ }));
5381
+ createRenderEffect(() => _el$.classList.toggle("closing", !!closing()));
5382
+ createRenderEffect(() => _el$4.value = query());
5383
+ return _el$;
5384
+ }
5385
+ });
5386
+ };
5387
+ delegateEvents(["click", "input", "keydown"]);
4527
5388
  const MAX_PROVIDER_HISTORY_MESSAGES = 24;
4528
5389
  const MAX_PROVIDER_HISTORY_CHARS = 24e3;
4529
5390
  const MAX_PROVIDER_HISTORY_MESSAGE_CHARS = 3e3;
@@ -4897,33 +5758,6 @@ function useAI() {
4897
5758
  }
4898
5759
  };
4899
5760
  }
4900
- function useAnimatedPresence(isOpen, exitDurationMs) {
4901
- const [visible, setVisible] = createSignal(false);
4902
- const [closing, setClosing] = createSignal(false);
4903
- let exitTimer;
4904
- createEffect(() => {
4905
- const open = isOpen();
4906
- if (open) {
4907
- if (exitTimer) {
4908
- clearTimeout(exitTimer);
4909
- exitTimer = void 0;
4910
- }
4911
- setClosing(false);
4912
- setVisible(true);
4913
- } else if (visible()) {
4914
- setClosing(true);
4915
- exitTimer = window.setTimeout(() => {
4916
- setVisible(false);
4917
- setClosing(false);
4918
- exitTimer = void 0;
4919
- }, exitDurationMs);
4920
- }
4921
- });
4922
- onCleanup(() => {
4923
- if (exitTimer) clearTimeout(exitTimer);
4924
- });
4925
- return { visible, closing };
4926
- }
4927
5761
  function useProviderAuthSetup(options = {}) {
4928
5762
  const [codexAuthStatus, setCodexAuthStatus] = createSignal("idle");
4929
5763
  const [codexAccountEmail, setCodexAccountEmail] = createSignal("");
@@ -9274,7 +10108,7 @@ ${contextBlock}` : contextBlock);
9274
10108
  if (finished) return;
9275
10109
  const totalDelta = startX - state.currentX;
9276
10110
  const targetWidth = startWidth + totalDelta;
9277
- const newWidth = Math.max(240, Math.min(800, Math.round(targetWidth)));
10111
+ const newWidth = clampSidebarWidth(targetWidth);
9278
10112
  resizeSidebar(newWidth);
9279
10113
  };
9280
10114
  const clearPointerTracking = () => {
@@ -14055,75 +14889,6 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
14055
14889
  color: var(--text-secondary);
14056
14890
  }
14057
14891
  `), _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>+`);
14058
- const SHORTCUTS = [{
14059
- keys: "Ctrl+L",
14060
- action: "AI Command Bar",
14061
- privateMode: false
14062
- }, {
14063
- keys: "Ctrl+Shift+L",
14064
- action: "Toggle AI Sidebar",
14065
- privateMode: false
14066
- }, {
14067
- keys: "Ctrl+Shift+F",
14068
- action: "Toggle Focus Mode",
14069
- privateMode: false
14070
- }, {
14071
- keys: "F12",
14072
- action: "Toggle Dev Tools Panel",
14073
- privateMode: false
14074
- }, {
14075
- keys: "Ctrl+N",
14076
- action: "New Window"
14077
- }, {
14078
- keys: "Ctrl+T",
14079
- action: "New Tab"
14080
- }, {
14081
- keys: "Ctrl+W",
14082
- action: "Close Tab"
14083
- }, {
14084
- keys: "Ctrl+Shift+T",
14085
- action: "Reopen Closed Tab"
14086
- }, {
14087
- keys: "Ctrl+F",
14088
- action: "Find in Page"
14089
- }, {
14090
- keys: "Ctrl++ / Ctrl+=",
14091
- action: "Zoom In"
14092
- }, {
14093
- keys: "Ctrl+-",
14094
- action: "Zoom Out"
14095
- }, {
14096
- keys: "Ctrl+0",
14097
- action: "Reset Zoom"
14098
- }, {
14099
- keys: "Ctrl+Shift+N",
14100
- action: "New Private Window"
14101
- }, {
14102
- keys: "Ctrl+P",
14103
- action: "Print Page"
14104
- }, {
14105
- keys: "Ctrl+Shift+P",
14106
- action: "Save Page as PDF"
14107
- }, {
14108
- keys: "Ctrl+Shift+I",
14109
- action: "Toggle Picture-in-Picture",
14110
- privateMode: false
14111
- }, {
14112
- keys: "Ctrl+Shift+Delete",
14113
- action: "Clear Browsing Data",
14114
- privateMode: false
14115
- }, {
14116
- keys: "Ctrl+,",
14117
- action: "Settings",
14118
- privateMode: false
14119
- }, {
14120
- keys: "Ctrl+H",
14121
- action: "Capture Highlight",
14122
- privateMode: false
14123
- }, {
14124
- keys: "?",
14125
- action: "This help overlay"
14126
- }];
14127
14892
  function shortcutParts(keys) {
14128
14893
  return keys.split(" / ").map((combo) => combo.replace(/\+\+/g, "+Plus").split("+").filter(Boolean).map((key) => key === "Plus" ? "+" : key));
14129
14894
  }
@@ -14132,7 +14897,7 @@ const KeyboardHelp = (props) => {
14132
14897
  visible,
14133
14898
  closing
14134
14899
  } = useAnimatedPresence(() => props.open, 200);
14135
- const shortcuts = () => props.privateMode ? SHORTCUTS.filter((shortcut) => shortcut.privateMode !== false) : SHORTCUTS;
14900
+ const shortcuts = () => getBrowserCommandShortcutHelp(props.privateMode);
14136
14901
  return createComponent(Show, {
14137
14902
  get when() {
14138
14903
  return visible();
@@ -14304,110 +15069,42 @@ const ClearBrowsingData = (props) => {
14304
15069
  delegateEvents(["click"]);
14305
15070
  function setupKeybindings(handlers) {
14306
15071
  const listener = (e) => {
14307
- const ctrl = e.ctrlKey || e.metaKey;
14308
- const key = e.key.toLowerCase();
14309
- if (ctrl && key === "l" && !e.shiftKey) {
14310
- e.preventDefault();
14311
- handlers.openCommandBar?.();
14312
- return;
14313
- }
14314
- if (ctrl && key === "l" && e.shiftKey) {
14315
- e.preventDefault();
14316
- handlers.toggleSidebar?.();
14317
- return;
14318
- }
14319
- if (ctrl && key === "f" && e.shiftKey) {
14320
- e.preventDefault();
14321
- handlers.toggleFocusMode?.();
14322
- return;
14323
- }
14324
- if (ctrl && key === "t" && e.shiftKey) {
14325
- e.preventDefault();
14326
- handlers.reopenClosedTab?.();
14327
- return;
14328
- }
14329
- if (ctrl && key === "n" && e.shiftKey) {
14330
- e.preventDefault();
14331
- handlers.openPrivateWindow?.();
14332
- return;
14333
- }
14334
- if (ctrl && key === "n" && !e.shiftKey) {
14335
- e.preventDefault();
14336
- handlers.openNewWindow?.();
14337
- return;
14338
- }
14339
- if (ctrl && key === "t" && !e.shiftKey) {
14340
- e.preventDefault();
14341
- handlers.newTab();
14342
- return;
14343
- }
14344
- if (ctrl && key === "w") {
14345
- e.preventDefault();
14346
- handlers.closeTab();
14347
- return;
14348
- }
14349
- if (ctrl && key === "p" && e.shiftKey) {
14350
- e.preventDefault();
14351
- handlers.printToPdf?.();
14352
- return;
14353
- }
14354
- if (ctrl && key === "i" && e.shiftKey) {
14355
- e.preventDefault();
14356
- handlers.togglePip?.();
14357
- return;
14358
- }
14359
- if (ctrl && e.shiftKey && e.key === "Delete") {
14360
- e.preventDefault();
14361
- handlers.clearBrowsingData?.();
14362
- return;
14363
- }
14364
- if (ctrl && key === "p" && !e.shiftKey) {
14365
- e.preventDefault();
14366
- handlers.print?.();
14367
- return;
14368
- }
14369
- if (ctrl && e.key === ",") {
15072
+ const commandId = getBrowserCommandIdForKeyboardEvent(e);
15073
+ if (!commandId) return;
15074
+ const commandHandler = getCommandHandler(commandId, handlers);
15075
+ if (commandHandler) {
14370
15076
  e.preventDefault();
14371
- handlers.openSettings?.();
14372
- return;
14373
- }
14374
- if (ctrl && key === "h" && !e.shiftKey) {
14375
- e.preventDefault();
14376
- handlers.captureHighlight?.();
14377
- return;
14378
- }
14379
- if (e.key === "F12") {
14380
- e.preventDefault();
14381
- handlers.toggleDevTools?.();
14382
- return;
14383
- }
14384
- if (ctrl && (e.key === "+" || e.key === "=")) {
14385
- e.preventDefault();
14386
- handlers.zoomIn?.();
14387
- return;
14388
- }
14389
- if (ctrl && e.key === "-") {
14390
- e.preventDefault();
14391
- handlers.zoomOut?.();
14392
- return;
14393
- }
14394
- if (ctrl && e.key === "0") {
14395
- e.preventDefault();
14396
- handlers.zoomReset?.();
14397
- return;
14398
- }
14399
- if (e.key === "?" && !ctrl && !e.altKey) {
14400
- const tag = e.target?.tagName;
14401
- if (tag !== "INPUT" && tag !== "TEXTAREA" && !e.target?.isContentEditable) {
14402
- e.preventDefault();
14403
- handlers.toggleKeyboardHelp?.();
14404
- return;
14405
- }
15077
+ commandHandler();
14406
15078
  }
14407
15079
  };
14408
15080
  document.addEventListener("keydown", listener);
14409
15081
  return () => document.removeEventListener("keydown", listener);
14410
15082
  }
15083
+ function getCommandHandler(commandId, handlers) {
15084
+ const commandHandlers = {
15085
+ "browser-command-palette": handlers.openBrowserCommandPalette,
15086
+ "ask-agent": handlers.openCommandBar,
15087
+ "toggle-sidebar": handlers.toggleSidebar,
15088
+ "focus-mode": handlers.toggleFocusMode,
15089
+ "new-tab": handlers.newTab,
15090
+ "close-tab": handlers.closeTab,
15091
+ "reopen-tab": handlers.reopenClosedTab,
15092
+ "new-window": handlers.openNewWindow,
15093
+ "private-window": handlers.openPrivateWindow,
15094
+ settings: handlers.openSettings,
15095
+ "clear-data": handlers.clearBrowsingData,
15096
+ "keyboard-help": handlers.toggleKeyboardHelp,
15097
+ devtools: handlers.toggleDevTools,
15098
+ "zoom-in": handlers.zoomIn,
15099
+ "zoom-out": handlers.zoomOut,
15100
+ "zoom-reset": handlers.zoomReset,
15101
+ print: handlers.print,
15102
+ "save-pdf": handlers.printToPdf,
15103
+ "toggle-pip": handlers.togglePip,
15104
+ "capture-highlight": handlers.captureHighlight
15105
+ };
15106
+ return commandHandlers[commandId];
15107
+ }
14411
15108
  var _tmpl$ = /* @__PURE__ */ template(`<div class=loading-bar>`), _tmpl$2 = /* @__PURE__ */ template(`<div class=app><div class=chrome>`);
14412
15109
  try {
14413
15110
  const cached = localStorage.getItem("vessel:theme");
@@ -14423,6 +15120,7 @@ const App = () => {
14423
15120
  const isChromeOnlyWindow = isPrivateWindow || isSecondaryWindow;
14424
15121
  const {
14425
15122
  openCommandBar,
15123
+ openBrowserCommandPalette,
14426
15124
  toggleSidebar,
14427
15125
  toggleFocusMode,
14428
15126
  openSettings,
@@ -14492,6 +15190,7 @@ const App = () => {
14492
15190
  if (view !== "chrome") return;
14493
15191
  const cleanupKeys = setupKeybindings({
14494
15192
  openCommandBar: isChromeOnlyWindow ? void 0 : openCommandBar,
15193
+ openBrowserCommandPalette: isChromeOnlyWindow ? void 0 : openBrowserCommandPalette,
14495
15194
  toggleSidebar: isChromeOnlyWindow ? void 0 : toggleSidebar,
14496
15195
  toggleFocusMode: isChromeOnlyWindow ? void 0 : toggleFocusMode,
14497
15196
  newTab: () => createTab(),
@@ -14592,7 +15291,12 @@ const App = () => {
14592
15291
  insert(_el$, createComponent(Show, {
14593
15292
  when: !isChromeOnlyWindow,
14594
15293
  get children() {
14595
- return [createComponent(CommandBar, {}), createComponent(Settings, {})];
15294
+ return [createComponent(BrowserCommandPalette, {
15295
+ onOpenClearData: () => setClearDataOpen(true),
15296
+ onToggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v),
15297
+ onCaptureHighlight: captureHighlight,
15298
+ onOpenDownloads: () => setDownloadsOpen(true)
15299
+ }), createComponent(CommandBar, {}), createComponent(Settings, {})];
14596
15300
  }
14597
15301
  }), null);
14598
15302
  insert(_el$, createComponent(DownloadsPanel, {