@quanta-intellect/vessel-browser 0.1.9 → 0.1.11
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 +4 -0
- package/out/main/index.js +1273 -458
- package/out/preload/content-script.js +76 -8
- package/out/renderer/assets/{index-CCVxW0YM.js → index-BUYEjb3N.js} +245 -101
- package/out/renderer/assets/{index-Cud0VqFQ.css → index-DOCQcMR5.css} +172 -0
- package/out/renderer/index.html +2 -2
- package/package.json +2 -1
|
@@ -905,7 +905,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
905
905
|
}
|
|
906
906
|
return "idle";
|
|
907
907
|
}
|
|
908
|
-
var _tmpl$$9 = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$8 = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list
|
|
908
|
+
var _tmpl$$9 = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$8 = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$5 = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list><button class=tab-new data-tooltip="New Tab">+`), _tmpl$4$4 = /* @__PURE__ */ template(`<div role=tab><span class=tab-title></span><button class=tab-close>×`), _tmpl$5$3 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$6$3 = /* @__PURE__ */ template(`<span class=tab-loading>`);
|
|
909
909
|
function stringToHue(str) {
|
|
910
910
|
let hash = 0;
|
|
911
911
|
for (let i = 0; i < str.length; i++) {
|
|
@@ -961,7 +961,7 @@ const TabBar = () => {
|
|
|
961
961
|
onCleanup(() => clearInterval(ticker));
|
|
962
962
|
const modelActiveTabIds = createMemo(() => getAgentActiveTabIds(runtimeState2(), now()));
|
|
963
963
|
return (() => {
|
|
964
|
-
var _el$3 = _tmpl$3$5(), _el$4 = _el$3.firstChild, _el$5 = _el$4.
|
|
964
|
+
var _el$3 = _tmpl$3$5(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
|
|
965
965
|
insert(_el$4, createComponent(For, {
|
|
966
966
|
get each() {
|
|
967
967
|
return tabs2();
|
|
@@ -1007,7 +1007,7 @@ const TabBar = () => {
|
|
|
1007
1007
|
});
|
|
1008
1008
|
return _el$6;
|
|
1009
1009
|
})()
|
|
1010
|
-
}));
|
|
1010
|
+
}), _el$5);
|
|
1011
1011
|
_el$5.$$click = () => createTab();
|
|
1012
1012
|
return _el$3;
|
|
1013
1013
|
})();
|
|
@@ -2642,6 +2642,40 @@ function renderList(block, ordered) {
|
|
|
2642
2642
|
const items = block.split("\n").map((line) => line.replace(pattern, "").trim()).filter(Boolean).map((item) => `<li>${applyInlineMarkdown(item)}</li>`).join("");
|
|
2643
2643
|
return ordered ? `<ol>${items}</ol>` : `<ul>${items}</ul>`;
|
|
2644
2644
|
}
|
|
2645
|
+
function isTableBlock(text2) {
|
|
2646
|
+
const lines = text2.split("\n").filter((l) => l.trim());
|
|
2647
|
+
if (lines.length < 2) return false;
|
|
2648
|
+
const hasPipes = lines.every((l) => l.trim().includes("|"));
|
|
2649
|
+
const hasSeparator = lines.some((l) => /^\|?\s*[-:]+[-|\s:]*$/.test(l.trim()));
|
|
2650
|
+
return hasPipes && hasSeparator;
|
|
2651
|
+
}
|
|
2652
|
+
function renderTable(block) {
|
|
2653
|
+
const lines = block.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
2654
|
+
const parseRow = (line) => line.replace(/^\|/, "").replace(/\|$/, "").split("|").map((cell) => cell.trim());
|
|
2655
|
+
const sepIndex = lines.findIndex(
|
|
2656
|
+
(l) => /^\|?\s*[-:]+[-|\s:]*$/.test(l)
|
|
2657
|
+
);
|
|
2658
|
+
const headerRows = sepIndex > 0 ? lines.slice(0, sepIndex) : [lines[0]];
|
|
2659
|
+
const bodyRows = lines.slice(sepIndex + 1);
|
|
2660
|
+
const sepCells = sepIndex >= 0 ? parseRow(lines[sepIndex]) : [];
|
|
2661
|
+
const alignments = sepCells.map((cell) => {
|
|
2662
|
+
const trimmed = cell.replace(/\s/g, "");
|
|
2663
|
+
if (trimmed.startsWith(":") && trimmed.endsWith(":")) return "center";
|
|
2664
|
+
if (trimmed.endsWith(":")) return "right";
|
|
2665
|
+
return "left";
|
|
2666
|
+
});
|
|
2667
|
+
const alignAttr = (i) => {
|
|
2668
|
+
const align = alignments[i];
|
|
2669
|
+
return align && align !== "left" ? ` style="text-align:${align}"` : "";
|
|
2670
|
+
};
|
|
2671
|
+
const thead = headerRows.map(
|
|
2672
|
+
(row) => `<tr>${parseRow(row).map((cell, i) => `<th${alignAttr(i)}>${applyInlineMarkdown(cell)}</th>`).join("")}</tr>`
|
|
2673
|
+
).join("");
|
|
2674
|
+
const tbody = bodyRows.map(
|
|
2675
|
+
(row) => `<tr>${parseRow(row).map((cell, i) => `<td${alignAttr(i)}>${applyInlineMarkdown(cell)}</td>`).join("")}</tr>`
|
|
2676
|
+
).join("");
|
|
2677
|
+
return `<table><thead>${thead}</thead><tbody>${tbody}</tbody></table>`;
|
|
2678
|
+
}
|
|
2645
2679
|
function renderBlock(block) {
|
|
2646
2680
|
const trimmed = block.trim();
|
|
2647
2681
|
if (!trimmed) return "";
|
|
@@ -2661,6 +2695,9 @@ function renderBlock(block) {
|
|
|
2661
2695
|
if (trimmed === "---" || trimmed === "***") {
|
|
2662
2696
|
return "<hr />";
|
|
2663
2697
|
}
|
|
2698
|
+
if (isTableBlock(trimmed)) {
|
|
2699
|
+
return renderTable(trimmed);
|
|
2700
|
+
}
|
|
2664
2701
|
if (trimmed.split("\n").every((line) => /^[-*+]\s+/.test(line))) {
|
|
2665
2702
|
return renderList(trimmed, false);
|
|
2666
2703
|
}
|
|
@@ -2669,9 +2706,64 @@ function renderBlock(block) {
|
|
|
2669
2706
|
}
|
|
2670
2707
|
return `<p>${applyInlineMarkdown(trimmed).replace(/\n/g, "<br>")}</p>`;
|
|
2671
2708
|
}
|
|
2709
|
+
const TOOL_ICONS = {
|
|
2710
|
+
navigate: "→",
|
|
2711
|
+
go_back: "←",
|
|
2712
|
+
go_forward: "→",
|
|
2713
|
+
reload: "↻",
|
|
2714
|
+
click: "◉",
|
|
2715
|
+
type_text: "⌨",
|
|
2716
|
+
select_option: "▾",
|
|
2717
|
+
submit_form: "⏎",
|
|
2718
|
+
press_key: "⌥",
|
|
2719
|
+
scroll: "↕",
|
|
2720
|
+
hover: "◌",
|
|
2721
|
+
focus: "◎",
|
|
2722
|
+
read_page: "◫",
|
|
2723
|
+
search: "⌕",
|
|
2724
|
+
login: "🔑",
|
|
2725
|
+
fill_form: "⌨",
|
|
2726
|
+
paginate: "⟫",
|
|
2727
|
+
suggest: "✦",
|
|
2728
|
+
highlight: "🖍",
|
|
2729
|
+
clear_highlights: "✕",
|
|
2730
|
+
flow_start: "▶",
|
|
2731
|
+
flow_advance: "▸",
|
|
2732
|
+
flow_status: "◈",
|
|
2733
|
+
flow_end: "■",
|
|
2734
|
+
dismiss_popup: "✕",
|
|
2735
|
+
wait_for: "◴",
|
|
2736
|
+
create_tab: "+",
|
|
2737
|
+
switch_tab: "⇥",
|
|
2738
|
+
close_tab: "✕",
|
|
2739
|
+
current_tab: "◉",
|
|
2740
|
+
list_tabs: "≡",
|
|
2741
|
+
save_bookmark: "★",
|
|
2742
|
+
list_bookmarks: "☆",
|
|
2743
|
+
create_checkpoint: "⚑",
|
|
2744
|
+
restore_checkpoint: "⟲"
|
|
2745
|
+
};
|
|
2746
|
+
function renderToolChip(name, args) {
|
|
2747
|
+
const icon = TOOL_ICONS[name] || "⚙";
|
|
2748
|
+
const displayName = name.replace(/_/g, " ");
|
|
2749
|
+
const argsHtml = args ? `<span class="tool-chip-args">${escapeHtml(args.length > 60 ? args.slice(0, 57) + "..." : args)}</span>` : "";
|
|
2750
|
+
return `<div class="tool-chip"><span class="tool-chip-icon">${icon}</span><span class="tool-chip-name">${escapeHtml(displayName)}</span>${argsHtml}</div>`;
|
|
2751
|
+
}
|
|
2672
2752
|
function renderMarkdown(source) {
|
|
2673
2753
|
const codeBlocks = [];
|
|
2754
|
+
const toolChips = [];
|
|
2674
2755
|
const normalized = source.replace(/\r\n?/g, "\n").replace(
|
|
2756
|
+
/<<tool:([^:>\n]+)(?::([^>\n]*))?>>/g,
|
|
2757
|
+
(_, name, args) => {
|
|
2758
|
+
const token = `\0TC${toolChips.length}\0`;
|
|
2759
|
+
toolChips.push(renderToolChip(name.trim(), (args || "").trim()));
|
|
2760
|
+
return `
|
|
2761
|
+
|
|
2762
|
+
${token}
|
|
2763
|
+
|
|
2764
|
+
`;
|
|
2765
|
+
}
|
|
2766
|
+
).replace(
|
|
2675
2767
|
/```([\w-]+)?\n([\s\S]*?)```/g,
|
|
2676
2768
|
(_, language, code) => {
|
|
2677
2769
|
const token = `\0CB${codeBlocks.length}\0`;
|
|
@@ -2682,17 +2774,27 @@ function renderMarkdown(source) {
|
|
|
2682
2774
|
return token;
|
|
2683
2775
|
}
|
|
2684
2776
|
);
|
|
2685
|
-
const rendered = normalized.split(/\n{2,}/).map(
|
|
2686
|
-
|
|
2687
|
-
(
|
|
2688
|
-
|
|
2777
|
+
const rendered = normalized.split(/\n{2,}/).map((block) => {
|
|
2778
|
+
const trimmed = block.trim();
|
|
2779
|
+
if (/^\x00TC\d+\x00$/.test(trimmed)) return trimmed;
|
|
2780
|
+
return renderBlock(block);
|
|
2781
|
+
}).filter(Boolean).join("");
|
|
2782
|
+
let output = rendered;
|
|
2783
|
+
output = codeBlocks.reduce(
|
|
2784
|
+
(out, snippet, index) => out.replace(`\0CB${index}\0`, snippet),
|
|
2785
|
+
output
|
|
2786
|
+
);
|
|
2787
|
+
output = toolChips.reduce(
|
|
2788
|
+
(out, snippet, index) => out.replace(`\0TC${index}\0`, snippet),
|
|
2789
|
+
output
|
|
2689
2790
|
);
|
|
2690
|
-
return purify.sanitize(
|
|
2791
|
+
return purify.sanitize(output, {
|
|
2691
2792
|
ALLOWED_TAGS: [
|
|
2692
2793
|
"a",
|
|
2693
2794
|
"blockquote",
|
|
2694
2795
|
"br",
|
|
2695
2796
|
"code",
|
|
2797
|
+
"div",
|
|
2696
2798
|
"em",
|
|
2697
2799
|
"h1",
|
|
2698
2800
|
"h2",
|
|
@@ -2705,10 +2807,17 @@ function renderMarkdown(source) {
|
|
|
2705
2807
|
"ol",
|
|
2706
2808
|
"p",
|
|
2707
2809
|
"pre",
|
|
2810
|
+
"span",
|
|
2708
2811
|
"strong",
|
|
2812
|
+
"table",
|
|
2813
|
+
"tbody",
|
|
2814
|
+
"td",
|
|
2815
|
+
"th",
|
|
2816
|
+
"thead",
|
|
2817
|
+
"tr",
|
|
2709
2818
|
"ul"
|
|
2710
2819
|
],
|
|
2711
|
-
ALLOWED_ATTR: ["href", "target", "rel", "data-language"]
|
|
2820
|
+
ALLOWED_ATTR: ["href", "target", "rel", "data-language", "style", "class"]
|
|
2712
2821
|
});
|
|
2713
2822
|
}
|
|
2714
2823
|
const WORD_NORMALIZATIONS = [
|
|
@@ -2767,7 +2876,7 @@ function getBookmarkSearchMatch(args) {
|
|
|
2767
2876
|
return { matchedFields, score };
|
|
2768
2877
|
}
|
|
2769
2878
|
const vesselLogo = "" + new URL("vessel-logo-transparent-IT25qr-Z.png", import.meta.url).href;
|
|
2770
|
-
var _tmpl$$3 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$3$2 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$4$2 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$5$2 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`), _tmpl$6$2 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$7$2 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$8$2 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$9$2 = /* @__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$0$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$1$2 = /* @__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>`), _tmpl$10$2 = /* @__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-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$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$12$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$13$1 = /* @__PURE__ */ template(`<span>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$15 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$16 = /* @__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$17 = /* @__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$18 = /* @__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$19 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$20 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2 placeholder="Ask anything..."></textarea><button class=sidebar-send>Send`), _tmpl$21 = /* @__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></div><div class=sidebar-messages><div>`), _tmpl$22 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$23 = /* @__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$24 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$25 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$26 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$27 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$28 = /* @__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$29 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$32 = /* @__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$33 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$34 = /* @__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$35 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$36 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$37 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$38 = /* @__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 danger"type=button>Remove`), _tmpl$39 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$40 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$41 = /* @__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><button class=agent-control-button type=button>Restore`), _tmpl$42 = /* @__PURE__ */ template(`<div>`), _tmpl$43 = /* @__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`);
|
|
2879
|
+
var _tmpl$$3 = /* @__PURE__ */ template(`<div class="message-content markdown-content">`), _tmpl$2$3 = /* @__PURE__ */ template(`<div class=dropdown-select-menu role=listbox>`), _tmpl$3$2 = /* @__PURE__ */ template(`<div><button class=dropdown-select-trigger type=button aria-haspopup=listbox><span class=dropdown-select-value></span><span class=dropdown-select-caret aria-hidden=true>▾`), _tmpl$4$2 = /* @__PURE__ */ template(`<span class=dropdown-select-option-description>`), _tmpl$5$2 = /* @__PURE__ */ template(`<button class=dropdown-select-option type=button role=option><span class=dropdown-select-option-copy><span class=dropdown-select-option-label>`), _tmpl$6$2 = /* @__PURE__ */ template(`<span class=sidebar-tab-badge>`), _tmpl$7$2 = /* @__PURE__ */ template(`<div class=agent-section-title>Pending approvals`), _tmpl$8$2 = /* @__PURE__ */ template(`<button class=agent-section-toggle type=button>`), _tmpl$9$2 = /* @__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$0$2 = /* @__PURE__ */ template(`<span class=bookmark-status-pill>Saved`), _tmpl$1$2 = /* @__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>`), _tmpl$10$2 = /* @__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-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$2 = /* @__PURE__ */ template(`<div class=checkpoint-timeline>`), _tmpl$12$2 = /* @__PURE__ */ template(`<section class="agent-panel checkpoint-panel"><div class=agent-panel-header><div><div class=agent-panel-title>Checkpoints</div><div class=agent-panel-subtitle></div></div></div><div class=agent-panel-body><div class=agent-checkpoint-row><input class=agent-input placeholder="Checkpoint name"><button class=agent-primary-button type=button>Save checkpoint</button></div><div class=agent-section-title>Recent checkpoints`), _tmpl$13$1 = /* @__PURE__ */ template(`<span>`), _tmpl$14$1 = /* @__PURE__ */ template(`<div><div class=streaming-status><span class=streaming-pulse aria-hidden=true></span><span>Generating`), _tmpl$15 = /* @__PURE__ */ template(`<div class="message message-assistant"><div class=message-content>`), _tmpl$16 = /* @__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$17 = /* @__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$18 = /* @__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$19 = /* @__PURE__ */ template(`<div class=chat-actions>`), _tmpl$20 = /* @__PURE__ */ template(`<div class=sidebar-input-area><textarea class=sidebar-input rows=2 placeholder="Ask anything..."></textarea><button class=sidebar-send>Send`), _tmpl$21 = /* @__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></div><div class=sidebar-messages><div>`), _tmpl$22 = /* @__PURE__ */ template(`<div class=agent-muted>No pending approvals.`), _tmpl$23 = /* @__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$24 = /* @__PURE__ */ template(`<div class=agent-muted>No actions yet.`), _tmpl$25 = /* @__PURE__ */ template(`<div class=agent-muted>Recent actions are collapsed to reduce noise.`), _tmpl$26 = /* @__PURE__ */ template(`<div class="agent-card-copy success">`), _tmpl$27 = /* @__PURE__ */ template(`<div class="agent-card-copy error">`), _tmpl$28 = /* @__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$29 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>`), _tmpl$30 = /* @__PURE__ */ template(`<div class=bookmark-folder-summary>`), _tmpl$31 = /* @__PURE__ */ template(`<div class=bookmark-folder-actions><button class=bookmark-ghost-button type=button>Rename</button><button class="bookmark-ghost-button danger"type=button>Delete`), _tmpl$32 = /* @__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$33 = /* @__PURE__ */ template(`<div class=bookmark-items>`), _tmpl$34 = /* @__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$35 = /* @__PURE__ */ template(`<div class=bookmark-folder-collapsed-hint>Click to view saved links.`), _tmpl$36 = /* @__PURE__ */ template(`<div class=bookmark-empty-folder>No bookmarks in this folder yet.`), _tmpl$37 = /* @__PURE__ */ template(`<div class=bookmark-item-note>`), _tmpl$38 = /* @__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 danger"type=button>Remove`), _tmpl$39 = /* @__PURE__ */ template(`<div class=agent-muted>No checkpoints yet.`), _tmpl$40 = /* @__PURE__ */ template(`<span class=checkpoint-timeline-line>`), _tmpl$41 = /* @__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><button class=agent-control-button type=button>Restore`), _tmpl$42 = /* @__PURE__ */ template(`<div>`), _tmpl$43 = /* @__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$44 = /* @__PURE__ */ template(`<div class=chat-approval-detail>`), _tmpl$45 = /* @__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`);
|
|
2771
2880
|
const UNSORTED_FOLDER = {
|
|
2772
2881
|
id: "unsorted",
|
|
2773
2882
|
name: "Unsorted",
|
|
@@ -3564,6 +3673,35 @@ const Sidebar = (props) => {
|
|
|
3564
3673
|
}));
|
|
3565
3674
|
return _el$73;
|
|
3566
3675
|
}
|
|
3676
|
+
}), createComponent(Show, {
|
|
3677
|
+
get when() {
|
|
3678
|
+
return runtimeState2().supervisor.pendingApprovals.length > 0;
|
|
3679
|
+
},
|
|
3680
|
+
get children() {
|
|
3681
|
+
return createComponent(For, {
|
|
3682
|
+
get each() {
|
|
3683
|
+
return runtimeState2().supervisor.pendingApprovals;
|
|
3684
|
+
},
|
|
3685
|
+
children: (approval) => (() => {
|
|
3686
|
+
var _el$147 = _tmpl$45(), _el$148 = _el$147.firstChild, _el$149 = _el$148.nextSibling, _el$150 = _el$149.firstChild, _el$151 = _el$150.firstChild, _el$152 = _el$151.nextSibling, _el$154 = _el$150.nextSibling, _el$155 = _el$154.nextSibling, _el$156 = _el$155.firstChild, _el$157 = _el$156.nextSibling;
|
|
3687
|
+
insert(_el$152, () => approval.name);
|
|
3688
|
+
insert(_el$149, createComponent(Show, {
|
|
3689
|
+
get when() {
|
|
3690
|
+
return approval.argsSummary;
|
|
3691
|
+
},
|
|
3692
|
+
get children() {
|
|
3693
|
+
var _el$153 = _tmpl$44();
|
|
3694
|
+
insert(_el$153, () => approval.argsSummary);
|
|
3695
|
+
return _el$153;
|
|
3696
|
+
}
|
|
3697
|
+
}), _el$154);
|
|
3698
|
+
insert(_el$154, () => approval.reason);
|
|
3699
|
+
_el$156.$$click = () => void resolveApproval(approval.id, true);
|
|
3700
|
+
_el$157.$$click = () => void resolveApproval(approval.id, false);
|
|
3701
|
+
return _el$147;
|
|
3702
|
+
})()
|
|
3703
|
+
});
|
|
3704
|
+
}
|
|
3567
3705
|
}), createComponent(Show, {
|
|
3568
3706
|
get when() {
|
|
3569
3707
|
return memo(() => messages2().length === 0)() && !isStreaming2();
|
|
@@ -4102,7 +4240,7 @@ const DevToolsPanel = () => {
|
|
|
4102
4240
|
})();
|
|
4103
4241
|
};
|
|
4104
4242
|
delegateEvents(["click", "input"]);
|
|
4105
|
-
var _tmpl$$1 = /* @__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$2$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$3 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$4 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$5 = /* @__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$6 = /* @__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$7 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><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-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><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.</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-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></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-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$8 = /* @__PURE__ */ template(`<style>
|
|
4243
|
+
var _tmpl$$1 = /* @__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$2$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$3 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$4 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$5 = /* @__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$6 = /* @__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$7 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div class=settings-panel><h2 class=settings-title>Runtime Settings</h2><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-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><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200><p class=settings-hint>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.</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.</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-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Restore last browser session on launch</span></label></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Start bookmarks fresh on launch</span></label><p class=settings-hint>Off by default. When enabled, bookmark folders and saved pages are cleared each time Vessel starts.</p></div><div class=settings-section-divider></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-actions><button class=settings-save>Save</button><button class=settings-close>Close`), _tmpl$8 = /* @__PURE__ */ template(`<style>
|
|
4106
4244
|
.settings-panel {
|
|
4107
4245
|
width: min(440px, calc(100vw - 32px));
|
|
4108
4246
|
max-height: calc(100vh - 48px);
|
|
@@ -4403,6 +4541,7 @@ const Settings = () => {
|
|
|
4403
4541
|
const [clearBookmarksOnLaunch, setClearBookmarksOnLaunch] = createSignal(false);
|
|
4404
4542
|
const [obsidianVaultPath, setObsidianVaultPath] = createSignal("");
|
|
4405
4543
|
const [mcpPort, setMcpPort] = createSignal("3100");
|
|
4544
|
+
const [maxToolIterations, setMaxToolIterations] = createSignal("200");
|
|
4406
4545
|
const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("summary");
|
|
4407
4546
|
const [health, setHealth] = createSignal(null);
|
|
4408
4547
|
const [status, setStatus] = createSignal(null);
|
|
@@ -4466,6 +4605,7 @@ const Settings = () => {
|
|
|
4466
4605
|
setClearBookmarksOnLaunch(settings.clearBookmarksOnLaunch ?? false);
|
|
4467
4606
|
setObsidianVaultPath(settings.obsidianVaultPath ?? "");
|
|
4468
4607
|
setMcpPort(String(settings.mcpPort ?? 3100));
|
|
4608
|
+
setMaxToolIterations(String(settings.maxToolIterations ?? 200));
|
|
4469
4609
|
setAgentTranscriptMode(settings.agentTranscriptMode ?? "summary");
|
|
4470
4610
|
setHealth(runtimeHealth);
|
|
4471
4611
|
const cp = settings.chatProvider ?? null;
|
|
@@ -4499,6 +4639,8 @@ const Settings = () => {
|
|
|
4499
4639
|
await window.vessel.settings.set("clearBookmarksOnLaunch", clearBookmarksOnLaunch());
|
|
4500
4640
|
await window.vessel.settings.set("obsidianVaultPath", obsidianVaultPath());
|
|
4501
4641
|
await window.vessel.settings.set("mcpPort", parsedPort);
|
|
4642
|
+
const parsedIterations = Number(maxToolIterations().trim()) || 200;
|
|
4643
|
+
await window.vessel.settings.set("maxToolIterations", Math.max(10, Math.min(1e3, parsedIterations)));
|
|
4502
4644
|
await window.vessel.settings.set("agentTranscriptMode", agentTranscriptMode());
|
|
4503
4645
|
const chatConfig = chatEnabled() ? {
|
|
4504
4646
|
id: chatProviderId(),
|
|
@@ -4528,82 +4670,83 @@ const Settings = () => {
|
|
|
4528
4670
|
},
|
|
4529
4671
|
get children() {
|
|
4530
4672
|
return [(() => {
|
|
4531
|
-
var _el$ = _tmpl$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$5.nextSibling, _el$9 = _el$8.firstChild, _el$0 = _el$9.nextSibling, _el$1 = _el$8.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$1.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.
|
|
4673
|
+
var _el$ = _tmpl$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$5.nextSibling, _el$9 = _el$8.firstChild, _el$0 = _el$9.nextSibling, _el$1 = _el$8.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$1.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$12.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$15.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.firstChild, _el$21 = _el$18.nextSibling, _el$22 = _el$21.nextSibling, _el$23 = _el$22.firstChild, _el$24 = _el$23.firstChild, _el$40 = _el$22.nextSibling, _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling;
|
|
4532
4674
|
addEventListener(_el$, "click", closeSettings);
|
|
4533
4675
|
_el$2.$$keydown = handleKeyDown;
|
|
4534
4676
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
4535
4677
|
_el$7.$$input = (e) => setMcpPort(e.currentTarget.value);
|
|
4536
4678
|
setAttribute(_el$7, "spellcheck", false);
|
|
4679
|
+
_el$0.$$input = (e) => setMaxToolIterations(e.currentTarget.value);
|
|
4537
4680
|
insert(_el$2, createComponent(Show, {
|
|
4538
4681
|
get when() {
|
|
4539
4682
|
return health();
|
|
4540
4683
|
},
|
|
4541
4684
|
children: (currentHealth) => (() => {
|
|
4542
|
-
var _el$
|
|
4543
|
-
_el$
|
|
4544
|
-
insert(_el$
|
|
4545
|
-
insert(_el$
|
|
4546
|
-
insert(_el$
|
|
4685
|
+
var _el$44 = _tmpl$0(), _el$45 = _el$44.firstChild, _el$46 = _el$45.nextSibling, _el$47 = _el$46.firstChild, _el$49 = _el$47.nextSibling;
|
|
4686
|
+
_el$49.nextSibling;
|
|
4687
|
+
insert(_el$49, () => currentHealth().mcp.status);
|
|
4688
|
+
insert(_el$46, () => currentHealth().mcp.message, null);
|
|
4689
|
+
insert(_el$44, createComponent(Show, {
|
|
4547
4690
|
get when() {
|
|
4548
4691
|
return currentHealth().mcp.endpoint;
|
|
4549
4692
|
},
|
|
4550
4693
|
children: (endpoint) => (() => {
|
|
4551
|
-
var _el$
|
|
4552
|
-
insert(_el$
|
|
4553
|
-
return _el$
|
|
4694
|
+
var _el$52 = _tmpl$1(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
|
|
4695
|
+
insert(_el$54, endpoint);
|
|
4696
|
+
return _el$52;
|
|
4554
4697
|
})()
|
|
4555
4698
|
}), null);
|
|
4556
|
-
insert(_el$
|
|
4699
|
+
insert(_el$44, createComponent(Show, {
|
|
4557
4700
|
get when() {
|
|
4558
4701
|
return currentHealth().startupIssues.length > 0;
|
|
4559
4702
|
},
|
|
4560
4703
|
get children() {
|
|
4561
|
-
var _el$
|
|
4562
|
-
insert(_el$
|
|
4563
|
-
var _el$
|
|
4564
|
-
insert(_el$
|
|
4565
|
-
insert(_el$
|
|
4566
|
-
insert(_el$
|
|
4704
|
+
var _el$51 = _tmpl$9();
|
|
4705
|
+
insert(_el$51, () => currentHealth().startupIssues.map((issue) => (() => {
|
|
4706
|
+
var _el$55 = _tmpl$10(), _el$56 = _el$55.firstChild, _el$57 = _el$56.nextSibling;
|
|
4707
|
+
insert(_el$56, () => issue.title);
|
|
4708
|
+
insert(_el$57, () => issue.detail);
|
|
4709
|
+
insert(_el$55, createComponent(Show, {
|
|
4567
4710
|
get when() {
|
|
4568
4711
|
return issue.action;
|
|
4569
4712
|
},
|
|
4570
4713
|
children: (action) => (() => {
|
|
4571
|
-
var _el$
|
|
4572
|
-
insert(_el$
|
|
4573
|
-
return _el$
|
|
4714
|
+
var _el$58 = _tmpl$11();
|
|
4715
|
+
insert(_el$58, action);
|
|
4716
|
+
return _el$58;
|
|
4574
4717
|
})()
|
|
4575
4718
|
}), null);
|
|
4576
4719
|
createRenderEffect((_p$) => {
|
|
4577
4720
|
var _v$7 = !!(issue.severity === "warning"), _v$8 = !!(issue.severity === "error");
|
|
4578
|
-
_v$7 !== _p$.e && _el$
|
|
4579
|
-
_v$8 !== _p$.t && _el$
|
|
4721
|
+
_v$7 !== _p$.e && _el$55.classList.toggle("warning", _p$.e = _v$7);
|
|
4722
|
+
_v$8 !== _p$.t && _el$55.classList.toggle("error", _p$.t = _v$8);
|
|
4580
4723
|
return _p$;
|
|
4581
4724
|
}, {
|
|
4582
4725
|
e: void 0,
|
|
4583
4726
|
t: void 0
|
|
4584
4727
|
});
|
|
4585
|
-
return _el$
|
|
4728
|
+
return _el$55;
|
|
4586
4729
|
})()));
|
|
4587
|
-
return _el$
|
|
4730
|
+
return _el$51;
|
|
4588
4731
|
}
|
|
4589
4732
|
}), null);
|
|
4590
|
-
return _el$
|
|
4733
|
+
return _el$44;
|
|
4591
4734
|
})()
|
|
4592
|
-
}), _el$
|
|
4593
|
-
_el$
|
|
4594
|
-
setAttribute(_el$
|
|
4595
|
-
_el$
|
|
4596
|
-
_el$
|
|
4597
|
-
_el$
|
|
4598
|
-
_el$
|
|
4735
|
+
}), _el$1);
|
|
4736
|
+
_el$11.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
|
|
4737
|
+
setAttribute(_el$11, "spellcheck", false);
|
|
4738
|
+
_el$14.addEventListener("change", (e) => setAgentTranscriptMode(e.currentTarget.value));
|
|
4739
|
+
_el$17.$$click = () => setAutoRestoreSession(!autoRestoreSession());
|
|
4740
|
+
_el$20.$$click = () => setClearBookmarksOnLaunch(!clearBookmarksOnLaunch());
|
|
4741
|
+
_el$24.$$click = () => setChatEnabled(!chatEnabled());
|
|
4599
4742
|
insert(_el$2, createComponent(Show, {
|
|
4600
4743
|
get when() {
|
|
4601
4744
|
return chatEnabled();
|
|
4602
4745
|
},
|
|
4603
4746
|
get children() {
|
|
4604
4747
|
return [(() => {
|
|
4605
|
-
var _el$
|
|
4606
|
-
_el$
|
|
4748
|
+
var _el$25 = _tmpl$$1(), _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling;
|
|
4749
|
+
_el$27.addEventListener("change", (e) => {
|
|
4607
4750
|
const id = e.currentTarget.value;
|
|
4608
4751
|
setChatProviderId(id);
|
|
4609
4752
|
setChatModel("");
|
|
@@ -4612,65 +4755,65 @@ const Settings = () => {
|
|
|
4612
4755
|
setProviderModels([]);
|
|
4613
4756
|
setModelFetchState("idle");
|
|
4614
4757
|
});
|
|
4615
|
-
insert(_el$
|
|
4758
|
+
insert(_el$27, createComponent(For, {
|
|
4616
4759
|
each: CHAT_PROVIDERS,
|
|
4617
4760
|
children: (p) => (() => {
|
|
4618
|
-
var _el$
|
|
4619
|
-
insert(_el$
|
|
4620
|
-
createRenderEffect(() => _el$
|
|
4621
|
-
return _el$
|
|
4761
|
+
var _el$59 = _tmpl$12();
|
|
4762
|
+
insert(_el$59, () => p.name);
|
|
4763
|
+
createRenderEffect(() => _el$59.value = p.id);
|
|
4764
|
+
return _el$59;
|
|
4622
4765
|
})()
|
|
4623
4766
|
}));
|
|
4624
|
-
createRenderEffect(() => _el$
|
|
4625
|
-
return _el$
|
|
4767
|
+
createRenderEffect(() => _el$27.value = chatProviderId());
|
|
4768
|
+
return _el$25;
|
|
4626
4769
|
})(), createComponent(Show, {
|
|
4627
4770
|
get when() {
|
|
4628
4771
|
return chatProviderMeta().requiresKey;
|
|
4629
4772
|
},
|
|
4630
4773
|
get children() {
|
|
4631
|
-
var _el$
|
|
4632
|
-
_el$
|
|
4633
|
-
setAttribute(_el$
|
|
4634
|
-
createRenderEffect(() => setAttribute(_el$
|
|
4635
|
-
createRenderEffect(() => _el$
|
|
4636
|
-
return _el$
|
|
4774
|
+
var _el$28 = _tmpl$2$1(), _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling;
|
|
4775
|
+
_el$30.$$input = (e) => setChatApiKey(e.currentTarget.value);
|
|
4776
|
+
setAttribute(_el$30, "spellcheck", false);
|
|
4777
|
+
createRenderEffect(() => setAttribute(_el$30, "placeholder", chatProviderMeta().keyPlaceholder));
|
|
4778
|
+
createRenderEffect(() => _el$30.value = chatApiKey());
|
|
4779
|
+
return _el$28;
|
|
4637
4780
|
}
|
|
4638
4781
|
}), (() => {
|
|
4639
|
-
var _el$
|
|
4640
|
-
insert(_el$
|
|
4782
|
+
var _el$31 = _tmpl$5(), _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$35 = _el$33.firstChild;
|
|
4783
|
+
insert(_el$33, createComponent(Show, {
|
|
4641
4784
|
get when() {
|
|
4642
4785
|
return providerModels().length > 0;
|
|
4643
4786
|
},
|
|
4644
4787
|
get fallback() {
|
|
4645
4788
|
return (() => {
|
|
4646
|
-
var _el$
|
|
4647
|
-
_el$
|
|
4648
|
-
setAttribute(_el$
|
|
4649
|
-
createRenderEffect(() => setAttribute(_el$
|
|
4650
|
-
createRenderEffect(() => _el$
|
|
4651
|
-
return _el$
|
|
4789
|
+
var _el$60 = _tmpl$13();
|
|
4790
|
+
_el$60.$$input = (e) => setChatModel(e.currentTarget.value);
|
|
4791
|
+
setAttribute(_el$60, "spellcheck", false);
|
|
4792
|
+
createRenderEffect(() => setAttribute(_el$60, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
|
|
4793
|
+
createRenderEffect(() => _el$60.value = chatModel());
|
|
4794
|
+
return _el$60;
|
|
4652
4795
|
})();
|
|
4653
4796
|
},
|
|
4654
4797
|
get children() {
|
|
4655
|
-
var _el$
|
|
4656
|
-
_el$
|
|
4657
|
-
insert(_el$
|
|
4798
|
+
var _el$34 = _tmpl$3();
|
|
4799
|
+
_el$34.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
|
|
4800
|
+
insert(_el$34, createComponent(For, {
|
|
4658
4801
|
get each() {
|
|
4659
4802
|
return providerModels();
|
|
4660
4803
|
},
|
|
4661
4804
|
children: (m) => (() => {
|
|
4662
|
-
var _el$
|
|
4663
|
-
_el$
|
|
4664
|
-
insert(_el$
|
|
4665
|
-
return _el$
|
|
4805
|
+
var _el$61 = _tmpl$12();
|
|
4806
|
+
_el$61.value = m;
|
|
4807
|
+
insert(_el$61, m);
|
|
4808
|
+
return _el$61;
|
|
4666
4809
|
})()
|
|
4667
4810
|
}));
|
|
4668
|
-
createRenderEffect(() => _el$
|
|
4669
|
-
return _el$
|
|
4811
|
+
createRenderEffect(() => _el$34.value = chatModel());
|
|
4812
|
+
return _el$34;
|
|
4670
4813
|
}
|
|
4671
|
-
}), _el$
|
|
4672
|
-
_el$
|
|
4673
|
-
insert(_el$
|
|
4814
|
+
}), _el$35);
|
|
4815
|
+
_el$35.$$click = doFetchModels;
|
|
4816
|
+
insert(_el$31, createComponent(Show, {
|
|
4674
4817
|
get when() {
|
|
4675
4818
|
return modelFetchState() === "error";
|
|
4676
4819
|
},
|
|
@@ -4678,52 +4821,52 @@ const Settings = () => {
|
|
|
4678
4821
|
return _tmpl$4();
|
|
4679
4822
|
}
|
|
4680
4823
|
}), null);
|
|
4681
|
-
createRenderEffect(() => _el$
|
|
4682
|
-
return _el$
|
|
4824
|
+
createRenderEffect(() => _el$35.disabled = modelFetchState() === "loading");
|
|
4825
|
+
return _el$31;
|
|
4683
4826
|
})(), createComponent(Show, {
|
|
4684
4827
|
get when() {
|
|
4685
4828
|
return chatProviderMeta().needsBaseUrl || chatProviderId() === "custom";
|
|
4686
4829
|
},
|
|
4687
4830
|
get children() {
|
|
4688
|
-
var _el$
|
|
4689
|
-
_el$
|
|
4690
|
-
setAttribute(_el$
|
|
4691
|
-
createRenderEffect(() => setAttribute(_el$
|
|
4692
|
-
createRenderEffect(() => _el$
|
|
4693
|
-
return _el$
|
|
4831
|
+
var _el$37 = _tmpl$6(), _el$38 = _el$37.firstChild, _el$39 = _el$38.nextSibling;
|
|
4832
|
+
_el$39.$$input = (e) => setChatBaseUrl(e.currentTarget.value);
|
|
4833
|
+
setAttribute(_el$39, "spellcheck", false);
|
|
4834
|
+
createRenderEffect(() => setAttribute(_el$39, "placeholder", chatProviderMeta().defaultBaseUrl ?? "https://..."));
|
|
4835
|
+
createRenderEffect(() => _el$39.value = chatBaseUrl());
|
|
4836
|
+
return _el$37;
|
|
4694
4837
|
}
|
|
4695
4838
|
})];
|
|
4696
4839
|
}
|
|
4697
|
-
}), _el$
|
|
4698
|
-
_el$
|
|
4699
|
-
addEventListener(_el$
|
|
4840
|
+
}), _el$40);
|
|
4841
|
+
_el$41.$$click = handleSave;
|
|
4842
|
+
addEventListener(_el$42, "click", closeSettings);
|
|
4700
4843
|
insert(_el$2, createComponent(Show, {
|
|
4701
4844
|
get when() {
|
|
4702
4845
|
return status();
|
|
4703
4846
|
},
|
|
4704
4847
|
children: (currentStatus) => (() => {
|
|
4705
|
-
var _el$
|
|
4706
|
-
insert(_el$
|
|
4848
|
+
var _el$62 = _tmpl$14();
|
|
4849
|
+
insert(_el$62, () => currentStatus().text);
|
|
4707
4850
|
createRenderEffect((_p$) => {
|
|
4708
4851
|
var _v$9 = !!(currentStatus().kind === "success"), _v$0 = !!(currentStatus().kind === "error");
|
|
4709
|
-
_v$9 !== _p$.e && _el$
|
|
4710
|
-
_v$0 !== _p$.t && _el$
|
|
4852
|
+
_v$9 !== _p$.e && _el$62.classList.toggle("success", _p$.e = _v$9);
|
|
4853
|
+
_v$0 !== _p$.t && _el$62.classList.toggle("error", _p$.t = _v$0);
|
|
4711
4854
|
return _p$;
|
|
4712
4855
|
}, {
|
|
4713
4856
|
e: void 0,
|
|
4714
4857
|
t: void 0
|
|
4715
4858
|
});
|
|
4716
|
-
return _el$
|
|
4859
|
+
return _el$62;
|
|
4717
4860
|
})()
|
|
4718
4861
|
}), null);
|
|
4719
4862
|
createRenderEffect((_p$) => {
|
|
4720
4863
|
var _v$ = !!autoRestoreSession(), _v$2 = autoRestoreSession(), _v$3 = !!clearBookmarksOnLaunch(), _v$4 = clearBookmarksOnLaunch(), _v$5 = !!chatEnabled(), _v$6 = chatEnabled();
|
|
4721
|
-
_v$ !== _p$.e && _el$
|
|
4722
|
-
_v$2 !== _p$.t && setAttribute(_el$
|
|
4723
|
-
_v$3 !== _p$.a && _el$
|
|
4724
|
-
_v$4 !== _p$.o && setAttribute(_el$
|
|
4725
|
-
_v$5 !== _p$.i && _el$
|
|
4726
|
-
_v$6 !== _p$.n && setAttribute(_el$
|
|
4864
|
+
_v$ !== _p$.e && _el$17.classList.toggle("on", _p$.e = _v$);
|
|
4865
|
+
_v$2 !== _p$.t && setAttribute(_el$17, "aria-checked", _p$.t = _v$2);
|
|
4866
|
+
_v$3 !== _p$.a && _el$20.classList.toggle("on", _p$.a = _v$3);
|
|
4867
|
+
_v$4 !== _p$.o && setAttribute(_el$20, "aria-checked", _p$.o = _v$4);
|
|
4868
|
+
_v$5 !== _p$.i && _el$24.classList.toggle("on", _p$.i = _v$5);
|
|
4869
|
+
_v$6 !== _p$.n && setAttribute(_el$24, "aria-checked", _p$.n = _v$6);
|
|
4727
4870
|
return _p$;
|
|
4728
4871
|
}, {
|
|
4729
4872
|
e: void 0,
|
|
@@ -4734,8 +4877,9 @@ const Settings = () => {
|
|
|
4734
4877
|
n: void 0
|
|
4735
4878
|
});
|
|
4736
4879
|
createRenderEffect(() => _el$7.value = mcpPort());
|
|
4737
|
-
createRenderEffect(() => _el$0.value =
|
|
4738
|
-
createRenderEffect(() => _el$11.value =
|
|
4880
|
+
createRenderEffect(() => _el$0.value = maxToolIterations());
|
|
4881
|
+
createRenderEffect(() => _el$11.value = obsidianVaultPath());
|
|
4882
|
+
createRenderEffect(() => _el$14.value = agentTranscriptMode());
|
|
4739
4883
|
return _el$;
|
|
4740
4884
|
})(), _tmpl$8()];
|
|
4741
4885
|
}
|