@quanta-intellect/vessel-browser 0.1.97 → 0.1.101
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.
|
@@ -3003,7 +3003,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
3003
3003
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
3004
3004
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
3005
3005
|
};
|
|
3006
|
-
var _tmpl$$n = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$m = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$j = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$c = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$8$9 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$7 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>×`), _tmpl$1$6 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$6 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$11$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$4 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$4 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$4 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$
|
|
3006
|
+
var _tmpl$$n = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$m = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$j = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$c = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$8$9 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$7 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>×`), _tmpl$1$6 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$6 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$11$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$4 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$4 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$4 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$2 = /* @__PURE__ */ template(`<li>`);
|
|
3007
3007
|
const AddressBar = (props) => {
|
|
3008
3008
|
const {
|
|
3009
3009
|
activeTab,
|
|
@@ -3506,7 +3506,7 @@ const AddressBar = (props) => {
|
|
|
3506
3506
|
return parseDiffSummaryParts(burst.summary);
|
|
3507
3507
|
},
|
|
3508
3508
|
children: (part) => (() => {
|
|
3509
|
-
var _el$58 = _tmpl$22$
|
|
3509
|
+
var _el$58 = _tmpl$22$4(), _el$60 = _el$58.firstChild;
|
|
3510
3510
|
insert(_el$58, createComponent(Show, {
|
|
3511
3511
|
get when() {
|
|
3512
3512
|
return part.section;
|
|
@@ -3548,7 +3548,7 @@ const AddressBar = (props) => {
|
|
|
3548
3548
|
return change.before;
|
|
3549
3549
|
},
|
|
3550
3550
|
get children() {
|
|
3551
|
-
var _el$68 = _tmpl$23$
|
|
3551
|
+
var _el$68 = _tmpl$23$4(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
|
|
3552
3552
|
insert(_el$70, () => change.before);
|
|
3553
3553
|
return _el$68;
|
|
3554
3554
|
}
|
|
@@ -3558,7 +3558,7 @@ const AddressBar = (props) => {
|
|
|
3558
3558
|
return change.after;
|
|
3559
3559
|
},
|
|
3560
3560
|
get children() {
|
|
3561
|
-
var _el$71 = _tmpl$24$
|
|
3561
|
+
var _el$71 = _tmpl$24$4(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
|
|
3562
3562
|
insert(_el$73, () => change.after);
|
|
3563
3563
|
return _el$71;
|
|
3564
3564
|
}
|
|
@@ -3720,7 +3720,7 @@ const AddressBar = (props) => {
|
|
|
3720
3720
|
})();
|
|
3721
3721
|
};
|
|
3722
3722
|
delegateEvents(["click", "input", "keydown", "mousedown"]);
|
|
3723
|
-
var _tmpl$$m = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$l = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
|
|
3723
|
+
var _tmpl$$m = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$l = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
|
|
3724
3724
|
const TOAST_DURATION_MS$1 = 4200;
|
|
3725
3725
|
const TOAST_EXIT_MS$2 = 300;
|
|
3726
3726
|
function isBookmarkToastCandidate(action) {
|
|
@@ -3786,9 +3786,10 @@ const BookmarkNotifications = () => {
|
|
|
3786
3786
|
return toasts();
|
|
3787
3787
|
},
|
|
3788
3788
|
children: (toast) => (() => {
|
|
3789
|
-
var _el$2 = _tmpl$2$l(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
|
|
3790
|
-
insert(_el$
|
|
3791
|
-
|
|
3789
|
+
var _el$2 = _tmpl$2$l(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
|
|
3790
|
+
insert(_el$4, () => toast.title);
|
|
3791
|
+
_el$5.$$click = () => dismissToast(toast.id);
|
|
3792
|
+
insert(_el$6, () => toast.message);
|
|
3792
3793
|
createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!toast.leaving));
|
|
3793
3794
|
return _el$2;
|
|
3794
3795
|
})()
|
|
@@ -3796,7 +3797,8 @@ const BookmarkNotifications = () => {
|
|
|
3796
3797
|
return _el$;
|
|
3797
3798
|
})();
|
|
3798
3799
|
};
|
|
3799
|
-
|
|
3800
|
+
delegateEvents(["click"]);
|
|
3801
|
+
var _tmpl$$l = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
|
|
3800
3802
|
const TOAST_DURATION_MS = 3e3;
|
|
3801
3803
|
const TOAST_EXIT_MS$1 = 300;
|
|
3802
3804
|
const HighlightNotifications = (props) => {
|
|
@@ -3835,14 +3837,16 @@ const HighlightNotifications = (props) => {
|
|
|
3835
3837
|
return memo(() => !!visible())() && current();
|
|
3836
3838
|
},
|
|
3837
3839
|
get children() {
|
|
3838
|
-
var _el$ = _tmpl$$l(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
|
|
3839
|
-
insert(_el$
|
|
3840
|
-
|
|
3840
|
+
var _el$ = _tmpl$$l(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
|
|
3841
|
+
insert(_el$4, () => current().title);
|
|
3842
|
+
_el$5.$$click = dismiss;
|
|
3843
|
+
insert(_el$6, () => current().message);
|
|
3841
3844
|
createRenderEffect(() => _el$2.classList.toggle("bookmark-toast-leaving", !!leaving()));
|
|
3842
3845
|
return _el$;
|
|
3843
3846
|
}
|
|
3844
3847
|
});
|
|
3845
3848
|
};
|
|
3849
|
+
delegateEvents(["click"]);
|
|
3846
3850
|
var _tmpl$$k = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$k = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _tmpl$3$i = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$i = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$f = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$e = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$b = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
|
|
3847
3851
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
3848
3852
|
const TOAST_EXIT_MS = 300;
|
|
@@ -6221,7 +6225,7 @@ function renderTable(block) {
|
|
|
6221
6225
|
(cell, i) => `<td${alignAttr(i)}>${applyInlineMarkdown(cell)}</td>`
|
|
6222
6226
|
).join("")}</tr>`
|
|
6223
6227
|
).join("");
|
|
6224
|
-
return `<table><thead>${thead}</thead><tbody>${tbody}</tbody></table>`;
|
|
6228
|
+
return `<div class="markdown-table-scroll"><table><thead>${thead}</thead><tbody>${tbody}</tbody></table></div>`;
|
|
6225
6229
|
}
|
|
6226
6230
|
function renderBlock(block) {
|
|
6227
6231
|
const trimmed = block.trim();
|
|
@@ -6742,7 +6746,7 @@ function renderKitPrompt(kit, values) {
|
|
|
6742
6746
|
(_, key) => values[key] ?? ""
|
|
6743
6747
|
);
|
|
6744
6748
|
}
|
|
6745
|
-
var _tmpl$$d = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$c = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$b = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$b = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$9 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$8 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$6 = /* @__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$
|
|
6749
|
+
var _tmpl$$d = /* @__PURE__ */ template(`<div class=kit-upsell><div class=kit-upsell-icon aria-hidden=true></div><p class=kit-upsell-title>Vessel Premium</p><p class=kit-upsell-body>Automation Kits are a premium feature. Upgrade to unlock pre-built workflows you can launch with one click.</p><button class="agent-primary-button kit-upsell-btn"type=button>Start 7-day free trial — $5.99/mo after`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=kit-list-header><span class=agent-panel-title>Automation Kits <span class=kit-beta-tag>Beta</span></span><div class=kit-list-header-actions><span class=kit-list-count> kits</span><button class=kit-install-btn type=button title="Install a kit from a .kit.json file">+ Install`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=kit-install-error><span></span><button class=kit-install-error-dismiss type=button aria-label=Dismiss>×`), _tmpl$4$c = /* @__PURE__ */ template(`<div class=kit-list>`), _tmpl$5$b = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Scheduled</span><span class=kit-list-count>`), _tmpl$6$b = /* @__PURE__ */ template(`<div class=kit-sched-list>`), _tmpl$7$9 = /* @__PURE__ */ template(`<div class=kit-sched-section><span>Recent Activity</span><span class=kit-list-count>`), _tmpl$8$8 = /* @__PURE__ */ template(`<div class=kit-activity-list>`), _tmpl$9$6 = /* @__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$1 = /* @__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>`);
|
|
6746
6750
|
const ICON_MAP = {
|
|
6747
6751
|
BookOpen: book_open_default,
|
|
6748
6752
|
Tag: tag_default,
|
|
@@ -7061,7 +7065,7 @@ const AutomationTab = (props) => {
|
|
|
7061
7065
|
};
|
|
7062
7066
|
const timeValue = () => `${String(schedHour()).padStart(2, "0")}:${String(schedMinute()).padStart(2, "0")}`;
|
|
7063
7067
|
return (() => {
|
|
7064
|
-
var _el$ = _tmpl$23$
|
|
7068
|
+
var _el$ = _tmpl$23$3();
|
|
7065
7069
|
insert(_el$, createComponent(Show, {
|
|
7066
7070
|
get when() {
|
|
7067
7071
|
return memo(() => !!!premiumData.loading)() && !isPremium();
|
|
@@ -7118,7 +7122,7 @@ const AutomationTab = (props) => {
|
|
|
7118
7122
|
return kit.estimatedMinutes !== void 0;
|
|
7119
7123
|
},
|
|
7120
7124
|
get children() {
|
|
7121
|
-
var _el$78 = _tmpl$24$
|
|
7125
|
+
var _el$78 = _tmpl$24$3(), _el$79 = _el$78.firstChild, _el$81 = _el$79.nextSibling;
|
|
7122
7126
|
_el$81.nextSibling;
|
|
7123
7127
|
insert(_el$78, () => kit.estimatedMinutes, _el$81);
|
|
7124
7128
|
return _el$78;
|
|
@@ -7504,7 +7508,7 @@ const AutomationTab = (props) => {
|
|
|
7504
7508
|
return editingJob() !== null;
|
|
7505
7509
|
},
|
|
7506
7510
|
get children() {
|
|
7507
|
-
var _el$54 = _tmpl$22$
|
|
7511
|
+
var _el$54 = _tmpl$22$3(), _el$55 = _el$54.firstChild, _el$56 = _el$55.firstChild, _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling, _el$59 = _el$56.nextSibling, _el$70 = _el$59.nextSibling, _el$71 = _el$70.firstChild, _el$72 = _el$71.nextSibling;
|
|
7508
7512
|
_el$54.$$click = () => setEditingJob(null);
|
|
7509
7513
|
_el$55.$$click = (e) => e.stopPropagation();
|
|
7510
7514
|
insert(_el$58, () => editingJob().kitName);
|
|
@@ -7587,6 +7591,7 @@ const initialState = {
|
|
|
7587
7591
|
includeTraces: false,
|
|
7588
7592
|
objectives: null,
|
|
7589
7593
|
threads: [],
|
|
7594
|
+
threadProgress: [],
|
|
7590
7595
|
threadFindings: [],
|
|
7591
7596
|
report: null,
|
|
7592
7597
|
subAgentTraces: [],
|
|
@@ -7638,6 +7643,9 @@ function useResearch() {
|
|
|
7638
7643
|
cancel() {
|
|
7639
7644
|
return window.vessel.research.cancel();
|
|
7640
7645
|
},
|
|
7646
|
+
stopAndSynthesize() {
|
|
7647
|
+
return window.vessel.research.stopAndSynthesize();
|
|
7648
|
+
},
|
|
7641
7649
|
exportReport() {
|
|
7642
7650
|
return window.vessel.research.exportReport();
|
|
7643
7651
|
},
|
|
@@ -7654,7 +7662,7 @@ function useResearch() {
|
|
|
7654
7662
|
}
|
|
7655
7663
|
};
|
|
7656
7664
|
}
|
|
7657
|
-
var _tmpl$$c = /* @__PURE__ */ template(`<div class=markdown-content>`), _tmpl$2$c = /* @__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$b = /* @__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$5 = /* @__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(`<
|
|
7665
|
+
var _tmpl$$c = /* @__PURE__ */ template(`<div class=markdown-content>`), _tmpl$2$c = /* @__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$b = /* @__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$5 = /* @__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`);
|
|
7658
7666
|
const ResearchBriefMarkdown = (props) => {
|
|
7659
7667
|
const html2 = createMemo(() => renderMarkdown(props.content));
|
|
7660
7668
|
return (() => {
|
|
@@ -7692,12 +7700,16 @@ function uniqueQuickReplies(options) {
|
|
|
7692
7700
|
return true;
|
|
7693
7701
|
});
|
|
7694
7702
|
}
|
|
7695
|
-
const YES_NO_QUESTION_PATTERN =
|
|
7703
|
+
const YES_NO_QUESTION_PATTERN = /^\s*(?:do you want|should (?:i|we|vessel)|would you like|is it okay|okay to|shall (?:i|we))\b/i;
|
|
7696
7704
|
const PROCEED_QUESTION_PATTERN = /\b(?:proceed|continue|use defaults?|make assumptions?|sensible defaults?)\b/i;
|
|
7697
|
-
const EXPLICIT_OPTION_PREFIX = /^\s*(?:[
|
|
7705
|
+
const EXPLICIT_OPTION_PREFIX = /^\s*(?:[-*+•–—]|\d+[.)]|\(\d+\)|[A-Za-z][.)]|\([A-Za-z]\)|Option\s+\d+[::])\s+/i;
|
|
7706
|
+
const SENTENCE_STARTER = /^(?:Here|These|They|You|I\s|We\s|This|That|If|When|Because|Also|Please|Let|Will|Would|Could|Should|Can|May|Might|Must|Shall)\b/i;
|
|
7707
|
+
const MAX_QUICK_REPLY_LABEL_LENGTH = 180;
|
|
7698
7708
|
function makeQuickReply(label) {
|
|
7699
|
-
const cleaned = label.replace(EXPLICIT_OPTION_PREFIX, "").replace(/\s+/g, " ").trim().replace(/[.?!:]$/, "");
|
|
7700
|
-
if (cleaned.length < 2 || cleaned.length >
|
|
7709
|
+
const cleaned = label.replace(EXPLICIT_OPTION_PREFIX, "").replace(/[*_`~]/g, "").replace(/\s+/g, " ").trim().replace(/[.?!:]$/, "");
|
|
7710
|
+
if (cleaned.length < 2 || cleaned.length > MAX_QUICK_REPLY_LABEL_LENGTH) {
|
|
7711
|
+
return null;
|
|
7712
|
+
}
|
|
7701
7713
|
return {
|
|
7702
7714
|
label: cleaned,
|
|
7703
7715
|
response: `Let's use: ${cleaned}.`
|
|
@@ -7710,22 +7722,81 @@ function isExplicitOptionLine(line) {
|
|
|
7710
7722
|
return !/[?]$/.test(cleaned);
|
|
7711
7723
|
}
|
|
7712
7724
|
function extractDelimitedOptions(text2) {
|
|
7713
|
-
return text2.split(/\s*(?:;|,|\/|\||\bor\b)\s*/i).map(makeQuickReply).filter((option) => option !== null);
|
|
7725
|
+
return text2.split(/\s*(?:;|,|\/|\||\s+-\s+|\bor\b)\s*/i).map(makeQuickReply).filter((option) => option !== null);
|
|
7714
7726
|
}
|
|
7715
7727
|
function extractFollowUpOptions(prompt) {
|
|
7716
7728
|
const lines = prompt.split("\n");
|
|
7717
7729
|
const options = [];
|
|
7718
7730
|
for (let i = 0; i < lines.length - 1; i++) {
|
|
7719
7731
|
const line = lines[i].trim();
|
|
7720
|
-
const nextLine = lines[i + 1].trim();
|
|
7721
7732
|
if (!line.includes("?")) continue;
|
|
7722
|
-
|
|
7733
|
+
let j = i + 1;
|
|
7734
|
+
while (j < lines.length && !lines[j].trim()) j++;
|
|
7735
|
+
if (j >= lines.length) continue;
|
|
7736
|
+
const nextLine = lines[j].trim();
|
|
7723
7737
|
if (EXPLICIT_OPTION_PREFIX.test(nextLine)) continue;
|
|
7724
7738
|
if (!/[,;\/|]|\bor\b/.test(nextLine)) continue;
|
|
7725
7739
|
options.push(...extractDelimitedOptions(nextLine));
|
|
7726
7740
|
}
|
|
7727
7741
|
return uniqueQuickReplies(options);
|
|
7728
7742
|
}
|
|
7743
|
+
function extractInlineOptions(prompt) {
|
|
7744
|
+
const options = [];
|
|
7745
|
+
for (const line of prompt.split("\n")) {
|
|
7746
|
+
const trimmed = line.trim();
|
|
7747
|
+
if (!/\?/.test(trimmed)) continue;
|
|
7748
|
+
const afterQuestion = trimmed.slice(trimmed.lastIndexOf("?") + 1).trim();
|
|
7749
|
+
if (!afterQuestion) continue;
|
|
7750
|
+
if (/\b(?:options?|choices?|examples?|example answers?|examples? include|sample answers?|sample responses?)\b.*[::]/i.test(afterQuestion)) {
|
|
7751
|
+
continue;
|
|
7752
|
+
}
|
|
7753
|
+
const hasDelimiters = /[,;\/|]|\bor\b/.test(afterQuestion);
|
|
7754
|
+
const hasDashList = /\s+-\s+/.test(afterQuestion);
|
|
7755
|
+
if (!hasDelimiters && !hasDashList) continue;
|
|
7756
|
+
if (hasDelimiters) {
|
|
7757
|
+
options.push(...extractDelimitedOptions(afterQuestion));
|
|
7758
|
+
}
|
|
7759
|
+
if (hasDashList) {
|
|
7760
|
+
const parts = afterQuestion.split(/\s+-\s+/);
|
|
7761
|
+
for (const part of parts) {
|
|
7762
|
+
const option = makeQuickReply(part);
|
|
7763
|
+
if (option) options.push(option);
|
|
7764
|
+
}
|
|
7765
|
+
}
|
|
7766
|
+
}
|
|
7767
|
+
return uniqueQuickReplies(options);
|
|
7768
|
+
}
|
|
7769
|
+
function extractImplicitOptions(prompt) {
|
|
7770
|
+
const lines = prompt.split("\n");
|
|
7771
|
+
const options = [];
|
|
7772
|
+
let questionIdx = -1;
|
|
7773
|
+
for (let i2 = lines.length - 1; i2 >= 0; i2--) {
|
|
7774
|
+
if (lines[i2].includes("?")) {
|
|
7775
|
+
questionIdx = i2;
|
|
7776
|
+
break;
|
|
7777
|
+
}
|
|
7778
|
+
}
|
|
7779
|
+
if (questionIdx < 0) return [];
|
|
7780
|
+
let i = questionIdx + 1;
|
|
7781
|
+
while (i < lines.length && !lines[i].trim()) i++;
|
|
7782
|
+
const candidates = [];
|
|
7783
|
+
for (; i < lines.length; i++) {
|
|
7784
|
+
const line = lines[i].trim();
|
|
7785
|
+
if (!line) break;
|
|
7786
|
+
if (EXPLICIT_OPTION_PREFIX.test(line)) break;
|
|
7787
|
+
if (SENTENCE_STARTER.test(line)) break;
|
|
7788
|
+
const hasDelimiters = /[,;\/|]|\bor\b/.test(line);
|
|
7789
|
+
if (line.length > 80 && !hasDelimiters) break;
|
|
7790
|
+
candidates.push(line);
|
|
7791
|
+
}
|
|
7792
|
+
if (candidates.length >= 2 && candidates.length <= 6) {
|
|
7793
|
+
for (const candidate of candidates) {
|
|
7794
|
+
const option = makeQuickReply(candidate);
|
|
7795
|
+
if (option) options.push(option);
|
|
7796
|
+
}
|
|
7797
|
+
}
|
|
7798
|
+
return uniqueQuickReplies(options);
|
|
7799
|
+
}
|
|
7729
7800
|
function extractExampleQuickReplies(prompt) {
|
|
7730
7801
|
const options = [];
|
|
7731
7802
|
for (const line of prompt.split("\n")) {
|
|
@@ -7753,9 +7824,22 @@ function extractExplicitQuickReplies(prompt) {
|
|
|
7753
7824
|
if (inlineMatch) {
|
|
7754
7825
|
options.push(...extractDelimitedOptions(inlineMatch[1]));
|
|
7755
7826
|
}
|
|
7756
|
-
|
|
7757
|
-
|
|
7758
|
-
|
|
7827
|
+
options.push(...extractInlineOptions(prompt));
|
|
7828
|
+
const lines = prompt.split("\n");
|
|
7829
|
+
for (let i = 0; i < lines.length; i++) {
|
|
7830
|
+
if (!/\b(?:options?|choices?)\s*[::]/i.test(lines[i])) continue;
|
|
7831
|
+
const restOfLine = lines[i].replace(/^.*?\b(?:options?|choices?)\s*[::]\s*/i, "").trim();
|
|
7832
|
+
if (restOfLine) {
|
|
7833
|
+
options.push(...extractDelimitedOptions(restOfLine));
|
|
7834
|
+
}
|
|
7835
|
+
let j = i + 1;
|
|
7836
|
+
while (j < lines.length && !lines[j].trim()) j++;
|
|
7837
|
+
for (; j < lines.length; j++) {
|
|
7838
|
+
const line = lines[j].trim();
|
|
7839
|
+
if (!line) break;
|
|
7840
|
+
const option = makeQuickReply(line);
|
|
7841
|
+
if (option) options.push(option);
|
|
7842
|
+
}
|
|
7759
7843
|
}
|
|
7760
7844
|
options.push(...extractExampleQuickReplies(prompt));
|
|
7761
7845
|
options.push(...extractFollowUpOptions(prompt));
|
|
@@ -7766,6 +7850,10 @@ function buildQuickReplies(prompt) {
|
|
|
7766
7850
|
if (explicitOptions.length > 0) {
|
|
7767
7851
|
return explicitOptions.slice(0, 6);
|
|
7768
7852
|
}
|
|
7853
|
+
const implicitOptions = extractImplicitOptions(prompt);
|
|
7854
|
+
if (implicitOptions.length > 0) {
|
|
7855
|
+
return implicitOptions.slice(0, 6);
|
|
7856
|
+
}
|
|
7769
7857
|
if (YES_NO_QUESTION_PATTERN.test(prompt)) {
|
|
7770
7858
|
return [{
|
|
7771
7859
|
label: "Yes",
|
|
@@ -7801,7 +7889,10 @@ function pickResearchClarificationQuickReplies(clarification) {
|
|
|
7801
7889
|
if (parsedQuestionOptions.length > 0 && (structuredOptions.length === 0 || structuredOptions.every(isDefaultQuickReply))) {
|
|
7802
7890
|
return parsedQuestionOptions;
|
|
7803
7891
|
}
|
|
7804
|
-
|
|
7892
|
+
if (parsedQuestionOptions.length > structuredOptions.length) {
|
|
7893
|
+
return uniqueQuickReplies([...structuredOptions, ...parsedQuestionOptions]).slice(0, 6);
|
|
7894
|
+
}
|
|
7895
|
+
return uniqueQuickReplies(structuredOptions).slice(0, 6);
|
|
7805
7896
|
}
|
|
7806
7897
|
function findLatestAssistantQuickReplyTarget(messages2) {
|
|
7807
7898
|
for (let i = messages2.length - 1; i >= 0; i -= 1) {
|
|
@@ -7875,6 +7966,18 @@ const ResearchDesk = () => {
|
|
|
7875
7966
|
});
|
|
7876
7967
|
const shouldShowQuickRepliesForMessage = (content) => quickReplies().length > 0 && content.trim() === latestAssistantQuickReplyTarget();
|
|
7877
7968
|
const isBriefStarting = createMemo(() => state().phase === "briefing" && transcriptMessages().length === 0 && !streamingText2() && pendingQueryCount() === 0);
|
|
7969
|
+
const researchProgress = createMemo(() => {
|
|
7970
|
+
const progress = state().threadProgress;
|
|
7971
|
+
const total = Math.max(state().threads.length, progress.length, 0);
|
|
7972
|
+
const complete = progress.filter((item) => item.status === "completed" || item.status === "failed").length;
|
|
7973
|
+
const active = progress.filter((item) => item.status === "running" || item.status === "stopping").length;
|
|
7974
|
+
return {
|
|
7975
|
+
total,
|
|
7976
|
+
complete: Math.min(complete, total),
|
|
7977
|
+
active,
|
|
7978
|
+
progress
|
|
7979
|
+
};
|
|
7980
|
+
});
|
|
7878
7981
|
const sendBriefMessage = async (message) => {
|
|
7879
7982
|
const trimmed = message.trim();
|
|
7880
7983
|
if (!trimmed) return;
|
|
@@ -7966,19 +8069,19 @@ const ResearchDesk = () => {
|
|
|
7966
8069
|
return memo(() => message.role === "assistant")() && shouldShowQuickRepliesForMessage(message.content);
|
|
7967
8070
|
},
|
|
7968
8071
|
get children() {
|
|
7969
|
-
var _el$
|
|
7970
|
-
insert(_el$
|
|
8072
|
+
var _el$46 = _tmpl$17$2();
|
|
8073
|
+
insert(_el$46, createComponent(For, {
|
|
7971
8074
|
get each() {
|
|
7972
8075
|
return quickReplies();
|
|
7973
8076
|
},
|
|
7974
8077
|
children: (option) => (() => {
|
|
7975
|
-
var _el$
|
|
7976
|
-
_el$
|
|
7977
|
-
insert(_el$
|
|
7978
|
-
return _el$
|
|
8078
|
+
var _el$47 = _tmpl$18$2();
|
|
8079
|
+
_el$47.$$click = () => void sendBriefMessage(option.response);
|
|
8080
|
+
insert(_el$47, () => option.label);
|
|
8081
|
+
return _el$47;
|
|
7979
8082
|
})()
|
|
7980
8083
|
}));
|
|
7981
|
-
return _el$
|
|
8084
|
+
return _el$46;
|
|
7982
8085
|
}
|
|
7983
8086
|
})]
|
|
7984
8087
|
}), null);
|
|
@@ -8067,30 +8170,49 @@ const ResearchDesk = () => {
|
|
|
8067
8170
|
return state().objectives;
|
|
8068
8171
|
},
|
|
8069
8172
|
children: (obj) => (() => {
|
|
8070
|
-
var _el$
|
|
8071
|
-
_el$
|
|
8072
|
-
|
|
8073
|
-
_el$
|
|
8074
|
-
|
|
8075
|
-
|
|
8076
|
-
|
|
8077
|
-
|
|
8078
|
-
var _el$55 = _tmpl$20$2(), _el$56 = _el$55.firstChild, _el$58 = _el$56.nextSibling;
|
|
8079
|
-
_el$58.nextSibling;
|
|
8080
|
-
insert(_el$55, () => t.label, _el$56);
|
|
8081
|
-
insert(_el$55, () => t.sourceBudget, _el$58);
|
|
8082
|
-
return _el$55;
|
|
8173
|
+
var _el$48 = _tmpl$19$2(), _el$49 = _el$48.firstChild, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$52 = _el$49.nextSibling, _el$53 = _el$52.firstChild, _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling, _el$56 = _el$53.nextSibling, _el$57 = _el$52.nextSibling, _el$58 = _el$57.firstChild, _el$59 = _el$58.firstChild, _el$60 = _el$58.nextSibling, _el$61 = _el$60.firstChild, _el$62 = _el$57.nextSibling, _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling;
|
|
8174
|
+
insert(_el$51, () => obj().researchQuestion);
|
|
8175
|
+
insert(_el$55, () => obj().threads.length);
|
|
8176
|
+
insert(_el$56, () => obj().threads.map((t) => (() => {
|
|
8177
|
+
var _el$65 = _tmpl$20$2(), _el$66 = _el$65.firstChild, _el$67 = _el$66.nextSibling, _el$68 = _el$67.firstChild;
|
|
8178
|
+
insert(_el$66, () => t.label);
|
|
8179
|
+
insert(_el$67, () => t.sourceBudget, _el$68);
|
|
8180
|
+
return _el$65;
|
|
8083
8181
|
})()));
|
|
8084
|
-
_el$
|
|
8085
|
-
|
|
8086
|
-
|
|
8182
|
+
insert(_el$48, createComponent(Show, {
|
|
8183
|
+
get when() {
|
|
8184
|
+
return Array.from(new Set(obj().threads.flatMap((thread) => thread.blockedDomains)));
|
|
8185
|
+
},
|
|
8186
|
+
children: (blockedDomains) => createComponent(Show, {
|
|
8187
|
+
get when() {
|
|
8188
|
+
return blockedDomains().length > 0;
|
|
8189
|
+
},
|
|
8190
|
+
get children() {
|
|
8191
|
+
var _el$69 = _tmpl$21$2(), _el$70 = _el$69.firstChild, _el$71 = _el$70.nextSibling;
|
|
8192
|
+
insert(_el$71, createComponent(For, {
|
|
8193
|
+
get each() {
|
|
8194
|
+
return blockedDomains();
|
|
8195
|
+
},
|
|
8196
|
+
children: (domain) => (() => {
|
|
8197
|
+
var _el$72 = _tmpl$22$2();
|
|
8198
|
+
insert(_el$72, domain);
|
|
8199
|
+
return _el$72;
|
|
8200
|
+
})()
|
|
8201
|
+
}));
|
|
8202
|
+
return _el$69;
|
|
8203
|
+
}
|
|
8204
|
+
})
|
|
8205
|
+
}), _el$57);
|
|
8206
|
+
_el$59.addEventListener("change", (e) => research.setMode(e.currentTarget.checked ? "walk-away" : "interactive"));
|
|
8207
|
+
_el$61.addEventListener("change", (e) => research.setTraces(e.currentTarget.checked));
|
|
8208
|
+
_el$63.$$click = () => research.approveObjectives({
|
|
8087
8209
|
supervisionMode: state().supervisionMode,
|
|
8088
8210
|
includeTraces: state().includeTraces
|
|
8089
8211
|
});
|
|
8090
|
-
_el$
|
|
8091
|
-
createRenderEffect(() => _el$
|
|
8092
|
-
createRenderEffect(() => _el$
|
|
8093
|
-
return _el$
|
|
8212
|
+
_el$64.$$click = () => research.cancel();
|
|
8213
|
+
createRenderEffect(() => _el$59.checked = state().supervisionMode === "walk-away");
|
|
8214
|
+
createRenderEffect(() => _el$61.checked = state().includeTraces);
|
|
8215
|
+
return _el$48;
|
|
8094
8216
|
})()
|
|
8095
8217
|
}), null);
|
|
8096
8218
|
return _el$25;
|
|
@@ -8100,28 +8222,50 @@ const ResearchDesk = () => {
|
|
|
8100
8222
|
return state().phase === "executing";
|
|
8101
8223
|
},
|
|
8102
8224
|
get children() {
|
|
8103
|
-
var _el$27 = _tmpl$13$3();
|
|
8104
|
-
_el$
|
|
8105
|
-
|
|
8225
|
+
var _el$27 = _tmpl$13$3(), _el$28 = _el$27.firstChild, _el$29 = _el$28.nextSibling, _el$30 = _el$29.firstChild, _el$31 = _el$30.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$33.firstChild, _el$36 = _el$34.nextSibling;
|
|
8226
|
+
_el$36.nextSibling;
|
|
8227
|
+
var _el$38 = _el$29.nextSibling, _el$39 = _el$38.firstChild, _el$40 = _el$39.nextSibling;
|
|
8228
|
+
insert(_el$33, () => researchProgress().complete, _el$34);
|
|
8229
|
+
insert(_el$33, () => researchProgress().total, _el$36);
|
|
8230
|
+
insert(_el$33, createComponent(Show, {
|
|
8106
8231
|
get when() {
|
|
8107
|
-
return
|
|
8232
|
+
return researchProgress().active > 0;
|
|
8108
8233
|
},
|
|
8109
8234
|
get children() {
|
|
8110
|
-
|
|
8111
|
-
_el$32.nextSibling;
|
|
8112
|
-
insert(_el$29, () => state().threadFindings.length, _el$30);
|
|
8113
|
-
insert(_el$29, () => state().threads.length, _el$32);
|
|
8114
|
-
return _el$29;
|
|
8235
|
+
return [" ", "· ", memo(() => researchProgress().active), " active"];
|
|
8115
8236
|
}
|
|
8116
8237
|
}), null);
|
|
8238
|
+
insert(_el$27, createComponent(Show, {
|
|
8239
|
+
get when() {
|
|
8240
|
+
return researchProgress().progress.length > 0;
|
|
8241
|
+
},
|
|
8242
|
+
get children() {
|
|
8243
|
+
var _el$37 = _tmpl$10$4();
|
|
8244
|
+
insert(_el$37, createComponent(For, {
|
|
8245
|
+
get each() {
|
|
8246
|
+
return researchProgress().progress;
|
|
8247
|
+
},
|
|
8248
|
+
children: (thread) => (() => {
|
|
8249
|
+
var _el$73 = _tmpl$23$2(), _el$74 = _el$73.firstChild, _el$75 = _el$74.nextSibling;
|
|
8250
|
+
insert(_el$74, () => thread.threadLabel);
|
|
8251
|
+
insert(_el$75, () => thread.message);
|
|
8252
|
+
createRenderEffect(() => className(_el$73, `research-thread-progress ${thread.status}`));
|
|
8253
|
+
return _el$73;
|
|
8254
|
+
})()
|
|
8255
|
+
}));
|
|
8256
|
+
return _el$37;
|
|
8257
|
+
}
|
|
8258
|
+
}), _el$38);
|
|
8259
|
+
_el$39.$$click = () => research.cancel();
|
|
8260
|
+
_el$40.$$click = () => research.stopAndSynthesize();
|
|
8117
8261
|
insert(_el$27, createComponent(Show, {
|
|
8118
8262
|
get when() {
|
|
8119
8263
|
return state().supervisionMode === "interactive";
|
|
8120
8264
|
},
|
|
8121
8265
|
get children() {
|
|
8122
|
-
var _el$
|
|
8123
|
-
_el$
|
|
8124
|
-
return _el$
|
|
8266
|
+
var _el$41 = _tmpl$11$4();
|
|
8267
|
+
_el$41.$$click = () => research.setMode("walk-away");
|
|
8268
|
+
return _el$41;
|
|
8125
8269
|
}
|
|
8126
8270
|
}), null);
|
|
8127
8271
|
insert(_el$27, createComponent(Show, {
|
|
@@ -8129,9 +8273,9 @@ const ResearchDesk = () => {
|
|
|
8129
8273
|
return state().supervisionMode === "walk-away";
|
|
8130
8274
|
},
|
|
8131
8275
|
get children() {
|
|
8132
|
-
var _el$
|
|
8133
|
-
_el$
|
|
8134
|
-
return _el$
|
|
8276
|
+
var _el$42 = _tmpl$12$4();
|
|
8277
|
+
_el$42.$$click = () => research.setMode("interactive");
|
|
8278
|
+
return _el$42;
|
|
8135
8279
|
}
|
|
8136
8280
|
}), null);
|
|
8137
8281
|
return _el$27;
|
|
@@ -8148,23 +8292,23 @@ const ResearchDesk = () => {
|
|
|
8148
8292
|
return state().phase === "delivered";
|
|
8149
8293
|
},
|
|
8150
8294
|
get children() {
|
|
8151
|
-
var _el$
|
|
8152
|
-
_el$
|
|
8153
|
-
insert(_el$
|
|
8295
|
+
var _el$44 = _tmpl$15$3();
|
|
8296
|
+
_el$44.firstChild;
|
|
8297
|
+
insert(_el$44, createComponent(Show, {
|
|
8154
8298
|
get when() {
|
|
8155
8299
|
return state().report;
|
|
8156
8300
|
},
|
|
8157
8301
|
children: (report) => (() => {
|
|
8158
|
-
var _el$
|
|
8159
|
-
insert(_el$
|
|
8160
|
-
insert(_el$
|
|
8161
|
-
insert(_el$
|
|
8162
|
-
_el$
|
|
8163
|
-
_el$
|
|
8164
|
-
return _el$
|
|
8302
|
+
var _el$76 = _tmpl$24$2(), _el$77 = _el$76.firstChild, _el$78 = _el$77.nextSibling, _el$79 = _el$78.firstChild, _el$80 = _el$78.nextSibling, _el$81 = _el$80.firstChild, _el$82 = _el$80.nextSibling, _el$83 = _el$82.nextSibling;
|
|
8303
|
+
insert(_el$77, () => report().title);
|
|
8304
|
+
insert(_el$78, () => report().executiveSummary.slice(0, 300), _el$79);
|
|
8305
|
+
insert(_el$80, () => report().sourceIndex.length, _el$81);
|
|
8306
|
+
_el$82.$$click = () => research.exportReport();
|
|
8307
|
+
_el$83.$$click = () => research.cancel();
|
|
8308
|
+
return _el$76;
|
|
8165
8309
|
})()
|
|
8166
8310
|
}), null);
|
|
8167
|
-
return _el$
|
|
8311
|
+
return _el$44;
|
|
8168
8312
|
}
|
|
8169
8313
|
})];
|
|
8170
8314
|
}
|
|
@@ -11296,7 +11440,8 @@ const SettingsVaults = (props) => {
|
|
|
11296
11440
|
})();
|
|
11297
11441
|
};
|
|
11298
11442
|
delegateEvents(["click", "input"]);
|
|
11299
|
-
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$4 = /* @__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
|
|
11443
|
+
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$4 = /* @__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
|
|
11444
|
+
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>: `);
|
|
11300
11445
|
const SettingsPrivacy = (props) => {
|
|
11301
11446
|
const [permissions, setPermissions] = createSignal([]);
|
|
11302
11447
|
const loadPermissions = async () => setPermissions(await window.vessel.permissions.getAll());
|
|
@@ -11304,7 +11449,7 @@ const SettingsPrivacy = (props) => {
|
|
|
11304
11449
|
void loadPermissions();
|
|
11305
11450
|
});
|
|
11306
11451
|
return (() => {
|
|
11307
|
-
var _el$ = _tmpl$4$4(), _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$
|
|
11452
|
+
var _el$ = _tmpl$4$4(), _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;
|
|
11308
11453
|
_el$4.addEventListener("change", (e) => props.setDomainMode(e.currentTarget.value));
|
|
11309
11454
|
insert(_el$2, createComponent(Show, {
|
|
11310
11455
|
get when() {
|
|
@@ -11333,7 +11478,9 @@ const SettingsPrivacy = (props) => {
|
|
|
11333
11478
|
return _tmpl$3$4();
|
|
11334
11479
|
}
|
|
11335
11480
|
}), null);
|
|
11336
|
-
|
|
11481
|
+
_el$0.$$input = (e) => props.setSourceDoNotAllowList(e.currentTarget.value);
|
|
11482
|
+
setAttribute(_el$0, "spellcheck", false);
|
|
11483
|
+
insert(_el$12, createComponent(For, {
|
|
11337
11484
|
get each() {
|
|
11338
11485
|
return permissions();
|
|
11339
11486
|
},
|
|
@@ -11341,28 +11488,29 @@ const SettingsPrivacy = (props) => {
|
|
|
11341
11488
|
return _tmpl$5$3();
|
|
11342
11489
|
},
|
|
11343
11490
|
children: (item) => (() => {
|
|
11344
|
-
var _el$
|
|
11345
|
-
insert(_el$
|
|
11346
|
-
insert(_el$
|
|
11347
|
-
insert(_el$
|
|
11348
|
-
return _el$
|
|
11491
|
+
var _el$18 = _tmpl$6$3(), _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$20.firstChild;
|
|
11492
|
+
insert(_el$19, () => item.origin);
|
|
11493
|
+
insert(_el$20, () => item.permission, _el$21);
|
|
11494
|
+
insert(_el$20, () => item.decision, null);
|
|
11495
|
+
return _el$18;
|
|
11349
11496
|
})()
|
|
11350
11497
|
}));
|
|
11351
|
-
_el$
|
|
11498
|
+
_el$13.$$click = async () => {
|
|
11352
11499
|
await window.vessel.permissions.clear();
|
|
11353
11500
|
await loadPermissions();
|
|
11354
11501
|
};
|
|
11355
|
-
_el$
|
|
11502
|
+
_el$16.$$click = () => props.setTelemetryEnabled(!props.telemetryEnabled());
|
|
11356
11503
|
createRenderEffect((_p$) => {
|
|
11357
11504
|
var _v$ = !!props.telemetryEnabled(), _v$2 = props.telemetryEnabled();
|
|
11358
|
-
_v$ !== _p$.e && _el$
|
|
11359
|
-
_v$2 !== _p$.t && setAttribute(_el$
|
|
11505
|
+
_v$ !== _p$.e && _el$16.classList.toggle("on", _p$.e = _v$);
|
|
11506
|
+
_v$2 !== _p$.t && setAttribute(_el$16, "aria-checked", _p$.t = _v$2);
|
|
11360
11507
|
return _p$;
|
|
11361
11508
|
}, {
|
|
11362
11509
|
e: void 0,
|
|
11363
11510
|
t: void 0
|
|
11364
11511
|
});
|
|
11365
11512
|
createRenderEffect(() => _el$4.value = props.domainMode());
|
|
11513
|
+
createRenderEffect(() => _el$0.value = props.sourceDoNotAllowList());
|
|
11366
11514
|
return _el$;
|
|
11367
11515
|
})();
|
|
11368
11516
|
};
|
|
@@ -12391,6 +12539,7 @@ const Settings = () => {
|
|
|
12391
12539
|
const [theme, setTheme] = createSignal("dark");
|
|
12392
12540
|
const [domainMode, setDomainMode] = createSignal("none");
|
|
12393
12541
|
const [domainList, setDomainList] = createSignal("");
|
|
12542
|
+
const [sourceDoNotAllowList, setSourceDoNotAllowList] = createSignal("");
|
|
12394
12543
|
const [sessionList, setSessionList] = createSignal([]);
|
|
12395
12544
|
const [sessionSaveName, setSessionSaveName] = createSignal("");
|
|
12396
12545
|
const loadSessionList = async () => {
|
|
@@ -12810,6 +12959,7 @@ const Settings = () => {
|
|
|
12810
12959
|
setDomainMode("none");
|
|
12811
12960
|
setDomainList("");
|
|
12812
12961
|
}
|
|
12962
|
+
setSourceDoNotAllowList((settings.sourceDoNotAllowList ?? []).join("\n"));
|
|
12813
12963
|
try {
|
|
12814
12964
|
const ps = await window.vessel.premium.getState();
|
|
12815
12965
|
setPremiumState(ps);
|
|
@@ -12901,6 +13051,8 @@ const Settings = () => {
|
|
|
12901
13051
|
blockedDomains: []
|
|
12902
13052
|
};
|
|
12903
13053
|
await window.vessel.settings.set("domainPolicy", domainPolicy);
|
|
13054
|
+
const sourceExclusions = sourceDoNotAllowList().split("\n").map((d) => d.trim()).filter((d) => d.length > 0);
|
|
13055
|
+
await window.vessel.settings.set("sourceDoNotAllowList", Array.from(new Set(sourceExclusions)));
|
|
12904
13056
|
const chatConfig = chatEnabled() ? {
|
|
12905
13057
|
id: chatProviderId(),
|
|
12906
13058
|
apiKey: chatApiKey().trim(),
|
|
@@ -13143,7 +13295,9 @@ const Settings = () => {
|
|
|
13143
13295
|
domainMode,
|
|
13144
13296
|
setDomainMode,
|
|
13145
13297
|
domainList,
|
|
13146
|
-
setDomainList
|
|
13298
|
+
setDomainList,
|
|
13299
|
+
sourceDoNotAllowList,
|
|
13300
|
+
setSourceDoNotAllowList
|
|
13147
13301
|
});
|
|
13148
13302
|
}
|
|
13149
13303
|
}), null);
|