@quanta-intellect/vessel-browser 0.1.78 → 0.1.80

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.
@@ -2295,7 +2295,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
2295
2295
  }
2296
2296
  return "idle";
2297
2297
  }
2298
- var _tmpl$$n = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$i = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$i = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$e = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$d = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$c = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$9 = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$6 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$6 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$6 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2298
+ var _tmpl$$n = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$i = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$i = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$e = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$d = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$c = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$9 = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$7 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$6 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$6 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2299
2299
  const TAB_CLOSE_MS = 200;
2300
2300
  function stringToHue(str) {
2301
2301
  let hash = 0;
@@ -2510,7 +2510,7 @@ const TabBar = () => {
2510
2510
  return _el$15;
2511
2511
  }
2512
2512
  }), memo(() => memo(() => !!tab.isLoading)() && _tmpl$1$6()), (() => {
2513
- var _el$16 = _tmpl$9$6();
2513
+ var _el$16 = _tmpl$9$7();
2514
2514
  _el$16.$$click = (e) => {
2515
2515
  e.stopPropagation();
2516
2516
  handleClose(tab.id);
@@ -2872,6 +2872,33 @@ function buildPageSnapshotKey(rawUrl) {
2872
2872
  function matchesPageSnapshotUrl(left, right) {
2873
2873
  return buildPageSnapshotKey(left) === buildPageSnapshotKey(right);
2874
2874
  }
2875
+ const SECTION_LABELS = {
2876
+ content: "Content",
2877
+ headings: "Headings",
2878
+ title: "Title"
2879
+ };
2880
+ function cleanDiffSummaryText(value) {
2881
+ return value.replace(
2882
+ /```[\s\S]*?```/g,
2883
+ (match) => match.replace(/```[a-z]*\n?/gi, "").replace(/```/g, "")
2884
+ ).replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/(\*\*|__)(.*?)\1/g, "$2").replace(/(\*|_)(.*?)\1/g, "$2").replace(/^#{1,6}\s+/gm, "").replace(/^\s*[-*+]\s+/gm, "").replace(/^\s*>\s?/gm, "").replace(/\s+/g, " ").trim();
2885
+ }
2886
+ function formatDiffSectionLabel(section) {
2887
+ const normalized = section.trim().toLowerCase();
2888
+ return SECTION_LABELS[normalized] ?? section.trim();
2889
+ }
2890
+ function parseDiffSummaryParts(summary) {
2891
+ return summary.split(/\s+\|\s+/).map((part) => {
2892
+ const match = part.match(/^([a-z]+):\s*(.+)$/i);
2893
+ if (!match) {
2894
+ return { text: cleanDiffSummaryText(part) };
2895
+ }
2896
+ return {
2897
+ section: formatDiffSectionLabel(match[1]),
2898
+ text: cleanDiffSummaryText(match[2])
2899
+ };
2900
+ }).filter((part) => part.text.length > 0);
2901
+ }
2875
2902
  const SEARCH_ENGINE_PRESETS = {
2876
2903
  duckduckgo: { label: "DuckDuckGo", url: "https://duckduckgo.com/?q=" },
2877
2904
  google: { label: "Google", url: "https://www.google.com/search?q=" },
@@ -2880,7 +2907,7 @@ const SEARCH_ENGINE_PRESETS = {
2880
2907
  ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
2881
2908
  kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
2882
2909
  };
2883
- var _tmpl$$l = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$h = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$h = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$d = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$c = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$8$8 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$5 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$0$5 = /* @__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$1$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$5 = /* @__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$11$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$3 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$3 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$23$2 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$25$2 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$26$2 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$27$2 = /* @__PURE__ */ template(`<li>`);
2910
+ var _tmpl$$l = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$h = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$h = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$d = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$c = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$8$8 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$6 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$5 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </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$1$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$5 = /* @__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$11$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$3 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$3 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$2 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$2 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$2 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$2 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$2 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$2 = /* @__PURE__ */ template(`<li>`);
2884
2911
  const AddressBar = (props) => {
2885
2912
  const {
2886
2913
  activeTab,
@@ -2967,7 +2994,7 @@ const AddressBar = (props) => {
2967
2994
  }
2968
2995
  await window.vessel.ui.openSidebarTab("diff");
2969
2996
  };
2970
- const formatRelativeTime = (isoDate) => {
2997
+ const formatRelativeTime2 = (isoDate) => {
2971
2998
  const diff = Date.now() - new Date(isoDate).getTime();
2972
2999
  const mins = Math.floor(diff / 6e4);
2973
3000
  if (mins < 1) return "just now";
@@ -2987,6 +3014,7 @@ const AddressBar = (props) => {
2987
3014
  const hours = Math.round(mins / 60);
2988
3015
  return `${hours}h`;
2989
3016
  };
3017
+ const getChangeKindLabel = (kind) => kind === "added" ? "Added" : kind === "removed" ? "Removed" : "Changed";
2990
3018
  createEffect(() => {
2991
3019
  if (isPrivateWindow) return;
2992
3020
  const unsubscribe2 = window.vessel.pageDiff.onChanged((diff) => {
@@ -3137,7 +3165,7 @@ const AddressBar = (props) => {
3137
3165
  };
3138
3166
  const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
3139
3167
  return (() => {
3140
- var _el$ = _tmpl$17$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$34 = _el$11.nextSibling, _el$35 = _el$34.firstChild, _el$36 = _el$35.firstChild;
3168
+ var _el$ = _tmpl$17$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$35 = _el$11.nextSibling, _el$36 = _el$35.firstChild, _el$37 = _el$36.firstChild;
3141
3169
  addEventListener(_el$3, "click", goBack, true);
3142
3170
  addEventListener(_el$4, "click", goForward, true);
3143
3171
  addEventListener(_el$5, "click", reload, true);
@@ -3157,9 +3185,9 @@ const AddressBar = (props) => {
3157
3185
  insert(_el$8, createComponent(Switch, {
3158
3186
  get fallback() {
3159
3187
  return (() => {
3160
- var _el$47 = _tmpl$18$3();
3161
- _el$47.firstChild;
3162
- return _el$47;
3188
+ var _el$48 = _tmpl$18$3();
3189
+ _el$48.firstChild;
3190
+ return _el$48;
3163
3191
  })();
3164
3192
  },
3165
3193
  get children() {
@@ -3244,30 +3272,30 @@ const AddressBar = (props) => {
3244
3272
  return suggestions();
3245
3273
  },
3246
3274
  children: (item, i) => (() => {
3247
- var _el$49 = _tmpl$19$3(), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling;
3248
- _el$49.addEventListener("mouseenter", () => setSelectedIndex(i()));
3249
- _el$49.$$mousedown = (e) => {
3275
+ var _el$50 = _tmpl$19$3(), _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling, _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
3276
+ _el$50.addEventListener("mouseenter", () => setSelectedIndex(i()));
3277
+ _el$50.$$mousedown = (e) => {
3250
3278
  e.preventDefault();
3251
3279
  selectSuggestion(item.url);
3252
3280
  };
3253
- insert(_el$50, (() => {
3281
+ insert(_el$51, (() => {
3254
3282
  var _c$ = memo(() => item.source === "bookmark");
3255
3283
  return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
3256
3284
  })());
3257
- insert(_el$52, () => item.title || item.url);
3258
- insert(_el$53, () => item.subtitle || item.url);
3285
+ insert(_el$53, () => item.title || item.url);
3286
+ insert(_el$54, () => item.subtitle || item.url);
3259
3287
  createRenderEffect((_p$) => {
3260
3288
  var _v$12 = `address-autocomplete-${i()}`, _v$13 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$14 = selectedIndex() === i();
3261
- _v$12 !== _p$.e && setAttribute(_el$49, "id", _p$.e = _v$12);
3262
- _v$13 !== _p$.t && className(_el$49, _p$.t = _v$13);
3263
- _v$14 !== _p$.a && setAttribute(_el$49, "aria-selected", _p$.a = _v$14);
3289
+ _v$12 !== _p$.e && setAttribute(_el$50, "id", _p$.e = _v$12);
3290
+ _v$13 !== _p$.t && className(_el$50, _p$.t = _v$13);
3291
+ _v$14 !== _p$.a && setAttribute(_el$50, "aria-selected", _p$.a = _v$14);
3264
3292
  return _p$;
3265
3293
  }, {
3266
3294
  e: void 0,
3267
3295
  t: void 0,
3268
3296
  a: void 0
3269
3297
  });
3270
- return _el$49;
3298
+ return _el$50;
3271
3299
  })()
3272
3300
  }));
3273
3301
  return _el$14;
@@ -3305,43 +3333,66 @@ const AddressBar = (props) => {
3305
3333
  return memo(() => !!pageDiff())() && diffExpanded();
3306
3334
  },
3307
3335
  get children() {
3308
- var _el$19 = _tmpl$0$5(), _el$20 = _el$19.firstChild, _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild;
3309
- _el$22.firstChild;
3310
- var _el$29 = _el$21.nextSibling, _el$30 = _el$29.firstChild, _el$31 = _el$30.nextSibling;
3311
- insert(_el$22, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
3336
+ var _el$19 = _tmpl$0$5(), _el$20 = _el$19.firstChild, _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling;
3337
+ _el$23.firstChild;
3338
+ var _el$30 = _el$21.nextSibling, _el$31 = _el$30.firstChild, _el$32 = _el$31.nextSibling;
3339
+ insert(_el$23, () => formatRelativeTime2(pageDiff().oldSnapshot.capturedAt), null);
3312
3340
  insert(_el$21, createComponent(Show, {
3313
3341
  get when() {
3314
3342
  return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
3315
3343
  },
3316
3344
  get children() {
3317
- var _el$24 = _tmpl$8$8(), _el$25 = _el$24.firstChild, _el$28 = _el$25.nextSibling;
3318
- _el$28.nextSibling;
3319
- insert(_el$24, () => pageDiff().burstCount, _el$28);
3320
- insert(_el$24, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
3321
- return _el$24;
3345
+ var _el$25 = _tmpl$8$8(), _el$26 = _el$25.firstChild, _el$29 = _el$26.nextSibling;
3346
+ _el$29.nextSibling;
3347
+ insert(_el$25, () => pageDiff().burstCount, _el$29);
3348
+ insert(_el$25, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
3349
+ return _el$25;
3322
3350
  }
3323
3351
  }), null);
3324
- _el$30.$$click = () => void openDiffTimeline();
3325
- _el$31.$$click = () => setDiffExpanded(false);
3352
+ _el$31.$$click = () => void openDiffTimeline();
3353
+ _el$32.$$click = () => setDiffExpanded(false);
3326
3354
  insert(_el$19, createComponent(Show, {
3327
3355
  get when() {
3328
3356
  return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
3329
3357
  },
3330
3358
  get children() {
3331
- var _el$32 = _tmpl$9$5();
3332
- _el$32.firstChild;
3333
- insert(_el$32, createComponent(For, {
3359
+ var _el$33 = _tmpl$9$6();
3360
+ _el$33.firstChild;
3361
+ insert(_el$33, createComponent(For, {
3334
3362
  get each() {
3335
3363
  return pageDiff().recentBursts;
3336
3364
  },
3337
- children: (burst) => (() => {
3338
- var _el$54 = _tmpl$20$2(), _el$55 = _el$54.firstChild, _el$56 = _el$55.nextSibling;
3339
- insert(_el$55, () => formatRelativeTime(burst.detectedAt));
3340
- insert(_el$56, () => burst.summary);
3341
- return _el$54;
3365
+ children: (burst, i) => (() => {
3366
+ var _el$55 = _tmpl$20$2(), _el$56 = _el$55.firstChild, _el$57 = _el$56.nextSibling;
3367
+ insert(_el$56, (() => {
3368
+ var _c$2 = memo(() => i() === 0);
3369
+ return () => _c$2() ? "Latest" : formatRelativeTime2(burst.detectedAt);
3370
+ })());
3371
+ insert(_el$57, createComponent(For, {
3372
+ get each() {
3373
+ return parseDiffSummaryParts(burst.summary);
3374
+ },
3375
+ children: (part) => (() => {
3376
+ var _el$58 = _tmpl$22$2(), _el$60 = _el$58.firstChild;
3377
+ insert(_el$58, createComponent(Show, {
3378
+ get when() {
3379
+ return part.section;
3380
+ },
3381
+ get children() {
3382
+ var _el$59 = _tmpl$21$2();
3383
+ insert(_el$59, () => part.section);
3384
+ return _el$59;
3385
+ }
3386
+ }), _el$60);
3387
+ insert(_el$60, () => part.text);
3388
+ return _el$58;
3389
+ })()
3390
+ }));
3391
+ createRenderEffect(() => _el$55.classList.toggle("latest", !!(i() === 0)));
3392
+ return _el$55;
3342
3393
  })()
3343
3394
  }), null);
3344
- return _el$32;
3395
+ return _el$33;
3345
3396
  }
3346
3397
  }), null);
3347
3398
  insert(_el$19, createComponent(For, {
@@ -3349,89 +3400,90 @@ const AddressBar = (props) => {
3349
3400
  return pageDiff().changes;
3350
3401
  },
3351
3402
  children: (change) => (() => {
3352
- var _el$57 = _tmpl$26$2(), _el$58 = _el$57.firstChild, _el$59 = _el$58.firstChild, _el$60 = _el$59.nextSibling;
3353
- insert(_el$59, () => formatSectionLabel(change.section));
3354
- insert(_el$60, () => change.summary);
3355
- insert(_el$57, createComponent(Show, {
3403
+ var _el$61 = _tmpl$28$2(), _el$62 = _el$61.firstChild, _el$63 = _el$62.firstChild, _el$64 = _el$63.firstChild, _el$65 = _el$64.nextSibling, _el$66 = _el$63.nextSibling;
3404
+ insert(_el$64, () => getChangeKindLabel(change.kind));
3405
+ insert(_el$65, () => formatSectionLabel(change.section));
3406
+ insert(_el$66, () => change.summary);
3407
+ insert(_el$61, createComponent(Show, {
3356
3408
  get when() {
3357
3409
  return change.before || change.after;
3358
3410
  },
3359
3411
  get children() {
3360
- var _el$61 = _tmpl$23$2();
3361
- insert(_el$61, createComponent(Show, {
3412
+ var _el$67 = _tmpl$25$2();
3413
+ insert(_el$67, createComponent(Show, {
3362
3414
  get when() {
3363
3415
  return change.before;
3364
3416
  },
3365
3417
  get children() {
3366
- var _el$62 = _tmpl$21$2(), _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling;
3367
- insert(_el$64, () => change.before);
3368
- return _el$62;
3418
+ var _el$68 = _tmpl$23$2(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
3419
+ insert(_el$70, () => change.before);
3420
+ return _el$68;
3369
3421
  }
3370
3422
  }), null);
3371
- insert(_el$61, createComponent(Show, {
3423
+ insert(_el$67, createComponent(Show, {
3372
3424
  get when() {
3373
3425
  return change.after;
3374
3426
  },
3375
3427
  get children() {
3376
- var _el$65 = _tmpl$22$2(), _el$66 = _el$65.firstChild, _el$67 = _el$66.nextSibling;
3377
- insert(_el$67, () => change.after);
3378
- return _el$65;
3428
+ var _el$71 = _tmpl$24$2(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
3429
+ insert(_el$73, () => change.after);
3430
+ return _el$71;
3379
3431
  }
3380
3432
  }), null);
3381
- return _el$61;
3433
+ return _el$67;
3382
3434
  }
3383
3435
  }), null);
3384
- insert(_el$57, createComponent(Show, {
3436
+ insert(_el$61, createComponent(Show, {
3385
3437
  get when() {
3386
3438
  return change.addedItems?.length;
3387
3439
  },
3388
3440
  get children() {
3389
- var _el$68 = _tmpl$24$2(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
3390
- insert(_el$70, createComponent(For, {
3441
+ var _el$74 = _tmpl$26$2(), _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling;
3442
+ insert(_el$76, createComponent(For, {
3391
3443
  get each() {
3392
3444
  return change.addedItems;
3393
3445
  },
3394
3446
  children: (item) => (() => {
3395
- var _el$74 = _tmpl$27$2();
3396
- insert(_el$74, item);
3397
- return _el$74;
3447
+ var _el$80 = _tmpl$29$2();
3448
+ insert(_el$80, item);
3449
+ return _el$80;
3398
3450
  })()
3399
3451
  }));
3400
- return _el$68;
3452
+ return _el$74;
3401
3453
  }
3402
3454
  }), null);
3403
- insert(_el$57, createComponent(Show, {
3455
+ insert(_el$61, createComponent(Show, {
3404
3456
  get when() {
3405
3457
  return change.removedItems?.length;
3406
3458
  },
3407
3459
  get children() {
3408
- var _el$71 = _tmpl$25$2(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
3409
- insert(_el$73, createComponent(For, {
3460
+ var _el$77 = _tmpl$27$2(), _el$78 = _el$77.firstChild, _el$79 = _el$78.nextSibling;
3461
+ insert(_el$79, createComponent(For, {
3410
3462
  get each() {
3411
3463
  return change.removedItems;
3412
3464
  },
3413
3465
  children: (item) => (() => {
3414
- var _el$75 = _tmpl$27$2();
3415
- insert(_el$75, item);
3416
- return _el$75;
3466
+ var _el$81 = _tmpl$29$2();
3467
+ insert(_el$81, item);
3468
+ return _el$81;
3417
3469
  })()
3418
3470
  }));
3419
- return _el$71;
3471
+ return _el$77;
3420
3472
  }
3421
3473
  }), null);
3422
- createRenderEffect(() => className(_el$57, `page-diff-item page-diff-${change.kind}`));
3423
- return _el$57;
3474
+ createRenderEffect(() => className(_el$61, `page-diff-item page-diff-${change.kind}`));
3475
+ return _el$61;
3424
3476
  })()
3425
3477
  }), null);
3426
3478
  return _el$19;
3427
3479
  }
3428
- }), _el$34);
3429
- _el$35.$$click = async () => {
3480
+ }), _el$35);
3481
+ _el$36.$$click = async () => {
3430
3482
  const id = activeTabId2();
3431
3483
  if (!id) return;
3432
3484
  await toggleAdBlock(id);
3433
3485
  };
3434
- insert(_el$36, createComponent(Show, {
3486
+ insert(_el$37, createComponent(Show, {
3435
3487
  get when() {
3436
3488
  return activeTab()?.adBlockingEnabled;
3437
3489
  },
@@ -3439,7 +3491,7 @@ const AddressBar = (props) => {
3439
3491
  return _tmpl$1$5();
3440
3492
  }
3441
3493
  }), null);
3442
- insert(_el$36, createComponent(Show, {
3494
+ insert(_el$37, createComponent(Show, {
3443
3495
  get when() {
3444
3496
  return !activeTab()?.adBlockingEnabled;
3445
3497
  },
@@ -3447,67 +3499,67 @@ const AddressBar = (props) => {
3447
3499
  return [_tmpl$1$5(), _tmpl$10$5()];
3448
3500
  }
3449
3501
  }), null);
3450
- insert(_el$34, createComponent(Show, {
3502
+ insert(_el$35, createComponent(Show, {
3451
3503
  when: !isPrivateWindow,
3452
3504
  get children() {
3453
- var _el$40 = _tmpl$11$5();
3454
- _el$40.$$click = () => window.vessel.content.toggleReader();
3455
- createRenderEffect(() => _el$40.classList.toggle("active", !!activeTab()?.isReaderMode));
3456
- return _el$40;
3505
+ var _el$41 = _tmpl$11$5();
3506
+ _el$41.$$click = () => window.vessel.content.toggleReader();
3507
+ createRenderEffect(() => _el$41.classList.toggle("active", !!activeTab()?.isReaderMode));
3508
+ return _el$41;
3457
3509
  }
3458
3510
  }), null);
3459
- insert(_el$34, createComponent(Show, {
3511
+ insert(_el$35, createComponent(Show, {
3460
3512
  when: !isPrivateWindow,
3461
3513
  get children() {
3462
- var _el$41 = _tmpl$12$5();
3463
- addEventListener(_el$41, "click", toggleDevTools, true);
3464
- createRenderEffect(() => _el$41.classList.toggle("active", !!devtoolsPanelOpen2()));
3465
- return _el$41;
3514
+ var _el$42 = _tmpl$12$5();
3515
+ addEventListener(_el$42, "click", toggleDevTools, true);
3516
+ createRenderEffect(() => _el$42.classList.toggle("active", !!devtoolsPanelOpen2()));
3517
+ return _el$42;
3466
3518
  }
3467
3519
  }), null);
3468
- insert(_el$34, createComponent(Show, {
3520
+ insert(_el$35, createComponent(Show, {
3469
3521
  when: !isPrivateWindow,
3470
3522
  get children() {
3471
- var _el$42 = _tmpl$14$4();
3472
- _el$42.firstChild;
3473
- addEventListener(_el$42, "click", toggleSidebar, true);
3474
- insert(_el$42, createComponent(Show, {
3523
+ var _el$43 = _tmpl$14$4();
3524
+ _el$43.firstChild;
3525
+ addEventListener(_el$43, "click", toggleSidebar, true);
3526
+ insert(_el$43, createComponent(Show, {
3475
3527
  get when() {
3476
3528
  return pendingApprovalCount() > 0;
3477
3529
  },
3478
3530
  get children() {
3479
- var _el$44 = _tmpl$13$4();
3480
- insert(_el$44, pendingApprovalCount);
3481
- createRenderEffect(() => setAttribute(_el$44, "aria-label", `${pendingApprovalCount()} pending`));
3482
- return _el$44;
3531
+ var _el$45 = _tmpl$13$4();
3532
+ insert(_el$45, pendingApprovalCount);
3533
+ createRenderEffect(() => setAttribute(_el$45, "aria-label", `${pendingApprovalCount()} pending`));
3534
+ return _el$45;
3483
3535
  }
3484
3536
  }), null);
3485
3537
  createRenderEffect((_p$) => {
3486
3538
  var _v$5 = !!(pendingApprovalCount() > 0), _v$6 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
3487
- _v$5 !== _p$.e && _el$42.classList.toggle("has-approvals", _p$.e = _v$5);
3488
- _v$6 !== _p$.t && setAttribute(_el$42, "title", _p$.t = _v$6);
3539
+ _v$5 !== _p$.e && _el$43.classList.toggle("has-approvals", _p$.e = _v$5);
3540
+ _v$6 !== _p$.t && setAttribute(_el$43, "title", _p$.t = _v$6);
3489
3541
  return _p$;
3490
3542
  }, {
3491
3543
  e: void 0,
3492
3544
  t: void 0
3493
3545
  });
3494
- return _el$42;
3546
+ return _el$43;
3495
3547
  }
3496
3548
  }), null);
3497
- insert(_el$34, createComponent(Show, {
3549
+ insert(_el$35, createComponent(Show, {
3498
3550
  when: !isPrivateWindow,
3499
3551
  get children() {
3500
3552
  return [(() => {
3501
- var _el$45 = _tmpl$15$4();
3502
- addEventListener(_el$45, "click", props.onClearData, true);
3503
- insert(_el$45, createComponent(trash_2_default, {
3553
+ var _el$46 = _tmpl$15$4();
3554
+ addEventListener(_el$46, "click", props.onClearData, true);
3555
+ insert(_el$46, createComponent(trash_2_default, {
3504
3556
  size: 14
3505
3557
  }));
3506
- return _el$45;
3507
- })(), (() => {
3508
- var _el$46 = _tmpl$16$3();
3509
- addEventListener(_el$46, "click", openSettings, true);
3510
3558
  return _el$46;
3559
+ })(), (() => {
3560
+ var _el$47 = _tmpl$16$3();
3561
+ addEventListener(_el$47, "click", openSettings, true);
3562
+ return _el$47;
3511
3563
  })()];
3512
3564
  }
3513
3565
  }), null);
@@ -3517,9 +3569,9 @@ const AddressBar = (props) => {
3517
3569
  _v$8 !== _p$.t && (_el$4.disabled = _p$.t = _v$8);
3518
3570
  _v$9 !== _p$.a && setAttribute(_el$13, "aria-expanded", _p$.a = _v$9);
3519
3571
  _v$0 !== _p$.o && setAttribute(_el$13, "aria-activedescendant", _p$.o = _v$0);
3520
- _v$1 !== _p$.i && _el$35.classList.toggle("active", _p$.i = _v$1);
3521
- _v$10 !== _p$.n && _el$35.classList.toggle("nav-btn-muted", _p$.n = _v$10);
3522
- _v$11 !== _p$.s && setAttribute(_el$35, "title", _p$.s = _v$11);
3572
+ _v$1 !== _p$.i && _el$36.classList.toggle("active", _p$.i = _v$1);
3573
+ _v$10 !== _p$.n && _el$36.classList.toggle("nav-btn-muted", _p$.n = _v$10);
3574
+ _v$11 !== _p$.s && setAttribute(_el$36, "title", _p$.s = _v$11);
3523
3575
  return _p$;
3524
3576
  }, {
3525
3577
  e: void 0,
@@ -6421,7 +6473,7 @@ function renderKitPrompt(kit, values) {
6421
6473
  (_, key) => values[key] ?? ""
6422
6474
  );
6423
6475
  }
6424
- var _tmpl$$c = /* @__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$c = /* @__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$b = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$b = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$7 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$4 = /* @__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$4 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$4 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$4 = /* @__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$3 = /* @__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$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$3 = /* @__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$1 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$1 = /* @__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$1 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$1 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$1 = /* @__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$1 = /* @__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$1 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$1 = /* @__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$1 = /* @__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$1 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$1 = /* @__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$1 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$1 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$1 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$1 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$1 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$1 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$1 = /* @__PURE__ */ template(`<option>`), _tmpl$42$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
6476
+ var _tmpl$$c = /* @__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$c = /* @__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$b = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$b = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$7 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$5 = /* @__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$4 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$4 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$4 = /* @__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$3 = /* @__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$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$3 = /* @__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$1 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$1 = /* @__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$1 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$1 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$1 = /* @__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$1 = /* @__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$1 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$1 = /* @__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$1 = /* @__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$1 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$1 = /* @__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$1 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$1 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$1 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$1 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$1 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$1 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$1 = /* @__PURE__ */ template(`<option>`), _tmpl$42$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
6425
6477
  const ICON_MAP = {
6426
6478
  BookOpen: book_open_default,
6427
6479
  Tag: tag_default,
@@ -6984,7 +7036,7 @@ const AutomationTab = (props) => {
6984
7036
  },
6985
7037
  get children() {
6986
7038
  return [(() => {
6987
- var _el$23 = _tmpl$9$4(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
7039
+ var _el$23 = _tmpl$9$5(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
6988
7040
  _el$24.$$click = () => {
6989
7041
  setSelectedKit(null);
6990
7042
  setEditingTaskJobId(null);
@@ -7260,7 +7312,24 @@ const AutomationTab = (props) => {
7260
7312
  })();
7261
7313
  };
7262
7314
  delegateEvents(["click", "input", "keydown", "contextmenu"]);
7263
- var _tmpl$$b = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$b = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$a = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=agent-section-title>Recent page changes`), _tmpl$5$7 = /* @__PURE__ */ template(`<div class=page-diff-list>`), _tmpl$6$7 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$7 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$8$6 = /* @__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>`);
7315
+ var _tmpl$$b = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$b = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$a = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=page-diff-timeline-header><div class=agent-section-title>Change history for this page</div><div class=agent-muted>Newest detections are first. Each entry is a saved change burst.`), _tmpl$5$7 = /* @__PURE__ */ template(`<div class=page-diff-history-list>`), _tmpl$6$7 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=page-diff-history-item><div class=page-diff-history-time><span class=page-diff-history-label></span><span></span></div><div class=page-diff-history-card><div class=page-diff-history-summary-list></div><div class=page-diff-history-position>Entry <!> of `), _tmpl$8$6 = /* @__PURE__ */ template(`<span class=page-diff-history-summary-section>`), _tmpl$9$4 = /* @__PURE__ */ template(`<div class=page-diff-history-summary-row><span class=page-diff-history-summary>`);
7316
+ const formatChangeTime = (isoDate) => new Date(isoDate).toLocaleString([], {
7317
+ month: "short",
7318
+ day: "numeric",
7319
+ hour: "numeric",
7320
+ minute: "2-digit"
7321
+ });
7322
+ const formatRelativeTime = (isoDate) => {
7323
+ const diff = Date.now() - new Date(isoDate).getTime();
7324
+ const mins = Math.floor(diff / 6e4);
7325
+ if (mins < 1) return "just now";
7326
+ if (mins < 60) return `${mins}m ago`;
7327
+ const hours = Math.floor(mins / 60);
7328
+ if (hours < 24) return `${hours}h ago`;
7329
+ const days = Math.floor(hours / 24);
7330
+ if (days < 7) return `${days}d ago`;
7331
+ return new Date(isoDate).toLocaleDateString();
7332
+ };
7264
7333
  const PageDiffTimeline = () => {
7265
7334
  const {
7266
7335
  activeTab
@@ -7351,18 +7420,35 @@ const PageDiffTimeline = () => {
7351
7420
  return bursts();
7352
7421
  },
7353
7422
  children: (burst, i) => (() => {
7354
- var _el$7 = _tmpl$8$6(), _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;
7355
- insert(_el$8, createComponent(Show, {
7356
- get when() {
7357
- return i() < bursts().length - 1;
7423
+ var _el$7 = _tmpl$7$7(), _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$0 = _el$9.nextSibling, _el$1 = _el$8.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.firstChild, _el$14 = _el$12.nextSibling;
7424
+ _el$14.nextSibling;
7425
+ insert(_el$9, (() => {
7426
+ var _c$ = memo(() => i() === 0);
7427
+ return () => _c$() ? "Latest change" : formatRelativeTime(burst.detectedAt);
7428
+ })());
7429
+ insert(_el$0, () => formatChangeTime(burst.detectedAt));
7430
+ insert(_el$10, createComponent(For, {
7431
+ get each() {
7432
+ return parseDiffSummaryParts(burst.summary);
7358
7433
  },
7359
- get children() {
7360
- return _tmpl$7$7();
7361
- }
7362
- }), null);
7363
- insert(_el$10, () => new Date(burst.detectedAt).toLocaleString());
7364
- insert(_el$11, () => burst.summary);
7365
- createRenderEffect(() => _el$9.classList.toggle("latest", !!(i() === 0)));
7434
+ children: (part) => (() => {
7435
+ var _el$15 = _tmpl$9$4(), _el$17 = _el$15.firstChild;
7436
+ insert(_el$15, createComponent(Show, {
7437
+ get when() {
7438
+ return part.section;
7439
+ },
7440
+ get children() {
7441
+ var _el$16 = _tmpl$8$6();
7442
+ insert(_el$16, () => part.section);
7443
+ return _el$16;
7444
+ }
7445
+ }), _el$17);
7446
+ insert(_el$17, () => part.text);
7447
+ return _el$15;
7448
+ })()
7449
+ }));
7450
+ insert(_el$11, () => i() + 1, _el$14);
7451
+ insert(_el$11, () => bursts().length, null);
7366
7452
  return _el$7;
7367
7453
  })()
7368
7454
  }));