@quanta-intellect/vessel-browser 0.1.69 → 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.
- package/README.md +14 -2
- package/out/main/index.js +2192 -416
- package/out/preload/index.js +52 -0
- package/out/renderer/assets/{index-BYk0kH1i.js → index-C2iAShPa.js} +1518 -879
- package/out/renderer/assets/{index-B_C8ayic.css → index-MB-_tN9U.css} +266 -7
- package/out/renderer/index.html +2 -2
- package/package.json +1 -1
|
@@ -1435,6 +1435,7 @@ function Dynamic(props) {
|
|
|
1435
1435
|
}
|
|
1436
1436
|
var _tmpl$$i = /* @__PURE__ */ template(`<div class=title-bar><div class=title-bar-drag></div><div class=mcp-status-area><button class=mcp-status-indicator><span class=mcp-dot></span><span class=mcp-label>MCP</span></button></div><div class=window-controls><button class=window-btn data-tooltip=Minimize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=5 width=8 height=1 fill=currentColor></rect></svg></button><button class=window-btn data-tooltip=Maximize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=1 width=8 height=8 fill=none stroke=currentColor stroke-width=1></rect></svg></button><button class="window-btn window-btn-close"data-tooltip=Close><svg width=10 height=10 viewBox="0 0 10 10"><line x1=1 y1=1 x2=9 y2=9 stroke=currentColor stroke-width=1.2></line><line x1=9 y1=1 x2=1 y2=9 stroke=currentColor stroke-width=1.2>`);
|
|
1437
1437
|
const TitleBar = () => {
|
|
1438
|
+
const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
|
|
1438
1439
|
const [mcpStatus, setMcpStatus] = createSignal("starting");
|
|
1439
1440
|
const [mcpTooltip, setMcpTooltip] = createSignal("MCP: starting...");
|
|
1440
1441
|
const applyHealth = (health) => {
|
|
@@ -1461,6 +1462,7 @@ const TitleBar = () => {
|
|
|
1461
1462
|
onCleanup(unsubscribe);
|
|
1462
1463
|
});
|
|
1463
1464
|
const handleMcpClick = () => {
|
|
1465
|
+
if (isPrivateWindow) return;
|
|
1464
1466
|
window.vessel.ui.setSettingsVisibility(true);
|
|
1465
1467
|
};
|
|
1466
1468
|
return (() => {
|
|
@@ -1486,6 +1488,301 @@ const TitleBar = () => {
|
|
|
1486
1488
|
})();
|
|
1487
1489
|
};
|
|
1488
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;
|
|
1489
1786
|
function getEnvFlag(name) {
|
|
1490
1787
|
const globalProcess = typeof globalThis === "object" && "process" in globalThis ? globalThis.process : void 0;
|
|
1491
1788
|
return globalProcess?.env?.[name];
|
|
@@ -1594,7 +1891,22 @@ function useTabs() {
|
|
|
1594
1891
|
patchTab(id, { adBlockingEnabled: newState });
|
|
1595
1892
|
}
|
|
1596
1893
|
return newState;
|
|
1597
|
-
}
|
|
1894
|
+
},
|
|
1895
|
+
zoomIn: (id) => window.vessel.tabs.zoomIn(id),
|
|
1896
|
+
zoomOut: (id) => window.vessel.tabs.zoomOut(id),
|
|
1897
|
+
zoomReset: (id) => window.vessel.tabs.zoomReset(id),
|
|
1898
|
+
reopenClosed: () => window.vessel.tabs.reopenClosed(),
|
|
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)
|
|
1598
1910
|
};
|
|
1599
1911
|
}
|
|
1600
1912
|
const [now, setNow] = createSignal(Date.now());
|
|
@@ -1773,7 +2085,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
1773
2085
|
}
|
|
1774
2086
|
return "idle";
|
|
1775
2087
|
}
|
|
1776
|
-
var _tmpl$$
|
|
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>`);
|
|
1777
2089
|
const TAB_CLOSE_MS = 200;
|
|
1778
2090
|
function stringToHue(str) {
|
|
1779
2091
|
let hash = 0;
|
|
@@ -1807,7 +2119,7 @@ const TabFavicon = (props) => {
|
|
|
1807
2119
|
})();
|
|
1808
2120
|
},
|
|
1809
2121
|
get children() {
|
|
1810
|
-
var _el$ = _tmpl$$
|
|
2122
|
+
var _el$ = _tmpl$$g();
|
|
1811
2123
|
_el$.addEventListener("error", () => setFailed(true));
|
|
1812
2124
|
createRenderEffect(() => setAttribute(_el$, "src", props.favicon));
|
|
1813
2125
|
return _el$;
|
|
@@ -1820,7 +2132,10 @@ const TabBar = () => {
|
|
|
1820
2132
|
activeTabId: activeTabId2,
|
|
1821
2133
|
switchTab,
|
|
1822
2134
|
closeTab,
|
|
1823
|
-
createTab
|
|
2135
|
+
createTab,
|
|
2136
|
+
createGroup,
|
|
2137
|
+
toggleGroupCollapsed,
|
|
2138
|
+
toggleMute
|
|
1824
2139
|
} = useTabs();
|
|
1825
2140
|
const {
|
|
1826
2141
|
runtimeState: runtimeState2
|
|
@@ -1828,6 +2143,30 @@ const TabBar = () => {
|
|
|
1828
2143
|
const now2 = useNow();
|
|
1829
2144
|
const [closingTabIds, setClosingTabIds] = createSignal(/* @__PURE__ */ new Set());
|
|
1830
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
|
+
});
|
|
1831
2170
|
const handleClose = (id) => {
|
|
1832
2171
|
setClosingTabIds((prev) => new Set(prev).add(id));
|
|
1833
2172
|
setTimeout(() => {
|
|
@@ -1840,60 +2179,172 @@ const TabBar = () => {
|
|
|
1840
2179
|
}, TAB_CLOSE_MS);
|
|
1841
2180
|
};
|
|
1842
2181
|
return (() => {
|
|
1843
|
-
var _el$3 = _tmpl$3$c(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
|
|
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;
|
|
1844
2183
|
insert(_el$4, createComponent(For, {
|
|
1845
2184
|
get each() {
|
|
1846
|
-
return
|
|
2185
|
+
return tabEntries();
|
|
1847
2186
|
},
|
|
1848
|
-
children: (
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
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
|
|
2338
|
+
}));
|
|
2339
|
+
_el$8.$$click = () => createTab();
|
|
2340
|
+
insert(_el$8, createComponent(plus_default, {
|
|
2341
|
+
size: 15
|
|
2342
|
+
}));
|
|
2343
|
+
_el$9.$$click = () => window.vessel.tabs.openPrivateWindow();
|
|
1893
2344
|
return _el$3;
|
|
1894
2345
|
})();
|
|
1895
2346
|
};
|
|
1896
|
-
delegateEvents(["click"]);
|
|
2347
|
+
delegateEvents(["click", "contextmenu"]);
|
|
1897
2348
|
const DEFAULT_SIDEBAR_WIDTH = 400;
|
|
1898
2349
|
const MIN_SIDEBAR = 240;
|
|
1899
2350
|
const MAX_SIDEBAR = 800;
|
|
@@ -1964,6 +2415,84 @@ function useUI() {
|
|
|
1964
2415
|
}
|
|
1965
2416
|
};
|
|
1966
2417
|
}
|
|
2418
|
+
const logger$3 = createLogger("HistoryStore");
|
|
2419
|
+
const INITIAL$1 = { entries: [] };
|
|
2420
|
+
const [historyState, setHistoryState] = createSignal(INITIAL$1);
|
|
2421
|
+
let initialized$2 = false;
|
|
2422
|
+
let initPromise$1 = null;
|
|
2423
|
+
async function init$2() {
|
|
2424
|
+
if (initPromise$1) return initPromise$1;
|
|
2425
|
+
if (initialized$2) return;
|
|
2426
|
+
initialized$2 = true;
|
|
2427
|
+
initPromise$1 = (async () => {
|
|
2428
|
+
try {
|
|
2429
|
+
const state = await window.vessel.history.get();
|
|
2430
|
+
setHistoryState(state);
|
|
2431
|
+
window.vessel.history.onUpdate((s) => setHistoryState(s));
|
|
2432
|
+
} catch (error) {
|
|
2433
|
+
initialized$2 = false;
|
|
2434
|
+
logger$3.error("Failed to initialize history store:", error);
|
|
2435
|
+
} finally {
|
|
2436
|
+
initPromise$1 = null;
|
|
2437
|
+
}
|
|
2438
|
+
})();
|
|
2439
|
+
return initPromise$1;
|
|
2440
|
+
}
|
|
2441
|
+
function useHistory() {
|
|
2442
|
+
void init$2();
|
|
2443
|
+
return {
|
|
2444
|
+
historyState,
|
|
2445
|
+
search: (query) => window.vessel.history.search(query),
|
|
2446
|
+
clear: () => window.vessel.history.clear()
|
|
2447
|
+
};
|
|
2448
|
+
}
|
|
2449
|
+
const logger$2 = createLogger("BookmarksStore");
|
|
2450
|
+
const INITIAL = { folders: [], bookmarks: [] };
|
|
2451
|
+
const [bookmarksState, setBookmarksState] = createSignal(INITIAL);
|
|
2452
|
+
let initialized$1 = false;
|
|
2453
|
+
let initPromise = null;
|
|
2454
|
+
async function init$1() {
|
|
2455
|
+
if (initPromise) return initPromise;
|
|
2456
|
+
if (initialized$1) return;
|
|
2457
|
+
initialized$1 = true;
|
|
2458
|
+
initPromise = (async () => {
|
|
2459
|
+
try {
|
|
2460
|
+
const state = await window.vessel.bookmarks.get();
|
|
2461
|
+
setBookmarksState(state);
|
|
2462
|
+
window.vessel.bookmarks.onUpdate((s) => setBookmarksState(s));
|
|
2463
|
+
} catch (error) {
|
|
2464
|
+
initialized$1 = false;
|
|
2465
|
+
logger$2.error("Failed to initialize bookmarks store:", error);
|
|
2466
|
+
} finally {
|
|
2467
|
+
initPromise = null;
|
|
2468
|
+
}
|
|
2469
|
+
})();
|
|
2470
|
+
return initPromise;
|
|
2471
|
+
}
|
|
2472
|
+
function useBookmarks() {
|
|
2473
|
+
void init$1();
|
|
2474
|
+
return {
|
|
2475
|
+
bookmarksState,
|
|
2476
|
+
saveBookmark: (url, title, folderId, note, intent, expectedContent, keyFields, agentHints) => window.vessel.bookmarks.saveBookmark(
|
|
2477
|
+
url,
|
|
2478
|
+
title,
|
|
2479
|
+
folderId,
|
|
2480
|
+
note,
|
|
2481
|
+
intent,
|
|
2482
|
+
expectedContent,
|
|
2483
|
+
keyFields,
|
|
2484
|
+
agentHints
|
|
2485
|
+
),
|
|
2486
|
+
updateBookmark: (id, updates) => window.vessel.bookmarks.updateBookmark(id, updates),
|
|
2487
|
+
removeBookmark: (id) => window.vessel.bookmarks.removeBookmark(id),
|
|
2488
|
+
exportHtml: (options) => window.vessel.bookmarks.exportHtml(options),
|
|
2489
|
+
exportJson: () => window.vessel.bookmarks.exportJson(),
|
|
2490
|
+
createFolder: (name) => window.vessel.bookmarks.createFolder(name),
|
|
2491
|
+
createFolderWithSummary: (name, summary) => window.vessel.bookmarks.createFolderWithSummary(name, summary),
|
|
2492
|
+
removeFolder: (id, deleteContents) => window.vessel.bookmarks.removeFolder(id, deleteContents),
|
|
2493
|
+
renameFolder: (id, newName, summary) => window.vessel.bookmarks.renameFolder(id, newName, summary)
|
|
2494
|
+
};
|
|
2495
|
+
}
|
|
1967
2496
|
function normalizePageUrl(rawUrl) {
|
|
1968
2497
|
try {
|
|
1969
2498
|
const url = new URL(rawUrl);
|
|
@@ -2078,7 +2607,15 @@ function buildPageSnapshotKey(rawUrl) {
|
|
|
2078
2607
|
function matchesPageSnapshotUrl(left, right) {
|
|
2079
2608
|
return buildPageSnapshotKey(left) === buildPageSnapshotKey(right);
|
|
2080
2609
|
}
|
|
2081
|
-
|
|
2610
|
+
const SEARCH_ENGINE_PRESETS = {
|
|
2611
|
+
duckduckgo: { label: "DuckDuckGo", url: "https://duckduckgo.com/?q=" },
|
|
2612
|
+
google: { label: "Google", url: "https://www.google.com/search?q=" },
|
|
2613
|
+
bing: { label: "Bing", url: "https://www.bing.com/search?q=" },
|
|
2614
|
+
brave: { label: "Brave Search", url: "https://search.brave.com/search?q=" },
|
|
2615
|
+
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
2616
|
+
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
2617
|
+
};
|
|
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>×`), _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>`);
|
|
2082
2619
|
const AddressBar = () => {
|
|
2083
2620
|
const {
|
|
2084
2621
|
activeTab,
|
|
@@ -2098,16 +2635,48 @@ const AddressBar = () => {
|
|
|
2098
2635
|
toggleDevTools,
|
|
2099
2636
|
devtoolsPanelOpen: devtoolsPanelOpen2
|
|
2100
2637
|
} = useUI();
|
|
2638
|
+
const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
|
|
2639
|
+
const {
|
|
2640
|
+
historyState: historyState2
|
|
2641
|
+
} = useHistory();
|
|
2642
|
+
const {
|
|
2643
|
+
bookmarksState: bookmarksState2
|
|
2644
|
+
} = useBookmarks();
|
|
2101
2645
|
const [inputValue, setInputValue] = createSignal("");
|
|
2646
|
+
const [showSuggestions, setShowSuggestions] = createSignal(false);
|
|
2647
|
+
const [selectedIndex, setSelectedIndex] = createSignal(-1);
|
|
2648
|
+
const [searchEngine, setSearchEngine] = createSignal("duckduckgo");
|
|
2102
2649
|
const now2 = useNow();
|
|
2103
2650
|
let inputRef;
|
|
2104
2651
|
const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
|
|
2105
2652
|
const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
|
|
2106
2653
|
const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
|
|
2654
|
+
const searchEnginePreset = createMemo(() => {
|
|
2655
|
+
const engine = searchEngine();
|
|
2656
|
+
return engine === "none" ? SEARCH_ENGINE_PRESETS.duckduckgo : SEARCH_ENGINE_PRESETS[engine];
|
|
2657
|
+
});
|
|
2658
|
+
const buildSearchUrl = (query) => searchEnginePreset().url + encodeURIComponent(query);
|
|
2107
2659
|
const [pageDiff, setPageDiff] = createSignal(null);
|
|
2108
2660
|
const [diffExpanded, setDiffExpanded] = createSignal(false);
|
|
2109
2661
|
let diffCollapseTimer = null;
|
|
2662
|
+
onMount(() => {
|
|
2663
|
+
let disposed = false;
|
|
2664
|
+
void window.vessel.settings.get().then((settings) => {
|
|
2665
|
+
if (!disposed) {
|
|
2666
|
+
setSearchEngine(settings.defaultSearchEngine ?? "duckduckgo");
|
|
2667
|
+
}
|
|
2668
|
+
}).catch(() => {
|
|
2669
|
+
});
|
|
2670
|
+
const unsubscribe = window.vessel.settings.onUpdate((settings) => {
|
|
2671
|
+
setSearchEngine(settings.defaultSearchEngine ?? "duckduckgo");
|
|
2672
|
+
});
|
|
2673
|
+
onCleanup(() => {
|
|
2674
|
+
disposed = true;
|
|
2675
|
+
unsubscribe();
|
|
2676
|
+
});
|
|
2677
|
+
});
|
|
2110
2678
|
const showIncomingDiff = (diff) => {
|
|
2679
|
+
if (isPrivateWindow) return;
|
|
2111
2680
|
setPageDiff(diff);
|
|
2112
2681
|
setDiffExpanded(true);
|
|
2113
2682
|
if (diffCollapseTimer) clearTimeout(diffCollapseTimer);
|
|
@@ -2117,6 +2686,7 @@ const AddressBar = () => {
|
|
|
2117
2686
|
}, 8e3);
|
|
2118
2687
|
};
|
|
2119
2688
|
const openDiffTimeline = async () => {
|
|
2689
|
+
if (isPrivateWindow) return;
|
|
2120
2690
|
setDiffExpanded(false);
|
|
2121
2691
|
if (diffCollapseTimer) {
|
|
2122
2692
|
clearTimeout(diffCollapseTimer);
|
|
@@ -2145,6 +2715,7 @@ const AddressBar = () => {
|
|
|
2145
2715
|
return `${hours}h`;
|
|
2146
2716
|
};
|
|
2147
2717
|
createEffect(() => {
|
|
2718
|
+
if (isPrivateWindow) return;
|
|
2148
2719
|
const unsubscribe = window.vessel.pageDiff.onChanged((diff) => {
|
|
2149
2720
|
const tab = activeTab();
|
|
2150
2721
|
if (!tab) return;
|
|
@@ -2163,10 +2734,65 @@ const AddressBar = () => {
|
|
|
2163
2734
|
const tab = activeTab();
|
|
2164
2735
|
if (tab && !inputRef?.matches(":focus")) {
|
|
2165
2736
|
setInputValue(tab.url === "about:blank" ? "" : tab.url);
|
|
2737
|
+
setShowSuggestions(false);
|
|
2738
|
+
setSelectedIndex(-1);
|
|
2739
|
+
}
|
|
2740
|
+
});
|
|
2741
|
+
const MAX_SUGGESTIONS = 8;
|
|
2742
|
+
const suggestions = createMemo(() => {
|
|
2743
|
+
const rawQuery = inputValue().trim();
|
|
2744
|
+
const query = rawQuery.toLowerCase();
|
|
2745
|
+
if (!query || query.length < 2) return [];
|
|
2746
|
+
const results = [];
|
|
2747
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2748
|
+
const matchLimit = MAX_SUGGESTIONS - 1;
|
|
2749
|
+
for (const b of bookmarksState2().bookmarks) {
|
|
2750
|
+
if (seen.has(b.url)) continue;
|
|
2751
|
+
const urlMatch = b.url.toLowerCase().includes(query);
|
|
2752
|
+
const titleMatch = b.title.toLowerCase().includes(query);
|
|
2753
|
+
if (urlMatch || titleMatch) {
|
|
2754
|
+
seen.add(b.url);
|
|
2755
|
+
results.push({
|
|
2756
|
+
url: b.url,
|
|
2757
|
+
title: b.title,
|
|
2758
|
+
source: "bookmark"
|
|
2759
|
+
});
|
|
2760
|
+
}
|
|
2761
|
+
if (results.length >= matchLimit) break;
|
|
2762
|
+
}
|
|
2763
|
+
if (results.length < matchLimit) {
|
|
2764
|
+
for (const h of historyState2().entries) {
|
|
2765
|
+
if (seen.has(h.url)) continue;
|
|
2766
|
+
const urlMatch = h.url.toLowerCase().includes(query);
|
|
2767
|
+
const titleMatch = h.title.toLowerCase().includes(query);
|
|
2768
|
+
if (urlMatch || titleMatch) {
|
|
2769
|
+
seen.add(h.url);
|
|
2770
|
+
results.push({
|
|
2771
|
+
url: h.url,
|
|
2772
|
+
title: h.title,
|
|
2773
|
+
source: "history"
|
|
2774
|
+
});
|
|
2775
|
+
}
|
|
2776
|
+
if (results.length >= matchLimit) break;
|
|
2777
|
+
}
|
|
2166
2778
|
}
|
|
2779
|
+
if (results.length < MAX_SUGGESTIONS) {
|
|
2780
|
+
results.push({
|
|
2781
|
+
url: buildSearchUrl(rawQuery),
|
|
2782
|
+
title: `Search for "${rawQuery}"`,
|
|
2783
|
+
subtitle: searchEnginePreset().label,
|
|
2784
|
+
source: "search"
|
|
2785
|
+
});
|
|
2786
|
+
}
|
|
2787
|
+
return results;
|
|
2167
2788
|
});
|
|
2168
2789
|
createEffect(() => {
|
|
2169
2790
|
const tab = activeTab();
|
|
2791
|
+
if (isPrivateWindow) {
|
|
2792
|
+
setPageDiff(null);
|
|
2793
|
+
setDiffExpanded(false);
|
|
2794
|
+
return;
|
|
2795
|
+
}
|
|
2170
2796
|
if (!tab) {
|
|
2171
2797
|
setPageDiff(null);
|
|
2172
2798
|
setDiffExpanded(false);
|
|
@@ -2190,37 +2816,150 @@ const AddressBar = () => {
|
|
|
2190
2816
|
cancelled = true;
|
|
2191
2817
|
});
|
|
2192
2818
|
});
|
|
2819
|
+
const selectSuggestion = (url) => {
|
|
2820
|
+
setInputValue(url);
|
|
2821
|
+
setShowSuggestions(false);
|
|
2822
|
+
setSelectedIndex(-1);
|
|
2823
|
+
navigate(url);
|
|
2824
|
+
inputRef?.blur();
|
|
2825
|
+
};
|
|
2193
2826
|
const handleSubmit = (e) => {
|
|
2194
2827
|
e.preventDefault();
|
|
2195
|
-
const
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2828
|
+
const idx = selectedIndex();
|
|
2829
|
+
const items = suggestions();
|
|
2830
|
+
if (idx >= 0 && idx < items.length) {
|
|
2831
|
+
selectSuggestion(items[idx].url);
|
|
2832
|
+
} else {
|
|
2833
|
+
const val = inputValue().trim();
|
|
2834
|
+
if (val) {
|
|
2835
|
+
navigate(val);
|
|
2836
|
+
inputRef?.blur();
|
|
2837
|
+
setShowSuggestions(false);
|
|
2838
|
+
}
|
|
2839
|
+
}
|
|
2840
|
+
};
|
|
2841
|
+
const handleInputKeyDown = (e) => {
|
|
2842
|
+
const items = suggestions();
|
|
2843
|
+
const idx = selectedIndex();
|
|
2844
|
+
if (e.key === "ArrowDown") {
|
|
2845
|
+
e.preventDefault();
|
|
2846
|
+
if (items.length > 0) {
|
|
2847
|
+
setShowSuggestions(true);
|
|
2848
|
+
setSelectedIndex(idx < items.length - 1 ? idx + 1 : 0);
|
|
2849
|
+
}
|
|
2850
|
+
} else if (e.key === "ArrowUp") {
|
|
2851
|
+
e.preventDefault();
|
|
2852
|
+
if (items.length > 0) {
|
|
2853
|
+
setShowSuggestions(true);
|
|
2854
|
+
setSelectedIndex(idx > 0 ? idx - 1 : items.length - 1);
|
|
2855
|
+
}
|
|
2856
|
+
} else if (e.key === "Escape") {
|
|
2857
|
+
if (showSuggestions()) {
|
|
2858
|
+
setShowSuggestions(false);
|
|
2859
|
+
setSelectedIndex(-1);
|
|
2860
|
+
} else {
|
|
2861
|
+
inputRef?.blur();
|
|
2862
|
+
}
|
|
2199
2863
|
}
|
|
2200
2864
|
};
|
|
2201
2865
|
const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
|
|
2202
2866
|
return (() => {
|
|
2203
|
-
var _el$ = _tmpl$
|
|
2204
|
-
_el$34.firstChild;
|
|
2205
|
-
var _el$37 = _el$34.nextSibling;
|
|
2867
|
+
var _el$ = _tmpl$13$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$7 = _el$2.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$28 = _el$7.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild;
|
|
2206
2868
|
addEventListener(_el$3, "click", goBack, true);
|
|
2207
2869
|
addEventListener(_el$4, "click", goForward, true);
|
|
2208
2870
|
addEventListener(_el$5, "click", reload, true);
|
|
2209
|
-
_el
|
|
2210
|
-
|
|
2211
|
-
|
|
2871
|
+
insert(_el$, createComponent(Show, {
|
|
2872
|
+
when: isPrivateWindow,
|
|
2873
|
+
get children() {
|
|
2874
|
+
return _tmpl$$f();
|
|
2875
|
+
}
|
|
2876
|
+
}), _el$7);
|
|
2877
|
+
_el$8.addEventListener("submit", handleSubmit);
|
|
2878
|
+
_el$9.addEventListener("blur", () => {
|
|
2879
|
+
setTimeout(() => {
|
|
2880
|
+
setShowSuggestions(false);
|
|
2881
|
+
setSelectedIndex(-1);
|
|
2882
|
+
}, 150);
|
|
2883
|
+
});
|
|
2884
|
+
_el$9.$$keydown = handleInputKeyDown;
|
|
2885
|
+
_el$9.addEventListener("focus", (e) => {
|
|
2886
|
+
e.currentTarget.select();
|
|
2887
|
+
const query = inputValue().trim();
|
|
2888
|
+
if (query.length >= 2) setShowSuggestions(true);
|
|
2889
|
+
});
|
|
2890
|
+
_el$9.$$input = (e) => {
|
|
2891
|
+
setInputValue(e.currentTarget.value);
|
|
2892
|
+
setShowSuggestions(true);
|
|
2893
|
+
setSelectedIndex(-1);
|
|
2894
|
+
};
|
|
2212
2895
|
var _ref$ = inputRef;
|
|
2213
|
-
typeof _ref$ === "function" ? use(_ref$, _el$
|
|
2214
|
-
setAttribute(_el$
|
|
2215
|
-
insert(_el$
|
|
2216
|
-
|
|
2896
|
+
typeof _ref$ === "function" ? use(_ref$, _el$9) : inputRef = _el$9;
|
|
2897
|
+
setAttribute(_el$9, "spellcheck", false);
|
|
2898
|
+
insert(_el$7, createComponent(Show, {
|
|
2899
|
+
get when() {
|
|
2900
|
+
return memo(() => !!showSuggestions())() && suggestions().length > 0;
|
|
2901
|
+
},
|
|
2902
|
+
get children() {
|
|
2903
|
+
var _el$0 = _tmpl$2$e();
|
|
2904
|
+
insert(_el$0, createComponent(For, {
|
|
2905
|
+
get each() {
|
|
2906
|
+
return suggestions();
|
|
2907
|
+
},
|
|
2908
|
+
children: (item, i) => (() => {
|
|
2909
|
+
var _el$40 = _tmpl$14$3(), _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling, _el$43 = _el$42.firstChild, _el$44 = _el$43.nextSibling;
|
|
2910
|
+
_el$40.addEventListener("mouseenter", () => setSelectedIndex(i()));
|
|
2911
|
+
_el$40.$$mousedown = (e) => {
|
|
2912
|
+
e.preventDefault();
|
|
2913
|
+
selectSuggestion(item.url);
|
|
2914
|
+
};
|
|
2915
|
+
insert(_el$41, (() => {
|
|
2916
|
+
var _c$ = memo(() => item.source === "bookmark");
|
|
2917
|
+
return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
|
|
2918
|
+
})());
|
|
2919
|
+
insert(_el$43, () => item.title || item.url);
|
|
2920
|
+
insert(_el$44, () => item.subtitle || item.url);
|
|
2921
|
+
createRenderEffect((_p$) => {
|
|
2922
|
+
var _v$10 = `address-autocomplete-${i()}`, _v$11 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$12 = selectedIndex() === i();
|
|
2923
|
+
_v$10 !== _p$.e && setAttribute(_el$40, "id", _p$.e = _v$10);
|
|
2924
|
+
_v$11 !== _p$.t && className(_el$40, _p$.t = _v$11);
|
|
2925
|
+
_v$12 !== _p$.a && setAttribute(_el$40, "aria-selected", _p$.a = _v$12);
|
|
2926
|
+
return _p$;
|
|
2927
|
+
}, {
|
|
2928
|
+
e: void 0,
|
|
2929
|
+
t: void 0,
|
|
2930
|
+
a: void 0
|
|
2931
|
+
});
|
|
2932
|
+
return _el$40;
|
|
2933
|
+
})()
|
|
2934
|
+
}));
|
|
2935
|
+
return _el$0;
|
|
2936
|
+
}
|
|
2937
|
+
}), null);
|
|
2938
|
+
insert(_el$7, createComponent(Show, {
|
|
2939
|
+
when: !isPrivateWindow,
|
|
2940
|
+
get children() {
|
|
2941
|
+
var _el$1 = _tmpl$3$b(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
|
|
2942
|
+
insert(_el$11, () => agentStatusMessage() || (agentPresence() === "active" ? "Agent Active" : agentPresence() === "recent" ? "Agent Connected" : "Agent Offline"));
|
|
2943
|
+
createRenderEffect((_p$) => {
|
|
2944
|
+
var _v$ = `agent-status-badge ${agentPresence()}`, _v$2 = agentStatusMessage() || (agentPresence() === "active" ? "Agent is actively using the browser" : agentPresence() === "recent" ? "Agent is connected" : "No agent connection detected");
|
|
2945
|
+
_v$ !== _p$.e && className(_el$1, _p$.e = _v$);
|
|
2946
|
+
_v$2 !== _p$.t && setAttribute(_el$1, "title", _p$.t = _v$2);
|
|
2947
|
+
return _p$;
|
|
2948
|
+
}, {
|
|
2949
|
+
e: void 0,
|
|
2950
|
+
t: void 0
|
|
2951
|
+
});
|
|
2952
|
+
return _el$1;
|
|
2953
|
+
}
|
|
2954
|
+
}), null);
|
|
2955
|
+
insert(_el$7, createComponent(Show, {
|
|
2217
2956
|
get when() {
|
|
2218
2957
|
return pageDiff();
|
|
2219
2958
|
},
|
|
2220
2959
|
get children() {
|
|
2221
|
-
var _el$
|
|
2222
|
-
_el$
|
|
2223
|
-
return _el$
|
|
2960
|
+
var _el$12 = _tmpl$4$b();
|
|
2961
|
+
_el$12.$$click = () => void openDiffTimeline();
|
|
2962
|
+
return _el$12;
|
|
2224
2963
|
}
|
|
2225
2964
|
}), null);
|
|
2226
2965
|
insert(_el$, createComponent(Show, {
|
|
@@ -2228,176 +2967,212 @@ const AddressBar = () => {
|
|
|
2228
2967
|
return memo(() => !!pageDiff())() && diffExpanded();
|
|
2229
2968
|
},
|
|
2230
2969
|
get children() {
|
|
2231
|
-
var _el$
|
|
2232
|
-
_el$
|
|
2233
|
-
var _el$
|
|
2234
|
-
insert(_el$
|
|
2235
|
-
insert(_el$
|
|
2970
|
+
var _el$13 = _tmpl$7$8(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild;
|
|
2971
|
+
_el$16.firstChild;
|
|
2972
|
+
var _el$23 = _el$15.nextSibling, _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
|
|
2973
|
+
insert(_el$16, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
|
|
2974
|
+
insert(_el$15, createComponent(Show, {
|
|
2236
2975
|
get when() {
|
|
2237
2976
|
return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
|
|
2238
2977
|
},
|
|
2239
2978
|
get children() {
|
|
2240
|
-
var _el$
|
|
2241
|
-
_el$
|
|
2242
|
-
insert(_el$
|
|
2243
|
-
insert(_el$
|
|
2244
|
-
return _el$
|
|
2979
|
+
var _el$18 = _tmpl$5$a(), _el$19 = _el$18.firstChild, _el$22 = _el$19.nextSibling;
|
|
2980
|
+
_el$22.nextSibling;
|
|
2981
|
+
insert(_el$18, () => pageDiff().burstCount, _el$22);
|
|
2982
|
+
insert(_el$18, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
|
|
2983
|
+
return _el$18;
|
|
2245
2984
|
}
|
|
2246
2985
|
}), null);
|
|
2247
|
-
_el$
|
|
2248
|
-
_el$
|
|
2249
|
-
insert(_el$
|
|
2986
|
+
_el$24.$$click = () => void openDiffTimeline();
|
|
2987
|
+
_el$25.$$click = () => setDiffExpanded(false);
|
|
2988
|
+
insert(_el$13, createComponent(Show, {
|
|
2250
2989
|
get when() {
|
|
2251
2990
|
return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
|
|
2252
2991
|
},
|
|
2253
2992
|
get children() {
|
|
2254
|
-
var _el$
|
|
2255
|
-
_el$
|
|
2256
|
-
insert(_el$
|
|
2993
|
+
var _el$26 = _tmpl$6$9();
|
|
2994
|
+
_el$26.firstChild;
|
|
2995
|
+
insert(_el$26, createComponent(For, {
|
|
2257
2996
|
get each() {
|
|
2258
2997
|
return pageDiff().recentBursts;
|
|
2259
2998
|
},
|
|
2260
2999
|
children: (burst) => (() => {
|
|
2261
|
-
var _el$
|
|
2262
|
-
insert(_el$
|
|
2263
|
-
insert(_el$
|
|
2264
|
-
return _el$
|
|
3000
|
+
var _el$45 = _tmpl$15$3(), _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling;
|
|
3001
|
+
insert(_el$46, () => formatRelativeTime(burst.detectedAt));
|
|
3002
|
+
insert(_el$47, () => burst.summary);
|
|
3003
|
+
return _el$45;
|
|
2265
3004
|
})()
|
|
2266
3005
|
}), null);
|
|
2267
|
-
return _el$
|
|
3006
|
+
return _el$26;
|
|
2268
3007
|
}
|
|
2269
3008
|
}), null);
|
|
2270
|
-
insert(_el$
|
|
3009
|
+
insert(_el$13, createComponent(For, {
|
|
2271
3010
|
get each() {
|
|
2272
3011
|
return pageDiff().changes;
|
|
2273
3012
|
},
|
|
2274
3013
|
children: (change) => (() => {
|
|
2275
|
-
var _el$
|
|
2276
|
-
insert(_el$
|
|
2277
|
-
insert(_el$
|
|
2278
|
-
insert(_el$
|
|
3014
|
+
var _el$48 = _tmpl$21$3(), _el$49 = _el$48.firstChild, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
|
|
3015
|
+
insert(_el$50, () => formatSectionLabel(change.section));
|
|
3016
|
+
insert(_el$51, () => change.summary);
|
|
3017
|
+
insert(_el$48, createComponent(Show, {
|
|
2279
3018
|
get when() {
|
|
2280
3019
|
return change.before || change.after;
|
|
2281
3020
|
},
|
|
2282
3021
|
get children() {
|
|
2283
|
-
var _el$
|
|
2284
|
-
insert(_el$
|
|
3022
|
+
var _el$52 = _tmpl$18$3();
|
|
3023
|
+
insert(_el$52, createComponent(Show, {
|
|
2285
3024
|
get when() {
|
|
2286
3025
|
return change.before;
|
|
2287
3026
|
},
|
|
2288
3027
|
get children() {
|
|
2289
|
-
var _el$
|
|
2290
|
-
insert(_el$
|
|
2291
|
-
return _el$
|
|
3028
|
+
var _el$53 = _tmpl$16$3(), _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling;
|
|
3029
|
+
insert(_el$55, () => change.before);
|
|
3030
|
+
return _el$53;
|
|
2292
3031
|
}
|
|
2293
3032
|
}), null);
|
|
2294
|
-
insert(_el$
|
|
3033
|
+
insert(_el$52, createComponent(Show, {
|
|
2295
3034
|
get when() {
|
|
2296
3035
|
return change.after;
|
|
2297
3036
|
},
|
|
2298
3037
|
get children() {
|
|
2299
|
-
var _el$
|
|
2300
|
-
insert(_el$
|
|
2301
|
-
return _el$
|
|
3038
|
+
var _el$56 = _tmpl$17$3(), _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling;
|
|
3039
|
+
insert(_el$58, () => change.after);
|
|
3040
|
+
return _el$56;
|
|
2302
3041
|
}
|
|
2303
3042
|
}), null);
|
|
2304
|
-
return _el$
|
|
3043
|
+
return _el$52;
|
|
2305
3044
|
}
|
|
2306
3045
|
}), null);
|
|
2307
|
-
insert(_el$
|
|
3046
|
+
insert(_el$48, createComponent(Show, {
|
|
2308
3047
|
get when() {
|
|
2309
3048
|
return change.addedItems?.length;
|
|
2310
3049
|
},
|
|
2311
3050
|
get children() {
|
|
2312
|
-
var _el$
|
|
2313
|
-
insert(_el$
|
|
3051
|
+
var _el$59 = _tmpl$19$3(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
|
|
3052
|
+
insert(_el$61, createComponent(For, {
|
|
2314
3053
|
get each() {
|
|
2315
3054
|
return change.addedItems;
|
|
2316
3055
|
},
|
|
2317
3056
|
children: (item) => (() => {
|
|
2318
|
-
var _el$
|
|
2319
|
-
insert(_el$
|
|
2320
|
-
return _el$
|
|
3057
|
+
var _el$65 = _tmpl$22$3();
|
|
3058
|
+
insert(_el$65, item);
|
|
3059
|
+
return _el$65;
|
|
2321
3060
|
})()
|
|
2322
3061
|
}));
|
|
2323
|
-
return _el$
|
|
3062
|
+
return _el$59;
|
|
2324
3063
|
}
|
|
2325
3064
|
}), null);
|
|
2326
|
-
insert(_el$
|
|
3065
|
+
insert(_el$48, createComponent(Show, {
|
|
2327
3066
|
get when() {
|
|
2328
3067
|
return change.removedItems?.length;
|
|
2329
3068
|
},
|
|
2330
3069
|
get children() {
|
|
2331
|
-
var _el$
|
|
2332
|
-
insert(_el$
|
|
3070
|
+
var _el$62 = _tmpl$20$3(), _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling;
|
|
3071
|
+
insert(_el$64, createComponent(For, {
|
|
2333
3072
|
get each() {
|
|
2334
3073
|
return change.removedItems;
|
|
2335
3074
|
},
|
|
2336
3075
|
children: (item) => (() => {
|
|
2337
|
-
var _el$
|
|
2338
|
-
insert(_el$
|
|
2339
|
-
return _el$
|
|
3076
|
+
var _el$66 = _tmpl$22$3();
|
|
3077
|
+
insert(_el$66, item);
|
|
3078
|
+
return _el$66;
|
|
2340
3079
|
})()
|
|
2341
3080
|
}));
|
|
2342
|
-
return _el$
|
|
3081
|
+
return _el$62;
|
|
2343
3082
|
}
|
|
2344
3083
|
}), null);
|
|
2345
|
-
createRenderEffect(() => className(_el$
|
|
2346
|
-
return _el$
|
|
3084
|
+
createRenderEffect(() => className(_el$48, `page-diff-item page-diff-${change.kind}`));
|
|
3085
|
+
return _el$48;
|
|
2347
3086
|
})()
|
|
2348
3087
|
}), null);
|
|
2349
|
-
return _el$
|
|
3088
|
+
return _el$13;
|
|
2350
3089
|
}
|
|
2351
|
-
}), _el$
|
|
2352
|
-
_el$
|
|
3090
|
+
}), _el$28);
|
|
3091
|
+
_el$29.$$click = async () => {
|
|
2353
3092
|
const id = activeTabId2();
|
|
2354
3093
|
if (!id) return;
|
|
2355
3094
|
await toggleAdBlock(id);
|
|
2356
3095
|
};
|
|
2357
|
-
insert(_el$
|
|
3096
|
+
insert(_el$30, createComponent(Show, {
|
|
2358
3097
|
get when() {
|
|
2359
3098
|
return activeTab()?.adBlockingEnabled;
|
|
2360
3099
|
},
|
|
2361
3100
|
get children() {
|
|
2362
|
-
return _tmpl$5
|
|
3101
|
+
return _tmpl$8$5();
|
|
2363
3102
|
}
|
|
2364
3103
|
}), null);
|
|
2365
|
-
insert(_el$
|
|
3104
|
+
insert(_el$30, createComponent(Show, {
|
|
2366
3105
|
get when() {
|
|
2367
3106
|
return !activeTab()?.adBlockingEnabled;
|
|
2368
3107
|
},
|
|
2369
3108
|
get children() {
|
|
2370
|
-
return [_tmpl$5
|
|
3109
|
+
return [_tmpl$8$5(), _tmpl$9$4()];
|
|
2371
3110
|
}
|
|
2372
3111
|
}), null);
|
|
2373
|
-
_el$
|
|
2374
|
-
|
|
2375
|
-
addEventListener(_el$34, "click", toggleSidebar, true);
|
|
2376
|
-
insert(_el$34, createComponent(Show, {
|
|
2377
|
-
get when() {
|
|
2378
|
-
return pendingApprovalCount() > 0;
|
|
2379
|
-
},
|
|
3112
|
+
insert(_el$28, createComponent(Show, {
|
|
3113
|
+
when: !isPrivateWindow,
|
|
2380
3114
|
get children() {
|
|
2381
|
-
var _el$
|
|
2382
|
-
|
|
2383
|
-
createRenderEffect(() =>
|
|
3115
|
+
var _el$34 = _tmpl$0$4();
|
|
3116
|
+
_el$34.$$click = () => window.vessel.content.toggleReader();
|
|
3117
|
+
createRenderEffect(() => _el$34.classList.toggle("active", !!activeTab()?.isReaderMode));
|
|
3118
|
+
return _el$34;
|
|
3119
|
+
}
|
|
3120
|
+
}), null);
|
|
3121
|
+
insert(_el$28, createComponent(Show, {
|
|
3122
|
+
when: !isPrivateWindow,
|
|
3123
|
+
get children() {
|
|
3124
|
+
var _el$35 = _tmpl$1$4();
|
|
3125
|
+
addEventListener(_el$35, "click", toggleDevTools, true);
|
|
3126
|
+
createRenderEffect(() => _el$35.classList.toggle("active", !!devtoolsPanelOpen2()));
|
|
3127
|
+
return _el$35;
|
|
3128
|
+
}
|
|
3129
|
+
}), null);
|
|
3130
|
+
insert(_el$28, createComponent(Show, {
|
|
3131
|
+
when: !isPrivateWindow,
|
|
3132
|
+
get children() {
|
|
3133
|
+
var _el$36 = _tmpl$11$4();
|
|
3134
|
+
_el$36.firstChild;
|
|
3135
|
+
addEventListener(_el$36, "click", toggleSidebar, true);
|
|
3136
|
+
insert(_el$36, createComponent(Show, {
|
|
3137
|
+
get when() {
|
|
3138
|
+
return pendingApprovalCount() > 0;
|
|
3139
|
+
},
|
|
3140
|
+
get children() {
|
|
3141
|
+
var _el$38 = _tmpl$10$4();
|
|
3142
|
+
insert(_el$38, pendingApprovalCount);
|
|
3143
|
+
createRenderEffect(() => setAttribute(_el$38, "aria-label", `${pendingApprovalCount()} pending`));
|
|
3144
|
+
return _el$38;
|
|
3145
|
+
}
|
|
3146
|
+
}), null);
|
|
3147
|
+
createRenderEffect((_p$) => {
|
|
3148
|
+
var _v$3 = !!(pendingApprovalCount() > 0), _v$4 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
|
|
3149
|
+
_v$3 !== _p$.e && _el$36.classList.toggle("has-approvals", _p$.e = _v$3);
|
|
3150
|
+
_v$4 !== _p$.t && setAttribute(_el$36, "title", _p$.t = _v$4);
|
|
3151
|
+
return _p$;
|
|
3152
|
+
}, {
|
|
3153
|
+
e: void 0,
|
|
3154
|
+
t: void 0
|
|
3155
|
+
});
|
|
2384
3156
|
return _el$36;
|
|
2385
3157
|
}
|
|
2386
3158
|
}), null);
|
|
2387
|
-
|
|
3159
|
+
insert(_el$28, createComponent(Show, {
|
|
3160
|
+
when: !isPrivateWindow,
|
|
3161
|
+
get children() {
|
|
3162
|
+
var _el$39 = _tmpl$12$4();
|
|
3163
|
+
addEventListener(_el$39, "click", openSettings, true);
|
|
3164
|
+
return _el$39;
|
|
3165
|
+
}
|
|
3166
|
+
}), null);
|
|
2388
3167
|
createRenderEffect((_p$) => {
|
|
2389
|
-
var _v$ = !activeTab()?.canGoBack, _v$
|
|
2390
|
-
_v$ !== _p$.e && (_el$3.disabled = _p$.e = _v$);
|
|
2391
|
-
_v$
|
|
2392
|
-
_v$
|
|
2393
|
-
_v$
|
|
2394
|
-
_v$
|
|
2395
|
-
_v$
|
|
2396
|
-
_v$
|
|
2397
|
-
_v$8 !== _p$.h && _el$32.classList.toggle("active", _p$.h = _v$8);
|
|
2398
|
-
_v$9 !== _p$.r && _el$33.classList.toggle("active", _p$.r = _v$9);
|
|
2399
|
-
_v$0 !== _p$.d && _el$34.classList.toggle("has-approvals", _p$.d = _v$0);
|
|
2400
|
-
_v$1 !== _p$.l && setAttribute(_el$34, "title", _p$.l = _v$1);
|
|
3168
|
+
var _v$5 = !activeTab()?.canGoBack, _v$6 = !activeTab()?.canGoForward, _v$7 = showSuggestions() && suggestions().length > 0, _v$8 = selectedIndex() >= 0 ? `address-autocomplete-${selectedIndex()}` : void 0, _v$9 = !!activeTab()?.adBlockingEnabled, _v$0 = !activeTab()?.adBlockingEnabled, _v$1 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)";
|
|
3169
|
+
_v$5 !== _p$.e && (_el$3.disabled = _p$.e = _v$5);
|
|
3170
|
+
_v$6 !== _p$.t && (_el$4.disabled = _p$.t = _v$6);
|
|
3171
|
+
_v$7 !== _p$.a && setAttribute(_el$9, "aria-expanded", _p$.a = _v$7);
|
|
3172
|
+
_v$8 !== _p$.o && setAttribute(_el$9, "aria-activedescendant", _p$.o = _v$8);
|
|
3173
|
+
_v$9 !== _p$.i && _el$29.classList.toggle("active", _p$.i = _v$9);
|
|
3174
|
+
_v$0 !== _p$.n && _el$29.classList.toggle("nav-btn-muted", _p$.n = _v$0);
|
|
3175
|
+
_v$1 !== _p$.s && setAttribute(_el$29, "title", _p$.s = _v$1);
|
|
2401
3176
|
return _p$;
|
|
2402
3177
|
}, {
|
|
2403
3178
|
e: void 0,
|
|
@@ -2406,18 +3181,14 @@ const AddressBar = () => {
|
|
|
2406
3181
|
o: void 0,
|
|
2407
3182
|
i: void 0,
|
|
2408
3183
|
n: void 0,
|
|
2409
|
-
s: void 0
|
|
2410
|
-
h: void 0,
|
|
2411
|
-
r: void 0,
|
|
2412
|
-
d: void 0,
|
|
2413
|
-
l: void 0
|
|
3184
|
+
s: void 0
|
|
2414
3185
|
});
|
|
2415
|
-
createRenderEffect(() => _el$
|
|
3186
|
+
createRenderEffect(() => _el$9.value = inputValue());
|
|
2416
3187
|
return _el$;
|
|
2417
3188
|
})();
|
|
2418
3189
|
};
|
|
2419
|
-
delegateEvents(["click", "input"]);
|
|
2420
|
-
var _tmpl$$
|
|
3190
|
+
delegateEvents(["click", "input", "keydown", "mousedown"]);
|
|
3191
|
+
var _tmpl$$e = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
|
|
2421
3192
|
const TOAST_DURATION_MS$1 = 4200;
|
|
2422
3193
|
const TOAST_EXIT_MS$2 = 300;
|
|
2423
3194
|
function isBookmarkToastCandidate(action) {
|
|
@@ -2477,7 +3248,7 @@ const BookmarkNotifications = () => {
|
|
|
2477
3248
|
timeoutIds.clear();
|
|
2478
3249
|
});
|
|
2479
3250
|
return (() => {
|
|
2480
|
-
var _el$ = _tmpl$$
|
|
3251
|
+
var _el$ = _tmpl$$e();
|
|
2481
3252
|
insert(_el$, createComponent(For, {
|
|
2482
3253
|
get each() {
|
|
2483
3254
|
return toasts();
|
|
@@ -2493,7 +3264,7 @@ const BookmarkNotifications = () => {
|
|
|
2493
3264
|
return _el$;
|
|
2494
3265
|
})();
|
|
2495
3266
|
};
|
|
2496
|
-
var _tmpl$$
|
|
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>`);
|
|
2497
3268
|
const TOAST_DURATION_MS = 3e3;
|
|
2498
3269
|
const TOAST_EXIT_MS$1 = 300;
|
|
2499
3270
|
const HighlightNotifications = (props) => {
|
|
@@ -2532,7 +3303,7 @@ const HighlightNotifications = (props) => {
|
|
|
2532
3303
|
return memo(() => !!visible())() && current();
|
|
2533
3304
|
},
|
|
2534
3305
|
get children() {
|
|
2535
|
-
var _el$ = _tmpl$$
|
|
3306
|
+
var _el$ = _tmpl$$d(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
|
|
2536
3307
|
insert(_el$3, () => current().title);
|
|
2537
3308
|
insert(_el$4, () => current().message);
|
|
2538
3309
|
createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!leaving()));
|
|
@@ -2540,7 +3311,7 @@ const HighlightNotifications = (props) => {
|
|
|
2540
3311
|
}
|
|
2541
3312
|
});
|
|
2542
3313
|
};
|
|
2543
|
-
var _tmpl$$
|
|
3314
|
+
var _tmpl$$c = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$c = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _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>`);
|
|
2544
3315
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
2545
3316
|
const TOAST_EXIT_MS = 300;
|
|
2546
3317
|
function formatBytes(bytes) {
|
|
@@ -2631,13 +3402,13 @@ const DownloadToast = () => {
|
|
|
2631
3402
|
return Math.min(100, Math.round(d.receivedBytes / d.totalBytes * 100));
|
|
2632
3403
|
};
|
|
2633
3404
|
return (() => {
|
|
2634
|
-
var _el$ = _tmpl$$
|
|
3405
|
+
var _el$ = _tmpl$$c();
|
|
2635
3406
|
insert(_el$, createComponent(For, {
|
|
2636
3407
|
get each() {
|
|
2637
3408
|
return downloads();
|
|
2638
3409
|
},
|
|
2639
3410
|
children: (dl) => (() => {
|
|
2640
|
-
var _el$2 = _tmpl$7$
|
|
3411
|
+
var _el$2 = _tmpl$7$7(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
2641
3412
|
insert(_el$4, () => dl.filename);
|
|
2642
3413
|
insert(_el$3, createComponent(Show, {
|
|
2643
3414
|
get when() {
|
|
@@ -2696,7 +3467,7 @@ const DownloadToast = () => {
|
|
|
2696
3467
|
return _el$;
|
|
2697
3468
|
})();
|
|
2698
3469
|
};
|
|
2699
|
-
var _tmpl$$
|
|
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)">▲</button><button class=find-bar-btn title="Next (Enter)">▼</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">×`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=find-bar-count>`);
|
|
2700
3471
|
const FindBar = () => {
|
|
2701
3472
|
const [open, setOpen] = createSignal(false);
|
|
2702
3473
|
const [query, setQuery] = createSignal("");
|
|
@@ -2774,7 +3545,7 @@ const FindBar = () => {
|
|
|
2774
3545
|
return open();
|
|
2775
3546
|
},
|
|
2776
3547
|
get children() {
|
|
2777
|
-
var _el$ = _tmpl$$
|
|
3548
|
+
var _el$ = _tmpl$$b(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
|
|
2778
3549
|
_el$2.$$input = (e) => handleInput(e.currentTarget.value);
|
|
2779
3550
|
var _ref$ = inputRef;
|
|
2780
3551
|
typeof _ref$ === "function" ? use(_ref$, _el$2) : inputRef = _el$2;
|
|
@@ -2801,7 +3572,7 @@ const FindBar = () => {
|
|
|
2801
3572
|
});
|
|
2802
3573
|
};
|
|
2803
3574
|
delegateEvents(["input", "click"]);
|
|
2804
|
-
var _tmpl$$
|
|
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>`);
|
|
2805
3576
|
const FlowProgress = () => {
|
|
2806
3577
|
const {
|
|
2807
3578
|
runtimeState: runtimeState2
|
|
@@ -2832,7 +3603,7 @@ const FlowProgress = () => {
|
|
|
2832
3603
|
return flow() || tracker();
|
|
2833
3604
|
},
|
|
2834
3605
|
get children() {
|
|
2835
|
-
var _el$ = _tmpl$$
|
|
3606
|
+
var _el$ = _tmpl$$a();
|
|
2836
3607
|
insert(_el$, createComponent(Show, {
|
|
2837
3608
|
get when() {
|
|
2838
3609
|
return tracker();
|
|
@@ -2932,7 +3703,7 @@ function formatTime(iso, options) {
|
|
|
2932
3703
|
...options?.includeSeconds && { second: "2-digit" }
|
|
2933
3704
|
});
|
|
2934
3705
|
}
|
|
2935
|
-
var _tmpl$$
|
|
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>`);
|
|
2936
3707
|
const AgentTranscriptDock = () => {
|
|
2937
3708
|
const {
|
|
2938
3709
|
runtimeState: runtimeState2
|
|
@@ -2969,7 +3740,7 @@ const AgentTranscriptDock = () => {
|
|
|
2969
3740
|
return isSummary();
|
|
2970
3741
|
},
|
|
2971
3742
|
get children() {
|
|
2972
|
-
var _el$ = _tmpl$$
|
|
3743
|
+
var _el$ = _tmpl$$9();
|
|
2973
3744
|
insert(_el$, createComponent(Show, {
|
|
2974
3745
|
get when() {
|
|
2975
3746
|
return latestEntry();
|
|
@@ -3024,7 +3795,7 @@ const AgentTranscriptDock = () => {
|
|
|
3024
3795
|
return visibleEntries();
|
|
3025
3796
|
},
|
|
3026
3797
|
children: (entry) => (() => {
|
|
3027
|
-
var _el$12 = _tmpl$7$
|
|
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;
|
|
3028
3799
|
insert(_el$14, () => entry.title || entry.kind);
|
|
3029
3800
|
insert(_el$15, () => formatTime(entry.updatedAt));
|
|
3030
3801
|
insert(_el$16, () => entry.text);
|
|
@@ -3154,7 +3925,7 @@ const [pendingQueries, setPendingQueries] = createSignal([]);
|
|
|
3154
3925
|
const [pendingQueryActivities, setPendingQueryActivities] = createSignal([]);
|
|
3155
3926
|
const [queueNotice, setQueueNotice] = createSignal(null);
|
|
3156
3927
|
const [automationActivities, setAutomationActivities] = createSignal([]);
|
|
3157
|
-
let initialized
|
|
3928
|
+
let initialized = false;
|
|
3158
3929
|
let pendingDrainScheduled = false;
|
|
3159
3930
|
let listenerCleanups = [];
|
|
3160
3931
|
let pendingAutomationActivity = null;
|
|
@@ -3212,9 +3983,9 @@ function schedulePendingDrain() {
|
|
|
3212
3983
|
}
|
|
3213
3984
|
});
|
|
3214
3985
|
}
|
|
3215
|
-
function init
|
|
3216
|
-
if (initialized
|
|
3217
|
-
initialized
|
|
3986
|
+
function init() {
|
|
3987
|
+
if (initialized) return;
|
|
3988
|
+
initialized = true;
|
|
3218
3989
|
listenerCleanups.push(window.vessel.ai.onStreamStart((prompt) => {
|
|
3219
3990
|
setMessages((prev) => {
|
|
3220
3991
|
const next = [...prev, { role: "user", content: prompt }];
|
|
@@ -3297,7 +4068,7 @@ function init$2() {
|
|
|
3297
4068
|
}));
|
|
3298
4069
|
}
|
|
3299
4070
|
function useAI() {
|
|
3300
|
-
init
|
|
4071
|
+
init();
|
|
3301
4072
|
const query = async (prompt, activity = null) => {
|
|
3302
4073
|
recordRecentQuery(prompt);
|
|
3303
4074
|
if (isStreaming()) {
|
|
@@ -3389,7 +4160,7 @@ function useAnimatedPresence(isOpen, exitDurationMs) {
|
|
|
3389
4160
|
});
|
|
3390
4161
|
return { visible, closing };
|
|
3391
4162
|
}
|
|
3392
|
-
var _tmpl$$
|
|
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`);
|
|
3393
4164
|
const COMMAND_BAR_EXIT_MS = 200;
|
|
3394
4165
|
const CommandBar = () => {
|
|
3395
4166
|
const {
|
|
@@ -3457,7 +4228,7 @@ const CommandBar = () => {
|
|
|
3457
4228
|
return !hasProvider();
|
|
3458
4229
|
},
|
|
3459
4230
|
get children() {
|
|
3460
|
-
var _el$6 = _tmpl$$
|
|
4231
|
+
var _el$6 = _tmpl$$8(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
|
|
3461
4232
|
_el$8.$$click = () => {
|
|
3462
4233
|
closeCommandBar();
|
|
3463
4234
|
openSettings();
|
|
@@ -3513,82 +4284,6 @@ const CommandBar = () => {
|
|
|
3513
4284
|
});
|
|
3514
4285
|
};
|
|
3515
4286
|
delegateEvents(["click", "input", "keydown"]);
|
|
3516
|
-
const logger$3 = createLogger("HistoryStore");
|
|
3517
|
-
const INITIAL$1 = { entries: [] };
|
|
3518
|
-
const [historyState, setHistoryState] = createSignal(INITIAL$1);
|
|
3519
|
-
let initialized$1 = false;
|
|
3520
|
-
let initPromise$1 = null;
|
|
3521
|
-
async function init$1() {
|
|
3522
|
-
if (initPromise$1) return initPromise$1;
|
|
3523
|
-
if (initialized$1) return;
|
|
3524
|
-
initialized$1 = true;
|
|
3525
|
-
initPromise$1 = (async () => {
|
|
3526
|
-
try {
|
|
3527
|
-
const state = await window.vessel.history.get();
|
|
3528
|
-
setHistoryState(state);
|
|
3529
|
-
window.vessel.history.onUpdate((s) => setHistoryState(s));
|
|
3530
|
-
} catch (error) {
|
|
3531
|
-
initialized$1 = false;
|
|
3532
|
-
logger$3.error("Failed to initialize history store:", error);
|
|
3533
|
-
} finally {
|
|
3534
|
-
initPromise$1 = null;
|
|
3535
|
-
}
|
|
3536
|
-
})();
|
|
3537
|
-
return initPromise$1;
|
|
3538
|
-
}
|
|
3539
|
-
function useHistory() {
|
|
3540
|
-
void init$1();
|
|
3541
|
-
return {
|
|
3542
|
-
historyState,
|
|
3543
|
-
search: (query) => window.vessel.history.search(query),
|
|
3544
|
-
clear: () => window.vessel.history.clear()
|
|
3545
|
-
};
|
|
3546
|
-
}
|
|
3547
|
-
const logger$2 = createLogger("BookmarksStore");
|
|
3548
|
-
const INITIAL = { folders: [], bookmarks: [] };
|
|
3549
|
-
const [bookmarksState, setBookmarksState] = createSignal(INITIAL);
|
|
3550
|
-
let initialized = false;
|
|
3551
|
-
let initPromise = null;
|
|
3552
|
-
async function init() {
|
|
3553
|
-
if (initPromise) return initPromise;
|
|
3554
|
-
if (initialized) return;
|
|
3555
|
-
initialized = true;
|
|
3556
|
-
initPromise = (async () => {
|
|
3557
|
-
try {
|
|
3558
|
-
const state = await window.vessel.bookmarks.get();
|
|
3559
|
-
setBookmarksState(state);
|
|
3560
|
-
window.vessel.bookmarks.onUpdate((s) => setBookmarksState(s));
|
|
3561
|
-
} catch (error) {
|
|
3562
|
-
initialized = false;
|
|
3563
|
-
logger$2.error("Failed to initialize bookmarks store:", error);
|
|
3564
|
-
} finally {
|
|
3565
|
-
initPromise = null;
|
|
3566
|
-
}
|
|
3567
|
-
})();
|
|
3568
|
-
return initPromise;
|
|
3569
|
-
}
|
|
3570
|
-
function useBookmarks() {
|
|
3571
|
-
void init();
|
|
3572
|
-
return {
|
|
3573
|
-
bookmarksState,
|
|
3574
|
-
saveBookmark: (url, title, folderId, note, intent, expectedContent, keyFields, agentHints) => window.vessel.bookmarks.saveBookmark(
|
|
3575
|
-
url,
|
|
3576
|
-
title,
|
|
3577
|
-
folderId,
|
|
3578
|
-
note,
|
|
3579
|
-
intent,
|
|
3580
|
-
expectedContent,
|
|
3581
|
-
keyFields,
|
|
3582
|
-
agentHints
|
|
3583
|
-
),
|
|
3584
|
-
updateBookmark: (id, updates) => window.vessel.bookmarks.updateBookmark(id, updates),
|
|
3585
|
-
removeBookmark: (id) => window.vessel.bookmarks.removeBookmark(id),
|
|
3586
|
-
createFolder: (name) => window.vessel.bookmarks.createFolder(name),
|
|
3587
|
-
createFolderWithSummary: (name, summary) => window.vessel.bookmarks.createFolderWithSummary(name, summary),
|
|
3588
|
-
removeFolder: (id, deleteContents) => window.vessel.bookmarks.removeFolder(id, deleteContents),
|
|
3589
|
-
renameFolder: (id, newName, summary) => window.vessel.bookmarks.renameFolder(id, newName, summary)
|
|
3590
|
-
};
|
|
3591
|
-
}
|
|
3592
4287
|
const MEMORY_STORAGE_KEY = "vessel.bookmark-context.memories";
|
|
3593
4288
|
const MAX_MEMORY_LINES = 4;
|
|
3594
4289
|
const MAX_MEMORY_CHARS = 420;
|
|
@@ -5081,7 +5776,7 @@ function getBookmarkSearchMatch(args) {
|
|
|
5081
5776
|
}
|
|
5082
5777
|
return { matchedFields, score };
|
|
5083
5778
|
}
|
|
5084
|
-
var _tmpl$$
|
|
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>`);
|
|
5085
5780
|
const DropdownSelect = (props) => {
|
|
5086
5781
|
const [open, setOpen] = createSignal(false);
|
|
5087
5782
|
let rootRef;
|
|
@@ -5115,7 +5810,7 @@ const DropdownSelect = (props) => {
|
|
|
5115
5810
|
return open();
|
|
5116
5811
|
},
|
|
5117
5812
|
get children() {
|
|
5118
|
-
var _el$5 = _tmpl$$
|
|
5813
|
+
var _el$5 = _tmpl$$7();
|
|
5119
5814
|
insert(_el$5, createComponent(For, {
|
|
5120
5815
|
get each() {
|
|
5121
5816
|
return props.options;
|
|
@@ -5131,254 +5826,44 @@ const DropdownSelect = (props) => {
|
|
|
5131
5826
|
get when() {
|
|
5132
5827
|
return option.description;
|
|
5133
5828
|
},
|
|
5134
|
-
get children() {
|
|
5135
|
-
var _el$9 = _tmpl$3$6();
|
|
5136
|
-
insert(_el$9, () => option.description);
|
|
5137
|
-
return _el$9;
|
|
5138
|
-
}
|
|
5139
|
-
}), null);
|
|
5140
|
-
createRenderEffect((_p$) => {
|
|
5141
|
-
var _v$5 = !!(option.value === props.value), _v$6 = option.value === props.value;
|
|
5142
|
-
_v$5 !== _p$.e && _el$6.classList.toggle("selected", _p$.e = _v$5);
|
|
5143
|
-
_v$6 !== _p$.t && setAttribute(_el$6, "aria-selected", _p$.t = _v$6);
|
|
5144
|
-
return _p$;
|
|
5145
|
-
}, {
|
|
5146
|
-
e: void 0,
|
|
5147
|
-
t: void 0
|
|
5148
|
-
});
|
|
5149
|
-
return _el$6;
|
|
5150
|
-
})()
|
|
5151
|
-
}));
|
|
5152
|
-
return _el$5;
|
|
5153
|
-
}
|
|
5154
|
-
}), null);
|
|
5155
|
-
createRenderEffect((_p$) => {
|
|
5156
|
-
var _v$ = `dropdown-select ${props.class || ""}`, _v$2 = open(), _v$3 = props.ariaLabel, _v$4 = !!open();
|
|
5157
|
-
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
5158
|
-
_v$2 !== _p$.t && setAttribute(_el$2, "aria-expanded", _p$.t = _v$2);
|
|
5159
|
-
_v$3 !== _p$.a && setAttribute(_el$2, "aria-label", _p$.a = _v$3);
|
|
5160
|
-
_v$4 !== _p$.o && _el$4.classList.toggle("open", _p$.o = _v$4);
|
|
5161
|
-
return _p$;
|
|
5162
|
-
}, {
|
|
5163
|
-
e: void 0,
|
|
5164
|
-
t: void 0,
|
|
5165
|
-
a: void 0,
|
|
5166
|
-
o: void 0
|
|
5167
|
-
});
|
|
5168
|
-
return _el$;
|
|
5169
|
-
})();
|
|
5170
|
-
};
|
|
5171
|
-
delegateEvents(["click"]);
|
|
5172
|
-
var defaultAttributes = {
|
|
5173
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
5174
|
-
width: 24,
|
|
5175
|
-
height: 24,
|
|
5176
|
-
viewBox: "0 0 24 24",
|
|
5177
|
-
fill: "none",
|
|
5178
|
-
stroke: "currentColor",
|
|
5179
|
-
"stroke-width": 2,
|
|
5180
|
-
"stroke-linecap": "round",
|
|
5181
|
-
"stroke-linejoin": "round"
|
|
5182
|
-
};
|
|
5183
|
-
var defaultAttributes_default = defaultAttributes;
|
|
5184
|
-
var LucideContext = createContext({
|
|
5185
|
-
size: 24,
|
|
5186
|
-
color: "currentColor",
|
|
5187
|
-
strokeWidth: 2,
|
|
5188
|
-
absoluteStrokeWidth: false,
|
|
5189
|
-
class: ""
|
|
5190
|
-
});
|
|
5191
|
-
var _tmpl$$7 = /* @__PURE__ */ template(`<svg>`);
|
|
5192
|
-
var hasA11yProp = (props) => {
|
|
5193
|
-
for (const prop in props) {
|
|
5194
|
-
if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
|
|
5195
|
-
return true;
|
|
5196
|
-
}
|
|
5197
|
-
}
|
|
5198
|
-
return false;
|
|
5199
|
-
};
|
|
5200
|
-
var mergeClasses = (...classes) => classes.filter((className2, index, array) => {
|
|
5201
|
-
return Boolean(className2) && className2.trim() !== "" && array.indexOf(className2) === index;
|
|
5202
|
-
}).join(" ").trim();
|
|
5203
|
-
var toCamelCase = (string) => string.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase());
|
|
5204
|
-
var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
5205
|
-
var toPascalCase = (string) => {
|
|
5206
|
-
const camelCase = toCamelCase(string);
|
|
5207
|
-
return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
|
|
5208
|
-
};
|
|
5209
|
-
var Icon = (props) => {
|
|
5210
|
-
const [localProps, rest] = splitProps(props, ["color", "size", "strokeWidth", "children", "class", "name", "iconNode", "absoluteStrokeWidth"]);
|
|
5211
|
-
const globalProps = useContext(LucideContext);
|
|
5212
|
-
return (() => {
|
|
5213
|
-
var _el$ = _tmpl$$7();
|
|
5214
|
-
spread(_el$, mergeProps(defaultAttributes_default, {
|
|
5215
|
-
get width() {
|
|
5216
|
-
return localProps.size ?? globalProps.size ?? defaultAttributes_default.width;
|
|
5217
|
-
},
|
|
5218
|
-
get height() {
|
|
5219
|
-
return localProps.size ?? globalProps.size ?? defaultAttributes_default.height;
|
|
5220
|
-
},
|
|
5221
|
-
get stroke() {
|
|
5222
|
-
return localProps.color ?? globalProps.color ?? defaultAttributes_default.stroke;
|
|
5223
|
-
},
|
|
5224
|
-
get ["stroke-width"]() {
|
|
5225
|
-
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"]);
|
|
5226
|
-
},
|
|
5227
|
-
get ["class"]() {
|
|
5228
|
-
return mergeClasses("lucide", "lucide-icon", globalProps.class, ...localProps.name != null ? [`lucide-${toKebabCase(toPascalCase(localProps.name))}`, `lucide-${toKebabCase(localProps.name)}`] : [], localProps.class);
|
|
5229
|
-
},
|
|
5230
|
-
get ["aria-hidden"]() {
|
|
5231
|
-
return !localProps.children && !hasA11yProp(rest) ? "true" : void 0;
|
|
5232
|
-
}
|
|
5233
|
-
}, rest), true, true);
|
|
5234
|
-
insert(_el$, createComponent(For, {
|
|
5235
|
-
get each() {
|
|
5236
|
-
return localProps.iconNode;
|
|
5237
|
-
},
|
|
5238
|
-
children: ([elementName, attrs]) => {
|
|
5239
|
-
return createComponent(Dynamic, mergeProps({
|
|
5240
|
-
component: elementName
|
|
5241
|
-
}, attrs));
|
|
5829
|
+
get children() {
|
|
5830
|
+
var _el$9 = _tmpl$3$6();
|
|
5831
|
+
insert(_el$9, () => option.description);
|
|
5832
|
+
return _el$9;
|
|
5833
|
+
}
|
|
5834
|
+
}), null);
|
|
5835
|
+
createRenderEffect((_p$) => {
|
|
5836
|
+
var _v$5 = !!(option.value === props.value), _v$6 = option.value === props.value;
|
|
5837
|
+
_v$5 !== _p$.e && _el$6.classList.toggle("selected", _p$.e = _v$5);
|
|
5838
|
+
_v$6 !== _p$.t && setAttribute(_el$6, "aria-selected", _p$.t = _v$6);
|
|
5839
|
+
return _p$;
|
|
5840
|
+
}, {
|
|
5841
|
+
e: void 0,
|
|
5842
|
+
t: void 0
|
|
5843
|
+
});
|
|
5844
|
+
return _el$6;
|
|
5845
|
+
})()
|
|
5846
|
+
}));
|
|
5847
|
+
return _el$5;
|
|
5242
5848
|
}
|
|
5243
|
-
}));
|
|
5849
|
+
}), null);
|
|
5850
|
+
createRenderEffect((_p$) => {
|
|
5851
|
+
var _v$ = `dropdown-select ${props.class || ""}`, _v$2 = open(), _v$3 = props.ariaLabel, _v$4 = !!open();
|
|
5852
|
+
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
5853
|
+
_v$2 !== _p$.t && setAttribute(_el$2, "aria-expanded", _p$.t = _v$2);
|
|
5854
|
+
_v$3 !== _p$.a && setAttribute(_el$2, "aria-label", _p$.a = _v$3);
|
|
5855
|
+
_v$4 !== _p$.o && _el$4.classList.toggle("open", _p$.o = _v$4);
|
|
5856
|
+
return _p$;
|
|
5857
|
+
}, {
|
|
5858
|
+
e: void 0,
|
|
5859
|
+
t: void 0,
|
|
5860
|
+
a: void 0,
|
|
5861
|
+
o: void 0
|
|
5862
|
+
});
|
|
5244
5863
|
return _el$;
|
|
5245
5864
|
})();
|
|
5246
5865
|
};
|
|
5247
|
-
|
|
5248
|
-
var iconNode$8 = [["path", {
|
|
5249
|
-
d: "M12 7v14",
|
|
5250
|
-
key: "1akyts"
|
|
5251
|
-
}], ["path", {
|
|
5252
|
-
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",
|
|
5253
|
-
key: "ruj8y"
|
|
5254
|
-
}]];
|
|
5255
|
-
var BookOpen = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5256
|
-
iconNode: iconNode$8,
|
|
5257
|
-
name: "book-open"
|
|
5258
|
-
}));
|
|
5259
|
-
var book_open_default = BookOpen;
|
|
5260
|
-
var iconNode$7 = [["rect", {
|
|
5261
|
-
width: "8",
|
|
5262
|
-
height: "4",
|
|
5263
|
-
x: "8",
|
|
5264
|
-
y: "2",
|
|
5265
|
-
rx: "1",
|
|
5266
|
-
ry: "1",
|
|
5267
|
-
key: "tgr4d6"
|
|
5268
|
-
}], ["path", {
|
|
5269
|
-
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",
|
|
5270
|
-
key: "116196"
|
|
5271
|
-
}], ["path", {
|
|
5272
|
-
d: "M12 11h4",
|
|
5273
|
-
key: "1jrz19"
|
|
5274
|
-
}], ["path", {
|
|
5275
|
-
d: "M12 16h4",
|
|
5276
|
-
key: "n85exb"
|
|
5277
|
-
}], ["path", {
|
|
5278
|
-
d: "M8 11h.01",
|
|
5279
|
-
key: "1dfujw"
|
|
5280
|
-
}], ["path", {
|
|
5281
|
-
d: "M8 16h.01",
|
|
5282
|
-
key: "18s6g9"
|
|
5283
|
-
}]];
|
|
5284
|
-
var ClipboardList = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5285
|
-
iconNode: iconNode$7,
|
|
5286
|
-
name: "clipboard-list"
|
|
5287
|
-
}));
|
|
5288
|
-
var clipboard_list_default = ClipboardList;
|
|
5289
|
-
var iconNode$6 = [["circle", {
|
|
5290
|
-
cx: "12",
|
|
5291
|
-
cy: "12",
|
|
5292
|
-
r: "10",
|
|
5293
|
-
key: "1mglay"
|
|
5294
|
-
}], ["path", {
|
|
5295
|
-
d: "M12 6v6l4 2",
|
|
5296
|
-
key: "mmk7yg"
|
|
5297
|
-
}]];
|
|
5298
|
-
var Clock = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5299
|
-
iconNode: iconNode$6,
|
|
5300
|
-
name: "clock"
|
|
5301
|
-
}));
|
|
5302
|
-
var clock_default = Clock;
|
|
5303
|
-
var iconNode$5 = [["path", {
|
|
5304
|
-
d: "M12 15V3",
|
|
5305
|
-
key: "m9g1x1"
|
|
5306
|
-
}], ["path", {
|
|
5307
|
-
d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",
|
|
5308
|
-
key: "ih7n3h"
|
|
5309
|
-
}], ["path", {
|
|
5310
|
-
d: "m7 10 5 5 5-5",
|
|
5311
|
-
key: "brsn70"
|
|
5312
|
-
}]];
|
|
5313
|
-
var Download = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5314
|
-
iconNode: iconNode$5,
|
|
5315
|
-
name: "download"
|
|
5316
|
-
}));
|
|
5317
|
-
var download_default = Download;
|
|
5318
|
-
var iconNode$4 = [["circle", {
|
|
5319
|
-
cx: "12",
|
|
5320
|
-
cy: "12",
|
|
5321
|
-
r: "10",
|
|
5322
|
-
key: "1mglay"
|
|
5323
|
-
}], ["path", {
|
|
5324
|
-
d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",
|
|
5325
|
-
key: "13o1zl"
|
|
5326
|
-
}], ["path", {
|
|
5327
|
-
d: "M2 12h20",
|
|
5328
|
-
key: "9i4pu4"
|
|
5329
|
-
}]];
|
|
5330
|
-
var Globe = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5331
|
-
iconNode: iconNode$4,
|
|
5332
|
-
name: "globe"
|
|
5333
|
-
}));
|
|
5334
|
-
var globe_default = Globe;
|
|
5335
|
-
var iconNode$3 = [["path", {
|
|
5336
|
-
d: "m21 21-4.34-4.34",
|
|
5337
|
-
key: "14j7rj"
|
|
5338
|
-
}], ["circle", {
|
|
5339
|
-
cx: "11",
|
|
5340
|
-
cy: "11",
|
|
5341
|
-
r: "8",
|
|
5342
|
-
key: "4ej97u"
|
|
5343
|
-
}]];
|
|
5344
|
-
var Search = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5345
|
-
iconNode: iconNode$3,
|
|
5346
|
-
name: "search"
|
|
5347
|
-
}));
|
|
5348
|
-
var search_default = Search;
|
|
5349
|
-
var iconNode$2 = [["path", {
|
|
5350
|
-
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",
|
|
5351
|
-
key: "r04s7s"
|
|
5352
|
-
}]];
|
|
5353
|
-
var Star = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5354
|
-
iconNode: iconNode$2,
|
|
5355
|
-
name: "star"
|
|
5356
|
-
}));
|
|
5357
|
-
var star_default = Star;
|
|
5358
|
-
var iconNode$1 = [["path", {
|
|
5359
|
-
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",
|
|
5360
|
-
key: "vktsd0"
|
|
5361
|
-
}], ["circle", {
|
|
5362
|
-
cx: "7.5",
|
|
5363
|
-
cy: "7.5",
|
|
5364
|
-
r: ".5",
|
|
5365
|
-
fill: "currentColor",
|
|
5366
|
-
key: "kqv944"
|
|
5367
|
-
}]];
|
|
5368
|
-
var Tag = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5369
|
-
iconNode: iconNode$1,
|
|
5370
|
-
name: "tag"
|
|
5371
|
-
}));
|
|
5372
|
-
var tag_default = Tag;
|
|
5373
|
-
var iconNode = [["path", {
|
|
5374
|
-
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",
|
|
5375
|
-
key: "1xq2db"
|
|
5376
|
-
}]];
|
|
5377
|
-
var Zap = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
5378
|
-
iconNode,
|
|
5379
|
-
name: "zap"
|
|
5380
|
-
}));
|
|
5381
|
-
var zap_default = Zap;
|
|
5866
|
+
delegateEvents(["click"]);
|
|
5382
5867
|
const BUNDLED_KIT_IDS = /* @__PURE__ */ new Set([
|
|
5383
5868
|
"research-collect",
|
|
5384
5869
|
"price-scout",
|
|
@@ -5528,7 +6013,7 @@ function renderKitPrompt(kit, values) {
|
|
|
5528
6013
|
(_, key) => values[key] ?? ""
|
|
5529
6014
|
);
|
|
5530
6015
|
}
|
|
5531
|
-
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$
|
|
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 & 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>`);
|
|
5532
6017
|
const ICON_MAP = {
|
|
5533
6018
|
BookOpen: book_open_default,
|
|
5534
6019
|
Tag: tag_default,
|
|
@@ -6027,7 +6512,7 @@ const AutomationTab = (props) => {
|
|
|
6027
6512
|
},
|
|
6028
6513
|
get children() {
|
|
6029
6514
|
return [(() => {
|
|
6030
|
-
var _el$19 = _tmpl$7$
|
|
6515
|
+
var _el$19 = _tmpl$7$5(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
|
|
6031
6516
|
insert(_el$19, createComponent(zap_default, {
|
|
6032
6517
|
size: 12
|
|
6033
6518
|
}), _el$20);
|
|
@@ -6367,7 +6852,7 @@ const AutomationTab = (props) => {
|
|
|
6367
6852
|
})();
|
|
6368
6853
|
};
|
|
6369
6854
|
delegateEvents(["click", "input", "keydown", "contextmenu"]);
|
|
6370
|
-
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$
|
|
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>`);
|
|
6371
6856
|
const PageDiffTimeline = () => {
|
|
6372
6857
|
const {
|
|
6373
6858
|
activeTab
|
|
@@ -6464,7 +6949,7 @@ const PageDiffTimeline = () => {
|
|
|
6464
6949
|
return i() < bursts().length - 1;
|
|
6465
6950
|
},
|
|
6466
6951
|
get children() {
|
|
6467
|
-
return _tmpl$7$
|
|
6952
|
+
return _tmpl$7$4();
|
|
6468
6953
|
}
|
|
6469
6954
|
}), null);
|
|
6470
6955
|
insert(_el$10, () => new Date(burst.detectedAt).toLocaleString());
|
|
@@ -6481,7 +6966,7 @@ const PageDiffTimeline = () => {
|
|
|
6481
6966
|
})();
|
|
6482
6967
|
};
|
|
6483
6968
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
6484
|
-
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>×`);
|
|
6485
6970
|
const UNSORTED_FOLDER = {
|
|
6486
6971
|
id: "unsorted",
|
|
6487
6972
|
name: "Unsorted",
|
|
@@ -6564,6 +7049,8 @@ const Sidebar = (props) => {
|
|
|
6564
7049
|
saveBookmark,
|
|
6565
7050
|
updateBookmark,
|
|
6566
7051
|
removeBookmark,
|
|
7052
|
+
exportHtml,
|
|
7053
|
+
exportJson,
|
|
6567
7054
|
createFolderWithSummary,
|
|
6568
7055
|
removeFolder,
|
|
6569
7056
|
renameFolder
|
|
@@ -6743,6 +7230,8 @@ ${contextBlock}` : contextBlock);
|
|
|
6743
7230
|
const [newFolderName, setNewFolderName] = createSignal("");
|
|
6744
7231
|
const [newFolderSummary, setNewFolderSummary] = createSignal("");
|
|
6745
7232
|
const [bookmarkSearchQuery, setBookmarkSearchQuery] = createSignal("");
|
|
7233
|
+
const [bookmarkExportMessage, setBookmarkExportMessage] = createSignal("");
|
|
7234
|
+
const [bookmarkExporting, setBookmarkExporting] = createSignal(false);
|
|
6746
7235
|
const [editingFolderId, setEditingFolderId] = createSignal(null);
|
|
6747
7236
|
const [editingFolderName, setEditingFolderName] = createSignal("");
|
|
6748
7237
|
const [editingFolderSummary, setEditingFolderSummary] = createSignal("");
|
|
@@ -7019,6 +7508,24 @@ ${contextBlock}` : contextBlock);
|
|
|
7019
7508
|
setEditingFolderSummary("");
|
|
7020
7509
|
}
|
|
7021
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
|
+
};
|
|
7022
7529
|
const toggleFolderExpanded = (folderId) => {
|
|
7023
7530
|
setExpandedFolderIds((current) => current.includes(folderId) ? current.filter((id) => id !== folderId) : [...current, folderId]);
|
|
7024
7531
|
};
|
|
@@ -7036,9 +7543,9 @@ ${contextBlock}` : contextBlock);
|
|
|
7036
7543
|
return props.forceOpen || sidebarOpen2();
|
|
7037
7544
|
},
|
|
7038
7545
|
get children() {
|
|
7039
|
-
var _el$9 = _tmpl$
|
|
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;
|
|
7040
7547
|
_el$16.firstChild;
|
|
7041
|
-
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$
|
|
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;
|
|
7042
7549
|
_el$0.$$pointerdown = startResize;
|
|
7043
7550
|
setAttribute(_el$11, "src", vesselLogo);
|
|
7044
7551
|
addEventListener(_el$13, "click", clearHistory, true);
|
|
@@ -7069,7 +7576,7 @@ ${contextBlock}` : contextBlock);
|
|
|
7069
7576
|
return sidebarTab() === "supervisor";
|
|
7070
7577
|
},
|
|
7071
7578
|
get children() {
|
|
7072
|
-
var _el$26 = _tmpl$7$
|
|
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;
|
|
7073
7580
|
_el$38.firstChild;
|
|
7074
7581
|
insert(_el$30, () => runtimeState2().supervisor.paused ? "Agent is paused" : "Agent is live");
|
|
7075
7582
|
insert(_el$31, () => runtimeState2().supervisor.paused ? "Paused" : "Running");
|
|
@@ -7104,7 +7611,7 @@ ${contextBlock}` : contextBlock);
|
|
|
7104
7611
|
return runtimeState2().supervisor.pendingApprovals.length > 0;
|
|
7105
7612
|
},
|
|
7106
7613
|
get fallback() {
|
|
7107
|
-
return _tmpl$
|
|
7614
|
+
return _tmpl$29$1();
|
|
7108
7615
|
},
|
|
7109
7616
|
get children() {
|
|
7110
7617
|
return [_tmpl$5$3(), createComponent(For, {
|
|
@@ -7112,13 +7619,13 @@ ${contextBlock}` : contextBlock);
|
|
|
7112
7619
|
return runtimeState2().supervisor.pendingApprovals;
|
|
7113
7620
|
},
|
|
7114
7621
|
children: (approval) => (() => {
|
|
7115
|
-
var _el$
|
|
7116
|
-
insert(_el$
|
|
7117
|
-
insert(_el$
|
|
7118
|
-
insert(_el$
|
|
7119
|
-
_el$
|
|
7120
|
-
_el$
|
|
7121
|
-
return _el$
|
|
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;
|
|
7122
7629
|
})()
|
|
7123
7630
|
})];
|
|
7124
7631
|
}
|
|
@@ -7142,7 +7649,7 @@ ${contextBlock}` : contextBlock);
|
|
|
7142
7649
|
return recentActions().length > 0;
|
|
7143
7650
|
},
|
|
7144
7651
|
get fallback() {
|
|
7145
|
-
return _tmpl$
|
|
7652
|
+
return _tmpl$31$1();
|
|
7146
7653
|
},
|
|
7147
7654
|
get children() {
|
|
7148
7655
|
return createComponent(Show, {
|
|
@@ -7150,7 +7657,7 @@ ${contextBlock}` : contextBlock);
|
|
|
7150
7657
|
return actionsExpanded();
|
|
7151
7658
|
},
|
|
7152
7659
|
get fallback() {
|
|
7153
|
-
return _tmpl$
|
|
7660
|
+
return _tmpl$32$1();
|
|
7154
7661
|
},
|
|
7155
7662
|
get children() {
|
|
7156
7663
|
return createComponent(For, {
|
|
@@ -7158,32 +7665,32 @@ ${contextBlock}` : contextBlock);
|
|
|
7158
7665
|
return recentActions();
|
|
7159
7666
|
},
|
|
7160
7667
|
children: (action) => (() => {
|
|
7161
|
-
var _el$
|
|
7162
|
-
insert(_el$
|
|
7163
|
-
insert(_el$
|
|
7164
|
-
insert(_el$
|
|
7165
|
-
insert(_el$
|
|
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, {
|
|
7166
7673
|
get when() {
|
|
7167
7674
|
return action.resultSummary;
|
|
7168
7675
|
},
|
|
7169
7676
|
get children() {
|
|
7170
|
-
var _el$
|
|
7171
|
-
insert(_el$
|
|
7172
|
-
return _el$
|
|
7677
|
+
var _el$144 = _tmpl$33$1();
|
|
7678
|
+
insert(_el$144, () => action.resultSummary);
|
|
7679
|
+
return _el$144;
|
|
7173
7680
|
}
|
|
7174
7681
|
}), null);
|
|
7175
|
-
insert(_el$
|
|
7682
|
+
insert(_el$139, createComponent(Show, {
|
|
7176
7683
|
get when() {
|
|
7177
7684
|
return action.error;
|
|
7178
7685
|
},
|
|
7179
7686
|
get children() {
|
|
7180
|
-
var _el$
|
|
7181
|
-
insert(_el$
|
|
7182
|
-
return _el$
|
|
7687
|
+
var _el$145 = _tmpl$34$1();
|
|
7688
|
+
insert(_el$145, () => action.error);
|
|
7689
|
+
return _el$145;
|
|
7183
7690
|
}
|
|
7184
7691
|
}), null);
|
|
7185
|
-
createRenderEffect(() => className(_el$
|
|
7186
|
-
return _el$
|
|
7692
|
+
createRenderEffect(() => className(_el$142, `agent-action-status ${action.status}`));
|
|
7693
|
+
return _el$139;
|
|
7187
7694
|
})()
|
|
7188
7695
|
});
|
|
7189
7696
|
}
|
|
@@ -7193,13 +7700,13 @@ ${contextBlock}` : contextBlock);
|
|
|
7193
7700
|
createRenderEffect(() => _el$31.classList.toggle("paused", !!runtimeState2().supervisor.paused));
|
|
7194
7701
|
return _el$26;
|
|
7195
7702
|
}
|
|
7196
|
-
}), _el$
|
|
7703
|
+
}), _el$111);
|
|
7197
7704
|
insert(_el$25, createComponent(Show, {
|
|
7198
7705
|
get when() {
|
|
7199
7706
|
return sidebarTab() === "bookmarks";
|
|
7200
7707
|
},
|
|
7201
7708
|
get children() {
|
|
7202
|
-
var _el$41 = _tmpl$
|
|
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;
|
|
7203
7710
|
insert(_el$45, (() => {
|
|
7204
7711
|
var _c$2 = memo(() => !!normalizedBookmarkSearch());
|
|
7205
7712
|
return () => _c$2() ? `${bookmarkMatchCount()} matches for "${bookmarkSearchQuery().trim()}"` : `${bookmarksState2().bookmarks.length} saved across ${bookmarkFolders().length} folders`;
|
|
@@ -7213,16 +7720,29 @@ ${contextBlock}` : contextBlock);
|
|
|
7213
7720
|
}
|
|
7214
7721
|
}), null);
|
|
7215
7722
|
_el$47.$$input = (e) => setBookmarkSearchQuery(e.currentTarget.value);
|
|
7216
|
-
_el$
|
|
7723
|
+
_el$51.$$click = () => void handleExportBookmarks("html");
|
|
7724
|
+
_el$52.$$click = () => void handleExportBookmarks("html-with-notes");
|
|
7725
|
+
_el$53.$$click = () => void handleExportBookmarks("json");
|
|
7217
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, {
|
|
7218
7738
|
get when() {
|
|
7219
7739
|
return bookmarkSaveExpanded();
|
|
7220
7740
|
},
|
|
7221
7741
|
get children() {
|
|
7222
|
-
var _el$
|
|
7223
|
-
insert(_el$
|
|
7224
|
-
insert(_el$
|
|
7225
|
-
insert(_el$
|
|
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, {
|
|
7226
7746
|
"class": "bookmark-select",
|
|
7227
7747
|
get value() {
|
|
7228
7748
|
return selectedFolderId();
|
|
@@ -7232,37 +7752,37 @@ ${contextBlock}` : contextBlock);
|
|
|
7232
7752
|
},
|
|
7233
7753
|
ariaLabel: "Bookmark folder",
|
|
7234
7754
|
onChange: (value) => setSelectedFolderId(value)
|
|
7235
|
-
}), _el$
|
|
7236
|
-
_el$
|
|
7237
|
-
_el$
|
|
7238
|
-
_el$
|
|
7239
|
-
_el$
|
|
7240
|
-
_el$
|
|
7241
|
-
_el$
|
|
7242
|
-
createRenderEffect(() => _el$
|
|
7243
|
-
createRenderEffect(() => _el$
|
|
7244
|
-
createRenderEffect(() => _el$
|
|
7245
|
-
createRenderEffect(() => _el$
|
|
7246
|
-
createRenderEffect(() => _el$
|
|
7247
|
-
createRenderEffect(() => _el$
|
|
7248
|
-
return _el$
|
|
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;
|
|
7249
7769
|
}
|
|
7250
7770
|
}), null);
|
|
7251
|
-
_el$
|
|
7252
|
-
_el$
|
|
7253
|
-
_el$
|
|
7254
|
-
insert(_el$
|
|
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, {
|
|
7255
7775
|
get when() {
|
|
7256
7776
|
return filteredGroupedBookmarks().length > 0;
|
|
7257
7777
|
},
|
|
7258
7778
|
get fallback() {
|
|
7259
7779
|
return (() => {
|
|
7260
|
-
var _el$
|
|
7261
|
-
insert(_el$
|
|
7780
|
+
var _el$146 = _tmpl$36$1();
|
|
7781
|
+
insert(_el$146, (() => {
|
|
7262
7782
|
var _c$5 = memo(() => !!normalizedBookmarkSearch());
|
|
7263
7783
|
return () => _c$5() ? `No bookmarks matched "${bookmarkSearchQuery().trim()}".` : "No bookmarks saved yet.";
|
|
7264
7784
|
})());
|
|
7265
|
-
return _el$
|
|
7785
|
+
return _el$146;
|
|
7266
7786
|
})();
|
|
7267
7787
|
},
|
|
7268
7788
|
get children() {
|
|
@@ -7271,100 +7791,100 @@ ${contextBlock}` : contextBlock);
|
|
|
7271
7791
|
return filteredGroupedBookmarks();
|
|
7272
7792
|
},
|
|
7273
7793
|
children: (folder) => (() => {
|
|
7274
|
-
var _el$
|
|
7275
|
-
_el$
|
|
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) => {
|
|
7276
7796
|
if (e.key === "Enter" || e.key === " ") {
|
|
7277
7797
|
e.preventDefault();
|
|
7278
7798
|
toggleFolderExpanded(folder.id);
|
|
7279
7799
|
}
|
|
7280
7800
|
};
|
|
7281
|
-
_el$
|
|
7282
|
-
insert(_el$
|
|
7283
|
-
insert(_el$
|
|
7284
|
-
insert(_el$
|
|
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, {
|
|
7285
7805
|
get when() {
|
|
7286
7806
|
return folder.summary;
|
|
7287
7807
|
},
|
|
7288
7808
|
get children() {
|
|
7289
|
-
var _el$
|
|
7290
|
-
insert(_el$
|
|
7291
|
-
return _el$
|
|
7809
|
+
var _el$155 = _tmpl$37$1();
|
|
7810
|
+
insert(_el$155, () => folder.summary);
|
|
7811
|
+
return _el$155;
|
|
7292
7812
|
}
|
|
7293
7813
|
}), null);
|
|
7294
|
-
insert(_el$
|
|
7814
|
+
insert(_el$148, createComponent(Show, {
|
|
7295
7815
|
get when() {
|
|
7296
7816
|
return folder.id !== UNSORTED_FOLDER.id;
|
|
7297
7817
|
},
|
|
7298
7818
|
get children() {
|
|
7299
|
-
var _el$
|
|
7300
|
-
_el$
|
|
7819
|
+
var _el$156 = _tmpl$38$1(), _el$157 = _el$156.firstChild, _el$158 = _el$157.nextSibling;
|
|
7820
|
+
_el$157.$$click = (e) => {
|
|
7301
7821
|
e.stopPropagation();
|
|
7302
7822
|
setEditingFolderId(folder.id);
|
|
7303
7823
|
setEditingFolderName(folder.name);
|
|
7304
7824
|
setEditingFolderSummary(folder.summary || "");
|
|
7305
7825
|
};
|
|
7306
|
-
_el$
|
|
7826
|
+
_el$158.$$click = (e) => {
|
|
7307
7827
|
e.stopPropagation();
|
|
7308
7828
|
setDeletingFolderId(folder.id);
|
|
7309
7829
|
};
|
|
7310
|
-
return _el$
|
|
7830
|
+
return _el$156;
|
|
7311
7831
|
}
|
|
7312
7832
|
}), null);
|
|
7313
|
-
insert(_el$
|
|
7833
|
+
insert(_el$147, createComponent(Show, {
|
|
7314
7834
|
get when() {
|
|
7315
7835
|
return deletingFolderId() === folder.id;
|
|
7316
7836
|
},
|
|
7317
7837
|
get children() {
|
|
7318
|
-
var _el$
|
|
7319
|
-
_el$
|
|
7320
|
-
var _el$
|
|
7321
|
-
insert(_el$
|
|
7322
|
-
insert(_el$
|
|
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, (() => {
|
|
7323
7843
|
var _c$6 = memo(() => folder.items.length > 0);
|
|
7324
7844
|
return () => _c$6() ? ` This folder has ${folder.items.length} bookmark${folder.items.length === 1 ? "" : "s"}.` : "";
|
|
7325
7845
|
})(), null);
|
|
7326
|
-
insert(_el$
|
|
7846
|
+
insert(_el$164, createComponent(Show, {
|
|
7327
7847
|
get when() {
|
|
7328
7848
|
return folder.items.length > 0;
|
|
7329
7849
|
},
|
|
7330
7850
|
get children() {
|
|
7331
|
-
var _el$
|
|
7332
|
-
_el$
|
|
7333
|
-
return _el$
|
|
7851
|
+
var _el$165 = _tmpl$39$1();
|
|
7852
|
+
_el$165.$$click = () => void handleRemoveFolder(folder.id, false);
|
|
7853
|
+
return _el$165;
|
|
7334
7854
|
}
|
|
7335
|
-
}), _el$
|
|
7336
|
-
_el$
|
|
7337
|
-
insert(_el$
|
|
7338
|
-
_el$
|
|
7339
|
-
return _el$
|
|
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;
|
|
7340
7860
|
}
|
|
7341
7861
|
}), null);
|
|
7342
|
-
insert(_el$
|
|
7862
|
+
insert(_el$147, createComponent(Show, {
|
|
7343
7863
|
get when() {
|
|
7344
7864
|
return editingFolderId() === folder.id;
|
|
7345
7865
|
},
|
|
7346
7866
|
get children() {
|
|
7347
|
-
var _el$
|
|
7348
|
-
_el$
|
|
7349
|
-
_el$
|
|
7350
|
-
_el$
|
|
7351
|
-
_el$
|
|
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 = () => {
|
|
7352
7872
|
setEditingFolderId(null);
|
|
7353
7873
|
setEditingFolderName("");
|
|
7354
7874
|
setEditingFolderSummary("");
|
|
7355
7875
|
};
|
|
7356
|
-
createRenderEffect(() => _el$
|
|
7357
|
-
createRenderEffect(() => _el$
|
|
7358
|
-
createRenderEffect(() => _el$
|
|
7359
|
-
return _el$
|
|
7876
|
+
createRenderEffect(() => _el$172.disabled = !editingFolderName().trim());
|
|
7877
|
+
createRenderEffect(() => _el$170.value = editingFolderName());
|
|
7878
|
+
createRenderEffect(() => _el$171.value = editingFolderSummary());
|
|
7879
|
+
return _el$168;
|
|
7360
7880
|
}
|
|
7361
7881
|
}), null);
|
|
7362
|
-
insert(_el$
|
|
7882
|
+
insert(_el$147, createComponent(Show, {
|
|
7363
7883
|
get when() {
|
|
7364
7884
|
return isFolderExpanded(folder.id);
|
|
7365
7885
|
},
|
|
7366
7886
|
get fallback() {
|
|
7367
|
-
return _tmpl$
|
|
7887
|
+
return _tmpl$44();
|
|
7368
7888
|
},
|
|
7369
7889
|
get children() {
|
|
7370
7890
|
return createComponent(Show, {
|
|
@@ -7372,203 +7892,209 @@ ${contextBlock}` : contextBlock);
|
|
|
7372
7892
|
return folder.items.length > 0;
|
|
7373
7893
|
},
|
|
7374
7894
|
get fallback() {
|
|
7375
|
-
return _tmpl$
|
|
7895
|
+
return _tmpl$45();
|
|
7376
7896
|
},
|
|
7377
7897
|
get children() {
|
|
7378
|
-
var _el$
|
|
7379
|
-
insert(_el$
|
|
7898
|
+
var _el$174 = _tmpl$42$1();
|
|
7899
|
+
insert(_el$174, createComponent(For, {
|
|
7380
7900
|
get each() {
|
|
7381
7901
|
return folder.items;
|
|
7382
7902
|
},
|
|
7383
7903
|
children: (bookmark) => (() => {
|
|
7384
|
-
var _el$
|
|
7385
|
-
_el$
|
|
7386
|
-
insert(_el$
|
|
7387
|
-
insert(_el$
|
|
7388
|
-
insert(_el$
|
|
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, {
|
|
7389
7909
|
get when() {
|
|
7390
7910
|
return bookmark.note;
|
|
7391
7911
|
},
|
|
7392
7912
|
get children() {
|
|
7393
|
-
var _el$
|
|
7394
|
-
insert(_el$
|
|
7395
|
-
return _el$
|
|
7913
|
+
var _el$181 = _tmpl$46();
|
|
7914
|
+
insert(_el$181, () => bookmark.note);
|
|
7915
|
+
return _el$181;
|
|
7396
7916
|
}
|
|
7397
|
-
}), _el$
|
|
7398
|
-
insert(_el$
|
|
7917
|
+
}), _el$205);
|
|
7918
|
+
insert(_el$177, createComponent(Show, {
|
|
7399
7919
|
get when() {
|
|
7400
7920
|
return bookmark.intent || bookmark.expectedContent || (bookmark.keyFields?.length || 0) > 0 || (bookmark.agentHints && Object.keys(bookmark.agentHints).length || 0) > 0;
|
|
7401
7921
|
},
|
|
7402
7922
|
get children() {
|
|
7403
|
-
var _el$
|
|
7404
|
-
insert(_el$
|
|
7923
|
+
var _el$182 = _tmpl$46();
|
|
7924
|
+
insert(_el$182, createComponent(Show, {
|
|
7405
7925
|
get when() {
|
|
7406
7926
|
return bookmark.intent;
|
|
7407
7927
|
},
|
|
7408
7928
|
get children() {
|
|
7409
|
-
var _el$
|
|
7410
|
-
_el$
|
|
7411
|
-
insert(_el$
|
|
7412
|
-
return _el$
|
|
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;
|
|
7413
7933
|
}
|
|
7414
7934
|
}), null);
|
|
7415
|
-
insert(_el$
|
|
7935
|
+
insert(_el$182, createComponent(Show, {
|
|
7416
7936
|
get when() {
|
|
7417
7937
|
return bookmark.expectedContent;
|
|
7418
7938
|
},
|
|
7419
7939
|
get children() {
|
|
7420
|
-
var _el$
|
|
7421
|
-
_el$
|
|
7422
|
-
insert(_el$
|
|
7423
|
-
return _el$
|
|
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;
|
|
7424
7944
|
}
|
|
7425
7945
|
}), null);
|
|
7426
|
-
insert(_el$
|
|
7946
|
+
insert(_el$182, createComponent(Show, {
|
|
7427
7947
|
get when() {
|
|
7428
7948
|
return (bookmark.keyFields?.length || 0) > 0;
|
|
7429
7949
|
},
|
|
7430
7950
|
get children() {
|
|
7431
|
-
var _el$
|
|
7432
|
-
_el$
|
|
7433
|
-
insert(_el$
|
|
7434
|
-
return _el$
|
|
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;
|
|
7435
7955
|
}
|
|
7436
7956
|
}), null);
|
|
7437
|
-
insert(_el$
|
|
7957
|
+
insert(_el$182, createComponent(Show, {
|
|
7438
7958
|
get when() {
|
|
7439
7959
|
return memo(() => !!bookmark.agentHints)() && Object.keys(bookmark.agentHints).length > 0;
|
|
7440
7960
|
},
|
|
7441
7961
|
get children() {
|
|
7442
|
-
var _el$
|
|
7443
|
-
_el$
|
|
7444
|
-
insert(_el$
|
|
7445
|
-
return _el$
|
|
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;
|
|
7446
7966
|
}
|
|
7447
7967
|
}), null);
|
|
7448
|
-
return _el$
|
|
7968
|
+
return _el$182;
|
|
7449
7969
|
}
|
|
7450
|
-
}), _el$
|
|
7451
|
-
insert(_el$
|
|
7970
|
+
}), _el$205);
|
|
7971
|
+
insert(_el$177, createComponent(Show, {
|
|
7452
7972
|
get when() {
|
|
7453
7973
|
return editingBookmarkId() === bookmark.id;
|
|
7454
7974
|
},
|
|
7455
7975
|
get children() {
|
|
7456
|
-
var _el$
|
|
7457
|
-
_el$
|
|
7458
|
-
_el$
|
|
7459
|
-
_el$
|
|
7460
|
-
_el$
|
|
7461
|
-
_el$
|
|
7462
|
-
_el$
|
|
7463
|
-
_el$
|
|
7464
|
-
_el$
|
|
7465
|
-
createRenderEffect(() => _el$
|
|
7466
|
-
createRenderEffect(() => _el$
|
|
7467
|
-
createRenderEffect(() => _el$
|
|
7468
|
-
createRenderEffect(() => _el$
|
|
7469
|
-
createRenderEffect(() => _el$
|
|
7470
|
-
createRenderEffect(() => _el$
|
|
7471
|
-
return _el$
|
|
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;
|
|
7472
7992
|
}
|
|
7473
|
-
}), _el$
|
|
7474
|
-
insert(_el$
|
|
7475
|
-
_el$
|
|
7476
|
-
insert(_el$
|
|
7477
|
-
_el$
|
|
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 = () => {
|
|
7478
7998
|
if (editingBookmarkId() === bookmark.id) {
|
|
7479
7999
|
resetBookmarkEditor();
|
|
7480
8000
|
}
|
|
7481
8001
|
void removeBookmark(bookmark.id);
|
|
7482
8002
|
};
|
|
7483
|
-
createRenderEffect(() => setAttribute(_el$
|
|
7484
|
-
return _el$
|
|
8003
|
+
createRenderEffect(() => setAttribute(_el$177, "data-bookmark-id", bookmark.id));
|
|
8004
|
+
return _el$177;
|
|
7485
8005
|
})()
|
|
7486
8006
|
}));
|
|
7487
|
-
return _el$
|
|
8007
|
+
return _el$174;
|
|
7488
8008
|
}
|
|
7489
8009
|
});
|
|
7490
8010
|
}
|
|
7491
8011
|
}), null);
|
|
7492
|
-
createRenderEffect(() => _el$
|
|
7493
|
-
return _el$
|
|
8012
|
+
createRenderEffect(() => _el$150.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
|
|
8013
|
+
return _el$147;
|
|
7494
8014
|
})()
|
|
7495
8015
|
});
|
|
7496
8016
|
}
|
|
7497
8017
|
}));
|
|
7498
8018
|
createRenderEffect((_p$) => {
|
|
7499
|
-
var _v$ = !!bookmarkSaveExpanded(), _v$
|
|
7500
|
-
_v$ !== _p$.e && _el$51.
|
|
7501
|
-
_v$2 !== _p$.t && (_el$
|
|
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);
|
|
7502
8025
|
return _p$;
|
|
7503
8026
|
}, {
|
|
7504
8027
|
e: void 0,
|
|
7505
|
-
t: void 0
|
|
8028
|
+
t: void 0,
|
|
8029
|
+
a: void 0,
|
|
8030
|
+
o: void 0,
|
|
8031
|
+
i: void 0
|
|
7506
8032
|
});
|
|
7507
8033
|
createRenderEffect(() => _el$47.value = bookmarkSearchQuery());
|
|
7508
|
-
createRenderEffect(() => _el$
|
|
7509
|
-
createRenderEffect(() => _el$
|
|
8034
|
+
createRenderEffect(() => _el$71.value = newFolderName());
|
|
8035
|
+
createRenderEffect(() => _el$72.value = newFolderSummary());
|
|
7510
8036
|
return _el$41;
|
|
7511
8037
|
}
|
|
7512
|
-
}), _el$
|
|
8038
|
+
}), _el$111);
|
|
7513
8039
|
insert(_el$25, createComponent(Show, {
|
|
7514
8040
|
get when() {
|
|
7515
8041
|
return sidebarTab() === "checkpoints";
|
|
7516
8042
|
},
|
|
7517
8043
|
get children() {
|
|
7518
|
-
var _el$
|
|
7519
|
-
_el$
|
|
7520
|
-
insert(_el$
|
|
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, (() => {
|
|
7521
8047
|
var _c$3 = memo(() => recentCheckpoints().length > 0);
|
|
7522
8048
|
return () => _c$3() ? `${recentCheckpoints().length} saved snapshots` : "Save and restore session snapshots";
|
|
7523
8049
|
})());
|
|
7524
|
-
_el$
|
|
7525
|
-
_el$
|
|
7526
|
-
_el$
|
|
8050
|
+
_el$82.$$input = (e) => setCheckpointName(e.currentTarget.value);
|
|
8051
|
+
_el$83.$$input = (e) => setCheckpointNote(e.currentTarget.value);
|
|
8052
|
+
_el$84.$$click = async () => {
|
|
7527
8053
|
const name = checkpointName().trim();
|
|
7528
8054
|
await createCheckpoint(name || void 0, checkpointNote() || void 0);
|
|
7529
8055
|
setCheckpointName("");
|
|
7530
8056
|
setCheckpointNote("");
|
|
7531
8057
|
};
|
|
7532
|
-
insert(_el$
|
|
8058
|
+
insert(_el$80, createComponent(Show, {
|
|
7533
8059
|
get when() {
|
|
7534
8060
|
return recentCheckpoints().length > 0;
|
|
7535
8061
|
},
|
|
7536
8062
|
get fallback() {
|
|
7537
|
-
return _tmpl$
|
|
8063
|
+
return _tmpl$53();
|
|
7538
8064
|
},
|
|
7539
8065
|
get children() {
|
|
7540
|
-
var _el$
|
|
7541
|
-
insert(_el$
|
|
8066
|
+
var _el$86 = _tmpl$10$2();
|
|
8067
|
+
insert(_el$86, createComponent(For, {
|
|
7542
8068
|
get each() {
|
|
7543
8069
|
return recentCheckpoints();
|
|
7544
8070
|
},
|
|
7545
8071
|
children: (checkpoint, i) => (() => {
|
|
7546
|
-
var _el$
|
|
7547
|
-
insert(_el$
|
|
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, {
|
|
7548
8074
|
get when() {
|
|
7549
8075
|
return i() < recentCheckpoints().length - 1;
|
|
7550
8076
|
},
|
|
7551
8077
|
get children() {
|
|
7552
|
-
return _tmpl$
|
|
8078
|
+
return _tmpl$54();
|
|
7553
8079
|
}
|
|
7554
8080
|
}), null);
|
|
7555
|
-
insert(_el$
|
|
7556
|
-
insert(_el$
|
|
7557
|
-
_el$
|
|
7558
|
-
_el$
|
|
7559
|
-
createRenderEffect(() => _el$
|
|
7560
|
-
createRenderEffect(() => _el$
|
|
7561
|
-
return _el$
|
|
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;
|
|
7562
8088
|
})()
|
|
7563
8089
|
}));
|
|
7564
|
-
return _el$
|
|
8090
|
+
return _el$86;
|
|
7565
8091
|
}
|
|
7566
8092
|
}), null);
|
|
7567
|
-
createRenderEffect(() => _el$
|
|
7568
|
-
createRenderEffect(() => _el$
|
|
7569
|
-
return _el$
|
|
8093
|
+
createRenderEffect(() => _el$82.value = checkpointName());
|
|
8094
|
+
createRenderEffect(() => _el$83.value = checkpointNote());
|
|
8095
|
+
return _el$75;
|
|
7570
8096
|
}
|
|
7571
|
-
}), _el$
|
|
8097
|
+
}), _el$111);
|
|
7572
8098
|
insert(_el$25, createComponent(Show, {
|
|
7573
8099
|
get when() {
|
|
7574
8100
|
return sidebarTab() === "automation";
|
|
@@ -7578,67 +8104,67 @@ ${contextBlock}` : contextBlock);
|
|
|
7578
8104
|
onRun: () => setSidebarTab("supervisor")
|
|
7579
8105
|
});
|
|
7580
8106
|
}
|
|
7581
|
-
}), _el$
|
|
8107
|
+
}), _el$111);
|
|
7582
8108
|
insert(_el$25, createComponent(Show, {
|
|
7583
8109
|
get when() {
|
|
7584
8110
|
return sidebarTab() === "history";
|
|
7585
8111
|
},
|
|
7586
8112
|
get children() {
|
|
7587
|
-
var _el$
|
|
7588
|
-
_el$
|
|
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 () => {
|
|
7589
8115
|
await history.clear();
|
|
7590
8116
|
};
|
|
7591
|
-
insert(_el$
|
|
8117
|
+
insert(_el$91, createComponent(For, {
|
|
7592
8118
|
get each() {
|
|
7593
8119
|
return history.historyState().entries;
|
|
7594
8120
|
},
|
|
7595
8121
|
children: (entry) => (() => {
|
|
7596
|
-
var _el$
|
|
7597
|
-
_el$
|
|
7598
|
-
insert(_el$
|
|
7599
|
-
insert(_el$
|
|
7600
|
-
insert(_el$
|
|
7601
|
-
return _el$
|
|
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;
|
|
7602
8128
|
})()
|
|
7603
8129
|
}), null);
|
|
7604
|
-
insert(_el$
|
|
8130
|
+
insert(_el$91, createComponent(Show, {
|
|
7605
8131
|
get when() {
|
|
7606
8132
|
return history.historyState().entries.length === 0;
|
|
7607
8133
|
},
|
|
7608
8134
|
get children() {
|
|
7609
|
-
return _tmpl$
|
|
8135
|
+
return _tmpl$12$2();
|
|
7610
8136
|
}
|
|
7611
8137
|
}), null);
|
|
7612
|
-
return _el$
|
|
8138
|
+
return _el$87;
|
|
7613
8139
|
}
|
|
7614
|
-
}), _el$
|
|
8140
|
+
}), _el$111);
|
|
7615
8141
|
insert(_el$25, createComponent(Show, {
|
|
7616
8142
|
get when() {
|
|
7617
8143
|
return sidebarTab() === "diff";
|
|
7618
8144
|
},
|
|
7619
8145
|
get children() {
|
|
7620
|
-
var _el$
|
|
7621
|
-
insert(_el$
|
|
7622
|
-
insert(_el$
|
|
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, {
|
|
7623
8149
|
get when() {
|
|
7624
8150
|
return isPremium();
|
|
7625
8151
|
},
|
|
7626
8152
|
get fallback() {
|
|
7627
8153
|
return (() => {
|
|
7628
|
-
var _el$
|
|
7629
|
-
_el$
|
|
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(() => {
|
|
7630
8156
|
});
|
|
7631
|
-
_el$
|
|
7632
|
-
return _el$
|
|
8157
|
+
_el$228.$$click = openPremiumDetails;
|
|
8158
|
+
return _el$223;
|
|
7633
8159
|
})();
|
|
7634
8160
|
},
|
|
7635
8161
|
get children() {
|
|
7636
8162
|
return createComponent(PageDiffTimeline, {});
|
|
7637
8163
|
}
|
|
7638
8164
|
}), null);
|
|
7639
|
-
return _el$
|
|
8165
|
+
return _el$93;
|
|
7640
8166
|
}
|
|
7641
|
-
}), _el$
|
|
8167
|
+
}), _el$111);
|
|
7642
8168
|
insert(_el$25, createComponent(Show, {
|
|
7643
8169
|
get when() {
|
|
7644
8170
|
return sidebarTab() === "chat";
|
|
@@ -7649,23 +8175,23 @@ ${contextBlock}` : contextBlock);
|
|
|
7649
8175
|
return !isPremium();
|
|
7650
8176
|
},
|
|
7651
8177
|
get children() {
|
|
7652
|
-
var _el$
|
|
7653
|
-
_el$
|
|
7654
|
-
_el$
|
|
7655
|
-
return _el$
|
|
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;
|
|
7656
8182
|
}
|
|
7657
8183
|
}), createComponent(For, {
|
|
7658
8184
|
get each() {
|
|
7659
8185
|
return messages2();
|
|
7660
8186
|
},
|
|
7661
8187
|
children: (msg) => (() => {
|
|
7662
|
-
var _el$
|
|
7663
|
-
insert(_el$
|
|
8188
|
+
var _el$229 = _tmpl$58();
|
|
8189
|
+
insert(_el$229, createComponent(MarkdownMessage, {
|
|
7664
8190
|
get content() {
|
|
7665
8191
|
return msg.content;
|
|
7666
8192
|
}
|
|
7667
8193
|
}), null);
|
|
7668
|
-
insert(_el$
|
|
8194
|
+
insert(_el$229, createComponent(Show, {
|
|
7669
8195
|
get when() {
|
|
7670
8196
|
return memo(() => msg.role === "assistant")() ? getPremiumPromptKind(msg.content) : null;
|
|
7671
8197
|
},
|
|
@@ -7678,31 +8204,31 @@ ${contextBlock}` : contextBlock);
|
|
|
7678
8204
|
onOpenSettings: openPremiumDetails
|
|
7679
8205
|
})
|
|
7680
8206
|
}), null);
|
|
7681
|
-
createRenderEffect(() => className(_el$
|
|
7682
|
-
return _el$
|
|
8207
|
+
createRenderEffect(() => className(_el$229, `message message-${msg.role}`));
|
|
8208
|
+
return _el$229;
|
|
7683
8209
|
})()
|
|
7684
8210
|
}), createComponent(Show, {
|
|
7685
8211
|
get when() {
|
|
7686
8212
|
return isStreaming2();
|
|
7687
8213
|
},
|
|
7688
8214
|
get children() {
|
|
7689
|
-
var _el$
|
|
7690
|
-
insert(_el$
|
|
8215
|
+
var _el$103 = _tmpl$18$1(), _el$104 = _el$103.firstChild;
|
|
8216
|
+
insert(_el$104, createComponent(Show, {
|
|
7691
8217
|
get when() {
|
|
7692
8218
|
return hasFirstChunk2();
|
|
7693
8219
|
},
|
|
7694
8220
|
get fallback() {
|
|
7695
|
-
return _tmpl$
|
|
8221
|
+
return _tmpl$59();
|
|
7696
8222
|
},
|
|
7697
8223
|
get children() {
|
|
7698
|
-
var _el$
|
|
7699
|
-
_el$
|
|
7700
|
-
insert(_el$
|
|
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, {
|
|
7701
8227
|
get content() {
|
|
7702
8228
|
return streamingText2();
|
|
7703
8229
|
}
|
|
7704
|
-
}), _el$
|
|
7705
|
-
insert(_el$
|
|
8230
|
+
}), _el$106);
|
|
8231
|
+
insert(_el$105, createComponent(Show, {
|
|
7706
8232
|
get when() {
|
|
7707
8233
|
return getPremiumPromptKind(streamingText2());
|
|
7708
8234
|
},
|
|
@@ -7714,21 +8240,21 @@ ${contextBlock}` : contextBlock);
|
|
|
7714
8240
|
onStartTrial: () => openPremiumCheckout(kind() === "premium_gate" ? "premium_gate_clicked" : "iteration_limit_clicked"),
|
|
7715
8241
|
onOpenSettings: openPremiumDetails
|
|
7716
8242
|
})
|
|
7717
|
-
}), _el$
|
|
7718
|
-
insert(_el$
|
|
8243
|
+
}), _el$106);
|
|
8244
|
+
insert(_el$106, createComponent(Show, {
|
|
7719
8245
|
get when() {
|
|
7720
8246
|
return elapsedSeconds() > 0;
|
|
7721
8247
|
},
|
|
7722
8248
|
get children() {
|
|
7723
|
-
var _el$
|
|
7724
|
-
insert(_el$
|
|
7725
|
-
return _el$
|
|
8249
|
+
var _el$109 = _tmpl$16$1();
|
|
8250
|
+
insert(_el$109, () => ` • ${elapsedSeconds()}s`);
|
|
8251
|
+
return _el$109;
|
|
7726
8252
|
}
|
|
7727
8253
|
}), null);
|
|
7728
|
-
return _el$
|
|
8254
|
+
return _el$105;
|
|
7729
8255
|
}
|
|
7730
8256
|
}));
|
|
7731
|
-
return _el$
|
|
8257
|
+
return _el$103;
|
|
7732
8258
|
}
|
|
7733
8259
|
}), createComponent(Show, {
|
|
7734
8260
|
get when() {
|
|
@@ -7740,22 +8266,22 @@ ${contextBlock}` : contextBlock);
|
|
|
7740
8266
|
return runtimeState2().supervisor.pendingApprovals;
|
|
7741
8267
|
},
|
|
7742
8268
|
children: (approval) => (() => {
|
|
7743
|
-
var _el$
|
|
7744
|
-
insert(_el$
|
|
7745
|
-
insert(_el$
|
|
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, {
|
|
7746
8272
|
get when() {
|
|
7747
8273
|
return approval.argsSummary;
|
|
7748
8274
|
},
|
|
7749
8275
|
get children() {
|
|
7750
|
-
var _el$
|
|
7751
|
-
insert(_el$
|
|
7752
|
-
return _el$
|
|
8276
|
+
var _el$237 = _tmpl$60();
|
|
8277
|
+
insert(_el$237, () => approval.argsSummary);
|
|
8278
|
+
return _el$237;
|
|
7753
8279
|
}
|
|
7754
|
-
}), _el$
|
|
7755
|
-
insert(_el$
|
|
7756
|
-
_el$
|
|
7757
|
-
_el$
|
|
7758
|
-
return _el$
|
|
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;
|
|
7759
8285
|
})()
|
|
7760
8286
|
});
|
|
7761
8287
|
}
|
|
@@ -7764,13 +8290,13 @@ ${contextBlock}` : contextBlock);
|
|
|
7764
8290
|
return memo(() => messages2().length === 0)() && !isStreaming2();
|
|
7765
8291
|
},
|
|
7766
8292
|
get children() {
|
|
7767
|
-
return _tmpl$
|
|
8293
|
+
return _tmpl$19$1();
|
|
7768
8294
|
}
|
|
7769
8295
|
})];
|
|
7770
8296
|
}
|
|
7771
|
-
}), _el$
|
|
8297
|
+
}), _el$111);
|
|
7772
8298
|
var _ref$ = messagesEndRef;
|
|
7773
|
-
typeof _ref$ === "function" ? use(_ref$, _el$
|
|
8299
|
+
typeof _ref$ === "function" ? use(_ref$, _el$111) : messagesEndRef = _el$111;
|
|
7774
8300
|
insert(_el$9, createComponent(Show, {
|
|
7775
8301
|
get when() {
|
|
7776
8302
|
return sidebarTab() === "chat";
|
|
@@ -7781,141 +8307,141 @@ ${contextBlock}` : contextBlock);
|
|
|
7781
8307
|
return isStreaming2() || messages2().length > 0;
|
|
7782
8308
|
},
|
|
7783
8309
|
get children() {
|
|
7784
|
-
var _el$
|
|
7785
|
-
insert(_el$
|
|
8310
|
+
var _el$112 = _tmpl$22$1();
|
|
8311
|
+
insert(_el$112, createComponent(Show, {
|
|
7786
8312
|
get when() {
|
|
7787
8313
|
return isStreaming2();
|
|
7788
8314
|
},
|
|
7789
8315
|
get children() {
|
|
7790
|
-
var _el$
|
|
7791
|
-
_el$
|
|
7792
|
-
return _el$
|
|
8316
|
+
var _el$113 = _tmpl$20$1();
|
|
8317
|
+
_el$113.$$click = () => cancel();
|
|
8318
|
+
return _el$113;
|
|
7793
8319
|
}
|
|
7794
8320
|
}), null);
|
|
7795
|
-
insert(_el$
|
|
8321
|
+
insert(_el$112, createComponent(Show, {
|
|
7796
8322
|
get when() {
|
|
7797
8323
|
return memo(() => !!!isStreaming2())() && messages2().length > 0;
|
|
7798
8324
|
},
|
|
7799
8325
|
get children() {
|
|
7800
|
-
var _el$
|
|
7801
|
-
_el$
|
|
7802
|
-
return _el$
|
|
8326
|
+
var _el$114 = _tmpl$21$1();
|
|
8327
|
+
_el$114.$$click = handleRetry;
|
|
8328
|
+
return _el$114;
|
|
7803
8329
|
}
|
|
7804
8330
|
}), null);
|
|
7805
|
-
return _el$
|
|
8331
|
+
return _el$112;
|
|
7806
8332
|
}
|
|
7807
8333
|
}), createComponent(Show, {
|
|
7808
8334
|
get when() {
|
|
7809
8335
|
return highlightCount() > 0;
|
|
7810
8336
|
},
|
|
7811
8337
|
get children() {
|
|
7812
|
-
var _el$
|
|
7813
|
-
_el$
|
|
7814
|
-
var _el$
|
|
7815
|
-
_el$
|
|
7816
|
-
_el$
|
|
7817
|
-
insert(_el$
|
|
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, (() => {
|
|
7818
8344
|
var _c$4 = memo(() => highlightIndex() >= 0);
|
|
7819
8345
|
return () => _c$4() ? `${highlightIndex() + 1} / ${highlightCount()}` : `${highlightCount()} highlight${highlightCount() > 1 ? "s" : ""}`;
|
|
7820
8346
|
})(), null);
|
|
7821
|
-
_el$
|
|
8347
|
+
_el$119.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
|
|
7822
8348
|
createRenderEffect((_p$) => {
|
|
7823
|
-
var _v$
|
|
7824
|
-
_v$
|
|
7825
|
-
_v$
|
|
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);
|
|
7826
8352
|
return _p$;
|
|
7827
8353
|
}, {
|
|
7828
8354
|
e: void 0,
|
|
7829
8355
|
t: void 0
|
|
7830
8356
|
});
|
|
7831
|
-
return _el$
|
|
8357
|
+
return _el$115;
|
|
7832
8358
|
}
|
|
7833
8359
|
}), createComponent(Show, {
|
|
7834
8360
|
get when() {
|
|
7835
8361
|
return queueNotice2() !== null || pendingQueryCount() > 0;
|
|
7836
8362
|
},
|
|
7837
8363
|
get children() {
|
|
7838
|
-
var _el$
|
|
7839
|
-
insert(_el$
|
|
7840
|
-
insert(_el$
|
|
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, {
|
|
7841
8367
|
get when() {
|
|
7842
8368
|
return pendingQueryCount() > 0;
|
|
7843
8369
|
},
|
|
7844
8370
|
get children() {
|
|
7845
|
-
var _el$
|
|
7846
|
-
_el$
|
|
7847
|
-
return _el$
|
|
8371
|
+
var _el$123 = _tmpl$24$1();
|
|
8372
|
+
_el$123.$$click = () => clearPendingQueries();
|
|
8373
|
+
return _el$123;
|
|
7848
8374
|
}
|
|
7849
8375
|
}), null);
|
|
7850
|
-
insert(_el$
|
|
8376
|
+
insert(_el$120, createComponent(Show, {
|
|
7851
8377
|
get when() {
|
|
7852
8378
|
return pendingQueries2().length > 0;
|
|
7853
8379
|
},
|
|
7854
8380
|
get children() {
|
|
7855
|
-
var _el$
|
|
7856
|
-
insert(_el$
|
|
8381
|
+
var _el$124 = _tmpl$25$1();
|
|
8382
|
+
insert(_el$124, createComponent(For, {
|
|
7857
8383
|
get each() {
|
|
7858
8384
|
return pendingQueries2();
|
|
7859
8385
|
},
|
|
7860
8386
|
children: (pendingPrompt, index) => (() => {
|
|
7861
|
-
var _el$
|
|
7862
|
-
setAttribute(_el$
|
|
7863
|
-
insert(_el$
|
|
7864
|
-
_el$
|
|
7865
|
-
createRenderEffect(() => setAttribute(_el$
|
|
7866
|
-
return _el$
|
|
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;
|
|
7867
8393
|
})()
|
|
7868
8394
|
}));
|
|
7869
|
-
return _el$
|
|
8395
|
+
return _el$124;
|
|
7870
8396
|
}
|
|
7871
8397
|
}), null);
|
|
7872
|
-
return _el$
|
|
8398
|
+
return _el$120;
|
|
7873
8399
|
}
|
|
7874
8400
|
}), (() => {
|
|
7875
|
-
var _el$
|
|
7876
|
-
_el$
|
|
8401
|
+
var _el$125 = _tmpl$27$1(), _el$126 = _el$125.firstChild, _el$127 = _el$126.nextSibling;
|
|
8402
|
+
_el$126.$$keydown = (e) => {
|
|
7877
8403
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
7878
8404
|
e.preventDefault();
|
|
7879
8405
|
void handleChatSend();
|
|
7880
8406
|
}
|
|
7881
8407
|
};
|
|
7882
|
-
_el$
|
|
8408
|
+
_el$126.$$input = (e) => setChatInput(e.currentTarget.value);
|
|
7883
8409
|
var _ref$2 = chatInputRef;
|
|
7884
|
-
typeof _ref$2 === "function" ? use(_ref$2, _el$
|
|
7885
|
-
_el$
|
|
7886
|
-
insert(_el$
|
|
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");
|
|
7887
8413
|
createRenderEffect((_p$) => {
|
|
7888
|
-
var _v$
|
|
7889
|
-
_v$
|
|
7890
|
-
_v$
|
|
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);
|
|
7891
8417
|
return _p$;
|
|
7892
8418
|
}, {
|
|
7893
8419
|
e: void 0,
|
|
7894
8420
|
t: void 0
|
|
7895
8421
|
});
|
|
7896
|
-
createRenderEffect(() => _el$
|
|
7897
|
-
return _el$
|
|
8422
|
+
createRenderEffect(() => _el$126.value = chatInput());
|
|
8423
|
+
return _el$125;
|
|
7898
8424
|
})()];
|
|
7899
8425
|
}
|
|
7900
8426
|
}), null);
|
|
7901
8427
|
createRenderEffect((_p$) => {
|
|
7902
|
-
var _v$
|
|
7903
|
-
_v$
|
|
7904
|
-
_v$
|
|
7905
|
-
_v$
|
|
7906
|
-
_v$
|
|
7907
|
-
_v$
|
|
7908
|
-
_v$
|
|
7909
|
-
_v$
|
|
7910
|
-
_v$
|
|
7911
|
-
_v$
|
|
7912
|
-
_v$
|
|
7913
|
-
_v$
|
|
7914
|
-
_v$
|
|
7915
|
-
_v$
|
|
7916
|
-
_v$
|
|
7917
|
-
_v$
|
|
7918
|
-
_v$
|
|
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);
|
|
7919
8445
|
return _p$;
|
|
7920
8446
|
}, {
|
|
7921
8447
|
e: void 0,
|
|
@@ -7940,7 +8466,7 @@ ${contextBlock}` : contextBlock);
|
|
|
7940
8466
|
});
|
|
7941
8467
|
};
|
|
7942
8468
|
delegateEvents(["click", "pointerdown", "input", "keydown"]);
|
|
7943
|
-
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$
|
|
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>`);
|
|
7944
8470
|
function statusClass(status) {
|
|
7945
8471
|
if (status == null) return "pending";
|
|
7946
8472
|
if (status >= 200 && status < 300) return "ok";
|
|
@@ -8109,7 +8635,7 @@ const ActivityView = (props) => {
|
|
|
8109
8635
|
return _tmpl$8$1();
|
|
8110
8636
|
},
|
|
8111
8637
|
get children() {
|
|
8112
|
-
var _el$15 = _tmpl$7$
|
|
8638
|
+
var _el$15 = _tmpl$7$2();
|
|
8113
8639
|
insert(_el$15, createComponent(For, {
|
|
8114
8640
|
get each() {
|
|
8115
8641
|
return [...props.entries].reverse();
|
|
@@ -8361,14 +8887,6 @@ const DevToolsPanel = () => {
|
|
|
8361
8887
|
})();
|
|
8362
8888
|
};
|
|
8363
8889
|
delegateEvents(["click", "input"]);
|
|
8364
|
-
const SEARCH_ENGINE_PRESETS = {
|
|
8365
|
-
duckduckgo: { label: "DuckDuckGo", url: "https://duckduckgo.com/?q=" },
|
|
8366
|
-
google: { label: "Google", url: "https://www.google.com/search?q=" },
|
|
8367
|
-
bing: { label: "Bing", url: "https://www.bing.com/search?q=" },
|
|
8368
|
-
brave: { label: "Brave Search", url: "https://search.brave.com/search?q=" },
|
|
8369
|
-
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
8370
|
-
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
8371
|
-
};
|
|
8372
8890
|
const PROVIDERS = {
|
|
8373
8891
|
anthropic: {
|
|
8374
8892
|
id: "anthropic",
|
|
@@ -8469,7 +8987,7 @@ const PROVIDERS = {
|
|
|
8469
8987
|
apiKeyHint: "Optional — only if your endpoint requires authentication"
|
|
8470
8988
|
}
|
|
8471
8989
|
};
|
|
8472
|
-
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>×</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:<port>/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>×</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:<port>/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>
|
|
8473
8991
|
.settings-panel {
|
|
8474
8992
|
width: min(440px, calc(100vw - 32px));
|
|
8475
8993
|
max-height: calc(100vh - 48px);
|
|
@@ -9732,7 +10250,7 @@ const Settings = () => {
|
|
|
9732
10250
|
return !chatProviderMeta().requiresKey;
|
|
9733
10251
|
},
|
|
9734
10252
|
get children() {
|
|
9735
|
-
return _tmpl$7();
|
|
10253
|
+
return _tmpl$7$1();
|
|
9736
10254
|
}
|
|
9737
10255
|
}), null);
|
|
9738
10256
|
_el$66.$$input = (e) => {
|
|
@@ -10435,40 +10953,77 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
|
|
|
10435
10953
|
font-size: 13px;
|
|
10436
10954
|
color: var(--text-secondary);
|
|
10437
10955
|
}
|
|
10438
|
-
`), _tmpl$3 = /* @__PURE__ */ template(`<div class=keyboard-help-keys>`), _tmpl$4 = /* @__PURE__ */ template(`<div class=keyboard-help-action>`), _tmpl$5 = /* @__PURE__ */ template(`<kbd>`), _tmpl$
|
|
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>+`);
|
|
10439
10957
|
const SHORTCUTS = [{
|
|
10440
10958
|
keys: "Ctrl+L",
|
|
10441
|
-
action: "AI Command Bar"
|
|
10959
|
+
action: "AI Command Bar",
|
|
10960
|
+
privateMode: false
|
|
10442
10961
|
}, {
|
|
10443
10962
|
keys: "Ctrl+Shift+L",
|
|
10444
|
-
action: "Toggle AI Sidebar"
|
|
10963
|
+
action: "Toggle AI Sidebar",
|
|
10964
|
+
privateMode: false
|
|
10445
10965
|
}, {
|
|
10446
10966
|
keys: "Ctrl+Shift+F",
|
|
10447
|
-
action: "Toggle Focus Mode"
|
|
10967
|
+
action: "Toggle Focus Mode",
|
|
10968
|
+
privateMode: false
|
|
10448
10969
|
}, {
|
|
10449
10970
|
keys: "F12",
|
|
10450
|
-
action: "Toggle Dev Tools Panel"
|
|
10971
|
+
action: "Toggle Dev Tools Panel",
|
|
10972
|
+
privateMode: false
|
|
10973
|
+
}, {
|
|
10974
|
+
keys: "Ctrl+N",
|
|
10975
|
+
action: "New Window"
|
|
10451
10976
|
}, {
|
|
10452
10977
|
keys: "Ctrl+T",
|
|
10453
10978
|
action: "New Tab"
|
|
10454
10979
|
}, {
|
|
10455
10980
|
keys: "Ctrl+W",
|
|
10456
10981
|
action: "Close Tab"
|
|
10982
|
+
}, {
|
|
10983
|
+
keys: "Ctrl+Shift+T",
|
|
10984
|
+
action: "Reopen Closed Tab"
|
|
10985
|
+
}, {
|
|
10986
|
+
keys: "Ctrl+F",
|
|
10987
|
+
action: "Find in Page"
|
|
10988
|
+
}, {
|
|
10989
|
+
keys: "Ctrl++ / Ctrl+=",
|
|
10990
|
+
action: "Zoom In"
|
|
10991
|
+
}, {
|
|
10992
|
+
keys: "Ctrl+-",
|
|
10993
|
+
action: "Zoom Out"
|
|
10994
|
+
}, {
|
|
10995
|
+
keys: "Ctrl+0",
|
|
10996
|
+
action: "Reset Zoom"
|
|
10997
|
+
}, {
|
|
10998
|
+
keys: "Ctrl+Shift+N",
|
|
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"
|
|
10457
11006
|
}, {
|
|
10458
11007
|
keys: "Ctrl+,",
|
|
10459
|
-
action: "Settings"
|
|
11008
|
+
action: "Settings",
|
|
11009
|
+
privateMode: false
|
|
10460
11010
|
}, {
|
|
10461
11011
|
keys: "Ctrl+H",
|
|
10462
|
-
action: "Capture Highlight"
|
|
11012
|
+
action: "Capture Highlight",
|
|
11013
|
+
privateMode: false
|
|
10463
11014
|
}, {
|
|
10464
11015
|
keys: "?",
|
|
10465
11016
|
action: "This help overlay"
|
|
10466
11017
|
}];
|
|
11018
|
+
function shortcutParts(keys) {
|
|
11019
|
+
return keys.split(" / ").map((combo) => combo.replace(/\+\+/g, "+Plus").split("+").filter(Boolean).map((key) => key === "Plus" ? "+" : key));
|
|
11020
|
+
}
|
|
10467
11021
|
const KeyboardHelp = (props) => {
|
|
10468
11022
|
const {
|
|
10469
11023
|
visible,
|
|
10470
11024
|
closing
|
|
10471
11025
|
} = useAnimatedPresence(() => props.open, 200);
|
|
11026
|
+
const shortcuts = () => props.privateMode ? SHORTCUTS.filter((shortcut) => shortcut.privateMode !== false) : SHORTCUTS;
|
|
10472
11027
|
return createComponent(Show, {
|
|
10473
11028
|
get when() {
|
|
10474
11029
|
return visible();
|
|
@@ -10479,13 +11034,13 @@ const KeyboardHelp = (props) => {
|
|
|
10479
11034
|
addEventListener(_el$, "click", props.onClose, true);
|
|
10480
11035
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
10481
11036
|
addEventListener(_el$5, "click", props.onClose, true);
|
|
10482
|
-
insert(_el$6, () =>
|
|
11037
|
+
insert(_el$6, () => shortcuts().map((s) => [(() => {
|
|
10483
11038
|
var _el$8 = _tmpl$3();
|
|
10484
|
-
insert(_el$8, () => s.keys.
|
|
10485
|
-
var _el$
|
|
10486
|
-
insert(_el$
|
|
10487
|
-
return _el$
|
|
10488
|
-
})()]));
|
|
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
|
+
})()]))]));
|
|
10489
11044
|
return _el$8;
|
|
10490
11045
|
})(), (() => {
|
|
10491
11046
|
var _el$9 = _tmpl$4();
|
|
@@ -10502,39 +11057,65 @@ delegateEvents(["click"]);
|
|
|
10502
11057
|
function setupKeybindings(handlers) {
|
|
10503
11058
|
const listener = (e) => {
|
|
10504
11059
|
const ctrl = e.ctrlKey || e.metaKey;
|
|
10505
|
-
|
|
11060
|
+
const key = e.key.toLowerCase();
|
|
11061
|
+
if (ctrl && key === "l" && !e.shiftKey) {
|
|
11062
|
+
e.preventDefault();
|
|
11063
|
+
handlers.openCommandBar?.();
|
|
11064
|
+
return;
|
|
11065
|
+
}
|
|
11066
|
+
if (ctrl && key === "l" && e.shiftKey) {
|
|
11067
|
+
e.preventDefault();
|
|
11068
|
+
handlers.toggleSidebar?.();
|
|
11069
|
+
return;
|
|
11070
|
+
}
|
|
11071
|
+
if (ctrl && key === "f" && e.shiftKey) {
|
|
10506
11072
|
e.preventDefault();
|
|
10507
|
-
handlers.
|
|
11073
|
+
handlers.toggleFocusMode?.();
|
|
10508
11074
|
return;
|
|
10509
11075
|
}
|
|
10510
|
-
if (ctrl &&
|
|
11076
|
+
if (ctrl && key === "t" && e.shiftKey) {
|
|
10511
11077
|
e.preventDefault();
|
|
10512
|
-
handlers.
|
|
11078
|
+
handlers.reopenClosedTab?.();
|
|
10513
11079
|
return;
|
|
10514
11080
|
}
|
|
10515
|
-
if (ctrl &&
|
|
11081
|
+
if (ctrl && key === "n" && e.shiftKey) {
|
|
10516
11082
|
e.preventDefault();
|
|
10517
|
-
handlers.
|
|
11083
|
+
handlers.openPrivateWindow?.();
|
|
10518
11084
|
return;
|
|
10519
11085
|
}
|
|
10520
|
-
if (ctrl &&
|
|
11086
|
+
if (ctrl && key === "n" && !e.shiftKey) {
|
|
11087
|
+
e.preventDefault();
|
|
11088
|
+
handlers.openNewWindow?.();
|
|
11089
|
+
return;
|
|
11090
|
+
}
|
|
11091
|
+
if (ctrl && key === "t" && !e.shiftKey) {
|
|
10521
11092
|
e.preventDefault();
|
|
10522
11093
|
handlers.newTab();
|
|
10523
11094
|
return;
|
|
10524
11095
|
}
|
|
10525
|
-
if (ctrl &&
|
|
11096
|
+
if (ctrl && key === "w") {
|
|
10526
11097
|
e.preventDefault();
|
|
10527
11098
|
handlers.closeTab();
|
|
10528
11099
|
return;
|
|
10529
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
|
+
}
|
|
10530
11111
|
if (ctrl && e.key === ",") {
|
|
10531
11112
|
e.preventDefault();
|
|
10532
|
-
handlers.openSettings();
|
|
11113
|
+
handlers.openSettings?.();
|
|
10533
11114
|
return;
|
|
10534
11115
|
}
|
|
10535
|
-
if (ctrl &&
|
|
11116
|
+
if (ctrl && key === "h" && !e.shiftKey) {
|
|
10536
11117
|
e.preventDefault();
|
|
10537
|
-
handlers.captureHighlight();
|
|
11118
|
+
handlers.captureHighlight?.();
|
|
10538
11119
|
return;
|
|
10539
11120
|
}
|
|
10540
11121
|
if (e.key === "F12") {
|
|
@@ -10542,6 +11123,21 @@ function setupKeybindings(handlers) {
|
|
|
10542
11123
|
handlers.toggleDevTools?.();
|
|
10543
11124
|
return;
|
|
10544
11125
|
}
|
|
11126
|
+
if (ctrl && (e.key === "+" || e.key === "=")) {
|
|
11127
|
+
e.preventDefault();
|
|
11128
|
+
handlers.zoomIn?.();
|
|
11129
|
+
return;
|
|
11130
|
+
}
|
|
11131
|
+
if (ctrl && e.key === "-") {
|
|
11132
|
+
e.preventDefault();
|
|
11133
|
+
handlers.zoomOut?.();
|
|
11134
|
+
return;
|
|
11135
|
+
}
|
|
11136
|
+
if (ctrl && e.key === "0") {
|
|
11137
|
+
e.preventDefault();
|
|
11138
|
+
handlers.zoomReset?.();
|
|
11139
|
+
return;
|
|
11140
|
+
}
|
|
10545
11141
|
if (e.key === "?" && !ctrl && !e.altKey) {
|
|
10546
11142
|
const tag = e.target?.tagName;
|
|
10547
11143
|
if (tag !== "INPUT" && tag !== "TEXTAREA" && !e.target?.isContentEditable) {
|
|
@@ -10564,6 +11160,9 @@ try {
|
|
|
10564
11160
|
}
|
|
10565
11161
|
const App = () => {
|
|
10566
11162
|
const view = new URLSearchParams(window.location.search).get("view") || "chrome";
|
|
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;
|
|
10567
11166
|
const {
|
|
10568
11167
|
openCommandBar,
|
|
10569
11168
|
toggleSidebar,
|
|
@@ -10575,7 +11174,11 @@ const App = () => {
|
|
|
10575
11174
|
createTab,
|
|
10576
11175
|
closeTab,
|
|
10577
11176
|
activeTabId: activeTabId2,
|
|
10578
|
-
activeTab
|
|
11177
|
+
activeTab,
|
|
11178
|
+
zoomIn,
|
|
11179
|
+
zoomOut,
|
|
11180
|
+
zoomReset,
|
|
11181
|
+
reopenClosed
|
|
10579
11182
|
} = useTabs();
|
|
10580
11183
|
const [highlightToast, setHighlightToast] = createSignal(null);
|
|
10581
11184
|
const [keyboardHelpOpen, setKeyboardHelpOpen] = createSignal(false);
|
|
@@ -10627,17 +11230,40 @@ const App = () => {
|
|
|
10627
11230
|
});
|
|
10628
11231
|
if (view !== "chrome") return;
|
|
10629
11232
|
const cleanupKeys = setupKeybindings({
|
|
10630
|
-
openCommandBar,
|
|
10631
|
-
toggleSidebar,
|
|
10632
|
-
toggleFocusMode,
|
|
11233
|
+
openCommandBar: isChromeOnlyWindow ? void 0 : openCommandBar,
|
|
11234
|
+
toggleSidebar: isChromeOnlyWindow ? void 0 : toggleSidebar,
|
|
11235
|
+
toggleFocusMode: isChromeOnlyWindow ? void 0 : toggleFocusMode,
|
|
10633
11236
|
newTab: () => createTab(),
|
|
10634
11237
|
closeTab: () => {
|
|
10635
11238
|
const id = activeTabId2();
|
|
10636
11239
|
if (id) closeTab(id);
|
|
10637
11240
|
},
|
|
10638
|
-
openSettings,
|
|
10639
|
-
captureHighlight,
|
|
10640
|
-
|
|
11241
|
+
openSettings: isChromeOnlyWindow ? void 0 : openSettings,
|
|
11242
|
+
captureHighlight: isChromeOnlyWindow ? void 0 : captureHighlight,
|
|
11243
|
+
zoomIn: () => {
|
|
11244
|
+
const id = activeTabId2();
|
|
11245
|
+
if (id) zoomIn(id);
|
|
11246
|
+
},
|
|
11247
|
+
zoomOut: () => {
|
|
11248
|
+
const id = activeTabId2();
|
|
11249
|
+
if (id) zoomOut(id);
|
|
11250
|
+
},
|
|
11251
|
+
zoomReset: () => {
|
|
11252
|
+
const id = activeTabId2();
|
|
11253
|
+
if (id) zoomReset(id);
|
|
11254
|
+
},
|
|
11255
|
+
reopenClosedTab: () => reopenClosed(),
|
|
11256
|
+
openNewWindow: () => window.vessel.tabs.openNewWindow(),
|
|
11257
|
+
openPrivateWindow: () => window.vessel.tabs.openPrivateWindow(),
|
|
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 : () => {
|
|
10641
11267
|
window.vessel.devtoolsPanel.toggle();
|
|
10642
11268
|
},
|
|
10643
11269
|
toggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v)
|
|
@@ -10658,17 +11284,25 @@ const App = () => {
|
|
|
10658
11284
|
}
|
|
10659
11285
|
return (() => {
|
|
10660
11286
|
var _el$ = _tmpl$2(), _el$2 = _el$.firstChild;
|
|
10661
|
-
insert(_el$, createComponent(
|
|
10662
|
-
|
|
10663
|
-
get
|
|
10664
|
-
return
|
|
10665
|
-
|
|
10666
|
-
|
|
11287
|
+
insert(_el$, createComponent(Show, {
|
|
11288
|
+
when: !isPrivateWindow,
|
|
11289
|
+
get children() {
|
|
11290
|
+
return [createComponent(BookmarkNotifications, {}), createComponent(HighlightNotifications, {
|
|
11291
|
+
get toast() {
|
|
11292
|
+
return highlightToast();
|
|
11293
|
+
},
|
|
11294
|
+
onDismiss: () => setHighlightToast(null)
|
|
11295
|
+
})];
|
|
11296
|
+
}
|
|
10667
11297
|
}), _el$2);
|
|
10668
11298
|
insert(_el$, createComponent(DownloadToast, {}), _el$2);
|
|
10669
11299
|
insert(_el$, createComponent(FindBar, {}), _el$2);
|
|
10670
|
-
insert(_el$, createComponent(
|
|
10671
|
-
|
|
11300
|
+
insert(_el$, createComponent(Show, {
|
|
11301
|
+
when: !isChromeOnlyWindow,
|
|
11302
|
+
get children() {
|
|
11303
|
+
return [createComponent(FlowProgress, {}), createComponent(AgentTranscriptDock, {})];
|
|
11304
|
+
}
|
|
11305
|
+
}), _el$2);
|
|
10672
11306
|
insert(_el$2, createComponent(TitleBar, {}), null);
|
|
10673
11307
|
insert(_el$2, createComponent(TabBar, {}), null);
|
|
10674
11308
|
insert(_el$2, createComponent(AddressBar, {}), null);
|
|
@@ -10682,13 +11316,18 @@ const App = () => {
|
|
|
10682
11316
|
return _el$3;
|
|
10683
11317
|
}
|
|
10684
11318
|
}), null);
|
|
10685
|
-
insert(_el$, createComponent(
|
|
10686
|
-
|
|
11319
|
+
insert(_el$, createComponent(Show, {
|
|
11320
|
+
when: !isChromeOnlyWindow,
|
|
11321
|
+
get children() {
|
|
11322
|
+
return [createComponent(CommandBar, {}), createComponent(Settings, {})];
|
|
11323
|
+
}
|
|
11324
|
+
}), null);
|
|
10687
11325
|
insert(_el$, createComponent(KeyboardHelp, {
|
|
10688
11326
|
get open() {
|
|
10689
11327
|
return keyboardHelpOpen();
|
|
10690
11328
|
},
|
|
10691
|
-
onClose: () => setKeyboardHelpOpen(false)
|
|
11329
|
+
onClose: () => setKeyboardHelpOpen(false),
|
|
11330
|
+
privateMode: isChromeOnlyWindow
|
|
10692
11331
|
}), null);
|
|
10693
11332
|
createRenderEffect(() => _el$.classList.toggle("focus-mode", !!focusMode2()));
|
|
10694
11333
|
return _el$;
|