@quanta-intellect/vessel-browser 0.1.53 → 0.1.58
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 +7 -2
- package/out/main/index.js +1901 -856
- package/out/preload/content-script.js +110 -0
- package/out/preload/index.js +28 -1
- package/out/renderer/assets/{index-eS3ccAls.css → index-Bn4ixapT.css} +226 -1
- package/out/renderer/assets/{index-hRUKGdgt.js → index-DGIC7Iij.js} +685 -134
- package/out/renderer/index.html +2 -2
- package/package.json +1 -1
|
@@ -1489,15 +1489,30 @@ delegateEvents(["click"]);
|
|
|
1489
1489
|
const [tabs, setTabs] = createSignal([]);
|
|
1490
1490
|
const [activeTabId, setActiveTabId] = createSignal("");
|
|
1491
1491
|
let initialized$3 = false;
|
|
1492
|
+
let initPromise$2 = null;
|
|
1492
1493
|
function init$3() {
|
|
1494
|
+
if (initPromise$2) return initPromise$2;
|
|
1493
1495
|
if (initialized$3) return;
|
|
1494
1496
|
initialized$3 = true;
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1497
|
+
initPromise$2 = (async () => {
|
|
1498
|
+
try {
|
|
1499
|
+
window.vessel.tabs.onStateUpdate(
|
|
1500
|
+
(newTabs, newActiveId) => {
|
|
1501
|
+
setTabs(newTabs);
|
|
1502
|
+
setActiveTabId(newActiveId);
|
|
1503
|
+
}
|
|
1504
|
+
);
|
|
1505
|
+
const initialState = await window.vessel.tabs.getState();
|
|
1506
|
+
setTabs(initialState.tabs);
|
|
1507
|
+
setActiveTabId(initialState.activeId);
|
|
1508
|
+
} catch (error) {
|
|
1509
|
+
initialized$3 = false;
|
|
1510
|
+
console.error("Failed to initialize tabs store", error);
|
|
1511
|
+
} finally {
|
|
1512
|
+
initPromise$2 = null;
|
|
1499
1513
|
}
|
|
1500
|
-
);
|
|
1514
|
+
})();
|
|
1515
|
+
return initPromise$2;
|
|
1501
1516
|
}
|
|
1502
1517
|
function useTabs() {
|
|
1503
1518
|
init$3();
|
|
@@ -1697,7 +1712,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
1697
1712
|
}
|
|
1698
1713
|
return "idle";
|
|
1699
1714
|
}
|
|
1700
|
-
var _tmpl$$d = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$
|
|
1715
|
+
var _tmpl$$d = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$9 = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list><button class=tab-new data-tooltip="New Tab">+`), _tmpl$4$9 = /* @__PURE__ */ template(`<div role=tab><span class=tab-title></span><button class=tab-close>×`), _tmpl$5$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$6$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
|
|
1701
1716
|
const TAB_CLOSE_MS = 200;
|
|
1702
1717
|
function stringToHue(str) {
|
|
1703
1718
|
let hash = 0;
|
|
@@ -1764,13 +1779,13 @@ const TabBar = () => {
|
|
|
1764
1779
|
}, TAB_CLOSE_MS);
|
|
1765
1780
|
};
|
|
1766
1781
|
return (() => {
|
|
1767
|
-
var _el$3 = _tmpl$3$
|
|
1782
|
+
var _el$3 = _tmpl$3$9(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
|
|
1768
1783
|
insert(_el$4, createComponent(For, {
|
|
1769
1784
|
get each() {
|
|
1770
1785
|
return tabs2();
|
|
1771
1786
|
},
|
|
1772
1787
|
children: (tab) => (() => {
|
|
1773
|
-
var _el$6 = _tmpl$4$
|
|
1788
|
+
var _el$6 = _tmpl$4$9(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
|
|
1774
1789
|
_el$6.addEventListener("auxclick", (e) => {
|
|
1775
1790
|
if (e.button === 1) handleClose(tab.id);
|
|
1776
1791
|
});
|
|
@@ -1788,12 +1803,12 @@ const TabBar = () => {
|
|
|
1788
1803
|
}), _el$7);
|
|
1789
1804
|
insert(_el$6, (() => {
|
|
1790
1805
|
var _c$ = memo(() => !!modelActiveTabIds().has(tab.id));
|
|
1791
|
-
return () => _c$() && _tmpl$5$
|
|
1806
|
+
return () => _c$() && _tmpl$5$7();
|
|
1792
1807
|
})(), _el$7);
|
|
1793
1808
|
insert(_el$7, () => tab.title || "New Tab");
|
|
1794
1809
|
insert(_el$6, (() => {
|
|
1795
1810
|
var _c$2 = memo(() => !!tab.isLoading);
|
|
1796
|
-
return () => _c$2() && _tmpl$6$
|
|
1811
|
+
return () => _c$2() && _tmpl$6$7();
|
|
1797
1812
|
})(), _el$8);
|
|
1798
1813
|
_el$8.$$click = (e) => {
|
|
1799
1814
|
e.stopPropagation();
|
|
@@ -1905,7 +1920,121 @@ function useUI() {
|
|
|
1905
1920
|
}
|
|
1906
1921
|
};
|
|
1907
1922
|
}
|
|
1908
|
-
|
|
1923
|
+
function normalizePageUrl(rawUrl) {
|
|
1924
|
+
try {
|
|
1925
|
+
const url = new URL(rawUrl);
|
|
1926
|
+
const pathname = url.pathname.replace(/\/+$/, "") || "/";
|
|
1927
|
+
return `${url.origin}${pathname}`.toLowerCase();
|
|
1928
|
+
} catch {
|
|
1929
|
+
return rawUrl.trim().replace(/\/+$/, "").toLowerCase();
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
const SNAPSHOT_QUERY_KEYS = /* @__PURE__ */ new Set([
|
|
1933
|
+
"q",
|
|
1934
|
+
"query",
|
|
1935
|
+
"search",
|
|
1936
|
+
"s",
|
|
1937
|
+
"term",
|
|
1938
|
+
"keyword",
|
|
1939
|
+
"keywords",
|
|
1940
|
+
"page",
|
|
1941
|
+
"p",
|
|
1942
|
+
"offset",
|
|
1943
|
+
"cursor",
|
|
1944
|
+
"sort",
|
|
1945
|
+
"order",
|
|
1946
|
+
"filter",
|
|
1947
|
+
"filters",
|
|
1948
|
+
"category",
|
|
1949
|
+
"categories",
|
|
1950
|
+
"tag",
|
|
1951
|
+
"tags",
|
|
1952
|
+
"tab",
|
|
1953
|
+
"view"
|
|
1954
|
+
]);
|
|
1955
|
+
const TRACKING_QUERY_KEYS = /* @__PURE__ */ new Set([
|
|
1956
|
+
"fbclid",
|
|
1957
|
+
"gclid",
|
|
1958
|
+
"mc_cid",
|
|
1959
|
+
"mc_eid",
|
|
1960
|
+
"ref",
|
|
1961
|
+
"source",
|
|
1962
|
+
"si"
|
|
1963
|
+
]);
|
|
1964
|
+
function normalizeQueryValue(value) {
|
|
1965
|
+
return value.replace(/\s+/g, " ").trim().toLowerCase();
|
|
1966
|
+
}
|
|
1967
|
+
function serializeSnapshotParams(params) {
|
|
1968
|
+
return params.map(
|
|
1969
|
+
([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
|
|
1970
|
+
).join("&");
|
|
1971
|
+
}
|
|
1972
|
+
function normalizeSnapshotParams(entries2, pathname) {
|
|
1973
|
+
return Array.from(entries2).filter(
|
|
1974
|
+
([key, value]) => shouldKeepSnapshotQueryParam(pathname, key, value)
|
|
1975
|
+
).map(([key, value]) => [
|
|
1976
|
+
key.trim().toLowerCase(),
|
|
1977
|
+
normalizeQueryValue(value)
|
|
1978
|
+
]).sort(
|
|
1979
|
+
([keyA, valueA], [keyB, valueB]) => keyA === keyB ? valueA.localeCompare(valueB) : keyA.localeCompare(keyB)
|
|
1980
|
+
);
|
|
1981
|
+
}
|
|
1982
|
+
function shouldKeepSnapshotQueryParam(pathname, rawKey, value) {
|
|
1983
|
+
const key = rawKey.trim().toLowerCase();
|
|
1984
|
+
if (!key || !value.trim()) return false;
|
|
1985
|
+
if (key.startsWith("utm_")) return false;
|
|
1986
|
+
if (TRACKING_QUERY_KEYS.has(key)) return false;
|
|
1987
|
+
if (SNAPSHOT_QUERY_KEYS.has(key)) return true;
|
|
1988
|
+
return /\/(search|results|browse|discover|find|category|tag|topics?|collections?|list)(\/|$)/i.test(
|
|
1989
|
+
pathname
|
|
1990
|
+
);
|
|
1991
|
+
}
|
|
1992
|
+
function buildSnapshotHashKey(hash, pathname) {
|
|
1993
|
+
let raw = hash.replace(/^#/, "").trim();
|
|
1994
|
+
if (!raw) return null;
|
|
1995
|
+
let bang = false;
|
|
1996
|
+
if (raw.startsWith("!")) {
|
|
1997
|
+
bang = true;
|
|
1998
|
+
raw = raw.slice(1).trim();
|
|
1999
|
+
}
|
|
2000
|
+
if (raw.startsWith("/")) {
|
|
2001
|
+
const [routePart, queryPart = ""] = raw.split("?");
|
|
2002
|
+
const route = routePart.replace(/\/+$/, "") || "/";
|
|
2003
|
+
const params = normalizeSnapshotParams(
|
|
2004
|
+
new URLSearchParams(queryPart).entries(),
|
|
2005
|
+
pathname
|
|
2006
|
+
);
|
|
2007
|
+
const query = serializeSnapshotParams(params);
|
|
2008
|
+
return `#${bang ? "!" : ""}${route.toLowerCase()}${query ? `?${query}` : ""}`;
|
|
2009
|
+
}
|
|
2010
|
+
const queryLike = raw.startsWith("?") ? raw.slice(1) : raw;
|
|
2011
|
+
if (queryLike.includes("=")) {
|
|
2012
|
+
const params = normalizeSnapshotParams(
|
|
2013
|
+
new URLSearchParams(queryLike).entries(),
|
|
2014
|
+
pathname
|
|
2015
|
+
);
|
|
2016
|
+
if (params.length === 0) return null;
|
|
2017
|
+
const query = serializeSnapshotParams(params);
|
|
2018
|
+
return `#${bang ? "!" : ""}?${query}`;
|
|
2019
|
+
}
|
|
2020
|
+
return null;
|
|
2021
|
+
}
|
|
2022
|
+
function buildPageSnapshotKey(rawUrl) {
|
|
2023
|
+
try {
|
|
2024
|
+
const url = new URL(rawUrl);
|
|
2025
|
+
const pathname = url.pathname.replace(/\/+$/, "") || "/";
|
|
2026
|
+
const params = normalizeSnapshotParams(url.searchParams.entries(), pathname);
|
|
2027
|
+
const query = serializeSnapshotParams(params);
|
|
2028
|
+
const hash = buildSnapshotHashKey(url.hash, pathname);
|
|
2029
|
+
return `${url.origin.toLowerCase()}${pathname.toLowerCase()}${query ? `?${query}` : ""}${hash || ""}`;
|
|
2030
|
+
} catch {
|
|
2031
|
+
return normalizePageUrl(rawUrl);
|
|
2032
|
+
}
|
|
2033
|
+
}
|
|
2034
|
+
function matchesPageSnapshotUrl(left, right) {
|
|
2035
|
+
return buildPageSnapshotKey(left) === buildPageSnapshotKey(right);
|
|
2036
|
+
}
|
|
2037
|
+
var _tmpl$$c = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Page content has changed since your last visit"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>Changed`), _tmpl$2$a = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$3$8 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$4$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><button class=page-diff-popup-close>×`), _tmpl$5$6 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$6$6 = /* @__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"></form><div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text></span></div></div><div class=toolbar-actions><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></line></svg></button><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></line></svg></button><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></line></svg></button><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$7$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$9$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$0$4 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$10$4 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$11$4 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$12$4 = /* @__PURE__ */ template(`<li>`);
|
|
1909
2038
|
const AddressBar = () => {
|
|
1910
2039
|
const {
|
|
1911
2040
|
activeTab,
|
|
@@ -1929,12 +2058,84 @@ const AddressBar = () => {
|
|
|
1929
2058
|
const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
|
|
1930
2059
|
const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
|
|
1931
2060
|
const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
|
|
2061
|
+
const [pageDiff, setPageDiff] = createSignal(null);
|
|
2062
|
+
const [diffExpanded, setDiffExpanded] = createSignal(false);
|
|
2063
|
+
let diffCollapseTimer = null;
|
|
2064
|
+
const showIncomingDiff = (diff) => {
|
|
2065
|
+
setPageDiff(diff);
|
|
2066
|
+
setDiffExpanded(true);
|
|
2067
|
+
if (diffCollapseTimer) clearTimeout(diffCollapseTimer);
|
|
2068
|
+
diffCollapseTimer = setTimeout(() => {
|
|
2069
|
+
setDiffExpanded(false);
|
|
2070
|
+
diffCollapseTimer = null;
|
|
2071
|
+
}, 8e3);
|
|
2072
|
+
};
|
|
2073
|
+
const formatRelativeTime = (isoDate) => {
|
|
2074
|
+
const diff = Date.now() - new Date(isoDate).getTime();
|
|
2075
|
+
const mins = Math.floor(diff / 6e4);
|
|
2076
|
+
if (mins < 1) return "just now";
|
|
2077
|
+
if (mins < 60) return `${mins}m ago`;
|
|
2078
|
+
const hours = Math.floor(mins / 60);
|
|
2079
|
+
if (hours < 24) return `${hours}h ago`;
|
|
2080
|
+
const days = Math.floor(hours / 24);
|
|
2081
|
+
if (days < 7) return `${days}d ago`;
|
|
2082
|
+
return new Date(isoDate).toLocaleDateString();
|
|
2083
|
+
};
|
|
2084
|
+
const formatElapsed = (startIso, endIso) => {
|
|
2085
|
+
const elapsedMs = Math.max(0, new Date(endIso).getTime() - new Date(startIso).getTime());
|
|
2086
|
+
const secs = Math.round(elapsedMs / 1e3);
|
|
2087
|
+
if (secs < 60) return `${secs}s`;
|
|
2088
|
+
const mins = Math.round(secs / 60);
|
|
2089
|
+
if (mins < 60) return `${mins}m`;
|
|
2090
|
+
const hours = Math.round(mins / 60);
|
|
2091
|
+
return `${hours}h`;
|
|
2092
|
+
};
|
|
2093
|
+
createEffect(() => {
|
|
2094
|
+
const unsubscribe = window.vessel.pageDiff.onChanged((diff) => {
|
|
2095
|
+
const tab = activeTab();
|
|
2096
|
+
if (!tab) return;
|
|
2097
|
+
if (!matchesPageSnapshotUrl(tab.url, diff.url)) return;
|
|
2098
|
+
showIncomingDiff(diff);
|
|
2099
|
+
});
|
|
2100
|
+
onCleanup(() => {
|
|
2101
|
+
unsubscribe();
|
|
2102
|
+
if (diffCollapseTimer) {
|
|
2103
|
+
clearTimeout(diffCollapseTimer);
|
|
2104
|
+
diffCollapseTimer = null;
|
|
2105
|
+
}
|
|
2106
|
+
});
|
|
2107
|
+
});
|
|
1932
2108
|
createEffect(() => {
|
|
1933
2109
|
const tab = activeTab();
|
|
1934
2110
|
if (tab && !inputRef?.matches(":focus")) {
|
|
1935
2111
|
setInputValue(tab.url === "about:blank" ? "" : tab.url);
|
|
1936
2112
|
}
|
|
1937
2113
|
});
|
|
2114
|
+
createEffect(() => {
|
|
2115
|
+
const tab = activeTab();
|
|
2116
|
+
if (!tab) {
|
|
2117
|
+
setPageDiff(null);
|
|
2118
|
+
setDiffExpanded(false);
|
|
2119
|
+
return;
|
|
2120
|
+
}
|
|
2121
|
+
let cancelled = false;
|
|
2122
|
+
void window.vessel.pageDiff.get().then((diff) => {
|
|
2123
|
+
if (cancelled) return;
|
|
2124
|
+
if (!diff || !matchesPageSnapshotUrl(tab.url, diff.url)) {
|
|
2125
|
+
setPageDiff(null);
|
|
2126
|
+
setDiffExpanded(false);
|
|
2127
|
+
return;
|
|
2128
|
+
}
|
|
2129
|
+
setPageDiff(diff);
|
|
2130
|
+
}).catch(() => {
|
|
2131
|
+
if (cancelled) return;
|
|
2132
|
+
setPageDiff(null);
|
|
2133
|
+
setDiffExpanded(false);
|
|
2134
|
+
});
|
|
2135
|
+
onCleanup(() => {
|
|
2136
|
+
cancelled = true;
|
|
2137
|
+
});
|
|
2138
|
+
});
|
|
1938
2139
|
const handleSubmit = (e) => {
|
|
1939
2140
|
e.preventDefault();
|
|
1940
2141
|
const val = inputValue().trim();
|
|
@@ -1943,10 +2144,11 @@ const AddressBar = () => {
|
|
|
1943
2144
|
inputRef?.blur();
|
|
1944
2145
|
}
|
|
1945
2146
|
};
|
|
2147
|
+
const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
|
|
1946
2148
|
return (() => {
|
|
1947
|
-
var _el$ = _tmpl$
|
|
1948
|
-
_el$
|
|
1949
|
-
var _el$
|
|
2149
|
+
var _el$ = _tmpl$6$6(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$2.nextSibling, _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$24 = _el$6.nextSibling, _el$25 = _el$24.firstChild, _el$26 = _el$25.nextSibling, _el$27 = _el$26.nextSibling;
|
|
2150
|
+
_el$27.firstChild;
|
|
2151
|
+
var _el$30 = _el$27.nextSibling;
|
|
1950
2152
|
addEventListener(_el$3, "click", goBack, true);
|
|
1951
2153
|
addEventListener(_el$4, "click", goForward, true);
|
|
1952
2154
|
addEventListener(_el$5, "click", reload, true);
|
|
@@ -1957,31 +2159,166 @@ const AddressBar = () => {
|
|
|
1957
2159
|
typeof _ref$ === "function" ? use(_ref$, _el$8) : inputRef = _el$8;
|
|
1958
2160
|
setAttribute(_el$8, "spellcheck", false);
|
|
1959
2161
|
insert(_el$1, () => agentStatusMessage() || (agentPresence() === "active" ? "Agent Active" : agentPresence() === "recent" ? "Agent Connected" : "Agent Offline"));
|
|
1960
|
-
_el$
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
2162
|
+
insert(_el$6, createComponent(Show, {
|
|
2163
|
+
get when() {
|
|
2164
|
+
return pageDiff();
|
|
2165
|
+
},
|
|
2166
|
+
get children() {
|
|
2167
|
+
var _el$10 = _tmpl$$c();
|
|
2168
|
+
_el$10.$$click = () => setDiffExpanded(!diffExpanded());
|
|
2169
|
+
return _el$10;
|
|
2170
|
+
}
|
|
2171
|
+
}), null);
|
|
2172
|
+
insert(_el$, createComponent(Show, {
|
|
2173
|
+
get when() {
|
|
2174
|
+
return memo(() => !!pageDiff())() && diffExpanded();
|
|
2175
|
+
},
|
|
2176
|
+
get children() {
|
|
2177
|
+
var _el$11 = _tmpl$4$8(), _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild;
|
|
2178
|
+
_el$14.firstChild;
|
|
2179
|
+
var _el$21 = _el$13.nextSibling;
|
|
2180
|
+
insert(_el$14, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
|
|
2181
|
+
insert(_el$13, createComponent(Show, {
|
|
2182
|
+
get when() {
|
|
2183
|
+
return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
|
|
2184
|
+
},
|
|
2185
|
+
get children() {
|
|
2186
|
+
var _el$16 = _tmpl$2$a(), _el$17 = _el$16.firstChild, _el$20 = _el$17.nextSibling;
|
|
2187
|
+
_el$20.nextSibling;
|
|
2188
|
+
insert(_el$16, () => pageDiff().burstCount, _el$20);
|
|
2189
|
+
insert(_el$16, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
|
|
2190
|
+
return _el$16;
|
|
2191
|
+
}
|
|
2192
|
+
}), null);
|
|
2193
|
+
_el$21.$$click = () => setDiffExpanded(false);
|
|
2194
|
+
insert(_el$11, createComponent(Show, {
|
|
2195
|
+
get when() {
|
|
2196
|
+
return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
|
|
2197
|
+
},
|
|
2198
|
+
get children() {
|
|
2199
|
+
var _el$22 = _tmpl$3$8();
|
|
2200
|
+
_el$22.firstChild;
|
|
2201
|
+
insert(_el$22, createComponent(For, {
|
|
2202
|
+
get each() {
|
|
2203
|
+
return pageDiff().recentBursts;
|
|
2204
|
+
},
|
|
2205
|
+
children: (burst) => (() => {
|
|
2206
|
+
var _el$31 = _tmpl$7$4(), _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling;
|
|
2207
|
+
insert(_el$32, () => formatRelativeTime(burst.detectedAt));
|
|
2208
|
+
insert(_el$33, () => burst.summary);
|
|
2209
|
+
return _el$31;
|
|
2210
|
+
})()
|
|
2211
|
+
}), null);
|
|
2212
|
+
return _el$22;
|
|
2213
|
+
}
|
|
2214
|
+
}), null);
|
|
2215
|
+
insert(_el$11, createComponent(For, {
|
|
2216
|
+
get each() {
|
|
2217
|
+
return pageDiff().changes;
|
|
2218
|
+
},
|
|
2219
|
+
children: (change) => (() => {
|
|
2220
|
+
var _el$34 = _tmpl$11$4(), _el$35 = _el$34.firstChild, _el$36 = _el$35.firstChild, _el$37 = _el$36.nextSibling;
|
|
2221
|
+
insert(_el$36, () => formatSectionLabel(change.section));
|
|
2222
|
+
insert(_el$37, () => change.summary);
|
|
2223
|
+
insert(_el$34, createComponent(Show, {
|
|
2224
|
+
get when() {
|
|
2225
|
+
return change.before || change.after;
|
|
2226
|
+
},
|
|
2227
|
+
get children() {
|
|
2228
|
+
var _el$38 = _tmpl$0$4();
|
|
2229
|
+
insert(_el$38, createComponent(Show, {
|
|
2230
|
+
get when() {
|
|
2231
|
+
return change.before;
|
|
2232
|
+
},
|
|
2233
|
+
get children() {
|
|
2234
|
+
var _el$39 = _tmpl$8$4(), _el$40 = _el$39.firstChild, _el$41 = _el$40.nextSibling;
|
|
2235
|
+
insert(_el$41, () => change.before);
|
|
2236
|
+
return _el$39;
|
|
2237
|
+
}
|
|
2238
|
+
}), null);
|
|
2239
|
+
insert(_el$38, createComponent(Show, {
|
|
2240
|
+
get when() {
|
|
2241
|
+
return change.after;
|
|
2242
|
+
},
|
|
2243
|
+
get children() {
|
|
2244
|
+
var _el$42 = _tmpl$9$4(), _el$43 = _el$42.firstChild, _el$44 = _el$43.nextSibling;
|
|
2245
|
+
insert(_el$44, () => change.after);
|
|
2246
|
+
return _el$42;
|
|
2247
|
+
}
|
|
2248
|
+
}), null);
|
|
2249
|
+
return _el$38;
|
|
2250
|
+
}
|
|
2251
|
+
}), null);
|
|
2252
|
+
insert(_el$34, createComponent(Show, {
|
|
2253
|
+
get when() {
|
|
2254
|
+
return change.addedItems?.length;
|
|
2255
|
+
},
|
|
2256
|
+
get children() {
|
|
2257
|
+
var _el$45 = _tmpl$1$4(), _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling;
|
|
2258
|
+
insert(_el$47, createComponent(For, {
|
|
2259
|
+
get each() {
|
|
2260
|
+
return change.addedItems;
|
|
2261
|
+
},
|
|
2262
|
+
children: (item) => (() => {
|
|
2263
|
+
var _el$51 = _tmpl$12$4();
|
|
2264
|
+
insert(_el$51, item);
|
|
2265
|
+
return _el$51;
|
|
2266
|
+
})()
|
|
2267
|
+
}));
|
|
2268
|
+
return _el$45;
|
|
2269
|
+
}
|
|
2270
|
+
}), null);
|
|
2271
|
+
insert(_el$34, createComponent(Show, {
|
|
2272
|
+
get when() {
|
|
2273
|
+
return change.removedItems?.length;
|
|
2274
|
+
},
|
|
2275
|
+
get children() {
|
|
2276
|
+
var _el$48 = _tmpl$10$4(), _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling;
|
|
2277
|
+
insert(_el$50, createComponent(For, {
|
|
2278
|
+
get each() {
|
|
2279
|
+
return change.removedItems;
|
|
2280
|
+
},
|
|
2281
|
+
children: (item) => (() => {
|
|
2282
|
+
var _el$52 = _tmpl$12$4();
|
|
2283
|
+
insert(_el$52, item);
|
|
2284
|
+
return _el$52;
|
|
2285
|
+
})()
|
|
2286
|
+
}));
|
|
2287
|
+
return _el$48;
|
|
2288
|
+
}
|
|
2289
|
+
}), null);
|
|
2290
|
+
createRenderEffect(() => className(_el$34, `page-diff-item page-diff-${change.kind}`));
|
|
2291
|
+
return _el$34;
|
|
2292
|
+
})()
|
|
2293
|
+
}), null);
|
|
2294
|
+
return _el$11;
|
|
2295
|
+
}
|
|
2296
|
+
}), _el$24);
|
|
2297
|
+
_el$25.$$click = () => window.vessel.content.toggleReader();
|
|
2298
|
+
addEventListener(_el$26, "click", toggleDevTools, true);
|
|
2299
|
+
addEventListener(_el$27, "click", toggleSidebar, true);
|
|
2300
|
+
insert(_el$27, createComponent(Show, {
|
|
1964
2301
|
get when() {
|
|
1965
2302
|
return pendingApprovalCount() > 0;
|
|
1966
2303
|
},
|
|
1967
2304
|
get children() {
|
|
1968
|
-
var _el$
|
|
1969
|
-
insert(_el$
|
|
1970
|
-
createRenderEffect(() => setAttribute(_el$
|
|
1971
|
-
return _el$
|
|
2305
|
+
var _el$29 = _tmpl$5$6();
|
|
2306
|
+
insert(_el$29, pendingApprovalCount);
|
|
2307
|
+
createRenderEffect(() => setAttribute(_el$29, "aria-label", `${pendingApprovalCount()} pending`));
|
|
2308
|
+
return _el$29;
|
|
1972
2309
|
}
|
|
1973
2310
|
}), null);
|
|
1974
|
-
addEventListener(_el$
|
|
2311
|
+
addEventListener(_el$30, "click", openSettings, true);
|
|
1975
2312
|
createRenderEffect((_p$) => {
|
|
1976
2313
|
var _v$ = !activeTab()?.canGoBack, _v$2 = !activeTab()?.canGoForward, _v$3 = `agent-status-badge ${agentPresence()}`, _v$4 = agentStatusMessage() || (agentPresence() === "active" ? "Agent is actively using the browser" : agentPresence() === "recent" ? "Agent is connected" : "No agent connection detected"), _v$5 = !!activeTab()?.isReaderMode, _v$6 = !!devtoolsPanelOpen2(), _v$7 = !!(pendingApprovalCount() > 0), _v$8 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
|
|
1977
2314
|
_v$ !== _p$.e && (_el$3.disabled = _p$.e = _v$);
|
|
1978
2315
|
_v$2 !== _p$.t && (_el$4.disabled = _p$.t = _v$2);
|
|
1979
2316
|
_v$3 !== _p$.a && className(_el$9, _p$.a = _v$3);
|
|
1980
2317
|
_v$4 !== _p$.o && setAttribute(_el$9, "title", _p$.o = _v$4);
|
|
1981
|
-
_v$5 !== _p$.i && _el$
|
|
1982
|
-
_v$6 !== _p$.n && _el$
|
|
1983
|
-
_v$7 !== _p$.s && _el$
|
|
1984
|
-
_v$8 !== _p$.h && setAttribute(_el$
|
|
2318
|
+
_v$5 !== _p$.i && _el$25.classList.toggle("active", _p$.i = _v$5);
|
|
2319
|
+
_v$6 !== _p$.n && _el$26.classList.toggle("active", _p$.n = _v$6);
|
|
2320
|
+
_v$7 !== _p$.s && _el$27.classList.toggle("has-approvals", _p$.s = _v$7);
|
|
2321
|
+
_v$8 !== _p$.h && setAttribute(_el$27, "title", _p$.h = _v$8);
|
|
1985
2322
|
return _p$;
|
|
1986
2323
|
}, {
|
|
1987
2324
|
e: void 0,
|
|
@@ -4650,7 +4987,7 @@ function renderKitPrompt(kit, values) {
|
|
|
4650
4987
|
(_, key) => values[key] ?? ""
|
|
4651
4988
|
);
|
|
4652
4989
|
}
|
|
4653
|
-
var _tmpl$$5 = /* @__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$5 = /* @__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$4 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$3 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$3 = /* @__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$
|
|
4990
|
+
var _tmpl$$5 = /* @__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$5 = /* @__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$4 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$3 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$3 = /* @__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$1 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$1 = /* @__PURE__ */ template(`<option>`), _tmpl$42$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
|
|
4654
4991
|
const ICON_MAP = {
|
|
4655
4992
|
BookOpen: book_open_default,
|
|
4656
4993
|
Tag: tag_default,
|
|
@@ -5237,7 +5574,7 @@ const AutomationTab = (props) => {
|
|
|
5237
5574
|
return selectedKit().inputs;
|
|
5238
5575
|
},
|
|
5239
5576
|
children: (input) => (() => {
|
|
5240
|
-
var _el$110 = _tmpl$37$
|
|
5577
|
+
var _el$110 = _tmpl$37$2(), _el$111 = _el$110.firstChild;
|
|
5241
5578
|
insert(_el$111, () => input.label, null);
|
|
5242
5579
|
insert(_el$111, createComponent(Show, {
|
|
5243
5580
|
get when() {
|
|
@@ -5253,7 +5590,7 @@ const AutomationTab = (props) => {
|
|
|
5253
5590
|
},
|
|
5254
5591
|
get fallback() {
|
|
5255
5592
|
return (() => {
|
|
5256
|
-
var _el$115 = _tmpl$38$
|
|
5593
|
+
var _el$115 = _tmpl$38$2();
|
|
5257
5594
|
_el$115.$$input = (e) => setField(input.key, e.currentTarget.value);
|
|
5258
5595
|
createRenderEffect((_p$) => {
|
|
5259
5596
|
var _v$8 = input.type === "url" ? "url" : input.type === "number" ? "number" : "text", _v$9 = input.placeholder ?? "";
|
|
@@ -5281,7 +5618,7 @@ const AutomationTab = (props) => {
|
|
|
5281
5618
|
return input.hint;
|
|
5282
5619
|
},
|
|
5283
5620
|
get children() {
|
|
5284
|
-
var _el$114 = _tmpl$36$
|
|
5621
|
+
var _el$114 = _tmpl$36$2();
|
|
5285
5622
|
insert(_el$114, () => input.hint);
|
|
5286
5623
|
return _el$114;
|
|
5287
5624
|
}
|
|
@@ -5490,7 +5827,7 @@ const AutomationTab = (props) => {
|
|
|
5490
5827
|
};
|
|
5491
5828
|
delegateEvents(["click", "input", "keydown", "contextmenu"]);
|
|
5492
5829
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
5493
|
-
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(`<div class=agent-section-title>Pending approvals`), _tmpl$5$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$6$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$7$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$8$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>`), _tmpl$9$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$0$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$1$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"><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$10$2 = /* @__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$11$2 = /* @__PURE__ */ template(`<span>`), _tmpl$12$2 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$13$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$14$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$15$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$16$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$17$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$18$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$19$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$23$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></div><div class=sidebar-messages><div>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$25$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$26$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$30$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$31$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$33$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$34$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$35$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$36 = /* @__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$37 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$38 = /* @__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$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$40 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$41 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$42 = /* @__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 danger"type=button>Remove`), _tmpl$43 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$44 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$45 = /* @__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><button class=agent-control-button type=button>Restore`), _tmpl$46 = /* @__PURE__ */ template(`<div>`), _tmpl$47 = /* @__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$48 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$49 = /* @__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$50 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
5830
|
+
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(`<div class=agent-section-title>Pending approvals`), _tmpl$5$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$6$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$7$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$8$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>`), _tmpl$9$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$0$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$1$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"><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$10$2 = /* @__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$11$2 = /* @__PURE__ */ template(`<span>`), _tmpl$12$2 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$13$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$14$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$15$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$16$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$17$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$18$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$19$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$23$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></div><div class=sidebar-messages><div>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$25$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$26$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$30$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$31$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$33$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$34$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$35$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$36$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$37$1 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$38$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$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$40 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$41 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$42 = /* @__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 danger"type=button>Remove`), _tmpl$43 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$44 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$45 = /* @__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><button class=agent-control-button type=button>Restore`), _tmpl$46 = /* @__PURE__ */ template(`<div>`), _tmpl$47 = /* @__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$48 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$49 = /* @__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$50 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
5494
5831
|
const UNSORTED_FOLDER = {
|
|
5495
5832
|
id: "unsorted",
|
|
5496
5833
|
name: "Unsorted",
|
|
@@ -6162,7 +6499,7 @@ ${contextBlock}` : contextBlock);
|
|
|
6162
6499
|
return filteredGroupedBookmarks();
|
|
6163
6500
|
},
|
|
6164
6501
|
children: (folder) => (() => {
|
|
6165
|
-
var _el$122 = _tmpl$38(), _el$123 = _el$122.firstChild, _el$124 = _el$123.firstChild, _el$125 = _el$124.firstChild, _el$126 = _el$125.nextSibling, _el$127 = _el$126.firstChild, _el$128 = _el$127.nextSibling, _el$129 = _el$128.firstChild;
|
|
6502
|
+
var _el$122 = _tmpl$38$1(), _el$123 = _el$122.firstChild, _el$124 = _el$123.firstChild, _el$125 = _el$124.firstChild, _el$126 = _el$125.nextSibling, _el$127 = _el$126.firstChild, _el$128 = _el$127.nextSibling, _el$129 = _el$128.firstChild;
|
|
6166
6503
|
_el$123.$$keydown = (e) => {
|
|
6167
6504
|
if (e.key === "Enter" || e.key === " ") {
|
|
6168
6505
|
e.preventDefault();
|
|
@@ -6235,7 +6572,7 @@ ${contextBlock}` : contextBlock);
|
|
|
6235
6572
|
return editingFolderId() === folder.id;
|
|
6236
6573
|
},
|
|
6237
6574
|
get children() {
|
|
6238
|
-
var _el$143 = _tmpl$36(), _el$144 = _el$143.firstChild, _el$145 = _el$144.firstChild, _el$146 = _el$145.nextSibling, _el$147 = _el$144.nextSibling, _el$148 = _el$147.nextSibling;
|
|
6575
|
+
var _el$143 = _tmpl$36$1(), _el$144 = _el$143.firstChild, _el$145 = _el$144.firstChild, _el$146 = _el$145.nextSibling, _el$147 = _el$144.nextSibling, _el$148 = _el$147.nextSibling;
|
|
6239
6576
|
_el$145.$$input = (e) => setEditingFolderName(e.currentTarget.value);
|
|
6240
6577
|
_el$146.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
|
|
6241
6578
|
_el$147.$$click = () => void handleRenameFolder(folder.id);
|
|
@@ -6266,7 +6603,7 @@ ${contextBlock}` : contextBlock);
|
|
|
6266
6603
|
return _tmpl$40();
|
|
6267
6604
|
},
|
|
6268
6605
|
get children() {
|
|
6269
|
-
var _el$149 = _tmpl$37();
|
|
6606
|
+
var _el$149 = _tmpl$37$1();
|
|
6270
6607
|
insert(_el$149, createComponent(For, {
|
|
6271
6608
|
get each() {
|
|
6272
6609
|
return folder.items;
|
|
@@ -7196,7 +7533,7 @@ const PROVIDERS = {
|
|
|
7196
7533
|
apiKeyHint: "Optional — only if your endpoint requires authentication"
|
|
7197
7534
|
}
|
|
7198
7535
|
};
|
|
7199
|
-
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=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$6$1 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$7 = /* @__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$8 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$9 = /* @__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$0 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$10 = /* @__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$11 = /* @__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$12 = /* @__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$13 = /* @__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$14 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$15 = /* @__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$16 = /* @__PURE__ */ template(`<div class=vault-entries>`), _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(`<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=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-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-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-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$20 = /* @__PURE__ */ template(`<style>
|
|
7536
|
+
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=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$6$1 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$7 = /* @__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$8 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$9 = /* @__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$0 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$10 = /* @__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$11 = /* @__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$12 = /* @__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$13 = /* @__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$14 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$15 = /* @__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$16 = /* @__PURE__ */ template(`<div class=vault-entries>`), _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(`<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=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-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-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$22 = /* @__PURE__ */ template(`<style>
|
|
7200
7537
|
.settings-panel {
|
|
7201
7538
|
width: min(440px, calc(100vw - 32px));
|
|
7202
7539
|
max-height: calc(100vh - 48px);
|
|
@@ -7730,7 +8067,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
|
|
|
7730
8067
|
justify-content: flex-end;
|
|
7731
8068
|
margin-top: 4px;
|
|
7732
8069
|
}
|
|
7733
|
-
`), _tmpl$
|
|
8070
|
+
`), _tmpl$23 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$24 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$25 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$26 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$27 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$28 = /* @__PURE__ */ template(`<div>`), _tmpl$29 = /* @__PURE__ */ template(`<option>`), _tmpl$30 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$31 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$32 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$33 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$34 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade">Subscribe to Premium — $5.99/mo after 7-day free trial`), _tmpl$35 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$36 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$37 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · </span></div><button class=vault-entry-remove title="Remove credential">×`), _tmpl$38 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail></span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Fill forms on current page with this profile"style="padding:2px 10px;font-size:12px">Fill</button><button class=vault-entry-remove title="Remove profile">×`);
|
|
7734
8071
|
const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
|
|
7735
8072
|
id: p.id,
|
|
7736
8073
|
name: p.name,
|
|
@@ -7770,6 +8107,103 @@ const Settings = () => {
|
|
|
7770
8107
|
const [vaultNewTotp, setVaultNewTotp] = createSignal("");
|
|
7771
8108
|
const [vaultNewNotes, setVaultNewNotes] = createSignal("");
|
|
7772
8109
|
const [vaultMessage, setVaultMessage] = createSignal(null);
|
|
8110
|
+
const [autofillProfiles, setAutofillProfiles] = createSignal([]);
|
|
8111
|
+
const [autofillAdding, setAutofillAdding] = createSignal(false);
|
|
8112
|
+
const [autofillLabel, setAutofillLabel] = createSignal("");
|
|
8113
|
+
const [autofillFirstName, setAutofillFirstName] = createSignal("");
|
|
8114
|
+
const [autofillLastName, setAutofillLastName] = createSignal("");
|
|
8115
|
+
const [autofillEmail, setAutofillEmail] = createSignal("");
|
|
8116
|
+
const [autofillPhone, setAutofillPhone] = createSignal("");
|
|
8117
|
+
const [autofillOrg, setAutofillOrg] = createSignal("");
|
|
8118
|
+
const [autofillAddr1, setAutofillAddr1] = createSignal("");
|
|
8119
|
+
const [autofillAddr2, setAutofillAddr2] = createSignal("");
|
|
8120
|
+
const [autofillCity, setAutofillCity] = createSignal("");
|
|
8121
|
+
const [autofillState, setAutofillState] = createSignal("");
|
|
8122
|
+
const [autofillZip, setAutofillZip] = createSignal("");
|
|
8123
|
+
const [autofillCountry, setAutofillCountry] = createSignal("");
|
|
8124
|
+
const [autofillMessage, setAutofillMessage] = createSignal(null);
|
|
8125
|
+
const loadAutofillProfiles = async () => {
|
|
8126
|
+
try {
|
|
8127
|
+
const profiles = await window.vessel.autofill.list();
|
|
8128
|
+
setAutofillProfiles(profiles);
|
|
8129
|
+
} catch {
|
|
8130
|
+
}
|
|
8131
|
+
};
|
|
8132
|
+
const handleAutofillAdd = async () => {
|
|
8133
|
+
if (!autofillLabel().trim()) {
|
|
8134
|
+
setAutofillMessage({
|
|
8135
|
+
kind: "error",
|
|
8136
|
+
text: "Profile name is required."
|
|
8137
|
+
});
|
|
8138
|
+
return;
|
|
8139
|
+
}
|
|
8140
|
+
try {
|
|
8141
|
+
await window.vessel.autofill.add({
|
|
8142
|
+
label: autofillLabel().trim(),
|
|
8143
|
+
firstName: autofillFirstName().trim(),
|
|
8144
|
+
lastName: autofillLastName().trim(),
|
|
8145
|
+
email: autofillEmail().trim(),
|
|
8146
|
+
phone: autofillPhone().trim(),
|
|
8147
|
+
organization: autofillOrg().trim(),
|
|
8148
|
+
addressLine1: autofillAddr1().trim(),
|
|
8149
|
+
addressLine2: autofillAddr2().trim(),
|
|
8150
|
+
city: autofillCity().trim(),
|
|
8151
|
+
state: autofillState().trim(),
|
|
8152
|
+
postalCode: autofillZip().trim(),
|
|
8153
|
+
country: autofillCountry().trim()
|
|
8154
|
+
});
|
|
8155
|
+
setAutofillLabel("");
|
|
8156
|
+
setAutofillFirstName("");
|
|
8157
|
+
setAutofillLastName("");
|
|
8158
|
+
setAutofillEmail("");
|
|
8159
|
+
setAutofillPhone("");
|
|
8160
|
+
setAutofillOrg("");
|
|
8161
|
+
setAutofillAddr1("");
|
|
8162
|
+
setAutofillAddr2("");
|
|
8163
|
+
setAutofillCity("");
|
|
8164
|
+
setAutofillState("");
|
|
8165
|
+
setAutofillZip("");
|
|
8166
|
+
setAutofillCountry("");
|
|
8167
|
+
setAutofillAdding(false);
|
|
8168
|
+
setAutofillMessage({
|
|
8169
|
+
kind: "success",
|
|
8170
|
+
text: "Profile saved."
|
|
8171
|
+
});
|
|
8172
|
+
setTimeout(() => setAutofillMessage(null), 3e3);
|
|
8173
|
+
await loadAutofillProfiles();
|
|
8174
|
+
} catch (err) {
|
|
8175
|
+
setAutofillMessage({
|
|
8176
|
+
kind: "error",
|
|
8177
|
+
text: String(err)
|
|
8178
|
+
});
|
|
8179
|
+
}
|
|
8180
|
+
};
|
|
8181
|
+
const handleAutofillRemove = async (id) => {
|
|
8182
|
+
await window.vessel.autofill.delete(id);
|
|
8183
|
+
await loadAutofillProfiles();
|
|
8184
|
+
};
|
|
8185
|
+
const handleAutofillFill = async (id) => {
|
|
8186
|
+
try {
|
|
8187
|
+
const result = await window.vessel.autofill.fill(id);
|
|
8188
|
+
if (result.filled > 0) {
|
|
8189
|
+
setAutofillMessage({
|
|
8190
|
+
kind: "success",
|
|
8191
|
+
text: `Filled ${result.filled} field${result.filled > 1 ? "s" : ""}.`
|
|
8192
|
+
});
|
|
8193
|
+
} else {
|
|
8194
|
+
setAutofillMessage({
|
|
8195
|
+
kind: "error",
|
|
8196
|
+
text: "No matching fields found on this page."
|
|
8197
|
+
});
|
|
8198
|
+
}
|
|
8199
|
+
setTimeout(() => setAutofillMessage(null), 3e3);
|
|
8200
|
+
} catch (err) {
|
|
8201
|
+
setAutofillMessage({
|
|
8202
|
+
kind: "error",
|
|
8203
|
+
text: String(err)
|
|
8204
|
+
});
|
|
8205
|
+
}
|
|
8206
|
+
};
|
|
7773
8207
|
const FIRST_RUN_KEY = "vessel.onboarding.dismissed";
|
|
7774
8208
|
const [showWelcome, setShowWelcome] = createSignal(!localStorage.getItem(FIRST_RUN_KEY));
|
|
7775
8209
|
const dismissWelcome = () => {
|
|
@@ -7960,6 +8394,7 @@ const Settings = () => {
|
|
|
7960
8394
|
};
|
|
7961
8395
|
onMount(() => {
|
|
7962
8396
|
void loadState();
|
|
8397
|
+
void loadAutofillProfiles();
|
|
7963
8398
|
const unsubscribe = window.vessel.settings.onHealthUpdate((nextHealth) => {
|
|
7964
8399
|
setHealth(nextHealth);
|
|
7965
8400
|
});
|
|
@@ -8040,11 +8475,13 @@ const Settings = () => {
|
|
|
8040
8475
|
},
|
|
8041
8476
|
get children() {
|
|
8042
8477
|
return [(() => {
|
|
8043
|
-
var _el$ = _tmpl$
|
|
8478
|
+
var _el$ = _tmpl$21(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$11 = _el$3.nextSibling, _el$18 = _el$11.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling, _el$24 = _el$21.nextSibling, _el$25 = _el$24.firstChild, _el$27 = _el$25.nextSibling, _el$28 = _el$24.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$31.nextSibling, _el$35 = _el$34.firstChild, _el$36 = _el$35.firstChild, _el$37 = _el$34.nextSibling, _el$38 = _el$37.firstChild, _el$39 = _el$38.firstChild, _el$40 = _el$37.nextSibling, _el$41 = _el$40.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$64 = _el$41.nextSibling, _el$65 = _el$64.nextSibling;
|
|
8044
8479
|
_el$65.firstChild;
|
|
8045
8480
|
var _el$74 = _el$65.nextSibling, _el$75 = _el$74.nextSibling, _el$76 = _el$75.firstChild;
|
|
8046
8481
|
_el$76.firstChild;
|
|
8047
|
-
var _el$92 = _el$75.nextSibling, _el$93 = _el$92.nextSibling, _el$94 = _el$93.firstChild
|
|
8482
|
+
var _el$92 = _el$75.nextSibling, _el$93 = _el$92.nextSibling, _el$94 = _el$93.firstChild;
|
|
8483
|
+
_el$94.nextSibling;
|
|
8484
|
+
var _el$117 = _el$93.nextSibling, _el$118 = _el$117.nextSibling, _el$119 = _el$118.firstChild, _el$120 = _el$119.firstChild, _el$121 = _el$118.nextSibling, _el$122 = _el$121.firstChild, _el$123 = _el$122.nextSibling;
|
|
8048
8485
|
addEventListener(_el$, "click", closeSettings, true);
|
|
8049
8486
|
_el$2.$$keydown = handleKeyDown;
|
|
8050
8487
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
@@ -8101,7 +8538,7 @@ const Settings = () => {
|
|
|
8101
8538
|
return premiumActive();
|
|
8102
8539
|
},
|
|
8103
8540
|
get fallback() {
|
|
8104
|
-
return _tmpl$
|
|
8541
|
+
return _tmpl$23();
|
|
8105
8542
|
},
|
|
8106
8543
|
get children() {
|
|
8107
8544
|
var _el$26 = _tmpl$4$1();
|
|
@@ -8122,55 +8559,55 @@ const Settings = () => {
|
|
|
8122
8559
|
return health();
|
|
8123
8560
|
},
|
|
8124
8561
|
children: (currentHealth) => (() => {
|
|
8125
|
-
var _el$
|
|
8126
|
-
_el$
|
|
8127
|
-
insert(_el$
|
|
8128
|
-
insert(_el$
|
|
8129
|
-
insert(_el$
|
|
8562
|
+
var _el$126 = _tmpl$25(), _el$127 = _el$126.firstChild, _el$128 = _el$127.nextSibling, _el$129 = _el$128.firstChild, _el$131 = _el$129.nextSibling;
|
|
8563
|
+
_el$131.nextSibling;
|
|
8564
|
+
insert(_el$131, () => currentHealth().mcp.status);
|
|
8565
|
+
insert(_el$128, () => currentHealth().mcp.message, null);
|
|
8566
|
+
insert(_el$126, createComponent(Show, {
|
|
8130
8567
|
get when() {
|
|
8131
8568
|
return currentHealth().mcp.endpoint;
|
|
8132
8569
|
},
|
|
8133
8570
|
children: (endpoint) => (() => {
|
|
8134
|
-
var _el$
|
|
8135
|
-
insert(_el$
|
|
8136
|
-
return _el$
|
|
8571
|
+
var _el$134 = _tmpl$26(), _el$135 = _el$134.firstChild, _el$136 = _el$135.nextSibling;
|
|
8572
|
+
insert(_el$136, endpoint);
|
|
8573
|
+
return _el$134;
|
|
8137
8574
|
})()
|
|
8138
8575
|
}), null);
|
|
8139
|
-
insert(_el$
|
|
8576
|
+
insert(_el$126, createComponent(Show, {
|
|
8140
8577
|
get when() {
|
|
8141
8578
|
return currentHealth().startupIssues.length > 0;
|
|
8142
8579
|
},
|
|
8143
8580
|
get children() {
|
|
8144
|
-
var _el$
|
|
8145
|
-
insert(_el$
|
|
8146
|
-
var _el$
|
|
8147
|
-
insert(_el$
|
|
8148
|
-
insert(_el$
|
|
8149
|
-
insert(_el$
|
|
8581
|
+
var _el$133 = _tmpl$24();
|
|
8582
|
+
insert(_el$133, () => currentHealth().startupIssues.map((issue) => (() => {
|
|
8583
|
+
var _el$137 = _tmpl$27(), _el$138 = _el$137.firstChild, _el$139 = _el$138.nextSibling;
|
|
8584
|
+
insert(_el$138, () => issue.title);
|
|
8585
|
+
insert(_el$139, () => issue.detail);
|
|
8586
|
+
insert(_el$137, createComponent(Show, {
|
|
8150
8587
|
get when() {
|
|
8151
8588
|
return issue.action;
|
|
8152
8589
|
},
|
|
8153
8590
|
children: (action) => (() => {
|
|
8154
|
-
var _el$
|
|
8155
|
-
insert(_el$
|
|
8156
|
-
return _el$
|
|
8591
|
+
var _el$140 = _tmpl$28();
|
|
8592
|
+
insert(_el$140, action);
|
|
8593
|
+
return _el$140;
|
|
8157
8594
|
})()
|
|
8158
8595
|
}), null);
|
|
8159
8596
|
createRenderEffect((_p$) => {
|
|
8160
8597
|
var _v$0 = !!(issue.severity === "warning"), _v$1 = !!(issue.severity === "error");
|
|
8161
|
-
_v$0 !== _p$.e && _el$
|
|
8162
|
-
_v$1 !== _p$.t && _el$
|
|
8598
|
+
_v$0 !== _p$.e && _el$137.classList.toggle("warning", _p$.e = _v$0);
|
|
8599
|
+
_v$1 !== _p$.t && _el$137.classList.toggle("error", _p$.t = _v$1);
|
|
8163
8600
|
return _p$;
|
|
8164
8601
|
}, {
|
|
8165
8602
|
e: void 0,
|
|
8166
8603
|
t: void 0
|
|
8167
8604
|
});
|
|
8168
|
-
return _el$
|
|
8605
|
+
return _el$137;
|
|
8169
8606
|
})()));
|
|
8170
|
-
return _el$
|
|
8607
|
+
return _el$133;
|
|
8171
8608
|
}
|
|
8172
8609
|
}), null);
|
|
8173
|
-
return _el$
|
|
8610
|
+
return _el$126;
|
|
8174
8611
|
})()
|
|
8175
8612
|
}), _el$28);
|
|
8176
8613
|
_el$30.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
|
|
@@ -8199,10 +8636,10 @@ const Settings = () => {
|
|
|
8199
8636
|
insert(_el$46, createComponent(For, {
|
|
8200
8637
|
each: CHAT_PROVIDERS,
|
|
8201
8638
|
children: (p) => (() => {
|
|
8202
|
-
var _el$
|
|
8203
|
-
insert(_el$
|
|
8204
|
-
createRenderEffect(() => _el$
|
|
8205
|
-
return _el$
|
|
8639
|
+
var _el$141 = _tmpl$29();
|
|
8640
|
+
insert(_el$141, () => p.name);
|
|
8641
|
+
createRenderEffect(() => _el$141.value = p.id);
|
|
8642
|
+
return _el$141;
|
|
8206
8643
|
})()
|
|
8207
8644
|
}));
|
|
8208
8645
|
createRenderEffect(() => _el$46.value = chatProviderId());
|
|
@@ -8258,12 +8695,12 @@ const Settings = () => {
|
|
|
8258
8695
|
},
|
|
8259
8696
|
get fallback() {
|
|
8260
8697
|
return (() => {
|
|
8261
|
-
var _el$
|
|
8262
|
-
_el$
|
|
8263
|
-
setAttribute(_el$
|
|
8264
|
-
createRenderEffect(() => setAttribute(_el$
|
|
8265
|
-
createRenderEffect(() => _el$
|
|
8266
|
-
return _el$
|
|
8698
|
+
var _el$142 = _tmpl$30();
|
|
8699
|
+
_el$142.$$input = (e) => setChatModel(e.currentTarget.value);
|
|
8700
|
+
setAttribute(_el$142, "spellcheck", false);
|
|
8701
|
+
createRenderEffect(() => setAttribute(_el$142, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
|
|
8702
|
+
createRenderEffect(() => _el$142.value = chatModel());
|
|
8703
|
+
return _el$142;
|
|
8267
8704
|
})();
|
|
8268
8705
|
},
|
|
8269
8706
|
get children() {
|
|
@@ -8274,10 +8711,10 @@ const Settings = () => {
|
|
|
8274
8711
|
return providerModels();
|
|
8275
8712
|
},
|
|
8276
8713
|
children: (m) => (() => {
|
|
8277
|
-
var _el$
|
|
8278
|
-
_el$
|
|
8279
|
-
insert(_el$
|
|
8280
|
-
return _el$
|
|
8714
|
+
var _el$143 = _tmpl$29();
|
|
8715
|
+
_el$143.value = m;
|
|
8716
|
+
insert(_el$143, m);
|
|
8717
|
+
return _el$143;
|
|
8281
8718
|
})()
|
|
8282
8719
|
}));
|
|
8283
8720
|
createRenderEffect(() => _el$57.value = chatModel());
|
|
@@ -8298,9 +8735,9 @@ const Settings = () => {
|
|
|
8298
8735
|
return modelFetchWarning();
|
|
8299
8736
|
},
|
|
8300
8737
|
children: (warning) => (() => {
|
|
8301
|
-
var _el$
|
|
8302
|
-
insert(_el$
|
|
8303
|
-
return _el$
|
|
8738
|
+
var _el$144 = _tmpl$31();
|
|
8739
|
+
insert(_el$144, warning);
|
|
8740
|
+
return _el$144;
|
|
8304
8741
|
})()
|
|
8305
8742
|
}), null);
|
|
8306
8743
|
createRenderEffect(() => _el$58.disabled = modelFetchState() === "loading");
|
|
@@ -8333,8 +8770,8 @@ const Settings = () => {
|
|
|
8333
8770
|
},
|
|
8334
8771
|
get fallback() {
|
|
8335
8772
|
return (() => {
|
|
8336
|
-
var _el$
|
|
8337
|
-
_el$
|
|
8773
|
+
var _el$145 = _tmpl$34(), _el$146 = _el$145.firstChild, _el$147 = _el$146.nextSibling, _el$148 = _el$147.firstChild, _el$149 = _el$148.nextSibling, _el$153 = _el$147.nextSibling;
|
|
8774
|
+
_el$148.$$input = (e) => {
|
|
8338
8775
|
const nextEmail = e.currentTarget.value;
|
|
8339
8776
|
if (nextEmail.trim().toLowerCase() !== premiumEmail().trim().toLowerCase()) {
|
|
8340
8777
|
resetPremiumActivationFlow();
|
|
@@ -8342,8 +8779,8 @@ const Settings = () => {
|
|
|
8342
8779
|
}
|
|
8343
8780
|
setPremiumEmail(nextEmail);
|
|
8344
8781
|
};
|
|
8345
|
-
setAttribute(_el$
|
|
8346
|
-
_el$
|
|
8782
|
+
setAttribute(_el$148, "spellcheck", false);
|
|
8783
|
+
_el$149.$$click = async () => {
|
|
8347
8784
|
setPremiumLoading(true);
|
|
8348
8785
|
setPremiumMessage(null);
|
|
8349
8786
|
try {
|
|
@@ -8372,23 +8809,23 @@ const Settings = () => {
|
|
|
8372
8809
|
setPremiumLoading(false);
|
|
8373
8810
|
}
|
|
8374
8811
|
};
|
|
8375
|
-
insert(_el$
|
|
8812
|
+
insert(_el$149, (() => {
|
|
8376
8813
|
var _c$ = memo(() => !!premiumLoading());
|
|
8377
8814
|
return () => _c$() ? "Sending..." : premiumCodeSent() ? "Resend Code" : "Send Code";
|
|
8378
8815
|
})());
|
|
8379
|
-
insert(_el$
|
|
8816
|
+
insert(_el$145, createComponent(Show, {
|
|
8380
8817
|
get when() {
|
|
8381
8818
|
return premiumCodeSent();
|
|
8382
8819
|
},
|
|
8383
8820
|
get children() {
|
|
8384
|
-
var _el$
|
|
8385
|
-
_el$
|
|
8821
|
+
var _el$150 = _tmpl$32(), _el$151 = _el$150.firstChild, _el$152 = _el$151.nextSibling;
|
|
8822
|
+
_el$151.$$input = (e) => {
|
|
8386
8823
|
const nextCode = e.currentTarget.value.replace(/\D+/g, "").slice(0, 6);
|
|
8387
8824
|
setPremiumCode(nextCode);
|
|
8388
8825
|
setPremiumMessage(null);
|
|
8389
8826
|
};
|
|
8390
|
-
setAttribute(_el$
|
|
8391
|
-
_el$
|
|
8827
|
+
setAttribute(_el$151, "spellcheck", false);
|
|
8828
|
+
_el$152.$$click = async () => {
|
|
8392
8829
|
setPremiumLoading(true);
|
|
8393
8830
|
setPremiumMessage(null);
|
|
8394
8831
|
try {
|
|
@@ -8415,53 +8852,53 @@ const Settings = () => {
|
|
|
8415
8852
|
setPremiumLoading(false);
|
|
8416
8853
|
}
|
|
8417
8854
|
};
|
|
8418
|
-
insert(_el$
|
|
8419
|
-
createRenderEffect(() => _el$
|
|
8420
|
-
createRenderEffect(() => _el$
|
|
8421
|
-
return _el$
|
|
8855
|
+
insert(_el$152, () => premiumLoading() ? "Verifying..." : "Verify Code");
|
|
8856
|
+
createRenderEffect(() => _el$152.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
|
|
8857
|
+
createRenderEffect(() => _el$151.value = premiumCode());
|
|
8858
|
+
return _el$150;
|
|
8422
8859
|
}
|
|
8423
|
-
}), _el$
|
|
8424
|
-
_el$
|
|
8860
|
+
}), _el$153);
|
|
8861
|
+
_el$153.$$click = () => {
|
|
8425
8862
|
startPremiumCheckout();
|
|
8426
8863
|
};
|
|
8427
|
-
insert(_el$
|
|
8864
|
+
insert(_el$145, createComponent(Show, {
|
|
8428
8865
|
get when() {
|
|
8429
8866
|
return premiumMessage();
|
|
8430
8867
|
},
|
|
8431
8868
|
children: (msg) => (() => {
|
|
8432
|
-
var _el$
|
|
8433
|
-
insert(_el$
|
|
8869
|
+
var _el$155 = _tmpl$35();
|
|
8870
|
+
insert(_el$155, () => msg().text);
|
|
8434
8871
|
createRenderEffect((_p$) => {
|
|
8435
8872
|
var _v$10 = !!(msg().kind === "success"), _v$11 = !!(msg().kind === "error");
|
|
8436
|
-
_v$10 !== _p$.e && _el$
|
|
8437
|
-
_v$11 !== _p$.t && _el$
|
|
8873
|
+
_v$10 !== _p$.e && _el$155.classList.toggle("success", _p$.e = _v$10);
|
|
8874
|
+
_v$11 !== _p$.t && _el$155.classList.toggle("error", _p$.t = _v$11);
|
|
8438
8875
|
return _p$;
|
|
8439
8876
|
}, {
|
|
8440
8877
|
e: void 0,
|
|
8441
8878
|
t: void 0
|
|
8442
8879
|
});
|
|
8443
|
-
return _el$
|
|
8880
|
+
return _el$155;
|
|
8444
8881
|
})()
|
|
8445
8882
|
}), null);
|
|
8446
|
-
insert(_el$
|
|
8883
|
+
insert(_el$145, createComponent(Show, {
|
|
8447
8884
|
get when() {
|
|
8448
8885
|
return premiumState().email || premiumEmail();
|
|
8449
8886
|
},
|
|
8450
8887
|
get children() {
|
|
8451
|
-
var _el$
|
|
8452
|
-
_el$
|
|
8888
|
+
var _el$154 = _tmpl$33();
|
|
8889
|
+
_el$154.$$click = async () => {
|
|
8453
8890
|
const state = await window.vessel.premium.reset();
|
|
8454
8891
|
setPremiumState(state);
|
|
8455
8892
|
setPremiumEmail("");
|
|
8456
8893
|
resetPremiumActivationFlow();
|
|
8457
8894
|
setPremiumMessage(null);
|
|
8458
8895
|
};
|
|
8459
|
-
return _el$
|
|
8896
|
+
return _el$154;
|
|
8460
8897
|
}
|
|
8461
8898
|
}), null);
|
|
8462
|
-
createRenderEffect(() => _el$
|
|
8463
|
-
createRenderEffect(() => _el$
|
|
8464
|
-
return _el$
|
|
8899
|
+
createRenderEffect(() => _el$149.disabled = premiumLoading() || !premiumEmail().trim());
|
|
8900
|
+
createRenderEffect(() => _el$148.value = premiumEmail());
|
|
8901
|
+
return _el$145;
|
|
8465
8902
|
})();
|
|
8466
8903
|
},
|
|
8467
8904
|
get children() {
|
|
@@ -8511,7 +8948,7 @@ const Settings = () => {
|
|
|
8511
8948
|
return premiumActive();
|
|
8512
8949
|
},
|
|
8513
8950
|
get fallback() {
|
|
8514
|
-
return _tmpl$
|
|
8951
|
+
return _tmpl$36();
|
|
8515
8952
|
},
|
|
8516
8953
|
get children() {
|
|
8517
8954
|
return [_tmpl$15(), createComponent(Show, {
|
|
@@ -8525,11 +8962,11 @@ const Settings = () => {
|
|
|
8525
8962
|
return vaultEntries();
|
|
8526
8963
|
},
|
|
8527
8964
|
children: (entry) => (() => {
|
|
8528
|
-
var _el$
|
|
8529
|
-
insert(_el$
|
|
8530
|
-
insert(_el$
|
|
8531
|
-
insert(_el$
|
|
8532
|
-
insert(_el$
|
|
8965
|
+
var _el$157 = _tmpl$37(), _el$158 = _el$157.firstChild, _el$159 = _el$158.firstChild, _el$160 = _el$159.nextSibling, _el$161 = _el$160.firstChild, _el$162 = _el$158.nextSibling;
|
|
8966
|
+
insert(_el$159, () => entry.label);
|
|
8967
|
+
insert(_el$160, () => entry.username, _el$161);
|
|
8968
|
+
insert(_el$160, () => entry.domainPattern, null);
|
|
8969
|
+
insert(_el$160, createComponent(Show, {
|
|
8533
8970
|
get when() {
|
|
8534
8971
|
return entry.useCount > 0;
|
|
8535
8972
|
},
|
|
@@ -8537,8 +8974,8 @@ const Settings = () => {
|
|
|
8537
8974
|
return [" ", "· Used ", memo(() => entry.useCount), "x"];
|
|
8538
8975
|
}
|
|
8539
8976
|
}), null);
|
|
8540
|
-
_el$
|
|
8541
|
-
return _el$
|
|
8977
|
+
_el$162.$$click = () => handleVaultRemove(entry.id);
|
|
8978
|
+
return _el$157;
|
|
8542
8979
|
})()
|
|
8543
8980
|
}));
|
|
8544
8981
|
return _el$80;
|
|
@@ -8595,42 +9032,155 @@ const Settings = () => {
|
|
|
8595
9032
|
return vaultMessage();
|
|
8596
9033
|
},
|
|
8597
9034
|
children: (msg) => (() => {
|
|
8598
|
-
var _el$
|
|
8599
|
-
insert(_el$
|
|
9035
|
+
var _el$163 = _tmpl$35();
|
|
9036
|
+
insert(_el$163, () => msg().text);
|
|
8600
9037
|
createRenderEffect((_p$) => {
|
|
8601
9038
|
var _v$12 = !!(msg().kind === "success"), _v$13 = !!(msg().kind === "error");
|
|
8602
|
-
_v$12 !== _p$.e && _el$
|
|
8603
|
-
_v$13 !== _p$.t && _el$
|
|
9039
|
+
_v$12 !== _p$.e && _el$163.classList.toggle("success", _p$.e = _v$12);
|
|
9040
|
+
_v$13 !== _p$.t && _el$163.classList.toggle("error", _p$.t = _v$13);
|
|
8604
9041
|
return _p$;
|
|
8605
9042
|
}, {
|
|
8606
9043
|
e: void 0,
|
|
8607
9044
|
t: void 0
|
|
8608
9045
|
});
|
|
8609
|
-
return _el$
|
|
9046
|
+
return _el$163;
|
|
8610
9047
|
})()
|
|
8611
9048
|
})];
|
|
8612
9049
|
}
|
|
8613
9050
|
}), null);
|
|
8614
|
-
_el$
|
|
8615
|
-
|
|
8616
|
-
|
|
9051
|
+
insert(_el$93, createComponent(Show, {
|
|
9052
|
+
get when() {
|
|
9053
|
+
return autofillProfiles().length > 0;
|
|
9054
|
+
},
|
|
9055
|
+
get children() {
|
|
9056
|
+
var _el$96 = _tmpl$16();
|
|
9057
|
+
insert(_el$96, createComponent(For, {
|
|
9058
|
+
get each() {
|
|
9059
|
+
return autofillProfiles();
|
|
9060
|
+
},
|
|
9061
|
+
children: (profile) => (() => {
|
|
9062
|
+
var _el$164 = _tmpl$38(), _el$165 = _el$164.firstChild, _el$166 = _el$165.firstChild, _el$167 = _el$166.nextSibling, _el$168 = _el$165.nextSibling, _el$169 = _el$168.firstChild, _el$170 = _el$169.nextSibling;
|
|
9063
|
+
insert(_el$166, () => profile.label);
|
|
9064
|
+
insert(_el$167, () => profile.firstName, null);
|
|
9065
|
+
insert(_el$167, (() => {
|
|
9066
|
+
var _c$2 = memo(() => !!profile.lastName);
|
|
9067
|
+
return () => _c$2() ? ` ${profile.lastName}` : "";
|
|
9068
|
+
})(), null);
|
|
9069
|
+
insert(_el$167, (() => {
|
|
9070
|
+
var _c$3 = memo(() => !!profile.email);
|
|
9071
|
+
return () => _c$3() ? ` · ${profile.email}` : "";
|
|
9072
|
+
})(), null);
|
|
9073
|
+
_el$169.$$click = () => handleAutofillFill(profile.id);
|
|
9074
|
+
_el$170.$$click = () => handleAutofillRemove(profile.id);
|
|
9075
|
+
return _el$164;
|
|
9076
|
+
})()
|
|
9077
|
+
}));
|
|
9078
|
+
return _el$96;
|
|
9079
|
+
}
|
|
9080
|
+
}), null);
|
|
9081
|
+
insert(_el$93, createComponent(Show, {
|
|
9082
|
+
get when() {
|
|
9083
|
+
return !autofillAdding();
|
|
9084
|
+
},
|
|
9085
|
+
get children() {
|
|
9086
|
+
var _el$97 = _tmpl$19();
|
|
9087
|
+
_el$97.$$click = () => {
|
|
9088
|
+
setAutofillAdding(true);
|
|
9089
|
+
setAutofillMessage(null);
|
|
9090
|
+
};
|
|
9091
|
+
return _el$97;
|
|
9092
|
+
}
|
|
9093
|
+
}), null);
|
|
9094
|
+
insert(_el$93, createComponent(Show, {
|
|
9095
|
+
get when() {
|
|
9096
|
+
return autofillAdding();
|
|
9097
|
+
},
|
|
9098
|
+
get children() {
|
|
9099
|
+
var _el$98 = _tmpl$20(), _el$99 = _el$98.firstChild, _el$100 = _el$99.nextSibling, _el$101 = _el$100.firstChild, _el$102 = _el$101.nextSibling, _el$103 = _el$100.nextSibling, _el$104 = _el$103.firstChild, _el$105 = _el$104.nextSibling, _el$106 = _el$103.nextSibling, _el$107 = _el$106.nextSibling, _el$108 = _el$107.nextSibling, _el$109 = _el$108.nextSibling, _el$110 = _el$109.firstChild, _el$111 = _el$110.nextSibling, _el$112 = _el$111.nextSibling, _el$113 = _el$109.nextSibling, _el$114 = _el$113.nextSibling, _el$115 = _el$114.firstChild, _el$116 = _el$115.nextSibling;
|
|
9100
|
+
_el$99.$$input = (e) => setAutofillLabel(e.currentTarget.value);
|
|
9101
|
+
setAttribute(_el$99, "spellcheck", false);
|
|
9102
|
+
_el$101.$$input = (e) => setAutofillFirstName(e.currentTarget.value);
|
|
9103
|
+
_el$102.$$input = (e) => setAutofillLastName(e.currentTarget.value);
|
|
9104
|
+
_el$104.$$input = (e) => setAutofillEmail(e.currentTarget.value);
|
|
9105
|
+
setAttribute(_el$104, "spellcheck", false);
|
|
9106
|
+
_el$105.$$input = (e) => setAutofillPhone(e.currentTarget.value);
|
|
9107
|
+
_el$106.$$input = (e) => setAutofillOrg(e.currentTarget.value);
|
|
9108
|
+
_el$107.$$input = (e) => setAutofillAddr1(e.currentTarget.value);
|
|
9109
|
+
_el$108.$$input = (e) => setAutofillAddr2(e.currentTarget.value);
|
|
9110
|
+
_el$110.$$input = (e) => setAutofillCity(e.currentTarget.value);
|
|
9111
|
+
_el$111.$$input = (e) => setAutofillState(e.currentTarget.value);
|
|
9112
|
+
_el$112.$$input = (e) => setAutofillZip(e.currentTarget.value);
|
|
9113
|
+
_el$113.$$input = (e) => setAutofillCountry(e.currentTarget.value);
|
|
9114
|
+
_el$115.$$click = handleAutofillAdd;
|
|
9115
|
+
_el$116.$$click = () => {
|
|
9116
|
+
setAutofillAdding(false);
|
|
9117
|
+
setAutofillLabel("");
|
|
9118
|
+
setAutofillFirstName("");
|
|
9119
|
+
setAutofillLastName("");
|
|
9120
|
+
setAutofillEmail("");
|
|
9121
|
+
setAutofillPhone("");
|
|
9122
|
+
setAutofillOrg("");
|
|
9123
|
+
setAutofillAddr1("");
|
|
9124
|
+
setAutofillAddr2("");
|
|
9125
|
+
setAutofillCity("");
|
|
9126
|
+
setAutofillState("");
|
|
9127
|
+
setAutofillZip("");
|
|
9128
|
+
setAutofillCountry("");
|
|
9129
|
+
};
|
|
9130
|
+
createRenderEffect(() => _el$99.value = autofillLabel());
|
|
9131
|
+
createRenderEffect(() => _el$101.value = autofillFirstName());
|
|
9132
|
+
createRenderEffect(() => _el$102.value = autofillLastName());
|
|
9133
|
+
createRenderEffect(() => _el$104.value = autofillEmail());
|
|
9134
|
+
createRenderEffect(() => _el$105.value = autofillPhone());
|
|
9135
|
+
createRenderEffect(() => _el$106.value = autofillOrg());
|
|
9136
|
+
createRenderEffect(() => _el$107.value = autofillAddr1());
|
|
9137
|
+
createRenderEffect(() => _el$108.value = autofillAddr2());
|
|
9138
|
+
createRenderEffect(() => _el$110.value = autofillCity());
|
|
9139
|
+
createRenderEffect(() => _el$111.value = autofillState());
|
|
9140
|
+
createRenderEffect(() => _el$112.value = autofillZip());
|
|
9141
|
+
createRenderEffect(() => _el$113.value = autofillCountry());
|
|
9142
|
+
return _el$98;
|
|
9143
|
+
}
|
|
9144
|
+
}), null);
|
|
9145
|
+
insert(_el$93, createComponent(Show, {
|
|
9146
|
+
get when() {
|
|
9147
|
+
return autofillMessage();
|
|
9148
|
+
},
|
|
9149
|
+
children: (msg) => (() => {
|
|
9150
|
+
var _el$171 = _tmpl$35();
|
|
9151
|
+
insert(_el$171, () => msg().text);
|
|
9152
|
+
createRenderEffect((_p$) => {
|
|
9153
|
+
var _v$14 = !!(msg().kind === "success"), _v$15 = !!(msg().kind === "error");
|
|
9154
|
+
_v$14 !== _p$.e && _el$171.classList.toggle("success", _p$.e = _v$14);
|
|
9155
|
+
_v$15 !== _p$.t && _el$171.classList.toggle("error", _p$.t = _v$15);
|
|
9156
|
+
return _p$;
|
|
9157
|
+
}, {
|
|
9158
|
+
e: void 0,
|
|
9159
|
+
t: void 0
|
|
9160
|
+
});
|
|
9161
|
+
return _el$171;
|
|
9162
|
+
})()
|
|
9163
|
+
}), null);
|
|
9164
|
+
_el$120.$$click = () => setTelemetryEnabled(!telemetryEnabled());
|
|
9165
|
+
_el$122.$$click = handleSave;
|
|
9166
|
+
addEventListener(_el$123, "click", closeSettings, true);
|
|
8617
9167
|
insert(_el$2, createComponent(Show, {
|
|
8618
9168
|
get when() {
|
|
8619
9169
|
return status();
|
|
8620
9170
|
},
|
|
8621
9171
|
children: (currentStatus) => (() => {
|
|
8622
|
-
var _el$
|
|
8623
|
-
insert(_el$
|
|
9172
|
+
var _el$172 = _tmpl$35();
|
|
9173
|
+
insert(_el$172, () => currentStatus().text);
|
|
8624
9174
|
createRenderEffect((_p$) => {
|
|
8625
|
-
var _v$
|
|
8626
|
-
_v$
|
|
8627
|
-
_v$
|
|
9175
|
+
var _v$16 = !!(currentStatus().kind === "success"), _v$17 = !!(currentStatus().kind === "error");
|
|
9176
|
+
_v$16 !== _p$.e && _el$172.classList.toggle("success", _p$.e = _v$16);
|
|
9177
|
+
_v$17 !== _p$.t && _el$172.classList.toggle("error", _p$.t = _v$17);
|
|
8628
9178
|
return _p$;
|
|
8629
9179
|
}, {
|
|
8630
9180
|
e: void 0,
|
|
8631
9181
|
t: void 0
|
|
8632
9182
|
});
|
|
8633
|
-
return _el$
|
|
9183
|
+
return _el$172;
|
|
8634
9184
|
})()
|
|
8635
9185
|
}), null);
|
|
8636
9186
|
createRenderEffect((_p$) => {
|
|
@@ -8642,8 +9192,8 @@ const Settings = () => {
|
|
|
8642
9192
|
_v$5 !== _p$.i && setAttribute(_el$39, "aria-checked", _p$.i = _v$5);
|
|
8643
9193
|
_v$6 !== _p$.n && _el$43.classList.toggle("on", _p$.n = _v$6);
|
|
8644
9194
|
_v$7 !== _p$.s && setAttribute(_el$43, "aria-checked", _p$.s = _v$7);
|
|
8645
|
-
_v$8 !== _p$.h && _el$
|
|
8646
|
-
_v$9 !== _p$.r && setAttribute(_el$
|
|
9195
|
+
_v$8 !== _p$.h && _el$120.classList.toggle("on", _p$.h = _v$8);
|
|
9196
|
+
_v$9 !== _p$.r && setAttribute(_el$120, "aria-checked", _p$.r = _v$9);
|
|
8647
9197
|
return _p$;
|
|
8648
9198
|
}, {
|
|
8649
9199
|
e: void 0,
|
|
@@ -8661,7 +9211,7 @@ const Settings = () => {
|
|
|
8661
9211
|
createRenderEffect(() => _el$30.value = obsidianVaultPath());
|
|
8662
9212
|
createRenderEffect(() => _el$33.value = agentTranscriptMode());
|
|
8663
9213
|
return _el$;
|
|
8664
|
-
})(), _tmpl$
|
|
9214
|
+
})(), _tmpl$22()];
|
|
8665
9215
|
}
|
|
8666
9216
|
});
|
|
8667
9217
|
};
|
|
@@ -8912,6 +9462,7 @@ const App = () => {
|
|
|
8912
9462
|
}
|
|
8913
9463
|
};
|
|
8914
9464
|
onMount(() => {
|
|
9465
|
+
window.vessel.ui.rendererReady(view);
|
|
8915
9466
|
if (view !== "chrome") return;
|
|
8916
9467
|
const cleanupKeys = setupKeybindings({
|
|
8917
9468
|
openCommandBar,
|