Skip to content

Bring in batch 3: 23 reviewed PRs, combined - #2909

Merged
milind-soni merged 146 commits into
mainfrom
bringin/combined-batch3
Oct 15, 2026
Merged

milind-soni merged 146 commits into
mainfrom
bringin/combined-batch3

Conversation

@milind-soni

Copy link
Copy Markdown
Owner

This combines 23 reviewed PRs. Each one is merged as its own merge commit, so GitHub marks each original PR merged when this lands. Every PR was brought up to date with main, fixed where needed, and verified on its own bringin/N branch.

Included

Chat

Browser, computer panel, Windows

Engines

Sidebar and UI

Languages and settings

Server

Fixes after combining

Not included

Verification

  • tsc -b, the server tsc and oxlint --deny-warnings pass on the combined branch.
  • Locale catalogs are valid: 12 languages, 4,469 strings.
  • The full local vitest run is in progress.

🤖 Generated with Claude Code

bradhallett and others added 30 commits September 27, 2026 09:48
The [omb-turn] admission log fired on every admitted turn via console.error, so healthy turns dominated the error stream: 984 of 1119 error-level server.log lines over five days in this deployment, with only two genuine non-turn errors among them. The line is informational turn telemetry; emit it at info level like the other plain console call sites.

Signed-off-by: Brad Hallett <53977268+bradhallett@users.noreply.github.com>
Signed-off-by: Brad Hallett <53977268+bradhallett@users.noreply.github.com>
Signed-off-by: Brad Hallett <53977268+bradhallett@users.noreply.github.com>
Add complete Turkish translation catalog covering all 3,381 UI keys, register Turkish in the locale index, update source hashes, and include tr in test assertions.
…xt is

Native <select>s drew the platform arrow, which sits at an inset we cannot
pad: ~6px from the edge on Linux Chrome, wider on macOS, never matching the
text's left padding. 57 call sites also hand-rolled ~10 look classes each,
drifting across 6 backgrounds, 3 border strengths and 6 text sizes.

Select owns the look (field/pill, lg/md/sm) and draws its own chevron with
its stroke as far from the right edge as the text is from the left. Call
sites keep only layout classes, and Select.guard.test.ts fails on a new
native <select> or a <Select className> that restyles the field.
the waiting marker was a 10px dot and 11px gray text, the same weight as a preview.
The circle grid had no way to change order.
…n the picker

A Claude Code install pointed at another provider through ~/.claude/settings.json
usually names its models with ANTHROPIC_CUSTOM_MODEL_OPTION (the extra /model
entry) and ANTHROPIC_DEFAULT_{OPUS,SONNET,HAIKU}_MODEL. OpenMausBot read only
ANTHROPIC_MODEL, so those models were missing from the Claude model picker,
while turns already reach the same endpoint through the carried
ANTHROPIC_BASE_URL and key.

List them under "Use a local model": the custom option with its
ANTHROPIC_CUSTOM_MODEL_OPTION_NAME label, and each tier model that is not an
official Claude id. Accept Claude Code's `[1m]` suffix in a model id, which
modelContextWindow already reads. The env values still never reach the bot's
CLI; a bot runs only the model picked for it. The model providers page and its
test say so.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Server config already supports arbitrary openai-compat instances; this
surfaces them in the UI instead of requiring hand-edited config.json.

- POST/DELETE /api/instances/openai-compat (hot reload, no restart;
  global openaiCompat slot stays guarded)
- describeInstances exposes driver/displayName/url for openai-compat
- UI panel: list / add / remove endpoints under Settings > API keys
- reject URL-shaped API keys with a clear message
- per-endpoint manual model list (managedModels) + refresh button for
  providers whose /models is auth-gated (e.g. Zhipu GLM)
The profile menu's "Check for updates" came from the packaged app's
updater bridge, so a self-hosted server opened in a browser had no way to
learn a new version existed (MOCA-276). A self-hosted server cannot
replace itself, so the entry now checks and says how to update.

- GET /api/updates/check compares this server's version with the latest
  GitHub release, cached for an hour so menus on many devices make one
  request. It reports how the server was installed (Docker, npm, a git
  checkout, a desktop-hosted or a hosted server) and the matching update
  command from the docs.
- Without the updater bridge, the menu shows "Check for updates". It
  answers "You're up to date · v0.1.94", or "Version X available —
  release notes" with "Update with: <command>" underneath and a link to
  the release. Desktop-hosted and hosted servers say how they are updated
  instead. The packaged app keeps its own updater entry unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
main now refuses new route handlers in server/index.ts
(index-route-ratchet), which failed CI for this branch. The
GET /api/updates/check handler moves into server/routes/update-check.ts
and is registered with ROUTES.push like the other route modules.

It is also added to CLIENT_ALLOW: it only reads a version, so a
chat-only teammate on a shared self-hosted server can check too instead
of getting "Couldn't check for updates".

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Hermes registers ACP MCP servers idempotently by name for the whole
process. main now keeps a thread's integration bearer across ordinary
turns, which covers back-to-back turns, but Stop, a changed grant, a
stall or a provider reload issues a new bearer. A pooled Hermes process
then keeps the agents proxy it started first, so every OpenMausBot tool
(list_bots, coordinate_bots, memory_update, ...) answers "unauthorized"
until the process goes idle (MOCA-252).

Hermes now sets restartOnMcpChange, the mechanism Qwen already uses: a
changed MCP config resumes the session on a fresh process.

The fake ACP agent gains a list-peers mode that keeps the first agents
server it is offered, like Hermes, and the comms e2e runs two turns, Stop,
and a third on the Hermes driver.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A bot that splits work into helper threads (start_thread) left every
open one in its thread list beside the person's own threads, and they
used up the six visible rows, pushing the person's threads behind "Show
all" (MOCA-92). #1108 already folded away the helper threads a bot
closes; this handles the ones still open.

Open threads a bot opened now sit under one collapsed "Opened by bots"
row at the bottom of the bot's list, with a count and a spinner while
one is working, and no longer count toward the visible rows. A helper
stays in the main list while it needs the person: the open thread, one
waiting on a card, or one with something unread. Pinned, filed, closed,
archived and snoozed threads keep their current place, and search lists
everything as before.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… toolErrors.correctiveRounds setting

A done-after-failure ends a turn with tool_error (#2378) and tool_error is
not auto-continued, so a routine tool failure (a non-zero host-shell exit,
a bad argument) halts the whole turn until a person re-dispatches it.

- config.ts: toolErrors.correctiveRounds (0-5, default 0) + getter
- contracts.ts: SendTurnInput.toolErrorCorrectiveRounds; index.ts sets it
- openai-chat.ts: feed a corrective round back at the done-after-failure
  check, bounded by the configured cap and only when the turn recorded no
  denial (denials.length === 0) — a person's "no" is never retried
- Settings > General: Tool errors card (mirrors MCP calls, save-on-blur)
- locales + source-hashes; parser + config + openai-chat + store tests
…their keywords to General search

- McpCallTimeoutSettings: state.config?.mcp?.callTimeoutMinutes (config may
  exist without the mcp section; the old optional chain only guarded config)
- ToolErrorRecoverySettings: same null-safe read for toolErrors
- SettingsModal: General section keywords now include tool errors, corrective
  rounds, mcp calls, timeout, call length, retry, tool calls
- en/zh help text now states that 0 preserves the existing tool-error path
Add a Tools layout row to Settings > Appearance: Rows (the current footer,
default) and Toolbar. Toolbar lays the same places out as one horizontal row
of icon buttons in Comfortable and Compact density, so every place stays one
click away with a tooltip, an aria-label, aria-current on the active place,
the routines failed-run attention dot and the guided-tour anchors. Icons
density is unchanged in both layouts, and Rows renders exactly as before.
There is no collapse, no Tools header and no saved collapse state, so the
attention dot is never hidden.

The choice is one shared renderer store like density: it persists under
openmausbot.sidebarToolsLayout across restarts, stays live between Appearance
and the sidebar, and sits beside sidebarDensity in both backup client-state
allowlists.

Tests cover the store default and persistence, both layouts in Comfortable
and Compact, the attention dot seen and unseen, Team map only in Advanced,
Icons density ignoring the layout, the rows markup staying as it was, the
appearance search keywords and the backup allowlists.

Co-Authored-By: MiMo-V2.6-Flash <noreply@xiaomi.com>
Co-Authored-By: GLM-5.3 (Architect) <noreply@z.ai>
# Conflicts:
#	src/components/McpCallTimeoutSettings.tsx
#	src/state/store.tsx
milind-soni and others added 23 commits October 15, 2026 14:23
…led tool op — toolErrors.correctiveRounds setting
…rrive

# Conflicts:
#	scripts/testing/file-size-ratchet.test.ts
…tier models in the picker

# Conflicts:
#	scripts/testing/file-size-ratchet.test.ts
# Conflicts:
#	scripts/testing/file-size-ratchet.test.ts
… where the text is

# Conflicts:
#	scripts/testing/file-size-ratchet.test.ts
# Conflicts:
#	src/lib/i18n.test.ts
#	src/locales/index.ts
#	src/locales/source-hashes.json
…essages on desktop and Android

# Conflicts:
#	scripts/testing/file-size-ratchet.test.ts
#	src/components/SettingsModal.tsx
…yout, Vietnamese and Turkish for the batch's new strings

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
openmausbot-docs Ready Ready Preview Oct 15, 2026 8:57am UTC

Request Review

@coderabbitai

coderabbitai Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 0ba0cf2a-70fc-4763-8ea3-38711c9387fe
📥 Commits

Reviewing files that changed from the base of the PR and between 32885f2 and 8d72ff2.

📒 Files selected for processing: 172
  • .github/workflows/browser-vendor-windows.yml
  • apps/docs/content/docs/providers/model-providers.mdx
  • docs/approval-levels.md
  • docs/cursor.md
  • docs/self-hosting.md
  • docs/verification/cloud-preview.md
  • electron/company-backup-preload.node-test.mjs
  • electron/preload.cjs
  • scripts/build-windows-browser-vendor.mjs
  • scripts/build-windows-browser-vendor.test.mjs
  • scripts/testing/cloud-preview.e2e.test.ts
  • scripts/testing/file-size-ratchet.test.ts
  • scripts/verify-data.ts
  • server/comms.test.ts
  • server/contracts.ts
  • server/drivers/acp/acp.test.ts
  • server/drivers/acp/core.ts
  • server/drivers/acp/cursor.test.ts
  • server/drivers/acp/cursor.ts
  • server/drivers/acp/grok.ts
  • server/drivers/acp/hermes.ts
  • server/drivers/acp/question-requests.ts
  • server/drivers/agents-catalog-goldens/full.tools-list.json
  • server/drivers/agents-catalog-goldens/profiles.json
  • server/drivers/agents-catalog-wire.test.ts
  • server/drivers/agents-widget-tools.ts
  • server/drivers/claude-catalog.test.ts
  • server/drivers/claude-model-extras.ts
  • server/drivers/claude.ts
  • server/drivers/codex-questions.ts
  • server/drivers/codex.test.ts
  • server/drivers/codex.ts
  • server/drivers/openai-chat.test.ts
  • server/drivers/openai-chat.ts
  • server/drivers/permission-command.ts
  • server/drivers/pi-mcp-extension.test.ts
  • server/drivers/pi-mcp-extension.ts
  • server/drivers/pi.test.ts
  • server/drivers/pi.ts
  • server/host/loop-guard.test.ts
  • server/host/loop-guard.ts
  • server/independent-task-store.test.ts
  • server/index.test.ts
  • server/index.ts
  • server/message-db.ts
  • server/model-providers-docs.test.ts
  • server/openai-compat-endpoints.ts
  • server/recall.ts
  • server/request-auth.ts
  • server/routes/instances.ts
  • server/routes/openai-compat-endpoints.test.ts
  • server/routes/update-check.test.ts
  • server/routes/update-check.ts
  • server/store.ts
  • server/system-prompt.ts
  • server/testing/fake-acp-cli.ts
  • server/testing/fake-codex-app-server.ts
  • server/turn-images.test.ts
  • server/turn-images.ts
  • server/update-check.test.ts
  • server/update-check.ts
  • shared/ask-question.test.ts
  • shared/ask-question.ts
  • shared/widget.test.ts
  • shared/widget.ts
  • shared/wire.ts
  • shared/workspace-backup-client.ts
  • src/components/ActivitySection.tsx
  • src/components/AndroidDevicePanel.tsx
  • src/components/AndroidDevicePanel.usb.test.ts
  • src/components/AppearanceSelectRows.tsx
  • src/components/AutomaticRecoverySettings.tsx
  • src/components/AvatarImageGenerator.tsx
  • src/components/BotThreads.test.ts
  • src/components/BrowserProfilesManager.tsx
  • src/components/CacheKeepWarmSettings.tsx
  • src/components/CanvasComputers.tsx
  • src/components/ChatMarkdown.test.ts
  • src/components/ChatMarkdown.tsx
  • src/components/ComputerPanel.android.test.ts
  • src/components/ComputerPanel.tabs.test.ts
  • src/components/ComputerPanel.tsx
  • src/components/ConversationTurnLimit.tsx
  • src/components/DecisionModelSettings.tsx
  • src/components/EnginesSettings.tsx
  • src/components/GroupView.auto.test.ts
  • src/components/GroupView.tsx
  • src/components/LiveCallSettings.tsx
  • src/components/LocalComputerSection.tsx
  • src/components/LocalVmWorkspace.tsx
  • src/components/McpServersPanel.tsx
  • src/components/ModelPicker.simple.test.ts
  • src/components/ModelPicker.test.ts
  • src/components/ModelPicker.tsx
  • src/components/NewBotDialog.tsx
  • src/components/NotificationSettingsRows.test.ts
  • src/components/NotificationSettingsRows.tsx
  • src/components/NotificationsPanel.tsx
  • src/components/OpenAiCompatServers.test.ts
  • src/components/OpenAiCompatServers.tsx
  • src/components/PeopleSection.tsx
  • src/components/PinnedCircleThreads.tsx
  • src/components/RemoteComputerSection.tsx
  • src/components/RoutineCalendarPage.tsx
  • src/components/Select.guard.test.ts
  • src/components/Select.tsx
  • src/components/SettingsModal.appearance.test.ts
  • src/components/SettingsModal.groups.test.ts
  • src/components/SettingsModal.i18n.test.ts
  • src/components/SettingsModal.tsx
  • src/components/Sidebar.pinned-circle-threads.test.ts
  • src/components/Sidebar.simple-mode.test.ts
  • src/components/Sidebar.tsx
  • src/components/SidebarBotActivity.test.ts
  • src/components/SidebarBotListItem.test.ts
  • src/components/SidebarFooterNav.test.ts
  • src/components/SidebarFooterNav.tsx
  • src/components/SidebarProfileMenu.tsx
  • src/components/SidebarThreadRow.test.ts
  • src/components/SidebarThreadRow.tsx
  • src/components/SkillsSection.tsx
  • src/components/TaskPicker.tsx
  • src/components/TaskPicker.visibility.test.ts
  • src/components/TeamMemoryDialog.tsx
  • src/components/TeamSettingsDialog.tsx
  • src/components/ThreadConcurrencySettings.tsx
  • src/components/TriggersPanel.tsx
  • src/components/UsageHistory.tsx
  • src/components/VoiceSettings.tsx
  • src/components/bot-settings/ModelSection.tsx
  • src/components/bot-settings/SkillsSection.tsx
  • src/components/bot-settings/ToolSelectionCard.tsx
  • src/components/computer-panel-tabs.ts
  • src/components/routines/CronScheduleFields.tsx
  • src/components/routines/ResultsDestination.tsx
  • src/components/routines/RoutineLogs.tsx
  • src/components/routines/RoutineViews.test.ts
  • src/lib/code-block.ts
  • src/lib/computer-panel-view.test.ts
  • src/lib/computer-panel-view.ts
  • src/lib/i18n.test.ts
  • src/lib/markdown-image.ts
  • src/lib/notification-preferences.test.ts
  • src/lib/notification-preferences.ts
  • src/lib/notify.test.ts
  • src/lib/notify.ts
  • src/lib/pinned-circle-order.test.ts
  • src/lib/pinned-circle-order.ts
  • src/lib/server-update.test.ts
  • src/lib/server-update.ts
  • src/lib/sidebar-preferences.test.ts
  • src/lib/sidebar-preferences.ts
  • src/locales/de.json
  • src/locales/en.json
  • src/locales/es.json
  • src/locales/fr.json
  • src/locales/hi.json
  • src/locales/index.ts
  • src/locales/ja.json
  • src/locales/pt-br.json
  • src/locales/source-hashes.json
  • src/locales/tr.json
  • src/locales/uk.json
  • src/locales/vi.json
  • src/locales/zh-tw.json
  • src/locales/zh.json
  • src/onboarding-preview.tsx
  • src/state/store.test.ts
  • src/state/store.tsx
  • src/state/thread-stamps.ts
  • third_party/browser/README.md
  • third_party/browser/agent-browser-windows-stdio.patch
+----------------------------------+
| Software is hard. - Donald Knuth |
+----------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@milind-soni
milind-soni marked this pull request as ready for review October 15, 2026 09:19
@milind-soni
milind-soni merged commit 2bd1083 into main Oct 15, 2026
19 of 27 checks passed

This branch was successfully deployed

1 active deployment
Preview — 8d72ff2a Deployed Oct 15, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.