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