@quanta-intellect/vessel-browser 0.1.67 → 0.1.69

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.
@@ -1433,7 +1433,7 @@ function Dynamic(props) {
1433
1433
  const [, others] = splitProps(props, ["component"]);
1434
1434
  return createDynamic(() => props.component, others);
1435
1435
  }
1436
- var _tmpl$$h = /* @__PURE__ */ template(`<div class=title-bar><div class=title-bar-drag></div><div class=mcp-status-area><button class=mcp-status-indicator><span class=mcp-dot></span><span class=mcp-label>MCP</span></button></div><div class=window-controls><button class=window-btn data-tooltip=Minimize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=5 width=8 height=1 fill=currentColor></rect></svg></button><button class=window-btn data-tooltip=Maximize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=1 width=8 height=8 fill=none stroke=currentColor stroke-width=1></rect></svg></button><button class="window-btn window-btn-close"data-tooltip=Close><svg width=10 height=10 viewBox="0 0 10 10"><line x1=1 y1=1 x2=9 y2=9 stroke=currentColor stroke-width=1.2></line><line x1=9 y1=1 x2=1 y2=9 stroke=currentColor stroke-width=1.2>`);
1436
+ var _tmpl$$i = /* @__PURE__ */ template(`<div class=title-bar><div class=title-bar-drag></div><div class=mcp-status-area><button class=mcp-status-indicator><span class=mcp-dot></span><span class=mcp-label>MCP</span></button></div><div class=window-controls><button class=window-btn data-tooltip=Minimize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=5 width=8 height=1 fill=currentColor></rect></svg></button><button class=window-btn data-tooltip=Maximize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=1 width=8 height=8 fill=none stroke=currentColor stroke-width=1></rect></svg></button><button class="window-btn window-btn-close"data-tooltip=Close><svg width=10 height=10 viewBox="0 0 10 10"><line x1=1 y1=1 x2=9 y2=9 stroke=currentColor stroke-width=1.2></line><line x1=9 y1=1 x2=1 y2=9 stroke=currentColor stroke-width=1.2>`);
1437
1437
  const TitleBar = () => {
1438
1438
  const [mcpStatus, setMcpStatus] = createSignal("starting");
1439
1439
  const [mcpTooltip, setMcpTooltip] = createSignal("MCP: starting...");
@@ -1464,7 +1464,7 @@ const TitleBar = () => {
1464
1464
  window.vessel.ui.setSettingsVisibility(true);
1465
1465
  };
1466
1466
  return (() => {
1467
- var _el$ = _tmpl$$h(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling;
1467
+ var _el$ = _tmpl$$i(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling;
1468
1468
  _el$4.$$click = handleMcpClick;
1469
1469
  _el$6.$$click = () => window.vessel.window.minimize();
1470
1470
  _el$7.$$click = () => window.vessel.window.maximize();
@@ -1620,7 +1620,9 @@ const DEFAULT_RUNTIME_STATE = {
1620
1620
  transcript: [],
1621
1621
  mcpStatus: "stopped",
1622
1622
  flowState: null,
1623
- taskTracker: null
1623
+ taskTracker: null,
1624
+ canUndo: false,
1625
+ undoInfo: null
1624
1626
  };
1625
1627
  const [runtimeState, setRuntimeState] = createSignal(
1626
1628
  DEFAULT_RUNTIME_STATE
@@ -1657,6 +1659,8 @@ function useRuntime() {
1657
1659
  resolveApproval: (approvalId, approved) => window.vessel.ai.resolveApproval(approvalId, approved),
1658
1660
  createCheckpoint: (name, note) => window.vessel.ai.createCheckpoint(name, note),
1659
1661
  restoreCheckpoint: (checkpointId) => window.vessel.ai.restoreCheckpoint(checkpointId),
1662
+ updateCheckpointNote: (checkpointId, note) => window.vessel.ai.updateCheckpointNote(checkpointId, note),
1663
+ undoLastAction: () => window.vessel.ai.undoLastAction(),
1660
1664
  captureSession: (note) => window.vessel.ai.captureSession(note),
1661
1665
  restoreSession: () => window.vessel.ai.restoreSession()
1662
1666
  };
@@ -1769,7 +1773,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
1769
1773
  }
1770
1774
  return "idle";
1771
1775
  }
1772
- var _tmpl$$g = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$e = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$b = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list><button class=tab-new data-tooltip="New Tab">+`), _tmpl$4$b = /* @__PURE__ */ template(`<div role=tab><span class=tab-title></span><button class=tab-close>×`), _tmpl$5$a = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$6$9 = /* @__PURE__ */ template(`<span class=tab-loading>`);
1776
+ var _tmpl$$h = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$f = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list><button class=tab-new data-tooltip="New Tab">+`), _tmpl$4$c = /* @__PURE__ */ template(`<div role=tab><span class=tab-title></span><button class=tab-close>×`), _tmpl$5$b = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$6$a = /* @__PURE__ */ template(`<span class=tab-loading>`);
1773
1777
  const TAB_CLOSE_MS = 200;
1774
1778
  function stringToHue(str) {
1775
1779
  let hash = 0;
@@ -1796,14 +1800,14 @@ const TabFavicon = (props) => {
1796
1800
  },
1797
1801
  get fallback() {
1798
1802
  return (() => {
1799
- var _el$2 = _tmpl$2$e();
1803
+ var _el$2 = _tmpl$2$f();
1800
1804
  insert(_el$2, letter);
1801
1805
  createRenderEffect((_$p) => setStyleProperty(_el$2, "--favicon-hue", `${hue()}`));
1802
1806
  return _el$2;
1803
1807
  })();
1804
1808
  },
1805
1809
  get children() {
1806
- var _el$ = _tmpl$$g();
1810
+ var _el$ = _tmpl$$h();
1807
1811
  _el$.addEventListener("error", () => setFailed(true));
1808
1812
  createRenderEffect(() => setAttribute(_el$, "src", props.favicon));
1809
1813
  return _el$;
@@ -1836,13 +1840,13 @@ const TabBar = () => {
1836
1840
  }, TAB_CLOSE_MS);
1837
1841
  };
1838
1842
  return (() => {
1839
- var _el$3 = _tmpl$3$b(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
1843
+ var _el$3 = _tmpl$3$c(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
1840
1844
  insert(_el$4, createComponent(For, {
1841
1845
  get each() {
1842
1846
  return tabs2();
1843
1847
  },
1844
1848
  children: (tab) => (() => {
1845
- var _el$6 = _tmpl$4$b(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
1849
+ var _el$6 = _tmpl$4$c(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
1846
1850
  _el$6.addEventListener("auxclick", (e) => {
1847
1851
  if (e.button === 1) handleClose(tab.id);
1848
1852
  });
@@ -1860,12 +1864,12 @@ const TabBar = () => {
1860
1864
  }), _el$7);
1861
1865
  insert(_el$6, (() => {
1862
1866
  var _c$ = memo(() => !!modelActiveTabIds().has(tab.id));
1863
- return () => _c$() && _tmpl$5$a();
1867
+ return () => _c$() && _tmpl$5$b();
1864
1868
  })(), _el$7);
1865
1869
  insert(_el$7, () => tab.title || "New Tab");
1866
1870
  insert(_el$6, (() => {
1867
1871
  var _c$2 = memo(() => !!tab.isLoading);
1868
- return () => _c$2() && _tmpl$6$9();
1872
+ return () => _c$2() && _tmpl$6$a();
1869
1873
  })(), _el$8);
1870
1874
  _el$8.$$click = (e) => {
1871
1875
  e.stopPropagation();
@@ -2074,7 +2078,7 @@ function buildPageSnapshotKey(rawUrl) {
2074
2078
  function matchesPageSnapshotUrl(left, right) {
2075
2079
  return buildPageSnapshotKey(left) === buildPageSnapshotKey(right);
2076
2080
  }
2077
- var _tmpl$$f = /* @__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$d = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$3$a = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$4$a = /* @__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$9 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$6$8 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$7$6 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"></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><svg width=14 height=14 viewBox="0 0 14 14"></svg></button><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$9$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$0$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$10$4 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$11$4 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$12$4 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$14$3 = /* @__PURE__ */ template(`<li>`);
2081
+ var _tmpl$$g = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$2$e = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$3$b = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$4$b = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>What changed since </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>&times;`), _tmpl$5$a = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$6$9 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$7$7 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$8$5 = /* @__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><svg width=14 height=14 viewBox="0 0 14 14"></svg></button><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$9$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$0$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$10$4 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$11$4 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$12$4 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$14$3 = /* @__PURE__ */ template(`<li>`);
2078
2082
  const AddressBar = () => {
2079
2083
  const {
2080
2084
  activeTab,
@@ -2112,6 +2116,14 @@ const AddressBar = () => {
2112
2116
  diffCollapseTimer = null;
2113
2117
  }, 8e3);
2114
2118
  };
2119
+ const openDiffTimeline = async () => {
2120
+ setDiffExpanded(false);
2121
+ if (diffCollapseTimer) {
2122
+ clearTimeout(diffCollapseTimer);
2123
+ diffCollapseTimer = null;
2124
+ }
2125
+ await window.vessel.ui.openSidebarTab("diff");
2126
+ };
2115
2127
  const formatRelativeTime = (isoDate) => {
2116
2128
  const diff = Date.now() - new Date(isoDate).getTime();
2117
2129
  const mins = Math.floor(diff / 6e4);
@@ -2188,9 +2200,9 @@ const AddressBar = () => {
2188
2200
  };
2189
2201
  const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
2190
2202
  return (() => {
2191
- var _el$ = _tmpl$8$4(), _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.firstChild, _el$30 = _el$25.nextSibling, _el$31 = _el$30.nextSibling, _el$32 = _el$31.nextSibling;
2192
- _el$32.firstChild;
2193
- var _el$35 = _el$32.nextSibling;
2203
+ var _el$ = _tmpl$8$5(), _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$26 = _el$6.nextSibling, _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$32 = _el$27.nextSibling, _el$33 = _el$32.nextSibling, _el$34 = _el$33.nextSibling;
2204
+ _el$34.firstChild;
2205
+ var _el$37 = _el$34.nextSibling;
2194
2206
  addEventListener(_el$3, "click", goBack, true);
2195
2207
  addEventListener(_el$4, "click", goForward, true);
2196
2208
  addEventListener(_el$5, "click", reload, true);
@@ -2206,8 +2218,8 @@ const AddressBar = () => {
2206
2218
  return pageDiff();
2207
2219
  },
2208
2220
  get children() {
2209
- var _el$10 = _tmpl$$f();
2210
- _el$10.$$click = () => setDiffExpanded(!diffExpanded());
2221
+ var _el$10 = _tmpl$$g();
2222
+ _el$10.$$click = () => void openDiffTimeline();
2211
2223
  return _el$10;
2212
2224
  }
2213
2225
  }), null);
@@ -2216,42 +2228,43 @@ const AddressBar = () => {
2216
2228
  return memo(() => !!pageDiff())() && diffExpanded();
2217
2229
  },
2218
2230
  get children() {
2219
- var _el$11 = _tmpl$4$a(), _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild;
2231
+ var _el$11 = _tmpl$4$b(), _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild;
2220
2232
  _el$14.firstChild;
2221
- var _el$21 = _el$13.nextSibling;
2233
+ var _el$21 = _el$13.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling;
2222
2234
  insert(_el$14, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
2223
2235
  insert(_el$13, createComponent(Show, {
2224
2236
  get when() {
2225
2237
  return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
2226
2238
  },
2227
2239
  get children() {
2228
- var _el$16 = _tmpl$2$d(), _el$17 = _el$16.firstChild, _el$20 = _el$17.nextSibling;
2240
+ var _el$16 = _tmpl$2$e(), _el$17 = _el$16.firstChild, _el$20 = _el$17.nextSibling;
2229
2241
  _el$20.nextSibling;
2230
2242
  insert(_el$16, () => pageDiff().burstCount, _el$20);
2231
2243
  insert(_el$16, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
2232
2244
  return _el$16;
2233
2245
  }
2234
2246
  }), null);
2235
- _el$21.$$click = () => setDiffExpanded(false);
2247
+ _el$22.$$click = () => void openDiffTimeline();
2248
+ _el$23.$$click = () => setDiffExpanded(false);
2236
2249
  insert(_el$11, createComponent(Show, {
2237
2250
  get when() {
2238
2251
  return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
2239
2252
  },
2240
2253
  get children() {
2241
- var _el$22 = _tmpl$3$a();
2242
- _el$22.firstChild;
2243
- insert(_el$22, createComponent(For, {
2254
+ var _el$24 = _tmpl$3$b();
2255
+ _el$24.firstChild;
2256
+ insert(_el$24, createComponent(For, {
2244
2257
  get each() {
2245
2258
  return pageDiff().recentBursts;
2246
2259
  },
2247
2260
  children: (burst) => (() => {
2248
- var _el$36 = _tmpl$9$4(), _el$37 = _el$36.firstChild, _el$38 = _el$37.nextSibling;
2249
- insert(_el$37, () => formatRelativeTime(burst.detectedAt));
2250
- insert(_el$38, () => burst.summary);
2251
- return _el$36;
2261
+ var _el$38 = _tmpl$9$4(), _el$39 = _el$38.firstChild, _el$40 = _el$39.nextSibling;
2262
+ insert(_el$39, () => formatRelativeTime(burst.detectedAt));
2263
+ insert(_el$40, () => burst.summary);
2264
+ return _el$38;
2252
2265
  })()
2253
2266
  }), null);
2254
- return _el$22;
2267
+ return _el$24;
2255
2268
  }
2256
2269
  }), null);
2257
2270
  insert(_el$11, createComponent(For, {
@@ -2259,132 +2272,132 @@ const AddressBar = () => {
2259
2272
  return pageDiff().changes;
2260
2273
  },
2261
2274
  children: (change) => (() => {
2262
- var _el$39 = _tmpl$13$3(), _el$40 = _el$39.firstChild, _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling;
2263
- insert(_el$41, () => formatSectionLabel(change.section));
2264
- insert(_el$42, () => change.summary);
2265
- insert(_el$39, createComponent(Show, {
2275
+ var _el$41 = _tmpl$13$3(), _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$43.nextSibling;
2276
+ insert(_el$43, () => formatSectionLabel(change.section));
2277
+ insert(_el$44, () => change.summary);
2278
+ insert(_el$41, createComponent(Show, {
2266
2279
  get when() {
2267
2280
  return change.before || change.after;
2268
2281
  },
2269
2282
  get children() {
2270
- var _el$43 = _tmpl$10$4();
2271
- insert(_el$43, createComponent(Show, {
2283
+ var _el$45 = _tmpl$10$4();
2284
+ insert(_el$45, createComponent(Show, {
2272
2285
  get when() {
2273
2286
  return change.before;
2274
2287
  },
2275
2288
  get children() {
2276
- var _el$44 = _tmpl$0$4(), _el$45 = _el$44.firstChild, _el$46 = _el$45.nextSibling;
2277
- insert(_el$46, () => change.before);
2278
- return _el$44;
2289
+ var _el$46 = _tmpl$0$4(), _el$47 = _el$46.firstChild, _el$48 = _el$47.nextSibling;
2290
+ insert(_el$48, () => change.before);
2291
+ return _el$46;
2279
2292
  }
2280
2293
  }), null);
2281
- insert(_el$43, createComponent(Show, {
2294
+ insert(_el$45, createComponent(Show, {
2282
2295
  get when() {
2283
2296
  return change.after;
2284
2297
  },
2285
2298
  get children() {
2286
- var _el$47 = _tmpl$1$4(), _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling;
2287
- insert(_el$49, () => change.after);
2288
- return _el$47;
2299
+ var _el$49 = _tmpl$1$4(), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
2300
+ insert(_el$51, () => change.after);
2301
+ return _el$49;
2289
2302
  }
2290
2303
  }), null);
2291
- return _el$43;
2304
+ return _el$45;
2292
2305
  }
2293
2306
  }), null);
2294
- insert(_el$39, createComponent(Show, {
2307
+ insert(_el$41, createComponent(Show, {
2295
2308
  get when() {
2296
2309
  return change.addedItems?.length;
2297
2310
  },
2298
2311
  get children() {
2299
- var _el$50 = _tmpl$11$4(), _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling;
2300
- insert(_el$52, createComponent(For, {
2312
+ var _el$52 = _tmpl$11$4(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
2313
+ insert(_el$54, createComponent(For, {
2301
2314
  get each() {
2302
2315
  return change.addedItems;
2303
2316
  },
2304
2317
  children: (item) => (() => {
2305
- var _el$56 = _tmpl$14$3();
2306
- insert(_el$56, item);
2307
- return _el$56;
2318
+ var _el$58 = _tmpl$14$3();
2319
+ insert(_el$58, item);
2320
+ return _el$58;
2308
2321
  })()
2309
2322
  }));
2310
- return _el$50;
2323
+ return _el$52;
2311
2324
  }
2312
2325
  }), null);
2313
- insert(_el$39, createComponent(Show, {
2326
+ insert(_el$41, createComponent(Show, {
2314
2327
  get when() {
2315
2328
  return change.removedItems?.length;
2316
2329
  },
2317
2330
  get children() {
2318
- var _el$53 = _tmpl$12$4(), _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling;
2319
- insert(_el$55, createComponent(For, {
2331
+ var _el$55 = _tmpl$12$4(), _el$56 = _el$55.firstChild, _el$57 = _el$56.nextSibling;
2332
+ insert(_el$57, createComponent(For, {
2320
2333
  get each() {
2321
2334
  return change.removedItems;
2322
2335
  },
2323
2336
  children: (item) => (() => {
2324
- var _el$57 = _tmpl$14$3();
2325
- insert(_el$57, item);
2326
- return _el$57;
2337
+ var _el$59 = _tmpl$14$3();
2338
+ insert(_el$59, item);
2339
+ return _el$59;
2327
2340
  })()
2328
2341
  }));
2329
- return _el$53;
2342
+ return _el$55;
2330
2343
  }
2331
2344
  }), null);
2332
- createRenderEffect(() => className(_el$39, `page-diff-item page-diff-${change.kind}`));
2333
- return _el$39;
2345
+ createRenderEffect(() => className(_el$41, `page-diff-item page-diff-${change.kind}`));
2346
+ return _el$41;
2334
2347
  })()
2335
2348
  }), null);
2336
2349
  return _el$11;
2337
2350
  }
2338
- }), _el$24);
2339
- _el$25.$$click = async () => {
2351
+ }), _el$26);
2352
+ _el$27.$$click = async () => {
2340
2353
  const id = activeTabId2();
2341
2354
  if (!id) return;
2342
2355
  await toggleAdBlock(id);
2343
2356
  };
2344
- insert(_el$26, createComponent(Show, {
2357
+ insert(_el$28, createComponent(Show, {
2345
2358
  get when() {
2346
2359
  return activeTab()?.adBlockingEnabled;
2347
2360
  },
2348
2361
  get children() {
2349
- return _tmpl$5$9();
2362
+ return _tmpl$5$a();
2350
2363
  }
2351
2364
  }), null);
2352
- insert(_el$26, createComponent(Show, {
2365
+ insert(_el$28, createComponent(Show, {
2353
2366
  get when() {
2354
2367
  return !activeTab()?.adBlockingEnabled;
2355
2368
  },
2356
2369
  get children() {
2357
- return [_tmpl$5$9(), _tmpl$6$8()];
2370
+ return [_tmpl$5$a(), _tmpl$6$9()];
2358
2371
  }
2359
2372
  }), null);
2360
- _el$30.$$click = () => window.vessel.content.toggleReader();
2361
- addEventListener(_el$31, "click", toggleDevTools, true);
2362
- addEventListener(_el$32, "click", toggleSidebar, true);
2363
- insert(_el$32, createComponent(Show, {
2373
+ _el$32.$$click = () => window.vessel.content.toggleReader();
2374
+ addEventListener(_el$33, "click", toggleDevTools, true);
2375
+ addEventListener(_el$34, "click", toggleSidebar, true);
2376
+ insert(_el$34, createComponent(Show, {
2364
2377
  get when() {
2365
2378
  return pendingApprovalCount() > 0;
2366
2379
  },
2367
2380
  get children() {
2368
- var _el$34 = _tmpl$7$6();
2369
- insert(_el$34, pendingApprovalCount);
2370
- createRenderEffect(() => setAttribute(_el$34, "aria-label", `${pendingApprovalCount()} pending`));
2371
- return _el$34;
2381
+ var _el$36 = _tmpl$7$7();
2382
+ insert(_el$36, pendingApprovalCount);
2383
+ createRenderEffect(() => setAttribute(_el$36, "aria-label", `${pendingApprovalCount()} pending`));
2384
+ return _el$36;
2372
2385
  }
2373
2386
  }), null);
2374
- addEventListener(_el$35, "click", openSettings, true);
2387
+ addEventListener(_el$37, "click", openSettings, true);
2375
2388
  createRenderEffect((_p$) => {
2376
2389
  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()?.adBlockingEnabled, _v$6 = !activeTab()?.adBlockingEnabled, _v$7 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)", _v$8 = !!activeTab()?.isReaderMode, _v$9 = !!devtoolsPanelOpen2(), _v$0 = !!(pendingApprovalCount() > 0), _v$1 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
2377
2390
  _v$ !== _p$.e && (_el$3.disabled = _p$.e = _v$);
2378
2391
  _v$2 !== _p$.t && (_el$4.disabled = _p$.t = _v$2);
2379
2392
  _v$3 !== _p$.a && className(_el$9, _p$.a = _v$3);
2380
2393
  _v$4 !== _p$.o && setAttribute(_el$9, "title", _p$.o = _v$4);
2381
- _v$5 !== _p$.i && _el$25.classList.toggle("active", _p$.i = _v$5);
2382
- _v$6 !== _p$.n && _el$25.classList.toggle("nav-btn-muted", _p$.n = _v$6);
2383
- _v$7 !== _p$.s && setAttribute(_el$25, "title", _p$.s = _v$7);
2384
- _v$8 !== _p$.h && _el$30.classList.toggle("active", _p$.h = _v$8);
2385
- _v$9 !== _p$.r && _el$31.classList.toggle("active", _p$.r = _v$9);
2386
- _v$0 !== _p$.d && _el$32.classList.toggle("has-approvals", _p$.d = _v$0);
2387
- _v$1 !== _p$.l && setAttribute(_el$32, "title", _p$.l = _v$1);
2394
+ _v$5 !== _p$.i && _el$27.classList.toggle("active", _p$.i = _v$5);
2395
+ _v$6 !== _p$.n && _el$27.classList.toggle("nav-btn-muted", _p$.n = _v$6);
2396
+ _v$7 !== _p$.s && setAttribute(_el$27, "title", _p$.s = _v$7);
2397
+ _v$8 !== _p$.h && _el$32.classList.toggle("active", _p$.h = _v$8);
2398
+ _v$9 !== _p$.r && _el$33.classList.toggle("active", _p$.r = _v$9);
2399
+ _v$0 !== _p$.d && _el$34.classList.toggle("has-approvals", _p$.d = _v$0);
2400
+ _v$1 !== _p$.l && setAttribute(_el$34, "title", _p$.l = _v$1);
2388
2401
  return _p$;
2389
2402
  }, {
2390
2403
  e: void 0,
@@ -2404,7 +2417,7 @@ const AddressBar = () => {
2404
2417
  })();
2405
2418
  };
2406
2419
  delegateEvents(["click", "input"]);
2407
- var _tmpl$$e = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$c = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
2420
+ var _tmpl$$f = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
2408
2421
  const TOAST_DURATION_MS$1 = 4200;
2409
2422
  const TOAST_EXIT_MS$2 = 300;
2410
2423
  function isBookmarkToastCandidate(action) {
@@ -2464,13 +2477,13 @@ const BookmarkNotifications = () => {
2464
2477
  timeoutIds.clear();
2465
2478
  });
2466
2479
  return (() => {
2467
- var _el$ = _tmpl$$e();
2480
+ var _el$ = _tmpl$$f();
2468
2481
  insert(_el$, createComponent(For, {
2469
2482
  get each() {
2470
2483
  return toasts();
2471
2484
  },
2472
2485
  children: (toast) => (() => {
2473
- var _el$2 = _tmpl$2$c(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
2486
+ var _el$2 = _tmpl$2$d(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
2474
2487
  insert(_el$3, () => toast.title);
2475
2488
  insert(_el$4, () => toast.message);
2476
2489
  createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!toast.leaving));
@@ -2480,7 +2493,7 @@ const BookmarkNotifications = () => {
2480
2493
  return _el$;
2481
2494
  })();
2482
2495
  };
2483
- var _tmpl$$d = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
2496
+ var _tmpl$$e = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
2484
2497
  const TOAST_DURATION_MS = 3e3;
2485
2498
  const TOAST_EXIT_MS$1 = 300;
2486
2499
  const HighlightNotifications = (props) => {
@@ -2519,7 +2532,7 @@ const HighlightNotifications = (props) => {
2519
2532
  return memo(() => !!visible())() && current();
2520
2533
  },
2521
2534
  get children() {
2522
- var _el$ = _tmpl$$d(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
2535
+ var _el$ = _tmpl$$e(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
2523
2536
  insert(_el$3, () => current().title);
2524
2537
  insert(_el$4, () => current().message);
2525
2538
  createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!leaving()));
@@ -2527,7 +2540,7 @@ const HighlightNotifications = (props) => {
2527
2540
  }
2528
2541
  });
2529
2542
  };
2530
- var _tmpl$$c = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$9 = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$9 = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$7 = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$5 = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
2543
+ var _tmpl$$d = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$c = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$a = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$9 = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$6 = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
2531
2544
  const TOAST_DONE_DURATION_MS = 4200;
2532
2545
  const TOAST_EXIT_MS = 300;
2533
2546
  function formatBytes(bytes) {
@@ -2618,20 +2631,20 @@ const DownloadToast = () => {
2618
2631
  return Math.min(100, Math.round(d.receivedBytes / d.totalBytes * 100));
2619
2632
  };
2620
2633
  return (() => {
2621
- var _el$ = _tmpl$$c();
2634
+ var _el$ = _tmpl$$d();
2622
2635
  insert(_el$, createComponent(For, {
2623
2636
  get each() {
2624
2637
  return downloads();
2625
2638
  },
2626
2639
  children: (dl) => (() => {
2627
- var _el$2 = _tmpl$7$5(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
2640
+ var _el$2 = _tmpl$7$6(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
2628
2641
  insert(_el$4, () => dl.filename);
2629
2642
  insert(_el$3, createComponent(Show, {
2630
2643
  get when() {
2631
2644
  return dl.state === "completed";
2632
2645
  },
2633
2646
  get children() {
2634
- return _tmpl$2$b();
2647
+ return _tmpl$2$c();
2635
2648
  }
2636
2649
  }), null);
2637
2650
  insert(_el$3, createComponent(Show, {
@@ -2639,7 +2652,7 @@ const DownloadToast = () => {
2639
2652
  return dl.state === "cancelled" || dl.state === "interrupted";
2640
2653
  },
2641
2654
  get children() {
2642
- return _tmpl$3$9();
2655
+ return _tmpl$3$a();
2643
2656
  }
2644
2657
  }), null);
2645
2658
  insert(_el$2, createComponent(Show, {
@@ -2648,11 +2661,11 @@ const DownloadToast = () => {
2648
2661
  },
2649
2662
  get children() {
2650
2663
  return [(() => {
2651
- var _el$7 = _tmpl$4$9(), _el$8 = _el$7.firstChild;
2664
+ var _el$7 = _tmpl$4$a(), _el$8 = _el$7.firstChild;
2652
2665
  createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
2653
2666
  return _el$7;
2654
2667
  })(), (() => {
2655
- var _el$9 = _tmpl$5$8();
2668
+ var _el$9 = _tmpl$5$9();
2656
2669
  insert(_el$9, () => formatBytes(dl.receivedBytes), null);
2657
2670
  insert(_el$9, createComponent(Show, {
2658
2671
  get when() {
@@ -2671,7 +2684,7 @@ const DownloadToast = () => {
2671
2684
  return dl.state === "completed";
2672
2685
  },
2673
2686
  get children() {
2674
- var _el$0 = _tmpl$6$7(), _el$1 = _el$0.firstChild;
2687
+ var _el$0 = _tmpl$6$8(), _el$1 = _el$0.firstChild;
2675
2688
  insert(_el$0, () => formatBytes(dl.receivedBytes), _el$1);
2676
2689
  return _el$0;
2677
2690
  }
@@ -2683,7 +2696,7 @@ const DownloadToast = () => {
2683
2696
  return _el$;
2684
2697
  })();
2685
2698
  };
2686
- var _tmpl$$b = /* @__PURE__ */ template(`<div class=find-bar><input class=find-bar-input type=text placeholder="Find in page..."><button class=find-bar-btn title="Previous (Shift+Enter)">&#9650;</button><button class=find-bar-btn title="Next (Enter)">&#9660;</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">&times;`), _tmpl$2$a = /* @__PURE__ */ template(`<span class=find-bar-count>`);
2699
+ var _tmpl$$c = /* @__PURE__ */ template(`<div class=find-bar><input class=find-bar-input type=text placeholder="Find in page..."><button class=find-bar-btn title="Previous (Shift+Enter)">&#9650;</button><button class=find-bar-btn title="Next (Enter)">&#9660;</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">&times;`), _tmpl$2$b = /* @__PURE__ */ template(`<span class=find-bar-count>`);
2687
2700
  const FindBar = () => {
2688
2701
  const [open, setOpen] = createSignal(false);
2689
2702
  const [query, setQuery] = createSignal("");
@@ -2761,7 +2774,7 @@ const FindBar = () => {
2761
2774
  return open();
2762
2775
  },
2763
2776
  get children() {
2764
- var _el$ = _tmpl$$b(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
2777
+ var _el$ = _tmpl$$c(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
2765
2778
  _el$2.$$input = (e) => handleInput(e.currentTarget.value);
2766
2779
  var _ref$ = inputRef;
2767
2780
  typeof _ref$ === "function" ? use(_ref$, _el$2) : inputRef = _el$2;
@@ -2771,7 +2784,7 @@ const FindBar = () => {
2771
2784
  return result();
2772
2785
  },
2773
2786
  children: (r) => (() => {
2774
- var _el$6 = _tmpl$2$a();
2787
+ var _el$6 = _tmpl$2$b();
2775
2788
  insert(_el$6, (() => {
2776
2789
  var _c$ = memo(() => r().matches > 0);
2777
2790
  return () => _c$() ? `${r().activeMatchOrdinal} / ${r().matches}` : "No results";
@@ -2788,7 +2801,7 @@ const FindBar = () => {
2788
2801
  });
2789
2802
  };
2790
2803
  delegateEvents(["input", "click"]);
2791
- var _tmpl$$a = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$9 = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$8 = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$8 = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$7 = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
2804
+ var _tmpl$$b = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$a = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$9 = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$9 = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
2792
2805
  const FlowProgress = () => {
2793
2806
  const {
2794
2807
  runtimeState: runtimeState2
@@ -2819,13 +2832,13 @@ const FlowProgress = () => {
2819
2832
  return flow() || tracker();
2820
2833
  },
2821
2834
  get children() {
2822
- var _el$ = _tmpl$$a();
2835
+ var _el$ = _tmpl$$b();
2823
2836
  insert(_el$, createComponent(Show, {
2824
2837
  get when() {
2825
2838
  return tracker();
2826
2839
  },
2827
2840
  children: (t) => (() => {
2828
- var _el$2 = _tmpl$4$8(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$3.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling;
2841
+ var _el$2 = _tmpl$4$9(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$3.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling;
2829
2842
  insert(_el$4, () => t().goal);
2830
2843
  insert(_el$5, () => progressPercent(t().steps), _el$6);
2831
2844
  insert(_el$9, createComponent(For, {
@@ -2833,7 +2846,7 @@ const FlowProgress = () => {
2833
2846
  return t().steps;
2834
2847
  },
2835
2848
  children: (step) => (() => {
2836
- var _el$12 = _tmpl$5$7(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
2849
+ var _el$12 = _tmpl$5$8(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
2837
2850
  insert(_el$14, () => step.label);
2838
2851
  createRenderEffect(() => className(_el$12, `flow-step ${stepStatusClass(step.status)}`));
2839
2852
  return _el$12;
@@ -2844,7 +2857,7 @@ const FlowProgress = () => {
2844
2857
  return t().lastAction;
2845
2858
  },
2846
2859
  get children() {
2847
- var _el$0 = _tmpl$2$9();
2860
+ var _el$0 = _tmpl$2$a();
2848
2861
  _el$0.firstChild;
2849
2862
  insert(_el$0, () => t().lastAction, null);
2850
2863
  return _el$0;
@@ -2855,7 +2868,7 @@ const FlowProgress = () => {
2855
2868
  return memo(() => !!t().nextHint)() && !t().steps.every((s) => s.status === "done");
2856
2869
  },
2857
2870
  get children() {
2858
- var _el$10 = _tmpl$3$8();
2871
+ var _el$10 = _tmpl$3$9();
2859
2872
  _el$10.firstChild;
2860
2873
  insert(_el$10, () => t().nextHint, null);
2861
2874
  return _el$10;
@@ -2870,7 +2883,7 @@ const FlowProgress = () => {
2870
2883
  return memo(() => !!flow())() && !tracker();
2871
2884
  },
2872
2885
  children: (f) => (() => {
2873
- var _el$15 = _tmpl$4$8(), _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$16.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$20.nextSibling;
2886
+ var _el$15 = _tmpl$4$9(), _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$16.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$20.nextSibling;
2874
2887
  insert(_el$17, () => f().goal);
2875
2888
  insert(_el$18, () => progressPercent(f().steps), _el$19);
2876
2889
  insert(_el$22, createComponent(For, {
@@ -2878,7 +2891,7 @@ const FlowProgress = () => {
2878
2891
  return f().steps;
2879
2892
  },
2880
2893
  children: (step) => (() => {
2881
- var _el$23 = _tmpl$5$7(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
2894
+ var _el$23 = _tmpl$5$8(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
2882
2895
  insert(_el$25, () => step.label);
2883
2896
  createRenderEffect(() => className(_el$23, `flow-step ${stepStatusClass(step.status)}`));
2884
2897
  return _el$23;
@@ -2919,7 +2932,7 @@ function formatTime(iso, options) {
2919
2932
  ...options?.includeSeconds && { second: "2-digit" }
2920
2933
  });
2921
2934
  }
2922
- var _tmpl$$9 = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$8 = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$7 = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$7 = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$6 = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$6 = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$4 = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
2935
+ var _tmpl$$a = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$9 = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$8 = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$8 = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$7 = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$7 = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$5 = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
2923
2936
  const AgentTranscriptDock = () => {
2924
2937
  const {
2925
2938
  runtimeState: runtimeState2
@@ -2956,7 +2969,7 @@ const AgentTranscriptDock = () => {
2956
2969
  return isSummary();
2957
2970
  },
2958
2971
  get children() {
2959
- var _el$ = _tmpl$$9();
2972
+ var _el$ = _tmpl$$a();
2960
2973
  insert(_el$, createComponent(Show, {
2961
2974
  get when() {
2962
2975
  return latestEntry();
@@ -2966,10 +2979,10 @@ const AgentTranscriptDock = () => {
2966
2979
  return hasStreamingEntry();
2967
2980
  },
2968
2981
  get children() {
2969
- return _tmpl$5$6();
2982
+ return _tmpl$5$7();
2970
2983
  }
2971
2984
  }), (() => {
2972
- var _el$10 = _tmpl$6$6(), _el$11 = _el$10.firstChild;
2985
+ var _el$10 = _tmpl$6$7(), _el$11 = _el$10.firstChild;
2973
2986
  insert(_el$10, () => entry().title || entry().kind, _el$11);
2974
2987
  insert(_el$10, (() => {
2975
2988
  var _c$ = memo(() => entry().text.length > 80);
@@ -2985,7 +2998,7 @@ const AgentTranscriptDock = () => {
2985
2998
  return !isSummary();
2986
2999
  },
2987
3000
  get children() {
2988
- var _el$2 = _tmpl$4$7(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
3001
+ var _el$2 = _tmpl$4$8(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
2989
3002
  _el$4.firstChild;
2990
3003
  var _el$7 = _el$4.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
2991
3004
  insert(_el$4, createComponent(Show, {
@@ -2993,7 +3006,7 @@ const AgentTranscriptDock = () => {
2993
3006
  return hasStreamingEntry();
2994
3007
  },
2995
3008
  get children() {
2996
- return _tmpl$2$8();
3009
+ return _tmpl$2$9();
2997
3010
  }
2998
3011
  }), null);
2999
3012
  _el$8.$$click = () => setCollapsed((value) => !value);
@@ -3004,14 +3017,14 @@ const AgentTranscriptDock = () => {
3004
3017
  return !collapsed();
3005
3018
  },
3006
3019
  get children() {
3007
- var _el$0 = _tmpl$3$7();
3020
+ var _el$0 = _tmpl$3$8();
3008
3021
  use((el) => useScrollFade(el), _el$0);
3009
3022
  insert(_el$0, createComponent(For, {
3010
3023
  get each() {
3011
3024
  return visibleEntries();
3012
3025
  },
3013
3026
  children: (entry) => (() => {
3014
- var _el$12 = _tmpl$7$4(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
3027
+ var _el$12 = _tmpl$7$5(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
3015
3028
  insert(_el$14, () => entry.title || entry.kind);
3016
3029
  insert(_el$15, () => formatTime(entry.updatedAt));
3017
3030
  insert(_el$16, () => entry.text);
@@ -3376,7 +3389,7 @@ function useAnimatedPresence(isOpen, exitDurationMs) {
3376
3389
  });
3377
3390
  return { visible, closing };
3378
3391
  }
3379
- var _tmpl$$8 = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Configure a chat provider to start using the AI assistant.</p><button class=command-bar-no-provider-btn>Open Settings <kbd>Ctrl+,`), _tmpl$2$7 = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$3$6 = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$4$6 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$5$5 = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$6$5 = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
3392
+ var _tmpl$$9 = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Configure a chat provider to start using the AI assistant.</p><button class=command-bar-no-provider-btn>Open Settings <kbd>Ctrl+,`), _tmpl$2$8 = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$3$7 = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$4$7 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$5$6 = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$6$6 = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
3380
3393
  const COMMAND_BAR_EXIT_MS = 200;
3381
3394
  const CommandBar = () => {
3382
3395
  const {
@@ -3430,7 +3443,7 @@ const CommandBar = () => {
3430
3443
  return visible();
3431
3444
  },
3432
3445
  get children() {
3433
- var _el$ = _tmpl$4$6(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$10 = _el$3.nextSibling, _el$11 = _el$10.firstChild;
3446
+ var _el$ = _tmpl$4$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$10 = _el$3.nextSibling, _el$11 = _el$10.firstChild;
3434
3447
  _el$11.nextSibling;
3435
3448
  addEventListener(_el$, "click", closeCommandBar, true);
3436
3449
  _el$2.$$click = (e) => e.stopPropagation();
@@ -3444,7 +3457,7 @@ const CommandBar = () => {
3444
3457
  return !hasProvider();
3445
3458
  },
3446
3459
  get children() {
3447
- var _el$6 = _tmpl$$8(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
3460
+ var _el$6 = _tmpl$$9(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
3448
3461
  _el$8.$$click = () => {
3449
3462
  closeCommandBar();
3450
3463
  openSettings();
@@ -3457,13 +3470,13 @@ const CommandBar = () => {
3457
3470
  return memo(() => !!(hasProvider() && recentQueries2().length > 0))() && !input().trim();
3458
3471
  },
3459
3472
  get children() {
3460
- var _el$9 = _tmpl$2$7(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
3473
+ var _el$9 = _tmpl$2$8(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
3461
3474
  insert(_el$1, createComponent(For, {
3462
3475
  get each() {
3463
3476
  return recentQueries2();
3464
3477
  },
3465
3478
  children: (q) => (() => {
3466
- var _el$14 = _tmpl$5$5();
3479
+ var _el$14 = _tmpl$5$6();
3467
3480
  _el$14.$$click = () => void handleRecentClick(q);
3468
3481
  insert(_el$14, q);
3469
3482
  return _el$14;
@@ -3477,10 +3490,10 @@ const CommandBar = () => {
3477
3490
  return hasProvider();
3478
3491
  },
3479
3492
  get fallback() {
3480
- return _tmpl$6$5();
3493
+ return _tmpl$6$6();
3481
3494
  },
3482
3495
  get children() {
3483
- return _tmpl$3$6();
3496
+ return _tmpl$3$7();
3484
3497
  }
3485
3498
  }), null);
3486
3499
  createRenderEffect((_p$) => {
@@ -3568,6 +3581,7 @@ function useBookmarks() {
3568
3581
  keyFields,
3569
3582
  agentHints
3570
3583
  ),
3584
+ updateBookmark: (id, updates) => window.vessel.bookmarks.updateBookmark(id, updates),
3571
3585
  removeBookmark: (id) => window.vessel.bookmarks.removeBookmark(id),
3572
3586
  createFolder: (name) => window.vessel.bookmarks.createFolder(name),
3573
3587
  createFolderWithSummary: (name, summary) => window.vessel.bookmarks.createFolderWithSummary(name, summary),
@@ -4931,7 +4945,7 @@ function renderToolChip(name, args) {
4931
4945
  function renderMarkdown(source) {
4932
4946
  const codeBlocks = [];
4933
4947
  const toolChips = [];
4934
- const normalized = source.replace(/\r\n?/g, "\n").replace(
4948
+ const normalized = source.replace(/\r\n?/g, "\n").replace(/<<erase_prev>>/g, "\0ERASE\0").replace(
4935
4949
  /<<tool:([^:>\n]+)(?::([^>\n]*))?>>/g,
4936
4950
  (_, name, args) => {
4937
4951
  const token = `\0TC${toolChips.length}\0`;
@@ -4955,10 +4969,16 @@ ${token}
4955
4969
  );
4956
4970
  const rendered = normalized.split(/\n{2,}/).map((block) => {
4957
4971
  const trimmed = block.trim();
4972
+ if (trimmed === "\0ERASE\0") return "\0ERASE\0";
4958
4973
  if (/^\x00TC\d+\x00$/.test(trimmed)) return trimmed;
4959
4974
  return renderBlock(block);
4960
4975
  }).filter(Boolean).join("");
4961
- let output = rendered;
4976
+ const erased = rendered.replace(
4977
+ /(?:^|(?<=\x00TC\d+\x00))([\s\S]*?)\x00ERASE\x00/g,
4978
+ (_, _content) => ""
4979
+ );
4980
+ const cleaned = erased.replace(/\x00ERASE\x00/g, "");
4981
+ let output = cleaned;
4962
4982
  output = codeBlocks.reduce(
4963
4983
  (out, snippet, index) => out.replace(`\0CB${index}\0`, snippet),
4964
4984
  output
@@ -5061,7 +5081,7 @@ function getBookmarkSearchMatch(args) {
5061
5081
  }
5062
5082
  return { matchedFields, score };
5063
5083
  }
5064
- var _tmpl$$7 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$6 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$5 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$5 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`);
5084
+ var _tmpl$$8 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$6 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$6 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`);
5065
5085
  const DropdownSelect = (props) => {
5066
5086
  const [open, setOpen] = createSignal(false);
5067
5087
  let rootRef;
@@ -5085,7 +5105,7 @@ const DropdownSelect = (props) => {
5085
5105
  });
5086
5106
  });
5087
5107
  return (() => {
5088
- var _el$ = _tmpl$2$6(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
5108
+ var _el$ = _tmpl$2$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
5089
5109
  var _ref$ = rootRef;
5090
5110
  typeof _ref$ === "function" ? use(_ref$, _el$) : rootRef = _el$;
5091
5111
  _el$2.$$click = () => setOpen((current) => !current);
@@ -5095,13 +5115,13 @@ const DropdownSelect = (props) => {
5095
5115
  return open();
5096
5116
  },
5097
5117
  get children() {
5098
- var _el$5 = _tmpl$$7();
5118
+ var _el$5 = _tmpl$$8();
5099
5119
  insert(_el$5, createComponent(For, {
5100
5120
  get each() {
5101
5121
  return props.options;
5102
5122
  },
5103
5123
  children: (option) => (() => {
5104
- var _el$6 = _tmpl$4$5(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
5124
+ var _el$6 = _tmpl$4$6(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
5105
5125
  _el$6.$$click = () => {
5106
5126
  props.onChange(option.value);
5107
5127
  setOpen(false);
@@ -5112,7 +5132,7 @@ const DropdownSelect = (props) => {
5112
5132
  return option.description;
5113
5133
  },
5114
5134
  get children() {
5115
- var _el$9 = _tmpl$3$5();
5135
+ var _el$9 = _tmpl$3$6();
5116
5136
  insert(_el$9, () => option.description);
5117
5137
  return _el$9;
5118
5138
  }
@@ -5168,7 +5188,7 @@ var LucideContext = createContext({
5168
5188
  absoluteStrokeWidth: false,
5169
5189
  class: ""
5170
5190
  });
5171
- var _tmpl$$6 = /* @__PURE__ */ template(`<svg>`);
5191
+ var _tmpl$$7 = /* @__PURE__ */ template(`<svg>`);
5172
5192
  var hasA11yProp = (props) => {
5173
5193
  for (const prop in props) {
5174
5194
  if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
@@ -5190,7 +5210,7 @@ var Icon = (props) => {
5190
5210
  const [localProps, rest] = splitProps(props, ["color", "size", "strokeWidth", "children", "class", "name", "iconNode", "absoluteStrokeWidth"]);
5191
5211
  const globalProps = useContext(LucideContext);
5192
5212
  return (() => {
5193
- var _el$ = _tmpl$$6();
5213
+ var _el$ = _tmpl$$7();
5194
5214
  spread(_el$, mergeProps(defaultAttributes_default, {
5195
5215
  get width() {
5196
5216
  return localProps.size ?? globalProps.size ?? defaultAttributes_default.width;
@@ -5508,7 +5528,7 @@ function renderKitPrompt(kit, values) {
5508
5528
  (_, key) => values[key] ?? ""
5509
5529
  );
5510
5530
  }
5511
- 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$2 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$2 = /* @__PURE__ */ template(`<option>`), _tmpl$42$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
5531
+ var _tmpl$$6 = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$6 = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$5 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$5 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$4 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$3 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$3 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$3 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$2 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$2 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$2 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$2 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$2 = /* @__PURE__ */ template(`<option>`), _tmpl$42$2 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
5512
5532
  const ICON_MAP = {
5513
5533
  BookOpen: book_open_default,
5514
5534
  Tag: tag_default,
@@ -5833,7 +5853,7 @@ const AutomationTab = (props) => {
5833
5853
  return memo(() => !!!premiumData.loading)() && !isPremium();
5834
5854
  },
5835
5855
  get children() {
5836
- var _el$2 = _tmpl$$5(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling;
5856
+ var _el$2 = _tmpl$$6(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling;
5837
5857
  insert(_el$3, createComponent(zap_default, {
5838
5858
  size: 24
5839
5859
  }));
@@ -5847,7 +5867,7 @@ const AutomationTab = (props) => {
5847
5867
  },
5848
5868
  get children() {
5849
5869
  return [(() => {
5850
- var _el$7 = _tmpl$2$5(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$0.nextSibling;
5870
+ var _el$7 = _tmpl$2$6(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$0.nextSibling;
5851
5871
  insert(_el$0, () => allKits().length, _el$1);
5852
5872
  _el$10.$$click = () => void handleInstall();
5853
5873
  return _el$7;
@@ -5856,13 +5876,13 @@ const AutomationTab = (props) => {
5856
5876
  return installError() !== null;
5857
5877
  },
5858
5878
  get children() {
5859
- var _el$11 = _tmpl$3$4(), _el$12 = _el$11.firstChild, _el$13 = _el$12.nextSibling;
5879
+ var _el$11 = _tmpl$3$5(), _el$12 = _el$11.firstChild, _el$13 = _el$12.nextSibling;
5860
5880
  insert(_el$12, installError);
5861
5881
  _el$13.$$click = () => setInstallError(null);
5862
5882
  return _el$11;
5863
5883
  }
5864
5884
  }), (() => {
5865
- var _el$14 = _tmpl$4$4();
5885
+ var _el$14 = _tmpl$4$5();
5866
5886
  insert(_el$14, createComponent(For, {
5867
5887
  get each() {
5868
5888
  return allKits();
@@ -5922,14 +5942,14 @@ const AutomationTab = (props) => {
5922
5942
  },
5923
5943
  get children() {
5924
5944
  return [(() => {
5925
- var _el$15 = _tmpl$5$4(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
5945
+ var _el$15 = _tmpl$5$5(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
5926
5946
  insert(_el$15, createComponent(clock_default, {
5927
5947
  size: 12
5928
5948
  }), _el$16);
5929
5949
  insert(_el$17, () => scheduledJobs().length);
5930
5950
  return _el$15;
5931
5951
  })(), (() => {
5932
- var _el$18 = _tmpl$6$4();
5952
+ var _el$18 = _tmpl$6$5();
5933
5953
  insert(_el$18, createComponent(For, {
5934
5954
  get each() {
5935
5955
  return scheduledJobs();
@@ -6007,14 +6027,14 @@ const AutomationTab = (props) => {
6007
6027
  },
6008
6028
  get children() {
6009
6029
  return [(() => {
6010
- var _el$19 = _tmpl$7$3(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
6030
+ var _el$19 = _tmpl$7$4(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
6011
6031
  insert(_el$19, createComponent(zap_default, {
6012
6032
  size: 12
6013
6033
  }), _el$20);
6014
6034
  insert(_el$21, () => automationActivities2().length);
6015
6035
  return _el$19;
6016
6036
  })(), (() => {
6017
- var _el$22 = _tmpl$8$3();
6037
+ var _el$22 = _tmpl$8$4();
6018
6038
  insert(_el$22, createComponent(For, {
6019
6039
  get each() {
6020
6040
  return automationActivities2();
@@ -6347,8 +6367,121 @@ const AutomationTab = (props) => {
6347
6367
  })();
6348
6368
  };
6349
6369
  delegateEvents(["click", "input", "keydown", "contextmenu"]);
6370
+ var _tmpl$$5 = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$5 = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$4 = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=agent-section-title>Recent page changes`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=page-diff-list>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$3 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$8$3 = /* @__PURE__ */ template(`<div class=page-diff-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=page-diff-content><div class=page-diff-time></div><div class=page-diff-summary>`);
6371
+ const PageDiffTimeline = () => {
6372
+ const {
6373
+ activeTab
6374
+ } = useTabs();
6375
+ const [bursts, setBursts] = createSignal([]);
6376
+ const [loading, setLoading] = createSignal(true);
6377
+ const [error, setError] = createSignal(null);
6378
+ let latestRequestId = 0;
6379
+ const loadHistory = async () => {
6380
+ const requestId = ++latestRequestId;
6381
+ const tab = activeTab();
6382
+ if (!tab?.url) {
6383
+ setBursts([]);
6384
+ setError(null);
6385
+ setLoading(false);
6386
+ return;
6387
+ }
6388
+ setLoading(true);
6389
+ try {
6390
+ const result = await window.vessel.pageDiff.getHistory();
6391
+ if (requestId !== latestRequestId) return;
6392
+ if (result && typeof result === "object" && "error" in result) {
6393
+ setError(result.error);
6394
+ setBursts([]);
6395
+ } else {
6396
+ setBursts(result ?? []);
6397
+ setError(null);
6398
+ }
6399
+ } catch {
6400
+ if (requestId !== latestRequestId) return;
6401
+ setError("Failed to load diff history");
6402
+ setBursts([]);
6403
+ } finally {
6404
+ if (requestId === latestRequestId) {
6405
+ setLoading(false);
6406
+ }
6407
+ }
6408
+ };
6409
+ createEffect(() => {
6410
+ void activeTab()?.url;
6411
+ void loadHistory();
6412
+ });
6413
+ const unsubscribe = window.vessel.pageDiff.onChanged((diff) => {
6414
+ const tab = activeTab();
6415
+ if (!tab || !matchesPageSnapshotUrl(tab.url, diff.url)) return;
6416
+ void loadHistory();
6417
+ });
6418
+ onCleanup(() => {
6419
+ unsubscribe();
6420
+ });
6421
+ return (() => {
6422
+ var _el$ = _tmpl$6$4();
6423
+ insert(_el$, createComponent(Show, {
6424
+ get when() {
6425
+ return loading();
6426
+ },
6427
+ get children() {
6428
+ return _tmpl$$5();
6429
+ }
6430
+ }), null);
6431
+ insert(_el$, createComponent(Show, {
6432
+ get when() {
6433
+ return memo(() => !!!loading())() && error();
6434
+ },
6435
+ get children() {
6436
+ var _el$3 = _tmpl$2$5();
6437
+ insert(_el$3, error);
6438
+ return _el$3;
6439
+ }
6440
+ }), null);
6441
+ insert(_el$, createComponent(Show, {
6442
+ get when() {
6443
+ return memo(() => !!(!loading() && !error()))() && bursts().length === 0;
6444
+ },
6445
+ get children() {
6446
+ return _tmpl$3$4();
6447
+ }
6448
+ }), null);
6449
+ insert(_el$, createComponent(Show, {
6450
+ get when() {
6451
+ return memo(() => !!(!loading() && !error()))() && bursts().length > 0;
6452
+ },
6453
+ get children() {
6454
+ return [_tmpl$4$4(), (() => {
6455
+ var _el$6 = _tmpl$5$4();
6456
+ insert(_el$6, createComponent(For, {
6457
+ get each() {
6458
+ return bursts();
6459
+ },
6460
+ children: (burst, i) => (() => {
6461
+ var _el$7 = _tmpl$8$3(), _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$1 = _el$8.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
6462
+ insert(_el$8, createComponent(Show, {
6463
+ get when() {
6464
+ return i() < bursts().length - 1;
6465
+ },
6466
+ get children() {
6467
+ return _tmpl$7$3();
6468
+ }
6469
+ }), null);
6470
+ insert(_el$10, () => new Date(burst.detectedAt).toLocaleString());
6471
+ insert(_el$11, () => burst.summary);
6472
+ createRenderEffect(() => _el$9.classList.toggle("latest", !!(i() === 0)));
6473
+ return _el$7;
6474
+ })()
6475
+ }));
6476
+ return _el$6;
6477
+ })()];
6478
+ }
6479
+ }), null);
6480
+ return _el$;
6481
+ })();
6482
+ };
6350
6483
  const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
6351
- 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(`<p class=history-empty>No browsing history yet.`), _tmpl$11$2 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><button class=history-clear-btn>Clear</button></div><div class=history-list>`), _tmpl$12$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$13$1 = /* @__PURE__ */ template(`<span>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$15$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$16$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$17$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$18$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$19$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$20$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$21$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$23$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button></div><div class=sidebar-messages><div>`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$27$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$28$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$32$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$33$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$34$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$35$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$36$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$37$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$38$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$39$1 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$40$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$41$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$42$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$43 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$44 = /* @__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$45 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$46 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$47 = /* @__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$48 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$49 = /* @__PURE__ */ template(`<div>`), _tmpl$50 = /* @__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$51 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$52 = /* @__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$53 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
6484
+ var _tmpl$$4 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$3 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$3 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$3 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$2 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$2 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$0$2 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$1$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$10$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$11$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$12$2 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><button class=history-clear-btn>Clear</button></div><div class=history-list>`), _tmpl$13$1 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$15$1 = /* @__PURE__ */ template(`<span>`), _tmpl$16$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$17$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$19$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$20$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$23$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button></div><div class=sidebar-messages><div>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$34$1 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$35$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$36$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$38$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$39$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$40$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$41$1 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$42$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$43 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$44 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$45 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$46 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$47 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$51 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$52 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$53 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$54 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$55 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$56 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$57 = /* @__PURE__ */ template(`<div>`), _tmpl$58 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$59 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$60 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$61 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
6352
6485
  const UNSORTED_FOLDER = {
6353
6486
  id: "unsorted",
6354
6487
  name: "Unsorted",
@@ -6409,6 +6542,8 @@ const Sidebar = (props) => {
6409
6542
  resolveApproval,
6410
6543
  createCheckpoint,
6411
6544
  restoreCheckpoint,
6545
+ updateCheckpointNote,
6546
+ undoLastAction,
6412
6547
  restoreSession
6413
6548
  } = useRuntime();
6414
6549
  const {
@@ -6427,6 +6562,7 @@ const Sidebar = (props) => {
6427
6562
  const {
6428
6563
  bookmarksState: bookmarksState2,
6429
6564
  saveBookmark,
6565
+ updateBookmark,
6430
6566
  removeBookmark,
6431
6567
  createFolderWithSummary,
6432
6568
  removeFolder,
@@ -6596,7 +6732,12 @@ ${contextBlock}` : contextBlock);
6596
6732
  }
6597
6733
  };
6598
6734
  const [checkpointName, setCheckpointName] = createSignal("");
6735
+ const [checkpointNote, setCheckpointNote] = createSignal("");
6599
6736
  const [bookmarkNote, setBookmarkNote] = createSignal("");
6737
+ const [bookmarkIntent, setBookmarkIntent] = createSignal("");
6738
+ const [bookmarkExpectedContent, setBookmarkExpectedContent] = createSignal("");
6739
+ const [bookmarkKeyFields, setBookmarkKeyFields] = createSignal("");
6740
+ const [bookmarkAgentHints, setBookmarkAgentHints] = createSignal("");
6600
6741
  const [bookmarkSaveExpanded, setBookmarkSaveExpanded] = createSignal(false);
6601
6742
  const [selectedFolderId, setSelectedFolderId] = createSignal(UNSORTED_FOLDER.id);
6602
6743
  const [newFolderName, setNewFolderName] = createSignal("");
@@ -6605,6 +6746,13 @@ ${contextBlock}` : contextBlock);
6605
6746
  const [editingFolderId, setEditingFolderId] = createSignal(null);
6606
6747
  const [editingFolderName, setEditingFolderName] = createSignal("");
6607
6748
  const [editingFolderSummary, setEditingFolderSummary] = createSignal("");
6749
+ const [editingBookmarkId, setEditingBookmarkId] = createSignal(null);
6750
+ const [editingBookmarkTitle, setEditingBookmarkTitle] = createSignal("");
6751
+ const [editingBookmarkNote, setEditingBookmarkNote] = createSignal("");
6752
+ const [editingBookmarkIntent, setEditingBookmarkIntent] = createSignal("");
6753
+ const [editingBookmarkExpectedContent, setEditingBookmarkExpectedContent] = createSignal("");
6754
+ const [editingBookmarkKeyFields, setEditingBookmarkKeyFields] = createSignal("");
6755
+ const [editingBookmarkAgentHints, setEditingBookmarkAgentHints] = createSignal("");
6608
6756
  const [deletingFolderId, setDeletingFolderId] = createSignal(null);
6609
6757
  const [expandedFolderIds, setExpandedFolderIds] = createSignal([UNSORTED_FOLDER.id]);
6610
6758
  const [actionsExpanded, setActionsExpanded] = createSignal(false);
@@ -6781,13 +6929,63 @@ ${contextBlock}` : contextBlock);
6781
6929
  day: "numeric",
6782
6930
  year: "numeric"
6783
6931
  });
6932
+ const parseBookmarkKeyFields = (value) => {
6933
+ const fields = value.split(",").map((entry) => entry.trim()).filter(Boolean);
6934
+ return fields.length > 0 ? fields : void 0;
6935
+ };
6936
+ const parseBookmarkAgentHints = (value) => {
6937
+ const entries2 = value.split("\n").map((line) => {
6938
+ const separator = line.indexOf(":");
6939
+ if (separator === -1) return null;
6940
+ const key = line.slice(0, separator).trim();
6941
+ const hint = line.slice(separator + 1).trim();
6942
+ return key ? [key, hint] : null;
6943
+ }).filter((entry) => Boolean(entry)).filter(([, hint]) => hint.length > 0);
6944
+ return entries2.length > 0 ? Object.fromEntries(entries2) : void 0;
6945
+ };
6946
+ const formatBookmarkKeyFields = (value) => value?.join(", ") || "";
6947
+ const formatBookmarkAgentHints = (value) => value ? Object.entries(value).map(([key, hint]) => `${key}: ${hint}`).join("\n") : "";
6948
+ const resetBookmarkEditor = () => {
6949
+ setEditingBookmarkId(null);
6950
+ setEditingBookmarkTitle("");
6951
+ setEditingBookmarkNote("");
6952
+ setEditingBookmarkIntent("");
6953
+ setEditingBookmarkExpectedContent("");
6954
+ setEditingBookmarkKeyFields("");
6955
+ setEditingBookmarkAgentHints("");
6956
+ };
6957
+ const startEditingBookmark = (bookmark) => {
6958
+ setEditingBookmarkId(bookmark.id);
6959
+ setEditingBookmarkTitle(bookmark.title || bookmark.url);
6960
+ setEditingBookmarkNote(bookmark.note || "");
6961
+ setEditingBookmarkIntent(bookmark.intent || "");
6962
+ setEditingBookmarkExpectedContent(bookmark.expectedContent || "");
6963
+ setEditingBookmarkKeyFields(formatBookmarkKeyFields(bookmark.keyFields));
6964
+ setEditingBookmarkAgentHints(formatBookmarkAgentHints(bookmark.agentHints));
6965
+ };
6784
6966
  const handleSaveBookmark = async () => {
6785
6967
  const tab = currentTab();
6786
6968
  if (!tab?.url) return;
6787
- await saveBookmark(tab.url, tab.title?.trim() || tab.url, selectedFolderId(), bookmarkNote());
6969
+ await saveBookmark(tab.url, tab.title?.trim() || tab.url, selectedFolderId(), bookmarkNote(), bookmarkIntent() || void 0, bookmarkExpectedContent() || void 0, parseBookmarkKeyFields(bookmarkKeyFields()), parseBookmarkAgentHints(bookmarkAgentHints()));
6788
6970
  setBookmarkNote("");
6971
+ setBookmarkIntent("");
6972
+ setBookmarkExpectedContent("");
6973
+ setBookmarkKeyFields("");
6974
+ setBookmarkAgentHints("");
6789
6975
  setBookmarkSaveExpanded(false);
6790
6976
  };
6977
+ const handleUpdateBookmark = async (bookmarkId) => {
6978
+ const updated = await updateBookmark(bookmarkId, {
6979
+ title: editingBookmarkTitle(),
6980
+ note: editingBookmarkNote(),
6981
+ intent: editingBookmarkIntent(),
6982
+ expectedContent: editingBookmarkExpectedContent(),
6983
+ keyFields: parseBookmarkKeyFields(editingBookmarkKeyFields()),
6984
+ agentHints: parseBookmarkAgentHints(editingBookmarkAgentHints())
6985
+ });
6986
+ if (!updated) return;
6987
+ resetBookmarkEditor();
6988
+ };
6791
6989
  const handleCreateFolder = async (e) => {
6792
6990
  e.preventDefault();
6793
6991
  const name = newFolderName().trim();
@@ -6825,14 +7023,22 @@ ${contextBlock}` : contextBlock);
6825
7023
  setExpandedFolderIds((current) => current.includes(folderId) ? current.filter((id) => id !== folderId) : [...current, folderId]);
6826
7024
  };
6827
7025
  const isFolderExpanded = (folderId) => normalizedBookmarkSearch().length > 0 || expandedFolderIds().includes(folderId);
7026
+ onMount(() => {
7027
+ const cleanup = window.vessel.ui.onSidebarNavigate((tab) => {
7028
+ if (tab === "supervisor" || tab === "bookmarks" || tab === "checkpoints" || tab === "chat" || tab === "automation" || tab === "history" || tab === "diff") {
7029
+ setSidebarTab(tab);
7030
+ }
7031
+ });
7032
+ onCleanup(cleanup);
7033
+ });
6828
7034
  return createComponent(Show, {
6829
7035
  get when() {
6830
7036
  return props.forceOpen || sidebarOpen2();
6831
7037
  },
6832
7038
  get children() {
6833
- var _el$9 = _tmpl$25$1(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$1.nextSibling, _el$16 = _el$15.firstChild;
7039
+ var _el$9 = _tmpl$27$1(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$1.nextSibling, _el$16 = _el$15.firstChild;
6834
7040
  _el$16.firstChild;
6835
- var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$15.nextSibling, _el$93 = _el$24.firstChild;
7041
+ var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$23.nextSibling, _el$25 = _el$15.nextSibling, _el$104 = _el$25.firstChild;
6836
7042
  _el$0.$$pointerdown = startResize;
6837
7043
  setAttribute(_el$11, "src", vesselLogo);
6838
7044
  addEventListener(_el$13, "click", clearHistory, true);
@@ -6853,20 +7059,21 @@ ${contextBlock}` : contextBlock);
6853
7059
  _el$21.$$click = () => setSidebarTab("chat");
6854
7060
  _el$22.$$click = () => setSidebarTab("automation");
6855
7061
  _el$23.$$click = () => setSidebarTab("history");
7062
+ _el$24.$$click = () => setSidebarTab("diff");
6856
7063
  use((el) => {
6857
7064
  messagesContainerRef = el;
6858
7065
  useScrollFade(el);
6859
- }, _el$24);
6860
- insert(_el$24, createComponent(Show, {
7066
+ }, _el$25);
7067
+ insert(_el$25, createComponent(Show, {
6861
7068
  get when() {
6862
7069
  return sidebarTab() === "supervisor";
6863
7070
  },
6864
7071
  get children() {
6865
- var _el$25 = _tmpl$6$3(), _el$26 = _el$25.firstChild, _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.nextSibling, _el$30 = _el$27.nextSibling, _el$31 = _el$26.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$31.nextSibling, _el$36 = _el$34.nextSibling;
6866
- _el$36.firstChild;
6867
- insert(_el$29, () => runtimeState2().supervisor.paused ? "Agent is paused" : "Agent is live");
6868
- insert(_el$30, () => runtimeState2().supervisor.paused ? "Paused" : "Running");
6869
- insert(_el$31, createComponent(DropdownSelect, {
7072
+ var _el$26 = _tmpl$7$2(), _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$27.nextSibling, _el$33 = _el$32.firstChild, _el$34 = _el$33.nextSibling, _el$36 = _el$32.nextSibling, _el$38 = _el$36.nextSibling;
7073
+ _el$38.firstChild;
7074
+ insert(_el$30, () => runtimeState2().supervisor.paused ? "Agent is paused" : "Agent is live");
7075
+ insert(_el$31, () => runtimeState2().supervisor.paused ? "Paused" : "Running");
7076
+ insert(_el$32, createComponent(DropdownSelect, {
6870
7077
  "class": "agent-select",
6871
7078
  get value() {
6872
7079
  return runtimeState2().supervisor.approvalMode;
@@ -6876,55 +7083,66 @@ ${contextBlock}` : contextBlock);
6876
7083
  },
6877
7084
  ariaLabel: "Approval mode",
6878
7085
  onChange: (value) => void setApprovalMode(value)
6879
- }), _el$32);
6880
- _el$32.$$click = () => void (runtimeState2().supervisor.paused ? resume() : pause());
6881
- insert(_el$32, () => runtimeState2().supervisor.paused ? "Resume" : "Pause");
6882
- _el$33.$$click = () => void restoreSession();
6883
- insert(_el$34, approvalModeDescription);
6884
- insert(_el$25, createComponent(Show, {
7086
+ }), _el$33);
7087
+ _el$33.$$click = () => void (runtimeState2().supervisor.paused ? resume() : pause());
7088
+ insert(_el$33, () => runtimeState2().supervisor.paused ? "Resume" : "Pause");
7089
+ _el$34.$$click = () => void restoreSession();
7090
+ insert(_el$32, createComponent(Show, {
7091
+ get when() {
7092
+ return runtimeState2().canUndo;
7093
+ },
7094
+ get children() {
7095
+ var _el$35 = _tmpl$4$3();
7096
+ _el$35.$$click = () => void undoLastAction();
7097
+ createRenderEffect(() => setAttribute(_el$35, "title", runtimeState2().undoInfo ? `Undo: ${runtimeState2().undoInfo.actionName}` : "Undo last action"));
7098
+ return _el$35;
7099
+ }
7100
+ }), null);
7101
+ insert(_el$36, approvalModeDescription);
7102
+ insert(_el$26, createComponent(Show, {
6885
7103
  get when() {
6886
7104
  return runtimeState2().supervisor.pendingApprovals.length > 0;
6887
7105
  },
6888
7106
  get fallback() {
6889
- return _tmpl$26$1();
7107
+ return _tmpl$28$1();
6890
7108
  },
6891
7109
  get children() {
6892
- return [_tmpl$4$3(), createComponent(For, {
7110
+ return [_tmpl$5$3(), createComponent(For, {
6893
7111
  get each() {
6894
7112
  return runtimeState2().supervisor.pendingApprovals;
6895
7113
  },
6896
7114
  children: (approval) => (() => {
6897
- var _el$111 = _tmpl$27$1(), _el$112 = _el$111.firstChild, _el$113 = _el$112.nextSibling, _el$114 = _el$113.nextSibling, _el$115 = _el$114.nextSibling, _el$116 = _el$115.nextSibling, _el$117 = _el$116.firstChild, _el$118 = _el$117.nextSibling;
6898
- insert(_el$113, () => approval.name);
6899
- insert(_el$114, () => approval.argsSummary);
6900
- insert(_el$115, () => approval.reason);
6901
- _el$117.$$click = () => void resolveApproval(approval.id, true);
6902
- _el$118.$$click = () => void resolveApproval(approval.id, false);
6903
- return _el$111;
7115
+ var _el$122 = _tmpl$29$1(), _el$123 = _el$122.firstChild, _el$124 = _el$123.nextSibling, _el$125 = _el$124.nextSibling, _el$126 = _el$125.nextSibling, _el$127 = _el$126.nextSibling, _el$128 = _el$127.firstChild, _el$129 = _el$128.nextSibling;
7116
+ insert(_el$124, () => approval.name);
7117
+ insert(_el$125, () => approval.argsSummary);
7118
+ insert(_el$126, () => approval.reason);
7119
+ _el$128.$$click = () => void resolveApproval(approval.id, true);
7120
+ _el$129.$$click = () => void resolveApproval(approval.id, false);
7121
+ return _el$122;
6904
7122
  })()
6905
7123
  })];
6906
7124
  }
6907
- }), _el$36);
6908
- insert(_el$36, createComponent(Show, {
7125
+ }), _el$38);
7126
+ insert(_el$38, createComponent(Show, {
6909
7127
  get when() {
6910
7128
  return recentActions().length > 0;
6911
7129
  },
6912
7130
  get children() {
6913
- var _el$38 = _tmpl$5$3();
6914
- _el$38.$$click = () => setActionsExpanded((current) => !current);
6915
- insert(_el$38, (() => {
7131
+ var _el$40 = _tmpl$6$3();
7132
+ _el$40.$$click = () => setActionsExpanded((current) => !current);
7133
+ insert(_el$40, (() => {
6916
7134
  var _c$ = memo(() => !!actionsExpanded());
6917
7135
  return () => _c$() ? "Hide history" : `Show history (${recentActions().length})`;
6918
7136
  })());
6919
- return _el$38;
7137
+ return _el$40;
6920
7138
  }
6921
7139
  }), null);
6922
- insert(_el$25, createComponent(Show, {
7140
+ insert(_el$26, createComponent(Show, {
6923
7141
  get when() {
6924
7142
  return recentActions().length > 0;
6925
7143
  },
6926
7144
  get fallback() {
6927
- return _tmpl$28$1();
7145
+ return _tmpl$30$1();
6928
7146
  },
6929
7147
  get children() {
6930
7148
  return createComponent(Show, {
@@ -6932,7 +7150,7 @@ ${contextBlock}` : contextBlock);
6932
7150
  return actionsExpanded();
6933
7151
  },
6934
7152
  get fallback() {
6935
- return _tmpl$29$1();
7153
+ return _tmpl$31$1();
6936
7154
  },
6937
7155
  get children() {
6938
7156
  return createComponent(For, {
@@ -6940,71 +7158,71 @@ ${contextBlock}` : contextBlock);
6940
7158
  return recentActions();
6941
7159
  },
6942
7160
  children: (action) => (() => {
6943
- var _el$121 = _tmpl$32$1(), _el$122 = _el$121.firstChild, _el$123 = _el$122.firstChild, _el$124 = _el$123.nextSibling, _el$125 = _el$122.nextSibling;
6944
- insert(_el$123, () => action.name);
6945
- insert(_el$124, () => action.status);
6946
- insert(_el$125, () => action.argsSummary);
6947
- insert(_el$121, createComponent(Show, {
7161
+ var _el$132 = _tmpl$34$1(), _el$133 = _el$132.firstChild, _el$134 = _el$133.firstChild, _el$135 = _el$134.nextSibling, _el$136 = _el$133.nextSibling;
7162
+ insert(_el$134, () => action.name);
7163
+ insert(_el$135, () => action.status);
7164
+ insert(_el$136, () => action.argsSummary);
7165
+ insert(_el$132, createComponent(Show, {
6948
7166
  get when() {
6949
7167
  return action.resultSummary;
6950
7168
  },
6951
7169
  get children() {
6952
- var _el$126 = _tmpl$30$1();
6953
- insert(_el$126, () => action.resultSummary);
6954
- return _el$126;
7170
+ var _el$137 = _tmpl$32$1();
7171
+ insert(_el$137, () => action.resultSummary);
7172
+ return _el$137;
6955
7173
  }
6956
7174
  }), null);
6957
- insert(_el$121, createComponent(Show, {
7175
+ insert(_el$132, createComponent(Show, {
6958
7176
  get when() {
6959
7177
  return action.error;
6960
7178
  },
6961
7179
  get children() {
6962
- var _el$127 = _tmpl$31$1();
6963
- insert(_el$127, () => action.error);
6964
- return _el$127;
7180
+ var _el$138 = _tmpl$33$1();
7181
+ insert(_el$138, () => action.error);
7182
+ return _el$138;
6965
7183
  }
6966
7184
  }), null);
6967
- createRenderEffect(() => className(_el$124, `agent-action-status ${action.status}`));
6968
- return _el$121;
7185
+ createRenderEffect(() => className(_el$135, `agent-action-status ${action.status}`));
7186
+ return _el$132;
6969
7187
  })()
6970
7188
  });
6971
7189
  }
6972
7190
  });
6973
7191
  }
6974
7192
  }), null);
6975
- createRenderEffect(() => _el$30.classList.toggle("paused", !!runtimeState2().supervisor.paused));
6976
- return _el$25;
7193
+ createRenderEffect(() => _el$31.classList.toggle("paused", !!runtimeState2().supervisor.paused));
7194
+ return _el$26;
6977
7195
  }
6978
- }), _el$93);
6979
- insert(_el$24, createComponent(Show, {
7196
+ }), _el$104);
7197
+ insert(_el$25, createComponent(Show, {
6980
7198
  get when() {
6981
7199
  return sidebarTab() === "bookmarks";
6982
7200
  },
6983
7201
  get children() {
6984
- var _el$39 = _tmpl$9$2(), _el$40 = _el$39.firstChild, _el$41 = _el$40.firstChild, _el$42 = _el$41.firstChild, _el$43 = _el$42.nextSibling, _el$45 = _el$40.nextSibling, _el$46 = _el$45.nextSibling, _el$47 = _el$46.firstChild, _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling, _el$56 = _el$46.nextSibling, _el$57 = _el$56.firstChild, _el$58 = _el$57.firstChild, _el$59 = _el$58.nextSibling, _el$60 = _el$57.nextSibling, _el$61 = _el$56.nextSibling;
6985
- insert(_el$43, (() => {
7202
+ var _el$41 = _tmpl$0$2(), _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling, _el$47 = _el$42.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$62 = _el$48.nextSibling, _el$63 = _el$62.firstChild, _el$64 = _el$63.firstChild, _el$65 = _el$64.nextSibling, _el$66 = _el$63.nextSibling, _el$67 = _el$62.nextSibling;
7203
+ insert(_el$45, (() => {
6986
7204
  var _c$2 = memo(() => !!normalizedBookmarkSearch());
6987
7205
  return () => _c$2() ? `${bookmarkMatchCount()} matches for "${bookmarkSearchQuery().trim()}"` : `${bookmarksState2().bookmarks.length} saved across ${bookmarkFolders().length} folders`;
6988
7206
  })());
6989
- insert(_el$40, createComponent(Show, {
7207
+ insert(_el$42, createComponent(Show, {
6990
7208
  get when() {
6991
7209
  return currentTabSaved();
6992
7210
  },
6993
7211
  get children() {
6994
- return _tmpl$7$2();
7212
+ return _tmpl$8$2();
6995
7213
  }
6996
7214
  }), null);
6997
- _el$45.$$input = (e) => setBookmarkSearchQuery(e.currentTarget.value);
6998
- _el$47.$$click = () => setBookmarkSaveExpanded((current) => !current);
6999
- insert(_el$46, createComponent(Show, {
7215
+ _el$47.$$input = (e) => setBookmarkSearchQuery(e.currentTarget.value);
7216
+ _el$49.$$click = () => setBookmarkSaveExpanded((current) => !current);
7217
+ insert(_el$48, createComponent(Show, {
7000
7218
  get when() {
7001
7219
  return bookmarkSaveExpanded();
7002
7220
  },
7003
7221
  get children() {
7004
- var _el$50 = _tmpl$8$2(), _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling, _el$53 = _el$52.nextSibling, _el$54 = _el$53.firstChild, _el$55 = _el$53.nextSibling;
7005
- insert(_el$51, () => currentTab()?.title || "No active page");
7006
- insert(_el$52, () => currentTab()?.url || "Open a page to save it here.");
7007
- insert(_el$53, createComponent(DropdownSelect, {
7222
+ var _el$52 = _tmpl$9$2(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling, _el$55 = _el$54.nextSibling, _el$56 = _el$55.firstChild, _el$57 = _el$55.nextSibling, _el$58 = _el$57.nextSibling, _el$59 = _el$58.nextSibling, _el$60 = _el$59.nextSibling, _el$61 = _el$60.nextSibling;
7223
+ insert(_el$53, () => currentTab()?.title || "No active page");
7224
+ insert(_el$54, () => currentTab()?.url || "Open a page to save it here.");
7225
+ insert(_el$55, createComponent(DropdownSelect, {
7008
7226
  "class": "bookmark-select",
7009
7227
  get value() {
7010
7228
  return selectedFolderId();
@@ -7014,29 +7232,37 @@ ${contextBlock}` : contextBlock);
7014
7232
  },
7015
7233
  ariaLabel: "Bookmark folder",
7016
7234
  onChange: (value) => setSelectedFolderId(value)
7017
- }), _el$54);
7018
- _el$54.$$click = () => void handleSaveBookmark();
7019
- _el$55.$$input = (e) => setBookmarkNote(e.currentTarget.value);
7020
- createRenderEffect(() => _el$54.disabled = !currentTab()?.url);
7021
- createRenderEffect(() => _el$55.value = bookmarkNote());
7022
- return _el$50;
7235
+ }), _el$56);
7236
+ _el$56.$$click = () => void handleSaveBookmark();
7237
+ _el$57.$$input = (e) => setBookmarkNote(e.currentTarget.value);
7238
+ _el$58.$$input = (e) => setBookmarkIntent(e.currentTarget.value);
7239
+ _el$59.$$input = (e) => setBookmarkExpectedContent(e.currentTarget.value);
7240
+ _el$60.$$input = (e) => setBookmarkKeyFields(e.currentTarget.value);
7241
+ _el$61.$$input = (e) => setBookmarkAgentHints(e.currentTarget.value);
7242
+ createRenderEffect(() => _el$56.disabled = !currentTab()?.url);
7243
+ createRenderEffect(() => _el$57.value = bookmarkNote());
7244
+ createRenderEffect(() => _el$58.value = bookmarkIntent());
7245
+ createRenderEffect(() => _el$59.value = bookmarkExpectedContent());
7246
+ createRenderEffect(() => _el$60.value = bookmarkKeyFields());
7247
+ createRenderEffect(() => _el$61.value = bookmarkAgentHints());
7248
+ return _el$52;
7023
7249
  }
7024
7250
  }), null);
7025
- _el$56.addEventListener("submit", handleCreateFolder);
7026
- _el$58.$$input = (e) => setNewFolderName(e.currentTarget.value);
7027
- _el$59.$$input = (e) => setNewFolderSummary(e.currentTarget.value);
7028
- insert(_el$61, createComponent(Show, {
7251
+ _el$62.addEventListener("submit", handleCreateFolder);
7252
+ _el$64.$$input = (e) => setNewFolderName(e.currentTarget.value);
7253
+ _el$65.$$input = (e) => setNewFolderSummary(e.currentTarget.value);
7254
+ insert(_el$67, createComponent(Show, {
7029
7255
  get when() {
7030
7256
  return filteredGroupedBookmarks().length > 0;
7031
7257
  },
7032
7258
  get fallback() {
7033
7259
  return (() => {
7034
- var _el$128 = _tmpl$33$1();
7035
- insert(_el$128, (() => {
7260
+ var _el$139 = _tmpl$35$1();
7261
+ insert(_el$139, (() => {
7036
7262
  var _c$5 = memo(() => !!normalizedBookmarkSearch());
7037
7263
  return () => _c$5() ? `No bookmarks matched "${bookmarkSearchQuery().trim()}".` : "No bookmarks saved yet.";
7038
7264
  })());
7039
- return _el$128;
7265
+ return _el$139;
7040
7266
  })();
7041
7267
  },
7042
7268
  get children() {
@@ -7045,100 +7271,100 @@ ${contextBlock}` : contextBlock);
7045
7271
  return filteredGroupedBookmarks();
7046
7272
  },
7047
7273
  children: (folder) => (() => {
7048
- var _el$129 = _tmpl$40$1(), _el$130 = _el$129.firstChild, _el$131 = _el$130.firstChild, _el$132 = _el$131.firstChild, _el$133 = _el$132.nextSibling, _el$134 = _el$133.firstChild, _el$135 = _el$134.nextSibling, _el$136 = _el$135.firstChild;
7049
- _el$130.$$keydown = (e) => {
7274
+ var _el$140 = _tmpl$42$1(), _el$141 = _el$140.firstChild, _el$142 = _el$141.firstChild, _el$143 = _el$142.firstChild, _el$144 = _el$143.nextSibling, _el$145 = _el$144.firstChild, _el$146 = _el$145.nextSibling, _el$147 = _el$146.firstChild;
7275
+ _el$141.$$keydown = (e) => {
7050
7276
  if (e.key === "Enter" || e.key === " ") {
7051
7277
  e.preventDefault();
7052
7278
  toggleFolderExpanded(folder.id);
7053
7279
  }
7054
7280
  };
7055
- _el$130.$$click = () => toggleFolderExpanded(folder.id);
7056
- insert(_el$134, () => folder.name);
7057
- insert(_el$135, () => folder.items.length, _el$136);
7058
- insert(_el$133, createComponent(Show, {
7281
+ _el$141.$$click = () => toggleFolderExpanded(folder.id);
7282
+ insert(_el$145, () => folder.name);
7283
+ insert(_el$146, () => folder.items.length, _el$147);
7284
+ insert(_el$144, createComponent(Show, {
7059
7285
  get when() {
7060
7286
  return folder.summary;
7061
7287
  },
7062
7288
  get children() {
7063
- var _el$137 = _tmpl$34$1();
7064
- insert(_el$137, () => folder.summary);
7065
- return _el$137;
7289
+ var _el$148 = _tmpl$36$1();
7290
+ insert(_el$148, () => folder.summary);
7291
+ return _el$148;
7066
7292
  }
7067
7293
  }), null);
7068
- insert(_el$130, createComponent(Show, {
7294
+ insert(_el$141, createComponent(Show, {
7069
7295
  get when() {
7070
7296
  return folder.id !== UNSORTED_FOLDER.id;
7071
7297
  },
7072
7298
  get children() {
7073
- var _el$138 = _tmpl$35$1(), _el$139 = _el$138.firstChild, _el$140 = _el$139.nextSibling;
7074
- _el$139.$$click = (e) => {
7299
+ var _el$149 = _tmpl$37$1(), _el$150 = _el$149.firstChild, _el$151 = _el$150.nextSibling;
7300
+ _el$150.$$click = (e) => {
7075
7301
  e.stopPropagation();
7076
7302
  setEditingFolderId(folder.id);
7077
7303
  setEditingFolderName(folder.name);
7078
7304
  setEditingFolderSummary(folder.summary || "");
7079
7305
  };
7080
- _el$140.$$click = (e) => {
7306
+ _el$151.$$click = (e) => {
7081
7307
  e.stopPropagation();
7082
7308
  setDeletingFolderId(folder.id);
7083
7309
  };
7084
- return _el$138;
7310
+ return _el$149;
7085
7311
  }
7086
7312
  }), null);
7087
- insert(_el$129, createComponent(Show, {
7313
+ insert(_el$140, createComponent(Show, {
7088
7314
  get when() {
7089
7315
  return deletingFolderId() === folder.id;
7090
7316
  },
7091
7317
  get children() {
7092
- var _el$141 = _tmpl$37$1(), _el$142 = _el$141.firstChild, _el$143 = _el$142.firstChild, _el$145 = _el$143.nextSibling;
7093
- _el$145.nextSibling;
7094
- var _el$146 = _el$142.nextSibling, _el$148 = _el$146.firstChild, _el$149 = _el$148.nextSibling;
7095
- insert(_el$142, () => folder.name, _el$145);
7096
- insert(_el$142, (() => {
7318
+ var _el$152 = _tmpl$39$1(), _el$153 = _el$152.firstChild, _el$154 = _el$153.firstChild, _el$156 = _el$154.nextSibling;
7319
+ _el$156.nextSibling;
7320
+ var _el$157 = _el$153.nextSibling, _el$159 = _el$157.firstChild, _el$160 = _el$159.nextSibling;
7321
+ insert(_el$153, () => folder.name, _el$156);
7322
+ insert(_el$153, (() => {
7097
7323
  var _c$6 = memo(() => folder.items.length > 0);
7098
7324
  return () => _c$6() ? ` This folder has ${folder.items.length} bookmark${folder.items.length === 1 ? "" : "s"}.` : "";
7099
7325
  })(), null);
7100
- insert(_el$146, createComponent(Show, {
7326
+ insert(_el$157, createComponent(Show, {
7101
7327
  get when() {
7102
7328
  return folder.items.length > 0;
7103
7329
  },
7104
7330
  get children() {
7105
- var _el$147 = _tmpl$36$1();
7106
- _el$147.$$click = () => void handleRemoveFolder(folder.id, false);
7107
- return _el$147;
7331
+ var _el$158 = _tmpl$38$1();
7332
+ _el$158.$$click = () => void handleRemoveFolder(folder.id, false);
7333
+ return _el$158;
7108
7334
  }
7109
- }), _el$148);
7110
- _el$148.$$click = () => void handleRemoveFolder(folder.id, true);
7111
- insert(_el$148, () => folder.items.length > 0 ? "Delete all" : "Delete folder");
7112
- _el$149.$$click = () => setDeletingFolderId(null);
7113
- return _el$141;
7335
+ }), _el$159);
7336
+ _el$159.$$click = () => void handleRemoveFolder(folder.id, true);
7337
+ insert(_el$159, () => folder.items.length > 0 ? "Delete all" : "Delete folder");
7338
+ _el$160.$$click = () => setDeletingFolderId(null);
7339
+ return _el$152;
7114
7340
  }
7115
7341
  }), null);
7116
- insert(_el$129, createComponent(Show, {
7342
+ insert(_el$140, createComponent(Show, {
7117
7343
  get when() {
7118
7344
  return editingFolderId() === folder.id;
7119
7345
  },
7120
7346
  get children() {
7121
- var _el$150 = _tmpl$38$1(), _el$151 = _el$150.firstChild, _el$152 = _el$151.firstChild, _el$153 = _el$152.nextSibling, _el$154 = _el$151.nextSibling, _el$155 = _el$154.nextSibling;
7122
- _el$152.$$input = (e) => setEditingFolderName(e.currentTarget.value);
7123
- _el$153.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
7124
- _el$154.$$click = () => void handleRenameFolder(folder.id);
7125
- _el$155.$$click = () => {
7347
+ var _el$161 = _tmpl$40$1(), _el$162 = _el$161.firstChild, _el$163 = _el$162.firstChild, _el$164 = _el$163.nextSibling, _el$165 = _el$162.nextSibling, _el$166 = _el$165.nextSibling;
7348
+ _el$163.$$input = (e) => setEditingFolderName(e.currentTarget.value);
7349
+ _el$164.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
7350
+ _el$165.$$click = () => void handleRenameFolder(folder.id);
7351
+ _el$166.$$click = () => {
7126
7352
  setEditingFolderId(null);
7127
7353
  setEditingFolderName("");
7128
7354
  setEditingFolderSummary("");
7129
7355
  };
7130
- createRenderEffect(() => _el$154.disabled = !editingFolderName().trim());
7131
- createRenderEffect(() => _el$152.value = editingFolderName());
7132
- createRenderEffect(() => _el$153.value = editingFolderSummary());
7133
- return _el$150;
7356
+ createRenderEffect(() => _el$165.disabled = !editingFolderName().trim());
7357
+ createRenderEffect(() => _el$163.value = editingFolderName());
7358
+ createRenderEffect(() => _el$164.value = editingFolderSummary());
7359
+ return _el$161;
7134
7360
  }
7135
7361
  }), null);
7136
- insert(_el$129, createComponent(Show, {
7362
+ insert(_el$140, createComponent(Show, {
7137
7363
  get when() {
7138
7364
  return isFolderExpanded(folder.id);
7139
7365
  },
7140
7366
  get fallback() {
7141
- return _tmpl$41$1();
7367
+ return _tmpl$43();
7142
7368
  },
7143
7369
  get children() {
7144
7370
  return createComponent(Show, {
@@ -7146,116 +7372,204 @@ ${contextBlock}` : contextBlock);
7146
7372
  return folder.items.length > 0;
7147
7373
  },
7148
7374
  get fallback() {
7149
- return _tmpl$42$1();
7375
+ return _tmpl$44();
7150
7376
  },
7151
7377
  get children() {
7152
- var _el$156 = _tmpl$39$1();
7153
- insert(_el$156, createComponent(For, {
7378
+ var _el$167 = _tmpl$41$1();
7379
+ insert(_el$167, createComponent(For, {
7154
7380
  get each() {
7155
7381
  return folder.items;
7156
7382
  },
7157
7383
  children: (bookmark) => (() => {
7158
- var _el$159 = _tmpl$44(), _el$160 = _el$159.firstChild, _el$161 = _el$160.firstChild, _el$162 = _el$161.nextSibling, _el$164 = _el$160.nextSibling, _el$165 = _el$164.firstChild, _el$166 = _el$165.nextSibling;
7159
- _el$160.$$click = () => void createTab(bookmark.url);
7160
- insert(_el$161, () => bookmark.title || bookmark.url);
7161
- insert(_el$162, () => bookmark.url);
7162
- insert(_el$159, createComponent(Show, {
7384
+ var _el$170 = _tmpl$51(), _el$171 = _el$170.firstChild, _el$172 = _el$171.firstChild, _el$173 = _el$172.nextSibling, _el$198 = _el$171.nextSibling, _el$199 = _el$198.firstChild, _el$200 = _el$199.nextSibling, _el$201 = _el$200.nextSibling;
7385
+ _el$171.$$click = () => void createTab(bookmark.url);
7386
+ insert(_el$172, () => bookmark.title || bookmark.url);
7387
+ insert(_el$173, () => bookmark.url);
7388
+ insert(_el$170, createComponent(Show, {
7163
7389
  get when() {
7164
7390
  return bookmark.note;
7165
7391
  },
7166
7392
  get children() {
7167
- var _el$163 = _tmpl$43();
7168
- insert(_el$163, () => bookmark.note);
7169
- return _el$163;
7393
+ var _el$174 = _tmpl$45();
7394
+ insert(_el$174, () => bookmark.note);
7395
+ return _el$174;
7396
+ }
7397
+ }), _el$198);
7398
+ insert(_el$170, createComponent(Show, {
7399
+ get when() {
7400
+ return bookmark.intent || bookmark.expectedContent || (bookmark.keyFields?.length || 0) > 0 || (bookmark.agentHints && Object.keys(bookmark.agentHints).length || 0) > 0;
7401
+ },
7402
+ get children() {
7403
+ var _el$175 = _tmpl$45();
7404
+ insert(_el$175, createComponent(Show, {
7405
+ get when() {
7406
+ return bookmark.intent;
7407
+ },
7408
+ get children() {
7409
+ var _el$176 = _tmpl$46(), _el$177 = _el$176.firstChild;
7410
+ _el$177.nextSibling;
7411
+ insert(_el$176, () => bookmark.intent, null);
7412
+ return _el$176;
7413
+ }
7414
+ }), null);
7415
+ insert(_el$175, createComponent(Show, {
7416
+ get when() {
7417
+ return bookmark.expectedContent;
7418
+ },
7419
+ get children() {
7420
+ var _el$179 = _tmpl$47(), _el$180 = _el$179.firstChild;
7421
+ _el$180.nextSibling;
7422
+ insert(_el$179, () => bookmark.expectedContent, null);
7423
+ return _el$179;
7424
+ }
7425
+ }), null);
7426
+ insert(_el$175, createComponent(Show, {
7427
+ get when() {
7428
+ return (bookmark.keyFields?.length || 0) > 0;
7429
+ },
7430
+ get children() {
7431
+ var _el$182 = _tmpl$48(), _el$183 = _el$182.firstChild;
7432
+ _el$183.nextSibling;
7433
+ insert(_el$182, () => bookmark.keyFields?.join(", "), null);
7434
+ return _el$182;
7435
+ }
7436
+ }), null);
7437
+ insert(_el$175, createComponent(Show, {
7438
+ get when() {
7439
+ return memo(() => !!bookmark.agentHints)() && Object.keys(bookmark.agentHints).length > 0;
7440
+ },
7441
+ get children() {
7442
+ var _el$185 = _tmpl$49(), _el$186 = _el$185.firstChild;
7443
+ _el$186.nextSibling;
7444
+ insert(_el$185, () => Object.entries(bookmark.agentHints || {}).map(([key, hint]) => `${key}: ${hint}`).join(" • "), null);
7445
+ return _el$185;
7446
+ }
7447
+ }), null);
7448
+ return _el$175;
7449
+ }
7450
+ }), _el$198);
7451
+ insert(_el$170, createComponent(Show, {
7452
+ get when() {
7453
+ return editingBookmarkId() === bookmark.id;
7454
+ },
7455
+ get children() {
7456
+ var _el$188 = _tmpl$50(), _el$189 = _el$188.firstChild, _el$190 = _el$189.nextSibling, _el$191 = _el$190.nextSibling, _el$192 = _el$191.nextSibling, _el$193 = _el$192.nextSibling, _el$194 = _el$193.nextSibling, _el$195 = _el$194.nextSibling, _el$196 = _el$195.firstChild, _el$197 = _el$196.nextSibling;
7457
+ _el$189.$$input = (e) => setEditingBookmarkTitle(e.currentTarget.value);
7458
+ _el$190.$$input = (e) => setEditingBookmarkNote(e.currentTarget.value);
7459
+ _el$191.$$input = (e) => setEditingBookmarkIntent(e.currentTarget.value);
7460
+ _el$192.$$input = (e) => setEditingBookmarkExpectedContent(e.currentTarget.value);
7461
+ _el$193.$$input = (e) => setEditingBookmarkKeyFields(e.currentTarget.value);
7462
+ _el$194.$$input = (e) => setEditingBookmarkAgentHints(e.currentTarget.value);
7463
+ _el$196.$$click = () => void handleUpdateBookmark(bookmark.id);
7464
+ _el$197.$$click = resetBookmarkEditor;
7465
+ createRenderEffect(() => _el$189.value = editingBookmarkTitle());
7466
+ createRenderEffect(() => _el$190.value = editingBookmarkNote());
7467
+ createRenderEffect(() => _el$191.value = editingBookmarkIntent());
7468
+ createRenderEffect(() => _el$192.value = editingBookmarkExpectedContent());
7469
+ createRenderEffect(() => _el$193.value = editingBookmarkKeyFields());
7470
+ createRenderEffect(() => _el$194.value = editingBookmarkAgentHints());
7471
+ return _el$188;
7472
+ }
7473
+ }), _el$198);
7474
+ insert(_el$199, () => formatBookmarkDate(bookmark.savedAt));
7475
+ _el$200.$$click = () => editingBookmarkId() === bookmark.id ? resetBookmarkEditor() : startEditingBookmark(bookmark);
7476
+ insert(_el$200, () => editingBookmarkId() === bookmark.id ? "Close" : "Edit");
7477
+ _el$201.$$click = () => {
7478
+ if (editingBookmarkId() === bookmark.id) {
7479
+ resetBookmarkEditor();
7170
7480
  }
7171
- }), _el$164);
7172
- insert(_el$165, () => formatBookmarkDate(bookmark.savedAt));
7173
- _el$166.$$click = () => void removeBookmark(bookmark.id);
7174
- createRenderEffect(() => setAttribute(_el$159, "data-bookmark-id", bookmark.id));
7175
- return _el$159;
7481
+ void removeBookmark(bookmark.id);
7482
+ };
7483
+ createRenderEffect(() => setAttribute(_el$170, "data-bookmark-id", bookmark.id));
7484
+ return _el$170;
7176
7485
  })()
7177
7486
  }));
7178
- return _el$156;
7487
+ return _el$167;
7179
7488
  }
7180
7489
  });
7181
7490
  }
7182
7491
  }), null);
7183
- createRenderEffect(() => _el$132.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
7184
- return _el$129;
7492
+ createRenderEffect(() => _el$143.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
7493
+ return _el$140;
7185
7494
  })()
7186
7495
  });
7187
7496
  }
7188
7497
  }));
7189
7498
  createRenderEffect((_p$) => {
7190
7499
  var _v$ = !!bookmarkSaveExpanded(), _v$2 = !newFolderName().trim();
7191
- _v$ !== _p$.e && _el$49.classList.toggle("expanded", _p$.e = _v$);
7192
- _v$2 !== _p$.t && (_el$60.disabled = _p$.t = _v$2);
7500
+ _v$ !== _p$.e && _el$51.classList.toggle("expanded", _p$.e = _v$);
7501
+ _v$2 !== _p$.t && (_el$66.disabled = _p$.t = _v$2);
7193
7502
  return _p$;
7194
7503
  }, {
7195
7504
  e: void 0,
7196
7505
  t: void 0
7197
7506
  });
7198
- createRenderEffect(() => _el$45.value = bookmarkSearchQuery());
7199
- createRenderEffect(() => _el$58.value = newFolderName());
7200
- createRenderEffect(() => _el$59.value = newFolderSummary());
7201
- return _el$39;
7507
+ createRenderEffect(() => _el$47.value = bookmarkSearchQuery());
7508
+ createRenderEffect(() => _el$64.value = newFolderName());
7509
+ createRenderEffect(() => _el$65.value = newFolderSummary());
7510
+ return _el$41;
7202
7511
  }
7203
- }), _el$93);
7204
- insert(_el$24, createComponent(Show, {
7512
+ }), _el$104);
7513
+ insert(_el$25, createComponent(Show, {
7205
7514
  get when() {
7206
7515
  return sidebarTab() === "checkpoints";
7207
7516
  },
7208
7517
  get children() {
7209
- var _el$62 = _tmpl$1$2(), _el$63 = _el$62.firstChild, _el$64 = _el$63.firstChild, _el$65 = _el$64.firstChild, _el$66 = _el$65.nextSibling, _el$67 = _el$63.nextSibling, _el$68 = _el$67.firstChild, _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
7210
- _el$68.nextSibling;
7211
- insert(_el$66, (() => {
7518
+ var _el$68 = _tmpl$10$2(), _el$69 = _el$68.firstChild, _el$70 = _el$69.firstChild, _el$71 = _el$70.firstChild, _el$72 = _el$71.nextSibling, _el$73 = _el$69.nextSibling, _el$74 = _el$73.firstChild, _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling, _el$77 = _el$76.nextSibling;
7519
+ _el$74.nextSibling;
7520
+ insert(_el$72, (() => {
7212
7521
  var _c$3 = memo(() => recentCheckpoints().length > 0);
7213
7522
  return () => _c$3() ? `${recentCheckpoints().length} saved snapshots` : "Save and restore session snapshots";
7214
7523
  })());
7215
- _el$69.$$input = (e) => setCheckpointName(e.currentTarget.value);
7216
- _el$70.$$click = async () => {
7524
+ _el$75.$$input = (e) => setCheckpointName(e.currentTarget.value);
7525
+ _el$76.$$input = (e) => setCheckpointNote(e.currentTarget.value);
7526
+ _el$77.$$click = async () => {
7217
7527
  const name = checkpointName().trim();
7218
- await createCheckpoint(name || void 0);
7528
+ await createCheckpoint(name || void 0, checkpointNote() || void 0);
7219
7529
  setCheckpointName("");
7530
+ setCheckpointNote("");
7220
7531
  };
7221
- insert(_el$67, createComponent(Show, {
7532
+ insert(_el$73, createComponent(Show, {
7222
7533
  get when() {
7223
7534
  return recentCheckpoints().length > 0;
7224
7535
  },
7225
7536
  get fallback() {
7226
- return _tmpl$45();
7537
+ return _tmpl$52();
7227
7538
  },
7228
7539
  get children() {
7229
- var _el$72 = _tmpl$0$2();
7230
- insert(_el$72, createComponent(For, {
7540
+ var _el$79 = _tmpl$1$2();
7541
+ insert(_el$79, createComponent(For, {
7231
7542
  get each() {
7232
7543
  return recentCheckpoints();
7233
7544
  },
7234
7545
  children: (checkpoint, i) => (() => {
7235
- var _el$168 = _tmpl$47(), _el$169 = _el$168.firstChild, _el$170 = _el$169.firstChild, _el$172 = _el$169.nextSibling, _el$173 = _el$172.firstChild, _el$174 = _el$173.nextSibling, _el$175 = _el$174.nextSibling;
7236
- insert(_el$169, createComponent(Show, {
7546
+ var _el$203 = _tmpl$54(), _el$204 = _el$203.firstChild, _el$205 = _el$204.firstChild, _el$207 = _el$204.nextSibling, _el$208 = _el$207.firstChild, _el$209 = _el$208.nextSibling, _el$210 = _el$209.nextSibling, _el$211 = _el$210.nextSibling;
7547
+ insert(_el$204, createComponent(Show, {
7237
7548
  get when() {
7238
7549
  return i() < recentCheckpoints().length - 1;
7239
7550
  },
7240
7551
  get children() {
7241
- return _tmpl$46();
7552
+ return _tmpl$53();
7242
7553
  }
7243
7554
  }), null);
7244
- insert(_el$173, () => checkpoint.name);
7245
- insert(_el$174, () => new Date(checkpoint.createdAt).toLocaleString());
7246
- _el$175.$$click = () => void restoreCheckpoint(checkpoint.id);
7247
- createRenderEffect(() => _el$170.classList.toggle("latest", !!(i() === 0)));
7248
- return _el$168;
7555
+ insert(_el$208, () => checkpoint.name);
7556
+ insert(_el$209, () => new Date(checkpoint.createdAt).toLocaleString());
7557
+ _el$210.addEventListener("blur", (e) => void updateCheckpointNote(checkpoint.id, e.currentTarget.value));
7558
+ _el$211.$$click = () => void restoreCheckpoint(checkpoint.id);
7559
+ createRenderEffect(() => _el$205.classList.toggle("latest", !!(i() === 0)));
7560
+ createRenderEffect(() => _el$210.value = checkpoint.note || "");
7561
+ return _el$203;
7249
7562
  })()
7250
7563
  }));
7251
- return _el$72;
7564
+ return _el$79;
7252
7565
  }
7253
7566
  }), null);
7254
- createRenderEffect(() => _el$69.value = checkpointName());
7255
- return _el$62;
7567
+ createRenderEffect(() => _el$75.value = checkpointName());
7568
+ createRenderEffect(() => _el$76.value = checkpointNote());
7569
+ return _el$68;
7256
7570
  }
7257
- }), _el$93);
7258
- insert(_el$24, createComponent(Show, {
7571
+ }), _el$104);
7572
+ insert(_el$25, createComponent(Show, {
7259
7573
  get when() {
7260
7574
  return sidebarTab() === "automation";
7261
7575
  },
@@ -7264,41 +7578,68 @@ ${contextBlock}` : contextBlock);
7264
7578
  onRun: () => setSidebarTab("supervisor")
7265
7579
  });
7266
7580
  }
7267
- }), _el$93);
7268
- insert(_el$24, createComponent(Show, {
7581
+ }), _el$104);
7582
+ insert(_el$25, createComponent(Show, {
7269
7583
  get when() {
7270
7584
  return sidebarTab() === "history";
7271
7585
  },
7272
7586
  get children() {
7273
- var _el$73 = _tmpl$11$2(), _el$74 = _el$73.firstChild, _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling, _el$77 = _el$74.nextSibling;
7274
- _el$76.$$click = async () => {
7587
+ var _el$80 = _tmpl$12$2(), _el$81 = _el$80.firstChild, _el$82 = _el$81.firstChild, _el$83 = _el$82.nextSibling, _el$84 = _el$81.nextSibling;
7588
+ _el$83.$$click = async () => {
7275
7589
  await history.clear();
7276
7590
  };
7277
- insert(_el$77, createComponent(For, {
7591
+ insert(_el$84, createComponent(For, {
7278
7592
  get each() {
7279
7593
  return history.historyState().entries;
7280
7594
  },
7281
7595
  children: (entry) => (() => {
7282
- var _el$176 = _tmpl$48(), _el$177 = _el$176.firstChild, _el$178 = _el$177.nextSibling, _el$179 = _el$178.nextSibling;
7283
- _el$176.$$click = () => createTab(entry.url);
7284
- insert(_el$177, () => entry.title || entry.url);
7285
- insert(_el$178, () => entry.url);
7286
- insert(_el$179, () => new Date(entry.visitedAt).toLocaleString());
7287
- return _el$176;
7596
+ var _el$212 = _tmpl$55(), _el$213 = _el$212.firstChild, _el$214 = _el$213.nextSibling, _el$215 = _el$214.nextSibling;
7597
+ _el$212.$$click = () => createTab(entry.url);
7598
+ insert(_el$213, () => entry.title || entry.url);
7599
+ insert(_el$214, () => entry.url);
7600
+ insert(_el$215, () => new Date(entry.visitedAt).toLocaleString());
7601
+ return _el$212;
7288
7602
  })()
7289
7603
  }), null);
7290
- insert(_el$77, createComponent(Show, {
7604
+ insert(_el$84, createComponent(Show, {
7291
7605
  get when() {
7292
7606
  return history.historyState().entries.length === 0;
7293
7607
  },
7294
7608
  get children() {
7295
- return _tmpl$10$2();
7609
+ return _tmpl$11$2();
7296
7610
  }
7297
7611
  }), null);
7298
- return _el$73;
7612
+ return _el$80;
7299
7613
  }
7300
- }), _el$93);
7301
- insert(_el$24, createComponent(Show, {
7614
+ }), _el$104);
7615
+ insert(_el$25, createComponent(Show, {
7616
+ get when() {
7617
+ return sidebarTab() === "diff";
7618
+ },
7619
+ get children() {
7620
+ var _el$86 = _tmpl$13$1(), _el$87 = _el$86.firstChild, _el$88 = _el$87.firstChild, _el$89 = _el$88.nextSibling;
7621
+ insert(_el$89, () => isPremium() ? "Page change timeline" : "Premium feature");
7622
+ insert(_el$86, createComponent(Show, {
7623
+ get when() {
7624
+ return isPremium();
7625
+ },
7626
+ get fallback() {
7627
+ return (() => {
7628
+ var _el$216 = _tmpl$56(), _el$217 = _el$216.firstChild, _el$218 = _el$217.nextSibling, _el$219 = _el$218.nextSibling, _el$220 = _el$219.firstChild, _el$221 = _el$220.nextSibling;
7629
+ _el$220.$$click = () => void window.vessel.premium.checkout(premiumState().email || void 0).catch(() => {
7630
+ });
7631
+ _el$221.$$click = openPremiumDetails;
7632
+ return _el$216;
7633
+ })();
7634
+ },
7635
+ get children() {
7636
+ return createComponent(PageDiffTimeline, {});
7637
+ }
7638
+ }), null);
7639
+ return _el$86;
7640
+ }
7641
+ }), _el$104);
7642
+ insert(_el$25, createComponent(Show, {
7302
7643
  get when() {
7303
7644
  return sidebarTab() === "chat";
7304
7645
  },
@@ -7308,23 +7649,23 @@ ${contextBlock}` : contextBlock);
7308
7649
  return !isPremium();
7309
7650
  },
7310
7651
  get children() {
7311
- var _el$79 = _tmpl$12$2(), _el$80 = _el$79.firstChild, _el$81 = _el$80.nextSibling, _el$82 = _el$81.nextSibling, _el$83 = _el$82.firstChild, _el$84 = _el$83.nextSibling;
7312
- _el$83.$$click = () => openPremiumCheckout("chat_banner_clicked");
7313
- _el$84.$$click = openPremiumDetails;
7314
- return _el$79;
7652
+ var _el$90 = _tmpl$14$1(), _el$91 = _el$90.firstChild, _el$92 = _el$91.nextSibling, _el$93 = _el$92.nextSibling, _el$94 = _el$93.firstChild, _el$95 = _el$94.nextSibling;
7653
+ _el$94.$$click = () => openPremiumCheckout("chat_banner_clicked");
7654
+ _el$95.$$click = openPremiumDetails;
7655
+ return _el$90;
7315
7656
  }
7316
7657
  }), createComponent(For, {
7317
7658
  get each() {
7318
7659
  return messages2();
7319
7660
  },
7320
7661
  children: (msg) => (() => {
7321
- var _el$180 = _tmpl$49();
7322
- insert(_el$180, createComponent(MarkdownMessage, {
7662
+ var _el$222 = _tmpl$57();
7663
+ insert(_el$222, createComponent(MarkdownMessage, {
7323
7664
  get content() {
7324
7665
  return msg.content;
7325
7666
  }
7326
7667
  }), null);
7327
- insert(_el$180, createComponent(Show, {
7668
+ insert(_el$222, createComponent(Show, {
7328
7669
  get when() {
7329
7670
  return memo(() => msg.role === "assistant")() ? getPremiumPromptKind(msg.content) : null;
7330
7671
  },
@@ -7337,31 +7678,31 @@ ${contextBlock}` : contextBlock);
7337
7678
  onOpenSettings: openPremiumDetails
7338
7679
  })
7339
7680
  }), null);
7340
- createRenderEffect(() => className(_el$180, `message message-${msg.role}`));
7341
- return _el$180;
7681
+ createRenderEffect(() => className(_el$222, `message message-${msg.role}`));
7682
+ return _el$222;
7342
7683
  })()
7343
7684
  }), createComponent(Show, {
7344
7685
  get when() {
7345
7686
  return isStreaming2();
7346
7687
  },
7347
7688
  get children() {
7348
- var _el$85 = _tmpl$15$1(), _el$86 = _el$85.firstChild;
7349
- insert(_el$86, createComponent(Show, {
7689
+ var _el$96 = _tmpl$17$1(), _el$97 = _el$96.firstChild;
7690
+ insert(_el$97, createComponent(Show, {
7350
7691
  get when() {
7351
7692
  return hasFirstChunk2();
7352
7693
  },
7353
7694
  get fallback() {
7354
- return _tmpl$50();
7695
+ return _tmpl$58();
7355
7696
  },
7356
7697
  get children() {
7357
- var _el$87 = _tmpl$14$1(), _el$88 = _el$87.firstChild, _el$89 = _el$88.firstChild;
7358
- _el$89.nextSibling;
7359
- insert(_el$87, createComponent(MarkdownMessage, {
7698
+ var _el$98 = _tmpl$16$1(), _el$99 = _el$98.firstChild, _el$100 = _el$99.firstChild;
7699
+ _el$100.nextSibling;
7700
+ insert(_el$98, createComponent(MarkdownMessage, {
7360
7701
  get content() {
7361
7702
  return streamingText2();
7362
7703
  }
7363
- }), _el$88);
7364
- insert(_el$87, createComponent(Show, {
7704
+ }), _el$99);
7705
+ insert(_el$98, createComponent(Show, {
7365
7706
  get when() {
7366
7707
  return getPremiumPromptKind(streamingText2());
7367
7708
  },
@@ -7373,21 +7714,21 @@ ${contextBlock}` : contextBlock);
7373
7714
  onStartTrial: () => openPremiumCheckout(kind() === "premium_gate" ? "premium_gate_clicked" : "iteration_limit_clicked"),
7374
7715
  onOpenSettings: openPremiumDetails
7375
7716
  })
7376
- }), _el$88);
7377
- insert(_el$88, createComponent(Show, {
7717
+ }), _el$99);
7718
+ insert(_el$99, createComponent(Show, {
7378
7719
  get when() {
7379
7720
  return elapsedSeconds() > 0;
7380
7721
  },
7381
7722
  get children() {
7382
- var _el$91 = _tmpl$13$1();
7383
- insert(_el$91, () => ` • ${elapsedSeconds()}s`);
7384
- return _el$91;
7723
+ var _el$102 = _tmpl$15$1();
7724
+ insert(_el$102, () => ` • ${elapsedSeconds()}s`);
7725
+ return _el$102;
7385
7726
  }
7386
7727
  }), null);
7387
- return _el$87;
7728
+ return _el$98;
7388
7729
  }
7389
7730
  }));
7390
- return _el$85;
7731
+ return _el$96;
7391
7732
  }
7392
7733
  }), createComponent(Show, {
7393
7734
  get when() {
@@ -7399,22 +7740,22 @@ ${contextBlock}` : contextBlock);
7399
7740
  return runtimeState2().supervisor.pendingApprovals;
7400
7741
  },
7401
7742
  children: (approval) => (() => {
7402
- var _el$182 = _tmpl$52(), _el$183 = _el$182.firstChild, _el$184 = _el$183.nextSibling, _el$185 = _el$184.firstChild, _el$186 = _el$185.firstChild, _el$187 = _el$186.nextSibling, _el$189 = _el$185.nextSibling, _el$190 = _el$189.nextSibling, _el$191 = _el$190.firstChild, _el$192 = _el$191.nextSibling;
7403
- insert(_el$187, () => approval.name);
7404
- insert(_el$184, createComponent(Show, {
7743
+ var _el$224 = _tmpl$60(), _el$225 = _el$224.firstChild, _el$226 = _el$225.nextSibling, _el$227 = _el$226.firstChild, _el$228 = _el$227.firstChild, _el$229 = _el$228.nextSibling, _el$231 = _el$227.nextSibling, _el$232 = _el$231.nextSibling, _el$233 = _el$232.firstChild, _el$234 = _el$233.nextSibling;
7744
+ insert(_el$229, () => approval.name);
7745
+ insert(_el$226, createComponent(Show, {
7405
7746
  get when() {
7406
7747
  return approval.argsSummary;
7407
7748
  },
7408
7749
  get children() {
7409
- var _el$188 = _tmpl$51();
7410
- insert(_el$188, () => approval.argsSummary);
7411
- return _el$188;
7750
+ var _el$230 = _tmpl$59();
7751
+ insert(_el$230, () => approval.argsSummary);
7752
+ return _el$230;
7412
7753
  }
7413
- }), _el$189);
7414
- insert(_el$189, () => approval.reason);
7415
- _el$191.$$click = () => void resolveApproval(approval.id, true);
7416
- _el$192.$$click = () => void resolveApproval(approval.id, false);
7417
- return _el$182;
7754
+ }), _el$231);
7755
+ insert(_el$231, () => approval.reason);
7756
+ _el$233.$$click = () => void resolveApproval(approval.id, true);
7757
+ _el$234.$$click = () => void resolveApproval(approval.id, false);
7758
+ return _el$224;
7418
7759
  })()
7419
7760
  });
7420
7761
  }
@@ -7423,13 +7764,13 @@ ${contextBlock}` : contextBlock);
7423
7764
  return memo(() => messages2().length === 0)() && !isStreaming2();
7424
7765
  },
7425
7766
  get children() {
7426
- return _tmpl$16$1();
7767
+ return _tmpl$18$1();
7427
7768
  }
7428
7769
  })];
7429
7770
  }
7430
- }), _el$93);
7771
+ }), _el$104);
7431
7772
  var _ref$ = messagesEndRef;
7432
- typeof _ref$ === "function" ? use(_ref$, _el$93) : messagesEndRef = _el$93;
7773
+ typeof _ref$ === "function" ? use(_ref$, _el$104) : messagesEndRef = _el$104;
7433
7774
  insert(_el$9, createComponent(Show, {
7434
7775
  get when() {
7435
7776
  return sidebarTab() === "chat";
@@ -7440,125 +7781,125 @@ ${contextBlock}` : contextBlock);
7440
7781
  return isStreaming2() || messages2().length > 0;
7441
7782
  },
7442
7783
  get children() {
7443
- var _el$94 = _tmpl$19$1();
7444
- insert(_el$94, createComponent(Show, {
7784
+ var _el$105 = _tmpl$21$1();
7785
+ insert(_el$105, createComponent(Show, {
7445
7786
  get when() {
7446
7787
  return isStreaming2();
7447
7788
  },
7448
7789
  get children() {
7449
- var _el$95 = _tmpl$17$1();
7450
- _el$95.$$click = () => cancel();
7451
- return _el$95;
7790
+ var _el$106 = _tmpl$19$1();
7791
+ _el$106.$$click = () => cancel();
7792
+ return _el$106;
7452
7793
  }
7453
7794
  }), null);
7454
- insert(_el$94, createComponent(Show, {
7795
+ insert(_el$105, createComponent(Show, {
7455
7796
  get when() {
7456
7797
  return memo(() => !!!isStreaming2())() && messages2().length > 0;
7457
7798
  },
7458
7799
  get children() {
7459
- var _el$96 = _tmpl$18$1();
7460
- _el$96.$$click = handleRetry;
7461
- return _el$96;
7800
+ var _el$107 = _tmpl$20$1();
7801
+ _el$107.$$click = handleRetry;
7802
+ return _el$107;
7462
7803
  }
7463
7804
  }), null);
7464
- return _el$94;
7805
+ return _el$105;
7465
7806
  }
7466
7807
  }), createComponent(Show, {
7467
7808
  get when() {
7468
7809
  return highlightCount() > 0;
7469
7810
  },
7470
7811
  get children() {
7471
- var _el$97 = _tmpl$20$1(), _el$98 = _el$97.firstChild, _el$99 = _el$98.nextSibling;
7472
- _el$99.firstChild;
7473
- var _el$101 = _el$99.nextSibling;
7474
- _el$98.$$click = () => void scrollToHighlight(highlightIndex() - 1);
7475
- _el$99.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex());
7476
- insert(_el$99, (() => {
7812
+ var _el$108 = _tmpl$22$1(), _el$109 = _el$108.firstChild, _el$110 = _el$109.nextSibling;
7813
+ _el$110.firstChild;
7814
+ var _el$112 = _el$110.nextSibling;
7815
+ _el$109.$$click = () => void scrollToHighlight(highlightIndex() - 1);
7816
+ _el$110.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex());
7817
+ insert(_el$110, (() => {
7477
7818
  var _c$4 = memo(() => highlightIndex() >= 0);
7478
7819
  return () => _c$4() ? `${highlightIndex() + 1} / ${highlightCount()}` : `${highlightCount()} highlight${highlightCount() > 1 ? "s" : ""}`;
7479
7820
  })(), null);
7480
- _el$101.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
7821
+ _el$112.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
7481
7822
  createRenderEffect((_p$) => {
7482
7823
  var _v$3 = highlightIndex() <= 0, _v$4 = highlightIndex() >= highlightCount() - 1;
7483
- _v$3 !== _p$.e && (_el$98.disabled = _p$.e = _v$3);
7484
- _v$4 !== _p$.t && (_el$101.disabled = _p$.t = _v$4);
7824
+ _v$3 !== _p$.e && (_el$109.disabled = _p$.e = _v$3);
7825
+ _v$4 !== _p$.t && (_el$112.disabled = _p$.t = _v$4);
7485
7826
  return _p$;
7486
7827
  }, {
7487
7828
  e: void 0,
7488
7829
  t: void 0
7489
7830
  });
7490
- return _el$97;
7831
+ return _el$108;
7491
7832
  }
7492
7833
  }), createComponent(Show, {
7493
7834
  get when() {
7494
7835
  return queueNotice2() !== null || pendingQueryCount() > 0;
7495
7836
  },
7496
7837
  get children() {
7497
- var _el$102 = _tmpl$23$1(), _el$103 = _el$102.firstChild, _el$104 = _el$103.firstChild;
7498
- insert(_el$104, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
7499
- insert(_el$103, createComponent(Show, {
7838
+ var _el$113 = _tmpl$25$1(), _el$114 = _el$113.firstChild, _el$115 = _el$114.firstChild;
7839
+ insert(_el$115, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
7840
+ insert(_el$114, createComponent(Show, {
7500
7841
  get when() {
7501
7842
  return pendingQueryCount() > 0;
7502
7843
  },
7503
7844
  get children() {
7504
- var _el$105 = _tmpl$21$1();
7505
- _el$105.$$click = () => clearPendingQueries();
7506
- return _el$105;
7845
+ var _el$116 = _tmpl$23$1();
7846
+ _el$116.$$click = () => clearPendingQueries();
7847
+ return _el$116;
7507
7848
  }
7508
7849
  }), null);
7509
- insert(_el$102, createComponent(Show, {
7850
+ insert(_el$113, createComponent(Show, {
7510
7851
  get when() {
7511
7852
  return pendingQueries2().length > 0;
7512
7853
  },
7513
7854
  get children() {
7514
- var _el$106 = _tmpl$22$1();
7515
- insert(_el$106, createComponent(For, {
7855
+ var _el$117 = _tmpl$24$1();
7856
+ insert(_el$117, createComponent(For, {
7516
7857
  get each() {
7517
7858
  return pendingQueries2();
7518
7859
  },
7519
7860
  children: (pendingPrompt, index) => (() => {
7520
- var _el$193 = _tmpl$53(), _el$194 = _el$193.firstChild, _el$195 = _el$194.nextSibling;
7521
- setAttribute(_el$194, "title", pendingPrompt);
7522
- insert(_el$194, pendingPrompt);
7523
- _el$195.$$click = () => removePendingQuery(index());
7524
- createRenderEffect(() => setAttribute(_el$195, "aria-label", `Remove queued prompt ${index() + 1}`));
7525
- return _el$193;
7861
+ var _el$235 = _tmpl$61(), _el$236 = _el$235.firstChild, _el$237 = _el$236.nextSibling;
7862
+ setAttribute(_el$236, "title", pendingPrompt);
7863
+ insert(_el$236, pendingPrompt);
7864
+ _el$237.$$click = () => removePendingQuery(index());
7865
+ createRenderEffect(() => setAttribute(_el$237, "aria-label", `Remove queued prompt ${index() + 1}`));
7866
+ return _el$235;
7526
7867
  })()
7527
7868
  }));
7528
- return _el$106;
7869
+ return _el$117;
7529
7870
  }
7530
7871
  }), null);
7531
- return _el$102;
7872
+ return _el$113;
7532
7873
  }
7533
7874
  }), (() => {
7534
- var _el$107 = _tmpl$24$1(), _el$108 = _el$107.firstChild, _el$109 = _el$108.nextSibling;
7535
- _el$108.$$keydown = (e) => {
7875
+ var _el$118 = _tmpl$26$1(), _el$119 = _el$118.firstChild, _el$120 = _el$119.nextSibling;
7876
+ _el$119.$$keydown = (e) => {
7536
7877
  if (e.key === "Enter" && !e.shiftKey) {
7537
7878
  e.preventDefault();
7538
7879
  void handleChatSend();
7539
7880
  }
7540
7881
  };
7541
- _el$108.$$input = (e) => setChatInput(e.currentTarget.value);
7882
+ _el$119.$$input = (e) => setChatInput(e.currentTarget.value);
7542
7883
  var _ref$2 = chatInputRef;
7543
- typeof _ref$2 === "function" ? use(_ref$2, _el$108) : chatInputRef = _el$108;
7544
- _el$109.$$click = () => void handleChatSend();
7545
- insert(_el$109, () => isStreaming2() ? "Queue" : "Send");
7884
+ typeof _ref$2 === "function" ? use(_ref$2, _el$119) : chatInputRef = _el$119;
7885
+ _el$120.$$click = () => void handleChatSend();
7886
+ insert(_el$120, () => isStreaming2() ? "Queue" : "Send");
7546
7887
  createRenderEffect((_p$) => {
7547
7888
  var _v$5 = isStreaming2() ? "Send now to queue the next prompt..." : "Ask anything...", _v$6 = !chatInput().trim();
7548
- _v$5 !== _p$.e && setAttribute(_el$108, "placeholder", _p$.e = _v$5);
7549
- _v$6 !== _p$.t && (_el$109.disabled = _p$.t = _v$6);
7889
+ _v$5 !== _p$.e && setAttribute(_el$119, "placeholder", _p$.e = _v$5);
7890
+ _v$6 !== _p$.t && (_el$120.disabled = _p$.t = _v$6);
7550
7891
  return _p$;
7551
7892
  }, {
7552
7893
  e: void 0,
7553
7894
  t: void 0
7554
7895
  });
7555
- createRenderEffect(() => _el$108.value = chatInput());
7556
- return _el$107;
7896
+ createRenderEffect(() => _el$119.value = chatInput());
7897
+ return _el$118;
7557
7898
  })()];
7558
7899
  }
7559
7900
  }), null);
7560
7901
  createRenderEffect((_p$) => {
7561
- var _v$7 = `${sidebarWidth2()}px`, _v$8 = !!isDragging(), _v$9 = !!(sidebarTab() === "supervisor"), _v$0 = sidebarTab() === "supervisor", _v$1 = !!(sidebarTab() === "bookmarks"), _v$10 = sidebarTab() === "bookmarks", _v$11 = !!(sidebarTab() === "checkpoints"), _v$12 = sidebarTab() === "checkpoints", _v$13 = !!(sidebarTab() === "chat"), _v$14 = sidebarTab() === "chat", _v$15 = !!(sidebarTab() === "automation"), _v$16 = sidebarTab() === "automation", _v$17 = !!(sidebarTab() === "history"), _v$18 = sidebarTab() === "history";
7902
+ var _v$7 = `${sidebarWidth2()}px`, _v$8 = !!isDragging(), _v$9 = !!(sidebarTab() === "supervisor"), _v$0 = sidebarTab() === "supervisor", _v$1 = !!(sidebarTab() === "bookmarks"), _v$10 = sidebarTab() === "bookmarks", _v$11 = !!(sidebarTab() === "checkpoints"), _v$12 = sidebarTab() === "checkpoints", _v$13 = !!(sidebarTab() === "chat"), _v$14 = sidebarTab() === "chat", _v$15 = !!(sidebarTab() === "automation"), _v$16 = sidebarTab() === "automation", _v$17 = !!(sidebarTab() === "history"), _v$18 = sidebarTab() === "history", _v$19 = !!(sidebarTab() === "diff"), _v$20 = sidebarTab() === "diff";
7562
7903
  _v$7 !== _p$.e && setStyleProperty(_el$9, "width", _p$.e = _v$7);
7563
7904
  _v$8 !== _p$.t && _el$0.classList.toggle("dragging", _p$.t = _v$8);
7564
7905
  _v$9 !== _p$.a && _el$16.classList.toggle("active", _p$.a = _v$9);
@@ -7573,6 +7914,8 @@ ${contextBlock}` : contextBlock);
7573
7914
  _v$16 !== _p$.u && setAttribute(_el$22, "aria-selected", _p$.u = _v$16);
7574
7915
  _v$17 !== _p$.c && _el$23.classList.toggle("active", _p$.c = _v$17);
7575
7916
  _v$18 !== _p$.w && setAttribute(_el$23, "aria-selected", _p$.w = _v$18);
7917
+ _v$19 !== _p$.m && _el$24.classList.toggle("active", _p$.m = _v$19);
7918
+ _v$20 !== _p$.f && setAttribute(_el$24, "aria-selected", _p$.f = _v$20);
7576
7919
  return _p$;
7577
7920
  }, {
7578
7921
  e: void 0,
@@ -7588,7 +7931,9 @@ ${contextBlock}` : contextBlock);
7588
7931
  l: void 0,
7589
7932
  u: void 0,
7590
7933
  c: void 0,
7591
- w: void 0
7934
+ w: void 0,
7935
+ m: void 0,
7936
+ f: void 0
7592
7937
  });
7593
7938
  return _el$9;
7594
7939
  }
@@ -8016,6 +8361,14 @@ const DevToolsPanel = () => {
8016
8361
  })();
8017
8362
  };
8018
8363
  delegateEvents(["click", "input"]);
8364
+ const SEARCH_ENGINE_PRESETS = {
8365
+ duckduckgo: { label: "DuckDuckGo", url: "https://duckduckgo.com/?q=" },
8366
+ google: { label: "Google", url: "https://www.google.com/search?q=" },
8367
+ bing: { label: "Bing", url: "https://www.bing.com/search?q=" },
8368
+ brave: { label: "Brave Search", url: "https://search.brave.com/search?q=" },
8369
+ ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
8370
+ kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
8371
+ };
8019
8372
  const PROVIDERS = {
8020
8373
  anthropic: {
8021
8374
  id: "anthropic",
@@ -8116,7 +8469,7 @@ const PROVIDERS = {
8116
8469
  apiKeyHint: "Optional — only if your endpoint requires authentication"
8117
8470
  }
8118
8471
  };
8119
- var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$6$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$7 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured \`llama-server\` base URL. For agent loops, run \`llama-server\` with \`--ctx-size 16384\` minimum and \`32768\` recommended.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$15 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$16 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$17 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$18 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$20 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$21 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$22 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$24 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=download-path>Download Location</label><input id=download-path class=settings-input placeholder="Default: ~/Downloads"><p class=settings-hint>Directory for saved files. Leave blank to use the system default Downloads folder.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current</button></div></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label for=theme-select>Theme</label><select id=theme-select class="settings-input settings-select"><option value=dark>Dark</option><option value=light>Light</option></select><p class=settings-hint>Choose the application color scheme. Takes effect after saving.</p></div><div class=settings-field><label class=settings-label for=domain-policy-mode>Domain Restrictions</label><select id=domain-policy-mode class="settings-input settings-select"><option value=none>No restrictions</option><option value=allowlist>Allowlist (only listed domains)</option><option value=blocklist>Blocklist (block listed domains)</option></select></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$25 = /* @__PURE__ */ template(`<style>
8472
+ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$6$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$7 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured \`llama-server\` base URL. For agent loops, run \`llama-server\` with \`--ctx-size 16384\` minimum and \`32768\` recommended.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$15 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$16 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$17 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$18 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$20 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$21 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$22 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$24 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=default-search-engine>Default Search Engine</label><select id=default-search-engine class=settings-input><option value=none>None (disabled)</option></select><p class=settings-hint>The search engine used by the AI agent when it needs to search the web. "None" disables the fallback and forces the agent to use on-page search inputs only.</p></div><div class=settings-field><label class=settings-label for=download-path>Download Location</label><input id=download-path class=settings-input placeholder="Default: ~/Downloads"><p class=settings-hint>Directory for saved files. Leave blank to use the system default Downloads folder.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current</button></div></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label for=theme-select>Theme</label><select id=theme-select class="settings-input settings-select"><option value=dark>Dark</option><option value=light>Light</option></select><p class=settings-hint>Choose the application color scheme. Takes effect after saving.</p></div><div class=settings-field><label class=settings-label for=domain-policy-mode>Domain Restrictions</label><select id=domain-policy-mode class="settings-input settings-select"><option value=none>No restrictions</option><option value=allowlist>Allowlist (only listed domains)</option><option value=blocklist>Blocklist (block listed domains)</option></select></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$25 = /* @__PURE__ */ template(`<style>
8120
8473
  .settings-panel {
8121
8474
  width: min(440px, calc(100vw - 32px));
8122
8475
  max-height: calc(100vh - 48px);
@@ -8658,7 +9011,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8658
9011
  justify-content: flex-end;
8659
9012
  margin-top: 4px;
8660
9013
  }
8661
- `), _tmpl$26 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$27 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$28 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$29 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$31 = /* @__PURE__ */ template(`<div>`), _tmpl$32 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; <!> cookies &middot; <!> domains</span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Restore this session (replaces current tabs and cookies)"style="padding:2px 10px;font-size:12px">Load</button><button class=vault-entry-remove title="Delete session">&times;`), _tmpl$33 = /* @__PURE__ */ template(`<option>`), _tmpl$34 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$35 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$36 = /* @__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$37 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$38 = /* @__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$39 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$40 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$41 = /* @__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$42 = /* @__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;`);
9014
+ `), _tmpl$26 = /* @__PURE__ */ template(`<option>`), _tmpl$27 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$28 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$30 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$32 = /* @__PURE__ */ template(`<div>`), _tmpl$33 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; <!> cookies &middot; <!> domains</span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Restore this session (replaces current tabs and cookies)"style="padding:2px 10px;font-size:12px">Load</button><button class=vault-entry-remove title="Delete session">&times;`), _tmpl$34 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$35 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$36 = /* @__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$37 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$38 = /* @__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$39 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$40 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$41 = /* @__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$42 = /* @__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;`);
8662
9015
  const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
8663
9016
  id: p.id,
8664
9017
  name: p.name,
@@ -8687,6 +9040,7 @@ const Settings = () => {
8687
9040
  const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("summary");
8688
9041
  const [health, setHealth] = createSignal(null);
8689
9042
  const [defaultUrl, setDefaultUrl] = createSignal("https://start.duckduckgo.com");
9043
+ const [defaultSearchEngine, setDefaultSearchEngine] = createSignal("duckduckgo");
8690
9044
  const [downloadPath, setDownloadPath] = createSignal("");
8691
9045
  const [status, setStatus] = createSignal(null);
8692
9046
  const [telemetryEnabled, setTelemetryEnabled] = createSignal(true);
@@ -8976,6 +9330,7 @@ const Settings = () => {
8976
9330
  const runtimeHealth = await window.vessel.settings.getHealth();
8977
9331
  setTheme(settings.theme ?? "dark");
8978
9332
  setDefaultUrl(settings.defaultUrl ?? "https://start.duckduckgo.com");
9333
+ setDefaultSearchEngine(settings.defaultSearchEngine ?? "duckduckgo");
8979
9334
  setDownloadPath(settings.downloadPath ?? "");
8980
9335
  setAutoRestoreSession(settings.autoRestoreSession ?? true);
8981
9336
  setClearBookmarksOnLaunch(settings.clearBookmarksOnLaunch ?? false);
@@ -9077,6 +9432,7 @@ const Settings = () => {
9077
9432
  await window.vessel.settings.set("maxToolIterations", Math.max(10, Math.min(1e3, parsedIterations)));
9078
9433
  await window.vessel.settings.set("agentTranscriptMode", agentTranscriptMode());
9079
9434
  await window.vessel.settings.set("telemetryEnabled", telemetryEnabled());
9435
+ await window.vessel.settings.set("defaultSearchEngine", defaultSearchEngine());
9080
9436
  const domains = domainList().split("\n").map((d) => d.trim()).filter((d) => d.length > 0);
9081
9437
  const domainPolicy = domainMode() === "allowlist" ? {
9082
9438
  allowedDomains: domains,
@@ -9118,13 +9474,13 @@ const Settings = () => {
9118
9474
  },
9119
9475
  get children() {
9120
9476
  return [(() => {
9121
- var _el$ = _tmpl$24(), _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$26 = _el$25.nextSibling, _el$27 = _el$24.nextSibling, _el$28 = _el$27.firstChild, _el$30 = _el$28.nextSibling, _el$31 = _el$27.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.nextSibling, _el$37 = _el$34.nextSibling, _el$38 = _el$37.firstChild, _el$39 = _el$38.firstChild, _el$40 = _el$37.nextSibling, _el$41 = _el$40.firstChild, _el$42 = _el$41.firstChild, _el$43 = _el$40.nextSibling, _el$44 = _el$43.nextSibling, _el$45 = _el$44.firstChild, _el$46 = _el$45.nextSibling, _el$47 = _el$46.nextSibling, _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling, _el$51 = _el$44.nextSibling, _el$52 = _el$51.nextSibling, _el$53 = _el$52.firstChild, _el$54 = _el$53.firstChild, _el$75 = _el$52.nextSibling, _el$76 = _el$75.nextSibling;
9122
- _el$76.firstChild;
9123
- var _el$85 = _el$76.nextSibling, _el$86 = _el$85.nextSibling, _el$87 = _el$86.firstChild;
9124
- _el$87.firstChild;
9125
- var _el$103 = _el$86.nextSibling, _el$104 = _el$103.nextSibling, _el$105 = _el$104.firstChild;
9126
- _el$105.nextSibling;
9127
- var _el$128 = _el$104.nextSibling, _el$129 = _el$128.nextSibling, _el$130 = _el$129.firstChild, _el$131 = _el$130.firstChild, _el$132 = _el$129.nextSibling, _el$133 = _el$132.nextSibling, _el$134 = _el$133.firstChild, _el$135 = _el$134.nextSibling, _el$136 = _el$133.nextSibling, _el$137 = _el$136.firstChild, _el$138 = _el$137.nextSibling, _el$142 = _el$136.nextSibling, _el$143 = _el$142.firstChild, _el$144 = _el$143.nextSibling;
9477
+ var _el$ = _tmpl$24(), _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$23.firstChild, _el$25 = _el$21.nextSibling, _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling, _el$28 = _el$25.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$31.firstChild, _el$34 = _el$32.nextSibling, _el$35 = _el$31.nextSibling, _el$36 = _el$35.firstChild, _el$37 = _el$36.nextSibling, _el$38 = _el$35.nextSibling, _el$39 = _el$38.firstChild, _el$40 = _el$39.nextSibling, _el$41 = _el$38.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$44 = _el$41.nextSibling, _el$45 = _el$44.firstChild, _el$46 = _el$45.firstChild, _el$47 = _el$44.nextSibling, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling, _el$51 = _el$50.nextSibling, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$55 = _el$48.nextSibling, _el$56 = _el$55.nextSibling, _el$57 = _el$56.firstChild, _el$58 = _el$57.firstChild, _el$79 = _el$56.nextSibling, _el$80 = _el$79.nextSibling;
9478
+ _el$80.firstChild;
9479
+ var _el$89 = _el$80.nextSibling, _el$90 = _el$89.nextSibling, _el$91 = _el$90.firstChild;
9480
+ _el$91.firstChild;
9481
+ var _el$107 = _el$90.nextSibling, _el$108 = _el$107.nextSibling, _el$109 = _el$108.firstChild;
9482
+ _el$109.nextSibling;
9483
+ var _el$132 = _el$108.nextSibling, _el$133 = _el$132.nextSibling, _el$134 = _el$133.firstChild, _el$135 = _el$134.firstChild, _el$136 = _el$133.nextSibling, _el$137 = _el$136.nextSibling, _el$138 = _el$137.firstChild, _el$139 = _el$138.nextSibling, _el$140 = _el$137.nextSibling, _el$141 = _el$140.firstChild, _el$142 = _el$141.nextSibling, _el$146 = _el$140.nextSibling, _el$147 = _el$146.firstChild, _el$148 = _el$147.nextSibling;
9128
9484
  addEventListener(_el$, "click", closeSettings, true);
9129
9485
  _el$2.$$keydown = handleKeyDown;
9130
9486
  _el$2.$$click = (e) => e.stopPropagation();
@@ -9174,25 +9530,37 @@ const Settings = () => {
9174
9530
  }), _el$18);
9175
9531
  _el$20.$$input = (e) => setDefaultUrl(e.currentTarget.value);
9176
9532
  setAttribute(_el$20, "spellcheck", false);
9177
- _el$23.$$input = (e) => setDownloadPath(e.currentTarget.value);
9178
- setAttribute(_el$23, "spellcheck", false);
9179
- _el$26.$$input = (e) => setMcpPort(e.currentTarget.value);
9180
- setAttribute(_el$26, "spellcheck", false);
9181
- insert(_el$27, createComponent(Show, {
9533
+ _el$23.addEventListener("change", (e) => setDefaultSearchEngine(e.currentTarget.value));
9534
+ insert(_el$23, createComponent(For, {
9535
+ get each() {
9536
+ return Object.entries(SEARCH_ENGINE_PRESETS);
9537
+ },
9538
+ children: ([id, preset]) => (() => {
9539
+ var _el$150 = _tmpl$26();
9540
+ _el$150.value = id;
9541
+ insert(_el$150, () => preset.label);
9542
+ return _el$150;
9543
+ })()
9544
+ }), _el$24);
9545
+ _el$27.$$input = (e) => setDownloadPath(e.currentTarget.value);
9546
+ setAttribute(_el$27, "spellcheck", false);
9547
+ _el$30.$$input = (e) => setMcpPort(e.currentTarget.value);
9548
+ setAttribute(_el$30, "spellcheck", false);
9549
+ insert(_el$31, createComponent(Show, {
9182
9550
  get when() {
9183
9551
  return premiumActive();
9184
9552
  },
9185
9553
  get fallback() {
9186
- return _tmpl$26();
9554
+ return _tmpl$27();
9187
9555
  },
9188
9556
  get children() {
9189
- var _el$29 = _tmpl$4$1();
9190
- _el$29.$$input = (e) => setMaxToolIterations(e.currentTarget.value);
9191
- createRenderEffect(() => _el$29.value = maxToolIterations());
9192
- return _el$29;
9557
+ var _el$33 = _tmpl$4$1();
9558
+ _el$33.$$input = (e) => setMaxToolIterations(e.currentTarget.value);
9559
+ createRenderEffect(() => _el$33.value = maxToolIterations());
9560
+ return _el$33;
9193
9561
  }
9194
- }), _el$30);
9195
- insert(_el$30, createComponent(Show, {
9562
+ }), _el$34);
9563
+ insert(_el$34, createComponent(Show, {
9196
9564
  get when() {
9197
9565
  return premiumActive();
9198
9566
  },
@@ -9204,65 +9572,65 @@ const Settings = () => {
9204
9572
  return health();
9205
9573
  },
9206
9574
  children: (currentHealth) => (() => {
9207
- var _el$147 = _tmpl$28(), _el$148 = _el$147.firstChild, _el$149 = _el$148.nextSibling, _el$150 = _el$149.firstChild, _el$152 = _el$150.nextSibling;
9208
- _el$152.nextSibling;
9209
- insert(_el$152, () => currentHealth().mcp.status);
9210
- insert(_el$149, () => currentHealth().mcp.message, null);
9211
- insert(_el$147, createComponent(Show, {
9575
+ var _el$152 = _tmpl$29(), _el$153 = _el$152.firstChild, _el$154 = _el$153.nextSibling, _el$155 = _el$154.firstChild, _el$157 = _el$155.nextSibling;
9576
+ _el$157.nextSibling;
9577
+ insert(_el$157, () => currentHealth().mcp.status);
9578
+ insert(_el$154, () => currentHealth().mcp.message, null);
9579
+ insert(_el$152, createComponent(Show, {
9212
9580
  get when() {
9213
9581
  return currentHealth().mcp.endpoint;
9214
9582
  },
9215
9583
  children: (endpoint) => (() => {
9216
- var _el$155 = _tmpl$29(), _el$156 = _el$155.firstChild, _el$157 = _el$156.nextSibling;
9217
- insert(_el$157, endpoint);
9218
- return _el$155;
9584
+ var _el$160 = _tmpl$30(), _el$161 = _el$160.firstChild, _el$162 = _el$161.nextSibling;
9585
+ insert(_el$162, endpoint);
9586
+ return _el$160;
9219
9587
  })()
9220
9588
  }), null);
9221
- insert(_el$147, createComponent(Show, {
9589
+ insert(_el$152, createComponent(Show, {
9222
9590
  get when() {
9223
9591
  return currentHealth().startupIssues.length > 0;
9224
9592
  },
9225
9593
  get children() {
9226
- var _el$154 = _tmpl$27();
9227
- insert(_el$154, () => currentHealth().startupIssues.map((issue) => (() => {
9228
- var _el$158 = _tmpl$30(), _el$159 = _el$158.firstChild, _el$160 = _el$159.nextSibling;
9229
- insert(_el$159, () => issue.title);
9230
- insert(_el$160, () => issue.detail);
9231
- insert(_el$158, createComponent(Show, {
9594
+ var _el$159 = _tmpl$28();
9595
+ insert(_el$159, () => currentHealth().startupIssues.map((issue) => (() => {
9596
+ var _el$163 = _tmpl$31(), _el$164 = _el$163.firstChild, _el$165 = _el$164.nextSibling;
9597
+ insert(_el$164, () => issue.title);
9598
+ insert(_el$165, () => issue.detail);
9599
+ insert(_el$163, createComponent(Show, {
9232
9600
  get when() {
9233
9601
  return issue.action;
9234
9602
  },
9235
9603
  children: (action) => (() => {
9236
- var _el$161 = _tmpl$31();
9237
- insert(_el$161, action);
9238
- return _el$161;
9604
+ var _el$166 = _tmpl$32();
9605
+ insert(_el$166, action);
9606
+ return _el$166;
9239
9607
  })()
9240
9608
  }), null);
9241
9609
  createRenderEffect((_p$) => {
9242
9610
  var _v$1 = !!(issue.severity === "warning"), _v$10 = !!(issue.severity === "error");
9243
- _v$1 !== _p$.e && _el$158.classList.toggle("warning", _p$.e = _v$1);
9244
- _v$10 !== _p$.t && _el$158.classList.toggle("error", _p$.t = _v$10);
9611
+ _v$1 !== _p$.e && _el$163.classList.toggle("warning", _p$.e = _v$1);
9612
+ _v$10 !== _p$.t && _el$163.classList.toggle("error", _p$.t = _v$10);
9245
9613
  return _p$;
9246
9614
  }, {
9247
9615
  e: void 0,
9248
9616
  t: void 0
9249
9617
  });
9250
- return _el$158;
9618
+ return _el$163;
9251
9619
  })()));
9252
- return _el$154;
9620
+ return _el$159;
9253
9621
  }
9254
9622
  }), null);
9255
- return _el$147;
9623
+ return _el$152;
9256
9624
  })()
9257
- }), _el$31);
9258
- _el$33.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
9259
- setAttribute(_el$33, "spellcheck", false);
9260
- _el$36.addEventListener("change", (e) => setAgentTranscriptMode(e.currentTarget.value));
9261
- _el$39.$$click = () => setAutoRestoreSession(!autoRestoreSession());
9262
- _el$42.$$click = () => setClearBookmarksOnLaunch(!clearBookmarksOnLaunch());
9263
- _el$48.$$input = (e) => setSessionSaveName(e.currentTarget.value);
9264
- setAttribute(_el$48, "spellcheck", false);
9265
- _el$49.$$click = async () => {
9625
+ }), _el$35);
9626
+ _el$37.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
9627
+ setAttribute(_el$37, "spellcheck", false);
9628
+ _el$40.addEventListener("change", (e) => setAgentTranscriptMode(e.currentTarget.value));
9629
+ _el$43.$$click = () => setAutoRestoreSession(!autoRestoreSession());
9630
+ _el$46.$$click = () => setClearBookmarksOnLaunch(!clearBookmarksOnLaunch());
9631
+ _el$52.$$input = (e) => setSessionSaveName(e.currentTarget.value);
9632
+ setAttribute(_el$52, "spellcheck", false);
9633
+ _el$53.$$click = async () => {
9266
9634
  try {
9267
9635
  await window.vessel.sessions.save(sessionSaveName().trim());
9268
9636
  setSessionSaveName("");
@@ -9279,25 +9647,25 @@ const Settings = () => {
9279
9647
  });
9280
9648
  }
9281
9649
  };
9282
- insert(_el$44, createComponent(Show, {
9650
+ insert(_el$48, createComponent(Show, {
9283
9651
  get when() {
9284
9652
  return sessionList().length > 0;
9285
9653
  },
9286
9654
  get children() {
9287
- var _el$50 = _tmpl$5$1();
9288
- insert(_el$50, createComponent(For, {
9655
+ var _el$54 = _tmpl$5$1();
9656
+ insert(_el$54, createComponent(For, {
9289
9657
  get each() {
9290
9658
  return sessionList();
9291
9659
  },
9292
9660
  children: (s) => (() => {
9293
- var _el$162 = _tmpl$32(), _el$163 = _el$162.firstChild, _el$164 = _el$163.firstChild, _el$165 = _el$164.nextSibling, _el$166 = _el$165.firstChild, _el$172 = _el$166.nextSibling, _el$168 = _el$172.nextSibling, _el$173 = _el$168.nextSibling;
9294
- _el$173.nextSibling;
9295
- var _el$174 = _el$163.nextSibling, _el$175 = _el$174.firstChild, _el$176 = _el$175.nextSibling;
9296
- insert(_el$164, () => s.name);
9297
- insert(_el$165, () => new Date(s.updatedAt).toLocaleDateString(), _el$166);
9298
- insert(_el$165, () => s.cookieCount, _el$172);
9299
- insert(_el$165, () => s.domains.length, _el$173);
9300
- _el$175.$$click = async () => {
9661
+ var _el$167 = _tmpl$33(), _el$168 = _el$167.firstChild, _el$169 = _el$168.firstChild, _el$170 = _el$169.nextSibling, _el$171 = _el$170.firstChild, _el$177 = _el$171.nextSibling, _el$173 = _el$177.nextSibling, _el$178 = _el$173.nextSibling;
9662
+ _el$178.nextSibling;
9663
+ var _el$179 = _el$168.nextSibling, _el$180 = _el$179.firstChild, _el$181 = _el$180.nextSibling;
9664
+ insert(_el$169, () => s.name);
9665
+ insert(_el$170, () => new Date(s.updatedAt).toLocaleDateString(), _el$171);
9666
+ insert(_el$170, () => s.cookieCount, _el$177);
9667
+ insert(_el$170, () => s.domains.length, _el$178);
9668
+ _el$180.$$click = async () => {
9301
9669
  try {
9302
9670
  await window.vessel.sessions.load(s.name);
9303
9671
  setStatus({
@@ -9312,25 +9680,25 @@ const Settings = () => {
9312
9680
  });
9313
9681
  }
9314
9682
  };
9315
- _el$176.$$click = async () => {
9683
+ _el$181.$$click = async () => {
9316
9684
  await window.vessel.sessions.delete(s.name);
9317
9685
  await loadSessionList();
9318
9686
  };
9319
- return _el$162;
9687
+ return _el$167;
9320
9688
  })()
9321
9689
  }));
9322
- return _el$50;
9690
+ return _el$54;
9323
9691
  }
9324
9692
  }), null);
9325
- _el$54.$$click = () => setChatEnabled(!chatEnabled());
9693
+ _el$58.$$click = () => setChatEnabled(!chatEnabled());
9326
9694
  insert(_el$2, createComponent(Show, {
9327
9695
  get when() {
9328
9696
  return chatEnabled();
9329
9697
  },
9330
9698
  get children() {
9331
9699
  return [(() => {
9332
- var _el$55 = _tmpl$6$1(), _el$56 = _el$55.firstChild, _el$57 = _el$56.nextSibling;
9333
- _el$57.addEventListener("change", (e) => {
9700
+ var _el$59 = _tmpl$6$1(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
9701
+ _el$61.addEventListener("change", (e) => {
9334
9702
  const id = e.currentTarget.value;
9335
9703
  setChatProviderId(id);
9336
9704
  setChatModel("");
@@ -9340,26 +9708,26 @@ const Settings = () => {
9340
9708
  setProviderModels([]);
9341
9709
  setModelFetchState("idle");
9342
9710
  });
9343
- insert(_el$57, createComponent(For, {
9711
+ insert(_el$61, createComponent(For, {
9344
9712
  each: CHAT_PROVIDERS,
9345
9713
  children: (p) => (() => {
9346
- var _el$177 = _tmpl$33();
9347
- insert(_el$177, () => p.name);
9348
- createRenderEffect(() => _el$177.value = p.id);
9349
- return _el$177;
9714
+ var _el$182 = _tmpl$26();
9715
+ insert(_el$182, () => p.name);
9716
+ createRenderEffect(() => _el$182.value = p.id);
9717
+ return _el$182;
9350
9718
  })()
9351
9719
  }));
9352
- createRenderEffect(() => _el$57.value = chatProviderId());
9353
- return _el$55;
9720
+ createRenderEffect(() => _el$61.value = chatProviderId());
9721
+ return _el$59;
9354
9722
  })(), createComponent(Show, {
9355
9723
  get when() {
9356
9724
  return chatProviderMeta().requiresKey || chatProviderId() === "custom";
9357
9725
  },
9358
9726
  get children() {
9359
- var _el$58 = _tmpl$0(), _el$59 = _el$58.firstChild;
9360
- _el$59.firstChild;
9361
- var _el$62 = _el$59.nextSibling;
9362
- insert(_el$59, createComponent(Show, {
9727
+ var _el$62 = _tmpl$0(), _el$63 = _el$62.firstChild;
9728
+ _el$63.firstChild;
9729
+ var _el$66 = _el$63.nextSibling;
9730
+ insert(_el$63, createComponent(Show, {
9363
9731
  get when() {
9364
9732
  return !chatProviderMeta().requiresKey;
9365
9733
  },
@@ -9367,14 +9735,14 @@ const Settings = () => {
9367
9735
  return _tmpl$7();
9368
9736
  }
9369
9737
  }), null);
9370
- _el$62.$$input = (e) => {
9738
+ _el$66.$$input = (e) => {
9371
9739
  setChatApiKey(e.currentTarget.value);
9372
9740
  if (e.currentTarget.value.trim()) {
9373
9741
  setChatHasStoredApiKey(true);
9374
9742
  }
9375
9743
  };
9376
- setAttribute(_el$62, "spellcheck", false);
9377
- insert(_el$58, createComponent(Show, {
9744
+ setAttribute(_el$66, "spellcheck", false);
9745
+ insert(_el$62, createComponent(Show, {
9378
9746
  get when() {
9379
9747
  return memo(() => !!chatHasStoredApiKey())() && !chatApiKey().trim();
9380
9748
  },
@@ -9382,7 +9750,7 @@ const Settings = () => {
9382
9750
  return _tmpl$8();
9383
9751
  }
9384
9752
  }), null);
9385
- insert(_el$58, createComponent(Show, {
9753
+ insert(_el$62, createComponent(Show, {
9386
9754
  get when() {
9387
9755
  return chatProviderId() === "custom";
9388
9756
  },
@@ -9390,46 +9758,46 @@ const Settings = () => {
9390
9758
  return _tmpl$9();
9391
9759
  }
9392
9760
  }), null);
9393
- createRenderEffect(() => setAttribute(_el$62, "placeholder", chatHasStoredApiKey() && !chatApiKey().trim() ? "Stored securely. Enter a new key to replace it." : chatProviderMeta().keyPlaceholder || "Bearer token or API key"));
9394
- createRenderEffect(() => _el$62.value = chatApiKey());
9395
- return _el$58;
9761
+ createRenderEffect(() => setAttribute(_el$66, "placeholder", chatHasStoredApiKey() && !chatApiKey().trim() ? "Stored securely. Enter a new key to replace it." : chatProviderMeta().keyPlaceholder || "Bearer token or API key"));
9762
+ createRenderEffect(() => _el$66.value = chatApiKey());
9763
+ return _el$62;
9396
9764
  }
9397
9765
  }), (() => {
9398
- var _el$65 = _tmpl$11(), _el$66 = _el$65.firstChild, _el$67 = _el$66.nextSibling, _el$69 = _el$67.firstChild;
9399
- insert(_el$67, createComponent(Show, {
9766
+ var _el$69 = _tmpl$11(), _el$70 = _el$69.firstChild, _el$71 = _el$70.nextSibling, _el$73 = _el$71.firstChild;
9767
+ insert(_el$71, createComponent(Show, {
9400
9768
  get when() {
9401
9769
  return providerModels().length > 0;
9402
9770
  },
9403
9771
  get fallback() {
9404
9772
  return (() => {
9405
- var _el$178 = _tmpl$34();
9406
- _el$178.$$input = (e) => setChatModel(e.currentTarget.value);
9407
- setAttribute(_el$178, "spellcheck", false);
9408
- createRenderEffect(() => setAttribute(_el$178, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
9409
- createRenderEffect(() => _el$178.value = chatModel());
9410
- return _el$178;
9773
+ var _el$183 = _tmpl$34();
9774
+ _el$183.$$input = (e) => setChatModel(e.currentTarget.value);
9775
+ setAttribute(_el$183, "spellcheck", false);
9776
+ createRenderEffect(() => setAttribute(_el$183, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
9777
+ createRenderEffect(() => _el$183.value = chatModel());
9778
+ return _el$183;
9411
9779
  })();
9412
9780
  },
9413
9781
  get children() {
9414
- var _el$68 = _tmpl$1();
9415
- _el$68.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
9416
- insert(_el$68, createComponent(For, {
9782
+ var _el$72 = _tmpl$1();
9783
+ _el$72.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
9784
+ insert(_el$72, createComponent(For, {
9417
9785
  get each() {
9418
9786
  return providerModels();
9419
9787
  },
9420
9788
  children: (m) => (() => {
9421
- var _el$179 = _tmpl$33();
9422
- _el$179.value = m;
9423
- insert(_el$179, m);
9424
- return _el$179;
9789
+ var _el$184 = _tmpl$26();
9790
+ _el$184.value = m;
9791
+ insert(_el$184, m);
9792
+ return _el$184;
9425
9793
  })()
9426
9794
  }));
9427
- createRenderEffect(() => _el$68.value = chatModel());
9428
- return _el$68;
9795
+ createRenderEffect(() => _el$72.value = chatModel());
9796
+ return _el$72;
9429
9797
  }
9430
- }), _el$69);
9431
- _el$69.$$click = doFetchModels;
9432
- insert(_el$65, createComponent(Show, {
9798
+ }), _el$73);
9799
+ _el$73.$$click = doFetchModels;
9800
+ insert(_el$69, createComponent(Show, {
9433
9801
  get when() {
9434
9802
  return modelFetchState() === "error";
9435
9803
  },
@@ -9437,29 +9805,29 @@ const Settings = () => {
9437
9805
  return _tmpl$10();
9438
9806
  }
9439
9807
  }), null);
9440
- insert(_el$65, createComponent(Show, {
9808
+ insert(_el$69, createComponent(Show, {
9441
9809
  get when() {
9442
9810
  return modelFetchWarning();
9443
9811
  },
9444
9812
  children: (warning) => (() => {
9445
- var _el$180 = _tmpl$35();
9446
- insert(_el$180, warning);
9447
- return _el$180;
9813
+ var _el$185 = _tmpl$35();
9814
+ insert(_el$185, warning);
9815
+ return _el$185;
9448
9816
  })()
9449
9817
  }), null);
9450
- createRenderEffect(() => _el$69.disabled = modelFetchState() === "loading");
9451
- return _el$65;
9818
+ createRenderEffect(() => _el$73.disabled = modelFetchState() === "loading");
9819
+ return _el$69;
9452
9820
  })(), createComponent(Show, {
9453
9821
  get when() {
9454
9822
  return chatProviderMeta().needsBaseUrl || chatProviderId() === "custom";
9455
9823
  },
9456
9824
  get children() {
9457
- var _el$71 = _tmpl$12(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
9458
- _el$73.$$input = (e) => setChatBaseUrl(e.currentTarget.value);
9459
- setAttribute(_el$73, "spellcheck", false);
9460
- createRenderEffect(() => setAttribute(_el$73, "placeholder", chatProviderMeta().defaultBaseUrl ?? "https://..."));
9461
- createRenderEffect(() => _el$73.value = chatBaseUrl());
9462
- return _el$71;
9825
+ var _el$75 = _tmpl$12(), _el$76 = _el$75.firstChild, _el$77 = _el$76.nextSibling;
9826
+ _el$77.$$input = (e) => setChatBaseUrl(e.currentTarget.value);
9827
+ setAttribute(_el$77, "spellcheck", false);
9828
+ createRenderEffect(() => setAttribute(_el$77, "placeholder", chatProviderMeta().defaultBaseUrl ?? "https://..."));
9829
+ createRenderEffect(() => _el$77.value = chatBaseUrl());
9830
+ return _el$75;
9463
9831
  }
9464
9832
  }), createComponent(Show, {
9465
9833
  get when() {
@@ -9470,15 +9838,15 @@ const Settings = () => {
9470
9838
  }
9471
9839
  })];
9472
9840
  }
9473
- }), _el$75);
9474
- insert(_el$76, createComponent(Show, {
9841
+ }), _el$79);
9842
+ insert(_el$80, createComponent(Show, {
9475
9843
  get when() {
9476
9844
  return premiumActive();
9477
9845
  },
9478
9846
  get fallback() {
9479
9847
  return (() => {
9480
- var _el$181 = _tmpl$38(), _el$182 = _el$181.firstChild, _el$183 = _el$182.nextSibling, _el$184 = _el$183.firstChild, _el$185 = _el$184.nextSibling, _el$189 = _el$183.nextSibling;
9481
- _el$184.$$input = (e) => {
9848
+ var _el$186 = _tmpl$38(), _el$187 = _el$186.firstChild, _el$188 = _el$187.nextSibling, _el$189 = _el$188.firstChild, _el$190 = _el$189.nextSibling, _el$194 = _el$188.nextSibling;
9849
+ _el$189.$$input = (e) => {
9482
9850
  const nextEmail = e.currentTarget.value;
9483
9851
  if (nextEmail.trim().toLowerCase() !== premiumEmail().trim().toLowerCase()) {
9484
9852
  resetPremiumActivationFlow();
@@ -9486,8 +9854,8 @@ const Settings = () => {
9486
9854
  }
9487
9855
  setPremiumEmail(nextEmail);
9488
9856
  };
9489
- setAttribute(_el$184, "spellcheck", false);
9490
- _el$185.$$click = async () => {
9857
+ setAttribute(_el$189, "spellcheck", false);
9858
+ _el$190.$$click = async () => {
9491
9859
  setPremiumLoading(true);
9492
9860
  setPremiumMessage(null);
9493
9861
  try {
@@ -9516,23 +9884,23 @@ const Settings = () => {
9516
9884
  setPremiumLoading(false);
9517
9885
  }
9518
9886
  };
9519
- insert(_el$185, (() => {
9887
+ insert(_el$190, (() => {
9520
9888
  var _c$ = memo(() => !!premiumLoading());
9521
9889
  return () => _c$() ? "Sending..." : premiumCodeSent() ? "Resend Code" : "Send Code";
9522
9890
  })());
9523
- insert(_el$181, createComponent(Show, {
9891
+ insert(_el$186, createComponent(Show, {
9524
9892
  get when() {
9525
9893
  return premiumCodeSent();
9526
9894
  },
9527
9895
  get children() {
9528
- var _el$186 = _tmpl$36(), _el$187 = _el$186.firstChild, _el$188 = _el$187.nextSibling;
9529
- _el$187.$$input = (e) => {
9896
+ var _el$191 = _tmpl$36(), _el$192 = _el$191.firstChild, _el$193 = _el$192.nextSibling;
9897
+ _el$192.$$input = (e) => {
9530
9898
  const nextCode = e.currentTarget.value.replace(/\D+/g, "").slice(0, 6);
9531
9899
  setPremiumCode(nextCode);
9532
9900
  setPremiumMessage(null);
9533
9901
  };
9534
- setAttribute(_el$187, "spellcheck", false);
9535
- _el$188.$$click = async () => {
9902
+ setAttribute(_el$192, "spellcheck", false);
9903
+ _el$193.$$click = async () => {
9536
9904
  setPremiumLoading(true);
9537
9905
  setPremiumMessage(null);
9538
9906
  try {
@@ -9559,60 +9927,60 @@ const Settings = () => {
9559
9927
  setPremiumLoading(false);
9560
9928
  }
9561
9929
  };
9562
- insert(_el$188, () => premiumLoading() ? "Verifying..." : "Verify Code");
9563
- createRenderEffect(() => _el$188.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
9564
- createRenderEffect(() => _el$187.value = premiumCode());
9565
- return _el$186;
9930
+ insert(_el$193, () => premiumLoading() ? "Verifying..." : "Verify Code");
9931
+ createRenderEffect(() => _el$193.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
9932
+ createRenderEffect(() => _el$192.value = premiumCode());
9933
+ return _el$191;
9566
9934
  }
9567
- }), _el$189);
9568
- _el$189.$$click = () => {
9935
+ }), _el$194);
9936
+ _el$194.$$click = () => {
9569
9937
  startPremiumCheckout();
9570
9938
  };
9571
- insert(_el$181, createComponent(Show, {
9939
+ insert(_el$186, createComponent(Show, {
9572
9940
  get when() {
9573
9941
  return premiumMessage();
9574
9942
  },
9575
9943
  children: (msg) => (() => {
9576
- var _el$191 = _tmpl$39();
9577
- insert(_el$191, () => msg().text);
9944
+ var _el$196 = _tmpl$39();
9945
+ insert(_el$196, () => msg().text);
9578
9946
  createRenderEffect((_p$) => {
9579
9947
  var _v$11 = !!(msg().kind === "success"), _v$12 = !!(msg().kind === "error");
9580
- _v$11 !== _p$.e && _el$191.classList.toggle("success", _p$.e = _v$11);
9581
- _v$12 !== _p$.t && _el$191.classList.toggle("error", _p$.t = _v$12);
9948
+ _v$11 !== _p$.e && _el$196.classList.toggle("success", _p$.e = _v$11);
9949
+ _v$12 !== _p$.t && _el$196.classList.toggle("error", _p$.t = _v$12);
9582
9950
  return _p$;
9583
9951
  }, {
9584
9952
  e: void 0,
9585
9953
  t: void 0
9586
9954
  });
9587
- return _el$191;
9955
+ return _el$196;
9588
9956
  })()
9589
9957
  }), null);
9590
- insert(_el$181, createComponent(Show, {
9958
+ insert(_el$186, createComponent(Show, {
9591
9959
  get when() {
9592
9960
  return premiumState().email || premiumEmail();
9593
9961
  },
9594
9962
  get children() {
9595
- var _el$190 = _tmpl$37();
9596
- _el$190.$$click = async () => {
9963
+ var _el$195 = _tmpl$37();
9964
+ _el$195.$$click = async () => {
9597
9965
  const state = await window.vessel.premium.reset();
9598
9966
  setPremiumState(state);
9599
9967
  setPremiumEmail("");
9600
9968
  resetPremiumActivationFlow();
9601
9969
  setPremiumMessage(null);
9602
9970
  };
9603
- return _el$190;
9971
+ return _el$195;
9604
9972
  }
9605
9973
  }), null);
9606
- createRenderEffect(() => _el$185.disabled = premiumLoading() || !premiumEmail().trim());
9607
- createRenderEffect(() => _el$184.value = premiumEmail());
9608
- return _el$181;
9974
+ createRenderEffect(() => _el$190.disabled = premiumLoading() || !premiumEmail().trim());
9975
+ createRenderEffect(() => _el$189.value = premiumEmail());
9976
+ return _el$186;
9609
9977
  })();
9610
9978
  },
9611
9979
  get children() {
9612
- var _el$78 = _tmpl$14(), _el$79 = _el$78.firstChild;
9613
- _el$79.firstChild;
9614
- var _el$81 = _el$79.nextSibling, _el$82 = _el$81.nextSibling, _el$83 = _el$82.firstChild, _el$84 = _el$83.nextSibling;
9615
- insert(_el$79, createComponent(Show, {
9980
+ var _el$82 = _tmpl$14(), _el$83 = _el$82.firstChild;
9981
+ _el$83.firstChild;
9982
+ var _el$85 = _el$83.nextSibling, _el$86 = _el$85.nextSibling, _el$87 = _el$86.firstChild, _el$88 = _el$87.nextSibling;
9983
+ insert(_el$83, createComponent(Show, {
9616
9984
  get when() {
9617
9985
  return premiumState().status === "trialing";
9618
9986
  },
@@ -9620,8 +9988,8 @@ const Settings = () => {
9620
9988
  return [" ", "(Trial)"];
9621
9989
  }
9622
9990
  }), null);
9623
- insert(_el$81, () => premiumState().email, null);
9624
- insert(_el$81, createComponent(Show, {
9991
+ insert(_el$85, () => premiumState().email, null);
9992
+ insert(_el$85, createComponent(Show, {
9625
9993
  get when() {
9626
9994
  return premiumState().expiresAt;
9627
9995
  },
@@ -9629,7 +9997,7 @@ const Settings = () => {
9629
9997
  return [" ", "· Renews", " ", memo(() => new Date(premiumState().expiresAt).toLocaleDateString())];
9630
9998
  }
9631
9999
  }), null);
9632
- _el$83.$$click = async () => {
10000
+ _el$87.$$click = async () => {
9633
10001
  const result = await window.vessel.premium.portal();
9634
10002
  if (!result.ok) {
9635
10003
  setPremiumMessage({
@@ -9639,36 +10007,36 @@ const Settings = () => {
9639
10007
  setTimeout(() => setPremiumMessage(null), 5e3);
9640
10008
  }
9641
10009
  };
9642
- _el$84.$$click = async () => {
10010
+ _el$88.$$click = async () => {
9643
10011
  const state = await window.vessel.premium.reset();
9644
10012
  setPremiumState(state);
9645
10013
  setPremiumEmail("");
9646
10014
  resetPremiumActivationFlow();
9647
10015
  setPremiumMessage(null);
9648
10016
  };
9649
- insert(_el$78, createComponent(Show, {
10017
+ insert(_el$82, createComponent(Show, {
9650
10018
  get when() {
9651
10019
  return premiumMessage();
9652
10020
  },
9653
10021
  children: (msg) => (() => {
9654
- var _el$192 = _tmpl$39();
9655
- insert(_el$192, () => msg().text);
10022
+ var _el$197 = _tmpl$39();
10023
+ insert(_el$197, () => msg().text);
9656
10024
  createRenderEffect((_p$) => {
9657
10025
  var _v$13 = !!(msg().kind === "success"), _v$14 = !!(msg().kind === "error");
9658
- _v$13 !== _p$.e && _el$192.classList.toggle("success", _p$.e = _v$13);
9659
- _v$14 !== _p$.t && _el$192.classList.toggle("error", _p$.t = _v$14);
10026
+ _v$13 !== _p$.e && _el$197.classList.toggle("success", _p$.e = _v$13);
10027
+ _v$14 !== _p$.t && _el$197.classList.toggle("error", _p$.t = _v$14);
9660
10028
  return _p$;
9661
10029
  }, {
9662
10030
  e: void 0,
9663
10031
  t: void 0
9664
10032
  });
9665
- return _el$192;
10033
+ return _el$197;
9666
10034
  })()
9667
10035
  }), null);
9668
- return _el$78;
10036
+ return _el$82;
9669
10037
  }
9670
10038
  }), null);
9671
- insert(_el$87, createComponent(Show, {
10039
+ insert(_el$91, createComponent(Show, {
9672
10040
  get when() {
9673
10041
  return !premiumActive();
9674
10042
  },
@@ -9676,7 +10044,7 @@ const Settings = () => {
9676
10044
  return _tmpl$15();
9677
10045
  }
9678
10046
  }), null);
9679
- insert(_el$86, createComponent(Show, {
10047
+ insert(_el$90, createComponent(Show, {
9680
10048
  get when() {
9681
10049
  return premiumActive();
9682
10050
  },
@@ -9689,17 +10057,17 @@ const Settings = () => {
9689
10057
  return vaultEntries().length > 0;
9690
10058
  },
9691
10059
  get children() {
9692
- var _el$91 = _tmpl$5$1();
9693
- insert(_el$91, createComponent(For, {
10060
+ var _el$95 = _tmpl$5$1();
10061
+ insert(_el$95, createComponent(For, {
9694
10062
  get each() {
9695
10063
  return vaultEntries();
9696
10064
  },
9697
10065
  children: (entry) => (() => {
9698
- var _el$194 = _tmpl$41(), _el$195 = _el$194.firstChild, _el$196 = _el$195.firstChild, _el$197 = _el$196.nextSibling, _el$198 = _el$197.firstChild, _el$199 = _el$195.nextSibling;
9699
- insert(_el$196, () => entry.label);
9700
- insert(_el$197, () => entry.username, _el$198);
9701
- insert(_el$197, () => entry.domainPattern, null);
9702
- insert(_el$197, createComponent(Show, {
10066
+ var _el$199 = _tmpl$41(), _el$200 = _el$199.firstChild, _el$201 = _el$200.firstChild, _el$202 = _el$201.nextSibling, _el$203 = _el$202.firstChild, _el$204 = _el$200.nextSibling;
10067
+ insert(_el$201, () => entry.label);
10068
+ insert(_el$202, () => entry.username, _el$203);
10069
+ insert(_el$202, () => entry.domainPattern, null);
10070
+ insert(_el$202, createComponent(Show, {
9703
10071
  get when() {
9704
10072
  return entry.useCount > 0;
9705
10073
  },
@@ -9707,43 +10075,43 @@ const Settings = () => {
9707
10075
  return [" ", "· Used ", memo(() => entry.useCount), "x"];
9708
10076
  }
9709
10077
  }), null);
9710
- _el$199.$$click = () => handleVaultRemove(entry.id);
9711
- return _el$194;
10078
+ _el$204.$$click = () => handleVaultRemove(entry.id);
10079
+ return _el$199;
9712
10080
  })()
9713
10081
  }));
9714
- return _el$91;
10082
+ return _el$95;
9715
10083
  }
9716
10084
  }), createComponent(Show, {
9717
10085
  get when() {
9718
10086
  return !vaultAdding();
9719
10087
  },
9720
10088
  get children() {
9721
- var _el$92 = _tmpl$17();
9722
- _el$92.$$click = () => {
10089
+ var _el$96 = _tmpl$17();
10090
+ _el$96.$$click = () => {
9723
10091
  setVaultAdding(true);
9724
10092
  setVaultMessage(null);
9725
10093
  };
9726
- return _el$92;
10094
+ return _el$96;
9727
10095
  }
9728
10096
  }), createComponent(Show, {
9729
10097
  get when() {
9730
10098
  return vaultAdding();
9731
10099
  },
9732
10100
  get children() {
9733
- var _el$93 = _tmpl$18(), _el$94 = _el$93.firstChild, _el$95 = _el$94.nextSibling, _el$96 = _el$95.nextSibling, _el$97 = _el$96.nextSibling, _el$98 = _el$97.nextSibling, _el$99 = _el$98.nextSibling, _el$100 = _el$99.nextSibling, _el$101 = _el$100.firstChild, _el$102 = _el$101.nextSibling;
9734
- _el$94.$$input = (e) => setVaultNewLabel(e.currentTarget.value);
9735
- setAttribute(_el$94, "spellcheck", false);
9736
- _el$95.$$input = (e) => setVaultNewDomain(e.currentTarget.value);
9737
- setAttribute(_el$95, "spellcheck", false);
9738
- _el$96.$$input = (e) => setVaultNewUsername(e.currentTarget.value);
9739
- setAttribute(_el$96, "spellcheck", false);
9740
- _el$97.$$input = (e) => setVaultNewPassword(e.currentTarget.value);
9741
- _el$98.$$input = (e) => setVaultNewTotp(e.currentTarget.value);
10101
+ var _el$97 = _tmpl$18(), _el$98 = _el$97.firstChild, _el$99 = _el$98.nextSibling, _el$100 = _el$99.nextSibling, _el$101 = _el$100.nextSibling, _el$102 = _el$101.nextSibling, _el$103 = _el$102.nextSibling, _el$104 = _el$103.nextSibling, _el$105 = _el$104.firstChild, _el$106 = _el$105.nextSibling;
10102
+ _el$98.$$input = (e) => setVaultNewLabel(e.currentTarget.value);
9742
10103
  setAttribute(_el$98, "spellcheck", false);
9743
- _el$99.$$input = (e) => setVaultNewNotes(e.currentTarget.value);
10104
+ _el$99.$$input = (e) => setVaultNewDomain(e.currentTarget.value);
9744
10105
  setAttribute(_el$99, "spellcheck", false);
9745
- _el$101.$$click = handleVaultAdd;
9746
- _el$102.$$click = () => {
10106
+ _el$100.$$input = (e) => setVaultNewUsername(e.currentTarget.value);
10107
+ setAttribute(_el$100, "spellcheck", false);
10108
+ _el$101.$$input = (e) => setVaultNewPassword(e.currentTarget.value);
10109
+ _el$102.$$input = (e) => setVaultNewTotp(e.currentTarget.value);
10110
+ setAttribute(_el$102, "spellcheck", false);
10111
+ _el$103.$$input = (e) => setVaultNewNotes(e.currentTarget.value);
10112
+ setAttribute(_el$103, "spellcheck", false);
10113
+ _el$105.$$click = handleVaultAdd;
10114
+ _el$106.$$click = () => {
9747
10115
  setVaultAdding(false);
9748
10116
  setVaultNewLabel("");
9749
10117
  setVaultNewDomain("");
@@ -9752,100 +10120,100 @@ const Settings = () => {
9752
10120
  setVaultNewTotp("");
9753
10121
  setVaultNewNotes("");
9754
10122
  };
9755
- createRenderEffect(() => _el$94.value = vaultNewLabel());
9756
- createRenderEffect(() => _el$95.value = vaultNewDomain());
9757
- createRenderEffect(() => _el$96.value = vaultNewUsername());
9758
- createRenderEffect(() => _el$97.value = vaultNewPassword());
9759
- createRenderEffect(() => _el$98.value = vaultNewTotp());
9760
- createRenderEffect(() => _el$99.value = vaultNewNotes());
9761
- return _el$93;
10123
+ createRenderEffect(() => _el$98.value = vaultNewLabel());
10124
+ createRenderEffect(() => _el$99.value = vaultNewDomain());
10125
+ createRenderEffect(() => _el$100.value = vaultNewUsername());
10126
+ createRenderEffect(() => _el$101.value = vaultNewPassword());
10127
+ createRenderEffect(() => _el$102.value = vaultNewTotp());
10128
+ createRenderEffect(() => _el$103.value = vaultNewNotes());
10129
+ return _el$97;
9762
10130
  }
9763
10131
  }), createComponent(Show, {
9764
10132
  get when() {
9765
10133
  return vaultMessage();
9766
10134
  },
9767
10135
  children: (msg) => (() => {
9768
- var _el$200 = _tmpl$39();
9769
- insert(_el$200, () => msg().text);
10136
+ var _el$205 = _tmpl$39();
10137
+ insert(_el$205, () => msg().text);
9770
10138
  createRenderEffect((_p$) => {
9771
10139
  var _v$15 = !!(msg().kind === "success"), _v$16 = !!(msg().kind === "error");
9772
- _v$15 !== _p$.e && _el$200.classList.toggle("success", _p$.e = _v$15);
9773
- _v$16 !== _p$.t && _el$200.classList.toggle("error", _p$.t = _v$16);
10140
+ _v$15 !== _p$.e && _el$205.classList.toggle("success", _p$.e = _v$15);
10141
+ _v$16 !== _p$.t && _el$205.classList.toggle("error", _p$.t = _v$16);
9774
10142
  return _p$;
9775
10143
  }, {
9776
10144
  e: void 0,
9777
10145
  t: void 0
9778
10146
  });
9779
- return _el$200;
10147
+ return _el$205;
9780
10148
  })()
9781
10149
  })];
9782
10150
  }
9783
10151
  }), null);
9784
- insert(_el$104, createComponent(Show, {
10152
+ insert(_el$108, createComponent(Show, {
9785
10153
  get when() {
9786
10154
  return autofillProfiles().length > 0;
9787
10155
  },
9788
10156
  get children() {
9789
- var _el$107 = _tmpl$5$1();
9790
- insert(_el$107, createComponent(For, {
10157
+ var _el$111 = _tmpl$5$1();
10158
+ insert(_el$111, createComponent(For, {
9791
10159
  get each() {
9792
10160
  return autofillProfiles();
9793
10161
  },
9794
10162
  children: (profile) => (() => {
9795
- var _el$201 = _tmpl$42(), _el$202 = _el$201.firstChild, _el$203 = _el$202.firstChild, _el$204 = _el$203.nextSibling, _el$205 = _el$202.nextSibling, _el$206 = _el$205.firstChild, _el$207 = _el$206.nextSibling;
9796
- insert(_el$203, () => profile.label);
9797
- insert(_el$204, () => profile.firstName, null);
9798
- insert(_el$204, (() => {
10163
+ var _el$206 = _tmpl$42(), _el$207 = _el$206.firstChild, _el$208 = _el$207.firstChild, _el$209 = _el$208.nextSibling, _el$210 = _el$207.nextSibling, _el$211 = _el$210.firstChild, _el$212 = _el$211.nextSibling;
10164
+ insert(_el$208, () => profile.label);
10165
+ insert(_el$209, () => profile.firstName, null);
10166
+ insert(_el$209, (() => {
9799
10167
  var _c$2 = memo(() => !!profile.lastName);
9800
10168
  return () => _c$2() ? ` ${profile.lastName}` : "";
9801
10169
  })(), null);
9802
- insert(_el$204, (() => {
10170
+ insert(_el$209, (() => {
9803
10171
  var _c$3 = memo(() => !!profile.email);
9804
10172
  return () => _c$3() ? ` · ${profile.email}` : "";
9805
10173
  })(), null);
9806
- _el$206.$$click = () => handleAutofillFill(profile.id);
9807
- _el$207.$$click = () => handleAutofillRemove(profile.id);
9808
- return _el$201;
10174
+ _el$211.$$click = () => handleAutofillFill(profile.id);
10175
+ _el$212.$$click = () => handleAutofillRemove(profile.id);
10176
+ return _el$206;
9809
10177
  })()
9810
10178
  }));
9811
- return _el$107;
10179
+ return _el$111;
9812
10180
  }
9813
10181
  }), null);
9814
- insert(_el$104, createComponent(Show, {
10182
+ insert(_el$108, createComponent(Show, {
9815
10183
  get when() {
9816
10184
  return !autofillAdding();
9817
10185
  },
9818
10186
  get children() {
9819
- var _el$108 = _tmpl$19();
9820
- _el$108.$$click = () => {
10187
+ var _el$112 = _tmpl$19();
10188
+ _el$112.$$click = () => {
9821
10189
  setAutofillAdding(true);
9822
10190
  setAutofillMessage(null);
9823
10191
  };
9824
- return _el$108;
10192
+ return _el$112;
9825
10193
  }
9826
10194
  }), null);
9827
- insert(_el$104, createComponent(Show, {
10195
+ insert(_el$108, createComponent(Show, {
9828
10196
  get when() {
9829
10197
  return autofillAdding();
9830
10198
  },
9831
10199
  get children() {
9832
- var _el$109 = _tmpl$20(), _el$110 = _el$109.firstChild, _el$111 = _el$110.nextSibling, _el$112 = _el$111.firstChild, _el$113 = _el$112.nextSibling, _el$114 = _el$111.nextSibling, _el$115 = _el$114.firstChild, _el$116 = _el$115.nextSibling, _el$117 = _el$114.nextSibling, _el$118 = _el$117.nextSibling, _el$119 = _el$118.nextSibling, _el$120 = _el$119.nextSibling, _el$121 = _el$120.firstChild, _el$122 = _el$121.nextSibling, _el$123 = _el$122.nextSibling, _el$124 = _el$120.nextSibling, _el$125 = _el$124.nextSibling, _el$126 = _el$125.firstChild, _el$127 = _el$126.nextSibling;
9833
- _el$110.$$input = (e) => setAutofillLabel(e.currentTarget.value);
9834
- setAttribute(_el$110, "spellcheck", false);
9835
- _el$112.$$input = (e) => setAutofillFirstName(e.currentTarget.value);
9836
- _el$113.$$input = (e) => setAutofillLastName(e.currentTarget.value);
9837
- _el$115.$$input = (e) => setAutofillEmail(e.currentTarget.value);
9838
- setAttribute(_el$115, "spellcheck", false);
9839
- _el$116.$$input = (e) => setAutofillPhone(e.currentTarget.value);
9840
- _el$117.$$input = (e) => setAutofillOrg(e.currentTarget.value);
9841
- _el$118.$$input = (e) => setAutofillAddr1(e.currentTarget.value);
9842
- _el$119.$$input = (e) => setAutofillAddr2(e.currentTarget.value);
9843
- _el$121.$$input = (e) => setAutofillCity(e.currentTarget.value);
9844
- _el$122.$$input = (e) => setAutofillState(e.currentTarget.value);
9845
- _el$123.$$input = (e) => setAutofillZip(e.currentTarget.value);
9846
- _el$124.$$input = (e) => setAutofillCountry(e.currentTarget.value);
9847
- _el$126.$$click = handleAutofillAdd;
9848
- _el$127.$$click = () => {
10200
+ var _el$113 = _tmpl$20(), _el$114 = _el$113.firstChild, _el$115 = _el$114.nextSibling, _el$116 = _el$115.firstChild, _el$117 = _el$116.nextSibling, _el$118 = _el$115.nextSibling, _el$119 = _el$118.firstChild, _el$120 = _el$119.nextSibling, _el$121 = _el$118.nextSibling, _el$122 = _el$121.nextSibling, _el$123 = _el$122.nextSibling, _el$124 = _el$123.nextSibling, _el$125 = _el$124.firstChild, _el$126 = _el$125.nextSibling, _el$127 = _el$126.nextSibling, _el$128 = _el$124.nextSibling, _el$129 = _el$128.nextSibling, _el$130 = _el$129.firstChild, _el$131 = _el$130.nextSibling;
10201
+ _el$114.$$input = (e) => setAutofillLabel(e.currentTarget.value);
10202
+ setAttribute(_el$114, "spellcheck", false);
10203
+ _el$116.$$input = (e) => setAutofillFirstName(e.currentTarget.value);
10204
+ _el$117.$$input = (e) => setAutofillLastName(e.currentTarget.value);
10205
+ _el$119.$$input = (e) => setAutofillEmail(e.currentTarget.value);
10206
+ setAttribute(_el$119, "spellcheck", false);
10207
+ _el$120.$$input = (e) => setAutofillPhone(e.currentTarget.value);
10208
+ _el$121.$$input = (e) => setAutofillOrg(e.currentTarget.value);
10209
+ _el$122.$$input = (e) => setAutofillAddr1(e.currentTarget.value);
10210
+ _el$123.$$input = (e) => setAutofillAddr2(e.currentTarget.value);
10211
+ _el$125.$$input = (e) => setAutofillCity(e.currentTarget.value);
10212
+ _el$126.$$input = (e) => setAutofillState(e.currentTarget.value);
10213
+ _el$127.$$input = (e) => setAutofillZip(e.currentTarget.value);
10214
+ _el$128.$$input = (e) => setAutofillCountry(e.currentTarget.value);
10215
+ _el$130.$$click = handleAutofillAdd;
10216
+ _el$131.$$click = () => {
9849
10217
  setAutofillAdding(false);
9850
10218
  setAutofillLabel("");
9851
10219
  setAutofillFirstName("");
@@ -9860,63 +10228,63 @@ const Settings = () => {
9860
10228
  setAutofillZip("");
9861
10229
  setAutofillCountry("");
9862
10230
  };
9863
- createRenderEffect(() => _el$110.value = autofillLabel());
9864
- createRenderEffect(() => _el$112.value = autofillFirstName());
9865
- createRenderEffect(() => _el$113.value = autofillLastName());
9866
- createRenderEffect(() => _el$115.value = autofillEmail());
9867
- createRenderEffect(() => _el$116.value = autofillPhone());
9868
- createRenderEffect(() => _el$117.value = autofillOrg());
9869
- createRenderEffect(() => _el$118.value = autofillAddr1());
9870
- createRenderEffect(() => _el$119.value = autofillAddr2());
9871
- createRenderEffect(() => _el$121.value = autofillCity());
9872
- createRenderEffect(() => _el$122.value = autofillState());
9873
- createRenderEffect(() => _el$123.value = autofillZip());
9874
- createRenderEffect(() => _el$124.value = autofillCountry());
9875
- return _el$109;
10231
+ createRenderEffect(() => _el$114.value = autofillLabel());
10232
+ createRenderEffect(() => _el$116.value = autofillFirstName());
10233
+ createRenderEffect(() => _el$117.value = autofillLastName());
10234
+ createRenderEffect(() => _el$119.value = autofillEmail());
10235
+ createRenderEffect(() => _el$120.value = autofillPhone());
10236
+ createRenderEffect(() => _el$121.value = autofillOrg());
10237
+ createRenderEffect(() => _el$122.value = autofillAddr1());
10238
+ createRenderEffect(() => _el$123.value = autofillAddr2());
10239
+ createRenderEffect(() => _el$125.value = autofillCity());
10240
+ createRenderEffect(() => _el$126.value = autofillState());
10241
+ createRenderEffect(() => _el$127.value = autofillZip());
10242
+ createRenderEffect(() => _el$128.value = autofillCountry());
10243
+ return _el$113;
9876
10244
  }
9877
10245
  }), null);
9878
- insert(_el$104, createComponent(Show, {
10246
+ insert(_el$108, createComponent(Show, {
9879
10247
  get when() {
9880
10248
  return autofillMessage();
9881
10249
  },
9882
10250
  children: (msg) => (() => {
9883
- var _el$208 = _tmpl$39();
9884
- insert(_el$208, () => msg().text);
10251
+ var _el$213 = _tmpl$39();
10252
+ insert(_el$213, () => msg().text);
9885
10253
  createRenderEffect((_p$) => {
9886
10254
  var _v$17 = !!(msg().kind === "success"), _v$18 = !!(msg().kind === "error");
9887
- _v$17 !== _p$.e && _el$208.classList.toggle("success", _p$.e = _v$17);
9888
- _v$18 !== _p$.t && _el$208.classList.toggle("error", _p$.t = _v$18);
10255
+ _v$17 !== _p$.e && _el$213.classList.toggle("success", _p$.e = _v$17);
10256
+ _v$18 !== _p$.t && _el$213.classList.toggle("error", _p$.t = _v$18);
9889
10257
  return _p$;
9890
10258
  }, {
9891
10259
  e: void 0,
9892
10260
  t: void 0
9893
10261
  });
9894
- return _el$208;
10262
+ return _el$213;
9895
10263
  })()
9896
10264
  }), null);
9897
- _el$131.$$click = () => setTelemetryEnabled(!telemetryEnabled());
9898
- _el$135.addEventListener("change", (e) => setTheme(e.currentTarget.value));
9899
- _el$138.addEventListener("change", (e) => setDomainMode(e.currentTarget.value));
9900
- insert(_el$136, createComponent(Show, {
10265
+ _el$135.$$click = () => setTelemetryEnabled(!telemetryEnabled());
10266
+ _el$139.addEventListener("change", (e) => setTheme(e.currentTarget.value));
10267
+ _el$142.addEventListener("change", (e) => setDomainMode(e.currentTarget.value));
10268
+ insert(_el$140, createComponent(Show, {
9901
10269
  get when() {
9902
10270
  return domainMode() !== "none";
9903
10271
  },
9904
10272
  get children() {
9905
10273
  return [(() => {
9906
- var _el$139 = _tmpl$21();
9907
- _el$139.$$input = (e) => setDomainList(e.currentTarget.value);
9908
- setAttribute(_el$139, "spellcheck", false);
9909
- createRenderEffect(() => setAttribute(_el$139, "placeholder", domainMode() === "allowlist" ? "example.com\napi.example.com" : "ads.example.com\ntracker.io"));
9910
- createRenderEffect(() => _el$139.value = domainList());
9911
- return _el$139;
10274
+ var _el$143 = _tmpl$21();
10275
+ _el$143.$$input = (e) => setDomainList(e.currentTarget.value);
10276
+ setAttribute(_el$143, "spellcheck", false);
10277
+ createRenderEffect(() => setAttribute(_el$143, "placeholder", domainMode() === "allowlist" ? "example.com\napi.example.com" : "ads.example.com\ntracker.io"));
10278
+ createRenderEffect(() => _el$143.value = domainList());
10279
+ return _el$143;
9912
10280
  })(), (() => {
9913
- var _el$140 = _tmpl$22();
9914
- insert(_el$140, () => domainMode() === "allowlist" ? "One domain per line. Subdomains of listed domains are also allowed." : "One domain per line. Subdomains of listed domains are also blocked.");
9915
- return _el$140;
10281
+ var _el$144 = _tmpl$22();
10282
+ insert(_el$144, () => domainMode() === "allowlist" ? "One domain per line. Subdomains of listed domains are also allowed." : "One domain per line. Subdomains of listed domains are also blocked.");
10283
+ return _el$144;
9916
10284
  })()];
9917
10285
  }
9918
10286
  }), null);
9919
- insert(_el$136, createComponent(Show, {
10287
+ insert(_el$140, createComponent(Show, {
9920
10288
  get when() {
9921
10289
  return domainMode() === "none";
9922
10290
  },
@@ -9924,39 +10292,39 @@ const Settings = () => {
9924
10292
  return _tmpl$23();
9925
10293
  }
9926
10294
  }), null);
9927
- _el$143.$$click = handleSave;
9928
- addEventListener(_el$144, "click", closeSettings, true);
10295
+ _el$147.$$click = handleSave;
10296
+ addEventListener(_el$148, "click", closeSettings, true);
9929
10297
  insert(_el$2, createComponent(Show, {
9930
10298
  get when() {
9931
10299
  return status();
9932
10300
  },
9933
10301
  children: (currentStatus) => (() => {
9934
- var _el$209 = _tmpl$39();
9935
- insert(_el$209, () => currentStatus().text);
10302
+ var _el$214 = _tmpl$39();
10303
+ insert(_el$214, () => currentStatus().text);
9936
10304
  createRenderEffect((_p$) => {
9937
10305
  var _v$19 = !!(currentStatus().kind === "success"), _v$20 = !!(currentStatus().kind === "error");
9938
- _v$19 !== _p$.e && _el$209.classList.toggle("success", _p$.e = _v$19);
9939
- _v$20 !== _p$.t && _el$209.classList.toggle("error", _p$.t = _v$20);
10306
+ _v$19 !== _p$.e && _el$214.classList.toggle("success", _p$.e = _v$19);
10307
+ _v$20 !== _p$.t && _el$214.classList.toggle("error", _p$.t = _v$20);
9940
10308
  return _p$;
9941
10309
  }, {
9942
10310
  e: void 0,
9943
10311
  t: void 0
9944
10312
  });
9945
- return _el$209;
10313
+ return _el$214;
9946
10314
  })()
9947
10315
  }), null);
9948
10316
  createRenderEffect((_p$) => {
9949
10317
  var _v$ = !!settingsClosing(), _v$2 = !!autoRestoreSession(), _v$3 = autoRestoreSession(), _v$4 = !!clearBookmarksOnLaunch(), _v$5 = clearBookmarksOnLaunch(), _v$6 = !sessionSaveName().trim(), _v$7 = !!chatEnabled(), _v$8 = chatEnabled(), _v$9 = !!telemetryEnabled(), _v$0 = telemetryEnabled();
9950
10318
  _v$ !== _p$.e && _el$.classList.toggle("closing", _p$.e = _v$);
9951
- _v$2 !== _p$.t && _el$39.classList.toggle("on", _p$.t = _v$2);
9952
- _v$3 !== _p$.a && setAttribute(_el$39, "aria-checked", _p$.a = _v$3);
9953
- _v$4 !== _p$.o && _el$42.classList.toggle("on", _p$.o = _v$4);
9954
- _v$5 !== _p$.i && setAttribute(_el$42, "aria-checked", _p$.i = _v$5);
9955
- _v$6 !== _p$.n && (_el$49.disabled = _p$.n = _v$6);
9956
- _v$7 !== _p$.s && _el$54.classList.toggle("on", _p$.s = _v$7);
9957
- _v$8 !== _p$.h && setAttribute(_el$54, "aria-checked", _p$.h = _v$8);
9958
- _v$9 !== _p$.r && _el$131.classList.toggle("on", _p$.r = _v$9);
9959
- _v$0 !== _p$.d && setAttribute(_el$131, "aria-checked", _p$.d = _v$0);
10319
+ _v$2 !== _p$.t && _el$43.classList.toggle("on", _p$.t = _v$2);
10320
+ _v$3 !== _p$.a && setAttribute(_el$43, "aria-checked", _p$.a = _v$3);
10321
+ _v$4 !== _p$.o && _el$46.classList.toggle("on", _p$.o = _v$4);
10322
+ _v$5 !== _p$.i && setAttribute(_el$46, "aria-checked", _p$.i = _v$5);
10323
+ _v$6 !== _p$.n && (_el$53.disabled = _p$.n = _v$6);
10324
+ _v$7 !== _p$.s && _el$58.classList.toggle("on", _p$.s = _v$7);
10325
+ _v$8 !== _p$.h && setAttribute(_el$58, "aria-checked", _p$.h = _v$8);
10326
+ _v$9 !== _p$.r && _el$135.classList.toggle("on", _p$.r = _v$9);
10327
+ _v$0 !== _p$.d && setAttribute(_el$135, "aria-checked", _p$.d = _v$0);
9960
10328
  return _p$;
9961
10329
  }, {
9962
10330
  e: void 0,
@@ -9971,13 +10339,14 @@ const Settings = () => {
9971
10339
  d: void 0
9972
10340
  });
9973
10341
  createRenderEffect(() => _el$20.value = defaultUrl());
9974
- createRenderEffect(() => _el$23.value = downloadPath());
9975
- createRenderEffect(() => _el$26.value = mcpPort());
9976
- createRenderEffect(() => _el$33.value = obsidianVaultPath());
9977
- createRenderEffect(() => _el$36.value = agentTranscriptMode());
9978
- createRenderEffect(() => _el$48.value = sessionSaveName());
9979
- createRenderEffect(() => _el$135.value = theme());
9980
- createRenderEffect(() => _el$138.value = domainMode());
10342
+ createRenderEffect(() => _el$23.value = defaultSearchEngine());
10343
+ createRenderEffect(() => _el$27.value = downloadPath());
10344
+ createRenderEffect(() => _el$30.value = mcpPort());
10345
+ createRenderEffect(() => _el$37.value = obsidianVaultPath());
10346
+ createRenderEffect(() => _el$40.value = agentTranscriptMode());
10347
+ createRenderEffect(() => _el$52.value = sessionSaveName());
10348
+ createRenderEffect(() => _el$139.value = theme());
10349
+ createRenderEffect(() => _el$142.value = domainMode());
9981
10350
  return _el$;
9982
10351
  })(), _tmpl$25()];
9983
10352
  }