@quanta-intellect/vessel-browser 0.1.104 → 0.1.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/out/main/index.js +1535 -1083
- package/out/preload/content-script.js +20 -3
- package/out/preload/index.js +20 -0
- package/out/renderer/assets/{index-BF_JrL2V.css → index-CFbT1_av.css} +29 -2
- package/out/renderer/assets/{index-D3ABnKy4.js → index-CWiMuKTX.js} +907 -598
- package/out/renderer/index.html +2 -2
- package/package.json +1 -1
|
@@ -2301,7 +2301,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
2301
2301
|
}
|
|
2302
2302
|
return "idle";
|
|
2303
2303
|
}
|
|
2304
|
-
var _tmpl$$p = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$o = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$l = /* @__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$
|
|
2304
|
+
var _tmpl$$p = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$o = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$l = /* @__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>`);
|
|
2305
2305
|
const TAB_CLOSE_MS = 200;
|
|
2306
2306
|
function stringToHue(str) {
|
|
2307
2307
|
let hash = 0;
|
|
@@ -2360,6 +2360,12 @@ const TabBar = () => {
|
|
|
2360
2360
|
const [closingTabIds, setClosingTabIds] = createSignal(/* @__PURE__ */ new Set());
|
|
2361
2361
|
const modelActiveTabIds = createMemo(() => getAgentActiveTabIds(runtimeState2(), now2()));
|
|
2362
2362
|
const tabEntries = createMemo(() => {
|
|
2363
|
+
const groupCounts = /* @__PURE__ */ new Map();
|
|
2364
|
+
for (const tab of tabs2()) {
|
|
2365
|
+
if (tab.groupId) {
|
|
2366
|
+
groupCounts.set(tab.groupId, (groupCounts.get(tab.groupId) ?? 0) + 1);
|
|
2367
|
+
}
|
|
2368
|
+
}
|
|
2363
2369
|
const seenGroups = /* @__PURE__ */ new Set();
|
|
2364
2370
|
return tabs2().flatMap((tab) => {
|
|
2365
2371
|
const entries2 = [];
|
|
@@ -2371,7 +2377,7 @@ const TabBar = () => {
|
|
|
2371
2377
|
name: tab.groupName || "Group",
|
|
2372
2378
|
color: tab.groupColor || "blue",
|
|
2373
2379
|
collapsed: !!tab.groupCollapsed,
|
|
2374
|
-
count:
|
|
2380
|
+
count: groupCounts.get(tab.groupId) ?? 0
|
|
2375
2381
|
});
|
|
2376
2382
|
}
|
|
2377
2383
|
if (!tab.groupCollapsed || tab.id === activeTabId2()) {
|
|
@@ -2484,7 +2490,7 @@ const TabBar = () => {
|
|
|
2484
2490
|
insert(_el$12, (() => {
|
|
2485
2491
|
var _c$ = memo(() => !!!tab.isPinned);
|
|
2486
2492
|
return () => _c$() && [memo(() => memo(() => !!modelActiveTabIds().has(tab.id))() && _tmpl$0$7()), (() => {
|
|
2487
|
-
var _el$14 = _tmpl$7$
|
|
2493
|
+
var _el$14 = _tmpl$7$e();
|
|
2488
2494
|
insert(_el$14, () => tab.title || "New Tab");
|
|
2489
2495
|
return _el$14;
|
|
2490
2496
|
})(), createComponent(Show, {
|
|
@@ -2516,7 +2522,7 @@ const TabBar = () => {
|
|
|
2516
2522
|
return _el$15;
|
|
2517
2523
|
}
|
|
2518
2524
|
}), memo(() => memo(() => !!tab.isLoading)() && _tmpl$1$7()), (() => {
|
|
2519
|
-
var _el$16 = _tmpl$9$
|
|
2525
|
+
var _el$16 = _tmpl$9$9();
|
|
2520
2526
|
_el$16.$$click = (e) => {
|
|
2521
2527
|
e.stopPropagation();
|
|
2522
2528
|
handleClose(tab.id);
|
|
@@ -2733,8 +2739,10 @@ function useUI() {
|
|
|
2733
2739
|
};
|
|
2734
2740
|
}
|
|
2735
2741
|
const logger$3 = createLogger("HistoryStore");
|
|
2742
|
+
const HISTORY_PAGE_SIZE = 200;
|
|
2736
2743
|
const INITIAL$1 = { entries: [] };
|
|
2737
2744
|
const [historyState, setHistoryState] = createSignal(INITIAL$1);
|
|
2745
|
+
const [historyTotal, setHistoryTotal] = createSignal(0);
|
|
2738
2746
|
let initialized$3 = false;
|
|
2739
2747
|
let initPromise$1 = null;
|
|
2740
2748
|
async function init$3() {
|
|
@@ -2743,9 +2751,13 @@ async function init$3() {
|
|
|
2743
2751
|
initialized$3 = true;
|
|
2744
2752
|
initPromise$1 = (async () => {
|
|
2745
2753
|
try {
|
|
2746
|
-
const
|
|
2747
|
-
setHistoryState(
|
|
2748
|
-
|
|
2754
|
+
const page = await window.vessel.history.list(0, HISTORY_PAGE_SIZE);
|
|
2755
|
+
setHistoryState({ entries: page.entries });
|
|
2756
|
+
setHistoryTotal(page.total);
|
|
2757
|
+
window.vessel.history.onUpdate((page2) => {
|
|
2758
|
+
setHistoryState({ entries: page2.entries });
|
|
2759
|
+
setHistoryTotal(page2.total);
|
|
2760
|
+
});
|
|
2749
2761
|
} catch (error) {
|
|
2750
2762
|
initialized$3 = false;
|
|
2751
2763
|
logger$3.error("Failed to initialize history store:", error);
|
|
@@ -2757,8 +2769,19 @@ async function init$3() {
|
|
|
2757
2769
|
}
|
|
2758
2770
|
function useHistory() {
|
|
2759
2771
|
void init$3();
|
|
2772
|
+
const loadMore = async (limit = HISTORY_PAGE_SIZE) => {
|
|
2773
|
+
const current = historyState().entries;
|
|
2774
|
+
const page = await window.vessel.history.list(current.length, limit);
|
|
2775
|
+
setHistoryState({ entries: [...current, ...page.entries] });
|
|
2776
|
+
setHistoryTotal(page.total);
|
|
2777
|
+
return page;
|
|
2778
|
+
};
|
|
2760
2779
|
return {
|
|
2761
2780
|
historyState,
|
|
2781
|
+
historyTotal,
|
|
2782
|
+
hasMore: () => historyState().entries.length < historyTotal(),
|
|
2783
|
+
loadMore,
|
|
2784
|
+
list: (offset, limit) => window.vessel.history.list(offset, limit),
|
|
2762
2785
|
search: (query) => window.vessel.history.search(query),
|
|
2763
2786
|
clear: () => window.vessel.history.clear()
|
|
2764
2787
|
};
|
|
@@ -3003,7 +3026,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
3003
3026
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
3004
3027
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
3005
3028
|
};
|
|
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$
|
|
3029
|
+
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$d = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#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$8 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>×`), _tmpl$1$6 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$6 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$11$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$4 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$4 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$4 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$3 = /* @__PURE__ */ template(`<li>`);
|
|
3007
3030
|
const AddressBar = (props) => {
|
|
3008
3031
|
const {
|
|
3009
3032
|
activeTab,
|
|
@@ -3456,7 +3479,7 @@ const AddressBar = (props) => {
|
|
|
3456
3479
|
return pageDiff();
|
|
3457
3480
|
},
|
|
3458
3481
|
get children() {
|
|
3459
|
-
var _el$18 = _tmpl$7$
|
|
3482
|
+
var _el$18 = _tmpl$7$d();
|
|
3460
3483
|
_el$18.$$click = () => void openDiffTimeline();
|
|
3461
3484
|
return _el$18;
|
|
3462
3485
|
}
|
|
@@ -3489,7 +3512,7 @@ const AddressBar = (props) => {
|
|
|
3489
3512
|
return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
|
|
3490
3513
|
},
|
|
3491
3514
|
get children() {
|
|
3492
|
-
var _el$33 = _tmpl$9$
|
|
3515
|
+
var _el$33 = _tmpl$9$8();
|
|
3493
3516
|
_el$33.firstChild;
|
|
3494
3517
|
insert(_el$33, createComponent(For, {
|
|
3495
3518
|
get each() {
|
|
@@ -3577,7 +3600,7 @@ const AddressBar = (props) => {
|
|
|
3577
3600
|
return change.addedItems;
|
|
3578
3601
|
},
|
|
3579
3602
|
children: (item) => (() => {
|
|
3580
|
-
var _el$80 = _tmpl$29$
|
|
3603
|
+
var _el$80 = _tmpl$29$3();
|
|
3581
3604
|
insert(_el$80, item);
|
|
3582
3605
|
return _el$80;
|
|
3583
3606
|
})()
|
|
@@ -3596,7 +3619,7 @@ const AddressBar = (props) => {
|
|
|
3596
3619
|
return change.removedItems;
|
|
3597
3620
|
},
|
|
3598
3621
|
children: (item) => (() => {
|
|
3599
|
-
var _el$81 = _tmpl$29$
|
|
3622
|
+
var _el$81 = _tmpl$29$3();
|
|
3600
3623
|
insert(_el$81, item);
|
|
3601
3624
|
return _el$81;
|
|
3602
3625
|
})()
|
|
@@ -3847,7 +3870,7 @@ const HighlightNotifications = (props) => {
|
|
|
3847
3870
|
});
|
|
3848
3871
|
};
|
|
3849
3872
|
delegateEvents(["click"]);
|
|
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$
|
|
3873
|
+
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$c = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
|
|
3851
3874
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
3852
3875
|
const TOAST_EXIT_MS = 300;
|
|
3853
3876
|
function formatBytes$1(bytes) {
|
|
@@ -3944,7 +3967,7 @@ const DownloadToast = () => {
|
|
|
3944
3967
|
return downloads();
|
|
3945
3968
|
},
|
|
3946
3969
|
children: (dl) => (() => {
|
|
3947
|
-
var _el$2 = _tmpl$7$
|
|
3970
|
+
var _el$2 = _tmpl$7$c(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
3948
3971
|
insert(_el$4, () => dl.filename);
|
|
3949
3972
|
insert(_el$3, createComponent(Show, {
|
|
3950
3973
|
get when() {
|
|
@@ -4311,7 +4334,7 @@ function formatTime(iso, options) {
|
|
|
4311
4334
|
...options?.includeSeconds && { second: "2-digit" }
|
|
4312
4335
|
});
|
|
4313
4336
|
}
|
|
4314
|
-
var _tmpl$$g = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$g = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$f = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$f = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$
|
|
4337
|
+
var _tmpl$$g = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$g = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$f = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$f = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Transcript</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$b = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
|
|
4315
4338
|
const AgentTranscriptDock = () => {
|
|
4316
4339
|
const {
|
|
4317
4340
|
runtimeState: runtimeState2
|
|
@@ -4403,7 +4426,7 @@ const AgentTranscriptDock = () => {
|
|
|
4403
4426
|
return visibleEntries();
|
|
4404
4427
|
},
|
|
4405
4428
|
children: (entry) => (() => {
|
|
4406
|
-
var _el$12 = _tmpl$7$
|
|
4429
|
+
var _el$12 = _tmpl$7$b(), _el$13 = _el$12.firstChild, _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$13.nextSibling;
|
|
4407
4430
|
insert(_el$14, () => entry.title || entry.kind);
|
|
4408
4431
|
insert(_el$15, () => formatTime(entry.updatedAt));
|
|
4409
4432
|
insert(_el$16, () => entry.text);
|
|
@@ -4438,6 +4461,57 @@ const AgentTranscriptDock = () => {
|
|
|
4438
4461
|
});
|
|
4439
4462
|
};
|
|
4440
4463
|
delegateEvents(["click"]);
|
|
4464
|
+
const MAX_PROVIDER_HISTORY_MESSAGES = 24;
|
|
4465
|
+
const MAX_PROVIDER_HISTORY_CHARS = 24e3;
|
|
4466
|
+
const MAX_PROVIDER_HISTORY_MESSAGE_CHARS = 3e3;
|
|
4467
|
+
const MAX_PROVIDER_HISTORY_SUMMARY_CHARS = 2e3;
|
|
4468
|
+
function truncateText(value, maxLength) {
|
|
4469
|
+
if (value.length <= maxLength) return value;
|
|
4470
|
+
return `${value.slice(0, maxLength - 3).trimEnd()}...`;
|
|
4471
|
+
}
|
|
4472
|
+
function normalizeHistoryMessage(message) {
|
|
4473
|
+
return {
|
|
4474
|
+
role: message.role,
|
|
4475
|
+
content: truncateText(message.content, MAX_PROVIDER_HISTORY_MESSAGE_CHARS)
|
|
4476
|
+
};
|
|
4477
|
+
}
|
|
4478
|
+
function totalHistoryChars(history) {
|
|
4479
|
+
return history.reduce((total, message) => total + message.content.length, 0);
|
|
4480
|
+
}
|
|
4481
|
+
function summarizeOmittedHistory(history) {
|
|
4482
|
+
const snippets = history.slice(-12).map((message) => `${message.role}: ${truncateText(message.content.replace(/\s+/g, " ").trim(), 220)}`).filter((line) => line.length > "assistant: ".length);
|
|
4483
|
+
const content = truncateText(
|
|
4484
|
+
[
|
|
4485
|
+
`[Earlier conversation compacted: ${history.length} message${history.length === 1 ? "" : "s"} omitted.]`,
|
|
4486
|
+
...snippets
|
|
4487
|
+
].join("\n"),
|
|
4488
|
+
MAX_PROVIDER_HISTORY_SUMMARY_CHARS
|
|
4489
|
+
);
|
|
4490
|
+
return { role: "user", content };
|
|
4491
|
+
}
|
|
4492
|
+
function compactProviderHistory(history = []) {
|
|
4493
|
+
const normalized = history.map(normalizeHistoryMessage);
|
|
4494
|
+
if (normalized.length <= MAX_PROVIDER_HISTORY_MESSAGES && totalHistoryChars(normalized) <= MAX_PROVIDER_HISTORY_CHARS) {
|
|
4495
|
+
return normalized;
|
|
4496
|
+
}
|
|
4497
|
+
const recent = [];
|
|
4498
|
+
const recentBudget = MAX_PROVIDER_HISTORY_CHARS - MAX_PROVIDER_HISTORY_SUMMARY_CHARS;
|
|
4499
|
+
let usedChars = 0;
|
|
4500
|
+
for (let index = normalized.length - 1; index >= 0; index--) {
|
|
4501
|
+
const message = normalized[index];
|
|
4502
|
+
const nextChars = usedChars + message.content.length;
|
|
4503
|
+
if (recent.length >= MAX_PROVIDER_HISTORY_MESSAGES || nextChars > recentBudget) {
|
|
4504
|
+
break;
|
|
4505
|
+
}
|
|
4506
|
+
recent.unshift(message);
|
|
4507
|
+
usedChars = nextChars;
|
|
4508
|
+
}
|
|
4509
|
+
if (recent.length === 0 && normalized.length > 0) {
|
|
4510
|
+
recent.unshift(normalized[normalized.length - 1]);
|
|
4511
|
+
}
|
|
4512
|
+
const omitted = normalized.slice(0, normalized.length - recent.length);
|
|
4513
|
+
return omitted.length > 0 ? [summarizeOmittedHistory(omitted), ...recent] : recent;
|
|
4514
|
+
}
|
|
4441
4515
|
const MAX_AUTOMATION_ACTIVITY_ENTRIES = 8;
|
|
4442
4516
|
function trimActivities(entries2, limit = MAX_AUTOMATION_ACTIVITY_ENTRIES) {
|
|
4443
4517
|
return entries2.length > limit ? entries2.slice(0, limit) : entries2;
|
|
@@ -4549,10 +4623,7 @@ function recordRecentQuery(prompt) {
|
|
|
4549
4623
|
});
|
|
4550
4624
|
}
|
|
4551
4625
|
function buildHistory() {
|
|
4552
|
-
return messages()
|
|
4553
|
-
role: message.role,
|
|
4554
|
-
content: message.content
|
|
4555
|
-
}));
|
|
4626
|
+
return compactProviderHistory(messages());
|
|
4556
4627
|
}
|
|
4557
4628
|
async function dispatchQuery(prompt) {
|
|
4558
4629
|
const result = await window.vessel.ai.query(prompt, buildHistory());
|
|
@@ -4790,7 +4861,101 @@ function useAnimatedPresence(isOpen, exitDurationMs) {
|
|
|
4790
4861
|
});
|
|
4791
4862
|
return { visible, closing };
|
|
4792
4863
|
}
|
|
4793
|
-
|
|
4864
|
+
function useProviderAuthSetup(options = {}) {
|
|
4865
|
+
const [codexAuthStatus, setCodexAuthStatus] = createSignal("idle");
|
|
4866
|
+
const [codexAccountEmail, setCodexAccountEmail] = createSignal("");
|
|
4867
|
+
const [codexAuthError, setCodexAuthError] = createSignal("");
|
|
4868
|
+
const [openRouterAuthStatus, setOpenRouterAuthStatus] = createSignal("idle");
|
|
4869
|
+
const [openRouterAuthError, setOpenRouterAuthError] = createSignal("");
|
|
4870
|
+
const markProviderConnected = (providerId, hasApiKey) => {
|
|
4871
|
+
setCodexAuthStatus(providerId === "openai_codex" && hasApiKey ? "connected" : "idle");
|
|
4872
|
+
setOpenRouterAuthStatus(providerId === "openrouter" && hasApiKey ? "connected" : "idle");
|
|
4873
|
+
};
|
|
4874
|
+
const startCodexAuth = async () => {
|
|
4875
|
+
setCodexAuthStatus("waiting");
|
|
4876
|
+
setCodexAuthError("");
|
|
4877
|
+
try {
|
|
4878
|
+
const result = await window.vessel.codex.startAuth();
|
|
4879
|
+
if (result.ok) {
|
|
4880
|
+
setCodexAccountEmail(result.accountEmail);
|
|
4881
|
+
setCodexAuthStatus("connected");
|
|
4882
|
+
await options.onCodexConnected?.();
|
|
4883
|
+
} else {
|
|
4884
|
+
setCodexAuthStatus("error");
|
|
4885
|
+
setCodexAuthError(result.error);
|
|
4886
|
+
}
|
|
4887
|
+
} catch (err) {
|
|
4888
|
+
setCodexAuthStatus("error");
|
|
4889
|
+
setCodexAuthError(err instanceof Error ? err.message : "Unknown error");
|
|
4890
|
+
}
|
|
4891
|
+
};
|
|
4892
|
+
const disconnectCodex = async () => {
|
|
4893
|
+
await window.vessel.codex.disconnect();
|
|
4894
|
+
setCodexAuthStatus("idle");
|
|
4895
|
+
setCodexAccountEmail("");
|
|
4896
|
+
await options.onCodexDisconnected?.();
|
|
4897
|
+
};
|
|
4898
|
+
const startOpenRouterAuth = async () => {
|
|
4899
|
+
setOpenRouterAuthStatus("waiting");
|
|
4900
|
+
setOpenRouterAuthError("");
|
|
4901
|
+
try {
|
|
4902
|
+
const result = await window.vessel.openrouter.startAuth();
|
|
4903
|
+
if (result.ok) {
|
|
4904
|
+
setOpenRouterAuthStatus("connected");
|
|
4905
|
+
await options.onOpenRouterConnected?.(result);
|
|
4906
|
+
} else {
|
|
4907
|
+
setOpenRouterAuthStatus("error");
|
|
4908
|
+
setOpenRouterAuthError(result.error);
|
|
4909
|
+
}
|
|
4910
|
+
} catch (err) {
|
|
4911
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
4912
|
+
setOpenRouterAuthStatus("error");
|
|
4913
|
+
setOpenRouterAuthError(message);
|
|
4914
|
+
}
|
|
4915
|
+
};
|
|
4916
|
+
onMount(() => {
|
|
4917
|
+
const unsubCodex = window.vessel.codex.onAuthStatus((payload) => {
|
|
4918
|
+
if (payload.status === "waiting") {
|
|
4919
|
+
setCodexAuthStatus("waiting");
|
|
4920
|
+
} else if (payload.status === "exchanging") {
|
|
4921
|
+
setCodexAuthStatus("exchanging");
|
|
4922
|
+
} else if (payload.status === "error") {
|
|
4923
|
+
setCodexAuthStatus("error");
|
|
4924
|
+
setCodexAuthError(payload.error || "Unknown error");
|
|
4925
|
+
}
|
|
4926
|
+
});
|
|
4927
|
+
const unsubOpenRouter = window.vessel.openrouter.onAuthStatus((payload) => {
|
|
4928
|
+
if (payload.status === "waiting") {
|
|
4929
|
+
setOpenRouterAuthStatus("waiting");
|
|
4930
|
+
} else if (payload.status === "exchanging") {
|
|
4931
|
+
setOpenRouterAuthStatus("exchanging");
|
|
4932
|
+
} else if (payload.status === "connected") {
|
|
4933
|
+
setOpenRouterAuthStatus("connected");
|
|
4934
|
+
} else if (payload.status === "error") {
|
|
4935
|
+
setOpenRouterAuthStatus("error");
|
|
4936
|
+
setOpenRouterAuthError(payload.error || "Unknown error");
|
|
4937
|
+
}
|
|
4938
|
+
});
|
|
4939
|
+
onCleanup(() => {
|
|
4940
|
+
unsubCodex();
|
|
4941
|
+
unsubOpenRouter();
|
|
4942
|
+
});
|
|
4943
|
+
});
|
|
4944
|
+
return {
|
|
4945
|
+
codexAuthStatus,
|
|
4946
|
+
codexAccountEmail,
|
|
4947
|
+
setCodexAccountEmail,
|
|
4948
|
+
codexAuthError,
|
|
4949
|
+
setCodexAuthError,
|
|
4950
|
+
openRouterAuthStatus,
|
|
4951
|
+
openRouterAuthError,
|
|
4952
|
+
markProviderConnected,
|
|
4953
|
+
startCodexAuth,
|
|
4954
|
+
disconnectCodex,
|
|
4955
|
+
startOpenRouterAuth
|
|
4956
|
+
};
|
|
4957
|
+
}
|
|
4958
|
+
var _tmpl$$f = /* @__PURE__ */ template(`<p class=command-bar-no-provider-error>`), _tmpl$2$f = /* @__PURE__ */ template(`<div class=command-bar-no-provider><p>Start with OpenRouter's free model router, or open Settings for more providers.</p><button class=command-bar-no-provider-btn></button><button class=command-bar-no-provider-link>More options`), _tmpl$3$e = /* @__PURE__ */ template(`<div class=command-bar-recent><span class=command-bar-recent-label>Recent</span><div class=command-bar-recent-list>`), _tmpl$4$e = /* @__PURE__ */ template(`<span>Try "summarize" or ask a question`), _tmpl$5$c = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=command-bar><form><div class=command-bar-icon><svg width=16 height=16 viewBox="0 0 16 16"><circle cx=8 cy=8 r=6 fill=none stroke=var(--accent-primary) stroke-width=1.5></circle><circle cx=6 cy=7 r=0.8 fill=var(--accent-primary)></circle><circle cx=10 cy=7 r=0.8 fill=var(--accent-primary)></circle><path d="M6 10c0.5 0.8 3.5 0.8 4 0"fill=none stroke=var(--accent-primary) stroke-width=0.8 stroke-linecap=round></path></svg></div><input class=command-bar-input type=text></form><div class=command-bar-hints><span><kbd>Enter</kbd> to ask</span><span><kbd>Esc</kbd> to close`), _tmpl$6$c = /* @__PURE__ */ template(`<button class=command-bar-recent-item type=button>`), _tmpl$7$a = /* @__PURE__ */ template(`<span>Set up a provider in Settings first`);
|
|
4794
4959
|
const COMMAND_BAR_EXIT_MS = 200;
|
|
4795
4960
|
const CommandBar = () => {
|
|
4796
4961
|
const {
|
|
@@ -4810,8 +4975,18 @@ const CommandBar = () => {
|
|
|
4810
4975
|
cancel
|
|
4811
4976
|
} = useAI();
|
|
4812
4977
|
const [input, setInput] = createSignal("");
|
|
4813
|
-
|
|
4978
|
+
let inputRef;
|
|
4979
|
+
const [settings, {
|
|
4980
|
+
refetch: refetchSettings
|
|
4981
|
+
}] = createResource(() => commandBarOpen2(), async (open) => open ? window.vessel.settings.get() : null);
|
|
4982
|
+
const providerAuth = useProviderAuthSetup({
|
|
4983
|
+
onOpenRouterConnected: async () => {
|
|
4984
|
+
await refetchSettings();
|
|
4985
|
+
setTimeout(() => inputRef?.focus(), 0);
|
|
4986
|
+
}
|
|
4987
|
+
});
|
|
4814
4988
|
const hasProvider = () => settings()?.chatProvider !== null && settings()?.chatProvider !== void 0;
|
|
4989
|
+
const openRouterWorking = () => providerAuth.openRouterAuthStatus() === "waiting" || providerAuth.openRouterAuthStatus() === "exchanging";
|
|
4815
4990
|
const handleSubmit = async (e) => {
|
|
4816
4991
|
e.preventDefault();
|
|
4817
4992
|
const val = input().trim();
|
|
@@ -4837,6 +5012,7 @@ const CommandBar = () => {
|
|
|
4837
5012
|
}
|
|
4838
5013
|
};
|
|
4839
5014
|
const setRef = (el) => {
|
|
5015
|
+
inputRef = el;
|
|
4840
5016
|
setTimeout(() => el.focus(), 0);
|
|
4841
5017
|
};
|
|
4842
5018
|
return createComponent(Show, {
|
|
@@ -4844,8 +5020,8 @@ const CommandBar = () => {
|
|
|
4844
5020
|
return visible();
|
|
4845
5021
|
},
|
|
4846
5022
|
get children() {
|
|
4847
|
-
var _el$ = _tmpl$
|
|
4848
|
-
_el$
|
|
5023
|
+
var _el$ = _tmpl$5$c(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$12 = _el$3.nextSibling, _el$13 = _el$12.firstChild;
|
|
5024
|
+
_el$13.nextSibling;
|
|
4849
5025
|
addEventListener(_el$, "click", closeCommandBar, true);
|
|
4850
5026
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
4851
5027
|
_el$3.addEventListener("submit", handleSubmit);
|
|
@@ -4858,43 +5034,62 @@ const CommandBar = () => {
|
|
|
4858
5034
|
return !hasProvider();
|
|
4859
5035
|
},
|
|
4860
5036
|
get children() {
|
|
4861
|
-
var _el$6 = _tmpl
|
|
4862
|
-
_el$8.$$click = () =>
|
|
5037
|
+
var _el$6 = _tmpl$2$f(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling;
|
|
5038
|
+
_el$8.$$click = () => void providerAuth.startOpenRouterAuth();
|
|
5039
|
+
insert(_el$8, createComponent(Show, {
|
|
5040
|
+
get when() {
|
|
5041
|
+
return !openRouterWorking();
|
|
5042
|
+
},
|
|
5043
|
+
fallback: "Opening OpenRouter...",
|
|
5044
|
+
children: "Start free with OpenRouter"
|
|
5045
|
+
}));
|
|
5046
|
+
_el$9.$$click = () => {
|
|
4863
5047
|
closeCommandBar();
|
|
4864
5048
|
openSettings();
|
|
4865
5049
|
};
|
|
5050
|
+
insert(_el$6, createComponent(Show, {
|
|
5051
|
+
get when() {
|
|
5052
|
+
return providerAuth.openRouterAuthStatus() === "error";
|
|
5053
|
+
},
|
|
5054
|
+
get children() {
|
|
5055
|
+
var _el$0 = _tmpl$$f();
|
|
5056
|
+
insert(_el$0, () => providerAuth.openRouterAuthError());
|
|
5057
|
+
return _el$0;
|
|
5058
|
+
}
|
|
5059
|
+
}), null);
|
|
5060
|
+
createRenderEffect(() => _el$8.disabled = openRouterWorking());
|
|
4866
5061
|
return _el$6;
|
|
4867
5062
|
}
|
|
4868
|
-
}), _el$
|
|
5063
|
+
}), _el$12);
|
|
4869
5064
|
insert(_el$2, createComponent(Show, {
|
|
4870
5065
|
get when() {
|
|
4871
5066
|
return memo(() => !!(hasProvider() && recentQueries2().length > 0))() && !input().trim();
|
|
4872
5067
|
},
|
|
4873
5068
|
get children() {
|
|
4874
|
-
var _el$
|
|
4875
|
-
insert(_el$
|
|
5069
|
+
var _el$1 = _tmpl$3$e(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
|
|
5070
|
+
insert(_el$11, createComponent(For, {
|
|
4876
5071
|
get each() {
|
|
4877
5072
|
return recentQueries2();
|
|
4878
5073
|
},
|
|
4879
5074
|
children: (q) => (() => {
|
|
4880
|
-
var _el$
|
|
4881
|
-
_el$
|
|
4882
|
-
insert(_el$
|
|
4883
|
-
return _el$
|
|
5075
|
+
var _el$16 = _tmpl$6$c();
|
|
5076
|
+
_el$16.$$click = () => void handleRecentClick(q);
|
|
5077
|
+
insert(_el$16, q);
|
|
5078
|
+
return _el$16;
|
|
4884
5079
|
})()
|
|
4885
5080
|
}));
|
|
4886
|
-
return _el$
|
|
5081
|
+
return _el$1;
|
|
4887
5082
|
}
|
|
4888
|
-
}), _el$
|
|
4889
|
-
insert(_el$
|
|
5083
|
+
}), _el$12);
|
|
5084
|
+
insert(_el$12, createComponent(Show, {
|
|
4890
5085
|
get when() {
|
|
4891
5086
|
return hasProvider();
|
|
4892
5087
|
},
|
|
4893
5088
|
get fallback() {
|
|
4894
|
-
return _tmpl$
|
|
5089
|
+
return _tmpl$7$a();
|
|
4895
5090
|
},
|
|
4896
5091
|
get children() {
|
|
4897
|
-
return _tmpl$
|
|
5092
|
+
return _tmpl$4$e();
|
|
4898
5093
|
}
|
|
4899
5094
|
}), null);
|
|
4900
5095
|
createRenderEffect((_p$) => {
|
|
@@ -6746,7 +6941,7 @@ function renderKitPrompt(kit, values) {
|
|
|
6746
6941
|
(_, key) => values[key] ?? ""
|
|
6747
6942
|
);
|
|
6748
6943
|
}
|
|
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$
|
|
6944
|
+
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$7 = /* @__PURE__ */ template(`<div class=kit-form-header><button class=kit-back-btn type=button title="Back to kits"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M9 11L5 7l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Back</button><div class=kit-form-title>`), _tmpl$0$5 = /* @__PURE__ */ template(`<p class=kit-form-desc>`), _tmpl$1$5 = /* @__PURE__ */ template(`<div class=kit-form-fields>`), _tmpl$10$5 = /* @__PURE__ */ template(`<p class=kit-form-estimate>Estimated run time: ~<!> min`), _tmpl$11$5 = /* @__PURE__ */ template(`<button class="agent-primary-button kit-run-btn"type=button>`), _tmpl$12$5 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Date & time</label><input class=kit-form-input type=datetime-local>`), _tmpl$13$4 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time of day</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$14$4 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Day</label><select class=kit-form-input>`), _tmpl$15$4 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label class=kit-form-label>Time</label><input class="kit-form-input kit-schedule-time"type=time>`), _tmpl$16$3 = /* @__PURE__ */ template(`<p class=kit-schedule-error>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=kit-schedule-form><div class=kit-schedule-types></div><p class=kit-schedule-note>Schedules run only while Vessel is open. Missed runs are skipped.</p><button class="agent-primary-button kit-schedule-btn"type=button>`), _tmpl$18$3 = /* @__PURE__ */ template(`<div class=kit-schedule-section><label class=kit-schedule-toggle><input type=checkbox>Schedule for later`), _tmpl$19$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Run at</label><input type=datetime-local class="kit-form-input kit-schedule-time">`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Day</label><select class="kit-form-input kit-schedule-time">`), _tmpl$21$3 = /* @__PURE__ */ template(`<div class=kit-schedule-row><label>Time</label><input type=time class="kit-form-input kit-schedule-time">`), _tmpl$22$3 = /* @__PURE__ */ template(`<div class=sched-edit-backdrop><div class=sched-edit-panel><div class=sched-edit-header><span class=sched-edit-title>Edit schedule</span><span class=sched-edit-job-name></span></div><div class=kit-schedule-types></div><div class=sched-edit-actions><button class=kit-back-btn type=button>Cancel</button><button class=agent-primary-button type=button>Save`), _tmpl$23$3 = /* @__PURE__ */ template(`<section class=automation-panel>`), _tmpl$24$3 = /* @__PURE__ */ template(`<div class=kit-card-meta>~<!> min`), _tmpl$25$2 = /* @__PURE__ */ template(`<button class=kit-remove-btn type=button>×`), _tmpl$26$2 = /* @__PURE__ */ template(`<div class=kit-card role=button tabindex=0><span class=kit-card-icon aria-hidden=true></span><div class=kit-card-body><div class=kit-card-name></div><div class=kit-card-desc>`), _tmpl$27$2 = /* @__PURE__ */ template(`<svg class=kit-card-caret width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M5 3l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$28$2 = /* @__PURE__ */ template(`<div class=kit-sched-next>Next: `), _tmpl$29$2 = /* @__PURE__ */ template(`<div class=sched-context-menu><button class=sched-ctx-item type=button>Edit task</button><button class=sched-ctx-item type=button>Edit schedule</button><div class=sched-ctx-divider></div><button class=sched-ctx-item type=button></button><button class="sched-ctx-item sched-ctx-danger"type=button>Delete`), _tmpl$30$1 = /* @__PURE__ */ template(`<div class=kit-sched-card><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-sched-body><div class=kit-sched-name></div><div class=kit-sched-meta></div></div><div class=kit-sched-actions><button class=kit-sched-toggle type=button></button><button class=kit-remove-btn type=button title="Delete schedule"aria-label="Delete schedule">×`), _tmpl$31$1 = /* @__PURE__ */ template(`<div class=kit-activity-output>`), _tmpl$32$1 = /* @__PURE__ */ template(`<div class=kit-activity-card><div class=kit-activity-header><div class=kit-activity-title><span class="kit-card-icon kit-sched-icon"aria-hidden=true></span><div class=kit-activity-title-copy><div class=kit-sched-name></div><div class=kit-activity-time></div></div></div><span class=kit-activity-badge>`), _tmpl$33$1 = /* @__PURE__ */ template(`<div class="kit-activity-output kit-activity-placeholder">`), _tmpl$34$1 = /* @__PURE__ */ template(`<span class=kit-form-required aria-hidden=true>*`), _tmpl$35$1 = /* @__PURE__ */ template(`<textarea class=kit-form-textarea rows=3>`), _tmpl$36$1 = /* @__PURE__ */ template(`<p class=kit-form-hint>`), _tmpl$37$1 = /* @__PURE__ */ template(`<div class=kit-form-field><label class=kit-form-label>`), _tmpl$38$1 = /* @__PURE__ */ template(`<input class=kit-form-input>`), _tmpl$39$1 = /* @__PURE__ */ template(`<span class=kit-run-spinner aria-hidden=true>`), _tmpl$40$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=sched-type>`), _tmpl$41$1 = /* @__PURE__ */ template(`<option>`), _tmpl$42$1 = /* @__PURE__ */ template(`<label class=kit-schedule-type-option><input type=radio name=edit-sched-type>`);
|
|
6750
6945
|
const ICON_MAP = {
|
|
6751
6946
|
BookOpen: book_open_default,
|
|
6752
6947
|
Tag: tag_default,
|
|
@@ -7206,7 +7401,7 @@ const AutomationTab = (props) => {
|
|
|
7206
7401
|
return openMenuJobId() === job.id;
|
|
7207
7402
|
},
|
|
7208
7403
|
get children() {
|
|
7209
|
-
var _el$94 = _tmpl$29$
|
|
7404
|
+
var _el$94 = _tmpl$29$2(), _el$95 = _el$94.firstChild, _el$96 = _el$95.nextSibling, _el$97 = _el$96.nextSibling, _el$98 = _el$97.nextSibling, _el$99 = _el$98.nextSibling;
|
|
7210
7405
|
_el$94.$$click = (e) => e.stopPropagation();
|
|
7211
7406
|
_el$95.$$click = () => handleOpenEditTask(job);
|
|
7212
7407
|
_el$96.$$click = () => handleOpenEditSchedule(job);
|
|
@@ -7309,7 +7504,7 @@ const AutomationTab = (props) => {
|
|
|
7309
7504
|
},
|
|
7310
7505
|
get children() {
|
|
7311
7506
|
return [(() => {
|
|
7312
|
-
var _el$23 = _tmpl$9$
|
|
7507
|
+
var _el$23 = _tmpl$9$7(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
|
|
7313
7508
|
_el$24.$$click = () => {
|
|
7314
7509
|
setSelectedKit(null);
|
|
7315
7510
|
setEditingTaskJobId(null);
|
|
@@ -7662,7 +7857,7 @@ function useResearch() {
|
|
|
7662
7857
|
}
|
|
7663
7858
|
};
|
|
7664
7859
|
}
|
|
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$
|
|
7860
|
+
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$6 = /* @__PURE__ */ template(`<div class=research-phase><h3>Briefing</h3><p>Work through the brief here. Once the assistant has enough context, turn it into a research plan.</p><div class=research-brief-thread></div><form class=research-brief-form><textarea class=research-brief-input rows=2></textarea><button type=submit></button></form><div class=phase-controls><button>Build Research Plan</button><button class=secondary>Cancel`), _tmpl$0$4 = /* @__PURE__ */ template(`<div class=research-phase><h3>Planning Research</h3><p>Creating Research Objectives based on your brief...`), _tmpl$1$4 = /* @__PURE__ */ template(`<div class=research-phase><h3>Research Objectives`), _tmpl$10$4 = /* @__PURE__ */ template(`<div class=research-thread-progress-list>`), _tmpl$11$4 = /* @__PURE__ */ template(`<button>Switch to Walk-Away`), _tmpl$12$4 = /* @__PURE__ */ template(`<button>Switch to Interactive`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=research-phase><h3>Researching</h3><div class=research-active-card role=status aria-live=polite><span class="research-spinner research-active-spinner"aria-hidden=true></span><div class=research-active-copy><div class=research-active-title>Agents are working</div><p> of <!> threads complete</p></div></div><div class=phase-controls><button class=secondary>Stop Research</button><button>Stop Research & Synthesize Current Findings`), _tmpl$14$3 = /* @__PURE__ */ template(`<div class=research-phase><h3>Synthesizing Report</h3><p>Compiling findings into the Research Report...`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=research-phase><h3>Report Ready`), _tmpl$16$2 = /* @__PURE__ */ template(`<div class=research-desk>`), _tmpl$17$2 = /* @__PURE__ */ template(`<div class="research-quick-replies inline"aria-label="Suggested briefing responses">`), _tmpl$18$2 = /* @__PURE__ */ template(`<button type=button class=research-quick-reply>`), _tmpl$19$2 = /* @__PURE__ */ template(`<div class=objectives-card><section class=objectives-section><p class=objectives-label>Question</p><p class=objectives-question></p></section><section class=objectives-section><div class=objectives-section-header><p class=objectives-label>Research Threads</p><span></span></div><ul class=objectives-thread-list></ul></section><section class="objectives-section objectives-settings"><label class=mode-toggle><input type=checkbox><span>Walk-away mode (notified when done)</span></label><label class=traces-toggle><input type=checkbox><span>Include agent traces with report</span></label></section><div class=phase-controls><button>Start Research</button><button class=secondary>Cancel`), _tmpl$20$2 = /* @__PURE__ */ template(`<li><span></span><small> sources`), _tmpl$21$2 = /* @__PURE__ */ template(`<section class=objectives-section><p class=objectives-label>Excluded Sources</p><div class=objectives-source-list>`), _tmpl$22$2 = /* @__PURE__ */ template(`<span>`), _tmpl$23$2 = /* @__PURE__ */ template(`<div><span></span><small>`), _tmpl$24$2 = /* @__PURE__ */ template(`<div class=report-card><h4></h4><p>...</p><p> sources cited</p><button>Export as Markdown</button><button class=secondary>New Research`);
|
|
7666
7861
|
const ResearchBriefMarkdown = (props) => {
|
|
7667
7862
|
const html2 = createMemo(() => renderMarkdown(props.content));
|
|
7668
7863
|
return (() => {
|
|
@@ -8044,7 +8239,7 @@ const ResearchDesk = () => {
|
|
|
8044
8239
|
return state().phase === "briefing";
|
|
8045
8240
|
},
|
|
8046
8241
|
get children() {
|
|
8047
|
-
var _el$10 = _tmpl$9$
|
|
8242
|
+
var _el$10 = _tmpl$9$6(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling, _el$18 = _el$13.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling;
|
|
8048
8243
|
insert(_el$13, createComponent(Show, {
|
|
8049
8244
|
get when() {
|
|
8050
8245
|
return isBriefStarting();
|
|
@@ -8317,7 +8512,7 @@ const ResearchDesk = () => {
|
|
|
8317
8512
|
})();
|
|
8318
8513
|
};
|
|
8319
8514
|
delegateEvents(["input", "keydown", "click"]);
|
|
8320
|
-
var _tmpl$$b = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$b = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$a = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=page-diff-timeline-header><div class=agent-section-title>Change history for this page</div><div class=agent-muted>Newest detections are first. Each entry is a saved change burst.`), _tmpl$5$9 = /* @__PURE__ */ template(`<div class=page-diff-history-list>`), _tmpl$6$9 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=page-diff-history-item><div class=page-diff-history-time><span class=page-diff-history-label></span><span></span></div><div class=page-diff-history-card><div class=page-diff-history-summary-list></div><div class=page-diff-history-position>Entry <!> of `), _tmpl$8$6 = /* @__PURE__ */ template(`<span class=page-diff-history-summary-section>`), _tmpl$9$
|
|
8515
|
+
var _tmpl$$b = /* @__PURE__ */ template(`<div class=agent-muted>Loading...`), _tmpl$2$b = /* @__PURE__ */ template(`<div class=agent-muted>`), _tmpl$3$a = /* @__PURE__ */ template(`<div class=agent-muted>No changes detected yet.`), _tmpl$4$a = /* @__PURE__ */ template(`<div class=page-diff-timeline-header><div class=agent-section-title>Change history for this page</div><div class=agent-muted>Newest detections are first. Each entry is a saved change burst.`), _tmpl$5$9 = /* @__PURE__ */ template(`<div class=page-diff-history-list>`), _tmpl$6$9 = /* @__PURE__ */ template(`<div class=page-diff-timeline>`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=page-diff-history-item><div class=page-diff-history-time><span class=page-diff-history-label></span><span></span></div><div class=page-diff-history-card><div class=page-diff-history-summary-list></div><div class=page-diff-history-position>Entry <!> of `), _tmpl$8$6 = /* @__PURE__ */ template(`<span class=page-diff-history-summary-section>`), _tmpl$9$5 = /* @__PURE__ */ template(`<div class=page-diff-history-summary-row><span class=page-diff-history-summary>`);
|
|
8321
8516
|
const PageDiffTimeline = () => {
|
|
8322
8517
|
const {
|
|
8323
8518
|
activeTab
|
|
@@ -8420,7 +8615,7 @@ const PageDiffTimeline = () => {
|
|
|
8420
8615
|
return parseDiffSummaryParts(burst.summary);
|
|
8421
8616
|
},
|
|
8422
8617
|
children: (part) => (() => {
|
|
8423
|
-
var _el$15 = _tmpl$9$
|
|
8618
|
+
var _el$15 = _tmpl$9$5(), _el$17 = _el$15.firstChild;
|
|
8424
8619
|
insert(_el$15, createComponent(Show, {
|
|
8425
8620
|
get when() {
|
|
8426
8621
|
return part.section;
|
|
@@ -8448,7 +8643,7 @@ const PageDiffTimeline = () => {
|
|
|
8448
8643
|
})();
|
|
8449
8644
|
};
|
|
8450
8645
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
8451
|
-
var _tmpl$$a = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$a = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$9 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$9 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$8 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$8 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$6 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$5 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$0$3 = /* @__PURE__ */ template(`<div class=bookmark-save-body><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Import HTML</button><button class=bookmark-secondary-button type=button>Import JSON`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$10$3 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-export-card><div><div class=bookmark-panel-title>Export</div><div class=bookmark-panel-subtitle>Save browser-ready HTML or a full Vessel archive</div></div><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Browser HTML</button><button class=bookmark-secondary-button type=button>HTML + notes</button><button class=bookmark-secondary-button type=button>Vessel JSON</button></div></div><div class=bookmark-import-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Import Bookmarks</span><span class=bookmark-save-toggle-subtitle>Import from HTML or Vessel JSON</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$11$3 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$12$3 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$13$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$14$2 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><div class=history-panel-actions><button class=history-clear-btn>Clear</button><button class=history-clear-btn>Export HTML</button><button class=history-clear-btn>Export JSON</button><button class=history-clear-btn>Import</button></div></div><div class=history-list>`), _tmpl$15$2 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$16$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$17$1 = /* @__PURE__ */ template(`<span>`), _tmpl$18$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$19$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$21$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$22$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$23$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$25$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$26$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button><button class=sidebar-tab role=tab>Research<span class=sidebar-tab-beta>Beta</span></button></div><div class=sidebar-messages><div>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$31 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$32 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$33 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$34 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$35 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$36 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$37 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$38 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class=bookmark-ghost-button type=button>Export</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$40 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$41 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$42 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$43 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$44 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$45 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$46 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$47 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$48 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$53 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$54 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$55 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$56 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$57 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$58 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$59 = /* @__PURE__ */ template(`<div>`), _tmpl$60 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$61 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$62 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$63 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
8646
|
+
var _tmpl$$a = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$a = /* @__PURE__ */ template(`<div class=premium-inline-offer><div class=premium-inline-kicker>Vessel Premium</div><div class=premium-inline-title></div><p class=premium-inline-copy></p><div class=premium-inline-actions><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>View details`), _tmpl$3$9 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$4$9 = /* @__PURE__ */ template(`<button class=agent-primary-button type=button>Undo last action`), _tmpl$5$8 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$6$8 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$7$6 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div><div class=agent-panel-title>Supervisor</div><div class=agent-panel-subtitle></div></div><span class=agent-status-pill></span></div><div class=agent-panel-controls><button class=agent-control-button type=button></button><button class=agent-control-button type=button>Restore session</button></div><div class=agent-muted></div><div class=agent-section-header><div class=agent-section-title>Recent actions`), _tmpl$8$5 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$9$4 = /* @__PURE__ */ template(`<div class=bookmark-export-message>`), _tmpl$0$3 = /* @__PURE__ */ template(`<div class=bookmark-save-body><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Import HTML</button><button class=bookmark-secondary-button type=button>Import JSON`), _tmpl$1$3 = /* @__PURE__ */ template(`<div class=bookmark-save-card><div class=bookmark-current-title></div><div class=bookmark-current-url></div><div class=bookmark-save-controls><button class=bookmark-primary-button type=button>Save page</button></div><textarea class=bookmark-note-input placeholder="Optional note about why this matters"rows=2></textarea><textarea class=bookmark-note-input placeholder="Intent: what is this page for?"rows=1></textarea><textarea class=bookmark-note-input placeholder="Expected content: what should be here?"rows=1></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input placeholder="Agent hints (one key:value per line)"rows=2>`), _tmpl$10$3 = /* @__PURE__ */ template(`<section class=bookmark-panel><div class=bookmark-panel-header><div><div class=bookmark-panel-title>Bookmarks</div><div class=bookmark-panel-subtitle></div></div></div><input class="bookmark-input bookmark-search-input"placeholder="Search titles, URLs, notes, and folders"><div class=bookmark-export-card><div><div class=bookmark-panel-title>Export</div><div class=bookmark-panel-subtitle>Save browser-ready HTML or a full Vessel archive</div></div><div class=bookmark-export-actions><button class=bookmark-secondary-button type=button>Browser HTML</button><button class=bookmark-secondary-button type=button>HTML + notes</button><button class=bookmark-secondary-button type=button>Vessel JSON</button></div></div><div class=bookmark-import-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Import Bookmarks</span><span class=bookmark-save-toggle-subtitle>Import from HTML or Vessel JSON</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><div class=bookmark-save-shell><button class=bookmark-save-toggle type=button><span class=bookmark-save-toggle-copy><span class=bookmark-save-toggle-title>Save Current Page</span><span class=bookmark-save-toggle-subtitle>Manual bookmark save options</span></span><span class=bookmark-save-toggle-caret aria-hidden=true>▾</span></button></div><form class=bookmark-folder-create><div class=bookmark-folder-form-fields><input class=bookmark-input placeholder="Create a folder"><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=submit>New folder</button></form><div class=bookmark-folder-list>`), _tmpl$11$3 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$12$3 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><textarea class=agent-textarea rows=2 placeholder="Optional note for this checkpoint"></textarea><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$13$2 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title>Load more history</span><span class=history-entry-url>Showing <!> of `), _tmpl$14$2 = /* @__PURE__ */ template(`<p class=history-empty>No browsing history yet.`), _tmpl$15$2 = /* @__PURE__ */ template(`<div class=history-panel><div class=history-panel-header><span class=history-panel-title>Browsing History</span><div class=history-panel-actions><button class=history-clear-btn>Clear</button><button class=history-clear-btn>Export HTML</button><button class=history-clear-btn>Export JSON</button><button class=history-clear-btn>Import</button></div></div><div class=history-list>`), _tmpl$16$1 = /* @__PURE__ */ template(`<section class=agent-panel><div class=agent-panel-header><div class=agent-panel-title>What Changed</div><div class=agent-panel-subtitle>`), _tmpl$17$1 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">Give the built-in agent a bigger toolbox and longer runway: screenshots, saved sessions, workflow tracking, table extraction, and up to 1,000 tool calls per turn.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$18$1 = /* @__PURE__ */ template(`<span>`), _tmpl$19$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$20$1 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$21$1 = /* @__PURE__ */ template(`<div class=sidebar-empty><svg class=sidebar-empty-icon width=48 height=48 viewBox="0 0 48 48"aria-hidden=true><line x1=8 y1=8 x2=24 y2=5 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=24 y1=5 x2=40 y2=10 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=8 y1=8 x2=6 y2=24 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=40 y1=10 x2=44 y2=26 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=6 y1=24 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=44 y1=26 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=10 y1=38 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=38 y1=40 x2=24 y2=44 stroke=var(--border-visible) stroke-width=1 opacity=0.35></line><line x1=8 y1=8 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=24 y1=5 x2=20 y2=18 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=40 y1=10 x2=32 y2=20 stroke=var(--border-visible) stroke-width=1 opacity=0.5></line><line x1=20 y1=18 x2=32 y2=20 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.3></line><line x1=6 y1=24 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=20 y1=18 x2=18 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=32 y1=20 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=44 y1=26 x2=36 y2=30 stroke=var(--border-visible) stroke-width=1 opacity=0.45></line><line x1=18 y1=30 x2=36 y2=30 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.25></line><line x1=18 y1=30 x2=10 y2=38 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=36 y1=30 x2=38 y2=40 stroke=var(--border-visible) stroke-width=1 opacity=0.4></line><line x1=18 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><line x1=36 y1=30 x2=24 y2=44 stroke=var(--accent-primary) stroke-width=0.75 opacity=0.2></line><circle cx=8 cy=8 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=24 cy=5 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=40 cy=10 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.7></circle><circle cx=6 cy=24 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=44 cy=26 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.55></circle><circle cx=10 cy=38 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=38 cy=40 r=2 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.45></circle><circle cx=24 cy=44 r=2.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.5></circle><circle cx=20 cy=18 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.85></circle><circle cx=32 cy=20 r=4 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.9></circle><circle cx=18 cy=30 r=3 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.75></circle><circle cx=36 cy=30 r=3.5 fill=var(--bg-secondary) stroke=var(--accent-primary) stroke-width=1.5 opacity=0.8></circle></svg><p class=sidebar-empty-title>Your move.</p><p class=sidebar-empty-hint>Configure a provider in Settings (Ctrl+,) then ask anything about the current page or beyond.`), _tmpl$22$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Stop generating"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><rect x=2 y=2 width=10 height=10 rx=1.5 fill=currentColor></rect></svg>Stop`), _tmpl$23$1 = /* @__PURE__ */ template(`<button class=chat-action-btn title="Retry last prompt"><svg width=14 height=14 viewBox="0 0 14 14"fill=none aria-hidden=true><path d="M11.5 7a4.5 4.5 0 1 1-1.3-3.2"stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M10.5 1v3h-3"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg>Retry`), _tmpl$24$1 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$25$1 = /* @__PURE__ */ template(`<div class=highlight-nav><button class=highlight-nav-btn type=button title="Previous highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M8 10L4 6l4-4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=highlight-nav-label type=button title="Go to current highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><circle cx=6 cy=6 r=3 fill="rgba(196, 160, 90, 0.6)"stroke="rgba(196, 160, 90, 0.9)"stroke-width=1></circle></svg></button><button class=highlight-nav-btn type=button title="Next highlight"><svg width=12 height=12 viewBox="0 0 12 12"fill=none aria-hidden=true><path d="M4 2l4 4-4 4"stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round>`), _tmpl$26$1 = /* @__PURE__ */ template(`<button class=chat-queue-clear type=button>Clear queue`), _tmpl$27$1 = /* @__PURE__ */ template(`<div class=chat-queue-list>`), _tmpl$28$1 = /* @__PURE__ */ template(`<div class=chat-queue-status><div class=chat-queue-status-row><span>`), _tmpl$29$1 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2></textarea><button class=sidebar-send>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=sidebar><div class=sidebar-resize-handle></div><div class=sidebar-header><div class=sidebar-brand><img class=sidebar-logo alt=Vessel><span class=sidebar-brand-text>Vessel Browser</span></div><div class=sidebar-header-actions><button class=sidebar-clear title="Clear chat">Clear</button><button class=sidebar-close title="Close AI chat (Esc)"aria-label="Close AI chat"><svg width=14 height=14 viewBox="0 0 14 14"aria-hidden=true><path d="M3.5 3.5l7 7M10.5 3.5l-7 7"fill=none stroke=currentColor stroke-width=1.4 stroke-linecap=round></path></svg></button></div></div><div class=sidebar-tabs role=tablist><button class=sidebar-tab role=tab>Supervisor</button><button class=sidebar-tab role=tab>Bookmarks</button><button class=sidebar-tab role=tab>Checkpoints</button><button class=sidebar-tab role=tab>Chat</button><button class=sidebar-tab role=tab>Automate</button><button class=sidebar-tab role=tab>History</button><button class=sidebar-tab role=tab>Changes</button><button class=sidebar-tab role=tab>Research<span class=sidebar-tab-beta>Beta</span></button></div><div class=sidebar-messages><div>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$32 = /* @__PURE__ */ template(`<div class="agent-card agent-card-approval"><div class=agent-card-approval-stripe aria-hidden=true></div><div class=agent-card-title></div><div class=agent-card-copy></div><div class=agent-card-copy></div><div class=agent-card-actions><button class=agent-primary-button type=button>Approve</button><button class=agent-control-button type=button>Reject`), _tmpl$33 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$34 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$35 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$36 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$37 = /* @__PURE__ */ template(`<div class=agent-card><div class=agent-action-row><span class=agent-card-title></span><span></span></div><div class=agent-card-copy>`), _tmpl$38 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$39 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$40 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class=bookmark-ghost-button type=button>Export</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$41 = /* @__PURE__ */ template(`<button class=bookmark-ghost-button type=button>Keep bookmarks`), _tmpl$42 = /* @__PURE__ */ template(`<div class=bookmark-folder-delete-confirm><p class=bookmark-delete-prompt>Delete "<!>"?</p><div class=bookmark-delete-options><button class="bookmark-ghost-button danger"type=button></button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$43 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><div class=bookmark-folder-form-fields><input class=bookmark-input><input class=bookmark-input placeholder="Optional one-line summary"></div><button class=bookmark-secondary-button type=button>Save</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$44 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$45 = /* @__PURE__ */ template(`<div class=bookmark-folder-section><div class="bookmark-folder-header clickable"role=button tabindex=0><div class=bookmark-folder-overview><span class=bookmark-folder-chevron aria-hidden=true>▸</span><div><div class=bookmark-folder-name></div><div class=bookmark-folder-meta> saved`), _tmpl$46 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$47 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$48 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$49 = /* @__PURE__ */ template(`<div><strong>Intent:</strong> `), _tmpl$50 = /* @__PURE__ */ template(`<div><strong>Expected:</strong> `), _tmpl$51 = /* @__PURE__ */ template(`<div><strong>Key fields:</strong> `), _tmpl$52 = /* @__PURE__ */ template(`<div><strong>Hints:</strong> `), _tmpl$53 = /* @__PURE__ */ template(`<div class=bookmark-folder-edit><input class=bookmark-input placeholder="Bookmark title"><textarea class=bookmark-note-input rows=2 placeholder="Why this bookmark matters"></textarea><textarea class=bookmark-note-input rows=1 placeholder=Intent></textarea><textarea class=bookmark-note-input rows=1 placeholder="Expected content"></textarea><input class=bookmark-input placeholder="Key fields (comma-separated)"><textarea class=bookmark-note-input rows=2 placeholder="Agent hints (one key:value per line)"></textarea><div class=bookmark-item-footer><button class=bookmark-secondary-button type=button>Save edits</button><button class=bookmark-ghost-button type=button>Cancel`), _tmpl$54 = /* @__PURE__ */ template(`<div class=bookmark-item><button class=bookmark-item-link type=button><span class=bookmark-item-title></span><span class=bookmark-item-url></span></button><div class=bookmark-item-footer><span class=bookmark-item-time></span><button class=bookmark-ghost-button type=button></button><button class="bookmark-ghost-button danger"type=button>Remove`), _tmpl$55 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$56 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$57 = /* @__PURE__ */ template(`<div class=checkpoint-timeline-item><div class=checkpoint-timeline-rail><span class=checkpoint-timeline-dot></span></div><div class=checkpoint-timeline-content><div class=checkpoint-timeline-name></div><div class=checkpoint-timeline-time></div><textarea class=agent-textarea rows=2 placeholder="Add a note..."></textarea><button class=agent-control-button type=button>Restore`), _tmpl$58 = /* @__PURE__ */ template(`<button class=history-entry><span class=history-entry-title></span><span class=history-entry-url></span><span class=history-entry-time>`), _tmpl$59 = /* @__PURE__ */ template(`<div class="kit-upsell premium-chat-banner"><p class=kit-upsell-title>Vessel Premium</p><p class="kit-upsell-body premium-chat-banner-body">The Diff timeline is a premium feature. Upgrade to see a full history of what changed on this page.</p><div class="premium-inline-actions premium-chat-banner-actions"><button class="agent-primary-button premium-inline-primary"type=button>Start 7-day free trial — $5.99/mo after</button><button class="agent-control-button premium-inline-secondary"type=button>See Premium`), _tmpl$60 = /* @__PURE__ */ template(`<div>`), _tmpl$61 = /* @__PURE__ */ template(`<div class=thinking-state><div class=thinking-orb aria-hidden=true><span></span><span></span><span></span></div><div class=thinking-copy><div class=thinking-title>Thinking`), _tmpl$62 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$63 = /* @__PURE__ */ template(`<div class=chat-approval><div class=chat-approval-icon aria-hidden=true><svg width=16 height=16 viewBox="0 0 16 16"fill=none><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 4.75a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0v-3.5zM8 11.5a.75.75 0 110-1.5.75.75 0 010 1.5z"fill=currentColor></path></svg></div><div class=chat-approval-body><div class=chat-approval-title>Approval needed: <strong></strong></div><div class=chat-approval-detail></div><div class=chat-approval-actions><button class="chat-approval-btn chat-approval-approve"type=button>Approve</button><button class="chat-approval-btn chat-approval-reject"type=button>Reject`), _tmpl$64 = /* @__PURE__ */ template(`<div class=chat-queue-item><span class=chat-queue-text></span><button class=chat-queue-remove type=button>×`);
|
|
8452
8647
|
const UNSORTED_FOLDER = {
|
|
8453
8648
|
id: "unsorted",
|
|
8454
8649
|
name: "Unsorted",
|
|
@@ -8762,10 +8957,18 @@ ${contextBlock}` : contextBlock);
|
|
|
8762
8957
|
value: folder.id,
|
|
8763
8958
|
label: folder.name
|
|
8764
8959
|
})));
|
|
8765
|
-
const groupedBookmarks = createMemo(() =>
|
|
8766
|
-
|
|
8767
|
-
|
|
8768
|
-
|
|
8960
|
+
const groupedBookmarks = createMemo(() => {
|
|
8961
|
+
const byFolder = /* @__PURE__ */ new Map();
|
|
8962
|
+
for (const bookmark of bookmarksState2().bookmarks) {
|
|
8963
|
+
const items = byFolder.get(bookmark.folderId) ?? [];
|
|
8964
|
+
items.push(bookmark);
|
|
8965
|
+
byFolder.set(bookmark.folderId, items);
|
|
8966
|
+
}
|
|
8967
|
+
return bookmarkFolders().map((folder) => ({
|
|
8968
|
+
...folder,
|
|
8969
|
+
items: (byFolder.get(folder.id) ?? []).slice().sort((a, b) => b.savedAt.localeCompare(a.savedAt))
|
|
8970
|
+
}));
|
|
8971
|
+
});
|
|
8769
8972
|
const normalizedBookmarkSearch = createMemo(() => normalizeBookmarkSearchText(bookmarkSearchQuery()));
|
|
8770
8973
|
const filteredGroupedBookmarks = createMemo(() => {
|
|
8771
8974
|
const query2 = bookmarkSearchQuery().trim();
|
|
@@ -9063,9 +9266,9 @@ ${contextBlock}` : contextBlock);
|
|
|
9063
9266
|
return props.forceOpen || sidebarOpen2();
|
|
9064
9267
|
},
|
|
9065
9268
|
get children() {
|
|
9066
|
-
var _el$9 = _tmpl$
|
|
9269
|
+
var _el$9 = _tmpl$30(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$10.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$1.nextSibling, _el$16 = _el$15.firstChild;
|
|
9067
9270
|
_el$16.firstChild;
|
|
9068
|
-
var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$23.nextSibling, _el$25 = _el$24.nextSibling, _el$26 = _el$15.nextSibling, _el$
|
|
9271
|
+
var _el$19 = _el$16.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.nextSibling, _el$24 = _el$23.nextSibling, _el$25 = _el$24.nextSibling, _el$26 = _el$15.nextSibling, _el$132 = _el$26.firstChild;
|
|
9069
9272
|
_el$0.$$pointerdown = startResize;
|
|
9070
9273
|
setAttribute(_el$11, "src", vesselLogo);
|
|
9071
9274
|
addEventListener(_el$13, "click", clearHistory, true);
|
|
@@ -9132,7 +9335,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9132
9335
|
return runtimeState2().supervisor.pendingApprovals.length > 0;
|
|
9133
9336
|
},
|
|
9134
9337
|
get fallback() {
|
|
9135
|
-
return _tmpl$
|
|
9338
|
+
return _tmpl$31();
|
|
9136
9339
|
},
|
|
9137
9340
|
get children() {
|
|
9138
9341
|
return [_tmpl$5$8(), createComponent(For, {
|
|
@@ -9140,13 +9343,13 @@ ${contextBlock}` : contextBlock);
|
|
|
9140
9343
|
return runtimeState2().supervisor.pendingApprovals;
|
|
9141
9344
|
},
|
|
9142
9345
|
children: (approval) => (() => {
|
|
9143
|
-
var _el$
|
|
9144
|
-
insert(_el$
|
|
9145
|
-
insert(_el$
|
|
9146
|
-
insert(_el$
|
|
9147
|
-
_el$
|
|
9148
|
-
_el$
|
|
9149
|
-
return _el$
|
|
9346
|
+
var _el$150 = _tmpl$32(), _el$151 = _el$150.firstChild, _el$152 = _el$151.nextSibling, _el$153 = _el$152.nextSibling, _el$154 = _el$153.nextSibling, _el$155 = _el$154.nextSibling, _el$156 = _el$155.firstChild, _el$157 = _el$156.nextSibling;
|
|
9347
|
+
insert(_el$152, () => approval.name);
|
|
9348
|
+
insert(_el$153, () => approval.argsSummary);
|
|
9349
|
+
insert(_el$154, () => approval.reason);
|
|
9350
|
+
_el$156.$$click = () => void resolveApproval(approval.id, true);
|
|
9351
|
+
_el$157.$$click = () => void resolveApproval(approval.id, false);
|
|
9352
|
+
return _el$150;
|
|
9150
9353
|
})()
|
|
9151
9354
|
})];
|
|
9152
9355
|
}
|
|
@@ -9170,7 +9373,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9170
9373
|
return recentActions().length > 0;
|
|
9171
9374
|
},
|
|
9172
9375
|
get fallback() {
|
|
9173
|
-
return _tmpl$
|
|
9376
|
+
return _tmpl$33();
|
|
9174
9377
|
},
|
|
9175
9378
|
get children() {
|
|
9176
9379
|
return createComponent(Show, {
|
|
@@ -9178,7 +9381,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9178
9381
|
return actionsExpanded();
|
|
9179
9382
|
},
|
|
9180
9383
|
get fallback() {
|
|
9181
|
-
return _tmpl$
|
|
9384
|
+
return _tmpl$34();
|
|
9182
9385
|
},
|
|
9183
9386
|
get children() {
|
|
9184
9387
|
return createComponent(For, {
|
|
@@ -9186,32 +9389,32 @@ ${contextBlock}` : contextBlock);
|
|
|
9186
9389
|
return recentActions();
|
|
9187
9390
|
},
|
|
9188
9391
|
children: (action) => (() => {
|
|
9189
|
-
var _el$
|
|
9190
|
-
insert(_el$
|
|
9191
|
-
insert(_el$
|
|
9192
|
-
insert(_el$
|
|
9193
|
-
insert(_el$
|
|
9392
|
+
var _el$160 = _tmpl$37(), _el$161 = _el$160.firstChild, _el$162 = _el$161.firstChild, _el$163 = _el$162.nextSibling, _el$164 = _el$161.nextSibling;
|
|
9393
|
+
insert(_el$162, () => action.name);
|
|
9394
|
+
insert(_el$163, () => action.status);
|
|
9395
|
+
insert(_el$164, () => action.argsSummary);
|
|
9396
|
+
insert(_el$160, createComponent(Show, {
|
|
9194
9397
|
get when() {
|
|
9195
9398
|
return action.resultSummary;
|
|
9196
9399
|
},
|
|
9197
9400
|
get children() {
|
|
9198
|
-
var _el$
|
|
9199
|
-
insert(_el$
|
|
9200
|
-
return _el$
|
|
9401
|
+
var _el$165 = _tmpl$35();
|
|
9402
|
+
insert(_el$165, () => action.resultSummary);
|
|
9403
|
+
return _el$165;
|
|
9201
9404
|
}
|
|
9202
9405
|
}), null);
|
|
9203
|
-
insert(_el$
|
|
9406
|
+
insert(_el$160, createComponent(Show, {
|
|
9204
9407
|
get when() {
|
|
9205
9408
|
return action.error;
|
|
9206
9409
|
},
|
|
9207
9410
|
get children() {
|
|
9208
|
-
var _el$
|
|
9209
|
-
insert(_el$
|
|
9210
|
-
return _el$
|
|
9411
|
+
var _el$166 = _tmpl$36();
|
|
9412
|
+
insert(_el$166, () => action.error);
|
|
9413
|
+
return _el$166;
|
|
9211
9414
|
}
|
|
9212
9415
|
}), null);
|
|
9213
|
-
createRenderEffect(() => className(_el$
|
|
9214
|
-
return _el$
|
|
9416
|
+
createRenderEffect(() => className(_el$163, `agent-action-status ${action.status}`));
|
|
9417
|
+
return _el$160;
|
|
9215
9418
|
})()
|
|
9216
9419
|
});
|
|
9217
9420
|
}
|
|
@@ -9221,7 +9424,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9221
9424
|
createRenderEffect(() => _el$32.classList.toggle("paused", !!runtimeState2().supervisor.paused));
|
|
9222
9425
|
return _el$27;
|
|
9223
9426
|
}
|
|
9224
|
-
}), _el$
|
|
9427
|
+
}), _el$132);
|
|
9225
9428
|
insert(_el$26, createComponent(Show, {
|
|
9226
9429
|
get when() {
|
|
9227
9430
|
return sidebarTab() === "bookmarks";
|
|
@@ -9249,7 +9452,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9249
9452
|
return bookmarkExportMessage();
|
|
9250
9453
|
},
|
|
9251
9454
|
get children() {
|
|
9252
|
-
var _el$55 = _tmpl$9$
|
|
9455
|
+
var _el$55 = _tmpl$9$4();
|
|
9253
9456
|
insert(_el$55, bookmarkExportMessage);
|
|
9254
9457
|
return _el$55;
|
|
9255
9458
|
}
|
|
@@ -9268,7 +9471,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9268
9471
|
return bookmarkImportMessage();
|
|
9269
9472
|
},
|
|
9270
9473
|
get children() {
|
|
9271
|
-
var _el$64 = _tmpl$9$
|
|
9474
|
+
var _el$64 = _tmpl$9$4();
|
|
9272
9475
|
insert(_el$64, bookmarkImportMessage);
|
|
9273
9476
|
return _el$64;
|
|
9274
9477
|
}
|
|
@@ -9329,12 +9532,12 @@ ${contextBlock}` : contextBlock);
|
|
|
9329
9532
|
},
|
|
9330
9533
|
get fallback() {
|
|
9331
9534
|
return (() => {
|
|
9332
|
-
var _el$
|
|
9333
|
-
insert(_el$
|
|
9535
|
+
var _el$167 = _tmpl$38();
|
|
9536
|
+
insert(_el$167, (() => {
|
|
9334
9537
|
var _c$5 = memo(() => !!normalizedBookmarkSearch());
|
|
9335
9538
|
return () => _c$5() ? `No bookmarks matched "${bookmarkSearchQuery().trim()}".` : "No bookmarks saved yet.";
|
|
9336
9539
|
})());
|
|
9337
|
-
return _el$
|
|
9540
|
+
return _el$167;
|
|
9338
9541
|
})();
|
|
9339
9542
|
},
|
|
9340
9543
|
get children() {
|
|
@@ -9343,105 +9546,105 @@ ${contextBlock}` : contextBlock);
|
|
|
9343
9546
|
return filteredGroupedBookmarks();
|
|
9344
9547
|
},
|
|
9345
9548
|
children: (folder) => (() => {
|
|
9346
|
-
var _el$
|
|
9347
|
-
_el$
|
|
9549
|
+
var _el$168 = _tmpl$45(), _el$169 = _el$168.firstChild, _el$170 = _el$169.firstChild, _el$171 = _el$170.firstChild, _el$172 = _el$171.nextSibling, _el$173 = _el$172.firstChild, _el$174 = _el$173.nextSibling, _el$175 = _el$174.firstChild;
|
|
9550
|
+
_el$169.$$keydown = (e) => {
|
|
9348
9551
|
if (e.key === "Enter" || e.key === " ") {
|
|
9349
9552
|
e.preventDefault();
|
|
9350
9553
|
toggleFolderExpanded(folder.id);
|
|
9351
9554
|
}
|
|
9352
9555
|
};
|
|
9353
|
-
_el$
|
|
9354
|
-
insert(_el$
|
|
9355
|
-
insert(_el$
|
|
9356
|
-
insert(_el$
|
|
9556
|
+
_el$169.$$click = () => toggleFolderExpanded(folder.id);
|
|
9557
|
+
insert(_el$173, () => folder.name);
|
|
9558
|
+
insert(_el$174, () => folder.items.length, _el$175);
|
|
9559
|
+
insert(_el$172, createComponent(Show, {
|
|
9357
9560
|
get when() {
|
|
9358
9561
|
return folder.summary;
|
|
9359
9562
|
},
|
|
9360
9563
|
get children() {
|
|
9361
|
-
var _el$
|
|
9362
|
-
insert(_el$
|
|
9363
|
-
return _el$
|
|
9564
|
+
var _el$176 = _tmpl$39();
|
|
9565
|
+
insert(_el$176, () => folder.summary);
|
|
9566
|
+
return _el$176;
|
|
9364
9567
|
}
|
|
9365
9568
|
}), null);
|
|
9366
|
-
insert(_el$
|
|
9569
|
+
insert(_el$169, createComponent(Show, {
|
|
9367
9570
|
get when() {
|
|
9368
9571
|
return folder.id !== UNSORTED_FOLDER.id;
|
|
9369
9572
|
},
|
|
9370
9573
|
get children() {
|
|
9371
|
-
var _el$
|
|
9372
|
-
_el$
|
|
9574
|
+
var _el$177 = _tmpl$40(), _el$178 = _el$177.firstChild, _el$179 = _el$178.nextSibling, _el$180 = _el$179.nextSibling;
|
|
9575
|
+
_el$178.$$click = (e) => {
|
|
9373
9576
|
e.stopPropagation();
|
|
9374
9577
|
setEditingFolderId(folder.id);
|
|
9375
9578
|
setEditingFolderName(folder.name);
|
|
9376
9579
|
setEditingFolderSummary(folder.summary || "");
|
|
9377
9580
|
};
|
|
9378
|
-
_el$
|
|
9581
|
+
_el$179.$$click = (e) => {
|
|
9379
9582
|
e.stopPropagation();
|
|
9380
9583
|
void handleExportFolder(folder.id, folder.name);
|
|
9381
9584
|
};
|
|
9382
|
-
_el$
|
|
9585
|
+
_el$180.$$click = (e) => {
|
|
9383
9586
|
e.stopPropagation();
|
|
9384
9587
|
setDeletingFolderId(folder.id);
|
|
9385
9588
|
};
|
|
9386
|
-
createRenderEffect(() => _el$
|
|
9387
|
-
return _el$
|
|
9589
|
+
createRenderEffect(() => _el$179.disabled = bookmarkExporting());
|
|
9590
|
+
return _el$177;
|
|
9388
9591
|
}
|
|
9389
9592
|
}), null);
|
|
9390
|
-
insert(_el$
|
|
9593
|
+
insert(_el$168, createComponent(Show, {
|
|
9391
9594
|
get when() {
|
|
9392
9595
|
return deletingFolderId() === folder.id;
|
|
9393
9596
|
},
|
|
9394
9597
|
get children() {
|
|
9395
|
-
var _el$
|
|
9396
|
-
_el$
|
|
9397
|
-
var _el$
|
|
9398
|
-
insert(_el$
|
|
9399
|
-
insert(_el$
|
|
9598
|
+
var _el$181 = _tmpl$42(), _el$182 = _el$181.firstChild, _el$183 = _el$182.firstChild, _el$185 = _el$183.nextSibling;
|
|
9599
|
+
_el$185.nextSibling;
|
|
9600
|
+
var _el$186 = _el$182.nextSibling, _el$188 = _el$186.firstChild, _el$189 = _el$188.nextSibling;
|
|
9601
|
+
insert(_el$182, () => folder.name, _el$185);
|
|
9602
|
+
insert(_el$182, (() => {
|
|
9400
9603
|
var _c$6 = memo(() => folder.items.length > 0);
|
|
9401
9604
|
return () => _c$6() ? ` This folder has ${folder.items.length} bookmark${folder.items.length === 1 ? "" : "s"}.` : "";
|
|
9402
9605
|
})(), null);
|
|
9403
|
-
insert(_el$
|
|
9606
|
+
insert(_el$186, createComponent(Show, {
|
|
9404
9607
|
get when() {
|
|
9405
9608
|
return folder.items.length > 0;
|
|
9406
9609
|
},
|
|
9407
9610
|
get children() {
|
|
9408
|
-
var _el$
|
|
9409
|
-
_el$
|
|
9410
|
-
return _el$
|
|
9611
|
+
var _el$187 = _tmpl$41();
|
|
9612
|
+
_el$187.$$click = () => void handleRemoveFolder(folder.id, false);
|
|
9613
|
+
return _el$187;
|
|
9411
9614
|
}
|
|
9412
|
-
}), _el$
|
|
9413
|
-
_el$
|
|
9414
|
-
insert(_el$
|
|
9415
|
-
_el$
|
|
9416
|
-
return _el$
|
|
9615
|
+
}), _el$188);
|
|
9616
|
+
_el$188.$$click = () => void handleRemoveFolder(folder.id, true);
|
|
9617
|
+
insert(_el$188, () => folder.items.length > 0 ? "Delete all" : "Delete folder");
|
|
9618
|
+
_el$189.$$click = () => setDeletingFolderId(null);
|
|
9619
|
+
return _el$181;
|
|
9417
9620
|
}
|
|
9418
9621
|
}), null);
|
|
9419
|
-
insert(_el$
|
|
9622
|
+
insert(_el$168, createComponent(Show, {
|
|
9420
9623
|
get when() {
|
|
9421
9624
|
return editingFolderId() === folder.id;
|
|
9422
9625
|
},
|
|
9423
9626
|
get children() {
|
|
9424
|
-
var _el$
|
|
9425
|
-
_el$
|
|
9426
|
-
_el$
|
|
9427
|
-
_el$
|
|
9428
|
-
_el$
|
|
9627
|
+
var _el$190 = _tmpl$43(), _el$191 = _el$190.firstChild, _el$192 = _el$191.firstChild, _el$193 = _el$192.nextSibling, _el$194 = _el$191.nextSibling, _el$195 = _el$194.nextSibling;
|
|
9628
|
+
_el$192.$$input = (e) => setEditingFolderName(e.currentTarget.value);
|
|
9629
|
+
_el$193.$$input = (e) => setEditingFolderSummary(e.currentTarget.value);
|
|
9630
|
+
_el$194.$$click = () => void handleRenameFolder(folder.id);
|
|
9631
|
+
_el$195.$$click = () => {
|
|
9429
9632
|
setEditingFolderId(null);
|
|
9430
9633
|
setEditingFolderName("");
|
|
9431
9634
|
setEditingFolderSummary("");
|
|
9432
9635
|
};
|
|
9433
|
-
createRenderEffect(() => _el$
|
|
9434
|
-
createRenderEffect(() => _el$
|
|
9435
|
-
createRenderEffect(() => _el$
|
|
9436
|
-
return _el$
|
|
9636
|
+
createRenderEffect(() => _el$194.disabled = !editingFolderName().trim());
|
|
9637
|
+
createRenderEffect(() => _el$192.value = editingFolderName());
|
|
9638
|
+
createRenderEffect(() => _el$193.value = editingFolderSummary());
|
|
9639
|
+
return _el$190;
|
|
9437
9640
|
}
|
|
9438
9641
|
}), null);
|
|
9439
|
-
insert(_el$
|
|
9642
|
+
insert(_el$168, createComponent(Show, {
|
|
9440
9643
|
get when() {
|
|
9441
9644
|
return isFolderExpanded(folder.id);
|
|
9442
9645
|
},
|
|
9443
9646
|
get fallback() {
|
|
9444
|
-
return _tmpl$
|
|
9647
|
+
return _tmpl$46();
|
|
9445
9648
|
},
|
|
9446
9649
|
get children() {
|
|
9447
9650
|
return createComponent(Show, {
|
|
@@ -9449,125 +9652,125 @@ ${contextBlock}` : contextBlock);
|
|
|
9449
9652
|
return folder.items.length > 0;
|
|
9450
9653
|
},
|
|
9451
9654
|
get fallback() {
|
|
9452
|
-
return _tmpl$
|
|
9655
|
+
return _tmpl$47();
|
|
9453
9656
|
},
|
|
9454
9657
|
get children() {
|
|
9455
|
-
var _el$
|
|
9456
|
-
insert(_el$
|
|
9658
|
+
var _el$196 = _tmpl$44();
|
|
9659
|
+
insert(_el$196, createComponent(For, {
|
|
9457
9660
|
get each() {
|
|
9458
9661
|
return folder.items;
|
|
9459
9662
|
},
|
|
9460
9663
|
children: (bookmark) => (() => {
|
|
9461
|
-
var _el$
|
|
9462
|
-
_el$
|
|
9463
|
-
insert(_el$
|
|
9464
|
-
insert(_el$
|
|
9465
|
-
insert(_el$
|
|
9664
|
+
var _el$199 = _tmpl$54(), _el$200 = _el$199.firstChild, _el$201 = _el$200.firstChild, _el$202 = _el$201.nextSibling, _el$227 = _el$200.nextSibling, _el$228 = _el$227.firstChild, _el$229 = _el$228.nextSibling, _el$230 = _el$229.nextSibling;
|
|
9665
|
+
_el$200.$$click = () => void createTab(bookmark.url);
|
|
9666
|
+
insert(_el$201, () => bookmark.title || bookmark.url);
|
|
9667
|
+
insert(_el$202, () => bookmark.url);
|
|
9668
|
+
insert(_el$199, createComponent(Show, {
|
|
9466
9669
|
get when() {
|
|
9467
9670
|
return bookmark.note;
|
|
9468
9671
|
},
|
|
9469
9672
|
get children() {
|
|
9470
|
-
var _el$
|
|
9471
|
-
insert(_el$
|
|
9472
|
-
return _el$
|
|
9673
|
+
var _el$203 = _tmpl$48();
|
|
9674
|
+
insert(_el$203, () => bookmark.note);
|
|
9675
|
+
return _el$203;
|
|
9473
9676
|
}
|
|
9474
|
-
}), _el$
|
|
9475
|
-
insert(_el$
|
|
9677
|
+
}), _el$227);
|
|
9678
|
+
insert(_el$199, createComponent(Show, {
|
|
9476
9679
|
get when() {
|
|
9477
9680
|
return bookmark.intent || bookmark.expectedContent || (bookmark.keyFields?.length || 0) > 0 || (bookmark.agentHints && Object.keys(bookmark.agentHints).length || 0) > 0;
|
|
9478
9681
|
},
|
|
9479
9682
|
get children() {
|
|
9480
|
-
var _el$
|
|
9481
|
-
insert(_el$
|
|
9683
|
+
var _el$204 = _tmpl$48();
|
|
9684
|
+
insert(_el$204, createComponent(Show, {
|
|
9482
9685
|
get when() {
|
|
9483
9686
|
return bookmark.intent;
|
|
9484
9687
|
},
|
|
9485
9688
|
get children() {
|
|
9486
|
-
var _el$
|
|
9487
|
-
_el$
|
|
9488
|
-
insert(_el$
|
|
9489
|
-
return _el$
|
|
9689
|
+
var _el$205 = _tmpl$49(), _el$206 = _el$205.firstChild;
|
|
9690
|
+
_el$206.nextSibling;
|
|
9691
|
+
insert(_el$205, () => bookmark.intent, null);
|
|
9692
|
+
return _el$205;
|
|
9490
9693
|
}
|
|
9491
9694
|
}), null);
|
|
9492
|
-
insert(_el$
|
|
9695
|
+
insert(_el$204, createComponent(Show, {
|
|
9493
9696
|
get when() {
|
|
9494
9697
|
return bookmark.expectedContent;
|
|
9495
9698
|
},
|
|
9496
9699
|
get children() {
|
|
9497
|
-
var _el$
|
|
9498
|
-
_el$
|
|
9499
|
-
insert(_el$
|
|
9500
|
-
return _el$
|
|
9700
|
+
var _el$208 = _tmpl$50(), _el$209 = _el$208.firstChild;
|
|
9701
|
+
_el$209.nextSibling;
|
|
9702
|
+
insert(_el$208, () => bookmark.expectedContent, null);
|
|
9703
|
+
return _el$208;
|
|
9501
9704
|
}
|
|
9502
9705
|
}), null);
|
|
9503
|
-
insert(_el$
|
|
9706
|
+
insert(_el$204, createComponent(Show, {
|
|
9504
9707
|
get when() {
|
|
9505
9708
|
return (bookmark.keyFields?.length || 0) > 0;
|
|
9506
9709
|
},
|
|
9507
9710
|
get children() {
|
|
9508
|
-
var _el$
|
|
9509
|
-
_el$
|
|
9510
|
-
insert(_el$
|
|
9511
|
-
return _el$
|
|
9711
|
+
var _el$211 = _tmpl$51(), _el$212 = _el$211.firstChild;
|
|
9712
|
+
_el$212.nextSibling;
|
|
9713
|
+
insert(_el$211, () => bookmark.keyFields?.join(", "), null);
|
|
9714
|
+
return _el$211;
|
|
9512
9715
|
}
|
|
9513
9716
|
}), null);
|
|
9514
|
-
insert(_el$
|
|
9717
|
+
insert(_el$204, createComponent(Show, {
|
|
9515
9718
|
get when() {
|
|
9516
9719
|
return memo(() => !!bookmark.agentHints)() && Object.keys(bookmark.agentHints).length > 0;
|
|
9517
9720
|
},
|
|
9518
9721
|
get children() {
|
|
9519
|
-
var _el$
|
|
9520
|
-
_el$
|
|
9521
|
-
insert(_el$
|
|
9522
|
-
return _el$
|
|
9722
|
+
var _el$214 = _tmpl$52(), _el$215 = _el$214.firstChild;
|
|
9723
|
+
_el$215.nextSibling;
|
|
9724
|
+
insert(_el$214, () => Object.entries(bookmark.agentHints || {}).map(([key, hint]) => `${key}: ${hint}`).join(" • "), null);
|
|
9725
|
+
return _el$214;
|
|
9523
9726
|
}
|
|
9524
9727
|
}), null);
|
|
9525
|
-
return _el$
|
|
9728
|
+
return _el$204;
|
|
9526
9729
|
}
|
|
9527
|
-
}), _el$
|
|
9528
|
-
insert(_el$
|
|
9730
|
+
}), _el$227);
|
|
9731
|
+
insert(_el$199, createComponent(Show, {
|
|
9529
9732
|
get when() {
|
|
9530
9733
|
return editingBookmarkId() === bookmark.id;
|
|
9531
9734
|
},
|
|
9532
9735
|
get children() {
|
|
9533
|
-
var _el$
|
|
9534
|
-
_el$
|
|
9535
|
-
_el$
|
|
9536
|
-
_el$
|
|
9537
|
-
_el$
|
|
9538
|
-
_el$
|
|
9539
|
-
_el$
|
|
9540
|
-
_el$
|
|
9541
|
-
_el$
|
|
9542
|
-
createRenderEffect(() => _el$
|
|
9543
|
-
createRenderEffect(() => _el$
|
|
9544
|
-
createRenderEffect(() => _el$
|
|
9545
|
-
createRenderEffect(() => _el$
|
|
9546
|
-
createRenderEffect(() => _el$
|
|
9547
|
-
createRenderEffect(() => _el$
|
|
9548
|
-
return _el$
|
|
9736
|
+
var _el$217 = _tmpl$53(), _el$218 = _el$217.firstChild, _el$219 = _el$218.nextSibling, _el$220 = _el$219.nextSibling, _el$221 = _el$220.nextSibling, _el$222 = _el$221.nextSibling, _el$223 = _el$222.nextSibling, _el$224 = _el$223.nextSibling, _el$225 = _el$224.firstChild, _el$226 = _el$225.nextSibling;
|
|
9737
|
+
_el$218.$$input = (e) => setEditingBookmarkTitle(e.currentTarget.value);
|
|
9738
|
+
_el$219.$$input = (e) => setEditingBookmarkNote(e.currentTarget.value);
|
|
9739
|
+
_el$220.$$input = (e) => setEditingBookmarkIntent(e.currentTarget.value);
|
|
9740
|
+
_el$221.$$input = (e) => setEditingBookmarkExpectedContent(e.currentTarget.value);
|
|
9741
|
+
_el$222.$$input = (e) => setEditingBookmarkKeyFields(e.currentTarget.value);
|
|
9742
|
+
_el$223.$$input = (e) => setEditingBookmarkAgentHints(e.currentTarget.value);
|
|
9743
|
+
_el$225.$$click = () => void handleUpdateBookmark(bookmark.id);
|
|
9744
|
+
_el$226.$$click = resetBookmarkEditor;
|
|
9745
|
+
createRenderEffect(() => _el$218.value = editingBookmarkTitle());
|
|
9746
|
+
createRenderEffect(() => _el$219.value = editingBookmarkNote());
|
|
9747
|
+
createRenderEffect(() => _el$220.value = editingBookmarkIntent());
|
|
9748
|
+
createRenderEffect(() => _el$221.value = editingBookmarkExpectedContent());
|
|
9749
|
+
createRenderEffect(() => _el$222.value = editingBookmarkKeyFields());
|
|
9750
|
+
createRenderEffect(() => _el$223.value = editingBookmarkAgentHints());
|
|
9751
|
+
return _el$217;
|
|
9549
9752
|
}
|
|
9550
|
-
}), _el$
|
|
9551
|
-
insert(_el$
|
|
9552
|
-
_el$
|
|
9553
|
-
insert(_el$
|
|
9554
|
-
_el$
|
|
9753
|
+
}), _el$227);
|
|
9754
|
+
insert(_el$228, () => formatBookmarkDate(bookmark.savedAt));
|
|
9755
|
+
_el$229.$$click = () => editingBookmarkId() === bookmark.id ? resetBookmarkEditor() : startEditingBookmark(bookmark);
|
|
9756
|
+
insert(_el$229, () => editingBookmarkId() === bookmark.id ? "Close" : "Edit");
|
|
9757
|
+
_el$230.$$click = () => {
|
|
9555
9758
|
if (editingBookmarkId() === bookmark.id) {
|
|
9556
9759
|
resetBookmarkEditor();
|
|
9557
9760
|
}
|
|
9558
9761
|
void removeBookmark(bookmark.id);
|
|
9559
9762
|
};
|
|
9560
|
-
createRenderEffect(() => setAttribute(_el$
|
|
9561
|
-
return _el$
|
|
9763
|
+
createRenderEffect(() => setAttribute(_el$199, "data-bookmark-id", bookmark.id));
|
|
9764
|
+
return _el$199;
|
|
9562
9765
|
})()
|
|
9563
9766
|
}));
|
|
9564
|
-
return _el$
|
|
9767
|
+
return _el$196;
|
|
9565
9768
|
}
|
|
9566
9769
|
});
|
|
9567
9770
|
}
|
|
9568
9771
|
}), null);
|
|
9569
|
-
createRenderEffect(() => _el$
|
|
9570
|
-
return _el$
|
|
9772
|
+
createRenderEffect(() => _el$171.classList.toggle("expanded", !!isFolderExpanded(folder.id)));
|
|
9773
|
+
return _el$168;
|
|
9571
9774
|
})()
|
|
9572
9775
|
});
|
|
9573
9776
|
}
|
|
@@ -9594,7 +9797,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9594
9797
|
createRenderEffect(() => _el$82.value = newFolderSummary());
|
|
9595
9798
|
return _el$42;
|
|
9596
9799
|
}
|
|
9597
|
-
}), _el$
|
|
9800
|
+
}), _el$132);
|
|
9598
9801
|
insert(_el$26, createComponent(Show, {
|
|
9599
9802
|
get when() {
|
|
9600
9803
|
return sidebarTab() === "checkpoints";
|
|
@@ -9619,7 +9822,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9619
9822
|
return recentCheckpoints().length > 0;
|
|
9620
9823
|
},
|
|
9621
9824
|
get fallback() {
|
|
9622
|
-
return _tmpl$
|
|
9825
|
+
return _tmpl$55();
|
|
9623
9826
|
},
|
|
9624
9827
|
get children() {
|
|
9625
9828
|
var _el$96 = _tmpl$11$3();
|
|
@@ -9628,22 +9831,22 @@ ${contextBlock}` : contextBlock);
|
|
|
9628
9831
|
return recentCheckpoints();
|
|
9629
9832
|
},
|
|
9630
9833
|
children: (checkpoint, i) => (() => {
|
|
9631
|
-
var _el$
|
|
9632
|
-
insert(_el$
|
|
9834
|
+
var _el$232 = _tmpl$57(), _el$233 = _el$232.firstChild, _el$234 = _el$233.firstChild, _el$236 = _el$233.nextSibling, _el$237 = _el$236.firstChild, _el$238 = _el$237.nextSibling, _el$239 = _el$238.nextSibling, _el$240 = _el$239.nextSibling;
|
|
9835
|
+
insert(_el$233, createComponent(Show, {
|
|
9633
9836
|
get when() {
|
|
9634
9837
|
return i() < recentCheckpoints().length - 1;
|
|
9635
9838
|
},
|
|
9636
9839
|
get children() {
|
|
9637
|
-
return _tmpl$
|
|
9840
|
+
return _tmpl$56();
|
|
9638
9841
|
}
|
|
9639
9842
|
}), null);
|
|
9640
|
-
insert(_el$
|
|
9641
|
-
insert(_el$
|
|
9642
|
-
_el$
|
|
9643
|
-
_el$
|
|
9644
|
-
createRenderEffect(() => _el$
|
|
9645
|
-
createRenderEffect(() => _el$
|
|
9646
|
-
return _el$
|
|
9843
|
+
insert(_el$237, () => checkpoint.name);
|
|
9844
|
+
insert(_el$238, () => new Date(checkpoint.createdAt).toLocaleString());
|
|
9845
|
+
_el$239.addEventListener("blur", (e) => void updateCheckpointNote(checkpoint.id, e.currentTarget.value));
|
|
9846
|
+
_el$240.$$click = () => void restoreCheckpoint(checkpoint.id);
|
|
9847
|
+
createRenderEffect(() => _el$234.classList.toggle("latest", !!(i() === 0)));
|
|
9848
|
+
createRenderEffect(() => _el$239.value = checkpoint.note || "");
|
|
9849
|
+
return _el$232;
|
|
9647
9850
|
})()
|
|
9648
9851
|
}));
|
|
9649
9852
|
return _el$96;
|
|
@@ -9653,7 +9856,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9653
9856
|
createRenderEffect(() => _el$93.value = checkpointNote());
|
|
9654
9857
|
return _el$85;
|
|
9655
9858
|
}
|
|
9656
|
-
}), _el$
|
|
9859
|
+
}), _el$132);
|
|
9657
9860
|
insert(_el$26, createComponent(Show, {
|
|
9658
9861
|
get when() {
|
|
9659
9862
|
return sidebarTab() === "automation";
|
|
@@ -9663,7 +9866,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9663
9866
|
onRun: () => setSidebarTab("supervisor")
|
|
9664
9867
|
});
|
|
9665
9868
|
}
|
|
9666
|
-
}), _el$
|
|
9869
|
+
}), _el$132);
|
|
9667
9870
|
insert(_el$26, createComponent(Show, {
|
|
9668
9871
|
get when() {
|
|
9669
9872
|
return sidebarTab() === "research";
|
|
@@ -9671,13 +9874,13 @@ ${contextBlock}` : contextBlock);
|
|
|
9671
9874
|
get children() {
|
|
9672
9875
|
return createComponent(ResearchDesk, {});
|
|
9673
9876
|
}
|
|
9674
|
-
}), _el$
|
|
9877
|
+
}), _el$132);
|
|
9675
9878
|
insert(_el$26, createComponent(Show, {
|
|
9676
9879
|
get when() {
|
|
9677
9880
|
return sidebarTab() === "history";
|
|
9678
9881
|
},
|
|
9679
9882
|
get children() {
|
|
9680
|
-
var _el$97 = _tmpl$
|
|
9883
|
+
var _el$97 = _tmpl$15$2(), _el$98 = _el$97.firstChild, _el$99 = _el$98.firstChild, _el$100 = _el$99.nextSibling, _el$101 = _el$100.firstChild, _el$102 = _el$101.nextSibling, _el$103 = _el$102.nextSibling, _el$104 = _el$103.nextSibling, _el$105 = _el$98.nextSibling;
|
|
9681
9884
|
_el$101.$$click = async () => {
|
|
9682
9885
|
await history.clear();
|
|
9683
9886
|
};
|
|
@@ -9698,52 +9901,65 @@ ${contextBlock}` : contextBlock);
|
|
|
9698
9901
|
return history.historyState().entries;
|
|
9699
9902
|
},
|
|
9700
9903
|
children: (entry) => (() => {
|
|
9701
|
-
var _el$
|
|
9702
|
-
_el$
|
|
9703
|
-
insert(_el$
|
|
9704
|
-
insert(_el$
|
|
9705
|
-
insert(_el$
|
|
9706
|
-
return _el$
|
|
9904
|
+
var _el$241 = _tmpl$58(), _el$242 = _el$241.firstChild, _el$243 = _el$242.nextSibling, _el$244 = _el$243.nextSibling;
|
|
9905
|
+
_el$241.$$click = () => createTab(entry.url);
|
|
9906
|
+
insert(_el$242, () => entry.title || entry.url);
|
|
9907
|
+
insert(_el$243, () => entry.url);
|
|
9908
|
+
insert(_el$244, () => new Date(entry.visitedAt).toLocaleString());
|
|
9909
|
+
return _el$241;
|
|
9707
9910
|
})()
|
|
9708
9911
|
}), null);
|
|
9912
|
+
insert(_el$105, createComponent(Show, {
|
|
9913
|
+
get when() {
|
|
9914
|
+
return history.hasMore();
|
|
9915
|
+
},
|
|
9916
|
+
get children() {
|
|
9917
|
+
var _el$106 = _tmpl$13$2(), _el$107 = _el$106.firstChild, _el$108 = _el$107.nextSibling, _el$109 = _el$108.firstChild, _el$112 = _el$109.nextSibling;
|
|
9918
|
+
_el$112.nextSibling;
|
|
9919
|
+
_el$106.$$click = () => void history.loadMore();
|
|
9920
|
+
insert(_el$108, () => history.historyState().entries.length, _el$112);
|
|
9921
|
+
insert(_el$108, () => history.historyTotal(), null);
|
|
9922
|
+
return _el$106;
|
|
9923
|
+
}
|
|
9924
|
+
}), null);
|
|
9709
9925
|
insert(_el$105, createComponent(Show, {
|
|
9710
9926
|
get when() {
|
|
9711
9927
|
return history.historyState().entries.length === 0;
|
|
9712
9928
|
},
|
|
9713
9929
|
get children() {
|
|
9714
|
-
return _tmpl$
|
|
9930
|
+
return _tmpl$14$2();
|
|
9715
9931
|
}
|
|
9716
9932
|
}), null);
|
|
9717
9933
|
return _el$97;
|
|
9718
9934
|
}
|
|
9719
|
-
}), _el$
|
|
9935
|
+
}), _el$132);
|
|
9720
9936
|
insert(_el$26, createComponent(Show, {
|
|
9721
9937
|
get when() {
|
|
9722
9938
|
return sidebarTab() === "diff";
|
|
9723
9939
|
},
|
|
9724
9940
|
get children() {
|
|
9725
|
-
var _el$
|
|
9726
|
-
insert(_el$
|
|
9727
|
-
insert(_el$
|
|
9941
|
+
var _el$114 = _tmpl$16$1(), _el$115 = _el$114.firstChild, _el$116 = _el$115.firstChild, _el$117 = _el$116.nextSibling;
|
|
9942
|
+
insert(_el$117, () => isPremium() ? "Page change timeline" : "Premium feature");
|
|
9943
|
+
insert(_el$114, createComponent(Show, {
|
|
9728
9944
|
get when() {
|
|
9729
9945
|
return isPremium();
|
|
9730
9946
|
},
|
|
9731
9947
|
get fallback() {
|
|
9732
9948
|
return (() => {
|
|
9733
|
-
var _el$
|
|
9734
|
-
_el$
|
|
9949
|
+
var _el$245 = _tmpl$59(), _el$246 = _el$245.firstChild, _el$247 = _el$246.nextSibling, _el$248 = _el$247.nextSibling, _el$249 = _el$248.firstChild, _el$250 = _el$249.nextSibling;
|
|
9950
|
+
_el$249.$$click = () => void window.vessel.premium.checkout(premiumState().email || void 0).catch(() => {
|
|
9735
9951
|
});
|
|
9736
|
-
_el$
|
|
9737
|
-
return _el$
|
|
9952
|
+
_el$250.$$click = openPremiumDetails;
|
|
9953
|
+
return _el$245;
|
|
9738
9954
|
})();
|
|
9739
9955
|
},
|
|
9740
9956
|
get children() {
|
|
9741
9957
|
return createComponent(PageDiffTimeline, {});
|
|
9742
9958
|
}
|
|
9743
9959
|
}), null);
|
|
9744
|
-
return _el$
|
|
9960
|
+
return _el$114;
|
|
9745
9961
|
}
|
|
9746
|
-
}), _el$
|
|
9962
|
+
}), _el$132);
|
|
9747
9963
|
insert(_el$26, createComponent(Show, {
|
|
9748
9964
|
get when() {
|
|
9749
9965
|
return sidebarTab() === "chat";
|
|
@@ -9754,23 +9970,23 @@ ${contextBlock}` : contextBlock);
|
|
|
9754
9970
|
return !isPremium();
|
|
9755
9971
|
},
|
|
9756
9972
|
get children() {
|
|
9757
|
-
var _el$
|
|
9758
|
-
_el$
|
|
9759
|
-
_el$
|
|
9760
|
-
return _el$
|
|
9973
|
+
var _el$118 = _tmpl$17$1(), _el$119 = _el$118.firstChild, _el$120 = _el$119.nextSibling, _el$121 = _el$120.nextSibling, _el$122 = _el$121.firstChild, _el$123 = _el$122.nextSibling;
|
|
9974
|
+
_el$122.$$click = () => openPremiumCheckout("chat_banner_clicked");
|
|
9975
|
+
_el$123.$$click = openPremiumDetails;
|
|
9976
|
+
return _el$118;
|
|
9761
9977
|
}
|
|
9762
9978
|
}), createComponent(For, {
|
|
9763
9979
|
get each() {
|
|
9764
9980
|
return messages2();
|
|
9765
9981
|
},
|
|
9766
9982
|
children: (msg) => (() => {
|
|
9767
|
-
var _el$
|
|
9768
|
-
insert(_el$
|
|
9983
|
+
var _el$251 = _tmpl$60();
|
|
9984
|
+
insert(_el$251, createComponent(MarkdownMessage, {
|
|
9769
9985
|
get content() {
|
|
9770
9986
|
return msg.content;
|
|
9771
9987
|
}
|
|
9772
9988
|
}), null);
|
|
9773
|
-
insert(_el$
|
|
9989
|
+
insert(_el$251, createComponent(Show, {
|
|
9774
9990
|
get when() {
|
|
9775
9991
|
return memo(() => msg.role === "assistant")() ? getPremiumPromptKind(msg.content) : null;
|
|
9776
9992
|
},
|
|
@@ -9783,31 +9999,31 @@ ${contextBlock}` : contextBlock);
|
|
|
9783
9999
|
onOpenSettings: openPremiumDetails
|
|
9784
10000
|
})
|
|
9785
10001
|
}), null);
|
|
9786
|
-
createRenderEffect(() => className(_el$
|
|
9787
|
-
return _el$
|
|
10002
|
+
createRenderEffect(() => className(_el$251, `message message-${msg.role}`));
|
|
10003
|
+
return _el$251;
|
|
9788
10004
|
})()
|
|
9789
10005
|
}), createComponent(Show, {
|
|
9790
10006
|
get when() {
|
|
9791
10007
|
return isStreaming2();
|
|
9792
10008
|
},
|
|
9793
10009
|
get children() {
|
|
9794
|
-
var _el$
|
|
9795
|
-
insert(_el$
|
|
10010
|
+
var _el$124 = _tmpl$20$1(), _el$125 = _el$124.firstChild;
|
|
10011
|
+
insert(_el$125, createComponent(Show, {
|
|
9796
10012
|
get when() {
|
|
9797
10013
|
return hasFirstChunk2();
|
|
9798
10014
|
},
|
|
9799
10015
|
get fallback() {
|
|
9800
|
-
return _tmpl$
|
|
10016
|
+
return _tmpl$61();
|
|
9801
10017
|
},
|
|
9802
10018
|
get children() {
|
|
9803
|
-
var _el$
|
|
9804
|
-
_el$
|
|
9805
|
-
insert(_el$
|
|
10019
|
+
var _el$126 = _tmpl$19$1(), _el$127 = _el$126.firstChild, _el$128 = _el$127.firstChild;
|
|
10020
|
+
_el$128.nextSibling;
|
|
10021
|
+
insert(_el$126, createComponent(MarkdownMessage, {
|
|
9806
10022
|
get content() {
|
|
9807
10023
|
return streamingText2();
|
|
9808
10024
|
}
|
|
9809
|
-
}), _el$
|
|
9810
|
-
insert(_el$
|
|
10025
|
+
}), _el$127);
|
|
10026
|
+
insert(_el$126, createComponent(Show, {
|
|
9811
10027
|
get when() {
|
|
9812
10028
|
return getPremiumPromptKind(streamingText2());
|
|
9813
10029
|
},
|
|
@@ -9819,21 +10035,21 @@ ${contextBlock}` : contextBlock);
|
|
|
9819
10035
|
onStartTrial: () => openPremiumCheckout(kind() === "premium_gate" ? "premium_gate_clicked" : "iteration_limit_clicked"),
|
|
9820
10036
|
onOpenSettings: openPremiumDetails
|
|
9821
10037
|
})
|
|
9822
|
-
}), _el$
|
|
9823
|
-
insert(_el$
|
|
10038
|
+
}), _el$127);
|
|
10039
|
+
insert(_el$127, createComponent(Show, {
|
|
9824
10040
|
get when() {
|
|
9825
10041
|
return elapsedSeconds() > 0;
|
|
9826
10042
|
},
|
|
9827
10043
|
get children() {
|
|
9828
|
-
var _el$
|
|
9829
|
-
insert(_el$
|
|
9830
|
-
return _el$
|
|
10044
|
+
var _el$130 = _tmpl$18$1();
|
|
10045
|
+
insert(_el$130, () => ` • ${elapsedSeconds()}s`);
|
|
10046
|
+
return _el$130;
|
|
9831
10047
|
}
|
|
9832
10048
|
}), null);
|
|
9833
|
-
return _el$
|
|
10049
|
+
return _el$126;
|
|
9834
10050
|
}
|
|
9835
10051
|
}));
|
|
9836
|
-
return _el$
|
|
10052
|
+
return _el$124;
|
|
9837
10053
|
}
|
|
9838
10054
|
}), createComponent(Show, {
|
|
9839
10055
|
get when() {
|
|
@@ -9845,22 +10061,22 @@ ${contextBlock}` : contextBlock);
|
|
|
9845
10061
|
return runtimeState2().supervisor.pendingApprovals;
|
|
9846
10062
|
},
|
|
9847
10063
|
children: (approval) => (() => {
|
|
9848
|
-
var _el$
|
|
9849
|
-
insert(_el$
|
|
9850
|
-
insert(_el$
|
|
10064
|
+
var _el$253 = _tmpl$63(), _el$254 = _el$253.firstChild, _el$255 = _el$254.nextSibling, _el$256 = _el$255.firstChild, _el$257 = _el$256.firstChild, _el$258 = _el$257.nextSibling, _el$260 = _el$256.nextSibling, _el$261 = _el$260.nextSibling, _el$262 = _el$261.firstChild, _el$263 = _el$262.nextSibling;
|
|
10065
|
+
insert(_el$258, () => approval.name);
|
|
10066
|
+
insert(_el$255, createComponent(Show, {
|
|
9851
10067
|
get when() {
|
|
9852
10068
|
return approval.argsSummary;
|
|
9853
10069
|
},
|
|
9854
10070
|
get children() {
|
|
9855
|
-
var _el$
|
|
9856
|
-
insert(_el$
|
|
9857
|
-
return _el$
|
|
10071
|
+
var _el$259 = _tmpl$62();
|
|
10072
|
+
insert(_el$259, () => approval.argsSummary);
|
|
10073
|
+
return _el$259;
|
|
9858
10074
|
}
|
|
9859
|
-
}), _el$
|
|
9860
|
-
insert(_el$
|
|
9861
|
-
_el$
|
|
9862
|
-
_el$
|
|
9863
|
-
return _el$
|
|
10075
|
+
}), _el$260);
|
|
10076
|
+
insert(_el$260, () => approval.reason);
|
|
10077
|
+
_el$262.$$click = () => void resolveApproval(approval.id, true);
|
|
10078
|
+
_el$263.$$click = () => void resolveApproval(approval.id, false);
|
|
10079
|
+
return _el$253;
|
|
9864
10080
|
})()
|
|
9865
10081
|
});
|
|
9866
10082
|
}
|
|
@@ -9869,13 +10085,13 @@ ${contextBlock}` : contextBlock);
|
|
|
9869
10085
|
return memo(() => messages2().length === 0)() && !isStreaming2();
|
|
9870
10086
|
},
|
|
9871
10087
|
get children() {
|
|
9872
|
-
return _tmpl$
|
|
10088
|
+
return _tmpl$21$1();
|
|
9873
10089
|
}
|
|
9874
10090
|
})];
|
|
9875
10091
|
}
|
|
9876
|
-
}), _el$
|
|
10092
|
+
}), _el$132);
|
|
9877
10093
|
var _ref$ = messagesEndRef;
|
|
9878
|
-
typeof _ref$ === "function" ? use(_ref$, _el$
|
|
10094
|
+
typeof _ref$ === "function" ? use(_ref$, _el$132) : messagesEndRef = _el$132;
|
|
9879
10095
|
insert(_el$9, createComponent(Show, {
|
|
9880
10096
|
get when() {
|
|
9881
10097
|
return sidebarTab() === "chat";
|
|
@@ -9886,120 +10102,120 @@ ${contextBlock}` : contextBlock);
|
|
|
9886
10102
|
return isStreaming2() || messages2().length > 0;
|
|
9887
10103
|
},
|
|
9888
10104
|
get children() {
|
|
9889
|
-
var _el$
|
|
9890
|
-
insert(_el$
|
|
10105
|
+
var _el$133 = _tmpl$24$1();
|
|
10106
|
+
insert(_el$133, createComponent(Show, {
|
|
9891
10107
|
get when() {
|
|
9892
10108
|
return isStreaming2();
|
|
9893
10109
|
},
|
|
9894
10110
|
get children() {
|
|
9895
|
-
var _el$
|
|
9896
|
-
_el$
|
|
9897
|
-
return _el$
|
|
10111
|
+
var _el$134 = _tmpl$22$1();
|
|
10112
|
+
_el$134.$$click = () => cancel();
|
|
10113
|
+
return _el$134;
|
|
9898
10114
|
}
|
|
9899
10115
|
}), null);
|
|
9900
|
-
insert(_el$
|
|
10116
|
+
insert(_el$133, createComponent(Show, {
|
|
9901
10117
|
get when() {
|
|
9902
10118
|
return memo(() => !!!isStreaming2())() && messages2().length > 0;
|
|
9903
10119
|
},
|
|
9904
10120
|
get children() {
|
|
9905
|
-
var _el$
|
|
9906
|
-
_el$
|
|
9907
|
-
return _el$
|
|
10121
|
+
var _el$135 = _tmpl$23$1();
|
|
10122
|
+
_el$135.$$click = handleRetry;
|
|
10123
|
+
return _el$135;
|
|
9908
10124
|
}
|
|
9909
10125
|
}), null);
|
|
9910
|
-
return _el$
|
|
10126
|
+
return _el$133;
|
|
9911
10127
|
}
|
|
9912
10128
|
}), createComponent(Show, {
|
|
9913
10129
|
get when() {
|
|
9914
10130
|
return highlightCount() > 0;
|
|
9915
10131
|
},
|
|
9916
10132
|
get children() {
|
|
9917
|
-
var _el$
|
|
9918
|
-
_el$
|
|
9919
|
-
var _el$
|
|
9920
|
-
_el$
|
|
9921
|
-
_el$
|
|
9922
|
-
insert(_el$
|
|
10133
|
+
var _el$136 = _tmpl$25$1(), _el$137 = _el$136.firstChild, _el$138 = _el$137.nextSibling;
|
|
10134
|
+
_el$138.firstChild;
|
|
10135
|
+
var _el$140 = _el$138.nextSibling;
|
|
10136
|
+
_el$137.$$click = () => void scrollToHighlight(highlightIndex() - 1);
|
|
10137
|
+
_el$138.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex());
|
|
10138
|
+
insert(_el$138, (() => {
|
|
9923
10139
|
var _c$4 = memo(() => highlightIndex() >= 0);
|
|
9924
10140
|
return () => _c$4() ? `${highlightIndex() + 1} / ${highlightCount()}` : `${highlightCount()} highlight${highlightCount() > 1 ? "s" : ""}`;
|
|
9925
10141
|
})(), null);
|
|
9926
|
-
_el$
|
|
10142
|
+
_el$140.$$click = () => void scrollToHighlight(highlightIndex() < 0 ? 0 : highlightIndex() + 1);
|
|
9927
10143
|
createRenderEffect((_p$) => {
|
|
9928
10144
|
var _v$9 = highlightIndex() <= 0, _v$0 = highlightIndex() >= highlightCount() - 1;
|
|
9929
|
-
_v$9 !== _p$.e && (_el$
|
|
9930
|
-
_v$0 !== _p$.t && (_el$
|
|
10145
|
+
_v$9 !== _p$.e && (_el$137.disabled = _p$.e = _v$9);
|
|
10146
|
+
_v$0 !== _p$.t && (_el$140.disabled = _p$.t = _v$0);
|
|
9931
10147
|
return _p$;
|
|
9932
10148
|
}, {
|
|
9933
10149
|
e: void 0,
|
|
9934
10150
|
t: void 0
|
|
9935
10151
|
});
|
|
9936
|
-
return _el$
|
|
10152
|
+
return _el$136;
|
|
9937
10153
|
}
|
|
9938
10154
|
}), createComponent(Show, {
|
|
9939
10155
|
get when() {
|
|
9940
10156
|
return queueNotice2() !== null || pendingQueryCount() > 0;
|
|
9941
10157
|
},
|
|
9942
10158
|
get children() {
|
|
9943
|
-
var _el$
|
|
9944
|
-
insert(_el$
|
|
9945
|
-
insert(_el$
|
|
10159
|
+
var _el$141 = _tmpl$28$1(), _el$142 = _el$141.firstChild, _el$143 = _el$142.firstChild;
|
|
10160
|
+
insert(_el$143, () => queueNotice2() ?? `Queued ${pendingQueryCount()}/${pendingQueryLimit}.`);
|
|
10161
|
+
insert(_el$142, createComponent(Show, {
|
|
9946
10162
|
get when() {
|
|
9947
10163
|
return pendingQueryCount() > 0;
|
|
9948
10164
|
},
|
|
9949
10165
|
get children() {
|
|
9950
|
-
var _el$
|
|
9951
|
-
_el$
|
|
9952
|
-
return _el$
|
|
10166
|
+
var _el$144 = _tmpl$26$1();
|
|
10167
|
+
_el$144.$$click = () => clearPendingQueries();
|
|
10168
|
+
return _el$144;
|
|
9953
10169
|
}
|
|
9954
10170
|
}), null);
|
|
9955
|
-
insert(_el$
|
|
10171
|
+
insert(_el$141, createComponent(Show, {
|
|
9956
10172
|
get when() {
|
|
9957
10173
|
return pendingQueries2().length > 0;
|
|
9958
10174
|
},
|
|
9959
10175
|
get children() {
|
|
9960
|
-
var _el$
|
|
9961
|
-
insert(_el$
|
|
10176
|
+
var _el$145 = _tmpl$27$1();
|
|
10177
|
+
insert(_el$145, createComponent(For, {
|
|
9962
10178
|
get each() {
|
|
9963
10179
|
return pendingQueries2();
|
|
9964
10180
|
},
|
|
9965
10181
|
children: (pendingPrompt, index) => (() => {
|
|
9966
|
-
var _el$
|
|
9967
|
-
setAttribute(_el$
|
|
9968
|
-
insert(_el$
|
|
9969
|
-
_el$
|
|
9970
|
-
createRenderEffect(() => setAttribute(_el$
|
|
9971
|
-
return _el$
|
|
10182
|
+
var _el$264 = _tmpl$64(), _el$265 = _el$264.firstChild, _el$266 = _el$265.nextSibling;
|
|
10183
|
+
setAttribute(_el$265, "title", pendingPrompt);
|
|
10184
|
+
insert(_el$265, pendingPrompt);
|
|
10185
|
+
_el$266.$$click = () => removePendingQuery(index());
|
|
10186
|
+
createRenderEffect(() => setAttribute(_el$266, "aria-label", `Remove queued prompt ${index() + 1}`));
|
|
10187
|
+
return _el$264;
|
|
9972
10188
|
})()
|
|
9973
10189
|
}));
|
|
9974
|
-
return _el$
|
|
10190
|
+
return _el$145;
|
|
9975
10191
|
}
|
|
9976
10192
|
}), null);
|
|
9977
|
-
return _el$
|
|
10193
|
+
return _el$141;
|
|
9978
10194
|
}
|
|
9979
10195
|
}), (() => {
|
|
9980
|
-
var _el$
|
|
9981
|
-
_el$
|
|
10196
|
+
var _el$146 = _tmpl$29$1(), _el$147 = _el$146.firstChild, _el$148 = _el$147.nextSibling;
|
|
10197
|
+
_el$147.$$keydown = (e) => {
|
|
9982
10198
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
9983
10199
|
e.preventDefault();
|
|
9984
10200
|
void handleChatSend();
|
|
9985
10201
|
}
|
|
9986
10202
|
};
|
|
9987
|
-
_el$
|
|
10203
|
+
_el$147.$$input = (e) => setChatInput(e.currentTarget.value);
|
|
9988
10204
|
var _ref$2 = chatInputRef;
|
|
9989
|
-
typeof _ref$2 === "function" ? use(_ref$2, _el$
|
|
9990
|
-
_el$
|
|
9991
|
-
insert(_el$
|
|
10205
|
+
typeof _ref$2 === "function" ? use(_ref$2, _el$147) : chatInputRef = _el$147;
|
|
10206
|
+
_el$148.$$click = () => void handleChatSend();
|
|
10207
|
+
insert(_el$148, () => isStreaming2() ? "Queue" : "Send");
|
|
9992
10208
|
createRenderEffect((_p$) => {
|
|
9993
10209
|
var _v$1 = isStreaming2() ? "Send now to queue the next prompt..." : "Ask anything...", _v$10 = !chatInput().trim();
|
|
9994
|
-
_v$1 !== _p$.e && setAttribute(_el$
|
|
9995
|
-
_v$10 !== _p$.t && (_el$
|
|
10210
|
+
_v$1 !== _p$.e && setAttribute(_el$147, "placeholder", _p$.e = _v$1);
|
|
10211
|
+
_v$10 !== _p$.t && (_el$148.disabled = _p$.t = _v$10);
|
|
9996
10212
|
return _p$;
|
|
9997
10213
|
}, {
|
|
9998
10214
|
e: void 0,
|
|
9999
10215
|
t: void 0
|
|
10000
10216
|
});
|
|
10001
|
-
createRenderEffect(() => _el$
|
|
10002
|
-
return _el$
|
|
10217
|
+
createRenderEffect(() => _el$147.value = chatInput());
|
|
10218
|
+
return _el$146;
|
|
10003
10219
|
})()];
|
|
10004
10220
|
}
|
|
10005
10221
|
}), null);
|
|
@@ -10049,7 +10265,7 @@ ${contextBlock}` : contextBlock);
|
|
|
10049
10265
|
});
|
|
10050
10266
|
};
|
|
10051
10267
|
delegateEvents(["click", "pointerdown", "input", "keydown"]);
|
|
10052
|
-
var _tmpl$$9 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$9 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$8 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$8 = /* @__PURE__ */ template(`<div class=devtools-network><div class=network-header><span>Method</span><span>URL</span><span>Status</span><span>Type</span><span>Time`), _tmpl$5$7 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for network requests... Network monitoring activates when an agent uses devtools.`), _tmpl$6$7 = /* @__PURE__ */ template(`<div><span class=network-method></span><span class=network-url></span><span></span><span class=network-type></span><span class=network-duration>`), _tmpl$7$5 = /* @__PURE__ */ template(`<div class=devtools-activity>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for agent devtools activity...`), _tmpl$9$
|
|
10268
|
+
var _tmpl$$9 = /* @__PURE__ */ template(`<div class=devtools-console>`), _tmpl$2$9 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for console output... Console monitoring activates when an agent uses devtools.`), _tmpl$3$8 = /* @__PURE__ */ template(`<div><span></span><span class=console-time></span><span class=console-text></span><span class=console-source>`), _tmpl$4$8 = /* @__PURE__ */ template(`<div class=devtools-network><div class=network-header><span>Method</span><span>URL</span><span>Status</span><span>Type</span><span>Time`), _tmpl$5$7 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for network requests... Network monitoring activates when an agent uses devtools.`), _tmpl$6$7 = /* @__PURE__ */ template(`<div><span class=network-method></span><span class=network-url></span><span></span><span class=network-type></span><span class=network-duration>`), _tmpl$7$5 = /* @__PURE__ */ template(`<div class=devtools-activity>`), _tmpl$8$4 = /* @__PURE__ */ template(`<div class=devtools-empty>Waiting for agent devtools activity...`), _tmpl$9$3 = /* @__PURE__ */ template(`<div class=activity-entry><span class=activity-time></span><span class=activity-tool></span><span class=activity-args></span><span></span><span class=activity-duration>`), _tmpl$0$2 = /* @__PURE__ */ template(`<span class="devtools-tab-badge error">`), _tmpl$1$2 = /* @__PURE__ */ template(`<span class="devtools-tab-badge count">`), _tmpl$10$2 = /* @__PURE__ */ template(`<div class=export-date-inputs><div class=export-date-row><span class=export-date-label>From</span><input class=export-date-input type=date></div><div class=export-date-row><span class=export-date-label>To</span><input class=export-date-input type=date>`), _tmpl$11$2 = /* @__PURE__ */ template(`<div class=devtools-export-dropdown><div class=export-section><div class=export-section-label>Log Types</div><label class=export-checkbox><input type=checkbox>Console</label><label class=export-checkbox><input type=checkbox>Network</label><label class=export-checkbox><input type=checkbox>Activity</label></div><div class=export-section><div class=export-section-label>Date Range</div><div class=export-date-btns><button>Today</button><button>Custom</button></div></div><button class=export-submit>Export JSON`), _tmpl$12$2 = /* @__PURE__ */ template(`<div class=devtools-panel><div class=devtools-tabs><button>Console</button><button>Network</button><button>Activity</button><div class=devtools-tab-spacer></div><div class=devtools-export-wrap><button title="Export Logs"><svg width=13 height=13 viewBox="0 0 13 13"fill=none style=vertical-align:middle><path d="M6.5 1v7M3.5 5l3 3 3-3"stroke=currentColor stroke-width=1.3 stroke-linecap=round stroke-linejoin=round></path><path d="M1 9.5v1A1.5 1.5 0 0 0 2.5 12h8A1.5 1.5 0 0 0 12 10.5v-1"stroke=currentColor stroke-width=1.3 stroke-linecap=round></path></svg></button></div><button class=devtools-close-btn title="Close DevTools">×</button></div><div class=devtools-content>`);
|
|
10053
10269
|
function statusClass(status) {
|
|
10054
10270
|
if (status == null) return "pending";
|
|
10055
10271
|
if (status >= 200 && status < 300) return "ok";
|
|
@@ -10224,7 +10440,7 @@ const ActivityView = (props) => {
|
|
|
10224
10440
|
return [...props.entries].reverse();
|
|
10225
10441
|
},
|
|
10226
10442
|
children: (entry) => (() => {
|
|
10227
|
-
var _el$17 = _tmpl$9$
|
|
10443
|
+
var _el$17 = _tmpl$9$3(), _el$18 = _el$17.firstChild, _el$19 = _el$18.nextSibling, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.nextSibling;
|
|
10228
10444
|
insert(_el$18, () => formatTime(entry.timestamp, {
|
|
10229
10445
|
includeSeconds: true
|
|
10230
10446
|
}));
|
|
@@ -10507,8 +10723,9 @@ const PROVIDERS = {
|
|
|
10507
10723
|
openrouter: {
|
|
10508
10724
|
id: "openrouter",
|
|
10509
10725
|
name: "OpenRouter",
|
|
10510
|
-
defaultModel: "
|
|
10726
|
+
defaultModel: "openrouter/free",
|
|
10511
10727
|
models: [
|
|
10728
|
+
"openrouter/free",
|
|
10512
10729
|
"anthropic/claude-sonnet-4",
|
|
10513
10730
|
"anthropic/claude-haiku-4",
|
|
10514
10731
|
"openai/gpt-4o",
|
|
@@ -10700,7 +10917,7 @@ const SettingsGeneral = (props) => {
|
|
|
10700
10917
|
})();
|
|
10701
10918
|
};
|
|
10702
10919
|
delegateEvents(["click", "input"]);
|
|
10703
|
-
var _tmpl$$7 = /* @__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$
|
|
10920
|
+
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$6 = /* @__PURE__ */ template(`<div style=display:flex;align-items:center;gap:8px><span style=width:8px;height:8px;border-radius:50%;background:var(--success);display:inline-block></span><span>Connected as `), _tmpl$5$5 = /* @__PURE__ */ template(`<p class=settings-hint><button type=button class=settings-link-btn>Disconnect`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label>Account`), _tmpl$7$4 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8$3 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9$2 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13$1 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured <code>llama-server</code> base URL. For agent loops, run <code>llama-server</code> with <code>--ctx-size 16384</code> minimum and <code>32768</code> recommended.`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-reasoning-effort>Reasoning Level</label><select id=chat-reasoning-effort class="settings-input settings-select"></select><p class=settings-hint>Applies to providers and models that expose reasoning controls. Off requests no reasoning where supported and otherwise leaves the model at its normal behavior; Max requests the strongest supported reasoning tier.`), _tmpl$15$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$16 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:<port>/mcp</code>. Changing this value restarts the MCP server immediately.</p><div class=settings-inline-actions><button type=button class=settings-secondary-btn>Regenerate MCP token</button></div></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the <code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.`), _tmpl$17 = /* @__PURE__ */ template(`<option>`), _tmpl$18 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)> <button type=button class=settings-link-btn>Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<div>`), _tmpl$20 = /* @__PURE__ */ template(`<button type=button class=settings-btn>Try Again`), _tmpl$21 = /* @__PURE__ */ template(`<div><button type=button class=settings-btn>Connect with ChatGPT</button><p class=settings-hint>Sign in with your ChatGPT Plus or Pro subscription. A browser tab will open where you'll authorize Vessel.`), _tmpl$22 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$24 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$25 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$26 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$27 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$28 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`);
|
|
10704
10921
|
const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
|
|
10705
10922
|
id: p.id,
|
|
10706
10923
|
name: p.name,
|
|
@@ -10730,17 +10947,48 @@ const REASONING_EFFORT_OPTIONS = [{
|
|
|
10730
10947
|
const SettingsAgent = (props) => {
|
|
10731
10948
|
const [mcpTokenMessage, setMcpTokenMessage] = createSignal(null);
|
|
10732
10949
|
const chatMeta = () => CHAT_PROVIDERS$1.find((p) => p.id === props.chat.providerId()) ?? CHAT_PROVIDERS$1[0];
|
|
10950
|
+
const openRouterConnecting = () => props.chat.openRouterAuthStatus() === "waiting" || props.chat.openRouterAuthStatus() === "exchanging";
|
|
10733
10951
|
return (() => {
|
|
10734
|
-
var _el$ = _tmpl$
|
|
10735
|
-
_el
|
|
10952
|
+
var _el$ = _tmpl$16(), _el$2 = _el$.firstChild, _el$9 = _el$2.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$41 = _el$9.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.nextSibling, _el$44 = _el$43.nextSibling, _el$45 = _el$44.nextSibling, _el$46 = _el$45.firstChild, _el$47 = _el$41.nextSibling, _el$48 = _el$47.firstChild, _el$50 = _el$48.nextSibling, _el$51 = _el$47.nextSibling, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$54 = _el$51.nextSibling, _el$55 = _el$54.firstChild, _el$56 = _el$55.nextSibling;
|
|
10953
|
+
insert(_el$, createComponent(Show, {
|
|
10954
|
+
get when() {
|
|
10955
|
+
return !props.chat.enabled() || props.chat.providerId() === "openrouter" && !props.chat.hasStoredApiKey();
|
|
10956
|
+
},
|
|
10957
|
+
get children() {
|
|
10958
|
+
var _el$3 = _tmpl$2$7(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.firstChild;
|
|
10959
|
+
_el$7.$$click = () => props.chat.startOpenRouterAuth();
|
|
10960
|
+
insert(_el$7, createComponent(Show, {
|
|
10961
|
+
get when() {
|
|
10962
|
+
return !openRouterConnecting();
|
|
10963
|
+
},
|
|
10964
|
+
get fallback() {
|
|
10965
|
+
return props.chat.openRouterAuthStatus() === "exchanging" ? "Finishing setup..." : "Opening OpenRouter...";
|
|
10966
|
+
},
|
|
10967
|
+
children: "Start free with OpenRouter"
|
|
10968
|
+
}));
|
|
10969
|
+
insert(_el$3, createComponent(Show, {
|
|
10970
|
+
get when() {
|
|
10971
|
+
return props.chat.openRouterAuthStatus() === "error";
|
|
10972
|
+
},
|
|
10973
|
+
get children() {
|
|
10974
|
+
var _el$8 = _tmpl$$7();
|
|
10975
|
+
insert(_el$8, () => props.chat.openRouterAuthError());
|
|
10976
|
+
return _el$8;
|
|
10977
|
+
}
|
|
10978
|
+
}), null);
|
|
10979
|
+
createRenderEffect(() => _el$7.disabled = openRouterConnecting());
|
|
10980
|
+
return _el$3;
|
|
10981
|
+
}
|
|
10982
|
+
}), _el$9);
|
|
10983
|
+
_el$1.$$click = () => props.chat.setEnabled(!props.chat.enabled());
|
|
10736
10984
|
insert(_el$, createComponent(Show, {
|
|
10737
10985
|
get when() {
|
|
10738
10986
|
return props.chat.enabled();
|
|
10739
10987
|
},
|
|
10740
10988
|
get children() {
|
|
10741
10989
|
return [(() => {
|
|
10742
|
-
var _el$
|
|
10743
|
-
_el$
|
|
10990
|
+
var _el$10 = _tmpl$3$6(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling;
|
|
10991
|
+
_el$12.addEventListener("change", (e) => {
|
|
10744
10992
|
const id = e.currentTarget.value;
|
|
10745
10993
|
props.chat.setProviderId(id);
|
|
10746
10994
|
props.chat.setModel("");
|
|
@@ -10749,32 +10997,32 @@ const SettingsAgent = (props) => {
|
|
|
10749
10997
|
props.chat.setHasStoredApiKey(false);
|
|
10750
10998
|
props.chat.resetProviderModels();
|
|
10751
10999
|
});
|
|
10752
|
-
insert(_el$
|
|
11000
|
+
insert(_el$12, createComponent(For, {
|
|
10753
11001
|
each: CHAT_PROVIDERS$1,
|
|
10754
11002
|
children: (p) => (() => {
|
|
10755
|
-
var _el$
|
|
10756
|
-
insert(_el$
|
|
10757
|
-
createRenderEffect(() => _el$
|
|
10758
|
-
return _el$
|
|
11003
|
+
var _el$57 = _tmpl$17();
|
|
11004
|
+
insert(_el$57, () => p.name);
|
|
11005
|
+
createRenderEffect(() => _el$57.value = p.id);
|
|
11006
|
+
return _el$57;
|
|
10759
11007
|
})()
|
|
10760
11008
|
}));
|
|
10761
|
-
createRenderEffect(() => _el$
|
|
10762
|
-
return _el$
|
|
11009
|
+
createRenderEffect(() => _el$12.value = props.chat.providerId());
|
|
11010
|
+
return _el$10;
|
|
10763
11011
|
})(), createComponent(Show, {
|
|
10764
11012
|
get when() {
|
|
10765
11013
|
return props.chat.providerType() === "codex_oauth";
|
|
10766
11014
|
},
|
|
10767
11015
|
get children() {
|
|
10768
|
-
var _el$
|
|
10769
|
-
_el$
|
|
10770
|
-
insert(_el$
|
|
11016
|
+
var _el$13 = _tmpl$6$5();
|
|
11017
|
+
_el$13.firstChild;
|
|
11018
|
+
insert(_el$13, createComponent(Show, {
|
|
10771
11019
|
get when() {
|
|
10772
11020
|
return props.chat.codexAuthStatus() === "connected";
|
|
10773
11021
|
},
|
|
10774
11022
|
get fallback() {
|
|
10775
11023
|
return (() => {
|
|
10776
|
-
var _el$
|
|
10777
|
-
insert(_el$
|
|
11024
|
+
var _el$58 = _tmpl$19();
|
|
11025
|
+
insert(_el$58, createComponent(Show, {
|
|
10778
11026
|
get when() {
|
|
10779
11027
|
return props.chat.codexAuthStatus() === "waiting" || props.chat.codexAuthStatus() === "exchanging";
|
|
10780
11028
|
},
|
|
@@ -10785,302 +11033,302 @@ const SettingsAgent = (props) => {
|
|
|
10785
11033
|
},
|
|
10786
11034
|
get fallback() {
|
|
10787
11035
|
return (() => {
|
|
10788
|
-
var _el$
|
|
10789
|
-
_el$
|
|
10790
|
-
return _el$
|
|
11036
|
+
var _el$64 = _tmpl$21(), _el$65 = _el$64.firstChild;
|
|
11037
|
+
_el$65.$$click = () => props.chat.startCodexAuth();
|
|
11038
|
+
return _el$64;
|
|
10791
11039
|
})();
|
|
10792
11040
|
},
|
|
10793
11041
|
get children() {
|
|
10794
11042
|
return [(() => {
|
|
10795
|
-
var _el$
|
|
10796
|
-
insert(_el$
|
|
10797
|
-
return _el$
|
|
11043
|
+
var _el$62 = _tmpl$$7();
|
|
11044
|
+
insert(_el$62, () => props.chat.codexAuthError());
|
|
11045
|
+
return _el$62;
|
|
10798
11046
|
})(), (() => {
|
|
10799
|
-
var _el$
|
|
10800
|
-
_el$
|
|
10801
|
-
return _el$
|
|
11047
|
+
var _el$63 = _tmpl$20();
|
|
11048
|
+
_el$63.$$click = () => props.chat.startCodexAuth();
|
|
11049
|
+
return _el$63;
|
|
10802
11050
|
})()];
|
|
10803
11051
|
}
|
|
10804
11052
|
});
|
|
10805
11053
|
},
|
|
10806
11054
|
get children() {
|
|
10807
|
-
var _el$
|
|
10808
|
-
insert(_el$
|
|
11055
|
+
var _el$59 = _tmpl$18(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
|
|
11056
|
+
insert(_el$59, createComponent(Show, {
|
|
10809
11057
|
get when() {
|
|
10810
11058
|
return props.chat.codexAuthStatus() === "waiting";
|
|
10811
11059
|
},
|
|
10812
11060
|
fallback: "Exchanging authorization...",
|
|
10813
11061
|
children: "Waiting for browser login..."
|
|
10814
|
-
}), _el$
|
|
10815
|
-
_el$
|
|
10816
|
-
return _el$
|
|
11062
|
+
}), _el$60);
|
|
11063
|
+
_el$61.$$click = () => window.vessel.codex.cancelAuth();
|
|
11064
|
+
return _el$59;
|
|
10817
11065
|
}
|
|
10818
11066
|
}));
|
|
10819
|
-
return _el$
|
|
11067
|
+
return _el$58;
|
|
10820
11068
|
})();
|
|
10821
11069
|
},
|
|
10822
11070
|
get children() {
|
|
10823
11071
|
return [(() => {
|
|
10824
|
-
var _el$
|
|
10825
|
-
_el$
|
|
10826
|
-
insert(_el$
|
|
10827
|
-
return _el$
|
|
11072
|
+
var _el$15 = _tmpl$4$6(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
11073
|
+
_el$17.firstChild;
|
|
11074
|
+
insert(_el$17, () => props.chat.codexAccountEmail() || "ChatGPT", null);
|
|
11075
|
+
return _el$15;
|
|
10828
11076
|
})(), (() => {
|
|
10829
|
-
var _el$
|
|
10830
|
-
_el$
|
|
10831
|
-
return _el$
|
|
11077
|
+
var _el$19 = _tmpl$5$5(), _el$20 = _el$19.firstChild;
|
|
11078
|
+
_el$20.$$click = () => props.chat.disconnectCodex();
|
|
11079
|
+
return _el$19;
|
|
10832
11080
|
})()];
|
|
10833
11081
|
}
|
|
10834
11082
|
}), null);
|
|
10835
|
-
return _el$
|
|
11083
|
+
return _el$13;
|
|
10836
11084
|
}
|
|
10837
11085
|
}), createComponent(Show, {
|
|
10838
11086
|
get when() {
|
|
10839
11087
|
return memo(() => props.chat.providerType() !== "codex_oauth")() && (chatMeta().requiresKey || props.chat.providerId() === "custom");
|
|
10840
11088
|
},
|
|
10841
11089
|
get children() {
|
|
10842
|
-
var _el$
|
|
10843
|
-
_el$
|
|
10844
|
-
var _el$
|
|
10845
|
-
insert(_el$
|
|
11090
|
+
var _el$21 = _tmpl$0$1(), _el$22 = _el$21.firstChild;
|
|
11091
|
+
_el$22.firstChild;
|
|
11092
|
+
var _el$25 = _el$22.nextSibling;
|
|
11093
|
+
insert(_el$22, createComponent(Show, {
|
|
10846
11094
|
get when() {
|
|
10847
11095
|
return !chatMeta().requiresKey;
|
|
10848
11096
|
},
|
|
10849
11097
|
get children() {
|
|
10850
|
-
return _tmpl$
|
|
11098
|
+
return _tmpl$7$4();
|
|
10851
11099
|
}
|
|
10852
11100
|
}), null);
|
|
10853
|
-
_el$
|
|
11101
|
+
_el$25.$$input = (e) => {
|
|
10854
11102
|
props.chat.setApiKey(e.currentTarget.value);
|
|
10855
11103
|
if (e.currentTarget.value.trim()) {
|
|
10856
11104
|
props.chat.setHasStoredApiKey(true);
|
|
10857
11105
|
}
|
|
10858
11106
|
};
|
|
10859
|
-
setAttribute(_el$
|
|
10860
|
-
insert(_el$
|
|
11107
|
+
setAttribute(_el$25, "spellcheck", false);
|
|
11108
|
+
insert(_el$21, createComponent(Show, {
|
|
10861
11109
|
get when() {
|
|
10862
11110
|
return memo(() => !!props.chat.hasStoredApiKey())() && !props.chat.apiKey().trim();
|
|
10863
11111
|
},
|
|
10864
11112
|
get children() {
|
|
10865
|
-
return _tmpl$
|
|
11113
|
+
return _tmpl$8$3();
|
|
10866
11114
|
}
|
|
10867
11115
|
}), null);
|
|
10868
|
-
insert(_el$
|
|
11116
|
+
insert(_el$21, createComponent(Show, {
|
|
10869
11117
|
get when() {
|
|
10870
11118
|
return props.chat.providerId() === "custom";
|
|
10871
11119
|
},
|
|
10872
11120
|
get children() {
|
|
10873
|
-
return _tmpl$
|
|
11121
|
+
return _tmpl$9$2();
|
|
10874
11122
|
}
|
|
10875
11123
|
}), null);
|
|
10876
|
-
createRenderEffect(() => setAttribute(_el$
|
|
10877
|
-
createRenderEffect(() => _el$
|
|
10878
|
-
return _el$
|
|
11124
|
+
createRenderEffect(() => setAttribute(_el$25, "placeholder", props.chat.hasStoredApiKey() && !props.chat.apiKey().trim() ? "Stored securely. Enter a new key to replace it." : chatMeta().keyPlaceholder || "Bearer token or API key"));
|
|
11125
|
+
createRenderEffect(() => _el$25.value = props.chat.apiKey());
|
|
11126
|
+
return _el$21;
|
|
10879
11127
|
}
|
|
10880
11128
|
}), (() => {
|
|
10881
|
-
var _el$
|
|
10882
|
-
insert(_el$
|
|
11129
|
+
var _el$28 = _tmpl$11$1(), _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$32 = _el$30.firstChild;
|
|
11130
|
+
insert(_el$30, createComponent(Show, {
|
|
10883
11131
|
get when() {
|
|
10884
11132
|
return props.chat.providerModels().length > 0;
|
|
10885
11133
|
},
|
|
10886
11134
|
get fallback() {
|
|
10887
11135
|
return (() => {
|
|
10888
|
-
var _el$
|
|
10889
|
-
_el$
|
|
10890
|
-
setAttribute(_el$
|
|
10891
|
-
createRenderEffect(() => setAttribute(_el$
|
|
10892
|
-
createRenderEffect(() => _el$
|
|
10893
|
-
return _el$
|
|
11136
|
+
var _el$66 = _tmpl$22();
|
|
11137
|
+
_el$66.$$input = (e) => props.chat.setModel(e.currentTarget.value);
|
|
11138
|
+
setAttribute(_el$66, "spellcheck", false);
|
|
11139
|
+
createRenderEffect(() => setAttribute(_el$66, "placeholder", props.chat.modelFetchState() === "loading" ? "Fetching models…" : chatMeta().requiresKey && !props.chat.apiKey().trim() && !props.chat.hasStoredApiKey() ? "Enter API key to load models" : chatMeta().defaultModel || "model name"));
|
|
11140
|
+
createRenderEffect(() => _el$66.value = props.chat.model());
|
|
11141
|
+
return _el$66;
|
|
10894
11142
|
})();
|
|
10895
11143
|
},
|
|
10896
11144
|
get children() {
|
|
10897
|
-
var _el$
|
|
10898
|
-
_el$
|
|
10899
|
-
insert(_el$
|
|
11145
|
+
var _el$31 = _tmpl$1$1();
|
|
11146
|
+
_el$31.addEventListener("change", (e) => props.chat.setModel(e.currentTarget.value));
|
|
11147
|
+
insert(_el$31, createComponent(For, {
|
|
10900
11148
|
get each() {
|
|
10901
11149
|
return props.chat.providerModels();
|
|
10902
11150
|
},
|
|
10903
11151
|
children: (m) => (() => {
|
|
10904
|
-
var _el$
|
|
10905
|
-
_el$
|
|
10906
|
-
insert(_el$
|
|
10907
|
-
return _el$
|
|
11152
|
+
var _el$67 = _tmpl$17();
|
|
11153
|
+
_el$67.value = m;
|
|
11154
|
+
insert(_el$67, m);
|
|
11155
|
+
return _el$67;
|
|
10908
11156
|
})()
|
|
10909
11157
|
}));
|
|
10910
|
-
createRenderEffect(() => _el$
|
|
10911
|
-
return _el$
|
|
11158
|
+
createRenderEffect(() => _el$31.value = props.chat.model());
|
|
11159
|
+
return _el$31;
|
|
10912
11160
|
}
|
|
10913
|
-
}), _el$
|
|
10914
|
-
_el$
|
|
10915
|
-
insert(_el$
|
|
11161
|
+
}), _el$32);
|
|
11162
|
+
_el$32.$$click = () => props.chat.doFetchModels();
|
|
11163
|
+
insert(_el$28, createComponent(Show, {
|
|
10916
11164
|
get when() {
|
|
10917
11165
|
return props.chat.modelFetchState() === "error";
|
|
10918
11166
|
},
|
|
10919
11167
|
get children() {
|
|
10920
|
-
return _tmpl$
|
|
11168
|
+
return _tmpl$10$1();
|
|
10921
11169
|
}
|
|
10922
11170
|
}), null);
|
|
10923
|
-
insert(_el$
|
|
11171
|
+
insert(_el$28, createComponent(Show, {
|
|
10924
11172
|
get when() {
|
|
10925
11173
|
return props.chat.modelFetchWarning();
|
|
10926
11174
|
},
|
|
10927
11175
|
children: (warning) => (() => {
|
|
10928
|
-
var _el$
|
|
10929
|
-
insert(_el$
|
|
10930
|
-
return _el$
|
|
11176
|
+
var _el$68 = _tmpl$23();
|
|
11177
|
+
insert(_el$68, warning);
|
|
11178
|
+
return _el$68;
|
|
10931
11179
|
})()
|
|
10932
11180
|
}), null);
|
|
10933
|
-
createRenderEffect(() => _el$
|
|
10934
|
-
return _el$
|
|
11181
|
+
createRenderEffect(() => _el$32.disabled = props.chat.modelFetchState() === "loading");
|
|
11182
|
+
return _el$28;
|
|
10935
11183
|
})(), createComponent(Show, {
|
|
10936
11184
|
get when() {
|
|
10937
11185
|
return chatMeta().needsBaseUrl || props.chat.providerId() === "custom";
|
|
10938
11186
|
},
|
|
10939
11187
|
get children() {
|
|
10940
|
-
var _el$
|
|
10941
|
-
_el$
|
|
10942
|
-
setAttribute(_el$
|
|
10943
|
-
createRenderEffect(() => setAttribute(_el$
|
|
10944
|
-
createRenderEffect(() => _el$
|
|
10945
|
-
return _el$
|
|
11188
|
+
var _el$34 = _tmpl$12$1(), _el$35 = _el$34.firstChild, _el$36 = _el$35.nextSibling;
|
|
11189
|
+
_el$36.$$input = (e) => props.chat.setBaseUrl(e.currentTarget.value);
|
|
11190
|
+
setAttribute(_el$36, "spellcheck", false);
|
|
11191
|
+
createRenderEffect(() => setAttribute(_el$36, "placeholder", chatMeta().defaultBaseUrl ?? "https://..."));
|
|
11192
|
+
createRenderEffect(() => _el$36.value = props.chat.baseUrl());
|
|
11193
|
+
return _el$34;
|
|
10946
11194
|
}
|
|
10947
11195
|
}), createComponent(Show, {
|
|
10948
11196
|
get when() {
|
|
10949
11197
|
return props.chat.providerId() === "llama_cpp";
|
|
10950
11198
|
},
|
|
10951
11199
|
get children() {
|
|
10952
|
-
return _tmpl$
|
|
11200
|
+
return _tmpl$13$1();
|
|
10953
11201
|
}
|
|
10954
11202
|
}), (() => {
|
|
10955
|
-
var _el$
|
|
10956
|
-
_el$
|
|
10957
|
-
insert(_el$
|
|
11203
|
+
var _el$38 = _tmpl$14$1(), _el$39 = _el$38.firstChild, _el$40 = _el$39.nextSibling;
|
|
11204
|
+
_el$40.addEventListener("change", (e) => props.chat.setReasoningEffort(e.currentTarget.value));
|
|
11205
|
+
insert(_el$40, createComponent(For, {
|
|
10958
11206
|
each: REASONING_EFFORT_OPTIONS,
|
|
10959
11207
|
children: (option) => (() => {
|
|
10960
|
-
var _el$
|
|
10961
|
-
insert(_el$
|
|
10962
|
-
createRenderEffect(() => _el$
|
|
10963
|
-
return _el$
|
|
11208
|
+
var _el$69 = _tmpl$17();
|
|
11209
|
+
insert(_el$69, () => option.label);
|
|
11210
|
+
createRenderEffect(() => _el$69.value = option.value);
|
|
11211
|
+
return _el$69;
|
|
10964
11212
|
})()
|
|
10965
11213
|
}));
|
|
10966
|
-
createRenderEffect(() => _el$
|
|
10967
|
-
return _el$
|
|
11214
|
+
createRenderEffect(() => _el$40.value = props.chat.reasoningEffort());
|
|
11215
|
+
return _el$38;
|
|
10968
11216
|
})()];
|
|
10969
11217
|
}
|
|
10970
|
-
}), _el$
|
|
10971
|
-
_el$
|
|
10972
|
-
setAttribute(_el$
|
|
10973
|
-
_el$
|
|
11218
|
+
}), _el$41);
|
|
11219
|
+
_el$43.$$input = (e) => props.setMcpPort(e.currentTarget.value);
|
|
11220
|
+
setAttribute(_el$43, "spellcheck", false);
|
|
11221
|
+
_el$46.$$click = async () => {
|
|
10974
11222
|
const result = await window.vessel.settings.regenerateMcpToken();
|
|
10975
11223
|
setMcpTokenMessage(result ? "MCP token regenerated. Update any external client config using Vessel's auth file." : "MCP server is not running, so no token was regenerated.");
|
|
10976
11224
|
};
|
|
10977
|
-
insert(_el$
|
|
11225
|
+
insert(_el$41, createComponent(Show, {
|
|
10978
11226
|
get when() {
|
|
10979
11227
|
return mcpTokenMessage();
|
|
10980
11228
|
},
|
|
10981
11229
|
children: (message) => (() => {
|
|
10982
|
-
var _el$
|
|
10983
|
-
insert(_el$
|
|
10984
|
-
return _el$
|
|
11230
|
+
var _el$70 = _tmpl$24();
|
|
11231
|
+
insert(_el$70, message);
|
|
11232
|
+
return _el$70;
|
|
10985
11233
|
})()
|
|
10986
11234
|
}), null);
|
|
10987
|
-
insert(_el$
|
|
11235
|
+
insert(_el$47, createComponent(Show, {
|
|
10988
11236
|
get when() {
|
|
10989
11237
|
return props.premiumActive();
|
|
10990
11238
|
},
|
|
10991
11239
|
get fallback() {
|
|
10992
|
-
return _tmpl$
|
|
11240
|
+
return _tmpl$25();
|
|
10993
11241
|
},
|
|
10994
11242
|
get children() {
|
|
10995
|
-
var _el$
|
|
10996
|
-
_el$
|
|
10997
|
-
createRenderEffect(() => _el$
|
|
10998
|
-
return _el$
|
|
11243
|
+
var _el$49 = _tmpl$15$1();
|
|
11244
|
+
_el$49.$$input = (e) => props.setMaxToolIterations(e.currentTarget.value);
|
|
11245
|
+
createRenderEffect(() => _el$49.value = props.maxToolIterations());
|
|
11246
|
+
return _el$49;
|
|
10999
11247
|
}
|
|
11000
|
-
}), _el$
|
|
11001
|
-
insert(_el$
|
|
11248
|
+
}), _el$50);
|
|
11249
|
+
insert(_el$50, createComponent(Show, {
|
|
11002
11250
|
get when() {
|
|
11003
11251
|
return props.premiumActive();
|
|
11004
11252
|
},
|
|
11005
11253
|
fallback: "Free tier: 50 tool calls per conversation turn. Upgrade to Vessel Premium to customize this limit (up to 1,000).",
|
|
11006
11254
|
children: "Maximum number of tool calls the AI agent can make per conversation turn before pausing. Higher values let the agent complete longer multi-step workflows without stopping. Range: 10–1000."
|
|
11007
11255
|
}));
|
|
11008
|
-
_el$
|
|
11256
|
+
_el$53.addEventListener("change", (e) => props.setAgentTranscriptMode(e.currentTarget.value));
|
|
11009
11257
|
insert(_el$, createComponent(Show, {
|
|
11010
11258
|
get when() {
|
|
11011
11259
|
return props.health();
|
|
11012
11260
|
},
|
|
11013
11261
|
children: (currentHealth) => (() => {
|
|
11014
|
-
var _el$
|
|
11015
|
-
_el$
|
|
11016
|
-
insert(_el$
|
|
11017
|
-
insert(_el$
|
|
11018
|
-
insert(_el$
|
|
11262
|
+
var _el$72 = _tmpl$27(), _el$73 = _el$72.firstChild, _el$74 = _el$73.nextSibling, _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling;
|
|
11263
|
+
_el$76.nextSibling;
|
|
11264
|
+
insert(_el$76, () => currentHealth().mcp.status);
|
|
11265
|
+
insert(_el$74, () => currentHealth().mcp.message, null);
|
|
11266
|
+
insert(_el$72, createComponent(Show, {
|
|
11019
11267
|
get when() {
|
|
11020
11268
|
return currentHealth().mcp.endpoint;
|
|
11021
11269
|
},
|
|
11022
11270
|
children: (endpoint) => (() => {
|
|
11023
|
-
var _el$
|
|
11024
|
-
insert(_el$
|
|
11025
|
-
return _el$
|
|
11271
|
+
var _el$79 = _tmpl$28(), _el$80 = _el$79.firstChild, _el$81 = _el$80.nextSibling;
|
|
11272
|
+
insert(_el$81, endpoint);
|
|
11273
|
+
return _el$79;
|
|
11026
11274
|
})()
|
|
11027
11275
|
}), null);
|
|
11028
|
-
insert(_el$
|
|
11276
|
+
insert(_el$72, createComponent(Show, {
|
|
11029
11277
|
get when() {
|
|
11030
11278
|
return currentHealth().startupIssues.length > 0;
|
|
11031
11279
|
},
|
|
11032
11280
|
get children() {
|
|
11033
|
-
var _el$
|
|
11034
|
-
insert(_el$
|
|
11035
|
-
var _el$
|
|
11036
|
-
insert(_el$
|
|
11037
|
-
insert(_el$
|
|
11038
|
-
insert(_el$
|
|
11281
|
+
var _el$78 = _tmpl$26();
|
|
11282
|
+
insert(_el$78, () => currentHealth().startupIssues.map((issue) => (() => {
|
|
11283
|
+
var _el$82 = _tmpl$29(), _el$83 = _el$82.firstChild, _el$84 = _el$83.nextSibling;
|
|
11284
|
+
insert(_el$83, () => issue.title);
|
|
11285
|
+
insert(_el$84, () => issue.detail);
|
|
11286
|
+
insert(_el$82, createComponent(Show, {
|
|
11039
11287
|
get when() {
|
|
11040
11288
|
return issue.action;
|
|
11041
11289
|
},
|
|
11042
11290
|
children: (action) => (() => {
|
|
11043
|
-
var _el$
|
|
11044
|
-
insert(_el$
|
|
11045
|
-
return _el$
|
|
11291
|
+
var _el$85 = _tmpl$19();
|
|
11292
|
+
insert(_el$85, action);
|
|
11293
|
+
return _el$85;
|
|
11046
11294
|
})()
|
|
11047
11295
|
}), null);
|
|
11048
11296
|
createRenderEffect((_p$) => {
|
|
11049
11297
|
var _v$3 = !!(issue.severity === "warning"), _v$4 = !!(issue.severity === "error");
|
|
11050
|
-
_v$3 !== _p$.e && _el$
|
|
11051
|
-
_v$4 !== _p$.t && _el$
|
|
11298
|
+
_v$3 !== _p$.e && _el$82.classList.toggle("warning", _p$.e = _v$3);
|
|
11299
|
+
_v$4 !== _p$.t && _el$82.classList.toggle("error", _p$.t = _v$4);
|
|
11052
11300
|
return _p$;
|
|
11053
11301
|
}, {
|
|
11054
11302
|
e: void 0,
|
|
11055
11303
|
t: void 0
|
|
11056
11304
|
});
|
|
11057
|
-
return _el$
|
|
11305
|
+
return _el$82;
|
|
11058
11306
|
})()));
|
|
11059
|
-
return _el$
|
|
11307
|
+
return _el$78;
|
|
11060
11308
|
}
|
|
11061
11309
|
}), null);
|
|
11062
|
-
return _el$
|
|
11310
|
+
return _el$72;
|
|
11063
11311
|
})()
|
|
11064
|
-
}), _el$
|
|
11065
|
-
_el$
|
|
11066
|
-
setAttribute(_el$
|
|
11312
|
+
}), _el$54);
|
|
11313
|
+
_el$56.$$input = (e) => props.setObsidianVaultPath(e.currentTarget.value);
|
|
11314
|
+
setAttribute(_el$56, "spellcheck", false);
|
|
11067
11315
|
createRenderEffect((_p$) => {
|
|
11068
11316
|
var _v$ = !!props.chat.enabled(), _v$2 = props.chat.enabled();
|
|
11069
|
-
_v$ !== _p$.e && _el$
|
|
11070
|
-
_v$2 !== _p$.t && setAttribute(_el$
|
|
11317
|
+
_v$ !== _p$.e && _el$1.classList.toggle("on", _p$.e = _v$);
|
|
11318
|
+
_v$2 !== _p$.t && setAttribute(_el$1, "aria-checked", _p$.t = _v$2);
|
|
11071
11319
|
return _p$;
|
|
11072
11320
|
}, {
|
|
11073
11321
|
e: void 0,
|
|
11074
11322
|
t: void 0
|
|
11075
11323
|
});
|
|
11076
|
-
createRenderEffect(() => _el$
|
|
11077
|
-
createRenderEffect(() => _el$
|
|
11078
|
-
createRenderEffect(() => _el$
|
|
11324
|
+
createRenderEffect(() => _el$43.value = props.mcpPort());
|
|
11325
|
+
createRenderEffect(() => _el$53.value = props.agentTranscriptMode());
|
|
11326
|
+
createRenderEffect(() => _el$56.value = props.obsidianVaultPath());
|
|
11079
11327
|
return _el$;
|
|
11080
11328
|
})();
|
|
11081
11329
|
};
|
|
11082
11330
|
delegateEvents(["click", "input"]);
|
|
11083
|
-
var _tmpl$$6 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$2$6 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$4$5 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$6$4 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Save login credentials for any website. Passwords are encrypted locally and filled directly into login forms. The agent can list and fill them with your consent, but passwords are never sent to AI providers.`), _tmpl$7$3 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Password`), _tmpl$8$2 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Title (e.g. GitHub Personal)"><input class=settings-input placeholder="URL (e.g. https://github.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><select class=settings-input><option value=login>Login</option><option value=credit_card>Credit Card</option><option value=identity>Identity</option><option value=secure_note>Secure Note</option></select><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Password</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$9 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$0 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$1 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-field><label class=settings-label>Passwords</label></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · </span></div><button class=vault-entry-remove title="Remove credential">×`), _tmpl$12 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Your personal password manager. Save, organize, and autofill login credentials. Upgrade to Premium to unlock Passwords.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · </span></div><button class=vault-entry-remove title="Remove password">×`), _tmpl$15 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail></span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Fill forms on current page with this profile"style="padding:2px 10px;font-size:12px">Fill</button><button class=vault-entry-remove title="Remove profile">×`);
|
|
11331
|
+
var _tmpl$$6 = /* @__PURE__ */ template(`<span class=vault-premium-badge>Premium`), _tmpl$2$6 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Store credentials for agent-driven logins. Credentials are encrypted at rest and never sent to AI providers — they are filled directly into login forms with your consent.`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$4$5 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Credential`), _tmpl$5$4 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Label (e.g. Work GitHub)"><input class=settings-input placeholder="Domain pattern (e.g. github.com, *.aws.amazon.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><input class=settings-input placeholder="TOTP secret (optional, base32)"><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Credential</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$6$4 = /* @__PURE__ */ template(`<p class=settings-hint style=margin-bottom:10px>Save login credentials for any website. Passwords are encrypted locally and filled directly into login forms. The agent can list and fill them with your consent, but passwords are never sent to AI providers.`), _tmpl$7$3 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Password`), _tmpl$8$2 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Title (e.g. GitHub Personal)"><input class=settings-input placeholder="URL (e.g. https://github.com)"><input class=settings-input placeholder="Username / email"><input class=settings-input type=password placeholder=Password><select class=settings-input><option value=login>Login</option><option value=credit_card>Credit Card</option><option value=identity>Identity</option><option value=secure_note>Secure Note</option></select><input class=settings-input placeholder="Notes (optional)"><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Password</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$9$1 = /* @__PURE__ */ template(`<button class=vault-add-btn>+ Add Profile`), _tmpl$0 = /* @__PURE__ */ template(`<div class=vault-add-form><input class=settings-input placeholder="Profile name (e.g. Personal, Work)"><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder="First name"><input class=settings-input placeholder="Last name"></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><input class=settings-input placeholder=Email><input class=settings-input placeholder=Phone></div><input class=settings-input placeholder="Organization (optional)"><input class=settings-input placeholder="Address line 1"><input class=settings-input placeholder="Address line 2 (optional)"><div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"><input class=settings-input placeholder=City><input class=settings-input placeholder=State><input class=settings-input placeholder="ZIP / Postal"></div><input class=settings-input placeholder=Country><div class=vault-add-actions><button class="premium-btn premium-btn-activate">Save Profile</button><button class="premium-btn premium-btn-reset">Cancel`), _tmpl$1 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label>Agent Credential Vault</label></div><div class=settings-field><label class=settings-label>Passwords</label></div><div class=settings-field><label class=settings-label>Form Autofill</label><p class=settings-hint style=margin-bottom:10px>Store your info once. Vessel matches it to form fields on any site using labels, field names, and autocomplete hints.`), _tmpl$10 = /* @__PURE__ */ template(`<p class=settings-hint>Securely store credentials for agent-driven logins. Upgrade to Premium to unlock the Agent Credential Vault.`), _tmpl$11 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · </span></div><button class=vault-entry-remove title="Remove credential">×`), _tmpl$12 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$13 = /* @__PURE__ */ template(`<p class=settings-hint>Your personal password manager. Save, organize, and autofill login credentials. Upgrade to Premium to unlock Passwords.`), _tmpl$14 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · </span></div><button class=vault-entry-remove title="Remove password">×`), _tmpl$15 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail></span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Fill forms on current page with this profile"style="padding:2px 10px;font-size:12px">Fill</button><button class=vault-entry-remove title="Remove profile">×`);
|
|
11084
11332
|
const SettingsVaults = (props) => {
|
|
11085
11333
|
const v = props.vault;
|
|
11086
11334
|
const h = props.humanVault;
|
|
@@ -11359,7 +11607,7 @@ const SettingsVaults = (props) => {
|
|
|
11359
11607
|
return !a.adding();
|
|
11360
11608
|
},
|
|
11361
11609
|
get children() {
|
|
11362
|
-
var _el$38 = _tmpl$9();
|
|
11610
|
+
var _el$38 = _tmpl$9$1();
|
|
11363
11611
|
_el$38.$$click = () => {
|
|
11364
11612
|
a.setAdding(true);
|
|
11365
11613
|
};
|
|
@@ -11515,22 +11763,96 @@ const SettingsPrivacy = (props) => {
|
|
|
11515
11763
|
})();
|
|
11516
11764
|
};
|
|
11517
11765
|
delegateEvents(["input", "click"]);
|
|
11518
|
-
var _tmpl$$4 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$
|
|
11766
|
+
var _tmpl$$4 = /* @__PURE__ */ template(`<div class=settings-feedback-form><input class=settings-input type=email placeholder="Your reply email"><textarea class="settings-textarea settings-feedback-textarea"placeholder="Tell us what happened, what you expected, or what would make Vessel better."></textarea><div class=settings-inline-actions><button class=settings-secondary-btn>`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$3$3 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$4$3 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label>Support</label><div class=settings-inline-actions><button class=settings-secondary-btn></button></div></div><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current`), _tmpl$5$2 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$6$2 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$7$2 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$8$1 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade">`), _tmpl$9 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · <!> cookies · <!> domains</span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Restore this session (replaces current tabs and cookies)"style="padding:2px 10px;font-size:12px">Load</button><button class=vault-entry-remove title="Delete session">×`);
|
|
11519
11767
|
const SettingsAccount = (props) => {
|
|
11520
11768
|
const p = props.premium;
|
|
11521
11769
|
const s = props.sessions;
|
|
11770
|
+
const [feedbackExpanded, setFeedbackExpanded] = createSignal(false);
|
|
11771
|
+
const [feedbackEmail, setFeedbackEmail] = createSignal(p.state().email || "");
|
|
11772
|
+
const [feedbackMessage, setFeedbackMessage] = createSignal("");
|
|
11773
|
+
const [feedbackSending, setFeedbackSending] = createSignal(false);
|
|
11774
|
+
const [feedbackStatus, setFeedbackStatus] = createSignal(null);
|
|
11775
|
+
const handleSubmitFeedback = async () => {
|
|
11776
|
+
setFeedbackSending(true);
|
|
11777
|
+
setFeedbackStatus(null);
|
|
11778
|
+
try {
|
|
11779
|
+
const result = await window.vessel.support.submitFeedback(feedbackEmail(), feedbackMessage());
|
|
11780
|
+
if (result.ok) {
|
|
11781
|
+
setFeedbackMessage("");
|
|
11782
|
+
setFeedbackExpanded(false);
|
|
11783
|
+
setFeedbackStatus({
|
|
11784
|
+
kind: "success",
|
|
11785
|
+
text: "Feedback sent. Thank you."
|
|
11786
|
+
});
|
|
11787
|
+
return;
|
|
11788
|
+
}
|
|
11789
|
+
setFeedbackStatus({
|
|
11790
|
+
kind: "error",
|
|
11791
|
+
text: result.error || "Could not send feedback."
|
|
11792
|
+
});
|
|
11793
|
+
} finally {
|
|
11794
|
+
setFeedbackSending(false);
|
|
11795
|
+
}
|
|
11796
|
+
};
|
|
11522
11797
|
return (() => {
|
|
11523
|
-
var _el$ = _tmpl$
|
|
11524
|
-
_el$
|
|
11525
|
-
var _el$
|
|
11798
|
+
var _el$ = _tmpl$4$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.firstChild, _el$1 = _el$2.nextSibling;
|
|
11799
|
+
_el$1.firstChild;
|
|
11800
|
+
var _el$18 = _el$1.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling, _el$21 = _el$20.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.nextSibling;
|
|
11801
|
+
_el$5.$$click = () => {
|
|
11802
|
+
setFeedbackExpanded(!feedbackExpanded());
|
|
11803
|
+
setFeedbackStatus(null);
|
|
11804
|
+
};
|
|
11805
|
+
insert(_el$5, () => feedbackExpanded() ? "Cancel" : "Submit Feedback");
|
|
11806
|
+
insert(_el$2, createComponent(Show, {
|
|
11807
|
+
get when() {
|
|
11808
|
+
return feedbackExpanded();
|
|
11809
|
+
},
|
|
11810
|
+
get children() {
|
|
11811
|
+
var _el$6 = _tmpl$$4(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild;
|
|
11812
|
+
_el$7.$$input = (event) => {
|
|
11813
|
+
setFeedbackEmail(event.currentTarget.value);
|
|
11814
|
+
setFeedbackStatus(null);
|
|
11815
|
+
};
|
|
11816
|
+
setAttribute(_el$7, "spellcheck", false);
|
|
11817
|
+
_el$8.$$input = (event) => {
|
|
11818
|
+
setFeedbackMessage(event.currentTarget.value);
|
|
11819
|
+
setFeedbackStatus(null);
|
|
11820
|
+
};
|
|
11821
|
+
_el$0.$$click = handleSubmitFeedback;
|
|
11822
|
+
insert(_el$0, () => feedbackSending() ? "Sending..." : "Send Feedback");
|
|
11823
|
+
createRenderEffect(() => _el$0.disabled = feedbackSending() || !feedbackEmail().trim() || !feedbackMessage().trim());
|
|
11824
|
+
createRenderEffect(() => _el$7.value = feedbackEmail());
|
|
11825
|
+
createRenderEffect(() => _el$8.value = feedbackMessage());
|
|
11826
|
+
return _el$6;
|
|
11827
|
+
}
|
|
11828
|
+
}), null);
|
|
11526
11829
|
insert(_el$2, createComponent(Show, {
|
|
11830
|
+
get when() {
|
|
11831
|
+
return feedbackStatus();
|
|
11832
|
+
},
|
|
11833
|
+
children: (status) => (() => {
|
|
11834
|
+
var _el$25 = _tmpl$5$2();
|
|
11835
|
+
insert(_el$25, () => status().text);
|
|
11836
|
+
createRenderEffect((_p$) => {
|
|
11837
|
+
var _v$ = !!(status().kind === "success"), _v$2 = !!(status().kind === "error");
|
|
11838
|
+
_v$ !== _p$.e && _el$25.classList.toggle("success", _p$.e = _v$);
|
|
11839
|
+
_v$2 !== _p$.t && _el$25.classList.toggle("error", _p$.t = _v$2);
|
|
11840
|
+
return _p$;
|
|
11841
|
+
}, {
|
|
11842
|
+
e: void 0,
|
|
11843
|
+
t: void 0
|
|
11844
|
+
});
|
|
11845
|
+
return _el$25;
|
|
11846
|
+
})()
|
|
11847
|
+
}), null);
|
|
11848
|
+
insert(_el$1, createComponent(Show, {
|
|
11527
11849
|
get when() {
|
|
11528
11850
|
return p.active();
|
|
11529
11851
|
},
|
|
11530
11852
|
get fallback() {
|
|
11531
11853
|
return (() => {
|
|
11532
|
-
var _el$
|
|
11533
|
-
_el$
|
|
11854
|
+
var _el$26 = _tmpl$8$1(), _el$27 = _el$26.firstChild, _el$28 = _el$27.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$34 = _el$28.nextSibling;
|
|
11855
|
+
_el$29.$$input = (e) => {
|
|
11534
11856
|
const nextEmail = e.currentTarget.value;
|
|
11535
11857
|
if (nextEmail.trim().toLowerCase() !== p.email().trim().toLowerCase()) {
|
|
11536
11858
|
p.resetFlow();
|
|
@@ -11538,8 +11860,8 @@ const SettingsAccount = (props) => {
|
|
|
11538
11860
|
}
|
|
11539
11861
|
p.setEmail(nextEmail);
|
|
11540
11862
|
};
|
|
11541
|
-
setAttribute(_el$
|
|
11542
|
-
_el$
|
|
11863
|
+
setAttribute(_el$29, "spellcheck", false);
|
|
11864
|
+
_el$30.$$click = async () => {
|
|
11543
11865
|
p.setLoading(true);
|
|
11544
11866
|
p.setMessage(null);
|
|
11545
11867
|
try {
|
|
@@ -11568,23 +11890,23 @@ const SettingsAccount = (props) => {
|
|
|
11568
11890
|
p.setLoading(false);
|
|
11569
11891
|
}
|
|
11570
11892
|
};
|
|
11571
|
-
insert(_el$
|
|
11893
|
+
insert(_el$30, (() => {
|
|
11572
11894
|
var _c$ = memo(() => !!p.loading());
|
|
11573
11895
|
return () => _c$() ? "Sending..." : p.codeSent() ? "Resend Code" : "Send Code";
|
|
11574
11896
|
})());
|
|
11575
|
-
insert(_el$
|
|
11897
|
+
insert(_el$26, createComponent(Show, {
|
|
11576
11898
|
get when() {
|
|
11577
11899
|
return p.codeSent();
|
|
11578
11900
|
},
|
|
11579
11901
|
get children() {
|
|
11580
|
-
var _el$
|
|
11581
|
-
_el$
|
|
11902
|
+
var _el$31 = _tmpl$6$2(), _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling;
|
|
11903
|
+
_el$32.$$input = (e) => {
|
|
11582
11904
|
const nextCode = e.currentTarget.value.replace(/\D+/g, "").slice(0, 6);
|
|
11583
11905
|
p.setCode(nextCode);
|
|
11584
11906
|
p.setMessage(null);
|
|
11585
11907
|
};
|
|
11586
|
-
setAttribute(_el$
|
|
11587
|
-
_el$
|
|
11908
|
+
setAttribute(_el$32, "spellcheck", false);
|
|
11909
|
+
_el$33.$$click = async () => {
|
|
11588
11910
|
p.setLoading(true);
|
|
11589
11911
|
p.setMessage(null);
|
|
11590
11912
|
try {
|
|
@@ -11611,69 +11933,69 @@ const SettingsAccount = (props) => {
|
|
|
11611
11933
|
p.setLoading(false);
|
|
11612
11934
|
}
|
|
11613
11935
|
};
|
|
11614
|
-
insert(_el$
|
|
11615
|
-
createRenderEffect(() => _el$
|
|
11616
|
-
createRenderEffect(() => _el$
|
|
11617
|
-
return _el$
|
|
11936
|
+
insert(_el$33, () => p.loading() ? "Verifying..." : "Verify Code");
|
|
11937
|
+
createRenderEffect(() => _el$33.disabled = p.loading() || !p.email().trim() || p.code().trim().length !== 6 || !p.challengeToken());
|
|
11938
|
+
createRenderEffect(() => _el$32.value = p.code());
|
|
11939
|
+
return _el$31;
|
|
11618
11940
|
}
|
|
11619
|
-
}), _el$
|
|
11620
|
-
_el$
|
|
11941
|
+
}), _el$34);
|
|
11942
|
+
_el$34.$$click = () => {
|
|
11621
11943
|
p.startCheckout();
|
|
11622
11944
|
};
|
|
11623
|
-
insert(_el$
|
|
11624
|
-
insert(_el$
|
|
11945
|
+
insert(_el$34, () => p.loading() ? "Opening Checkout..." : "Subscribe to Premium — $5.99/mo after 7-day free trial");
|
|
11946
|
+
insert(_el$26, createComponent(Show, {
|
|
11625
11947
|
get when() {
|
|
11626
11948
|
return p.message();
|
|
11627
11949
|
},
|
|
11628
11950
|
children: (msg) => (() => {
|
|
11629
|
-
var _el$
|
|
11630
|
-
insert(_el$
|
|
11951
|
+
var _el$36 = _tmpl$5$2();
|
|
11952
|
+
insert(_el$36, () => msg().text);
|
|
11631
11953
|
createRenderEffect((_p$) => {
|
|
11632
|
-
var _v$
|
|
11633
|
-
_v$
|
|
11634
|
-
_v$
|
|
11954
|
+
var _v$5 = !!(msg().kind === "success"), _v$6 = !!(msg().kind === "error");
|
|
11955
|
+
_v$5 !== _p$.e && _el$36.classList.toggle("success", _p$.e = _v$5);
|
|
11956
|
+
_v$6 !== _p$.t && _el$36.classList.toggle("error", _p$.t = _v$6);
|
|
11635
11957
|
return _p$;
|
|
11636
11958
|
}, {
|
|
11637
11959
|
e: void 0,
|
|
11638
11960
|
t: void 0
|
|
11639
11961
|
});
|
|
11640
|
-
return _el$
|
|
11962
|
+
return _el$36;
|
|
11641
11963
|
})()
|
|
11642
11964
|
}), null);
|
|
11643
|
-
insert(_el$
|
|
11965
|
+
insert(_el$26, createComponent(Show, {
|
|
11644
11966
|
get when() {
|
|
11645
11967
|
return p.state().email || p.email();
|
|
11646
11968
|
},
|
|
11647
11969
|
get children() {
|
|
11648
|
-
var _el$
|
|
11649
|
-
_el$
|
|
11970
|
+
var _el$35 = _tmpl$7$2();
|
|
11971
|
+
_el$35.$$click = async () => {
|
|
11650
11972
|
const nextState = await window.vessel.premium.reset();
|
|
11651
11973
|
p.setState(nextState);
|
|
11652
11974
|
p.setEmail("");
|
|
11653
11975
|
p.resetFlow();
|
|
11654
11976
|
p.setMessage(null);
|
|
11655
11977
|
};
|
|
11656
|
-
return _el$
|
|
11978
|
+
return _el$35;
|
|
11657
11979
|
}
|
|
11658
11980
|
}), null);
|
|
11659
11981
|
createRenderEffect((_p$) => {
|
|
11660
|
-
var _v$ = p.loading() || !p.email().trim(), _v$
|
|
11661
|
-
_v$ !== _p$.e && (_el$
|
|
11662
|
-
_v$
|
|
11982
|
+
var _v$3 = p.loading() || !p.email().trim(), _v$4 = p.loading();
|
|
11983
|
+
_v$3 !== _p$.e && (_el$30.disabled = _p$.e = _v$3);
|
|
11984
|
+
_v$4 !== _p$.t && (_el$34.disabled = _p$.t = _v$4);
|
|
11663
11985
|
return _p$;
|
|
11664
11986
|
}, {
|
|
11665
11987
|
e: void 0,
|
|
11666
11988
|
t: void 0
|
|
11667
11989
|
});
|
|
11668
|
-
createRenderEffect(() => _el$
|
|
11669
|
-
return _el$
|
|
11990
|
+
createRenderEffect(() => _el$29.value = p.email());
|
|
11991
|
+
return _el$26;
|
|
11670
11992
|
})();
|
|
11671
11993
|
},
|
|
11672
11994
|
get children() {
|
|
11673
|
-
var _el$
|
|
11674
|
-
_el$
|
|
11675
|
-
var _el$
|
|
11676
|
-
insert(_el$
|
|
11995
|
+
var _el$11 = _tmpl$2$4(), _el$12 = _el$11.firstChild;
|
|
11996
|
+
_el$12.firstChild;
|
|
11997
|
+
var _el$14 = _el$12.nextSibling, _el$15 = _el$14.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
11998
|
+
insert(_el$12, createComponent(Show, {
|
|
11677
11999
|
get when() {
|
|
11678
12000
|
return p.state().status === "trialing";
|
|
11679
12001
|
},
|
|
@@ -11681,8 +12003,8 @@ const SettingsAccount = (props) => {
|
|
|
11681
12003
|
return [" ", "(Trial)"];
|
|
11682
12004
|
}
|
|
11683
12005
|
}), null);
|
|
11684
|
-
insert(_el$
|
|
11685
|
-
insert(_el$
|
|
12006
|
+
insert(_el$14, () => p.state().email, null);
|
|
12007
|
+
insert(_el$14, createComponent(Show, {
|
|
11686
12008
|
get when() {
|
|
11687
12009
|
return p.state().expiresAt;
|
|
11688
12010
|
},
|
|
@@ -11690,7 +12012,7 @@ const SettingsAccount = (props) => {
|
|
|
11690
12012
|
return [" ", "· Renews", " ", memo(() => new Date(p.state().expiresAt).toLocaleDateString())];
|
|
11691
12013
|
}
|
|
11692
12014
|
}), null);
|
|
11693
|
-
_el$
|
|
12015
|
+
_el$16.$$click = async () => {
|
|
11694
12016
|
const result = await window.vessel.premium.portal();
|
|
11695
12017
|
if (!result.ok) {
|
|
11696
12018
|
p.setMessage({
|
|
@@ -11700,38 +12022,38 @@ const SettingsAccount = (props) => {
|
|
|
11700
12022
|
setTimeout(() => p.setMessage(null), 5e3);
|
|
11701
12023
|
}
|
|
11702
12024
|
};
|
|
11703
|
-
_el$
|
|
12025
|
+
_el$17.$$click = async () => {
|
|
11704
12026
|
const nextState = await window.vessel.premium.reset();
|
|
11705
12027
|
p.setState(nextState);
|
|
11706
12028
|
p.setEmail("");
|
|
11707
12029
|
p.resetFlow();
|
|
11708
12030
|
p.setMessage(null);
|
|
11709
12031
|
};
|
|
11710
|
-
insert(_el$
|
|
12032
|
+
insert(_el$11, createComponent(Show, {
|
|
11711
12033
|
get when() {
|
|
11712
12034
|
return p.message();
|
|
11713
12035
|
},
|
|
11714
12036
|
children: (msg) => (() => {
|
|
11715
|
-
var _el$
|
|
11716
|
-
insert(_el$
|
|
12037
|
+
var _el$37 = _tmpl$5$2();
|
|
12038
|
+
insert(_el$37, () => msg().text);
|
|
11717
12039
|
createRenderEffect((_p$) => {
|
|
11718
|
-
var _v$
|
|
11719
|
-
_v$
|
|
11720
|
-
_v$
|
|
12040
|
+
var _v$7 = !!(msg().kind === "success"), _v$8 = !!(msg().kind === "error");
|
|
12041
|
+
_v$7 !== _p$.e && _el$37.classList.toggle("success", _p$.e = _v$7);
|
|
12042
|
+
_v$8 !== _p$.t && _el$37.classList.toggle("error", _p$.t = _v$8);
|
|
11721
12043
|
return _p$;
|
|
11722
12044
|
}, {
|
|
11723
12045
|
e: void 0,
|
|
11724
12046
|
t: void 0
|
|
11725
12047
|
});
|
|
11726
|
-
return _el$
|
|
12048
|
+
return _el$37;
|
|
11727
12049
|
})()
|
|
11728
12050
|
}), null);
|
|
11729
|
-
return _el$
|
|
12051
|
+
return _el$11;
|
|
11730
12052
|
}
|
|
11731
12053
|
}), null);
|
|
11732
|
-
_el$
|
|
11733
|
-
setAttribute(_el$
|
|
11734
|
-
_el$
|
|
12054
|
+
_el$22.$$input = (e) => s.setSaveName(e.currentTarget.value);
|
|
12055
|
+
setAttribute(_el$22, "spellcheck", false);
|
|
12056
|
+
_el$23.$$click = async () => {
|
|
11735
12057
|
try {
|
|
11736
12058
|
await window.vessel.sessions.save(s.saveName().trim());
|
|
11737
12059
|
s.setSaveName("");
|
|
@@ -11748,25 +12070,25 @@ const SettingsAccount = (props) => {
|
|
|
11748
12070
|
});
|
|
11749
12071
|
}
|
|
11750
12072
|
};
|
|
11751
|
-
insert(_el$
|
|
12073
|
+
insert(_el$18, createComponent(Show, {
|
|
11752
12074
|
get when() {
|
|
11753
12075
|
return s.list().length > 0;
|
|
11754
12076
|
},
|
|
11755
12077
|
get children() {
|
|
11756
|
-
var _el$
|
|
11757
|
-
insert(_el$
|
|
12078
|
+
var _el$24 = _tmpl$3$3();
|
|
12079
|
+
insert(_el$24, createComponent(For, {
|
|
11758
12080
|
get each() {
|
|
11759
12081
|
return s.list();
|
|
11760
12082
|
},
|
|
11761
12083
|
children: (session) => (() => {
|
|
11762
|
-
var _el$
|
|
11763
|
-
_el$
|
|
11764
|
-
var _el$
|
|
11765
|
-
insert(_el$
|
|
11766
|
-
insert(_el$
|
|
11767
|
-
insert(_el$
|
|
11768
|
-
insert(_el$
|
|
11769
|
-
_el$
|
|
12084
|
+
var _el$38 = _tmpl$9(), _el$39 = _el$38.firstChild, _el$40 = _el$39.firstChild, _el$41 = _el$40.nextSibling, _el$42 = _el$41.firstChild, _el$48 = _el$42.nextSibling, _el$44 = _el$48.nextSibling, _el$49 = _el$44.nextSibling;
|
|
12085
|
+
_el$49.nextSibling;
|
|
12086
|
+
var _el$50 = _el$39.nextSibling, _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling;
|
|
12087
|
+
insert(_el$40, () => session.name);
|
|
12088
|
+
insert(_el$41, () => new Date(session.updatedAt).toLocaleDateString(), _el$42);
|
|
12089
|
+
insert(_el$41, () => session.cookieCount, _el$48);
|
|
12090
|
+
insert(_el$41, () => session.domains.length, _el$49);
|
|
12091
|
+
_el$51.$$click = async () => {
|
|
11770
12092
|
try {
|
|
11771
12093
|
await window.vessel.sessions.load(session.name);
|
|
11772
12094
|
props.setStatus({
|
|
@@ -11781,18 +12103,18 @@ const SettingsAccount = (props) => {
|
|
|
11781
12103
|
});
|
|
11782
12104
|
}
|
|
11783
12105
|
};
|
|
11784
|
-
_el$
|
|
12106
|
+
_el$52.$$click = async () => {
|
|
11785
12107
|
await window.vessel.sessions.delete(session.name);
|
|
11786
12108
|
await s.loadList();
|
|
11787
12109
|
};
|
|
11788
|
-
return _el$
|
|
12110
|
+
return _el$38;
|
|
11789
12111
|
})()
|
|
11790
12112
|
}));
|
|
11791
|
-
return _el$
|
|
12113
|
+
return _el$24;
|
|
11792
12114
|
}
|
|
11793
12115
|
}), null);
|
|
11794
|
-
createRenderEffect(() => _el$
|
|
11795
|
-
createRenderEffect(() => _el$
|
|
12116
|
+
createRenderEffect(() => _el$23.disabled = !s.saveName().trim());
|
|
12117
|
+
createRenderEffect(() => _el$22.value = s.saveName());
|
|
11796
12118
|
return _el$;
|
|
11797
12119
|
})();
|
|
11798
12120
|
};
|
|
@@ -12084,6 +12406,10 @@ var _tmpl$$3 = /* @__PURE__ */ template(`<div class=settings-compact-upsell><spa
|
|
|
12084
12406
|
box-sizing: border-box;
|
|
12085
12407
|
line-height: 1.5;
|
|
12086
12408
|
}
|
|
12409
|
+
.settings-feedback-textarea {
|
|
12410
|
+
margin-top: 8px;
|
|
12411
|
+
min-height: 96px;
|
|
12412
|
+
}
|
|
12087
12413
|
.settings-input:focus,
|
|
12088
12414
|
.settings-textarea:focus {
|
|
12089
12415
|
outline: none;
|
|
@@ -12847,7 +13173,7 @@ const Settings = () => {
|
|
|
12847
13173
|
setPremiumCodeSent(false);
|
|
12848
13174
|
};
|
|
12849
13175
|
const [chatEnabled, setChatEnabled] = createSignal(false);
|
|
12850
|
-
const [chatProviderId, setChatProviderId] = createSignal("
|
|
13176
|
+
const [chatProviderId, setChatProviderId] = createSignal("openrouter");
|
|
12851
13177
|
const [chatApiKey, setChatApiKey] = createSignal("");
|
|
12852
13178
|
const [chatHasStoredApiKey, setChatHasStoredApiKey] = createSignal(false);
|
|
12853
13179
|
const [chatModel, setChatModel] = createSignal("");
|
|
@@ -12858,9 +13184,24 @@ const Settings = () => {
|
|
|
12858
13184
|
const [providerModels, setProviderModels] = createSignal([]);
|
|
12859
13185
|
const [modelFetchState, setModelFetchState] = createSignal("idle");
|
|
12860
13186
|
const [modelFetchWarning, setModelFetchWarning] = createSignal(null);
|
|
12861
|
-
const
|
|
12862
|
-
|
|
12863
|
-
|
|
13187
|
+
const providerAuth = useProviderAuthSetup({
|
|
13188
|
+
onCodexConnected: () => {
|
|
13189
|
+
setChatHasStoredApiKey(true);
|
|
13190
|
+
},
|
|
13191
|
+
onCodexDisconnected: () => {
|
|
13192
|
+
setChatHasStoredApiKey(false);
|
|
13193
|
+
},
|
|
13194
|
+
onOpenRouterConnected: async (result) => {
|
|
13195
|
+
setChatEnabled(true);
|
|
13196
|
+
setChatProviderId("openrouter");
|
|
13197
|
+
setChatApiKey("");
|
|
13198
|
+
setChatHasStoredApiKey(true);
|
|
13199
|
+
setChatModel(result.model || PROVIDERS.openrouter.defaultModel);
|
|
13200
|
+
setChatBaseUrl(PROVIDERS.openrouter.defaultBaseUrl);
|
|
13201
|
+
setChatReasoningEffort("off");
|
|
13202
|
+
await loadState();
|
|
13203
|
+
}
|
|
13204
|
+
});
|
|
12864
13205
|
const resetProviderModels = () => {
|
|
12865
13206
|
setProviderModels([]);
|
|
12866
13207
|
setModelFetchState("idle");
|
|
@@ -12905,30 +13246,6 @@ const Settings = () => {
|
|
|
12905
13246
|
setModelFetchState("error");
|
|
12906
13247
|
});
|
|
12907
13248
|
};
|
|
12908
|
-
const startCodexAuth = async () => {
|
|
12909
|
-
setCodexAuthStatus("waiting");
|
|
12910
|
-
setCodexAuthError("");
|
|
12911
|
-
try {
|
|
12912
|
-
const result = await window.vessel.codex.startAuth();
|
|
12913
|
-
if (result.ok) {
|
|
12914
|
-
setCodexAccountEmail(result.accountEmail);
|
|
12915
|
-
setCodexAuthStatus("connected");
|
|
12916
|
-
setChatHasStoredApiKey(true);
|
|
12917
|
-
} else {
|
|
12918
|
-
setCodexAuthStatus("error");
|
|
12919
|
-
setCodexAuthError(result.error);
|
|
12920
|
-
}
|
|
12921
|
-
} catch (err) {
|
|
12922
|
-
setCodexAuthStatus("error");
|
|
12923
|
-
setCodexAuthError(err instanceof Error ? err.message : "Unknown error");
|
|
12924
|
-
}
|
|
12925
|
-
};
|
|
12926
|
-
const disconnectCodex = async () => {
|
|
12927
|
-
await window.vessel.codex.disconnect();
|
|
12928
|
-
setCodexAuthStatus("idle");
|
|
12929
|
-
setCodexAccountEmail("");
|
|
12930
|
-
setChatHasStoredApiKey(false);
|
|
12931
|
-
};
|
|
12932
13249
|
createEffect(() => {
|
|
12933
13250
|
if (!chatEnabled()) return;
|
|
12934
13251
|
const meta = chatProviderMeta();
|
|
@@ -12972,9 +13289,7 @@ const Settings = () => {
|
|
|
12972
13289
|
setChatHasStoredApiKey(false);
|
|
12973
13290
|
setChatReasoningEffort("off");
|
|
12974
13291
|
}
|
|
12975
|
-
|
|
12976
|
-
setCodexAuthStatus("connected");
|
|
12977
|
-
}
|
|
13292
|
+
providerAuth.markProviderConnected(cp?.id, cp?.hasApiKey === true);
|
|
12978
13293
|
setTelemetryEnabled(settings.telemetryEnabled !== false);
|
|
12979
13294
|
const dp = settings.domainPolicy ?? {
|
|
12980
13295
|
allowedDomains: [],
|
|
@@ -13021,20 +13336,9 @@ const Settings = () => {
|
|
|
13021
13336
|
});
|
|
13022
13337
|
}
|
|
13023
13338
|
});
|
|
13024
|
-
const unsubCodex = window.vessel.codex.onAuthStatus((payload) => {
|
|
13025
|
-
if (payload.status === "waiting") {
|
|
13026
|
-
setCodexAuthStatus("waiting");
|
|
13027
|
-
} else if (payload.status === "exchanging") {
|
|
13028
|
-
setCodexAuthStatus("exchanging");
|
|
13029
|
-
} else if (payload.status === "error") {
|
|
13030
|
-
setCodexAuthStatus("error");
|
|
13031
|
-
setCodexAuthError(payload.error || "Unknown error");
|
|
13032
|
-
}
|
|
13033
|
-
});
|
|
13034
13339
|
onCleanup(() => {
|
|
13035
13340
|
unsubscribe2();
|
|
13036
13341
|
unsubscribePremium();
|
|
13037
|
-
unsubCodex();
|
|
13038
13342
|
});
|
|
13039
13343
|
});
|
|
13040
13344
|
createEffect(() => {
|
|
@@ -13187,34 +13491,39 @@ const Settings = () => {
|
|
|
13187
13491
|
},
|
|
13188
13492
|
get children() {
|
|
13189
13493
|
return createComponent(SettingsAgent, {
|
|
13190
|
-
chat
|
|
13191
|
-
|
|
13192
|
-
|
|
13193
|
-
|
|
13194
|
-
|
|
13195
|
-
|
|
13196
|
-
|
|
13197
|
-
|
|
13198
|
-
|
|
13199
|
-
|
|
13200
|
-
|
|
13201
|
-
|
|
13202
|
-
|
|
13203
|
-
|
|
13204
|
-
|
|
13205
|
-
|
|
13206
|
-
|
|
13207
|
-
|
|
13208
|
-
|
|
13209
|
-
|
|
13210
|
-
|
|
13211
|
-
|
|
13212
|
-
|
|
13213
|
-
|
|
13214
|
-
|
|
13215
|
-
|
|
13216
|
-
|
|
13217
|
-
|
|
13494
|
+
get chat() {
|
|
13495
|
+
return {
|
|
13496
|
+
enabled: chatEnabled,
|
|
13497
|
+
setEnabled: setChatEnabled,
|
|
13498
|
+
providerId: chatProviderId,
|
|
13499
|
+
setProviderId: setChatProviderId,
|
|
13500
|
+
apiKey: chatApiKey,
|
|
13501
|
+
setApiKey: setChatApiKey,
|
|
13502
|
+
hasStoredApiKey: chatHasStoredApiKey,
|
|
13503
|
+
setHasStoredApiKey: setChatHasStoredApiKey,
|
|
13504
|
+
model: chatModel,
|
|
13505
|
+
setModel: setChatModel,
|
|
13506
|
+
baseUrl: chatBaseUrl,
|
|
13507
|
+
setBaseUrl: setChatBaseUrl,
|
|
13508
|
+
reasoningEffort: chatReasoningEffort,
|
|
13509
|
+
setReasoningEffort: setChatReasoningEffort,
|
|
13510
|
+
providerModels,
|
|
13511
|
+
modelFetchState,
|
|
13512
|
+
modelFetchWarning,
|
|
13513
|
+
doFetchModels,
|
|
13514
|
+
resetProviderModels,
|
|
13515
|
+
codexAuthStatus: providerAuth.codexAuthStatus,
|
|
13516
|
+
codexAccountEmail: providerAuth.codexAccountEmail,
|
|
13517
|
+
setCodexAccountEmail: providerAuth.setCodexAccountEmail,
|
|
13518
|
+
codexAuthError: providerAuth.codexAuthError,
|
|
13519
|
+
setCodexAuthError: providerAuth.setCodexAuthError,
|
|
13520
|
+
openRouterAuthStatus: providerAuth.openRouterAuthStatus,
|
|
13521
|
+
openRouterAuthError: providerAuth.openRouterAuthError,
|
|
13522
|
+
providerType,
|
|
13523
|
+
startCodexAuth: providerAuth.startCodexAuth,
|
|
13524
|
+
disconnectCodex: providerAuth.disconnectCodex,
|
|
13525
|
+
startOpenRouterAuth: providerAuth.startOpenRouterAuth
|
|
13526
|
+
};
|
|
13218
13527
|
},
|
|
13219
13528
|
mcpPort,
|
|
13220
13529
|
setMcpPort,
|