@quanta-intellect/vessel-browser 0.1.53 → 0.1.56

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.
@@ -1697,7 +1697,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
1697
1697
  }
1698
1698
  return "idle";
1699
1699
  }
1700
- var _tmpl$$d = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$8 = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list><button class=tab-new data-tooltip="New Tab">+`), _tmpl$4$8 = /* @__PURE__ */ template(`<div role=tab><span class=tab-title></span><button class=tab-close>×`), _tmpl$5$6 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$6$6 = /* @__PURE__ */ template(`<span class=tab-loading>`);
1700
+ 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
1701
  const TAB_CLOSE_MS = 200;
1702
1702
  function stringToHue(str) {
1703
1703
  let hash = 0;
@@ -1764,13 +1764,13 @@ const TabBar = () => {
1764
1764
  }, TAB_CLOSE_MS);
1765
1765
  };
1766
1766
  return (() => {
1767
- var _el$3 = _tmpl$3$8(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
1767
+ var _el$3 = _tmpl$3$9(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
1768
1768
  insert(_el$4, createComponent(For, {
1769
1769
  get each() {
1770
1770
  return tabs2();
1771
1771
  },
1772
1772
  children: (tab) => (() => {
1773
- var _el$6 = _tmpl$4$8(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
1773
+ var _el$6 = _tmpl$4$9(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
1774
1774
  _el$6.addEventListener("auxclick", (e) => {
1775
1775
  if (e.button === 1) handleClose(tab.id);
1776
1776
  });
@@ -1788,12 +1788,12 @@ const TabBar = () => {
1788
1788
  }), _el$7);
1789
1789
  insert(_el$6, (() => {
1790
1790
  var _c$ = memo(() => !!modelActiveTabIds().has(tab.id));
1791
- return () => _c$() && _tmpl$5$6();
1791
+ return () => _c$() && _tmpl$5$7();
1792
1792
  })(), _el$7);
1793
1793
  insert(_el$7, () => tab.title || "New Tab");
1794
1794
  insert(_el$6, (() => {
1795
1795
  var _c$2 = memo(() => !!tab.isLoading);
1796
- return () => _c$2() && _tmpl$6$6();
1796
+ return () => _c$2() && _tmpl$6$7();
1797
1797
  })(), _el$8);
1798
1798
  _el$8.$$click = (e) => {
1799
1799
  e.stopPropagation();
@@ -1905,7 +1905,121 @@ function useUI() {
1905
1905
  }
1906
1906
  };
1907
1907
  }
1908
- var _tmpl$$c = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$2$a = /* @__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>`);
1908
+ function normalizePageUrl(rawUrl) {
1909
+ try {
1910
+ const url = new URL(rawUrl);
1911
+ const pathname = url.pathname.replace(/\/+$/, "") || "/";
1912
+ return `${url.origin}${pathname}`.toLowerCase();
1913
+ } catch {
1914
+ return rawUrl.trim().replace(/\/+$/, "").toLowerCase();
1915
+ }
1916
+ }
1917
+ const SNAPSHOT_QUERY_KEYS = /* @__PURE__ */ new Set([
1918
+ "q",
1919
+ "query",
1920
+ "search",
1921
+ "s",
1922
+ "term",
1923
+ "keyword",
1924
+ "keywords",
1925
+ "page",
1926
+ "p",
1927
+ "offset",
1928
+ "cursor",
1929
+ "sort",
1930
+ "order",
1931
+ "filter",
1932
+ "filters",
1933
+ "category",
1934
+ "categories",
1935
+ "tag",
1936
+ "tags",
1937
+ "tab",
1938
+ "view"
1939
+ ]);
1940
+ const TRACKING_QUERY_KEYS = /* @__PURE__ */ new Set([
1941
+ "fbclid",
1942
+ "gclid",
1943
+ "mc_cid",
1944
+ "mc_eid",
1945
+ "ref",
1946
+ "source",
1947
+ "si"
1948
+ ]);
1949
+ function normalizeQueryValue(value) {
1950
+ return value.replace(/\s+/g, " ").trim().toLowerCase();
1951
+ }
1952
+ function serializeSnapshotParams(params) {
1953
+ return params.map(
1954
+ ([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
1955
+ ).join("&");
1956
+ }
1957
+ function normalizeSnapshotParams(entries2, pathname) {
1958
+ return Array.from(entries2).filter(
1959
+ ([key, value]) => shouldKeepSnapshotQueryParam(pathname, key, value)
1960
+ ).map(([key, value]) => [
1961
+ key.trim().toLowerCase(),
1962
+ normalizeQueryValue(value)
1963
+ ]).sort(
1964
+ ([keyA, valueA], [keyB, valueB]) => keyA === keyB ? valueA.localeCompare(valueB) : keyA.localeCompare(keyB)
1965
+ );
1966
+ }
1967
+ function shouldKeepSnapshotQueryParam(pathname, rawKey, value) {
1968
+ const key = rawKey.trim().toLowerCase();
1969
+ if (!key || !value.trim()) return false;
1970
+ if (key.startsWith("utm_")) return false;
1971
+ if (TRACKING_QUERY_KEYS.has(key)) return false;
1972
+ if (SNAPSHOT_QUERY_KEYS.has(key)) return true;
1973
+ return /\/(search|results|browse|discover|find|category|tag|topics?|collections?|list)(\/|$)/i.test(
1974
+ pathname
1975
+ );
1976
+ }
1977
+ function buildSnapshotHashKey(hash, pathname) {
1978
+ let raw = hash.replace(/^#/, "").trim();
1979
+ if (!raw) return null;
1980
+ let bang = false;
1981
+ if (raw.startsWith("!")) {
1982
+ bang = true;
1983
+ raw = raw.slice(1).trim();
1984
+ }
1985
+ if (raw.startsWith("/")) {
1986
+ const [routePart, queryPart = ""] = raw.split("?");
1987
+ const route = routePart.replace(/\/+$/, "") || "/";
1988
+ const params = normalizeSnapshotParams(
1989
+ new URLSearchParams(queryPart).entries(),
1990
+ pathname
1991
+ );
1992
+ const query = serializeSnapshotParams(params);
1993
+ return `#${bang ? "!" : ""}${route.toLowerCase()}${query ? `?${query}` : ""}`;
1994
+ }
1995
+ const queryLike = raw.startsWith("?") ? raw.slice(1) : raw;
1996
+ if (queryLike.includes("=")) {
1997
+ const params = normalizeSnapshotParams(
1998
+ new URLSearchParams(queryLike).entries(),
1999
+ pathname
2000
+ );
2001
+ if (params.length === 0) return null;
2002
+ const query = serializeSnapshotParams(params);
2003
+ return `#${bang ? "!" : ""}?${query}`;
2004
+ }
2005
+ return null;
2006
+ }
2007
+ function buildPageSnapshotKey(rawUrl) {
2008
+ try {
2009
+ const url = new URL(rawUrl);
2010
+ const pathname = url.pathname.replace(/\/+$/, "") || "/";
2011
+ const params = normalizeSnapshotParams(url.searchParams.entries(), pathname);
2012
+ const query = serializeSnapshotParams(params);
2013
+ const hash = buildSnapshotHashKey(url.hash, pathname);
2014
+ return `${url.origin.toLowerCase()}${pathname.toLowerCase()}${query ? `?${query}` : ""}${hash || ""}`;
2015
+ } catch {
2016
+ return normalizePageUrl(rawUrl);
2017
+ }
2018
+ }
2019
+ function matchesPageSnapshotUrl(left, right) {
2020
+ return buildPageSnapshotKey(left) === buildPageSnapshotKey(right);
2021
+ }
2022
+ 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>&times;`), _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
2023
  const AddressBar = () => {
1910
2024
  const {
1911
2025
  activeTab,
@@ -1929,12 +2043,84 @@ const AddressBar = () => {
1929
2043
  const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
1930
2044
  const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
1931
2045
  const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
2046
+ const [pageDiff, setPageDiff] = createSignal(null);
2047
+ const [diffExpanded, setDiffExpanded] = createSignal(false);
2048
+ let diffCollapseTimer = null;
2049
+ const showIncomingDiff = (diff) => {
2050
+ setPageDiff(diff);
2051
+ setDiffExpanded(true);
2052
+ if (diffCollapseTimer) clearTimeout(diffCollapseTimer);
2053
+ diffCollapseTimer = setTimeout(() => {
2054
+ setDiffExpanded(false);
2055
+ diffCollapseTimer = null;
2056
+ }, 8e3);
2057
+ };
2058
+ const formatRelativeTime = (isoDate) => {
2059
+ const diff = Date.now() - new Date(isoDate).getTime();
2060
+ const mins = Math.floor(diff / 6e4);
2061
+ if (mins < 1) return "just now";
2062
+ if (mins < 60) return `${mins}m ago`;
2063
+ const hours = Math.floor(mins / 60);
2064
+ if (hours < 24) return `${hours}h ago`;
2065
+ const days = Math.floor(hours / 24);
2066
+ if (days < 7) return `${days}d ago`;
2067
+ return new Date(isoDate).toLocaleDateString();
2068
+ };
2069
+ const formatElapsed = (startIso, endIso) => {
2070
+ const elapsedMs = Math.max(0, new Date(endIso).getTime() - new Date(startIso).getTime());
2071
+ const secs = Math.round(elapsedMs / 1e3);
2072
+ if (secs < 60) return `${secs}s`;
2073
+ const mins = Math.round(secs / 60);
2074
+ if (mins < 60) return `${mins}m`;
2075
+ const hours = Math.round(mins / 60);
2076
+ return `${hours}h`;
2077
+ };
2078
+ createEffect(() => {
2079
+ const unsubscribe = window.vessel.pageDiff.onChanged((diff) => {
2080
+ const tab = activeTab();
2081
+ if (!tab) return;
2082
+ if (!matchesPageSnapshotUrl(tab.url, diff.url)) return;
2083
+ showIncomingDiff(diff);
2084
+ });
2085
+ onCleanup(() => {
2086
+ unsubscribe();
2087
+ if (diffCollapseTimer) {
2088
+ clearTimeout(diffCollapseTimer);
2089
+ diffCollapseTimer = null;
2090
+ }
2091
+ });
2092
+ });
1932
2093
  createEffect(() => {
1933
2094
  const tab = activeTab();
1934
2095
  if (tab && !inputRef?.matches(":focus")) {
1935
2096
  setInputValue(tab.url === "about:blank" ? "" : tab.url);
1936
2097
  }
1937
2098
  });
2099
+ createEffect(() => {
2100
+ const tab = activeTab();
2101
+ if (!tab) {
2102
+ setPageDiff(null);
2103
+ setDiffExpanded(false);
2104
+ return;
2105
+ }
2106
+ let cancelled = false;
2107
+ void window.vessel.pageDiff.get().then((diff) => {
2108
+ if (cancelled) return;
2109
+ if (!diff || !matchesPageSnapshotUrl(tab.url, diff.url)) {
2110
+ setPageDiff(null);
2111
+ setDiffExpanded(false);
2112
+ return;
2113
+ }
2114
+ setPageDiff(diff);
2115
+ }).catch(() => {
2116
+ if (cancelled) return;
2117
+ setPageDiff(null);
2118
+ setDiffExpanded(false);
2119
+ });
2120
+ onCleanup(() => {
2121
+ cancelled = true;
2122
+ });
2123
+ });
1938
2124
  const handleSubmit = (e) => {
1939
2125
  e.preventDefault();
1940
2126
  const val = inputValue().trim();
@@ -1943,10 +2129,11 @@ const AddressBar = () => {
1943
2129
  inputRef?.blur();
1944
2130
  }
1945
2131
  };
2132
+ const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
1946
2133
  return (() => {
1947
- var _el$ = _tmpl$2$a(), _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$10 = _el$6.nextSibling, _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling;
1948
- _el$13.firstChild;
1949
- var _el$16 = _el$13.nextSibling;
2134
+ 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;
2135
+ _el$27.firstChild;
2136
+ var _el$30 = _el$27.nextSibling;
1950
2137
  addEventListener(_el$3, "click", goBack, true);
1951
2138
  addEventListener(_el$4, "click", goForward, true);
1952
2139
  addEventListener(_el$5, "click", reload, true);
@@ -1957,31 +2144,166 @@ const AddressBar = () => {
1957
2144
  typeof _ref$ === "function" ? use(_ref$, _el$8) : inputRef = _el$8;
1958
2145
  setAttribute(_el$8, "spellcheck", false);
1959
2146
  insert(_el$1, () => agentStatusMessage() || (agentPresence() === "active" ? "Agent Active" : agentPresence() === "recent" ? "Agent Connected" : "Agent Offline"));
1960
- _el$11.$$click = () => window.vessel.content.toggleReader();
1961
- addEventListener(_el$12, "click", toggleDevTools, true);
1962
- addEventListener(_el$13, "click", toggleSidebar, true);
1963
- insert(_el$13, createComponent(Show, {
2147
+ insert(_el$6, createComponent(Show, {
2148
+ get when() {
2149
+ return pageDiff();
2150
+ },
2151
+ get children() {
2152
+ var _el$10 = _tmpl$$c();
2153
+ _el$10.$$click = () => setDiffExpanded(!diffExpanded());
2154
+ return _el$10;
2155
+ }
2156
+ }), null);
2157
+ insert(_el$, createComponent(Show, {
2158
+ get when() {
2159
+ return memo(() => !!pageDiff())() && diffExpanded();
2160
+ },
2161
+ get children() {
2162
+ var _el$11 = _tmpl$4$8(), _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild;
2163
+ _el$14.firstChild;
2164
+ var _el$21 = _el$13.nextSibling;
2165
+ insert(_el$14, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
2166
+ insert(_el$13, createComponent(Show, {
2167
+ get when() {
2168
+ return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
2169
+ },
2170
+ get children() {
2171
+ var _el$16 = _tmpl$2$a(), _el$17 = _el$16.firstChild, _el$20 = _el$17.nextSibling;
2172
+ _el$20.nextSibling;
2173
+ insert(_el$16, () => pageDiff().burstCount, _el$20);
2174
+ insert(_el$16, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
2175
+ return _el$16;
2176
+ }
2177
+ }), null);
2178
+ _el$21.$$click = () => setDiffExpanded(false);
2179
+ insert(_el$11, createComponent(Show, {
2180
+ get when() {
2181
+ return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
2182
+ },
2183
+ get children() {
2184
+ var _el$22 = _tmpl$3$8();
2185
+ _el$22.firstChild;
2186
+ insert(_el$22, createComponent(For, {
2187
+ get each() {
2188
+ return pageDiff().recentBursts;
2189
+ },
2190
+ children: (burst) => (() => {
2191
+ var _el$31 = _tmpl$7$4(), _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling;
2192
+ insert(_el$32, () => formatRelativeTime(burst.detectedAt));
2193
+ insert(_el$33, () => burst.summary);
2194
+ return _el$31;
2195
+ })()
2196
+ }), null);
2197
+ return _el$22;
2198
+ }
2199
+ }), null);
2200
+ insert(_el$11, createComponent(For, {
2201
+ get each() {
2202
+ return pageDiff().changes;
2203
+ },
2204
+ children: (change) => (() => {
2205
+ var _el$34 = _tmpl$11$4(), _el$35 = _el$34.firstChild, _el$36 = _el$35.firstChild, _el$37 = _el$36.nextSibling;
2206
+ insert(_el$36, () => formatSectionLabel(change.section));
2207
+ insert(_el$37, () => change.summary);
2208
+ insert(_el$34, createComponent(Show, {
2209
+ get when() {
2210
+ return change.before || change.after;
2211
+ },
2212
+ get children() {
2213
+ var _el$38 = _tmpl$0$4();
2214
+ insert(_el$38, createComponent(Show, {
2215
+ get when() {
2216
+ return change.before;
2217
+ },
2218
+ get children() {
2219
+ var _el$39 = _tmpl$8$4(), _el$40 = _el$39.firstChild, _el$41 = _el$40.nextSibling;
2220
+ insert(_el$41, () => change.before);
2221
+ return _el$39;
2222
+ }
2223
+ }), null);
2224
+ insert(_el$38, createComponent(Show, {
2225
+ get when() {
2226
+ return change.after;
2227
+ },
2228
+ get children() {
2229
+ var _el$42 = _tmpl$9$4(), _el$43 = _el$42.firstChild, _el$44 = _el$43.nextSibling;
2230
+ insert(_el$44, () => change.after);
2231
+ return _el$42;
2232
+ }
2233
+ }), null);
2234
+ return _el$38;
2235
+ }
2236
+ }), null);
2237
+ insert(_el$34, createComponent(Show, {
2238
+ get when() {
2239
+ return change.addedItems?.length;
2240
+ },
2241
+ get children() {
2242
+ var _el$45 = _tmpl$1$4(), _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling;
2243
+ insert(_el$47, createComponent(For, {
2244
+ get each() {
2245
+ return change.addedItems;
2246
+ },
2247
+ children: (item) => (() => {
2248
+ var _el$51 = _tmpl$12$4();
2249
+ insert(_el$51, item);
2250
+ return _el$51;
2251
+ })()
2252
+ }));
2253
+ return _el$45;
2254
+ }
2255
+ }), null);
2256
+ insert(_el$34, createComponent(Show, {
2257
+ get when() {
2258
+ return change.removedItems?.length;
2259
+ },
2260
+ get children() {
2261
+ var _el$48 = _tmpl$10$4(), _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling;
2262
+ insert(_el$50, createComponent(For, {
2263
+ get each() {
2264
+ return change.removedItems;
2265
+ },
2266
+ children: (item) => (() => {
2267
+ var _el$52 = _tmpl$12$4();
2268
+ insert(_el$52, item);
2269
+ return _el$52;
2270
+ })()
2271
+ }));
2272
+ return _el$48;
2273
+ }
2274
+ }), null);
2275
+ createRenderEffect(() => className(_el$34, `page-diff-item page-diff-${change.kind}`));
2276
+ return _el$34;
2277
+ })()
2278
+ }), null);
2279
+ return _el$11;
2280
+ }
2281
+ }), _el$24);
2282
+ _el$25.$$click = () => window.vessel.content.toggleReader();
2283
+ addEventListener(_el$26, "click", toggleDevTools, true);
2284
+ addEventListener(_el$27, "click", toggleSidebar, true);
2285
+ insert(_el$27, createComponent(Show, {
1964
2286
  get when() {
1965
2287
  return pendingApprovalCount() > 0;
1966
2288
  },
1967
2289
  get children() {
1968
- var _el$15 = _tmpl$$c();
1969
- insert(_el$15, pendingApprovalCount);
1970
- createRenderEffect(() => setAttribute(_el$15, "aria-label", `${pendingApprovalCount()} pending`));
1971
- return _el$15;
2290
+ var _el$29 = _tmpl$5$6();
2291
+ insert(_el$29, pendingApprovalCount);
2292
+ createRenderEffect(() => setAttribute(_el$29, "aria-label", `${pendingApprovalCount()} pending`));
2293
+ return _el$29;
1972
2294
  }
1973
2295
  }), null);
1974
- addEventListener(_el$16, "click", openSettings, true);
2296
+ addEventListener(_el$30, "click", openSettings, true);
1975
2297
  createRenderEffect((_p$) => {
1976
2298
  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
2299
  _v$ !== _p$.e && (_el$3.disabled = _p$.e = _v$);
1978
2300
  _v$2 !== _p$.t && (_el$4.disabled = _p$.t = _v$2);
1979
2301
  _v$3 !== _p$.a && className(_el$9, _p$.a = _v$3);
1980
2302
  _v$4 !== _p$.o && setAttribute(_el$9, "title", _p$.o = _v$4);
1981
- _v$5 !== _p$.i && _el$11.classList.toggle("active", _p$.i = _v$5);
1982
- _v$6 !== _p$.n && _el$12.classList.toggle("active", _p$.n = _v$6);
1983
- _v$7 !== _p$.s && _el$13.classList.toggle("has-approvals", _p$.s = _v$7);
1984
- _v$8 !== _p$.h && setAttribute(_el$13, "title", _p$.h = _v$8);
2303
+ _v$5 !== _p$.i && _el$25.classList.toggle("active", _p$.i = _v$5);
2304
+ _v$6 !== _p$.n && _el$26.classList.toggle("active", _p$.n = _v$6);
2305
+ _v$7 !== _p$.s && _el$27.classList.toggle("has-approvals", _p$.s = _v$7);
2306
+ _v$8 !== _p$.h && setAttribute(_el$27, "title", _p$.h = _v$8);
1985
2307
  return _p$;
1986
2308
  }, {
1987
2309
  e: void 0,
@@ -4650,7 +4972,7 @@ function renderKitPrompt(kit, values) {
4650
4972
  (_, key) => values[key] ?? ""
4651
4973
  );
4652
4974
  }
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 &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$1 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$1 = /* @__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>`);
4975
+ 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 &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$2 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$2 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$2 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$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
4976
  const ICON_MAP = {
4655
4977
  BookOpen: book_open_default,
4656
4978
  Tag: tag_default,
@@ -5237,7 +5559,7 @@ const AutomationTab = (props) => {
5237
5559
  return selectedKit().inputs;
5238
5560
  },
5239
5561
  children: (input) => (() => {
5240
- var _el$110 = _tmpl$37$1(), _el$111 = _el$110.firstChild;
5562
+ var _el$110 = _tmpl$37$2(), _el$111 = _el$110.firstChild;
5241
5563
  insert(_el$111, () => input.label, null);
5242
5564
  insert(_el$111, createComponent(Show, {
5243
5565
  get when() {
@@ -5253,7 +5575,7 @@ const AutomationTab = (props) => {
5253
5575
  },
5254
5576
  get fallback() {
5255
5577
  return (() => {
5256
- var _el$115 = _tmpl$38$1();
5578
+ var _el$115 = _tmpl$38$2();
5257
5579
  _el$115.$$input = (e) => setField(input.key, e.currentTarget.value);
5258
5580
  createRenderEffect((_p$) => {
5259
5581
  var _v$8 = input.type === "url" ? "url" : input.type === "number" ? "number" : "text", _v$9 = input.placeholder ?? "";
@@ -5281,7 +5603,7 @@ const AutomationTab = (props) => {
5281
5603
  return input.hint;
5282
5604
  },
5283
5605
  get children() {
5284
- var _el$114 = _tmpl$36$1();
5606
+ var _el$114 = _tmpl$36$2();
5285
5607
  insert(_el$114, () => input.hint);
5286
5608
  return _el$114;
5287
5609
  }
@@ -5490,7 +5812,7 @@ const AutomationTab = (props) => {
5490
5812
  };
5491
5813
  delegateEvents(["click", "input", "keydown", "contextmenu"]);
5492
5814
  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>×`);
5815
+ 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
5816
  const UNSORTED_FOLDER = {
5495
5817
  id: "unsorted",
5496
5818
  name: "Unsorted",
@@ -6162,7 +6484,7 @@ ${contextBlock}` : contextBlock);
6162
6484
  return filteredGroupedBookmarks();
6163
6485
  },
6164
6486
  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;
6487
+ 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
6488
  _el$123.$$keydown = (e) => {
6167
6489
  if (e.key === "Enter" || e.key === " ") {
6168
6490
  e.preventDefault();
@@ -6235,7 +6557,7 @@ ${contextBlock}` : contextBlock);
6235
6557
  return editingFolderId() === folder.id;
6236
6558
  },
6237
6559
  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;
6560
+ 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
6561
  _el$145.$$input = (e) => setEditingFolderName(e.currentTarget.value);
6240
6562
  _el$146.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
6241
6563
  _el$147.$$click = () => void handleRenameFolder(folder.id);
@@ -6266,7 +6588,7 @@ ${contextBlock}` : contextBlock);
6266
6588
  return _tmpl$40();
6267
6589
  },
6268
6590
  get children() {
6269
- var _el$149 = _tmpl$37();
6591
+ var _el$149 = _tmpl$37$1();
6270
6592
  insert(_el$149, createComponent(For, {
6271
6593
  get each() {
6272
6594
  return folder.items;
@@ -7196,7 +7518,7 @@ const PROVIDERS = {
7196
7518
  apiKeyHint: "Optional — only if your endpoint requires authentication"
7197
7519
  }
7198
7520
  };
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>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=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:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-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>
7521
+ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=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:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-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
7522
  .settings-panel {
7201
7523
  width: min(440px, calc(100vw - 32px));
7202
7524
  max-height: calc(100vh - 48px);
@@ -7730,7 +8052,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
7730
8052
  justify-content: flex-end;
7731
8053
  margin-top: 4px;
7732
8054
  }
7733
- `), _tmpl$21 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$22 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$23 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$24 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$25 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$26 = /* @__PURE__ */ template(`<div>`), _tmpl$27 = /* @__PURE__ */ template(`<option>`), _tmpl$28 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$29 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$30 = /* @__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$31 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$32 = /* @__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$33 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$34 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$35 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; </span></div><button class=vault-entry-remove title="Remove credential">&times;`);
8055
+ `), _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> &middot; </span></div><button class=vault-entry-remove title="Remove credential">&times;`), _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">&times;`);
7734
8056
  const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
7735
8057
  id: p.id,
7736
8058
  name: p.name,
@@ -7770,6 +8092,103 @@ const Settings = () => {
7770
8092
  const [vaultNewTotp, setVaultNewTotp] = createSignal("");
7771
8093
  const [vaultNewNotes, setVaultNewNotes] = createSignal("");
7772
8094
  const [vaultMessage, setVaultMessage] = createSignal(null);
8095
+ const [autofillProfiles, setAutofillProfiles] = createSignal([]);
8096
+ const [autofillAdding, setAutofillAdding] = createSignal(false);
8097
+ const [autofillLabel, setAutofillLabel] = createSignal("");
8098
+ const [autofillFirstName, setAutofillFirstName] = createSignal("");
8099
+ const [autofillLastName, setAutofillLastName] = createSignal("");
8100
+ const [autofillEmail, setAutofillEmail] = createSignal("");
8101
+ const [autofillPhone, setAutofillPhone] = createSignal("");
8102
+ const [autofillOrg, setAutofillOrg] = createSignal("");
8103
+ const [autofillAddr1, setAutofillAddr1] = createSignal("");
8104
+ const [autofillAddr2, setAutofillAddr2] = createSignal("");
8105
+ const [autofillCity, setAutofillCity] = createSignal("");
8106
+ const [autofillState, setAutofillState] = createSignal("");
8107
+ const [autofillZip, setAutofillZip] = createSignal("");
8108
+ const [autofillCountry, setAutofillCountry] = createSignal("");
8109
+ const [autofillMessage, setAutofillMessage] = createSignal(null);
8110
+ const loadAutofillProfiles = async () => {
8111
+ try {
8112
+ const profiles = await window.vessel.autofill.list();
8113
+ setAutofillProfiles(profiles);
8114
+ } catch {
8115
+ }
8116
+ };
8117
+ const handleAutofillAdd = async () => {
8118
+ if (!autofillLabel().trim()) {
8119
+ setAutofillMessage({
8120
+ kind: "error",
8121
+ text: "Profile name is required."
8122
+ });
8123
+ return;
8124
+ }
8125
+ try {
8126
+ await window.vessel.autofill.add({
8127
+ label: autofillLabel().trim(),
8128
+ firstName: autofillFirstName().trim(),
8129
+ lastName: autofillLastName().trim(),
8130
+ email: autofillEmail().trim(),
8131
+ phone: autofillPhone().trim(),
8132
+ organization: autofillOrg().trim(),
8133
+ addressLine1: autofillAddr1().trim(),
8134
+ addressLine2: autofillAddr2().trim(),
8135
+ city: autofillCity().trim(),
8136
+ state: autofillState().trim(),
8137
+ postalCode: autofillZip().trim(),
8138
+ country: autofillCountry().trim()
8139
+ });
8140
+ setAutofillLabel("");
8141
+ setAutofillFirstName("");
8142
+ setAutofillLastName("");
8143
+ setAutofillEmail("");
8144
+ setAutofillPhone("");
8145
+ setAutofillOrg("");
8146
+ setAutofillAddr1("");
8147
+ setAutofillAddr2("");
8148
+ setAutofillCity("");
8149
+ setAutofillState("");
8150
+ setAutofillZip("");
8151
+ setAutofillCountry("");
8152
+ setAutofillAdding(false);
8153
+ setAutofillMessage({
8154
+ kind: "success",
8155
+ text: "Profile saved."
8156
+ });
8157
+ setTimeout(() => setAutofillMessage(null), 3e3);
8158
+ await loadAutofillProfiles();
8159
+ } catch (err) {
8160
+ setAutofillMessage({
8161
+ kind: "error",
8162
+ text: String(err)
8163
+ });
8164
+ }
8165
+ };
8166
+ const handleAutofillRemove = async (id) => {
8167
+ await window.vessel.autofill.delete(id);
8168
+ await loadAutofillProfiles();
8169
+ };
8170
+ const handleAutofillFill = async (id) => {
8171
+ try {
8172
+ const result = await window.vessel.autofill.fill(id);
8173
+ if (result.filled > 0) {
8174
+ setAutofillMessage({
8175
+ kind: "success",
8176
+ text: `Filled ${result.filled} field${result.filled > 1 ? "s" : ""}.`
8177
+ });
8178
+ } else {
8179
+ setAutofillMessage({
8180
+ kind: "error",
8181
+ text: "No matching fields found on this page."
8182
+ });
8183
+ }
8184
+ setTimeout(() => setAutofillMessage(null), 3e3);
8185
+ } catch (err) {
8186
+ setAutofillMessage({
8187
+ kind: "error",
8188
+ text: String(err)
8189
+ });
8190
+ }
8191
+ };
7773
8192
  const FIRST_RUN_KEY = "vessel.onboarding.dismissed";
7774
8193
  const [showWelcome, setShowWelcome] = createSignal(!localStorage.getItem(FIRST_RUN_KEY));
7775
8194
  const dismissWelcome = () => {
@@ -7960,6 +8379,7 @@ const Settings = () => {
7960
8379
  };
7961
8380
  onMount(() => {
7962
8381
  void loadState();
8382
+ void loadAutofillProfiles();
7963
8383
  const unsubscribe = window.vessel.settings.onHealthUpdate((nextHealth) => {
7964
8384
  setHealth(nextHealth);
7965
8385
  });
@@ -8040,11 +8460,13 @@ const Settings = () => {
8040
8460
  },
8041
8461
  get children() {
8042
8462
  return [(() => {
8043
- var _el$ = _tmpl$19(), _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;
8463
+ 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
8464
  _el$65.firstChild;
8045
8465
  var _el$74 = _el$65.nextSibling, _el$75 = _el$74.nextSibling, _el$76 = _el$75.firstChild;
8046
8466
  _el$76.firstChild;
8047
- var _el$92 = _el$75.nextSibling, _el$93 = _el$92.nextSibling, _el$94 = _el$93.firstChild, _el$95 = _el$94.firstChild, _el$96 = _el$93.nextSibling, _el$97 = _el$96.firstChild, _el$98 = _el$97.nextSibling;
8467
+ var _el$92 = _el$75.nextSibling, _el$93 = _el$92.nextSibling, _el$94 = _el$93.firstChild;
8468
+ _el$94.nextSibling;
8469
+ 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
8470
  addEventListener(_el$, "click", closeSettings, true);
8049
8471
  _el$2.$$keydown = handleKeyDown;
8050
8472
  _el$2.$$click = (e) => e.stopPropagation();
@@ -8101,7 +8523,7 @@ const Settings = () => {
8101
8523
  return premiumActive();
8102
8524
  },
8103
8525
  get fallback() {
8104
- return _tmpl$21();
8526
+ return _tmpl$23();
8105
8527
  },
8106
8528
  get children() {
8107
8529
  var _el$26 = _tmpl$4$1();
@@ -8122,55 +8544,55 @@ const Settings = () => {
8122
8544
  return health();
8123
8545
  },
8124
8546
  children: (currentHealth) => (() => {
8125
- var _el$101 = _tmpl$23(), _el$102 = _el$101.firstChild, _el$103 = _el$102.nextSibling, _el$104 = _el$103.firstChild, _el$106 = _el$104.nextSibling;
8126
- _el$106.nextSibling;
8127
- insert(_el$106, () => currentHealth().mcp.status);
8128
- insert(_el$103, () => currentHealth().mcp.message, null);
8129
- insert(_el$101, createComponent(Show, {
8547
+ 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;
8548
+ _el$131.nextSibling;
8549
+ insert(_el$131, () => currentHealth().mcp.status);
8550
+ insert(_el$128, () => currentHealth().mcp.message, null);
8551
+ insert(_el$126, createComponent(Show, {
8130
8552
  get when() {
8131
8553
  return currentHealth().mcp.endpoint;
8132
8554
  },
8133
8555
  children: (endpoint) => (() => {
8134
- var _el$109 = _tmpl$24(), _el$110 = _el$109.firstChild, _el$111 = _el$110.nextSibling;
8135
- insert(_el$111, endpoint);
8136
- return _el$109;
8556
+ var _el$134 = _tmpl$26(), _el$135 = _el$134.firstChild, _el$136 = _el$135.nextSibling;
8557
+ insert(_el$136, endpoint);
8558
+ return _el$134;
8137
8559
  })()
8138
8560
  }), null);
8139
- insert(_el$101, createComponent(Show, {
8561
+ insert(_el$126, createComponent(Show, {
8140
8562
  get when() {
8141
8563
  return currentHealth().startupIssues.length > 0;
8142
8564
  },
8143
8565
  get children() {
8144
- var _el$108 = _tmpl$22();
8145
- insert(_el$108, () => currentHealth().startupIssues.map((issue) => (() => {
8146
- var _el$112 = _tmpl$25(), _el$113 = _el$112.firstChild, _el$114 = _el$113.nextSibling;
8147
- insert(_el$113, () => issue.title);
8148
- insert(_el$114, () => issue.detail);
8149
- insert(_el$112, createComponent(Show, {
8566
+ var _el$133 = _tmpl$24();
8567
+ insert(_el$133, () => currentHealth().startupIssues.map((issue) => (() => {
8568
+ var _el$137 = _tmpl$27(), _el$138 = _el$137.firstChild, _el$139 = _el$138.nextSibling;
8569
+ insert(_el$138, () => issue.title);
8570
+ insert(_el$139, () => issue.detail);
8571
+ insert(_el$137, createComponent(Show, {
8150
8572
  get when() {
8151
8573
  return issue.action;
8152
8574
  },
8153
8575
  children: (action) => (() => {
8154
- var _el$115 = _tmpl$26();
8155
- insert(_el$115, action);
8156
- return _el$115;
8576
+ var _el$140 = _tmpl$28();
8577
+ insert(_el$140, action);
8578
+ return _el$140;
8157
8579
  })()
8158
8580
  }), null);
8159
8581
  createRenderEffect((_p$) => {
8160
8582
  var _v$0 = !!(issue.severity === "warning"), _v$1 = !!(issue.severity === "error");
8161
- _v$0 !== _p$.e && _el$112.classList.toggle("warning", _p$.e = _v$0);
8162
- _v$1 !== _p$.t && _el$112.classList.toggle("error", _p$.t = _v$1);
8583
+ _v$0 !== _p$.e && _el$137.classList.toggle("warning", _p$.e = _v$0);
8584
+ _v$1 !== _p$.t && _el$137.classList.toggle("error", _p$.t = _v$1);
8163
8585
  return _p$;
8164
8586
  }, {
8165
8587
  e: void 0,
8166
8588
  t: void 0
8167
8589
  });
8168
- return _el$112;
8590
+ return _el$137;
8169
8591
  })()));
8170
- return _el$108;
8592
+ return _el$133;
8171
8593
  }
8172
8594
  }), null);
8173
- return _el$101;
8595
+ return _el$126;
8174
8596
  })()
8175
8597
  }), _el$28);
8176
8598
  _el$30.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
@@ -8199,10 +8621,10 @@ const Settings = () => {
8199
8621
  insert(_el$46, createComponent(For, {
8200
8622
  each: CHAT_PROVIDERS,
8201
8623
  children: (p) => (() => {
8202
- var _el$116 = _tmpl$27();
8203
- insert(_el$116, () => p.name);
8204
- createRenderEffect(() => _el$116.value = p.id);
8205
- return _el$116;
8624
+ var _el$141 = _tmpl$29();
8625
+ insert(_el$141, () => p.name);
8626
+ createRenderEffect(() => _el$141.value = p.id);
8627
+ return _el$141;
8206
8628
  })()
8207
8629
  }));
8208
8630
  createRenderEffect(() => _el$46.value = chatProviderId());
@@ -8258,12 +8680,12 @@ const Settings = () => {
8258
8680
  },
8259
8681
  get fallback() {
8260
8682
  return (() => {
8261
- var _el$117 = _tmpl$28();
8262
- _el$117.$$input = (e) => setChatModel(e.currentTarget.value);
8263
- setAttribute(_el$117, "spellcheck", false);
8264
- createRenderEffect(() => setAttribute(_el$117, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
8265
- createRenderEffect(() => _el$117.value = chatModel());
8266
- return _el$117;
8683
+ var _el$142 = _tmpl$30();
8684
+ _el$142.$$input = (e) => setChatModel(e.currentTarget.value);
8685
+ setAttribute(_el$142, "spellcheck", false);
8686
+ createRenderEffect(() => setAttribute(_el$142, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
8687
+ createRenderEffect(() => _el$142.value = chatModel());
8688
+ return _el$142;
8267
8689
  })();
8268
8690
  },
8269
8691
  get children() {
@@ -8274,10 +8696,10 @@ const Settings = () => {
8274
8696
  return providerModels();
8275
8697
  },
8276
8698
  children: (m) => (() => {
8277
- var _el$118 = _tmpl$27();
8278
- _el$118.value = m;
8279
- insert(_el$118, m);
8280
- return _el$118;
8699
+ var _el$143 = _tmpl$29();
8700
+ _el$143.value = m;
8701
+ insert(_el$143, m);
8702
+ return _el$143;
8281
8703
  })()
8282
8704
  }));
8283
8705
  createRenderEffect(() => _el$57.value = chatModel());
@@ -8298,9 +8720,9 @@ const Settings = () => {
8298
8720
  return modelFetchWarning();
8299
8721
  },
8300
8722
  children: (warning) => (() => {
8301
- var _el$119 = _tmpl$29();
8302
- insert(_el$119, warning);
8303
- return _el$119;
8723
+ var _el$144 = _tmpl$31();
8724
+ insert(_el$144, warning);
8725
+ return _el$144;
8304
8726
  })()
8305
8727
  }), null);
8306
8728
  createRenderEffect(() => _el$58.disabled = modelFetchState() === "loading");
@@ -8333,8 +8755,8 @@ const Settings = () => {
8333
8755
  },
8334
8756
  get fallback() {
8335
8757
  return (() => {
8336
- var _el$120 = _tmpl$32(), _el$121 = _el$120.firstChild, _el$122 = _el$121.nextSibling, _el$123 = _el$122.firstChild, _el$124 = _el$123.nextSibling, _el$128 = _el$122.nextSibling;
8337
- _el$123.$$input = (e) => {
8758
+ 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;
8759
+ _el$148.$$input = (e) => {
8338
8760
  const nextEmail = e.currentTarget.value;
8339
8761
  if (nextEmail.trim().toLowerCase() !== premiumEmail().trim().toLowerCase()) {
8340
8762
  resetPremiumActivationFlow();
@@ -8342,8 +8764,8 @@ const Settings = () => {
8342
8764
  }
8343
8765
  setPremiumEmail(nextEmail);
8344
8766
  };
8345
- setAttribute(_el$123, "spellcheck", false);
8346
- _el$124.$$click = async () => {
8767
+ setAttribute(_el$148, "spellcheck", false);
8768
+ _el$149.$$click = async () => {
8347
8769
  setPremiumLoading(true);
8348
8770
  setPremiumMessage(null);
8349
8771
  try {
@@ -8372,23 +8794,23 @@ const Settings = () => {
8372
8794
  setPremiumLoading(false);
8373
8795
  }
8374
8796
  };
8375
- insert(_el$124, (() => {
8797
+ insert(_el$149, (() => {
8376
8798
  var _c$ = memo(() => !!premiumLoading());
8377
8799
  return () => _c$() ? "Sending..." : premiumCodeSent() ? "Resend Code" : "Send Code";
8378
8800
  })());
8379
- insert(_el$120, createComponent(Show, {
8801
+ insert(_el$145, createComponent(Show, {
8380
8802
  get when() {
8381
8803
  return premiumCodeSent();
8382
8804
  },
8383
8805
  get children() {
8384
- var _el$125 = _tmpl$30(), _el$126 = _el$125.firstChild, _el$127 = _el$126.nextSibling;
8385
- _el$126.$$input = (e) => {
8806
+ var _el$150 = _tmpl$32(), _el$151 = _el$150.firstChild, _el$152 = _el$151.nextSibling;
8807
+ _el$151.$$input = (e) => {
8386
8808
  const nextCode = e.currentTarget.value.replace(/\D+/g, "").slice(0, 6);
8387
8809
  setPremiumCode(nextCode);
8388
8810
  setPremiumMessage(null);
8389
8811
  };
8390
- setAttribute(_el$126, "spellcheck", false);
8391
- _el$127.$$click = async () => {
8812
+ setAttribute(_el$151, "spellcheck", false);
8813
+ _el$152.$$click = async () => {
8392
8814
  setPremiumLoading(true);
8393
8815
  setPremiumMessage(null);
8394
8816
  try {
@@ -8415,53 +8837,53 @@ const Settings = () => {
8415
8837
  setPremiumLoading(false);
8416
8838
  }
8417
8839
  };
8418
- insert(_el$127, () => premiumLoading() ? "Verifying..." : "Verify Code");
8419
- createRenderEffect(() => _el$127.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
8420
- createRenderEffect(() => _el$126.value = premiumCode());
8421
- return _el$125;
8840
+ insert(_el$152, () => premiumLoading() ? "Verifying..." : "Verify Code");
8841
+ createRenderEffect(() => _el$152.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
8842
+ createRenderEffect(() => _el$151.value = premiumCode());
8843
+ return _el$150;
8422
8844
  }
8423
- }), _el$128);
8424
- _el$128.$$click = () => {
8845
+ }), _el$153);
8846
+ _el$153.$$click = () => {
8425
8847
  startPremiumCheckout();
8426
8848
  };
8427
- insert(_el$120, createComponent(Show, {
8849
+ insert(_el$145, createComponent(Show, {
8428
8850
  get when() {
8429
8851
  return premiumMessage();
8430
8852
  },
8431
8853
  children: (msg) => (() => {
8432
- var _el$130 = _tmpl$33();
8433
- insert(_el$130, () => msg().text);
8854
+ var _el$155 = _tmpl$35();
8855
+ insert(_el$155, () => msg().text);
8434
8856
  createRenderEffect((_p$) => {
8435
8857
  var _v$10 = !!(msg().kind === "success"), _v$11 = !!(msg().kind === "error");
8436
- _v$10 !== _p$.e && _el$130.classList.toggle("success", _p$.e = _v$10);
8437
- _v$11 !== _p$.t && _el$130.classList.toggle("error", _p$.t = _v$11);
8858
+ _v$10 !== _p$.e && _el$155.classList.toggle("success", _p$.e = _v$10);
8859
+ _v$11 !== _p$.t && _el$155.classList.toggle("error", _p$.t = _v$11);
8438
8860
  return _p$;
8439
8861
  }, {
8440
8862
  e: void 0,
8441
8863
  t: void 0
8442
8864
  });
8443
- return _el$130;
8865
+ return _el$155;
8444
8866
  })()
8445
8867
  }), null);
8446
- insert(_el$120, createComponent(Show, {
8868
+ insert(_el$145, createComponent(Show, {
8447
8869
  get when() {
8448
8870
  return premiumState().email || premiumEmail();
8449
8871
  },
8450
8872
  get children() {
8451
- var _el$129 = _tmpl$31();
8452
- _el$129.$$click = async () => {
8873
+ var _el$154 = _tmpl$33();
8874
+ _el$154.$$click = async () => {
8453
8875
  const state = await window.vessel.premium.reset();
8454
8876
  setPremiumState(state);
8455
8877
  setPremiumEmail("");
8456
8878
  resetPremiumActivationFlow();
8457
8879
  setPremiumMessage(null);
8458
8880
  };
8459
- return _el$129;
8881
+ return _el$154;
8460
8882
  }
8461
8883
  }), null);
8462
- createRenderEffect(() => _el$124.disabled = premiumLoading() || !premiumEmail().trim());
8463
- createRenderEffect(() => _el$123.value = premiumEmail());
8464
- return _el$120;
8884
+ createRenderEffect(() => _el$149.disabled = premiumLoading() || !premiumEmail().trim());
8885
+ createRenderEffect(() => _el$148.value = premiumEmail());
8886
+ return _el$145;
8465
8887
  })();
8466
8888
  },
8467
8889
  get children() {
@@ -8511,7 +8933,7 @@ const Settings = () => {
8511
8933
  return premiumActive();
8512
8934
  },
8513
8935
  get fallback() {
8514
- return _tmpl$34();
8936
+ return _tmpl$36();
8515
8937
  },
8516
8938
  get children() {
8517
8939
  return [_tmpl$15(), createComponent(Show, {
@@ -8525,11 +8947,11 @@ const Settings = () => {
8525
8947
  return vaultEntries();
8526
8948
  },
8527
8949
  children: (entry) => (() => {
8528
- var _el$132 = _tmpl$35(), _el$133 = _el$132.firstChild, _el$134 = _el$133.firstChild, _el$135 = _el$134.nextSibling, _el$136 = _el$135.firstChild, _el$137 = _el$133.nextSibling;
8529
- insert(_el$134, () => entry.label);
8530
- insert(_el$135, () => entry.username, _el$136);
8531
- insert(_el$135, () => entry.domainPattern, null);
8532
- insert(_el$135, createComponent(Show, {
8950
+ 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;
8951
+ insert(_el$159, () => entry.label);
8952
+ insert(_el$160, () => entry.username, _el$161);
8953
+ insert(_el$160, () => entry.domainPattern, null);
8954
+ insert(_el$160, createComponent(Show, {
8533
8955
  get when() {
8534
8956
  return entry.useCount > 0;
8535
8957
  },
@@ -8537,8 +8959,8 @@ const Settings = () => {
8537
8959
  return [" ", "· Used ", memo(() => entry.useCount), "x"];
8538
8960
  }
8539
8961
  }), null);
8540
- _el$137.$$click = () => handleVaultRemove(entry.id);
8541
- return _el$132;
8962
+ _el$162.$$click = () => handleVaultRemove(entry.id);
8963
+ return _el$157;
8542
8964
  })()
8543
8965
  }));
8544
8966
  return _el$80;
@@ -8595,42 +9017,155 @@ const Settings = () => {
8595
9017
  return vaultMessage();
8596
9018
  },
8597
9019
  children: (msg) => (() => {
8598
- var _el$138 = _tmpl$33();
8599
- insert(_el$138, () => msg().text);
9020
+ var _el$163 = _tmpl$35();
9021
+ insert(_el$163, () => msg().text);
8600
9022
  createRenderEffect((_p$) => {
8601
9023
  var _v$12 = !!(msg().kind === "success"), _v$13 = !!(msg().kind === "error");
8602
- _v$12 !== _p$.e && _el$138.classList.toggle("success", _p$.e = _v$12);
8603
- _v$13 !== _p$.t && _el$138.classList.toggle("error", _p$.t = _v$13);
9024
+ _v$12 !== _p$.e && _el$163.classList.toggle("success", _p$.e = _v$12);
9025
+ _v$13 !== _p$.t && _el$163.classList.toggle("error", _p$.t = _v$13);
8604
9026
  return _p$;
8605
9027
  }, {
8606
9028
  e: void 0,
8607
9029
  t: void 0
8608
9030
  });
8609
- return _el$138;
9031
+ return _el$163;
8610
9032
  })()
8611
9033
  })];
8612
9034
  }
8613
9035
  }), null);
8614
- _el$95.$$click = () => setTelemetryEnabled(!telemetryEnabled());
8615
- _el$97.$$click = handleSave;
8616
- addEventListener(_el$98, "click", closeSettings, true);
9036
+ insert(_el$93, createComponent(Show, {
9037
+ get when() {
9038
+ return autofillProfiles().length > 0;
9039
+ },
9040
+ get children() {
9041
+ var _el$96 = _tmpl$16();
9042
+ insert(_el$96, createComponent(For, {
9043
+ get each() {
9044
+ return autofillProfiles();
9045
+ },
9046
+ children: (profile) => (() => {
9047
+ 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;
9048
+ insert(_el$166, () => profile.label);
9049
+ insert(_el$167, () => profile.firstName, null);
9050
+ insert(_el$167, (() => {
9051
+ var _c$2 = memo(() => !!profile.lastName);
9052
+ return () => _c$2() ? ` ${profile.lastName}` : "";
9053
+ })(), null);
9054
+ insert(_el$167, (() => {
9055
+ var _c$3 = memo(() => !!profile.email);
9056
+ return () => _c$3() ? ` · ${profile.email}` : "";
9057
+ })(), null);
9058
+ _el$169.$$click = () => handleAutofillFill(profile.id);
9059
+ _el$170.$$click = () => handleAutofillRemove(profile.id);
9060
+ return _el$164;
9061
+ })()
9062
+ }));
9063
+ return _el$96;
9064
+ }
9065
+ }), null);
9066
+ insert(_el$93, createComponent(Show, {
9067
+ get when() {
9068
+ return !autofillAdding();
9069
+ },
9070
+ get children() {
9071
+ var _el$97 = _tmpl$19();
9072
+ _el$97.$$click = () => {
9073
+ setAutofillAdding(true);
9074
+ setAutofillMessage(null);
9075
+ };
9076
+ return _el$97;
9077
+ }
9078
+ }), null);
9079
+ insert(_el$93, createComponent(Show, {
9080
+ get when() {
9081
+ return autofillAdding();
9082
+ },
9083
+ get children() {
9084
+ 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;
9085
+ _el$99.$$input = (e) => setAutofillLabel(e.currentTarget.value);
9086
+ setAttribute(_el$99, "spellcheck", false);
9087
+ _el$101.$$input = (e) => setAutofillFirstName(e.currentTarget.value);
9088
+ _el$102.$$input = (e) => setAutofillLastName(e.currentTarget.value);
9089
+ _el$104.$$input = (e) => setAutofillEmail(e.currentTarget.value);
9090
+ setAttribute(_el$104, "spellcheck", false);
9091
+ _el$105.$$input = (e) => setAutofillPhone(e.currentTarget.value);
9092
+ _el$106.$$input = (e) => setAutofillOrg(e.currentTarget.value);
9093
+ _el$107.$$input = (e) => setAutofillAddr1(e.currentTarget.value);
9094
+ _el$108.$$input = (e) => setAutofillAddr2(e.currentTarget.value);
9095
+ _el$110.$$input = (e) => setAutofillCity(e.currentTarget.value);
9096
+ _el$111.$$input = (e) => setAutofillState(e.currentTarget.value);
9097
+ _el$112.$$input = (e) => setAutofillZip(e.currentTarget.value);
9098
+ _el$113.$$input = (e) => setAutofillCountry(e.currentTarget.value);
9099
+ _el$115.$$click = handleAutofillAdd;
9100
+ _el$116.$$click = () => {
9101
+ setAutofillAdding(false);
9102
+ setAutofillLabel("");
9103
+ setAutofillFirstName("");
9104
+ setAutofillLastName("");
9105
+ setAutofillEmail("");
9106
+ setAutofillPhone("");
9107
+ setAutofillOrg("");
9108
+ setAutofillAddr1("");
9109
+ setAutofillAddr2("");
9110
+ setAutofillCity("");
9111
+ setAutofillState("");
9112
+ setAutofillZip("");
9113
+ setAutofillCountry("");
9114
+ };
9115
+ createRenderEffect(() => _el$99.value = autofillLabel());
9116
+ createRenderEffect(() => _el$101.value = autofillFirstName());
9117
+ createRenderEffect(() => _el$102.value = autofillLastName());
9118
+ createRenderEffect(() => _el$104.value = autofillEmail());
9119
+ createRenderEffect(() => _el$105.value = autofillPhone());
9120
+ createRenderEffect(() => _el$106.value = autofillOrg());
9121
+ createRenderEffect(() => _el$107.value = autofillAddr1());
9122
+ createRenderEffect(() => _el$108.value = autofillAddr2());
9123
+ createRenderEffect(() => _el$110.value = autofillCity());
9124
+ createRenderEffect(() => _el$111.value = autofillState());
9125
+ createRenderEffect(() => _el$112.value = autofillZip());
9126
+ createRenderEffect(() => _el$113.value = autofillCountry());
9127
+ return _el$98;
9128
+ }
9129
+ }), null);
9130
+ insert(_el$93, createComponent(Show, {
9131
+ get when() {
9132
+ return autofillMessage();
9133
+ },
9134
+ children: (msg) => (() => {
9135
+ var _el$171 = _tmpl$35();
9136
+ insert(_el$171, () => msg().text);
9137
+ createRenderEffect((_p$) => {
9138
+ var _v$14 = !!(msg().kind === "success"), _v$15 = !!(msg().kind === "error");
9139
+ _v$14 !== _p$.e && _el$171.classList.toggle("success", _p$.e = _v$14);
9140
+ _v$15 !== _p$.t && _el$171.classList.toggle("error", _p$.t = _v$15);
9141
+ return _p$;
9142
+ }, {
9143
+ e: void 0,
9144
+ t: void 0
9145
+ });
9146
+ return _el$171;
9147
+ })()
9148
+ }), null);
9149
+ _el$120.$$click = () => setTelemetryEnabled(!telemetryEnabled());
9150
+ _el$122.$$click = handleSave;
9151
+ addEventListener(_el$123, "click", closeSettings, true);
8617
9152
  insert(_el$2, createComponent(Show, {
8618
9153
  get when() {
8619
9154
  return status();
8620
9155
  },
8621
9156
  children: (currentStatus) => (() => {
8622
- var _el$139 = _tmpl$33();
8623
- insert(_el$139, () => currentStatus().text);
9157
+ var _el$172 = _tmpl$35();
9158
+ insert(_el$172, () => currentStatus().text);
8624
9159
  createRenderEffect((_p$) => {
8625
- var _v$14 = !!(currentStatus().kind === "success"), _v$15 = !!(currentStatus().kind === "error");
8626
- _v$14 !== _p$.e && _el$139.classList.toggle("success", _p$.e = _v$14);
8627
- _v$15 !== _p$.t && _el$139.classList.toggle("error", _p$.t = _v$15);
9160
+ var _v$16 = !!(currentStatus().kind === "success"), _v$17 = !!(currentStatus().kind === "error");
9161
+ _v$16 !== _p$.e && _el$172.classList.toggle("success", _p$.e = _v$16);
9162
+ _v$17 !== _p$.t && _el$172.classList.toggle("error", _p$.t = _v$17);
8628
9163
  return _p$;
8629
9164
  }, {
8630
9165
  e: void 0,
8631
9166
  t: void 0
8632
9167
  });
8633
- return _el$139;
9168
+ return _el$172;
8634
9169
  })()
8635
9170
  }), null);
8636
9171
  createRenderEffect((_p$) => {
@@ -8642,8 +9177,8 @@ const Settings = () => {
8642
9177
  _v$5 !== _p$.i && setAttribute(_el$39, "aria-checked", _p$.i = _v$5);
8643
9178
  _v$6 !== _p$.n && _el$43.classList.toggle("on", _p$.n = _v$6);
8644
9179
  _v$7 !== _p$.s && setAttribute(_el$43, "aria-checked", _p$.s = _v$7);
8645
- _v$8 !== _p$.h && _el$95.classList.toggle("on", _p$.h = _v$8);
8646
- _v$9 !== _p$.r && setAttribute(_el$95, "aria-checked", _p$.r = _v$9);
9180
+ _v$8 !== _p$.h && _el$120.classList.toggle("on", _p$.h = _v$8);
9181
+ _v$9 !== _p$.r && setAttribute(_el$120, "aria-checked", _p$.r = _v$9);
8647
9182
  return _p$;
8648
9183
  }, {
8649
9184
  e: void 0,
@@ -8661,7 +9196,7 @@ const Settings = () => {
8661
9196
  createRenderEffect(() => _el$30.value = obsidianVaultPath());
8662
9197
  createRenderEffect(() => _el$33.value = agentTranscriptMode());
8663
9198
  return _el$;
8664
- })(), _tmpl$20()];
9199
+ })(), _tmpl$22()];
8665
9200
  }
8666
9201
  });
8667
9202
  };