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(`