@quanta-intellect/vessel-browser 0.1.128 → 0.1.132
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.
|
@@ -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$l = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$i = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$g = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$e = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$a = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$9 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
|
|
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;
|
|
@@ -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$k = /* @__PURE__ */ template(`<div class=security-popup-permission-row><span></span><strong>`), _tmpl$5$
|
|
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) {
|
|
@@ -3008,7 +2880,7 @@ const SecurityPopup = (props) => {
|
|
|
3008
2880
|
insert(_el$2, (() => {
|
|
3009
2881
|
var _c$ = memo(() => !!props.state.canProceed);
|
|
3010
2882
|
return () => _c$() && (() => {
|
|
3011
|
-
var _el$10 = _tmpl$5$
|
|
2883
|
+
var _el$10 = _tmpl$5$g(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling;
|
|
3012
2884
|
_el$11.$$click = handleProceedAnyway;
|
|
3013
2885
|
_el$12.$$click = handleGoBackToSafety;
|
|
3014
2886
|
return _el$10;
|
|
@@ -3408,7 +3280,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
3408
3280
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
3409
3281
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
3410
3282
|
};
|
|
3411
|
-
var _tmpl$$p = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$o = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$
|
|
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>`);
|
|
3412
3284
|
const AddressBar = (props) => {
|
|
3413
3285
|
const {
|
|
3414
3286
|
activeTab,
|
|
@@ -3444,8 +3316,6 @@ const AddressBar = (props) => {
|
|
|
3444
3316
|
const [searchEngine, setSearchEngine] = createSignal("duckduckgo");
|
|
3445
3317
|
const [showSecurityPopup, setShowSecurityPopup] = createSignal(false);
|
|
3446
3318
|
const [hasEditedAddress, setHasEditedAddress] = createSignal(false);
|
|
3447
|
-
const [dismissedAgentStatusKey, setDismissedAgentStatusKey] = createSignal(null);
|
|
3448
|
-
const now2 = useNow();
|
|
3449
3319
|
let inputRef;
|
|
3450
3320
|
let addressBlurTimer = null;
|
|
3451
3321
|
let skipNextAddressBlurSync = false;
|
|
@@ -3456,22 +3326,6 @@ const AddressBar = (props) => {
|
|
|
3456
3326
|
const tabId = activeTabId2();
|
|
3457
3327
|
return tabId ? getSecurityState(tabId) : void 0;
|
|
3458
3328
|
});
|
|
3459
|
-
const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
|
|
3460
|
-
const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
|
|
3461
|
-
const agentStatusKey = createMemo(() => {
|
|
3462
|
-
const message = agentStatusMessage();
|
|
3463
|
-
if (!message) return null;
|
|
3464
|
-
return `${agentPresence()}:${message}`;
|
|
3465
|
-
});
|
|
3466
|
-
const showAgentStatusBadge = createMemo(() => {
|
|
3467
|
-
const key = agentStatusKey();
|
|
3468
|
-
return !!key && dismissedAgentStatusKey() !== key;
|
|
3469
|
-
});
|
|
3470
|
-
createEffect(() => {
|
|
3471
|
-
if (!agentStatusKey()) {
|
|
3472
|
-
setDismissedAgentStatusKey(null);
|
|
3473
|
-
}
|
|
3474
|
-
});
|
|
3475
3329
|
const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
|
|
3476
3330
|
const searchEnginePreset = createMemo(() => {
|
|
3477
3331
|
const engine = searchEngine();
|
|
@@ -3719,7 +3573,7 @@ const AddressBar = (props) => {
|
|
|
3719
3573
|
};
|
|
3720
3574
|
const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
|
|
3721
3575
|
return (() => {
|
|
3722
|
-
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;
|
|
3723
3577
|
addEventListener(_el$3, "click", goBack, true);
|
|
3724
3578
|
addEventListener(_el$4, "click", goForward, true);
|
|
3725
3579
|
addEventListener(_el$5, "click", reload, true);
|
|
@@ -3739,9 +3593,9 @@ const AddressBar = (props) => {
|
|
|
3739
3593
|
insert(_el$8, createComponent(Switch, {
|
|
3740
3594
|
get fallback() {
|
|
3741
3595
|
return (() => {
|
|
3742
|
-
var _el$
|
|
3743
|
-
_el$
|
|
3744
|
-
return _el$
|
|
3596
|
+
var _el$45 = _tmpl$17$4();
|
|
3597
|
+
_el$45.firstChild;
|
|
3598
|
+
return _el$45;
|
|
3745
3599
|
})();
|
|
3746
3600
|
},
|
|
3747
3601
|
get children() {
|
|
@@ -3819,75 +3673,49 @@ const AddressBar = (props) => {
|
|
|
3819
3673
|
return memo(() => !!showSuggestions())() && suggestions().length > 0;
|
|
3820
3674
|
},
|
|
3821
3675
|
get children() {
|
|
3822
|
-
var _el$14 = _tmpl$5$
|
|
3676
|
+
var _el$14 = _tmpl$5$f();
|
|
3823
3677
|
insert(_el$14, createComponent(For, {
|
|
3824
3678
|
get each() {
|
|
3825
3679
|
return suggestions();
|
|
3826
3680
|
},
|
|
3827
3681
|
children: (item, i) => (() => {
|
|
3828
|
-
var _el$
|
|
3829
|
-
_el$
|
|
3830
|
-
_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) => {
|
|
3831
3685
|
e.preventDefault();
|
|
3832
3686
|
selectSuggestion(item.url);
|
|
3833
3687
|
};
|
|
3834
|
-
insert(_el$
|
|
3688
|
+
insert(_el$48, (() => {
|
|
3835
3689
|
var _c$ = memo(() => item.source === "bookmark");
|
|
3836
3690
|
return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
|
|
3837
3691
|
})());
|
|
3838
|
-
insert(_el$
|
|
3839
|
-
insert(_el$
|
|
3692
|
+
insert(_el$50, () => item.title || item.url);
|
|
3693
|
+
insert(_el$51, () => item.subtitle || item.url);
|
|
3840
3694
|
createRenderEffect((_p$) => {
|
|
3841
|
-
var _v$
|
|
3842
|
-
_v$
|
|
3843
|
-
_v$
|
|
3844
|
-
_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);
|
|
3845
3699
|
return _p$;
|
|
3846
3700
|
}, {
|
|
3847
3701
|
e: void 0,
|
|
3848
3702
|
t: void 0,
|
|
3849
3703
|
a: void 0
|
|
3850
3704
|
});
|
|
3851
|
-
return _el$
|
|
3705
|
+
return _el$47;
|
|
3852
3706
|
})()
|
|
3853
3707
|
}));
|
|
3854
3708
|
return _el$14;
|
|
3855
3709
|
}
|
|
3856
3710
|
}), null);
|
|
3857
|
-
insert(_el$11, createComponent(Show, {
|
|
3858
|
-
get when() {
|
|
3859
|
-
return !isPrivateWindow && showAgentStatusBadge();
|
|
3860
|
-
},
|
|
3861
|
-
get children() {
|
|
3862
|
-
var _el$15 = _tmpl$6$f(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling, _el$18 = _el$17.nextSibling;
|
|
3863
|
-
insert(_el$17, agentStatusMessage);
|
|
3864
|
-
_el$18.$$click = (event) => {
|
|
3865
|
-
event.stopPropagation();
|
|
3866
|
-
setDismissedAgentStatusKey(agentStatusKey());
|
|
3867
|
-
};
|
|
3868
|
-
insert(_el$18, createComponent(x_default, {
|
|
3869
|
-
size: 12
|
|
3870
|
-
}));
|
|
3871
|
-
createRenderEffect((_p$) => {
|
|
3872
|
-
var _v$3 = `agent-status-badge ${agentPresence()}`, _v$4 = agentStatusMessage() || "Agent is using the browser";
|
|
3873
|
-
_v$3 !== _p$.e && className(_el$15, _p$.e = _v$3);
|
|
3874
|
-
_v$4 !== _p$.t && setAttribute(_el$15, "title", _p$.t = _v$4);
|
|
3875
|
-
return _p$;
|
|
3876
|
-
}, {
|
|
3877
|
-
e: void 0,
|
|
3878
|
-
t: void 0
|
|
3879
|
-
});
|
|
3880
|
-
return _el$15;
|
|
3881
|
-
}
|
|
3882
|
-
}), null);
|
|
3883
3711
|
insert(_el$11, createComponent(Show, {
|
|
3884
3712
|
get when() {
|
|
3885
3713
|
return pageDiff();
|
|
3886
3714
|
},
|
|
3887
3715
|
get children() {
|
|
3888
|
-
var _el$
|
|
3889
|
-
_el$
|
|
3890
|
-
return _el$
|
|
3716
|
+
var _el$15 = _tmpl$6$e();
|
|
3717
|
+
_el$15.$$click = () => void openDiffTimeline();
|
|
3718
|
+
return _el$15;
|
|
3891
3719
|
}
|
|
3892
3720
|
}), null);
|
|
3893
3721
|
insert(_el$, createComponent(Show, {
|
|
@@ -3895,245 +3723,245 @@ const AddressBar = (props) => {
|
|
|
3895
3723
|
return memo(() => !!pageDiff())() && diffExpanded();
|
|
3896
3724
|
},
|
|
3897
3725
|
get children() {
|
|
3898
|
-
var _el$
|
|
3899
|
-
_el$
|
|
3900
|
-
var _el$
|
|
3901
|
-
insert(_el$
|
|
3902
|
-
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, {
|
|
3903
3731
|
get when() {
|
|
3904
3732
|
return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
|
|
3905
3733
|
},
|
|
3906
3734
|
get children() {
|
|
3907
|
-
var _el$
|
|
3908
|
-
_el$
|
|
3909
|
-
insert(_el$
|
|
3910
|
-
insert(_el$
|
|
3911
|
-
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;
|
|
3912
3740
|
}
|
|
3913
3741
|
}), null);
|
|
3914
|
-
_el$
|
|
3915
|
-
_el$
|
|
3916
|
-
insert(_el$
|
|
3742
|
+
_el$28.$$click = () => void openDiffTimeline();
|
|
3743
|
+
_el$29.$$click = () => setDiffExpanded(false);
|
|
3744
|
+
insert(_el$16, createComponent(Show, {
|
|
3917
3745
|
get when() {
|
|
3918
3746
|
return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
|
|
3919
3747
|
},
|
|
3920
3748
|
get children() {
|
|
3921
|
-
var _el$
|
|
3922
|
-
_el$
|
|
3923
|
-
insert(_el$
|
|
3749
|
+
var _el$30 = _tmpl$8$9();
|
|
3750
|
+
_el$30.firstChild;
|
|
3751
|
+
insert(_el$30, createComponent(For, {
|
|
3924
3752
|
get each() {
|
|
3925
3753
|
return pageDiff().recentBursts;
|
|
3926
3754
|
},
|
|
3927
3755
|
children: (burst, i) => (() => {
|
|
3928
|
-
var _el$
|
|
3929
|
-
insert(_el$
|
|
3756
|
+
var _el$52 = _tmpl$19$4(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
|
|
3757
|
+
insert(_el$53, (() => {
|
|
3930
3758
|
var _c$2 = memo(() => i() === 0);
|
|
3931
3759
|
return () => _c$2() ? "Latest" : formatRelativeTime(burst.detectedAt);
|
|
3932
3760
|
})());
|
|
3933
|
-
insert(_el$
|
|
3761
|
+
insert(_el$54, createComponent(For, {
|
|
3934
3762
|
get each() {
|
|
3935
3763
|
return parseDiffSummaryParts(burst.summary);
|
|
3936
3764
|
},
|
|
3937
3765
|
children: (part) => (() => {
|
|
3938
|
-
var _el$
|
|
3939
|
-
insert(_el$
|
|
3766
|
+
var _el$55 = _tmpl$21$4(), _el$57 = _el$55.firstChild;
|
|
3767
|
+
insert(_el$55, createComponent(Show, {
|
|
3940
3768
|
get when() {
|
|
3941
3769
|
return part.section;
|
|
3942
3770
|
},
|
|
3943
3771
|
get children() {
|
|
3944
|
-
var _el$
|
|
3945
|
-
insert(_el$
|
|
3946
|
-
return _el$
|
|
3772
|
+
var _el$56 = _tmpl$20$4();
|
|
3773
|
+
insert(_el$56, () => part.section);
|
|
3774
|
+
return _el$56;
|
|
3947
3775
|
}
|
|
3948
|
-
}), _el$
|
|
3949
|
-
insert(_el$
|
|
3950
|
-
return _el$
|
|
3776
|
+
}), _el$57);
|
|
3777
|
+
insert(_el$57, () => part.text);
|
|
3778
|
+
return _el$55;
|
|
3951
3779
|
})()
|
|
3952
3780
|
}));
|
|
3953
|
-
createRenderEffect(() => _el$
|
|
3954
|
-
return _el$
|
|
3781
|
+
createRenderEffect(() => _el$52.classList.toggle("latest", !!(i() === 0)));
|
|
3782
|
+
return _el$52;
|
|
3955
3783
|
})()
|
|
3956
3784
|
}), null);
|
|
3957
|
-
return _el$
|
|
3785
|
+
return _el$30;
|
|
3958
3786
|
}
|
|
3959
3787
|
}), null);
|
|
3960
|
-
insert(_el$
|
|
3788
|
+
insert(_el$16, createComponent(For, {
|
|
3961
3789
|
get each() {
|
|
3962
3790
|
return pageDiff().changes;
|
|
3963
3791
|
},
|
|
3964
3792
|
children: (change) => (() => {
|
|
3965
|
-
var _el$
|
|
3966
|
-
insert(_el$
|
|
3967
|
-
insert(_el$
|
|
3968
|
-
insert(_el$
|
|
3969
|
-
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, {
|
|
3970
3798
|
get when() {
|
|
3971
3799
|
return change.before || change.after;
|
|
3972
3800
|
},
|
|
3973
3801
|
get children() {
|
|
3974
|
-
var _el$
|
|
3975
|
-
insert(_el$
|
|
3802
|
+
var _el$64 = _tmpl$24$4();
|
|
3803
|
+
insert(_el$64, createComponent(Show, {
|
|
3976
3804
|
get when() {
|
|
3977
3805
|
return change.before;
|
|
3978
3806
|
},
|
|
3979
3807
|
get children() {
|
|
3980
|
-
var _el$
|
|
3981
|
-
insert(_el$
|
|
3982
|
-
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;
|
|
3983
3811
|
}
|
|
3984
3812
|
}), null);
|
|
3985
|
-
insert(_el$
|
|
3813
|
+
insert(_el$64, createComponent(Show, {
|
|
3986
3814
|
get when() {
|
|
3987
3815
|
return change.after;
|
|
3988
3816
|
},
|
|
3989
3817
|
get children() {
|
|
3990
|
-
var _el$
|
|
3991
|
-
insert(_el$
|
|
3992
|
-
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;
|
|
3993
3821
|
}
|
|
3994
3822
|
}), null);
|
|
3995
|
-
return _el$
|
|
3823
|
+
return _el$64;
|
|
3996
3824
|
}
|
|
3997
3825
|
}), null);
|
|
3998
|
-
insert(_el$
|
|
3826
|
+
insert(_el$58, createComponent(Show, {
|
|
3999
3827
|
get when() {
|
|
4000
3828
|
return change.addedItems?.length;
|
|
4001
3829
|
},
|
|
4002
3830
|
get children() {
|
|
4003
|
-
var _el$
|
|
4004
|
-
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, {
|
|
4005
3833
|
get each() {
|
|
4006
3834
|
return change.addedItems;
|
|
4007
3835
|
},
|
|
4008
3836
|
children: (item) => (() => {
|
|
4009
|
-
var _el$
|
|
4010
|
-
insert(_el$
|
|
4011
|
-
return _el$
|
|
3837
|
+
var _el$77 = _tmpl$28$3();
|
|
3838
|
+
insert(_el$77, item);
|
|
3839
|
+
return _el$77;
|
|
4012
3840
|
})()
|
|
4013
3841
|
}));
|
|
4014
|
-
return _el$
|
|
3842
|
+
return _el$71;
|
|
4015
3843
|
}
|
|
4016
3844
|
}), null);
|
|
4017
|
-
insert(_el$
|
|
3845
|
+
insert(_el$58, createComponent(Show, {
|
|
4018
3846
|
get when() {
|
|
4019
3847
|
return change.removedItems?.length;
|
|
4020
3848
|
},
|
|
4021
3849
|
get children() {
|
|
4022
|
-
var _el$
|
|
4023
|
-
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, {
|
|
4024
3852
|
get each() {
|
|
4025
3853
|
return change.removedItems;
|
|
4026
3854
|
},
|
|
4027
3855
|
children: (item) => (() => {
|
|
4028
|
-
var _el$
|
|
4029
|
-
insert(_el$
|
|
4030
|
-
return _el$
|
|
3856
|
+
var _el$78 = _tmpl$28$3();
|
|
3857
|
+
insert(_el$78, item);
|
|
3858
|
+
return _el$78;
|
|
4031
3859
|
})()
|
|
4032
3860
|
}));
|
|
4033
|
-
return _el$
|
|
3861
|
+
return _el$74;
|
|
4034
3862
|
}
|
|
4035
3863
|
}), null);
|
|
4036
|
-
createRenderEffect(() => className(_el$
|
|
4037
|
-
return _el$
|
|
3864
|
+
createRenderEffect(() => className(_el$58, `page-diff-item page-diff-${change.kind}`));
|
|
3865
|
+
return _el$58;
|
|
4038
3866
|
})()
|
|
4039
3867
|
}), null);
|
|
4040
|
-
return _el$
|
|
3868
|
+
return _el$16;
|
|
4041
3869
|
}
|
|
4042
|
-
}), _el$
|
|
4043
|
-
_el$
|
|
3870
|
+
}), _el$32);
|
|
3871
|
+
_el$33.$$click = async () => {
|
|
4044
3872
|
const id = activeTabId2();
|
|
4045
3873
|
if (!id) return;
|
|
4046
3874
|
await toggleAdBlock(id);
|
|
4047
3875
|
};
|
|
4048
|
-
insert(_el$
|
|
3876
|
+
insert(_el$34, createComponent(Show, {
|
|
4049
3877
|
get when() {
|
|
4050
3878
|
return activeTab()?.adBlockingEnabled;
|
|
4051
3879
|
},
|
|
4052
3880
|
get children() {
|
|
4053
|
-
return _tmpl$
|
|
3881
|
+
return _tmpl$0$6();
|
|
4054
3882
|
}
|
|
4055
3883
|
}), null);
|
|
4056
|
-
insert(_el$
|
|
3884
|
+
insert(_el$34, createComponent(Show, {
|
|
4057
3885
|
get when() {
|
|
4058
3886
|
return !activeTab()?.adBlockingEnabled;
|
|
4059
3887
|
},
|
|
4060
3888
|
get children() {
|
|
4061
|
-
return [_tmpl$
|
|
3889
|
+
return [_tmpl$0$6(), _tmpl$1$6()];
|
|
4062
3890
|
}
|
|
4063
3891
|
}), null);
|
|
4064
|
-
insert(_el$
|
|
3892
|
+
insert(_el$32, createComponent(Show, {
|
|
4065
3893
|
when: !isPrivateWindow,
|
|
4066
3894
|
get children() {
|
|
4067
|
-
var _el$
|
|
4068
|
-
_el$
|
|
4069
|
-
createRenderEffect(() => _el$
|
|
4070
|
-
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;
|
|
4071
3899
|
}
|
|
4072
3900
|
}), null);
|
|
4073
|
-
insert(_el$
|
|
3901
|
+
insert(_el$32, createComponent(Show, {
|
|
4074
3902
|
when: !isPrivateWindow,
|
|
4075
3903
|
get children() {
|
|
4076
|
-
var _el$
|
|
4077
|
-
addEventListener(_el$
|
|
4078
|
-
createRenderEffect(() => _el$
|
|
4079
|
-
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;
|
|
4080
3908
|
}
|
|
4081
3909
|
}), null);
|
|
4082
|
-
insert(_el$
|
|
3910
|
+
insert(_el$32, createComponent(Show, {
|
|
4083
3911
|
when: !isPrivateWindow,
|
|
4084
3912
|
get children() {
|
|
4085
|
-
var _el$
|
|
4086
|
-
_el$
|
|
4087
|
-
addEventListener(_el$
|
|
4088
|
-
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, {
|
|
4089
3917
|
get when() {
|
|
4090
3918
|
return pendingApprovalCount() > 0;
|
|
4091
3919
|
},
|
|
4092
3920
|
get children() {
|
|
4093
|
-
var _el$
|
|
4094
|
-
insert(_el$
|
|
4095
|
-
createRenderEffect(() => setAttribute(_el$
|
|
4096
|
-
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;
|
|
4097
3925
|
}
|
|
4098
3926
|
}), null);
|
|
4099
3927
|
createRenderEffect((_p$) => {
|
|
4100
|
-
var _v$
|
|
4101
|
-
_v$
|
|
4102
|
-
_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);
|
|
4103
3931
|
return _p$;
|
|
4104
3932
|
}, {
|
|
4105
3933
|
e: void 0,
|
|
4106
3934
|
t: void 0
|
|
4107
3935
|
});
|
|
4108
|
-
return _el$
|
|
3936
|
+
return _el$40;
|
|
4109
3937
|
}
|
|
4110
3938
|
}), null);
|
|
4111
|
-
insert(_el$
|
|
3939
|
+
insert(_el$32, createComponent(Show, {
|
|
4112
3940
|
when: !isPrivateWindow,
|
|
4113
3941
|
get children() {
|
|
4114
3942
|
return [(() => {
|
|
4115
|
-
var _el$
|
|
4116
|
-
addEventListener(_el$
|
|
4117
|
-
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, {
|
|
4118
3946
|
size: 14
|
|
4119
3947
|
}));
|
|
4120
|
-
return _el$
|
|
3948
|
+
return _el$43;
|
|
4121
3949
|
})(), (() => {
|
|
4122
|
-
var _el$
|
|
4123
|
-
addEventListener(_el$
|
|
4124
|
-
return _el$
|
|
3950
|
+
var _el$44 = _tmpl$15$5();
|
|
3951
|
+
addEventListener(_el$44, "click", openSettings, true);
|
|
3952
|
+
return _el$44;
|
|
4125
3953
|
})()];
|
|
4126
3954
|
}
|
|
4127
3955
|
}), null);
|
|
4128
3956
|
createRenderEffect((_p$) => {
|
|
4129
|
-
var _v$
|
|
4130
|
-
_v$
|
|
4131
|
-
_v$
|
|
4132
|
-
_v$
|
|
4133
|
-
_v$
|
|
4134
|
-
_v$
|
|
4135
|
-
_v$
|
|
4136
|
-
_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);
|
|
4137
3965
|
return _p$;
|
|
4138
3966
|
}, {
|
|
4139
3967
|
e: void 0,
|
|
@@ -4276,7 +4104,7 @@ const HighlightNotifications = (props) => {
|
|
|
4276
4104
|
});
|
|
4277
4105
|
};
|
|
4278
4106
|
delegateEvents(["click"]);
|
|
4279
|
-
var _tmpl$$m = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _tmpl$3$j = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$i = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$
|
|
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>`);
|
|
4280
4108
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
4281
4109
|
const TOAST_EXIT_MS = 300;
|
|
4282
4110
|
function formatBytes$1(bytes) {
|
|
@@ -4373,7 +4201,7 @@ const DownloadToast = () => {
|
|
|
4373
4201
|
return downloads();
|
|
4374
4202
|
},
|
|
4375
4203
|
children: (dl) => (() => {
|
|
4376
|
-
var _el$2 = _tmpl$7$
|
|
4204
|
+
var _el$2 = _tmpl$7$b(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
4377
4205
|
insert(_el$4, () => dl.filename);
|
|
4378
4206
|
insert(_el$3, createComponent(Show, {
|
|
4379
4207
|
get when() {
|
|
@@ -4401,7 +4229,7 @@ const DownloadToast = () => {
|
|
|
4401
4229
|
createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
|
|
4402
4230
|
return _el$7;
|
|
4403
4231
|
})(), (() => {
|
|
4404
|
-
var _el$9 = _tmpl$5$
|
|
4232
|
+
var _el$9 = _tmpl$5$e();
|
|
4405
4233
|
insert(_el$9, () => formatBytes$1(dl.receivedBytes), null);
|
|
4406
4234
|
insert(_el$9, createComponent(Show, {
|
|
4407
4235
|
get when() {
|
|
@@ -4420,7 +4248,7 @@ const DownloadToast = () => {
|
|
|
4420
4248
|
return dl.state === "completed";
|
|
4421
4249
|
},
|
|
4422
4250
|
get children() {
|
|
4423
|
-
var _el$0 = _tmpl$6$
|
|
4251
|
+
var _el$0 = _tmpl$6$d(), _el$1 = _el$0.firstChild;
|
|
4424
4252
|
insert(_el$0, () => formatBytes$1(dl.receivedBytes), _el$1);
|
|
4425
4253
|
return _el$0;
|
|
4426
4254
|
}
|
|
@@ -4609,7 +4437,7 @@ const FindBar = () => {
|
|
|
4609
4437
|
});
|
|
4610
4438
|
};
|
|
4611
4439
|
delegateEvents(["input", "click"]);
|
|
4612
|
-
var _tmpl$$j = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$j = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$h = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$g = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$
|
|
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>`);
|
|
4613
4441
|
const FlowProgress = () => {
|
|
4614
4442
|
const {
|
|
4615
4443
|
runtimeState: runtimeState2
|
|
@@ -4654,7 +4482,7 @@ const FlowProgress = () => {
|
|
|
4654
4482
|
return t().steps;
|
|
4655
4483
|
},
|
|
4656
4484
|
children: (step) => (() => {
|
|
4657
|
-
var _el$12 = _tmpl$5$
|
|
4485
|
+
var _el$12 = _tmpl$5$d(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
|
|
4658
4486
|
insert(_el$14, () => step.label);
|
|
4659
4487
|
createRenderEffect(() => className(_el$12, `flow-step ${stepStatusClass(step.status)}`));
|
|
4660
4488
|
return _el$12;
|
|
@@ -4699,7 +4527,7 @@ const FlowProgress = () => {
|
|
|
4699
4527
|
return f().steps;
|
|
4700
4528
|
},
|
|
4701
4529
|
children: (step) => (() => {
|
|
4702
|
-
var _el$23 = _tmpl$5$
|
|
4530
|
+
var _el$23 = _tmpl$5$d(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
|
|
4703
4531
|
insert(_el$25, () => step.label);
|
|
4704
4532
|
createRenderEffect(() => className(_el$23, `flow-step ${stepStatusClass(step.status)}`));
|
|
4705
4533
|
return _el$23;
|
|
@@ -4740,19 +4568,66 @@ function formatTime(iso, options) {
|
|
|
4740
4568
|
...options?.includeSeconds && { second: "2-digit" }
|
|
4741
4569
|
});
|
|
4742
4570
|
}
|
|
4743
|
-
|
|
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>`);
|
|
4744
4619
|
const AgentTranscriptDock = () => {
|
|
4745
4620
|
const {
|
|
4746
4621
|
runtimeState: runtimeState2
|
|
4747
4622
|
} = useRuntime();
|
|
4748
|
-
const [mode, setMode] = createSignal("
|
|
4623
|
+
const [mode, setMode] = createSignal("off");
|
|
4749
4624
|
const [collapsed, setCollapsed] = createSignal(false);
|
|
4750
4625
|
onMount(() => {
|
|
4751
4626
|
void window.vessel.settings.get().then((settings) => {
|
|
4752
|
-
setMode(settings.agentTranscriptMode ?? "
|
|
4627
|
+
setMode(settings.agentTranscriptMode ?? "off");
|
|
4753
4628
|
});
|
|
4754
4629
|
const unsubscribe2 = window.vessel.settings.onUpdate((settings) => {
|
|
4755
|
-
setMode(settings.agentTranscriptMode ?? "
|
|
4630
|
+
setMode(settings.agentTranscriptMode ?? "off");
|
|
4756
4631
|
});
|
|
4757
4632
|
onCleanup(unsubscribe2);
|
|
4758
4633
|
});
|
|
@@ -4762,120 +4637,79 @@ const AgentTranscriptDock = () => {
|
|
|
4762
4637
|
setMode("off");
|
|
4763
4638
|
await window.vessel.settings.set("agentTranscriptMode", "off");
|
|
4764
4639
|
};
|
|
4765
|
-
const isSummary = createMemo(() => mode() === "summary");
|
|
4766
|
-
const latestEntry = createMemo(() => {
|
|
4767
|
-
const entries2 = timelineItems();
|
|
4768
|
-
return entries2.length > 0 ? entries2[0] : null;
|
|
4769
|
-
});
|
|
4770
4640
|
return createComponent(Show, {
|
|
4771
4641
|
get when() {
|
|
4772
|
-
return memo(() => mode()
|
|
4642
|
+
return memo(() => mode() === "full")() && timelineItems().length > 0;
|
|
4773
4643
|
},
|
|
4774
4644
|
get children() {
|
|
4775
|
-
|
|
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, {
|
|
4776
4649
|
get when() {
|
|
4777
|
-
return
|
|
4650
|
+
return hasStreamingEntry();
|
|
4778
4651
|
},
|
|
4779
4652
|
get children() {
|
|
4780
|
-
|
|
4781
|
-
insert(_el$, createComponent(Show, {
|
|
4782
|
-
get when() {
|
|
4783
|
-
return latestEntry();
|
|
4784
|
-
},
|
|
4785
|
-
children: (entry) => [createComponent(Show, {
|
|
4786
|
-
get when() {
|
|
4787
|
-
return hasStreamingEntry();
|
|
4788
|
-
},
|
|
4789
|
-
get children() {
|
|
4790
|
-
return _tmpl$5$d();
|
|
4791
|
-
}
|
|
4792
|
-
}), (() => {
|
|
4793
|
-
var _el$10 = _tmpl$6$d(), _el$11 = _el$10.firstChild;
|
|
4794
|
-
insert(_el$10, () => entry().label, _el$11);
|
|
4795
|
-
insert(_el$10, (() => {
|
|
4796
|
-
var _c$ = memo(() => entry().detail.length > 80);
|
|
4797
|
-
return () => _c$() ? entry().detail.slice(0, 77) + "..." : entry().detail;
|
|
4798
|
-
})(), null);
|
|
4799
|
-
return _el$10;
|
|
4800
|
-
})()]
|
|
4801
|
-
}));
|
|
4802
|
-
return _el$;
|
|
4653
|
+
return _tmpl$$i();
|
|
4803
4654
|
}
|
|
4804
|
-
}),
|
|
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, {
|
|
4805
4660
|
get when() {
|
|
4806
|
-
return !
|
|
4661
|
+
return !collapsed();
|
|
4807
4662
|
},
|
|
4808
4663
|
get children() {
|
|
4809
|
-
var _el$
|
|
4810
|
-
_el$
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
return hasStreamingEntry();
|
|
4815
|
-
},
|
|
4816
|
-
get children() {
|
|
4817
|
-
return _tmpl$2$i();
|
|
4818
|
-
}
|
|
4819
|
-
}), null);
|
|
4820
|
-
_el$8.$$click = () => setCollapsed((value) => !value);
|
|
4821
|
-
insert(_el$8, () => collapsed() ? "▴" : "▾");
|
|
4822
|
-
_el$9.$$click = () => void hideDock();
|
|
4823
|
-
insert(_el$2, createComponent(Show, {
|
|
4824
|
-
get when() {
|
|
4825
|
-
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();
|
|
4826
4669
|
},
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
e: void 0,
|
|
4856
|
-
t: void 0,
|
|
4857
|
-
a: void 0,
|
|
4858
|
-
o: void 0
|
|
4859
|
-
});
|
|
4860
|
-
return _el$13;
|
|
4861
|
-
})();
|
|
4862
|
-
}
|
|
4863
|
-
}));
|
|
4864
|
-
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
|
+
})();
|
|
4865
4698
|
}
|
|
4866
|
-
})
|
|
4867
|
-
|
|
4868
|
-
var _v$ = !!collapsed(), _v$2 = collapsed() ? "Expand" : "Collapse";
|
|
4869
|
-
_v$ !== _p$.e && _el$2.classList.toggle("collapsed", _p$.e = _v$);
|
|
4870
|
-
_v$2 !== _p$.t && setAttribute(_el$8, "data-tooltip", _p$.t = _v$2);
|
|
4871
|
-
return _p$;
|
|
4872
|
-
}, {
|
|
4873
|
-
e: void 0,
|
|
4874
|
-
t: void 0
|
|
4875
|
-
});
|
|
4876
|
-
return _el$2;
|
|
4699
|
+
}));
|
|
4700
|
+
return _el$9;
|
|
4877
4701
|
}
|
|
4878
|
-
})
|
|
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$;
|
|
4879
4713
|
}
|
|
4880
4714
|
});
|
|
4881
4715
|
};
|
|
@@ -12022,7 +11856,7 @@ const SettingsGeneral = (props) => {
|
|
|
12022
11856
|
})();
|
|
12023
11857
|
};
|
|
12024
11858
|
delegateEvents(["click", "input"]);
|
|
12025
|
-
var _tmpl$$7 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div class=settings-callout><div class=settings-callout-title>Start With Free AI</div><p class=settings-callout-copy>Connect OpenRouter and Vessel will use the free model router automatically.</p><div class=settings-inline-actions style=margin-top:12px><button type=button class=settings-secondary-btn>`), _tmpl$3$6 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$4$5 = /* @__PURE__ */ template(`<div style=display:flex;align-items:center;gap:8px><span style=width:8px;height:8px;border-radius:50%;background:var(--success);display:inline-block></span><span>Connected as `), _tmpl$5$5 = /* @__PURE__ */ template(`<p class=settings-hint><button type=button class=settings-link-btn>Disconnect`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label>Account`), _tmpl$7$4 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8$3 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9$2 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13$1 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured <code>llama-server</code> base URL. For agent loops, run <code>llama-server</code> with <code>--ctx-size 16384</code> minimum and <code>32768</code> recommended.`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-reasoning-effort>Reasoning Level</label><select id=chat-reasoning-effort class="settings-input settings-select"></select><p class=settings-hint>Applies to providers and models that expose reasoning controls. Off requests no reasoning where supported and otherwise leaves the model at its normal behavior; Max requests the strongest supported reasoning tier.`), _tmpl$15$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$16 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:<port>/mcp</code>. Changing this value restarts the MCP server immediately.</p><div class=settings-inline-actions><button type=button class=settings-secondary-btn>Regenerate MCP token</button></div></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=
|
|
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>`);
|
|
12026
11860
|
const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
|
|
12027
11861
|
id: p.id,
|
|
12028
11862
|
name: p.name,
|
|
@@ -13261,7 +13095,7 @@ const Settings = () => {
|
|
|
13261
13095
|
const [obsidianVaultPath, setObsidianVaultPath] = createSignal("");
|
|
13262
13096
|
const [mcpPort, setMcpPort] = createSignal("3100");
|
|
13263
13097
|
const [maxToolIterations, setMaxToolIterations] = createSignal("200");
|
|
13264
|
-
const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("
|
|
13098
|
+
const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("off");
|
|
13265
13099
|
const [health, setHealth] = createSignal(null);
|
|
13266
13100
|
const [defaultUrl, setDefaultUrl] = createSignal("https://start.duckduckgo.com");
|
|
13267
13101
|
const [defaultSearchEngine, setDefaultSearchEngine] = createSignal("duckduckgo");
|
|
@@ -13670,7 +13504,7 @@ const Settings = () => {
|
|
|
13670
13504
|
setObsidianVaultPath(settings.obsidianVaultPath ?? "");
|
|
13671
13505
|
setMcpPort(String(settings.mcpPort ?? 3100));
|
|
13672
13506
|
setMaxToolIterations(String(settings.maxToolIterations ?? 200));
|
|
13673
|
-
setAgentTranscriptMode(settings.agentTranscriptMode ?? "
|
|
13507
|
+
setAgentTranscriptMode(settings.agentTranscriptMode ?? "off");
|
|
13674
13508
|
setHealth(runtimeHealth);
|
|
13675
13509
|
const cp = settings.chatProvider ?? null;
|
|
13676
13510
|
setChatEnabled(cp !== null);
|