@quanta-intellect/vessel-browser 0.1.86 → 0.1.90
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.
|
@@ -2951,7 +2951,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
2951
2951
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
2952
2952
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
2953
2953
|
};
|
|
2954
|
-
var _tmpl$$l = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$h = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$h = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$d = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$c = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$8$8 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$6 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$5 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>×`), _tmpl$1$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$5 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$11$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$3 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$3 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$
|
|
2954
|
+
var _tmpl$$l = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$h = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$h = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$d = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$c = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$8$8 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$6 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$5 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>×`), _tmpl$1$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$5 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$11$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$3 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$3 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$3 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$3 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$2 = /* @__PURE__ */ template(`<li>`);
|
|
2955
2955
|
const AddressBar = (props) => {
|
|
2956
2956
|
const {
|
|
2957
2957
|
activeTab,
|
|
@@ -3439,13 +3439,13 @@ const AddressBar = (props) => {
|
|
|
3439
3439
|
return parseDiffSummaryParts(burst.summary);
|
|
3440
3440
|
},
|
|
3441
3441
|
children: (part) => (() => {
|
|
3442
|
-
var _el$58 = _tmpl$22$
|
|
3442
|
+
var _el$58 = _tmpl$22$3(), _el$60 = _el$58.firstChild;
|
|
3443
3443
|
insert(_el$58, createComponent(Show, {
|
|
3444
3444
|
get when() {
|
|
3445
3445
|
return part.section;
|
|
3446
3446
|
},
|
|
3447
3447
|
get children() {
|
|
3448
|
-
var _el$59 = _tmpl$21$
|
|
3448
|
+
var _el$59 = _tmpl$21$3();
|
|
3449
3449
|
insert(_el$59, () => part.section);
|
|
3450
3450
|
return _el$59;
|
|
3451
3451
|
}
|
|
@@ -3475,13 +3475,13 @@ const AddressBar = (props) => {
|
|
|
3475
3475
|
return change.before || change.after;
|
|
3476
3476
|
},
|
|
3477
3477
|
get children() {
|
|
3478
|
-
var _el$67 = _tmpl$25$
|
|
3478
|
+
var _el$67 = _tmpl$25$3();
|
|
3479
3479
|
insert(_el$67, createComponent(Show, {
|
|
3480
3480
|
get when() {
|
|
3481
3481
|
return change.before;
|
|
3482
3482
|
},
|
|
3483
3483
|
get children() {
|
|
3484
|
-
var _el$68 = _tmpl$23$
|
|
3484
|
+
var _el$68 = _tmpl$23$3(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
|
|
3485
3485
|
insert(_el$70, () => change.before);
|
|
3486
3486
|
return _el$68;
|
|
3487
3487
|
}
|
|
@@ -3491,7 +3491,7 @@ const AddressBar = (props) => {
|
|
|
3491
3491
|
return change.after;
|
|
3492
3492
|
},
|
|
3493
3493
|
get children() {
|
|
3494
|
-
var _el$71 = _tmpl$24$
|
|
3494
|
+
var _el$71 = _tmpl$24$3(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
|
|
3495
3495
|
insert(_el$73, () => change.after);
|
|
3496
3496
|
return _el$71;
|
|
3497
3497
|
}
|
|
@@ -3504,7 +3504,7 @@ const AddressBar = (props) => {
|
|
|
3504
3504
|
return change.addedItems?.length;
|
|
3505
3505
|
},
|
|
3506
3506
|
get children() {
|
|
3507
|
-
var _el$74 = _tmpl$26$
|
|
3507
|
+
var _el$74 = _tmpl$26$3(), _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling;
|
|
3508
3508
|
insert(_el$76, createComponent(For, {
|
|
3509
3509
|
get each() {
|
|
3510
3510
|
return change.addedItems;
|
|
@@ -3523,7 +3523,7 @@ const AddressBar = (props) => {
|
|
|
3523
3523
|
return change.removedItems?.length;
|
|
3524
3524
|
},
|
|
3525
3525
|
get children() {
|
|
3526
|
-
var _el$77 = _tmpl$27$
|
|
3526
|
+
var _el$77 = _tmpl$27$3(), _el$78 = _el$77.firstChild, _el$79 = _el$78.nextSibling;
|
|
3527
3527
|
insert(_el$79, createComponent(For, {
|
|
3528
3528
|
get each() {
|
|
3529
3529
|
return change.removedItems;
|
|
@@ -6539,7 +6539,7 @@ function renderKitPrompt(kit, values) {
|
|
|
6539
6539
|
(_, key) => values[key] ?? ""
|
|
6540
6540
|
);
|
|
6541
6541
|
}
|
|
6542
|
-
var _tmpl$$c = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$c = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$b = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$b = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$7 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$5 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$4 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$4 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$4 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date & time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$
|
|
6542
|
+
var _tmpl$$c = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$c = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$b = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$b = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$7 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$5 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$4 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$4 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$4 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date & time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$2 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$2 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$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$1 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$1 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$1 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$1 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$1 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$1 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$1 = /* @__PURE__ */ template(`<option>`), _tmpl$42$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
|
|
6543
6543
|
const ICON_MAP = {
|
|
6544
6544
|
BookOpen: book_open_default,
|
|
6545
6545
|
Tag: tag_default,
|
|
@@ -6858,7 +6858,7 @@ const AutomationTab = (props) => {
|
|
|
6858
6858
|
};
|
|
6859
6859
|
const timeValue = () => `${String(schedHour()).padStart(2, "0")}:${String(schedMinute()).padStart(2, "0")}`;
|
|
6860
6860
|
return (() => {
|
|
6861
|
-
var _el$ = _tmpl$23$
|
|
6861
|
+
var _el$ = _tmpl$23$2();
|
|
6862
6862
|
insert(_el$, createComponent(Show, {
|
|
6863
6863
|
get when() {
|
|
6864
6864
|
return memo(() => !!!premiumData.loading)() && !isPremium();
|
|
@@ -6899,7 +6899,7 @@ const AutomationTab = (props) => {
|
|
|
6899
6899
|
return allKits();
|
|
6900
6900
|
},
|
|
6901
6901
|
children: (kit) => (() => {
|
|
6902
|
-
var _el$73 = _tmpl$26$
|
|
6902
|
+
var _el$73 = _tmpl$26$2(), _el$74 = _el$73.firstChild, _el$75 = _el$74.nextSibling, _el$76 = _el$75.firstChild, _el$77 = _el$76.nextSibling;
|
|
6903
6903
|
_el$73.$$keydown = (e) => e.key === "Enter" && selectKit(kit);
|
|
6904
6904
|
_el$73.$$click = () => selectKit(kit);
|
|
6905
6905
|
insert(_el$74, createComponent(KitIcon, {
|
|
@@ -6915,7 +6915,7 @@ const AutomationTab = (props) => {
|
|
|
6915
6915
|
return kit.estimatedMinutes !== void 0;
|
|
6916
6916
|
},
|
|
6917
6917
|
get children() {
|
|
6918
|
-
var _el$78 = _tmpl$24$
|
|
6918
|
+
var _el$78 = _tmpl$24$2(), _el$79 = _el$78.firstChild, _el$81 = _el$79.nextSibling;
|
|
6919
6919
|
_el$81.nextSibling;
|
|
6920
6920
|
insert(_el$78, () => kit.estimatedMinutes, _el$81);
|
|
6921
6921
|
return _el$78;
|
|
@@ -6926,10 +6926,10 @@ const AutomationTab = (props) => {
|
|
|
6926
6926
|
return !BUNDLED_KIT_IDS.has(kit.id);
|
|
6927
6927
|
},
|
|
6928
6928
|
get fallback() {
|
|
6929
|
-
return _tmpl$27$
|
|
6929
|
+
return _tmpl$27$2();
|
|
6930
6930
|
},
|
|
6931
6931
|
get children() {
|
|
6932
|
-
var _el$82 = _tmpl$25$
|
|
6932
|
+
var _el$82 = _tmpl$25$2();
|
|
6933
6933
|
_el$82.$$click = (e) => void handleUninstall(e, kit.id);
|
|
6934
6934
|
createRenderEffect((_p$) => {
|
|
6935
6935
|
var _v$ = `Remove ${kit.name}`, _v$2 = `Remove ${kit.name}`;
|
|
@@ -7301,7 +7301,7 @@ const AutomationTab = (props) => {
|
|
|
7301
7301
|
return editingJob() !== null;
|
|
7302
7302
|
},
|
|
7303
7303
|
get children() {
|
|
7304
|
-
var _el$54 = _tmpl$22$
|
|
7304
|
+
var _el$54 = _tmpl$22$2(), _el$55 = _el$54.firstChild, _el$56 = _el$55.firstChild, _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling, _el$59 = _el$56.nextSibling, _el$70 = _el$59.nextSibling, _el$71 = _el$70.firstChild, _el$72 = _el$71.nextSibling;
|
|
7305
7305
|
_el$54.$$click = () => setEditingJob(null);
|
|
7306
7306
|
_el$55.$$click = (e) => e.stopPropagation();
|
|
7307
7307
|
insert(_el$58, () => editingJob().kitName);
|
|
@@ -7352,7 +7352,7 @@ const AutomationTab = (props) => {
|
|
|
7352
7352
|
return _el$63;
|
|
7353
7353
|
}
|
|
7354
7354
|
}), (() => {
|
|
7355
|
-
var _el$66 = _tmpl$21$
|
|
7355
|
+
var _el$66 = _tmpl$21$2(), _el$67 = _el$66.firstChild, _el$68 = _el$67.nextSibling;
|
|
7356
7356
|
_el$68.$$input = (e) => parseEditTimeInput(e.currentTarget.value);
|
|
7357
7357
|
createRenderEffect(() => _el$68.value = editTimeValue());
|
|
7358
7358
|
return _el$66;
|
|
@@ -7509,7 +7509,7 @@ const PageDiffTimeline = () => {
|
|
|
7509
7509
|
})();
|
|
7510
7510
|
};
|
|
7511
7511
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
7512
|
-
var _tmpl$$a = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$a = /* @__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$9 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$9 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$6 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$6 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$6 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$5 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$0$3 = /* @__PURE__ */ template(`<div class=bookmark-save-body><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Import HTML</button><button class=bookmark-secondary-button type=button>Import JSON`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$10$3 = /* @__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-export-card><div><div class=bookmark-panel-title>Export</div><div class=bookmark-panel-subtitle>Save browser-ready HTML or a full Vessel archive</div></div><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Browser HTML</button><button class=bookmark-secondary-button type=button>HTML + notes</button><button class=bookmark-secondary-button type=button>Vessel JSON</button></div></div><div class=bookmark-import-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Import Bookmarks</span><span class=bookmark-save-toggle-subtitle>Import from HTML or Vessel JSON</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><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$11$3 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$12$3 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$13$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><div class=history-panel-actions><button class=history-clear-btn>Clear</button><button class=history-clear-btn>Export HTML</button><button class=history-clear-btn>Export JSON</button><button class=history-clear-btn>Import</button></div></div><div class=history-list>`), _tmpl$15$2 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$16$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$17$1 = /* @__PURE__ */ template(`<span>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$19$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$20$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$21 = /* @__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$22 = /* @__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$23 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$24 = /* @__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$25 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$26 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$27 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$28 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button></div><div class=sidebar-messages><div>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$31 = /* @__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$32 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$33 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$34 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$35 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$36 = /* @__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$37 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$38 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class=bookmark-ghost-button type=button>Export</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$40 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$41 = /* @__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$42 = /* @__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$43 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$44 = /* @__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$45 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$46 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$47 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$53 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$54 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$55 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$56 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$57 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$58 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$59 = /* @__PURE__ */ template(`<div>`), _tmpl$60 = /* @__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$61 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$62 = /* @__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$63 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
7512
|
+
var _tmpl$$a = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$a = /* @__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$9 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$9 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$6 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$6 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$6 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$5 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$0$3 = /* @__PURE__ */ template(`<div class=bookmark-save-body><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Import HTML</button><button class=bookmark-secondary-button type=button>Import JSON`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$10$3 = /* @__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-export-card><div><div class=bookmark-panel-title>Export</div><div class=bookmark-panel-subtitle>Save browser-ready HTML or a full Vessel archive</div></div><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Browser HTML</button><button class=bookmark-secondary-button type=button>HTML + notes</button><button class=bookmark-secondary-button type=button>Vessel JSON</button></div></div><div class=bookmark-import-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Import Bookmarks</span><span class=bookmark-save-toggle-subtitle>Import from HTML or Vessel JSON</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><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$11$3 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$12$3 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$13$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><div class=history-panel-actions><button class=history-clear-btn>Clear</button><button class=history-clear-btn>Export HTML</button><button class=history-clear-btn>Export JSON</button><button class=history-clear-btn>Import</button></div></div><div class=history-list>`), _tmpl$15$2 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$16$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$17$1 = /* @__PURE__ */ template(`<span>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$19$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$20$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$21$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$22$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$23$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$24$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$25$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$28 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button></div><div class=sidebar-messages><div>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$31 = /* @__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$32 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$33 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$34 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$35 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$36 = /* @__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$37 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$38 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class=bookmark-ghost-button type=button>Export</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$40 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$41 = /* @__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$42 = /* @__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$43 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$44 = /* @__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$45 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$46 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$47 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$53 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$54 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$55 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$56 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$57 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$58 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$59 = /* @__PURE__ */ template(`<div>`), _tmpl$60 = /* @__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$61 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$62 = /* @__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$63 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
7513
7513
|
const UNSORTED_FOLDER = {
|
|
7514
7514
|
id: "unsorted",
|
|
7515
7515
|
name: "Unsorted",
|
|
@@ -8938,13 +8938,13 @@ ${contextBlock}` : contextBlock);
|
|
|
8938
8938
|
return isStreaming2() || messages2().length > 0;
|
|
8939
8939
|
},
|
|
8940
8940
|
get children() {
|
|
8941
|
-
var _el$125 = _tmpl$23();
|
|
8941
|
+
var _el$125 = _tmpl$23$1();
|
|
8942
8942
|
insert(_el$125, createComponent(Show, {
|
|
8943
8943
|
get when() {
|
|
8944
8944
|
return isStreaming2();
|
|
8945
8945
|
},
|
|
8946
8946
|
get children() {
|
|
8947
|
-
var _el$126 = _tmpl$21();
|
|
8947
|
+
var _el$126 = _tmpl$21$1();
|
|
8948
8948
|
_el$126.$$click = () => cancel();
|
|
8949
8949
|
return _el$126;
|
|
8950
8950
|
}
|
|
@@ -8954,7 +8954,7 @@ ${contextBlock}` : contextBlock);
|
|
|
8954
8954
|
return memo(() => !!!isStreaming2())() && messages2().length > 0;
|
|
8955
8955
|
},
|
|
8956
8956
|
get children() {
|
|
8957
|
-
var _el$127 = _tmpl$22();
|
|
8957
|
+
var _el$127 = _tmpl$22$1();
|
|
8958
8958
|
_el$127.$$click = handleRetry;
|
|
8959
8959
|
return _el$127;
|
|
8960
8960
|
}
|
|
@@ -8966,7 +8966,7 @@ ${contextBlock}` : contextBlock);
|
|
|
8966
8966
|
return highlightCount() > 0;
|
|
8967
8967
|
},
|
|
8968
8968
|
get children() {
|
|
8969
|
-
var _el$128 = _tmpl$24(), _el$129 = _el$128.firstChild, _el$130 = _el$129.nextSibling;
|
|
8969
|
+
var _el$128 = _tmpl$24$1(), _el$129 = _el$128.firstChild, _el$130 = _el$129.nextSibling;
|
|
8970
8970
|
_el$130.firstChild;
|
|
8971
8971
|
var _el$132 = _el$130.nextSibling;
|
|
8972
8972
|
_el$129.$$click = () => void scrollToHighlight(highlightIndex() - 1);
|
|
@@ -8992,14 +8992,14 @@ ${contextBlock}` : contextBlock);
|
|
|
8992
8992
|
return queueNotice2() !== null || pendingQueryCount() > 0;
|
|
8993
8993
|
},
|
|
8994
8994
|
get children() {
|
|
8995
|
-
var _el$133 = _tmpl$27(), _el$134 = _el$133.firstChild, _el$135 = _el$134.firstChild;
|
|
8995
|
+
var _el$133 = _tmpl$27$1(), _el$134 = _el$133.firstChild, _el$135 = _el$134.firstChild;
|
|
8996
8996
|
insert(_el$135, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
|
|
8997
8997
|
insert(_el$134, createComponent(Show, {
|
|
8998
8998
|
get when() {
|
|
8999
8999
|
return pendingQueryCount() > 0;
|
|
9000
9000
|
},
|
|
9001
9001
|
get children() {
|
|
9002
|
-
var _el$136 = _tmpl$25();
|
|
9002
|
+
var _el$136 = _tmpl$25$1();
|
|
9003
9003
|
_el$136.$$click = () => clearPendingQueries();
|
|
9004
9004
|
return _el$136;
|
|
9005
9005
|
}
|
|
@@ -9009,7 +9009,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9009
9009
|
return pendingQueries2().length > 0;
|
|
9010
9010
|
},
|
|
9011
9011
|
get children() {
|
|
9012
|
-
var _el$137 = _tmpl$26();
|
|
9012
|
+
var _el$137 = _tmpl$26$1();
|
|
9013
9013
|
insert(_el$137, createComponent(For, {
|
|
9014
9014
|
get each() {
|
|
9015
9015
|
return pendingQueries2();
|
|
@@ -9541,6 +9541,17 @@ const PROVIDERS = {
|
|
|
9541
9541
|
apiKeyPlaceholder: "sk-...",
|
|
9542
9542
|
apiKeyHint: "Get your key from platform.openai.com"
|
|
9543
9543
|
},
|
|
9544
|
+
openai_codex: {
|
|
9545
|
+
id: "openai_codex",
|
|
9546
|
+
name: "OpenAI Codex",
|
|
9547
|
+
type: "codex_oauth",
|
|
9548
|
+
defaultModel: "gpt-5",
|
|
9549
|
+
models: ["gpt-5", "gpt-5-mini", "gpt-5-nano", "o4", "o4-mini"],
|
|
9550
|
+
requiresApiKey: false,
|
|
9551
|
+
defaultBaseUrl: "https://api.openai.com/v1",
|
|
9552
|
+
apiKeyPlaceholder: "",
|
|
9553
|
+
apiKeyHint: "Sign in with your ChatGPT Plus or Pro subscription"
|
|
9554
|
+
},
|
|
9544
9555
|
openrouter: {
|
|
9545
9556
|
id: "openrouter",
|
|
9546
9557
|
name: "OpenRouter",
|
|
@@ -9683,7 +9694,7 @@ const SettingsGeneral = (props) => {
|
|
|
9683
9694
|
})();
|
|
9684
9695
|
};
|
|
9685
9696
|
delegateEvents(["click", "input"]);
|
|
9686
|
-
var _tmpl$$7 = /* @__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$2$7 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$
|
|
9697
|
+
var _tmpl$$7 = /* @__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$2$7 = /* @__PURE__ */ template(`<div style=display:flex;align-items:center;gap:8px><span style=width:8px;height:8px;border-radius:50%;background:var(--success);display:inline-block></span><span>Connected as `), _tmpl$3$6 = /* @__PURE__ */ template(`<p class=settings-hint><button type=button class=settings-link-btn>Disconnect`), _tmpl$4$6 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label>Account`), _tmpl$5$4 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$6$4 = /* @__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$7$4 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$8$3 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$9$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$0$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$1$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$10$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$11$1 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured <code>llama-server</code> base URL. For agent loops, run <code>llama-server</code> with <code>--ctx-size 16384</code> minimum and <code>32768</code> recommended.`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-reasoning-effort>Reasoning Level</label><select id=chat-reasoning-effort class="settings-input settings-select"></select><p class=settings-hint>Applies to providers and models that expose reasoning controls. Off requests no reasoning where supported and otherwise leaves the model at its normal behavior; Max requests the strongest supported reasoning tier.`), _tmpl$13$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=settings-category-panel><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-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-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=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-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.`), _tmpl$15$1 = /* @__PURE__ */ template(`<option>`), _tmpl$16 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)> <button type=button class=settings-link-btn>Cancel`), _tmpl$17 = /* @__PURE__ */ template(`<div>`), _tmpl$18 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>`), _tmpl$19 = /* @__PURE__ */ template(`<button type=button class=settings-btn>Try Again`), _tmpl$20 = /* @__PURE__ */ template(`<div><button type=button class=settings-btn>Connect with ChatGPT</button><p class=settings-hint>Sign in with your ChatGPT Plus or Pro subscription. A browser tab will open where you'll authorize Vessel.`), _tmpl$21 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$22 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$23 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$24 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$25 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$26 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$27 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`);
|
|
9687
9698
|
const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
|
|
9688
9699
|
id: p.id,
|
|
9689
9700
|
name: p.name,
|
|
@@ -9713,7 +9724,7 @@ const REASONING_EFFORT_OPTIONS = [{
|
|
|
9713
9724
|
const SettingsAgent = (props) => {
|
|
9714
9725
|
const chatMeta = () => CHAT_PROVIDERS$1.find((p) => p.id === props.chat.providerId()) ?? CHAT_PROVIDERS$1[0];
|
|
9715
9726
|
return (() => {
|
|
9716
|
-
var _el$ = _tmpl$
|
|
9727
|
+
var _el$ = _tmpl$14$1(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$35 = _el$3.nextSibling, _el$36 = _el$35.firstChild, _el$37 = _el$36.nextSibling, _el$38 = _el$35.nextSibling, _el$39 = _el$38.firstChild, _el$41 = _el$39.nextSibling, _el$42 = _el$38.nextSibling, _el$43 = _el$42.firstChild, _el$44 = _el$43.nextSibling, _el$45 = _el$42.nextSibling, _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling;
|
|
9717
9728
|
_el$5.$$click = () => props.chat.setEnabled(!props.chat.enabled());
|
|
9718
9729
|
insert(_el$, createComponent(Show, {
|
|
9719
9730
|
get when() {
|
|
@@ -9734,230 +9745,304 @@ const SettingsAgent = (props) => {
|
|
|
9734
9745
|
insert(_el$8, createComponent(For, {
|
|
9735
9746
|
each: CHAT_PROVIDERS$1,
|
|
9736
9747
|
children: (p) => (() => {
|
|
9737
|
-
var _el$
|
|
9738
|
-
insert(_el$
|
|
9739
|
-
createRenderEffect(() => _el$
|
|
9740
|
-
return _el$
|
|
9748
|
+
var _el$48 = _tmpl$15$1();
|
|
9749
|
+
insert(_el$48, () => p.name);
|
|
9750
|
+
createRenderEffect(() => _el$48.value = p.id);
|
|
9751
|
+
return _el$48;
|
|
9741
9752
|
})()
|
|
9742
9753
|
}));
|
|
9743
9754
|
createRenderEffect(() => _el$8.value = props.chat.providerId());
|
|
9744
9755
|
return _el$6;
|
|
9745
9756
|
})(), createComponent(Show, {
|
|
9746
9757
|
get when() {
|
|
9747
|
-
return
|
|
9758
|
+
return props.chat.providerType() === "codex_oauth";
|
|
9748
9759
|
},
|
|
9749
9760
|
get children() {
|
|
9750
|
-
var _el$9 = _tmpl$
|
|
9751
|
-
_el$
|
|
9752
|
-
|
|
9753
|
-
|
|
9761
|
+
var _el$9 = _tmpl$4$6();
|
|
9762
|
+
_el$9.firstChild;
|
|
9763
|
+
insert(_el$9, createComponent(Show, {
|
|
9764
|
+
get when() {
|
|
9765
|
+
return props.chat.codexAuthStatus() === "connected";
|
|
9766
|
+
},
|
|
9767
|
+
get fallback() {
|
|
9768
|
+
return (() => {
|
|
9769
|
+
var _el$49 = _tmpl$17();
|
|
9770
|
+
insert(_el$49, createComponent(Show, {
|
|
9771
|
+
get when() {
|
|
9772
|
+
return props.chat.codexAuthStatus() === "waiting" || props.chat.codexAuthStatus() === "exchanging";
|
|
9773
|
+
},
|
|
9774
|
+
get fallback() {
|
|
9775
|
+
return createComponent(Show, {
|
|
9776
|
+
get when() {
|
|
9777
|
+
return props.chat.codexAuthStatus() === "error";
|
|
9778
|
+
},
|
|
9779
|
+
get fallback() {
|
|
9780
|
+
return (() => {
|
|
9781
|
+
var _el$55 = _tmpl$20(), _el$56 = _el$55.firstChild;
|
|
9782
|
+
_el$56.$$click = () => props.chat.startCodexAuth();
|
|
9783
|
+
return _el$55;
|
|
9784
|
+
})();
|
|
9785
|
+
},
|
|
9786
|
+
get children() {
|
|
9787
|
+
return [(() => {
|
|
9788
|
+
var _el$53 = _tmpl$18();
|
|
9789
|
+
insert(_el$53, () => props.chat.codexAuthError());
|
|
9790
|
+
return _el$53;
|
|
9791
|
+
})(), (() => {
|
|
9792
|
+
var _el$54 = _tmpl$19();
|
|
9793
|
+
_el$54.$$click = () => props.chat.startCodexAuth();
|
|
9794
|
+
return _el$54;
|
|
9795
|
+
})()];
|
|
9796
|
+
}
|
|
9797
|
+
});
|
|
9798
|
+
},
|
|
9799
|
+
get children() {
|
|
9800
|
+
var _el$50 = _tmpl$16(), _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling;
|
|
9801
|
+
insert(_el$50, createComponent(Show, {
|
|
9802
|
+
get when() {
|
|
9803
|
+
return props.chat.codexAuthStatus() === "waiting";
|
|
9804
|
+
},
|
|
9805
|
+
fallback: "Exchanging authorization...",
|
|
9806
|
+
children: "Waiting for browser login..."
|
|
9807
|
+
}), _el$51);
|
|
9808
|
+
_el$52.$$click = () => window.vessel.codex.cancelAuth();
|
|
9809
|
+
return _el$50;
|
|
9810
|
+
}
|
|
9811
|
+
}));
|
|
9812
|
+
return _el$49;
|
|
9813
|
+
})();
|
|
9814
|
+
},
|
|
9815
|
+
get children() {
|
|
9816
|
+
return [(() => {
|
|
9817
|
+
var _el$1 = _tmpl$2$7(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
|
|
9818
|
+
_el$11.firstChild;
|
|
9819
|
+
insert(_el$11, () => props.chat.codexAccountEmail() || "ChatGPT", null);
|
|
9820
|
+
return _el$1;
|
|
9821
|
+
})(), (() => {
|
|
9822
|
+
var _el$13 = _tmpl$3$6(), _el$14 = _el$13.firstChild;
|
|
9823
|
+
_el$14.$$click = () => props.chat.disconnectCodex();
|
|
9824
|
+
return _el$13;
|
|
9825
|
+
})()];
|
|
9826
|
+
}
|
|
9827
|
+
}), null);
|
|
9828
|
+
return _el$9;
|
|
9829
|
+
}
|
|
9830
|
+
}), createComponent(Show, {
|
|
9831
|
+
get when() {
|
|
9832
|
+
return memo(() => props.chat.providerType() !== "codex_oauth")() && (chatMeta().requiresKey || props.chat.providerId() === "custom");
|
|
9833
|
+
},
|
|
9834
|
+
get children() {
|
|
9835
|
+
var _el$15 = _tmpl$8$3(), _el$16 = _el$15.firstChild;
|
|
9836
|
+
_el$16.firstChild;
|
|
9837
|
+
var _el$19 = _el$16.nextSibling;
|
|
9838
|
+
insert(_el$16, createComponent(Show, {
|
|
9754
9839
|
get when() {
|
|
9755
9840
|
return !chatMeta().requiresKey;
|
|
9756
9841
|
},
|
|
9757
9842
|
get children() {
|
|
9758
|
-
return _tmpl$
|
|
9843
|
+
return _tmpl$5$4();
|
|
9759
9844
|
}
|
|
9760
9845
|
}), null);
|
|
9761
|
-
_el$
|
|
9846
|
+
_el$19.$$input = (e) => {
|
|
9762
9847
|
props.chat.setApiKey(e.currentTarget.value);
|
|
9763
9848
|
if (e.currentTarget.value.trim()) {
|
|
9764
9849
|
props.chat.setHasStoredApiKey(true);
|
|
9765
9850
|
}
|
|
9766
9851
|
};
|
|
9767
|
-
setAttribute(_el$
|
|
9768
|
-
insert(_el$
|
|
9852
|
+
setAttribute(_el$19, "spellcheck", false);
|
|
9853
|
+
insert(_el$15, createComponent(Show, {
|
|
9769
9854
|
get when() {
|
|
9770
9855
|
return memo(() => !!props.chat.hasStoredApiKey())() && !props.chat.apiKey().trim();
|
|
9771
9856
|
},
|
|
9772
9857
|
get children() {
|
|
9773
|
-
return _tmpl$
|
|
9858
|
+
return _tmpl$6$4();
|
|
9774
9859
|
}
|
|
9775
9860
|
}), null);
|
|
9776
|
-
insert(_el$
|
|
9861
|
+
insert(_el$15, createComponent(Show, {
|
|
9777
9862
|
get when() {
|
|
9778
9863
|
return props.chat.providerId() === "custom";
|
|
9779
9864
|
},
|
|
9780
9865
|
get children() {
|
|
9781
|
-
return _tmpl$4
|
|
9866
|
+
return _tmpl$7$4();
|
|
9782
9867
|
}
|
|
9783
9868
|
}), null);
|
|
9784
|
-
createRenderEffect(() => setAttribute(_el$
|
|
9785
|
-
createRenderEffect(() => _el$
|
|
9786
|
-
return _el$
|
|
9869
|
+
createRenderEffect(() => setAttribute(_el$19, "placeholder", props.chat.hasStoredApiKey() && !props.chat.apiKey().trim() ? "Stored securely. Enter a new key to replace it." : chatMeta().keyPlaceholder || "Bearer token or API key"));
|
|
9870
|
+
createRenderEffect(() => _el$19.value = props.chat.apiKey());
|
|
9871
|
+
return _el$15;
|
|
9787
9872
|
}
|
|
9788
9873
|
}), (() => {
|
|
9789
|
-
var _el$
|
|
9790
|
-
insert(_el$
|
|
9874
|
+
var _el$22 = _tmpl$1$1(), _el$23 = _el$22.firstChild, _el$24 = _el$23.nextSibling, _el$26 = _el$24.firstChild;
|
|
9875
|
+
insert(_el$24, createComponent(Show, {
|
|
9791
9876
|
get when() {
|
|
9792
9877
|
return props.chat.providerModels().length > 0;
|
|
9793
9878
|
},
|
|
9794
9879
|
get fallback() {
|
|
9795
9880
|
return (() => {
|
|
9796
|
-
var _el$
|
|
9797
|
-
_el$
|
|
9798
|
-
setAttribute(_el$
|
|
9799
|
-
createRenderEffect(() => setAttribute(_el$
|
|
9800
|
-
createRenderEffect(() => _el$
|
|
9801
|
-
return _el$
|
|
9881
|
+
var _el$57 = _tmpl$21();
|
|
9882
|
+
_el$57.$$input = (e) => props.chat.setModel(e.currentTarget.value);
|
|
9883
|
+
setAttribute(_el$57, "spellcheck", false);
|
|
9884
|
+
createRenderEffect(() => setAttribute(_el$57, "placeholder", props.chat.modelFetchState() === "loading" ? "Fetching models…" : chatMeta().requiresKey && !props.chat.apiKey().trim() && !props.chat.hasStoredApiKey() ? "Enter API key to load models" : chatMeta().defaultModel || "model name"));
|
|
9885
|
+
createRenderEffect(() => _el$57.value = props.chat.model());
|
|
9886
|
+
return _el$57;
|
|
9802
9887
|
})();
|
|
9803
9888
|
},
|
|
9804
9889
|
get children() {
|
|
9805
|
-
var _el$
|
|
9806
|
-
_el$
|
|
9807
|
-
insert(_el$
|
|
9890
|
+
var _el$25 = _tmpl$9$1();
|
|
9891
|
+
_el$25.addEventListener("change", (e) => props.chat.setModel(e.currentTarget.value));
|
|
9892
|
+
insert(_el$25, createComponent(For, {
|
|
9808
9893
|
get each() {
|
|
9809
9894
|
return props.chat.providerModels();
|
|
9810
9895
|
},
|
|
9811
9896
|
children: (m) => (() => {
|
|
9812
|
-
var _el$
|
|
9813
|
-
_el$
|
|
9814
|
-
insert(_el$
|
|
9815
|
-
return _el$
|
|
9897
|
+
var _el$58 = _tmpl$15$1();
|
|
9898
|
+
_el$58.value = m;
|
|
9899
|
+
insert(_el$58, m);
|
|
9900
|
+
return _el$58;
|
|
9816
9901
|
})()
|
|
9817
9902
|
}));
|
|
9818
|
-
createRenderEffect(() => _el$
|
|
9819
|
-
return _el$
|
|
9903
|
+
createRenderEffect(() => _el$25.value = props.chat.model());
|
|
9904
|
+
return _el$25;
|
|
9820
9905
|
}
|
|
9821
|
-
}), _el$
|
|
9822
|
-
_el$
|
|
9823
|
-
insert(_el$
|
|
9906
|
+
}), _el$26);
|
|
9907
|
+
_el$26.$$click = () => props.chat.doFetchModels();
|
|
9908
|
+
insert(_el$22, createComponent(Show, {
|
|
9824
9909
|
get when() {
|
|
9825
9910
|
return props.chat.modelFetchState() === "error";
|
|
9826
9911
|
},
|
|
9827
9912
|
get children() {
|
|
9828
|
-
return _tmpl$
|
|
9913
|
+
return _tmpl$0$1();
|
|
9829
9914
|
}
|
|
9830
9915
|
}), null);
|
|
9831
|
-
insert(_el$
|
|
9916
|
+
insert(_el$22, createComponent(Show, {
|
|
9832
9917
|
get when() {
|
|
9833
9918
|
return props.chat.modelFetchWarning();
|
|
9834
9919
|
},
|
|
9835
9920
|
children: (warning) => (() => {
|
|
9836
|
-
var _el$
|
|
9837
|
-
insert(_el$
|
|
9838
|
-
return _el$
|
|
9921
|
+
var _el$59 = _tmpl$22();
|
|
9922
|
+
insert(_el$59, warning);
|
|
9923
|
+
return _el$59;
|
|
9839
9924
|
})()
|
|
9840
9925
|
}), null);
|
|
9841
|
-
createRenderEffect(() => _el$
|
|
9842
|
-
return _el$
|
|
9926
|
+
createRenderEffect(() => _el$26.disabled = props.chat.modelFetchState() === "loading");
|
|
9927
|
+
return _el$22;
|
|
9843
9928
|
})(), createComponent(Show, {
|
|
9844
9929
|
get when() {
|
|
9845
9930
|
return chatMeta().needsBaseUrl || props.chat.providerId() === "custom";
|
|
9846
9931
|
},
|
|
9847
9932
|
get children() {
|
|
9848
|
-
var _el$
|
|
9849
|
-
_el$
|
|
9850
|
-
setAttribute(_el$
|
|
9851
|
-
createRenderEffect(() => setAttribute(_el$
|
|
9852
|
-
createRenderEffect(() => _el$
|
|
9853
|
-
return _el$
|
|
9933
|
+
var _el$28 = _tmpl$10$1(), _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling;
|
|
9934
|
+
_el$30.$$input = (e) => props.chat.setBaseUrl(e.currentTarget.value);
|
|
9935
|
+
setAttribute(_el$30, "spellcheck", false);
|
|
9936
|
+
createRenderEffect(() => setAttribute(_el$30, "placeholder", chatMeta().defaultBaseUrl ?? "https://..."));
|
|
9937
|
+
createRenderEffect(() => _el$30.value = props.chat.baseUrl());
|
|
9938
|
+
return _el$28;
|
|
9854
9939
|
}
|
|
9855
9940
|
}), createComponent(Show, {
|
|
9856
9941
|
get when() {
|
|
9857
9942
|
return props.chat.providerId() === "llama_cpp";
|
|
9858
9943
|
},
|
|
9859
9944
|
get children() {
|
|
9860
|
-
return _tmpl$
|
|
9945
|
+
return _tmpl$11$1();
|
|
9861
9946
|
}
|
|
9862
9947
|
}), (() => {
|
|
9863
|
-
var _el$
|
|
9864
|
-
_el$
|
|
9865
|
-
insert(_el$
|
|
9948
|
+
var _el$32 = _tmpl$12$1(), _el$33 = _el$32.firstChild, _el$34 = _el$33.nextSibling;
|
|
9949
|
+
_el$34.addEventListener("change", (e) => props.chat.setReasoningEffort(e.currentTarget.value));
|
|
9950
|
+
insert(_el$34, createComponent(For, {
|
|
9866
9951
|
each: REASONING_EFFORT_OPTIONS,
|
|
9867
9952
|
children: (option) => (() => {
|
|
9868
|
-
var _el$
|
|
9869
|
-
insert(_el$
|
|
9870
|
-
createRenderEffect(() => _el$
|
|
9871
|
-
return _el$
|
|
9953
|
+
var _el$60 = _tmpl$15$1();
|
|
9954
|
+
insert(_el$60, () => option.label);
|
|
9955
|
+
createRenderEffect(() => _el$60.value = option.value);
|
|
9956
|
+
return _el$60;
|
|
9872
9957
|
})()
|
|
9873
9958
|
}));
|
|
9874
|
-
createRenderEffect(() => _el$
|
|
9875
|
-
return _el$
|
|
9959
|
+
createRenderEffect(() => _el$34.value = props.chat.reasoningEffort());
|
|
9960
|
+
return _el$32;
|
|
9876
9961
|
})()];
|
|
9877
9962
|
}
|
|
9878
|
-
}), _el$
|
|
9879
|
-
_el$
|
|
9880
|
-
setAttribute(_el$
|
|
9881
|
-
insert(_el$
|
|
9963
|
+
}), _el$35);
|
|
9964
|
+
_el$37.$$input = (e) => props.setMcpPort(e.currentTarget.value);
|
|
9965
|
+
setAttribute(_el$37, "spellcheck", false);
|
|
9966
|
+
insert(_el$38, createComponent(Show, {
|
|
9882
9967
|
get when() {
|
|
9883
9968
|
return props.premiumActive();
|
|
9884
9969
|
},
|
|
9885
9970
|
get fallback() {
|
|
9886
|
-
return _tmpl$
|
|
9971
|
+
return _tmpl$23();
|
|
9887
9972
|
},
|
|
9888
9973
|
get children() {
|
|
9889
|
-
var _el$
|
|
9890
|
-
_el$
|
|
9891
|
-
createRenderEffect(() => _el$
|
|
9892
|
-
return _el$
|
|
9974
|
+
var _el$40 = _tmpl$13$1();
|
|
9975
|
+
_el$40.$$input = (e) => props.setMaxToolIterations(e.currentTarget.value);
|
|
9976
|
+
createRenderEffect(() => _el$40.value = props.maxToolIterations());
|
|
9977
|
+
return _el$40;
|
|
9893
9978
|
}
|
|
9894
|
-
}), _el$
|
|
9895
|
-
insert(_el$
|
|
9979
|
+
}), _el$41);
|
|
9980
|
+
insert(_el$41, createComponent(Show, {
|
|
9896
9981
|
get when() {
|
|
9897
9982
|
return props.premiumActive();
|
|
9898
9983
|
},
|
|
9899
9984
|
fallback: "Free tier: 50 tool calls per conversation turn. Upgrade to Vessel Premium to customize this limit (up to 1,000).",
|
|
9900
9985
|
children: "Maximum number of tool calls the AI agent can make per conversation turn before pausing. Higher values let the agent complete longer multi-step workflows without stopping. Range: 10–1000."
|
|
9901
9986
|
}));
|
|
9902
|
-
_el$
|
|
9987
|
+
_el$44.addEventListener("change", (e) => props.setAgentTranscriptMode(e.currentTarget.value));
|
|
9903
9988
|
insert(_el$, createComponent(Show, {
|
|
9904
9989
|
get when() {
|
|
9905
9990
|
return props.health();
|
|
9906
9991
|
},
|
|
9907
9992
|
children: (currentHealth) => (() => {
|
|
9908
|
-
var _el$
|
|
9909
|
-
_el$
|
|
9910
|
-
insert(_el$
|
|
9911
|
-
insert(_el$
|
|
9912
|
-
insert(_el$
|
|
9993
|
+
var _el$62 = _tmpl$25(), _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling, _el$65 = _el$64.firstChild, _el$66 = _el$65.nextSibling;
|
|
9994
|
+
_el$66.nextSibling;
|
|
9995
|
+
insert(_el$66, () => currentHealth().mcp.status);
|
|
9996
|
+
insert(_el$64, () => currentHealth().mcp.message, null);
|
|
9997
|
+
insert(_el$62, createComponent(Show, {
|
|
9913
9998
|
get when() {
|
|
9914
9999
|
return currentHealth().mcp.endpoint;
|
|
9915
10000
|
},
|
|
9916
10001
|
children: (endpoint) => (() => {
|
|
9917
|
-
var _el$
|
|
9918
|
-
insert(_el$
|
|
9919
|
-
return _el$
|
|
10002
|
+
var _el$69 = _tmpl$26(), _el$70 = _el$69.firstChild, _el$71 = _el$70.nextSibling;
|
|
10003
|
+
insert(_el$71, endpoint);
|
|
10004
|
+
return _el$69;
|
|
9920
10005
|
})()
|
|
9921
10006
|
}), null);
|
|
9922
|
-
insert(_el$
|
|
10007
|
+
insert(_el$62, createComponent(Show, {
|
|
9923
10008
|
get when() {
|
|
9924
10009
|
return currentHealth().startupIssues.length > 0;
|
|
9925
10010
|
},
|
|
9926
10011
|
get children() {
|
|
9927
|
-
var _el$
|
|
9928
|
-
insert(_el$
|
|
9929
|
-
var _el$
|
|
9930
|
-
insert(_el$
|
|
9931
|
-
insert(_el$
|
|
9932
|
-
insert(_el$
|
|
10012
|
+
var _el$68 = _tmpl$24();
|
|
10013
|
+
insert(_el$68, () => currentHealth().startupIssues.map((issue) => (() => {
|
|
10014
|
+
var _el$72 = _tmpl$27(), _el$73 = _el$72.firstChild, _el$74 = _el$73.nextSibling;
|
|
10015
|
+
insert(_el$73, () => issue.title);
|
|
10016
|
+
insert(_el$74, () => issue.detail);
|
|
10017
|
+
insert(_el$72, createComponent(Show, {
|
|
9933
10018
|
get when() {
|
|
9934
10019
|
return issue.action;
|
|
9935
10020
|
},
|
|
9936
10021
|
children: (action) => (() => {
|
|
9937
|
-
var _el$
|
|
9938
|
-
insert(_el$
|
|
9939
|
-
return _el$
|
|
10022
|
+
var _el$75 = _tmpl$17();
|
|
10023
|
+
insert(_el$75, action);
|
|
10024
|
+
return _el$75;
|
|
9940
10025
|
})()
|
|
9941
10026
|
}), null);
|
|
9942
10027
|
createRenderEffect((_p$) => {
|
|
9943
10028
|
var _v$3 = !!(issue.severity === "warning"), _v$4 = !!(issue.severity === "error");
|
|
9944
|
-
_v$3 !== _p$.e && _el$
|
|
9945
|
-
_v$4 !== _p$.t && _el$
|
|
10029
|
+
_v$3 !== _p$.e && _el$72.classList.toggle("warning", _p$.e = _v$3);
|
|
10030
|
+
_v$4 !== _p$.t && _el$72.classList.toggle("error", _p$.t = _v$4);
|
|
9946
10031
|
return _p$;
|
|
9947
10032
|
}, {
|
|
9948
10033
|
e: void 0,
|
|
9949
10034
|
t: void 0
|
|
9950
10035
|
});
|
|
9951
|
-
return _el$
|
|
10036
|
+
return _el$72;
|
|
9952
10037
|
})()));
|
|
9953
|
-
return _el$
|
|
10038
|
+
return _el$68;
|
|
9954
10039
|
}
|
|
9955
10040
|
}), null);
|
|
9956
|
-
return _el$
|
|
10041
|
+
return _el$62;
|
|
9957
10042
|
})()
|
|
9958
|
-
}), _el$
|
|
9959
|
-
_el$
|
|
9960
|
-
setAttribute(_el$
|
|
10043
|
+
}), _el$45);
|
|
10044
|
+
_el$47.$$input = (e) => props.setObsidianVaultPath(e.currentTarget.value);
|
|
10045
|
+
setAttribute(_el$47, "spellcheck", false);
|
|
9961
10046
|
createRenderEffect((_p$) => {
|
|
9962
10047
|
var _v$ = !!props.chat.enabled(), _v$2 = props.chat.enabled();
|
|
9963
10048
|
_v$ !== _p$.e && _el$5.classList.toggle("on", _p$.e = _v$);
|
|
@@ -9967,9 +10052,9 @@ const SettingsAgent = (props) => {
|
|
|
9967
10052
|
e: void 0,
|
|
9968
10053
|
t: void 0
|
|
9969
10054
|
});
|
|
9970
|
-
createRenderEffect(() => _el$
|
|
9971
|
-
createRenderEffect(() => _el$
|
|
9972
|
-
createRenderEffect(() => _el$
|
|
10055
|
+
createRenderEffect(() => _el$37.value = props.mcpPort());
|
|
10056
|
+
createRenderEffect(() => _el$44.value = props.agentTranscriptMode());
|
|
10057
|
+
createRenderEffect(() => _el$47.value = props.obsidianVaultPath());
|
|
9973
10058
|
return _el$;
|
|
9974
10059
|
})();
|
|
9975
10060
|
};
|
|
@@ -11339,6 +11424,7 @@ var _tmpl$$3 = /* @__PURE__ */ template(`<div class=settings-compact-upsell><spa
|
|
|
11339
11424
|
const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
|
|
11340
11425
|
id: p.id,
|
|
11341
11426
|
name: p.name,
|
|
11427
|
+
type: p.type,
|
|
11342
11428
|
requiresKey: p.requiresApiKey,
|
|
11343
11429
|
needsBaseUrl: p.id === "llama_cpp" || p.id === "custom",
|
|
11344
11430
|
defaultBaseUrl: p.defaultBaseUrl,
|
|
@@ -11664,9 +11750,13 @@ const Settings = () => {
|
|
|
11664
11750
|
const [chatBaseUrl, setChatBaseUrl] = createSignal("");
|
|
11665
11751
|
const [chatReasoningEffort, setChatReasoningEffort] = createSignal("off");
|
|
11666
11752
|
const chatProviderMeta = () => CHAT_PROVIDERS.find((p) => p.id === chatProviderId()) ?? CHAT_PROVIDERS[0];
|
|
11753
|
+
const providerType = () => chatProviderMeta()?.type;
|
|
11667
11754
|
const [providerModels, setProviderModels] = createSignal([]);
|
|
11668
11755
|
const [modelFetchState, setModelFetchState] = createSignal("idle");
|
|
11669
11756
|
const [modelFetchWarning, setModelFetchWarning] = createSignal(null);
|
|
11757
|
+
const [codexAuthStatus, setCodexAuthStatus] = createSignal("idle");
|
|
11758
|
+
const [codexAccountEmail, setCodexAccountEmail] = createSignal("");
|
|
11759
|
+
const [codexAuthError, setCodexAuthError] = createSignal("");
|
|
11670
11760
|
const resetProviderModels = () => {
|
|
11671
11761
|
setProviderModels([]);
|
|
11672
11762
|
setModelFetchState("idle");
|
|
@@ -11711,6 +11801,30 @@ const Settings = () => {
|
|
|
11711
11801
|
setModelFetchState("error");
|
|
11712
11802
|
});
|
|
11713
11803
|
};
|
|
11804
|
+
const startCodexAuth = async () => {
|
|
11805
|
+
setCodexAuthStatus("waiting");
|
|
11806
|
+
setCodexAuthError("");
|
|
11807
|
+
try {
|
|
11808
|
+
const result = await window.vessel.codex.startAuth();
|
|
11809
|
+
if (result.ok) {
|
|
11810
|
+
setCodexAccountEmail(result.accountEmail);
|
|
11811
|
+
setCodexAuthStatus("connected");
|
|
11812
|
+
setChatHasStoredApiKey(true);
|
|
11813
|
+
} else {
|
|
11814
|
+
setCodexAuthStatus("error");
|
|
11815
|
+
setCodexAuthError(result.error);
|
|
11816
|
+
}
|
|
11817
|
+
} catch (err) {
|
|
11818
|
+
setCodexAuthStatus("error");
|
|
11819
|
+
setCodexAuthError(err instanceof Error ? err.message : "Unknown error");
|
|
11820
|
+
}
|
|
11821
|
+
};
|
|
11822
|
+
const disconnectCodex = async () => {
|
|
11823
|
+
await window.vessel.codex.disconnect();
|
|
11824
|
+
setCodexAuthStatus("idle");
|
|
11825
|
+
setCodexAccountEmail("");
|
|
11826
|
+
setChatHasStoredApiKey(false);
|
|
11827
|
+
};
|
|
11714
11828
|
createEffect(() => {
|
|
11715
11829
|
if (!chatEnabled()) return;
|
|
11716
11830
|
const meta = chatProviderMeta();
|
|
@@ -11754,6 +11868,9 @@ const Settings = () => {
|
|
|
11754
11868
|
setChatHasStoredApiKey(false);
|
|
11755
11869
|
setChatReasoningEffort("off");
|
|
11756
11870
|
}
|
|
11871
|
+
if (cp?.id === "openai_codex" && cp.hasApiKey) {
|
|
11872
|
+
setCodexAuthStatus("connected");
|
|
11873
|
+
}
|
|
11757
11874
|
setTelemetryEnabled(settings.telemetryEnabled !== false);
|
|
11758
11875
|
const dp = settings.domainPolicy ?? {
|
|
11759
11876
|
allowedDomains: [],
|
|
@@ -11799,9 +11916,20 @@ const Settings = () => {
|
|
|
11799
11916
|
});
|
|
11800
11917
|
}
|
|
11801
11918
|
});
|
|
11919
|
+
const unsubCodex = window.vessel.codex.onAuthStatus((payload) => {
|
|
11920
|
+
if (payload.status === "waiting") {
|
|
11921
|
+
setCodexAuthStatus("waiting");
|
|
11922
|
+
} else if (payload.status === "exchanging") {
|
|
11923
|
+
setCodexAuthStatus("exchanging");
|
|
11924
|
+
} else if (payload.status === "error") {
|
|
11925
|
+
setCodexAuthStatus("error");
|
|
11926
|
+
setCodexAuthError(payload.error || "Unknown error");
|
|
11927
|
+
}
|
|
11928
|
+
});
|
|
11802
11929
|
onCleanup(() => {
|
|
11803
11930
|
unsubscribe2();
|
|
11804
11931
|
unsubscribePremium();
|
|
11932
|
+
unsubCodex();
|
|
11805
11933
|
});
|
|
11806
11934
|
});
|
|
11807
11935
|
createEffect(() => {
|
|
@@ -11971,7 +12099,15 @@ const Settings = () => {
|
|
|
11971
12099
|
modelFetchState,
|
|
11972
12100
|
modelFetchWarning,
|
|
11973
12101
|
doFetchModels,
|
|
11974
|
-
resetProviderModels
|
|
12102
|
+
resetProviderModels,
|
|
12103
|
+
codexAuthStatus,
|
|
12104
|
+
codexAccountEmail,
|
|
12105
|
+
setCodexAccountEmail,
|
|
12106
|
+
codexAuthError,
|
|
12107
|
+
setCodexAuthError,
|
|
12108
|
+
providerType,
|
|
12109
|
+
startCodexAuth,
|
|
12110
|
+
disconnectCodex
|
|
11975
12111
|
},
|
|
11976
12112
|
mcpPort,
|
|
11977
12113
|
setMcpPort,
|