@quanta-intellect/vessel-browser 0.1.114 → 0.1.115
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.
|
@@ -2301,7 +2301,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
2301
2301
|
}
|
|
2302
2302
|
return "idle";
|
|
2303
2303
|
}
|
|
2304
|
-
var _tmpl$$p = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$o = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$l = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$l = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$i = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$g = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$
|
|
2304
|
+
var _tmpl$$p = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$o = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$l = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$l = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$i = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$g = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$e = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$a = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$9 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
|
|
2305
2305
|
const TAB_CLOSE_MS = 200;
|
|
2306
2306
|
function stringToHue(str) {
|
|
2307
2307
|
let hash = 0;
|
|
@@ -2490,7 +2490,7 @@ const TabBar = () => {
|
|
|
2490
2490
|
insert(_el$12, (() => {
|
|
2491
2491
|
var _c$ = memo(() => !!!tab.isPinned);
|
|
2492
2492
|
return () => _c$() && [memo(() => memo(() => !!modelActiveTabIds().has(tab.id))() && _tmpl$0$7()), (() => {
|
|
2493
|
-
var _el$14 = _tmpl$7$
|
|
2493
|
+
var _el$14 = _tmpl$7$e();
|
|
2494
2494
|
insert(_el$14, () => tab.title || "New Tab");
|
|
2495
2495
|
return _el$14;
|
|
2496
2496
|
})(), createComponent(Show, {
|
|
@@ -3026,7 +3026,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
3026
3026
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
3027
3027
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
3028
3028
|
};
|
|
3029
|
-
var _tmpl$$n = /* @__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$m = /* @__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$j = /* @__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$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$
|
|
3029
|
+
var _tmpl$$n = /* @__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$m = /* @__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$j = /* @__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$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$d = /* @__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$9 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$8 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__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$6 = /* @__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$6 = /* @__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$6 = /* @__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$6 = /* @__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$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__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$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$4 = /* @__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$4 = /* @__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$4 = /* @__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$4 = /* @__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$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__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$3 = /* @__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$3 = /* @__PURE__ */ template(`<li>`);
|
|
3030
3030
|
const AddressBar = (props) => {
|
|
3031
3031
|
const {
|
|
3032
3032
|
activeTab,
|
|
@@ -3479,7 +3479,7 @@ const AddressBar = (props) => {
|
|
|
3479
3479
|
return pageDiff();
|
|
3480
3480
|
},
|
|
3481
3481
|
get children() {
|
|
3482
|
-
var _el$18 = _tmpl$7$
|
|
3482
|
+
var _el$18 = _tmpl$7$d();
|
|
3483
3483
|
_el$18.$$click = () => void openDiffTimeline();
|
|
3484
3484
|
return _el$18;
|
|
3485
3485
|
}
|
|
@@ -3600,7 +3600,7 @@ const AddressBar = (props) => {
|
|
|
3600
3600
|
return change.addedItems;
|
|
3601
3601
|
},
|
|
3602
3602
|
children: (item) => (() => {
|
|
3603
|
-
var _el$80 = _tmpl$29$
|
|
3603
|
+
var _el$80 = _tmpl$29$3();
|
|
3604
3604
|
insert(_el$80, item);
|
|
3605
3605
|
return _el$80;
|
|
3606
3606
|
})()
|
|
@@ -3619,7 +3619,7 @@ const AddressBar = (props) => {
|
|
|
3619
3619
|
return change.removedItems;
|
|
3620
3620
|
},
|
|
3621
3621
|
children: (item) => (() => {
|
|
3622
|
-
var _el$81 = _tmpl$29$
|
|
3622
|
+
var _el$81 = _tmpl$29$3();
|
|
3623
3623
|
insert(_el$81, item);
|
|
3624
3624
|
return _el$81;
|
|
3625
3625
|
})()
|
|
@@ -3870,7 +3870,7 @@ const HighlightNotifications = (props) => {
|
|
|
3870
3870
|
});
|
|
3871
3871
|
};
|
|
3872
3872
|
delegateEvents(["click"]);
|
|
3873
|
-
var _tmpl$$k = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$k = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _tmpl$3$i = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$i = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$f = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$e = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$
|
|
3873
|
+
var _tmpl$$k = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$k = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _tmpl$3$i = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$i = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$f = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$e = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$c = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
|
|
3874
3874
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
3875
3875
|
const TOAST_EXIT_MS = 300;
|
|
3876
3876
|
function formatBytes$1(bytes) {
|
|
@@ -3967,7 +3967,7 @@ const DownloadToast = () => {
|
|
|
3967
3967
|
return downloads();
|
|
3968
3968
|
},
|
|
3969
3969
|
children: (dl) => (() => {
|
|
3970
|
-
var _el$2 = _tmpl$7$
|
|
3970
|
+
var _el$2 = _tmpl$7$c(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
3971
3971
|
insert(_el$4, () => dl.filename);
|
|
3972
3972
|
insert(_el$3, createComponent(Show, {
|
|
3973
3973
|
get when() {
|
|
@@ -4334,7 +4334,7 @@ function formatTime(iso, options) {
|
|
|
4334
4334
|
...options?.includeSeconds && { second: "2-digit" }
|
|
4335
4335
|
});
|
|
4336
4336
|
}
|
|
4337
|
-
var _tmpl$$g = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$g = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$f = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$f = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$
|
|
4337
|
+
var _tmpl$$g = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$g = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$f = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$f = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$b = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
|
|
4338
4338
|
const AgentTranscriptDock = () => {
|
|
4339
4339
|
const {
|
|
4340
4340
|
runtimeState: runtimeState2
|
|
@@ -4426,7 +4426,7 @@ const AgentTranscriptDock = () => {
|
|
|
4426
4426
|
return visibleEntries();
|
|
4427
4427
|
},
|
|
4428
4428
|
children: (entry) => (() => {
|
|
4429
|
-
var _el$12 = _tmpl$7$
|
|
4429
|
+
var _el$12 = _tmpl$7$b(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
|
|
4430
4430
|
insert(_el$14, () => entry.title || entry.kind);
|
|
4431
4431
|
insert(_el$15, () => formatTime(entry.updatedAt));
|
|
4432
4432
|
insert(_el$16, () => entry.text);
|
|
@@ -4861,7 +4861,101 @@ function useAnimatedPresence(isOpen, exitDurationMs) {
|
|
|
4861
4861
|
});
|
|
4862
4862
|
return { visible, closing };
|
|
4863
4863
|
}
|
|
4864
|
-
|
|
4864
|
+
function useProviderAuthSetup(options = {}) {
|
|
4865
|
+
const [codexAuthStatus, setCodexAuthStatus] = createSignal("idle");
|
|
4866
|
+
const [codexAccountEmail, setCodexAccountEmail] = createSignal("");
|
|
4867
|
+
const [codexAuthError, setCodexAuthError] = createSignal("");
|
|
4868
|
+
const [openRouterAuthStatus, setOpenRouterAuthStatus] = createSignal("idle");
|
|
4869
|
+
const [openRouterAuthError, setOpenRouterAuthError] = createSignal("");
|
|
4870
|
+
const markProviderConnected = (providerId, hasApiKey) => {
|
|
4871
|
+
setCodexAuthStatus(providerId === "openai_codex" && hasApiKey ? "connected" : "idle");
|
|
4872
|
+
setOpenRouterAuthStatus(providerId === "openrouter" && hasApiKey ? "connected" : "idle");
|
|
4873
|
+
};
|
|
4874
|
+
const startCodexAuth = async () => {
|
|
4875
|
+
setCodexAuthStatus("waiting");
|
|
4876
|
+
setCodexAuthError("");
|
|
4877
|
+
try {
|
|
4878
|
+
const result = await window.vessel.codex.startAuth();
|
|
4879
|
+
if (result.ok) {
|
|
4880
|
+
setCodexAccountEmail(result.accountEmail);
|
|
4881
|
+
setCodexAuthStatus("connected");
|
|
4882
|
+
await options.onCodexConnected?.();
|
|
4883
|
+
} else {
|
|
4884
|
+
setCodexAuthStatus("error");
|
|
4885
|
+
setCodexAuthError(result.error);
|
|
4886
|
+
}
|
|
4887
|
+
} catch (err) {
|
|
4888
|
+
setCodexAuthStatus("error");
|
|
4889
|
+
setCodexAuthError(err instanceof Error ? err.message : "Unknown error");
|
|
4890
|
+
}
|
|
4891
|
+
};
|
|
4892
|
+
const disconnectCodex = async () => {
|
|
4893
|
+
await window.vessel.codex.disconnect();
|
|
4894
|
+
setCodexAuthStatus("idle");
|
|
4895
|
+
setCodexAccountEmail("");
|
|
4896
|
+
await options.onCodexDisconnected?.();
|
|
4897
|
+
};
|
|
4898
|
+
const startOpenRouterAuth = async () => {
|
|
4899
|
+
setOpenRouterAuthStatus("waiting");
|
|
4900
|
+
setOpenRouterAuthError("");
|
|
4901
|
+
try {
|
|
4902
|
+
const result = await window.vessel.openrouter.startAuth();
|
|
4903
|
+
if (result.ok) {
|
|
4904
|
+
setOpenRouterAuthStatus("connected");
|
|
4905
|
+
await options.onOpenRouterConnected?.(result);
|
|
4906
|
+
} else {
|
|
4907
|
+
setOpenRouterAuthStatus("error");
|
|
4908
|
+
setOpenRouterAuthError(result.error);
|
|
4909
|
+
}
|
|
4910
|
+
} catch (err) {
|
|
4911
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
4912
|
+
setOpenRouterAuthStatus("error");
|
|
4913
|
+
setOpenRouterAuthError(message);
|
|
4914
|
+
}
|
|
4915
|
+
};
|
|
4916
|
+
onMount(() => {
|
|
4917
|
+
const unsubCodex = window.vessel.codex.onAuthStatus((payload) => {
|
|
4918
|
+
if (payload.status === "waiting") {
|
|
4919
|
+
setCodexAuthStatus("waiting");
|
|
4920
|
+
} else if (payload.status === "exchanging") {
|
|
4921
|
+
setCodexAuthStatus("exchanging");
|
|
4922
|
+
} else if (payload.status === "error") {
|
|
4923
|
+
setCodexAuthStatus("error");
|
|
4924
|
+
setCodexAuthError(payload.error || "Unknown error");
|
|
4925
|
+
}
|
|
4926
|
+
});
|
|
4927
|
+
const unsubOpenRouter = window.vessel.openrouter.onAuthStatus((payload) => {
|
|
4928
|
+
if (payload.status === "waiting") {
|
|
4929
|
+
setOpenRouterAuthStatus("waiting");
|
|
4930
|
+
} else if (payload.status === "exchanging") {
|
|
4931
|
+
setOpenRouterAuthStatus("exchanging");
|
|
4932
|
+
} else if (payload.status === "connected") {
|
|
4933
|
+
setOpenRouterAuthStatus("connected");
|
|
4934
|
+
} else if (payload.status === "error") {
|
|
4935
|
+
setOpenRouterAuthStatus("error");
|
|
4936
|
+
setOpenRouterAuthError(payload.error || "Unknown error");
|
|
4937
|
+
}
|
|
4938
|
+
});
|
|
4939
|
+
onCleanup(() => {
|
|
4940
|
+
unsubCodex();
|
|
4941
|
+
unsubOpenRouter();
|
|
4942
|
+
});
|
|
4943
|
+
});
|
|
4944
|
+
return {
|
|
4945
|
+
codexAuthStatus,
|
|
4946
|
+
codexAccountEmail,
|
|
4947
|
+
setCodexAccountEmail,
|
|
4948
|
+
codexAuthError,
|
|
4949
|
+
setCodexAuthError,
|
|
4950
|
+
openRouterAuthStatus,
|
|
4951
|
+
openRouterAuthError,
|
|
4952
|
+
markProviderConnected,
|
|
4953
|
+
startCodexAuth,
|
|
4954
|
+
disconnectCodex,
|
|
4955
|
+
startOpenRouterAuth
|
|
4956
|
+
};
|
|
4957
|
+
}
|
|
4958
|
+
var _tmpl$$f = /* @__PURE__ */ template(`<p class=command-bar-no-provider-error>`), _tmpl$2$f = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Start with OpenRouter's free model router, or open Settings for more providers.</p><button class=command-bar-no-provider-btn></button><button class=command-bar-no-provider-link>More options`), _tmpl$3$e = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$4$e = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$5$c = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$6$c = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$7$a = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
|
|
4865
4959
|
const COMMAND_BAR_EXIT_MS = 200;
|
|
4866
4960
|
const CommandBar = () => {
|
|
4867
4961
|
const {
|
|
@@ -4881,8 +4975,18 @@ const CommandBar = () => {
|
|
|
4881
4975
|
cancel
|
|
4882
4976
|
} = useAI();
|
|
4883
4977
|
const [input, setInput] = createSignal("");
|
|
4884
|
-
|
|
4978
|
+
let inputRef;
|
|
4979
|
+
const [settings, {
|
|
4980
|
+
refetch: refetchSettings
|
|
4981
|
+
}] = createResource(() => commandBarOpen2(), async (open) => open ? window.vessel.settings.get() : null);
|
|
4982
|
+
const providerAuth = useProviderAuthSetup({
|
|
4983
|
+
onOpenRouterConnected: async () => {
|
|
4984
|
+
await refetchSettings();
|
|
4985
|
+
setTimeout(() => inputRef?.focus(), 0);
|
|
4986
|
+
}
|
|
4987
|
+
});
|
|
4885
4988
|
const hasProvider = () => settings()?.chatProvider !== null && settings()?.chatProvider !== void 0;
|
|
4989
|
+
const openRouterWorking = () => providerAuth.openRouterAuthStatus() === "waiting" || providerAuth.openRouterAuthStatus() === "exchanging";
|
|
4886
4990
|
const handleSubmit = async (e) => {
|
|
4887
4991
|
e.preventDefault();
|
|
4888
4992
|
const val = input().trim();
|
|
@@ -4908,6 +5012,7 @@ const CommandBar = () => {
|
|
|
4908
5012
|
}
|
|
4909
5013
|
};
|
|
4910
5014
|
const setRef = (el) => {
|
|
5015
|
+
inputRef = el;
|
|
4911
5016
|
setTimeout(() => el.focus(), 0);
|
|
4912
5017
|
};
|
|
4913
5018
|
return createComponent(Show, {
|
|
@@ -4915,8 +5020,8 @@ const CommandBar = () => {
|
|
|
4915
5020
|
return visible();
|
|
4916
5021
|
},
|
|
4917
5022
|
get children() {
|
|
4918
|
-
var _el$ = _tmpl$
|
|
4919
|
-
_el$
|
|
5023
|
+
var _el$ = _tmpl$5$c(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$12 = _el$3.nextSibling, _el$13 = _el$12.firstChild;
|
|
5024
|
+
_el$13.nextSibling;
|
|
4920
5025
|
addEventListener(_el$, "click", closeCommandBar, true);
|
|
4921
5026
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
4922
5027
|
_el$3.addEventListener("submit", handleSubmit);
|
|
@@ -4929,43 +5034,62 @@ const CommandBar = () => {
|
|
|
4929
5034
|
return !hasProvider();
|
|
4930
5035
|
},
|
|
4931
5036
|
get children() {
|
|
4932
|
-
var _el$6 = _tmpl
|
|
4933
|
-
_el$8.$$click = () =>
|
|
5037
|
+
var _el$6 = _tmpl$2$f(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling;
|
|
5038
|
+
_el$8.$$click = () => void providerAuth.startOpenRouterAuth();
|
|
5039
|
+
insert(_el$8, createComponent(Show, {
|
|
5040
|
+
get when() {
|
|
5041
|
+
return !openRouterWorking();
|
|
5042
|
+
},
|
|
5043
|
+
fallback: "Opening OpenRouter...",
|
|
5044
|
+
children: "Start free with OpenRouter"
|
|
5045
|
+
}));
|
|
5046
|
+
_el$9.$$click = () => {
|
|
4934
5047
|
closeCommandBar();
|
|
4935
5048
|
openSettings();
|
|
4936
5049
|
};
|
|
5050
|
+
insert(_el$6, createComponent(Show, {
|
|
5051
|
+
get when() {
|
|
5052
|
+
return providerAuth.openRouterAuthStatus() === "error";
|
|
5053
|
+
},
|
|
5054
|
+
get children() {
|
|
5055
|
+
var _el$0 = _tmpl$$f();
|
|
5056
|
+
insert(_el$0, () => providerAuth.openRouterAuthError());
|
|
5057
|
+
return _el$0;
|
|
5058
|
+
}
|
|
5059
|
+
}), null);
|
|
5060
|
+
createRenderEffect(() => _el$8.disabled = openRouterWorking());
|
|
4937
5061
|
return _el$6;
|
|
4938
5062
|
}
|
|
4939
|
-
}), _el$
|
|
5063
|
+
}), _el$12);
|
|
4940
5064
|
insert(_el$2, createComponent(Show, {
|
|
4941
5065
|
get when() {
|
|
4942
5066
|
return memo(() => !!(hasProvider() && recentQueries2().length > 0))() && !input().trim();
|
|
4943
5067
|
},
|
|
4944
5068
|
get children() {
|
|
4945
|
-
var _el$
|
|
4946
|
-
insert(_el$
|
|
5069
|
+
var _el$1 = _tmpl$3$e(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
|
|
5070
|
+
insert(_el$11, createComponent(For, {
|
|
4947
5071
|
get each() {
|
|
4948
5072
|
return recentQueries2();
|
|
4949
5073
|
},
|
|
4950
5074
|
children: (q) => (() => {
|
|
4951
|
-
var _el$
|
|
4952
|
-
_el$
|
|
4953
|
-
insert(_el$
|
|
4954
|
-
return _el$
|
|
5075
|
+
var _el$16 = _tmpl$6$c();
|
|
5076
|
+
_el$16.$$click = () => void handleRecentClick(q);
|
|
5077
|
+
insert(_el$16, q);
|
|
5078
|
+
return _el$16;
|
|
4955
5079
|
})()
|
|
4956
5080
|
}));
|
|
4957
|
-
return _el$
|
|
5081
|
+
return _el$1;
|
|
4958
5082
|
}
|
|
4959
|
-
}), _el$
|
|
4960
|
-
insert(_el$
|
|
5083
|
+
}), _el$12);
|
|
5084
|
+
insert(_el$12, createComponent(Show, {
|
|
4961
5085
|
get when() {
|
|
4962
5086
|
return hasProvider();
|
|
4963
5087
|
},
|
|
4964
5088
|
get fallback() {
|
|
4965
|
-
return _tmpl$
|
|
5089
|
+
return _tmpl$7$a();
|
|
4966
5090
|
},
|
|
4967
5091
|
get children() {
|
|
4968
|
-
return _tmpl$
|
|
5092
|
+
return _tmpl$4$e();
|
|
4969
5093
|
}
|
|
4970
5094
|
}), null);
|
|
4971
5095
|
createRenderEffect((_p$) => {
|
|
@@ -6817,7 +6941,7 @@ function renderKitPrompt(kit, values) {
|
|
|
6817
6941
|
(_, key) => values[key] ?? ""
|
|
6818
6942
|
);
|
|
6819
6943
|
}
|
|
6820
|
-
var _tmpl$$d = /* @__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$d = /* @__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$c = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$c = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$b = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$b = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$9 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$8 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$7 = /* @__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$5 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$5 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$5 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$5 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$5 = /* @__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$4 = /* @__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$4 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$4 = /* @__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$3 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$3 = /* @__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$3 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$3 = /* @__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$3 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$3 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$
|
|
6944
|
+
var _tmpl$$d = /* @__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$d = /* @__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$c = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$c = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$b = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$b = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$9 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$8 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$7 = /* @__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$5 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$5 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$5 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$5 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$5 = /* @__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$4 = /* @__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$4 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$4 = /* @__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$3 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$3 = /* @__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$3 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$3 = /* @__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$3 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$3 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$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>`);
|
|
6821
6945
|
const ICON_MAP = {
|
|
6822
6946
|
BookOpen: book_open_default,
|
|
6823
6947
|
Tag: tag_default,
|
|
@@ -7277,7 +7401,7 @@ const AutomationTab = (props) => {
|
|
|
7277
7401
|
return openMenuJobId() === job.id;
|
|
7278
7402
|
},
|
|
7279
7403
|
get children() {
|
|
7280
|
-
var _el$94 = _tmpl$29$
|
|
7404
|
+
var _el$94 = _tmpl$29$2(), _el$95 = _el$94.firstChild, _el$96 = _el$95.nextSibling, _el$97 = _el$96.nextSibling, _el$98 = _el$97.nextSibling, _el$99 = _el$98.nextSibling;
|
|
7281
7405
|
_el$94.$$click = (e) => e.stopPropagation();
|
|
7282
7406
|
_el$95.$$click = () => handleOpenEditTask(job);
|
|
7283
7407
|
_el$96.$$click = () => handleOpenEditSchedule(job);
|
|
@@ -8519,7 +8643,7 @@ const PageDiffTimeline = () => {
|
|
|
8519
8643
|
})();
|
|
8520
8644
|
};
|
|
8521
8645
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
8522
|
-
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$8 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$8 = /* @__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$4 = /* @__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(`<button class=history-entry><span class=history-entry-title>Load more history</span><span class=history-entry-url>Showing <!> of `), _tmpl$14$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$15$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$16$1 = /* @__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$17$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$18$1 = /* @__PURE__ */ template(`<span>`), _tmpl$19$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$21$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$22$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$23$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$24$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$25$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$26$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$30 = /* @__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><button class=sidebar-tab role=tab>Research<span class=sidebar-tab-beta>Beta</span></button></div><div class=sidebar-messages><div>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$32 = /* @__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$33 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$34 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$35 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$36 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$37 = /* @__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$38 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$40 = /* @__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$41 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$42 = /* @__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$43 = /* @__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$44 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$45 = /* @__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$46 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$47 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$48 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$53 = /* @__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$54 = /* @__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$55 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$56 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$57 = /* @__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$58 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$59 = /* @__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$60 = /* @__PURE__ */ template(`<div>`), _tmpl$61 = /* @__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$62 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$63 = /* @__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$64 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
8646
|
+
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$8 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$8 = /* @__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$4 = /* @__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(`<button class=history-entry><span class=history-entry-title>Load more history</span><span class=history-entry-url>Showing <!> of `), _tmpl$14$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$15$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$16$1 = /* @__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$17$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$18$1 = /* @__PURE__ */ template(`<span>`), _tmpl$19$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$21$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$22$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$23$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$24$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$25$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$26$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$30 = /* @__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><button class=sidebar-tab role=tab>Research<span class=sidebar-tab-beta>Beta</span></button></div><div class=sidebar-messages><div>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$32 = /* @__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$33 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$34 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$35 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$36 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$37 = /* @__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$38 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$40 = /* @__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$41 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$42 = /* @__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$43 = /* @__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$44 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$45 = /* @__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$46 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$47 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$48 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$53 = /* @__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$54 = /* @__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$55 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$56 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$57 = /* @__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$58 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$59 = /* @__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$60 = /* @__PURE__ */ template(`<div>`), _tmpl$61 = /* @__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$62 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$63 = /* @__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$64 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
8523
8647
|
const UNSORTED_FOLDER = {
|
|
8524
8648
|
id: "unsorted",
|
|
8525
8649
|
name: "Unsorted",
|
|
@@ -10069,7 +10193,7 @@ ${contextBlock}` : contextBlock);
|
|
|
10069
10193
|
return _el$141;
|
|
10070
10194
|
}
|
|
10071
10195
|
}), (() => {
|
|
10072
|
-
var _el$146 = _tmpl$29(), _el$147 = _el$146.firstChild, _el$148 = _el$147.nextSibling;
|
|
10196
|
+
var _el$146 = _tmpl$29$1(), _el$147 = _el$146.firstChild, _el$148 = _el$147.nextSibling;
|
|
10073
10197
|
_el$147.$$keydown = (e) => {
|
|
10074
10198
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
10075
10199
|
e.preventDefault();
|
|
@@ -10599,8 +10723,9 @@ const PROVIDERS = {
|
|
|
10599
10723
|
openrouter: {
|
|
10600
10724
|
id: "openrouter",
|
|
10601
10725
|
name: "OpenRouter",
|
|
10602
|
-
defaultModel: "
|
|
10726
|
+
defaultModel: "openrouter/free",
|
|
10603
10727
|
models: [
|
|
10728
|
+
"openrouter/free",
|
|
10604
10729
|
"anthropic/claude-sonnet-4",
|
|
10605
10730
|
"anthropic/claude-haiku-4",
|
|
10606
10731
|
"openai/gpt-4o",
|
|
@@ -10792,7 +10917,7 @@ const SettingsGeneral = (props) => {
|
|
|
10792
10917
|
})();
|
|
10793
10918
|
};
|
|
10794
10919
|
delegateEvents(["click", "input"]);
|
|
10795
|
-
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$
|
|
10920
|
+
var _tmpl$$7 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div class=settings-callout><div class=settings-callout-title>Start With Free AI</div><p class=settings-callout-copy>Connect OpenRouter and Vessel will use the free model router automatically.</p><div class=settings-inline-actions style=margin-top:12px><button type=button class=settings-secondary-btn>`), _tmpl$3$6 = /* @__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$4$6 = /* @__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$5$5 = /* @__PURE__ */ template(`<p class=settings-hint><button type=button class=settings-link-btn>Disconnect`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label>Account`), _tmpl$7$4 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8$3 = /* @__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$9$2 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0$1 = /* @__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$1$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11$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$12$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$13$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$14$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$15$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$16 = /* @__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 class=settings-inline-actions><button type=button class=settings-secondary-btn>Regenerate MCP token</button></div></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$17 = /* @__PURE__ */ template(`<option>`), _tmpl$18 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)> <button type=button class=settings-link-btn>Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<div>`), _tmpl$20 = /* @__PURE__ */ template(`<button type=button class=settings-btn>Try Again`), _tmpl$21 = /* @__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$22 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$24 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$25 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$26 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$27 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$28 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`);
|
|
10796
10921
|
const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
|
|
10797
10922
|
id: p.id,
|
|
10798
10923
|
name: p.name,
|
|
@@ -10822,17 +10947,48 @@ const REASONING_EFFORT_OPTIONS = [{
|
|
|
10822
10947
|
const SettingsAgent = (props) => {
|
|
10823
10948
|
const [mcpTokenMessage, setMcpTokenMessage] = createSignal(null);
|
|
10824
10949
|
const chatMeta = () => CHAT_PROVIDERS$1.find((p) => p.id === props.chat.providerId()) ?? CHAT_PROVIDERS$1[0];
|
|
10950
|
+
const openRouterConnecting = () => props.chat.openRouterAuthStatus() === "waiting" || props.chat.openRouterAuthStatus() === "exchanging";
|
|
10825
10951
|
return (() => {
|
|
10826
|
-
var _el$ = _tmpl$
|
|
10827
|
-
_el
|
|
10952
|
+
var _el$ = _tmpl$16(), _el$2 = _el$.firstChild, _el$9 = _el$2.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$41 = _el$9.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.nextSibling, _el$44 = _el$43.nextSibling, _el$45 = _el$44.nextSibling, _el$46 = _el$45.firstChild, _el$47 = _el$41.nextSibling, _el$48 = _el$47.firstChild, _el$50 = _el$48.nextSibling, _el$51 = _el$47.nextSibling, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$54 = _el$51.nextSibling, _el$55 = _el$54.firstChild, _el$56 = _el$55.nextSibling;
|
|
10953
|
+
insert(_el$, createComponent(Show, {
|
|
10954
|
+
get when() {
|
|
10955
|
+
return !props.chat.enabled() || props.chat.providerId() === "openrouter" && !props.chat.hasStoredApiKey();
|
|
10956
|
+
},
|
|
10957
|
+
get children() {
|
|
10958
|
+
var _el$3 = _tmpl$2$7(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.firstChild;
|
|
10959
|
+
_el$7.$$click = () => props.chat.startOpenRouterAuth();
|
|
10960
|
+
insert(_el$7, createComponent(Show, {
|
|
10961
|
+
get when() {
|
|
10962
|
+
return !openRouterConnecting();
|
|
10963
|
+
},
|
|
10964
|
+
get fallback() {
|
|
10965
|
+
return props.chat.openRouterAuthStatus() === "exchanging" ? "Finishing setup..." : "Opening OpenRouter...";
|
|
10966
|
+
},
|
|
10967
|
+
children: "Start free with OpenRouter"
|
|
10968
|
+
}));
|
|
10969
|
+
insert(_el$3, createComponent(Show, {
|
|
10970
|
+
get when() {
|
|
10971
|
+
return props.chat.openRouterAuthStatus() === "error";
|
|
10972
|
+
},
|
|
10973
|
+
get children() {
|
|
10974
|
+
var _el$8 = _tmpl$$7();
|
|
10975
|
+
insert(_el$8, () => props.chat.openRouterAuthError());
|
|
10976
|
+
return _el$8;
|
|
10977
|
+
}
|
|
10978
|
+
}), null);
|
|
10979
|
+
createRenderEffect(() => _el$7.disabled = openRouterConnecting());
|
|
10980
|
+
return _el$3;
|
|
10981
|
+
}
|
|
10982
|
+
}), _el$9);
|
|
10983
|
+
_el$1.$$click = () => props.chat.setEnabled(!props.chat.enabled());
|
|
10828
10984
|
insert(_el$, createComponent(Show, {
|
|
10829
10985
|
get when() {
|
|
10830
10986
|
return props.chat.enabled();
|
|
10831
10987
|
},
|
|
10832
10988
|
get children() {
|
|
10833
10989
|
return [(() => {
|
|
10834
|
-
var _el$
|
|
10835
|
-
_el$
|
|
10990
|
+
var _el$10 = _tmpl$3$6(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling;
|
|
10991
|
+
_el$12.addEventListener("change", (e) => {
|
|
10836
10992
|
const id = e.currentTarget.value;
|
|
10837
10993
|
props.chat.setProviderId(id);
|
|
10838
10994
|
props.chat.setModel("");
|
|
@@ -10841,32 +10997,32 @@ const SettingsAgent = (props) => {
|
|
|
10841
10997
|
props.chat.setHasStoredApiKey(false);
|
|
10842
10998
|
props.chat.resetProviderModels();
|
|
10843
10999
|
});
|
|
10844
|
-
insert(_el$
|
|
11000
|
+
insert(_el$12, createComponent(For, {
|
|
10845
11001
|
each: CHAT_PROVIDERS$1,
|
|
10846
11002
|
children: (p) => (() => {
|
|
10847
|
-
var _el$
|
|
10848
|
-
insert(_el$
|
|
10849
|
-
createRenderEffect(() => _el$
|
|
10850
|
-
return _el$
|
|
11003
|
+
var _el$57 = _tmpl$17();
|
|
11004
|
+
insert(_el$57, () => p.name);
|
|
11005
|
+
createRenderEffect(() => _el$57.value = p.id);
|
|
11006
|
+
return _el$57;
|
|
10851
11007
|
})()
|
|
10852
11008
|
}));
|
|
10853
|
-
createRenderEffect(() => _el$
|
|
10854
|
-
return _el$
|
|
11009
|
+
createRenderEffect(() => _el$12.value = props.chat.providerId());
|
|
11010
|
+
return _el$10;
|
|
10855
11011
|
})(), createComponent(Show, {
|
|
10856
11012
|
get when() {
|
|
10857
11013
|
return props.chat.providerType() === "codex_oauth";
|
|
10858
11014
|
},
|
|
10859
11015
|
get children() {
|
|
10860
|
-
var _el$
|
|
10861
|
-
_el$
|
|
10862
|
-
insert(_el$
|
|
11016
|
+
var _el$13 = _tmpl$6$5();
|
|
11017
|
+
_el$13.firstChild;
|
|
11018
|
+
insert(_el$13, createComponent(Show, {
|
|
10863
11019
|
get when() {
|
|
10864
11020
|
return props.chat.codexAuthStatus() === "connected";
|
|
10865
11021
|
},
|
|
10866
11022
|
get fallback() {
|
|
10867
11023
|
return (() => {
|
|
10868
|
-
var _el$
|
|
10869
|
-
insert(_el$
|
|
11024
|
+
var _el$58 = _tmpl$19();
|
|
11025
|
+
insert(_el$58, createComponent(Show, {
|
|
10870
11026
|
get when() {
|
|
10871
11027
|
return props.chat.codexAuthStatus() === "waiting" || props.chat.codexAuthStatus() === "exchanging";
|
|
10872
11028
|
},
|
|
@@ -10877,297 +11033,297 @@ const SettingsAgent = (props) => {
|
|
|
10877
11033
|
},
|
|
10878
11034
|
get fallback() {
|
|
10879
11035
|
return (() => {
|
|
10880
|
-
var _el$
|
|
10881
|
-
_el$
|
|
10882
|
-
return _el$
|
|
11036
|
+
var _el$64 = _tmpl$21(), _el$65 = _el$64.firstChild;
|
|
11037
|
+
_el$65.$$click = () => props.chat.startCodexAuth();
|
|
11038
|
+
return _el$64;
|
|
10883
11039
|
})();
|
|
10884
11040
|
},
|
|
10885
11041
|
get children() {
|
|
10886
11042
|
return [(() => {
|
|
10887
|
-
var _el$
|
|
10888
|
-
insert(_el$
|
|
10889
|
-
return _el$
|
|
11043
|
+
var _el$62 = _tmpl$$7();
|
|
11044
|
+
insert(_el$62, () => props.chat.codexAuthError());
|
|
11045
|
+
return _el$62;
|
|
10890
11046
|
})(), (() => {
|
|
10891
|
-
var _el$
|
|
10892
|
-
_el$
|
|
10893
|
-
return _el$
|
|
11047
|
+
var _el$63 = _tmpl$20();
|
|
11048
|
+
_el$63.$$click = () => props.chat.startCodexAuth();
|
|
11049
|
+
return _el$63;
|
|
10894
11050
|
})()];
|
|
10895
11051
|
}
|
|
10896
11052
|
});
|
|
10897
11053
|
},
|
|
10898
11054
|
get children() {
|
|
10899
|
-
var _el$
|
|
10900
|
-
insert(_el$
|
|
11055
|
+
var _el$59 = _tmpl$18(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
|
|
11056
|
+
insert(_el$59, createComponent(Show, {
|
|
10901
11057
|
get when() {
|
|
10902
11058
|
return props.chat.codexAuthStatus() === "waiting";
|
|
10903
11059
|
},
|
|
10904
11060
|
fallback: "Exchanging authorization...",
|
|
10905
11061
|
children: "Waiting for browser login..."
|
|
10906
|
-
}), _el$
|
|
10907
|
-
_el$
|
|
10908
|
-
return _el$
|
|
11062
|
+
}), _el$60);
|
|
11063
|
+
_el$61.$$click = () => window.vessel.codex.cancelAuth();
|
|
11064
|
+
return _el$59;
|
|
10909
11065
|
}
|
|
10910
11066
|
}));
|
|
10911
|
-
return _el$
|
|
11067
|
+
return _el$58;
|
|
10912
11068
|
})();
|
|
10913
11069
|
},
|
|
10914
11070
|
get children() {
|
|
10915
11071
|
return [(() => {
|
|
10916
|
-
var _el$
|
|
10917
|
-
_el$
|
|
10918
|
-
insert(_el$
|
|
10919
|
-
return _el$
|
|
11072
|
+
var _el$15 = _tmpl$4$6(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
11073
|
+
_el$17.firstChild;
|
|
11074
|
+
insert(_el$17, () => props.chat.codexAccountEmail() || "ChatGPT", null);
|
|
11075
|
+
return _el$15;
|
|
10920
11076
|
})(), (() => {
|
|
10921
|
-
var _el$
|
|
10922
|
-
_el$
|
|
10923
|
-
return _el$
|
|
11077
|
+
var _el$19 = _tmpl$5$5(), _el$20 = _el$19.firstChild;
|
|
11078
|
+
_el$20.$$click = () => props.chat.disconnectCodex();
|
|
11079
|
+
return _el$19;
|
|
10924
11080
|
})()];
|
|
10925
11081
|
}
|
|
10926
11082
|
}), null);
|
|
10927
|
-
return _el$
|
|
11083
|
+
return _el$13;
|
|
10928
11084
|
}
|
|
10929
11085
|
}), createComponent(Show, {
|
|
10930
11086
|
get when() {
|
|
10931
11087
|
return memo(() => props.chat.providerType() !== "codex_oauth")() && (chatMeta().requiresKey || props.chat.providerId() === "custom");
|
|
10932
11088
|
},
|
|
10933
11089
|
get children() {
|
|
10934
|
-
var _el$
|
|
10935
|
-
_el$
|
|
10936
|
-
var _el$
|
|
10937
|
-
insert(_el$
|
|
11090
|
+
var _el$21 = _tmpl$0$1(), _el$22 = _el$21.firstChild;
|
|
11091
|
+
_el$22.firstChild;
|
|
11092
|
+
var _el$25 = _el$22.nextSibling;
|
|
11093
|
+
insert(_el$22, createComponent(Show, {
|
|
10938
11094
|
get when() {
|
|
10939
11095
|
return !chatMeta().requiresKey;
|
|
10940
11096
|
},
|
|
10941
11097
|
get children() {
|
|
10942
|
-
return _tmpl$
|
|
11098
|
+
return _tmpl$7$4();
|
|
10943
11099
|
}
|
|
10944
11100
|
}), null);
|
|
10945
|
-
_el$
|
|
11101
|
+
_el$25.$$input = (e) => {
|
|
10946
11102
|
props.chat.setApiKey(e.currentTarget.value);
|
|
10947
11103
|
if (e.currentTarget.value.trim()) {
|
|
10948
11104
|
props.chat.setHasStoredApiKey(true);
|
|
10949
11105
|
}
|
|
10950
11106
|
};
|
|
10951
|
-
setAttribute(_el$
|
|
10952
|
-
insert(_el$
|
|
11107
|
+
setAttribute(_el$25, "spellcheck", false);
|
|
11108
|
+
insert(_el$21, createComponent(Show, {
|
|
10953
11109
|
get when() {
|
|
10954
11110
|
return memo(() => !!props.chat.hasStoredApiKey())() && !props.chat.apiKey().trim();
|
|
10955
11111
|
},
|
|
10956
11112
|
get children() {
|
|
10957
|
-
return _tmpl$
|
|
11113
|
+
return _tmpl$8$3();
|
|
10958
11114
|
}
|
|
10959
11115
|
}), null);
|
|
10960
|
-
insert(_el$
|
|
11116
|
+
insert(_el$21, createComponent(Show, {
|
|
10961
11117
|
get when() {
|
|
10962
11118
|
return props.chat.providerId() === "custom";
|
|
10963
11119
|
},
|
|
10964
11120
|
get children() {
|
|
10965
|
-
return _tmpl$
|
|
11121
|
+
return _tmpl$9$2();
|
|
10966
11122
|
}
|
|
10967
11123
|
}), null);
|
|
10968
|
-
createRenderEffect(() => setAttribute(_el$
|
|
10969
|
-
createRenderEffect(() => _el$
|
|
10970
|
-
return _el$
|
|
11124
|
+
createRenderEffect(() => setAttribute(_el$25, "placeholder", props.chat.hasStoredApiKey() && !props.chat.apiKey().trim() ? "Stored securely. Enter a new key to replace it." : chatMeta().keyPlaceholder || "Bearer token or API key"));
|
|
11125
|
+
createRenderEffect(() => _el$25.value = props.chat.apiKey());
|
|
11126
|
+
return _el$21;
|
|
10971
11127
|
}
|
|
10972
11128
|
}), (() => {
|
|
10973
|
-
var _el$
|
|
10974
|
-
insert(_el$
|
|
11129
|
+
var _el$28 = _tmpl$11$1(), _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$32 = _el$30.firstChild;
|
|
11130
|
+
insert(_el$30, createComponent(Show, {
|
|
10975
11131
|
get when() {
|
|
10976
11132
|
return props.chat.providerModels().length > 0;
|
|
10977
11133
|
},
|
|
10978
11134
|
get fallback() {
|
|
10979
11135
|
return (() => {
|
|
10980
|
-
var _el$
|
|
10981
|
-
_el$
|
|
10982
|
-
setAttribute(_el$
|
|
10983
|
-
createRenderEffect(() => setAttribute(_el$
|
|
10984
|
-
createRenderEffect(() => _el$
|
|
10985
|
-
return _el$
|
|
11136
|
+
var _el$66 = _tmpl$22();
|
|
11137
|
+
_el$66.$$input = (e) => props.chat.setModel(e.currentTarget.value);
|
|
11138
|
+
setAttribute(_el$66, "spellcheck", false);
|
|
11139
|
+
createRenderEffect(() => setAttribute(_el$66, "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"));
|
|
11140
|
+
createRenderEffect(() => _el$66.value = props.chat.model());
|
|
11141
|
+
return _el$66;
|
|
10986
11142
|
})();
|
|
10987
11143
|
},
|
|
10988
11144
|
get children() {
|
|
10989
|
-
var _el$
|
|
10990
|
-
_el$
|
|
10991
|
-
insert(_el$
|
|
11145
|
+
var _el$31 = _tmpl$1$1();
|
|
11146
|
+
_el$31.addEventListener("change", (e) => props.chat.setModel(e.currentTarget.value));
|
|
11147
|
+
insert(_el$31, createComponent(For, {
|
|
10992
11148
|
get each() {
|
|
10993
11149
|
return props.chat.providerModels();
|
|
10994
11150
|
},
|
|
10995
11151
|
children: (m) => (() => {
|
|
10996
|
-
var _el$
|
|
10997
|
-
_el$
|
|
10998
|
-
insert(_el$
|
|
10999
|
-
return _el$
|
|
11152
|
+
var _el$67 = _tmpl$17();
|
|
11153
|
+
_el$67.value = m;
|
|
11154
|
+
insert(_el$67, m);
|
|
11155
|
+
return _el$67;
|
|
11000
11156
|
})()
|
|
11001
11157
|
}));
|
|
11002
|
-
createRenderEffect(() => _el$
|
|
11003
|
-
return _el$
|
|
11158
|
+
createRenderEffect(() => _el$31.value = props.chat.model());
|
|
11159
|
+
return _el$31;
|
|
11004
11160
|
}
|
|
11005
|
-
}), _el$
|
|
11006
|
-
_el$
|
|
11007
|
-
insert(_el$
|
|
11161
|
+
}), _el$32);
|
|
11162
|
+
_el$32.$$click = () => props.chat.doFetchModels();
|
|
11163
|
+
insert(_el$28, createComponent(Show, {
|
|
11008
11164
|
get when() {
|
|
11009
11165
|
return props.chat.modelFetchState() === "error";
|
|
11010
11166
|
},
|
|
11011
11167
|
get children() {
|
|
11012
|
-
return _tmpl$
|
|
11168
|
+
return _tmpl$10$1();
|
|
11013
11169
|
}
|
|
11014
11170
|
}), null);
|
|
11015
|
-
insert(_el$
|
|
11171
|
+
insert(_el$28, createComponent(Show, {
|
|
11016
11172
|
get when() {
|
|
11017
11173
|
return props.chat.modelFetchWarning();
|
|
11018
11174
|
},
|
|
11019
11175
|
children: (warning) => (() => {
|
|
11020
|
-
var _el$
|
|
11021
|
-
insert(_el$
|
|
11022
|
-
return _el$
|
|
11176
|
+
var _el$68 = _tmpl$23();
|
|
11177
|
+
insert(_el$68, warning);
|
|
11178
|
+
return _el$68;
|
|
11023
11179
|
})()
|
|
11024
11180
|
}), null);
|
|
11025
|
-
createRenderEffect(() => _el$
|
|
11026
|
-
return _el$
|
|
11181
|
+
createRenderEffect(() => _el$32.disabled = props.chat.modelFetchState() === "loading");
|
|
11182
|
+
return _el$28;
|
|
11027
11183
|
})(), createComponent(Show, {
|
|
11028
11184
|
get when() {
|
|
11029
11185
|
return chatMeta().needsBaseUrl || props.chat.providerId() === "custom";
|
|
11030
11186
|
},
|
|
11031
11187
|
get children() {
|
|
11032
|
-
var _el$
|
|
11033
|
-
_el$
|
|
11034
|
-
setAttribute(_el$
|
|
11035
|
-
createRenderEffect(() => setAttribute(_el$
|
|
11036
|
-
createRenderEffect(() => _el$
|
|
11037
|
-
return _el$
|
|
11188
|
+
var _el$34 = _tmpl$12$1(), _el$35 = _el$34.firstChild, _el$36 = _el$35.nextSibling;
|
|
11189
|
+
_el$36.$$input = (e) => props.chat.setBaseUrl(e.currentTarget.value);
|
|
11190
|
+
setAttribute(_el$36, "spellcheck", false);
|
|
11191
|
+
createRenderEffect(() => setAttribute(_el$36, "placeholder", chatMeta().defaultBaseUrl ?? "https://..."));
|
|
11192
|
+
createRenderEffect(() => _el$36.value = props.chat.baseUrl());
|
|
11193
|
+
return _el$34;
|
|
11038
11194
|
}
|
|
11039
11195
|
}), createComponent(Show, {
|
|
11040
11196
|
get when() {
|
|
11041
11197
|
return props.chat.providerId() === "llama_cpp";
|
|
11042
11198
|
},
|
|
11043
11199
|
get children() {
|
|
11044
|
-
return _tmpl$
|
|
11200
|
+
return _tmpl$13$1();
|
|
11045
11201
|
}
|
|
11046
11202
|
}), (() => {
|
|
11047
|
-
var _el$
|
|
11048
|
-
_el$
|
|
11049
|
-
insert(_el$
|
|
11203
|
+
var _el$38 = _tmpl$14$1(), _el$39 = _el$38.firstChild, _el$40 = _el$39.nextSibling;
|
|
11204
|
+
_el$40.addEventListener("change", (e) => props.chat.setReasoningEffort(e.currentTarget.value));
|
|
11205
|
+
insert(_el$40, createComponent(For, {
|
|
11050
11206
|
each: REASONING_EFFORT_OPTIONS,
|
|
11051
11207
|
children: (option) => (() => {
|
|
11052
|
-
var _el$
|
|
11053
|
-
insert(_el$
|
|
11054
|
-
createRenderEffect(() => _el$
|
|
11055
|
-
return _el$
|
|
11208
|
+
var _el$69 = _tmpl$17();
|
|
11209
|
+
insert(_el$69, () => option.label);
|
|
11210
|
+
createRenderEffect(() => _el$69.value = option.value);
|
|
11211
|
+
return _el$69;
|
|
11056
11212
|
})()
|
|
11057
11213
|
}));
|
|
11058
|
-
createRenderEffect(() => _el$
|
|
11059
|
-
return _el$
|
|
11214
|
+
createRenderEffect(() => _el$40.value = props.chat.reasoningEffort());
|
|
11215
|
+
return _el$38;
|
|
11060
11216
|
})()];
|
|
11061
11217
|
}
|
|
11062
|
-
}), _el$
|
|
11063
|
-
_el$
|
|
11064
|
-
setAttribute(_el$
|
|
11065
|
-
_el$
|
|
11218
|
+
}), _el$41);
|
|
11219
|
+
_el$43.$$input = (e) => props.setMcpPort(e.currentTarget.value);
|
|
11220
|
+
setAttribute(_el$43, "spellcheck", false);
|
|
11221
|
+
_el$46.$$click = async () => {
|
|
11066
11222
|
const result = await window.vessel.settings.regenerateMcpToken();
|
|
11067
11223
|
setMcpTokenMessage(result ? "MCP token regenerated. Update any external client config using Vessel's auth file." : "MCP server is not running, so no token was regenerated.");
|
|
11068
11224
|
};
|
|
11069
|
-
insert(_el$
|
|
11225
|
+
insert(_el$41, createComponent(Show, {
|
|
11070
11226
|
get when() {
|
|
11071
11227
|
return mcpTokenMessage();
|
|
11072
11228
|
},
|
|
11073
11229
|
children: (message) => (() => {
|
|
11074
|
-
var _el$
|
|
11075
|
-
insert(_el$
|
|
11076
|
-
return _el$
|
|
11230
|
+
var _el$70 = _tmpl$24();
|
|
11231
|
+
insert(_el$70, message);
|
|
11232
|
+
return _el$70;
|
|
11077
11233
|
})()
|
|
11078
11234
|
}), null);
|
|
11079
|
-
insert(_el$
|
|
11235
|
+
insert(_el$47, createComponent(Show, {
|
|
11080
11236
|
get when() {
|
|
11081
11237
|
return props.premiumActive();
|
|
11082
11238
|
},
|
|
11083
11239
|
get fallback() {
|
|
11084
|
-
return _tmpl$
|
|
11240
|
+
return _tmpl$25();
|
|
11085
11241
|
},
|
|
11086
11242
|
get children() {
|
|
11087
|
-
var _el$
|
|
11088
|
-
_el$
|
|
11089
|
-
createRenderEffect(() => _el$
|
|
11090
|
-
return _el$
|
|
11243
|
+
var _el$49 = _tmpl$15$1();
|
|
11244
|
+
_el$49.$$input = (e) => props.setMaxToolIterations(e.currentTarget.value);
|
|
11245
|
+
createRenderEffect(() => _el$49.value = props.maxToolIterations());
|
|
11246
|
+
return _el$49;
|
|
11091
11247
|
}
|
|
11092
|
-
}), _el$
|
|
11093
|
-
insert(_el$
|
|
11248
|
+
}), _el$50);
|
|
11249
|
+
insert(_el$50, createComponent(Show, {
|
|
11094
11250
|
get when() {
|
|
11095
11251
|
return props.premiumActive();
|
|
11096
11252
|
},
|
|
11097
11253
|
fallback: "Free tier: 50 tool calls per conversation turn. Upgrade to Vessel Premium to customize this limit (up to 1,000).",
|
|
11098
11254
|
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."
|
|
11099
11255
|
}));
|
|
11100
|
-
_el$
|
|
11256
|
+
_el$53.addEventListener("change", (e) => props.setAgentTranscriptMode(e.currentTarget.value));
|
|
11101
11257
|
insert(_el$, createComponent(Show, {
|
|
11102
11258
|
get when() {
|
|
11103
11259
|
return props.health();
|
|
11104
11260
|
},
|
|
11105
11261
|
children: (currentHealth) => (() => {
|
|
11106
|
-
var _el$
|
|
11107
|
-
_el$
|
|
11108
|
-
insert(_el$
|
|
11109
|
-
insert(_el$
|
|
11110
|
-
insert(_el$
|
|
11262
|
+
var _el$72 = _tmpl$27(), _el$73 = _el$72.firstChild, _el$74 = _el$73.nextSibling, _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling;
|
|
11263
|
+
_el$76.nextSibling;
|
|
11264
|
+
insert(_el$76, () => currentHealth().mcp.status);
|
|
11265
|
+
insert(_el$74, () => currentHealth().mcp.message, null);
|
|
11266
|
+
insert(_el$72, createComponent(Show, {
|
|
11111
11267
|
get when() {
|
|
11112
11268
|
return currentHealth().mcp.endpoint;
|
|
11113
11269
|
},
|
|
11114
11270
|
children: (endpoint) => (() => {
|
|
11115
|
-
var _el$
|
|
11116
|
-
insert(_el$
|
|
11117
|
-
return _el$
|
|
11271
|
+
var _el$79 = _tmpl$28(), _el$80 = _el$79.firstChild, _el$81 = _el$80.nextSibling;
|
|
11272
|
+
insert(_el$81, endpoint);
|
|
11273
|
+
return _el$79;
|
|
11118
11274
|
})()
|
|
11119
11275
|
}), null);
|
|
11120
|
-
insert(_el$
|
|
11276
|
+
insert(_el$72, createComponent(Show, {
|
|
11121
11277
|
get when() {
|
|
11122
11278
|
return currentHealth().startupIssues.length > 0;
|
|
11123
11279
|
},
|
|
11124
11280
|
get children() {
|
|
11125
|
-
var _el$
|
|
11126
|
-
insert(_el$
|
|
11127
|
-
var _el$
|
|
11128
|
-
insert(_el$
|
|
11129
|
-
insert(_el$
|
|
11130
|
-
insert(_el$
|
|
11281
|
+
var _el$78 = _tmpl$26();
|
|
11282
|
+
insert(_el$78, () => currentHealth().startupIssues.map((issue) => (() => {
|
|
11283
|
+
var _el$82 = _tmpl$29(), _el$83 = _el$82.firstChild, _el$84 = _el$83.nextSibling;
|
|
11284
|
+
insert(_el$83, () => issue.title);
|
|
11285
|
+
insert(_el$84, () => issue.detail);
|
|
11286
|
+
insert(_el$82, createComponent(Show, {
|
|
11131
11287
|
get when() {
|
|
11132
11288
|
return issue.action;
|
|
11133
11289
|
},
|
|
11134
11290
|
children: (action) => (() => {
|
|
11135
|
-
var _el$
|
|
11136
|
-
insert(_el$
|
|
11137
|
-
return _el$
|
|
11291
|
+
var _el$85 = _tmpl$19();
|
|
11292
|
+
insert(_el$85, action);
|
|
11293
|
+
return _el$85;
|
|
11138
11294
|
})()
|
|
11139
11295
|
}), null);
|
|
11140
11296
|
createRenderEffect((_p$) => {
|
|
11141
11297
|
var _v$3 = !!(issue.severity === "warning"), _v$4 = !!(issue.severity === "error");
|
|
11142
|
-
_v$3 !== _p$.e && _el$
|
|
11143
|
-
_v$4 !== _p$.t && _el$
|
|
11298
|
+
_v$3 !== _p$.e && _el$82.classList.toggle("warning", _p$.e = _v$3);
|
|
11299
|
+
_v$4 !== _p$.t && _el$82.classList.toggle("error", _p$.t = _v$4);
|
|
11144
11300
|
return _p$;
|
|
11145
11301
|
}, {
|
|
11146
11302
|
e: void 0,
|
|
11147
11303
|
t: void 0
|
|
11148
11304
|
});
|
|
11149
|
-
return _el$
|
|
11305
|
+
return _el$82;
|
|
11150
11306
|
})()));
|
|
11151
|
-
return _el$
|
|
11307
|
+
return _el$78;
|
|
11152
11308
|
}
|
|
11153
11309
|
}), null);
|
|
11154
|
-
return _el$
|
|
11310
|
+
return _el$72;
|
|
11155
11311
|
})()
|
|
11156
|
-
}), _el$
|
|
11157
|
-
_el$
|
|
11158
|
-
setAttribute(_el$
|
|
11312
|
+
}), _el$54);
|
|
11313
|
+
_el$56.$$input = (e) => props.setObsidianVaultPath(e.currentTarget.value);
|
|
11314
|
+
setAttribute(_el$56, "spellcheck", false);
|
|
11159
11315
|
createRenderEffect((_p$) => {
|
|
11160
11316
|
var _v$ = !!props.chat.enabled(), _v$2 = props.chat.enabled();
|
|
11161
|
-
_v$ !== _p$.e && _el$
|
|
11162
|
-
_v$2 !== _p$.t && setAttribute(_el$
|
|
11317
|
+
_v$ !== _p$.e && _el$1.classList.toggle("on", _p$.e = _v$);
|
|
11318
|
+
_v$2 !== _p$.t && setAttribute(_el$1, "aria-checked", _p$.t = _v$2);
|
|
11163
11319
|
return _p$;
|
|
11164
11320
|
}, {
|
|
11165
11321
|
e: void 0,
|
|
11166
11322
|
t: void 0
|
|
11167
11323
|
});
|
|
11168
|
-
createRenderEffect(() => _el$
|
|
11169
|
-
createRenderEffect(() => _el$
|
|
11170
|
-
createRenderEffect(() => _el$
|
|
11324
|
+
createRenderEffect(() => _el$43.value = props.mcpPort());
|
|
11325
|
+
createRenderEffect(() => _el$53.value = props.agentTranscriptMode());
|
|
11326
|
+
createRenderEffect(() => _el$56.value = props.obsidianVaultPath());
|
|
11171
11327
|
return _el$;
|
|
11172
11328
|
})();
|
|
11173
11329
|
};
|
|
@@ -13017,7 +13173,7 @@ const Settings = () => {
|
|
|
13017
13173
|
setPremiumCodeSent(false);
|
|
13018
13174
|
};
|
|
13019
13175
|
const [chatEnabled, setChatEnabled] = createSignal(false);
|
|
13020
|
-
const [chatProviderId, setChatProviderId] = createSignal("
|
|
13176
|
+
const [chatProviderId, setChatProviderId] = createSignal("openrouter");
|
|
13021
13177
|
const [chatApiKey, setChatApiKey] = createSignal("");
|
|
13022
13178
|
const [chatHasStoredApiKey, setChatHasStoredApiKey] = createSignal(false);
|
|
13023
13179
|
const [chatModel, setChatModel] = createSignal("");
|
|
@@ -13028,9 +13184,24 @@ const Settings = () => {
|
|
|
13028
13184
|
const [providerModels, setProviderModels] = createSignal([]);
|
|
13029
13185
|
const [modelFetchState, setModelFetchState] = createSignal("idle");
|
|
13030
13186
|
const [modelFetchWarning, setModelFetchWarning] = createSignal(null);
|
|
13031
|
-
const
|
|
13032
|
-
|
|
13033
|
-
|
|
13187
|
+
const providerAuth = useProviderAuthSetup({
|
|
13188
|
+
onCodexConnected: () => {
|
|
13189
|
+
setChatHasStoredApiKey(true);
|
|
13190
|
+
},
|
|
13191
|
+
onCodexDisconnected: () => {
|
|
13192
|
+
setChatHasStoredApiKey(false);
|
|
13193
|
+
},
|
|
13194
|
+
onOpenRouterConnected: async (result) => {
|
|
13195
|
+
setChatEnabled(true);
|
|
13196
|
+
setChatProviderId("openrouter");
|
|
13197
|
+
setChatApiKey("");
|
|
13198
|
+
setChatHasStoredApiKey(true);
|
|
13199
|
+
setChatModel(result.model || PROVIDERS.openrouter.defaultModel);
|
|
13200
|
+
setChatBaseUrl(PROVIDERS.openrouter.defaultBaseUrl);
|
|
13201
|
+
setChatReasoningEffort("off");
|
|
13202
|
+
await loadState();
|
|
13203
|
+
}
|
|
13204
|
+
});
|
|
13034
13205
|
const resetProviderModels = () => {
|
|
13035
13206
|
setProviderModels([]);
|
|
13036
13207
|
setModelFetchState("idle");
|
|
@@ -13075,30 +13246,6 @@ const Settings = () => {
|
|
|
13075
13246
|
setModelFetchState("error");
|
|
13076
13247
|
});
|
|
13077
13248
|
};
|
|
13078
|
-
const startCodexAuth = async () => {
|
|
13079
|
-
setCodexAuthStatus("waiting");
|
|
13080
|
-
setCodexAuthError("");
|
|
13081
|
-
try {
|
|
13082
|
-
const result = await window.vessel.codex.startAuth();
|
|
13083
|
-
if (result.ok) {
|
|
13084
|
-
setCodexAccountEmail(result.accountEmail);
|
|
13085
|
-
setCodexAuthStatus("connected");
|
|
13086
|
-
setChatHasStoredApiKey(true);
|
|
13087
|
-
} else {
|
|
13088
|
-
setCodexAuthStatus("error");
|
|
13089
|
-
setCodexAuthError(result.error);
|
|
13090
|
-
}
|
|
13091
|
-
} catch (err) {
|
|
13092
|
-
setCodexAuthStatus("error");
|
|
13093
|
-
setCodexAuthError(err instanceof Error ? err.message : "Unknown error");
|
|
13094
|
-
}
|
|
13095
|
-
};
|
|
13096
|
-
const disconnectCodex = async () => {
|
|
13097
|
-
await window.vessel.codex.disconnect();
|
|
13098
|
-
setCodexAuthStatus("idle");
|
|
13099
|
-
setCodexAccountEmail("");
|
|
13100
|
-
setChatHasStoredApiKey(false);
|
|
13101
|
-
};
|
|
13102
13249
|
createEffect(() => {
|
|
13103
13250
|
if (!chatEnabled()) return;
|
|
13104
13251
|
const meta = chatProviderMeta();
|
|
@@ -13142,9 +13289,7 @@ const Settings = () => {
|
|
|
13142
13289
|
setChatHasStoredApiKey(false);
|
|
13143
13290
|
setChatReasoningEffort("off");
|
|
13144
13291
|
}
|
|
13145
|
-
|
|
13146
|
-
setCodexAuthStatus("connected");
|
|
13147
|
-
}
|
|
13292
|
+
providerAuth.markProviderConnected(cp?.id, cp?.hasApiKey === true);
|
|
13148
13293
|
setTelemetryEnabled(settings.telemetryEnabled !== false);
|
|
13149
13294
|
const dp = settings.domainPolicy ?? {
|
|
13150
13295
|
allowedDomains: [],
|
|
@@ -13191,20 +13336,9 @@ const Settings = () => {
|
|
|
13191
13336
|
});
|
|
13192
13337
|
}
|
|
13193
13338
|
});
|
|
13194
|
-
const unsubCodex = window.vessel.codex.onAuthStatus((payload) => {
|
|
13195
|
-
if (payload.status === "waiting") {
|
|
13196
|
-
setCodexAuthStatus("waiting");
|
|
13197
|
-
} else if (payload.status === "exchanging") {
|
|
13198
|
-
setCodexAuthStatus("exchanging");
|
|
13199
|
-
} else if (payload.status === "error") {
|
|
13200
|
-
setCodexAuthStatus("error");
|
|
13201
|
-
setCodexAuthError(payload.error || "Unknown error");
|
|
13202
|
-
}
|
|
13203
|
-
});
|
|
13204
13339
|
onCleanup(() => {
|
|
13205
13340
|
unsubscribe2();
|
|
13206
13341
|
unsubscribePremium();
|
|
13207
|
-
unsubCodex();
|
|
13208
13342
|
});
|
|
13209
13343
|
});
|
|
13210
13344
|
createEffect(() => {
|
|
@@ -13357,34 +13491,39 @@ const Settings = () => {
|
|
|
13357
13491
|
},
|
|
13358
13492
|
get children() {
|
|
13359
13493
|
return createComponent(SettingsAgent, {
|
|
13360
|
-
chat
|
|
13361
|
-
|
|
13362
|
-
|
|
13363
|
-
|
|
13364
|
-
|
|
13365
|
-
|
|
13366
|
-
|
|
13367
|
-
|
|
13368
|
-
|
|
13369
|
-
|
|
13370
|
-
|
|
13371
|
-
|
|
13372
|
-
|
|
13373
|
-
|
|
13374
|
-
|
|
13375
|
-
|
|
13376
|
-
|
|
13377
|
-
|
|
13378
|
-
|
|
13379
|
-
|
|
13380
|
-
|
|
13381
|
-
|
|
13382
|
-
|
|
13383
|
-
|
|
13384
|
-
|
|
13385
|
-
|
|
13386
|
-
|
|
13387
|
-
|
|
13494
|
+
get chat() {
|
|
13495
|
+
return {
|
|
13496
|
+
enabled: chatEnabled,
|
|
13497
|
+
setEnabled: setChatEnabled,
|
|
13498
|
+
providerId: chatProviderId,
|
|
13499
|
+
setProviderId: setChatProviderId,
|
|
13500
|
+
apiKey: chatApiKey,
|
|
13501
|
+
setApiKey: setChatApiKey,
|
|
13502
|
+
hasStoredApiKey: chatHasStoredApiKey,
|
|
13503
|
+
setHasStoredApiKey: setChatHasStoredApiKey,
|
|
13504
|
+
model: chatModel,
|
|
13505
|
+
setModel: setChatModel,
|
|
13506
|
+
baseUrl: chatBaseUrl,
|
|
13507
|
+
setBaseUrl: setChatBaseUrl,
|
|
13508
|
+
reasoningEffort: chatReasoningEffort,
|
|
13509
|
+
setReasoningEffort: setChatReasoningEffort,
|
|
13510
|
+
providerModels,
|
|
13511
|
+
modelFetchState,
|
|
13512
|
+
modelFetchWarning,
|
|
13513
|
+
doFetchModels,
|
|
13514
|
+
resetProviderModels,
|
|
13515
|
+
codexAuthStatus: providerAuth.codexAuthStatus,
|
|
13516
|
+
codexAccountEmail: providerAuth.codexAccountEmail,
|
|
13517
|
+
setCodexAccountEmail: providerAuth.setCodexAccountEmail,
|
|
13518
|
+
codexAuthError: providerAuth.codexAuthError,
|
|
13519
|
+
setCodexAuthError: providerAuth.setCodexAuthError,
|
|
13520
|
+
openRouterAuthStatus: providerAuth.openRouterAuthStatus,
|
|
13521
|
+
openRouterAuthError: providerAuth.openRouterAuthError,
|
|
13522
|
+
providerType,
|
|
13523
|
+
startCodexAuth: providerAuth.startCodexAuth,
|
|
13524
|
+
disconnectCodex: providerAuth.disconnectCodex,
|
|
13525
|
+
startOpenRouterAuth: providerAuth.startOpenRouterAuth
|
|
13526
|
+
};
|
|
13388
13527
|
},
|
|
13389
13528
|
mcpPort,
|
|
13390
13529
|
setMcpPort,
|