@quanta-intellect/vessel-browser 0.1.127 → 0.1.130
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 +672 -665
- package/out/preload/content-script.js +39 -2
- package/out/renderer/assets/{index-DW3ChyZf.js → index-BjtfG1IG.js} +615 -1485
- package/out/renderer/assets/{index-CwDcicSR.css → index-CWy6khUL.css} +778 -158
- package/out/renderer/index.html +2 -2
- package/package.json +10 -1
|
@@ -2491,93 +2491,11 @@ function useRuntime() {
|
|
|
2491
2491
|
restoreSession: () => window.vessel.ai.restoreSession()
|
|
2492
2492
|
};
|
|
2493
2493
|
}
|
|
2494
|
-
function formatAgentActionName(name) {
|
|
2495
|
-
return name.split(/[_-]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
2496
|
-
}
|
|
2497
|
-
function summarizeAgentAction(action) {
|
|
2498
|
-
if (action.status === "waiting-approval") {
|
|
2499
|
-
return action.argsSummary || "Waiting for approval";
|
|
2500
|
-
}
|
|
2501
|
-
if (action.status === "running") {
|
|
2502
|
-
return action.argsSummary || "Running";
|
|
2503
|
-
}
|
|
2504
|
-
if (action.status === "failed") {
|
|
2505
|
-
return action.error || action.resultSummary || "Action failed";
|
|
2506
|
-
}
|
|
2507
|
-
return action.resultSummary || action.argsSummary || "Completed";
|
|
2508
|
-
}
|
|
2509
|
-
function formatAgentTimelineDuration(durationMs) {
|
|
2510
|
-
if (!durationMs || durationMs < 1) return null;
|
|
2511
|
-
if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
|
|
2512
|
-
return `${(durationMs / 1e3).toFixed(durationMs < 1e4 ? 1 : 0)}s`;
|
|
2513
|
-
}
|
|
2514
|
-
function buildAgentTimelineItems(state, limit = 12) {
|
|
2515
|
-
const transcriptItems = state.transcript.map((entry) => ({
|
|
2516
|
-
id: `transcript:${entry.id}`,
|
|
2517
|
-
type: "transcript",
|
|
2518
|
-
timestamp: entry.updatedAt,
|
|
2519
|
-
status: entry.status,
|
|
2520
|
-
kind: entry.kind,
|
|
2521
|
-
label: entry.title || entry.kind,
|
|
2522
|
-
detail: entry.text
|
|
2523
|
-
}));
|
|
2524
|
-
const actionItems = state.actions.map((action) => ({
|
|
2525
|
-
id: `action:${action.id}`,
|
|
2526
|
-
type: "action",
|
|
2527
|
-
timestamp: action.finishedAt || action.startedAt,
|
|
2528
|
-
status: action.status,
|
|
2529
|
-
kind: "action",
|
|
2530
|
-
label: formatAgentActionName(action.name),
|
|
2531
|
-
detail: summarizeAgentAction(action),
|
|
2532
|
-
durationMs: action.durationMs
|
|
2533
|
-
}));
|
|
2534
|
-
return [...transcriptItems, ...actionItems].sort(
|
|
2535
|
-
(left, right) => new Date(right.timestamp).getTime() - new Date(left.timestamp).getTime()
|
|
2536
|
-
).slice(0, limit);
|
|
2537
|
-
}
|
|
2538
|
-
function isLiveAgentTimelineItem(item) {
|
|
2539
|
-
return item.status === "streaming" || item.status === "running";
|
|
2540
|
-
}
|
|
2541
2494
|
const AGENT_ACTIVITY_WINDOW_MS = 6e3;
|
|
2542
|
-
const AGENT_RECENT_WINDOW_MS = 3e4;
|
|
2543
2495
|
const AGENT_RUNNING_STALE_WINDOW_MS = 5 * 6e4;
|
|
2544
2496
|
function isAgentActionSource(source) {
|
|
2545
2497
|
return source === "ai" || source === "mcp";
|
|
2546
2498
|
}
|
|
2547
|
-
function isAgentTranscriptActive(entry, currentTime) {
|
|
2548
|
-
if (!isAgentActionSource(entry.source)) return false;
|
|
2549
|
-
if (entry.status === "streaming") {
|
|
2550
|
-
const updatedAt2 = new Date(entry.updatedAt).getTime();
|
|
2551
|
-
if (Number.isNaN(updatedAt2)) return true;
|
|
2552
|
-
return currentTime - updatedAt2 < AGENT_ACTIVITY_WINDOW_MS;
|
|
2553
|
-
}
|
|
2554
|
-
const updatedAt = new Date(entry.updatedAt).getTime();
|
|
2555
|
-
if (Number.isNaN(updatedAt)) return false;
|
|
2556
|
-
return currentTime - updatedAt < AGENT_ACTIVITY_WINDOW_MS;
|
|
2557
|
-
}
|
|
2558
|
-
function summarizeTranscriptText(entry) {
|
|
2559
|
-
const raw = `${entry.title ? `${entry.title}: ` : ""}${entry.text}`.trim();
|
|
2560
|
-
const singleLine = raw.replace(/\s+/g, " ").trim();
|
|
2561
|
-
return singleLine.length > 96 ? `${singleLine.slice(0, 93).trimEnd()}...` : singleLine;
|
|
2562
|
-
}
|
|
2563
|
-
function summarizeActionText(action) {
|
|
2564
|
-
const name = formatAgentActionName(action.name);
|
|
2565
|
-
if (action.status === "running") {
|
|
2566
|
-
return `${name} in progress`;
|
|
2567
|
-
}
|
|
2568
|
-
if (action.status === "waiting-approval") {
|
|
2569
|
-
return `${name} waiting for approval`;
|
|
2570
|
-
}
|
|
2571
|
-
if (action.status === "completed" && action.resultSummary) {
|
|
2572
|
-
const singleLine = action.resultSummary.replace(/\s+/g, " ").trim();
|
|
2573
|
-
return singleLine.length > 96 ? `${singleLine.slice(0, 93).trimEnd()}...` : singleLine;
|
|
2574
|
-
}
|
|
2575
|
-
if (action.status === "failed" && action.error) {
|
|
2576
|
-
const singleLine = action.error.replace(/\s+/g, " ").trim();
|
|
2577
|
-
return `${name} failed: ${singleLine.length > 72 ? `${singleLine.slice(0, 69).trimEnd()}...` : singleLine}`;
|
|
2578
|
-
}
|
|
2579
|
-
return name;
|
|
2580
|
-
}
|
|
2581
2499
|
function isAgentActionActive(action, currentTime) {
|
|
2582
2500
|
if (!isAgentActionSource(action.source)) return false;
|
|
2583
2501
|
if (action.status === "waiting-approval") {
|
|
@@ -2595,9 +2513,6 @@ function isAgentActionActive(action, currentTime) {
|
|
|
2595
2513
|
if (Number.isNaN(finishedAt)) return false;
|
|
2596
2514
|
return currentTime - finishedAt < AGENT_ACTIVITY_WINDOW_MS;
|
|
2597
2515
|
}
|
|
2598
|
-
function hasRecentAgentActivity(state, currentTime = Date.now()) {
|
|
2599
|
-
return state.actions.some((action) => isAgentActionActive(action, currentTime)) || state.transcript.some((entry) => isAgentTranscriptActive(entry, currentTime));
|
|
2600
|
-
}
|
|
2601
2516
|
function getAgentActiveTabIds(state, currentTime = Date.now()) {
|
|
2602
2517
|
const activeTabIds = /* @__PURE__ */ new Set();
|
|
2603
2518
|
for (const action of state.actions) {
|
|
@@ -2608,50 +2523,7 @@ function getAgentActiveTabIds(state, currentTime = Date.now()) {
|
|
|
2608
2523
|
}
|
|
2609
2524
|
return activeTabIds;
|
|
2610
2525
|
}
|
|
2611
|
-
|
|
2612
|
-
const recentTranscript = [...state.transcript].filter((entry) => isAgentTranscriptActive(entry, currentTime)).sort(
|
|
2613
|
-
(left, right) => new Date(right.updatedAt).getTime() - new Date(left.updatedAt).getTime()
|
|
2614
|
-
)[0];
|
|
2615
|
-
if (recentTranscript) {
|
|
2616
|
-
const summary = summarizeTranscriptText(recentTranscript);
|
|
2617
|
-
if (summary) return summary;
|
|
2618
|
-
}
|
|
2619
|
-
const recentAction = [...state.actions].filter((action) => isAgentActionActive(action, currentTime)).sort((left, right) => {
|
|
2620
|
-
const leftTime = new Date(
|
|
2621
|
-
left.finishedAt || left.startedAt
|
|
2622
|
-
).getTime();
|
|
2623
|
-
const rightTime = new Date(
|
|
2624
|
-
right.finishedAt || right.startedAt
|
|
2625
|
-
).getTime();
|
|
2626
|
-
return rightTime - leftTime;
|
|
2627
|
-
})[0];
|
|
2628
|
-
return recentAction ? summarizeActionText(recentAction) : null;
|
|
2629
|
-
}
|
|
2630
|
-
function hasRecentActivity(state, windowMs, currentTime) {
|
|
2631
|
-
for (const action of state.actions) {
|
|
2632
|
-
if (!isAgentActionSource(action.source)) continue;
|
|
2633
|
-
if (isAgentActionActive(action, currentTime)) return true;
|
|
2634
|
-
const ts = action.finishedAt ? new Date(action.finishedAt).getTime() : new Date(action.startedAt).getTime();
|
|
2635
|
-
if (!Number.isNaN(ts) && currentTime - ts < windowMs) return true;
|
|
2636
|
-
}
|
|
2637
|
-
for (const entry of state.transcript) {
|
|
2638
|
-
if (!isAgentActionSource(entry.source)) continue;
|
|
2639
|
-
const ts = new Date(entry.updatedAt).getTime();
|
|
2640
|
-
if (!Number.isNaN(ts) && currentTime - ts < windowMs) return true;
|
|
2641
|
-
}
|
|
2642
|
-
return false;
|
|
2643
|
-
}
|
|
2644
|
-
function getAgentPresence(state, currentTime = Date.now()) {
|
|
2645
|
-
if (hasRecentAgentActivity(state, currentTime)) {
|
|
2646
|
-
return "active";
|
|
2647
|
-
}
|
|
2648
|
-
const mcpConnected = state.mcpStatus === "ready";
|
|
2649
|
-
if (mcpConnected || hasRecentActivity(state, AGENT_RECENT_WINDOW_MS, currentTime)) {
|
|
2650
|
-
return "recent";
|
|
2651
|
-
}
|
|
2652
|
-
return "idle";
|
|
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$m = /* @__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>`);
|
|
2526
|
+
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$h = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$f = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$d = /* @__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
2527
|
const TAB_CLOSE_MS = 200;
|
|
2656
2528
|
function stringToHue(str) {
|
|
2657
2529
|
let hash = 0;
|
|
@@ -2762,7 +2634,7 @@ const TabBar = () => {
|
|
|
2762
2634
|
},
|
|
2763
2635
|
get fallback() {
|
|
2764
2636
|
return memo(() => entry.type === "group")() && (() => {
|
|
2765
|
-
var _el$0 = _tmpl$4$
|
|
2637
|
+
var _el$0 = _tmpl$4$l(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
|
|
2766
2638
|
_el$0.$$contextmenu = (e) => {
|
|
2767
2639
|
e.preventDefault();
|
|
2768
2640
|
window.vessel.tabs.showGroupContextMenu(entry.groupId);
|
|
@@ -2788,7 +2660,7 @@ const TabBar = () => {
|
|
|
2788
2660
|
return memo(() => entry.type === "tab")() && (() => {
|
|
2789
2661
|
const tab = entry.tab;
|
|
2790
2662
|
return (() => {
|
|
2791
|
-
var _el$12 = _tmpl$6$
|
|
2663
|
+
var _el$12 = _tmpl$6$f();
|
|
2792
2664
|
_el$12.$$contextmenu = (e) => {
|
|
2793
2665
|
e.preventDefault();
|
|
2794
2666
|
window.vessel.tabs.showContextMenu(tab.id);
|
|
@@ -2813,7 +2685,7 @@ const TabBar = () => {
|
|
|
2813
2685
|
return memo(() => !!tab.isPinned)() && (tab.isAudible || tab.isMuted);
|
|
2814
2686
|
},
|
|
2815
2687
|
get children() {
|
|
2816
|
-
var _el$13 = _tmpl$5$
|
|
2688
|
+
var _el$13 = _tmpl$5$h();
|
|
2817
2689
|
_el$13.$$click = (e) => {
|
|
2818
2690
|
e.stopPropagation();
|
|
2819
2691
|
void toggleMute(tab.id);
|
|
@@ -2840,7 +2712,7 @@ const TabBar = () => {
|
|
|
2840
2712
|
insert(_el$12, (() => {
|
|
2841
2713
|
var _c$ = memo(() => !!!tab.isPinned);
|
|
2842
2714
|
return () => _c$() && [memo(() => memo(() => !!modelActiveTabIds().has(tab.id))() && _tmpl$0$7()), (() => {
|
|
2843
|
-
var _el$14 = _tmpl$7$
|
|
2715
|
+
var _el$14 = _tmpl$7$d();
|
|
2844
2716
|
insert(_el$14, () => tab.title || "New Tab");
|
|
2845
2717
|
return _el$14;
|
|
2846
2718
|
})(), createComponent(Show, {
|
|
@@ -2917,7 +2789,7 @@ const TabBar = () => {
|
|
|
2917
2789
|
})();
|
|
2918
2790
|
};
|
|
2919
2791
|
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$
|
|
2792
|
+
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$g = /* @__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
2793
|
const SecurityPopup = (props) => {
|
|
2922
2794
|
const statusText = () => {
|
|
2923
2795
|
switch (props.state.status) {
|
|
@@ -2943,7 +2815,8 @@ const SecurityPopup = (props) => {
|
|
|
2943
2815
|
const loadPermissions = async () => {
|
|
2944
2816
|
try {
|
|
2945
2817
|
setPermissions(await window.vessel.permissions.getAll());
|
|
2946
|
-
} catch {
|
|
2818
|
+
} catch (err) {
|
|
2819
|
+
console.warn("Failed to load permissions:", err);
|
|
2947
2820
|
}
|
|
2948
2821
|
};
|
|
2949
2822
|
const handleLearnMore = () => {
|
|
@@ -2988,7 +2861,7 @@ const SecurityPopup = (props) => {
|
|
|
2988
2861
|
return sitePermissions();
|
|
2989
2862
|
},
|
|
2990
2863
|
children: (item) => (() => {
|
|
2991
|
-
var _el$9 = _tmpl$4$
|
|
2864
|
+
var _el$9 = _tmpl$4$k(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
|
|
2992
2865
|
insert(_el$0, () => item.permission);
|
|
2993
2866
|
insert(_el$1, () => item.decision);
|
|
2994
2867
|
createRenderEffect(() => className(_el$1, item.decision));
|
|
@@ -3007,7 +2880,7 @@ const SecurityPopup = (props) => {
|
|
|
3007
2880
|
insert(_el$2, (() => {
|
|
3008
2881
|
var _c$ = memo(() => !!props.state.canProceed);
|
|
3009
2882
|
return () => _c$() && (() => {
|
|
3010
|
-
var _el$10 = _tmpl$5$
|
|
2883
|
+
var _el$10 = _tmpl$5$g(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling;
|
|
3011
2884
|
_el$11.$$click = handleProceedAnyway;
|
|
3012
2885
|
_el$12.$$click = handleGoBackToSafety;
|
|
3013
2886
|
return _el$10;
|
|
@@ -3147,10 +3020,15 @@ function useHistory() {
|
|
|
3147
3020
|
void init$3();
|
|
3148
3021
|
const loadMore = async (limit = HISTORY_PAGE_SIZE) => {
|
|
3149
3022
|
const current = historyState().entries;
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3023
|
+
try {
|
|
3024
|
+
const page = await window.vessel.history.list(current.length, limit);
|
|
3025
|
+
setHistoryState({ entries: [...current, ...page.entries] });
|
|
3026
|
+
setHistoryTotal(page.total);
|
|
3027
|
+
return page;
|
|
3028
|
+
} catch (err) {
|
|
3029
|
+
logger$3.error("Failed to load more history entries:", err);
|
|
3030
|
+
return { entries: [], total: historyTotal() };
|
|
3031
|
+
}
|
|
3154
3032
|
};
|
|
3155
3033
|
return {
|
|
3156
3034
|
historyState,
|
|
@@ -3402,7 +3280,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
3402
3280
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
3403
3281
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
3404
3282
|
};
|
|
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$
|
|
3283
|
+
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$f = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$e = /* @__PURE__ */ template(`<button class=page-diff-trigger title="Open the What Changed timeline"><span class=page-diff-trigger-dot aria-hidden=true></span><span class=page-diff-trigger-text>What Changed?`), _tmpl$7$c = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$8$9 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$9$8 = /* @__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$0$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$1$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$10$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$11$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$12$6 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$13$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$14$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$15$5 = /* @__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$16$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$17$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$18$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$19$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$20$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$22$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$27$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$28$3 = /* @__PURE__ */ template(`<li>`);
|
|
3406
3284
|
const AddressBar = (props) => {
|
|
3407
3285
|
const {
|
|
3408
3286
|
activeTab,
|
|
@@ -3438,8 +3316,6 @@ const AddressBar = (props) => {
|
|
|
3438
3316
|
const [searchEngine, setSearchEngine] = createSignal("duckduckgo");
|
|
3439
3317
|
const [showSecurityPopup, setShowSecurityPopup] = createSignal(false);
|
|
3440
3318
|
const [hasEditedAddress, setHasEditedAddress] = createSignal(false);
|
|
3441
|
-
const [dismissedAgentStatusKey, setDismissedAgentStatusKey] = createSignal(null);
|
|
3442
|
-
const now2 = useNow();
|
|
3443
3319
|
let inputRef;
|
|
3444
3320
|
let addressBlurTimer = null;
|
|
3445
3321
|
let skipNextAddressBlurSync = false;
|
|
@@ -3450,22 +3326,6 @@ const AddressBar = (props) => {
|
|
|
3450
3326
|
const tabId = activeTabId2();
|
|
3451
3327
|
return tabId ? getSecurityState(tabId) : void 0;
|
|
3452
3328
|
});
|
|
3453
|
-
const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
|
|
3454
|
-
const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
|
|
3455
|
-
const agentStatusKey = createMemo(() => {
|
|
3456
|
-
const message = agentStatusMessage();
|
|
3457
|
-
if (!message) return null;
|
|
3458
|
-
return `${agentPresence()}:${message}`;
|
|
3459
|
-
});
|
|
3460
|
-
const showAgentStatusBadge = createMemo(() => {
|
|
3461
|
-
const key = agentStatusKey();
|
|
3462
|
-
return !!key && dismissedAgentStatusKey() !== key;
|
|
3463
|
-
});
|
|
3464
|
-
createEffect(() => {
|
|
3465
|
-
if (!agentStatusKey()) {
|
|
3466
|
-
setDismissedAgentStatusKey(null);
|
|
3467
|
-
}
|
|
3468
|
-
});
|
|
3469
3329
|
const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
|
|
3470
3330
|
const searchEnginePreset = createMemo(() => {
|
|
3471
3331
|
const engine = searchEngine();
|
|
@@ -3713,7 +3573,7 @@ const AddressBar = (props) => {
|
|
|
3713
3573
|
};
|
|
3714
3574
|
const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
|
|
3715
3575
|
return (() => {
|
|
3716
|
-
var _el$ = _tmpl$
|
|
3576
|
+
var _el$ = _tmpl$16$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$32 = _el$11.nextSibling, _el$33 = _el$32.firstChild, _el$34 = _el$33.firstChild;
|
|
3717
3577
|
addEventListener(_el$3, "click", goBack, true);
|
|
3718
3578
|
addEventListener(_el$4, "click", goForward, true);
|
|
3719
3579
|
addEventListener(_el$5, "click", reload, true);
|
|
@@ -3728,14 +3588,14 @@ const AddressBar = (props) => {
|
|
|
3728
3588
|
return memo(() => !!securityState()?.status)() && securityState()?.status !== "none";
|
|
3729
3589
|
},
|
|
3730
3590
|
get children() {
|
|
3731
|
-
var _el$7 = _tmpl$4$
|
|
3591
|
+
var _el$7 = _tmpl$4$j(), _el$8 = _el$7.firstChild;
|
|
3732
3592
|
_el$8.$$click = () => setShowSecurityPopup((prev) => !prev);
|
|
3733
3593
|
insert(_el$8, createComponent(Switch, {
|
|
3734
3594
|
get fallback() {
|
|
3735
3595
|
return (() => {
|
|
3736
|
-
var _el$
|
|
3737
|
-
_el$
|
|
3738
|
-
return _el$
|
|
3596
|
+
var _el$45 = _tmpl$17$4();
|
|
3597
|
+
_el$45.firstChild;
|
|
3598
|
+
return _el$45;
|
|
3739
3599
|
})();
|
|
3740
3600
|
},
|
|
3741
3601
|
get children() {
|
|
@@ -3813,75 +3673,49 @@ const AddressBar = (props) => {
|
|
|
3813
3673
|
return memo(() => !!showSuggestions())() && suggestions().length > 0;
|
|
3814
3674
|
},
|
|
3815
3675
|
get children() {
|
|
3816
|
-
var _el$14 = _tmpl$5$
|
|
3676
|
+
var _el$14 = _tmpl$5$f();
|
|
3817
3677
|
insert(_el$14, createComponent(For, {
|
|
3818
3678
|
get each() {
|
|
3819
3679
|
return suggestions();
|
|
3820
3680
|
},
|
|
3821
3681
|
children: (item, i) => (() => {
|
|
3822
|
-
var _el$
|
|
3823
|
-
_el$
|
|
3824
|
-
_el$
|
|
3682
|
+
var _el$47 = _tmpl$18$4(), _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
|
|
3683
|
+
_el$47.addEventListener("mouseenter", () => setSelectedIndex(i()));
|
|
3684
|
+
_el$47.$$mousedown = (e) => {
|
|
3825
3685
|
e.preventDefault();
|
|
3826
3686
|
selectSuggestion(item.url);
|
|
3827
3687
|
};
|
|
3828
|
-
insert(_el$
|
|
3688
|
+
insert(_el$48, (() => {
|
|
3829
3689
|
var _c$ = memo(() => item.source === "bookmark");
|
|
3830
3690
|
return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
|
|
3831
3691
|
})());
|
|
3832
|
-
insert(_el$
|
|
3833
|
-
insert(_el$
|
|
3692
|
+
insert(_el$50, () => item.title || item.url);
|
|
3693
|
+
insert(_el$51, () => item.subtitle || item.url);
|
|
3834
3694
|
createRenderEffect((_p$) => {
|
|
3835
|
-
var _v$
|
|
3836
|
-
_v$
|
|
3837
|
-
_v$
|
|
3838
|
-
_v$
|
|
3695
|
+
var _v$10 = `address-autocomplete-${i()}`, _v$11 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$12 = selectedIndex() === i();
|
|
3696
|
+
_v$10 !== _p$.e && setAttribute(_el$47, "id", _p$.e = _v$10);
|
|
3697
|
+
_v$11 !== _p$.t && className(_el$47, _p$.t = _v$11);
|
|
3698
|
+
_v$12 !== _p$.a && setAttribute(_el$47, "aria-selected", _p$.a = _v$12);
|
|
3839
3699
|
return _p$;
|
|
3840
3700
|
}, {
|
|
3841
3701
|
e: void 0,
|
|
3842
3702
|
t: void 0,
|
|
3843
3703
|
a: void 0
|
|
3844
3704
|
});
|
|
3845
|
-
return _el$
|
|
3705
|
+
return _el$47;
|
|
3846
3706
|
})()
|
|
3847
3707
|
}));
|
|
3848
3708
|
return _el$14;
|
|
3849
3709
|
}
|
|
3850
3710
|
}), null);
|
|
3851
|
-
insert(_el$11, createComponent(Show, {
|
|
3852
|
-
get when() {
|
|
3853
|
-
return !isPrivateWindow && showAgentStatusBadge();
|
|
3854
|
-
},
|
|
3855
|
-
get children() {
|
|
3856
|
-
var _el$15 = _tmpl$6$f(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling, _el$18 = _el$17.nextSibling;
|
|
3857
|
-
insert(_el$17, agentStatusMessage);
|
|
3858
|
-
_el$18.$$click = (event) => {
|
|
3859
|
-
event.stopPropagation();
|
|
3860
|
-
setDismissedAgentStatusKey(agentStatusKey());
|
|
3861
|
-
};
|
|
3862
|
-
insert(_el$18, createComponent(x_default, {
|
|
3863
|
-
size: 12
|
|
3864
|
-
}));
|
|
3865
|
-
createRenderEffect((_p$) => {
|
|
3866
|
-
var _v$3 = `agent-status-badge ${agentPresence()}`, _v$4 = agentStatusMessage() || "Agent is using the browser";
|
|
3867
|
-
_v$3 !== _p$.e && className(_el$15, _p$.e = _v$3);
|
|
3868
|
-
_v$4 !== _p$.t && setAttribute(_el$15, "title", _p$.t = _v$4);
|
|
3869
|
-
return _p$;
|
|
3870
|
-
}, {
|
|
3871
|
-
e: void 0,
|
|
3872
|
-
t: void 0
|
|
3873
|
-
});
|
|
3874
|
-
return _el$15;
|
|
3875
|
-
}
|
|
3876
|
-
}), null);
|
|
3877
3711
|
insert(_el$11, createComponent(Show, {
|
|
3878
3712
|
get when() {
|
|
3879
3713
|
return pageDiff();
|
|
3880
3714
|
},
|
|
3881
3715
|
get children() {
|
|
3882
|
-
var _el$
|
|
3883
|
-
_el$
|
|
3884
|
-
return _el$
|
|
3716
|
+
var _el$15 = _tmpl$6$e();
|
|
3717
|
+
_el$15.$$click = () => void openDiffTimeline();
|
|
3718
|
+
return _el$15;
|
|
3885
3719
|
}
|
|
3886
3720
|
}), null);
|
|
3887
3721
|
insert(_el$, createComponent(Show, {
|
|
@@ -3889,245 +3723,245 @@ const AddressBar = (props) => {
|
|
|
3889
3723
|
return memo(() => !!pageDiff())() && diffExpanded();
|
|
3890
3724
|
},
|
|
3891
3725
|
get children() {
|
|
3892
|
-
var _el$
|
|
3893
|
-
_el$
|
|
3894
|
-
var _el$
|
|
3895
|
-
insert(_el$
|
|
3896
|
-
insert(_el$
|
|
3726
|
+
var _el$16 = _tmpl$9$8(), _el$17 = _el$16.firstChild, _el$18 = _el$17.firstChild, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling;
|
|
3727
|
+
_el$20.firstChild;
|
|
3728
|
+
var _el$27 = _el$18.nextSibling, _el$28 = _el$27.firstChild, _el$29 = _el$28.nextSibling;
|
|
3729
|
+
insert(_el$20, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
|
|
3730
|
+
insert(_el$18, createComponent(Show, {
|
|
3897
3731
|
get when() {
|
|
3898
3732
|
return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
|
|
3899
3733
|
},
|
|
3900
3734
|
get children() {
|
|
3901
|
-
var _el$
|
|
3902
|
-
_el$
|
|
3903
|
-
insert(_el$
|
|
3904
|
-
insert(_el$
|
|
3905
|
-
return _el$
|
|
3735
|
+
var _el$22 = _tmpl$7$c(), _el$23 = _el$22.firstChild, _el$26 = _el$23.nextSibling;
|
|
3736
|
+
_el$26.nextSibling;
|
|
3737
|
+
insert(_el$22, () => pageDiff().burstCount, _el$26);
|
|
3738
|
+
insert(_el$22, () => formatElapsedTime(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
|
|
3739
|
+
return _el$22;
|
|
3906
3740
|
}
|
|
3907
3741
|
}), null);
|
|
3908
|
-
_el$
|
|
3909
|
-
_el$
|
|
3910
|
-
insert(_el$
|
|
3742
|
+
_el$28.$$click = () => void openDiffTimeline();
|
|
3743
|
+
_el$29.$$click = () => setDiffExpanded(false);
|
|
3744
|
+
insert(_el$16, createComponent(Show, {
|
|
3911
3745
|
get when() {
|
|
3912
3746
|
return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
|
|
3913
3747
|
},
|
|
3914
3748
|
get children() {
|
|
3915
|
-
var _el$
|
|
3916
|
-
_el$
|
|
3917
|
-
insert(_el$
|
|
3749
|
+
var _el$30 = _tmpl$8$9();
|
|
3750
|
+
_el$30.firstChild;
|
|
3751
|
+
insert(_el$30, createComponent(For, {
|
|
3918
3752
|
get each() {
|
|
3919
3753
|
return pageDiff().recentBursts;
|
|
3920
3754
|
},
|
|
3921
3755
|
children: (burst, i) => (() => {
|
|
3922
|
-
var _el$
|
|
3923
|
-
insert(_el$
|
|
3756
|
+
var _el$52 = _tmpl$19$4(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
|
|
3757
|
+
insert(_el$53, (() => {
|
|
3924
3758
|
var _c$2 = memo(() => i() === 0);
|
|
3925
3759
|
return () => _c$2() ? "Latest" : formatRelativeTime(burst.detectedAt);
|
|
3926
3760
|
})());
|
|
3927
|
-
insert(_el$
|
|
3761
|
+
insert(_el$54, createComponent(For, {
|
|
3928
3762
|
get each() {
|
|
3929
3763
|
return parseDiffSummaryParts(burst.summary);
|
|
3930
3764
|
},
|
|
3931
3765
|
children: (part) => (() => {
|
|
3932
|
-
var _el$
|
|
3933
|
-
insert(_el$
|
|
3766
|
+
var _el$55 = _tmpl$21$4(), _el$57 = _el$55.firstChild;
|
|
3767
|
+
insert(_el$55, createComponent(Show, {
|
|
3934
3768
|
get when() {
|
|
3935
3769
|
return part.section;
|
|
3936
3770
|
},
|
|
3937
3771
|
get children() {
|
|
3938
|
-
var _el$
|
|
3939
|
-
insert(_el$
|
|
3940
|
-
return _el$
|
|
3772
|
+
var _el$56 = _tmpl$20$4();
|
|
3773
|
+
insert(_el$56, () => part.section);
|
|
3774
|
+
return _el$56;
|
|
3941
3775
|
}
|
|
3942
|
-
}), _el$
|
|
3943
|
-
insert(_el$
|
|
3944
|
-
return _el$
|
|
3776
|
+
}), _el$57);
|
|
3777
|
+
insert(_el$57, () => part.text);
|
|
3778
|
+
return _el$55;
|
|
3945
3779
|
})()
|
|
3946
3780
|
}));
|
|
3947
|
-
createRenderEffect(() => _el$
|
|
3948
|
-
return _el$
|
|
3781
|
+
createRenderEffect(() => _el$52.classList.toggle("latest", !!(i() === 0)));
|
|
3782
|
+
return _el$52;
|
|
3949
3783
|
})()
|
|
3950
3784
|
}), null);
|
|
3951
|
-
return _el$
|
|
3785
|
+
return _el$30;
|
|
3952
3786
|
}
|
|
3953
3787
|
}), null);
|
|
3954
|
-
insert(_el$
|
|
3788
|
+
insert(_el$16, createComponent(For, {
|
|
3955
3789
|
get each() {
|
|
3956
3790
|
return pageDiff().changes;
|
|
3957
3791
|
},
|
|
3958
3792
|
children: (change) => (() => {
|
|
3959
|
-
var _el$
|
|
3960
|
-
insert(_el$
|
|
3961
|
-
insert(_el$
|
|
3962
|
-
insert(_el$
|
|
3963
|
-
insert(_el$
|
|
3793
|
+
var _el$58 = _tmpl$27$3(), _el$59 = _el$58.firstChild, _el$60 = _el$59.firstChild, _el$61 = _el$60.firstChild, _el$62 = _el$61.nextSibling, _el$63 = _el$60.nextSibling;
|
|
3794
|
+
insert(_el$61, () => getChangeKindLabel(change.kind));
|
|
3795
|
+
insert(_el$62, () => formatSectionLabel(change.section));
|
|
3796
|
+
insert(_el$63, () => change.summary);
|
|
3797
|
+
insert(_el$58, createComponent(Show, {
|
|
3964
3798
|
get when() {
|
|
3965
3799
|
return change.before || change.after;
|
|
3966
3800
|
},
|
|
3967
3801
|
get children() {
|
|
3968
|
-
var _el$
|
|
3969
|
-
insert(_el$
|
|
3802
|
+
var _el$64 = _tmpl$24$4();
|
|
3803
|
+
insert(_el$64, createComponent(Show, {
|
|
3970
3804
|
get when() {
|
|
3971
3805
|
return change.before;
|
|
3972
3806
|
},
|
|
3973
3807
|
get children() {
|
|
3974
|
-
var _el$
|
|
3975
|
-
insert(_el$
|
|
3976
|
-
return _el$
|
|
3808
|
+
var _el$65 = _tmpl$22$4(), _el$66 = _el$65.firstChild, _el$67 = _el$66.nextSibling;
|
|
3809
|
+
insert(_el$67, () => change.before);
|
|
3810
|
+
return _el$65;
|
|
3977
3811
|
}
|
|
3978
3812
|
}), null);
|
|
3979
|
-
insert(_el$
|
|
3813
|
+
insert(_el$64, createComponent(Show, {
|
|
3980
3814
|
get when() {
|
|
3981
3815
|
return change.after;
|
|
3982
3816
|
},
|
|
3983
3817
|
get children() {
|
|
3984
|
-
var _el$
|
|
3985
|
-
insert(_el$
|
|
3986
|
-
return _el$
|
|
3818
|
+
var _el$68 = _tmpl$23$4(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
|
|
3819
|
+
insert(_el$70, () => change.after);
|
|
3820
|
+
return _el$68;
|
|
3987
3821
|
}
|
|
3988
3822
|
}), null);
|
|
3989
|
-
return _el$
|
|
3823
|
+
return _el$64;
|
|
3990
3824
|
}
|
|
3991
3825
|
}), null);
|
|
3992
|
-
insert(_el$
|
|
3826
|
+
insert(_el$58, createComponent(Show, {
|
|
3993
3827
|
get when() {
|
|
3994
3828
|
return change.addedItems?.length;
|
|
3995
3829
|
},
|
|
3996
3830
|
get children() {
|
|
3997
|
-
var _el$
|
|
3998
|
-
insert(_el$
|
|
3831
|
+
var _el$71 = _tmpl$25$3(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
|
|
3832
|
+
insert(_el$73, createComponent(For, {
|
|
3999
3833
|
get each() {
|
|
4000
3834
|
return change.addedItems;
|
|
4001
3835
|
},
|
|
4002
3836
|
children: (item) => (() => {
|
|
4003
|
-
var _el$
|
|
4004
|
-
insert(_el$
|
|
4005
|
-
return _el$
|
|
3837
|
+
var _el$77 = _tmpl$28$3();
|
|
3838
|
+
insert(_el$77, item);
|
|
3839
|
+
return _el$77;
|
|
4006
3840
|
})()
|
|
4007
3841
|
}));
|
|
4008
|
-
return _el$
|
|
3842
|
+
return _el$71;
|
|
4009
3843
|
}
|
|
4010
3844
|
}), null);
|
|
4011
|
-
insert(_el$
|
|
3845
|
+
insert(_el$58, createComponent(Show, {
|
|
4012
3846
|
get when() {
|
|
4013
3847
|
return change.removedItems?.length;
|
|
4014
3848
|
},
|
|
4015
3849
|
get children() {
|
|
4016
|
-
var _el$
|
|
4017
|
-
insert(_el$
|
|
3850
|
+
var _el$74 = _tmpl$26$3(), _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling;
|
|
3851
|
+
insert(_el$76, createComponent(For, {
|
|
4018
3852
|
get each() {
|
|
4019
3853
|
return change.removedItems;
|
|
4020
3854
|
},
|
|
4021
3855
|
children: (item) => (() => {
|
|
4022
|
-
var _el$
|
|
4023
|
-
insert(_el$
|
|
4024
|
-
return _el$
|
|
3856
|
+
var _el$78 = _tmpl$28$3();
|
|
3857
|
+
insert(_el$78, item);
|
|
3858
|
+
return _el$78;
|
|
4025
3859
|
})()
|
|
4026
3860
|
}));
|
|
4027
|
-
return _el$
|
|
3861
|
+
return _el$74;
|
|
4028
3862
|
}
|
|
4029
3863
|
}), null);
|
|
4030
|
-
createRenderEffect(() => className(_el$
|
|
4031
|
-
return _el$
|
|
3864
|
+
createRenderEffect(() => className(_el$58, `page-diff-item page-diff-${change.kind}`));
|
|
3865
|
+
return _el$58;
|
|
4032
3866
|
})()
|
|
4033
3867
|
}), null);
|
|
4034
|
-
return _el$
|
|
3868
|
+
return _el$16;
|
|
4035
3869
|
}
|
|
4036
|
-
}), _el$
|
|
4037
|
-
_el$
|
|
3870
|
+
}), _el$32);
|
|
3871
|
+
_el$33.$$click = async () => {
|
|
4038
3872
|
const id = activeTabId2();
|
|
4039
3873
|
if (!id) return;
|
|
4040
3874
|
await toggleAdBlock(id);
|
|
4041
3875
|
};
|
|
4042
|
-
insert(_el$
|
|
3876
|
+
insert(_el$34, createComponent(Show, {
|
|
4043
3877
|
get when() {
|
|
4044
3878
|
return activeTab()?.adBlockingEnabled;
|
|
4045
3879
|
},
|
|
4046
3880
|
get children() {
|
|
4047
|
-
return _tmpl$
|
|
3881
|
+
return _tmpl$0$6();
|
|
4048
3882
|
}
|
|
4049
3883
|
}), null);
|
|
4050
|
-
insert(_el$
|
|
3884
|
+
insert(_el$34, createComponent(Show, {
|
|
4051
3885
|
get when() {
|
|
4052
3886
|
return !activeTab()?.adBlockingEnabled;
|
|
4053
3887
|
},
|
|
4054
3888
|
get children() {
|
|
4055
|
-
return [_tmpl$
|
|
3889
|
+
return [_tmpl$0$6(), _tmpl$1$6()];
|
|
4056
3890
|
}
|
|
4057
3891
|
}), null);
|
|
4058
|
-
insert(_el$
|
|
3892
|
+
insert(_el$32, createComponent(Show, {
|
|
4059
3893
|
when: !isPrivateWindow,
|
|
4060
3894
|
get children() {
|
|
4061
|
-
var _el$
|
|
4062
|
-
_el$
|
|
4063
|
-
createRenderEffect(() => _el$
|
|
4064
|
-
return _el$
|
|
3895
|
+
var _el$38 = _tmpl$10$6();
|
|
3896
|
+
_el$38.$$click = () => window.vessel.content.toggleReader();
|
|
3897
|
+
createRenderEffect(() => _el$38.classList.toggle("active", !!activeTab()?.isReaderMode));
|
|
3898
|
+
return _el$38;
|
|
4065
3899
|
}
|
|
4066
3900
|
}), null);
|
|
4067
|
-
insert(_el$
|
|
3901
|
+
insert(_el$32, createComponent(Show, {
|
|
4068
3902
|
when: !isPrivateWindow,
|
|
4069
3903
|
get children() {
|
|
4070
|
-
var _el$
|
|
4071
|
-
addEventListener(_el$
|
|
4072
|
-
createRenderEffect(() => _el$
|
|
4073
|
-
return _el$
|
|
3904
|
+
var _el$39 = _tmpl$11$6();
|
|
3905
|
+
addEventListener(_el$39, "click", toggleDevTools, true);
|
|
3906
|
+
createRenderEffect(() => _el$39.classList.toggle("active", !!devtoolsPanelOpen2()));
|
|
3907
|
+
return _el$39;
|
|
4074
3908
|
}
|
|
4075
3909
|
}), null);
|
|
4076
|
-
insert(_el$
|
|
3910
|
+
insert(_el$32, createComponent(Show, {
|
|
4077
3911
|
when: !isPrivateWindow,
|
|
4078
3912
|
get children() {
|
|
4079
|
-
var _el$
|
|
4080
|
-
_el$
|
|
4081
|
-
addEventListener(_el$
|
|
4082
|
-
insert(_el$
|
|
3913
|
+
var _el$40 = _tmpl$13$5();
|
|
3914
|
+
_el$40.firstChild;
|
|
3915
|
+
addEventListener(_el$40, "click", toggleSidebar, true);
|
|
3916
|
+
insert(_el$40, createComponent(Show, {
|
|
4083
3917
|
get when() {
|
|
4084
3918
|
return pendingApprovalCount() > 0;
|
|
4085
3919
|
},
|
|
4086
3920
|
get children() {
|
|
4087
|
-
var _el$
|
|
4088
|
-
insert(_el$
|
|
4089
|
-
createRenderEffect(() => setAttribute(_el$
|
|
4090
|
-
return _el$
|
|
3921
|
+
var _el$42 = _tmpl$12$6();
|
|
3922
|
+
insert(_el$42, pendingApprovalCount);
|
|
3923
|
+
createRenderEffect(() => setAttribute(_el$42, "aria-label", `${pendingApprovalCount()} pending`));
|
|
3924
|
+
return _el$42;
|
|
4091
3925
|
}
|
|
4092
3926
|
}), null);
|
|
4093
3927
|
createRenderEffect((_p$) => {
|
|
4094
|
-
var _v$
|
|
4095
|
-
_v$
|
|
4096
|
-
_v$
|
|
3928
|
+
var _v$3 = !!(pendingApprovalCount() > 0), _v$4 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
|
|
3929
|
+
_v$3 !== _p$.e && _el$40.classList.toggle("has-approvals", _p$.e = _v$3);
|
|
3930
|
+
_v$4 !== _p$.t && setAttribute(_el$40, "title", _p$.t = _v$4);
|
|
4097
3931
|
return _p$;
|
|
4098
3932
|
}, {
|
|
4099
3933
|
e: void 0,
|
|
4100
3934
|
t: void 0
|
|
4101
3935
|
});
|
|
4102
|
-
return _el$
|
|
3936
|
+
return _el$40;
|
|
4103
3937
|
}
|
|
4104
3938
|
}), null);
|
|
4105
|
-
insert(_el$
|
|
3939
|
+
insert(_el$32, createComponent(Show, {
|
|
4106
3940
|
when: !isPrivateWindow,
|
|
4107
3941
|
get children() {
|
|
4108
3942
|
return [(() => {
|
|
4109
|
-
var _el$
|
|
4110
|
-
addEventListener(_el$
|
|
4111
|
-
insert(_el$
|
|
3943
|
+
var _el$43 = _tmpl$14$5();
|
|
3944
|
+
addEventListener(_el$43, "click", props.onClearData, true);
|
|
3945
|
+
insert(_el$43, createComponent(trash_2_default, {
|
|
4112
3946
|
size: 14
|
|
4113
3947
|
}));
|
|
4114
|
-
return _el$
|
|
3948
|
+
return _el$43;
|
|
4115
3949
|
})(), (() => {
|
|
4116
|
-
var _el$
|
|
4117
|
-
addEventListener(_el$
|
|
4118
|
-
return _el$
|
|
3950
|
+
var _el$44 = _tmpl$15$5();
|
|
3951
|
+
addEventListener(_el$44, "click", openSettings, true);
|
|
3952
|
+
return _el$44;
|
|
4119
3953
|
})()];
|
|
4120
3954
|
}
|
|
4121
3955
|
}), null);
|
|
4122
3956
|
createRenderEffect((_p$) => {
|
|
4123
|
-
var _v$
|
|
4124
|
-
_v$
|
|
4125
|
-
_v$
|
|
4126
|
-
_v$
|
|
4127
|
-
_v$
|
|
4128
|
-
_v$
|
|
4129
|
-
_v$
|
|
4130
|
-
_v$
|
|
3957
|
+
var _v$5 = !activeTab()?.canGoBack, _v$6 = !activeTab()?.canGoForward, _v$7 = showSuggestions() && suggestions().length > 0, _v$8 = selectedIndex() >= 0 ? `address-autocomplete-${selectedIndex()}` : void 0, _v$9 = !!activeTab()?.adBlockingEnabled, _v$0 = !activeTab()?.adBlockingEnabled, _v$1 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)";
|
|
3958
|
+
_v$5 !== _p$.e && (_el$3.disabled = _p$.e = _v$5);
|
|
3959
|
+
_v$6 !== _p$.t && (_el$4.disabled = _p$.t = _v$6);
|
|
3960
|
+
_v$7 !== _p$.a && setAttribute(_el$13, "aria-expanded", _p$.a = _v$7);
|
|
3961
|
+
_v$8 !== _p$.o && setAttribute(_el$13, "aria-activedescendant", _p$.o = _v$8);
|
|
3962
|
+
_v$9 !== _p$.i && _el$33.classList.toggle("active", _p$.i = _v$9);
|
|
3963
|
+
_v$0 !== _p$.n && _el$33.classList.toggle("nav-btn-muted", _p$.n = _v$0);
|
|
3964
|
+
_v$1 !== _p$.s && setAttribute(_el$33, "title", _p$.s = _v$1);
|
|
4131
3965
|
return _p$;
|
|
4132
3966
|
}, {
|
|
4133
3967
|
e: void 0,
|
|
@@ -4270,7 +4104,7 @@ const HighlightNotifications = (props) => {
|
|
|
4270
4104
|
});
|
|
4271
4105
|
};
|
|
4272
4106
|
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$
|
|
4107
|
+
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$e = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$d = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$b = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
|
|
4274
4108
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
4275
4109
|
const TOAST_EXIT_MS = 300;
|
|
4276
4110
|
function formatBytes$1(bytes) {
|
|
@@ -4367,7 +4201,7 @@ const DownloadToast = () => {
|
|
|
4367
4201
|
return downloads();
|
|
4368
4202
|
},
|
|
4369
4203
|
children: (dl) => (() => {
|
|
4370
|
-
var _el$2 = _tmpl$7$
|
|
4204
|
+
var _el$2 = _tmpl$7$b(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
4371
4205
|
insert(_el$4, () => dl.filename);
|
|
4372
4206
|
insert(_el$3, createComponent(Show, {
|
|
4373
4207
|
get when() {
|
|
@@ -4391,11 +4225,11 @@ const DownloadToast = () => {
|
|
|
4391
4225
|
},
|
|
4392
4226
|
get children() {
|
|
4393
4227
|
return [(() => {
|
|
4394
|
-
var _el$7 = _tmpl$4$
|
|
4228
|
+
var _el$7 = _tmpl$4$i(), _el$8 = _el$7.firstChild;
|
|
4395
4229
|
createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
|
|
4396
4230
|
return _el$7;
|
|
4397
4231
|
})(), (() => {
|
|
4398
|
-
var _el$9 = _tmpl$5$
|
|
4232
|
+
var _el$9 = _tmpl$5$e();
|
|
4399
4233
|
insert(_el$9, () => formatBytes$1(dl.receivedBytes), null);
|
|
4400
4234
|
insert(_el$9, createComponent(Show, {
|
|
4401
4235
|
get when() {
|
|
@@ -4414,7 +4248,7 @@ const DownloadToast = () => {
|
|
|
4414
4248
|
return dl.state === "completed";
|
|
4415
4249
|
},
|
|
4416
4250
|
get children() {
|
|
4417
|
-
var _el$0 = _tmpl$6$
|
|
4251
|
+
var _el$0 = _tmpl$6$d(), _el$1 = _el$0.firstChild;
|
|
4418
4252
|
insert(_el$0, () => formatBytes$1(dl.receivedBytes), _el$1);
|
|
4419
4253
|
return _el$0;
|
|
4420
4254
|
}
|
|
@@ -4426,7 +4260,7 @@ const DownloadToast = () => {
|
|
|
4426
4260
|
return _el$;
|
|
4427
4261
|
})();
|
|
4428
4262
|
};
|
|
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$
|
|
4263
|
+
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
4264
|
const formatBytes = (bytes) => {
|
|
4431
4265
|
if (!bytes) return "0 B";
|
|
4432
4266
|
const units = ["B", "KB", "MB", "GB"];
|
|
@@ -4475,7 +4309,7 @@ const DownloadsPanel = (props) => {
|
|
|
4475
4309
|
return item.url;
|
|
4476
4310
|
},
|
|
4477
4311
|
children: (url) => (() => {
|
|
4478
|
-
var _el$17 = _tmpl$4$
|
|
4312
|
+
var _el$17 = _tmpl$4$h();
|
|
4479
4313
|
_el$17.firstChild;
|
|
4480
4314
|
insert(_el$17, url, null);
|
|
4481
4315
|
return _el$17;
|
|
@@ -4603,7 +4437,7 @@ const FindBar = () => {
|
|
|
4603
4437
|
});
|
|
4604
4438
|
};
|
|
4605
4439
|
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$
|
|
4440
|
+
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$d = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
|
|
4607
4441
|
const FlowProgress = () => {
|
|
4608
4442
|
const {
|
|
4609
4443
|
runtimeState: runtimeState2
|
|
@@ -4640,7 +4474,7 @@ const FlowProgress = () => {
|
|
|
4640
4474
|
return tracker();
|
|
4641
4475
|
},
|
|
4642
4476
|
children: (t) => (() => {
|
|
4643
|
-
var _el$2 = _tmpl$4$
|
|
4477
|
+
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
4478
|
insert(_el$4, () => t().goal);
|
|
4645
4479
|
insert(_el$5, () => progressPercent(t().steps), _el$6);
|
|
4646
4480
|
insert(_el$9, createComponent(For, {
|
|
@@ -4648,7 +4482,7 @@ const FlowProgress = () => {
|
|
|
4648
4482
|
return t().steps;
|
|
4649
4483
|
},
|
|
4650
4484
|
children: (step) => (() => {
|
|
4651
|
-
var _el$12 = _tmpl$5$
|
|
4485
|
+
var _el$12 = _tmpl$5$d(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
|
|
4652
4486
|
insert(_el$14, () => step.label);
|
|
4653
4487
|
createRenderEffect(() => className(_el$12, `flow-step ${stepStatusClass(step.status)}`));
|
|
4654
4488
|
return _el$12;
|
|
@@ -4685,7 +4519,7 @@ const FlowProgress = () => {
|
|
|
4685
4519
|
return memo(() => !!flow())() && !tracker();
|
|
4686
4520
|
},
|
|
4687
4521
|
children: (f) => (() => {
|
|
4688
|
-
var _el$15 = _tmpl$4$
|
|
4522
|
+
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
4523
|
insert(_el$17, () => f().goal);
|
|
4690
4524
|
insert(_el$18, () => progressPercent(f().steps), _el$19);
|
|
4691
4525
|
insert(_el$22, createComponent(For, {
|
|
@@ -4693,7 +4527,7 @@ const FlowProgress = () => {
|
|
|
4693
4527
|
return f().steps;
|
|
4694
4528
|
},
|
|
4695
4529
|
children: (step) => (() => {
|
|
4696
|
-
var _el$23 = _tmpl$5$
|
|
4530
|
+
var _el$23 = _tmpl$5$d(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
|
|
4697
4531
|
insert(_el$25, () => step.label);
|
|
4698
4532
|
createRenderEffect(() => className(_el$23, `flow-step ${stepStatusClass(step.status)}`));
|
|
4699
4533
|
return _el$23;
|
|
@@ -4734,19 +4568,66 @@ function formatTime(iso, options) {
|
|
|
4734
4568
|
...options?.includeSeconds && { second: "2-digit" }
|
|
4735
4569
|
});
|
|
4736
4570
|
}
|
|
4737
|
-
|
|
4571
|
+
function formatAgentActionName(name) {
|
|
4572
|
+
return name.split(/[_-]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
4573
|
+
}
|
|
4574
|
+
function summarizeAgentAction(action) {
|
|
4575
|
+
if (action.status === "waiting-approval") {
|
|
4576
|
+
return action.argsSummary || "Waiting for approval";
|
|
4577
|
+
}
|
|
4578
|
+
if (action.status === "running") {
|
|
4579
|
+
return action.argsSummary || "Running";
|
|
4580
|
+
}
|
|
4581
|
+
if (action.status === "failed") {
|
|
4582
|
+
return action.error || action.resultSummary || "Action failed";
|
|
4583
|
+
}
|
|
4584
|
+
return action.resultSummary || action.argsSummary || "Completed";
|
|
4585
|
+
}
|
|
4586
|
+
function formatAgentTimelineDuration(durationMs) {
|
|
4587
|
+
if (!durationMs || durationMs < 1) return null;
|
|
4588
|
+
if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
|
|
4589
|
+
return `${(durationMs / 1e3).toFixed(durationMs < 1e4 ? 1 : 0)}s`;
|
|
4590
|
+
}
|
|
4591
|
+
function buildAgentTimelineItems(state, limit = 12) {
|
|
4592
|
+
const transcriptItems = state.transcript.map((entry) => ({
|
|
4593
|
+
id: `transcript:${entry.id}`,
|
|
4594
|
+
type: "transcript",
|
|
4595
|
+
timestamp: entry.updatedAt,
|
|
4596
|
+
status: entry.status,
|
|
4597
|
+
kind: entry.kind,
|
|
4598
|
+
label: entry.title || entry.kind,
|
|
4599
|
+
detail: entry.text
|
|
4600
|
+
}));
|
|
4601
|
+
const actionItems = state.actions.map((action) => ({
|
|
4602
|
+
id: `action:${action.id}`,
|
|
4603
|
+
type: "action",
|
|
4604
|
+
timestamp: action.finishedAt || action.startedAt,
|
|
4605
|
+
status: action.status,
|
|
4606
|
+
kind: "action",
|
|
4607
|
+
label: formatAgentActionName(action.name),
|
|
4608
|
+
detail: summarizeAgentAction(action),
|
|
4609
|
+
durationMs: action.durationMs
|
|
4610
|
+
}));
|
|
4611
|
+
return [...transcriptItems, ...actionItems].sort(
|
|
4612
|
+
(left, right) => new Date(right.timestamp).getTime() - new Date(left.timestamp).getTime()
|
|
4613
|
+
).slice(0, limit);
|
|
4614
|
+
}
|
|
4615
|
+
function isLiveAgentTimelineItem(item) {
|
|
4616
|
+
return item.status === "streaming" || item.status === "running";
|
|
4617
|
+
}
|
|
4618
|
+
var _tmpl$$i = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$2$i = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$3$g = /* @__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$4$f = /* @__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
4619
|
const AgentTranscriptDock = () => {
|
|
4739
4620
|
const {
|
|
4740
4621
|
runtimeState: runtimeState2
|
|
4741
4622
|
} = useRuntime();
|
|
4742
|
-
const [mode, setMode] = createSignal("
|
|
4623
|
+
const [mode, setMode] = createSignal("off");
|
|
4743
4624
|
const [collapsed, setCollapsed] = createSignal(false);
|
|
4744
4625
|
onMount(() => {
|
|
4745
4626
|
void window.vessel.settings.get().then((settings) => {
|
|
4746
|
-
setMode(settings.agentTranscriptMode ?? "
|
|
4627
|
+
setMode(settings.agentTranscriptMode ?? "off");
|
|
4747
4628
|
});
|
|
4748
4629
|
const unsubscribe2 = window.vessel.settings.onUpdate((settings) => {
|
|
4749
|
-
setMode(settings.agentTranscriptMode ?? "
|
|
4630
|
+
setMode(settings.agentTranscriptMode ?? "off");
|
|
4750
4631
|
});
|
|
4751
4632
|
onCleanup(unsubscribe2);
|
|
4752
4633
|
});
|
|
@@ -4756,120 +4637,79 @@ const AgentTranscriptDock = () => {
|
|
|
4756
4637
|
setMode("off");
|
|
4757
4638
|
await window.vessel.settings.set("agentTranscriptMode", "off");
|
|
4758
4639
|
};
|
|
4759
|
-
const isSummary = createMemo(() => mode() === "summary");
|
|
4760
|
-
const latestEntry = createMemo(() => {
|
|
4761
|
-
const entries2 = timelineItems();
|
|
4762
|
-
return entries2.length > 0 ? entries2[0] : null;
|
|
4763
|
-
});
|
|
4764
4640
|
return createComponent(Show, {
|
|
4765
4641
|
get when() {
|
|
4766
|
-
return memo(() => mode()
|
|
4642
|
+
return memo(() => mode() === "full")() && timelineItems().length > 0;
|
|
4767
4643
|
},
|
|
4768
4644
|
get children() {
|
|
4769
|
-
|
|
4645
|
+
var _el$ = _tmpl$3$g(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
|
|
4646
|
+
_el$3.firstChild;
|
|
4647
|
+
var _el$6 = _el$3.nextSibling, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
|
|
4648
|
+
insert(_el$3, createComponent(Show, {
|
|
4770
4649
|
get when() {
|
|
4771
|
-
return
|
|
4650
|
+
return hasStreamingEntry();
|
|
4772
4651
|
},
|
|
4773
4652
|
get children() {
|
|
4774
|
-
|
|
4775
|
-
insert(_el$, createComponent(Show, {
|
|
4776
|
-
get when() {
|
|
4777
|
-
return latestEntry();
|
|
4778
|
-
},
|
|
4779
|
-
children: (entry) => [createComponent(Show, {
|
|
4780
|
-
get when() {
|
|
4781
|
-
return hasStreamingEntry();
|
|
4782
|
-
},
|
|
4783
|
-
get children() {
|
|
4784
|
-
return _tmpl$5$d();
|
|
4785
|
-
}
|
|
4786
|
-
}), (() => {
|
|
4787
|
-
var _el$10 = _tmpl$6$d(), _el$11 = _el$10.firstChild;
|
|
4788
|
-
insert(_el$10, () => entry().label, _el$11);
|
|
4789
|
-
insert(_el$10, (() => {
|
|
4790
|
-
var _c$ = memo(() => entry().detail.length > 80);
|
|
4791
|
-
return () => _c$() ? entry().detail.slice(0, 77) + "..." : entry().detail;
|
|
4792
|
-
})(), null);
|
|
4793
|
-
return _el$10;
|
|
4794
|
-
})()]
|
|
4795
|
-
}));
|
|
4796
|
-
return _el$;
|
|
4653
|
+
return _tmpl$$i();
|
|
4797
4654
|
}
|
|
4798
|
-
}),
|
|
4655
|
+
}), null);
|
|
4656
|
+
_el$7.$$click = () => setCollapsed((value) => !value);
|
|
4657
|
+
insert(_el$7, () => collapsed() ? "▴" : "▾");
|
|
4658
|
+
_el$8.$$click = () => void hideDock();
|
|
4659
|
+
insert(_el$, createComponent(Show, {
|
|
4799
4660
|
get when() {
|
|
4800
|
-
return !
|
|
4661
|
+
return !collapsed();
|
|
4801
4662
|
},
|
|
4802
4663
|
get children() {
|
|
4803
|
-
var _el$
|
|
4804
|
-
_el$
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4808
|
-
return hasStreamingEntry();
|
|
4809
|
-
},
|
|
4810
|
-
get children() {
|
|
4811
|
-
return _tmpl$2$i();
|
|
4812
|
-
}
|
|
4813
|
-
}), null);
|
|
4814
|
-
_el$8.$$click = () => setCollapsed((value) => !value);
|
|
4815
|
-
insert(_el$8, () => collapsed() ? "▴" : "▾");
|
|
4816
|
-
_el$9.$$click = () => void hideDock();
|
|
4817
|
-
insert(_el$2, createComponent(Show, {
|
|
4818
|
-
get when() {
|
|
4819
|
-
return !collapsed();
|
|
4664
|
+
var _el$9 = _tmpl$2$i();
|
|
4665
|
+
use((el) => useScrollFade(el), _el$9);
|
|
4666
|
+
insert(_el$9, createComponent(For, {
|
|
4667
|
+
get each() {
|
|
4668
|
+
return timelineItems();
|
|
4820
4669
|
},
|
|
4821
|
-
|
|
4822
|
-
|
|
4823
|
-
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
e: void 0,
|
|
4850
|
-
t: void 0,
|
|
4851
|
-
a: void 0,
|
|
4852
|
-
o: void 0
|
|
4853
|
-
});
|
|
4854
|
-
return _el$13;
|
|
4855
|
-
})();
|
|
4856
|
-
}
|
|
4857
|
-
}));
|
|
4858
|
-
return _el$0;
|
|
4670
|
+
children: (entry) => {
|
|
4671
|
+
const duration = () => entry.type === "action" ? formatAgentTimelineDuration(entry.durationMs) : null;
|
|
4672
|
+
return (() => {
|
|
4673
|
+
var _el$0 = _tmpl$4$f(), _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$1.nextSibling;
|
|
4674
|
+
insert(_el$10, () => entry.label);
|
|
4675
|
+
insert(_el$11, () => formatTime(entry.timestamp), null);
|
|
4676
|
+
insert(_el$11, createComponent(Show, {
|
|
4677
|
+
get when() {
|
|
4678
|
+
return duration();
|
|
4679
|
+
},
|
|
4680
|
+
children: (value) => [" · ", memo(value)]
|
|
4681
|
+
}), null);
|
|
4682
|
+
insert(_el$12, () => entry.detail);
|
|
4683
|
+
createRenderEffect((_p$) => {
|
|
4684
|
+
var _v$3 = `agent-transcript-entry ${entry.kind}`, _v$4 = !!isLiveAgentTimelineItem(entry), _v$5 = !!(entry.status === "failed"), _v$6 = !!(entry.status === "waiting-approval");
|
|
4685
|
+
_v$3 !== _p$.e && className(_el$0, _p$.e = _v$3);
|
|
4686
|
+
_v$4 !== _p$.t && _el$0.classList.toggle("streaming", _p$.t = _v$4);
|
|
4687
|
+
_v$5 !== _p$.a && _el$0.classList.toggle("failed", _p$.a = _v$5);
|
|
4688
|
+
_v$6 !== _p$.o && _el$0.classList.toggle("waiting-approval", _p$.o = _v$6);
|
|
4689
|
+
return _p$;
|
|
4690
|
+
}, {
|
|
4691
|
+
e: void 0,
|
|
4692
|
+
t: void 0,
|
|
4693
|
+
a: void 0,
|
|
4694
|
+
o: void 0
|
|
4695
|
+
});
|
|
4696
|
+
return _el$0;
|
|
4697
|
+
})();
|
|
4859
4698
|
}
|
|
4860
|
-
})
|
|
4861
|
-
|
|
4862
|
-
var _v$ = !!collapsed(), _v$2 = collapsed() ? "Expand" : "Collapse";
|
|
4863
|
-
_v$ !== _p$.e && _el$2.classList.toggle("collapsed", _p$.e = _v$);
|
|
4864
|
-
_v$2 !== _p$.t && setAttribute(_el$8, "data-tooltip", _p$.t = _v$2);
|
|
4865
|
-
return _p$;
|
|
4866
|
-
}, {
|
|
4867
|
-
e: void 0,
|
|
4868
|
-
t: void 0
|
|
4869
|
-
});
|
|
4870
|
-
return _el$2;
|
|
4699
|
+
}));
|
|
4700
|
+
return _el$9;
|
|
4871
4701
|
}
|
|
4872
|
-
})
|
|
4702
|
+
}), null);
|
|
4703
|
+
createRenderEffect((_p$) => {
|
|
4704
|
+
var _v$ = !!collapsed(), _v$2 = collapsed() ? "Expand" : "Collapse";
|
|
4705
|
+
_v$ !== _p$.e && _el$.classList.toggle("collapsed", _p$.e = _v$);
|
|
4706
|
+
_v$2 !== _p$.t && setAttribute(_el$7, "data-tooltip", _p$.t = _v$2);
|
|
4707
|
+
return _p$;
|
|
4708
|
+
}, {
|
|
4709
|
+
e: void 0,
|
|
4710
|
+
t: void 0
|
|
4711
|
+
});
|
|
4712
|
+
return _el$;
|
|
4873
4713
|
}
|
|
4874
4714
|
});
|
|
4875
4715
|
};
|
|
@@ -5205,7 +5045,7 @@ function isEditableTarget(target) {
|
|
|
5205
5045
|
}
|
|
5206
5046
|
return target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable;
|
|
5207
5047
|
}
|
|
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$
|
|
5048
|
+
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
5049
|
const PALETTE_EXIT_MS = 160;
|
|
5210
5050
|
const COMMAND_ICONS = {
|
|
5211
5051
|
"app-window": app_window_default,
|
|
@@ -5382,7 +5222,7 @@ const BrowserCommandPalette = (props) => {
|
|
|
5382
5222
|
return command.shortcut;
|
|
5383
5223
|
},
|
|
5384
5224
|
children: (shortcut) => (() => {
|
|
5385
|
-
var _el$10 = _tmpl$4$
|
|
5225
|
+
var _el$10 = _tmpl$4$e();
|
|
5386
5226
|
insert(_el$10, shortcut);
|
|
5387
5227
|
return _el$10;
|
|
5388
5228
|
})()
|
|
@@ -5876,7 +5716,7 @@ function useProviderAuthSetup(options = {}) {
|
|
|
5876
5716
|
startOpenRouterAuth
|
|
5877
5717
|
};
|
|
5878
5718
|
}
|
|
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$
|
|
5719
|
+
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
5720
|
const COMMAND_BAR_EXIT_MS = 200;
|
|
5881
5721
|
const CommandBar = () => {
|
|
5882
5722
|
const {
|
|
@@ -6010,7 +5850,7 @@ const CommandBar = () => {
|
|
|
6010
5850
|
return _tmpl$7$a();
|
|
6011
5851
|
},
|
|
6012
5852
|
get children() {
|
|
6013
|
-
return _tmpl$4$
|
|
5853
|
+
return _tmpl$4$d();
|
|
6014
5854
|
}
|
|
6015
5855
|
}), null);
|
|
6016
5856
|
createRenderEffect((_p$) => {
|
|
@@ -7389,7 +7229,7 @@ function sanitizeUrl(url) {
|
|
|
7389
7229
|
}
|
|
7390
7230
|
function applyInlineMarkdown(text2) {
|
|
7391
7231
|
const codeSpans = [];
|
|
7392
|
-
|
|
7232
|
+
const withCodeTokens = text2.replace(/`([^`]+)`/g, (_, code) => {
|
|
7393
7233
|
const token = `\0CS${codeSpans.length}\0`;
|
|
7394
7234
|
codeSpans.push(`<code>${escapeHtml(code)}</code>`);
|
|
7395
7235
|
return token;
|
|
@@ -7406,7 +7246,7 @@ function applyInlineMarkdown(text2) {
|
|
|
7406
7246
|
return `<a href="${escapeHtml(safeHref)}" target="_blank" rel="noreferrer">${escapeHtml(safeLabel)}</a>`;
|
|
7407
7247
|
}
|
|
7408
7248
|
);
|
|
7409
|
-
html2 = html2.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>").replace(/__([^_]+)__/g, "<strong>$1</strong>").replace(/(^|[
|
|
7249
|
+
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
7250
|
return codeSpans.reduce(
|
|
7411
7251
|
(output, snippet, index) => output.replace(`\0CS${index}\0`, snippet),
|
|
7412
7252
|
html2
|
|
@@ -7737,7 +7577,7 @@ function getBookmarkSearchMatch(args) {
|
|
|
7737
7577
|
}
|
|
7738
7578
|
return { matchedFields, score };
|
|
7739
7579
|
}
|
|
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$
|
|
7580
|
+
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
7581
|
const DropdownSelect = (props) => {
|
|
7742
7582
|
const [open, setOpen] = createSignal(false);
|
|
7743
7583
|
let rootRef;
|
|
@@ -7777,7 +7617,7 @@ const DropdownSelect = (props) => {
|
|
|
7777
7617
|
return props.options;
|
|
7778
7618
|
},
|
|
7779
7619
|
children: (option) => (() => {
|
|
7780
|
-
var _el$6 = _tmpl$4$
|
|
7620
|
+
var _el$6 = _tmpl$4$c(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
|
|
7781
7621
|
_el$6.$$click = () => {
|
|
7782
7622
|
props.onChange(option.value);
|
|
7783
7623
|
setOpen(false);
|
|
@@ -7974,7 +7814,7 @@ function renderKitPrompt(kit, values) {
|
|
|
7974
7814
|
(_, key) => values[key] ?? ""
|
|
7975
7815
|
);
|
|
7976
7816
|
}
|
|
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$
|
|
7817
|
+
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
7818
|
const ICON_MAP = {
|
|
7979
7819
|
BookOpen: book_open_default,
|
|
7980
7820
|
Tag: tag_default,
|
|
@@ -8328,7 +8168,7 @@ const AutomationTab = (props) => {
|
|
|
8328
8168
|
return _el$11;
|
|
8329
8169
|
}
|
|
8330
8170
|
}), (() => {
|
|
8331
|
-
var _el$14 = _tmpl$4$
|
|
8171
|
+
var _el$14 = _tmpl$4$b();
|
|
8332
8172
|
insert(_el$14, createComponent(For, {
|
|
8333
8173
|
get each() {
|
|
8334
8174
|
return allKits();
|
|
@@ -8890,7 +8730,7 @@ function useResearch() {
|
|
|
8890
8730
|
}
|
|
8891
8731
|
};
|
|
8892
8732
|
}
|
|
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$
|
|
8733
|
+
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
8734
|
const ResearchBriefMarkdown = (props) => {
|
|
8895
8735
|
const html2 = createMemo(() => renderMarkdown(props.content));
|
|
8896
8736
|
return (() => {
|
|
@@ -8963,7 +8803,7 @@ function extractFollowUpOptions(prompt) {
|
|
|
8963
8803
|
if (j >= lines.length) continue;
|
|
8964
8804
|
const nextLine = lines[j].trim();
|
|
8965
8805
|
if (EXPLICIT_OPTION_PREFIX.test(nextLine)) continue;
|
|
8966
|
-
if (!/[
|
|
8806
|
+
if (!/[,;/|]|\bor\b/.test(nextLine)) continue;
|
|
8967
8807
|
options.push(...extractDelimitedOptions(nextLine));
|
|
8968
8808
|
}
|
|
8969
8809
|
return uniqueQuickReplies(options);
|
|
@@ -8978,7 +8818,7 @@ function extractInlineOptions(prompt) {
|
|
|
8978
8818
|
if (/\b(?:options?|choices?|examples?|example answers?|examples? include|sample answers?|sample responses?)\b.*[::]/i.test(afterQuestion)) {
|
|
8979
8819
|
continue;
|
|
8980
8820
|
}
|
|
8981
|
-
const hasDelimiters = /[
|
|
8821
|
+
const hasDelimiters = /[,;/|]|\bor\b/.test(afterQuestion);
|
|
8982
8822
|
const hasDashList = /\s+-\s+/.test(afterQuestion);
|
|
8983
8823
|
if (!hasDelimiters && !hasDashList) continue;
|
|
8984
8824
|
if (hasDelimiters) {
|
|
@@ -9013,7 +8853,7 @@ function extractImplicitOptions(prompt) {
|
|
|
9013
8853
|
if (!line) break;
|
|
9014
8854
|
if (EXPLICIT_OPTION_PREFIX.test(line)) break;
|
|
9015
8855
|
if (SENTENCE_STARTER.test(line)) break;
|
|
9016
|
-
const hasDelimiters = /[
|
|
8856
|
+
const hasDelimiters = /[,;/|]|\bor\b/.test(line);
|
|
9017
8857
|
if (line.length > 80 && !hasDelimiters) break;
|
|
9018
8858
|
candidates.push(line);
|
|
9019
8859
|
}
|
|
@@ -9258,7 +9098,7 @@ const ResearchDesk = () => {
|
|
|
9258
9098
|
return startError();
|
|
9259
9099
|
},
|
|
9260
9100
|
get children() {
|
|
9261
|
-
var _el$1 = _tmpl$4$
|
|
9101
|
+
var _el$1 = _tmpl$4$a();
|
|
9262
9102
|
insert(_el$1, startError);
|
|
9263
9103
|
return _el$1;
|
|
9264
9104
|
}
|
|
@@ -9545,7 +9385,7 @@ const ResearchDesk = () => {
|
|
|
9545
9385
|
})();
|
|
9546
9386
|
};
|
|
9547
9387
|
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$
|
|
9388
|
+
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
9389
|
const PageDiffTimeline = () => {
|
|
9550
9390
|
const {
|
|
9551
9391
|
activeTab
|
|
@@ -9629,7 +9469,7 @@ const PageDiffTimeline = () => {
|
|
|
9629
9469
|
return memo(() => !!(!loading() && !error()))() && bursts().length > 0;
|
|
9630
9470
|
},
|
|
9631
9471
|
get children() {
|
|
9632
|
-
return [_tmpl$4$
|
|
9472
|
+
return [_tmpl$4$9(), (() => {
|
|
9633
9473
|
var _el$6 = _tmpl$5$9();
|
|
9634
9474
|
insert(_el$6, createComponent(For, {
|
|
9635
9475
|
get each() {
|
|
@@ -9726,7 +9566,7 @@ const SidebarWindowControls = (props) => {
|
|
|
9726
9566
|
};
|
|
9727
9567
|
delegateEvents(["click"]);
|
|
9728
9568
|
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>×`);
|
|
9569
|
+
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
9570
|
const UNSORTED_FOLDER = {
|
|
9731
9571
|
id: "unsorted",
|
|
9732
9572
|
name: "Unsorted",
|
|
@@ -10012,7 +9852,6 @@ ${contextBlock}` : contextBlock);
|
|
|
10012
9852
|
const [deletingFolderId, setDeletingFolderId] = createSignal(null);
|
|
10013
9853
|
const [expandedFolderIds, setExpandedFolderIds] = createSignal([UNSORTED_FOLDER.id]);
|
|
10014
9854
|
const [actionsExpanded, setActionsExpanded] = createSignal(false);
|
|
10015
|
-
const [checkpointsExpanded, setCheckpointsExpanded] = createSignal(false);
|
|
10016
9855
|
const [isDragging, setIsDragging] = createSignal(false);
|
|
10017
9856
|
const now2 = useNow();
|
|
10018
9857
|
let messagesContainerRef;
|
|
@@ -10381,7 +10220,7 @@ ${contextBlock}` : contextBlock);
|
|
|
10381
10220
|
return runtimeState2().supervisor.pendingApprovals.length > 0;
|
|
10382
10221
|
},
|
|
10383
10222
|
get children() {
|
|
10384
|
-
var _el$17 = _tmpl$4$
|
|
10223
|
+
var _el$17 = _tmpl$4$8();
|
|
10385
10224
|
insert(_el$17, () => runtimeState2().supervisor.pendingApprovals.length);
|
|
10386
10225
|
return _el$17;
|
|
10387
10226
|
}
|
|
@@ -11365,7 +11204,7 @@ ${contextBlock}` : contextBlock);
|
|
|
11365
11204
|
});
|
|
11366
11205
|
};
|
|
11367
11206
|
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$
|
|
11207
|
+
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
11208
|
function statusClass(status) {
|
|
11370
11209
|
if (status == null) return "pending";
|
|
11371
11210
|
if (status >= 200 && status < 300) return "ok";
|
|
@@ -11414,7 +11253,7 @@ const ConsoleView = (props) => {
|
|
|
11414
11253
|
autoScroll = atBottom;
|
|
11415
11254
|
};
|
|
11416
11255
|
createEffect(() => {
|
|
11417
|
-
props.entries.length;
|
|
11256
|
+
void props.entries.length;
|
|
11418
11257
|
if (autoScroll && scrollRef) {
|
|
11419
11258
|
requestAnimationFrame(() => {
|
|
11420
11259
|
scrollRef.scrollTop = scrollRef.scrollHeight;
|
|
@@ -11470,7 +11309,7 @@ const NetworkView = (props) => {
|
|
|
11470
11309
|
autoScroll = atBottom;
|
|
11471
11310
|
};
|
|
11472
11311
|
createEffect(() => {
|
|
11473
|
-
props.entries.length;
|
|
11312
|
+
void props.entries.length;
|
|
11474
11313
|
if (autoScroll && scrollRef) {
|
|
11475
11314
|
requestAnimationFrame(() => {
|
|
11476
11315
|
scrollRef.scrollTop = scrollRef.scrollHeight;
|
|
@@ -11485,7 +11324,7 @@ const NetworkView = (props) => {
|
|
|
11485
11324
|
return _tmpl$5$7();
|
|
11486
11325
|
},
|
|
11487
11326
|
get children() {
|
|
11488
|
-
var _el$8 = _tmpl$4$
|
|
11327
|
+
var _el$8 = _tmpl$4$7();
|
|
11489
11328
|
_el$8.firstChild;
|
|
11490
11329
|
_el$8.addEventListener("scroll", onScroll);
|
|
11491
11330
|
var _ref$2 = scrollRef;
|
|
@@ -11898,7 +11737,7 @@ const PROVIDERS = {
|
|
|
11898
11737
|
apiKeyHint: "Optional — only if your endpoint requires authentication"
|
|
11899
11738
|
}
|
|
11900
11739
|
};
|
|
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$
|
|
11740
|
+
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
11741
|
const SettingsGeneral = (props) => {
|
|
11903
11742
|
const [checkingUpdates, setCheckingUpdates] = createSignal(false);
|
|
11904
11743
|
const [updateResult, setUpdateResult] = createSignal(null);
|
|
@@ -11911,7 +11750,7 @@ const SettingsGeneral = (props) => {
|
|
|
11911
11750
|
}
|
|
11912
11751
|
};
|
|
11913
11752
|
return (() => {
|
|
11914
|
-
var _el$ = _tmpl$4$
|
|
11753
|
+
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
11754
|
insert(_el$, createComponent(Show, {
|
|
11916
11755
|
get when() {
|
|
11917
11756
|
return props.welcomeBanner.show();
|
|
@@ -12017,7 +11856,7 @@ const SettingsGeneral = (props) => {
|
|
|
12017
11856
|
})();
|
|
12018
11857
|
};
|
|
12019
11858
|
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$
|
|
11859
|
+
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=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. 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
11860
|
const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
|
|
12022
11861
|
id: p.id,
|
|
12023
11862
|
name: p.name,
|
|
@@ -12169,7 +12008,7 @@ const SettingsAgent = (props) => {
|
|
|
12169
12008
|
},
|
|
12170
12009
|
get children() {
|
|
12171
12010
|
return [(() => {
|
|
12172
|
-
var _el$15 = _tmpl$4$
|
|
12011
|
+
var _el$15 = _tmpl$4$5(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
12173
12012
|
_el$17.firstChild;
|
|
12174
12013
|
insert(_el$17, () => props.chat.codexAccountEmail() || "ChatGPT", null);
|
|
12175
12014
|
return _el$15;
|
|
@@ -12428,7 +12267,7 @@ const SettingsAgent = (props) => {
|
|
|
12428
12267
|
})();
|
|
12429
12268
|
};
|
|
12430
12269
|
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$
|
|
12270
|
+
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
12271
|
const SettingsVaults = (props) => {
|
|
12433
12272
|
const v = props.vault;
|
|
12434
12273
|
const h = props.humanVault;
|
|
@@ -12490,7 +12329,7 @@ const SettingsVaults = (props) => {
|
|
|
12490
12329
|
return !v.adding();
|
|
12491
12330
|
},
|
|
12492
12331
|
get children() {
|
|
12493
|
-
var _el$8 = _tmpl$4$
|
|
12332
|
+
var _el$8 = _tmpl$4$4();
|
|
12494
12333
|
_el$8.$$click = () => {
|
|
12495
12334
|
v.setAdding(true);
|
|
12496
12335
|
v.setMessage(null);
|
|
@@ -12788,7 +12627,7 @@ const SettingsVaults = (props) => {
|
|
|
12788
12627
|
})();
|
|
12789
12628
|
};
|
|
12790
12629
|
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$
|
|
12630
|
+
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
12631
|
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
12632
|
const SettingsPrivacy = (props) => {
|
|
12794
12633
|
const [permissions, setPermissions] = createSignal([]);
|
|
@@ -12797,7 +12636,7 @@ const SettingsPrivacy = (props) => {
|
|
|
12797
12636
|
void loadPermissions();
|
|
12798
12637
|
});
|
|
12799
12638
|
return (() => {
|
|
12800
|
-
var _el$ = _tmpl$4$
|
|
12639
|
+
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
12640
|
_el$4.addEventListener("change", (e) => props.setDomainMode(e.currentTarget.value));
|
|
12802
12641
|
insert(_el$2, createComponent(Show, {
|
|
12803
12642
|
get when() {
|
|
@@ -12863,7 +12702,7 @@ const SettingsPrivacy = (props) => {
|
|
|
12863
12702
|
})();
|
|
12864
12703
|
};
|
|
12865
12704
|
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$
|
|
12705
|
+
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
12706
|
const SettingsAccount = (props) => {
|
|
12868
12707
|
const p = props.premium;
|
|
12869
12708
|
const s = props.sessions;
|
|
@@ -12895,7 +12734,7 @@ const SettingsAccount = (props) => {
|
|
|
12895
12734
|
}
|
|
12896
12735
|
};
|
|
12897
12736
|
return (() => {
|
|
12898
|
-
var _el$ = _tmpl$4$
|
|
12737
|
+
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
12738
|
_el$1.firstChild;
|
|
12900
12739
|
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
12740
|
_el$5.$$click = () => {
|
|
@@ -13219,715 +13058,7 @@ const SettingsAccount = (props) => {
|
|
|
13219
13058
|
})();
|
|
13220
13059
|
};
|
|
13221
13060
|
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>`);
|
|
13061
|
+
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
13062
|
const CHAT_PROVIDERS = Object.values(PROVIDERS).map((p) => ({
|
|
13932
13063
|
id: p.id,
|
|
13933
13064
|
name: p.name,
|
|
@@ -13964,7 +13095,7 @@ const Settings = () => {
|
|
|
13964
13095
|
const [obsidianVaultPath, setObsidianVaultPath] = createSignal("");
|
|
13965
13096
|
const [mcpPort, setMcpPort] = createSignal("3100");
|
|
13966
13097
|
const [maxToolIterations, setMaxToolIterations] = createSignal("200");
|
|
13967
|
-
const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("
|
|
13098
|
+
const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("off");
|
|
13968
13099
|
const [health, setHealth] = createSignal(null);
|
|
13969
13100
|
const [defaultUrl, setDefaultUrl] = createSignal("https://start.duckduckgo.com");
|
|
13970
13101
|
const [defaultSearchEngine, setDefaultSearchEngine] = createSignal("duckduckgo");
|
|
@@ -14373,7 +13504,7 @@ const Settings = () => {
|
|
|
14373
13504
|
setObsidianVaultPath(settings.obsidianVaultPath ?? "");
|
|
14374
13505
|
setMcpPort(String(settings.mcpPort ?? 3100));
|
|
14375
13506
|
setMaxToolIterations(String(settings.maxToolIterations ?? 200));
|
|
14376
|
-
setAgentTranscriptMode(settings.agentTranscriptMode ?? "
|
|
13507
|
+
setAgentTranscriptMode(settings.agentTranscriptMode ?? "off");
|
|
14377
13508
|
setHealth(runtimeHealth);
|
|
14378
13509
|
const cp = settings.chatProvider ?? null;
|
|
14379
13510
|
setChatEnabled(cp !== null);
|
|
@@ -14517,315 +13648,313 @@ const Settings = () => {
|
|
|
14517
13648
|
return settingsVisible();
|
|
14518
13649
|
},
|
|
14519
13650
|
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()];
|
|
13651
|
+
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;
|
|
13652
|
+
addEventListener(_el$, "click", closeSettings, true);
|
|
13653
|
+
_el$2.$$keydown = handleKeyDown;
|
|
13654
|
+
_el$2.$$click = (e) => e.stopPropagation();
|
|
13655
|
+
insert(_el$2, createComponent(Show, {
|
|
13656
|
+
get when() {
|
|
13657
|
+
return !premiumActive();
|
|
13658
|
+
},
|
|
13659
|
+
get children() {
|
|
13660
|
+
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;
|
|
13661
|
+
_el$7.$$click = () => {
|
|
13662
|
+
void trackPremiumContext("settings_banner_clicked");
|
|
13663
|
+
startPremiumCheckout();
|
|
13664
|
+
};
|
|
13665
|
+
_el$8.$$click = () => selectCategory("account");
|
|
13666
|
+
return _el$4;
|
|
13667
|
+
}
|
|
13668
|
+
}), _el$9);
|
|
13669
|
+
_el$1.$$click = () => selectCategory("general");
|
|
13670
|
+
insert(_el$1, createComponent(globe_default, {
|
|
13671
|
+
size: 16
|
|
13672
|
+
}), _el$10);
|
|
13673
|
+
_el$11.$$click = () => selectCategory("agent");
|
|
13674
|
+
insert(_el$11, createComponent(cpu_default, {
|
|
13675
|
+
size: 16
|
|
13676
|
+
}), _el$12);
|
|
13677
|
+
_el$13.$$click = () => selectCategory("vaults");
|
|
13678
|
+
insert(_el$13, createComponent(shield_default, {
|
|
13679
|
+
size: 16
|
|
13680
|
+
}), _el$14);
|
|
13681
|
+
_el$15.$$click = () => selectCategory("privacy");
|
|
13682
|
+
insert(_el$15, createComponent(lock_default, {
|
|
13683
|
+
size: 16
|
|
13684
|
+
}), _el$16);
|
|
13685
|
+
_el$17.$$click = () => selectCategory("account");
|
|
13686
|
+
insert(_el$17, createComponent(user_default, {
|
|
13687
|
+
size: 16
|
|
13688
|
+
}), _el$18);
|
|
13689
|
+
var _ref$ = settingsContentEl;
|
|
13690
|
+
typeof _ref$ === "function" ? use(_ref$, _el$19) : settingsContentEl = _el$19;
|
|
13691
|
+
insert(_el$19, createComponent(Show, {
|
|
13692
|
+
get when() {
|
|
13693
|
+
return activeCategory() === "general";
|
|
13694
|
+
},
|
|
13695
|
+
get children() {
|
|
13696
|
+
return createComponent(SettingsGeneral, {
|
|
13697
|
+
welcomeBanner: {
|
|
13698
|
+
show: showWelcome,
|
|
13699
|
+
dismiss: dismissWelcome
|
|
13700
|
+
},
|
|
13701
|
+
defaultUrl,
|
|
13702
|
+
setDefaultUrl,
|
|
13703
|
+
defaultSearchEngine,
|
|
13704
|
+
setDefaultSearchEngine,
|
|
13705
|
+
downloadPath,
|
|
13706
|
+
setDownloadPath,
|
|
13707
|
+
theme,
|
|
13708
|
+
setTheme,
|
|
13709
|
+
autoRestoreSession,
|
|
13710
|
+
setAutoRestoreSession,
|
|
13711
|
+
clearBookmarksOnLaunch,
|
|
13712
|
+
setClearBookmarksOnLaunch,
|
|
13713
|
+
premiumActive,
|
|
13714
|
+
startPremiumCheckout
|
|
13715
|
+
});
|
|
13716
|
+
}
|
|
13717
|
+
}), null);
|
|
13718
|
+
insert(_el$19, createComponent(Show, {
|
|
13719
|
+
get when() {
|
|
13720
|
+
return activeCategory() === "agent";
|
|
13721
|
+
},
|
|
13722
|
+
get children() {
|
|
13723
|
+
return createComponent(SettingsAgent, {
|
|
13724
|
+
get chat() {
|
|
13725
|
+
return {
|
|
13726
|
+
enabled: chatEnabled,
|
|
13727
|
+
setEnabled: setChatEnabled,
|
|
13728
|
+
providerId: chatProviderId,
|
|
13729
|
+
setProviderId: setChatProviderId,
|
|
13730
|
+
apiKey: chatApiKey,
|
|
13731
|
+
setApiKey: setChatApiKey,
|
|
13732
|
+
hasStoredApiKey: chatHasStoredApiKey,
|
|
13733
|
+
setHasStoredApiKey: setChatHasStoredApiKey,
|
|
13734
|
+
model: chatModel,
|
|
13735
|
+
setModel: setChatModel,
|
|
13736
|
+
baseUrl: chatBaseUrl,
|
|
13737
|
+
setBaseUrl: setChatBaseUrl,
|
|
13738
|
+
reasoningEffort: chatReasoningEffort,
|
|
13739
|
+
setReasoningEffort: setChatReasoningEffort,
|
|
13740
|
+
providerModels,
|
|
13741
|
+
modelFetchState,
|
|
13742
|
+
modelFetchWarning,
|
|
13743
|
+
doFetchModels,
|
|
13744
|
+
resetProviderModels,
|
|
13745
|
+
codexAuthStatus: providerAuth.codexAuthStatus,
|
|
13746
|
+
codexAccountEmail: providerAuth.codexAccountEmail,
|
|
13747
|
+
setCodexAccountEmail: providerAuth.setCodexAccountEmail,
|
|
13748
|
+
codexAuthError: providerAuth.codexAuthError,
|
|
13749
|
+
setCodexAuthError: providerAuth.setCodexAuthError,
|
|
13750
|
+
openRouterAuthStatus: providerAuth.openRouterAuthStatus,
|
|
13751
|
+
openRouterAuthError: providerAuth.openRouterAuthError,
|
|
13752
|
+
providerType,
|
|
13753
|
+
startCodexAuth: providerAuth.startCodexAuth,
|
|
13754
|
+
disconnectCodex: providerAuth.disconnectCodex,
|
|
13755
|
+
startOpenRouterAuth: providerAuth.startOpenRouterAuth
|
|
13756
|
+
};
|
|
13757
|
+
},
|
|
13758
|
+
mcpPort,
|
|
13759
|
+
setMcpPort,
|
|
13760
|
+
maxToolIterations,
|
|
13761
|
+
setMaxToolIterations,
|
|
13762
|
+
agentTranscriptMode,
|
|
13763
|
+
setAgentTranscriptMode,
|
|
13764
|
+
obsidianVaultPath,
|
|
13765
|
+
setObsidianVaultPath,
|
|
13766
|
+
health,
|
|
13767
|
+
premiumActive
|
|
13768
|
+
});
|
|
13769
|
+
}
|
|
13770
|
+
}), null);
|
|
13771
|
+
insert(_el$19, createComponent(Show, {
|
|
13772
|
+
get when() {
|
|
13773
|
+
return activeCategory() === "vaults";
|
|
13774
|
+
},
|
|
13775
|
+
get children() {
|
|
13776
|
+
return createComponent(SettingsVaults, {
|
|
13777
|
+
premiumActive,
|
|
13778
|
+
vault: {
|
|
13779
|
+
entries: vaultEntries,
|
|
13780
|
+
expanded: vaultExpanded,
|
|
13781
|
+
setExpanded: setVaultExpanded,
|
|
13782
|
+
adding: vaultAdding,
|
|
13783
|
+
setAdding: setVaultAdding,
|
|
13784
|
+
newLabel: vaultNewLabel,
|
|
13785
|
+
setNewLabel: setVaultNewLabel,
|
|
13786
|
+
newDomain: vaultNewDomain,
|
|
13787
|
+
setNewDomain: setVaultNewDomain,
|
|
13788
|
+
newUsername: vaultNewUsername,
|
|
13789
|
+
setNewUsername: setVaultNewUsername,
|
|
13790
|
+
newPassword: vaultNewPassword,
|
|
13791
|
+
setNewPassword: setVaultNewPassword,
|
|
13792
|
+
newTotp: vaultNewTotp,
|
|
13793
|
+
setNewTotp: setVaultNewTotp,
|
|
13794
|
+
newNotes: vaultNewNotes,
|
|
13795
|
+
setNewNotes: setVaultNewNotes,
|
|
13796
|
+
message: vaultMessage,
|
|
13797
|
+
setMessage: setVaultMessage,
|
|
13798
|
+
handleAdd: handleVaultAdd,
|
|
13799
|
+
handleRemove: handleVaultRemove
|
|
13800
|
+
},
|
|
13801
|
+
humanVault: {
|
|
13802
|
+
entries: humanEntries,
|
|
13803
|
+
adding: humanAdding,
|
|
13804
|
+
setAdding: setHumanAdding,
|
|
13805
|
+
newTitle: humanNewTitle,
|
|
13806
|
+
setNewTitle: setHumanNewTitle,
|
|
13807
|
+
newUrl: humanNewUrl,
|
|
13808
|
+
setNewUrl: setHumanNewUrl,
|
|
13809
|
+
newUsername: humanNewUsername,
|
|
13810
|
+
setNewUsername: setHumanNewUsername,
|
|
13811
|
+
newPassword: humanNewPassword,
|
|
13812
|
+
setNewPassword: setHumanNewPassword,
|
|
13813
|
+
newCategory: humanNewCategory,
|
|
13814
|
+
setNewCategory: setHumanNewCategory,
|
|
13815
|
+
newNotes: humanNewNotes,
|
|
13816
|
+
setNewNotes: setHumanNewNotes,
|
|
13817
|
+
message: humanMessage,
|
|
13818
|
+
handleAdd: handleHumanAdd,
|
|
13819
|
+
handleRemove: handleHumanRemove
|
|
13820
|
+
},
|
|
13821
|
+
autofill: {
|
|
13822
|
+
profiles: autofillProfiles,
|
|
13823
|
+
adding: autofillAdding,
|
|
13824
|
+
setAdding: setAutofillAdding,
|
|
13825
|
+
label: autofillLabel,
|
|
13826
|
+
setLabel: setAutofillLabel,
|
|
13827
|
+
firstName: autofillFirstName,
|
|
13828
|
+
setFirstName: setAutofillFirstName,
|
|
13829
|
+
lastName: autofillLastName,
|
|
13830
|
+
setLastName: setAutofillLastName,
|
|
13831
|
+
email: autofillEmail,
|
|
13832
|
+
setEmail: setAutofillEmail,
|
|
13833
|
+
phone: autofillPhone,
|
|
13834
|
+
setPhone: setAutofillPhone,
|
|
13835
|
+
organization: autofillOrg,
|
|
13836
|
+
setOrganization: setAutofillOrg,
|
|
13837
|
+
addressLine1: autofillAddr1,
|
|
13838
|
+
setAddressLine1: setAutofillAddr1,
|
|
13839
|
+
addressLine2: autofillAddr2,
|
|
13840
|
+
setAddressLine2: setAutofillAddr2,
|
|
13841
|
+
city: autofillCity,
|
|
13842
|
+
setCity: setAutofillCity,
|
|
13843
|
+
state: autofillState,
|
|
13844
|
+
setState: setAutofillState,
|
|
13845
|
+
postalCode: autofillZip,
|
|
13846
|
+
setPostalCode: setAutofillZip,
|
|
13847
|
+
country: autofillCountry,
|
|
13848
|
+
setCountry: setAutofillCountry,
|
|
13849
|
+
message: autofillMessage,
|
|
13850
|
+
handleAdd: handleAutofillAdd,
|
|
13851
|
+
handleRemove: handleAutofillRemove,
|
|
13852
|
+
handleFill: handleAutofillFill
|
|
13853
|
+
}
|
|
13854
|
+
});
|
|
13855
|
+
}
|
|
13856
|
+
}), null);
|
|
13857
|
+
insert(_el$19, createComponent(Show, {
|
|
13858
|
+
get when() {
|
|
13859
|
+
return activeCategory() === "privacy";
|
|
13860
|
+
},
|
|
13861
|
+
get children() {
|
|
13862
|
+
return createComponent(SettingsPrivacy, {
|
|
13863
|
+
telemetryEnabled,
|
|
13864
|
+
setTelemetryEnabled,
|
|
13865
|
+
domainMode,
|
|
13866
|
+
setDomainMode,
|
|
13867
|
+
domainList,
|
|
13868
|
+
setDomainList,
|
|
13869
|
+
sourceDoNotAllowList,
|
|
13870
|
+
setSourceDoNotAllowList
|
|
13871
|
+
});
|
|
13872
|
+
}
|
|
13873
|
+
}), null);
|
|
13874
|
+
insert(_el$19, createComponent(Show, {
|
|
13875
|
+
get when() {
|
|
13876
|
+
return activeCategory() === "account";
|
|
13877
|
+
},
|
|
13878
|
+
get children() {
|
|
13879
|
+
return createComponent(SettingsAccount, {
|
|
13880
|
+
premium: {
|
|
13881
|
+
state: premiumState,
|
|
13882
|
+
setState: setPremiumState,
|
|
13883
|
+
email: premiumEmail,
|
|
13884
|
+
setEmail: setPremiumEmail,
|
|
13885
|
+
code: premiumCode,
|
|
13886
|
+
setCode: setPremiumCode,
|
|
13887
|
+
challengeToken: premiumChallengeToken,
|
|
13888
|
+
setChallengeToken: setPremiumChallengeToken,
|
|
13889
|
+
codeSent: premiumCodeSent,
|
|
13890
|
+
setCodeSent: setPremiumCodeSent,
|
|
13891
|
+
loading: premiumLoading,
|
|
13892
|
+
setLoading: setPremiumLoading,
|
|
13893
|
+
message: premiumMessage,
|
|
13894
|
+
setMessage: setPremiumMessage,
|
|
13895
|
+
active: premiumActive,
|
|
13896
|
+
startCheckout: startPremiumCheckout,
|
|
13897
|
+
resetFlow: resetPremiumActivationFlow
|
|
13898
|
+
},
|
|
13899
|
+
sessions: {
|
|
13900
|
+
list: sessionList,
|
|
13901
|
+
saveName: sessionSaveName,
|
|
13902
|
+
setSaveName: setSessionSaveName,
|
|
13903
|
+
loadList: loadSessionList
|
|
13904
|
+
},
|
|
13905
|
+
setStatus
|
|
13906
|
+
});
|
|
13907
|
+
}
|
|
13908
|
+
}), null);
|
|
13909
|
+
_el$21.$$click = handleSave;
|
|
13910
|
+
addEventListener(_el$22, "click", closeSettings, true);
|
|
13911
|
+
insert(_el$2, createComponent(Show, {
|
|
13912
|
+
get when() {
|
|
13913
|
+
return status();
|
|
13914
|
+
},
|
|
13915
|
+
children: (currentStatus) => (() => {
|
|
13916
|
+
var _el$23 = _tmpl$3$2();
|
|
13917
|
+
insert(_el$23, () => currentStatus().text);
|
|
13918
|
+
createRenderEffect((_p$) => {
|
|
13919
|
+
var _v$10 = !!(currentStatus().kind === "success"), _v$11 = !!(currentStatus().kind === "error");
|
|
13920
|
+
_v$10 !== _p$.e && _el$23.classList.toggle("success", _p$.e = _v$10);
|
|
13921
|
+
_v$11 !== _p$.t && _el$23.classList.toggle("error", _p$.t = _v$11);
|
|
13922
|
+
return _p$;
|
|
13923
|
+
}, {
|
|
13924
|
+
e: void 0,
|
|
13925
|
+
t: void 0
|
|
13926
|
+
});
|
|
13927
|
+
return _el$23;
|
|
13928
|
+
})()
|
|
13929
|
+
}), null);
|
|
13930
|
+
createRenderEffect((_p$) => {
|
|
13931
|
+
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;
|
|
13932
|
+
_v$ !== _p$.e && _el$.classList.toggle("closing", _p$.e = _v$);
|
|
13933
|
+
_v$2 !== _p$.t && _el$1.classList.toggle("active", _p$.t = _v$2);
|
|
13934
|
+
_v$3 !== _p$.a && setAttribute(_el$1, "aria-current", _p$.a = _v$3);
|
|
13935
|
+
_v$4 !== _p$.o && _el$11.classList.toggle("active", _p$.o = _v$4);
|
|
13936
|
+
_v$5 !== _p$.i && setAttribute(_el$11, "aria-current", _p$.i = _v$5);
|
|
13937
|
+
_v$6 !== _p$.n && _el$13.classList.toggle("active", _p$.n = _v$6);
|
|
13938
|
+
_v$7 !== _p$.s && setAttribute(_el$13, "aria-current", _p$.s = _v$7);
|
|
13939
|
+
_v$8 !== _p$.h && _el$15.classList.toggle("active", _p$.h = _v$8);
|
|
13940
|
+
_v$9 !== _p$.r && setAttribute(_el$15, "aria-current", _p$.r = _v$9);
|
|
13941
|
+
_v$0 !== _p$.d && _el$17.classList.toggle("active", _p$.d = _v$0);
|
|
13942
|
+
_v$1 !== _p$.l && setAttribute(_el$17, "aria-current", _p$.l = _v$1);
|
|
13943
|
+
return _p$;
|
|
13944
|
+
}, {
|
|
13945
|
+
e: void 0,
|
|
13946
|
+
t: void 0,
|
|
13947
|
+
a: void 0,
|
|
13948
|
+
o: void 0,
|
|
13949
|
+
i: void 0,
|
|
13950
|
+
n: void 0,
|
|
13951
|
+
s: void 0,
|
|
13952
|
+
h: void 0,
|
|
13953
|
+
r: void 0,
|
|
13954
|
+
d: void 0,
|
|
13955
|
+
l: void 0
|
|
13956
|
+
});
|
|
13957
|
+
return _el$;
|
|
14829
13958
|
}
|
|
14830
13959
|
});
|
|
14831
13960
|
};
|
|
@@ -15194,7 +14323,8 @@ const App = () => {
|
|
|
15194
14323
|
document.documentElement.setAttribute("data-theme", theme);
|
|
15195
14324
|
try {
|
|
15196
14325
|
localStorage.setItem("vessel:theme", theme);
|
|
15197
|
-
} catch {
|
|
14326
|
+
} catch (err) {
|
|
14327
|
+
console.warn("Failed to persist theme to localStorage:", err);
|
|
15198
14328
|
}
|
|
15199
14329
|
};
|
|
15200
14330
|
const loadAndApplyTheme = async () => {
|