@quanta-intellect/vessel-browser 0.1.45 → 0.1.48

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.
@@ -4650,7 +4650,7 @@ function renderKitPrompt(kit, values) {
4650
4650
  (_, key) => values[key] ?? ""
4651
4651
  );
4652
4652
  }
4653
- var _tmpl$$5 = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$5 = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$4 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$3 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$3 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$3 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$3 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$3 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$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>`);
4653
+ var _tmpl$$5 = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$5 = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$4 = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$4 = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$4 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$3 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$3 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$3 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$3 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$3 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date &amp; time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$2 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$2 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$2 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$2 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$2 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$2 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$2 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$2 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$1 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$1 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$1 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$1 = /* @__PURE__ */ template(`<option>`), _tmpl$42$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
4654
4654
  const ICON_MAP = {
4655
4655
  BookOpen: book_open_default,
4656
4656
  Tag: tag_default,
@@ -5244,7 +5244,7 @@ const AutomationTab = (props) => {
5244
5244
  return input.required;
5245
5245
  },
5246
5246
  get children() {
5247
- return _tmpl$34$1();
5247
+ return _tmpl$34$2();
5248
5248
  }
5249
5249
  }), null);
5250
5250
  insert(_el$110, createComponent(Show, {
@@ -5269,7 +5269,7 @@ const AutomationTab = (props) => {
5269
5269
  })();
5270
5270
  },
5271
5271
  get children() {
5272
- var _el$113 = _tmpl$35$1();
5272
+ var _el$113 = _tmpl$35$2();
5273
5273
  _el$113.$$input = (e) => setField(input.key, e.currentTarget.value);
5274
5274
  createRenderEffect(() => setAttribute(_el$113, "placeholder", input.placeholder ?? ""));
5275
5275
  createRenderEffect(() => _el$113.value = fieldValues()[input.key] ?? "");
@@ -5490,7 +5490,7 @@ const AutomationTab = (props) => {
5490
5490
  };
5491
5491
  delegateEvents(["click", "input", "keydown", "contextmenu"]);
5492
5492
  const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
5493
- var _tmpl$$4 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$3 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$3 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$5$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$6$3 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$7$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$8$2 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2>`), _tmpl$9$2 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$0$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$1$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$10$2 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$11$2 = /* @__PURE__ */ template(`<span>`), _tmpl$12$2 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$13$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$15$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$16$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$17$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$19$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$23$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button></div><div class=sidebar-messages><div>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$34 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$35 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$36 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$37 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$38 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$40 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$41 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$42 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$43 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$44 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$45 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><button class=agent-control-button type=button>Restore`), _tmpl$46 = /* @__PURE__ */ template(`<div>`), _tmpl$47 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$48 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$49 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$50 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
5493
+ var _tmpl$$4 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$3 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$3 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$5$3 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$6$3 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$7$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$8$2 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2>`), _tmpl$9$2 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$0$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$1$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$10$2 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$11$2 = /* @__PURE__ */ template(`<span>`), _tmpl$12$2 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$13$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$15$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$16$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$17$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$19$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$22$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$23$1 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button></div><div class=sidebar-messages><div>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$34$1 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$35$1 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$36 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$37 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$38 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$40 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$41 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$42 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$43 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$44 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$45 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><button class=agent-control-button type=button>Restore`), _tmpl$46 = /* @__PURE__ */ template(`<div>`), _tmpl$47 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$48 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$49 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$50 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
5494
5494
  const UNSORTED_FOLDER = {
5495
5495
  id: "unsorted",
5496
5496
  name: "Unsorted",
@@ -5580,6 +5580,7 @@ const Sidebar = (props) => {
5580
5580
  const [premiumState, setPremiumState] = createSignal({
5581
5581
  status: "free",
5582
5582
  customerId: "",
5583
+ verificationToken: "",
5583
5584
  email: "",
5584
5585
  validatedAt: "",
5585
5586
  expiresAt: ""
@@ -6205,7 +6206,7 @@ ${contextBlock}` : contextBlock);
6205
6206
  return deletingFolderId() === folder.id;
6206
6207
  },
6207
6208
  get children() {
6208
- var _el$134 = _tmpl$35(), _el$135 = _el$134.firstChild, _el$136 = _el$135.firstChild, _el$138 = _el$136.nextSibling;
6209
+ var _el$134 = _tmpl$35$1(), _el$135 = _el$134.firstChild, _el$136 = _el$135.firstChild, _el$138 = _el$136.nextSibling;
6209
6210
  _el$138.nextSibling;
6210
6211
  var _el$139 = _el$135.nextSibling, _el$141 = _el$139.firstChild, _el$142 = _el$141.nextSibling;
6211
6212
  insert(_el$135, () => folder.name, _el$138);
@@ -6218,7 +6219,7 @@ ${contextBlock}` : contextBlock);
6218
6219
  return folder.items.length > 0;
6219
6220
  },
6220
6221
  get children() {
6221
- var _el$140 = _tmpl$34();
6222
+ var _el$140 = _tmpl$34$1();
6222
6223
  _el$140.$$click = () => void handleRemoveFolder(folder.id, false);
6223
6224
  return _el$140;
6224
6225
  }
@@ -7095,7 +7096,107 @@ const DevToolsPanel = () => {
7095
7096
  })();
7096
7097
  };
7097
7098
  delegateEvents(["click", "input"]);
7098
- var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$6$1 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$7 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$8 = /* @__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$9 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$0 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$1 = /* @__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$10 = /* @__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$11 = /* @__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$12 = /* @__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$13 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$14 = /* @__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$15 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$16 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$17 = /* @__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$18 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$19 = /* @__PURE__ */ template(`<style>
7099
+ const PROVIDERS = {
7100
+ anthropic: {
7101
+ id: "anthropic",
7102
+ name: "Anthropic",
7103
+ defaultModel: "claude-sonnet-4-20250514",
7104
+ models: [
7105
+ "claude-sonnet-4-20250514",
7106
+ "claude-opus-4-20250514",
7107
+ "claude-haiku-4-20250506"
7108
+ ],
7109
+ requiresApiKey: true,
7110
+ apiKeyPlaceholder: "sk-ant-...",
7111
+ apiKeyHint: "Get your key from console.anthropic.com"
7112
+ },
7113
+ openai: {
7114
+ id: "openai",
7115
+ name: "OpenAI",
7116
+ defaultModel: "gpt-4o",
7117
+ models: ["gpt-4o", "gpt-4o-mini", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "o3-mini"],
7118
+ requiresApiKey: true,
7119
+ apiKeyPlaceholder: "sk-...",
7120
+ apiKeyHint: "Get your key from platform.openai.com"
7121
+ },
7122
+ openrouter: {
7123
+ id: "openrouter",
7124
+ name: "OpenRouter",
7125
+ defaultModel: "anthropic/claude-sonnet-4",
7126
+ models: [
7127
+ "anthropic/claude-sonnet-4",
7128
+ "anthropic/claude-haiku-4",
7129
+ "openai/gpt-4o",
7130
+ "google/gemini-2.5-pro",
7131
+ "mistralai/mistral-large-latest"
7132
+ ],
7133
+ requiresApiKey: true,
7134
+ defaultBaseUrl: "https://openrouter.ai/api/v1",
7135
+ apiKeyPlaceholder: "sk-or-...",
7136
+ apiKeyHint: "Get your key from openrouter.ai/keys"
7137
+ },
7138
+ ollama: {
7139
+ id: "ollama",
7140
+ name: "Ollama (Local)",
7141
+ defaultModel: "llama3.1",
7142
+ models: ["llama3.1", "llama3.2", "mistral", "gemma2", "qwen2.5", "phi3"],
7143
+ requiresApiKey: false,
7144
+ defaultBaseUrl: "http://localhost:11434/v1",
7145
+ apiKeyPlaceholder: "",
7146
+ apiKeyHint: "No API key needed — runs locally via Ollama"
7147
+ },
7148
+ llama_cpp: {
7149
+ id: "llama_cpp",
7150
+ name: "llama.cpp (Local)",
7151
+ defaultModel: "",
7152
+ models: [],
7153
+ requiresApiKey: false,
7154
+ defaultBaseUrl: "http://localhost:8080/v1",
7155
+ apiKeyPlaceholder: "",
7156
+ apiKeyHint: "No API key needed — scans the active llama-server model on localhost:8080"
7157
+ },
7158
+ mistral: {
7159
+ id: "mistral",
7160
+ name: "Mistral AI",
7161
+ defaultModel: "mistral-large-latest",
7162
+ models: ["mistral-large-latest", "mistral-medium-latest", "mistral-small-latest", "codestral-latest"],
7163
+ requiresApiKey: true,
7164
+ defaultBaseUrl: "https://api.mistral.ai/v1",
7165
+ apiKeyPlaceholder: "sk-...",
7166
+ apiKeyHint: "Get your key from console.mistral.ai"
7167
+ },
7168
+ xai: {
7169
+ id: "xai",
7170
+ name: "xAI (Grok)",
7171
+ defaultModel: "grok-3",
7172
+ models: ["grok-3", "grok-3-mini", "grok-2"],
7173
+ requiresApiKey: true,
7174
+ defaultBaseUrl: "https://api.x.ai/v1",
7175
+ apiKeyPlaceholder: "xai-...",
7176
+ apiKeyHint: "Get your key from console.x.ai"
7177
+ },
7178
+ google: {
7179
+ id: "google",
7180
+ name: "Google Gemini",
7181
+ defaultModel: "gemini-2.5-pro",
7182
+ models: ["gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.0-flash"],
7183
+ requiresApiKey: true,
7184
+ defaultBaseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
7185
+ apiKeyPlaceholder: "AI...",
7186
+ apiKeyHint: "Get your key from aistudio.google.com"
7187
+ },
7188
+ custom: {
7189
+ id: "custom",
7190
+ name: "Custom (OpenAI-Compatible)",
7191
+ defaultModel: "",
7192
+ models: [],
7193
+ requiresApiKey: false,
7194
+ defaultBaseUrl: "http://localhost:8080/v1",
7195
+ apiKeyPlaceholder: "Bearer token or API key",
7196
+ apiKeyHint: "Optional — only if your endpoint requires authentication"
7197
+ }
7198
+ };
7199
+ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$2 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>&times;</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — scroll to Chat Assistant below and add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown below</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class="settings-callout settings-premium-callout"><div class=settings-callout-title>Start Vessel Premium with a 7-day free trial</div><p class=settings-callout-copy>Unlock screenshots, saved sessions, workflow tracking, table extraction, the credential vault, and longer autonomous runs without leaving the app.</p><div class=settings-premium-callout-actions><button class="premium-btn premium-btn-upgrade">Start 7-day free trial — $5.99/mo after</button><button class="premium-btn premium-btn-activate">See activation steps`), _tmpl$4$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$6$1 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$7 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$8 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$9 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$0 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$10 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$11 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$12 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured \`llama-server\` base URL. For agent loops, run \`llama-server\` with \`--ctx-size 16384\` minimum and \`32768\` recommended.`), _tmpl$13 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$14 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$15 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$16 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$17 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$18 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.</p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the<code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-section-divider></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.</p></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$20 = /* @__PURE__ */ template(`<style>
7099
7200
  .settings-panel {
7100
7201
  width: min(440px, calc(100vw - 32px));
7101
7202
  max-height: calc(100vh - 48px);
@@ -7629,82 +7730,17 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
7629
7730
  justify-content: flex-end;
7630
7731
  margin-top: 4px;
7631
7732
  }
7632
- `), _tmpl$20 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$21 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$22 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$24 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$25 = /* @__PURE__ */ template(`<div>`), _tmpl$26 = /* @__PURE__ */ template(`<option>`), _tmpl$27 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$28 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$29 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$30 = /* @__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$31 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$32 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _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; </span></div><button class=vault-entry-remove title="Remove credential">&times;`);
7633
- const CHAT_PROVIDERS = [{
7634
- id: "anthropic",
7635
- name: "Anthropic",
7636
- requiresKey: true,
7637
- needsBaseUrl: false,
7638
- keyPlaceholder: "sk-ant-...",
7639
- defaultModel: "claude-sonnet-4-20250514",
7640
- models: ["claude-sonnet-4-20250514", "claude-opus-4-20250514", "claude-haiku-4-20250506"]
7641
- }, {
7642
- id: "openai",
7643
- name: "OpenAI",
7644
- requiresKey: true,
7645
- needsBaseUrl: false,
7646
- keyPlaceholder: "sk-...",
7647
- defaultModel: "gpt-4o",
7648
- models: ["gpt-4o", "gpt-4o-mini", "gpt-4.1", "gpt-4.1-mini", "o3-mini"]
7649
- }, {
7650
- id: "openrouter",
7651
- name: "OpenRouter",
7652
- requiresKey: true,
7653
- needsBaseUrl: false,
7654
- keyPlaceholder: "sk-or-...",
7655
- defaultModel: "anthropic/claude-sonnet-4",
7656
- models: ["anthropic/claude-sonnet-4", "openai/gpt-4o", "google/gemini-2.5-pro"]
7657
- }, {
7658
- id: "ollama",
7659
- name: "Ollama (Local)",
7660
- requiresKey: false,
7661
- needsBaseUrl: false,
7662
- keyPlaceholder: "",
7663
- defaultModel: "",
7664
- models: []
7665
- }, {
7666
- id: "llama_cpp",
7667
- name: "llama.cpp (Local)",
7668
- requiresKey: false,
7669
- needsBaseUrl: true,
7670
- defaultBaseUrl: "http://localhost:8080/v1",
7671
- keyPlaceholder: "",
7672
- defaultModel: "",
7673
- models: []
7674
- }, {
7675
- id: "mistral",
7676
- name: "Mistral AI",
7677
- requiresKey: true,
7678
- needsBaseUrl: false,
7679
- keyPlaceholder: "sk-...",
7680
- defaultModel: "mistral-large-latest",
7681
- models: ["mistral-large-latest", "mistral-small-latest", "codestral-latest"]
7682
- }, {
7683
- id: "xai",
7684
- name: "xAI (Grok)",
7685
- requiresKey: true,
7686
- needsBaseUrl: false,
7687
- keyPlaceholder: "xai-...",
7688
- defaultModel: "grok-3",
7689
- models: ["grok-3", "grok-3-mini"]
7690
- }, {
7691
- id: "google",
7692
- name: "Google Gemini",
7693
- requiresKey: true,
7694
- needsBaseUrl: false,
7695
- keyPlaceholder: "AI...",
7696
- defaultModel: "gemini-2.5-pro",
7697
- models: ["gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.0-flash"]
7698
- }, {
7699
- id: "custom",
7700
- name: "Custom (OAI-Compatible)",
7701
- requiresKey: false,
7702
- needsBaseUrl: true,
7703
- defaultBaseUrl: "http://localhost:8080/v1",
7704
- keyPlaceholder: "Bearer token or API key",
7705
- defaultModel: "",
7706
- models: []
7707
- }];
7733
+ `), _tmpl$21 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$22 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$23 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$24 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$25 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`), _tmpl$26 = /* @__PURE__ */ template(`<div>`), _tmpl$27 = /* @__PURE__ */ template(`<option>`), _tmpl$28 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$29 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$31 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$32 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade">Subscribe to Premium — $5.99/mo after 7-day free trial`), _tmpl$33 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$34 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$35 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> &middot; </span></div><button class=vault-entry-remove title="Remove credential">&times;`);
7734
+ const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
7735
+ id: p.id,
7736
+ name: p.name,
7737
+ requiresKey: p.requiresApiKey,
7738
+ needsBaseUrl: p.id === "llama_cpp" || p.id === "custom",
7739
+ defaultBaseUrl: p.defaultBaseUrl,
7740
+ keyPlaceholder: p.apiKeyPlaceholder,
7741
+ defaultModel: p.defaultModel,
7742
+ models: p.models
7743
+ }));
7708
7744
  const Settings = () => {
7709
7745
  const {
7710
7746
  settingsOpen: settingsOpen2,
@@ -7801,11 +7837,15 @@ const Settings = () => {
7801
7837
  const [premiumState, setPremiumState] = createSignal({
7802
7838
  status: "free",
7803
7839
  customerId: "",
7840
+ verificationToken: "",
7804
7841
  email: "",
7805
7842
  validatedAt: "",
7806
7843
  expiresAt: ""
7807
7844
  });
7808
7845
  const [premiumEmail, setPremiumEmail] = createSignal("");
7846
+ const [premiumCode, setPremiumCode] = createSignal("");
7847
+ const [premiumChallengeToken, setPremiumChallengeToken] = createSignal("");
7848
+ const [premiumCodeSent, setPremiumCodeSent] = createSignal(false);
7809
7849
  const [premiumLoading, setPremiumLoading] = createSignal(false);
7810
7850
  const [premiumMessage, setPremiumMessage] = createSignal(null);
7811
7851
  let trackedSettingsPremiumBanner = false;
@@ -7818,9 +7858,15 @@ const Settings = () => {
7818
7858
  const startPremiumCheckout = () => {
7819
7859
  void window.vessel.premium.checkout(premiumEmail().trim() || void 0);
7820
7860
  };
7861
+ const resetPremiumActivationFlow = () => {
7862
+ setPremiumCode("");
7863
+ setPremiumChallengeToken("");
7864
+ setPremiumCodeSent(false);
7865
+ };
7821
7866
  const [chatEnabled, setChatEnabled] = createSignal(false);
7822
7867
  const [chatProviderId, setChatProviderId] = createSignal("anthropic");
7823
7868
  const [chatApiKey, setChatApiKey] = createSignal("");
7869
+ const [chatHasStoredApiKey, setChatHasStoredApiKey] = createSignal(false);
7824
7870
  const [chatModel, setChatModel] = createSignal("");
7825
7871
  const [chatBaseUrl, setChatBaseUrl] = createSignal("");
7826
7872
  const chatProviderMeta = () => CHAT_PROVIDERS.find((p) => p.id === chatProviderId()) ?? CHAT_PROVIDERS[0];
@@ -7895,9 +7941,13 @@ const Settings = () => {
7895
7941
  setChatEnabled(cp !== null);
7896
7942
  if (cp) {
7897
7943
  setChatProviderId(cp.id);
7898
- setChatApiKey(cp.apiKey);
7944
+ setChatApiKey("");
7945
+ setChatHasStoredApiKey(cp.hasApiKey === true);
7899
7946
  setChatModel(cp.model);
7900
7947
  setChatBaseUrl(cp.baseUrl ?? "");
7948
+ } else {
7949
+ setChatApiKey("");
7950
+ setChatHasStoredApiKey(false);
7901
7951
  }
7902
7952
  setTelemetryEnabled(settings.telemetryEnabled !== false);
7903
7953
  try {
@@ -7919,6 +7969,7 @@ const Settings = () => {
7919
7969
  setPremiumEmail(nextState.email);
7920
7970
  }
7921
7971
  if (nextState.status === "active" || nextState.status === "trialing") {
7972
+ resetPremiumActivationFlow();
7922
7973
  setPremiumMessage({
7923
7974
  kind: "success",
7924
7975
  text: nextState.status === "trialing" ? "Premium trial active. Enjoy the unlocked toolkit." : "Premium activated. Your premium tools are ready."
@@ -7963,6 +8014,7 @@ const Settings = () => {
7963
8014
  const chatConfig = chatEnabled() ? {
7964
8015
  id: chatProviderId(),
7965
8016
  apiKey: chatApiKey().trim(),
8017
+ hasApiKey: chatHasStoredApiKey() && !chatApiKey().trim(),
7966
8018
  model: chatModel().trim() || chatProviderMeta().defaultModel,
7967
8019
  baseUrl: chatBaseUrl().trim() || void 0
7968
8020
  } : null;
@@ -7988,11 +8040,11 @@ const Settings = () => {
7988
8040
  },
7989
8041
  get children() {
7990
8042
  return [(() => {
7991
- var _el$ = _tmpl$18(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$11 = _el$3.nextSibling, _el$18 = _el$11.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling, _el$24 = _el$21.nextSibling, _el$25 = _el$24.firstChild, _el$27 = _el$25.nextSibling, _el$28 = _el$24.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$31.nextSibling, _el$35 = _el$34.firstChild, _el$36 = _el$35.firstChild, _el$37 = _el$34.nextSibling, _el$38 = _el$37.firstChild, _el$39 = _el$38.firstChild, _el$40 = _el$37.nextSibling, _el$41 = _el$40.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$63 = _el$41.nextSibling, _el$64 = _el$63.nextSibling;
7992
- _el$64.firstChild;
7993
- var _el$73 = _el$64.nextSibling, _el$74 = _el$73.nextSibling, _el$75 = _el$74.firstChild;
7994
- _el$75.firstChild;
7995
- var _el$91 = _el$74.nextSibling, _el$92 = _el$91.nextSibling, _el$93 = _el$92.firstChild, _el$94 = _el$93.firstChild, _el$95 = _el$92.nextSibling, _el$96 = _el$95.firstChild, _el$97 = _el$96.nextSibling;
8043
+ var _el$ = _tmpl$19(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$11 = _el$3.nextSibling, _el$18 = _el$11.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling, _el$24 = _el$21.nextSibling, _el$25 = _el$24.firstChild, _el$27 = _el$25.nextSibling, _el$28 = _el$24.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$28.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$31.nextSibling, _el$35 = _el$34.firstChild, _el$36 = _el$35.firstChild, _el$37 = _el$34.nextSibling, _el$38 = _el$37.firstChild, _el$39 = _el$38.firstChild, _el$40 = _el$37.nextSibling, _el$41 = _el$40.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.firstChild, _el$64 = _el$41.nextSibling, _el$65 = _el$64.nextSibling;
8044
+ _el$65.firstChild;
8045
+ var _el$74 = _el$65.nextSibling, _el$75 = _el$74.nextSibling, _el$76 = _el$75.firstChild;
8046
+ _el$76.firstChild;
8047
+ var _el$92 = _el$75.nextSibling, _el$93 = _el$92.nextSibling, _el$94 = _el$93.firstChild, _el$95 = _el$94.firstChild, _el$96 = _el$93.nextSibling, _el$97 = _el$96.firstChild, _el$98 = _el$97.nextSibling;
7996
8048
  addEventListener(_el$, "click", closeSettings, true);
7997
8049
  _el$2.$$keydown = handleKeyDown;
7998
8050
  _el$2.$$click = (e) => e.stopPropagation();
@@ -8049,7 +8101,7 @@ const Settings = () => {
8049
8101
  return premiumActive();
8050
8102
  },
8051
8103
  get fallback() {
8052
- return _tmpl$20();
8104
+ return _tmpl$21();
8053
8105
  },
8054
8106
  get children() {
8055
8107
  var _el$26 = _tmpl$4$1();
@@ -8070,55 +8122,55 @@ const Settings = () => {
8070
8122
  return health();
8071
8123
  },
8072
8124
  children: (currentHealth) => (() => {
8073
- var _el$100 = _tmpl$22(), _el$101 = _el$100.firstChild, _el$102 = _el$101.nextSibling, _el$103 = _el$102.firstChild, _el$105 = _el$103.nextSibling;
8074
- _el$105.nextSibling;
8075
- insert(_el$105, () => currentHealth().mcp.status);
8076
- insert(_el$102, () => currentHealth().mcp.message, null);
8077
- insert(_el$100, createComponent(Show, {
8125
+ var _el$101 = _tmpl$23(), _el$102 = _el$101.firstChild, _el$103 = _el$102.nextSibling, _el$104 = _el$103.firstChild, _el$106 = _el$104.nextSibling;
8126
+ _el$106.nextSibling;
8127
+ insert(_el$106, () => currentHealth().mcp.status);
8128
+ insert(_el$103, () => currentHealth().mcp.message, null);
8129
+ insert(_el$101, createComponent(Show, {
8078
8130
  get when() {
8079
8131
  return currentHealth().mcp.endpoint;
8080
8132
  },
8081
8133
  children: (endpoint) => (() => {
8082
- var _el$108 = _tmpl$23(), _el$109 = _el$108.firstChild, _el$110 = _el$109.nextSibling;
8083
- insert(_el$110, endpoint);
8084
- return _el$108;
8134
+ var _el$109 = _tmpl$24(), _el$110 = _el$109.firstChild, _el$111 = _el$110.nextSibling;
8135
+ insert(_el$111, endpoint);
8136
+ return _el$109;
8085
8137
  })()
8086
8138
  }), null);
8087
- insert(_el$100, createComponent(Show, {
8139
+ insert(_el$101, createComponent(Show, {
8088
8140
  get when() {
8089
8141
  return currentHealth().startupIssues.length > 0;
8090
8142
  },
8091
8143
  get children() {
8092
- var _el$107 = _tmpl$21();
8093
- insert(_el$107, () => currentHealth().startupIssues.map((issue) => (() => {
8094
- var _el$111 = _tmpl$24(), _el$112 = _el$111.firstChild, _el$113 = _el$112.nextSibling;
8095
- insert(_el$112, () => issue.title);
8096
- insert(_el$113, () => issue.detail);
8097
- insert(_el$111, createComponent(Show, {
8144
+ var _el$108 = _tmpl$22();
8145
+ insert(_el$108, () => currentHealth().startupIssues.map((issue) => (() => {
8146
+ var _el$112 = _tmpl$25(), _el$113 = _el$112.firstChild, _el$114 = _el$113.nextSibling;
8147
+ insert(_el$113, () => issue.title);
8148
+ insert(_el$114, () => issue.detail);
8149
+ insert(_el$112, createComponent(Show, {
8098
8150
  get when() {
8099
8151
  return issue.action;
8100
8152
  },
8101
8153
  children: (action) => (() => {
8102
- var _el$114 = _tmpl$25();
8103
- insert(_el$114, action);
8104
- return _el$114;
8154
+ var _el$115 = _tmpl$26();
8155
+ insert(_el$115, action);
8156
+ return _el$115;
8105
8157
  })()
8106
8158
  }), null);
8107
8159
  createRenderEffect((_p$) => {
8108
8160
  var _v$0 = !!(issue.severity === "warning"), _v$1 = !!(issue.severity === "error");
8109
- _v$0 !== _p$.e && _el$111.classList.toggle("warning", _p$.e = _v$0);
8110
- _v$1 !== _p$.t && _el$111.classList.toggle("error", _p$.t = _v$1);
8161
+ _v$0 !== _p$.e && _el$112.classList.toggle("warning", _p$.e = _v$0);
8162
+ _v$1 !== _p$.t && _el$112.classList.toggle("error", _p$.t = _v$1);
8111
8163
  return _p$;
8112
8164
  }, {
8113
8165
  e: void 0,
8114
8166
  t: void 0
8115
8167
  });
8116
- return _el$111;
8168
+ return _el$112;
8117
8169
  })()));
8118
- return _el$107;
8170
+ return _el$108;
8119
8171
  }
8120
8172
  }), null);
8121
- return _el$100;
8173
+ return _el$101;
8122
8174
  })()
8123
8175
  }), _el$28);
8124
8176
  _el$30.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
@@ -8140,16 +8192,17 @@ const Settings = () => {
8140
8192
  setChatModel("");
8141
8193
  setChatBaseUrl("");
8142
8194
  setChatApiKey("");
8195
+ setChatHasStoredApiKey(false);
8143
8196
  setProviderModels([]);
8144
8197
  setModelFetchState("idle");
8145
8198
  });
8146
8199
  insert(_el$46, createComponent(For, {
8147
8200
  each: CHAT_PROVIDERS,
8148
8201
  children: (p) => (() => {
8149
- var _el$115 = _tmpl$26();
8150
- insert(_el$115, () => p.name);
8151
- createRenderEffect(() => _el$115.value = p.id);
8152
- return _el$115;
8202
+ var _el$116 = _tmpl$27();
8203
+ insert(_el$116, () => p.name);
8204
+ createRenderEffect(() => _el$116.value = p.id);
8205
+ return _el$116;
8153
8206
  })()
8154
8207
  }));
8155
8208
  createRenderEffect(() => _el$46.value = chatProviderId());
@@ -8159,7 +8212,7 @@ const Settings = () => {
8159
8212
  return chatProviderMeta().requiresKey || chatProviderId() === "custom";
8160
8213
  },
8161
8214
  get children() {
8162
- var _el$47 = _tmpl$8(), _el$48 = _el$47.firstChild;
8215
+ var _el$47 = _tmpl$9(), _el$48 = _el$47.firstChild;
8163
8216
  _el$48.firstChild;
8164
8217
  var _el$51 = _el$48.nextSibling;
8165
8218
  insert(_el$48, createComponent(Show, {
@@ -8170,180 +8223,252 @@ const Settings = () => {
8170
8223
  return _tmpl$6$1();
8171
8224
  }
8172
8225
  }), null);
8173
- _el$51.$$input = (e) => setChatApiKey(e.currentTarget.value);
8226
+ _el$51.$$input = (e) => {
8227
+ setChatApiKey(e.currentTarget.value);
8228
+ if (e.currentTarget.value.trim()) {
8229
+ setChatHasStoredApiKey(true);
8230
+ }
8231
+ };
8174
8232
  setAttribute(_el$51, "spellcheck", false);
8175
8233
  insert(_el$47, createComponent(Show, {
8176
8234
  get when() {
8177
- return chatProviderId() === "custom";
8235
+ return memo(() => !!chatHasStoredApiKey())() && !chatApiKey().trim();
8178
8236
  },
8179
8237
  get children() {
8180
8238
  return _tmpl$7();
8181
8239
  }
8182
8240
  }), null);
8183
- createRenderEffect(() => setAttribute(_el$51, "placeholder", chatProviderMeta().keyPlaceholder || "Bearer token or API key"));
8241
+ insert(_el$47, createComponent(Show, {
8242
+ get when() {
8243
+ return chatProviderId() === "custom";
8244
+ },
8245
+ get children() {
8246
+ return _tmpl$8();
8247
+ }
8248
+ }), null);
8249
+ createRenderEffect(() => setAttribute(_el$51, "placeholder", chatHasStoredApiKey() && !chatApiKey().trim() ? "Stored securely. Enter a new key to replace it." : chatProviderMeta().keyPlaceholder || "Bearer token or API key"));
8184
8250
  createRenderEffect(() => _el$51.value = chatApiKey());
8185
8251
  return _el$47;
8186
8252
  }
8187
8253
  }), (() => {
8188
- var _el$53 = _tmpl$1(), _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling, _el$57 = _el$55.firstChild;
8189
- insert(_el$55, createComponent(Show, {
8254
+ var _el$54 = _tmpl$10(), _el$55 = _el$54.firstChild, _el$56 = _el$55.nextSibling, _el$58 = _el$56.firstChild;
8255
+ insert(_el$56, createComponent(Show, {
8190
8256
  get when() {
8191
8257
  return providerModels().length > 0;
8192
8258
  },
8193
8259
  get fallback() {
8194
8260
  return (() => {
8195
- var _el$116 = _tmpl$27();
8196
- _el$116.$$input = (e) => setChatModel(e.currentTarget.value);
8197
- setAttribute(_el$116, "spellcheck", false);
8198
- createRenderEffect(() => setAttribute(_el$116, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
8199
- createRenderEffect(() => _el$116.value = chatModel());
8200
- return _el$116;
8261
+ var _el$117 = _tmpl$28();
8262
+ _el$117.$$input = (e) => setChatModel(e.currentTarget.value);
8263
+ setAttribute(_el$117, "spellcheck", false);
8264
+ createRenderEffect(() => setAttribute(_el$117, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
8265
+ createRenderEffect(() => _el$117.value = chatModel());
8266
+ return _el$117;
8201
8267
  })();
8202
8268
  },
8203
8269
  get children() {
8204
- var _el$56 = _tmpl$9();
8205
- _el$56.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
8206
- insert(_el$56, createComponent(For, {
8270
+ var _el$57 = _tmpl$0();
8271
+ _el$57.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
8272
+ insert(_el$57, createComponent(For, {
8207
8273
  get each() {
8208
8274
  return providerModels();
8209
8275
  },
8210
8276
  children: (m) => (() => {
8211
- var _el$117 = _tmpl$26();
8212
- _el$117.value = m;
8213
- insert(_el$117, m);
8214
- return _el$117;
8277
+ var _el$118 = _tmpl$27();
8278
+ _el$118.value = m;
8279
+ insert(_el$118, m);
8280
+ return _el$118;
8215
8281
  })()
8216
8282
  }));
8217
- createRenderEffect(() => _el$56.value = chatModel());
8218
- return _el$56;
8283
+ createRenderEffect(() => _el$57.value = chatModel());
8284
+ return _el$57;
8219
8285
  }
8220
- }), _el$57);
8221
- _el$57.$$click = doFetchModels;
8222
- insert(_el$53, createComponent(Show, {
8286
+ }), _el$58);
8287
+ _el$58.$$click = doFetchModels;
8288
+ insert(_el$54, createComponent(Show, {
8223
8289
  get when() {
8224
8290
  return modelFetchState() === "error";
8225
8291
  },
8226
8292
  get children() {
8227
- return _tmpl$0();
8293
+ return _tmpl$1();
8228
8294
  }
8229
8295
  }), null);
8230
- insert(_el$53, createComponent(Show, {
8296
+ insert(_el$54, createComponent(Show, {
8231
8297
  get when() {
8232
8298
  return modelFetchWarning();
8233
8299
  },
8234
8300
  children: (warning) => (() => {
8235
- var _el$118 = _tmpl$28();
8236
- insert(_el$118, warning);
8237
- return _el$118;
8301
+ var _el$119 = _tmpl$29();
8302
+ insert(_el$119, warning);
8303
+ return _el$119;
8238
8304
  })()
8239
8305
  }), null);
8240
- createRenderEffect(() => _el$57.disabled = modelFetchState() === "loading");
8241
- return _el$53;
8306
+ createRenderEffect(() => _el$58.disabled = modelFetchState() === "loading");
8307
+ return _el$54;
8242
8308
  })(), createComponent(Show, {
8243
8309
  get when() {
8244
8310
  return chatProviderMeta().needsBaseUrl || chatProviderId() === "custom";
8245
8311
  },
8246
8312
  get children() {
8247
- var _el$59 = _tmpl$10(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
8248
- _el$61.$$input = (e) => setChatBaseUrl(e.currentTarget.value);
8249
- setAttribute(_el$61, "spellcheck", false);
8250
- createRenderEffect(() => setAttribute(_el$61, "placeholder", chatProviderMeta().defaultBaseUrl ?? "https://..."));
8251
- createRenderEffect(() => _el$61.value = chatBaseUrl());
8252
- return _el$59;
8313
+ var _el$60 = _tmpl$11(), _el$61 = _el$60.firstChild, _el$62 = _el$61.nextSibling;
8314
+ _el$62.$$input = (e) => setChatBaseUrl(e.currentTarget.value);
8315
+ setAttribute(_el$62, "spellcheck", false);
8316
+ createRenderEffect(() => setAttribute(_el$62, "placeholder", chatProviderMeta().defaultBaseUrl ?? "https://..."));
8317
+ createRenderEffect(() => _el$62.value = chatBaseUrl());
8318
+ return _el$60;
8253
8319
  }
8254
8320
  }), createComponent(Show, {
8255
8321
  get when() {
8256
8322
  return chatProviderId() === "llama_cpp";
8257
8323
  },
8258
8324
  get children() {
8259
- return _tmpl$11();
8325
+ return _tmpl$12();
8260
8326
  }
8261
8327
  })];
8262
8328
  }
8263
- }), _el$63);
8264
- insert(_el$64, createComponent(Show, {
8329
+ }), _el$64);
8330
+ insert(_el$65, createComponent(Show, {
8265
8331
  get when() {
8266
8332
  return premiumActive();
8267
8333
  },
8268
8334
  get fallback() {
8269
8335
  return (() => {
8270
- var _el$119 = _tmpl$30(), _el$120 = _el$119.firstChild, _el$121 = _el$120.nextSibling, _el$122 = _el$121.firstChild, _el$123 = _el$122.nextSibling, _el$124 = _el$121.nextSibling;
8271
- _el$122.$$input = (e) => setPremiumEmail(e.currentTarget.value);
8272
- setAttribute(_el$122, "spellcheck", false);
8273
- _el$123.$$click = async () => {
8336
+ var _el$120 = _tmpl$32(), _el$121 = _el$120.firstChild, _el$122 = _el$121.nextSibling, _el$123 = _el$122.firstChild, _el$124 = _el$123.nextSibling, _el$128 = _el$122.nextSibling;
8337
+ _el$123.$$input = (e) => {
8338
+ const nextEmail = e.currentTarget.value;
8339
+ if (nextEmail.trim().toLowerCase() !== premiumEmail().trim().toLowerCase()) {
8340
+ resetPremiumActivationFlow();
8341
+ setPremiumMessage(null);
8342
+ }
8343
+ setPremiumEmail(nextEmail);
8344
+ };
8345
+ setAttribute(_el$123, "spellcheck", false);
8346
+ _el$124.$$click = async () => {
8274
8347
  setPremiumLoading(true);
8275
8348
  setPremiumMessage(null);
8276
8349
  try {
8277
- const result = await window.vessel.premium.activate(premiumEmail().trim());
8278
- setPremiumState(result.state);
8350
+ const result = await window.vessel.premium.requestCode(premiumEmail().trim());
8279
8351
  if (result.ok) {
8352
+ setPremiumChallengeToken(result.challengeToken ?? "");
8353
+ setPremiumCodeSent(true);
8280
8354
  setPremiumMessage({
8281
8355
  kind: "success",
8282
- text: "Premium activated!"
8356
+ text: "If a matching premium subscription exists, we sent a 6-digit code to that email."
8283
8357
  });
8284
8358
  } else {
8359
+ resetPremiumActivationFlow();
8285
8360
  setPremiumMessage({
8286
8361
  kind: "error",
8287
- text: result.error || "Activation failed"
8362
+ text: result.error || "Could not send code"
8288
8363
  });
8289
8364
  }
8290
8365
  } catch (err) {
8366
+ resetPremiumActivationFlow();
8291
8367
  setPremiumMessage({
8292
8368
  kind: "error",
8293
- text: err instanceof Error ? err.message : "Activation failed"
8369
+ text: err instanceof Error ? err.message : "Could not send code"
8294
8370
  });
8295
8371
  } finally {
8296
8372
  setPremiumLoading(false);
8297
8373
  }
8298
8374
  };
8299
- insert(_el$123, () => premiumLoading() ? "Checking..." : "Activate");
8300
- _el$124.$$click = () => {
8375
+ insert(_el$124, (() => {
8376
+ var _c$ = memo(() => !!premiumLoading());
8377
+ return () => _c$() ? "Sending..." : premiumCodeSent() ? "Resend Code" : "Send Code";
8378
+ })());
8379
+ insert(_el$120, createComponent(Show, {
8380
+ get when() {
8381
+ return premiumCodeSent();
8382
+ },
8383
+ get children() {
8384
+ var _el$125 = _tmpl$30(), _el$126 = _el$125.firstChild, _el$127 = _el$126.nextSibling;
8385
+ _el$126.$$input = (e) => {
8386
+ const nextCode = e.currentTarget.value.replace(/\D+/g, "").slice(0, 6);
8387
+ setPremiumCode(nextCode);
8388
+ setPremiumMessage(null);
8389
+ };
8390
+ setAttribute(_el$126, "spellcheck", false);
8391
+ _el$127.$$click = async () => {
8392
+ setPremiumLoading(true);
8393
+ setPremiumMessage(null);
8394
+ try {
8395
+ const result = await window.vessel.premium.verifyCode(premiumEmail().trim(), premiumCode().trim(), premiumChallengeToken());
8396
+ setPremiumState(result.state);
8397
+ if (result.ok) {
8398
+ resetPremiumActivationFlow();
8399
+ setPremiumMessage({
8400
+ kind: "success",
8401
+ text: "Premium activated!"
8402
+ });
8403
+ } else {
8404
+ setPremiumMessage({
8405
+ kind: "error",
8406
+ text: result.error || "Verification failed"
8407
+ });
8408
+ }
8409
+ } catch (err) {
8410
+ setPremiumMessage({
8411
+ kind: "error",
8412
+ text: err instanceof Error ? err.message : "Verification failed"
8413
+ });
8414
+ } finally {
8415
+ setPremiumLoading(false);
8416
+ }
8417
+ };
8418
+ insert(_el$127, () => premiumLoading() ? "Verifying..." : "Verify Code");
8419
+ createRenderEffect(() => _el$127.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
8420
+ createRenderEffect(() => _el$126.value = premiumCode());
8421
+ return _el$125;
8422
+ }
8423
+ }), _el$128);
8424
+ _el$128.$$click = () => {
8301
8425
  startPremiumCheckout();
8302
8426
  };
8303
- insert(_el$119, createComponent(Show, {
8427
+ insert(_el$120, createComponent(Show, {
8304
8428
  get when() {
8305
8429
  return premiumMessage();
8306
8430
  },
8307
8431
  children: (msg) => (() => {
8308
- var _el$126 = _tmpl$31();
8309
- insert(_el$126, () => msg().text);
8432
+ var _el$130 = _tmpl$33();
8433
+ insert(_el$130, () => msg().text);
8310
8434
  createRenderEffect((_p$) => {
8311
8435
  var _v$10 = !!(msg().kind === "success"), _v$11 = !!(msg().kind === "error");
8312
- _v$10 !== _p$.e && _el$126.classList.toggle("success", _p$.e = _v$10);
8313
- _v$11 !== _p$.t && _el$126.classList.toggle("error", _p$.t = _v$11);
8436
+ _v$10 !== _p$.e && _el$130.classList.toggle("success", _p$.e = _v$10);
8437
+ _v$11 !== _p$.t && _el$130.classList.toggle("error", _p$.t = _v$11);
8314
8438
  return _p$;
8315
8439
  }, {
8316
8440
  e: void 0,
8317
8441
  t: void 0
8318
8442
  });
8319
- return _el$126;
8443
+ return _el$130;
8320
8444
  })()
8321
8445
  }), null);
8322
- insert(_el$119, createComponent(Show, {
8446
+ insert(_el$120, createComponent(Show, {
8323
8447
  get when() {
8324
8448
  return premiumState().email || premiumEmail();
8325
8449
  },
8326
8450
  get children() {
8327
- var _el$125 = _tmpl$29();
8328
- _el$125.$$click = async () => {
8451
+ var _el$129 = _tmpl$31();
8452
+ _el$129.$$click = async () => {
8329
8453
  const state = await window.vessel.premium.reset();
8330
8454
  setPremiumState(state);
8331
8455
  setPremiumEmail("");
8456
+ resetPremiumActivationFlow();
8332
8457
  setPremiumMessage(null);
8333
8458
  };
8334
- return _el$125;
8459
+ return _el$129;
8335
8460
  }
8336
8461
  }), null);
8337
- createRenderEffect(() => _el$123.disabled = premiumLoading() || !premiumEmail().trim());
8338
- createRenderEffect(() => _el$122.value = premiumEmail());
8339
- return _el$119;
8462
+ createRenderEffect(() => _el$124.disabled = premiumLoading() || !premiumEmail().trim());
8463
+ createRenderEffect(() => _el$123.value = premiumEmail());
8464
+ return _el$120;
8340
8465
  })();
8341
8466
  },
8342
8467
  get children() {
8343
- var _el$66 = _tmpl$12(), _el$67 = _el$66.firstChild;
8344
- _el$67.firstChild;
8345
- var _el$69 = _el$67.nextSibling, _el$70 = _el$69.nextSibling, _el$71 = _el$70.firstChild, _el$72 = _el$71.nextSibling;
8346
- insert(_el$67, createComponent(Show, {
8468
+ var _el$67 = _tmpl$13(), _el$68 = _el$67.firstChild;
8469
+ _el$68.firstChild;
8470
+ var _el$70 = _el$68.nextSibling, _el$71 = _el$70.nextSibling, _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
8471
+ insert(_el$68, createComponent(Show, {
8347
8472
  get when() {
8348
8473
  return premiumState().status === "trialing";
8349
8474
  },
@@ -8351,8 +8476,8 @@ const Settings = () => {
8351
8476
  return [" ", "(Trial)"];
8352
8477
  }
8353
8478
  }), null);
8354
- insert(_el$69, () => premiumState().email, null);
8355
- insert(_el$69, createComponent(Show, {
8479
+ insert(_el$70, () => premiumState().email, null);
8480
+ insert(_el$70, createComponent(Show, {
8356
8481
  get when() {
8357
8482
  return premiumState().expiresAt;
8358
8483
  },
@@ -8360,50 +8485,51 @@ const Settings = () => {
8360
8485
  return [" ", "· Renews", " ", memo(() => new Date(premiumState().expiresAt).toLocaleDateString())];
8361
8486
  }
8362
8487
  }), null);
8363
- _el$71.$$click = () => {
8488
+ _el$72.$$click = () => {
8364
8489
  void window.vessel.premium.portal();
8365
8490
  };
8366
- _el$72.$$click = async () => {
8491
+ _el$73.$$click = async () => {
8367
8492
  const state = await window.vessel.premium.reset();
8368
8493
  setPremiumState(state);
8369
8494
  setPremiumEmail("");
8495
+ resetPremiumActivationFlow();
8370
8496
  setPremiumMessage(null);
8371
8497
  };
8372
- return _el$66;
8498
+ return _el$67;
8373
8499
  }
8374
8500
  }), null);
8375
- insert(_el$75, createComponent(Show, {
8501
+ insert(_el$76, createComponent(Show, {
8376
8502
  get when() {
8377
8503
  return !premiumActive();
8378
8504
  },
8379
8505
  get children() {
8380
- return _tmpl$13();
8506
+ return _tmpl$14();
8381
8507
  }
8382
8508
  }), null);
8383
- insert(_el$74, createComponent(Show, {
8509
+ insert(_el$75, createComponent(Show, {
8384
8510
  get when() {
8385
8511
  return premiumActive();
8386
8512
  },
8387
8513
  get fallback() {
8388
- return _tmpl$32();
8514
+ return _tmpl$34();
8389
8515
  },
8390
8516
  get children() {
8391
- return [_tmpl$14(), createComponent(Show, {
8517
+ return [_tmpl$15(), createComponent(Show, {
8392
8518
  get when() {
8393
8519
  return vaultEntries().length > 0;
8394
8520
  },
8395
8521
  get children() {
8396
- var _el$79 = _tmpl$15();
8397
- insert(_el$79, createComponent(For, {
8522
+ var _el$80 = _tmpl$16();
8523
+ insert(_el$80, createComponent(For, {
8398
8524
  get each() {
8399
8525
  return vaultEntries();
8400
8526
  },
8401
8527
  children: (entry) => (() => {
8402
- var _el$128 = _tmpl$33(), _el$129 = _el$128.firstChild, _el$130 = _el$129.firstChild, _el$131 = _el$130.nextSibling, _el$132 = _el$131.firstChild, _el$133 = _el$129.nextSibling;
8403
- insert(_el$130, () => entry.label);
8404
- insert(_el$131, () => entry.username, _el$132);
8405
- insert(_el$131, () => entry.domainPattern, null);
8406
- insert(_el$131, createComponent(Show, {
8528
+ var _el$132 = _tmpl$35(), _el$133 = _el$132.firstChild, _el$134 = _el$133.firstChild, _el$135 = _el$134.nextSibling, _el$136 = _el$135.firstChild, _el$137 = _el$133.nextSibling;
8529
+ insert(_el$134, () => entry.label);
8530
+ insert(_el$135, () => entry.username, _el$136);
8531
+ insert(_el$135, () => entry.domainPattern, null);
8532
+ insert(_el$135, createComponent(Show, {
8407
8533
  get when() {
8408
8534
  return entry.useCount > 0;
8409
8535
  },
@@ -8411,43 +8537,43 @@ const Settings = () => {
8411
8537
  return [" ", "· Used ", memo(() => entry.useCount), "x"];
8412
8538
  }
8413
8539
  }), null);
8414
- _el$133.$$click = () => handleVaultRemove(entry.id);
8415
- return _el$128;
8540
+ _el$137.$$click = () => handleVaultRemove(entry.id);
8541
+ return _el$132;
8416
8542
  })()
8417
8543
  }));
8418
- return _el$79;
8544
+ return _el$80;
8419
8545
  }
8420
8546
  }), createComponent(Show, {
8421
8547
  get when() {
8422
8548
  return !vaultAdding();
8423
8549
  },
8424
8550
  get children() {
8425
- var _el$80 = _tmpl$16();
8426
- _el$80.$$click = () => {
8551
+ var _el$81 = _tmpl$17();
8552
+ _el$81.$$click = () => {
8427
8553
  setVaultAdding(true);
8428
8554
  setVaultMessage(null);
8429
8555
  };
8430
- return _el$80;
8556
+ return _el$81;
8431
8557
  }
8432
8558
  }), createComponent(Show, {
8433
8559
  get when() {
8434
8560
  return vaultAdding();
8435
8561
  },
8436
8562
  get children() {
8437
- var _el$81 = _tmpl$17(), _el$82 = _el$81.firstChild, _el$83 = _el$82.nextSibling, _el$84 = _el$83.nextSibling, _el$85 = _el$84.nextSibling, _el$86 = _el$85.nextSibling, _el$87 = _el$86.nextSibling, _el$88 = _el$87.nextSibling, _el$89 = _el$88.firstChild, _el$90 = _el$89.nextSibling;
8438
- _el$82.$$input = (e) => setVaultNewLabel(e.currentTarget.value);
8439
- setAttribute(_el$82, "spellcheck", false);
8440
- _el$83.$$input = (e) => setVaultNewDomain(e.currentTarget.value);
8563
+ var _el$82 = _tmpl$18(), _el$83 = _el$82.firstChild, _el$84 = _el$83.nextSibling, _el$85 = _el$84.nextSibling, _el$86 = _el$85.nextSibling, _el$87 = _el$86.nextSibling, _el$88 = _el$87.nextSibling, _el$89 = _el$88.nextSibling, _el$90 = _el$89.firstChild, _el$91 = _el$90.nextSibling;
8564
+ _el$83.$$input = (e) => setVaultNewLabel(e.currentTarget.value);
8441
8565
  setAttribute(_el$83, "spellcheck", false);
8442
- _el$84.$$input = (e) => setVaultNewUsername(e.currentTarget.value);
8566
+ _el$84.$$input = (e) => setVaultNewDomain(e.currentTarget.value);
8443
8567
  setAttribute(_el$84, "spellcheck", false);
8444
- _el$85.$$input = (e) => setVaultNewPassword(e.currentTarget.value);
8445
- _el$86.$$input = (e) => setVaultNewTotp(e.currentTarget.value);
8446
- setAttribute(_el$86, "spellcheck", false);
8447
- _el$87.$$input = (e) => setVaultNewNotes(e.currentTarget.value);
8568
+ _el$85.$$input = (e) => setVaultNewUsername(e.currentTarget.value);
8569
+ setAttribute(_el$85, "spellcheck", false);
8570
+ _el$86.$$input = (e) => setVaultNewPassword(e.currentTarget.value);
8571
+ _el$87.$$input = (e) => setVaultNewTotp(e.currentTarget.value);
8448
8572
  setAttribute(_el$87, "spellcheck", false);
8449
- _el$89.$$click = handleVaultAdd;
8450
- _el$90.$$click = () => {
8573
+ _el$88.$$input = (e) => setVaultNewNotes(e.currentTarget.value);
8574
+ setAttribute(_el$88, "spellcheck", false);
8575
+ _el$90.$$click = handleVaultAdd;
8576
+ _el$91.$$click = () => {
8451
8577
  setVaultAdding(false);
8452
8578
  setVaultNewLabel("");
8453
8579
  setVaultNewDomain("");
@@ -8456,55 +8582,55 @@ const Settings = () => {
8456
8582
  setVaultNewTotp("");
8457
8583
  setVaultNewNotes("");
8458
8584
  };
8459
- createRenderEffect(() => _el$82.value = vaultNewLabel());
8460
- createRenderEffect(() => _el$83.value = vaultNewDomain());
8461
- createRenderEffect(() => _el$84.value = vaultNewUsername());
8462
- createRenderEffect(() => _el$85.value = vaultNewPassword());
8463
- createRenderEffect(() => _el$86.value = vaultNewTotp());
8464
- createRenderEffect(() => _el$87.value = vaultNewNotes());
8465
- return _el$81;
8585
+ createRenderEffect(() => _el$83.value = vaultNewLabel());
8586
+ createRenderEffect(() => _el$84.value = vaultNewDomain());
8587
+ createRenderEffect(() => _el$85.value = vaultNewUsername());
8588
+ createRenderEffect(() => _el$86.value = vaultNewPassword());
8589
+ createRenderEffect(() => _el$87.value = vaultNewTotp());
8590
+ createRenderEffect(() => _el$88.value = vaultNewNotes());
8591
+ return _el$82;
8466
8592
  }
8467
8593
  }), createComponent(Show, {
8468
8594
  get when() {
8469
8595
  return vaultMessage();
8470
8596
  },
8471
8597
  children: (msg) => (() => {
8472
- var _el$134 = _tmpl$31();
8473
- insert(_el$134, () => msg().text);
8598
+ var _el$138 = _tmpl$33();
8599
+ insert(_el$138, () => msg().text);
8474
8600
  createRenderEffect((_p$) => {
8475
8601
  var _v$12 = !!(msg().kind === "success"), _v$13 = !!(msg().kind === "error");
8476
- _v$12 !== _p$.e && _el$134.classList.toggle("success", _p$.e = _v$12);
8477
- _v$13 !== _p$.t && _el$134.classList.toggle("error", _p$.t = _v$13);
8602
+ _v$12 !== _p$.e && _el$138.classList.toggle("success", _p$.e = _v$12);
8603
+ _v$13 !== _p$.t && _el$138.classList.toggle("error", _p$.t = _v$13);
8478
8604
  return _p$;
8479
8605
  }, {
8480
8606
  e: void 0,
8481
8607
  t: void 0
8482
8608
  });
8483
- return _el$134;
8609
+ return _el$138;
8484
8610
  })()
8485
8611
  })];
8486
8612
  }
8487
8613
  }), null);
8488
- _el$94.$$click = () => setTelemetryEnabled(!telemetryEnabled());
8489
- _el$96.$$click = handleSave;
8490
- addEventListener(_el$97, "click", closeSettings, true);
8614
+ _el$95.$$click = () => setTelemetryEnabled(!telemetryEnabled());
8615
+ _el$97.$$click = handleSave;
8616
+ addEventListener(_el$98, "click", closeSettings, true);
8491
8617
  insert(_el$2, createComponent(Show, {
8492
8618
  get when() {
8493
8619
  return status();
8494
8620
  },
8495
8621
  children: (currentStatus) => (() => {
8496
- var _el$135 = _tmpl$31();
8497
- insert(_el$135, () => currentStatus().text);
8622
+ var _el$139 = _tmpl$33();
8623
+ insert(_el$139, () => currentStatus().text);
8498
8624
  createRenderEffect((_p$) => {
8499
8625
  var _v$14 = !!(currentStatus().kind === "success"), _v$15 = !!(currentStatus().kind === "error");
8500
- _v$14 !== _p$.e && _el$135.classList.toggle("success", _p$.e = _v$14);
8501
- _v$15 !== _p$.t && _el$135.classList.toggle("error", _p$.t = _v$15);
8626
+ _v$14 !== _p$.e && _el$139.classList.toggle("success", _p$.e = _v$14);
8627
+ _v$15 !== _p$.t && _el$139.classList.toggle("error", _p$.t = _v$15);
8502
8628
  return _p$;
8503
8629
  }, {
8504
8630
  e: void 0,
8505
8631
  t: void 0
8506
8632
  });
8507
- return _el$135;
8633
+ return _el$139;
8508
8634
  })()
8509
8635
  }), null);
8510
8636
  createRenderEffect((_p$) => {
@@ -8516,8 +8642,8 @@ const Settings = () => {
8516
8642
  _v$5 !== _p$.i && setAttribute(_el$39, "aria-checked", _p$.i = _v$5);
8517
8643
  _v$6 !== _p$.n && _el$43.classList.toggle("on", _p$.n = _v$6);
8518
8644
  _v$7 !== _p$.s && setAttribute(_el$43, "aria-checked", _p$.s = _v$7);
8519
- _v$8 !== _p$.h && _el$94.classList.toggle("on", _p$.h = _v$8);
8520
- _v$9 !== _p$.r && setAttribute(_el$94, "aria-checked", _p$.r = _v$9);
8645
+ _v$8 !== _p$.h && _el$95.classList.toggle("on", _p$.h = _v$8);
8646
+ _v$9 !== _p$.r && setAttribute(_el$95, "aria-checked", _p$.r = _v$9);
8521
8647
  return _p$;
8522
8648
  }, {
8523
8649
  e: void 0,
@@ -8535,7 +8661,7 @@ const Settings = () => {
8535
8661
  createRenderEffect(() => _el$30.value = obsidianVaultPath());
8536
8662
  createRenderEffect(() => _el$33.value = agentTranscriptMode());
8537
8663
  return _el$;
8538
- })(), _tmpl$19()];
8664
+ })(), _tmpl$20()];
8539
8665
  }
8540
8666
  });
8541
8667
  };