Skip to content

Add Aside to browser data import detection - #13379

Merged
teamleaderleo merged 3 commits into
manaflow-ai:mainfrom
gurbaaz27:feat/aside-browser-import
Sep 27, 2026
Merged

teamleaderleo merged 3 commits into
manaflow-ai:mainfrom
gurbaaz27:feat/aside-browser-import

Conversation

@gurbaaz27

@gurbaaz27 gurbaaz27 commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

cmux's Import Browser Data detector now recognizes Aside (at.studio.AsideBrowser) as a Chromium browser. It searches Aside's application support directory, detects its Chromium profiles, and exposes the installed app for import.

The change adds a regression test covering Aside's bundle identifier, data root, profile metadata, and default profile detection.

Testing

  • swift test --package-path Packages/macOS/CmuxBrowser --filter BrowserInstalledBrowserDetectorTests — 8 tests passed.
  • swift test --package-path Packages/macOS/CmuxBrowser — 309 tests across 45 suites passed.
  • TOOLCHAINS=com.apple.dt.toolchain.Metal.32023.883 CMUX_DEV_BACKEND_MODE=local ./scripts/reload.sh --tag aside-browser-import --no-global-cli-links — tagged Debug build passed.

Live UI smoke testing was not run because this environment has no configured personal dev credentials for tagged launches; the focused and full package tests cover the detector behavior.

Demo Video

Not attached: this change only adds browser detection metadata and package-level behavior; no UI layout or interaction code changed.

Checklist

  • I tested the change locally
  • I added or updated tests for the behavior change
  • I updated docs/changelog if needed

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Adds Aside (at.studio.AsideBrowser) as a detected Chromium browser for import. Aside apps with supported profile data now resolve their data root and expose the installed app for import.

Adds a regression test covering Aside's bundle identifier, data root, profile metadata, and default profile detection.

Written for commit bb8a7c9. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Added support for detecting and importing profiles from the Aside browser.
    • Aside browser profiles, history, cookies, and related browsing data can now be recognized when available on macOS.
  • Tests

    • Added coverage to verify Aside installation and profile detection.

Changelog

Added: Browser data import detects Aside and offers its profiles

@github-actions

github-actions Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@coderabbitai

coderabbitai Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

Understand this PR’s impact

Explore downstream dependencies and potential security impact with Blast Radius.

View blast radius →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 31e0fd78-f19e-4ae4-b152-387336b41396

📥 Commits

Reviewing files that changed from the base of the PR and between 3cc2087 and ebf0513.

📒 Files selected for processing (2)
  • Packages/macOS/CmuxBrowser/Sources/CmuxBrowser/Import/Values/BrowserImportBrowserDescriptor.swift
  • Packages/macOS/CmuxBrowser/Tests/CmuxBrowserTests/Import/BrowserInstalledBrowserDetectorTests.swift

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The change registers Aside as a tier-2 Chromium browser with data-only detection. A test verifies detection of its application, data directory, Chromium family, and default profile.

Changes

Aside browser detection

Layer / File(s) Summary
Aside registration and detection validation
Packages/macOS/CmuxBrowser/Sources/CmuxBrowser/Import/Values/BrowserImportBrowserDescriptor.swift, Packages/macOS/CmuxBrowser/Tests/CmuxBrowserTests/Import/BrowserInstalledBrowserDetectorTests.swift
The descriptor recognizes Aside by bundle identifier, application name, and support-directory path. The test verifies Aside metadata and its "Personal" default profile from on-disk Chromium data.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Feature

Suggested reviewers: lawrencecchen


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Full Internationalization ❌ Error The production diff adds displayName: "Aside" in BrowserImportBrowserDescriptor.swift. This value reaches the user-facing import source popup and other import messages through `browser.displayName… Use a stable localized key, for example String(localized: "browser.import.browser.aside", defaultValue: "Aside"), for the production display name. Add browser.import.browser.aside to Resources/Localizable.xcstrings with approved trans…
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 2 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (23 passed)
Check name Status Explanation
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.
Cmux Cloud Persistent Session And Early Input ✅ Passed PASS. The authoritative PR diff changes only the Aside browser descriptor and its browser detection test. It does not change Cloud terminal creation, cmux-tui transport, manual renderers, Ghostty runt…
Cmux Swift Actor Isolation ✅ Passed PASS. The production diff adds only an Aside value to the existing BrowserImportBrowserDescriptor.allBrowserDescriptors table. It does not add or alter an actor-isolated declaration, service protoco…
Cmux Swift Blocking Runtime ✅ Passed PASS. The production diff only adds a static BrowserImportBrowserDescriptor for Aside. It adds no semaphores, blocking waits, sleeps, delayed dispatch, polling, main-queue synchronization, or manual…
Cmux Browser Automation Off-Main ✅ Passed PASS: The pull request only adds an Aside browser import descriptor and a detector test. The diff changes two CmuxBrowser import files and does not change Sources/TerminalController.swift or `Contro…
Cmux Expensive Synchronous Load ✅ Passed PASS. The production diff only adds static Aside browser metadata to allBrowserDescriptors; it does not add or move RestorableAgentSessionIndex.load(), agent stores, transcripts, trajectories, JSO…
Cmux Cache Substitution Correctness ✅ Passed PASS. The production diff only adds static Aside browser metadata to allBrowserDescriptors. BrowserInstalledBrowserDetector uses that metadata to perform fresh bundle and filesystem checks, includ…
Cmux No Hacky Sleeps ✅ Passed PASS: The pull request changes only two Swift files: a Swift browser descriptor and a Swift test. The custom rule applies to TypeScript, JavaScript, shell, and non-Swift build/runtime scripts. The dif…
Cmux Algorithmic Complexity ✅ Passed PASS. The production diff adds one literal entry to the static allBrowserDescriptors table. It adds no loop, sort, filter, join, rescan, or data-store operation. The detector's existing descriptor i…
Cmux Swift Concurrency ✅ Passed PASS. The authoritative diff changes only browser metadata and a synchronous XCTest method. Added lines contain no Dispatch queue, Combine state, completion-handler API, async/await migration pattern,…
Cmux Swift @Concurrent ✅ Passed The PR adds only a synchronous browser descriptor and a synchronous test. The diff introduces no async, nonisolated, @concurrent, @MainActor, or await code. `BrowserInstalledBrowserDetector.…
Cmux Swift Package Boundaries ✅ Passed PASS. The production change only adds Aside metadata to BrowserImportBrowserDescriptor.allBrowserDescriptors in Packages/macOS/CmuxBrowser, which is an existing SwiftPM library target with a match…
Cmux Swiftpm Lockfiles ✅ Passed PASS. The authoritative PR diff changes only the Aside browser descriptor and its test. It does not change any Package.swift, Package.resolved, .gitignore, workflow, or Xcode project file. `Pack…
Cmux Swift Logging ✅ Passed The PR adds browser descriptor data and a test fixture only. The production diff adds no print, debugPrint, dump, NSLog, Logger, stdout/stderr, or diagnostic logging. The added write(to:) calls create…
Cmux User-Facing Error Privacy ✅ Passed PASS. The production diff adds only Aside browser detection metadata: a display name, bundle identifier, app name, and data path. The detector uses the display name in the normal browser-import source…
Cmux Swiftui State Layout ✅ Passed PASS: The pull request changes only browser descriptor metadata and detector tests. The changed source imports Foundation and adds an Aside value to BrowserImportBrowserDescriptor; it does not add…
Cmux Architecture Rethink ✅ Passed PASS. The PR adds one static browser descriptor and one regression test. The descriptor uses the existing stateless detection path through allBrowserDescriptors; it adds no sleeps, delayed dispatch,…
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS. The pull request changes only browser import descriptors and a detector test. The added code contains no NSWindow, NSPanel, NSWindowController, SwiftUI Window/WindowGroup, close-shortcut routing…
Cmux Source Artifacts ✅ Passed The pull request changes only two ordinary Swift source paths: the browser descriptor and its focused test. The diff adds hand-written Aside metadata and a regression test with temporary test data cre…
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS. The only changed production Swift file adds a normal BrowserImportBrowserDescriptor data entry for Aside. The diff adds no #if DEBUG or test-build guard, test/debug-named member, visibility …
Title check ✅ Passed The title clearly and concisely describes the main change: adding Aside to browser data import detection.
Description check ✅ Passed The description includes Summary, Testing, Changelog, Demo Video, and Checklist sections. It explains the behavior change, lists focused and full test results, records the tagged build, and explains w…
Full details: Cmux Full Internationalization

Explanation

The production diff adds displayName: "Aside" in BrowserImportBrowserDescriptor.swift. This value reaches the user-facing import source popup and other import messages through browser.displayName (for example, BrowserPanel.swift adds each name to sourcePopup and formats it in the progress and profile text). It is a new user-facing Swift string, but it is a raw literal and has no matching key in Resources/Localizable.xcstrings. The added test literals are allowed, but the production metadata is not. The bundle identifier, app name, and data path are literal tokens and are not the failure.

Resolution

Use a stable localized key, for example String(localized: "browser.import.browser.aside", defaultValue: "Aside"), for the production display name. Add browser.import.browser.aside to Resources/Localizable.xcstrings with approved translated values for every existing browser-import locale: ar, de, en, es, fr, ja, ko, uk, zh-Hans, and zh-Hant. Do not add placeholder or copied-English locale entries.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Create a new PR

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.

@greptile-apps

greptile-apps Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

The PR appears safe to merge, with a non-blocking regression-test gap around Aside’s data-only detection behavior.

Findings

  1. P2 Data-only path remains untested ▶

Summary

This PR adds Aside to the browser-import descriptor registry as a Chromium-family browser and introduces detector coverage for its application identifier, data root, profile metadata, and default profile.

  • Registers Aside’s bundle identifier, application name, and application-support directory.
  • Reuses the existing Chromium profile detector.
  • Adds a focused fixture-based detector test, though the new data-only capability is not directly covered.

Reviews (1) · Last reviewed commit: "feat: support Aside browser imports"

Comment on lines +115 to +117
bundleLookup: { bundleID in
bundleID == "at.studio.AsideBrowser" ? fakeApp : nil
},

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.

P2 Data-only path remains untested

The test always returns a fake installed app, so it never exercises the data-only behavior enabled by supportsDataOnlyDetection. If that flag is removed or disabled, this test still passes even though users with retained Aside data but no installed application can no longer import it. Use a nil bundle lookup or add a separate data-only case.

@gurbaaz27

Copy link
Copy Markdown
Contributor Author

I have read the CLA Document v2.2 and I hereby sign the CLA

github-actions Bot added a commit that referenced this pull request Sep 21, 2026
@gurbaaz27

Copy link
Copy Markdown
Contributor Author

recheck

@gurbaaz27

Copy link
Copy Markdown
Contributor Author

Hi @austinywang @lawrencecchen , I’m trying to test this PR locally. I followed the documented setup in CONTRIBUTING.md and docs/contributor-verification.md by running scripts/setup-team-dev.sh with my Stack account, but verification fails:

Stack rejected the credentials: EMAIL_PASSWORD_MISMATCH
error: sign-in failed; not writing ~/.secrets/cmuxterm-dev.env

This blocks me from launching an authenticated tagged Debug build and manually verifying the change. Could you please confirm whether my Stack account needs to be invited/provisioned separately, or advise which account/onboarding path I should use? (I created an account on Hexclave Dashboard (app.stack-auth.com) and trying to use those credentials)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo merged commit f563884 into manaflow-ai:main Sep 27, 2026
66 of 67 checks passed
@teamleaderleo

Copy link
Copy Markdown
Collaborator

Merged, thanks @gurbaaz27 :)

@github-actions

Copy link
Copy Markdown
Contributor

Merge receipt for bb8a7c97ef, merged 2026-09-27 14:17:21 UTC

  • Not verified at merge: Web complexity (in progress)
  • Verified: app-host unit tests, ci-status, macOS compile admission, web-validation, CI fast guards, CI timing, detect-ios-changes, Fast static checks, GhosttyKit release check, guards (17), ios-tests, linux-preflight, and 7 more
  • Skipped by policy: admission-placement, browser, Claude wrapper regressions, CLI product tests, ios-simulator, ios-simulator-build, late-placement, mobile-core-package, release-admission, release-build, remote-daemon, suite-coverage, and 5 more
  • Full suite: runs on main after merge.

Labeled merged-unverified: if main breaks near this merge, look here first.

@github-actions github-actions Bot added the merged-unverified A judging check was not green at merge; see the merge receipt comment label Sep 27, 2026
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 27, 2026
648d5c1 Add a Paste Last Screenshot action with an unbound shortcut (manaflow-ai#14955)
ff61677 ci: avoid partial blobs in catch-up merges (manaflow-ai#15023)
4d0d112 ci: retry transient catch-up GraphQL failures (manaflow-ai#15021)
212e808 ci: attribution scores a lone suspect and reports app-host crashes apart (manaflow-ai#14952)
4cabdf4 test: settle the window before measuring the unread sidebar-row invalidation (manaflow-ai#14568)
12ec99b Add a release-media capture tool for changelog screenshots and clips (manaflow-ai#15010)
ee2cda0 Backfill Unreleased changelog and draft next release cards (manaflow-ai#14999)
be4adf8 Show a brief notice when Cmd+V fails on an oversized image or a timeout (manaflow-ai#14953)
23d22d7 ci: an owned pool the run starts on now beats an earlier one it queues on (manaflow-ai#14993)
05d0190 ci: catch-up posts once per head, says less, and merges inserted declarations (manaflow-ai#15018)
4ee4b21 ci: fail stalled Swift package tests instead of waiting out the job timeout (manaflow-ai#14997)
9ce512a merge-main: run local guards only when asked (manaflow-ai#15016)
d60108a ci: clear test-e2e's fixed DerivedData with clear-dirs.sh (manaflow-ai#14994)
1d7895e ci: run the shell and CLI no-socket lanes in parallel (manaflow-ai#14990)
6e7d25f Honor macOS Differentiate Without Color, Increase Contrast and Reduce Transparency (manaflow-ai#14991)
966b355 Stop interrupting focused work: sidebar jumps, Computer Use focus steal, quit dialog on logout (manaflow-ai#14961)
e1f1cb2 Strip control characters from feedback attachment filenames (manaflow-ai#14783)
0758c9f test: find the onboarding window the test presented, not a leftover (manaflow-ai#15015)
b35c540 fix(spm): resolve GhosttyKit/GhosttyRuntimeTestStubs target name collisions (manaflow-ai#10569)
ef33bed Map .purs artifacts to the Haskell highlight.js grammar (manaflow-ai#14202)
e2a167a Highlight Elixir and Erlang files in the file editor (manaflow-ai#13732)
972c449 fix: wrap Linux browser download card label (manaflow-ai#11157)
f563884 Add Aside to browser data import detection (manaflow-ai#13379)
091d0ea Add cmux send --paste and hint at it for large multi-line sends (manaflow-ai#14937)
3ffcdbb test(ios): keep folder-tap stat tests off the real 2 s deadline (manaflow-ai#15017)
68d3936 test: keep CmuxTerminal pasteboard tests off the cooperative pool (manaflow-ai#15006)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-unverified A judging check was not green at merge; see the merge receipt comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants