@quanta-intellect/vessel-browser 0.1.13 → 0.1.14
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.
|
@@ -2805,15 +2805,15 @@ function isTableBlock(text2) {
|
|
|
2805
2805
|
const lines = text2.split("\n").filter((l) => l.trim());
|
|
2806
2806
|
if (lines.length < 2) return false;
|
|
2807
2807
|
const hasPipes = lines.every((l) => l.trim().includes("|"));
|
|
2808
|
-
const hasSeparator = lines.some(
|
|
2808
|
+
const hasSeparator = lines.some(
|
|
2809
|
+
(l) => /^\|?\s*[-:]+[-|\s:]*$/.test(l.trim())
|
|
2810
|
+
);
|
|
2809
2811
|
return hasPipes && hasSeparator;
|
|
2810
2812
|
}
|
|
2811
2813
|
function renderTable(block) {
|
|
2812
2814
|
const lines = block.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
2813
2815
|
const parseRow = (line) => line.replace(/^\|/, "").replace(/\|$/, "").split("|").map((cell) => cell.trim());
|
|
2814
|
-
const sepIndex = lines.findIndex(
|
|
2815
|
-
(l) => /^\|?\s*[-:]+[-|\s:]*$/.test(l)
|
|
2816
|
-
);
|
|
2816
|
+
const sepIndex = lines.findIndex((l) => /^\|?\s*[-:]+[-|\s:]*$/.test(l));
|
|
2817
2817
|
const headerRows = sepIndex > 0 ? lines.slice(0, sepIndex) : [lines[0]];
|
|
2818
2818
|
const bodyRows = lines.slice(sepIndex + 1);
|
|
2819
2819
|
const sepCells = sepIndex >= 0 ? parseRow(lines[sepIndex]) : [];
|
|
@@ -2828,10 +2828,14 @@ function renderTable(block) {
|
|
|
2828
2828
|
return align && align !== "left" ? ` style="text-align:${align}"` : "";
|
|
2829
2829
|
};
|
|
2830
2830
|
const thead = headerRows.map(
|
|
2831
|
-
(row) => `<tr>${parseRow(row).map(
|
|
2831
|
+
(row) => `<tr>${parseRow(row).map(
|
|
2832
|
+
(cell, i) => `<th${alignAttr(i)}>${applyInlineMarkdown(cell)}</th>`
|
|
2833
|
+
).join("")}</tr>`
|
|
2832
2834
|
).join("");
|
|
2833
2835
|
const tbody = bodyRows.map(
|
|
2834
|
-
(row) => `<tr>${parseRow(row).map(
|
|
2836
|
+
(row) => `<tr>${parseRow(row).map(
|
|
2837
|
+
(cell, i) => `<td${alignAttr(i)}>${applyInlineMarkdown(cell)}</td>`
|
|
2838
|
+
).join("")}</tr>`
|
|
2835
2839
|
).join("");
|
|
2836
2840
|
return `<table><thead>${thead}</thead><tbody>${tbody}</tbody></table>`;
|
|
2837
2841
|
}
|
|
@@ -2877,9 +2881,11 @@ function renderBlock(block) {
|
|
|
2877
2881
|
const tableBlock = tableEndIdx > 0 ? tableLines.slice(0, tableEndIdx).join("\n") : tableLines.join("\n");
|
|
2878
2882
|
const afterTable = tableEndIdx > 0 ? tableLines.slice(tableEndIdx).join("\n").trim() : "";
|
|
2879
2883
|
let result = "";
|
|
2880
|
-
if (beforeTable)
|
|
2884
|
+
if (beforeTable)
|
|
2885
|
+
result += `<p>${applyInlineMarkdown(beforeTable).replace(/\n/g, "<br>")}</p>`;
|
|
2881
2886
|
result += renderTable(tableBlock);
|
|
2882
|
-
if (afterTable)
|
|
2887
|
+
if (afterTable)
|
|
2888
|
+
result += `<p>${applyInlineMarkdown(afterTable).replace(/\n/g, "<br>")}</p>`;
|
|
2883
2889
|
return result;
|
|
2884
2890
|
}
|
|
2885
2891
|
if (trimmed.split("\n").every((line) => /^[-*+]\s+/.test(line))) {
|
|
@@ -2916,6 +2922,7 @@ const TOOL_ICONS = {
|
|
|
2916
2922
|
flow_status: "◈",
|
|
2917
2923
|
flow_end: "■",
|
|
2918
2924
|
dismiss_popup: "✕",
|
|
2925
|
+
clear_overlays: "✕",
|
|
2919
2926
|
wait_for: "◴",
|
|
2920
2927
|
create_tab: "+",
|
|
2921
2928
|
switch_tab: "⇥",
|
|
@@ -4529,7 +4536,7 @@ const DevToolsPanel = () => {
|
|
|
4529
4536
|
})();
|
|
4530
4537
|
};
|
|
4531
4538
|
delegateEvents(["click", "input"]);
|
|
4532
|
-
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>
|
|
4539
|
+
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=default-homepage>Homepage</label><input id=default-homepage class=settings-input placeholder=https://start.duckduckgo.com><p class=settings-hint>The page that opens when you create a new tab or launch Vessel without restoring a previous session.</p></div><div class=settings-field><label class=settings-label for=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>
|
|
4533
4540
|
.settings-panel {
|
|
4534
4541
|
width: min(440px, calc(100vw - 32px));
|
|
4535
4542
|
max-height: calc(100vh - 48px);
|
|
@@ -4833,6 +4840,7 @@ const Settings = () => {
|
|
|
4833
4840
|
const [maxToolIterations, setMaxToolIterations] = createSignal("200");
|
|
4834
4841
|
const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("summary");
|
|
4835
4842
|
const [health, setHealth] = createSignal(null);
|
|
4843
|
+
const [defaultUrl, setDefaultUrl] = createSignal("https://start.duckduckgo.com");
|
|
4836
4844
|
const [status, setStatus] = createSignal(null);
|
|
4837
4845
|
const [chatEnabled, setChatEnabled] = createSignal(false);
|
|
4838
4846
|
const [chatProviderId, setChatProviderId] = createSignal("anthropic");
|
|
@@ -4890,6 +4898,7 @@ const Settings = () => {
|
|
|
4890
4898
|
const loadState = async () => {
|
|
4891
4899
|
const settings = await window.vessel.settings.get();
|
|
4892
4900
|
const runtimeHealth = await window.vessel.settings.getHealth();
|
|
4901
|
+
setDefaultUrl(settings.defaultUrl ?? "https://start.duckduckgo.com");
|
|
4893
4902
|
setAutoRestoreSession(settings.autoRestoreSession ?? true);
|
|
4894
4903
|
setClearBookmarksOnLaunch(settings.clearBookmarksOnLaunch ?? false);
|
|
4895
4904
|
setObsidianVaultPath(settings.obsidianVaultPath ?? "");
|
|
@@ -4924,6 +4933,7 @@ const Settings = () => {
|
|
|
4924
4933
|
});
|
|
4925
4934
|
return;
|
|
4926
4935
|
}
|
|
4936
|
+
await window.vessel.settings.set("defaultUrl", defaultUrl().trim() || "https://start.duckduckgo.com");
|
|
4927
4937
|
await window.vessel.settings.set("autoRestoreSession", autoRestoreSession());
|
|
4928
4938
|
await window.vessel.settings.set("clearBookmarksOnLaunch", clearBookmarksOnLaunch());
|
|
4929
4939
|
await window.vessel.settings.set("obsidianVaultPath", obsidianVaultPath());
|
|
@@ -4959,83 +4969,85 @@ const Settings = () => {
|
|
|
4959
4969
|
},
|
|
4960
4970
|
get children() {
|
|
4961
4971
|
return [(() => {
|
|
4962
|
-
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.
|
|
4972
|
+
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.nextSibling, _el$18 = _el$15.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.firstChild, _el$21 = _el$18.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild, _el$24 = _el$21.nextSibling, _el$25 = _el$24.nextSibling, _el$26 = _el$25.firstChild, _el$27 = _el$26.firstChild, _el$43 = _el$25.nextSibling, _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling;
|
|
4963
4973
|
addEventListener(_el$, "click", closeSettings);
|
|
4964
4974
|
_el$2.$$keydown = handleKeyDown;
|
|
4965
4975
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
4966
|
-
_el$7.$$input = (e) =>
|
|
4976
|
+
_el$7.$$input = (e) => setDefaultUrl(e.currentTarget.value);
|
|
4967
4977
|
setAttribute(_el$7, "spellcheck", false);
|
|
4968
|
-
_el$0.$$input = (e) =>
|
|
4978
|
+
_el$0.$$input = (e) => setMcpPort(e.currentTarget.value);
|
|
4979
|
+
setAttribute(_el$0, "spellcheck", false);
|
|
4980
|
+
_el$11.$$input = (e) => setMaxToolIterations(e.currentTarget.value);
|
|
4969
4981
|
insert(_el$2, createComponent(Show, {
|
|
4970
4982
|
get when() {
|
|
4971
4983
|
return health();
|
|
4972
4984
|
},
|
|
4973
4985
|
children: (currentHealth) => (() => {
|
|
4974
|
-
var _el$
|
|
4975
|
-
_el$
|
|
4976
|
-
insert(_el$
|
|
4977
|
-
insert(_el$
|
|
4978
|
-
insert(_el$
|
|
4986
|
+
var _el$47 = _tmpl$0(), _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling, _el$50 = _el$49.firstChild, _el$52 = _el$50.nextSibling;
|
|
4987
|
+
_el$52.nextSibling;
|
|
4988
|
+
insert(_el$52, () => currentHealth().mcp.status);
|
|
4989
|
+
insert(_el$49, () => currentHealth().mcp.message, null);
|
|
4990
|
+
insert(_el$47, createComponent(Show, {
|
|
4979
4991
|
get when() {
|
|
4980
4992
|
return currentHealth().mcp.endpoint;
|
|
4981
4993
|
},
|
|
4982
4994
|
children: (endpoint) => (() => {
|
|
4983
|
-
var _el$
|
|
4984
|
-
insert(_el$
|
|
4985
|
-
return _el$
|
|
4995
|
+
var _el$55 = _tmpl$1(), _el$56 = _el$55.firstChild, _el$57 = _el$56.nextSibling;
|
|
4996
|
+
insert(_el$57, endpoint);
|
|
4997
|
+
return _el$55;
|
|
4986
4998
|
})()
|
|
4987
4999
|
}), null);
|
|
4988
|
-
insert(_el$
|
|
5000
|
+
insert(_el$47, createComponent(Show, {
|
|
4989
5001
|
get when() {
|
|
4990
5002
|
return currentHealth().startupIssues.length > 0;
|
|
4991
5003
|
},
|
|
4992
5004
|
get children() {
|
|
4993
|
-
var _el$
|
|
4994
|
-
insert(_el$
|
|
4995
|
-
var _el$
|
|
4996
|
-
insert(_el$
|
|
4997
|
-
insert(_el$
|
|
4998
|
-
insert(_el$
|
|
5005
|
+
var _el$54 = _tmpl$9();
|
|
5006
|
+
insert(_el$54, () => currentHealth().startupIssues.map((issue) => (() => {
|
|
5007
|
+
var _el$58 = _tmpl$10(), _el$59 = _el$58.firstChild, _el$60 = _el$59.nextSibling;
|
|
5008
|
+
insert(_el$59, () => issue.title);
|
|
5009
|
+
insert(_el$60, () => issue.detail);
|
|
5010
|
+
insert(_el$58, createComponent(Show, {
|
|
4999
5011
|
get when() {
|
|
5000
5012
|
return issue.action;
|
|
5001
5013
|
},
|
|
5002
5014
|
children: (action) => (() => {
|
|
5003
|
-
var _el$
|
|
5004
|
-
insert(_el$
|
|
5005
|
-
return _el$
|
|
5015
|
+
var _el$61 = _tmpl$11();
|
|
5016
|
+
insert(_el$61, action);
|
|
5017
|
+
return _el$61;
|
|
5006
5018
|
})()
|
|
5007
5019
|
}), null);
|
|
5008
5020
|
createRenderEffect((_p$) => {
|
|
5009
5021
|
var _v$7 = !!(issue.severity === "warning"), _v$8 = !!(issue.severity === "error");
|
|
5010
|
-
_v$7 !== _p$.e && _el$
|
|
5011
|
-
_v$8 !== _p$.t && _el$
|
|
5022
|
+
_v$7 !== _p$.e && _el$58.classList.toggle("warning", _p$.e = _v$7);
|
|
5023
|
+
_v$8 !== _p$.t && _el$58.classList.toggle("error", _p$.t = _v$8);
|
|
5012
5024
|
return _p$;
|
|
5013
5025
|
}, {
|
|
5014
5026
|
e: void 0,
|
|
5015
5027
|
t: void 0
|
|
5016
5028
|
});
|
|
5017
|
-
return _el$
|
|
5029
|
+
return _el$58;
|
|
5018
5030
|
})()));
|
|
5019
|
-
return _el$
|
|
5031
|
+
return _el$54;
|
|
5020
5032
|
}
|
|
5021
5033
|
}), null);
|
|
5022
|
-
return _el$
|
|
5034
|
+
return _el$47;
|
|
5023
5035
|
})()
|
|
5024
|
-
}), _el$
|
|
5025
|
-
_el$
|
|
5026
|
-
setAttribute(_el$
|
|
5027
|
-
_el$
|
|
5028
|
-
_el$
|
|
5029
|
-
_el$
|
|
5030
|
-
_el$
|
|
5036
|
+
}), _el$12);
|
|
5037
|
+
_el$14.$$input = (e) => setObsidianVaultPath(e.currentTarget.value);
|
|
5038
|
+
setAttribute(_el$14, "spellcheck", false);
|
|
5039
|
+
_el$17.addEventListener("change", (e) => setAgentTranscriptMode(e.currentTarget.value));
|
|
5040
|
+
_el$20.$$click = () => setAutoRestoreSession(!autoRestoreSession());
|
|
5041
|
+
_el$23.$$click = () => setClearBookmarksOnLaunch(!clearBookmarksOnLaunch());
|
|
5042
|
+
_el$27.$$click = () => setChatEnabled(!chatEnabled());
|
|
5031
5043
|
insert(_el$2, createComponent(Show, {
|
|
5032
5044
|
get when() {
|
|
5033
5045
|
return chatEnabled();
|
|
5034
5046
|
},
|
|
5035
5047
|
get children() {
|
|
5036
5048
|
return [(() => {
|
|
5037
|
-
var _el$
|
|
5038
|
-
_el$
|
|
5049
|
+
var _el$28 = _tmpl$$1(), _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling;
|
|
5050
|
+
_el$30.addEventListener("change", (e) => {
|
|
5039
5051
|
const id = e.currentTarget.value;
|
|
5040
5052
|
setChatProviderId(id);
|
|
5041
5053
|
setChatModel("");
|
|
@@ -5044,65 +5056,65 @@ const Settings = () => {
|
|
|
5044
5056
|
setProviderModels([]);
|
|
5045
5057
|
setModelFetchState("idle");
|
|
5046
5058
|
});
|
|
5047
|
-
insert(_el$
|
|
5059
|
+
insert(_el$30, createComponent(For, {
|
|
5048
5060
|
each: CHAT_PROVIDERS,
|
|
5049
5061
|
children: (p) => (() => {
|
|
5050
|
-
var _el$
|
|
5051
|
-
insert(_el$
|
|
5052
|
-
createRenderEffect(() => _el$
|
|
5053
|
-
return _el$
|
|
5062
|
+
var _el$62 = _tmpl$12();
|
|
5063
|
+
insert(_el$62, () => p.name);
|
|
5064
|
+
createRenderEffect(() => _el$62.value = p.id);
|
|
5065
|
+
return _el$62;
|
|
5054
5066
|
})()
|
|
5055
5067
|
}));
|
|
5056
|
-
createRenderEffect(() => _el$
|
|
5057
|
-
return _el$
|
|
5068
|
+
createRenderEffect(() => _el$30.value = chatProviderId());
|
|
5069
|
+
return _el$28;
|
|
5058
5070
|
})(), createComponent(Show, {
|
|
5059
5071
|
get when() {
|
|
5060
5072
|
return chatProviderMeta().requiresKey;
|
|
5061
5073
|
},
|
|
5062
5074
|
get children() {
|
|
5063
|
-
var _el$
|
|
5064
|
-
_el$
|
|
5065
|
-
setAttribute(_el$
|
|
5066
|
-
createRenderEffect(() => setAttribute(_el$
|
|
5067
|
-
createRenderEffect(() => _el$
|
|
5068
|
-
return _el$
|
|
5075
|
+
var _el$31 = _tmpl$2$1(), _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling;
|
|
5076
|
+
_el$33.$$input = (e) => setChatApiKey(e.currentTarget.value);
|
|
5077
|
+
setAttribute(_el$33, "spellcheck", false);
|
|
5078
|
+
createRenderEffect(() => setAttribute(_el$33, "placeholder", chatProviderMeta().keyPlaceholder));
|
|
5079
|
+
createRenderEffect(() => _el$33.value = chatApiKey());
|
|
5080
|
+
return _el$31;
|
|
5069
5081
|
}
|
|
5070
5082
|
}), (() => {
|
|
5071
|
-
var _el$
|
|
5072
|
-
insert(_el$
|
|
5083
|
+
var _el$34 = _tmpl$5(), _el$35 = _el$34.firstChild, _el$36 = _el$35.nextSibling, _el$38 = _el$36.firstChild;
|
|
5084
|
+
insert(_el$36, createComponent(Show, {
|
|
5073
5085
|
get when() {
|
|
5074
5086
|
return providerModels().length > 0;
|
|
5075
5087
|
},
|
|
5076
5088
|
get fallback() {
|
|
5077
5089
|
return (() => {
|
|
5078
|
-
var _el$
|
|
5079
|
-
_el$
|
|
5080
|
-
setAttribute(_el$
|
|
5081
|
-
createRenderEffect(() => setAttribute(_el$
|
|
5082
|
-
createRenderEffect(() => _el$
|
|
5083
|
-
return _el$
|
|
5090
|
+
var _el$63 = _tmpl$13();
|
|
5091
|
+
_el$63.$$input = (e) => setChatModel(e.currentTarget.value);
|
|
5092
|
+
setAttribute(_el$63, "spellcheck", false);
|
|
5093
|
+
createRenderEffect(() => setAttribute(_el$63, "placeholder", modelFetchState() === "loading" ? "Fetching models…" : chatProviderMeta().requiresKey && !chatApiKey().trim() ? "Enter API key to load models" : chatProviderMeta().defaultModel || "model name"));
|
|
5094
|
+
createRenderEffect(() => _el$63.value = chatModel());
|
|
5095
|
+
return _el$63;
|
|
5084
5096
|
})();
|
|
5085
5097
|
},
|
|
5086
5098
|
get children() {
|
|
5087
|
-
var _el$
|
|
5088
|
-
_el$
|
|
5089
|
-
insert(_el$
|
|
5099
|
+
var _el$37 = _tmpl$3();
|
|
5100
|
+
_el$37.addEventListener("change", (e) => setChatModel(e.currentTarget.value));
|
|
5101
|
+
insert(_el$37, createComponent(For, {
|
|
5090
5102
|
get each() {
|
|
5091
5103
|
return providerModels();
|
|
5092
5104
|
},
|
|
5093
5105
|
children: (m) => (() => {
|
|
5094
|
-
var _el$
|
|
5095
|
-
_el$
|
|
5096
|
-
insert(_el$
|
|
5097
|
-
return _el$
|
|
5106
|
+
var _el$64 = _tmpl$12();
|
|
5107
|
+
_el$64.value = m;
|
|
5108
|
+
insert(_el$64, m);
|
|
5109
|
+
return _el$64;
|
|
5098
5110
|
})()
|
|
5099
5111
|
}));
|
|
5100
|
-
createRenderEffect(() => _el$
|
|
5101
|
-
return _el$
|
|
5112
|
+
createRenderEffect(() => _el$37.value = chatModel());
|
|
5113
|
+
return _el$37;
|
|
5102
5114
|
}
|
|
5103
|
-
}), _el$
|
|
5104
|
-
_el$
|
|
5105
|
-
insert(_el$
|
|
5115
|
+
}), _el$38);
|
|
5116
|
+
_el$38.$$click = doFetchModels;
|
|
5117
|
+
insert(_el$34, createComponent(Show, {
|
|
5106
5118
|
get when() {
|
|
5107
5119
|
return modelFetchState() === "error";
|
|
5108
5120
|
},
|
|
@@ -5110,52 +5122,52 @@ const Settings = () => {
|
|
|
5110
5122
|
return _tmpl$4();
|
|
5111
5123
|
}
|
|
5112
5124
|
}), null);
|
|
5113
|
-
createRenderEffect(() => _el$
|
|
5114
|
-
return _el$
|
|
5125
|
+
createRenderEffect(() => _el$38.disabled = modelFetchState() === "loading");
|
|
5126
|
+
return _el$34;
|
|
5115
5127
|
})(), createComponent(Show, {
|
|
5116
5128
|
get when() {
|
|
5117
5129
|
return chatProviderMeta().needsBaseUrl || chatProviderId() === "custom";
|
|
5118
5130
|
},
|
|
5119
5131
|
get children() {
|
|
5120
|
-
var _el$
|
|
5121
|
-
_el$
|
|
5122
|
-
setAttribute(_el$
|
|
5123
|
-
createRenderEffect(() => setAttribute(_el$
|
|
5124
|
-
createRenderEffect(() => _el$
|
|
5125
|
-
return _el$
|
|
5132
|
+
var _el$40 = _tmpl$6(), _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling;
|
|
5133
|
+
_el$42.$$input = (e) => setChatBaseUrl(e.currentTarget.value);
|
|
5134
|
+
setAttribute(_el$42, "spellcheck", false);
|
|
5135
|
+
createRenderEffect(() => setAttribute(_el$42, "placeholder", chatProviderMeta().defaultBaseUrl ?? "https://..."));
|
|
5136
|
+
createRenderEffect(() => _el$42.value = chatBaseUrl());
|
|
5137
|
+
return _el$40;
|
|
5126
5138
|
}
|
|
5127
5139
|
})];
|
|
5128
5140
|
}
|
|
5129
|
-
}), _el$
|
|
5130
|
-
_el$
|
|
5131
|
-
addEventListener(_el$
|
|
5141
|
+
}), _el$43);
|
|
5142
|
+
_el$44.$$click = handleSave;
|
|
5143
|
+
addEventListener(_el$45, "click", closeSettings);
|
|
5132
5144
|
insert(_el$2, createComponent(Show, {
|
|
5133
5145
|
get when() {
|
|
5134
5146
|
return status();
|
|
5135
5147
|
},
|
|
5136
5148
|
children: (currentStatus) => (() => {
|
|
5137
|
-
var _el$
|
|
5138
|
-
insert(_el$
|
|
5149
|
+
var _el$65 = _tmpl$14();
|
|
5150
|
+
insert(_el$65, () => currentStatus().text);
|
|
5139
5151
|
createRenderEffect((_p$) => {
|
|
5140
5152
|
var _v$9 = !!(currentStatus().kind === "success"), _v$0 = !!(currentStatus().kind === "error");
|
|
5141
|
-
_v$9 !== _p$.e && _el$
|
|
5142
|
-
_v$0 !== _p$.t && _el$
|
|
5153
|
+
_v$9 !== _p$.e && _el$65.classList.toggle("success", _p$.e = _v$9);
|
|
5154
|
+
_v$0 !== _p$.t && _el$65.classList.toggle("error", _p$.t = _v$0);
|
|
5143
5155
|
return _p$;
|
|
5144
5156
|
}, {
|
|
5145
5157
|
e: void 0,
|
|
5146
5158
|
t: void 0
|
|
5147
5159
|
});
|
|
5148
|
-
return _el$
|
|
5160
|
+
return _el$65;
|
|
5149
5161
|
})()
|
|
5150
5162
|
}), null);
|
|
5151
5163
|
createRenderEffect((_p$) => {
|
|
5152
5164
|
var _v$ = !!autoRestoreSession(), _v$2 = autoRestoreSession(), _v$3 = !!clearBookmarksOnLaunch(), _v$4 = clearBookmarksOnLaunch(), _v$5 = !!chatEnabled(), _v$6 = chatEnabled();
|
|
5153
|
-
_v$ !== _p$.e && _el$
|
|
5154
|
-
_v$2 !== _p$.t && setAttribute(_el$
|
|
5155
|
-
_v$3 !== _p$.a && _el$
|
|
5156
|
-
_v$4 !== _p$.o && setAttribute(_el$
|
|
5157
|
-
_v$5 !== _p$.i && _el$
|
|
5158
|
-
_v$6 !== _p$.n && setAttribute(_el$
|
|
5165
|
+
_v$ !== _p$.e && _el$20.classList.toggle("on", _p$.e = _v$);
|
|
5166
|
+
_v$2 !== _p$.t && setAttribute(_el$20, "aria-checked", _p$.t = _v$2);
|
|
5167
|
+
_v$3 !== _p$.a && _el$23.classList.toggle("on", _p$.a = _v$3);
|
|
5168
|
+
_v$4 !== _p$.o && setAttribute(_el$23, "aria-checked", _p$.o = _v$4);
|
|
5169
|
+
_v$5 !== _p$.i && _el$27.classList.toggle("on", _p$.i = _v$5);
|
|
5170
|
+
_v$6 !== _p$.n && setAttribute(_el$27, "aria-checked", _p$.n = _v$6);
|
|
5159
5171
|
return _p$;
|
|
5160
5172
|
}, {
|
|
5161
5173
|
e: void 0,
|
|
@@ -5165,10 +5177,11 @@ const Settings = () => {
|
|
|
5165
5177
|
i: void 0,
|
|
5166
5178
|
n: void 0
|
|
5167
5179
|
});
|
|
5168
|
-
createRenderEffect(() => _el$7.value =
|
|
5169
|
-
createRenderEffect(() => _el$0.value =
|
|
5170
|
-
createRenderEffect(() => _el$11.value =
|
|
5171
|
-
createRenderEffect(() => _el$14.value =
|
|
5180
|
+
createRenderEffect(() => _el$7.value = defaultUrl());
|
|
5181
|
+
createRenderEffect(() => _el$0.value = mcpPort());
|
|
5182
|
+
createRenderEffect(() => _el$11.value = maxToolIterations());
|
|
5183
|
+
createRenderEffect(() => _el$14.value = obsidianVaultPath());
|
|
5184
|
+
createRenderEffect(() => _el$17.value = agentTranscriptMode());
|
|
5172
5185
|
return _el$;
|
|
5173
5186
|
})(), _tmpl$8()];
|
|
5174
5187
|
}
|
package/out/renderer/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Vessel</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-CvRVBELV.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="./assets/index-DMd-y6tm.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quanta-intellect/vessel-browser",
|
|
3
3
|
"mcpName": "io.github.unmodeled-tyler/vessel-browser",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.14",
|
|
5
5
|
"description": "AI-native web browser for Linux — persistent browser runtime for autonomous agents with human supervision",
|
|
6
6
|
"main": "./out/main/index.js",
|
|
7
7
|
"bin": {
|