A Chromium extension that works as the webchat bridge for the LLM for Zotero plugin. It connects Zotero to ChatGPT or DeepSeek via the browser: uploading PDFs and images, running prompts, syncing chat actions, and returning markdown results back to Zotero.
This extension is not a standalone tool. It requires the LLM for Zotero plugin (v3.7.17 or later) with webchat mode selected in the plugin preferences.
extension.zip or clone this repositorychrome://extensions/edge://extensions/extension/ folder from the unzipped fileWhen a new version is available, choose one of the following methods depending on how you installed the extension:
git pull to fetch the latest changeschrome://extensions/ or edge://extensions/)extension.zip from the Releases pageextension/ folder with the new onechrome://extensions/ or edge://extensions/)Tip: Do not delete the old folder from the browser and re-load it. Simply replacing the files and clicking reload preserves your extension settings.
Run one of the following commands from a clean main branch:
npm run release:patch
npm run release:minor
npm run release:major
The release command validates the repository, runs the automated checks, requires you to confirm the live Zotero-to-WebChat smoke test, updates the extension version when needed, creates and pushes the release tag, prepares release notes, creates a draft GitHub release, and dispatches the packaging workflow.
GitHub Actions validates the tag, runs the tests again, creates extension.zip, and uploads it to the draft.
The command publishes the release only after the workflow succeeds and the ZIP asset is present.
Preview a patch release without creating a commit, tag, workflow run, or release:
npm run release:patch -- --dry-run
Generated release notes come from commit subjects since the latest published tag.
Use --edit-notes to edit them before release, or --notes-file <path> to supply a prepared Markdown file.
If a network or workflow failure interrupts a release, fix the reported problem and rerun the same command; the command resumes the matching draft or tag instead of incrementing the version again.
This extension targets modern Chromium browsers with Manifest V3 support, including Google Chrome and Microsoft Edge. It uses Chrome extension APIs such as chrome.storage.session, service workers, and MAIN world content scripts, so older Chromium builds are not supported.
On Windows, make sure Windows Defender Firewall or third-party security software allows Zotero to accept loopback connections from the browser. The extension discovers the LLM for Zotero webchat relay on 127.0.0.1 or localhost, ports 23119-23128.
Run the opt-in live gate with Zotero, the development extension, and a signed-in ChatGPT tab open:
npm run test:webchat:relay-live
For targeted diagnosis, run only one branch:
npm run test:webchat:relay-live -- --pdf-only
npm run test:webchat:relay-live -- --prompt-only
The first turn uploads a generated PDF whose hidden sentinel is not present in the prompt.
The gate requires ChatGPT to return that sentinel and requires the relay receipt to identify the exact PDF in both the composer preview and submitted user turn.
The second turn is prompt-only and requires a receipt showing that the submitted user turn contains zero PDFs.
Any missing, ambiguous, mismatched, or unexpected attachment evidence fails the gate instead of being reported as success.
This command begins at the relay and intentionally does not exercise Zotero's composer UI.
For the continuous Zotero UI -> relay -> Chrome -> ChatGPT -> Zotero gate, run npm run test:webchat:live in the paired llm-for-zotero repository.
See LICENSE for details.
56 commits
JavaScript
99.3%
A Chromium extension that works as the webchat bridge for the LLM for Zotero plugin. It connects Zotero to ChatGPT or DeepSeek via the browser: uploading PDFs and images, running prompts, syncing chat actions, and returning markdown results back to Zotero.
This extension is not a standalone tool. It requires the LLM for Zotero plugin (v3.7.17 or later) with webchat mode selected in the plugin preferences.
extension.zip or clone this repositorychrome://extensions/edge://extensions/extension/ folder from the unzipped fileWhen a new version is available, choose one of the following methods depending on how you installed the extension:
git pull to fetch the latest changeschrome://extensions/ or edge://extensions/)extension.zip from the Releases pageextension/ folder with the new onechrome://extensions/ or edge://extensions/)Tip: Do not delete the old folder from the browser and re-load it. Simply replacing the files and clicking reload preserves your extension settings.
Run one of the following commands from a clean main branch:
npm run release:patch
npm run release:minor
npm run release:major
The release command validates the repository, runs the automated checks, requires you to confirm the live Zotero-to-WebChat smoke test, updates the extension version when needed, creates and pushes the release tag, prepares release notes, creates a draft GitHub release, and dispatches the packaging workflow.
GitHub Actions validates the tag, runs the tests again, creates extension.zip, and uploads it to the draft.
The command publishes the release only after the workflow succeeds and the ZIP asset is present.
Preview a patch release without creating a commit, tag, workflow run, or release:
npm run release:patch -- --dry-run
Generated release notes come from commit subjects since the latest published tag.
Use --edit-notes to edit them before release, or --notes-file <path> to supply a prepared Markdown file.
If a network or workflow failure interrupts a release, fix the reported problem and rerun the same command; the command resumes the matching draft or tag instead of incrementing the version again.
This extension targets modern Chromium browsers with Manifest V3 support, including Google Chrome and Microsoft Edge. It uses Chrome extension APIs such as chrome.storage.session, service workers, and MAIN world content scripts, so older Chromium builds are not supported.
On Windows, make sure Windows Defender Firewall or third-party security software allows Zotero to accept loopback connections from the browser. The extension discovers the LLM for Zotero webchat relay on 127.0.0.1 or localhost, ports 23119-23128.
Run the opt-in live gate with Zotero, the development extension, and a signed-in ChatGPT tab open:
npm run test:webchat:relay-live
For targeted diagnosis, run only one branch:
npm run test:webchat:relay-live -- --pdf-only
npm run test:webchat:relay-live -- --prompt-only
The first turn uploads a generated PDF whose hidden sentinel is not present in the prompt.
The gate requires ChatGPT to return that sentinel and requires the relay receipt to identify the exact PDF in both the composer preview and submitted user turn.
The second turn is prompt-only and requires a receipt showing that the submitted user turn contains zero PDFs.
Any missing, ambiguous, mismatched, or unexpected attachment evidence fails the gate instead of being reported as success.
This command begins at the relay and intentionally does not exercise Zotero's composer UI.
For the continuous Zotero UI -> relay -> Chrome -> ChatGPT -> Zotero gate, run npm run test:webchat:live in the paired llm-for-zotero repository.
See LICENSE for details.
56 commits
JavaScript
99.3%