@quanta-intellect/vessel-browser 0.1.45 → 0.1.46

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,7 @@ 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
+ 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
7100
  .settings-panel {
7100
7101
  width: min(440px, calc(100vw - 32px));
7101
7102
  max-height: calc(100vh - 48px);
@@ -7629,7 +7630,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
7629
7630
  justify-content: flex-end;
7630
7631
  margin-top: 4px;
7631
7632
  }
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
+ `), _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;`);
7633
7634
  const CHAT_PROVIDERS = [{
7634
7635
  id: "anthropic",
7635
7636
  name: "Anthropic",
@@ -7801,11 +7802,15 @@ const Settings = () => {
7801
7802
  const [premiumState, setPremiumState] = createSignal({
7802
7803
  status: "free",
7803
7804
  customerId: "",
7805
+ verificationToken: "",
7804
7806
  email: "",
7805
7807
  validatedAt: "",
7806
7808
  expiresAt: ""
7807
7809
  });
7808
7810
  const [premiumEmail, setPremiumEmail] = createSignal("");
7811
+ const [premiumCode, setPremiumCode] = createSignal("");
7812
+ const [premiumChallengeToken, setPremiumChallengeToken] = createSignal("");
7813
+ const [premiumCodeSent, setPremiumCodeSent] = createSignal(false);
7809
7814
  const [premiumLoading, setPremiumLoading] = createSignal(false);
7810
7815
  const [premiumMessage, setPremiumMessage] = createSignal(null);
7811
7816
  let trackedSettingsPremiumBanner = false;
@@ -7818,9 +7823,15 @@ const Settings = () => {
7818
7823
  const startPremiumCheckout = () => {
7819
7824
  void window.vessel.premium.checkout(premiumEmail().trim() || void 0);
7820
7825
  };
7826
+ const resetPremiumActivationFlow = () => {
7827
+ setPremiumCode("");
7828
+ setPremiumChallengeToken("");
7829
+ setPremiumCodeSent(false);
7830
+ };
7821
7831
  const [chatEnabled, setChatEnabled] = createSignal(false);
7822
7832
  const [chatProviderId, setChatProviderId] = createSignal("anthropic");
7823
7833
  const [chatApiKey, setChatApiKey] = createSignal("");
7834
+ const [chatHasStoredApiKey, setChatHasStoredApiKey] = createSignal(false);
7824
7835
  const [chatModel, setChatModel] = createSignal("");
7825
7836
  const [chatBaseUrl, setChatBaseUrl] = createSignal("");
7826
7837
  const chatProviderMeta = () => CHAT_PROVIDERS.find((p) => p.id === chatProviderId()) ?? CHAT_PROVIDERS[0];
@@ -7895,9 +7906,13 @@ const Settings = () => {
7895
7906
  setChatEnabled(cp !== null);
7896
7907
  if (cp) {
7897
7908
  setChatProviderId(cp.id);
7898
- setChatApiKey(cp.apiKey);
7909
+ setChatApiKey("");
7910
+ setChatHasStoredApiKey(cp.hasApiKey === true);
7899
7911
  setChatModel(cp.model);
7900
7912
  setChatBaseUrl(cp.baseUrl ?? "");
7913
+ } else {
7914
+ setChatApiKey("");
7915
+ setChatHasStoredApiKey(false);
7901
7916
  }
7902
7917
  setTelemetryEnabled(settings.telemetryEnabled !== false);
7903
7918
  try {
@@ -7919,6 +7934,7 @@ const Settings = () => {
7919
7934
  setPremiumEmail(nextState.email);
7920
7935
  }
7921
7936
  if (nextState.status === "active" || nextState.status === "trialing") {
7937
+ resetPremiumActivationFlow();
7922
7938
  setPremiumMessage({
7923
7939
  kind: "success",
7924
7940
  text: nextState.status === "trialing" ? "Premium trial active. Enjoy the unlocked toolkit." : "Premium activated. Your premium tools are ready."
@@ -7963,6 +7979,7 @@ const Settings = () => {
7963
7979
  const chatConfig = chatEnabled() ? {
7964
7980
  id: chatProviderId(),
7965
7981
  apiKey: chatApiKey().trim(),
7982
+ hasApiKey: chatHasStoredApiKey() && !chatApiKey().trim(),
7966
7983
  model: chatModel().trim() || chatProviderMeta().defaultModel,
7967
7984
  baseUrl: chatBaseUrl().trim() || void 0
7968
7985
  } : null;
@@ -7988,11 +8005,11 @@ const Settings = () => {
7988
8005
  },
7989
8006
  get children() {
7990
8007
  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;
8008
+ 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;
8009
+ _el$65.firstChild;
8010
+ var _el$74 = _el$65.nextSibling, _el$75 = _el$74.nextSibling, _el$76 = _el$75.firstChild;
8011
+ _el$76.firstChild;
8012
+ 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
8013
  addEventListener(_el$, "click", closeSettings, true);
7997
8014
  _el$2.$$keydown = handleKeyDown;
7998
8015
  _el$2.$$click = (e) => e.stopPropagation();
@@ -8049,7 +8066,7 @@ const Settings = () => {
8049
8066
  return premiumActive();
8050
8067
  },
8051
8068
  get fallback() {
8052
- return _tmpl$20();
8069
+ return _tmpl$21();
8053
8070
  },
8054
8071
  get children() {
8055
8072
  var _el$26 = _tmpl$4$1();
@@ -8070,55 +8087,55 @@ const Settings = () => {
8070
8087
  return health();
8071
8088
  },
8072
8089
  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, {
8090
+ 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;
8091
+ _el$106.nextSibling;
8092
+ insert(_el$106, () => currentHealth().mcp.status);
8093
+ insert(_el$103, () => currentHealth().mcp.message, null);
8094
+ insert(_el$101, createComponent(Show, {
8078
8095
  get when() {
8079
8096
  return currentHealth().mcp.endpoint;
8080
8097
  },
8081
8098
  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;
8099
+ var _el$109 = _tmpl$24(), _el$110 = _el$109.firstChild, _el$111 = _el$110.nextSibling;
8100
+ insert(_el$111, endpoint);
8101
+ return _el$109;
8085
8102
  })()
8086
8103
  }), null);
8087
- insert(_el$100, createComponent(Show, {
8104
+ insert(_el$101, createComponent(Show, {
8088
8105
  get when() {
8089
8106
  return currentHealth().startupIssues.length > 0;
8090
8107
  },
8091
8108
  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, {
8109
+ var _el$108 = _tmpl$22();
8110
+ insert(_el$108, () => currentHealth().startupIssues.map((issue) => (() => {
8111
+ var _el$112 = _tmpl$25(), _el$113 = _el$112.firstChild, _el$114 = _el$113.nextSibling;
8112
+ insert(_el$113, () => issue.title);
8113
+ insert(_el$114, () => issue.detail);
8114
+ insert(_el$112, createComponent(Show, {
8098
8115
  get when() {
8099
8116
  return issue.action;
8100
8117
  },
8101
8118
  children: (action) => (() => {
8102
- var _el$114 = _tmpl$25();
8103
- insert(_el$114, action);
8104
- return _el$114;
8119
+ var _el$115 = _tmpl$26();
8120
+ insert(_el$115, action);
8121
+ return _el$115;
8105
8122
  })()
8106
8123
  }), null);
8107
8124
  createRenderEffect((_p$) => {
8108
8125
  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);
8126
+ _v$0 !== _p$.e && _el$112.classList.toggle("warning", _p$.e = _v$0);
8127
+ _v$1 !== _p$.t && _el$112.classList.toggle("error", _p$.t = _v$1);
8111
8128
  return _p$;
8112
8129
  }, {
8113
8130
  e: void 0,
8114
8131
  t: void 0
8115
8132
  });
8116
- return _el$111;
8133
+ return _el$112;
8117
8134
  })()));
8118
- return _el$107;
8135
+ return _el$108;
8119
8136
  }
8120
8137
  }), null);
8121
- return _el$100;
8138
+ return _el$101;
8122
8139
  })()
8123
8140
  }), _el$28);
8124
8141
  _el$30.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
@@ -8140,16 +8157,17 @@ const Settings = () => {
8140
8157
  setChatModel("");
8141
8158
  setChatBaseUrl("");
8142
8159
  setChatApiKey("");
8160
+ setChatHasStoredApiKey(false);
8143
8161
  setProviderModels([]);
8144
8162
  setModelFetchState("idle");
8145
8163
  });
8146
8164
  insert(_el$46, createComponent(For, {
8147
8165
  each: CHAT_PROVIDERS,
8148
8166
  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;
8167
+ var _el$116 = _tmpl$27();
8168
+ insert(_el$116, () => p.name);
8169
+ createRenderEffect(() => _el$116.value = p.id);
8170
+ return _el$116;
8153
8171
  })()
8154
8172
  }));
8155
8173
  createRenderEffect(() => _el$46.value = chatProviderId());
@@ -8159,7 +8177,7 @@ const Settings = () => {
8159
8177
  return chatProviderMeta().requiresKey || chatProviderId() === "custom";
8160
8178
  },
8161
8179
  get children() {
8162
- var _el$47 = _tmpl$8(), _el$48 = _el$47.firstChild;
8180
+ var _el$47 = _tmpl$9(), _el$48 = _el$47.firstChild;
8163
8181
  _el$48.firstChild;
8164
8182
  var _el$51 = _el$48.nextSibling;
8165
8183
  insert(_el$48, createComponent(Show, {
@@ -8170,180 +8188,252 @@ const Settings = () => {
8170
8188
  return _tmpl$6$1();
8171
8189
  }
8172
8190
  }), null);
8173
- _el$51.$$input = (e) => setChatApiKey(e.currentTarget.value);
8191
+ _el$51.$$input = (e) => {
8192
+ setChatApiKey(e.currentTarget.value);
8193
+ if (e.currentTarget.value.trim()) {
8194
+ setChatHasStoredApiKey(true);
8195
+ }
8196
+ };
8174
8197
  setAttribute(_el$51, "spellcheck", false);
8175
8198
  insert(_el$47, createComponent(Show, {
8176
8199
  get when() {
8177
- return chatProviderId() === "custom";
8200
+ return memo(() => !!chatHasStoredApiKey())() && !chatApiKey().trim();
8178
8201
  },
8179
8202
  get children() {
8180
8203
  return _tmpl$7();
8181
8204
  }
8182
8205
  }), null);
8183
- createRenderEffect(() => setAttribute(_el$51, "placeholder", chatProviderMeta().keyPlaceholder || "Bearer token or API key"));
8206
+ insert(_el$47, createComponent(Show, {
8207
+ get when() {
8208
+ return chatProviderId() === "custom";
8209
+ },
8210
+ get children() {
8211
+ return _tmpl$8();
8212
+ }
8213
+ }), null);
8214
+ 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
8215
  createRenderEffect(() => _el$51.value = chatApiKey());
8185
8216
  return _el$47;
8186
8217
  }
8187
8218
  }), (() => {
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, {
8219
+ var _el$54 = _tmpl$10(), _el$55 = _el$54.firstChild, _el$56 = _el$55.nextSibling, _el$58 = _el$56.firstChild;
8220
+ insert(_el$56, createComponent(Show, {
8190
8221
  get when() {
8191
8222
  return providerModels().length > 0;
8192
8223
  },
8193
8224
  get fallback() {
8194
8225
  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;
8226
+ var _el$117 = _tmpl$28();
8227
+ _el$117.$$input = (e) => setChatModel(e.currentTarget.value);
8228
+ setAttribute(_el$117, "spellcheck", false);
8229
+ createRenderEffect(() => setAttribute(_el$117, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() && !chatHasStoredApiKey() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
8230
+ createRenderEffect(() => _el$117.value = chatModel());
8231
+ return _el$117;
8201
8232
  })();
8202
8233
  },
8203
8234
  get children() {
8204
- var _el$56 = _tmpl$9();
8205
- _el$56.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
8206
- insert(_el$56, createComponent(For, {
8235
+ var _el$57 = _tmpl$0();
8236
+ _el$57.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
8237
+ insert(_el$57, createComponent(For, {
8207
8238
  get each() {
8208
8239
  return providerModels();
8209
8240
  },
8210
8241
  children: (m) => (() => {
8211
- var _el$117 = _tmpl$26();
8212
- _el$117.value = m;
8213
- insert(_el$117, m);
8214
- return _el$117;
8242
+ var _el$118 = _tmpl$27();
8243
+ _el$118.value = m;
8244
+ insert(_el$118, m);
8245
+ return _el$118;
8215
8246
  })()
8216
8247
  }));
8217
- createRenderEffect(() => _el$56.value = chatModel());
8218
- return _el$56;
8248
+ createRenderEffect(() => _el$57.value = chatModel());
8249
+ return _el$57;
8219
8250
  }
8220
- }), _el$57);
8221
- _el$57.$$click = doFetchModels;
8222
- insert(_el$53, createComponent(Show, {
8251
+ }), _el$58);
8252
+ _el$58.$$click = doFetchModels;
8253
+ insert(_el$54, createComponent(Show, {
8223
8254
  get when() {
8224
8255
  return modelFetchState() === "error";
8225
8256
  },
8226
8257
  get children() {
8227
- return _tmpl$0();
8258
+ return _tmpl$1();
8228
8259
  }
8229
8260
  }), null);
8230
- insert(_el$53, createComponent(Show, {
8261
+ insert(_el$54, createComponent(Show, {
8231
8262
  get when() {
8232
8263
  return modelFetchWarning();
8233
8264
  },
8234
8265
  children: (warning) => (() => {
8235
- var _el$118 = _tmpl$28();
8236
- insert(_el$118, warning);
8237
- return _el$118;
8266
+ var _el$119 = _tmpl$29();
8267
+ insert(_el$119, warning);
8268
+ return _el$119;
8238
8269
  })()
8239
8270
  }), null);
8240
- createRenderEffect(() => _el$57.disabled = modelFetchState() === "loading");
8241
- return _el$53;
8271
+ createRenderEffect(() => _el$58.disabled = modelFetchState() === "loading");
8272
+ return _el$54;
8242
8273
  })(), createComponent(Show, {
8243
8274
  get when() {
8244
8275
  return chatProviderMeta().needsBaseUrl || chatProviderId() === "custom";
8245
8276
  },
8246
8277
  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;
8278
+ var _el$60 = _tmpl$11(), _el$61 = _el$60.firstChild, _el$62 = _el$61.nextSibling;
8279
+ _el$62.$$input = (e) => setChatBaseUrl(e.currentTarget.value);
8280
+ setAttribute(_el$62, "spellcheck", false);
8281
+ createRenderEffect(() => setAttribute(_el$62, "placeholder", chatProviderMeta().defaultBaseUrl ?? "https://..."));
8282
+ createRenderEffect(() => _el$62.value = chatBaseUrl());
8283
+ return _el$60;
8253
8284
  }
8254
8285
  }), createComponent(Show, {
8255
8286
  get when() {
8256
8287
  return chatProviderId() === "llama_cpp";
8257
8288
  },
8258
8289
  get children() {
8259
- return _tmpl$11();
8290
+ return _tmpl$12();
8260
8291
  }
8261
8292
  })];
8262
8293
  }
8263
- }), _el$63);
8264
- insert(_el$64, createComponent(Show, {
8294
+ }), _el$64);
8295
+ insert(_el$65, createComponent(Show, {
8265
8296
  get when() {
8266
8297
  return premiumActive();
8267
8298
  },
8268
8299
  get fallback() {
8269
8300
  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 () => {
8301
+ 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;
8302
+ _el$123.$$input = (e) => {
8303
+ const nextEmail = e.currentTarget.value;
8304
+ if (nextEmail.trim().toLowerCase() !== premiumEmail().trim().toLowerCase()) {
8305
+ resetPremiumActivationFlow();
8306
+ setPremiumMessage(null);
8307
+ }
8308
+ setPremiumEmail(nextEmail);
8309
+ };
8310
+ setAttribute(_el$123, "spellcheck", false);
8311
+ _el$124.$$click = async () => {
8274
8312
  setPremiumLoading(true);
8275
8313
  setPremiumMessage(null);
8276
8314
  try {
8277
- const result = await window.vessel.premium.activate(premiumEmail().trim());
8278
- setPremiumState(result.state);
8315
+ const result = await window.vessel.premium.requestCode(premiumEmail().trim());
8279
8316
  if (result.ok) {
8317
+ setPremiumChallengeToken(result.challengeToken ?? "");
8318
+ setPremiumCodeSent(true);
8280
8319
  setPremiumMessage({
8281
8320
  kind: "success",
8282
- text: "Premium activated!"
8321
+ text: "If a matching premium subscription exists, we sent a 6-digit code to that email."
8283
8322
  });
8284
8323
  } else {
8324
+ resetPremiumActivationFlow();
8285
8325
  setPremiumMessage({
8286
8326
  kind: "error",
8287
- text: result.error || "Activation failed"
8327
+ text: result.error || "Could not send code"
8288
8328
  });
8289
8329
  }
8290
8330
  } catch (err) {
8331
+ resetPremiumActivationFlow();
8291
8332
  setPremiumMessage({
8292
8333
  kind: "error",
8293
- text: err instanceof Error ? err.message : "Activation failed"
8334
+ text: err instanceof Error ? err.message : "Could not send code"
8294
8335
  });
8295
8336
  } finally {
8296
8337
  setPremiumLoading(false);
8297
8338
  }
8298
8339
  };
8299
- insert(_el$123, () => premiumLoading() ? "Checking..." : "Activate");
8300
- _el$124.$$click = () => {
8340
+ insert(_el$124, (() => {
8341
+ var _c$ = memo(() => !!premiumLoading());
8342
+ return () => _c$() ? "Sending..." : premiumCodeSent() ? "Resend Code" : "Send Code";
8343
+ })());
8344
+ insert(_el$120, createComponent(Show, {
8345
+ get when() {
8346
+ return premiumCodeSent();
8347
+ },
8348
+ get children() {
8349
+ var _el$125 = _tmpl$30(), _el$126 = _el$125.firstChild, _el$127 = _el$126.nextSibling;
8350
+ _el$126.$$input = (e) => {
8351
+ const nextCode = e.currentTarget.value.replace(/\D+/g, "").slice(0, 6);
8352
+ setPremiumCode(nextCode);
8353
+ setPremiumMessage(null);
8354
+ };
8355
+ setAttribute(_el$126, "spellcheck", false);
8356
+ _el$127.$$click = async () => {
8357
+ setPremiumLoading(true);
8358
+ setPremiumMessage(null);
8359
+ try {
8360
+ const result = await window.vessel.premium.verifyCode(premiumEmail().trim(), premiumCode().trim(), premiumChallengeToken());
8361
+ setPremiumState(result.state);
8362
+ if (result.ok) {
8363
+ resetPremiumActivationFlow();
8364
+ setPremiumMessage({
8365
+ kind: "success",
8366
+ text: "Premium activated!"
8367
+ });
8368
+ } else {
8369
+ setPremiumMessage({
8370
+ kind: "error",
8371
+ text: result.error || "Verification failed"
8372
+ });
8373
+ }
8374
+ } catch (err) {
8375
+ setPremiumMessage({
8376
+ kind: "error",
8377
+ text: err instanceof Error ? err.message : "Verification failed"
8378
+ });
8379
+ } finally {
8380
+ setPremiumLoading(false);
8381
+ }
8382
+ };
8383
+ insert(_el$127, () => premiumLoading() ? "Verifying..." : "Verify Code");
8384
+ createRenderEffect(() => _el$127.disabled = premiumLoading() || !premiumEmail().trim() || premiumCode().trim().length !== 6 || !premiumChallengeToken());
8385
+ createRenderEffect(() => _el$126.value = premiumCode());
8386
+ return _el$125;
8387
+ }
8388
+ }), _el$128);
8389
+ _el$128.$$click = () => {
8301
8390
  startPremiumCheckout();
8302
8391
  };
8303
- insert(_el$119, createComponent(Show, {
8392
+ insert(_el$120, createComponent(Show, {
8304
8393
  get when() {
8305
8394
  return premiumMessage();
8306
8395
  },
8307
8396
  children: (msg) => (() => {
8308
- var _el$126 = _tmpl$31();
8309
- insert(_el$126, () => msg().text);
8397
+ var _el$130 = _tmpl$33();
8398
+ insert(_el$130, () => msg().text);
8310
8399
  createRenderEffect((_p$) => {
8311
8400
  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);
8401
+ _v$10 !== _p$.e && _el$130.classList.toggle("success", _p$.e = _v$10);
8402
+ _v$11 !== _p$.t && _el$130.classList.toggle("error", _p$.t = _v$11);
8314
8403
  return _p$;
8315
8404
  }, {
8316
8405
  e: void 0,
8317
8406
  t: void 0
8318
8407
  });
8319
- return _el$126;
8408
+ return _el$130;
8320
8409
  })()
8321
8410
  }), null);
8322
- insert(_el$119, createComponent(Show, {
8411
+ insert(_el$120, createComponent(Show, {
8323
8412
  get when() {
8324
8413
  return premiumState().email || premiumEmail();
8325
8414
  },
8326
8415
  get children() {
8327
- var _el$125 = _tmpl$29();
8328
- _el$125.$$click = async () => {
8416
+ var _el$129 = _tmpl$31();
8417
+ _el$129.$$click = async () => {
8329
8418
  const state = await window.vessel.premium.reset();
8330
8419
  setPremiumState(state);
8331
8420
  setPremiumEmail("");
8421
+ resetPremiumActivationFlow();
8332
8422
  setPremiumMessage(null);
8333
8423
  };
8334
- return _el$125;
8424
+ return _el$129;
8335
8425
  }
8336
8426
  }), null);
8337
- createRenderEffect(() => _el$123.disabled = premiumLoading() || !premiumEmail().trim());
8338
- createRenderEffect(() => _el$122.value = premiumEmail());
8339
- return _el$119;
8427
+ createRenderEffect(() => _el$124.disabled = premiumLoading() || !premiumEmail().trim());
8428
+ createRenderEffect(() => _el$123.value = premiumEmail());
8429
+ return _el$120;
8340
8430
  })();
8341
8431
  },
8342
8432
  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, {
8433
+ var _el$67 = _tmpl$13(), _el$68 = _el$67.firstChild;
8434
+ _el$68.firstChild;
8435
+ var _el$70 = _el$68.nextSibling, _el$71 = _el$70.nextSibling, _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
8436
+ insert(_el$68, createComponent(Show, {
8347
8437
  get when() {
8348
8438
  return premiumState().status === "trialing";
8349
8439
  },
@@ -8351,8 +8441,8 @@ const Settings = () => {
8351
8441
  return [" ", "(Trial)"];
8352
8442
  }
8353
8443
  }), null);
8354
- insert(_el$69, () => premiumState().email, null);
8355
- insert(_el$69, createComponent(Show, {
8444
+ insert(_el$70, () => premiumState().email, null);
8445
+ insert(_el$70, createComponent(Show, {
8356
8446
  get when() {
8357
8447
  return premiumState().expiresAt;
8358
8448
  },
@@ -8360,50 +8450,51 @@ const Settings = () => {
8360
8450
  return [" ", "· Renews", " ", memo(() => new Date(premiumState().expiresAt).toLocaleDateString())];
8361
8451
  }
8362
8452
  }), null);
8363
- _el$71.$$click = () => {
8453
+ _el$72.$$click = () => {
8364
8454
  void window.vessel.premium.portal();
8365
8455
  };
8366
- _el$72.$$click = async () => {
8456
+ _el$73.$$click = async () => {
8367
8457
  const state = await window.vessel.premium.reset();
8368
8458
  setPremiumState(state);
8369
8459
  setPremiumEmail("");
8460
+ resetPremiumActivationFlow();
8370
8461
  setPremiumMessage(null);
8371
8462
  };
8372
- return _el$66;
8463
+ return _el$67;
8373
8464
  }
8374
8465
  }), null);
8375
- insert(_el$75, createComponent(Show, {
8466
+ insert(_el$76, createComponent(Show, {
8376
8467
  get when() {
8377
8468
  return !premiumActive();
8378
8469
  },
8379
8470
  get children() {
8380
- return _tmpl$13();
8471
+ return _tmpl$14();
8381
8472
  }
8382
8473
  }), null);
8383
- insert(_el$74, createComponent(Show, {
8474
+ insert(_el$75, createComponent(Show, {
8384
8475
  get when() {
8385
8476
  return premiumActive();
8386
8477
  },
8387
8478
  get fallback() {
8388
- return _tmpl$32();
8479
+ return _tmpl$34();
8389
8480
  },
8390
8481
  get children() {
8391
- return [_tmpl$14(), createComponent(Show, {
8482
+ return [_tmpl$15(), createComponent(Show, {
8392
8483
  get when() {
8393
8484
  return vaultEntries().length > 0;
8394
8485
  },
8395
8486
  get children() {
8396
- var _el$79 = _tmpl$15();
8397
- insert(_el$79, createComponent(For, {
8487
+ var _el$80 = _tmpl$16();
8488
+ insert(_el$80, createComponent(For, {
8398
8489
  get each() {
8399
8490
  return vaultEntries();
8400
8491
  },
8401
8492
  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, {
8493
+ 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;
8494
+ insert(_el$134, () => entry.label);
8495
+ insert(_el$135, () => entry.username, _el$136);
8496
+ insert(_el$135, () => entry.domainPattern, null);
8497
+ insert(_el$135, createComponent(Show, {
8407
8498
  get when() {
8408
8499
  return entry.useCount > 0;
8409
8500
  },
@@ -8411,43 +8502,43 @@ const Settings = () => {
8411
8502
  return [" ", "· Used ", memo(() => entry.useCount), "x"];
8412
8503
  }
8413
8504
  }), null);
8414
- _el$133.$$click = () => handleVaultRemove(entry.id);
8415
- return _el$128;
8505
+ _el$137.$$click = () => handleVaultRemove(entry.id);
8506
+ return _el$132;
8416
8507
  })()
8417
8508
  }));
8418
- return _el$79;
8509
+ return _el$80;
8419
8510
  }
8420
8511
  }), createComponent(Show, {
8421
8512
  get when() {
8422
8513
  return !vaultAdding();
8423
8514
  },
8424
8515
  get children() {
8425
- var _el$80 = _tmpl$16();
8426
- _el$80.$$click = () => {
8516
+ var _el$81 = _tmpl$17();
8517
+ _el$81.$$click = () => {
8427
8518
  setVaultAdding(true);
8428
8519
  setVaultMessage(null);
8429
8520
  };
8430
- return _el$80;
8521
+ return _el$81;
8431
8522
  }
8432
8523
  }), createComponent(Show, {
8433
8524
  get when() {
8434
8525
  return vaultAdding();
8435
8526
  },
8436
8527
  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);
8528
+ 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;
8529
+ _el$83.$$input = (e) => setVaultNewLabel(e.currentTarget.value);
8441
8530
  setAttribute(_el$83, "spellcheck", false);
8442
- _el$84.$$input = (e) => setVaultNewUsername(e.currentTarget.value);
8531
+ _el$84.$$input = (e) => setVaultNewDomain(e.currentTarget.value);
8443
8532
  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);
8533
+ _el$85.$$input = (e) => setVaultNewUsername(e.currentTarget.value);
8534
+ setAttribute(_el$85, "spellcheck", false);
8535
+ _el$86.$$input = (e) => setVaultNewPassword(e.currentTarget.value);
8536
+ _el$87.$$input = (e) => setVaultNewTotp(e.currentTarget.value);
8448
8537
  setAttribute(_el$87, "spellcheck", false);
8449
- _el$89.$$click = handleVaultAdd;
8450
- _el$90.$$click = () => {
8538
+ _el$88.$$input = (e) => setVaultNewNotes(e.currentTarget.value);
8539
+ setAttribute(_el$88, "spellcheck", false);
8540
+ _el$90.$$click = handleVaultAdd;
8541
+ _el$91.$$click = () => {
8451
8542
  setVaultAdding(false);
8452
8543
  setVaultNewLabel("");
8453
8544
  setVaultNewDomain("");
@@ -8456,55 +8547,55 @@ const Settings = () => {
8456
8547
  setVaultNewTotp("");
8457
8548
  setVaultNewNotes("");
8458
8549
  };
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;
8550
+ createRenderEffect(() => _el$83.value = vaultNewLabel());
8551
+ createRenderEffect(() => _el$84.value = vaultNewDomain());
8552
+ createRenderEffect(() => _el$85.value = vaultNewUsername());
8553
+ createRenderEffect(() => _el$86.value = vaultNewPassword());
8554
+ createRenderEffect(() => _el$87.value = vaultNewTotp());
8555
+ createRenderEffect(() => _el$88.value = vaultNewNotes());
8556
+ return _el$82;
8466
8557
  }
8467
8558
  }), createComponent(Show, {
8468
8559
  get when() {
8469
8560
  return vaultMessage();
8470
8561
  },
8471
8562
  children: (msg) => (() => {
8472
- var _el$134 = _tmpl$31();
8473
- insert(_el$134, () => msg().text);
8563
+ var _el$138 = _tmpl$33();
8564
+ insert(_el$138, () => msg().text);
8474
8565
  createRenderEffect((_p$) => {
8475
8566
  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);
8567
+ _v$12 !== _p$.e && _el$138.classList.toggle("success", _p$.e = _v$12);
8568
+ _v$13 !== _p$.t && _el$138.classList.toggle("error", _p$.t = _v$13);
8478
8569
  return _p$;
8479
8570
  }, {
8480
8571
  e: void 0,
8481
8572
  t: void 0
8482
8573
  });
8483
- return _el$134;
8574
+ return _el$138;
8484
8575
  })()
8485
8576
  })];
8486
8577
  }
8487
8578
  }), null);
8488
- _el$94.$$click = () => setTelemetryEnabled(!telemetryEnabled());
8489
- _el$96.$$click = handleSave;
8490
- addEventListener(_el$97, "click", closeSettings, true);
8579
+ _el$95.$$click = () => setTelemetryEnabled(!telemetryEnabled());
8580
+ _el$97.$$click = handleSave;
8581
+ addEventListener(_el$98, "click", closeSettings, true);
8491
8582
  insert(_el$2, createComponent(Show, {
8492
8583
  get when() {
8493
8584
  return status();
8494
8585
  },
8495
8586
  children: (currentStatus) => (() => {
8496
- var _el$135 = _tmpl$31();
8497
- insert(_el$135, () => currentStatus().text);
8587
+ var _el$139 = _tmpl$33();
8588
+ insert(_el$139, () => currentStatus().text);
8498
8589
  createRenderEffect((_p$) => {
8499
8590
  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);
8591
+ _v$14 !== _p$.e && _el$139.classList.toggle("success", _p$.e = _v$14);
8592
+ _v$15 !== _p$.t && _el$139.classList.toggle("error", _p$.t = _v$15);
8502
8593
  return _p$;
8503
8594
  }, {
8504
8595
  e: void 0,
8505
8596
  t: void 0
8506
8597
  });
8507
- return _el$135;
8598
+ return _el$139;
8508
8599
  })()
8509
8600
  }), null);
8510
8601
  createRenderEffect((_p$) => {
@@ -8516,8 +8607,8 @@ const Settings = () => {
8516
8607
  _v$5 !== _p$.i && setAttribute(_el$39, "aria-checked", _p$.i = _v$5);
8517
8608
  _v$6 !== _p$.n && _el$43.classList.toggle("on", _p$.n = _v$6);
8518
8609
  _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);
8610
+ _v$8 !== _p$.h && _el$95.classList.toggle("on", _p$.h = _v$8);
8611
+ _v$9 !== _p$.r && setAttribute(_el$95, "aria-checked", _p$.r = _v$9);
8521
8612
  return _p$;
8522
8613
  }, {
8523
8614
  e: void 0,
@@ -8535,7 +8626,7 @@ const Settings = () => {
8535
8626
  createRenderEffect(() => _el$30.value = obsidianVaultPath());
8536
8627
  createRenderEffect(() => _el$33.value = agentTranscriptMode());
8537
8628
  return _el$;
8538
- })(), _tmpl$19()];
8629
+ })(), _tmpl$20()];
8539
8630
  }
8540
8631
  });
8541
8632
  };