Skip to content

feat(browser): import sessions and add agent PiP#1993

Merged
zerob13 merged 5 commits into
devfrom
codex/browser-data-import-pip
Jul 18, 2026
Merged

feat(browser): import sessions and add agent PiP#1993
zerob13 merged 5 commits into
devfrom
codex/browser-data-import-pip

Conversation

@zerob13

@zerob13 zerob13 commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add a user-initiated macOS Chrome cookie importer with profile discovery, Keychain authorization, preview, source-authoritative replacement, verification, and rollback
  • expose Arc import as experimental and report Windows/Linux as unsupported instead of adding a companion extension or encryption bypass
  • replace the interactive Agent PiP with a low-frame-rate, read-only Canvas mirror of the existing page
  • keep the real WebContentsView at 1280×800 in a focusless offscreen render host, then reparent that exact view into Browser on panel handoff
  • make the whole non-button PiP surface draggable; a click only toggles the close/open toolbar
  • use typed window-state events instead of renderer document focus, retain the previous decoded frame on capture/decode failure, and stop frame delivery while backgrounded or dismissed
  • preserve the user's side-panel choice, switch an already-open Workspace panel to Browser for Agent activity, and keep the compact activity strip for undersized chats
  • document shipped V1 boundaries and deferred password, web-storage, partitioned-cookie, multi-tab, and fit-desktop work

Why

YoBrowser currently starts with an isolated website session, forcing users to sign in again, and every Agent browser action opens the right-side panel even when the user intentionally closed it. The first PiP implementation also embedded the live native page, which made the preview clickable and created a focus/blur feedback loop. This change improves transferable session continuity and makes Agent activity visible without exposing an interactive mini-browser or taking over the chat layout.

User impact

Users on macOS can explicitly import supported Chrome profile cookies into the global YoBrowser session and repeat the operation to replace local cookie state. Agent browser pages appear as a draggable read-only mirror only while the owning Agent run and foreground chat are active. Opening Browser moves the same live page into the panel without navigation, page recreation, or session loss.

Before

+---------------- Chat ----------------+
| +----------------------------------+ |
| | live clickable WebContentsView   | |
| | native focus could hide/re-show  | |
| +----------------------------------+ |
+--------------------------------------+

After

Panel closed / normal chat size:
+---------------- Chat ------------------------+
|                              +-------------+ |
|                              | Canvas      | |
|                              | read-only   | |
|                              +-------------+ |
| click: [Open Browser] [x]   drag: anywhere |
+----------------------------------------------+

Behind the mirror:
+---------------- render host -----------------+
| one WebContentsView · 1280×800               |
| capture: up to 4 fps active / 1 fps idle     |
+----------------------------------------------+

Panel already open:
+---------------- Chat ----------------+ Browser
                                       | same live WebContentsView

Undersized chat:
+---------- Agent Browser [Panel] [x] ----------+

V1 boundaries

  • cookie import is supported on macOS Chrome; Arc is experimental
  • Windows and Linux direct import report unsupported
  • passwords, localStorage, sessionStorage, partitioned cookies, visible multi-tabs, and fit-desktop emulation remain deferred
  • packaged Keychain/Arc fixtures and packaged Windows/Linux render-host validation remain release gates

Validation

  • pnpm run format
  • pnpm run i18n
  • pnpm run lint
  • pnpm run typecheck
  • pnpm test
  • pnpm run build

Summary by CodeRabbit

  • New Features

    • Added Picture-in-Picture browser previews for agent activity, with draggable controls and seamless handoff to the Browser panel.
    • Added browser profile import from supported Chrome and Arc profiles on macOS, including preview, cookie counts, confirmation, verification, and restoration on failure.
    • Added Browser panel fullscreen controls and improved compact panel sizing.
    • Updated available agent and model catalog entries.
  • Documentation

    • Added specifications, implementation plans, and task tracking for browser PiP and profile import features.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0ca55db4-3179-403e-b8a6-3a3ec40385a9

📥 Commits

Reviewing files that changed from the base of the PR and between f965215 and 1a9c59a.

📒 Files selected for processing (17)
  • src/main/desktop/browser/BrowserProfileImportService.ts
  • src/main/desktop/browser/YoBrowserPresenter.ts
  • src/main/desktop/browser/yoBrowserSession.ts
  • src/renderer/src/components/browser/AgentBrowserPiP.vue
  • src/renderer/src/i18n/id-ID/settings.json
  • src/renderer/src/i18n/it-IT/settings.json
  • src/renderer/src/i18n/ja-JP/settings.json
  • src/renderer/src/i18n/ko-KR/settings.json
  • src/renderer/src/i18n/ms-MY/settings.json
  • src/renderer/src/i18n/pl-PL/settings.json
  • src/renderer/src/i18n/pt-BR/settings.json
  • src/renderer/src/i18n/ru-RU/settings.json
  • src/shared/contracts/events/browser.events.ts
  • test/main/desktop/browser/BrowserProfileImportService.test.ts
  • test/main/desktop/browser/YoBrowserPresenter.test.ts
  • test/main/routes/contracts.test.ts
  • test/renderer/components/AgentBrowserPiP.test.ts
🚧 Files skipped from review as they are similar to previous changes (14)
  • test/main/routes/contracts.test.ts
  • src/renderer/src/i18n/it-IT/settings.json
  • src/renderer/src/i18n/ru-RU/settings.json
  • src/renderer/src/i18n/ms-MY/settings.json
  • src/renderer/src/i18n/id-ID/settings.json
  • src/renderer/src/i18n/pt-BR/settings.json
  • src/shared/contracts/events/browser.events.ts
  • test/main/desktop/browser/BrowserProfileImportService.test.ts
  • src/renderer/src/i18n/ja-JP/settings.json
  • src/renderer/src/components/browser/AgentBrowserPiP.vue
  • test/main/desktop/browser/YoBrowserPresenter.test.ts
  • src/renderer/src/i18n/pl-PL/settings.json
  • src/renderer/src/i18n/ko-KR/settings.json
  • src/main/desktop/browser/YoBrowserPresenter.ts

📝 Walkthrough

Walkthrough

Agent Browser gains run-aware, renderer-managed PiP preview capture and browser-panel integration. A macOS Chrome/Arc cookie import workflow adds staged preview, transactional apply, verification, rollback, typed routes, and settings UI. Agent registry versions and model catalog metadata are also updated.

Changes

Agent Browser PiP

Layer / File(s) Summary
PiP contracts and runtime
docs/features/agent-browser-pip/*, src/shared/contracts/*, src/shared/types/*, src/main/tool/*, src/main/desktop/browser/*
Adds run identity propagation, preview-frame contracts, ownership-aware browser status, offscreen preview hosting, bounded JPEG capture, and typed preview-mode handling.
PiP and browser panel interaction
src/renderer/src/components/browser/*, src/renderer/src/components/sidepanel/*, src/renderer/src/views/ChatTabView.vue
Adds Canvas-based PiP controls, frame decoding, drag behavior, fullscreen browser-panel handling, and chat-shell mounting.
PiP validation
test/main/desktop/browser/*, test/renderer/components/*, test/renderer/api/*, test/main/routes/*
Covers preview capture, stale runs, frame decoding, focus behavior, route/event registration, and panel interactions.

Browser profile import

Layer / File(s) Summary
Import contracts and service
docs/features/browser-profile-import/*, src/shared/contracts/*, src/shared/types/*, src/main/desktop/browser/*
Defines and implements macOS Chrome/Arc cookie discovery, decryption, staged previews, transactional application, verification, and rollback.
Import settings workflow
src/main/desktop/routes.ts, src/renderer/api/BrowserClient.ts, src/renderer/settings/components/*, src/renderer/src/i18n/*
Exposes scan, preview, and apply routes through the renderer and adds the settings dialog and localized strings.
Import validation
test/main/desktop/browser/BrowserProfileImportService.test.ts
Tests platform gating, Chromium cookie decryption, successful import, verification failure, and rollback.

Catalog updates

Layer / File(s) Summary
Agent registry metadata
resources/acp-registry/registry.json
Updates agent versions, package identifiers, platform archives, and checksums.
Model catalog metadata
resources/model-db/providers.json
Adds and updates model entries, capabilities, limits, types, release metadata, and pricing.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: codex

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the two main changes: browser session import and Agent PiP support.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/browser-data-import-pip

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.

@zerob13
zerob13 marked this pull request as ready for review July 18, 2026 01:11

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
resources/model-db/providers.json (2)

176998-177022: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Correct the model type mismatches.

  • recraft/recraft-v4.* rows output images but are still marked chat; these should be imageGeneration.
  • The meta/muse-spark-1.1 and moonshotai/kimi-k3 rows marked imageGeneration still output text; these should be chat.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@resources/model-db/providers.json` around lines 176998 - 177022, Update the
model type fields for all affected provider entries: change every
recraft/recraft-v4.* row with image output from chat to imageGeneration, and
change meta/muse-spark-1.1 and moonshotai/kimi-k3 from imageGeneration to chat.
Preserve all other model metadata unchanged.

254651-254736: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Mark the TTS models as text→audio

  • tts-1* are text-in/audio-out models, so modalities.input should be ["text"] and modalities.output should be ["audio"].
  • Drop cost here until the catalog can represent character-based pricing; the current token-based estimator won’t handle these rates correctly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@resources/model-db/providers.json` around lines 254651 - 254736, Update all
four TTS model entries in the shown catalog block so modalities.input is
["text"] and modalities.output is ["audio"], then remove their cost fields.
Preserve each model’s existing identifiers, limits, tool_call, and reasoning
metadata.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@resources/model-db/providers.json`:
- Around line 129661-129680: Update the pricing data around the cost objects and
the associated sanitizeAggregate()/estimateUsageCostUsd() flow so tiered rates
are supported before retaining tiers and context_over_200k; select the
applicable threshold pricing when estimating usage, including requests above
200,000 context tokens. Alternatively, remove these unsupported tier fields from
both affected cost objects until tier-aware estimation is implemented.

In `@src/main/desktop/browser/BrowserProfileImportService.ts`:
- Around line 174-188: Update the rollback flow in the cookie import block to
preserve each existing cookie’s partition identity before clearing storage.
Extend or bypass cookieToSetDetails() so rollback restoration passes the
original partition metadata to setCookies(), ensuring partitioned cookies are
recreated in their original partitions while retaining current behavior for
unpartitioned cookies.

In `@src/renderer/src/components/browser/AgentBrowserPiP.vue`:
- Around line 433-440: Extend the preview reset logic around the
currentSessionId watcher to also react to active run changes within the same
session. When the run changes, clear hasFrame and hasPosition, reset
latestFrameSequence to -1, and clear the associated run/activity state before
loadStatus; also ensure browser/presenter recreation resets the sequence
watermark so new frames starting at zero are accepted.

In `@src/renderer/src/i18n/id-ID/settings.json`:
- Around line 552-575: Replace the English browser-import workflow values with
accurate translations for all keys in src/renderer/src/i18n/id-ID/settings.json
lines 552-575, src/renderer/src/i18n/it-IT/settings.json lines 552-575,
src/renderer/src/i18n/ja-JP/settings.json lines 224-247,
src/renderer/src/i18n/ko-KR/settings.json lines 224-247,
src/renderer/src/i18n/ms-MY/settings.json lines 552-575,
src/renderer/src/i18n/pl-PL/settings.json lines 552-575,
src/renderer/src/i18n/pt-BR/settings.json lines 224-247, and
src/renderer/src/i18n/ru-RU/settings.json lines 224-247. Preserve every existing
key and placeholder, including {count}, {expired}, and {partitioned}, while
translating titles, descriptions, statuses, actions, and error messages into
each catalog’s language.

In `@src/shared/contracts/events/browser.events.ts`:
- Around line 85-87: Update the frame payload schema’s data validator to require
value instanceof Uint8Array instead of the broader ArrayBuffer.isView check,
while preserving the existing 512 KiB byte-length limit.

In `@test/renderer/components/AgentBrowserPiP.test.ts`:
- Around line 24-123: Update the test teardown around setup() so every mounted
AgentBrowserPiP wrapper is unmounted in afterEach before restoring mocks. Track
each wrapper created by setup(), unmount all tracked wrappers after every test,
and clear the tracking collection to prevent listeners, watchers, and capture
timers from leaking between tests.

---

Outside diff comments:
In `@resources/model-db/providers.json`:
- Around line 176998-177022: Update the model type fields for all affected
provider entries: change every recraft/recraft-v4.* row with image output from
chat to imageGeneration, and change meta/muse-spark-1.1 and moonshotai/kimi-k3
from imageGeneration to chat. Preserve all other model metadata unchanged.
- Around line 254651-254736: Update all four TTS model entries in the shown
catalog block so modalities.input is ["text"] and modalities.output is
["audio"], then remove their cost fields. Preserve each model’s existing
identifiers, limits, tool_call, and reasoning metadata.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ac94d39a-7c2c-450e-aeab-161f5335ce31

📥 Commits

Reviewing files that changed from the base of the PR and between e84428b and f965215.

⛔ Files ignored due to path filters (2)
  • src/renderer/src/lib/icons/icon-collections.generated.ts is excluded by !**/*.generated.*
  • src/renderer/src/lib/icons/icon-whitelist.generated.ts is excluded by !**/*.generated.*
📒 Files selected for processing (61)
  • docs/features/agent-browser-pip/plan.md
  • docs/features/agent-browser-pip/spec.md
  • docs/features/agent-browser-pip/tasks.md
  • docs/features/browser-profile-import/plan.md
  • docs/features/browser-profile-import/spec.md
  • docs/features/browser-profile-import/tasks.md
  • resources/acp-registry/registry.json
  • resources/model-db/providers.json
  • src/main/agent/deepchat/runtime/dispatch.ts
  • src/main/desktop/browser/BrowserProfileImportService.ts
  • src/main/desktop/browser/YoBrowserPresenter.ts
  • src/main/desktop/browser/YoBrowserToolHandler.ts
  • src/main/desktop/browser/yoBrowserSession.ts
  • src/main/desktop/routes.ts
  • src/main/tool/agentTools/agentToolManager.ts
  • src/main/tool/index.ts
  • src/main/tool/runtimePorts.ts
  • src/renderer/api/BrowserClient.ts
  • src/renderer/settings/components/BrowserDataImportDialog.vue
  • src/renderer/settings/components/DataSettings.vue
  • src/renderer/src/components/browser/AgentBrowserPiP.vue
  • src/renderer/src/components/sidepanel/BrowserPanel.vue
  • src/renderer/src/components/sidepanel/ChatSidePanel.vue
  • src/renderer/src/i18n/da-DK/settings.json
  • src/renderer/src/i18n/de-DE/settings.json
  • src/renderer/src/i18n/en-US/settings.json
  • src/renderer/src/i18n/es-ES/settings.json
  • src/renderer/src/i18n/fa-IR/settings.json
  • src/renderer/src/i18n/fr-FR/settings.json
  • src/renderer/src/i18n/he-IL/settings.json
  • src/renderer/src/i18n/id-ID/settings.json
  • src/renderer/src/i18n/it-IT/settings.json
  • src/renderer/src/i18n/ja-JP/settings.json
  • src/renderer/src/i18n/ko-KR/settings.json
  • src/renderer/src/i18n/ms-MY/settings.json
  • src/renderer/src/i18n/pl-PL/settings.json
  • src/renderer/src/i18n/pt-BR/settings.json
  • src/renderer/src/i18n/ru-RU/settings.json
  • src/renderer/src/i18n/tr-TR/settings.json
  • src/renderer/src/i18n/vi-VN/settings.json
  • src/renderer/src/i18n/zh-CN/settings.json
  • src/renderer/src/i18n/zh-HK/settings.json
  • src/renderer/src/i18n/zh-TW/settings.json
  • src/renderer/src/stores/ui/sidepanel.ts
  • src/renderer/src/views/ChatTabView.vue
  • src/shared/contracts/domainSchemas.ts
  • src/shared/contracts/events.ts
  • src/shared/contracts/events/browser.events.ts
  • src/shared/contracts/routes.ts
  • src/shared/contracts/routes/browser.routes.ts
  • src/shared/types/browser.ts
  • src/shared/types/desktop.ts
  • src/shared/types/tool.d.ts
  • test/main/desktop/browser/BrowserProfileImportService.test.ts
  • test/main/desktop/browser/YoBrowserPresenter.test.ts
  • test/main/routes/contracts.test.ts
  • test/renderer/api/clients.test.ts
  • test/renderer/components/AgentBrowserPiP.test.ts
  • test/renderer/components/ChatSidePanel.test.ts
  • test/renderer/components/ChatTabView.test.ts
  • test/setup.ts

Comment on lines +129661 to +129680
"cost": {
"input": 2,
"output": 6,
"cache_read": 0.5,
"tiers": [
{
"input": 4,
"output": 12,
"cache_read": 1,
"tier": {
"type": "context",
"size": 200000
}
}
],
"context_over_200k": {
"input": 4,
"output": 12,
"cache_read": 1
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Implement tier-aware pricing before adding these cost objects.

sanitizeAggregate() discards tiers and context_over_200k because it retains only numeric cost values. estimateUsageCostUsd() therefore always applies the base rate, underestimating requests above each threshold.

Either extend the sanitized contract and estimator to select the applicable tier, or remove these unsupported fields until that support exists.

Also applies to: 129722-129741

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@resources/model-db/providers.json` around lines 129661 - 129680, Update the
pricing data around the cost objects and the associated
sanitizeAggregate()/estimateUsageCostUsd() flow so tiered rates are supported
before retaining tiers and context_over_200k; select the applicable threshold
pricing when estimating usage, including requests above 200,000 context tokens.
Alternatively, remove these unsupported tier fields from both affected cost
objects until tier-aware estimation is implemented.

Comment thread src/main/desktop/browser/BrowserProfileImportService.ts Outdated
Comment thread src/renderer/src/components/browser/AgentBrowserPiP.vue
Comment on lines +552 to +575
"button": "Import website data",
"title": "Import browser session data",
"description": "Choose a Chrome or Arc profile. macOS may ask you to authorize Keychain access. The source is never modified.",
"scanning": "Looking for browser profiles...",
"unsupportedTitle": "Not supported on this platform",
"unsupportedDescription": "Direct browser data import is currently available only on macOS. Windows remains unsupported because current Chrome data is app-bound.",
"profileLabel": "Source profile",
"profilePlaceholder": "Select a profile",
"noProfiles": "No supported Chrome or Arc profiles with cookie data were found.",
"cookies": "Cookies and sessions",
"supported": "Included in this import",
"otherData": "Passwords and web storage",
"notIncluded": "Not included in this version",
"preview": "Authorize and preview",
"previewTitle": "Ready to replace YoBrowser cookies",
"previewDescription": "{count} cookies can be imported. Existing YoBrowser cookies will be replaced.",
"skipped": "Skipped: {expired} expired, {partitioned} partitioned.",
"confirm": "Replace and import",
"doneTitle": "Import complete",
"doneDescription": "Imported {count} cookies. Open browser pages were reloaded.",
"keyDenied": "Keychain access was denied or the browser key could not be read.",
"previewExpired": "The source changed or the preview expired. Create a new preview.",
"encryptionUnsupported": "This profile uses an encryption format that this importer does not support.",
"failed": "Import failed before completion. Existing YoBrowser cookies were restored when mutation had started."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Localize the browser-import workflow instead of copying English values.

All eight locale catalogs currently display the complete workflow in English.

  • src/renderer/src/i18n/id-ID/settings.json#L552-L575: provide Indonesian translations.
  • src/renderer/src/i18n/it-IT/settings.json#L552-L575: provide Italian translations.
  • src/renderer/src/i18n/ja-JP/settings.json#L224-L247: provide Japanese translations.
  • src/renderer/src/i18n/ko-KR/settings.json#L224-L247: provide Korean translations.
  • src/renderer/src/i18n/ms-MY/settings.json#L552-L575: provide Malay translations.
  • src/renderer/src/i18n/pl-PL/settings.json#L552-L575: provide Polish translations.
  • src/renderer/src/i18n/pt-BR/settings.json#L224-L247: provide Brazilian Portuguese translations.
  • src/renderer/src/i18n/ru-RU/settings.json#L224-L247: provide Russian translations.
📍 Affects 8 files
  • src/renderer/src/i18n/id-ID/settings.json#L552-L575 (this comment)
  • src/renderer/src/i18n/it-IT/settings.json#L552-L575
  • src/renderer/src/i18n/ja-JP/settings.json#L224-L247
  • src/renderer/src/i18n/ko-KR/settings.json#L224-L247
  • src/renderer/src/i18n/ms-MY/settings.json#L552-L575
  • src/renderer/src/i18n/pl-PL/settings.json#L552-L575
  • src/renderer/src/i18n/pt-BR/settings.json#L224-L247
  • src/renderer/src/i18n/ru-RU/settings.json#L224-L247
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/renderer/src/i18n/id-ID/settings.json` around lines 552 - 575, Replace
the English browser-import workflow values with accurate translations for all
keys in src/renderer/src/i18n/id-ID/settings.json lines 552-575,
src/renderer/src/i18n/it-IT/settings.json lines 552-575,
src/renderer/src/i18n/ja-JP/settings.json lines 224-247,
src/renderer/src/i18n/ko-KR/settings.json lines 224-247,
src/renderer/src/i18n/ms-MY/settings.json lines 552-575,
src/renderer/src/i18n/pl-PL/settings.json lines 552-575,
src/renderer/src/i18n/pt-BR/settings.json lines 224-247, and
src/renderer/src/i18n/ru-RU/settings.json lines 224-247. Preserve every existing
key and placeholder, including {count}, {expired}, and {partitioned}, while
translating titles, descriptions, statuses, actions, and error messages into
each catalog’s language.

Comment thread src/shared/contracts/events/browser.events.ts
Comment thread test/renderer/components/AgentBrowserPiP.test.ts
@zerob13
zerob13 merged commit 296f340 into dev Jul 18, 2026
9 checks passed
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.

1 participant