Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
c1bdfae
Let Act send photos and videos in Instagram direct messages
claude Oct 22, 2026
f78c2ac
Bind the upload advisory to the node the inventory listed
claude Oct 22, 2026
c8211b6
Merge pull request #502 from esokullu/fix/instagram-dm-upload
esokullu Oct 22, 2026
d23ea60
companion: import standalone WebBrain systray app
esokullu Oct 22, 2026
8d6ce31
ci: build and release the standalone companion
esokullu Oct 22, 2026
60cc51d
companion: address first review findings
esokullu Oct 22, 2026
292b8cd
fix(decisions): accept a decision server elsewhere on the local network
claude Oct 22, 2026
56202d4
companion: address follow-up review findings
esokullu Oct 22, 2026
aea3358
Merge pull request #504 from esokullu/fix/decision-lan-endpoints
esokullu Oct 22, 2026
5a85491
companion: verify runtimes and serialize installs
esokullu Oct 22, 2026
d80ee33
companion: serialize proxy changes and handle registration failure
esokullu Oct 22, 2026
7f285a8
companion: publish settings only after successful save
esokullu Oct 22, 2026
c715bd3
companion: align release links and preserve cached state
esokullu Oct 22, 2026
3e7386c
companion: order panel restarts and reject model API errors
esokullu Oct 22, 2026
b83c891
companion: handle settings save failures across controls
esokullu Oct 22, 2026
e987c4d
companion: wait for install workers in tests
esokullu Oct 22, 2026
caf74e1
Stop the Act planner from re-asking what the page already shows
esokullu Oct 22, 2026
df0d6b9
Count draft recipients when checking a planner second look
esokullu Oct 22, 2026
e9c80f2
Let a second look plan a schedule the task already carried
claude Oct 22, 2026
4d088f9
Measure a second look against the people and schedule the task carried
claude Oct 22, 2026
b1e6dce
Keep the conversation a pinning question was about
claude Oct 22, 2026
b860215
Let a second look run only what the user backed
claude Oct 22, 2026
5b9caf0
Let the alignment check read a send the answer approved, and check it…
claude Oct 22, 2026
5676f9e
Without an alignment check, let a second look run only what the quest…
claude Oct 22, 2026
792573a
Re-ask only where the alignment check reads the answer
claude Oct 22, 2026
43c0452
Recognize every request-body shape that turns reasoning off
claude Oct 22, 2026
b4c42c7
companion: reap external URL opener processes
esokullu Oct 22, 2026
2042c6f
Take no second look at an answer in the intent check
claude Oct 22, 2026
c72afd1
Restore API key on failed restart and report removal errors
esokullu Oct 22, 2026
bf8c04e
Leave schedule changes to the alignment check
claude Oct 22, 2026
5548a86
Verify extracted llama runtime files before reuse
esokullu Oct 22, 2026
9691d80
Let an answer take back the send
claude Oct 22, 2026
439653c
Persist network fallback and verify uv executable
esokullu Oct 22, 2026
b535cdc
companion: handle shutdown and MLX environment failures
esokullu Oct 22, 2026
21c0d51
companion: verify proxy startup and reap timed-out run
esokullu Oct 22, 2026
3720276
companion: serialize model removal with installs
esokullu Oct 23, 2026
de2f904
companion: preserve model settings and match own instance
esokullu Oct 23, 2026
560d1c6
companion: honor explicit stop and clean up on shutdown
esokullu Oct 23, 2026
997c61d
companion: validate runtime executable and cancel installer trees
esokullu Oct 23, 2026
ba1c71c
Merge pull request #501 from esokullu/fix/planner-clarify-loop
esokullu Oct 23, 2026
42c8afd
Merge pull request #503 from esokullu/codex/import-webbrain-systray
esokullu Oct 23, 2026
6b0c3c0
Add WebBrain Companion provider and download docs
esokullu Oct 23, 2026
dabb2f9
Lead translated model guides with Companion
esokullu Oct 23, 2026
1f8943b
Route Companion download pages on website
esokullu Oct 23, 2026
cfddbc6
Correct Turkish provider count
esokullu Oct 23, 2026
9956a63
Fix Companion page routing and provider setup
esokullu Oct 23, 2026
993da0e
test: align local provider order assertion with Companion
esokullu Oct 23, 2026
41d406f
build(deps): bump github.com/klauspost/compress in /webbrain-systray
dependabot[bot] Oct 23, 2026
d19383a
Merge pull request #505 from esokullu/codex/add-webbrain-companion-pr…
esokullu Oct 23, 2026
5273aa1
Merge pull request #506 from esokullu/dependabot/go_modules/webbrain-…
esokullu Oct 24, 2026
d00975b
version
esokullu Oct 24, 2026
0c7b35b
Update Providers page labels and subscription guidance
esokullu Oct 24, 2026
a824039
Show subscription summary only on collapsed provider cards
esokullu Oct 24, 2026
6d60906
build(deps): bump body-parser from 2.3.0 to 2.4.0 in /mcp-server
dependabot[bot] Oct 24, 2026
b283796
build(deps): bump zod from 3.25.76 to 4.6.6 in /lmstudio-plugin
dependabot[bot] Oct 24, 2026
e62b489
build(deps): bump fast-uri from 3.1.8 to 3.1.9 in /mcp-server
dependabot[bot] Oct 24, 2026
d39398f
build(deps): bump filelock
dependabot[bot] Oct 24, 2026
81403a5
Fix automatic routing for configured media generation
esokullu Oct 24, 2026
0beaa23
Merge pull request #511 from esokullu/codex/generative-media-auto-rou…
esokullu Oct 24, 2026
6b744ab
Keep run events for replay while the side panel is hidden
claude Oct 24, 2026
ffde71b
Merge pull request #512 from esokullu/claude/hidden-panel-replay
esokullu Oct 24, 2026
e0511c8
Merge pull request #507 from esokullu/dependabot/npm_and_yarn/mcp-ser…
esokullu Oct 24, 2026
d7412ed
Merge pull request #508 from esokullu/dependabot/npm_and_yarn/lmstudi…
esokullu Oct 24, 2026
2bf64ec
Merge pull request #510 from esokullu/dependabot/uv/docs/vision-model…
esokullu Oct 24, 2026
a6cdf4c
Merge pull request #509 from esokullu/dependabot/npm_and_yarn/mcp-ser…
esokullu Oct 24, 2026
84c980b
Generate videos longer than one clip and join them losslessly
claude Oct 24, 2026
b2f7c52
Start joined videos at their first picture
claude Oct 24, 2026
1b85feb
Keep clips whose edit lists hide frames as separate clips
claude Oct 24, 2026
12f680f
Join fragments that start at a later decode time
claude Oct 24, 2026
94cfa92
Refuse joins whose decode timelines cannot meet
claude Oct 24, 2026
ddee5cb
Refuse joins of clips shown at other sizes or angles, or cut short
claude Oct 24, 2026
5c00f74
Keep audio pre-roll groups in joined videos
claude Oct 24, 2026
0eba6b4
Keep clips whose sound edit ends early apart
claude Oct 24, 2026
ea65c0f
Merge pull request #513 from esokullu/claude/multi-clip-video
esokullu Oct 24, 2026
56e570c
feat: automatically decline cookie consent banners
esokullu Oct 24, 2026
25249b4
build(deps): bump setuptools
dependabot[bot] Oct 24, 2026
9848741
fix: revoke cookie-handler coverage and harden consent regex
esokullu Oct 24, 2026
34f2dab
fix: preserve consent clicks inside same-origin iframes
esokullu Oct 24, 2026
d64659c
Merge pull request #515 from esokullu/dependabot/uv/docs/vision-model…
esokullu Oct 24, 2026
f529561
Merge pull request #514 from esokullu/codex/automatic-cookie-banner-r…
esokullu Oct 24, 2026
4beaabc
chore: release v42.4.0
esokullu Oct 24, 2026
cacef53
dist: rebuild submission zips for v42.4.0
esokullu Oct 24, 2026
ee57362
Join clips whose sound ends before their picture
claude Oct 24, 2026
1c21fb5
Check the HE-AAC test finds the decoder configuration
claude Oct 24, 2026
4e09f52
Merge pull request #516 from esokullu/claude/video-join-fixes
esokullu Oct 24, 2026
7eb048a
Add a Video scenes skill for multi-clip videos
claude Oct 24, 2026
36e07e6
Stop scene numbers and split scenes from repeating on screen
claude Oct 24, 2026
fef499e
Merge pull request #517 from esokullu/claude/video-scene-guidance
esokullu Oct 24, 2026
541f86e
Separate image and video models for every media provider
claude Oct 24, 2026
4e97ef5
Merge pull request #518 from esokullu/claude/image-video-models
esokullu Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
82 changes: 82 additions & 0 deletions .github/workflows/systray-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: WebBrain Companion

on:
push:
branches: [main]
tags: ["systray-v*"]
paths:
- "webbrain-systray/**"
- ".github/workflows/systray-build.yml"
pull_request:
paths:
- "webbrain-systray/**"
- ".github/workflows/systray-build.yml"
workflow_dispatch:

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: webbrain-systray
env:
CGO_ENABLED: "0"
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version-file: webbrain-systray/go.mod
cache-dependency-path: webbrain-systray/go.sum

- name: Vet and test
run: |
go vet ./...
go test ./...

- name: Install NSIS (Windows installer)
run: sudo apt-get update -qq && sudo apt-get install -y -qq nsis

- name: Install rcodesign (ad-hoc signs the macOS app on Linux)
run: |
curl -fsSL -o "$RUNNER_TEMP/rcodesign.tar.gz" \
"https://github.com/indygreg/apple-platform-rs/releases/download/apple-codesign%2F0.29.0/apple-codesign-0.29.0-x86_64-unknown-linux-musl.tar.gz"
tar -xzf "$RUNNER_TEMP/rcodesign.tar.gz" -C "$RUNNER_TEMP"
echo "RCODESIGN=$RUNNER_TEMP/apple-codesign-0.29.0-x86_64-unknown-linux-musl/rcodesign" >> "$GITHUB_ENV"

- name: Build packages
run: |
if [[ "$GITHUB_REF" == refs/tags/systray-v* ]]; then
export VERSION="${GITHUB_REF_NAME#systray-v}"
else
export VERSION="0.0.0-${GITHUB_SHA::7}"
fi
bash ./scripts/build.sh

- uses: actions/upload-artifact@v4
with:
name: webbrain-companion
path: webbrain-systray/dist/*
if-no-files-found: error

release:
if: startsWith(github.ref, 'refs/tags/systray-v')
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
name: webbrain-companion
path: dist

- name: Draft a GitHub release with the packages
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "$GITHUB_REF_NAME" dist/* --repo "$GITHUB_REPOSITORY" \
--draft --title "WebBrain Companion ${GITHUB_REF_NAME#systray-v}" --generate-notes
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,28 @@ This changelog was generated from the repository Git history and release tags. V

## [Unreleased]

## [42.4.0] - 2026-10-24

### Added
- Cookie banners: Act and Dev runs decline cookie-consent banners automatically before the model looks at the page, so a banner no longer costs a step and the agent no longer accepts tracking to get past one. It uses DuckDuckGo's autoconsent rules, bundled locally (MPL-2.0) with a documented regular-expression security patch with no network requests, plus WebBrain's own rules for banners those miss (Efilli sites such as n11.com, migros.com.tr, teknosa.com and koton.com; hepsiburada.com; mediamarkt.com.tr) and autoconsent's reject-only heuristic for cookie popups no rule knows, with a WebBrain rule that does the same for Turkish banners until the heuristic reads Turkish. Settings → Advanced → **Cookie banners** can also turn it on for every website, or off. It never runs in CAPTCHA or bot-challenge frames, and banners it has no rule for still get the existing prompt guidance. See `docs/cookie-banners.md`.
- Compass VLD Tiny v5, a new in-browser model for Chrome: one 2.2 GB WebGPU download that chats, reads screenshots and answers WebBrain's quick decision questions on your device, with no network once it is downloaded. It is WebBrain's fine-tune of MiniCPM-V-4.7-1B and the new default local model: the first-install guide's **Download local models** button downloads it, instead of D1 and Ternary Bonsai 2 2B Vision, and Apocalypse Mode's Text Model card and Providers → WebGPU list it first. Once, on the first start after the update, a WebGPU provider that was never set up moves to it when Compass Tiny v2.1, the previous default, was never downloaded on that device. Its files are fetched at a fixed revision and each is checked against a pinned size and SHA-256 before it is used; a dropped connection retries that file. Compass Tiny v2.1 and Ternary Bonsai 2 2B Vision stay available.
- WebBrain Companion: a separate desktop app for using your existing model subscriptions or a local model from WebBrain. Its provider card connects to the app on this computer without an API key; load and select a model, save, and test the connection before activating it. The Providers page includes setup guidance and a download link. See `docs/providers-and-models.md` and `webbrain-systray/README.md`.
- Longer generated videos with an OpenRouter video model: WebBrain can split a request into scenes, generate the clips and join compatible clips into one MP4 without re-encoding. It checks the requested clip length, shape and resolution against the model's supported options before generation. Videos are limited to 120 seconds and 24 clips; a request estimated above that length asks whether to make the shorter version before generating anything, and an unattended run generates nothing. Clips that cannot be joined safely stay available in order, and WebBrain reports the actual length and clip count.

### Changed
- The side panel's model menu now calls the standard managed provider **Compass Light** and the larger tier **Compass**. The Providers page calls the managed card **WebBrain Compass**, puts it and Companion first, and labels Companion **Your Existing Subscription** with setup guidance in your language. The subscription summary appears while its card is collapsed.
- Decision models, Auto (Chrome): once Compass VLD Tiny v5 is downloaded, it checks whether tasks and scheduled runs are finished, before a downloaded D1 and in place of WebBrain Cloud's decision model, which still answers what a request asks for. While you chat with another in-browser model, or another in-browser model reads screenshots for a chat model that cannot see them, it leaves those checks to a downloaded D1, or else to your chat model, because loading it would unload the model you are using. As with D1, a "finished" from it is confirmed by the chat model. On d1's synthetic test, through the extension, it answered 120 of 126 questions correctly and called none of the 48 unfinished views finished; D1 answered 92 and called one finished. **In-browser chat model** under On can be chosen again and uses it. Ternary Bonsai 2 2B Vision no longer answers decisions, and a saved selection of it now uses Compass VLD Tiny v5. Firefox is unchanged.
- In-browser vision (Chrome): Auto now uses Compass VLD Tiny v5 once it is downloaded, and Ternary Bonsai 2 2B Vision when only that one is. Providers → Vision and Apocalypse Mode's Vision Model card offer Compass VLD Tiny v5 as a choice.
- Ask with Compass VLD Tiny v5 looks at a screenshot of the page when its own trained readout says the question needs one, in any language, as it did with Ternary Bonsai 2 2B Vision. Short follow-ups such as "And the button?" after an answer from a screenshot look again too.
- The spinning ring next to "Thinking…" in the side panel is now a small WebBrain brain drawn as a neural circuit: a signal keeps tracing the W, and the brain's outline lights up as it passes. It moves only while WebBrain is working and the panel is visible, follows the light and dark themes, and holds still when your system asks to reduce motion.

### Fixed
- Auto now recognizes requests to create images, videos or audio with a configured generative provider and hands them to Act, where those tools are available. It no longer answers a request for the media itself with only a script, storyboard or rendering code. If generation is not configured or the current tier cannot use it, WebBrain explains the setup or tier requirement.
- Results produced while the side panel is hidden, including a generated video that finishes in another tab, reappear when you return. The hidden panel used to acknowledge run events before saving the chat, so reopening it could lose the result and its preview. Chrome and Firefox.
- Providers → Decision accepts a local decision server on another machine on your network, such as `http://192.168.1.51:8091`. **Load available models** and **Test** used to stop with "Decision endpoints require HTTPS outside localhost." for any address but this computer's. Private addresses (10.x, 172.16–31.x, 192.168.x, Tailscale's 100.64–127.x, link-local, IPv6 unique-local) and `.local`, `.home.arpa` and `.internal` names now work over plain HTTP; public addresses still need HTTPS. In Chrome, decision requests to such a server go through the same offscreen proxy as chat models on your network. Vision and speech endpoints already accepted these addresses.
- Act can send a photo or video in an Instagram direct message. Instagram's message box keeps its file input hidden, outside any form, deep in a long conversation, where WebBrain's check that an action still targets what the model saw cannot reach it. Every attachment was refused, even with the exact selector WebBrain itself listed for that input, often right after you had confirmed the recipient on WebBrain's card; the model then sent a link to the picture, or said Instagram blocks attachments. With Strict checks off, an upload to the very input WebBrain listed on that page, named by the selector it gave, now goes through with a note to the model, and the recipient checks still apply. A selector WebBrain did not list is still refused, and so is an input the page re-created after the list under the same selector, until WebBrain lists the page's controls again. When clicking "Add Photo or Video" opens a file chooser, WebBrain now names the input with that same selector, and the Instagram site notes say to attach the file to that input instead of clicking the button, and that a link to a picture is not the picture.
- Act can attach images and videos to a post on X again. While the post composer is open at x.com/compose/post, the timeline behind it keeps a second, identical file input, and WebBrain's list of the page's controls gave neither input a selector. After the model's first selector matched both, WebBrain refused every later upload until it saw a selector it could not get, so the run ended at its cost limit with nothing attached. The list now gives every file input a selector that matches only that input, scoped to the open dialog where that is what tells them apart, and marks the dialog's input `inDialog`. The X site notes name the dialog's input, and when no selector can single out an input, WebBrain tells the model to report the upload as blocked instead of retrying.
- Act no longer asks you the same question again when the answer is on the page. Asked to post the same thing on LinkedIn while the X post was open, the planner asked which text and files to use, and after “look at the screen — the same” it asked again: the planner works from your words, the page's address and title and a short summary of the chat, never the page itself or your attachments. That summary held only the last ten messages, tool calls and page observations included, each cut to 300 characters, so the earlier answer that named the post's text and your screenshot file had dropped out of it. It now holds the last ten turns of the conversation without the agent's step-by-step notes, gives the latest answer up to 1,200 characters, and names the files you attached earlier. With the Planner on (Try or Strict), when you have just answered a planner question and the planner wants to ask again, it first takes a second look, told that it cannot see the page while the agent can, and plans the task instead; the plan is then checked against your words. So an answer such as "every five minutes" to a question about a scheduled task, the name of the person to write to, "yes, send it", "don't send it, save a draft" or opening the conversation it asked you to open is planned. It never takes who a message goes to, an account or an amount from the page, and never writes to anyone your request or answer did not name; a schedule follows what you said, including "just do it once". With the Planner off, nothing checks a plan against your words, so it takes no second look at your answer. A planner running Qwen 3, QwQ or DeepSeek R1, which is told not to think so that it answers faster, now thinks before it asks you a first question, and with the Planner on also before asking again, unless reasoning is turned off for that provider. Chrome and Firefox.

## [42.3.1] - 2026-10-20

Expand Down
Loading
Loading