Repository navigation
cmux-next: optional Agent integrations helper in Settings - #21818
Conversation
A foreign, symlinked, non-file or unreadable hook target reads as "absent" today, so a caller offers an Install the installer refuses. Red: cargo test -p cmux-tui-hooks status_reports (2 failed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`agent hook status` now reports `conflict` for a target install refuses (a symlink, a non-file, or a plugin file cmux-tui did not write) and `unavailable` for one it cannot inspect, each with a machine-readable `reason` and a `detail`. Install's refusals are unchanged. Green: cargo test -p cmux-tui-hooks (44 passed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ts only on a click The card and its Swift model do not exist yet: these fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A collapsed "Agent integrations" card lists each coding agent's hook state from the bundled `cmux --json agent hook status` and offers Install, Repair or Remove, which run `agent hook install|uninstall <id>` and read status again. A file cmux did not create in the way (`conflict`) offers no Install: the row says what is there and gives the command to copy. The card reads status only once opened and changes nothing without a click. The CLI keeps every write and refusal. Green: bun test src/pages/settings (131 pass). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
…tions title Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Bead |
…grations tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Rust god-file ratchet refuses growth in lib.rs. The conflict checks, their tests and ensure_replaceable_target (which they mirror) move to status_conflict.rs; lib.rs ends shorter than its base. Green: cargo test -p cmux-tui-hooks (44 passed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on c425696 to compare; do not merge until green; see lane-rules
Tour of Path-selected interactions
Core UI (before): DEGRADED — 19 ok, 1 unavailable
Screenshots (15)1. Launch
Screenshots (15)1. Launch Tours are data in |
|
Agents: |
Its runCLI closure runs nonisolated; the fixture and recorder must too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSettingsWindow/Localizable.xcstrings # schemas/settings-export/settings-schema.sources.sha256
"Nothing is installed until you click" and the "Optional" tag restated the card's behavior; the collapsed card already says both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSettingsWindow/Localizable.xcstrings
|
Review (independent-subagent): SHIP at 3425c29 This review covers only the three base merges since the last full SHIP at 7bcc664: d49f845 (update-branch), a2b22dd (merge of feat-cmux-next) and 3425c29 (merge of feat-cmux-next with a hand resolution).
Agent session: huge-blue |
|
|
|
|
# Conflicts: # schemas/settings-export/settings-schema.sources.sha256
|
Review (subagent, correctness first): SHIP at bfc35ac Delta review of the base merge (c425696) on top of the SHIP at 3425c29.
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15db7-20cd-7e10-8535-158031297e5c&host=huge-blue
|
Review (subagent, correctness first): SHIP at a048273 The only change since the previous SHIP (bfc35ac) is the PR-autofix regeneration of schemas/settings-export/settings-schema.sources.sha256. It changes one line, for Schema/SettingsPageLayout.swift. I checked every entry in the manifest against |
Conflict in tests/test_cmux_next_route.py: #21818 added CmuxNextAgentIntegrationsTests to the schema test's hand-written list. The graph-derived expectation here already selects it (the graph has the target), so this keeps that version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c31-89b3-7d62-8e8c-b116a23ae693&host=cosmic-gray
|
base-red-watch: |
|
base-red-watch: |
|
Shipped in:
|
































Stacked on #21813 (hook status reports conflicts); review that first. This PR's diff against
feat-cmux-nextincludes it until it lands.Settings > Agents gets an optional Agent integrations card for the coding-agent hooks that let cmux show when an agent is working, waiting or done. It lists each provider's hook state and offers Install, Repair or Remove, with the CLI command to copy as a fallback.
It stays out of the way: the card is collapsed, reads nothing until opened, and changes nothing without a click. A deep link (
focus=agents.integrations) opens it.What it does
cmux --json agent hook status. It's read once when the card opens and again on Refresh.absent) and Repair (partial) runcmux --json agent hook install <id>. Remove (installedorpartial) runsagent hook uninstall <id>. Status is read again after each one. A refusal from the CLI shows on that row in the CLI's own words.conflict, added in cmux-tui-hooks: status reports conflicting hook targets #21813) means a file cmux didn't create, a symlink, or a non-file is in the way. The row offers no Install. It says what's there, shows the path, and givescmux agent hook install <id>to copy once the file is moved. Can't read (unavailable) says to check permissions. The host refuses Install over either state too, not just the page.The install logic lives only in the Rust CLI (
cmux-tui-hooks). Swift (SettingsAgentIntegrations) runs the CLI withProcessRunner, parses the result, and keeps the row list. It accepts only provider ids the last status listed.One limit: the app runs the CLI with the app's own environment. A
CLAUDE_CONFIG_DIRorCODEX_HOMEset only in a shell profile isn't seen, so the card targets the default paths. Each row shows its path so this is visible, and the copyable command is the fallback.Files
CmuxNextAgentIntegrations:SettingsAgentIntegrations.swift(++Process.swift, split out because CmuxNextDaemon and CmuxNextSettings both export aJSONValue). It is aPageProvider; the App passes it the bundled CLI's location. It lives outside CmuxNextApp because the App target may not grow (check-app-size.sh).SettingsPageProviderroutescmux.settings.integrations.state|runto it, andPageFactorywires it. The provider's nil-host guards now share one helper, so CmuxNextApp ends with fewer source lines than the base.SettingsPageLayout.Card.agentIntegrationssits in the Agents trail. The exportedsettings-schema.jsonand its source stamp were updated to match (defaults_guard.py check-stamppasses).components/AgentIntegrations.tsx, plus ops, store, mock and gallery variants (agents-integrations,agents-integrations-no-cli).settingsWindow.agentIntegrations.*strings, translated into all 21 catalog locales.Verification
bun test src/pages/settings/agentIntegrations.test.tsxat the test-only commit gave 0 pass, 4 fail.feat-cmux-next(c5a1f90, merge c9ed6ee) and trimming two lines of filler copy (2813f17):bun test src/pages/settings src/gallerygave 132 pass at c9ed6ee, and the card, description-length and strings tests passed again at 2813f17.bun test src/pages/settings src/gallerygave 131 pass, including the 60-character description-line check in every locale.bun run typecheck,bun run lint,vp fmt --checkandscripts/lint-ios-package-conventions.share clean.scripts/localization_catalog.py checkreports no errors for the new keys.cmux-ci run: red on 343228a (cannot find 'SettingsAgentIntegrations' in scope). Green on a6e702f:package-test-lane.sh suite Packages/macOS/CmuxNext SettingsAgentIntegrationsTestsgave 5 tests in 1 suite passed. Two test-only fixups landed in between: animport CmuxNextPages, and moving the fake CLI off the main actor.cmux-ci build cmuxcan't provision the dev backend from huge-blue (no route tocmux-dev-backend-1), so no tagged app was built or dogfooded. The screenshots below are the React Settings page from the webviews gallery build (agents-integrations*variants against the mock host), rendered in headless Chromium. They are not the native app. The full CmuxNext package build and suites run in this PR's CI.Screenshots
Collapsed (the default):
Opened, light and dark: installed, needs repair, blocked by a file cmux didn't create, and not installed:
A build without the CLI:
Localization audit
There are 22 new keys in
CmuxNextSettingsWindow/Localizable.xcstrings, translated into all 21 locales the catalog carries (the 9 required macOS locales among them), and regenerated intogenerated/strings.json. Every line is 60 characters or fewer in every locale. There's no bare English in the changed TSX or Swift. The CLI's Englishdetailand refusal text is shown as-is, as other Settings cards do with daemon text.Changelog
No capture: the card is part of the webview Settings page. The gallery advisory run captures it (
agents-integrations,agents-integrations-no-cli). The Swift side is a page provider with no native UI of its own.🤖 Generated with Claude Code
Agent session: cosmic-gray