@quanta-intellect/vessel-browser 0.1.125 → 0.1.128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/main/index.js +19037 -18960
- package/out/preload/content-script.js +53 -6
- package/out/renderer/assets/{index-D2u6Brx4.css → index-BhKMoOd-.css} +791 -30
- package/out/renderer/assets/{index-Cvmlazb5.js → index-Dwhz26u8.js} +514 -1194
- package/out/renderer/index.html +2 -2
- package/package.json +10 -1
|
@@ -2651,7 +2651,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
2651
2651
|
}
|
|
2652
2652
|
return "idle";
|
|
2653
2653
|
}
|
|
2654
|
-
var _tmpl$$r = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$q = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$m = /* @__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$
|
|
2654
|
+
var _tmpl$$r = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$q = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$m = /* @__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>`);
|
|
2655
2655
|
const TAB_CLOSE_MS = 200;
|
|
2656
2656
|
function stringToHue(str) {
|
|
2657
2657
|
let hash = 0;
|
|
@@ -2762,7 +2762,7 @@ const TabBar = () => {
|
|
|
2762
2762
|
},
|
|
2763
2763
|
get fallback() {
|
|
2764
2764
|
return memo(() => entry.type === "group")() && (() => {
|
|
2765
|
-
var _el$0 = _tmpl$4$
|
|
2765
|
+
var _el$0 = _tmpl$4$l(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
|
|
2766
2766
|
_el$0.$$contextmenu = (e) => {
|
|
2767
2767
|
e.preventDefault();
|
|
2768
2768
|
window.vessel.tabs.showGroupContextMenu(entry.groupId);
|
|
@@ -2917,7 +2917,7 @@ const TabBar = () => {
|
|
|
2917
2917
|
})();
|
|
2918
2918
|
};
|
|
2919
2919
|
delegateEvents(["click", "contextmenu"]);
|
|
2920
|
-
var _tmpl$$q = /* @__PURE__ */ template(`<button class=security-popup-link>Reset permissions for this site`), _tmpl$2$p = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More</button><div class=security-popup-section><div class=security-popup-section-title>Site permissions`), _tmpl$3$l = /* @__PURE__ */ template(`<p class=security-popup-muted>No saved permission decisions for this site.`), _tmpl$4$
|
|
2920
|
+
var _tmpl$$q = /* @__PURE__ */ template(`<button class=security-popup-link>Reset permissions for this site`), _tmpl$2$p = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More</button><div class=security-popup-section><div class=security-popup-section-title>Site permissions`), _tmpl$3$l = /* @__PURE__ */ template(`<p class=security-popup-muted>No saved permission decisions for this site.`), _tmpl$4$k = /* @__PURE__ */ template(`<div class=security-popup-permission-row><span></span><strong>`), _tmpl$5$h = /* @__PURE__ */ template(`<div class=security-popup-actions><button class=security-popup-action-proceed>Proceed Anyway</button><button class=security-popup-action-back>Go Back to Safety`);
|
|
2921
2921
|
const SecurityPopup = (props) => {
|
|
2922
2922
|
const statusText = () => {
|
|
2923
2923
|
switch (props.state.status) {
|
|
@@ -2943,7 +2943,8 @@ const SecurityPopup = (props) => {
|
|
|
2943
2943
|
const loadPermissions = async () => {
|
|
2944
2944
|
try {
|
|
2945
2945
|
setPermissions(await window.vessel.permissions.getAll());
|
|
2946
|
-
} catch {
|
|
2946
|
+
} catch (err) {
|
|
2947
|
+
console.warn("Failed to load permissions:", err);
|
|
2947
2948
|
}
|
|
2948
2949
|
};
|
|
2949
2950
|
const handleLearnMore = () => {
|
|
@@ -2988,7 +2989,7 @@ const SecurityPopup = (props) => {
|
|
|
2988
2989
|
return sitePermissions();
|
|
2989
2990
|
},
|
|
2990
2991
|
children: (item) => (() => {
|
|
2991
|
-
var _el$9 = _tmpl$4$
|
|
2992
|
+
var _el$9 = _tmpl$4$k(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
|
|
2992
2993
|
insert(_el$0, () => item.permission);
|
|
2993
2994
|
insert(_el$1, () => item.decision);
|
|
2994
2995
|
createRenderEffect(() => className(_el$1, item.decision));
|
|
@@ -3147,10 +3148,15 @@ function useHistory() {
|
|
|
3147
3148
|
void init$3();
|
|
3148
3149
|
const loadMore = async (limit = HISTORY_PAGE_SIZE) => {
|
|
3149
3150
|
const current = historyState().entries;
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3151
|
+
try {
|
|
3152
|
+
const page = await window.vessel.history.list(current.length, limit);
|
|
3153
|
+
setHistoryState({ entries: [...current, ...page.entries] });
|
|
3154
|
+
setHistoryTotal(page.total);
|
|
3155
|
+
return page;
|
|
3156
|
+
} catch (err) {
|
|
3157
|
+
logger$3.error("Failed to load more history entries:", err);
|
|
3158
|
+
return { entries: [], total: historyTotal() };
|
|
3159
|
+
}
|
|
3154
3160
|
};
|
|
3155
3161
|
return {
|
|
3156
3162
|
historyState,
|
|
@@ -3402,7 +3408,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
3402
3408
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
3403
3409
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
3404
3410
|
};
|
|
3405
|
-
var _tmpl$$p = /* @__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$o = /* @__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$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$
|
|
3411
|
+
var _tmpl$$p = /* @__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$o = /* @__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$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></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></span><button type=button class=agent-status-dismiss aria-label="Dismiss agent status"title=Dismiss>`), _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:var(--status-warning-amber)></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>`);
|
|
3406
3412
|
const AddressBar = (props) => {
|
|
3407
3413
|
const {
|
|
3408
3414
|
activeTab,
|
|
@@ -3438,6 +3444,7 @@ const AddressBar = (props) => {
|
|
|
3438
3444
|
const [searchEngine, setSearchEngine] = createSignal("duckduckgo");
|
|
3439
3445
|
const [showSecurityPopup, setShowSecurityPopup] = createSignal(false);
|
|
3440
3446
|
const [hasEditedAddress, setHasEditedAddress] = createSignal(false);
|
|
3447
|
+
const [dismissedAgentStatusKey, setDismissedAgentStatusKey] = createSignal(null);
|
|
3441
3448
|
const now2 = useNow();
|
|
3442
3449
|
let inputRef;
|
|
3443
3450
|
let addressBlurTimer = null;
|
|
@@ -3451,6 +3458,20 @@ const AddressBar = (props) => {
|
|
|
3451
3458
|
});
|
|
3452
3459
|
const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
|
|
3453
3460
|
const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
|
|
3461
|
+
const agentStatusKey = createMemo(() => {
|
|
3462
|
+
const message = agentStatusMessage();
|
|
3463
|
+
if (!message) return null;
|
|
3464
|
+
return `${agentPresence()}:${message}`;
|
|
3465
|
+
});
|
|
3466
|
+
const showAgentStatusBadge = createMemo(() => {
|
|
3467
|
+
const key = agentStatusKey();
|
|
3468
|
+
return !!key && dismissedAgentStatusKey() !== key;
|
|
3469
|
+
});
|
|
3470
|
+
createEffect(() => {
|
|
3471
|
+
if (!agentStatusKey()) {
|
|
3472
|
+
setDismissedAgentStatusKey(null);
|
|
3473
|
+
}
|
|
3474
|
+
});
|
|
3454
3475
|
const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
|
|
3455
3476
|
const searchEnginePreset = createMemo(() => {
|
|
3456
3477
|
const engine = searchEngine();
|
|
@@ -3698,7 +3719,7 @@ const AddressBar = (props) => {
|
|
|
3698
3719
|
};
|
|
3699
3720
|
const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
|
|
3700
3721
|
return (() => {
|
|
3701
|
-
var _el$ = _tmpl$17$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$
|
|
3722
|
+
var _el$ = _tmpl$17$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$36 = _el$11.nextSibling, _el$37 = _el$36.firstChild, _el$38 = _el$37.firstChild;
|
|
3702
3723
|
addEventListener(_el$3, "click", goBack, true);
|
|
3703
3724
|
addEventListener(_el$4, "click", goForward, true);
|
|
3704
3725
|
addEventListener(_el$5, "click", reload, true);
|
|
@@ -3713,14 +3734,14 @@ const AddressBar = (props) => {
|
|
|
3713
3734
|
return memo(() => !!securityState()?.status)() && securityState()?.status !== "none";
|
|
3714
3735
|
},
|
|
3715
3736
|
get children() {
|
|
3716
|
-
var _el$7 = _tmpl$4$
|
|
3737
|
+
var _el$7 = _tmpl$4$j(), _el$8 = _el$7.firstChild;
|
|
3717
3738
|
_el$8.$$click = () => setShowSecurityPopup((prev) => !prev);
|
|
3718
3739
|
insert(_el$8, createComponent(Switch, {
|
|
3719
3740
|
get fallback() {
|
|
3720
3741
|
return (() => {
|
|
3721
|
-
var _el$
|
|
3722
|
-
_el$
|
|
3723
|
-
return _el$
|
|
3742
|
+
var _el$49 = _tmpl$18$4();
|
|
3743
|
+
_el$49.firstChild;
|
|
3744
|
+
return _el$49;
|
|
3724
3745
|
})();
|
|
3725
3746
|
},
|
|
3726
3747
|
get children() {
|
|
@@ -3804,42 +3825,51 @@ const AddressBar = (props) => {
|
|
|
3804
3825
|
return suggestions();
|
|
3805
3826
|
},
|
|
3806
3827
|
children: (item, i) => (() => {
|
|
3807
|
-
var _el$
|
|
3808
|
-
_el$
|
|
3809
|
-
_el$
|
|
3828
|
+
var _el$51 = _tmpl$19$4(), _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling;
|
|
3829
|
+
_el$51.addEventListener("mouseenter", () => setSelectedIndex(i()));
|
|
3830
|
+
_el$51.$$mousedown = (e) => {
|
|
3810
3831
|
e.preventDefault();
|
|
3811
3832
|
selectSuggestion(item.url);
|
|
3812
3833
|
};
|
|
3813
|
-
insert(_el$
|
|
3834
|
+
insert(_el$52, (() => {
|
|
3814
3835
|
var _c$ = memo(() => item.source === "bookmark");
|
|
3815
3836
|
return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
|
|
3816
3837
|
})());
|
|
3817
|
-
insert(_el$
|
|
3818
|
-
insert(_el$
|
|
3838
|
+
insert(_el$54, () => item.title || item.url);
|
|
3839
|
+
insert(_el$55, () => item.subtitle || item.url);
|
|
3819
3840
|
createRenderEffect((_p$) => {
|
|
3820
3841
|
var _v$12 = `address-autocomplete-${i()}`, _v$13 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$14 = selectedIndex() === i();
|
|
3821
|
-
_v$12 !== _p$.e && setAttribute(_el$
|
|
3822
|
-
_v$13 !== _p$.t && className(_el$
|
|
3823
|
-
_v$14 !== _p$.a && setAttribute(_el$
|
|
3842
|
+
_v$12 !== _p$.e && setAttribute(_el$51, "id", _p$.e = _v$12);
|
|
3843
|
+
_v$13 !== _p$.t && className(_el$51, _p$.t = _v$13);
|
|
3844
|
+
_v$14 !== _p$.a && setAttribute(_el$51, "aria-selected", _p$.a = _v$14);
|
|
3824
3845
|
return _p$;
|
|
3825
3846
|
}, {
|
|
3826
3847
|
e: void 0,
|
|
3827
3848
|
t: void 0,
|
|
3828
3849
|
a: void 0
|
|
3829
3850
|
});
|
|
3830
|
-
return _el$
|
|
3851
|
+
return _el$51;
|
|
3831
3852
|
})()
|
|
3832
3853
|
}));
|
|
3833
3854
|
return _el$14;
|
|
3834
3855
|
}
|
|
3835
3856
|
}), null);
|
|
3836
3857
|
insert(_el$11, createComponent(Show, {
|
|
3837
|
-
when
|
|
3858
|
+
get when() {
|
|
3859
|
+
return !isPrivateWindow && showAgentStatusBadge();
|
|
3860
|
+
},
|
|
3838
3861
|
get children() {
|
|
3839
|
-
var _el$15 = _tmpl$6$f(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
3840
|
-
insert(_el$17,
|
|
3862
|
+
var _el$15 = _tmpl$6$f(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling, _el$18 = _el$17.nextSibling;
|
|
3863
|
+
insert(_el$17, agentStatusMessage);
|
|
3864
|
+
_el$18.$$click = (event) => {
|
|
3865
|
+
event.stopPropagation();
|
|
3866
|
+
setDismissedAgentStatusKey(agentStatusKey());
|
|
3867
|
+
};
|
|
3868
|
+
insert(_el$18, createComponent(x_default, {
|
|
3869
|
+
size: 12
|
|
3870
|
+
}));
|
|
3841
3871
|
createRenderEffect((_p$) => {
|
|
3842
|
-
var _v$3 = `agent-status-badge ${agentPresence()}`, _v$4 = agentStatusMessage() ||
|
|
3872
|
+
var _v$3 = `agent-status-badge ${agentPresence()}`, _v$4 = agentStatusMessage() || "Agent is using the browser";
|
|
3843
3873
|
_v$3 !== _p$.e && className(_el$15, _p$.e = _v$3);
|
|
3844
3874
|
_v$4 !== _p$.t && setAttribute(_el$15, "title", _p$.t = _v$4);
|
|
3845
3875
|
return _p$;
|
|
@@ -3855,9 +3885,9 @@ const AddressBar = (props) => {
|
|
|
3855
3885
|
return pageDiff();
|
|
3856
3886
|
},
|
|
3857
3887
|
get children() {
|
|
3858
|
-
var _el$
|
|
3859
|
-
_el$
|
|
3860
|
-
return _el$
|
|
3888
|
+
var _el$19 = _tmpl$7$d();
|
|
3889
|
+
_el$19.$$click = () => void openDiffTimeline();
|
|
3890
|
+
return _el$19;
|
|
3861
3891
|
}
|
|
3862
3892
|
}), null);
|
|
3863
3893
|
insert(_el$, createComponent(Show, {
|
|
@@ -3865,157 +3895,157 @@ const AddressBar = (props) => {
|
|
|
3865
3895
|
return memo(() => !!pageDiff())() && diffExpanded();
|
|
3866
3896
|
},
|
|
3867
3897
|
get children() {
|
|
3868
|
-
var _el$
|
|
3869
|
-
_el$
|
|
3870
|
-
var _el$
|
|
3871
|
-
insert(_el$
|
|
3872
|
-
insert(_el$
|
|
3898
|
+
var _el$20 = _tmpl$0$6(), _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild, _el$24 = _el$23.nextSibling;
|
|
3899
|
+
_el$24.firstChild;
|
|
3900
|
+
var _el$31 = _el$22.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling;
|
|
3901
|
+
insert(_el$24, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
|
|
3902
|
+
insert(_el$22, createComponent(Show, {
|
|
3873
3903
|
get when() {
|
|
3874
3904
|
return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
|
|
3875
3905
|
},
|
|
3876
3906
|
get children() {
|
|
3877
|
-
var _el$
|
|
3878
|
-
_el$
|
|
3879
|
-
insert(_el$
|
|
3880
|
-
insert(_el$
|
|
3881
|
-
return _el$
|
|
3907
|
+
var _el$26 = _tmpl$8$9(), _el$27 = _el$26.firstChild, _el$30 = _el$27.nextSibling;
|
|
3908
|
+
_el$30.nextSibling;
|
|
3909
|
+
insert(_el$26, () => pageDiff().burstCount, _el$30);
|
|
3910
|
+
insert(_el$26, () => formatElapsedTime(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
|
|
3911
|
+
return _el$26;
|
|
3882
3912
|
}
|
|
3883
3913
|
}), null);
|
|
3884
|
-
_el$
|
|
3885
|
-
_el$
|
|
3886
|
-
insert(_el$
|
|
3914
|
+
_el$32.$$click = () => void openDiffTimeline();
|
|
3915
|
+
_el$33.$$click = () => setDiffExpanded(false);
|
|
3916
|
+
insert(_el$20, createComponent(Show, {
|
|
3887
3917
|
get when() {
|
|
3888
3918
|
return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
|
|
3889
3919
|
},
|
|
3890
3920
|
get children() {
|
|
3891
|
-
var _el$
|
|
3892
|
-
_el$
|
|
3893
|
-
insert(_el$
|
|
3921
|
+
var _el$34 = _tmpl$9$8();
|
|
3922
|
+
_el$34.firstChild;
|
|
3923
|
+
insert(_el$34, createComponent(For, {
|
|
3894
3924
|
get each() {
|
|
3895
3925
|
return pageDiff().recentBursts;
|
|
3896
3926
|
},
|
|
3897
3927
|
children: (burst, i) => (() => {
|
|
3898
|
-
var _el$
|
|
3899
|
-
insert(_el$
|
|
3928
|
+
var _el$56 = _tmpl$20$4(), _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling;
|
|
3929
|
+
insert(_el$57, (() => {
|
|
3900
3930
|
var _c$2 = memo(() => i() === 0);
|
|
3901
3931
|
return () => _c$2() ? "Latest" : formatRelativeTime(burst.detectedAt);
|
|
3902
3932
|
})());
|
|
3903
|
-
insert(_el$
|
|
3933
|
+
insert(_el$58, createComponent(For, {
|
|
3904
3934
|
get each() {
|
|
3905
3935
|
return parseDiffSummaryParts(burst.summary);
|
|
3906
3936
|
},
|
|
3907
3937
|
children: (part) => (() => {
|
|
3908
|
-
var _el$
|
|
3909
|
-
insert(_el$
|
|
3938
|
+
var _el$59 = _tmpl$22$4(), _el$61 = _el$59.firstChild;
|
|
3939
|
+
insert(_el$59, createComponent(Show, {
|
|
3910
3940
|
get when() {
|
|
3911
3941
|
return part.section;
|
|
3912
3942
|
},
|
|
3913
3943
|
get children() {
|
|
3914
|
-
var _el$
|
|
3915
|
-
insert(_el$
|
|
3916
|
-
return _el$
|
|
3944
|
+
var _el$60 = _tmpl$21$4();
|
|
3945
|
+
insert(_el$60, () => part.section);
|
|
3946
|
+
return _el$60;
|
|
3917
3947
|
}
|
|
3918
|
-
}), _el$
|
|
3919
|
-
insert(_el$
|
|
3920
|
-
return _el$
|
|
3948
|
+
}), _el$61);
|
|
3949
|
+
insert(_el$61, () => part.text);
|
|
3950
|
+
return _el$59;
|
|
3921
3951
|
})()
|
|
3922
3952
|
}));
|
|
3923
|
-
createRenderEffect(() => _el$
|
|
3924
|
-
return _el$
|
|
3953
|
+
createRenderEffect(() => _el$56.classList.toggle("latest", !!(i() === 0)));
|
|
3954
|
+
return _el$56;
|
|
3925
3955
|
})()
|
|
3926
3956
|
}), null);
|
|
3927
|
-
return _el$
|
|
3957
|
+
return _el$34;
|
|
3928
3958
|
}
|
|
3929
3959
|
}), null);
|
|
3930
|
-
insert(_el$
|
|
3960
|
+
insert(_el$20, createComponent(For, {
|
|
3931
3961
|
get each() {
|
|
3932
3962
|
return pageDiff().changes;
|
|
3933
3963
|
},
|
|
3934
3964
|
children: (change) => (() => {
|
|
3935
|
-
var _el$
|
|
3936
|
-
insert(_el$
|
|
3937
|
-
insert(_el$
|
|
3938
|
-
insert(_el$
|
|
3939
|
-
insert(_el$
|
|
3965
|
+
var _el$62 = _tmpl$28$3(), _el$63 = _el$62.firstChild, _el$64 = _el$63.firstChild, _el$65 = _el$64.firstChild, _el$66 = _el$65.nextSibling, _el$67 = _el$64.nextSibling;
|
|
3966
|
+
insert(_el$65, () => getChangeKindLabel(change.kind));
|
|
3967
|
+
insert(_el$66, () => formatSectionLabel(change.section));
|
|
3968
|
+
insert(_el$67, () => change.summary);
|
|
3969
|
+
insert(_el$62, createComponent(Show, {
|
|
3940
3970
|
get when() {
|
|
3941
3971
|
return change.before || change.after;
|
|
3942
3972
|
},
|
|
3943
3973
|
get children() {
|
|
3944
|
-
var _el$
|
|
3945
|
-
insert(_el$
|
|
3974
|
+
var _el$68 = _tmpl$25$3();
|
|
3975
|
+
insert(_el$68, createComponent(Show, {
|
|
3946
3976
|
get when() {
|
|
3947
3977
|
return change.before;
|
|
3948
3978
|
},
|
|
3949
3979
|
get children() {
|
|
3950
|
-
var _el$
|
|
3951
|
-
insert(_el$
|
|
3952
|
-
return _el$
|
|
3980
|
+
var _el$69 = _tmpl$23$4(), _el$70 = _el$69.firstChild, _el$71 = _el$70.nextSibling;
|
|
3981
|
+
insert(_el$71, () => change.before);
|
|
3982
|
+
return _el$69;
|
|
3953
3983
|
}
|
|
3954
3984
|
}), null);
|
|
3955
|
-
insert(_el$
|
|
3985
|
+
insert(_el$68, createComponent(Show, {
|
|
3956
3986
|
get when() {
|
|
3957
3987
|
return change.after;
|
|
3958
3988
|
},
|
|
3959
3989
|
get children() {
|
|
3960
|
-
var _el$
|
|
3961
|
-
insert(_el$
|
|
3962
|
-
return _el$
|
|
3990
|
+
var _el$72 = _tmpl$24$4(), _el$73 = _el$72.firstChild, _el$74 = _el$73.nextSibling;
|
|
3991
|
+
insert(_el$74, () => change.after);
|
|
3992
|
+
return _el$72;
|
|
3963
3993
|
}
|
|
3964
3994
|
}), null);
|
|
3965
|
-
return _el$
|
|
3995
|
+
return _el$68;
|
|
3966
3996
|
}
|
|
3967
3997
|
}), null);
|
|
3968
|
-
insert(_el$
|
|
3998
|
+
insert(_el$62, createComponent(Show, {
|
|
3969
3999
|
get when() {
|
|
3970
4000
|
return change.addedItems?.length;
|
|
3971
4001
|
},
|
|
3972
4002
|
get children() {
|
|
3973
|
-
var _el$
|
|
3974
|
-
insert(_el$
|
|
4003
|
+
var _el$75 = _tmpl$26$3(), _el$76 = _el$75.firstChild, _el$77 = _el$76.nextSibling;
|
|
4004
|
+
insert(_el$77, createComponent(For, {
|
|
3975
4005
|
get each() {
|
|
3976
4006
|
return change.addedItems;
|
|
3977
4007
|
},
|
|
3978
4008
|
children: (item) => (() => {
|
|
3979
|
-
var _el$
|
|
3980
|
-
insert(_el$
|
|
3981
|
-
return _el$
|
|
4009
|
+
var _el$81 = _tmpl$29$3();
|
|
4010
|
+
insert(_el$81, item);
|
|
4011
|
+
return _el$81;
|
|
3982
4012
|
})()
|
|
3983
4013
|
}));
|
|
3984
|
-
return _el$
|
|
4014
|
+
return _el$75;
|
|
3985
4015
|
}
|
|
3986
4016
|
}), null);
|
|
3987
|
-
insert(_el$
|
|
4017
|
+
insert(_el$62, createComponent(Show, {
|
|
3988
4018
|
get when() {
|
|
3989
4019
|
return change.removedItems?.length;
|
|
3990
4020
|
},
|
|
3991
4021
|
get children() {
|
|
3992
|
-
var _el$
|
|
3993
|
-
insert(_el$
|
|
4022
|
+
var _el$78 = _tmpl$27$3(), _el$79 = _el$78.firstChild, _el$80 = _el$79.nextSibling;
|
|
4023
|
+
insert(_el$80, createComponent(For, {
|
|
3994
4024
|
get each() {
|
|
3995
4025
|
return change.removedItems;
|
|
3996
4026
|
},
|
|
3997
4027
|
children: (item) => (() => {
|
|
3998
|
-
var _el$
|
|
3999
|
-
insert(_el$
|
|
4000
|
-
return _el$
|
|
4028
|
+
var _el$82 = _tmpl$29$3();
|
|
4029
|
+
insert(_el$82, item);
|
|
4030
|
+
return _el$82;
|
|
4001
4031
|
})()
|
|
4002
4032
|
}));
|
|
4003
|
-
return _el$
|
|
4033
|
+
return _el$78;
|
|
4004
4034
|
}
|
|
4005
4035
|
}), null);
|
|
4006
|
-
createRenderEffect(() => className(_el$
|
|
4007
|
-
return _el$
|
|
4036
|
+
createRenderEffect(() => className(_el$62, `page-diff-item page-diff-${change.kind}`));
|
|
4037
|
+
return _el$62;
|
|
4008
4038
|
})()
|
|
4009
4039
|
}), null);
|
|
4010
|
-
return _el$
|
|
4040
|
+
return _el$20;
|
|
4011
4041
|
}
|
|
4012
|
-
}), _el$
|
|
4013
|
-
_el$
|
|
4042
|
+
}), _el$36);
|
|
4043
|
+
_el$37.$$click = async () => {
|
|
4014
4044
|
const id = activeTabId2();
|
|
4015
4045
|
if (!id) return;
|
|
4016
4046
|
await toggleAdBlock(id);
|
|
4017
4047
|
};
|
|
4018
|
-
insert(_el$
|
|
4048
|
+
insert(_el$38, createComponent(Show, {
|
|
4019
4049
|
get when() {
|
|
4020
4050
|
return activeTab()?.adBlockingEnabled;
|
|
4021
4051
|
},
|
|
@@ -4023,7 +4053,7 @@ const AddressBar = (props) => {
|
|
|
4023
4053
|
return _tmpl$1$6();
|
|
4024
4054
|
}
|
|
4025
4055
|
}), null);
|
|
4026
|
-
insert(_el$
|
|
4056
|
+
insert(_el$38, createComponent(Show, {
|
|
4027
4057
|
get when() {
|
|
4028
4058
|
return !activeTab()?.adBlockingEnabled;
|
|
4029
4059
|
},
|
|
@@ -4031,67 +4061,67 @@ const AddressBar = (props) => {
|
|
|
4031
4061
|
return [_tmpl$1$6(), _tmpl$10$6()];
|
|
4032
4062
|
}
|
|
4033
4063
|
}), null);
|
|
4034
|
-
insert(_el$
|
|
4064
|
+
insert(_el$36, createComponent(Show, {
|
|
4035
4065
|
when: !isPrivateWindow,
|
|
4036
4066
|
get children() {
|
|
4037
|
-
var _el$
|
|
4038
|
-
_el$
|
|
4039
|
-
createRenderEffect(() => _el$
|
|
4040
|
-
return _el$
|
|
4067
|
+
var _el$42 = _tmpl$11$6();
|
|
4068
|
+
_el$42.$$click = () => window.vessel.content.toggleReader();
|
|
4069
|
+
createRenderEffect(() => _el$42.classList.toggle("active", !!activeTab()?.isReaderMode));
|
|
4070
|
+
return _el$42;
|
|
4041
4071
|
}
|
|
4042
4072
|
}), null);
|
|
4043
|
-
insert(_el$
|
|
4073
|
+
insert(_el$36, createComponent(Show, {
|
|
4044
4074
|
when: !isPrivateWindow,
|
|
4045
4075
|
get children() {
|
|
4046
|
-
var _el$
|
|
4047
|
-
addEventListener(_el$
|
|
4048
|
-
createRenderEffect(() => _el$
|
|
4049
|
-
return _el$
|
|
4076
|
+
var _el$43 = _tmpl$12$6();
|
|
4077
|
+
addEventListener(_el$43, "click", toggleDevTools, true);
|
|
4078
|
+
createRenderEffect(() => _el$43.classList.toggle("active", !!devtoolsPanelOpen2()));
|
|
4079
|
+
return _el$43;
|
|
4050
4080
|
}
|
|
4051
4081
|
}), null);
|
|
4052
|
-
insert(_el$
|
|
4082
|
+
insert(_el$36, createComponent(Show, {
|
|
4053
4083
|
when: !isPrivateWindow,
|
|
4054
4084
|
get children() {
|
|
4055
|
-
var _el$
|
|
4056
|
-
_el$
|
|
4057
|
-
addEventListener(_el$
|
|
4058
|
-
insert(_el$
|
|
4085
|
+
var _el$44 = _tmpl$14$5();
|
|
4086
|
+
_el$44.firstChild;
|
|
4087
|
+
addEventListener(_el$44, "click", toggleSidebar, true);
|
|
4088
|
+
insert(_el$44, createComponent(Show, {
|
|
4059
4089
|
get when() {
|
|
4060
4090
|
return pendingApprovalCount() > 0;
|
|
4061
4091
|
},
|
|
4062
4092
|
get children() {
|
|
4063
|
-
var _el$
|
|
4064
|
-
insert(_el$
|
|
4065
|
-
createRenderEffect(() => setAttribute(_el$
|
|
4066
|
-
return _el$
|
|
4093
|
+
var _el$46 = _tmpl$13$5();
|
|
4094
|
+
insert(_el$46, pendingApprovalCount);
|
|
4095
|
+
createRenderEffect(() => setAttribute(_el$46, "aria-label", `${pendingApprovalCount()} pending`));
|
|
4096
|
+
return _el$46;
|
|
4067
4097
|
}
|
|
4068
4098
|
}), null);
|
|
4069
4099
|
createRenderEffect((_p$) => {
|
|
4070
4100
|
var _v$5 = !!(pendingApprovalCount() > 0), _v$6 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
|
|
4071
|
-
_v$5 !== _p$.e && _el$
|
|
4072
|
-
_v$6 !== _p$.t && setAttribute(_el$
|
|
4101
|
+
_v$5 !== _p$.e && _el$44.classList.toggle("has-approvals", _p$.e = _v$5);
|
|
4102
|
+
_v$6 !== _p$.t && setAttribute(_el$44, "title", _p$.t = _v$6);
|
|
4073
4103
|
return _p$;
|
|
4074
4104
|
}, {
|
|
4075
4105
|
e: void 0,
|
|
4076
4106
|
t: void 0
|
|
4077
4107
|
});
|
|
4078
|
-
return _el$
|
|
4108
|
+
return _el$44;
|
|
4079
4109
|
}
|
|
4080
4110
|
}), null);
|
|
4081
|
-
insert(_el$
|
|
4111
|
+
insert(_el$36, createComponent(Show, {
|
|
4082
4112
|
when: !isPrivateWindow,
|
|
4083
4113
|
get children() {
|
|
4084
4114
|
return [(() => {
|
|
4085
|
-
var _el$
|
|
4086
|
-
addEventListener(_el$
|
|
4087
|
-
insert(_el$
|
|
4115
|
+
var _el$47 = _tmpl$15$5();
|
|
4116
|
+
addEventListener(_el$47, "click", props.onClearData, true);
|
|
4117
|
+
insert(_el$47, createComponent(trash_2_default, {
|
|
4088
4118
|
size: 14
|
|
4089
4119
|
}));
|
|
4090
|
-
return _el$46;
|
|
4091
|
-
})(), (() => {
|
|
4092
|
-
var _el$47 = _tmpl$16$4();
|
|
4093
|
-
addEventListener(_el$47, "click", openSettings, true);
|
|
4094
4120
|
return _el$47;
|
|
4121
|
+
})(), (() => {
|
|
4122
|
+
var _el$48 = _tmpl$16$4();
|
|
4123
|
+
addEventListener(_el$48, "click", openSettings, true);
|
|
4124
|
+
return _el$48;
|
|
4095
4125
|
})()];
|
|
4096
4126
|
}
|
|
4097
4127
|
}), null);
|
|
@@ -4101,9 +4131,9 @@ const AddressBar = (props) => {
|
|
|
4101
4131
|
_v$8 !== _p$.t && (_el$4.disabled = _p$.t = _v$8);
|
|
4102
4132
|
_v$9 !== _p$.a && setAttribute(_el$13, "aria-expanded", _p$.a = _v$9);
|
|
4103
4133
|
_v$0 !== _p$.o && setAttribute(_el$13, "aria-activedescendant", _p$.o = _v$0);
|
|
4104
|
-
_v$1 !== _p$.i && _el$
|
|
4105
|
-
_v$10 !== _p$.n && _el$
|
|
4106
|
-
_v$11 !== _p$.s && setAttribute(_el$
|
|
4134
|
+
_v$1 !== _p$.i && _el$37.classList.toggle("active", _p$.i = _v$1);
|
|
4135
|
+
_v$10 !== _p$.n && _el$37.classList.toggle("nav-btn-muted", _p$.n = _v$10);
|
|
4136
|
+
_v$11 !== _p$.s && setAttribute(_el$37, "title", _p$.s = _v$11);
|
|
4107
4137
|
return _p$;
|
|
4108
4138
|
}, {
|
|
4109
4139
|
e: void 0,
|
|
@@ -4246,7 +4276,7 @@ const HighlightNotifications = (props) => {
|
|
|
4246
4276
|
});
|
|
4247
4277
|
};
|
|
4248
4278
|
delegateEvents(["click"]);
|
|
4249
|
-
var _tmpl$$m = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _tmpl$3$j = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$
|
|
4279
|
+
var _tmpl$$m = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _tmpl$3$j = /* @__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>`);
|
|
4250
4280
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
4251
4281
|
const TOAST_EXIT_MS = 300;
|
|
4252
4282
|
function formatBytes$1(bytes) {
|
|
@@ -4367,7 +4397,7 @@ const DownloadToast = () => {
|
|
|
4367
4397
|
},
|
|
4368
4398
|
get children() {
|
|
4369
4399
|
return [(() => {
|
|
4370
|
-
var _el$7 = _tmpl$4$
|
|
4400
|
+
var _el$7 = _tmpl$4$i(), _el$8 = _el$7.firstChild;
|
|
4371
4401
|
createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
|
|
4372
4402
|
return _el$7;
|
|
4373
4403
|
})(), (() => {
|
|
@@ -4402,7 +4432,7 @@ const DownloadToast = () => {
|
|
|
4402
4432
|
return _el$;
|
|
4403
4433
|
})();
|
|
4404
4434
|
};
|
|
4405
|
-
var _tmpl$$l = /* @__PURE__ */ template(`<div class=modal-backdrop><div class=downloads-panel><div class=downloads-panel-header><div><h2>Downloads</h2><p>Recent files saved by Vessel</p></div><div class=downloads-panel-actions><button>Clear</button><button>Close</button></div></div><div class=downloads-panel-list>`), _tmpl$2$l = /* @__PURE__ */ template(`<div class=downloads-empty>No downloads yet.`), _tmpl$3$i = /* @__PURE__ */ template(`<div class=downloads-row><div class=downloads-file><strong></strong><span></span><small> · </small></div><div class=downloads-row-actions><button>Open</button><button>Show in folder`), _tmpl$4$
|
|
4435
|
+
var _tmpl$$l = /* @__PURE__ */ template(`<div class=modal-backdrop><div class=downloads-panel><div class=downloads-panel-header><div><h2>Downloads</h2><p>Recent files saved by Vessel</p></div><div class=downloads-panel-actions><button>Clear</button><button>Close</button></div></div><div class=downloads-panel-list>`), _tmpl$2$l = /* @__PURE__ */ template(`<div class=downloads-empty>No downloads yet.`), _tmpl$3$i = /* @__PURE__ */ template(`<div class=downloads-row><div class=downloads-file><strong></strong><span></span><small> · </small></div><div class=downloads-row-actions><button>Open</button><button>Show in folder`), _tmpl$4$h = /* @__PURE__ */ template(`<span>Source: `);
|
|
4406
4436
|
const formatBytes = (bytes) => {
|
|
4407
4437
|
if (!bytes) return "0 B";
|
|
4408
4438
|
const units = ["B", "KB", "MB", "GB"];
|
|
@@ -4451,7 +4481,7 @@ const DownloadsPanel = (props) => {
|
|
|
4451
4481
|
return item.url;
|
|
4452
4482
|
},
|
|
4453
4483
|
children: (url) => (() => {
|
|
4454
|
-
var _el$17 = _tmpl$4$
|
|
4484
|
+
var _el$17 = _tmpl$4$h();
|
|
4455
4485
|
_el$17.firstChild;
|
|
4456
4486
|
insert(_el$17, url, null);
|
|
4457
4487
|
return _el$17;
|
|
@@ -4579,7 +4609,7 @@ const FindBar = () => {
|
|
|
4579
4609
|
});
|
|
4580
4610
|
};
|
|
4581
4611
|
delegateEvents(["input", "click"]);
|
|
4582
|
-
var _tmpl$$j = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$j = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$h = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$
|
|
4612
|
+
var _tmpl$$j = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$j = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$h = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$g = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$e = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
|
|
4583
4613
|
const FlowProgress = () => {
|
|
4584
4614
|
const {
|
|
4585
4615
|
runtimeState: runtimeState2
|
|
@@ -4616,7 +4646,7 @@ const FlowProgress = () => {
|
|
|
4616
4646
|
return tracker();
|
|
4617
4647
|
},
|
|
4618
4648
|
children: (t) => (() => {
|
|
4619
|
-
var _el$2 = _tmpl$4$
|
|
4649
|
+
var _el$2 = _tmpl$4$g(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$3.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling;
|
|
4620
4650
|
insert(_el$4, () => t().goal);
|
|
4621
4651
|
insert(_el$5, () => progressPercent(t().steps), _el$6);
|
|
4622
4652
|
insert(_el$9, createComponent(For, {
|
|
@@ -4661,7 +4691,7 @@ const FlowProgress = () => {
|
|
|
4661
4691
|
return memo(() => !!flow())() && !tracker();
|
|
4662
4692
|
},
|
|
4663
4693
|
children: (f) => (() => {
|
|
4664
|
-
var _el$15 = _tmpl$4$
|
|
4694
|
+
var _el$15 = _tmpl$4$g(), _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$16.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$20.nextSibling;
|
|
4665
4695
|
insert(_el$17, () => f().goal);
|
|
4666
4696
|
insert(_el$18, () => progressPercent(f().steps), _el$19);
|
|
4667
4697
|
insert(_el$22, createComponent(For, {
|
|
@@ -4710,7 +4740,7 @@ function formatTime(iso, options) {
|
|
|
4710
4740
|
...options?.includeSeconds && { second: "2-digit" }
|
|
4711
4741
|
});
|
|
4712
4742
|
}
|
|
4713
|
-
var _tmpl$$i = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$i = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$g = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$
|
|
4743
|
+
var _tmpl$$i = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$i = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$g = /* @__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 Timeline</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>`);
|
|
4714
4744
|
const AgentTranscriptDock = () => {
|
|
4715
4745
|
const {
|
|
4716
4746
|
runtimeState: runtimeState2
|
|
@@ -4776,7 +4806,7 @@ const AgentTranscriptDock = () => {
|
|
|
4776
4806
|
return !isSummary();
|
|
4777
4807
|
},
|
|
4778
4808
|
get children() {
|
|
4779
|
-
var _el$2 = _tmpl$4$
|
|
4809
|
+
var _el$2 = _tmpl$4$f(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
4780
4810
|
_el$4.firstChild;
|
|
4781
4811
|
var _el$7 = _el$4.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
|
|
4782
4812
|
insert(_el$4, createComponent(Show, {
|
|
@@ -5181,7 +5211,7 @@ function isEditableTarget(target) {
|
|
|
5181
5211
|
}
|
|
5182
5212
|
return target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable;
|
|
5183
5213
|
}
|
|
5184
|
-
var _tmpl$$h = /* @__PURE__ */ template(`<div class=browser-command-overlay><section class=browser-command-palette><div class=browser-command-search><input placeholder="Search browser commands..."><kbd>Esc</kbd></div><div class=browser-command-list role=listbox>`), _tmpl$2$h = /* @__PURE__ */ template(`<div class=browser-command-empty>No matching commands`), _tmpl$3$f = /* @__PURE__ */ template(`<button type=button class=browser-command-item role=option><span class=browser-command-icon></span><span class=browser-command-copy><span class=browser-command-label></span><span class=browser-command-hint>`), _tmpl$4$
|
|
5214
|
+
var _tmpl$$h = /* @__PURE__ */ template(`<div class=browser-command-overlay><section class=browser-command-palette><div class=browser-command-search><input placeholder="Search browser commands..."><kbd>Esc</kbd></div><div class=browser-command-list role=listbox>`), _tmpl$2$h = /* @__PURE__ */ template(`<div class=browser-command-empty>No matching commands`), _tmpl$3$f = /* @__PURE__ */ template(`<button type=button class=browser-command-item role=option><span class=browser-command-icon></span><span class=browser-command-copy><span class=browser-command-label></span><span class=browser-command-hint>`), _tmpl$4$e = /* @__PURE__ */ template(`<kbd class=browser-command-shortcut>`);
|
|
5185
5215
|
const PALETTE_EXIT_MS = 160;
|
|
5186
5216
|
const COMMAND_ICONS = {
|
|
5187
5217
|
"app-window": app_window_default,
|
|
@@ -5358,7 +5388,7 @@ const BrowserCommandPalette = (props) => {
|
|
|
5358
5388
|
return command.shortcut;
|
|
5359
5389
|
},
|
|
5360
5390
|
children: (shortcut) => (() => {
|
|
5361
|
-
var _el$10 = _tmpl$4$
|
|
5391
|
+
var _el$10 = _tmpl$4$e();
|
|
5362
5392
|
insert(_el$10, shortcut);
|
|
5363
5393
|
return _el$10;
|
|
5364
5394
|
})()
|
|
@@ -5852,7 +5882,7 @@ function useProviderAuthSetup(options = {}) {
|
|
|
5852
5882
|
startOpenRouterAuth
|
|
5853
5883
|
};
|
|
5854
5884
|
}
|
|
5855
|
-
var _tmpl$$g = /* @__PURE__ */ template(`<p class=command-bar-no-provider-error>`), _tmpl$2$g = /* @__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$
|
|
5885
|
+
var _tmpl$$g = /* @__PURE__ */ template(`<p class=command-bar-no-provider-error>`), _tmpl$2$g = /* @__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$d = /* @__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`);
|
|
5856
5886
|
const COMMAND_BAR_EXIT_MS = 200;
|
|
5857
5887
|
const CommandBar = () => {
|
|
5858
5888
|
const {
|
|
@@ -5986,7 +6016,7 @@ const CommandBar = () => {
|
|
|
5986
6016
|
return _tmpl$7$a();
|
|
5987
6017
|
},
|
|
5988
6018
|
get children() {
|
|
5989
|
-
return _tmpl$4$
|
|
6019
|
+
return _tmpl$4$d();
|
|
5990
6020
|
}
|
|
5991
6021
|
}), null);
|
|
5992
6022
|
createRenderEffect((_p$) => {
|
|
@@ -7365,7 +7395,7 @@ function sanitizeUrl(url) {
|
|
|
7365
7395
|
}
|
|
7366
7396
|
function applyInlineMarkdown(text2) {
|
|
7367
7397
|
const codeSpans = [];
|
|
7368
|
-
|
|
7398
|
+
const withCodeTokens = text2.replace(/`([^`]+)`/g, (_, code) => {
|
|
7369
7399
|
const token = `\0CS${codeSpans.length}\0`;
|
|
7370
7400
|
codeSpans.push(`<code>${escapeHtml(code)}</code>`);
|
|
7371
7401
|
return token;
|
|
@@ -7382,7 +7412,7 @@ function applyInlineMarkdown(text2) {
|
|
|
7382
7412
|
return `<a href="${escapeHtml(safeHref)}" target="_blank" rel="noreferrer">${escapeHtml(safeLabel)}</a>`;
|
|
7383
7413
|
}
|
|
7384
7414
|
);
|
|
7385
|
-
html2 = html2.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>").replace(/__([^_]+)__/g, "<strong>$1</strong>").replace(/(^|[
|
|
7415
|
+
html2 = html2.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>").replace(/__([^_]+)__/g, "<strong>$1</strong>").replace(/(^|[^*])\*(?!\s)([^*\n]+?)(?<!\s)\*/g, "$1<em>$2</em>").replace(/(^|[^_])_(?!\s)([^_\n]+?)(?<!\s)_/g, "$1<em>$2</em>");
|
|
7386
7416
|
return codeSpans.reduce(
|
|
7387
7417
|
(output, snippet, index) => output.replace(`\0CS${index}\0`, snippet),
|
|
7388
7418
|
html2
|
|
@@ -7713,7 +7743,7 @@ function getBookmarkSearchMatch(args) {
|
|
|
7713
7743
|
}
|
|
7714
7744
|
return { matchedFields, score };
|
|
7715
7745
|
}
|
|
7716
|
-
var _tmpl$$f = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$f = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$d = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$
|
|
7746
|
+
var _tmpl$$f = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$2$f = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$3$d = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$4$c = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`);
|
|
7717
7747
|
const DropdownSelect = (props) => {
|
|
7718
7748
|
const [open, setOpen] = createSignal(false);
|
|
7719
7749
|
let rootRef;
|
|
@@ -7753,7 +7783,7 @@ const DropdownSelect = (props) => {
|
|
|
7753
7783
|
return props.options;
|
|
7754
7784
|
},
|
|
7755
7785
|
children: (option) => (() => {
|
|
7756
|
-
var _el$6 = _tmpl$4$
|
|
7786
|
+
var _el$6 = _tmpl$4$c(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
|
|
7757
7787
|
_el$6.$$click = () => {
|
|
7758
7788
|
props.onChange(option.value);
|
|
7759
7789
|
setOpen(false);
|
|
@@ -7950,7 +7980,7 @@ function renderKitPrompt(kit, values) {
|
|
|
7950
7980
|
(_, key) => values[key] ?? ""
|
|
7951
7981
|
);
|
|
7952
7982
|
}
|
|
7953
|
-
var _tmpl$$e = /* @__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$e = /* @__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$
|
|
7983
|
+
var _tmpl$$e = /* @__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$e = /* @__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$b = /* @__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>`);
|
|
7954
7984
|
const ICON_MAP = {
|
|
7955
7985
|
BookOpen: book_open_default,
|
|
7956
7986
|
Tag: tag_default,
|
|
@@ -8304,7 +8334,7 @@ const AutomationTab = (props) => {
|
|
|
8304
8334
|
return _el$11;
|
|
8305
8335
|
}
|
|
8306
8336
|
}), (() => {
|
|
8307
|
-
var _el$14 = _tmpl$4$
|
|
8337
|
+
var _el$14 = _tmpl$4$b();
|
|
8308
8338
|
insert(_el$14, createComponent(For, {
|
|
8309
8339
|
get each() {
|
|
8310
8340
|
return allKits();
|
|
@@ -8866,7 +8896,7 @@ function useResearch() {
|
|
|
8866
8896
|
}
|
|
8867
8897
|
};
|
|
8868
8898
|
}
|
|
8869
|
-
var _tmpl$$d = /* @__PURE__ */ template(`<div class=markdown-content>`), _tmpl$2$d = /* @__PURE__ */ template(`<div>`), _tmpl$3$b = /* @__PURE__ */ template(`<div class=research-premium-notice><span class=premium-badge>Premium</span> Brief is free; full research and export require Vessel Premium.`), _tmpl$4$
|
|
8899
|
+
var _tmpl$$d = /* @__PURE__ */ template(`<div class=markdown-content>`), _tmpl$2$d = /* @__PURE__ */ template(`<div>`), _tmpl$3$b = /* @__PURE__ */ template(`<div class=research-premium-notice><span class=premium-badge>Premium</span> Brief is free; full research and export require Vessel Premium.`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=research-brief-status>`), _tmpl$5$a = /* @__PURE__ */ template(`<div class=research-idle><h3>Research Desk</h3><p>Start with a topic. Vessel will shape it into a focused brief, draft a research plan, and then send sub-agents after the strongest sources.</p><form class=research-topic-form><textarea class=research-topic-input rows=3 placeholder="What should we research?"></textarea><button class=research-start-btn type=submit>Start Briefing`), _tmpl$6$a = /* @__PURE__ */ template(`<div class=research-brief-loading role=status aria-live=polite><span class=research-spinner aria-hidden=true></span><div><div class=research-loading-title>Brief started</div><div class=research-loading-copy>Preparing the first briefing question...`), _tmpl$7$8 = /* @__PURE__ */ template(`<div class="research-brief-status thinking"role=status aria-live=polite><span class=research-spinner aria-hidden=true></span><span>Thinking...`), _tmpl$8$7 = /* @__PURE__ */ template(`<div class=research-brief-status> queued`), _tmpl$9$6 = /* @__PURE__ */ template(`<div class=research-phase><h3>Briefing</h3><p>Work through the brief here. Once the assistant has enough context, turn it into a research plan.</p><div class=research-brief-thread></div><form class=research-brief-form><textarea class=research-brief-input rows=2></textarea><button type=submit></button></form><div class=phase-controls><button>Build Research Plan</button><button class=secondary>Cancel`), _tmpl$0$4 = /* @__PURE__ */ template(`<div class=research-phase><h3>Planning Research</h3><p>Creating Research Objectives based on your brief...`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=research-phase><h3>Research Objectives`), _tmpl$10$4 = /* @__PURE__ */ template(`<div class=research-thread-progress-list>`), _tmpl$11$4 = /* @__PURE__ */ template(`<button>Switch to Walk-Away`), _tmpl$12$4 = /* @__PURE__ */ template(`<button>Switch to Interactive`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=research-phase><h3>Researching</h3><div class=research-active-card role=status aria-live=polite><span class="research-spinner research-active-spinner"aria-hidden=true></span><div class=research-active-copy><div class=research-active-title>Agents are working</div><p> of <!> threads complete</p></div></div><div class=phase-controls><button class=secondary>Stop Research</button><button>Stop Research & Synthesize Current Findings`), _tmpl$14$3 = /* @__PURE__ */ template(`<div class=research-phase><h3>Synthesizing Report</h3><p>Compiling findings into the Research Report...`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=research-phase><h3>Report Ready`), _tmpl$16$2 = /* @__PURE__ */ template(`<div class=research-desk>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class="research-quick-replies inline"aria-label="Suggested briefing responses">`), _tmpl$18$2 = /* @__PURE__ */ template(`<button type=button class=research-quick-reply>`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=objectives-card><section class=objectives-section><p class=objectives-label>Question</p><p class=objectives-question></p></section><section class=objectives-section><div class=objectives-section-header><p class=objectives-label>Research Threads</p><span></span></div><ul class=objectives-thread-list></ul></section><section class="objectives-section objectives-settings"><label class=mode-toggle><input type=checkbox><span>Walk-away mode (notified when done)</span></label><label class=traces-toggle><input type=checkbox><span>Include agent traces with report</span></label></section><div class=phase-controls><button>Start Research</button><button class=secondary>Cancel`), _tmpl$20$2 = /* @__PURE__ */ template(`<li><span></span><small> sources`), _tmpl$21$2 = /* @__PURE__ */ template(`<section class=objectives-section><p class=objectives-label>Excluded Sources</p><div class=objectives-source-list>`), _tmpl$22$2 = /* @__PURE__ */ template(`<span>`), _tmpl$23$2 = /* @__PURE__ */ template(`<div><span></span><small>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=report-card><h4></h4><p>...</p><p> sources cited</p><button>Export as Markdown</button><button class=secondary>New Research`);
|
|
8870
8900
|
const ResearchBriefMarkdown = (props) => {
|
|
8871
8901
|
const html2 = createMemo(() => renderMarkdown(props.content));
|
|
8872
8902
|
return (() => {
|
|
@@ -8939,7 +8969,7 @@ function extractFollowUpOptions(prompt) {
|
|
|
8939
8969
|
if (j >= lines.length) continue;
|
|
8940
8970
|
const nextLine = lines[j].trim();
|
|
8941
8971
|
if (EXPLICIT_OPTION_PREFIX.test(nextLine)) continue;
|
|
8942
|
-
if (!/[
|
|
8972
|
+
if (!/[,;/|]|\bor\b/.test(nextLine)) continue;
|
|
8943
8973
|
options.push(...extractDelimitedOptions(nextLine));
|
|
8944
8974
|
}
|
|
8945
8975
|
return uniqueQuickReplies(options);
|
|
@@ -8954,7 +8984,7 @@ function extractInlineOptions(prompt) {
|
|
|
8954
8984
|
if (/\b(?:options?|choices?|examples?|example answers?|examples? include|sample answers?|sample responses?)\b.*[::]/i.test(afterQuestion)) {
|
|
8955
8985
|
continue;
|
|
8956
8986
|
}
|
|
8957
|
-
const hasDelimiters = /[
|
|
8987
|
+
const hasDelimiters = /[,;/|]|\bor\b/.test(afterQuestion);
|
|
8958
8988
|
const hasDashList = /\s+-\s+/.test(afterQuestion);
|
|
8959
8989
|
if (!hasDelimiters && !hasDashList) continue;
|
|
8960
8990
|
if (hasDelimiters) {
|
|
@@ -8989,7 +9019,7 @@ function extractImplicitOptions(prompt) {
|
|
|
8989
9019
|
if (!line) break;
|
|
8990
9020
|
if (EXPLICIT_OPTION_PREFIX.test(line)) break;
|
|
8991
9021
|
if (SENTENCE_STARTER.test(line)) break;
|
|
8992
|
-
const hasDelimiters = /[
|
|
9022
|
+
const hasDelimiters = /[,;/|]|\bor\b/.test(line);
|
|
8993
9023
|
if (line.length > 80 && !hasDelimiters) break;
|
|
8994
9024
|
candidates.push(line);
|
|
8995
9025
|
}
|
|
@@ -9234,7 +9264,7 @@ const ResearchDesk = () => {
|
|
|
9234
9264
|
return startError();
|
|
9235
9265
|
},
|
|
9236
9266
|
get children() {
|
|
9237
|
-
var _el$1 = _tmpl$4$
|
|
9267
|
+
var _el$1 = _tmpl$4$a();
|
|
9238
9268
|
insert(_el$1, startError);
|
|
9239
9269
|
return _el$1;
|
|
9240
9270
|
}
|
|
@@ -9521,7 +9551,7 @@ const ResearchDesk = () => {
|
|
|
9521
9551
|
})();
|
|
9522
9552
|
};
|
|
9523
9553
|
delegateEvents(["input", "keydown", "click"]);
|
|
9524
|
-
var _tmpl$$c = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$c = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$a = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$
|
|
9554
|
+
var _tmpl$$c = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$c = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$a = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$9 = /* @__PURE__ */ template(`<div class=page-diff-timeline-header><div class=agent-section-title>Change history for this page</div><div class=agent-muted>Newest detections are first. Each entry is a saved change burst.`), _tmpl$5$9 = /* @__PURE__ */ template(`<div class=page-diff-history-list>`), _tmpl$6$9 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=page-diff-history-item><div class=page-diff-history-time><span class=page-diff-history-label></span><span></span></div><div class=page-diff-history-card><div class=page-diff-history-summary-list></div><div class=page-diff-history-position>Entry <!> of `), _tmpl$8$6 = /* @__PURE__ */ template(`<span class=page-diff-history-summary-section>`), _tmpl$9$5 = /* @__PURE__ */ template(`<div class=page-diff-history-summary-row><span class=page-diff-history-summary>`);
|
|
9525
9555
|
const PageDiffTimeline = () => {
|
|
9526
9556
|
const {
|
|
9527
9557
|
activeTab
|
|
@@ -9605,7 +9635,7 @@ const PageDiffTimeline = () => {
|
|
|
9605
9635
|
return memo(() => !!(!loading() && !error()))() && bursts().length > 0;
|
|
9606
9636
|
},
|
|
9607
9637
|
get children() {
|
|
9608
|
-
return [_tmpl$4$
|
|
9638
|
+
return [_tmpl$4$9(), (() => {
|
|
9609
9639
|
var _el$6 = _tmpl$5$9();
|
|
9610
9640
|
insert(_el$6, createComponent(For, {
|
|
9611
9641
|
get each() {
|
|
@@ -9702,7 +9732,7 @@ const SidebarWindowControls = (props) => {
|
|
|
9702
9732
|
};
|
|
9703
9733
|
delegateEvents(["click"]);
|
|
9704
9734
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
9705
|
-
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(`<div class=sidebar-resize-handle>`), _tmpl$4$9 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$5$8 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$7$6 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$8$5 = /* @__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$9$4 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$0$3 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$1$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$10$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$11$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$12$3 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$13$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><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$14$2 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title>Load more history</span><span class=history-entry-url>Showing <!> of `), _tmpl$15$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$16$1 = /* @__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$17$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$18$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$19$1 = /* @__PURE__ */ template(`<span>`), _tmpl$20$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$22$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$23$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$24$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$25$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$26$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$27$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=sidebar><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></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$32 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$33 = /* @__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$34 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$35 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$36 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$37 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$38 = /* @__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$39 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$40 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$41 = /* @__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$42 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$43 = /* @__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$44 = /* @__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$45 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$46 = /* @__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$47 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$48 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$49 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$53 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$54 = /* @__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$55 = /* @__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$56 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$57 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$58 = /* @__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$59 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$60 = /* @__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$61 = /* @__PURE__ */ template(`<div>`), _tmpl$62 = /* @__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$63 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$64 = /* @__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$65 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
9735
|
+
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(`<div class=sidebar-resize-handle>`), _tmpl$4$8 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$5$8 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$6$8 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$7$6 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$8$5 = /* @__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$9$4 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$0$3 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$1$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$10$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$11$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$12$3 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$13$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><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$14$2 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title>Load more history</span><span class=history-entry-url>Showing <!> of `), _tmpl$15$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$16$1 = /* @__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$17$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$18$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$19$1 = /* @__PURE__ */ template(`<span>`), _tmpl$20$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$22$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$23$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$24$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$25$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$26$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=var(--accent-primary) stroke=var(--accent-primary) 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$27$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=sidebar><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></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$32 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$33 = /* @__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$34 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$35 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$36 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$37 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$38 = /* @__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$39 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$40 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$41 = /* @__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$42 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$43 = /* @__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$44 = /* @__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$45 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$46 = /* @__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$47 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$48 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$49 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$53 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$54 = /* @__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$55 = /* @__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$56 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$57 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$58 = /* @__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$59 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$60 = /* @__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$61 = /* @__PURE__ */ template(`<div>`), _tmpl$62 = /* @__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$63 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$64 = /* @__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$65 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
9706
9736
|
const UNSORTED_FOLDER = {
|
|
9707
9737
|
id: "unsorted",
|
|
9708
9738
|
name: "Unsorted",
|
|
@@ -9988,7 +10018,6 @@ ${contextBlock}` : contextBlock);
|
|
|
9988
10018
|
const [deletingFolderId, setDeletingFolderId] = createSignal(null);
|
|
9989
10019
|
const [expandedFolderIds, setExpandedFolderIds] = createSignal([UNSORTED_FOLDER.id]);
|
|
9990
10020
|
const [actionsExpanded, setActionsExpanded] = createSignal(false);
|
|
9991
|
-
const [checkpointsExpanded, setCheckpointsExpanded] = createSignal(false);
|
|
9992
10021
|
const [isDragging, setIsDragging] = createSignal(false);
|
|
9993
10022
|
const now2 = useNow();
|
|
9994
10023
|
let messagesContainerRef;
|
|
@@ -10357,7 +10386,7 @@ ${contextBlock}` : contextBlock);
|
|
|
10357
10386
|
return runtimeState2().supervisor.pendingApprovals.length > 0;
|
|
10358
10387
|
},
|
|
10359
10388
|
get children() {
|
|
10360
|
-
var _el$17 = _tmpl$4$
|
|
10389
|
+
var _el$17 = _tmpl$4$8();
|
|
10361
10390
|
insert(_el$17, () => runtimeState2().supervisor.pendingApprovals.length);
|
|
10362
10391
|
return _el$17;
|
|
10363
10392
|
}
|
|
@@ -11341,7 +11370,7 @@ ${contextBlock}` : contextBlock);
|
|
|
11341
11370
|
});
|
|
11342
11371
|
};
|
|
11343
11372
|
delegateEvents(["click", "pointerdown", "input", "keydown"]);
|
|
11344
|
-
var _tmpl$$9 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$9 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$8 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$
|
|
11373
|
+
var _tmpl$$9 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$9 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$8 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$7 = /* @__PURE__ */ template(`<div class=devtools-network><div class=network-header><span>Method</span><span>URL</span><span>Status</span><span>Type</span><span>Time`), _tmpl$5$7 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for network requests... Network monitoring activates when an agent uses devtools.`), _tmpl$6$7 = /* @__PURE__ */ template(`<div><span class=network-method></span><span class=network-url></span><span></span><span class=network-type></span><span class=network-duration>`), _tmpl$7$5 = /* @__PURE__ */ template(`<div class=devtools-activity>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for agent devtools activity...`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=activity-entry><span class=activity-time></span><span class=activity-tool></span><span class=activity-args></span><span></span><span class=activity-duration>`), _tmpl$0$2 = /* @__PURE__ */ template(`<span class="devtools-tab-badge error">`), _tmpl$1$2 = /* @__PURE__ */ template(`<span class="devtools-tab-badge count">`), _tmpl$10$2 = /* @__PURE__ */ template(`<div class=export-date-inputs><div class=export-date-row><span class=export-date-label>From</span><input class=export-date-input type=date></div><div class=export-date-row><span class=export-date-label>To</span><input class=export-date-input type=date>`), _tmpl$11$2 = /* @__PURE__ */ template(`<div class=devtools-export-dropdown><div class=export-section><div class=export-section-label>Log Types</div><label class=export-checkbox><input type=checkbox>Console</label><label class=export-checkbox><input type=checkbox>Network</label><label class=export-checkbox><input type=checkbox>Activity</label></div><div class=export-section><div class=export-section-label>Date Range</div><div class=export-date-btns><button>Today</button><button>Custom</button></div></div><button class=export-submit>Export JSON`), _tmpl$12$2 = /* @__PURE__ */ template(`<div class=devtools-panel><div class=devtools-tabs><button>Console</button><button>Network</button><button>Activity</button><div class=devtools-tab-spacer></div><div class=devtools-export-wrap><button title="Export Logs"><svg width=13 height=13 viewBox="0 0 13 13"fill=none style=vertical-align:middle><path d="M6.5 1v7M3.5 5l3 3 3-3"stroke=currentColor stroke-width=1.3 stroke-linecap=round stroke-linejoin=round></path><path d="M1 9.5v1A1.5 1.5 0 0 0 2.5 12h8A1.5 1.5 0 0 0 12 10.5v-1"stroke=currentColor stroke-width=1.3 stroke-linecap=round></path></svg></button></div><button class=devtools-close-btn title="Close DevTools">×</button></div><div class=devtools-content>`);
|
|
11345
11374
|
function statusClass(status) {
|
|
11346
11375
|
if (status == null) return "pending";
|
|
11347
11376
|
if (status >= 200 && status < 300) return "ok";
|
|
@@ -11390,7 +11419,7 @@ const ConsoleView = (props) => {
|
|
|
11390
11419
|
autoScroll = atBottom;
|
|
11391
11420
|
};
|
|
11392
11421
|
createEffect(() => {
|
|
11393
|
-
props.entries.length;
|
|
11422
|
+
void props.entries.length;
|
|
11394
11423
|
if (autoScroll && scrollRef) {
|
|
11395
11424
|
requestAnimationFrame(() => {
|
|
11396
11425
|
scrollRef.scrollTop = scrollRef.scrollHeight;
|
|
@@ -11446,7 +11475,7 @@ const NetworkView = (props) => {
|
|
|
11446
11475
|
autoScroll = atBottom;
|
|
11447
11476
|
};
|
|
11448
11477
|
createEffect(() => {
|
|
11449
|
-
props.entries.length;
|
|
11478
|
+
void props.entries.length;
|
|
11450
11479
|
if (autoScroll && scrollRef) {
|
|
11451
11480
|
requestAnimationFrame(() => {
|
|
11452
11481
|
scrollRef.scrollTop = scrollRef.scrollHeight;
|
|
@@ -11461,7 +11490,7 @@ const NetworkView = (props) => {
|
|
|
11461
11490
|
return _tmpl$5$7();
|
|
11462
11491
|
},
|
|
11463
11492
|
get children() {
|
|
11464
|
-
var _el$8 = _tmpl$4$
|
|
11493
|
+
var _el$8 = _tmpl$4$7();
|
|
11465
11494
|
_el$8.firstChild;
|
|
11466
11495
|
_el$8.addEventListener("scroll", onScroll);
|
|
11467
11496
|
var _ref$2 = scrollRef;
|
|
@@ -11874,7 +11903,7 @@ const PROVIDERS = {
|
|
|
11874
11903
|
apiKeyHint: "Optional — only if your endpoint requires authentication"
|
|
11875
11904
|
}
|
|
11876
11905
|
};
|
|
11877
|
-
var _tmpl$$8 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$8 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>×</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — switch to AI & Agent to add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown in AI & Agent</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$7 = /* @__PURE__ */ template(`<button type=button class=settings-secondary-btn>Open latest release`), _tmpl$4$
|
|
11906
|
+
var _tmpl$$8 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><button class="premium-btn premium-btn-upgrade">Try Premium free for 7 days — $5.99/mo after</button><span class=welcome-banner-note>Best for screenshots, saved sessions, credential vault, and longer autonomous runs.`), _tmpl$2$8 = /* @__PURE__ */ template(`<div class=welcome-banner><div class=welcome-banner-header><span class=welcome-banner-title>Welcome to Vessel</span><button class=welcome-banner-dismiss>×</button></div><p class=welcome-banner-text>Get started in three steps:</p><ol class=welcome-banner-steps><li><strong>Configure a chat provider</strong> — switch to AI & Agent to add an API key</li><li><strong>Connect your agent harness</strong> — point it at the MCP endpoint shown in AI & Agent</li><li><strong>Learn the shortcuts</strong> — press <kbd>?</kbd> anytime for a quick reference`), _tmpl$3$7 = /* @__PURE__ */ template(`<button type=button class=settings-secondary-btn>Open latest release`), _tmpl$4$6 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label for=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=default-search-engine>Default Search Engine</label><select id=default-search-engine class=settings-input><option value=none>None (disabled)</option></select><p class=settings-hint>Used for searches typed directly into the address bar and for agent web-search fallbacks. "None" disables address-bar search, so entries are treated as URLs only.</p></div><div class=settings-field><label class=settings-label for=download-path>Download Location</label><input id=download-path class=settings-input placeholder="Default: ~/Downloads"><p class=settings-hint>Directory for saved files. Leave blank to use the system default Downloads folder.</p></div><div class=settings-field><label class=settings-label for=theme-select>Theme</label><select id=theme-select class="settings-input settings-select"><option value=dark>Dark</option><option value=light>Light</option></select><p class=settings-hint>Choose the application color scheme. Takes effect after saving.</p></div><div class=settings-field><label class=settings-label>Updates</label><div class=settings-inline-actions><button type=button class=settings-secondary-btn></button></div><p class=settings-hint>Checks the published npm package and links to GitHub Releases for installers/AppImages.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.`), _tmpl$5$6 = /* @__PURE__ */ template(`<option>`), _tmpl$6$6 = /* @__PURE__ */ template(`<p class=settings-hint>`);
|
|
11878
11907
|
const SettingsGeneral = (props) => {
|
|
11879
11908
|
const [checkingUpdates, setCheckingUpdates] = createSignal(false);
|
|
11880
11909
|
const [updateResult, setUpdateResult] = createSignal(null);
|
|
@@ -11887,7 +11916,7 @@ const SettingsGeneral = (props) => {
|
|
|
11887
11916
|
}
|
|
11888
11917
|
};
|
|
11889
11918
|
return (() => {
|
|
11890
|
-
var _el$ = _tmpl$4$
|
|
11919
|
+
var _el$ = _tmpl$4$6(), _el$0 = _el$.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$0.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.nextSibling, _el$14 = _el$13.firstChild, _el$15 = _el$11.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling, _el$18 = _el$15.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling, _el$24 = _el$23.firstChild, _el$26 = _el$23.nextSibling, _el$27 = _el$21.nextSibling, _el$28 = _el$27.firstChild, _el$29 = _el$28.firstChild, _el$30 = _el$27.nextSibling, _el$31 = _el$30.firstChild, _el$32 = _el$31.firstChild;
|
|
11891
11920
|
insert(_el$, createComponent(Show, {
|
|
11892
11921
|
get when() {
|
|
11893
11922
|
return props.welcomeBanner.show();
|
|
@@ -11993,7 +12022,7 @@ const SettingsGeneral = (props) => {
|
|
|
11993
12022
|
})();
|
|
11994
12023
|
};
|
|
11995
12024
|
delegateEvents(["click", "input"]);
|
|
11996
|
-
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$
|
|
12025
|
+
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$5 = /* @__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>`);
|
|
11997
12026
|
const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
|
|
11998
12027
|
id: p.id,
|
|
11999
12028
|
name: p.name,
|
|
@@ -12145,7 +12174,7 @@ const SettingsAgent = (props) => {
|
|
|
12145
12174
|
},
|
|
12146
12175
|
get children() {
|
|
12147
12176
|
return [(() => {
|
|
12148
|
-
var _el$15 = _tmpl$4$
|
|
12177
|
+
var _el$15 = _tmpl$4$5(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
12149
12178
|
_el$17.firstChild;
|
|
12150
12179
|
insert(_el$17, () => props.chat.codexAccountEmail() || "ChatGPT", null);
|
|
12151
12180
|
return _el$15;
|
|
@@ -12404,7 +12433,7 @@ const SettingsAgent = (props) => {
|
|
|
12404
12433
|
})();
|
|
12405
12434
|
};
|
|
12406
12435
|
delegateEvents(["click", "input"]);
|
|
12407
|
-
var _tmpl$$6 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$2$6 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$4$
|
|
12436
|
+
var _tmpl$$6 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$2$6 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$4$4 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$6$4 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Save login credentials for any website. Passwords are encrypted locally and filled directly into login forms. The agent can list and fill them with your consent, but passwords are never sent to AI providers.`), _tmpl$7$3 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Password`), _tmpl$8$2 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Title (e.g. GitHub Personal)"><input class=settings-input placeholder="URL (e.g. https://github.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><select class=settings-input><option value=login>Login</option><option value=credit_card>Credit Card</option><option value=identity>Identity</option><option value=secure_note>Secure Note</option></select><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Password</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$9$1 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$0 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$1 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-field><label class=settings-label>Passwords</label></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · </span></div><button class=vault-entry-remove title="Remove credential">×`), _tmpl$12 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Your personal password manager. Save, organize, and autofill login credentials. Upgrade to Premium to unlock Passwords.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · </span></div><button class=vault-entry-remove title="Remove password">×`), _tmpl$15 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail></span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Fill forms on current page with this profile"style="padding:2px 10px;font-size:12px">Fill</button><button class=vault-entry-remove title="Remove profile">×`);
|
|
12408
12437
|
const SettingsVaults = (props) => {
|
|
12409
12438
|
const v = props.vault;
|
|
12410
12439
|
const h = props.humanVault;
|
|
@@ -12466,7 +12495,7 @@ const SettingsVaults = (props) => {
|
|
|
12466
12495
|
return !v.adding();
|
|
12467
12496
|
},
|
|
12468
12497
|
get children() {
|
|
12469
|
-
var _el$8 = _tmpl$4$
|
|
12498
|
+
var _el$8 = _tmpl$4$4();
|
|
12470
12499
|
_el$8.$$click = () => {
|
|
12471
12500
|
v.setAdding(true);
|
|
12472
12501
|
v.setMessage(null);
|
|
@@ -12764,7 +12793,7 @@ const SettingsVaults = (props) => {
|
|
|
12764
12793
|
})();
|
|
12765
12794
|
};
|
|
12766
12795
|
delegateEvents(["click", "input"]);
|
|
12767
|
-
var _tmpl$$5 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$2$5 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$3$4 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$4$
|
|
12796
|
+
var _tmpl$$5 = /* @__PURE__ */ template(`<textarea class="settings-input settings-textarea"rows=4>`), _tmpl$2$5 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$3$4 = /* @__PURE__ */ template(`<p class=settings-hint>Restrict which domains can be navigated to. Use allowlist mode for kiosk or supervised browsing, blocklist to block specific sites.`), _tmpl$4$3 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label for=domain-policy-mode>Domain Restrictions</label><select id=domain-policy-mode class="settings-input settings-select"><option value=none>No restrictions</option><option value=allowlist>Allowlist (only listed domains)</option><option value=blocklist>Blocklist (block listed domains)</option></select></div><div class=settings-field><label class=settings-label for=source-do-not-allow-list>Source Do Not Allow List</label><textarea id=source-do-not-allow-list class="settings-input settings-textarea"rows=4 placeholder="example.com
|
|
12768
12797
|
low-quality-source.net"></textarea><p class=settings-hint>One domain per line. Research Desk will avoid citing or visiting these sources during research, without blocking normal browsing.</p></div><div class=settings-field><label class=settings-label>Site Permissions</label><p class=settings-hint>Camera, microphone, location, notifications, and other site capability choices remembered by Vessel.</p><div class=settings-list></div><button type=button class=settings-secondary-btn>Clear saved permissions</button></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Anonymous Usage Analytics</span></label><p class=settings-hint>Help improve Vessel by sending anonymous usage data (tool popularity, session duration, provider type). No URLs, page content, queries, or personal data is ever collected.`), _tmpl$5$3 = /* @__PURE__ */ template(`<p class=settings-hint>No saved permission decisions yet.`), _tmpl$6$3 = /* @__PURE__ */ template(`<div class=settings-list-row><span></span><span>: `);
|
|
12769
12798
|
const SettingsPrivacy = (props) => {
|
|
12770
12799
|
const [permissions, setPermissions] = createSignal([]);
|
|
@@ -12773,7 +12802,7 @@ const SettingsPrivacy = (props) => {
|
|
|
12773
12802
|
void loadPermissions();
|
|
12774
12803
|
});
|
|
12775
12804
|
return (() => {
|
|
12776
|
-
var _el$ = _tmpl$4$
|
|
12805
|
+
var _el$ = _tmpl$4$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$8 = _el$2.nextSibling, _el$9 = _el$8.firstChild, _el$0 = _el$9.nextSibling, _el$1 = _el$8.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling, _el$14 = _el$1.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild;
|
|
12777
12806
|
_el$4.addEventListener("change", (e) => props.setDomainMode(e.currentTarget.value));
|
|
12778
12807
|
insert(_el$2, createComponent(Show, {
|
|
12779
12808
|
get when() {
|
|
@@ -12839,7 +12868,7 @@ const SettingsPrivacy = (props) => {
|
|
|
12839
12868
|
})();
|
|
12840
12869
|
};
|
|
12841
12870
|
delegateEvents(["input", "click"]);
|
|
12842
|
-
var _tmpl$$4 = /* @__PURE__ */ template(`<div class=settings-feedback-form><input class=settings-input type=email placeholder="Your reply email"><textarea class="settings-textarea settings-feedback-textarea"placeholder="Tell us what happened, what you expected, or what would make Vessel better."></textarea><div class=settings-inline-actions><button class=settings-secondary-btn>`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$3$3 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$4$
|
|
12871
|
+
var _tmpl$$4 = /* @__PURE__ */ template(`<div class=settings-feedback-form><input class=settings-input type=email placeholder="Your reply email"><textarea class="settings-textarea settings-feedback-textarea"placeholder="Tell us what happened, what you expected, or what would make Vessel better."></textarea><div class=settings-inline-actions><button class=settings-secondary-btn>`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$3$3 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$4$2 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label>Support</label><div class=settings-inline-actions><button class=settings-secondary-btn></button></div></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current`), _tmpl$5$2 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$6$2 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$7$2 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$8$1 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade">`), _tmpl$9 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · <!> cookies · <!> domains</span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Restore this session (replaces current tabs and cookies)"style="padding:2px 10px;font-size:12px">Load</button><button class=vault-entry-remove title="Delete session">×`);
|
|
12843
12872
|
const SettingsAccount = (props) => {
|
|
12844
12873
|
const p = props.premium;
|
|
12845
12874
|
const s = props.sessions;
|
|
@@ -12871,7 +12900,7 @@ const SettingsAccount = (props) => {
|
|
|
12871
12900
|
}
|
|
12872
12901
|
};
|
|
12873
12902
|
return (() => {
|
|
12874
|
-
var _el$ = _tmpl$4$
|
|
12903
|
+
var _el$ = _tmpl$4$2(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.firstChild, _el$1 = _el$2.nextSibling;
|
|
12875
12904
|
_el$1.firstChild;
|
|
12876
12905
|
var _el$18 = _el$1.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling;
|
|
12877
12906
|
_el$5.$$click = () => {
|
|
@@ -13195,715 +13224,7 @@ const SettingsAccount = (props) => {
|
|
|
13195
13224
|
})();
|
|
13196
13225
|
};
|
|
13197
13226
|
delegateEvents(["click", "input"]);
|
|
13198
|
-
var _tmpl$$3 = /* @__PURE__ */ template(`<div class=settings-compact-upsell><span class=settings-compact-upsell-text>Premium: screenshots, saved sessions, credential vault, and longer autonomous runs.</span><div class=settings-compact-upsell-actions><button class="premium-btn premium-btn-upgrade">Try free for 7 days</button><button class="premium-btn premium-btn-activate">Activate`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-layout><nav class=settings-sidebar role=navigation aria-label="Settings categories"><button class=settings-nav-item><span>General</span></button><button class=settings-nav-item><span>AI & Agent</span></button><button class=settings-nav-item><span>Vaults</span></button><button class=settings-nav-item><span>Privacy</span></button><button class=settings-nav-item><span>Account</span></button></nav><div class=settings-content></div></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$3$2 = /* @__PURE__ */ template(`<
|
|
13199
|
-
.settings-panel {
|
|
13200
|
-
width: min(820px, calc(100vw - 32px));
|
|
13201
|
-
max-height: calc(100vh - 48px);
|
|
13202
|
-
display: flex;
|
|
13203
|
-
flex-direction: column;
|
|
13204
|
-
overflow: hidden;
|
|
13205
|
-
background: var(--bg-elevated);
|
|
13206
|
-
border: 1px solid var(--border-visible);
|
|
13207
|
-
border-radius: 14px;
|
|
13208
|
-
padding: 28px 24px 24px;
|
|
13209
|
-
overscroll-behavior: contain;
|
|
13210
|
-
box-shadow:
|
|
13211
|
-
0 4px 24px var(--shadow-color),
|
|
13212
|
-
0 24px 64px var(--shadow-color-strong),
|
|
13213
|
-
inset 0 1px 0 var(--inset-highlight);
|
|
13214
|
-
animation: command-bar-enter 350ms var(--ease-out-expo) both;
|
|
13215
|
-
}
|
|
13216
|
-
.command-bar-overlay.closing .settings-panel {
|
|
13217
|
-
animation: command-bar-exit 200ms var(--ease-in-out) both;
|
|
13218
|
-
}
|
|
13219
|
-
.settings-title {
|
|
13220
|
-
font-size: 16px;
|
|
13221
|
-
font-weight: 600;
|
|
13222
|
-
color: var(--text-primary);
|
|
13223
|
-
margin-bottom: 22px;
|
|
13224
|
-
letter-spacing: 0.01em;
|
|
13225
|
-
flex-shrink: 0;
|
|
13226
|
-
}
|
|
13227
|
-
|
|
13228
|
-
/* Compact global upsell */
|
|
13229
|
-
.settings-compact-upsell {
|
|
13230
|
-
flex-shrink: 0;
|
|
13231
|
-
display: flex;
|
|
13232
|
-
align-items: center;
|
|
13233
|
-
justify-content: space-between;
|
|
13234
|
-
gap: 12px;
|
|
13235
|
-
padding: 8px 14px;
|
|
13236
|
-
margin-bottom: 16px;
|
|
13237
|
-
border-radius: var(--radius-md);
|
|
13238
|
-
background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
13239
|
-
border: 1px solid color-mix(in srgb, var(--accent-primary) 18%, transparent);
|
|
13240
|
-
}
|
|
13241
|
-
.settings-compact-upsell-text {
|
|
13242
|
-
font-size: 12px;
|
|
13243
|
-
color: var(--text-secondary);
|
|
13244
|
-
line-height: 1.4;
|
|
13245
|
-
}
|
|
13246
|
-
.settings-compact-upsell-actions {
|
|
13247
|
-
display: flex;
|
|
13248
|
-
gap: 8px;
|
|
13249
|
-
flex-shrink: 0;
|
|
13250
|
-
}
|
|
13251
|
-
.settings-compact-upsell-actions .premium-btn {
|
|
13252
|
-
font-size: 11px;
|
|
13253
|
-
padding: 4px 12px;
|
|
13254
|
-
height: auto;
|
|
13255
|
-
}
|
|
13256
|
-
|
|
13257
|
-
/* Sidebar + Content layout */
|
|
13258
|
-
.settings-layout {
|
|
13259
|
-
flex: 1;
|
|
13260
|
-
min-height: 0;
|
|
13261
|
-
display: flex;
|
|
13262
|
-
gap: 0;
|
|
13263
|
-
}
|
|
13264
|
-
.settings-sidebar {
|
|
13265
|
-
width: 170px;
|
|
13266
|
-
flex-shrink: 0;
|
|
13267
|
-
border-right: 1px solid var(--border-subtle);
|
|
13268
|
-
padding: 8px 8px 8px 0;
|
|
13269
|
-
display: flex;
|
|
13270
|
-
flex-direction: column;
|
|
13271
|
-
gap: 2px;
|
|
13272
|
-
}
|
|
13273
|
-
.settings-nav-item {
|
|
13274
|
-
display: flex;
|
|
13275
|
-
align-items: center;
|
|
13276
|
-
gap: 10px;
|
|
13277
|
-
width: 100%;
|
|
13278
|
-
padding: 8px 12px;
|
|
13279
|
-
border-radius: var(--radius-md);
|
|
13280
|
-
font-size: 12px;
|
|
13281
|
-
color: var(--text-secondary);
|
|
13282
|
-
background: transparent;
|
|
13283
|
-
border: none;
|
|
13284
|
-
cursor: pointer;
|
|
13285
|
-
transition: background var(--duration-fast), color var(--duration-fast);
|
|
13286
|
-
text-align: left;
|
|
13287
|
-
}
|
|
13288
|
-
.settings-nav-item:hover {
|
|
13289
|
-
background: var(--surface-hover);
|
|
13290
|
-
color: var(--text-primary);
|
|
13291
|
-
}
|
|
13292
|
-
.settings-nav-item:focus-visible {
|
|
13293
|
-
outline: 1px solid var(--accent-primary);
|
|
13294
|
-
outline-offset: -1px;
|
|
13295
|
-
}
|
|
13296
|
-
.settings-nav-item.active {
|
|
13297
|
-
background: color-mix(in srgb, var(--accent-primary) 12%, transparent);
|
|
13298
|
-
color: var(--accent-primary);
|
|
13299
|
-
font-weight: 500;
|
|
13300
|
-
}
|
|
13301
|
-
.settings-nav-item svg {
|
|
13302
|
-
flex-shrink: 0;
|
|
13303
|
-
}
|
|
13304
|
-
.settings-content {
|
|
13305
|
-
flex: 1;
|
|
13306
|
-
min-width: 0;
|
|
13307
|
-
overflow-y: auto;
|
|
13308
|
-
padding: 0 0 0 20px;
|
|
13309
|
-
overscroll-behavior: contain;
|
|
13310
|
-
scrollbar-gutter: stable;
|
|
13311
|
-
}
|
|
13312
|
-
.settings-category-panel {
|
|
13313
|
-
/* wrapper for each category's content */
|
|
13314
|
-
}
|
|
13315
|
-
|
|
13316
|
-
/* Mobile: stack sidebar above content */
|
|
13317
|
-
@media (max-width: 700px) {
|
|
13318
|
-
.settings-panel {
|
|
13319
|
-
width: min(440px, calc(100vw - 32px));
|
|
13320
|
-
}
|
|
13321
|
-
.settings-layout {
|
|
13322
|
-
flex-direction: column;
|
|
13323
|
-
}
|
|
13324
|
-
.settings-sidebar {
|
|
13325
|
-
flex-direction: row;
|
|
13326
|
-
width: 100%;
|
|
13327
|
-
border-right: none;
|
|
13328
|
-
border-bottom: 1px solid var(--border-subtle);
|
|
13329
|
-
padding: 0 0 8px 0;
|
|
13330
|
-
margin-bottom: 12px;
|
|
13331
|
-
overflow-x: auto;
|
|
13332
|
-
gap: 2px;
|
|
13333
|
-
}
|
|
13334
|
-
.settings-nav-item {
|
|
13335
|
-
flex-shrink: 0;
|
|
13336
|
-
width: auto;
|
|
13337
|
-
padding: 6px 10px;
|
|
13338
|
-
font-size: 11px;
|
|
13339
|
-
}
|
|
13340
|
-
.settings-nav-item span {
|
|
13341
|
-
display: none;
|
|
13342
|
-
}
|
|
13343
|
-
.settings-content {
|
|
13344
|
-
padding-left: 0;
|
|
13345
|
-
}
|
|
13346
|
-
}
|
|
13347
|
-
|
|
13348
|
-
.settings-callout {
|
|
13349
|
-
margin-bottom: 20px;
|
|
13350
|
-
padding: 14px;
|
|
13351
|
-
border-radius: var(--radius-md);
|
|
13352
|
-
border: 1px solid color-mix(in srgb, var(--accent-primary) 14%, transparent);
|
|
13353
|
-
background: color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
13354
|
-
}
|
|
13355
|
-
.settings-callout-title {
|
|
13356
|
-
font-size: 12px;
|
|
13357
|
-
font-weight: 600;
|
|
13358
|
-
color: var(--text-primary);
|
|
13359
|
-
margin-bottom: 6px;
|
|
13360
|
-
letter-spacing: 0.01em;
|
|
13361
|
-
}
|
|
13362
|
-
.settings-callout-copy {
|
|
13363
|
-
font-size: 12px;
|
|
13364
|
-
line-height: 1.55;
|
|
13365
|
-
color: var(--text-secondary);
|
|
13366
|
-
margin: 0;
|
|
13367
|
-
}
|
|
13368
|
-
.settings-premium-callout {
|
|
13369
|
-
background:
|
|
13370
|
-
radial-gradient(circle at top right, color-mix(in srgb, var(--accent-primary) 16%, transparent), transparent 40%),
|
|
13371
|
-
color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
13372
|
-
border-color: color-mix(in srgb, var(--accent-primary) 22%, transparent);
|
|
13373
|
-
}
|
|
13374
|
-
.settings-premium-callout-actions {
|
|
13375
|
-
display: flex;
|
|
13376
|
-
flex-wrap: wrap;
|
|
13377
|
-
gap: 10px;
|
|
13378
|
-
margin-top: 12px;
|
|
13379
|
-
}
|
|
13380
|
-
.settings-field {
|
|
13381
|
-
margin-bottom: 18px;
|
|
13382
|
-
}
|
|
13383
|
-
.settings-health {
|
|
13384
|
-
margin-bottom: 20px;
|
|
13385
|
-
padding: 14px;
|
|
13386
|
-
border-radius: var(--radius-md);
|
|
13387
|
-
border: 1px solid var(--border-visible);
|
|
13388
|
-
background: var(--surface-glass);
|
|
13389
|
-
}
|
|
13390
|
-
.settings-health-issues {
|
|
13391
|
-
display: flex;
|
|
13392
|
-
flex-direction: column;
|
|
13393
|
-
gap: 8px;
|
|
13394
|
-
margin-top: 10px;
|
|
13395
|
-
}
|
|
13396
|
-
.settings-health-issue {
|
|
13397
|
-
font-size: 12px;
|
|
13398
|
-
line-height: 1.5;
|
|
13399
|
-
padding: 10px 12px;
|
|
13400
|
-
border-radius: var(--radius-md);
|
|
13401
|
-
border: 1px solid var(--border-glass);
|
|
13402
|
-
color: var(--text-secondary);
|
|
13403
|
-
}
|
|
13404
|
-
.settings-health-issue.warning {
|
|
13405
|
-
border-color: color-mix(in srgb, var(--accent-primary) 28%, transparent);
|
|
13406
|
-
background: color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
13407
|
-
}
|
|
13408
|
-
.settings-health-issue.error {
|
|
13409
|
-
border-color: color-mix(in srgb, var(--status-error) 32%, transparent);
|
|
13410
|
-
background: color-mix(in srgb, var(--status-error) 6%, transparent);
|
|
13411
|
-
}
|
|
13412
|
-
.settings-inline-actions {
|
|
13413
|
-
display: flex;
|
|
13414
|
-
flex-wrap: wrap;
|
|
13415
|
-
gap: 8px;
|
|
13416
|
-
margin-bottom: 8px;
|
|
13417
|
-
}
|
|
13418
|
-
.settings-secondary-btn {
|
|
13419
|
-
height: 32px;
|
|
13420
|
-
padding: 0 12px;
|
|
13421
|
-
border-radius: var(--radius-md);
|
|
13422
|
-
border: 1px solid var(--border-visible);
|
|
13423
|
-
background: var(--surface-glass);
|
|
13424
|
-
color: var(--text-primary);
|
|
13425
|
-
font-size: 12px;
|
|
13426
|
-
cursor: pointer;
|
|
13427
|
-
}
|
|
13428
|
-
.settings-secondary-btn:hover:not(:disabled) {
|
|
13429
|
-
background: var(--bg-tertiary);
|
|
13430
|
-
}
|
|
13431
|
-
.settings-secondary-btn:disabled {
|
|
13432
|
-
opacity: 0.55;
|
|
13433
|
-
cursor: not-allowed;
|
|
13434
|
-
}
|
|
13435
|
-
.settings-label {
|
|
13436
|
-
display: block;
|
|
13437
|
-
font-size: 12px;
|
|
13438
|
-
color: var(--text-secondary);
|
|
13439
|
-
margin-bottom: 6px;
|
|
13440
|
-
font-weight: 500;
|
|
13441
|
-
letter-spacing: 0.01em;
|
|
13442
|
-
}
|
|
13443
|
-
.settings-label-optional {
|
|
13444
|
-
font-size: 11px;
|
|
13445
|
-
color: var(--text-muted);
|
|
13446
|
-
font-style: italic;
|
|
13447
|
-
}
|
|
13448
|
-
.settings-input {
|
|
13449
|
-
width: 100%;
|
|
13450
|
-
height: 34px;
|
|
13451
|
-
padding: 0 10px;
|
|
13452
|
-
margin: 0;
|
|
13453
|
-
border-radius: var(--radius-md);
|
|
13454
|
-
border: 1px solid var(--border-visible);
|
|
13455
|
-
background: var(--surface-glass);
|
|
13456
|
-
color: var(--text-primary);
|
|
13457
|
-
font-family: "JetBrains Mono", "SF Mono", "Fira Code", monospace;
|
|
13458
|
-
font-size: 12px;
|
|
13459
|
-
line-height: 1;
|
|
13460
|
-
box-sizing: border-box;
|
|
13461
|
-
text-rendering: auto;
|
|
13462
|
-
}
|
|
13463
|
-
.settings-select {
|
|
13464
|
-
appearance: none;
|
|
13465
|
-
padding-right: 30px;
|
|
13466
|
-
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23888'/%3E%3C/svg%3E");
|
|
13467
|
-
background-repeat: no-repeat;
|
|
13468
|
-
background-position: right 10px center;
|
|
13469
|
-
}
|
|
13470
|
-
.settings-textarea {
|
|
13471
|
-
width: 100%;
|
|
13472
|
-
padding: 8px 10px;
|
|
13473
|
-
margin: 0;
|
|
13474
|
-
border-radius: var(--radius-md);
|
|
13475
|
-
border: 1px solid var(--border-visible);
|
|
13476
|
-
background: var(--surface-glass);
|
|
13477
|
-
color: var(--text-primary);
|
|
13478
|
-
font-family: "JetBrains Mono", "SF Mono", "Fira Code", monospace;
|
|
13479
|
-
font-size: 12px;
|
|
13480
|
-
min-height: 120px;
|
|
13481
|
-
resize: vertical;
|
|
13482
|
-
box-sizing: border-box;
|
|
13483
|
-
line-height: 1.5;
|
|
13484
|
-
}
|
|
13485
|
-
.settings-feedback-textarea {
|
|
13486
|
-
margin-top: 8px;
|
|
13487
|
-
min-height: 96px;
|
|
13488
|
-
}
|
|
13489
|
-
.settings-input:focus,
|
|
13490
|
-
.settings-textarea:focus {
|
|
13491
|
-
outline: none;
|
|
13492
|
-
border-color: var(--accent-primary);
|
|
13493
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-primary) 18%, transparent);
|
|
13494
|
-
}
|
|
13495
|
-
.settings-hint {
|
|
13496
|
-
font-size: 11px;
|
|
13497
|
-
color: var(--text-muted);
|
|
13498
|
-
margin-top: 4px;
|
|
13499
|
-
line-height: 1.5;
|
|
13500
|
-
}
|
|
13501
|
-
.settings-hint code {
|
|
13502
|
-
font-size: 11px;
|
|
13503
|
-
background: var(--bg-tertiary);
|
|
13504
|
-
padding: 1px 5px;
|
|
13505
|
-
border-radius: 3px;
|
|
13506
|
-
}
|
|
13507
|
-
.settings-toggle {
|
|
13508
|
-
display: flex;
|
|
13509
|
-
align-items: center;
|
|
13510
|
-
justify-content: space-between;
|
|
13511
|
-
gap: 12px;
|
|
13512
|
-
font-size: 12px;
|
|
13513
|
-
color: var(--text-secondary);
|
|
13514
|
-
cursor: pointer;
|
|
13515
|
-
user-select: none;
|
|
13516
|
-
}
|
|
13517
|
-
.toggle-switch {
|
|
13518
|
-
position: relative;
|
|
13519
|
-
display: inline-block;
|
|
13520
|
-
width: 36px;
|
|
13521
|
-
height: 20px;
|
|
13522
|
-
border-radius: 10px;
|
|
13523
|
-
background: color-mix(in srgb, var(--text-muted) 40%, transparent);
|
|
13524
|
-
border: none;
|
|
13525
|
-
cursor: pointer;
|
|
13526
|
-
flex-shrink: 0;
|
|
13527
|
-
transition: background var(--duration-fast);
|
|
13528
|
-
}
|
|
13529
|
-
.toggle-switch:hover {
|
|
13530
|
-
background: color-mix(in srgb, var(--text-muted) 60%, transparent);
|
|
13531
|
-
}
|
|
13532
|
-
.toggle-switch.on {
|
|
13533
|
-
background: var(--accent-primary);
|
|
13534
|
-
}
|
|
13535
|
-
.toggle-switch.on:hover {
|
|
13536
|
-
background: var(--button-primary-hover-bg);
|
|
13537
|
-
}
|
|
13538
|
-
.toggle-switch-thumb {
|
|
13539
|
-
position: absolute;
|
|
13540
|
-
top: 3px;
|
|
13541
|
-
left: 3px;
|
|
13542
|
-
width: 14px;
|
|
13543
|
-
height: 14px;
|
|
13544
|
-
border-radius: 7px;
|
|
13545
|
-
background: #fff;
|
|
13546
|
-
transition: transform var(--duration-fast);
|
|
13547
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
|
|
13548
|
-
}
|
|
13549
|
-
.toggle-switch.on .toggle-switch-thumb {
|
|
13550
|
-
transform: translateX(16px);
|
|
13551
|
-
}
|
|
13552
|
-
.settings-status {
|
|
13553
|
-
margin-top: 12px;
|
|
13554
|
-
font-size: 12px;
|
|
13555
|
-
color: var(--text-secondary);
|
|
13556
|
-
line-height: 1.5;
|
|
13557
|
-
}
|
|
13558
|
-
.settings-status.success {
|
|
13559
|
-
color: var(--status-success, #52c41a);
|
|
13560
|
-
}
|
|
13561
|
-
.settings-status.error {
|
|
13562
|
-
color: var(--status-error, #f43f5e);
|
|
13563
|
-
}
|
|
13564
|
-
.settings-actions {
|
|
13565
|
-
display: flex;
|
|
13566
|
-
gap: 10px;
|
|
13567
|
-
justify-content: flex-end;
|
|
13568
|
-
margin-top: 20px;
|
|
13569
|
-
flex-shrink: 0;
|
|
13570
|
-
}
|
|
13571
|
-
.settings-save {
|
|
13572
|
-
height: 34px;
|
|
13573
|
-
padding: 0 18px;
|
|
13574
|
-
border-radius: var(--radius-md);
|
|
13575
|
-
border: none;
|
|
13576
|
-
font-size: 12px;
|
|
13577
|
-
font-weight: 600;
|
|
13578
|
-
background: var(--accent-primary);
|
|
13579
|
-
color: var(--button-primary-fg);
|
|
13580
|
-
cursor: pointer;
|
|
13581
|
-
transition: background var(--duration-fast);
|
|
13582
|
-
}
|
|
13583
|
-
.settings-save:hover {
|
|
13584
|
-
background: var(--button-primary-hover-bg);
|
|
13585
|
-
}
|
|
13586
|
-
.settings-close {
|
|
13587
|
-
height: 34px;
|
|
13588
|
-
padding: 0 18px;
|
|
13589
|
-
border-radius: var(--radius-md);
|
|
13590
|
-
border: 1px solid var(--border-visible);
|
|
13591
|
-
font-size: 12px;
|
|
13592
|
-
background: var(--surface-glass);
|
|
13593
|
-
color: var(--text-secondary);
|
|
13594
|
-
cursor: pointer;
|
|
13595
|
-
transition: background var(--duration-fast);
|
|
13596
|
-
}
|
|
13597
|
-
.settings-close:hover {
|
|
13598
|
-
background: var(--surface-hover);
|
|
13599
|
-
}
|
|
13600
|
-
.settings-refresh-btn {
|
|
13601
|
-
width: 32px;
|
|
13602
|
-
height: 32px;
|
|
13603
|
-
border: 1px solid var(--border-visible);
|
|
13604
|
-
border-radius: var(--radius-md);
|
|
13605
|
-
background: var(--surface-glass);
|
|
13606
|
-
color: var(--text-secondary);
|
|
13607
|
-
cursor: pointer;
|
|
13608
|
-
display: flex;
|
|
13609
|
-
align-items: center;
|
|
13610
|
-
justify-content: center;
|
|
13611
|
-
transition: background var(--duration-fast);
|
|
13612
|
-
flex-shrink: 0;
|
|
13613
|
-
}
|
|
13614
|
-
.settings-refresh-btn:hover {
|
|
13615
|
-
background: var(--surface-hover);
|
|
13616
|
-
}
|
|
13617
|
-
.settings-refresh-btn:disabled {
|
|
13618
|
-
opacity: 0.5;
|
|
13619
|
-
cursor: not-allowed;
|
|
13620
|
-
}
|
|
13621
|
-
.settings-input-disabled {
|
|
13622
|
-
display: flex;
|
|
13623
|
-
align-items: center;
|
|
13624
|
-
width: 100%;
|
|
13625
|
-
height: 34px;
|
|
13626
|
-
padding: 0 10px;
|
|
13627
|
-
border-radius: var(--radius-md);
|
|
13628
|
-
border: 1px solid var(--border-subtle);
|
|
13629
|
-
background: var(--bg-tertiary);
|
|
13630
|
-
color: var(--text-muted);
|
|
13631
|
-
font-size: 12px;
|
|
13632
|
-
opacity: 0.7;
|
|
13633
|
-
cursor: not-allowed;
|
|
13634
|
-
}
|
|
13635
|
-
|
|
13636
|
-
/* --- Premium section --- */
|
|
13637
|
-
.premium-section {
|
|
13638
|
-
display: flex;
|
|
13639
|
-
flex-direction: column;
|
|
13640
|
-
}
|
|
13641
|
-
.premium-description {
|
|
13642
|
-
font-size: 12px;
|
|
13643
|
-
line-height: 1.6;
|
|
13644
|
-
color: var(--text-secondary);
|
|
13645
|
-
margin: 0 0 12px;
|
|
13646
|
-
}
|
|
13647
|
-
.premium-activate-row {
|
|
13648
|
-
display: flex;
|
|
13649
|
-
gap: 10px;
|
|
13650
|
-
align-items: center;
|
|
13651
|
-
}
|
|
13652
|
-
.premium-email-input {
|
|
13653
|
-
flex: 1;
|
|
13654
|
-
}
|
|
13655
|
-
.premium-btn {
|
|
13656
|
-
height: 34px;
|
|
13657
|
-
padding: 0 16px;
|
|
13658
|
-
border-radius: var(--radius-md);
|
|
13659
|
-
font-size: 12px;
|
|
13660
|
-
font-weight: 500;
|
|
13661
|
-
cursor: pointer;
|
|
13662
|
-
transition: background var(--duration-fast), transform var(--duration-fast);
|
|
13663
|
-
white-space: nowrap;
|
|
13664
|
-
}
|
|
13665
|
-
.premium-btn:active {
|
|
13666
|
-
transform: scale(0.97);
|
|
13667
|
-
}
|
|
13668
|
-
.premium-btn:disabled {
|
|
13669
|
-
opacity: 0.5;
|
|
13670
|
-
cursor: not-allowed;
|
|
13671
|
-
}
|
|
13672
|
-
.premium-btn-activate {
|
|
13673
|
-
background: var(--surface-glass);
|
|
13674
|
-
border: 1px solid var(--border-visible);
|
|
13675
|
-
color: var(--text-primary);
|
|
13676
|
-
}
|
|
13677
|
-
.premium-btn-activate:hover {
|
|
13678
|
-
background: var(--surface-hover);
|
|
13679
|
-
}
|
|
13680
|
-
.premium-btn-upgrade {
|
|
13681
|
-
background: var(--accent-primary);
|
|
13682
|
-
border: none;
|
|
13683
|
-
color: var(--button-primary-fg);
|
|
13684
|
-
}
|
|
13685
|
-
.premium-btn-upgrade:hover {
|
|
13686
|
-
background: var(--button-primary-hover-bg);
|
|
13687
|
-
}
|
|
13688
|
-
.premium-btn-manage {
|
|
13689
|
-
background: var(--surface-glass);
|
|
13690
|
-
border: 1px solid var(--border-visible);
|
|
13691
|
-
color: var(--text-primary);
|
|
13692
|
-
align-self: flex-start;
|
|
13693
|
-
}
|
|
13694
|
-
.premium-btn-manage:hover {
|
|
13695
|
-
background: var(--surface-hover);
|
|
13696
|
-
}
|
|
13697
|
-
.premium-active-badge {
|
|
13698
|
-
display: inline-block;
|
|
13699
|
-
font-size: 11px;
|
|
13700
|
-
font-weight: 600;
|
|
13701
|
-
color: var(--button-primary-fg);
|
|
13702
|
-
background: var(--status-success, #52c41a);
|
|
13703
|
-
padding: 2px 10px;
|
|
13704
|
-
border-radius: 4px;
|
|
13705
|
-
margin-bottom: 10px;
|
|
13706
|
-
}
|
|
13707
|
-
.premium-detail {
|
|
13708
|
-
font-size: 11px;
|
|
13709
|
-
color: var(--text-muted);
|
|
13710
|
-
margin: 6px 0;
|
|
13711
|
-
}
|
|
13712
|
-
.premium-actions-row {
|
|
13713
|
-
display: flex;
|
|
13714
|
-
gap: 10px;
|
|
13715
|
-
margin-top: 10px;
|
|
13716
|
-
}
|
|
13717
|
-
.premium-btn-reset {
|
|
13718
|
-
height: 30px;
|
|
13719
|
-
padding: 0 12px;
|
|
13720
|
-
border-radius: var(--radius-md);
|
|
13721
|
-
border: 1px solid var(--border-subtle);
|
|
13722
|
-
background: transparent;
|
|
13723
|
-
color: var(--text-muted);
|
|
13724
|
-
font-size: 11px;
|
|
13725
|
-
cursor: pointer;
|
|
13726
|
-
}
|
|
13727
|
-
.premium-btn-reset:hover {
|
|
13728
|
-
background: var(--surface-hover);
|
|
13729
|
-
}
|
|
13730
|
-
|
|
13731
|
-
/* Welcome banner */
|
|
13732
|
-
.welcome-banner {
|
|
13733
|
-
margin-bottom: 20px;
|
|
13734
|
-
padding: 16px;
|
|
13735
|
-
border-radius: var(--radius-md);
|
|
13736
|
-
border: 1px solid color-mix(in srgb, var(--accent-primary) 22%, transparent);
|
|
13737
|
-
background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
13738
|
-
}
|
|
13739
|
-
.welcome-banner-header {
|
|
13740
|
-
display: flex;
|
|
13741
|
-
align-items: center;
|
|
13742
|
-
justify-content: space-between;
|
|
13743
|
-
margin-bottom: 8px;
|
|
13744
|
-
}
|
|
13745
|
-
.welcome-banner-title {
|
|
13746
|
-
font-size: 13px;
|
|
13747
|
-
font-weight: 600;
|
|
13748
|
-
color: var(--accent-primary);
|
|
13749
|
-
}
|
|
13750
|
-
.welcome-banner-dismiss {
|
|
13751
|
-
width: 24px;
|
|
13752
|
-
height: 24px;
|
|
13753
|
-
border-radius: 4px;
|
|
13754
|
-
background: transparent;
|
|
13755
|
-
border: none;
|
|
13756
|
-
color: var(--text-muted);
|
|
13757
|
-
font-size: 18px;
|
|
13758
|
-
cursor: pointer;
|
|
13759
|
-
display: flex;
|
|
13760
|
-
align-items: center;
|
|
13761
|
-
justify-content: center;
|
|
13762
|
-
}
|
|
13763
|
-
.welcome-banner-dismiss:hover {
|
|
13764
|
-
background: var(--surface-hover);
|
|
13765
|
-
color: var(--text-primary);
|
|
13766
|
-
}
|
|
13767
|
-
.welcome-banner-text {
|
|
13768
|
-
font-size: 12px;
|
|
13769
|
-
color: var(--text-secondary);
|
|
13770
|
-
margin: 0 0 8px;
|
|
13771
|
-
}
|
|
13772
|
-
.welcome-banner-steps {
|
|
13773
|
-
margin: 8px 0 0 16px;
|
|
13774
|
-
padding: 0;
|
|
13775
|
-
font-size: 12px;
|
|
13776
|
-
color: var(--text-secondary);
|
|
13777
|
-
line-height: 1.7;
|
|
13778
|
-
}
|
|
13779
|
-
.welcome-banner-steps li.done {
|
|
13780
|
-
color: var(--text-muted);
|
|
13781
|
-
text-decoration: line-through;
|
|
13782
|
-
}
|
|
13783
|
-
.welcome-banner-steps kbd {
|
|
13784
|
-
display: inline-block;
|
|
13785
|
-
padding: 1px 5px;
|
|
13786
|
-
font-size: 11px;
|
|
13787
|
-
font-family: "JetBrains Mono", "SF Mono", monospace;
|
|
13788
|
-
background: var(--bg-tertiary);
|
|
13789
|
-
border: 1px solid var(--border-subtle);
|
|
13790
|
-
border-radius: 3px;
|
|
13791
|
-
margin: 0 2px;
|
|
13792
|
-
}
|
|
13793
|
-
.welcome-banner-actions {
|
|
13794
|
-
margin-top: 14px;
|
|
13795
|
-
display: flex;
|
|
13796
|
-
flex-wrap: wrap;
|
|
13797
|
-
gap: 10px;
|
|
13798
|
-
align-items: center;
|
|
13799
|
-
}
|
|
13800
|
-
.welcome-banner-note {
|
|
13801
|
-
font-size: 11px;
|
|
13802
|
-
line-height: 1.5;
|
|
13803
|
-
color: var(--text-muted);
|
|
13804
|
-
max-width: 360px;
|
|
13805
|
-
}
|
|
13806
|
-
|
|
13807
|
-
/* Agent Credential Vault */
|
|
13808
|
-
.vault-premium-badge {
|
|
13809
|
-
display: inline-block;
|
|
13810
|
-
font-size: 10px;
|
|
13811
|
-
font-weight: 600;
|
|
13812
|
-
color: var(--accent-primary);
|
|
13813
|
-
background: color-mix(in srgb, var(--accent-primary) 15%, transparent);
|
|
13814
|
-
padding: 1px 6px;
|
|
13815
|
-
border-radius: 4px;
|
|
13816
|
-
margin-left: 8px;
|
|
13817
|
-
vertical-align: middle;
|
|
13818
|
-
}
|
|
13819
|
-
.vault-entries {
|
|
13820
|
-
display: flex;
|
|
13821
|
-
flex-direction: column;
|
|
13822
|
-
gap: 6px;
|
|
13823
|
-
margin-bottom: 10px;
|
|
13824
|
-
}
|
|
13825
|
-
.vault-entry {
|
|
13826
|
-
display: flex;
|
|
13827
|
-
align-items: center;
|
|
13828
|
-
justify-content: space-between;
|
|
13829
|
-
padding: 8px 12px;
|
|
13830
|
-
background: var(--bg-tertiary);
|
|
13831
|
-
border: 1px solid var(--border-subtle);
|
|
13832
|
-
border-radius: var(--radius-md);
|
|
13833
|
-
}
|
|
13834
|
-
.vault-entry-info {
|
|
13835
|
-
display: flex;
|
|
13836
|
-
flex-direction: column;
|
|
13837
|
-
gap: 2px;
|
|
13838
|
-
min-width: 0;
|
|
13839
|
-
}
|
|
13840
|
-
.vault-entry-label {
|
|
13841
|
-
font-size: 12px;
|
|
13842
|
-
font-weight: 500;
|
|
13843
|
-
color: var(--text-primary);
|
|
13844
|
-
white-space: nowrap;
|
|
13845
|
-
overflow: hidden;
|
|
13846
|
-
text-overflow: ellipsis;
|
|
13847
|
-
}
|
|
13848
|
-
.vault-entry-detail {
|
|
13849
|
-
font-size: 11px;
|
|
13850
|
-
color: var(--text-muted);
|
|
13851
|
-
white-space: nowrap;
|
|
13852
|
-
overflow: hidden;
|
|
13853
|
-
text-overflow: ellipsis;
|
|
13854
|
-
}
|
|
13855
|
-
.vault-entry-remove {
|
|
13856
|
-
flex-shrink: 0;
|
|
13857
|
-
width: 24px;
|
|
13858
|
-
height: 24px;
|
|
13859
|
-
border-radius: 4px;
|
|
13860
|
-
background: transparent;
|
|
13861
|
-
border: none;
|
|
13862
|
-
color: var(--text-muted);
|
|
13863
|
-
font-size: 16px;
|
|
13864
|
-
cursor: pointer;
|
|
13865
|
-
display: flex;
|
|
13866
|
-
align-items: center;
|
|
13867
|
-
justify-content: center;
|
|
13868
|
-
transition: background var(--duration-fast), color var(--duration-fast);
|
|
13869
|
-
}
|
|
13870
|
-
.vault-entry-remove:hover {
|
|
13871
|
-
background: color-mix(in srgb, var(--status-error) 12%, transparent);
|
|
13872
|
-
color: var(--status-error);
|
|
13873
|
-
}
|
|
13874
|
-
.vault-add-btn {
|
|
13875
|
-
height: 32px;
|
|
13876
|
-
padding: 0 14px;
|
|
13877
|
-
border-radius: var(--radius-md);
|
|
13878
|
-
font-size: 12px;
|
|
13879
|
-
font-weight: 500;
|
|
13880
|
-
background: var(--bg-tertiary);
|
|
13881
|
-
border: 1px dashed var(--border-subtle);
|
|
13882
|
-
color: var(--text-secondary);
|
|
13883
|
-
cursor: pointer;
|
|
13884
|
-
width: 100%;
|
|
13885
|
-
transition: background var(--duration-fast), border-color var(--duration-fast);
|
|
13886
|
-
}
|
|
13887
|
-
.vault-add-btn:hover {
|
|
13888
|
-
background: var(--border-visible);
|
|
13889
|
-
border-color: var(--border-visible);
|
|
13890
|
-
}
|
|
13891
|
-
.vault-add-form {
|
|
13892
|
-
display: flex;
|
|
13893
|
-
flex-direction: column;
|
|
13894
|
-
gap: 8px;
|
|
13895
|
-
padding: 12px;
|
|
13896
|
-
background: var(--surface-glass);
|
|
13897
|
-
border: 1px solid var(--border-subtle);
|
|
13898
|
-
border-radius: var(--radius-md);
|
|
13899
|
-
}
|
|
13900
|
-
.vault-add-actions {
|
|
13901
|
-
display: flex;
|
|
13902
|
-
gap: 8px;
|
|
13903
|
-
justify-content: flex-end;
|
|
13904
|
-
margin-top: 4px;
|
|
13905
|
-
}
|
|
13906
|
-
`), _tmpl$4$2 = /* @__PURE__ */ template(`<p class=settings-status>`);
|
|
13227
|
+
var _tmpl$$3 = /* @__PURE__ */ template(`<div class=settings-compact-upsell><span class=settings-compact-upsell-text>Premium: screenshots, saved sessions, credential vault, and longer autonomous runs.</span><div class=settings-compact-upsell-actions><button class="premium-btn premium-btn-upgrade">Try free for 7 days</button><button class="premium-btn premium-btn-activate">Activate`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><div class=settings-layout><nav class=settings-sidebar role=navigation aria-label="Settings categories"><button class=settings-nav-item><span>General</span></button><button class=settings-nav-item><span>AI & Agent</span></button><button class=settings-nav-item><span>Vaults</span></button><button class=settings-nav-item><span>Privacy</span></button><button class=settings-nav-item><span>Account</span></button></nav><div class=settings-content></div></div><div class=settings-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$3$2 = /* @__PURE__ */ template(`<p class=settings-status>`);
|
|
13907
13228
|
const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
|
|
13908
13229
|
id: p.id,
|
|
13909
13230
|
name: p.name,
|
|
@@ -14493,315 +13814,313 @@ const Settings = () => {
|
|
|
14493
13814
|
return settingsVisible();
|
|
14494
13815
|
},
|
|
14495
13816
|
get children() {
|
|
14496
|
-
|
|
14497
|
-
|
|
14498
|
-
|
|
14499
|
-
|
|
14500
|
-
|
|
14501
|
-
|
|
14502
|
-
|
|
14503
|
-
|
|
14504
|
-
|
|
14505
|
-
|
|
14506
|
-
|
|
14507
|
-
|
|
14508
|
-
|
|
14509
|
-
|
|
14510
|
-
|
|
14511
|
-
|
|
14512
|
-
|
|
14513
|
-
|
|
14514
|
-
|
|
14515
|
-
|
|
14516
|
-
|
|
14517
|
-
|
|
14518
|
-
|
|
14519
|
-
|
|
14520
|
-
|
|
14521
|
-
|
|
14522
|
-
|
|
14523
|
-
|
|
14524
|
-
|
|
14525
|
-
|
|
14526
|
-
|
|
14527
|
-
|
|
14528
|
-
|
|
14529
|
-
|
|
14530
|
-
|
|
14531
|
-
|
|
14532
|
-
|
|
14533
|
-
|
|
14534
|
-
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
|
|
14538
|
-
|
|
14539
|
-
|
|
14540
|
-
|
|
14541
|
-
|
|
14542
|
-
|
|
14543
|
-
|
|
14544
|
-
|
|
14545
|
-
|
|
14546
|
-
|
|
14547
|
-
|
|
14548
|
-
|
|
14549
|
-
|
|
14550
|
-
|
|
14551
|
-
|
|
14552
|
-
|
|
14553
|
-
|
|
14554
|
-
|
|
14555
|
-
|
|
14556
|
-
|
|
14557
|
-
|
|
14558
|
-
|
|
14559
|
-
|
|
14560
|
-
|
|
14561
|
-
|
|
14562
|
-
|
|
14563
|
-
|
|
14564
|
-
|
|
14565
|
-
|
|
14566
|
-
|
|
14567
|
-
|
|
14568
|
-
|
|
14569
|
-
|
|
14570
|
-
|
|
14571
|
-
|
|
14572
|
-
|
|
14573
|
-
|
|
14574
|
-
|
|
14575
|
-
|
|
14576
|
-
|
|
14577
|
-
|
|
14578
|
-
|
|
14579
|
-
|
|
14580
|
-
|
|
14581
|
-
|
|
14582
|
-
|
|
14583
|
-
|
|
14584
|
-
|
|
14585
|
-
|
|
14586
|
-
|
|
14587
|
-
|
|
14588
|
-
|
|
14589
|
-
|
|
14590
|
-
|
|
14591
|
-
|
|
14592
|
-
|
|
14593
|
-
|
|
14594
|
-
|
|
14595
|
-
|
|
14596
|
-
|
|
14597
|
-
|
|
14598
|
-
|
|
14599
|
-
|
|
14600
|
-
|
|
14601
|
-
|
|
14602
|
-
|
|
14603
|
-
|
|
14604
|
-
|
|
14605
|
-
|
|
14606
|
-
|
|
14607
|
-
|
|
14608
|
-
|
|
14609
|
-
|
|
14610
|
-
|
|
14611
|
-
|
|
14612
|
-
|
|
14613
|
-
|
|
14614
|
-
|
|
14615
|
-
|
|
14616
|
-
|
|
14617
|
-
|
|
14618
|
-
|
|
14619
|
-
|
|
14620
|
-
|
|
14621
|
-
|
|
14622
|
-
|
|
14623
|
-
|
|
14624
|
-
|
|
14625
|
-
|
|
14626
|
-
|
|
14627
|
-
|
|
14628
|
-
|
|
14629
|
-
|
|
14630
|
-
|
|
14631
|
-
|
|
14632
|
-
|
|
14633
|
-
|
|
14634
|
-
|
|
14635
|
-
|
|
14636
|
-
|
|
14637
|
-
|
|
14638
|
-
|
|
14639
|
-
|
|
14640
|
-
|
|
14641
|
-
|
|
14642
|
-
|
|
14643
|
-
|
|
14644
|
-
|
|
14645
|
-
|
|
14646
|
-
|
|
14647
|
-
|
|
14648
|
-
|
|
14649
|
-
|
|
14650
|
-
|
|
14651
|
-
|
|
14652
|
-
|
|
14653
|
-
|
|
14654
|
-
|
|
14655
|
-
|
|
14656
|
-
|
|
14657
|
-
|
|
14658
|
-
|
|
14659
|
-
|
|
14660
|
-
|
|
14661
|
-
|
|
14662
|
-
|
|
14663
|
-
|
|
14664
|
-
|
|
14665
|
-
|
|
14666
|
-
|
|
14667
|
-
|
|
14668
|
-
|
|
14669
|
-
|
|
14670
|
-
|
|
14671
|
-
|
|
14672
|
-
|
|
14673
|
-
|
|
14674
|
-
|
|
14675
|
-
|
|
14676
|
-
|
|
14677
|
-
|
|
14678
|
-
|
|
14679
|
-
|
|
14680
|
-
|
|
14681
|
-
|
|
14682
|
-
|
|
14683
|
-
|
|
14684
|
-
|
|
14685
|
-
|
|
14686
|
-
|
|
14687
|
-
|
|
14688
|
-
|
|
14689
|
-
|
|
14690
|
-
|
|
14691
|
-
|
|
14692
|
-
|
|
14693
|
-
|
|
14694
|
-
|
|
14695
|
-
|
|
14696
|
-
|
|
14697
|
-
|
|
14698
|
-
|
|
14699
|
-
|
|
14700
|
-
|
|
14701
|
-
|
|
14702
|
-
|
|
14703
|
-
|
|
14704
|
-
|
|
14705
|
-
|
|
14706
|
-
|
|
14707
|
-
|
|
14708
|
-
|
|
14709
|
-
|
|
14710
|
-
|
|
14711
|
-
|
|
14712
|
-
|
|
14713
|
-
|
|
14714
|
-
|
|
14715
|
-
|
|
14716
|
-
|
|
14717
|
-
|
|
14718
|
-
|
|
14719
|
-
|
|
14720
|
-
|
|
14721
|
-
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
|
|
14725
|
-
|
|
14726
|
-
|
|
14727
|
-
|
|
14728
|
-
|
|
14729
|
-
|
|
14730
|
-
|
|
14731
|
-
|
|
14732
|
-
|
|
14733
|
-
|
|
14734
|
-
|
|
14735
|
-
|
|
14736
|
-
|
|
14737
|
-
|
|
14738
|
-
|
|
14739
|
-
|
|
14740
|
-
|
|
14741
|
-
|
|
14742
|
-
|
|
14743
|
-
|
|
14744
|
-
|
|
14745
|
-
|
|
14746
|
-
|
|
14747
|
-
|
|
14748
|
-
|
|
14749
|
-
|
|
14750
|
-
|
|
14751
|
-
|
|
14752
|
-
|
|
14753
|
-
|
|
14754
|
-
|
|
14755
|
-
|
|
14756
|
-
|
|
14757
|
-
|
|
14758
|
-
|
|
14759
|
-
|
|
14760
|
-
|
|
14761
|
-
|
|
14762
|
-
|
|
14763
|
-
|
|
14764
|
-
|
|
14765
|
-
|
|
14766
|
-
|
|
14767
|
-
|
|
14768
|
-
|
|
14769
|
-
|
|
14770
|
-
|
|
14771
|
-
|
|
14772
|
-
|
|
14773
|
-
|
|
14774
|
-
|
|
14775
|
-
|
|
14776
|
-
|
|
14777
|
-
|
|
14778
|
-
|
|
14779
|
-
|
|
14780
|
-
|
|
14781
|
-
|
|
14782
|
-
|
|
14783
|
-
|
|
14784
|
-
|
|
14785
|
-
|
|
14786
|
-
|
|
14787
|
-
|
|
14788
|
-
|
|
14789
|
-
|
|
14790
|
-
|
|
14791
|
-
|
|
14792
|
-
|
|
14793
|
-
|
|
14794
|
-
|
|
14795
|
-
|
|
14796
|
-
|
|
14797
|
-
|
|
14798
|
-
|
|
14799
|
-
|
|
14800
|
-
|
|
14801
|
-
|
|
14802
|
-
|
|
14803
|
-
return _el$;
|
|
14804
|
-
})(), _tmpl$3$2()];
|
|
13817
|
+
var _el$ = _tmpl$2$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$9 = _el$3.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$1.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$11.nextSibling, _el$14 = _el$13.firstChild, _el$15 = _el$13.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$15.nextSibling, _el$18 = _el$17.firstChild, _el$19 = _el$0.nextSibling, _el$20 = _el$9.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$21.nextSibling;
|
|
13818
|
+
addEventListener(_el$, "click", closeSettings, true);
|
|
13819
|
+
_el$2.$$keydown = handleKeyDown;
|
|
13820
|
+
_el$2.$$click = (e) => e.stopPropagation();
|
|
13821
|
+
insert(_el$2, createComponent(Show, {
|
|
13822
|
+
get when() {
|
|
13823
|
+
return !premiumActive();
|
|
13824
|
+
},
|
|
13825
|
+
get children() {
|
|
13826
|
+
var _el$4 = _tmpl$$3(), _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
|
|
13827
|
+
_el$7.$$click = () => {
|
|
13828
|
+
void trackPremiumContext("settings_banner_clicked");
|
|
13829
|
+
startPremiumCheckout();
|
|
13830
|
+
};
|
|
13831
|
+
_el$8.$$click = () => selectCategory("account");
|
|
13832
|
+
return _el$4;
|
|
13833
|
+
}
|
|
13834
|
+
}), _el$9);
|
|
13835
|
+
_el$1.$$click = () => selectCategory("general");
|
|
13836
|
+
insert(_el$1, createComponent(globe_default, {
|
|
13837
|
+
size: 16
|
|
13838
|
+
}), _el$10);
|
|
13839
|
+
_el$11.$$click = () => selectCategory("agent");
|
|
13840
|
+
insert(_el$11, createComponent(cpu_default, {
|
|
13841
|
+
size: 16
|
|
13842
|
+
}), _el$12);
|
|
13843
|
+
_el$13.$$click = () => selectCategory("vaults");
|
|
13844
|
+
insert(_el$13, createComponent(shield_default, {
|
|
13845
|
+
size: 16
|
|
13846
|
+
}), _el$14);
|
|
13847
|
+
_el$15.$$click = () => selectCategory("privacy");
|
|
13848
|
+
insert(_el$15, createComponent(lock_default, {
|
|
13849
|
+
size: 16
|
|
13850
|
+
}), _el$16);
|
|
13851
|
+
_el$17.$$click = () => selectCategory("account");
|
|
13852
|
+
insert(_el$17, createComponent(user_default, {
|
|
13853
|
+
size: 16
|
|
13854
|
+
}), _el$18);
|
|
13855
|
+
var _ref$ = settingsContentEl;
|
|
13856
|
+
typeof _ref$ === "function" ? use(_ref$, _el$19) : settingsContentEl = _el$19;
|
|
13857
|
+
insert(_el$19, createComponent(Show, {
|
|
13858
|
+
get when() {
|
|
13859
|
+
return activeCategory() === "general";
|
|
13860
|
+
},
|
|
13861
|
+
get children() {
|
|
13862
|
+
return createComponent(SettingsGeneral, {
|
|
13863
|
+
welcomeBanner: {
|
|
13864
|
+
show: showWelcome,
|
|
13865
|
+
dismiss: dismissWelcome
|
|
13866
|
+
},
|
|
13867
|
+
defaultUrl,
|
|
13868
|
+
setDefaultUrl,
|
|
13869
|
+
defaultSearchEngine,
|
|
13870
|
+
setDefaultSearchEngine,
|
|
13871
|
+
downloadPath,
|
|
13872
|
+
setDownloadPath,
|
|
13873
|
+
theme,
|
|
13874
|
+
setTheme,
|
|
13875
|
+
autoRestoreSession,
|
|
13876
|
+
setAutoRestoreSession,
|
|
13877
|
+
clearBookmarksOnLaunch,
|
|
13878
|
+
setClearBookmarksOnLaunch,
|
|
13879
|
+
premiumActive,
|
|
13880
|
+
startPremiumCheckout
|
|
13881
|
+
});
|
|
13882
|
+
}
|
|
13883
|
+
}), null);
|
|
13884
|
+
insert(_el$19, createComponent(Show, {
|
|
13885
|
+
get when() {
|
|
13886
|
+
return activeCategory() === "agent";
|
|
13887
|
+
},
|
|
13888
|
+
get children() {
|
|
13889
|
+
return createComponent(SettingsAgent, {
|
|
13890
|
+
get chat() {
|
|
13891
|
+
return {
|
|
13892
|
+
enabled: chatEnabled,
|
|
13893
|
+
setEnabled: setChatEnabled,
|
|
13894
|
+
providerId: chatProviderId,
|
|
13895
|
+
setProviderId: setChatProviderId,
|
|
13896
|
+
apiKey: chatApiKey,
|
|
13897
|
+
setApiKey: setChatApiKey,
|
|
13898
|
+
hasStoredApiKey: chatHasStoredApiKey,
|
|
13899
|
+
setHasStoredApiKey: setChatHasStoredApiKey,
|
|
13900
|
+
model: chatModel,
|
|
13901
|
+
setModel: setChatModel,
|
|
13902
|
+
baseUrl: chatBaseUrl,
|
|
13903
|
+
setBaseUrl: setChatBaseUrl,
|
|
13904
|
+
reasoningEffort: chatReasoningEffort,
|
|
13905
|
+
setReasoningEffort: setChatReasoningEffort,
|
|
13906
|
+
providerModels,
|
|
13907
|
+
modelFetchState,
|
|
13908
|
+
modelFetchWarning,
|
|
13909
|
+
doFetchModels,
|
|
13910
|
+
resetProviderModels,
|
|
13911
|
+
codexAuthStatus: providerAuth.codexAuthStatus,
|
|
13912
|
+
codexAccountEmail: providerAuth.codexAccountEmail,
|
|
13913
|
+
setCodexAccountEmail: providerAuth.setCodexAccountEmail,
|
|
13914
|
+
codexAuthError: providerAuth.codexAuthError,
|
|
13915
|
+
setCodexAuthError: providerAuth.setCodexAuthError,
|
|
13916
|
+
openRouterAuthStatus: providerAuth.openRouterAuthStatus,
|
|
13917
|
+
openRouterAuthError: providerAuth.openRouterAuthError,
|
|
13918
|
+
providerType,
|
|
13919
|
+
startCodexAuth: providerAuth.startCodexAuth,
|
|
13920
|
+
disconnectCodex: providerAuth.disconnectCodex,
|
|
13921
|
+
startOpenRouterAuth: providerAuth.startOpenRouterAuth
|
|
13922
|
+
};
|
|
13923
|
+
},
|
|
13924
|
+
mcpPort,
|
|
13925
|
+
setMcpPort,
|
|
13926
|
+
maxToolIterations,
|
|
13927
|
+
setMaxToolIterations,
|
|
13928
|
+
agentTranscriptMode,
|
|
13929
|
+
setAgentTranscriptMode,
|
|
13930
|
+
obsidianVaultPath,
|
|
13931
|
+
setObsidianVaultPath,
|
|
13932
|
+
health,
|
|
13933
|
+
premiumActive
|
|
13934
|
+
});
|
|
13935
|
+
}
|
|
13936
|
+
}), null);
|
|
13937
|
+
insert(_el$19, createComponent(Show, {
|
|
13938
|
+
get when() {
|
|
13939
|
+
return activeCategory() === "vaults";
|
|
13940
|
+
},
|
|
13941
|
+
get children() {
|
|
13942
|
+
return createComponent(SettingsVaults, {
|
|
13943
|
+
premiumActive,
|
|
13944
|
+
vault: {
|
|
13945
|
+
entries: vaultEntries,
|
|
13946
|
+
expanded: vaultExpanded,
|
|
13947
|
+
setExpanded: setVaultExpanded,
|
|
13948
|
+
adding: vaultAdding,
|
|
13949
|
+
setAdding: setVaultAdding,
|
|
13950
|
+
newLabel: vaultNewLabel,
|
|
13951
|
+
setNewLabel: setVaultNewLabel,
|
|
13952
|
+
newDomain: vaultNewDomain,
|
|
13953
|
+
setNewDomain: setVaultNewDomain,
|
|
13954
|
+
newUsername: vaultNewUsername,
|
|
13955
|
+
setNewUsername: setVaultNewUsername,
|
|
13956
|
+
newPassword: vaultNewPassword,
|
|
13957
|
+
setNewPassword: setVaultNewPassword,
|
|
13958
|
+
newTotp: vaultNewTotp,
|
|
13959
|
+
setNewTotp: setVaultNewTotp,
|
|
13960
|
+
newNotes: vaultNewNotes,
|
|
13961
|
+
setNewNotes: setVaultNewNotes,
|
|
13962
|
+
message: vaultMessage,
|
|
13963
|
+
setMessage: setVaultMessage,
|
|
13964
|
+
handleAdd: handleVaultAdd,
|
|
13965
|
+
handleRemove: handleVaultRemove
|
|
13966
|
+
},
|
|
13967
|
+
humanVault: {
|
|
13968
|
+
entries: humanEntries,
|
|
13969
|
+
adding: humanAdding,
|
|
13970
|
+
setAdding: setHumanAdding,
|
|
13971
|
+
newTitle: humanNewTitle,
|
|
13972
|
+
setNewTitle: setHumanNewTitle,
|
|
13973
|
+
newUrl: humanNewUrl,
|
|
13974
|
+
setNewUrl: setHumanNewUrl,
|
|
13975
|
+
newUsername: humanNewUsername,
|
|
13976
|
+
setNewUsername: setHumanNewUsername,
|
|
13977
|
+
newPassword: humanNewPassword,
|
|
13978
|
+
setNewPassword: setHumanNewPassword,
|
|
13979
|
+
newCategory: humanNewCategory,
|
|
13980
|
+
setNewCategory: setHumanNewCategory,
|
|
13981
|
+
newNotes: humanNewNotes,
|
|
13982
|
+
setNewNotes: setHumanNewNotes,
|
|
13983
|
+
message: humanMessage,
|
|
13984
|
+
handleAdd: handleHumanAdd,
|
|
13985
|
+
handleRemove: handleHumanRemove
|
|
13986
|
+
},
|
|
13987
|
+
autofill: {
|
|
13988
|
+
profiles: autofillProfiles,
|
|
13989
|
+
adding: autofillAdding,
|
|
13990
|
+
setAdding: setAutofillAdding,
|
|
13991
|
+
label: autofillLabel,
|
|
13992
|
+
setLabel: setAutofillLabel,
|
|
13993
|
+
firstName: autofillFirstName,
|
|
13994
|
+
setFirstName: setAutofillFirstName,
|
|
13995
|
+
lastName: autofillLastName,
|
|
13996
|
+
setLastName: setAutofillLastName,
|
|
13997
|
+
email: autofillEmail,
|
|
13998
|
+
setEmail: setAutofillEmail,
|
|
13999
|
+
phone: autofillPhone,
|
|
14000
|
+
setPhone: setAutofillPhone,
|
|
14001
|
+
organization: autofillOrg,
|
|
14002
|
+
setOrganization: setAutofillOrg,
|
|
14003
|
+
addressLine1: autofillAddr1,
|
|
14004
|
+
setAddressLine1: setAutofillAddr1,
|
|
14005
|
+
addressLine2: autofillAddr2,
|
|
14006
|
+
setAddressLine2: setAutofillAddr2,
|
|
14007
|
+
city: autofillCity,
|
|
14008
|
+
setCity: setAutofillCity,
|
|
14009
|
+
state: autofillState,
|
|
14010
|
+
setState: setAutofillState,
|
|
14011
|
+
postalCode: autofillZip,
|
|
14012
|
+
setPostalCode: setAutofillZip,
|
|
14013
|
+
country: autofillCountry,
|
|
14014
|
+
setCountry: setAutofillCountry,
|
|
14015
|
+
message: autofillMessage,
|
|
14016
|
+
handleAdd: handleAutofillAdd,
|
|
14017
|
+
handleRemove: handleAutofillRemove,
|
|
14018
|
+
handleFill: handleAutofillFill
|
|
14019
|
+
}
|
|
14020
|
+
});
|
|
14021
|
+
}
|
|
14022
|
+
}), null);
|
|
14023
|
+
insert(_el$19, createComponent(Show, {
|
|
14024
|
+
get when() {
|
|
14025
|
+
return activeCategory() === "privacy";
|
|
14026
|
+
},
|
|
14027
|
+
get children() {
|
|
14028
|
+
return createComponent(SettingsPrivacy, {
|
|
14029
|
+
telemetryEnabled,
|
|
14030
|
+
setTelemetryEnabled,
|
|
14031
|
+
domainMode,
|
|
14032
|
+
setDomainMode,
|
|
14033
|
+
domainList,
|
|
14034
|
+
setDomainList,
|
|
14035
|
+
sourceDoNotAllowList,
|
|
14036
|
+
setSourceDoNotAllowList
|
|
14037
|
+
});
|
|
14038
|
+
}
|
|
14039
|
+
}), null);
|
|
14040
|
+
insert(_el$19, createComponent(Show, {
|
|
14041
|
+
get when() {
|
|
14042
|
+
return activeCategory() === "account";
|
|
14043
|
+
},
|
|
14044
|
+
get children() {
|
|
14045
|
+
return createComponent(SettingsAccount, {
|
|
14046
|
+
premium: {
|
|
14047
|
+
state: premiumState,
|
|
14048
|
+
setState: setPremiumState,
|
|
14049
|
+
email: premiumEmail,
|
|
14050
|
+
setEmail: setPremiumEmail,
|
|
14051
|
+
code: premiumCode,
|
|
14052
|
+
setCode: setPremiumCode,
|
|
14053
|
+
challengeToken: premiumChallengeToken,
|
|
14054
|
+
setChallengeToken: setPremiumChallengeToken,
|
|
14055
|
+
codeSent: premiumCodeSent,
|
|
14056
|
+
setCodeSent: setPremiumCodeSent,
|
|
14057
|
+
loading: premiumLoading,
|
|
14058
|
+
setLoading: setPremiumLoading,
|
|
14059
|
+
message: premiumMessage,
|
|
14060
|
+
setMessage: setPremiumMessage,
|
|
14061
|
+
active: premiumActive,
|
|
14062
|
+
startCheckout: startPremiumCheckout,
|
|
14063
|
+
resetFlow: resetPremiumActivationFlow
|
|
14064
|
+
},
|
|
14065
|
+
sessions: {
|
|
14066
|
+
list: sessionList,
|
|
14067
|
+
saveName: sessionSaveName,
|
|
14068
|
+
setSaveName: setSessionSaveName,
|
|
14069
|
+
loadList: loadSessionList
|
|
14070
|
+
},
|
|
14071
|
+
setStatus
|
|
14072
|
+
});
|
|
14073
|
+
}
|
|
14074
|
+
}), null);
|
|
14075
|
+
_el$21.$$click = handleSave;
|
|
14076
|
+
addEventListener(_el$22, "click", closeSettings, true);
|
|
14077
|
+
insert(_el$2, createComponent(Show, {
|
|
14078
|
+
get when() {
|
|
14079
|
+
return status();
|
|
14080
|
+
},
|
|
14081
|
+
children: (currentStatus) => (() => {
|
|
14082
|
+
var _el$23 = _tmpl$3$2();
|
|
14083
|
+
insert(_el$23, () => currentStatus().text);
|
|
14084
|
+
createRenderEffect((_p$) => {
|
|
14085
|
+
var _v$10 = !!(currentStatus().kind === "success"), _v$11 = !!(currentStatus().kind === "error");
|
|
14086
|
+
_v$10 !== _p$.e && _el$23.classList.toggle("success", _p$.e = _v$10);
|
|
14087
|
+
_v$11 !== _p$.t && _el$23.classList.toggle("error", _p$.t = _v$11);
|
|
14088
|
+
return _p$;
|
|
14089
|
+
}, {
|
|
14090
|
+
e: void 0,
|
|
14091
|
+
t: void 0
|
|
14092
|
+
});
|
|
14093
|
+
return _el$23;
|
|
14094
|
+
})()
|
|
14095
|
+
}), null);
|
|
14096
|
+
createRenderEffect((_p$) => {
|
|
14097
|
+
var _v$ = !!settingsClosing(), _v$2 = !!(activeCategory() === "general"), _v$3 = activeCategory() === "general" ? "page" : void 0, _v$4 = !!(activeCategory() === "agent"), _v$5 = activeCategory() === "agent" ? "page" : void 0, _v$6 = !!(activeCategory() === "vaults"), _v$7 = activeCategory() === "vaults" ? "page" : void 0, _v$8 = !!(activeCategory() === "privacy"), _v$9 = activeCategory() === "privacy" ? "page" : void 0, _v$0 = !!(activeCategory() === "account"), _v$1 = activeCategory() === "account" ? "page" : void 0;
|
|
14098
|
+
_v$ !== _p$.e && _el$.classList.toggle("closing", _p$.e = _v$);
|
|
14099
|
+
_v$2 !== _p$.t && _el$1.classList.toggle("active", _p$.t = _v$2);
|
|
14100
|
+
_v$3 !== _p$.a && setAttribute(_el$1, "aria-current", _p$.a = _v$3);
|
|
14101
|
+
_v$4 !== _p$.o && _el$11.classList.toggle("active", _p$.o = _v$4);
|
|
14102
|
+
_v$5 !== _p$.i && setAttribute(_el$11, "aria-current", _p$.i = _v$5);
|
|
14103
|
+
_v$6 !== _p$.n && _el$13.classList.toggle("active", _p$.n = _v$6);
|
|
14104
|
+
_v$7 !== _p$.s && setAttribute(_el$13, "aria-current", _p$.s = _v$7);
|
|
14105
|
+
_v$8 !== _p$.h && _el$15.classList.toggle("active", _p$.h = _v$8);
|
|
14106
|
+
_v$9 !== _p$.r && setAttribute(_el$15, "aria-current", _p$.r = _v$9);
|
|
14107
|
+
_v$0 !== _p$.d && _el$17.classList.toggle("active", _p$.d = _v$0);
|
|
14108
|
+
_v$1 !== _p$.l && setAttribute(_el$17, "aria-current", _p$.l = _v$1);
|
|
14109
|
+
return _p$;
|
|
14110
|
+
}, {
|
|
14111
|
+
e: void 0,
|
|
14112
|
+
t: void 0,
|
|
14113
|
+
a: void 0,
|
|
14114
|
+
o: void 0,
|
|
14115
|
+
i: void 0,
|
|
14116
|
+
n: void 0,
|
|
14117
|
+
s: void 0,
|
|
14118
|
+
h: void 0,
|
|
14119
|
+
r: void 0,
|
|
14120
|
+
d: void 0,
|
|
14121
|
+
l: void 0
|
|
14122
|
+
});
|
|
14123
|
+
return _el$;
|
|
14805
14124
|
}
|
|
14806
14125
|
});
|
|
14807
14126
|
};
|
|
@@ -15170,7 +14489,8 @@ const App = () => {
|
|
|
15170
14489
|
document.documentElement.setAttribute("data-theme", theme);
|
|
15171
14490
|
try {
|
|
15172
14491
|
localStorage.setItem("vessel:theme", theme);
|
|
15173
|
-
} catch {
|
|
14492
|
+
} catch (err) {
|
|
14493
|
+
console.warn("Failed to persist theme to localStorage:", err);
|
|
15174
14494
|
}
|
|
15175
14495
|
};
|
|
15176
14496
|
const loadAndApplyTheme = async () => {
|