diff --git a/.github/workflows/bundle-findbar.yml b/.github/workflows/bundle-findbar.yml
index 56a1b6b..595d6be 100644
--- a/.github/workflows/bundle-findbar.yml
+++ b/.github/workflows/bundle-findbar.yml
@@ -14,11 +14,15 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v3
with:
- node-version: '16'
+ node-version: '18'
cache: 'npm'
- name: Install dependencies
- run: npm install
+ run: |
+ npm cache clean --force
+ rm -rf node_modules package-lock.json
+ npm config set registry https://registry.npmjs.org/
+ npm install --legacy-peer-deps
- name: Bundle JavaScript
run: |
diff --git a/.github/workflows/update-theme-and-format.yml b/.github/workflows/update-theme-and-format.yml
index d20b57c..502cbaa 100644
--- a/.github/workflows/update-theme-and-format.yml
+++ b/.github/workflows/update-theme-and-format.yml
@@ -6,7 +6,6 @@ permissions:
on:
push:
branches:
- - main
workflow_dispatch:
jobs:
@@ -113,7 +112,7 @@ jobs:
cache: 'npm'
- name: Install dependencies
- run: npm install
+ run: npm install --global prettier
- name: Run Prettier
run: npm run format
diff --git a/findbar-ai/browse-bot.uc.js b/findbar-ai/browse-bot.uc.js
new file mode 100644
index 0000000..ed3090b
--- /dev/null
+++ b/findbar-ai/browse-bot.uc.js
@@ -0,0 +1,76 @@
+import { urlbarAI } from "./urlbar.uc.js";
+import { browseBotFindbar } from "./findbar-ai.uc.js";
+import { PREFS, debugLog, debugError } from "./utils/prefs.js";
+import { SettingsModal } from "./settings.js";
+
+function setupCommandPaletteIntegration(retryCount = 0) {
+ if (window.ZenCommandPalette) {
+ debugLog("Integrating with Zen Command Palette...");
+
+ window.ZenCommandPalette.addCommands([
+ {
+ key: "browsebot:summarize",
+ label: "Summarize Page",
+ command: () => {
+ browseBotFindbar.expanded = true;
+ browseBotFindbar.sendMessage("Summarize the current page");
+ browseBotFindbar.focusPrompt();
+ },
+ condition: () => PREFS.enabled,
+ icon: "chrome://global/skin/icons/highlights.svg",
+ tags: ["AI", "Summarize", "BrowseBot", "findbar"],
+ },
+ {
+ key: "browsebot:settings",
+ label: "Open BrowseBot Settings",
+ command: () => SettingsModal.show(),
+ icon: "chrome://global/skin/icons/settings.svg",
+ tags: ["AI", "BrowseBot", "Settings"],
+ },
+ {
+ key: "browsebot:urlbarAi",
+ label: "Toggle URL bar AI mode",
+ command: () => urlbarAI.toggleAIMode(),
+ condition: () => urlbarAI.enabled,
+ icon: "chrome://global/skin/icons/highlights.svg",
+ tags: ["AI", "BrowseBot", "URL", "Command"],
+ },
+ {
+ key: "browsebot:expand-findbar",
+ label: "Expand findbar AI",
+ command: () => (browseBotFindbar.expanded = true),
+ condition: () => PREFS.enabled,
+ icon: "chrome://global/skin/icons/highlights.svg",
+ tags: ["AI", "BrowseBot", "findbar"],
+ },
+ ]);
+
+ debugLog("Zen Command Palette integration successful.");
+ } else {
+ debugLog("Zen Command Palette not found, retrying in 1000ms");
+ if (retryCount < 10) {
+ setTimeout(() => setupCommandPaletteIntegration(retryCount + 1), 1000);
+ } else {
+ debugError("Could not integrate with Zen Command Palette after 10 retries.");
+ }
+ }
+}
+
+UC_API.Runtime.startupFinished().then(() => {
+ // Init findbar-AI
+ browseBotFindbar.init();
+ UC_API.Prefs.addListener(
+ PREFS.ENABLED,
+ browseBotFindbar.handleEnabledChange.bind(browseBotFindbar)
+ );
+ window.browseBotFindbar = browseBotFindbar;
+
+ // Init URL bar-AI
+ urlbarAI.init();
+ urlbarAI._prefListener = UC_API.Prefs.addListener(
+ PREFS.URLBAR_AI_ENABLED,
+ urlbarAI.handlePrefChange.bind(urlbarAI)
+ );
+
+ setupCommandPaletteIntegration();
+});
diff --git a/findbar-ai/findbar-ai.uc.js b/findbar-ai/findbar-ai.uc.js
index fd1cf24..d2b8ef2 100644
--- a/findbar-ai/findbar-ai.uc.js
+++ b/findbar-ai/findbar-ai.uc.js
@@ -1,36 +1,71 @@
import { messageManagerAPI } from "./messageManager.js";
-import { llm } from "./llm/index.js";
+import { browseBotFindbarLLM } from "./llm/index.js";
import { PREFS, debugLog, debugError } from "./utils/prefs.js";
import { parseElement, escapeXmlAttribute } from "./utils/parse.js";
import { SettingsModal } from "./settings.js";
+import "./urlbar.uc.js";
+import { toolNameMapping } from "./llm/tools.js";
+
+const icons = {
+ loading: ``,
+ success: ``,
+ error: ``,
+ declined: ``,
+};
-var markdownStylesInjected = false;
-const injectMarkdownStyles = async () => {
- try {
- const { markedStyles } = await import("chrome://userscripts/content/engine/marked.js");
- const styleTag = parseElement(`