@quanta-intellect/vessel-browser 0.1.127 → 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 +446 -461
- package/out/preload/content-script.js +39 -2
- package/out/renderer/assets/{index-CwDcicSR.css → index-BhKMoOd-.css} +767 -29
- package/out/renderer/assets/{index-DW3ChyZf.js → index-Dwhz26u8.js} +369 -1073
- 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,
|
|
@@ -3728,7 +3734,7 @@ const AddressBar = (props) => {
|
|
|
3728
3734
|
return memo(() => !!securityState()?.status)() && securityState()?.status !== "none";
|
|
3729
3735
|
},
|
|
3730
3736
|
get children() {
|
|
3731
|
-
var _el$7 = _tmpl$4$
|
|
3737
|
+
var _el$7 = _tmpl$4$j(), _el$8 = _el$7.firstChild;
|
|
3732
3738
|
_el$8.$$click = () => setShowSecurityPopup((prev) => !prev);
|
|
3733
3739
|
insert(_el$8, createComponent(Switch, {
|
|
3734
3740
|
get fallback() {
|
|
@@ -4270,7 +4276,7 @@ const HighlightNotifications = (props) => {
|
|
|
4270
4276
|
});
|
|
4271
4277
|
};
|
|
4272
4278
|
delegateEvents(["click"]);
|
|
4273
|
-
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>`);
|
|
4274
4280
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
4275
4281
|
const TOAST_EXIT_MS = 300;
|
|
4276
4282
|
function formatBytes$1(bytes) {
|
|
@@ -4391,7 +4397,7 @@ const DownloadToast = () => {
|
|
|
4391
4397
|
},
|
|
4392
4398
|
get children() {
|
|
4393
4399
|
return [(() => {
|
|
4394
|
-
var _el$7 = _tmpl$4$
|
|
4400
|
+
var _el$7 = _tmpl$4$i(), _el$8 = _el$7.firstChild;
|
|
4395
4401
|
createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
|
|
4396
4402
|
return _el$7;
|
|
4397
4403
|
})(), (() => {
|
|
@@ -4426,7 +4432,7 @@ const DownloadToast = () => {
|
|
|
4426
4432
|
return _el$;
|
|
4427
4433
|
})();
|
|
4428
4434
|
};
|
|
4429
|
-
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: `);
|
|
4430
4436
|
const formatBytes = (bytes) => {
|
|
4431
4437
|
if (!bytes) return "0 B";
|
|
4432
4438
|
const units = ["B", "KB", "MB", "GB"];
|
|
@@ -4475,7 +4481,7 @@ const DownloadsPanel = (props) => {
|
|
|
4475
4481
|
return item.url;
|
|
4476
4482
|
},
|
|
4477
4483
|
children: (url) => (() => {
|
|
4478
|
-
var _el$17 = _tmpl$4$
|
|
4484
|
+
var _el$17 = _tmpl$4$h();
|
|
4479
4485
|
_el$17.firstChild;
|
|
4480
4486
|
insert(_el$17, url, null);
|
|
4481
4487
|
return _el$17;
|
|
@@ -4603,7 +4609,7 @@ const FindBar = () => {
|
|
|
4603
4609
|
});
|
|
4604
4610
|
};
|
|
4605
4611
|
delegateEvents(["input", "click"]);
|
|
4606
|
-
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>`);
|
|
4607
4613
|
const FlowProgress = () => {
|
|
4608
4614
|
const {
|
|
4609
4615
|
runtimeState: runtimeState2
|
|
@@ -4640,7 +4646,7 @@ const FlowProgress = () => {
|
|
|
4640
4646
|
return tracker();
|
|
4641
4647
|
},
|
|
4642
4648
|
children: (t) => (() => {
|
|
4643
|
-
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;
|
|
4644
4650
|
insert(_el$4, () => t().goal);
|
|
4645
4651
|
insert(_el$5, () => progressPercent(t().steps), _el$6);
|
|
4646
4652
|
insert(_el$9, createComponent(For, {
|
|
@@ -4685,7 +4691,7 @@ const FlowProgress = () => {
|
|
|
4685
4691
|
return memo(() => !!flow())() && !tracker();
|
|
4686
4692
|
},
|
|
4687
4693
|
children: (f) => (() => {
|
|
4688
|
-
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;
|
|
4689
4695
|
insert(_el$17, () => f().goal);
|
|
4690
4696
|
insert(_el$18, () => progressPercent(f().steps), _el$19);
|
|
4691
4697
|
insert(_el$22, createComponent(For, {
|
|
@@ -4734,7 +4740,7 @@ function formatTime(iso, options) {
|
|
|
4734
4740
|
...options?.includeSeconds && { second: "2-digit" }
|
|
4735
4741
|
});
|
|
4736
4742
|
}
|
|
4737
|
-
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>`);
|
|
4738
4744
|
const AgentTranscriptDock = () => {
|
|
4739
4745
|
const {
|
|
4740
4746
|
runtimeState: runtimeState2
|
|
@@ -4800,7 +4806,7 @@ const AgentTranscriptDock = () => {
|
|
|
4800
4806
|
return !isSummary();
|
|
4801
4807
|
},
|
|
4802
4808
|
get children() {
|
|
4803
|
-
var _el$2 = _tmpl$4$
|
|
4809
|
+
var _el$2 = _tmpl$4$f(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
4804
4810
|
_el$4.firstChild;
|
|
4805
4811
|
var _el$7 = _el$4.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
|
|
4806
4812
|
insert(_el$4, createComponent(Show, {
|
|
@@ -5205,7 +5211,7 @@ function isEditableTarget(target) {
|
|
|
5205
5211
|
}
|
|
5206
5212
|
return target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable;
|
|
5207
5213
|
}
|
|
5208
|
-
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>`);
|
|
5209
5215
|
const PALETTE_EXIT_MS = 160;
|
|
5210
5216
|
const COMMAND_ICONS = {
|
|
5211
5217
|
"app-window": app_window_default,
|
|
@@ -5382,7 +5388,7 @@ const BrowserCommandPalette = (props) => {
|
|
|
5382
5388
|
return command.shortcut;
|
|
5383
5389
|
},
|
|
5384
5390
|
children: (shortcut) => (() => {
|
|
5385
|
-
var _el$10 = _tmpl$4$
|
|
5391
|
+
var _el$10 = _tmpl$4$e();
|
|
5386
5392
|
insert(_el$10, shortcut);
|
|
5387
5393
|
return _el$10;
|
|
5388
5394
|
})()
|
|
@@ -5876,7 +5882,7 @@ function useProviderAuthSetup(options = {}) {
|
|
|
5876
5882
|
startOpenRouterAuth
|
|
5877
5883
|
};
|
|
5878
5884
|
}
|
|
5879
|
-
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`);
|
|
5880
5886
|
const COMMAND_BAR_EXIT_MS = 200;
|
|
5881
5887
|
const CommandBar = () => {
|
|
5882
5888
|
const {
|
|
@@ -6010,7 +6016,7 @@ const CommandBar = () => {
|
|
|
6010
6016
|
return _tmpl$7$a();
|
|
6011
6017
|
},
|
|
6012
6018
|
get children() {
|
|
6013
|
-
return _tmpl$4$
|
|
6019
|
+
return _tmpl$4$d();
|
|
6014
6020
|
}
|
|
6015
6021
|
}), null);
|
|
6016
6022
|
createRenderEffect((_p$) => {
|
|
@@ -7389,7 +7395,7 @@ function sanitizeUrl(url) {
|
|
|
7389
7395
|
}
|
|
7390
7396
|
function applyInlineMarkdown(text2) {
|
|
7391
7397
|
const codeSpans = [];
|
|
7392
|
-
|
|
7398
|
+
const withCodeTokens = text2.replace(/`([^`]+)`/g, (_, code) => {
|
|
7393
7399
|
const token = `\0CS${codeSpans.length}\0`;
|
|
7394
7400
|
codeSpans.push(`<code>${escapeHtml(code)}</code>`);
|
|
7395
7401
|
return token;
|
|
@@ -7406,7 +7412,7 @@ function applyInlineMarkdown(text2) {
|
|
|
7406
7412
|
return `<a href="${escapeHtml(safeHref)}" target="_blank" rel="noreferrer">${escapeHtml(safeLabel)}</a>`;
|
|
7407
7413
|
}
|
|
7408
7414
|
);
|
|
7409
|
-
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>");
|
|
7410
7416
|
return codeSpans.reduce(
|
|
7411
7417
|
(output, snippet, index) => output.replace(`\0CS${index}\0`, snippet),
|
|
7412
7418
|
html2
|
|
@@ -7737,7 +7743,7 @@ function getBookmarkSearchMatch(args) {
|
|
|
7737
7743
|
}
|
|
7738
7744
|
return { matchedFields, score };
|
|
7739
7745
|
}
|
|
7740
|
-
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>`);
|
|
7741
7747
|
const DropdownSelect = (props) => {
|
|
7742
7748
|
const [open, setOpen] = createSignal(false);
|
|
7743
7749
|
let rootRef;
|
|
@@ -7777,7 +7783,7 @@ const DropdownSelect = (props) => {
|
|
|
7777
7783
|
return props.options;
|
|
7778
7784
|
},
|
|
7779
7785
|
children: (option) => (() => {
|
|
7780
|
-
var _el$6 = _tmpl$4$
|
|
7786
|
+
var _el$6 = _tmpl$4$c(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
|
|
7781
7787
|
_el$6.$$click = () => {
|
|
7782
7788
|
props.onChange(option.value);
|
|
7783
7789
|
setOpen(false);
|
|
@@ -7974,7 +7980,7 @@ function renderKitPrompt(kit, values) {
|
|
|
7974
7980
|
(_, key) => values[key] ?? ""
|
|
7975
7981
|
);
|
|
7976
7982
|
}
|
|
7977
|
-
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>`);
|
|
7978
7984
|
const ICON_MAP = {
|
|
7979
7985
|
BookOpen: book_open_default,
|
|
7980
7986
|
Tag: tag_default,
|
|
@@ -8328,7 +8334,7 @@ const AutomationTab = (props) => {
|
|
|
8328
8334
|
return _el$11;
|
|
8329
8335
|
}
|
|
8330
8336
|
}), (() => {
|
|
8331
|
-
var _el$14 = _tmpl$4$
|
|
8337
|
+
var _el$14 = _tmpl$4$b();
|
|
8332
8338
|
insert(_el$14, createComponent(For, {
|
|
8333
8339
|
get each() {
|
|
8334
8340
|
return allKits();
|
|
@@ -8890,7 +8896,7 @@ function useResearch() {
|
|
|
8890
8896
|
}
|
|
8891
8897
|
};
|
|
8892
8898
|
}
|
|
8893
|
-
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`);
|
|
8894
8900
|
const ResearchBriefMarkdown = (props) => {
|
|
8895
8901
|
const html2 = createMemo(() => renderMarkdown(props.content));
|
|
8896
8902
|
return (() => {
|
|
@@ -8963,7 +8969,7 @@ function extractFollowUpOptions(prompt) {
|
|
|
8963
8969
|
if (j >= lines.length) continue;
|
|
8964
8970
|
const nextLine = lines[j].trim();
|
|
8965
8971
|
if (EXPLICIT_OPTION_PREFIX.test(nextLine)) continue;
|
|
8966
|
-
if (!/[
|
|
8972
|
+
if (!/[,;/|]|\bor\b/.test(nextLine)) continue;
|
|
8967
8973
|
options.push(...extractDelimitedOptions(nextLine));
|
|
8968
8974
|
}
|
|
8969
8975
|
return uniqueQuickReplies(options);
|
|
@@ -8978,7 +8984,7 @@ function extractInlineOptions(prompt) {
|
|
|
8978
8984
|
if (/\b(?:options?|choices?|examples?|example answers?|examples? include|sample answers?|sample responses?)\b.*[::]/i.test(afterQuestion)) {
|
|
8979
8985
|
continue;
|
|
8980
8986
|
}
|
|
8981
|
-
const hasDelimiters = /[
|
|
8987
|
+
const hasDelimiters = /[,;/|]|\bor\b/.test(afterQuestion);
|
|
8982
8988
|
const hasDashList = /\s+-\s+/.test(afterQuestion);
|
|
8983
8989
|
if (!hasDelimiters && !hasDashList) continue;
|
|
8984
8990
|
if (hasDelimiters) {
|
|
@@ -9013,7 +9019,7 @@ function extractImplicitOptions(prompt) {
|
|
|
9013
9019
|
if (!line) break;
|
|
9014
9020
|
if (EXPLICIT_OPTION_PREFIX.test(line)) break;
|
|
9015
9021
|
if (SENTENCE_STARTER.test(line)) break;
|
|
9016
|
-
const hasDelimiters = /[
|
|
9022
|
+
const hasDelimiters = /[,;/|]|\bor\b/.test(line);
|
|
9017
9023
|
if (line.length > 80 && !hasDelimiters) break;
|
|
9018
9024
|
candidates.push(line);
|
|
9019
9025
|
}
|
|
@@ -9258,7 +9264,7 @@ const ResearchDesk = () => {
|
|
|
9258
9264
|
return startError();
|
|
9259
9265
|
},
|
|
9260
9266
|
get children() {
|
|
9261
|
-
var _el$1 = _tmpl$4$
|
|
9267
|
+
var _el$1 = _tmpl$4$a();
|
|
9262
9268
|
insert(_el$1, startError);
|
|
9263
9269
|
return _el$1;
|
|
9264
9270
|
}
|
|
@@ -9545,7 +9551,7 @@ const ResearchDesk = () => {
|
|
|
9545
9551
|
})();
|
|
9546
9552
|
};
|
|
9547
9553
|
delegateEvents(["input", "keydown", "click"]);
|
|
9548
|
-
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>`);
|
|
9549
9555
|
const PageDiffTimeline = () => {
|
|
9550
9556
|
const {
|
|
9551
9557
|
activeTab
|
|
@@ -9629,7 +9635,7 @@ const PageDiffTimeline = () => {
|
|
|
9629
9635
|
return memo(() => !!(!loading() && !error()))() && bursts().length > 0;
|
|
9630
9636
|
},
|
|
9631
9637
|
get children() {
|
|
9632
|
-
return [_tmpl$4$
|
|
9638
|
+
return [_tmpl$4$9(), (() => {
|
|
9633
9639
|
var _el$6 = _tmpl$5$9();
|
|
9634
9640
|
insert(_el$6, createComponent(For, {
|
|
9635
9641
|
get each() {
|
|
@@ -9726,7 +9732,7 @@ const SidebarWindowControls = (props) => {
|
|
|
9726
9732
|
};
|
|
9727
9733
|
delegateEvents(["click"]);
|
|
9728
9734
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
9729
|
-
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>×`);
|
|
9730
9736
|
const UNSORTED_FOLDER = {
|
|
9731
9737
|
id: "unsorted",
|
|
9732
9738
|
name: "Unsorted",
|
|
@@ -10012,7 +10018,6 @@ ${contextBlock}` : contextBlock);
|
|
|
10012
10018
|
const [deletingFolderId, setDeletingFolderId] = createSignal(null);
|
|
10013
10019
|
const [expandedFolderIds, setExpandedFolderIds] = createSignal([UNSORTED_FOLDER.id]);
|
|
10014
10020
|
const [actionsExpanded, setActionsExpanded] = createSignal(false);
|
|
10015
|
-
const [checkpointsExpanded, setCheckpointsExpanded] = createSignal(false);
|
|
10016
10021
|
const [isDragging, setIsDragging] = createSignal(false);
|
|
10017
10022
|
const now2 = useNow();
|
|
10018
10023
|
let messagesContainerRef;
|
|
@@ -10381,7 +10386,7 @@ ${contextBlock}` : contextBlock);
|
|
|
10381
10386
|
return runtimeState2().supervisor.pendingApprovals.length > 0;
|
|
10382
10387
|
},
|
|
10383
10388
|
get children() {
|
|
10384
|
-
var _el$17 = _tmpl$4$
|
|
10389
|
+
var _el$17 = _tmpl$4$8();
|
|
10385
10390
|
insert(_el$17, () => runtimeState2().supervisor.pendingApprovals.length);
|
|
10386
10391
|
return _el$17;
|
|
10387
10392
|
}
|
|
@@ -11365,7 +11370,7 @@ ${contextBlock}` : contextBlock);
|
|
|
11365
11370
|
});
|
|
11366
11371
|
};
|
|
11367
11372
|
delegateEvents(["click", "pointerdown", "input", "keydown"]);
|
|
11368
|
-
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>`);
|
|
11369
11374
|
function statusClass(status) {
|
|
11370
11375
|
if (status == null) return "pending";
|
|
11371
11376
|
if (status >= 200 && status < 300) return "ok";
|
|
@@ -11414,7 +11419,7 @@ const ConsoleView = (props) => {
|
|
|
11414
11419
|
autoScroll = atBottom;
|
|
11415
11420
|
};
|
|
11416
11421
|
createEffect(() => {
|
|
11417
|
-
props.entries.length;
|
|
11422
|
+
void props.entries.length;
|
|
11418
11423
|
if (autoScroll && scrollRef) {
|
|
11419
11424
|
requestAnimationFrame(() => {
|
|
11420
11425
|
scrollRef.scrollTop = scrollRef.scrollHeight;
|
|
@@ -11470,7 +11475,7 @@ const NetworkView = (props) => {
|
|
|
11470
11475
|
autoScroll = atBottom;
|
|
11471
11476
|
};
|
|
11472
11477
|
createEffect(() => {
|
|
11473
|
-
props.entries.length;
|
|
11478
|
+
void props.entries.length;
|
|
11474
11479
|
if (autoScroll && scrollRef) {
|
|
11475
11480
|
requestAnimationFrame(() => {
|
|
11476
11481
|
scrollRef.scrollTop = scrollRef.scrollHeight;
|
|
@@ -11485,7 +11490,7 @@ const NetworkView = (props) => {
|
|
|
11485
11490
|
return _tmpl$5$7();
|
|
11486
11491
|
},
|
|
11487
11492
|
get children() {
|
|
11488
|
-
var _el$8 = _tmpl$4$
|
|
11493
|
+
var _el$8 = _tmpl$4$7();
|
|
11489
11494
|
_el$8.firstChild;
|
|
11490
11495
|
_el$8.addEventListener("scroll", onScroll);
|
|
11491
11496
|
var _ref$2 = scrollRef;
|
|
@@ -11898,7 +11903,7 @@ const PROVIDERS = {
|
|
|
11898
11903
|
apiKeyHint: "Optional — only if your endpoint requires authentication"
|
|
11899
11904
|
}
|
|
11900
11905
|
};
|
|
11901
|
-
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>`);
|
|
11902
11907
|
const SettingsGeneral = (props) => {
|
|
11903
11908
|
const [checkingUpdates, setCheckingUpdates] = createSignal(false);
|
|
11904
11909
|
const [updateResult, setUpdateResult] = createSignal(null);
|
|
@@ -11911,7 +11916,7 @@ const SettingsGeneral = (props) => {
|
|
|
11911
11916
|
}
|
|
11912
11917
|
};
|
|
11913
11918
|
return (() => {
|
|
11914
|
-
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;
|
|
11915
11920
|
insert(_el$, createComponent(Show, {
|
|
11916
11921
|
get when() {
|
|
11917
11922
|
return props.welcomeBanner.show();
|
|
@@ -12017,7 +12022,7 @@ const SettingsGeneral = (props) => {
|
|
|
12017
12022
|
})();
|
|
12018
12023
|
};
|
|
12019
12024
|
delegateEvents(["click", "input"]);
|
|
12020
|
-
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>`);
|
|
12021
12026
|
const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
|
|
12022
12027
|
id: p.id,
|
|
12023
12028
|
name: p.name,
|
|
@@ -12169,7 +12174,7 @@ const SettingsAgent = (props) => {
|
|
|
12169
12174
|
},
|
|
12170
12175
|
get children() {
|
|
12171
12176
|
return [(() => {
|
|
12172
|
-
var _el$15 = _tmpl$4$
|
|
12177
|
+
var _el$15 = _tmpl$4$5(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
12173
12178
|
_el$17.firstChild;
|
|
12174
12179
|
insert(_el$17, () => props.chat.codexAccountEmail() || "ChatGPT", null);
|
|
12175
12180
|
return _el$15;
|
|
@@ -12428,7 +12433,7 @@ const SettingsAgent = (props) => {
|
|
|
12428
12433
|
})();
|
|
12429
12434
|
};
|
|
12430
12435
|
delegateEvents(["click", "input"]);
|
|
12431
|
-
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">×`);
|
|
12432
12437
|
const SettingsVaults = (props) => {
|
|
12433
12438
|
const v = props.vault;
|
|
12434
12439
|
const h = props.humanVault;
|
|
@@ -12490,7 +12495,7 @@ const SettingsVaults = (props) => {
|
|
|
12490
12495
|
return !v.adding();
|
|
12491
12496
|
},
|
|
12492
12497
|
get children() {
|
|
12493
|
-
var _el$8 = _tmpl$4$
|
|
12498
|
+
var _el$8 = _tmpl$4$4();
|
|
12494
12499
|
_el$8.$$click = () => {
|
|
12495
12500
|
v.setAdding(true);
|
|
12496
12501
|
v.setMessage(null);
|
|
@@ -12788,7 +12793,7 @@ const SettingsVaults = (props) => {
|
|
|
12788
12793
|
})();
|
|
12789
12794
|
};
|
|
12790
12795
|
delegateEvents(["click", "input"]);
|
|
12791
|
-
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
|
|
12792
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>: `);
|
|
12793
12798
|
const SettingsPrivacy = (props) => {
|
|
12794
12799
|
const [permissions, setPermissions] = createSignal([]);
|
|
@@ -12797,7 +12802,7 @@ const SettingsPrivacy = (props) => {
|
|
|
12797
12802
|
void loadPermissions();
|
|
12798
12803
|
});
|
|
12799
12804
|
return (() => {
|
|
12800
|
-
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;
|
|
12801
12806
|
_el$4.addEventListener("change", (e) => props.setDomainMode(e.currentTarget.value));
|
|
12802
12807
|
insert(_el$2, createComponent(Show, {
|
|
12803
12808
|
get when() {
|
|
@@ -12863,7 +12868,7 @@ const SettingsPrivacy = (props) => {
|
|
|
12863
12868
|
})();
|
|
12864
12869
|
};
|
|
12865
12870
|
delegateEvents(["input", "click"]);
|
|
12866
|
-
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">×`);
|
|
12867
12872
|
const SettingsAccount = (props) => {
|
|
12868
12873
|
const p = props.premium;
|
|
12869
12874
|
const s = props.sessions;
|
|
@@ -12895,7 +12900,7 @@ const SettingsAccount = (props) => {
|
|
|
12895
12900
|
}
|
|
12896
12901
|
};
|
|
12897
12902
|
return (() => {
|
|
12898
|
-
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;
|
|
12899
12904
|
_el$1.firstChild;
|
|
12900
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;
|
|
12901
12906
|
_el$5.$$click = () => {
|
|
@@ -13219,715 +13224,7 @@ const SettingsAccount = (props) => {
|
|
|
13219
13224
|
})();
|
|
13220
13225
|
};
|
|
13221
13226
|
delegateEvents(["click", "input"]);
|
|
13222
|
-
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(`<
|
|
13223
|
-
.settings-panel {
|
|
13224
|
-
width: min(820px, calc(100vw - 32px));
|
|
13225
|
-
max-height: calc(100vh - 48px);
|
|
13226
|
-
display: flex;
|
|
13227
|
-
flex-direction: column;
|
|
13228
|
-
overflow: hidden;
|
|
13229
|
-
background: var(--bg-elevated);
|
|
13230
|
-
border: 1px solid var(--border-visible);
|
|
13231
|
-
border-radius: 14px;
|
|
13232
|
-
padding: 28px 24px 24px;
|
|
13233
|
-
overscroll-behavior: contain;
|
|
13234
|
-
box-shadow:
|
|
13235
|
-
0 4px 24px var(--shadow-color),
|
|
13236
|
-
0 24px 64px var(--shadow-color-strong),
|
|
13237
|
-
inset 0 1px 0 var(--inset-highlight);
|
|
13238
|
-
animation: command-bar-enter 350ms var(--ease-out-expo) both;
|
|
13239
|
-
}
|
|
13240
|
-
.command-bar-overlay.closing .settings-panel {
|
|
13241
|
-
animation: command-bar-exit 200ms var(--ease-in-out) both;
|
|
13242
|
-
}
|
|
13243
|
-
.settings-title {
|
|
13244
|
-
font-size: 16px;
|
|
13245
|
-
font-weight: 600;
|
|
13246
|
-
color: var(--text-primary);
|
|
13247
|
-
margin-bottom: 22px;
|
|
13248
|
-
letter-spacing: 0.01em;
|
|
13249
|
-
flex-shrink: 0;
|
|
13250
|
-
}
|
|
13251
|
-
|
|
13252
|
-
/* Compact global upsell */
|
|
13253
|
-
.settings-compact-upsell {
|
|
13254
|
-
flex-shrink: 0;
|
|
13255
|
-
display: flex;
|
|
13256
|
-
align-items: center;
|
|
13257
|
-
justify-content: space-between;
|
|
13258
|
-
gap: 12px;
|
|
13259
|
-
padding: 8px 14px;
|
|
13260
|
-
margin-bottom: 16px;
|
|
13261
|
-
border-radius: var(--radius-md);
|
|
13262
|
-
background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
13263
|
-
border: 1px solid color-mix(in srgb, var(--accent-primary) 18%, transparent);
|
|
13264
|
-
}
|
|
13265
|
-
.settings-compact-upsell-text {
|
|
13266
|
-
font-size: 12px;
|
|
13267
|
-
color: var(--text-secondary);
|
|
13268
|
-
line-height: 1.4;
|
|
13269
|
-
}
|
|
13270
|
-
.settings-compact-upsell-actions {
|
|
13271
|
-
display: flex;
|
|
13272
|
-
gap: 8px;
|
|
13273
|
-
flex-shrink: 0;
|
|
13274
|
-
}
|
|
13275
|
-
.settings-compact-upsell-actions .premium-btn {
|
|
13276
|
-
font-size: 11px;
|
|
13277
|
-
padding: 4px 12px;
|
|
13278
|
-
height: auto;
|
|
13279
|
-
}
|
|
13280
|
-
|
|
13281
|
-
/* Sidebar + Content layout */
|
|
13282
|
-
.settings-layout {
|
|
13283
|
-
flex: 1;
|
|
13284
|
-
min-height: 0;
|
|
13285
|
-
display: flex;
|
|
13286
|
-
gap: 0;
|
|
13287
|
-
}
|
|
13288
|
-
.settings-sidebar {
|
|
13289
|
-
width: 170px;
|
|
13290
|
-
flex-shrink: 0;
|
|
13291
|
-
border-right: 1px solid var(--border-subtle);
|
|
13292
|
-
padding: 8px 8px 8px 0;
|
|
13293
|
-
display: flex;
|
|
13294
|
-
flex-direction: column;
|
|
13295
|
-
gap: 2px;
|
|
13296
|
-
}
|
|
13297
|
-
.settings-nav-item {
|
|
13298
|
-
display: flex;
|
|
13299
|
-
align-items: center;
|
|
13300
|
-
gap: 10px;
|
|
13301
|
-
width: 100%;
|
|
13302
|
-
padding: 8px 12px;
|
|
13303
|
-
border-radius: var(--radius-md);
|
|
13304
|
-
font-size: 12px;
|
|
13305
|
-
color: var(--text-secondary);
|
|
13306
|
-
background: transparent;
|
|
13307
|
-
border: none;
|
|
13308
|
-
cursor: pointer;
|
|
13309
|
-
transition: background var(--duration-fast), color var(--duration-fast);
|
|
13310
|
-
text-align: left;
|
|
13311
|
-
}
|
|
13312
|
-
.settings-nav-item:hover {
|
|
13313
|
-
background: var(--surface-hover);
|
|
13314
|
-
color: var(--text-primary);
|
|
13315
|
-
}
|
|
13316
|
-
.settings-nav-item:focus-visible {
|
|
13317
|
-
outline: 1px solid var(--accent-primary);
|
|
13318
|
-
outline-offset: -1px;
|
|
13319
|
-
}
|
|
13320
|
-
.settings-nav-item.active {
|
|
13321
|
-
background: color-mix(in srgb, var(--accent-primary) 12%, transparent);
|
|
13322
|
-
color: var(--accent-primary);
|
|
13323
|
-
font-weight: 500;
|
|
13324
|
-
}
|
|
13325
|
-
.settings-nav-item svg {
|
|
13326
|
-
flex-shrink: 0;
|
|
13327
|
-
}
|
|
13328
|
-
.settings-content {
|
|
13329
|
-
flex: 1;
|
|
13330
|
-
min-width: 0;
|
|
13331
|
-
overflow-y: auto;
|
|
13332
|
-
padding: 0 0 0 20px;
|
|
13333
|
-
overscroll-behavior: contain;
|
|
13334
|
-
scrollbar-gutter: stable;
|
|
13335
|
-
}
|
|
13336
|
-
.settings-category-panel {
|
|
13337
|
-
/* wrapper for each category's content */
|
|
13338
|
-
}
|
|
13339
|
-
|
|
13340
|
-
/* Mobile: stack sidebar above content */
|
|
13341
|
-
@media (max-width: 700px) {
|
|
13342
|
-
.settings-panel {
|
|
13343
|
-
width: min(440px, calc(100vw - 32px));
|
|
13344
|
-
}
|
|
13345
|
-
.settings-layout {
|
|
13346
|
-
flex-direction: column;
|
|
13347
|
-
}
|
|
13348
|
-
.settings-sidebar {
|
|
13349
|
-
flex-direction: row;
|
|
13350
|
-
width: 100%;
|
|
13351
|
-
border-right: none;
|
|
13352
|
-
border-bottom: 1px solid var(--border-subtle);
|
|
13353
|
-
padding: 0 0 8px 0;
|
|
13354
|
-
margin-bottom: 12px;
|
|
13355
|
-
overflow-x: auto;
|
|
13356
|
-
gap: 2px;
|
|
13357
|
-
}
|
|
13358
|
-
.settings-nav-item {
|
|
13359
|
-
flex-shrink: 0;
|
|
13360
|
-
width: auto;
|
|
13361
|
-
padding: 6px 10px;
|
|
13362
|
-
font-size: 11px;
|
|
13363
|
-
}
|
|
13364
|
-
.settings-nav-item span {
|
|
13365
|
-
display: none;
|
|
13366
|
-
}
|
|
13367
|
-
.settings-content {
|
|
13368
|
-
padding-left: 0;
|
|
13369
|
-
}
|
|
13370
|
-
}
|
|
13371
|
-
|
|
13372
|
-
.settings-callout {
|
|
13373
|
-
margin-bottom: 20px;
|
|
13374
|
-
padding: 14px;
|
|
13375
|
-
border-radius: var(--radius-md);
|
|
13376
|
-
border: 1px solid color-mix(in srgb, var(--accent-primary) 14%, transparent);
|
|
13377
|
-
background: color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
13378
|
-
}
|
|
13379
|
-
.settings-callout-title {
|
|
13380
|
-
font-size: 12px;
|
|
13381
|
-
font-weight: 600;
|
|
13382
|
-
color: var(--text-primary);
|
|
13383
|
-
margin-bottom: 6px;
|
|
13384
|
-
letter-spacing: 0.01em;
|
|
13385
|
-
}
|
|
13386
|
-
.settings-callout-copy {
|
|
13387
|
-
font-size: 12px;
|
|
13388
|
-
line-height: 1.55;
|
|
13389
|
-
color: var(--text-secondary);
|
|
13390
|
-
margin: 0;
|
|
13391
|
-
}
|
|
13392
|
-
.settings-premium-callout {
|
|
13393
|
-
background:
|
|
13394
|
-
radial-gradient(circle at top right, color-mix(in srgb, var(--accent-primary) 16%, transparent), transparent 40%),
|
|
13395
|
-
color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
13396
|
-
border-color: color-mix(in srgb, var(--accent-primary) 22%, transparent);
|
|
13397
|
-
}
|
|
13398
|
-
.settings-premium-callout-actions {
|
|
13399
|
-
display: flex;
|
|
13400
|
-
flex-wrap: wrap;
|
|
13401
|
-
gap: 10px;
|
|
13402
|
-
margin-top: 12px;
|
|
13403
|
-
}
|
|
13404
|
-
.settings-field {
|
|
13405
|
-
margin-bottom: 18px;
|
|
13406
|
-
}
|
|
13407
|
-
.settings-health {
|
|
13408
|
-
margin-bottom: 20px;
|
|
13409
|
-
padding: 14px;
|
|
13410
|
-
border-radius: var(--radius-md);
|
|
13411
|
-
border: 1px solid var(--border-visible);
|
|
13412
|
-
background: var(--surface-glass);
|
|
13413
|
-
}
|
|
13414
|
-
.settings-health-issues {
|
|
13415
|
-
display: flex;
|
|
13416
|
-
flex-direction: column;
|
|
13417
|
-
gap: 8px;
|
|
13418
|
-
margin-top: 10px;
|
|
13419
|
-
}
|
|
13420
|
-
.settings-health-issue {
|
|
13421
|
-
font-size: 12px;
|
|
13422
|
-
line-height: 1.5;
|
|
13423
|
-
padding: 10px 12px;
|
|
13424
|
-
border-radius: var(--radius-md);
|
|
13425
|
-
border: 1px solid var(--border-glass);
|
|
13426
|
-
color: var(--text-secondary);
|
|
13427
|
-
}
|
|
13428
|
-
.settings-health-issue.warning {
|
|
13429
|
-
border-color: color-mix(in srgb, var(--accent-primary) 28%, transparent);
|
|
13430
|
-
background: color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
13431
|
-
}
|
|
13432
|
-
.settings-health-issue.error {
|
|
13433
|
-
border-color: color-mix(in srgb, var(--status-error) 32%, transparent);
|
|
13434
|
-
background: color-mix(in srgb, var(--status-error) 6%, transparent);
|
|
13435
|
-
}
|
|
13436
|
-
.settings-inline-actions {
|
|
13437
|
-
display: flex;
|
|
13438
|
-
flex-wrap: wrap;
|
|
13439
|
-
gap: 8px;
|
|
13440
|
-
margin-bottom: 8px;
|
|
13441
|
-
}
|
|
13442
|
-
.settings-secondary-btn {
|
|
13443
|
-
height: 32px;
|
|
13444
|
-
padding: 0 12px;
|
|
13445
|
-
border-radius: var(--radius-md);
|
|
13446
|
-
border: 1px solid var(--border-visible);
|
|
13447
|
-
background: var(--surface-glass);
|
|
13448
|
-
color: var(--text-primary);
|
|
13449
|
-
font-size: 12px;
|
|
13450
|
-
cursor: pointer;
|
|
13451
|
-
}
|
|
13452
|
-
.settings-secondary-btn:hover:not(:disabled) {
|
|
13453
|
-
background: var(--bg-tertiary);
|
|
13454
|
-
}
|
|
13455
|
-
.settings-secondary-btn:disabled {
|
|
13456
|
-
opacity: 0.55;
|
|
13457
|
-
cursor: not-allowed;
|
|
13458
|
-
}
|
|
13459
|
-
.settings-label {
|
|
13460
|
-
display: block;
|
|
13461
|
-
font-size: 12px;
|
|
13462
|
-
color: var(--text-secondary);
|
|
13463
|
-
margin-bottom: 6px;
|
|
13464
|
-
font-weight: 500;
|
|
13465
|
-
letter-spacing: 0.01em;
|
|
13466
|
-
}
|
|
13467
|
-
.settings-label-optional {
|
|
13468
|
-
font-size: 11px;
|
|
13469
|
-
color: var(--text-muted);
|
|
13470
|
-
font-style: italic;
|
|
13471
|
-
}
|
|
13472
|
-
.settings-input {
|
|
13473
|
-
width: 100%;
|
|
13474
|
-
height: 34px;
|
|
13475
|
-
padding: 0 10px;
|
|
13476
|
-
margin: 0;
|
|
13477
|
-
border-radius: var(--radius-md);
|
|
13478
|
-
border: 1px solid var(--border-visible);
|
|
13479
|
-
background: var(--surface-glass);
|
|
13480
|
-
color: var(--text-primary);
|
|
13481
|
-
font-family: "JetBrains Mono", "SF Mono", "Fira Code", monospace;
|
|
13482
|
-
font-size: 12px;
|
|
13483
|
-
line-height: 1;
|
|
13484
|
-
box-sizing: border-box;
|
|
13485
|
-
text-rendering: auto;
|
|
13486
|
-
}
|
|
13487
|
-
.settings-select {
|
|
13488
|
-
appearance: none;
|
|
13489
|
-
padding-right: 30px;
|
|
13490
|
-
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");
|
|
13491
|
-
background-repeat: no-repeat;
|
|
13492
|
-
background-position: right 10px center;
|
|
13493
|
-
}
|
|
13494
|
-
.settings-textarea {
|
|
13495
|
-
width: 100%;
|
|
13496
|
-
padding: 8px 10px;
|
|
13497
|
-
margin: 0;
|
|
13498
|
-
border-radius: var(--radius-md);
|
|
13499
|
-
border: 1px solid var(--border-visible);
|
|
13500
|
-
background: var(--surface-glass);
|
|
13501
|
-
color: var(--text-primary);
|
|
13502
|
-
font-family: "JetBrains Mono", "SF Mono", "Fira Code", monospace;
|
|
13503
|
-
font-size: 12px;
|
|
13504
|
-
min-height: 120px;
|
|
13505
|
-
resize: vertical;
|
|
13506
|
-
box-sizing: border-box;
|
|
13507
|
-
line-height: 1.5;
|
|
13508
|
-
}
|
|
13509
|
-
.settings-feedback-textarea {
|
|
13510
|
-
margin-top: 8px;
|
|
13511
|
-
min-height: 96px;
|
|
13512
|
-
}
|
|
13513
|
-
.settings-input:focus,
|
|
13514
|
-
.settings-textarea:focus {
|
|
13515
|
-
outline: none;
|
|
13516
|
-
border-color: var(--accent-primary);
|
|
13517
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-primary) 18%, transparent);
|
|
13518
|
-
}
|
|
13519
|
-
.settings-hint {
|
|
13520
|
-
font-size: 11px;
|
|
13521
|
-
color: var(--text-muted);
|
|
13522
|
-
margin-top: 4px;
|
|
13523
|
-
line-height: 1.5;
|
|
13524
|
-
}
|
|
13525
|
-
.settings-hint code {
|
|
13526
|
-
font-size: 11px;
|
|
13527
|
-
background: var(--bg-tertiary);
|
|
13528
|
-
padding: 1px 5px;
|
|
13529
|
-
border-radius: 3px;
|
|
13530
|
-
}
|
|
13531
|
-
.settings-toggle {
|
|
13532
|
-
display: flex;
|
|
13533
|
-
align-items: center;
|
|
13534
|
-
justify-content: space-between;
|
|
13535
|
-
gap: 12px;
|
|
13536
|
-
font-size: 12px;
|
|
13537
|
-
color: var(--text-secondary);
|
|
13538
|
-
cursor: pointer;
|
|
13539
|
-
user-select: none;
|
|
13540
|
-
}
|
|
13541
|
-
.toggle-switch {
|
|
13542
|
-
position: relative;
|
|
13543
|
-
display: inline-block;
|
|
13544
|
-
width: 36px;
|
|
13545
|
-
height: 20px;
|
|
13546
|
-
border-radius: 10px;
|
|
13547
|
-
background: color-mix(in srgb, var(--text-muted) 40%, transparent);
|
|
13548
|
-
border: none;
|
|
13549
|
-
cursor: pointer;
|
|
13550
|
-
flex-shrink: 0;
|
|
13551
|
-
transition: background var(--duration-fast);
|
|
13552
|
-
}
|
|
13553
|
-
.toggle-switch:hover {
|
|
13554
|
-
background: color-mix(in srgb, var(--text-muted) 60%, transparent);
|
|
13555
|
-
}
|
|
13556
|
-
.toggle-switch.on {
|
|
13557
|
-
background: var(--accent-primary);
|
|
13558
|
-
}
|
|
13559
|
-
.toggle-switch.on:hover {
|
|
13560
|
-
background: var(--button-primary-hover-bg);
|
|
13561
|
-
}
|
|
13562
|
-
.toggle-switch-thumb {
|
|
13563
|
-
position: absolute;
|
|
13564
|
-
top: 3px;
|
|
13565
|
-
left: 3px;
|
|
13566
|
-
width: 14px;
|
|
13567
|
-
height: 14px;
|
|
13568
|
-
border-radius: 7px;
|
|
13569
|
-
background: #fff;
|
|
13570
|
-
transition: transform var(--duration-fast);
|
|
13571
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
|
|
13572
|
-
}
|
|
13573
|
-
.toggle-switch.on .toggle-switch-thumb {
|
|
13574
|
-
transform: translateX(16px);
|
|
13575
|
-
}
|
|
13576
|
-
.settings-status {
|
|
13577
|
-
margin-top: 12px;
|
|
13578
|
-
font-size: 12px;
|
|
13579
|
-
color: var(--text-secondary);
|
|
13580
|
-
line-height: 1.5;
|
|
13581
|
-
}
|
|
13582
|
-
.settings-status.success {
|
|
13583
|
-
color: var(--status-success, #52c41a);
|
|
13584
|
-
}
|
|
13585
|
-
.settings-status.error {
|
|
13586
|
-
color: var(--status-error, #f43f5e);
|
|
13587
|
-
}
|
|
13588
|
-
.settings-actions {
|
|
13589
|
-
display: flex;
|
|
13590
|
-
gap: 10px;
|
|
13591
|
-
justify-content: flex-end;
|
|
13592
|
-
margin-top: 20px;
|
|
13593
|
-
flex-shrink: 0;
|
|
13594
|
-
}
|
|
13595
|
-
.settings-save {
|
|
13596
|
-
height: 34px;
|
|
13597
|
-
padding: 0 18px;
|
|
13598
|
-
border-radius: var(--radius-md);
|
|
13599
|
-
border: none;
|
|
13600
|
-
font-size: 12px;
|
|
13601
|
-
font-weight: 600;
|
|
13602
|
-
background: var(--accent-primary);
|
|
13603
|
-
color: var(--button-primary-fg);
|
|
13604
|
-
cursor: pointer;
|
|
13605
|
-
transition: background var(--duration-fast);
|
|
13606
|
-
}
|
|
13607
|
-
.settings-save:hover {
|
|
13608
|
-
background: var(--button-primary-hover-bg);
|
|
13609
|
-
}
|
|
13610
|
-
.settings-close {
|
|
13611
|
-
height: 34px;
|
|
13612
|
-
padding: 0 18px;
|
|
13613
|
-
border-radius: var(--radius-md);
|
|
13614
|
-
border: 1px solid var(--border-visible);
|
|
13615
|
-
font-size: 12px;
|
|
13616
|
-
background: var(--surface-glass);
|
|
13617
|
-
color: var(--text-secondary);
|
|
13618
|
-
cursor: pointer;
|
|
13619
|
-
transition: background var(--duration-fast);
|
|
13620
|
-
}
|
|
13621
|
-
.settings-close:hover {
|
|
13622
|
-
background: var(--surface-hover);
|
|
13623
|
-
}
|
|
13624
|
-
.settings-refresh-btn {
|
|
13625
|
-
width: 32px;
|
|
13626
|
-
height: 32px;
|
|
13627
|
-
border: 1px solid var(--border-visible);
|
|
13628
|
-
border-radius: var(--radius-md);
|
|
13629
|
-
background: var(--surface-glass);
|
|
13630
|
-
color: var(--text-secondary);
|
|
13631
|
-
cursor: pointer;
|
|
13632
|
-
display: flex;
|
|
13633
|
-
align-items: center;
|
|
13634
|
-
justify-content: center;
|
|
13635
|
-
transition: background var(--duration-fast);
|
|
13636
|
-
flex-shrink: 0;
|
|
13637
|
-
}
|
|
13638
|
-
.settings-refresh-btn:hover {
|
|
13639
|
-
background: var(--surface-hover);
|
|
13640
|
-
}
|
|
13641
|
-
.settings-refresh-btn:disabled {
|
|
13642
|
-
opacity: 0.5;
|
|
13643
|
-
cursor: not-allowed;
|
|
13644
|
-
}
|
|
13645
|
-
.settings-input-disabled {
|
|
13646
|
-
display: flex;
|
|
13647
|
-
align-items: center;
|
|
13648
|
-
width: 100%;
|
|
13649
|
-
height: 34px;
|
|
13650
|
-
padding: 0 10px;
|
|
13651
|
-
border-radius: var(--radius-md);
|
|
13652
|
-
border: 1px solid var(--border-subtle);
|
|
13653
|
-
background: var(--bg-tertiary);
|
|
13654
|
-
color: var(--text-muted);
|
|
13655
|
-
font-size: 12px;
|
|
13656
|
-
opacity: 0.7;
|
|
13657
|
-
cursor: not-allowed;
|
|
13658
|
-
}
|
|
13659
|
-
|
|
13660
|
-
/* --- Premium section --- */
|
|
13661
|
-
.premium-section {
|
|
13662
|
-
display: flex;
|
|
13663
|
-
flex-direction: column;
|
|
13664
|
-
}
|
|
13665
|
-
.premium-description {
|
|
13666
|
-
font-size: 12px;
|
|
13667
|
-
line-height: 1.6;
|
|
13668
|
-
color: var(--text-secondary);
|
|
13669
|
-
margin: 0 0 12px;
|
|
13670
|
-
}
|
|
13671
|
-
.premium-activate-row {
|
|
13672
|
-
display: flex;
|
|
13673
|
-
gap: 10px;
|
|
13674
|
-
align-items: center;
|
|
13675
|
-
}
|
|
13676
|
-
.premium-email-input {
|
|
13677
|
-
flex: 1;
|
|
13678
|
-
}
|
|
13679
|
-
.premium-btn {
|
|
13680
|
-
height: 34px;
|
|
13681
|
-
padding: 0 16px;
|
|
13682
|
-
border-radius: var(--radius-md);
|
|
13683
|
-
font-size: 12px;
|
|
13684
|
-
font-weight: 500;
|
|
13685
|
-
cursor: pointer;
|
|
13686
|
-
transition: background var(--duration-fast), transform var(--duration-fast);
|
|
13687
|
-
white-space: nowrap;
|
|
13688
|
-
}
|
|
13689
|
-
.premium-btn:active {
|
|
13690
|
-
transform: scale(0.97);
|
|
13691
|
-
}
|
|
13692
|
-
.premium-btn:disabled {
|
|
13693
|
-
opacity: 0.5;
|
|
13694
|
-
cursor: not-allowed;
|
|
13695
|
-
}
|
|
13696
|
-
.premium-btn-activate {
|
|
13697
|
-
background: var(--surface-glass);
|
|
13698
|
-
border: 1px solid var(--border-visible);
|
|
13699
|
-
color: var(--text-primary);
|
|
13700
|
-
}
|
|
13701
|
-
.premium-btn-activate:hover {
|
|
13702
|
-
background: var(--surface-hover);
|
|
13703
|
-
}
|
|
13704
|
-
.premium-btn-upgrade {
|
|
13705
|
-
background: var(--accent-primary);
|
|
13706
|
-
border: none;
|
|
13707
|
-
color: var(--button-primary-fg);
|
|
13708
|
-
}
|
|
13709
|
-
.premium-btn-upgrade:hover {
|
|
13710
|
-
background: var(--button-primary-hover-bg);
|
|
13711
|
-
}
|
|
13712
|
-
.premium-btn-manage {
|
|
13713
|
-
background: var(--surface-glass);
|
|
13714
|
-
border: 1px solid var(--border-visible);
|
|
13715
|
-
color: var(--text-primary);
|
|
13716
|
-
align-self: flex-start;
|
|
13717
|
-
}
|
|
13718
|
-
.premium-btn-manage:hover {
|
|
13719
|
-
background: var(--surface-hover);
|
|
13720
|
-
}
|
|
13721
|
-
.premium-active-badge {
|
|
13722
|
-
display: inline-block;
|
|
13723
|
-
font-size: 11px;
|
|
13724
|
-
font-weight: 600;
|
|
13725
|
-
color: var(--button-primary-fg);
|
|
13726
|
-
background: var(--status-success, #52c41a);
|
|
13727
|
-
padding: 2px 10px;
|
|
13728
|
-
border-radius: 4px;
|
|
13729
|
-
margin-bottom: 10px;
|
|
13730
|
-
}
|
|
13731
|
-
.premium-detail {
|
|
13732
|
-
font-size: 11px;
|
|
13733
|
-
color: var(--text-muted);
|
|
13734
|
-
margin: 6px 0;
|
|
13735
|
-
}
|
|
13736
|
-
.premium-actions-row {
|
|
13737
|
-
display: flex;
|
|
13738
|
-
gap: 10px;
|
|
13739
|
-
margin-top: 10px;
|
|
13740
|
-
}
|
|
13741
|
-
.premium-btn-reset {
|
|
13742
|
-
height: 30px;
|
|
13743
|
-
padding: 0 12px;
|
|
13744
|
-
border-radius: var(--radius-md);
|
|
13745
|
-
border: 1px solid var(--border-subtle);
|
|
13746
|
-
background: transparent;
|
|
13747
|
-
color: var(--text-muted);
|
|
13748
|
-
font-size: 11px;
|
|
13749
|
-
cursor: pointer;
|
|
13750
|
-
}
|
|
13751
|
-
.premium-btn-reset:hover {
|
|
13752
|
-
background: var(--surface-hover);
|
|
13753
|
-
}
|
|
13754
|
-
|
|
13755
|
-
/* Welcome banner */
|
|
13756
|
-
.welcome-banner {
|
|
13757
|
-
margin-bottom: 20px;
|
|
13758
|
-
padding: 16px;
|
|
13759
|
-
border-radius: var(--radius-md);
|
|
13760
|
-
border: 1px solid color-mix(in srgb, var(--accent-primary) 22%, transparent);
|
|
13761
|
-
background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
13762
|
-
}
|
|
13763
|
-
.welcome-banner-header {
|
|
13764
|
-
display: flex;
|
|
13765
|
-
align-items: center;
|
|
13766
|
-
justify-content: space-between;
|
|
13767
|
-
margin-bottom: 8px;
|
|
13768
|
-
}
|
|
13769
|
-
.welcome-banner-title {
|
|
13770
|
-
font-size: 13px;
|
|
13771
|
-
font-weight: 600;
|
|
13772
|
-
color: var(--accent-primary);
|
|
13773
|
-
}
|
|
13774
|
-
.welcome-banner-dismiss {
|
|
13775
|
-
width: 24px;
|
|
13776
|
-
height: 24px;
|
|
13777
|
-
border-radius: 4px;
|
|
13778
|
-
background: transparent;
|
|
13779
|
-
border: none;
|
|
13780
|
-
color: var(--text-muted);
|
|
13781
|
-
font-size: 18px;
|
|
13782
|
-
cursor: pointer;
|
|
13783
|
-
display: flex;
|
|
13784
|
-
align-items: center;
|
|
13785
|
-
justify-content: center;
|
|
13786
|
-
}
|
|
13787
|
-
.welcome-banner-dismiss:hover {
|
|
13788
|
-
background: var(--surface-hover);
|
|
13789
|
-
color: var(--text-primary);
|
|
13790
|
-
}
|
|
13791
|
-
.welcome-banner-text {
|
|
13792
|
-
font-size: 12px;
|
|
13793
|
-
color: var(--text-secondary);
|
|
13794
|
-
margin: 0 0 8px;
|
|
13795
|
-
}
|
|
13796
|
-
.welcome-banner-steps {
|
|
13797
|
-
margin: 8px 0 0 16px;
|
|
13798
|
-
padding: 0;
|
|
13799
|
-
font-size: 12px;
|
|
13800
|
-
color: var(--text-secondary);
|
|
13801
|
-
line-height: 1.7;
|
|
13802
|
-
}
|
|
13803
|
-
.welcome-banner-steps li.done {
|
|
13804
|
-
color: var(--text-muted);
|
|
13805
|
-
text-decoration: line-through;
|
|
13806
|
-
}
|
|
13807
|
-
.welcome-banner-steps kbd {
|
|
13808
|
-
display: inline-block;
|
|
13809
|
-
padding: 1px 5px;
|
|
13810
|
-
font-size: 11px;
|
|
13811
|
-
font-family: "JetBrains Mono", "SF Mono", monospace;
|
|
13812
|
-
background: var(--bg-tertiary);
|
|
13813
|
-
border: 1px solid var(--border-subtle);
|
|
13814
|
-
border-radius: 3px;
|
|
13815
|
-
margin: 0 2px;
|
|
13816
|
-
}
|
|
13817
|
-
.welcome-banner-actions {
|
|
13818
|
-
margin-top: 14px;
|
|
13819
|
-
display: flex;
|
|
13820
|
-
flex-wrap: wrap;
|
|
13821
|
-
gap: 10px;
|
|
13822
|
-
align-items: center;
|
|
13823
|
-
}
|
|
13824
|
-
.welcome-banner-note {
|
|
13825
|
-
font-size: 11px;
|
|
13826
|
-
line-height: 1.5;
|
|
13827
|
-
color: var(--text-muted);
|
|
13828
|
-
max-width: 360px;
|
|
13829
|
-
}
|
|
13830
|
-
|
|
13831
|
-
/* Agent Credential Vault */
|
|
13832
|
-
.vault-premium-badge {
|
|
13833
|
-
display: inline-block;
|
|
13834
|
-
font-size: 10px;
|
|
13835
|
-
font-weight: 600;
|
|
13836
|
-
color: var(--accent-primary);
|
|
13837
|
-
background: color-mix(in srgb, var(--accent-primary) 15%, transparent);
|
|
13838
|
-
padding: 1px 6px;
|
|
13839
|
-
border-radius: 4px;
|
|
13840
|
-
margin-left: 8px;
|
|
13841
|
-
vertical-align: middle;
|
|
13842
|
-
}
|
|
13843
|
-
.vault-entries {
|
|
13844
|
-
display: flex;
|
|
13845
|
-
flex-direction: column;
|
|
13846
|
-
gap: 6px;
|
|
13847
|
-
margin-bottom: 10px;
|
|
13848
|
-
}
|
|
13849
|
-
.vault-entry {
|
|
13850
|
-
display: flex;
|
|
13851
|
-
align-items: center;
|
|
13852
|
-
justify-content: space-between;
|
|
13853
|
-
padding: 8px 12px;
|
|
13854
|
-
background: var(--bg-tertiary);
|
|
13855
|
-
border: 1px solid var(--border-subtle);
|
|
13856
|
-
border-radius: var(--radius-md);
|
|
13857
|
-
}
|
|
13858
|
-
.vault-entry-info {
|
|
13859
|
-
display: flex;
|
|
13860
|
-
flex-direction: column;
|
|
13861
|
-
gap: 2px;
|
|
13862
|
-
min-width: 0;
|
|
13863
|
-
}
|
|
13864
|
-
.vault-entry-label {
|
|
13865
|
-
font-size: 12px;
|
|
13866
|
-
font-weight: 500;
|
|
13867
|
-
color: var(--text-primary);
|
|
13868
|
-
white-space: nowrap;
|
|
13869
|
-
overflow: hidden;
|
|
13870
|
-
text-overflow: ellipsis;
|
|
13871
|
-
}
|
|
13872
|
-
.vault-entry-detail {
|
|
13873
|
-
font-size: 11px;
|
|
13874
|
-
color: var(--text-muted);
|
|
13875
|
-
white-space: nowrap;
|
|
13876
|
-
overflow: hidden;
|
|
13877
|
-
text-overflow: ellipsis;
|
|
13878
|
-
}
|
|
13879
|
-
.vault-entry-remove {
|
|
13880
|
-
flex-shrink: 0;
|
|
13881
|
-
width: 24px;
|
|
13882
|
-
height: 24px;
|
|
13883
|
-
border-radius: 4px;
|
|
13884
|
-
background: transparent;
|
|
13885
|
-
border: none;
|
|
13886
|
-
color: var(--text-muted);
|
|
13887
|
-
font-size: 16px;
|
|
13888
|
-
cursor: pointer;
|
|
13889
|
-
display: flex;
|
|
13890
|
-
align-items: center;
|
|
13891
|
-
justify-content: center;
|
|
13892
|
-
transition: background var(--duration-fast), color var(--duration-fast);
|
|
13893
|
-
}
|
|
13894
|
-
.vault-entry-remove:hover {
|
|
13895
|
-
background: color-mix(in srgb, var(--status-error) 12%, transparent);
|
|
13896
|
-
color: var(--status-error);
|
|
13897
|
-
}
|
|
13898
|
-
.vault-add-btn {
|
|
13899
|
-
height: 32px;
|
|
13900
|
-
padding: 0 14px;
|
|
13901
|
-
border-radius: var(--radius-md);
|
|
13902
|
-
font-size: 12px;
|
|
13903
|
-
font-weight: 500;
|
|
13904
|
-
background: var(--bg-tertiary);
|
|
13905
|
-
border: 1px dashed var(--border-subtle);
|
|
13906
|
-
color: var(--text-secondary);
|
|
13907
|
-
cursor: pointer;
|
|
13908
|
-
width: 100%;
|
|
13909
|
-
transition: background var(--duration-fast), border-color var(--duration-fast);
|
|
13910
|
-
}
|
|
13911
|
-
.vault-add-btn:hover {
|
|
13912
|
-
background: var(--border-visible);
|
|
13913
|
-
border-color: var(--border-visible);
|
|
13914
|
-
}
|
|
13915
|
-
.vault-add-form {
|
|
13916
|
-
display: flex;
|
|
13917
|
-
flex-direction: column;
|
|
13918
|
-
gap: 8px;
|
|
13919
|
-
padding: 12px;
|
|
13920
|
-
background: var(--surface-glass);
|
|
13921
|
-
border: 1px solid var(--border-subtle);
|
|
13922
|
-
border-radius: var(--radius-md);
|
|
13923
|
-
}
|
|
13924
|
-
.vault-add-actions {
|
|
13925
|
-
display: flex;
|
|
13926
|
-
gap: 8px;
|
|
13927
|
-
justify-content: flex-end;
|
|
13928
|
-
margin-top: 4px;
|
|
13929
|
-
}
|
|
13930
|
-
`), _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>`);
|
|
13931
13228
|
const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
|
|
13932
13229
|
id: p.id,
|
|
13933
13230
|
name: p.name,
|
|
@@ -14517,315 +13814,313 @@ const Settings = () => {
|
|
|
14517
13814
|
return settingsVisible();
|
|
14518
13815
|
},
|
|
14519
13816
|
get children() {
|
|
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
|
-
|
|
14804
|
-
|
|
14805
|
-
|
|
14806
|
-
|
|
14807
|
-
|
|
14808
|
-
|
|
14809
|
-
|
|
14810
|
-
|
|
14811
|
-
|
|
14812
|
-
|
|
14813
|
-
|
|
14814
|
-
|
|
14815
|
-
|
|
14816
|
-
|
|
14817
|
-
|
|
14818
|
-
|
|
14819
|
-
|
|
14820
|
-
|
|
14821
|
-
|
|
14822
|
-
|
|
14823
|
-
|
|
14824
|
-
|
|
14825
|
-
|
|
14826
|
-
|
|
14827
|
-
return _el$;
|
|
14828
|
-
})(), _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$;
|
|
14829
14124
|
}
|
|
14830
14125
|
});
|
|
14831
14126
|
};
|
|
@@ -15194,7 +14489,8 @@ const App = () => {
|
|
|
15194
14489
|
document.documentElement.setAttribute("data-theme", theme);
|
|
15195
14490
|
try {
|
|
15196
14491
|
localStorage.setItem("vessel:theme", theme);
|
|
15197
|
-
} catch {
|
|
14492
|
+
} catch (err) {
|
|
14493
|
+
console.warn("Failed to persist theme to localStorage:", err);
|
|
15198
14494
|
}
|
|
15199
14495
|
};
|
|
15200
14496
|
const loadAndApplyTheme = async () => {
|