@quanta-intellect/vessel-browser 0.1.71 → 0.1.73

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.
@@ -1488,6 +1488,301 @@ const TitleBar = () => {
1488
1488
  })();
1489
1489
  };
1490
1490
  delegateEvents(["click"]);
1491
+ var defaultAttributes = {
1492
+ xmlns: "http://www.w3.org/2000/svg",
1493
+ width: 24,
1494
+ height: 24,
1495
+ viewBox: "0 0 24 24",
1496
+ fill: "none",
1497
+ stroke: "currentColor",
1498
+ "stroke-width": 2,
1499
+ "stroke-linecap": "round",
1500
+ "stroke-linejoin": "round"
1501
+ };
1502
+ var defaultAttributes_default = defaultAttributes;
1503
+ var LucideContext = createContext({
1504
+ size: 24,
1505
+ color: "currentColor",
1506
+ strokeWidth: 2,
1507
+ absoluteStrokeWidth: false,
1508
+ class: ""
1509
+ });
1510
+ var _tmpl$$h = /* @__PURE__ */ template(`<svg>`);
1511
+ var hasA11yProp = (props) => {
1512
+ for (const prop in props) {
1513
+ if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
1514
+ return true;
1515
+ }
1516
+ }
1517
+ return false;
1518
+ };
1519
+ var mergeClasses = (...classes) => classes.filter((className2, index, array) => {
1520
+ return Boolean(className2) && className2.trim() !== "" && array.indexOf(className2) === index;
1521
+ }).join(" ").trim();
1522
+ var toCamelCase = (string) => string.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase());
1523
+ var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
1524
+ var toPascalCase = (string) => {
1525
+ const camelCase = toCamelCase(string);
1526
+ return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
1527
+ };
1528
+ var Icon = (props) => {
1529
+ const [localProps, rest] = splitProps(props, ["color", "size", "strokeWidth", "children", "class", "name", "iconNode", "absoluteStrokeWidth"]);
1530
+ const globalProps = useContext(LucideContext);
1531
+ return (() => {
1532
+ var _el$ = _tmpl$$h();
1533
+ spread(_el$, mergeProps(defaultAttributes_default, {
1534
+ get width() {
1535
+ return localProps.size ?? globalProps.size ?? defaultAttributes_default.width;
1536
+ },
1537
+ get height() {
1538
+ return localProps.size ?? globalProps.size ?? defaultAttributes_default.height;
1539
+ },
1540
+ get stroke() {
1541
+ return localProps.color ?? globalProps.color ?? defaultAttributes_default.stroke;
1542
+ },
1543
+ get ["stroke-width"]() {
1544
+ return memo(() => (localProps.absoluteStrokeWidth ?? globalProps.absoluteStrokeWidth) === true)() ? Number(localProps.strokeWidth ?? globalProps.strokeWidth ?? defaultAttributes_default["stroke-width"]) * 24 / Number(localProps.size ?? globalProps.size) : Number(localProps.strokeWidth ?? globalProps.strokeWidth ?? defaultAttributes_default["stroke-width"]);
1545
+ },
1546
+ get ["class"]() {
1547
+ return mergeClasses("lucide", "lucide-icon", globalProps.class, ...localProps.name != null ? [`lucide-${toKebabCase(toPascalCase(localProps.name))}`, `lucide-${toKebabCase(localProps.name)}`] : [], localProps.class);
1548
+ },
1549
+ get ["aria-hidden"]() {
1550
+ return !localProps.children && !hasA11yProp(rest) ? "true" : void 0;
1551
+ }
1552
+ }, rest), true, true);
1553
+ insert(_el$, createComponent(For, {
1554
+ get each() {
1555
+ return localProps.iconNode;
1556
+ },
1557
+ children: ([elementName, attrs]) => {
1558
+ return createComponent(Dynamic, mergeProps({
1559
+ component: elementName
1560
+ }, attrs));
1561
+ }
1562
+ }));
1563
+ return _el$;
1564
+ })();
1565
+ };
1566
+ var Icon_default = Icon;
1567
+ var iconNode$d = [["path", {
1568
+ d: "M12 7v14",
1569
+ key: "1akyts"
1570
+ }], ["path", {
1571
+ d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",
1572
+ key: "ruj8y"
1573
+ }]];
1574
+ var BookOpen = (props) => createComponent(Icon_default, mergeProps(props, {
1575
+ iconNode: iconNode$d,
1576
+ name: "book-open"
1577
+ }));
1578
+ var book_open_default = BookOpen;
1579
+ var iconNode$c = [["rect", {
1580
+ width: "8",
1581
+ height: "4",
1582
+ x: "8",
1583
+ y: "2",
1584
+ rx: "1",
1585
+ ry: "1",
1586
+ key: "tgr4d6"
1587
+ }], ["path", {
1588
+ d: "M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",
1589
+ key: "116196"
1590
+ }], ["path", {
1591
+ d: "M12 11h4",
1592
+ key: "1jrz19"
1593
+ }], ["path", {
1594
+ d: "M12 16h4",
1595
+ key: "n85exb"
1596
+ }], ["path", {
1597
+ d: "M8 11h.01",
1598
+ key: "1dfujw"
1599
+ }], ["path", {
1600
+ d: "M8 16h.01",
1601
+ key: "18s6g9"
1602
+ }]];
1603
+ var ClipboardList = (props) => createComponent(Icon_default, mergeProps(props, {
1604
+ iconNode: iconNode$c,
1605
+ name: "clipboard-list"
1606
+ }));
1607
+ var clipboard_list_default = ClipboardList;
1608
+ var iconNode$b = [["circle", {
1609
+ cx: "12",
1610
+ cy: "12",
1611
+ r: "10",
1612
+ key: "1mglay"
1613
+ }], ["path", {
1614
+ d: "M12 6v6l4 2",
1615
+ key: "mmk7yg"
1616
+ }]];
1617
+ var Clock = (props) => createComponent(Icon_default, mergeProps(props, {
1618
+ iconNode: iconNode$b,
1619
+ name: "clock"
1620
+ }));
1621
+ var clock_default = Clock;
1622
+ var iconNode$a = [["path", {
1623
+ d: "M12 15V3",
1624
+ key: "m9g1x1"
1625
+ }], ["path", {
1626
+ d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",
1627
+ key: "ih7n3h"
1628
+ }], ["path", {
1629
+ d: "m7 10 5 5 5-5",
1630
+ key: "brsn70"
1631
+ }]];
1632
+ var Download = (props) => createComponent(Icon_default, mergeProps(props, {
1633
+ iconNode: iconNode$a,
1634
+ name: "download"
1635
+ }));
1636
+ var download_default = Download;
1637
+ var iconNode$9 = [["circle", {
1638
+ cx: "12",
1639
+ cy: "12",
1640
+ r: "10",
1641
+ key: "1mglay"
1642
+ }], ["path", {
1643
+ d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",
1644
+ key: "13o1zl"
1645
+ }], ["path", {
1646
+ d: "M2 12h20",
1647
+ key: "9i4pu4"
1648
+ }]];
1649
+ var Globe = (props) => createComponent(Icon_default, mergeProps(props, {
1650
+ iconNode: iconNode$9,
1651
+ name: "globe"
1652
+ }));
1653
+ var globe_default = Globe;
1654
+ var iconNode$8 = [["path", {
1655
+ d: "M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 .83.18 2 2 0 0 0 .83-.18l8.58-3.9a1 1 0 0 0 0-1.831z",
1656
+ key: "zzgyd3"
1657
+ }], ["path", {
1658
+ d: "M16 17h6",
1659
+ key: "1ook5g"
1660
+ }], ["path", {
1661
+ d: "M19 14v6",
1662
+ key: "1ckrd5"
1663
+ }], ["path", {
1664
+ d: "M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 .825.178",
1665
+ key: "1ia9y3"
1666
+ }], ["path", {
1667
+ d: "M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l2.116-.962",
1668
+ key: "jksky3"
1669
+ }]];
1670
+ var LayersPlus = (props) => createComponent(Icon_default, mergeProps(props, {
1671
+ iconNode: iconNode$8,
1672
+ name: "layers-plus"
1673
+ }));
1674
+ var layers_plus_default = LayersPlus;
1675
+ var iconNode$7 = [["rect", {
1676
+ width: "18",
1677
+ height: "18",
1678
+ x: "3",
1679
+ y: "3",
1680
+ rx: "2",
1681
+ key: "afitv7"
1682
+ }], ["path", {
1683
+ d: "M3 9h18",
1684
+ key: "1pudct"
1685
+ }]];
1686
+ var PanelTop = (props) => createComponent(Icon_default, mergeProps(props, {
1687
+ iconNode: iconNode$7,
1688
+ name: "panel-top"
1689
+ }));
1690
+ var panel_top_default = PanelTop;
1691
+ var iconNode$6 = [["path", {
1692
+ d: "M5 12h14",
1693
+ key: "1ays0h"
1694
+ }], ["path", {
1695
+ d: "M12 5v14",
1696
+ key: "s699le"
1697
+ }]];
1698
+ var Plus = (props) => createComponent(Icon_default, mergeProps(props, {
1699
+ iconNode: iconNode$6,
1700
+ name: "plus"
1701
+ }));
1702
+ var plus_default = Plus;
1703
+ var iconNode$5 = [["path", {
1704
+ d: "m21 21-4.34-4.34",
1705
+ key: "14j7rj"
1706
+ }], ["circle", {
1707
+ cx: "11",
1708
+ cy: "11",
1709
+ r: "8",
1710
+ key: "4ej97u"
1711
+ }]];
1712
+ var Search = (props) => createComponent(Icon_default, mergeProps(props, {
1713
+ iconNode: iconNode$5,
1714
+ name: "search"
1715
+ }));
1716
+ var search_default = Search;
1717
+ var iconNode$4 = [["path", {
1718
+ d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",
1719
+ key: "r04s7s"
1720
+ }]];
1721
+ var Star = (props) => createComponent(Icon_default, mergeProps(props, {
1722
+ iconNode: iconNode$4,
1723
+ name: "star"
1724
+ }));
1725
+ var star_default = Star;
1726
+ var iconNode$3 = [["path", {
1727
+ d: "M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",
1728
+ key: "vktsd0"
1729
+ }], ["circle", {
1730
+ cx: "7.5",
1731
+ cy: "7.5",
1732
+ r: ".5",
1733
+ fill: "currentColor",
1734
+ key: "kqv944"
1735
+ }]];
1736
+ var Tag = (props) => createComponent(Icon_default, mergeProps(props, {
1737
+ iconNode: iconNode$3,
1738
+ name: "tag"
1739
+ }));
1740
+ var tag_default = Tag;
1741
+ var iconNode$2 = [["path", {
1742
+ d: "M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",
1743
+ key: "uqj9uw"
1744
+ }], ["path", {
1745
+ d: "M16 9a5 5 0 0 1 0 6",
1746
+ key: "1q6k2b"
1747
+ }], ["path", {
1748
+ d: "M19.364 18.364a9 9 0 0 0 0-12.728",
1749
+ key: "ijwkga"
1750
+ }]];
1751
+ var Volume2 = (props) => createComponent(Icon_default, mergeProps(props, {
1752
+ iconNode: iconNode$2,
1753
+ name: "volume-2"
1754
+ }));
1755
+ var volume_2_default = Volume2;
1756
+ var iconNode$1 = [["path", {
1757
+ d: "M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",
1758
+ key: "uqj9uw"
1759
+ }], ["line", {
1760
+ x1: "22",
1761
+ x2: "16",
1762
+ y1: "9",
1763
+ y2: "15",
1764
+ key: "1ewh16"
1765
+ }], ["line", {
1766
+ x1: "16",
1767
+ x2: "22",
1768
+ y1: "9",
1769
+ y2: "15",
1770
+ key: "5ykzw1"
1771
+ }]];
1772
+ var VolumeX = (props) => createComponent(Icon_default, mergeProps(props, {
1773
+ iconNode: iconNode$1,
1774
+ name: "volume-x"
1775
+ }));
1776
+ var volume_x_default = VolumeX;
1777
+ var iconNode = [["path", {
1778
+ d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
1779
+ key: "1xq2db"
1780
+ }]];
1781
+ var Zap = (props) => createComponent(Icon_default, mergeProps(props, {
1782
+ iconNode,
1783
+ name: "zap"
1784
+ }));
1785
+ var zap_default = Zap;
1491
1786
  function getEnvFlag(name) {
1492
1787
  const globalProcess = typeof globalThis === "object" && "process" in globalThis ? globalThis.process : void 0;
1493
1788
  return globalProcess?.env?.[name];
@@ -1601,7 +1896,17 @@ function useTabs() {
1601
1896
  zoomOut: (id) => window.vessel.tabs.zoomOut(id),
1602
1897
  zoomReset: (id) => window.vessel.tabs.zoomReset(id),
1603
1898
  reopenClosed: () => window.vessel.tabs.reopenClosed(),
1604
- duplicate: (id) => window.vessel.tabs.duplicate(id)
1899
+ duplicate: (id) => window.vessel.tabs.duplicate(id),
1900
+ pin: (id) => window.vessel.tabs.pin(id),
1901
+ unpin: (id) => window.vessel.tabs.unpin(id),
1902
+ createGroup: (id) => window.vessel.tabs.createGroup(id),
1903
+ addToGroup: (id, groupId) => window.vessel.tabs.addToGroup(id, groupId),
1904
+ removeFromGroup: (id) => window.vessel.tabs.removeFromGroup(id),
1905
+ toggleGroupCollapsed: (groupId) => window.vessel.tabs.toggleGroupCollapsed(groupId),
1906
+ setGroupColor: (groupId, color) => window.vessel.tabs.setGroupColor(groupId, color),
1907
+ toggleMute: (id) => window.vessel.tabs.toggleMute(id),
1908
+ print: (id) => window.vessel.tabs.print(id),
1909
+ printToPdf: (id) => window.vessel.tabs.printToPdf(id)
1605
1910
  };
1606
1911
  }
1607
1912
  const [now, setNow] = createSignal(Date.now());
@@ -1780,7 +2085,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
1780
2085
  }
1781
2086
  return "idle";
1782
2087
  }
1783
- var _tmpl$$h = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$f = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left>+</button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$c = /* @__PURE__ */ template(`<div role=tab><span class=tab-title></span><button class=tab-close>×`), _tmpl$5$b = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$6$a = /* @__PURE__ */ template(`<span class=tab-loading>`);
2088
+ var _tmpl$$g = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$f = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$c = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$b = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$a = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$9 = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$6 = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$5 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$5 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$5 = /* @__PURE__ */ template(`<span class=tab-loading>`);
1784
2089
  const TAB_CLOSE_MS = 200;
1785
2090
  function stringToHue(str) {
1786
2091
  let hash = 0;
@@ -1814,7 +2119,7 @@ const TabFavicon = (props) => {
1814
2119
  })();
1815
2120
  },
1816
2121
  get children() {
1817
- var _el$ = _tmpl$$h();
2122
+ var _el$ = _tmpl$$g();
1818
2123
  _el$.addEventListener("error", () => setFailed(true));
1819
2124
  createRenderEffect(() => setAttribute(_el$, "src", props.favicon));
1820
2125
  return _el$;
@@ -1827,7 +2132,10 @@ const TabBar = () => {
1827
2132
  activeTabId: activeTabId2,
1828
2133
  switchTab,
1829
2134
  closeTab,
1830
- createTab
2135
+ createTab,
2136
+ createGroup,
2137
+ toggleGroupCollapsed,
2138
+ toggleMute
1831
2139
  } = useTabs();
1832
2140
  const {
1833
2141
  runtimeState: runtimeState2
@@ -1835,6 +2143,30 @@ const TabBar = () => {
1835
2143
  const now2 = useNow();
1836
2144
  const [closingTabIds, setClosingTabIds] = createSignal(/* @__PURE__ */ new Set());
1837
2145
  const modelActiveTabIds = createMemo(() => getAgentActiveTabIds(runtimeState2(), now2()));
2146
+ const tabEntries = createMemo(() => {
2147
+ const seenGroups = /* @__PURE__ */ new Set();
2148
+ return tabs2().flatMap((tab) => {
2149
+ const entries2 = [];
2150
+ if (tab.groupId && !seenGroups.has(tab.groupId)) {
2151
+ seenGroups.add(tab.groupId);
2152
+ entries2.push({
2153
+ type: "group",
2154
+ groupId: tab.groupId,
2155
+ name: tab.groupName || "Group",
2156
+ color: tab.groupColor || "blue",
2157
+ collapsed: !!tab.groupCollapsed,
2158
+ count: tabs2().filter((candidate) => candidate.groupId === tab.groupId).length
2159
+ });
2160
+ }
2161
+ if (!tab.groupCollapsed || tab.id === activeTabId2()) {
2162
+ entries2.push({
2163
+ type: "tab",
2164
+ tab
2165
+ });
2166
+ }
2167
+ return entries2;
2168
+ });
2169
+ });
1838
2170
  const handleClose = (id) => {
1839
2171
  setClosingTabIds((prev) => new Set(prev).add(id));
1840
2172
  setTimeout(() => {
@@ -1847,61 +2179,168 @@ const TabBar = () => {
1847
2179
  }, TAB_CLOSE_MS);
1848
2180
  };
1849
2181
  return (() => {
1850
- var _el$3 = _tmpl$3$c(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;
2182
+ var _el$3 = _tmpl$3$c(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling;
1851
2183
  insert(_el$4, createComponent(For, {
1852
2184
  get each() {
1853
- return tabs2();
2185
+ return tabEntries();
1854
2186
  },
1855
- children: (tab) => (() => {
1856
- var _el$8 = _tmpl$4$c(), _el$9 = _el$8.firstChild, _el$0 = _el$9.nextSibling;
1857
- _el$8.$$contextmenu = (e) => {
1858
- e.preventDefault();
1859
- window.vessel.tabs.showContextMenu(tab.id);
1860
- };
1861
- _el$8.addEventListener("auxclick", (e) => {
1862
- if (e.button === 1) handleClose(tab.id);
1863
- });
1864
- _el$8.$$click = () => switchTab(tab.id);
1865
- insert(_el$8, createComponent(TabFavicon, {
1866
- get favicon() {
1867
- return tab.favicon;
1868
- },
1869
- get title() {
1870
- return tab.title || "New Tab";
1871
- },
1872
- get url() {
1873
- return tab.url;
1874
- }
1875
- }), _el$9);
1876
- insert(_el$8, (() => {
1877
- var _c$ = memo(() => !!modelActiveTabIds().has(tab.id));
1878
- return () => _c$() && _tmpl$5$b();
1879
- })(), _el$9);
1880
- insert(_el$9, () => tab.title || "New Tab");
1881
- insert(_el$8, (() => {
1882
- var _c$2 = memo(() => !!tab.isLoading);
1883
- return () => _c$2() && _tmpl$6$a();
1884
- })(), _el$0);
1885
- _el$0.$$click = (e) => {
1886
- e.stopPropagation();
1887
- handleClose(tab.id);
1888
- };
1889
- createRenderEffect((_p$) => {
1890
- var _v$ = `tab-item ${tab.id === activeTabId2() ? "active" : ""} ${modelActiveTabIds().has(tab.id) ? "model-active" : ""}`, _v$2 = !!closingTabIds().has(tab.id), _v$3 = modelActiveTabIds().has(tab.id) ? `${tab.title || "New Tab"} • Agent active` : tab.title;
1891
- _v$ !== _p$.e && className(_el$8, _p$.e = _v$);
1892
- _v$2 !== _p$.t && _el$8.classList.toggle("closing", _p$.t = _v$2);
1893
- _v$3 !== _p$.a && setAttribute(_el$8, "title", _p$.a = _v$3);
1894
- return _p$;
1895
- }, {
1896
- e: void 0,
1897
- t: void 0,
1898
- a: void 0
1899
- });
1900
- return _el$8;
1901
- })()
2187
+ children: (entry) => createComponent(Show, {
2188
+ get when() {
2189
+ return entry.type === "tab";
2190
+ },
2191
+ get fallback() {
2192
+ return memo(() => entry.type === "group")() && (() => {
2193
+ var _el$0 = _tmpl$4$c(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
2194
+ _el$0.$$contextmenu = (e) => {
2195
+ e.preventDefault();
2196
+ window.vessel.tabs.showGroupContextMenu(entry.groupId);
2197
+ };
2198
+ _el$0.$$click = () => void toggleGroupCollapsed(entry.groupId);
2199
+ insert(_el$10, () => entry.name);
2200
+ insert(_el$11, () => entry.count);
2201
+ createRenderEffect((_p$) => {
2202
+ var _v$ = `tab-group-chip group-${entry.color}`, _v$2 = !!entry.collapsed, _v$3 = `${entry.name} (${entry.count} tabs)`;
2203
+ _v$ !== _p$.e && className(_el$0, _p$.e = _v$);
2204
+ _v$2 !== _p$.t && _el$0.classList.toggle("collapsed", _p$.t = _v$2);
2205
+ _v$3 !== _p$.a && setAttribute(_el$0, "title", _p$.a = _v$3);
2206
+ return _p$;
2207
+ }, {
2208
+ e: void 0,
2209
+ t: void 0,
2210
+ a: void 0
2211
+ });
2212
+ return _el$0;
2213
+ })();
2214
+ },
2215
+ get children() {
2216
+ return memo(() => entry.type === "tab")() && (() => {
2217
+ const tab = entry.tab;
2218
+ return (() => {
2219
+ var _el$12 = _tmpl$6$a();
2220
+ _el$12.$$contextmenu = (e) => {
2221
+ e.preventDefault();
2222
+ window.vessel.tabs.showContextMenu(tab.id);
2223
+ };
2224
+ _el$12.addEventListener("auxclick", (e) => {
2225
+ if (e.button === 1 && !tab.isPinned) handleClose(tab.id);
2226
+ });
2227
+ _el$12.$$click = () => switchTab(tab.id);
2228
+ insert(_el$12, createComponent(TabFavicon, {
2229
+ get favicon() {
2230
+ return tab.favicon;
2231
+ },
2232
+ get title() {
2233
+ return tab.title || "New Tab";
2234
+ },
2235
+ get url() {
2236
+ return tab.url;
2237
+ }
2238
+ }), null);
2239
+ insert(_el$12, createComponent(Show, {
2240
+ get when() {
2241
+ return memo(() => !!tab.isPinned)() && (tab.isAudible || tab.isMuted);
2242
+ },
2243
+ get children() {
2244
+ var _el$13 = _tmpl$5$b();
2245
+ _el$13.$$click = (e) => {
2246
+ e.stopPropagation();
2247
+ void toggleMute(tab.id);
2248
+ };
2249
+ insert(_el$13, createComponent(Show, {
2250
+ get when() {
2251
+ return tab.isMuted;
2252
+ },
2253
+ get fallback() {
2254
+ return createComponent(volume_2_default, {
2255
+ size: 11
2256
+ });
2257
+ },
2258
+ get children() {
2259
+ return createComponent(volume_x_default, {
2260
+ size: 11
2261
+ });
2262
+ }
2263
+ }));
2264
+ createRenderEffect(() => setAttribute(_el$13, "title", tab.isMuted ? "Unmute tab" : "Mute tab"));
2265
+ return _el$13;
2266
+ }
2267
+ }), null);
2268
+ insert(_el$12, (() => {
2269
+ var _c$ = memo(() => !!!tab.isPinned);
2270
+ return () => _c$() && [memo(() => memo(() => !!modelActiveTabIds().has(tab.id))() && _tmpl$0$5()), (() => {
2271
+ var _el$14 = _tmpl$7$9();
2272
+ insert(_el$14, () => tab.title || "New Tab");
2273
+ return _el$14;
2274
+ })(), createComponent(Show, {
2275
+ get when() {
2276
+ return tab.isAudible || tab.isMuted;
2277
+ },
2278
+ get children() {
2279
+ var _el$15 = _tmpl$8$6();
2280
+ _el$15.$$click = (e) => {
2281
+ e.stopPropagation();
2282
+ void toggleMute(tab.id);
2283
+ };
2284
+ insert(_el$15, createComponent(Show, {
2285
+ get when() {
2286
+ return tab.isMuted;
2287
+ },
2288
+ get fallback() {
2289
+ return createComponent(volume_2_default, {
2290
+ size: 12
2291
+ });
2292
+ },
2293
+ get children() {
2294
+ return createComponent(volume_x_default, {
2295
+ size: 12
2296
+ });
2297
+ }
2298
+ }));
2299
+ createRenderEffect(() => setAttribute(_el$15, "title", tab.isMuted ? "Unmute tab" : "Mute tab"));
2300
+ return _el$15;
2301
+ }
2302
+ }), memo(() => memo(() => !!tab.isLoading)() && _tmpl$1$5()), (() => {
2303
+ var _el$16 = _tmpl$9$5();
2304
+ _el$16.$$click = (e) => {
2305
+ e.stopPropagation();
2306
+ handleClose(tab.id);
2307
+ };
2308
+ return _el$16;
2309
+ })()];
2310
+ })(), null);
2311
+ createRenderEffect((_p$) => {
2312
+ var _v$4 = `tab-item ${tab.isPinned ? "pinned" : ""} ${tab.id === activeTabId2() ? "active" : ""} ${modelActiveTabIds().has(tab.id) ? "model-active" : ""} ${tab.groupId ? `group-${tab.groupColor || "blue"}` : ""}`, _v$5 = !!closingTabIds().has(tab.id), _v$6 = tab.isPinned ? tab.title || tab.url : modelActiveTabIds().has(tab.id) ? `${tab.title || "New Tab"} • Agent active` : tab.title;
2313
+ _v$4 !== _p$.e && className(_el$12, _p$.e = _v$4);
2314
+ _v$5 !== _p$.t && _el$12.classList.toggle("closing", _p$.t = _v$5);
2315
+ _v$6 !== _p$.a && setAttribute(_el$12, "title", _p$.a = _v$6);
2316
+ return _p$;
2317
+ }, {
2318
+ e: void 0,
2319
+ t: void 0,
2320
+ a: void 0
2321
+ });
2322
+ return _el$12;
2323
+ })();
2324
+ })();
2325
+ }
2326
+ })
2327
+ }));
2328
+ _el$6.$$click = () => window.vessel.tabs.openNewWindow();
2329
+ insert(_el$6, createComponent(panel_top_default, {
2330
+ size: 14
2331
+ }));
2332
+ _el$7.$$click = () => {
2333
+ const id = activeTabId2();
2334
+ if (id) void createGroup(id);
2335
+ };
2336
+ insert(_el$7, createComponent(layers_plus_default, {
2337
+ size: 14
1902
2338
  }));
1903
- _el$6.$$click = () => createTab();
1904
- _el$7.$$click = () => window.vessel.tabs.openPrivateWindow();
2339
+ _el$8.$$click = () => createTab();
2340
+ insert(_el$8, createComponent(plus_default, {
2341
+ size: 15
2342
+ }));
2343
+ _el$9.$$click = () => window.vessel.tabs.openPrivateWindow();
1905
2344
  return _el$3;
1906
2345
  })();
1907
2346
  };
@@ -2046,6 +2485,8 @@ function useBookmarks() {
2046
2485
  ),
2047
2486
  updateBookmark: (id, updates) => window.vessel.bookmarks.updateBookmark(id, updates),
2048
2487
  removeBookmark: (id) => window.vessel.bookmarks.removeBookmark(id),
2488
+ exportHtml: (options) => window.vessel.bookmarks.exportHtml(options),
2489
+ exportJson: () => window.vessel.bookmarks.exportJson(),
2049
2490
  createFolder: (name) => window.vessel.bookmarks.createFolder(name),
2050
2491
  createFolderWithSummary: (name, summary) => window.vessel.bookmarks.createFolderWithSummary(name, summary),
2051
2492
  removeFolder: (id, deleteContents) => window.vessel.bookmarks.removeFolder(id, deleteContents),
@@ -2174,7 +2615,7 @@ const SEARCH_ENGINE_PRESETS = {
2174
2615
  ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
2175
2616
  kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
2176
2617
  };
2177
- var _tmpl$$g = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$e = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$3$b = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$4$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$5$a = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$6$9 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>What changed since </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>&times;`), _tmpl$8$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$9$4 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$0$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$1$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$10$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$12$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$14$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$16$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$18$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$21$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$22$3 = /* @__PURE__ */ template(`<li>`);
2618
+ var _tmpl$$f = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$e = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$3$b = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$4$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$5$a = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$6$9 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>What changed since </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>&times;`), _tmpl$8$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$9$4 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$0$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$1$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$10$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$12$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$14$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$16$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$18$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$21$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$22$3 = /* @__PURE__ */ template(`<li>`);
2178
2619
  const AddressBar = () => {
2179
2620
  const {
2180
2621
  activeTab,
@@ -2430,7 +2871,7 @@ const AddressBar = () => {
2430
2871
  insert(_el$, createComponent(Show, {
2431
2872
  when: isPrivateWindow,
2432
2873
  get children() {
2433
- return _tmpl$$g();
2874
+ return _tmpl$$f();
2434
2875
  }
2435
2876
  }), _el$7);
2436
2877
  _el$8.addEventListener("submit", handleSubmit);
@@ -2526,7 +2967,7 @@ const AddressBar = () => {
2526
2967
  return memo(() => !!pageDiff())() && diffExpanded();
2527
2968
  },
2528
2969
  get children() {
2529
- var _el$13 = _tmpl$7$7(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild;
2970
+ var _el$13 = _tmpl$7$8(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild;
2530
2971
  _el$16.firstChild;
2531
2972
  var _el$23 = _el$15.nextSibling, _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
2532
2973
  insert(_el$16, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
@@ -2747,7 +3188,7 @@ const AddressBar = () => {
2747
3188
  })();
2748
3189
  };
2749
3190
  delegateEvents(["click", "input", "keydown", "mousedown"]);
2750
- var _tmpl$$f = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
3191
+ var _tmpl$$e = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
2751
3192
  const TOAST_DURATION_MS$1 = 4200;
2752
3193
  const TOAST_EXIT_MS$2 = 300;
2753
3194
  function isBookmarkToastCandidate(action) {
@@ -2807,7 +3248,7 @@ const BookmarkNotifications = () => {
2807
3248
  timeoutIds.clear();
2808
3249
  });
2809
3250
  return (() => {
2810
- var _el$ = _tmpl$$f();
3251
+ var _el$ = _tmpl$$e();
2811
3252
  insert(_el$, createComponent(For, {
2812
3253
  get each() {
2813
3254
  return toasts();
@@ -2823,7 +3264,7 @@ const BookmarkNotifications = () => {
2823
3264
  return _el$;
2824
3265
  })();
2825
3266
  };
2826
- var _tmpl$$e = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
3267
+ var _tmpl$$d = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
2827
3268
  const TOAST_DURATION_MS = 3e3;
2828
3269
  const TOAST_EXIT_MS$1 = 300;
2829
3270
  const HighlightNotifications = (props) => {
@@ -2862,7 +3303,7 @@ const HighlightNotifications = (props) => {
2862
3303
  return memo(() => !!visible())() && current();
2863
3304
  },
2864
3305
  get children() {
2865
- var _el$ = _tmpl$$e(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
3306
+ var _el$ = _tmpl$$d(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
2866
3307
  insert(_el$3, () => current().title);
2867
3308
  insert(_el$4, () => current().message);
2868
3309
  createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!leaving()));
@@ -2870,7 +3311,7 @@ const HighlightNotifications = (props) => {
2870
3311
  }
2871
3312
  });
2872
3313
  };
2873
- var _tmpl$$d = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$c = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$a = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$9 = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$6 = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
3314
+ var _tmpl$$c = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$c = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$a = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$9 = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
2874
3315
  const TOAST_DONE_DURATION_MS = 4200;
2875
3316
  const TOAST_EXIT_MS = 300;
2876
3317
  function formatBytes(bytes) {
@@ -2961,13 +3402,13 @@ const DownloadToast = () => {
2961
3402
  return Math.min(100, Math.round(d.receivedBytes / d.totalBytes * 100));
2962
3403
  };
2963
3404
  return (() => {
2964
- var _el$ = _tmpl$$d();
3405
+ var _el$ = _tmpl$$c();
2965
3406
  insert(_el$, createComponent(For, {
2966
3407
  get each() {
2967
3408
  return downloads();
2968
3409
  },
2969
3410
  children: (dl) => (() => {
2970
- var _el$2 = _tmpl$7$6(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
3411
+ var _el$2 = _tmpl$7$7(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
2971
3412
  insert(_el$4, () => dl.filename);
2972
3413
  insert(_el$3, createComponent(Show, {
2973
3414
  get when() {
@@ -3026,7 +3467,7 @@ const DownloadToast = () => {
3026
3467
  return _el$;
3027
3468
  })();
3028
3469
  };
3029
- var _tmpl$$c = /* @__PURE__ */ template(`<div class=find-bar><input class=find-bar-input type=text placeholder="Find in page..."><button class=find-bar-btn title="Previous (Shift+Enter)">&#9650;</button><button class=find-bar-btn title="Next (Enter)">&#9660;</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">&times;`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=find-bar-count>`);
3470
+ var _tmpl$$b = /* @__PURE__ */ template(`<div class=find-bar><input class=find-bar-input type=text placeholder="Find in page..."><button class=find-bar-btn title="Previous (Shift+Enter)">&#9650;</button><button class=find-bar-btn title="Next (Enter)">&#9660;</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">&times;`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=find-bar-count>`);
3030
3471
  const FindBar = () => {
3031
3472
  const [open, setOpen] = createSignal(false);
3032
3473
  const [query, setQuery] = createSignal("");
@@ -3104,7 +3545,7 @@ const FindBar = () => {
3104
3545
  return open();
3105
3546
  },
3106
3547
  get children() {
3107
- var _el$ = _tmpl$$c(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
3548
+ var _el$ = _tmpl$$b(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
3108
3549
  _el$2.$$input = (e) => handleInput(e.currentTarget.value);
3109
3550
  var _ref$ = inputRef;
3110
3551
  typeof _ref$ === "function" ? use(_ref$, _el$2) : inputRef = _el$2;
@@ -3131,7 +3572,7 @@ const FindBar = () => {
3131
3572
  });
3132
3573
  };
3133
3574
  delegateEvents(["input", "click"]);
3134
- var _tmpl$$b = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$a = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$9 = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$9 = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
3575
+ var _tmpl$$a = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$a = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$9 = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$9 = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
3135
3576
  const FlowProgress = () => {
3136
3577
  const {
3137
3578
  runtimeState: runtimeState2
@@ -3162,7 +3603,7 @@ const FlowProgress = () => {
3162
3603
  return flow() || tracker();
3163
3604
  },
3164
3605
  get children() {
3165
- var _el$ = _tmpl$$b();
3606
+ var _el$ = _tmpl$$a();
3166
3607
  insert(_el$, createComponent(Show, {
3167
3608
  get when() {
3168
3609
  return tracker();
@@ -3262,7 +3703,7 @@ function formatTime(iso, options) {
3262
3703
  ...options?.includeSeconds && { second: "2-digit" }
3263
3704
  });
3264
3705
  }
3265
- var _tmpl$$a = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$9 = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$8 = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$8 = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$7 = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$7 = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$5 = /* @__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>`);
3706
+ var _tmpl$$9 = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$9 = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$8 = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$8 = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$7 = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$7 = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$6 = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
3266
3707
  const AgentTranscriptDock = () => {
3267
3708
  const {
3268
3709
  runtimeState: runtimeState2
@@ -3299,7 +3740,7 @@ const AgentTranscriptDock = () => {
3299
3740
  return isSummary();
3300
3741
  },
3301
3742
  get children() {
3302
- var _el$ = _tmpl$$a();
3743
+ var _el$ = _tmpl$$9();
3303
3744
  insert(_el$, createComponent(Show, {
3304
3745
  get when() {
3305
3746
  return latestEntry();
@@ -3354,7 +3795,7 @@ const AgentTranscriptDock = () => {
3354
3795
  return visibleEntries();
3355
3796
  },
3356
3797
  children: (entry) => (() => {
3357
- var _el$12 = _tmpl$7$5(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
3798
+ var _el$12 = _tmpl$7$6(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
3358
3799
  insert(_el$14, () => entry.title || entry.kind);
3359
3800
  insert(_el$15, () => formatTime(entry.updatedAt));
3360
3801
  insert(_el$16, () => entry.text);
@@ -3719,7 +4160,7 @@ function useAnimatedPresence(isOpen, exitDurationMs) {
3719
4160
  });
3720
4161
  return { visible, closing };
3721
4162
  }
3722
- var _tmpl$$9 = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Configure a chat provider to start using the AI assistant.</p><button class=command-bar-no-provider-btn>Open Settings <kbd>Ctrl+,`), _tmpl$2$8 = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$3$7 = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$4$7 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$5$6 = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$6$6 = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
4163
+ var _tmpl$$8 = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Configure a chat provider to start using the AI assistant.</p><button class=command-bar-no-provider-btn>Open Settings <kbd>Ctrl+,`), _tmpl$2$8 = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$3$7 = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$4$7 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$5$6 = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$6$6 = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
3723
4164
  const COMMAND_BAR_EXIT_MS = 200;
3724
4165
  const CommandBar = () => {
3725
4166
  const {
@@ -3787,7 +4228,7 @@ const CommandBar = () => {
3787
4228
  return !hasProvider();
3788
4229
  },
3789
4230
  get children() {
3790
- var _el$6 = _tmpl$$9(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
4231
+ var _el$6 = _tmpl$$8(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
3791
4232
  _el$8.$$click = () => {
3792
4233
  closeCommandBar();
3793
4234
  openSettings();
@@ -5335,7 +5776,7 @@ function getBookmarkSearchMatch(args) {
5335
5776
  }
5336
5777
  return { matchedFields, score };
5337
5778
  }
5338
- var _tmpl$$8 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$6 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$6 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`);
5779
+ var _tmpl$$7 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$6 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$6 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`);
5339
5780
  const DropdownSelect = (props) => {
5340
5781
  const [open, setOpen] = createSignal(false);
5341
5782
  let rootRef;
@@ -5369,7 +5810,7 @@ const DropdownSelect = (props) => {
5369
5810
  return open();
5370
5811
  },
5371
5812
  get children() {
5372
- var _el$5 = _tmpl$$8();
5813
+ var _el$5 = _tmpl$$7();
5373
5814
  insert(_el$5, createComponent(For, {
5374
5815
  get each() {
5375
5816
  return props.options;
@@ -5423,216 +5864,6 @@ const DropdownSelect = (props) => {
5423
5864
  })();
5424
5865
  };
5425
5866
  delegateEvents(["click"]);
5426
- var defaultAttributes = {
5427
- xmlns: "http://www.w3.org/2000/svg",
5428
- width: 24,
5429
- height: 24,
5430
- viewBox: "0 0 24 24",
5431
- fill: "none",
5432
- stroke: "currentColor",
5433
- "stroke-width": 2,
5434
- "stroke-linecap": "round",
5435
- "stroke-linejoin": "round"
5436
- };
5437
- var defaultAttributes_default = defaultAttributes;
5438
- var LucideContext = createContext({
5439
- size: 24,
5440
- color: "currentColor",
5441
- strokeWidth: 2,
5442
- absoluteStrokeWidth: false,
5443
- class: ""
5444
- });
5445
- var _tmpl$$7 = /* @__PURE__ */ template(`<svg>`);
5446
- var hasA11yProp = (props) => {
5447
- for (const prop in props) {
5448
- if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
5449
- return true;
5450
- }
5451
- }
5452
- return false;
5453
- };
5454
- var mergeClasses = (...classes) => classes.filter((className2, index, array) => {
5455
- return Boolean(className2) && className2.trim() !== "" && array.indexOf(className2) === index;
5456
- }).join(" ").trim();
5457
- var toCamelCase = (string) => string.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase());
5458
- var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
5459
- var toPascalCase = (string) => {
5460
- const camelCase = toCamelCase(string);
5461
- return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
5462
- };
5463
- var Icon = (props) => {
5464
- const [localProps, rest] = splitProps(props, ["color", "size", "strokeWidth", "children", "class", "name", "iconNode", "absoluteStrokeWidth"]);
5465
- const globalProps = useContext(LucideContext);
5466
- return (() => {
5467
- var _el$ = _tmpl$$7();
5468
- spread(_el$, mergeProps(defaultAttributes_default, {
5469
- get width() {
5470
- return localProps.size ?? globalProps.size ?? defaultAttributes_default.width;
5471
- },
5472
- get height() {
5473
- return localProps.size ?? globalProps.size ?? defaultAttributes_default.height;
5474
- },
5475
- get stroke() {
5476
- return localProps.color ?? globalProps.color ?? defaultAttributes_default.stroke;
5477
- },
5478
- get ["stroke-width"]() {
5479
- return memo(() => (localProps.absoluteStrokeWidth ?? globalProps.absoluteStrokeWidth) === true)() ? Number(localProps.strokeWidth ?? globalProps.strokeWidth ?? defaultAttributes_default["stroke-width"]) * 24 / Number(localProps.size ?? globalProps.size) : Number(localProps.strokeWidth ?? globalProps.strokeWidth ?? defaultAttributes_default["stroke-width"]);
5480
- },
5481
- get ["class"]() {
5482
- return mergeClasses("lucide", "lucide-icon", globalProps.class, ...localProps.name != null ? [`lucide-${toKebabCase(toPascalCase(localProps.name))}`, `lucide-${toKebabCase(localProps.name)}`] : [], localProps.class);
5483
- },
5484
- get ["aria-hidden"]() {
5485
- return !localProps.children && !hasA11yProp(rest) ? "true" : void 0;
5486
- }
5487
- }, rest), true, true);
5488
- insert(_el$, createComponent(For, {
5489
- get each() {
5490
- return localProps.iconNode;
5491
- },
5492
- children: ([elementName, attrs]) => {
5493
- return createComponent(Dynamic, mergeProps({
5494
- component: elementName
5495
- }, attrs));
5496
- }
5497
- }));
5498
- return _el$;
5499
- })();
5500
- };
5501
- var Icon_default = Icon;
5502
- var iconNode$8 = [["path", {
5503
- d: "M12 7v14",
5504
- key: "1akyts"
5505
- }], ["path", {
5506
- d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",
5507
- key: "ruj8y"
5508
- }]];
5509
- var BookOpen = (props) => createComponent(Icon_default, mergeProps(props, {
5510
- iconNode: iconNode$8,
5511
- name: "book-open"
5512
- }));
5513
- var book_open_default = BookOpen;
5514
- var iconNode$7 = [["rect", {
5515
- width: "8",
5516
- height: "4",
5517
- x: "8",
5518
- y: "2",
5519
- rx: "1",
5520
- ry: "1",
5521
- key: "tgr4d6"
5522
- }], ["path", {
5523
- d: "M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",
5524
- key: "116196"
5525
- }], ["path", {
5526
- d: "M12 11h4",
5527
- key: "1jrz19"
5528
- }], ["path", {
5529
- d: "M12 16h4",
5530
- key: "n85exb"
5531
- }], ["path", {
5532
- d: "M8 11h.01",
5533
- key: "1dfujw"
5534
- }], ["path", {
5535
- d: "M8 16h.01",
5536
- key: "18s6g9"
5537
- }]];
5538
- var ClipboardList = (props) => createComponent(Icon_default, mergeProps(props, {
5539
- iconNode: iconNode$7,
5540
- name: "clipboard-list"
5541
- }));
5542
- var clipboard_list_default = ClipboardList;
5543
- var iconNode$6 = [["circle", {
5544
- cx: "12",
5545
- cy: "12",
5546
- r: "10",
5547
- key: "1mglay"
5548
- }], ["path", {
5549
- d: "M12 6v6l4 2",
5550
- key: "mmk7yg"
5551
- }]];
5552
- var Clock = (props) => createComponent(Icon_default, mergeProps(props, {
5553
- iconNode: iconNode$6,
5554
- name: "clock"
5555
- }));
5556
- var clock_default = Clock;
5557
- var iconNode$5 = [["path", {
5558
- d: "M12 15V3",
5559
- key: "m9g1x1"
5560
- }], ["path", {
5561
- d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",
5562
- key: "ih7n3h"
5563
- }], ["path", {
5564
- d: "m7 10 5 5 5-5",
5565
- key: "brsn70"
5566
- }]];
5567
- var Download = (props) => createComponent(Icon_default, mergeProps(props, {
5568
- iconNode: iconNode$5,
5569
- name: "download"
5570
- }));
5571
- var download_default = Download;
5572
- var iconNode$4 = [["circle", {
5573
- cx: "12",
5574
- cy: "12",
5575
- r: "10",
5576
- key: "1mglay"
5577
- }], ["path", {
5578
- d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",
5579
- key: "13o1zl"
5580
- }], ["path", {
5581
- d: "M2 12h20",
5582
- key: "9i4pu4"
5583
- }]];
5584
- var Globe = (props) => createComponent(Icon_default, mergeProps(props, {
5585
- iconNode: iconNode$4,
5586
- name: "globe"
5587
- }));
5588
- var globe_default = Globe;
5589
- var iconNode$3 = [["path", {
5590
- d: "m21 21-4.34-4.34",
5591
- key: "14j7rj"
5592
- }], ["circle", {
5593
- cx: "11",
5594
- cy: "11",
5595
- r: "8",
5596
- key: "4ej97u"
5597
- }]];
5598
- var Search = (props) => createComponent(Icon_default, mergeProps(props, {
5599
- iconNode: iconNode$3,
5600
- name: "search"
5601
- }));
5602
- var search_default = Search;
5603
- var iconNode$2 = [["path", {
5604
- 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",
5605
- key: "r04s7s"
5606
- }]];
5607
- var Star = (props) => createComponent(Icon_default, mergeProps(props, {
5608
- iconNode: iconNode$2,
5609
- name: "star"
5610
- }));
5611
- var star_default = Star;
5612
- var iconNode$1 = [["path", {
5613
- 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",
5614
- key: "vktsd0"
5615
- }], ["circle", {
5616
- cx: "7.5",
5617
- cy: "7.5",
5618
- r: ".5",
5619
- fill: "currentColor",
5620
- key: "kqv944"
5621
- }]];
5622
- var Tag = (props) => createComponent(Icon_default, mergeProps(props, {
5623
- iconNode: iconNode$1,
5624
- name: "tag"
5625
- }));
5626
- var tag_default = Tag;
5627
- var iconNode = [["path", {
5628
- 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",
5629
- key: "1xq2db"
5630
- }]];
5631
- var Zap = (props) => createComponent(Icon_default, mergeProps(props, {
5632
- iconNode,
5633
- name: "zap"
5634
- }));
5635
- var zap_default = Zap;
5636
5867
  const BUNDLED_KIT_IDS = /* @__PURE__ */ new Set([
5637
5868
  "research-collect",
5638
5869
  "price-scout",
@@ -5782,7 +6013,7 @@ function renderKitPrompt(kit, values) {
5782
6013
  (_, key) => values[key] ?? ""
5783
6014
  );
5784
6015
  }
5785
- var _tmpl$$6 = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$6 = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$5 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$5 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$4 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$3 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$3 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$3 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$2 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$2 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$2 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$2 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$2 = /* @__PURE__ */ template(`<option>`), _tmpl$42$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
6016
+ var _tmpl$$6 = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$6 = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$5 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$5 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$5 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$3 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$3 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$3 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$2 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$2 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$2 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$2 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$2 = /* @__PURE__ */ template(`<option>`), _tmpl$42$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
5786
6017
  const ICON_MAP = {
5787
6018
  BookOpen: book_open_default,
5788
6019
  Tag: tag_default,
@@ -6281,7 +6512,7 @@ const AutomationTab = (props) => {
6281
6512
  },
6282
6513
  get children() {
6283
6514
  return [(() => {
6284
- var _el$19 = _tmpl$7$4(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
6515
+ var _el$19 = _tmpl$7$5(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
6285
6516
  insert(_el$19, createComponent(zap_default, {
6286
6517
  size: 12
6287
6518
  }), _el$20);
@@ -6621,7 +6852,7 @@ const AutomationTab = (props) => {
6621
6852
  })();
6622
6853
  };
6623
6854
  delegateEvents(["click", "input", "keydown", "contextmenu"]);
6624
- var _tmpl$$5 = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$5 = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$4 = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=agent-section-title>Recent page changes`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=page-diff-list>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$3 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$8$3 = /* @__PURE__ */ template(`<div class=page-diff-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=page-diff-content><div class=page-diff-time></div><div class=page-diff-summary>`);
6855
+ var _tmpl$$5 = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$5 = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$4 = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=agent-section-title>Recent page changes`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=page-diff-list>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$4 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$8$3 = /* @__PURE__ */ template(`<div class=page-diff-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=page-diff-content><div class=page-diff-time></div><div class=page-diff-summary>`);
6625
6856
  const PageDiffTimeline = () => {
6626
6857
  const {
6627
6858
  activeTab
@@ -6718,7 +6949,7 @@ const PageDiffTimeline = () => {
6718
6949
  return i() < bursts().length - 1;
6719
6950
  },
6720
6951
  get children() {
6721
- return _tmpl$7$3();
6952
+ return _tmpl$7$4();
6722
6953
  }
6723
6954
  }), null);
6724
6955
  insert(_el$10, () => new Date(burst.detectedAt).toLocaleString());
@@ -6735,7 +6966,7 @@ const PageDiffTimeline = () => {
6735
6966
  })();
6736
6967
  };
6737
6968
  const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
6738
- var _tmpl$$4 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$3 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$3 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$3 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$2 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$2 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$0$2 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$1$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$10$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$11$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$12$2 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><button class=history-clear-btn>Clear</button></div><div class=history-list>`), _tmpl$13$1 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$15$1 = /* @__PURE__ */ template(`<span>`), _tmpl$16$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$17$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$19$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$20$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$23$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button></div><div class=sidebar-messages><div>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$34$1 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$35$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$36$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$38$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$39$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$40$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$41$1 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$42$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$43 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$44 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$45 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$46 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$47 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$51 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$52 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$53 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$54 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$55 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$56 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$57 = /* @__PURE__ */ template(`<div>`), _tmpl$58 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$59 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$60 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$61 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
6969
+ var _tmpl$$4 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$3 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$3 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$3 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$3 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$2 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$0$2 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$1$2 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-export-card><div><div class=bookmark-panel-title>Export</div><div class=bookmark-panel-subtitle>Save browser-ready HTML or a full Vessel archive</div></div><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Browser HTML</button><button class=bookmark-secondary-button type=button>HTML + notes</button><button class=bookmark-secondary-button type=button>Vessel JSON</button></div></div><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$10$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$11$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$12$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$13$1 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><button class=history-clear-btn>Clear</button></div><div class=history-list>`), _tmpl$14$1 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$15$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$16$1 = /* @__PURE__ */ template(`<span>`), _tmpl$17$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$18$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$19$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$20$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$21$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$23$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$24$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button></div><div class=sidebar-messages><div>`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$34$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$35$1 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$36$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$38$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$39$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$40$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$41$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$42$1 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$43 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$44 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$45 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$46 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$47 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$52 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$53 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$54 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$55 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$56 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$57 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$58 = /* @__PURE__ */ template(`<div>`), _tmpl$59 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$60 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$61 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$62 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
6739
6970
  const UNSORTED_FOLDER = {
6740
6971
  id: "unsorted",
6741
6972
  name: "Unsorted",
@@ -6818,6 +7049,8 @@ const Sidebar = (props) => {
6818
7049
  saveBookmark,
6819
7050
  updateBookmark,
6820
7051
  removeBookmark,
7052
+ exportHtml,
7053
+ exportJson,
6821
7054
  createFolderWithSummary,
6822
7055
  removeFolder,
6823
7056
  renameFolder
@@ -6997,6 +7230,8 @@ ${contextBlock}` : contextBlock);
6997
7230
  const [newFolderName, setNewFolderName] = createSignal("");
6998
7231
  const [newFolderSummary, setNewFolderSummary] = createSignal("");
6999
7232
  const [bookmarkSearchQuery, setBookmarkSearchQuery] = createSignal("");
7233
+ const [bookmarkExportMessage, setBookmarkExportMessage] = createSignal("");
7234
+ const [bookmarkExporting, setBookmarkExporting] = createSignal(false);
7000
7235
  const [editingFolderId, setEditingFolderId] = createSignal(null);
7001
7236
  const [editingFolderName, setEditingFolderName] = createSignal("");
7002
7237
  const [editingFolderSummary, setEditingFolderSummary] = createSignal("");
@@ -7273,6 +7508,24 @@ ${contextBlock}` : contextBlock);
7273
7508
  setEditingFolderSummary("");
7274
7509
  }
7275
7510
  };
7511
+ const handleExportBookmarks = async (format) => {
7512
+ setBookmarkExporting(true);
7513
+ setBookmarkExportMessage("");
7514
+ try {
7515
+ const result = format === "json" ? await exportJson() : await exportHtml({
7516
+ includeNotes: format === "html-with-notes"
7517
+ });
7518
+ if (!result) {
7519
+ setBookmarkExportMessage("Export canceled.");
7520
+ return;
7521
+ }
7522
+ setBookmarkExportMessage(`Exported ${result.count} bookmarks to ${result.filePath}`);
7523
+ } catch (error) {
7524
+ setBookmarkExportMessage(error instanceof Error ? error.message : "Could not export bookmarks.");
7525
+ } finally {
7526
+ setBookmarkExporting(false);
7527
+ }
7528
+ };
7276
7529
  const toggleFolderExpanded = (folderId) => {
7277
7530
  setExpandedFolderIds((current) => current.includes(folderId) ? current.filter((id) => id !== folderId) : [...current, folderId]);
7278
7531
  };
@@ -7290,9 +7543,9 @@ ${contextBlock}` : contextBlock);
7290
7543
  return props.forceOpen || sidebarOpen2();
7291
7544
  },
7292
7545
  get children() {
7293
- var _el$9 = _tmpl$27$1(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$1.nextSibling, _el$16 = _el$15.firstChild;
7546
+ var _el$9 = _tmpl$28$1(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$1.nextSibling, _el$16 = _el$15.firstChild;
7294
7547
  _el$16.firstChild;
7295
- var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$23.nextSibling, _el$25 = _el$15.nextSibling, _el$104 = _el$25.firstChild;
7548
+ var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$23.nextSibling, _el$25 = _el$15.nextSibling, _el$111 = _el$25.firstChild;
7296
7549
  _el$0.$$pointerdown = startResize;
7297
7550
  setAttribute(_el$11, "src", vesselLogo);
7298
7551
  addEventListener(_el$13, "click", clearHistory, true);
@@ -7323,7 +7576,7 @@ ${contextBlock}` : contextBlock);
7323
7576
  return sidebarTab() === "supervisor";
7324
7577
  },
7325
7578
  get children() {
7326
- var _el$26 = _tmpl$7$2(), _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$27.nextSibling, _el$33 = _el$32.firstChild, _el$34 = _el$33.nextSibling, _el$36 = _el$32.nextSibling, _el$38 = _el$36.nextSibling;
7579
+ var _el$26 = _tmpl$7$3(), _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$27.nextSibling, _el$33 = _el$32.firstChild, _el$34 = _el$33.nextSibling, _el$36 = _el$32.nextSibling, _el$38 = _el$36.nextSibling;
7327
7580
  _el$38.firstChild;
7328
7581
  insert(_el$30, () => runtimeState2().supervisor.paused ? "Agent is paused" : "Agent is live");
7329
7582
  insert(_el$31, () => runtimeState2().supervisor.paused ? "Paused" : "Running");
@@ -7358,7 +7611,7 @@ ${contextBlock}` : contextBlock);
7358
7611
  return runtimeState2().supervisor.pendingApprovals.length > 0;
7359
7612
  },
7360
7613
  get fallback() {
7361
- return _tmpl$28$1();
7614
+ return _tmpl$29$1();
7362
7615
  },
7363
7616
  get children() {
7364
7617
  return [_tmpl$5$3(), createComponent(For, {
@@ -7366,13 +7619,13 @@ ${contextBlock}` : contextBlock);
7366
7619
  return runtimeState2().supervisor.pendingApprovals;
7367
7620
  },
7368
7621
  children: (approval) => (() => {
7369
- var _el$122 = _tmpl$29$1(), _el$123 = _el$122.firstChild, _el$124 = _el$123.nextSibling, _el$125 = _el$124.nextSibling, _el$126 = _el$125.nextSibling, _el$127 = _el$126.nextSibling, _el$128 = _el$127.firstChild, _el$129 = _el$128.nextSibling;
7370
- insert(_el$124, () => approval.name);
7371
- insert(_el$125, () => approval.argsSummary);
7372
- insert(_el$126, () => approval.reason);
7373
- _el$128.$$click = () => void resolveApproval(approval.id, true);
7374
- _el$129.$$click = () => void resolveApproval(approval.id, false);
7375
- return _el$122;
7622
+ var _el$129 = _tmpl$30$1(), _el$130 = _el$129.firstChild, _el$131 = _el$130.nextSibling, _el$132 = _el$131.nextSibling, _el$133 = _el$132.nextSibling, _el$134 = _el$133.nextSibling, _el$135 = _el$134.firstChild, _el$136 = _el$135.nextSibling;
7623
+ insert(_el$131, () => approval.name);
7624
+ insert(_el$132, () => approval.argsSummary);
7625
+ insert(_el$133, () => approval.reason);
7626
+ _el$135.$$click = () => void resolveApproval(approval.id, true);
7627
+ _el$136.$$click = () => void resolveApproval(approval.id, false);
7628
+ return _el$129;
7376
7629
  })()
7377
7630
  })];
7378
7631
  }
@@ -7396,7 +7649,7 @@ ${contextBlock}` : contextBlock);
7396
7649
  return recentActions().length > 0;
7397
7650
  },
7398
7651
  get fallback() {
7399
- return _tmpl$30$1();
7652
+ return _tmpl$31$1();
7400
7653
  },
7401
7654
  get children() {
7402
7655
  return createComponent(Show, {
@@ -7404,7 +7657,7 @@ ${contextBlock}` : contextBlock);
7404
7657
  return actionsExpanded();
7405
7658
  },
7406
7659
  get fallback() {
7407
- return _tmpl$31$1();
7660
+ return _tmpl$32$1();
7408
7661
  },
7409
7662
  get children() {
7410
7663
  return createComponent(For, {
@@ -7412,32 +7665,32 @@ ${contextBlock}` : contextBlock);
7412
7665
  return recentActions();
7413
7666
  },
7414
7667
  children: (action) => (() => {
7415
- var _el$132 = _tmpl$34$1(), _el$133 = _el$132.firstChild, _el$134 = _el$133.firstChild, _el$135 = _el$134.nextSibling, _el$136 = _el$133.nextSibling;
7416
- insert(_el$134, () => action.name);
7417
- insert(_el$135, () => action.status);
7418
- insert(_el$136, () => action.argsSummary);
7419
- insert(_el$132, createComponent(Show, {
7668
+ var _el$139 = _tmpl$35$1(), _el$140 = _el$139.firstChild, _el$141 = _el$140.firstChild, _el$142 = _el$141.nextSibling, _el$143 = _el$140.nextSibling;
7669
+ insert(_el$141, () => action.name);
7670
+ insert(_el$142, () => action.status);
7671
+ insert(_el$143, () => action.argsSummary);
7672
+ insert(_el$139, createComponent(Show, {
7420
7673
  get when() {
7421
7674
  return action.resultSummary;
7422
7675
  },
7423
7676
  get children() {
7424
- var _el$137 = _tmpl$32$1();
7425
- insert(_el$137, () => action.resultSummary);
7426
- return _el$137;
7677
+ var _el$144 = _tmpl$33$1();
7678
+ insert(_el$144, () => action.resultSummary);
7679
+ return _el$144;
7427
7680
  }
7428
7681
  }), null);
7429
- insert(_el$132, createComponent(Show, {
7682
+ insert(_el$139, createComponent(Show, {
7430
7683
  get when() {
7431
7684
  return action.error;
7432
7685
  },
7433
7686
  get children() {
7434
- var _el$138 = _tmpl$33$1();
7435
- insert(_el$138, () => action.error);
7436
- return _el$138;
7687
+ var _el$145 = _tmpl$34$1();
7688
+ insert(_el$145, () => action.error);
7689
+ return _el$145;
7437
7690
  }
7438
7691
  }), null);
7439
- createRenderEffect(() => className(_el$135, `agent-action-status ${action.status}`));
7440
- return _el$132;
7692
+ createRenderEffect(() => className(_el$142, `agent-action-status ${action.status}`));
7693
+ return _el$139;
7441
7694
  })()
7442
7695
  });
7443
7696
  }
@@ -7447,13 +7700,13 @@ ${contextBlock}` : contextBlock);
7447
7700
  createRenderEffect(() => _el$31.classList.toggle("paused", !!runtimeState2().supervisor.paused));
7448
7701
  return _el$26;
7449
7702
  }
7450
- }), _el$104);
7703
+ }), _el$111);
7451
7704
  insert(_el$25, createComponent(Show, {
7452
7705
  get when() {
7453
7706
  return sidebarTab() === "bookmarks";
7454
7707
  },
7455
7708
  get children() {
7456
- var _el$41 = _tmpl$0$2(), _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling, _el$47 = _el$42.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$62 = _el$48.nextSibling, _el$63 = _el$62.firstChild, _el$64 = _el$63.firstChild, _el$65 = _el$64.nextSibling, _el$66 = _el$63.nextSibling, _el$67 = _el$62.nextSibling;
7709
+ var _el$41 = _tmpl$1$2(), _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling, _el$47 = _el$42.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling, _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling, _el$53 = _el$52.nextSibling, _el$55 = _el$48.nextSibling, _el$56 = _el$55.firstChild, _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling, _el$69 = _el$55.nextSibling, _el$70 = _el$69.firstChild, _el$71 = _el$70.firstChild, _el$72 = _el$71.nextSibling, _el$73 = _el$70.nextSibling, _el$74 = _el$69.nextSibling;
7457
7710
  insert(_el$45, (() => {
7458
7711
  var _c$2 = memo(() => !!normalizedBookmarkSearch());
7459
7712
  return () => _c$2() ? `${bookmarkMatchCount()} matches for "${bookmarkSearchQuery().trim()}"` : `${bookmarksState2().bookmarks.length} saved across ${bookmarkFolders().length} folders`;
@@ -7467,16 +7720,29 @@ ${contextBlock}` : contextBlock);
7467
7720
  }
7468
7721
  }), null);
7469
7722
  _el$47.$$input = (e) => setBookmarkSearchQuery(e.currentTarget.value);
7470
- _el$49.$$click = () => setBookmarkSaveExpanded((current) => !current);
7723
+ _el$51.$$click = () => void handleExportBookmarks("html");
7724
+ _el$52.$$click = () => void handleExportBookmarks("html-with-notes");
7725
+ _el$53.$$click = () => void handleExportBookmarks("json");
7471
7726
  insert(_el$48, createComponent(Show, {
7727
+ get when() {
7728
+ return bookmarkExportMessage();
7729
+ },
7730
+ get children() {
7731
+ var _el$54 = _tmpl$9$2();
7732
+ insert(_el$54, bookmarkExportMessage);
7733
+ return _el$54;
7734
+ }
7735
+ }), null);
7736
+ _el$56.$$click = () => setBookmarkSaveExpanded((current) => !current);
7737
+ insert(_el$55, createComponent(Show, {
7472
7738
  get when() {
7473
7739
  return bookmarkSaveExpanded();
7474
7740
  },
7475
7741
  get children() {
7476
- var _el$52 = _tmpl$9$2(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling, _el$55 = _el$54.nextSibling, _el$56 = _el$55.firstChild, _el$57 = _el$55.nextSibling, _el$58 = _el$57.nextSibling, _el$59 = _el$58.nextSibling, _el$60 = _el$59.nextSibling, _el$61 = _el$60.nextSibling;
7477
- insert(_el$53, () => currentTab()?.title || "No active page");
7478
- insert(_el$54, () => currentTab()?.url || "Open a page to save it here.");
7479
- insert(_el$55, createComponent(DropdownSelect, {
7742
+ var _el$59 = _tmpl$0$2(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling, _el$62 = _el$61.nextSibling, _el$63 = _el$62.firstChild, _el$64 = _el$62.nextSibling, _el$65 = _el$64.nextSibling, _el$66 = _el$65.nextSibling, _el$67 = _el$66.nextSibling, _el$68 = _el$67.nextSibling;
7743
+ insert(_el$60, () => currentTab()?.title || "No active page");
7744
+ insert(_el$61, () => currentTab()?.url || "Open a page to save it here.");
7745
+ insert(_el$62, createComponent(DropdownSelect, {
7480
7746
  "class": "bookmark-select",
7481
7747
  get value() {
7482
7748
  return selectedFolderId();
@@ -7486,37 +7752,37 @@ ${contextBlock}` : contextBlock);
7486
7752
  },
7487
7753
  ariaLabel: "Bookmark folder",
7488
7754
  onChange: (value) => setSelectedFolderId(value)
7489
- }), _el$56);
7490
- _el$56.$$click = () => void handleSaveBookmark();
7491
- _el$57.$$input = (e) => setBookmarkNote(e.currentTarget.value);
7492
- _el$58.$$input = (e) => setBookmarkIntent(e.currentTarget.value);
7493
- _el$59.$$input = (e) => setBookmarkExpectedContent(e.currentTarget.value);
7494
- _el$60.$$input = (e) => setBookmarkKeyFields(e.currentTarget.value);
7495
- _el$61.$$input = (e) => setBookmarkAgentHints(e.currentTarget.value);
7496
- createRenderEffect(() => _el$56.disabled = !currentTab()?.url);
7497
- createRenderEffect(() => _el$57.value = bookmarkNote());
7498
- createRenderEffect(() => _el$58.value = bookmarkIntent());
7499
- createRenderEffect(() => _el$59.value = bookmarkExpectedContent());
7500
- createRenderEffect(() => _el$60.value = bookmarkKeyFields());
7501
- createRenderEffect(() => _el$61.value = bookmarkAgentHints());
7502
- return _el$52;
7755
+ }), _el$63);
7756
+ _el$63.$$click = () => void handleSaveBookmark();
7757
+ _el$64.$$input = (e) => setBookmarkNote(e.currentTarget.value);
7758
+ _el$65.$$input = (e) => setBookmarkIntent(e.currentTarget.value);
7759
+ _el$66.$$input = (e) => setBookmarkExpectedContent(e.currentTarget.value);
7760
+ _el$67.$$input = (e) => setBookmarkKeyFields(e.currentTarget.value);
7761
+ _el$68.$$input = (e) => setBookmarkAgentHints(e.currentTarget.value);
7762
+ createRenderEffect(() => _el$63.disabled = !currentTab()?.url);
7763
+ createRenderEffect(() => _el$64.value = bookmarkNote());
7764
+ createRenderEffect(() => _el$65.value = bookmarkIntent());
7765
+ createRenderEffect(() => _el$66.value = bookmarkExpectedContent());
7766
+ createRenderEffect(() => _el$67.value = bookmarkKeyFields());
7767
+ createRenderEffect(() => _el$68.value = bookmarkAgentHints());
7768
+ return _el$59;
7503
7769
  }
7504
7770
  }), null);
7505
- _el$62.addEventListener("submit", handleCreateFolder);
7506
- _el$64.$$input = (e) => setNewFolderName(e.currentTarget.value);
7507
- _el$65.$$input = (e) => setNewFolderSummary(e.currentTarget.value);
7508
- insert(_el$67, createComponent(Show, {
7771
+ _el$69.addEventListener("submit", handleCreateFolder);
7772
+ _el$71.$$input = (e) => setNewFolderName(e.currentTarget.value);
7773
+ _el$72.$$input = (e) => setNewFolderSummary(e.currentTarget.value);
7774
+ insert(_el$74, createComponent(Show, {
7509
7775
  get when() {
7510
7776
  return filteredGroupedBookmarks().length > 0;
7511
7777
  },
7512
7778
  get fallback() {
7513
7779
  return (() => {
7514
- var _el$139 = _tmpl$35$1();
7515
- insert(_el$139, (() => {
7780
+ var _el$146 = _tmpl$36$1();
7781
+ insert(_el$146, (() => {
7516
7782
  var _c$5 = memo(() => !!normalizedBookmarkSearch());
7517
7783
  return () => _c$5() ? `No bookmarks matched "${bookmarkSearchQuery().trim()}".` : "No bookmarks saved yet.";
7518
7784
  })());
7519
- return _el$139;
7785
+ return _el$146;
7520
7786
  })();
7521
7787
  },
7522
7788
  get children() {
@@ -7525,100 +7791,100 @@ ${contextBlock}` : contextBlock);
7525
7791
  return filteredGroupedBookmarks();
7526
7792
  },
7527
7793
  children: (folder) => (() => {
7528
- var _el$140 = _tmpl$42$1(), _el$141 = _el$140.firstChild, _el$142 = _el$141.firstChild, _el$143 = _el$142.firstChild, _el$144 = _el$143.nextSibling, _el$145 = _el$144.firstChild, _el$146 = _el$145.nextSibling, _el$147 = _el$146.firstChild;
7529
- _el$141.$$keydown = (e) => {
7794
+ var _el$147 = _tmpl$43(), _el$148 = _el$147.firstChild, _el$149 = _el$148.firstChild, _el$150 = _el$149.firstChild, _el$151 = _el$150.nextSibling, _el$152 = _el$151.firstChild, _el$153 = _el$152.nextSibling, _el$154 = _el$153.firstChild;
7795
+ _el$148.$$keydown = (e) => {
7530
7796
  if (e.key === "Enter" || e.key === " ") {
7531
7797
  e.preventDefault();
7532
7798
  toggleFolderExpanded(folder.id);
7533
7799
  }
7534
7800
  };
7535
- _el$141.$$click = () => toggleFolderExpanded(folder.id);
7536
- insert(_el$145, () => folder.name);
7537
- insert(_el$146, () => folder.items.length, _el$147);
7538
- insert(_el$144, createComponent(Show, {
7801
+ _el$148.$$click = () => toggleFolderExpanded(folder.id);
7802
+ insert(_el$152, () => folder.name);
7803
+ insert(_el$153, () => folder.items.length, _el$154);
7804
+ insert(_el$151, createComponent(Show, {
7539
7805
  get when() {
7540
7806
  return folder.summary;
7541
7807
  },
7542
7808
  get children() {
7543
- var _el$148 = _tmpl$36$1();
7544
- insert(_el$148, () => folder.summary);
7545
- return _el$148;
7809
+ var _el$155 = _tmpl$37$1();
7810
+ insert(_el$155, () => folder.summary);
7811
+ return _el$155;
7546
7812
  }
7547
7813
  }), null);
7548
- insert(_el$141, createComponent(Show, {
7814
+ insert(_el$148, createComponent(Show, {
7549
7815
  get when() {
7550
7816
  return folder.id !== UNSORTED_FOLDER.id;
7551
7817
  },
7552
7818
  get children() {
7553
- var _el$149 = _tmpl$37$1(), _el$150 = _el$149.firstChild, _el$151 = _el$150.nextSibling;
7554
- _el$150.$$click = (e) => {
7819
+ var _el$156 = _tmpl$38$1(), _el$157 = _el$156.firstChild, _el$158 = _el$157.nextSibling;
7820
+ _el$157.$$click = (e) => {
7555
7821
  e.stopPropagation();
7556
7822
  setEditingFolderId(folder.id);
7557
7823
  setEditingFolderName(folder.name);
7558
7824
  setEditingFolderSummary(folder.summary || "");
7559
7825
  };
7560
- _el$151.$$click = (e) => {
7826
+ _el$158.$$click = (e) => {
7561
7827
  e.stopPropagation();
7562
7828
  setDeletingFolderId(folder.id);
7563
7829
  };
7564
- return _el$149;
7830
+ return _el$156;
7565
7831
  }
7566
7832
  }), null);
7567
- insert(_el$140, createComponent(Show, {
7833
+ insert(_el$147, createComponent(Show, {
7568
7834
  get when() {
7569
7835
  return deletingFolderId() === folder.id;
7570
7836
  },
7571
7837
  get children() {
7572
- var _el$152 = _tmpl$39$1(), _el$153 = _el$152.firstChild, _el$154 = _el$153.firstChild, _el$156 = _el$154.nextSibling;
7573
- _el$156.nextSibling;
7574
- var _el$157 = _el$153.nextSibling, _el$159 = _el$157.firstChild, _el$160 = _el$159.nextSibling;
7575
- insert(_el$153, () => folder.name, _el$156);
7576
- insert(_el$153, (() => {
7838
+ var _el$159 = _tmpl$40$1(), _el$160 = _el$159.firstChild, _el$161 = _el$160.firstChild, _el$163 = _el$161.nextSibling;
7839
+ _el$163.nextSibling;
7840
+ var _el$164 = _el$160.nextSibling, _el$166 = _el$164.firstChild, _el$167 = _el$166.nextSibling;
7841
+ insert(_el$160, () => folder.name, _el$163);
7842
+ insert(_el$160, (() => {
7577
7843
  var _c$6 = memo(() => folder.items.length > 0);
7578
7844
  return () => _c$6() ? ` This folder has ${folder.items.length} bookmark${folder.items.length === 1 ? "" : "s"}.` : "";
7579
7845
  })(), null);
7580
- insert(_el$157, createComponent(Show, {
7846
+ insert(_el$164, createComponent(Show, {
7581
7847
  get when() {
7582
7848
  return folder.items.length > 0;
7583
7849
  },
7584
7850
  get children() {
7585
- var _el$158 = _tmpl$38$1();
7586
- _el$158.$$click = () => void handleRemoveFolder(folder.id, false);
7587
- return _el$158;
7851
+ var _el$165 = _tmpl$39$1();
7852
+ _el$165.$$click = () => void handleRemoveFolder(folder.id, false);
7853
+ return _el$165;
7588
7854
  }
7589
- }), _el$159);
7590
- _el$159.$$click = () => void handleRemoveFolder(folder.id, true);
7591
- insert(_el$159, () => folder.items.length > 0 ? "Delete all" : "Delete folder");
7592
- _el$160.$$click = () => setDeletingFolderId(null);
7593
- return _el$152;
7855
+ }), _el$166);
7856
+ _el$166.$$click = () => void handleRemoveFolder(folder.id, true);
7857
+ insert(_el$166, () => folder.items.length > 0 ? "Delete all" : "Delete folder");
7858
+ _el$167.$$click = () => setDeletingFolderId(null);
7859
+ return _el$159;
7594
7860
  }
7595
7861
  }), null);
7596
- insert(_el$140, createComponent(Show, {
7862
+ insert(_el$147, createComponent(Show, {
7597
7863
  get when() {
7598
7864
  return editingFolderId() === folder.id;
7599
7865
  },
7600
7866
  get children() {
7601
- var _el$161 = _tmpl$40$1(), _el$162 = _el$161.firstChild, _el$163 = _el$162.firstChild, _el$164 = _el$163.nextSibling, _el$165 = _el$162.nextSibling, _el$166 = _el$165.nextSibling;
7602
- _el$163.$$input = (e) => setEditingFolderName(e.currentTarget.value);
7603
- _el$164.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
7604
- _el$165.$$click = () => void handleRenameFolder(folder.id);
7605
- _el$166.$$click = () => {
7867
+ var _el$168 = _tmpl$41$1(), _el$169 = _el$168.firstChild, _el$170 = _el$169.firstChild, _el$171 = _el$170.nextSibling, _el$172 = _el$169.nextSibling, _el$173 = _el$172.nextSibling;
7868
+ _el$170.$$input = (e) => setEditingFolderName(e.currentTarget.value);
7869
+ _el$171.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
7870
+ _el$172.$$click = () => void handleRenameFolder(folder.id);
7871
+ _el$173.$$click = () => {
7606
7872
  setEditingFolderId(null);
7607
7873
  setEditingFolderName("");
7608
7874
  setEditingFolderSummary("");
7609
7875
  };
7610
- createRenderEffect(() => _el$165.disabled = !editingFolderName().trim());
7611
- createRenderEffect(() => _el$163.value = editingFolderName());
7612
- createRenderEffect(() => _el$164.value = editingFolderSummary());
7613
- return _el$161;
7876
+ createRenderEffect(() => _el$172.disabled = !editingFolderName().trim());
7877
+ createRenderEffect(() => _el$170.value = editingFolderName());
7878
+ createRenderEffect(() => _el$171.value = editingFolderSummary());
7879
+ return _el$168;
7614
7880
  }
7615
7881
  }), null);
7616
- insert(_el$140, createComponent(Show, {
7882
+ insert(_el$147, createComponent(Show, {
7617
7883
  get when() {
7618
7884
  return isFolderExpanded(folder.id);
7619
7885
  },
7620
7886
  get fallback() {
7621
- return _tmpl$43();
7887
+ return _tmpl$44();
7622
7888
  },
7623
7889
  get children() {
7624
7890
  return createComponent(Show, {
@@ -7626,203 +7892,209 @@ ${contextBlock}` : contextBlock);
7626
7892
  return folder.items.length > 0;
7627
7893
  },
7628
7894
  get fallback() {
7629
- return _tmpl$44();
7895
+ return _tmpl$45();
7630
7896
  },
7631
7897
  get children() {
7632
- var _el$167 = _tmpl$41$1();
7633
- insert(_el$167, createComponent(For, {
7898
+ var _el$174 = _tmpl$42$1();
7899
+ insert(_el$174, createComponent(For, {
7634
7900
  get each() {
7635
7901
  return folder.items;
7636
7902
  },
7637
7903
  children: (bookmark) => (() => {
7638
- var _el$170 = _tmpl$51(), _el$171 = _el$170.firstChild, _el$172 = _el$171.firstChild, _el$173 = _el$172.nextSibling, _el$198 = _el$171.nextSibling, _el$199 = _el$198.firstChild, _el$200 = _el$199.nextSibling, _el$201 = _el$200.nextSibling;
7639
- _el$171.$$click = () => void createTab(bookmark.url);
7640
- insert(_el$172, () => bookmark.title || bookmark.url);
7641
- insert(_el$173, () => bookmark.url);
7642
- insert(_el$170, createComponent(Show, {
7904
+ var _el$177 = _tmpl$52(), _el$178 = _el$177.firstChild, _el$179 = _el$178.firstChild, _el$180 = _el$179.nextSibling, _el$205 = _el$178.nextSibling, _el$206 = _el$205.firstChild, _el$207 = _el$206.nextSibling, _el$208 = _el$207.nextSibling;
7905
+ _el$178.$$click = () => void createTab(bookmark.url);
7906
+ insert(_el$179, () => bookmark.title || bookmark.url);
7907
+ insert(_el$180, () => bookmark.url);
7908
+ insert(_el$177, createComponent(Show, {
7643
7909
  get when() {
7644
7910
  return bookmark.note;
7645
7911
  },
7646
7912
  get children() {
7647
- var _el$174 = _tmpl$45();
7648
- insert(_el$174, () => bookmark.note);
7649
- return _el$174;
7913
+ var _el$181 = _tmpl$46();
7914
+ insert(_el$181, () => bookmark.note);
7915
+ return _el$181;
7650
7916
  }
7651
- }), _el$198);
7652
- insert(_el$170, createComponent(Show, {
7917
+ }), _el$205);
7918
+ insert(_el$177, createComponent(Show, {
7653
7919
  get when() {
7654
7920
  return bookmark.intent || bookmark.expectedContent || (bookmark.keyFields?.length || 0) > 0 || (bookmark.agentHints && Object.keys(bookmark.agentHints).length || 0) > 0;
7655
7921
  },
7656
7922
  get children() {
7657
- var _el$175 = _tmpl$45();
7658
- insert(_el$175, createComponent(Show, {
7923
+ var _el$182 = _tmpl$46();
7924
+ insert(_el$182, createComponent(Show, {
7659
7925
  get when() {
7660
7926
  return bookmark.intent;
7661
7927
  },
7662
7928
  get children() {
7663
- var _el$176 = _tmpl$46(), _el$177 = _el$176.firstChild;
7664
- _el$177.nextSibling;
7665
- insert(_el$176, () => bookmark.intent, null);
7666
- return _el$176;
7929
+ var _el$183 = _tmpl$47(), _el$184 = _el$183.firstChild;
7930
+ _el$184.nextSibling;
7931
+ insert(_el$183, () => bookmark.intent, null);
7932
+ return _el$183;
7667
7933
  }
7668
7934
  }), null);
7669
- insert(_el$175, createComponent(Show, {
7935
+ insert(_el$182, createComponent(Show, {
7670
7936
  get when() {
7671
7937
  return bookmark.expectedContent;
7672
7938
  },
7673
7939
  get children() {
7674
- var _el$179 = _tmpl$47(), _el$180 = _el$179.firstChild;
7675
- _el$180.nextSibling;
7676
- insert(_el$179, () => bookmark.expectedContent, null);
7677
- return _el$179;
7940
+ var _el$186 = _tmpl$48(), _el$187 = _el$186.firstChild;
7941
+ _el$187.nextSibling;
7942
+ insert(_el$186, () => bookmark.expectedContent, null);
7943
+ return _el$186;
7678
7944
  }
7679
7945
  }), null);
7680
- insert(_el$175, createComponent(Show, {
7946
+ insert(_el$182, createComponent(Show, {
7681
7947
  get when() {
7682
7948
  return (bookmark.keyFields?.length || 0) > 0;
7683
7949
  },
7684
7950
  get children() {
7685
- var _el$182 = _tmpl$48(), _el$183 = _el$182.firstChild;
7686
- _el$183.nextSibling;
7687
- insert(_el$182, () => bookmark.keyFields?.join(", "), null);
7688
- return _el$182;
7951
+ var _el$189 = _tmpl$49(), _el$190 = _el$189.firstChild;
7952
+ _el$190.nextSibling;
7953
+ insert(_el$189, () => bookmark.keyFields?.join(", "), null);
7954
+ return _el$189;
7689
7955
  }
7690
7956
  }), null);
7691
- insert(_el$175, createComponent(Show, {
7957
+ insert(_el$182, createComponent(Show, {
7692
7958
  get when() {
7693
7959
  return memo(() => !!bookmark.agentHints)() && Object.keys(bookmark.agentHints).length > 0;
7694
7960
  },
7695
7961
  get children() {
7696
- var _el$185 = _tmpl$49(), _el$186 = _el$185.firstChild;
7697
- _el$186.nextSibling;
7698
- insert(_el$185, () => Object.entries(bookmark.agentHints || {}).map(([key, hint]) => `${key}: ${hint}`).join(" • "), null);
7699
- return _el$185;
7962
+ var _el$192 = _tmpl$50(), _el$193 = _el$192.firstChild;
7963
+ _el$193.nextSibling;
7964
+ insert(_el$192, () => Object.entries(bookmark.agentHints || {}).map(([key, hint]) => `${key}: ${hint}`).join(" • "), null);
7965
+ return _el$192;
7700
7966
  }
7701
7967
  }), null);
7702
- return _el$175;
7968
+ return _el$182;
7703
7969
  }
7704
- }), _el$198);
7705
- insert(_el$170, createComponent(Show, {
7970
+ }), _el$205);
7971
+ insert(_el$177, createComponent(Show, {
7706
7972
  get when() {
7707
7973
  return editingBookmarkId() === bookmark.id;
7708
7974
  },
7709
7975
  get children() {
7710
- var _el$188 = _tmpl$50(), _el$189 = _el$188.firstChild, _el$190 = _el$189.nextSibling, _el$191 = _el$190.nextSibling, _el$192 = _el$191.nextSibling, _el$193 = _el$192.nextSibling, _el$194 = _el$193.nextSibling, _el$195 = _el$194.nextSibling, _el$196 = _el$195.firstChild, _el$197 = _el$196.nextSibling;
7711
- _el$189.$$input = (e) => setEditingBookmarkTitle(e.currentTarget.value);
7712
- _el$190.$$input = (e) => setEditingBookmarkNote(e.currentTarget.value);
7713
- _el$191.$$input = (e) => setEditingBookmarkIntent(e.currentTarget.value);
7714
- _el$192.$$input = (e) => setEditingBookmarkExpectedContent(e.currentTarget.value);
7715
- _el$193.$$input = (e) => setEditingBookmarkKeyFields(e.currentTarget.value);
7716
- _el$194.$$input = (e) => setEditingBookmarkAgentHints(e.currentTarget.value);
7717
- _el$196.$$click = () => void handleUpdateBookmark(bookmark.id);
7718
- _el$197.$$click = resetBookmarkEditor;
7719
- createRenderEffect(() => _el$189.value = editingBookmarkTitle());
7720
- createRenderEffect(() => _el$190.value = editingBookmarkNote());
7721
- createRenderEffect(() => _el$191.value = editingBookmarkIntent());
7722
- createRenderEffect(() => _el$192.value = editingBookmarkExpectedContent());
7723
- createRenderEffect(() => _el$193.value = editingBookmarkKeyFields());
7724
- createRenderEffect(() => _el$194.value = editingBookmarkAgentHints());
7725
- return _el$188;
7976
+ var _el$195 = _tmpl$51(), _el$196 = _el$195.firstChild, _el$197 = _el$196.nextSibling, _el$198 = _el$197.nextSibling, _el$199 = _el$198.nextSibling, _el$200 = _el$199.nextSibling, _el$201 = _el$200.nextSibling, _el$202 = _el$201.nextSibling, _el$203 = _el$202.firstChild, _el$204 = _el$203.nextSibling;
7977
+ _el$196.$$input = (e) => setEditingBookmarkTitle(e.currentTarget.value);
7978
+ _el$197.$$input = (e) => setEditingBookmarkNote(e.currentTarget.value);
7979
+ _el$198.$$input = (e) => setEditingBookmarkIntent(e.currentTarget.value);
7980
+ _el$199.$$input = (e) => setEditingBookmarkExpectedContent(e.currentTarget.value);
7981
+ _el$200.$$input = (e) => setEditingBookmarkKeyFields(e.currentTarget.value);
7982
+ _el$201.$$input = (e) => setEditingBookmarkAgentHints(e.currentTarget.value);
7983
+ _el$203.$$click = () => void handleUpdateBookmark(bookmark.id);
7984
+ _el$204.$$click = resetBookmarkEditor;
7985
+ createRenderEffect(() => _el$196.value = editingBookmarkTitle());
7986
+ createRenderEffect(() => _el$197.value = editingBookmarkNote());
7987
+ createRenderEffect(() => _el$198.value = editingBookmarkIntent());
7988
+ createRenderEffect(() => _el$199.value = editingBookmarkExpectedContent());
7989
+ createRenderEffect(() => _el$200.value = editingBookmarkKeyFields());
7990
+ createRenderEffect(() => _el$201.value = editingBookmarkAgentHints());
7991
+ return _el$195;
7726
7992
  }
7727
- }), _el$198);
7728
- insert(_el$199, () => formatBookmarkDate(bookmark.savedAt));
7729
- _el$200.$$click = () => editingBookmarkId() === bookmark.id ? resetBookmarkEditor() : startEditingBookmark(bookmark);
7730
- insert(_el$200, () => editingBookmarkId() === bookmark.id ? "Close" : "Edit");
7731
- _el$201.$$click = () => {
7993
+ }), _el$205);
7994
+ insert(_el$206, () => formatBookmarkDate(bookmark.savedAt));
7995
+ _el$207.$$click = () => editingBookmarkId() === bookmark.id ? resetBookmarkEditor() : startEditingBookmark(bookmark);
7996
+ insert(_el$207, () => editingBookmarkId() === bookmark.id ? "Close" : "Edit");
7997
+ _el$208.$$click = () => {
7732
7998
  if (editingBookmarkId() === bookmark.id) {
7733
7999
  resetBookmarkEditor();
7734
8000
  }
7735
8001
  void removeBookmark(bookmark.id);
7736
8002
  };
7737
- createRenderEffect(() => setAttribute(_el$170, "data-bookmark-id", bookmark.id));
7738
- return _el$170;
8003
+ createRenderEffect(() => setAttribute(_el$177, "data-bookmark-id", bookmark.id));
8004
+ return _el$177;
7739
8005
  })()
7740
8006
  }));
7741
- return _el$167;
8007
+ return _el$174;
7742
8008
  }
7743
8009
  });
7744
8010
  }
7745
8011
  }), null);
7746
- createRenderEffect(() => _el$143.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
7747
- return _el$140;
8012
+ createRenderEffect(() => _el$150.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
8013
+ return _el$147;
7748
8014
  })()
7749
8015
  });
7750
8016
  }
7751
8017
  }));
7752
8018
  createRenderEffect((_p$) => {
7753
- var _v$ = !!bookmarkSaveExpanded(), _v$2 = !newFolderName().trim();
7754
- _v$ !== _p$.e && _el$51.classList.toggle("expanded", _p$.e = _v$);
7755
- _v$2 !== _p$.t && (_el$66.disabled = _p$.t = _v$2);
8019
+ var _v$ = bookmarkExporting(), _v$2 = bookmarkExporting(), _v$3 = bookmarkExporting(), _v$4 = !!bookmarkSaveExpanded(), _v$5 = !newFolderName().trim();
8020
+ _v$ !== _p$.e && (_el$51.disabled = _p$.e = _v$);
8021
+ _v$2 !== _p$.t && (_el$52.disabled = _p$.t = _v$2);
8022
+ _v$3 !== _p$.a && (_el$53.disabled = _p$.a = _v$3);
8023
+ _v$4 !== _p$.o && _el$58.classList.toggle("expanded", _p$.o = _v$4);
8024
+ _v$5 !== _p$.i && (_el$73.disabled = _p$.i = _v$5);
7756
8025
  return _p$;
7757
8026
  }, {
7758
8027
  e: void 0,
7759
- t: void 0
8028
+ t: void 0,
8029
+ a: void 0,
8030
+ o: void 0,
8031
+ i: void 0
7760
8032
  });
7761
8033
  createRenderEffect(() => _el$47.value = bookmarkSearchQuery());
7762
- createRenderEffect(() => _el$64.value = newFolderName());
7763
- createRenderEffect(() => _el$65.value = newFolderSummary());
8034
+ createRenderEffect(() => _el$71.value = newFolderName());
8035
+ createRenderEffect(() => _el$72.value = newFolderSummary());
7764
8036
  return _el$41;
7765
8037
  }
7766
- }), _el$104);
8038
+ }), _el$111);
7767
8039
  insert(_el$25, createComponent(Show, {
7768
8040
  get when() {
7769
8041
  return sidebarTab() === "checkpoints";
7770
8042
  },
7771
8043
  get children() {
7772
- var _el$68 = _tmpl$10$2(), _el$69 = _el$68.firstChild, _el$70 = _el$69.firstChild, _el$71 = _el$70.firstChild, _el$72 = _el$71.nextSibling, _el$73 = _el$69.nextSibling, _el$74 = _el$73.firstChild, _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling, _el$77 = _el$76.nextSibling;
7773
- _el$74.nextSibling;
7774
- insert(_el$72, (() => {
8044
+ var _el$75 = _tmpl$11$2(), _el$76 = _el$75.firstChild, _el$77 = _el$76.firstChild, _el$78 = _el$77.firstChild, _el$79 = _el$78.nextSibling, _el$80 = _el$76.nextSibling, _el$81 = _el$80.firstChild, _el$82 = _el$81.firstChild, _el$83 = _el$82.nextSibling, _el$84 = _el$83.nextSibling;
8045
+ _el$81.nextSibling;
8046
+ insert(_el$79, (() => {
7775
8047
  var _c$3 = memo(() => recentCheckpoints().length > 0);
7776
8048
  return () => _c$3() ? `${recentCheckpoints().length} saved snapshots` : "Save and restore session snapshots";
7777
8049
  })());
7778
- _el$75.$$input = (e) => setCheckpointName(e.currentTarget.value);
7779
- _el$76.$$input = (e) => setCheckpointNote(e.currentTarget.value);
7780
- _el$77.$$click = async () => {
8050
+ _el$82.$$input = (e) => setCheckpointName(e.currentTarget.value);
8051
+ _el$83.$$input = (e) => setCheckpointNote(e.currentTarget.value);
8052
+ _el$84.$$click = async () => {
7781
8053
  const name = checkpointName().trim();
7782
8054
  await createCheckpoint(name || void 0, checkpointNote() || void 0);
7783
8055
  setCheckpointName("");
7784
8056
  setCheckpointNote("");
7785
8057
  };
7786
- insert(_el$73, createComponent(Show, {
8058
+ insert(_el$80, createComponent(Show, {
7787
8059
  get when() {
7788
8060
  return recentCheckpoints().length > 0;
7789
8061
  },
7790
8062
  get fallback() {
7791
- return _tmpl$52();
8063
+ return _tmpl$53();
7792
8064
  },
7793
8065
  get children() {
7794
- var _el$79 = _tmpl$1$2();
7795
- insert(_el$79, createComponent(For, {
8066
+ var _el$86 = _tmpl$10$2();
8067
+ insert(_el$86, createComponent(For, {
7796
8068
  get each() {
7797
8069
  return recentCheckpoints();
7798
8070
  },
7799
8071
  children: (checkpoint, i) => (() => {
7800
- var _el$203 = _tmpl$54(), _el$204 = _el$203.firstChild, _el$205 = _el$204.firstChild, _el$207 = _el$204.nextSibling, _el$208 = _el$207.firstChild, _el$209 = _el$208.nextSibling, _el$210 = _el$209.nextSibling, _el$211 = _el$210.nextSibling;
7801
- insert(_el$204, createComponent(Show, {
8072
+ var _el$210 = _tmpl$55(), _el$211 = _el$210.firstChild, _el$212 = _el$211.firstChild, _el$214 = _el$211.nextSibling, _el$215 = _el$214.firstChild, _el$216 = _el$215.nextSibling, _el$217 = _el$216.nextSibling, _el$218 = _el$217.nextSibling;
8073
+ insert(_el$211, createComponent(Show, {
7802
8074
  get when() {
7803
8075
  return i() < recentCheckpoints().length - 1;
7804
8076
  },
7805
8077
  get children() {
7806
- return _tmpl$53();
8078
+ return _tmpl$54();
7807
8079
  }
7808
8080
  }), null);
7809
- insert(_el$208, () => checkpoint.name);
7810
- insert(_el$209, () => new Date(checkpoint.createdAt).toLocaleString());
7811
- _el$210.addEventListener("blur", (e) => void updateCheckpointNote(checkpoint.id, e.currentTarget.value));
7812
- _el$211.$$click = () => void restoreCheckpoint(checkpoint.id);
7813
- createRenderEffect(() => _el$205.classList.toggle("latest", !!(i() === 0)));
7814
- createRenderEffect(() => _el$210.value = checkpoint.note || "");
7815
- return _el$203;
8081
+ insert(_el$215, () => checkpoint.name);
8082
+ insert(_el$216, () => new Date(checkpoint.createdAt).toLocaleString());
8083
+ _el$217.addEventListener("blur", (e) => void updateCheckpointNote(checkpoint.id, e.currentTarget.value));
8084
+ _el$218.$$click = () => void restoreCheckpoint(checkpoint.id);
8085
+ createRenderEffect(() => _el$212.classList.toggle("latest", !!(i() === 0)));
8086
+ createRenderEffect(() => _el$217.value = checkpoint.note || "");
8087
+ return _el$210;
7816
8088
  })()
7817
8089
  }));
7818
- return _el$79;
8090
+ return _el$86;
7819
8091
  }
7820
8092
  }), null);
7821
- createRenderEffect(() => _el$75.value = checkpointName());
7822
- createRenderEffect(() => _el$76.value = checkpointNote());
7823
- return _el$68;
8093
+ createRenderEffect(() => _el$82.value = checkpointName());
8094
+ createRenderEffect(() => _el$83.value = checkpointNote());
8095
+ return _el$75;
7824
8096
  }
7825
- }), _el$104);
8097
+ }), _el$111);
7826
8098
  insert(_el$25, createComponent(Show, {
7827
8099
  get when() {
7828
8100
  return sidebarTab() === "automation";
@@ -7832,67 +8104,67 @@ ${contextBlock}` : contextBlock);
7832
8104
  onRun: () => setSidebarTab("supervisor")
7833
8105
  });
7834
8106
  }
7835
- }), _el$104);
8107
+ }), _el$111);
7836
8108
  insert(_el$25, createComponent(Show, {
7837
8109
  get when() {
7838
8110
  return sidebarTab() === "history";
7839
8111
  },
7840
8112
  get children() {
7841
- var _el$80 = _tmpl$12$2(), _el$81 = _el$80.firstChild, _el$82 = _el$81.firstChild, _el$83 = _el$82.nextSibling, _el$84 = _el$81.nextSibling;
7842
- _el$83.$$click = async () => {
8113
+ var _el$87 = _tmpl$13$1(), _el$88 = _el$87.firstChild, _el$89 = _el$88.firstChild, _el$90 = _el$89.nextSibling, _el$91 = _el$88.nextSibling;
8114
+ _el$90.$$click = async () => {
7843
8115
  await history.clear();
7844
8116
  };
7845
- insert(_el$84, createComponent(For, {
8117
+ insert(_el$91, createComponent(For, {
7846
8118
  get each() {
7847
8119
  return history.historyState().entries;
7848
8120
  },
7849
8121
  children: (entry) => (() => {
7850
- var _el$212 = _tmpl$55(), _el$213 = _el$212.firstChild, _el$214 = _el$213.nextSibling, _el$215 = _el$214.nextSibling;
7851
- _el$212.$$click = () => createTab(entry.url);
7852
- insert(_el$213, () => entry.title || entry.url);
7853
- insert(_el$214, () => entry.url);
7854
- insert(_el$215, () => new Date(entry.visitedAt).toLocaleString());
7855
- return _el$212;
8122
+ var _el$219 = _tmpl$56(), _el$220 = _el$219.firstChild, _el$221 = _el$220.nextSibling, _el$222 = _el$221.nextSibling;
8123
+ _el$219.$$click = () => createTab(entry.url);
8124
+ insert(_el$220, () => entry.title || entry.url);
8125
+ insert(_el$221, () => entry.url);
8126
+ insert(_el$222, () => new Date(entry.visitedAt).toLocaleString());
8127
+ return _el$219;
7856
8128
  })()
7857
8129
  }), null);
7858
- insert(_el$84, createComponent(Show, {
8130
+ insert(_el$91, createComponent(Show, {
7859
8131
  get when() {
7860
8132
  return history.historyState().entries.length === 0;
7861
8133
  },
7862
8134
  get children() {
7863
- return _tmpl$11$2();
8135
+ return _tmpl$12$2();
7864
8136
  }
7865
8137
  }), null);
7866
- return _el$80;
8138
+ return _el$87;
7867
8139
  }
7868
- }), _el$104);
8140
+ }), _el$111);
7869
8141
  insert(_el$25, createComponent(Show, {
7870
8142
  get when() {
7871
8143
  return sidebarTab() === "diff";
7872
8144
  },
7873
8145
  get children() {
7874
- var _el$86 = _tmpl$13$1(), _el$87 = _el$86.firstChild, _el$88 = _el$87.firstChild, _el$89 = _el$88.nextSibling;
7875
- insert(_el$89, () => isPremium() ? "Page change timeline" : "Premium feature");
7876
- insert(_el$86, createComponent(Show, {
8146
+ var _el$93 = _tmpl$14$1(), _el$94 = _el$93.firstChild, _el$95 = _el$94.firstChild, _el$96 = _el$95.nextSibling;
8147
+ insert(_el$96, () => isPremium() ? "Page change timeline" : "Premium feature");
8148
+ insert(_el$93, createComponent(Show, {
7877
8149
  get when() {
7878
8150
  return isPremium();
7879
8151
  },
7880
8152
  get fallback() {
7881
8153
  return (() => {
7882
- var _el$216 = _tmpl$56(), _el$217 = _el$216.firstChild, _el$218 = _el$217.nextSibling, _el$219 = _el$218.nextSibling, _el$220 = _el$219.firstChild, _el$221 = _el$220.nextSibling;
7883
- _el$220.$$click = () => void window.vessel.premium.checkout(premiumState().email || void 0).catch(() => {
8154
+ var _el$223 = _tmpl$57(), _el$224 = _el$223.firstChild, _el$225 = _el$224.nextSibling, _el$226 = _el$225.nextSibling, _el$227 = _el$226.firstChild, _el$228 = _el$227.nextSibling;
8155
+ _el$227.$$click = () => void window.vessel.premium.checkout(premiumState().email || void 0).catch(() => {
7884
8156
  });
7885
- _el$221.$$click = openPremiumDetails;
7886
- return _el$216;
8157
+ _el$228.$$click = openPremiumDetails;
8158
+ return _el$223;
7887
8159
  })();
7888
8160
  },
7889
8161
  get children() {
7890
8162
  return createComponent(PageDiffTimeline, {});
7891
8163
  }
7892
8164
  }), null);
7893
- return _el$86;
8165
+ return _el$93;
7894
8166
  }
7895
- }), _el$104);
8167
+ }), _el$111);
7896
8168
  insert(_el$25, createComponent(Show, {
7897
8169
  get when() {
7898
8170
  return sidebarTab() === "chat";
@@ -7903,23 +8175,23 @@ ${contextBlock}` : contextBlock);
7903
8175
  return !isPremium();
7904
8176
  },
7905
8177
  get children() {
7906
- var _el$90 = _tmpl$14$1(), _el$91 = _el$90.firstChild, _el$92 = _el$91.nextSibling, _el$93 = _el$92.nextSibling, _el$94 = _el$93.firstChild, _el$95 = _el$94.nextSibling;
7907
- _el$94.$$click = () => openPremiumCheckout("chat_banner_clicked");
7908
- _el$95.$$click = openPremiumDetails;
7909
- return _el$90;
8178
+ var _el$97 = _tmpl$15$1(), _el$98 = _el$97.firstChild, _el$99 = _el$98.nextSibling, _el$100 = _el$99.nextSibling, _el$101 = _el$100.firstChild, _el$102 = _el$101.nextSibling;
8179
+ _el$101.$$click = () => openPremiumCheckout("chat_banner_clicked");
8180
+ _el$102.$$click = openPremiumDetails;
8181
+ return _el$97;
7910
8182
  }
7911
8183
  }), createComponent(For, {
7912
8184
  get each() {
7913
8185
  return messages2();
7914
8186
  },
7915
8187
  children: (msg) => (() => {
7916
- var _el$222 = _tmpl$57();
7917
- insert(_el$222, createComponent(MarkdownMessage, {
8188
+ var _el$229 = _tmpl$58();
8189
+ insert(_el$229, createComponent(MarkdownMessage, {
7918
8190
  get content() {
7919
8191
  return msg.content;
7920
8192
  }
7921
8193
  }), null);
7922
- insert(_el$222, createComponent(Show, {
8194
+ insert(_el$229, createComponent(Show, {
7923
8195
  get when() {
7924
8196
  return memo(() => msg.role === "assistant")() ? getPremiumPromptKind(msg.content) : null;
7925
8197
  },
@@ -7932,31 +8204,31 @@ ${contextBlock}` : contextBlock);
7932
8204
  onOpenSettings: openPremiumDetails
7933
8205
  })
7934
8206
  }), null);
7935
- createRenderEffect(() => className(_el$222, `message message-${msg.role}`));
7936
- return _el$222;
8207
+ createRenderEffect(() => className(_el$229, `message message-${msg.role}`));
8208
+ return _el$229;
7937
8209
  })()
7938
8210
  }), createComponent(Show, {
7939
8211
  get when() {
7940
8212
  return isStreaming2();
7941
8213
  },
7942
8214
  get children() {
7943
- var _el$96 = _tmpl$17$1(), _el$97 = _el$96.firstChild;
7944
- insert(_el$97, createComponent(Show, {
8215
+ var _el$103 = _tmpl$18$1(), _el$104 = _el$103.firstChild;
8216
+ insert(_el$104, createComponent(Show, {
7945
8217
  get when() {
7946
8218
  return hasFirstChunk2();
7947
8219
  },
7948
8220
  get fallback() {
7949
- return _tmpl$58();
8221
+ return _tmpl$59();
7950
8222
  },
7951
8223
  get children() {
7952
- var _el$98 = _tmpl$16$1(), _el$99 = _el$98.firstChild, _el$100 = _el$99.firstChild;
7953
- _el$100.nextSibling;
7954
- insert(_el$98, createComponent(MarkdownMessage, {
8224
+ var _el$105 = _tmpl$17$1(), _el$106 = _el$105.firstChild, _el$107 = _el$106.firstChild;
8225
+ _el$107.nextSibling;
8226
+ insert(_el$105, createComponent(MarkdownMessage, {
7955
8227
  get content() {
7956
8228
  return streamingText2();
7957
8229
  }
7958
- }), _el$99);
7959
- insert(_el$98, createComponent(Show, {
8230
+ }), _el$106);
8231
+ insert(_el$105, createComponent(Show, {
7960
8232
  get when() {
7961
8233
  return getPremiumPromptKind(streamingText2());
7962
8234
  },
@@ -7968,21 +8240,21 @@ ${contextBlock}` : contextBlock);
7968
8240
  onStartTrial: () => openPremiumCheckout(kind() === "premium_gate" ? "premium_gate_clicked" : "iteration_limit_clicked"),
7969
8241
  onOpenSettings: openPremiumDetails
7970
8242
  })
7971
- }), _el$99);
7972
- insert(_el$99, createComponent(Show, {
8243
+ }), _el$106);
8244
+ insert(_el$106, createComponent(Show, {
7973
8245
  get when() {
7974
8246
  return elapsedSeconds() > 0;
7975
8247
  },
7976
8248
  get children() {
7977
- var _el$102 = _tmpl$15$1();
7978
- insert(_el$102, () => ` • ${elapsedSeconds()}s`);
7979
- return _el$102;
8249
+ var _el$109 = _tmpl$16$1();
8250
+ insert(_el$109, () => ` • ${elapsedSeconds()}s`);
8251
+ return _el$109;
7980
8252
  }
7981
8253
  }), null);
7982
- return _el$98;
8254
+ return _el$105;
7983
8255
  }
7984
8256
  }));
7985
- return _el$96;
8257
+ return _el$103;
7986
8258
  }
7987
8259
  }), createComponent(Show, {
7988
8260
  get when() {
@@ -7994,22 +8266,22 @@ ${contextBlock}` : contextBlock);
7994
8266
  return runtimeState2().supervisor.pendingApprovals;
7995
8267
  },
7996
8268
  children: (approval) => (() => {
7997
- var _el$224 = _tmpl$60(), _el$225 = _el$224.firstChild, _el$226 = _el$225.nextSibling, _el$227 = _el$226.firstChild, _el$228 = _el$227.firstChild, _el$229 = _el$228.nextSibling, _el$231 = _el$227.nextSibling, _el$232 = _el$231.nextSibling, _el$233 = _el$232.firstChild, _el$234 = _el$233.nextSibling;
7998
- insert(_el$229, () => approval.name);
7999
- insert(_el$226, createComponent(Show, {
8269
+ var _el$231 = _tmpl$61(), _el$232 = _el$231.firstChild, _el$233 = _el$232.nextSibling, _el$234 = _el$233.firstChild, _el$235 = _el$234.firstChild, _el$236 = _el$235.nextSibling, _el$238 = _el$234.nextSibling, _el$239 = _el$238.nextSibling, _el$240 = _el$239.firstChild, _el$241 = _el$240.nextSibling;
8270
+ insert(_el$236, () => approval.name);
8271
+ insert(_el$233, createComponent(Show, {
8000
8272
  get when() {
8001
8273
  return approval.argsSummary;
8002
8274
  },
8003
8275
  get children() {
8004
- var _el$230 = _tmpl$59();
8005
- insert(_el$230, () => approval.argsSummary);
8006
- return _el$230;
8276
+ var _el$237 = _tmpl$60();
8277
+ insert(_el$237, () => approval.argsSummary);
8278
+ return _el$237;
8007
8279
  }
8008
- }), _el$231);
8009
- insert(_el$231, () => approval.reason);
8010
- _el$233.$$click = () => void resolveApproval(approval.id, true);
8011
- _el$234.$$click = () => void resolveApproval(approval.id, false);
8012
- return _el$224;
8280
+ }), _el$238);
8281
+ insert(_el$238, () => approval.reason);
8282
+ _el$240.$$click = () => void resolveApproval(approval.id, true);
8283
+ _el$241.$$click = () => void resolveApproval(approval.id, false);
8284
+ return _el$231;
8013
8285
  })()
8014
8286
  });
8015
8287
  }
@@ -8018,13 +8290,13 @@ ${contextBlock}` : contextBlock);
8018
8290
  return memo(() => messages2().length === 0)() && !isStreaming2();
8019
8291
  },
8020
8292
  get children() {
8021
- return _tmpl$18$1();
8293
+ return _tmpl$19$1();
8022
8294
  }
8023
8295
  })];
8024
8296
  }
8025
- }), _el$104);
8297
+ }), _el$111);
8026
8298
  var _ref$ = messagesEndRef;
8027
- typeof _ref$ === "function" ? use(_ref$, _el$104) : messagesEndRef = _el$104;
8299
+ typeof _ref$ === "function" ? use(_ref$, _el$111) : messagesEndRef = _el$111;
8028
8300
  insert(_el$9, createComponent(Show, {
8029
8301
  get when() {
8030
8302
  return sidebarTab() === "chat";
@@ -8035,141 +8307,141 @@ ${contextBlock}` : contextBlock);
8035
8307
  return isStreaming2() || messages2().length > 0;
8036
8308
  },
8037
8309
  get children() {
8038
- var _el$105 = _tmpl$21$1();
8039
- insert(_el$105, createComponent(Show, {
8310
+ var _el$112 = _tmpl$22$1();
8311
+ insert(_el$112, createComponent(Show, {
8040
8312
  get when() {
8041
8313
  return isStreaming2();
8042
8314
  },
8043
8315
  get children() {
8044
- var _el$106 = _tmpl$19$1();
8045
- _el$106.$$click = () => cancel();
8046
- return _el$106;
8316
+ var _el$113 = _tmpl$20$1();
8317
+ _el$113.$$click = () => cancel();
8318
+ return _el$113;
8047
8319
  }
8048
8320
  }), null);
8049
- insert(_el$105, createComponent(Show, {
8321
+ insert(_el$112, createComponent(Show, {
8050
8322
  get when() {
8051
8323
  return memo(() => !!!isStreaming2())() && messages2().length > 0;
8052
8324
  },
8053
8325
  get children() {
8054
- var _el$107 = _tmpl$20$1();
8055
- _el$107.$$click = handleRetry;
8056
- return _el$107;
8326
+ var _el$114 = _tmpl$21$1();
8327
+ _el$114.$$click = handleRetry;
8328
+ return _el$114;
8057
8329
  }
8058
8330
  }), null);
8059
- return _el$105;
8331
+ return _el$112;
8060
8332
  }
8061
8333
  }), createComponent(Show, {
8062
8334
  get when() {
8063
8335
  return highlightCount() > 0;
8064
8336
  },
8065
8337
  get children() {
8066
- var _el$108 = _tmpl$22$1(), _el$109 = _el$108.firstChild, _el$110 = _el$109.nextSibling;
8067
- _el$110.firstChild;
8068
- var _el$112 = _el$110.nextSibling;
8069
- _el$109.$$click = () => void scrollToHighlight(highlightIndex() - 1);
8070
- _el$110.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex());
8071
- insert(_el$110, (() => {
8338
+ var _el$115 = _tmpl$23$1(), _el$116 = _el$115.firstChild, _el$117 = _el$116.nextSibling;
8339
+ _el$117.firstChild;
8340
+ var _el$119 = _el$117.nextSibling;
8341
+ _el$116.$$click = () => void scrollToHighlight(highlightIndex() - 1);
8342
+ _el$117.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex());
8343
+ insert(_el$117, (() => {
8072
8344
  var _c$4 = memo(() => highlightIndex() >= 0);
8073
8345
  return () => _c$4() ? `${highlightIndex() + 1} / ${highlightCount()}` : `${highlightCount()} highlight${highlightCount() > 1 ? "s" : ""}`;
8074
8346
  })(), null);
8075
- _el$112.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
8347
+ _el$119.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
8076
8348
  createRenderEffect((_p$) => {
8077
- var _v$3 = highlightIndex() <= 0, _v$4 = highlightIndex() >= highlightCount() - 1;
8078
- _v$3 !== _p$.e && (_el$109.disabled = _p$.e = _v$3);
8079
- _v$4 !== _p$.t && (_el$112.disabled = _p$.t = _v$4);
8349
+ var _v$6 = highlightIndex() <= 0, _v$7 = highlightIndex() >= highlightCount() - 1;
8350
+ _v$6 !== _p$.e && (_el$116.disabled = _p$.e = _v$6);
8351
+ _v$7 !== _p$.t && (_el$119.disabled = _p$.t = _v$7);
8080
8352
  return _p$;
8081
8353
  }, {
8082
8354
  e: void 0,
8083
8355
  t: void 0
8084
8356
  });
8085
- return _el$108;
8357
+ return _el$115;
8086
8358
  }
8087
8359
  }), createComponent(Show, {
8088
8360
  get when() {
8089
8361
  return queueNotice2() !== null || pendingQueryCount() > 0;
8090
8362
  },
8091
8363
  get children() {
8092
- var _el$113 = _tmpl$25$1(), _el$114 = _el$113.firstChild, _el$115 = _el$114.firstChild;
8093
- insert(_el$115, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
8094
- insert(_el$114, createComponent(Show, {
8364
+ var _el$120 = _tmpl$26$1(), _el$121 = _el$120.firstChild, _el$122 = _el$121.firstChild;
8365
+ insert(_el$122, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
8366
+ insert(_el$121, createComponent(Show, {
8095
8367
  get when() {
8096
8368
  return pendingQueryCount() > 0;
8097
8369
  },
8098
8370
  get children() {
8099
- var _el$116 = _tmpl$23$1();
8100
- _el$116.$$click = () => clearPendingQueries();
8101
- return _el$116;
8371
+ var _el$123 = _tmpl$24$1();
8372
+ _el$123.$$click = () => clearPendingQueries();
8373
+ return _el$123;
8102
8374
  }
8103
8375
  }), null);
8104
- insert(_el$113, createComponent(Show, {
8376
+ insert(_el$120, createComponent(Show, {
8105
8377
  get when() {
8106
8378
  return pendingQueries2().length > 0;
8107
8379
  },
8108
8380
  get children() {
8109
- var _el$117 = _tmpl$24$1();
8110
- insert(_el$117, createComponent(For, {
8381
+ var _el$124 = _tmpl$25$1();
8382
+ insert(_el$124, createComponent(For, {
8111
8383
  get each() {
8112
8384
  return pendingQueries2();
8113
8385
  },
8114
8386
  children: (pendingPrompt, index) => (() => {
8115
- var _el$235 = _tmpl$61(), _el$236 = _el$235.firstChild, _el$237 = _el$236.nextSibling;
8116
- setAttribute(_el$236, "title", pendingPrompt);
8117
- insert(_el$236, pendingPrompt);
8118
- _el$237.$$click = () => removePendingQuery(index());
8119
- createRenderEffect(() => setAttribute(_el$237, "aria-label", `Remove queued prompt ${index() + 1}`));
8120
- return _el$235;
8387
+ var _el$242 = _tmpl$62(), _el$243 = _el$242.firstChild, _el$244 = _el$243.nextSibling;
8388
+ setAttribute(_el$243, "title", pendingPrompt);
8389
+ insert(_el$243, pendingPrompt);
8390
+ _el$244.$$click = () => removePendingQuery(index());
8391
+ createRenderEffect(() => setAttribute(_el$244, "aria-label", `Remove queued prompt ${index() + 1}`));
8392
+ return _el$242;
8121
8393
  })()
8122
8394
  }));
8123
- return _el$117;
8395
+ return _el$124;
8124
8396
  }
8125
8397
  }), null);
8126
- return _el$113;
8398
+ return _el$120;
8127
8399
  }
8128
8400
  }), (() => {
8129
- var _el$118 = _tmpl$26$1(), _el$119 = _el$118.firstChild, _el$120 = _el$119.nextSibling;
8130
- _el$119.$$keydown = (e) => {
8401
+ var _el$125 = _tmpl$27$1(), _el$126 = _el$125.firstChild, _el$127 = _el$126.nextSibling;
8402
+ _el$126.$$keydown = (e) => {
8131
8403
  if (e.key === "Enter" && !e.shiftKey) {
8132
8404
  e.preventDefault();
8133
8405
  void handleChatSend();
8134
8406
  }
8135
8407
  };
8136
- _el$119.$$input = (e) => setChatInput(e.currentTarget.value);
8408
+ _el$126.$$input = (e) => setChatInput(e.currentTarget.value);
8137
8409
  var _ref$2 = chatInputRef;
8138
- typeof _ref$2 === "function" ? use(_ref$2, _el$119) : chatInputRef = _el$119;
8139
- _el$120.$$click = () => void handleChatSend();
8140
- insert(_el$120, () => isStreaming2() ? "Queue" : "Send");
8410
+ typeof _ref$2 === "function" ? use(_ref$2, _el$126) : chatInputRef = _el$126;
8411
+ _el$127.$$click = () => void handleChatSend();
8412
+ insert(_el$127, () => isStreaming2() ? "Queue" : "Send");
8141
8413
  createRenderEffect((_p$) => {
8142
- var _v$5 = isStreaming2() ? "Send now to queue the next prompt..." : "Ask anything...", _v$6 = !chatInput().trim();
8143
- _v$5 !== _p$.e && setAttribute(_el$119, "placeholder", _p$.e = _v$5);
8144
- _v$6 !== _p$.t && (_el$120.disabled = _p$.t = _v$6);
8414
+ var _v$8 = isStreaming2() ? "Send now to queue the next prompt..." : "Ask anything...", _v$9 = !chatInput().trim();
8415
+ _v$8 !== _p$.e && setAttribute(_el$126, "placeholder", _p$.e = _v$8);
8416
+ _v$9 !== _p$.t && (_el$127.disabled = _p$.t = _v$9);
8145
8417
  return _p$;
8146
8418
  }, {
8147
8419
  e: void 0,
8148
8420
  t: void 0
8149
8421
  });
8150
- createRenderEffect(() => _el$119.value = chatInput());
8151
- return _el$118;
8422
+ createRenderEffect(() => _el$126.value = chatInput());
8423
+ return _el$125;
8152
8424
  })()];
8153
8425
  }
8154
8426
  }), null);
8155
8427
  createRenderEffect((_p$) => {
8156
- var _v$7 = `${sidebarWidth2()}px`, _v$8 = !!isDragging(), _v$9 = !!(sidebarTab() === "supervisor"), _v$0 = sidebarTab() === "supervisor", _v$1 = !!(sidebarTab() === "bookmarks"), _v$10 = sidebarTab() === "bookmarks", _v$11 = !!(sidebarTab() === "checkpoints"), _v$12 = sidebarTab() === "checkpoints", _v$13 = !!(sidebarTab() === "chat"), _v$14 = sidebarTab() === "chat", _v$15 = !!(sidebarTab() === "automation"), _v$16 = sidebarTab() === "automation", _v$17 = !!(sidebarTab() === "history"), _v$18 = sidebarTab() === "history", _v$19 = !!(sidebarTab() === "diff"), _v$20 = sidebarTab() === "diff";
8157
- _v$7 !== _p$.e && setStyleProperty(_el$9, "width", _p$.e = _v$7);
8158
- _v$8 !== _p$.t && _el$0.classList.toggle("dragging", _p$.t = _v$8);
8159
- _v$9 !== _p$.a && _el$16.classList.toggle("active", _p$.a = _v$9);
8160
- _v$0 !== _p$.o && setAttribute(_el$16, "aria-selected", _p$.o = _v$0);
8161
- _v$1 !== _p$.i && _el$19.classList.toggle("active", _p$.i = _v$1);
8162
- _v$10 !== _p$.n && setAttribute(_el$19, "aria-selected", _p$.n = _v$10);
8163
- _v$11 !== _p$.s && _el$20.classList.toggle("active", _p$.s = _v$11);
8164
- _v$12 !== _p$.h && setAttribute(_el$20, "aria-selected", _p$.h = _v$12);
8165
- _v$13 !== _p$.r && _el$21.classList.toggle("active", _p$.r = _v$13);
8166
- _v$14 !== _p$.d && setAttribute(_el$21, "aria-selected", _p$.d = _v$14);
8167
- _v$15 !== _p$.l && _el$22.classList.toggle("active", _p$.l = _v$15);
8168
- _v$16 !== _p$.u && setAttribute(_el$22, "aria-selected", _p$.u = _v$16);
8169
- _v$17 !== _p$.c && _el$23.classList.toggle("active", _p$.c = _v$17);
8170
- _v$18 !== _p$.w && setAttribute(_el$23, "aria-selected", _p$.w = _v$18);
8171
- _v$19 !== _p$.m && _el$24.classList.toggle("active", _p$.m = _v$19);
8172
- _v$20 !== _p$.f && setAttribute(_el$24, "aria-selected", _p$.f = _v$20);
8428
+ var _v$0 = `${sidebarWidth2()}px`, _v$1 = !!isDragging(), _v$10 = !!(sidebarTab() === "supervisor"), _v$11 = sidebarTab() === "supervisor", _v$12 = !!(sidebarTab() === "bookmarks"), _v$13 = sidebarTab() === "bookmarks", _v$14 = !!(sidebarTab() === "checkpoints"), _v$15 = sidebarTab() === "checkpoints", _v$16 = !!(sidebarTab() === "chat"), _v$17 = sidebarTab() === "chat", _v$18 = !!(sidebarTab() === "automation"), _v$19 = sidebarTab() === "automation", _v$20 = !!(sidebarTab() === "history"), _v$21 = sidebarTab() === "history", _v$22 = !!(sidebarTab() === "diff"), _v$23 = sidebarTab() === "diff";
8429
+ _v$0 !== _p$.e && setStyleProperty(_el$9, "width", _p$.e = _v$0);
8430
+ _v$1 !== _p$.t && _el$0.classList.toggle("dragging", _p$.t = _v$1);
8431
+ _v$10 !== _p$.a && _el$16.classList.toggle("active", _p$.a = _v$10);
8432
+ _v$11 !== _p$.o && setAttribute(_el$16, "aria-selected", _p$.o = _v$11);
8433
+ _v$12 !== _p$.i && _el$19.classList.toggle("active", _p$.i = _v$12);
8434
+ _v$13 !== _p$.n && setAttribute(_el$19, "aria-selected", _p$.n = _v$13);
8435
+ _v$14 !== _p$.s && _el$20.classList.toggle("active", _p$.s = _v$14);
8436
+ _v$15 !== _p$.h && setAttribute(_el$20, "aria-selected", _p$.h = _v$15);
8437
+ _v$16 !== _p$.r && _el$21.classList.toggle("active", _p$.r = _v$16);
8438
+ _v$17 !== _p$.d && setAttribute(_el$21, "aria-selected", _p$.d = _v$17);
8439
+ _v$18 !== _p$.l && _el$22.classList.toggle("active", _p$.l = _v$18);
8440
+ _v$19 !== _p$.u && setAttribute(_el$22, "aria-selected", _p$.u = _v$19);
8441
+ _v$20 !== _p$.c && _el$23.classList.toggle("active", _p$.c = _v$20);
8442
+ _v$21 !== _p$.w && setAttribute(_el$23, "aria-selected", _p$.w = _v$21);
8443
+ _v$22 !== _p$.m && _el$24.classList.toggle("active", _p$.m = _v$22);
8444
+ _v$23 !== _p$.f && setAttribute(_el$24, "aria-selected", _p$.f = _v$23);
8173
8445
  return _p$;
8174
8446
  }, {
8175
8447
  e: void 0,
@@ -8194,7 +8466,7 @@ ${contextBlock}` : contextBlock);
8194
8466
  });
8195
8467
  };
8196
8468
  delegateEvents(["click", "pointerdown", "input", "keydown"]);
8197
- var _tmpl$$3 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$2 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$2 = /* @__PURE__ */ template(`<div class=devtools-network><div class=network-header><span>Method</span><span>URL</span><span>Status</span><span>Type</span><span>Time`), _tmpl$5$2 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for network requests... Network monitoring activates when an agent uses devtools.`), _tmpl$6$2 = /* @__PURE__ */ template(`<div><span class=network-method></span><span class=network-url></span><span></span><span class=network-type></span><span class=network-duration>`), _tmpl$7$1 = /* @__PURE__ */ template(`<div class=devtools-activity>`), _tmpl$8$1 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for agent devtools activity...`), _tmpl$9$1 = /* @__PURE__ */ template(`<div class=activity-entry><span class=activity-time></span><span class=activity-tool></span><span class=activity-args></span><span></span><span class=activity-duration>`), _tmpl$0$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge error">`), _tmpl$1$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge count">`), _tmpl$10$1 = /* @__PURE__ */ template(`<div class=export-date-inputs><div class=export-date-row><span class=export-date-label>From</span><input class=export-date-input type=date></div><div class=export-date-row><span class=export-date-label>To</span><input class=export-date-input type=date>`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=devtools-export-dropdown><div class=export-section><div class=export-section-label>Log Types</div><label class=export-checkbox><input type=checkbox>Console</label><label class=export-checkbox><input type=checkbox>Network</label><label class=export-checkbox><input type=checkbox>Activity</label></div><div class=export-section><div class=export-section-label>Date Range</div><div class=export-date-btns><button>Today</button><button>Custom</button></div></div><button class=export-submit>Export JSON`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=devtools-panel><div class=devtools-tabs><button>Console</button><button>Network</button><button>Activity</button><div class=devtools-tab-spacer></div><div class=devtools-export-wrap><button title="Export Logs"><svg width=13 height=13 viewBox="0 0 13 13"fill=none style=vertical-align:middle><path d="M6.5 1v7M3.5 5l3 3 3-3"stroke=currentColor stroke-width=1.3 stroke-linecap=round stroke-linejoin=round></path><path d="M1 9.5v1A1.5 1.5 0 0 0 2.5 12h8A1.5 1.5 0 0 0 12 10.5v-1"stroke=currentColor stroke-width=1.3 stroke-linecap=round></path></svg></button></div><button class=devtools-close-btn title="Close DevTools">×</button></div><div class=devtools-content>`);
8469
+ var _tmpl$$3 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$2 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$2 = /* @__PURE__ */ template(`<div class=devtools-network><div class=network-header><span>Method</span><span>URL</span><span>Status</span><span>Type</span><span>Time`), _tmpl$5$2 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for network requests... Network monitoring activates when an agent uses devtools.`), _tmpl$6$2 = /* @__PURE__ */ template(`<div><span class=network-method></span><span class=network-url></span><span></span><span class=network-type></span><span class=network-duration>`), _tmpl$7$2 = /* @__PURE__ */ template(`<div class=devtools-activity>`), _tmpl$8$1 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for agent devtools activity...`), _tmpl$9$1 = /* @__PURE__ */ template(`<div class=activity-entry><span class=activity-time></span><span class=activity-tool></span><span class=activity-args></span><span></span><span class=activity-duration>`), _tmpl$0$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge error">`), _tmpl$1$1 = /* @__PURE__ */ template(`<span class="devtools-tab-badge count">`), _tmpl$10$1 = /* @__PURE__ */ template(`<div class=export-date-inputs><div class=export-date-row><span class=export-date-label>From</span><input class=export-date-input type=date></div><div class=export-date-row><span class=export-date-label>To</span><input class=export-date-input type=date>`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=devtools-export-dropdown><div class=export-section><div class=export-section-label>Log Types</div><label class=export-checkbox><input type=checkbox>Console</label><label class=export-checkbox><input type=checkbox>Network</label><label class=export-checkbox><input type=checkbox>Activity</label></div><div class=export-section><div class=export-section-label>Date Range</div><div class=export-date-btns><button>Today</button><button>Custom</button></div></div><button class=export-submit>Export JSON`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=devtools-panel><div class=devtools-tabs><button>Console</button><button>Network</button><button>Activity</button><div class=devtools-tab-spacer></div><div class=devtools-export-wrap><button title="Export Logs"><svg width=13 height=13 viewBox="0 0 13 13"fill=none style=vertical-align:middle><path d="M6.5 1v7M3.5 5l3 3 3-3"stroke=currentColor stroke-width=1.3 stroke-linecap=round stroke-linejoin=round></path><path d="M1 9.5v1A1.5 1.5 0 0 0 2.5 12h8A1.5 1.5 0 0 0 12 10.5v-1"stroke=currentColor stroke-width=1.3 stroke-linecap=round></path></svg></button></div><button class=devtools-close-btn title="Close DevTools">×</button></div><div class=devtools-content>`);
8198
8470
  function statusClass(status) {
8199
8471
  if (status == null) return "pending";
8200
8472
  if (status >= 200 && status < 300) return "ok";
@@ -8363,7 +8635,7 @@ const ActivityView = (props) => {
8363
8635
  return _tmpl$8$1();
8364
8636
  },
8365
8637
  get children() {
8366
- var _el$15 = _tmpl$7$1();
8638
+ var _el$15 = _tmpl$7$2();
8367
8639
  insert(_el$15, createComponent(For, {
8368
8640
  get each() {
8369
8641
  return [...props.entries].reverse();
@@ -8715,7 +8987,7 @@ const PROVIDERS = {
8715
8987
  apiKeyHint: "Optional — only if your endpoint requires authentication"
8716
8988
  }
8717
8989
  };
8718
- var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$6$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$7 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured \`llama-server\` base URL. For agent loops, run \`llama-server\` with \`--ctx-size 16384\` minimum and \`32768\` recommended.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$15 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$16 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$17 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$18 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$20 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$21 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$22 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$24 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=default-search-engine>Default Search Engine</label><select id=default-search-engine class=settings-input><option value=none>None (disabled)</option></select><p class=settings-hint>The search engine used by the AI agent when it needs to search the web. "None" disables the fallback and forces the agent to use on-page search inputs only.</p></div><div class=settings-field><label class=settings-label for=download-path>Download Location</label><input id=download-path class=settings-input placeholder="Default: ~/Downloads"><p class=settings-hint>Directory for saved files. Leave blank to use the system default Downloads folder.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current</button></div></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label for=theme-select>Theme</label><select id=theme-select class="settings-input settings-select"><option value=dark>Dark</option><option value=light>Light</option></select><p class=settings-hint>Choose the application color scheme. Takes effect after saving.</p></div><div class=settings-field><label class=settings-label for=domain-policy-mode>Domain Restrictions</label><select id=domain-policy-mode class="settings-input settings-select"><option value=none>No restrictions</option><option value=allowlist>Allowlist (only listed domains)</option><option value=blocklist>Blocklist (block listed domains)</option></select></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$25 = /* @__PURE__ */ template(`<style>
8990
+ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$6$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$7$1 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured \`llama-server\` base URL. For agent loops, run \`llama-server\` with \`--ctx-size 16384\` minimum and \`32768\` recommended.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$15 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$16 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$17 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$18 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$20 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$21 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$22 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$24 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=default-search-engine>Default Search Engine</label><select id=default-search-engine class=settings-input><option value=none>None (disabled)</option></select><p class=settings-hint>The search engine used by the AI agent when it needs to search the web. "None" disables the fallback and forces the agent to use on-page search inputs only.</p></div><div class=settings-field><label class=settings-label for=download-path>Download Location</label><input id=download-path class=settings-input placeholder="Default: ~/Downloads"><p class=settings-hint>Directory for saved files. Leave blank to use the system default Downloads folder.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current</button></div></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label for=theme-select>Theme</label><select id=theme-select class="settings-input settings-select"><option value=dark>Dark</option><option value=light>Light</option></select><p class=settings-hint>Choose the application color scheme. Takes effect after saving.</p></div><div class=settings-field><label class=settings-label for=domain-policy-mode>Domain Restrictions</label><select id=domain-policy-mode class="settings-input settings-select"><option value=none>No restrictions</option><option value=allowlist>Allowlist (only listed domains)</option><option value=blocklist>Blocklist (block listed domains)</option></select></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$25 = /* @__PURE__ */ template(`<style>
8719
8991
  .settings-panel {
8720
8992
  width: min(440px, calc(100vw - 32px));
8721
8993
  max-height: calc(100vh - 48px);
@@ -9978,7 +10250,7 @@ const Settings = () => {
9978
10250
  return !chatProviderMeta().requiresKey;
9979
10251
  },
9980
10252
  get children() {
9981
- return _tmpl$7();
10253
+ return _tmpl$7$1();
9982
10254
  }
9983
10255
  }), null);
9984
10256
  _el$66.$$input = (e) => {
@@ -10681,7 +10953,7 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
10681
10953
  font-size: 13px;
10682
10954
  color: var(--text-secondary);
10683
10955
  }
10684
- `), _tmpl$3 = /* @__PURE__ */ template(`<div class=keyboard-help-keys>`), _tmpl$4 = /* @__PURE__ */ template(`<div class=keyboard-help-action>`), _tmpl$5 = /* @__PURE__ */ template(`<kbd>`), _tmpl$6 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>+`);
10956
+ `), _tmpl$3 = /* @__PURE__ */ template(`<div class=keyboard-help-keys>`), _tmpl$4 = /* @__PURE__ */ template(`<div class=keyboard-help-action>`), _tmpl$5 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>/`), _tmpl$6 = /* @__PURE__ */ template(`<kbd>`), _tmpl$7 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>+`);
10685
10957
  const SHORTCUTS = [{
10686
10958
  keys: "Ctrl+L",
10687
10959
  action: "AI Command Bar",
@@ -10698,6 +10970,9 @@ const SHORTCUTS = [{
10698
10970
  keys: "F12",
10699
10971
  action: "Toggle Dev Tools Panel",
10700
10972
  privateMode: false
10973
+ }, {
10974
+ keys: "Ctrl+N",
10975
+ action: "New Window"
10701
10976
  }, {
10702
10977
  keys: "Ctrl+T",
10703
10978
  action: "New Tab"
@@ -10722,6 +10997,12 @@ const SHORTCUTS = [{
10722
10997
  }, {
10723
10998
  keys: "Ctrl+Shift+N",
10724
10999
  action: "New Private Window"
11000
+ }, {
11001
+ keys: "Ctrl+P",
11002
+ action: "Print Page"
11003
+ }, {
11004
+ keys: "Ctrl+Shift+P",
11005
+ action: "Save Page as PDF"
10725
11006
  }, {
10726
11007
  keys: "Ctrl+,",
10727
11008
  action: "Settings",
@@ -10734,6 +11015,9 @@ const SHORTCUTS = [{
10734
11015
  keys: "?",
10735
11016
  action: "This help overlay"
10736
11017
  }];
11018
+ function shortcutParts(keys) {
11019
+ return keys.split(" / ").map((combo) => combo.replace(/\+\+/g, "+Plus").split("+").filter(Boolean).map((key) => key === "Plus" ? "+" : key));
11020
+ }
10737
11021
  const KeyboardHelp = (props) => {
10738
11022
  const {
10739
11023
  visible,
@@ -10752,11 +11036,11 @@ const KeyboardHelp = (props) => {
10752
11036
  addEventListener(_el$5, "click", props.onClose, true);
10753
11037
  insert(_el$6, () => shortcuts().map((s) => [(() => {
10754
11038
  var _el$8 = _tmpl$3();
10755
- insert(_el$8, () => s.keys.split("+").map((k, i) => [i > 0 && _tmpl$6(), (() => {
10756
- var _el$0 = _tmpl$5();
10757
- insert(_el$0, k);
10758
- return _el$0;
10759
- })()]));
11039
+ insert(_el$8, () => shortcutParts(s.keys).map((combo, comboIndex) => [comboIndex > 0 && _tmpl$5(), memo(() => combo.map((key, keyIndex) => [keyIndex > 0 && _tmpl$7(), (() => {
11040
+ var _el$1 = _tmpl$6();
11041
+ insert(_el$1, key);
11042
+ return _el$1;
11043
+ })()]))]));
10760
11044
  return _el$8;
10761
11045
  })(), (() => {
10762
11046
  var _el$9 = _tmpl$4();
@@ -10776,17 +11060,17 @@ function setupKeybindings(handlers) {
10776
11060
  const key = e.key.toLowerCase();
10777
11061
  if (ctrl && key === "l" && !e.shiftKey) {
10778
11062
  e.preventDefault();
10779
- handlers.openCommandBar();
11063
+ handlers.openCommandBar?.();
10780
11064
  return;
10781
11065
  }
10782
11066
  if (ctrl && key === "l" && e.shiftKey) {
10783
11067
  e.preventDefault();
10784
- handlers.toggleSidebar();
11068
+ handlers.toggleSidebar?.();
10785
11069
  return;
10786
11070
  }
10787
11071
  if (ctrl && key === "f" && e.shiftKey) {
10788
11072
  e.preventDefault();
10789
- handlers.toggleFocusMode();
11073
+ handlers.toggleFocusMode?.();
10790
11074
  return;
10791
11075
  }
10792
11076
  if (ctrl && key === "t" && e.shiftKey) {
@@ -10799,6 +11083,11 @@ function setupKeybindings(handlers) {
10799
11083
  handlers.openPrivateWindow?.();
10800
11084
  return;
10801
11085
  }
11086
+ if (ctrl && key === "n" && !e.shiftKey) {
11087
+ e.preventDefault();
11088
+ handlers.openNewWindow?.();
11089
+ return;
11090
+ }
10802
11091
  if (ctrl && key === "t" && !e.shiftKey) {
10803
11092
  e.preventDefault();
10804
11093
  handlers.newTab();
@@ -10809,14 +11098,24 @@ function setupKeybindings(handlers) {
10809
11098
  handlers.closeTab();
10810
11099
  return;
10811
11100
  }
11101
+ if (ctrl && key === "p" && e.shiftKey) {
11102
+ e.preventDefault();
11103
+ handlers.printToPdf?.();
11104
+ return;
11105
+ }
11106
+ if (ctrl && key === "p" && !e.shiftKey) {
11107
+ e.preventDefault();
11108
+ handlers.print?.();
11109
+ return;
11110
+ }
10812
11111
  if (ctrl && e.key === ",") {
10813
11112
  e.preventDefault();
10814
- handlers.openSettings();
11113
+ handlers.openSettings?.();
10815
11114
  return;
10816
11115
  }
10817
11116
  if (ctrl && key === "h" && !e.shiftKey) {
10818
11117
  e.preventDefault();
10819
- handlers.captureHighlight();
11118
+ handlers.captureHighlight?.();
10820
11119
  return;
10821
11120
  }
10822
11121
  if (e.key === "F12") {
@@ -10862,6 +11161,8 @@ try {
10862
11161
  const App = () => {
10863
11162
  const view = new URLSearchParams(window.location.search).get("view") || "chrome";
10864
11163
  const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
11164
+ const isSecondaryWindow = new URLSearchParams(window.location.search).get("secondary") === "1";
11165
+ const isChromeOnlyWindow = isPrivateWindow || isSecondaryWindow;
10865
11166
  const {
10866
11167
  openCommandBar,
10867
11168
  toggleSidebar,
@@ -10929,16 +11230,16 @@ const App = () => {
10929
11230
  });
10930
11231
  if (view !== "chrome") return;
10931
11232
  const cleanupKeys = setupKeybindings({
10932
- openCommandBar: isPrivateWindow ? void 0 : openCommandBar,
10933
- toggleSidebar: isPrivateWindow ? void 0 : toggleSidebar,
10934
- toggleFocusMode: isPrivateWindow ? void 0 : toggleFocusMode,
11233
+ openCommandBar: isChromeOnlyWindow ? void 0 : openCommandBar,
11234
+ toggleSidebar: isChromeOnlyWindow ? void 0 : toggleSidebar,
11235
+ toggleFocusMode: isChromeOnlyWindow ? void 0 : toggleFocusMode,
10935
11236
  newTab: () => createTab(),
10936
11237
  closeTab: () => {
10937
11238
  const id = activeTabId2();
10938
11239
  if (id) closeTab(id);
10939
11240
  },
10940
- openSettings: isPrivateWindow ? void 0 : openSettings,
10941
- captureHighlight: isPrivateWindow ? void 0 : captureHighlight,
11241
+ openSettings: isChromeOnlyWindow ? void 0 : openSettings,
11242
+ captureHighlight: isChromeOnlyWindow ? void 0 : captureHighlight,
10942
11243
  zoomIn: () => {
10943
11244
  const id = activeTabId2();
10944
11245
  if (id) zoomIn(id);
@@ -10952,8 +11253,17 @@ const App = () => {
10952
11253
  if (id) zoomReset(id);
10953
11254
  },
10954
11255
  reopenClosedTab: () => reopenClosed(),
11256
+ openNewWindow: () => window.vessel.tabs.openNewWindow(),
10955
11257
  openPrivateWindow: () => window.vessel.tabs.openPrivateWindow(),
10956
- toggleDevTools: isPrivateWindow ? void 0 : () => {
11258
+ print: () => {
11259
+ const id = activeTabId2();
11260
+ if (id) window.vessel.tabs.print(id);
11261
+ },
11262
+ printToPdf: () => {
11263
+ const id = activeTabId2();
11264
+ if (id) void window.vessel.tabs.printToPdf(id);
11265
+ },
11266
+ toggleDevTools: isChromeOnlyWindow ? void 0 : () => {
10957
11267
  window.vessel.devtoolsPanel.toggle();
10958
11268
  },
10959
11269
  toggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v)
@@ -10988,7 +11298,7 @@ const App = () => {
10988
11298
  insert(_el$, createComponent(DownloadToast, {}), _el$2);
10989
11299
  insert(_el$, createComponent(FindBar, {}), _el$2);
10990
11300
  insert(_el$, createComponent(Show, {
10991
- when: !isPrivateWindow,
11301
+ when: !isChromeOnlyWindow,
10992
11302
  get children() {
10993
11303
  return [createComponent(FlowProgress, {}), createComponent(AgentTranscriptDock, {})];
10994
11304
  }
@@ -11007,7 +11317,7 @@ const App = () => {
11007
11317
  }
11008
11318
  }), null);
11009
11319
  insert(_el$, createComponent(Show, {
11010
- when: !isPrivateWindow,
11320
+ when: !isChromeOnlyWindow,
11011
11321
  get children() {
11012
11322
  return [createComponent(CommandBar, {}), createComponent(Settings, {})];
11013
11323
  }
@@ -11017,7 +11327,7 @@ const App = () => {
11017
11327
  return keyboardHelpOpen();
11018
11328
  },
11019
11329
  onClose: () => setKeyboardHelpOpen(false),
11020
- privateMode: isPrivateWindow
11330
+ privateMode: isChromeOnlyWindow
11021
11331
  }), null);
11022
11332
  createRenderEffect(() => _el$.classList.toggle("focus-mode", !!focusMode2()));
11023
11333
  return _el$;