From 77d7bdf6181bc735c95744fe50cff551832f392d Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 20 Oct 2026 20:06:13 -0700 Subject: [PATCH 1/4] test(settings): Settings has a Chief page with the Chiefs list, Chief Chat and Chief Pet; the Chief popover links to it (red) Co-Authored-By: Claude Opus 5.5 Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a495-7013-b37d-abe71de99881&host=cosmic-gray --- .../HomeChiefSettingsViewTests.swift | 18 +++++++++++ .../ChiefBubbleStyleSettingTests.swift | 8 ++--- .../ChiefSettingsPageTests.swift | 31 +++++++++++++++++++ .../src/pages/settings/categories.test.ts | 1 + 4 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefSettingsPageTests.swift diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift index 43caff5c913a..1d430630e6fb 100644 --- a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift @@ -51,6 +51,24 @@ import Testing #expect(HomeEngineStrings.reply(text) == "\u{201C}Done.\u{201D} claude") } + /// The popover is the quick version (Leo 2026-10-20): its All Chief Settings link opens the + /// Settings page with every Chief setting, whichever brain the card shows. + @Test func allChiefSettingsOpensTheSettingsPage() throws { + let view = HomeChiefSettingsView(muxHome: FileManager.default.temporaryDirectory, source: OfflineChief()) + var opened = 0 + view.onAllSettings = { opened += 1 } + let link = try #require(Self.subviews(of: view).compactMap { $0 as? NSButton } + .first { $0.identifier?.rawValue == "cmux.home.chief.allSettings" }) + #expect(!link.isHidden) + #expect(link.accessibilityLabel() == HomeEngineStrings.allChiefSettings) + link.performClick(nil) + #expect(opened == 1) + } + + private static func subviews(of view: NSView) -> [NSView] { + view.subviews + view.subviews.flatMap { subviews(of: $0) } + } + @Test func diagnosticsStartClosedAndTheNameIsTheOnlyField() throws { let view = HomeChiefSettingsView(muxHome: FileManager.default.temporaryDirectory, source: OfflineChief()) #expect(!view.showsDiagnostics) diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefBubbleStyleSettingTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefBubbleStyleSettingTests.swift index dbcb07bfb532..d26858dc19ac 100644 --- a/Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefBubbleStyleSettingTests.swift +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefBubbleStyleSettingTests.swift @@ -2,7 +2,7 @@ import CmuxNextSettings import Testing /// `home.chiefBubbleStyle`: the Chief chat's bubbles are iMessage's (the default) until the person, or -/// an agent (it is looks only), picks Theme in Settings > Agents > Chief Chat or cmux.json. +/// an agent (it is looks only), picks Theme in Settings > Chief > Chief Chat or cmux.json. struct ChiefBubbleStyleSettingTests { @Test func iMessageByDefault() throws { let snapshot = CmuxConfigSnapshot.parse(.object([:]), validDensities: [], validMetrics: []) @@ -39,8 +39,8 @@ struct ChiefBubbleStyleSettingTests { #expect(SettingsSchema.agentRefusedKeys[HomeChiefBubbleStyleSetting.key] == nil) } - @Test func theSettingsPageDrawsItInAgents() throws { - let agents = try #require(SettingsPageLayout().categories().first { $0.spec.id == "agents" }) - #expect(agents.groups.contains { $0.rows.contains(HomeChiefBubbleStyleSetting.key) }) + @Test func theSettingsPageDrawsItInChief() throws { + let chief = try #require(SettingsPageLayout().categories().first { $0.spec.id == "chief" }) + #expect(chief.groups.contains { $0.rows.contains(HomeChiefBubbleStyleSetting.key) }) } } diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefSettingsPageTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefSettingsPageTests.swift new file mode 100644 index 000000000000..945667ce9a54 --- /dev/null +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/ChiefSettingsPageTests.swift @@ -0,0 +1,31 @@ +import CmuxNextSettings +import Testing + +/// Settings has a Chief page (Leo 2026-10-20: "only having it as a popover is kind of crappy; +/// there's a lot of settings you may or may not want for the chief"). It holds every Chief +/// setting: the Chiefs list (each Chief's name, picture and backend), Chief Chat and Chief Pet. +/// Before, they sat at the bottom of Agents, and the sidebar had no Chief entry. +struct ChiefSettingsPageTests { + static let chiefRows = [HomeChiefBubbleStyleSetting.key, "home.chiefPetEnabled", "home.chiefPetMascot"] + + @Test func settingsHasAChiefPageWithEveryChiefSetting() throws { + let categories = SettingsPageLayout().categories() + let chief = try #require(categories.first { $0.spec.id == "chief" }, "the sidebar has a Chief entry") + #expect(chief.spec.lead == [.chiefs], "the Chiefs list opens the page") + let rows = chief.groups.flatMap(\.rows) + for key in Self.chiefRows { #expect(rows.contains(key), "\(key) is on the Chief page") } + } + + @Test func agentsNoLongerHoldsTheChief() throws { + let agents = try #require(SettingsPageLayout().categories().first { $0.spec.id == "agents" }) + let rows = agents.groups.flatMap(\.rows) + for key in Self.chiefRows { #expect(!rows.contains(key), "\(key) moved to Chief") } + #expect(!(agents.spec.lead + agents.spec.trail).contains(.chiefs)) + } + + @Test func chiefComesRightAfterAgents() throws { + let ids = SettingsPageLayout().categories().map(\.spec.id) + let agents = try #require(ids.firstIndex(of: "agents")) + #expect(ids.dropFirst(agents + 1).first == "chief") + } +} diff --git a/webviews/src/pages/settings/categories.test.ts b/webviews/src/pages/settings/categories.test.ts index 1bc5bc3334db..979f822d0ec4 100644 --- a/webviews/src/pages/settings/categories.test.ts +++ b/webviews/src/pages/settings/categories.test.ts @@ -23,6 +23,7 @@ test("the categories are the approved ones, in order", () => { "terminal", "editor", "agents", + "chief", "notifications", "browser", "keyboard", From 91716854cdb364b6ffd98bac040456793c90bc97 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 20 Oct 2026 20:10:20 -0700 Subject: [PATCH 2/4] =?UTF-8?q?feat(next):=20Settings=20>=20Chief=20holds?= =?UTF-8?q?=20every=20Chief=20setting;=20the=20Chief=20popover's=20All=20C?= =?UTF-8?q?hief=20Settings=E2=80=A6=20opens=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Chiefs list (name, picture, backend), Chief Chat and Chief Pet move from the bottom of Agents to their own Chief category, right after Agents. The name pill's popover stays the quick version and links to the page. HomeChiefHostLine moves to CmuxNextHomeEngine so CmuxNextApp does not grow. Co-Authored-By: Claude Opus 5.5 Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a495-7013-b37d-abe71de99881&host=cosmic-gray --- .../CmuxHomeRender/Public/HomePalette.swift | 2 +- .../CmuxNextApp/Home/HomeChiefHostLine.swift | 9 -- .../CmuxNextApp/Home/HomeHostView.swift | 5 + .../HomeChiefHostLine.swift | 14 ++ .../HomeChiefSettingsView.swift | 12 ++ .../HomeEngineStrings.swift | 4 + .../Resources/Home.xcstrings | 132 ++++++++++++++++++ .../CmuxNextSettings/Localizable.xcstrings | 132 ++++++++++++++++++ .../Schema/SettingsPageLayout.swift | 18 ++- .../next/highlights/chief-settings-page.md | 4 + webviews/src/pages/settings/icons.tsx | 1 + 11 files changed, 318 insertions(+), 15 deletions(-) delete mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeChiefHostLine.swift create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefHostLine.swift create mode 100644 release-notes/next/highlights/chief-settings-page.md diff --git a/Packages/Shared/CmuxHomeRender/Sources/CmuxHomeRender/Public/HomePalette.swift b/Packages/Shared/CmuxHomeRender/Sources/CmuxHomeRender/Public/HomePalette.swift index be6a9bb87612..2dd354582ec3 100644 --- a/Packages/Shared/CmuxHomeRender/Sources/CmuxHomeRender/Public/HomePalette.swift +++ b/Packages/Shared/CmuxHomeRender/Sources/CmuxHomeRender/Public/HomePalette.swift @@ -190,7 +190,7 @@ public struct HomePalette: Hashable, Sendable { return p } - /// How the Chief chat's bubbles look (Settings > Agents > Chief Chat > + /// How the Chief chat's bubbles look (Settings > Chief > Chief Chat > /// Bubble Style, `home.chiefBubbleStyle`; Leo 2026-10-19: iMessage's blue /// stays the default, the theme's colours are the option). public enum BubbleStyle: Sendable, Hashable { diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeChiefHostLine.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeChiefHostLine.swift deleted file mode 100644 index 8877304a2092..000000000000 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeChiefHostLine.swift +++ /dev/null @@ -1,9 +0,0 @@ -/// Where a Chief conversation runs and the other host its card offers -/// (``HomeService/chiefHost(of:)``): "Runs in the cloud" with "Switch to -/// cmux20", or nils for a Chief with one host. -struct HomeChiefHostLine: Equatable, Sendable { - /// The line under the Chief's name; nil keeps the engine's own line. - var place: String? - /// The other host's label; nil hides the switch. - var switchTo: String? -} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeHostView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeHostView.swift index 44766b715c6c..ed07de89e108 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeHostView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeHostView.swift @@ -104,6 +104,11 @@ final class HomeHostView: NSView { } _ = services?.registry.perform(ChiefInspectorHandlers.actionID, invocation: invocation) } + // All Chief Settings…: Settings > Chief, the page with every Chief setting. + settingsView.onAllSettings = { [weak self, weak services] in + self?.settings.close() + try? services?.settingsWindow.show(section: nil, focus: true, route: "#/settings/chief") + } settingsView.checkHarness = { [weak services] id in (try? await services?.agentHarnesses.doctor(id: id))?["ok"]?.boolValue == true } settingsView.onRename = { [weak service] name in // One op; the daemon refusing it (or no daemon, or one without the op) is false, and the card says so. diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefHostLine.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefHostLine.swift new file mode 100644 index 000000000000..a3a834e35ce5 --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefHostLine.swift @@ -0,0 +1,14 @@ +/// Where a Chief conversation runs and the other host its card offers +/// (the app's `HomeService.chiefHost(of:)`, ``HomeChiefSettingsView/setHost(place:switchTo:)``): +/// "Runs in the cloud" with "Switch to cmux20", or nils for a Chief with one host. +public nonisolated struct HomeChiefHostLine: Equatable, Sendable { + /// The line under the Chief's name; nil keeps the engine's own line. + public var place: String? + /// The other host's label; nil hides the switch. + public var switchTo: String? + + public init(place: String? = nil, switchTo: String? = nil) { + self.place = place + self.switchTo = switchTo + } +} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift index cdd9cf0d0ba8..b0173f355a7a 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift @@ -87,6 +87,8 @@ public final class HomeChiefSettingsView: NSView { public var onAvatar: () -> Void = {} /// Show Memory: runs "Chief: Open Memory Inspector". public var onShowMemory: () -> Void = {} + /// All Chief Settings…: the app opens Settings > Chief (this card is the quick version). + public var onAllSettings: () -> Void = {} /// "Switch to …" under where the Chief runs: the app moves the Chief tab to the other host. public var onSwitchHost: () -> Void = {} /// The brain took a pick (harness, model or effort): the Home list reads the Chiefs' engines again. @@ -170,6 +172,12 @@ public final class HomeChiefSettingsView: NSView { stack.setCustomSpacing(Metrics.space4, after: appearanceRows) appearanceHeader.isHidden = true appearanceRows.isHidden = true + // The rest of the Chief's settings (the pet, the chat's look, every Chief) live in Settings. + let allSettings = HomeChiefLinkButton(title: HomeEngineStrings.allChiefSettings, target: self, action: #selector(openAllSettings)) + allSettings.setAccessibilityIdentifier("cmux.home.chief.allSettings") + allSettings.setAccessibilityLabel(HomeEngineStrings.allChiefSettings) + stack.addArrangedSubview(allSettings) + stack.setCustomSpacing(Metrics.space4, after: allSettings) addFullWidth(diagnosticsRow()) buildDiagnostics() addFullWidth(diagnostics) @@ -332,6 +340,10 @@ public final class HomeChiefSettingsView: NSView { onShowMemory() } + @objc func openAllSettings() { + onAllSettings() + } + @objc func openTraces() { NSWorkspace.shared.revealInBackground([HomeChiefFiles(muxHome: muxHome).traceDirectory]) } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeEngineStrings.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeEngineStrings.swift index b9957bd231fc..b7df8ccf368f 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeEngineStrings.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeEngineStrings.swift @@ -39,6 +39,10 @@ public nonisolated enum HomeEngineStrings { static var nextTurn: String { String(localized: "home.engine.nextTurn", defaultValue: "Changes apply from the next turn.", table: "Home", bundle: .module) } static var openTraces: String { String(localized: "home.engine.openTraces", defaultValue: "Show Traces", table: "Home", bundle: .module) } static var showMemory: String { String(localized: "home.engine.showMemory", defaultValue: "Show Memory", table: "Home", bundle: .module) } + /// The popover's link to Settings > Chief, the page with every Chief setting. + static var allChiefSettings: String { + String(localized: "home.engine.allChiefSettings", defaultValue: "All Chief Settings…", table: "Home", bundle: .module) + } static var brainFormat: String { String(localized: "home.engine.brain", defaultValue: "Runs on this Mac (%@). Tools: zoom, date, spawn, tell and the harness's own.", table: "Home", bundle: .module) } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/Resources/Home.xcstrings b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/Resources/Home.xcstrings index 1bc7f2b6352d..de4097b28720 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/Resources/Home.xcstrings +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/Resources/Home.xcstrings @@ -5408,6 +5408,138 @@ } } }, + "home.engine.allChiefSettings": { + "comment": "Chief settings popover: link that opens Settings > Chief, the page with every Chief setting. Chief is a product name, keep it untranslated.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "All Chief Settings…" + } + }, + "ja": { + "stringUnit": { + "state": "needs_review", + "value": "Chief のすべての設定…" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "كل إعدادات Chief…" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Sve postavke za Chief…" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Alle Chief-indstillinger…" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Alle Chief-Einstellungen…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Todos los ajustes de Chief…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Tous les réglages de Chief…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Tutte le impostazioni di Chief…" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "ការកំណត់ Chief ទាំងអស់…" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "모든 Chief 설정…" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Alle Chief-innstillinger…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wszystkie ustawienia Chief…" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Todos os ajustes do Chief…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Все настройки Chief…" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "การตั้งค่า Chief ทั้งหมด…" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Tüm Chief ayarları…" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Усі налаштування Chief…" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Tất cả cài đặt Chief…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "所有 Chief 设置…" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "所有 Chief 設定…" + } + } + } + }, "home.engine.showMemory": { "extractionState": "manual", "localizations": { diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings index b3b6efe1c380..2dab6518c64b 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings @@ -74886,6 +74886,138 @@ } } }, + "settings.category.chief": { + "comment": "Settings sidebar: the category with every Chief setting (the Chiefs list, Chief Chat, Chief Pet). Chief is a product name, keep it untranslated.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Chief" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "ja": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "Chief" + } + } + } + }, "settings.category.privacy": { "extractionState": "manual", "localizations": { diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsPageLayout.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsPageLayout.swift index 11a82b1c0e8a..be15873efa90 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsPageLayout.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsPageLayout.swift @@ -141,8 +141,6 @@ public nonisolated struct SettingsPageLayout: Sendable { id: "agents", title: SettingsText.keyed("settings.category.agents", "Agents"), symbol: "sparkles", groups: [ GroupSpec(group: "settings.group.agentChat", keys: ["app.warnBeforeClosingAgentSession"]), - // How the Chief chat's bubbles look (the theme's colours, or iMessage's). - group("settings.group.chiefChat"), group("settings.group.computerUse"), // The free AI model while signed out (cx-ds09i). group("settings.group.freeModel"), @@ -150,12 +148,22 @@ public nonisolated struct SettingsPageLayout: Sendable { group("settings.group.sessions"), // Whether agent sessions may start sub-sessions, how many and how deep. group("settings.group.subsessions"), + ], + // Harnesses lists every harness; Your Agents (BRING-YOUR-OWN-HARNESS) adds, checks and + // removes the ones you added. + trail: [.harnesses, .agentHarnesses, .computerUse]), + // Every Chief setting on one page (Leo 2026-10-20: the name pill's popover is the quick + // version; its All Chief Settings link opens this): Chiefs lists every Chief, each opening + // its editor (name, picture, backend; u2586), then the chat's look and the pet. + CategorySpec( + id: "chief", title: SettingsText.keyed("settings.category.chief", "Chief"), symbol: "crown", + groups: [ + // How the Chief chat's bubbles look (the theme's colours, or iMessage's). + group("settings.group.chiefChat"), // The Chief pet floating over every app, and its character. group("settings.group.chiefPet"), ], - // Harnesses lists every harness; Your Agents (BRING-YOUR-OWN-HARNESS) adds, checks and - // removes the ones you added; Chiefs lists every Chief, each opening its editor (u2586). - trail: [.harnesses, .agentHarnesses, .chiefs, .computerUse]), + lead: [.chiefs]), // A core cmux feature: banners, sounds, the attention ring and the // feed for agents, terminal programs and `cmux notify`. CategorySpec( diff --git a/release-notes/next/highlights/chief-settings-page.md b/release-notes/next/highlights/chief-settings-page.md new file mode 100644 index 000000000000..ed834bc02983 --- /dev/null +++ b/release-notes/next/highlights/chief-settings-page.md @@ -0,0 +1,4 @@ +title: Chief has its own page in Settings +category: improved + +Settings > Chief holds every Chief setting: each Chief's name, picture and backend, the chat's look and the Chief pet. All Chief Settings… in the Chief's name-pill popover opens it. diff --git a/webviews/src/pages/settings/icons.tsx b/webviews/src/pages/settings/icons.tsx index d7b3b269fd70..4c63fc1f999b 100644 --- a/webviews/src/pages/settings/icons.tsx +++ b/webviews/src/pages/settings/icons.tsx @@ -69,6 +69,7 @@ const paths: Record = { sparkles: ( ), + crown: , "hand.raised": ( ), From 9c7607f850da31ef61531cff327d00731e240b24 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 20 Oct 2026 20:16:46 -0700 Subject: [PATCH 3/4] fix(next): Chiefs card tests and gallery states open Settings > Chief; the link test finds its button by accessibility id MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also: the highlight gets its Open Settings action, and comments that said Settings > Agents > Chief… name the Chief page. Co-Authored-By: Claude Opus 5.5 Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a495-7013-b37d-abe71de99881&host=cosmic-gray --- .../CmuxNextApp/Pages/ChiefBackendPageRoute.swift | 2 +- .../ChiefPetSettingsRows.swift | 2 +- .../NativeTranscript/HomeNativeTranscriptView.swift | 2 +- .../CmuxNextHomeEngine/HomeChiefSettingsView.swift | 1 - .../HomeChiefSettingsViewTests.swift | 2 +- release-notes/next/highlights/chief-settings-page.md | 3 ++- webviews/src/pages/home-channels/ChiefPage.tsx | 2 +- webviews/src/pages/home-channels/chief-editor.css | 2 +- webviews/src/pages/settings/chiefsCard.test.tsx | 12 ++++++------ .../src/pages/settings/components/ChiefsCard.tsx | 2 +- webviews/src/pages/settings/settings.gallery.ts | 6 +++--- 11 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/ChiefBackendPageRoute.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/ChiefBackendPageRoute.swift index 845bb715c109..1eb257dbbd32 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/ChiefBackendPageRoute.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/ChiefBackendPageRoute.swift @@ -4,7 +4,7 @@ import CmuxNextSettings import Foundation /// `cmux.chief.backend.*` of the Chief editor (Home's New Chief and Edit Chief page, Settings > -/// Agents > Chiefs; docs/chiefs-create-byo-backend.md): the acpmux harnesses a Chief may run on, +/// Chief > Chiefs; docs/chiefs-create-byo-backend.md): the acpmux harnesses a Chief may run on, /// adding one the person brings, and the real hello turn before the Chief record takes it. Thin: /// every call runs on ``AgentHarnessCenter``, the one path the `agent.harness.*` actions and /// Settings > Agents use. diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextChiefPetWiring/ChiefPetSettingsRows.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextChiefPetWiring/ChiefPetSettingsRows.swift index 3cfa937c1cbe..c6f14b6eef9e 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextChiefPetWiring/ChiefPetSettingsRows.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextChiefPetWiring/ChiefPetSettingsRows.swift @@ -7,7 +7,7 @@ public import CmuxNextSettings /// The Chief pet's rows in the Chief Settings popover's Appearance section (Leo 2026-10-19: "pet /// needs those settings to be obviously there"): Show Chief Pet (`home.chiefPetEnabled`) and the /// pet's character (`home.chiefPetMascot`), each pixel mascot drawn beside its name. They read -/// and write the same `SettingsController` as Settings > Agents > Chief Pet, so a change in +/// and write the same `SettingsController` as Settings > Chief > Chief Pet, so a change in /// either shows in the other; a managed key's control is disabled, as on the Settings page. @MainActor public final class ChiefPetSettingsRows: NSObject { diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift index b286d8d5f44f..4a89eb498b06 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift @@ -295,7 +295,7 @@ public final class HomeNativeTranscriptView: NSView { } } - /// Settings > Agents > Chief Chat > Bubble Style: iMessage's colours or the theme's, live. + /// Settings > Chief > Chief Chat > Bubble Style: iMessage's colours or the theme's, live. private func followBubbleStyle() { withObservationTracking { bubbleStyle = DesignSettings.shared.homeChiefBubblesThemed ? .theme : .iMessage diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift index b0173f355a7a..df50ecbac231 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHomeEngine/HomeChiefSettingsView.swift @@ -175,7 +175,6 @@ public final class HomeChiefSettingsView: NSView { // The rest of the Chief's settings (the pet, the chat's look, every Chief) live in Settings. let allSettings = HomeChiefLinkButton(title: HomeEngineStrings.allChiefSettings, target: self, action: #selector(openAllSettings)) allSettings.setAccessibilityIdentifier("cmux.home.chief.allSettings") - allSettings.setAccessibilityLabel(HomeEngineStrings.allChiefSettings) stack.addArrangedSubview(allSettings) stack.setCustomSpacing(Metrics.space4, after: allSettings) addFullWidth(diagnosticsRow()) diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift index 1d430630e6fb..0f9a067ea8f5 100644 --- a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/HomeChiefSettingsViewTests.swift @@ -58,7 +58,7 @@ import Testing var opened = 0 view.onAllSettings = { opened += 1 } let link = try #require(Self.subviews(of: view).compactMap { $0 as? NSButton } - .first { $0.identifier?.rawValue == "cmux.home.chief.allSettings" }) + .first { $0.accessibilityIdentifier() == "cmux.home.chief.allSettings" }) #expect(!link.isHidden) #expect(link.accessibilityLabel() == HomeEngineStrings.allChiefSettings) link.performClick(nil) diff --git a/release-notes/next/highlights/chief-settings-page.md b/release-notes/next/highlights/chief-settings-page.md index ed834bc02983..5e501ff36a94 100644 --- a/release-notes/next/highlights/chief-settings-page.md +++ b/release-notes/next/highlights/chief-settings-page.md @@ -1,4 +1,5 @@ title: Chief has its own page in Settings category: improved +action: openSettings | Open Settings -Settings > Chief holds every Chief setting: each Chief's name, picture and backend, the chat's look and the Chief pet. All Chief Settings… in the Chief's name-pill popover opens it. +Settings > Chief holds every Chief setting: each Chief's name, picture and backend, the chat's look and the Chief pet. All Chief Settings… in the Chief's settings, under its name at the top of Home, opens it. diff --git a/webviews/src/pages/home-channels/ChiefPage.tsx b/webviews/src/pages/home-channels/ChiefPage.tsx index 0dbdfde1d3ee..53ac73d7db64 100644 --- a/webviews/src/pages/home-channels/ChiefPage.tsx +++ b/webviews/src/pages/home-channels/ChiefPage.tsx @@ -1,5 +1,5 @@ // A Chief's editor as a page (u2586): New Chief (#/new/chief) and Edit Chief (#/chief//edit) -// on the right side of Home, and the same component in Settings > Agents > Chiefs. Name, role and +// on the right side of Home, and the same component in Settings > Chief > Chiefs. Name, role and // picture; personality and instructions; the backend (an acpmux harness, its model and effort, or // one the person brings); the grant (tools, harnesses); the lock; and the record's history with // Undo. Every write goes through `service` (chiefEditing.ts). Creating a Chief and the gesture diff --git a/webviews/src/pages/home-channels/chief-editor.css b/webviews/src/pages/home-channels/chief-editor.css index a27236224f4f..1dca2eebff86 100644 --- a/webviews/src/pages/home-channels/chief-editor.css +++ b/webviews/src/pages/home-channels/chief-editor.css @@ -1,4 +1,4 @@ -/* The Chief editor page (ChiefPage.tsx), in Home's right side and in Settings > Agents > Chiefs. +/* The Chief editor page (ChiefPage.tsx), in Home's right side and in Settings > Chief > Chiefs. Self-contained: its colors come from the shared web theme (`--cmux-*`), with system fallbacks, so it draws the same on both pages. No blue: hover and selection are the foreground at low alpha. */ .chief-editor { diff --git a/webviews/src/pages/settings/chiefsCard.test.tsx b/webviews/src/pages/settings/chiefsCard.test.tsx index a1d0cdbf7768..ca5284459bb8 100644 --- a/webviews/src/pages/settings/chiefsCard.test.tsx +++ b/webviews/src/pages/settings/chiefsCard.test.tsx @@ -1,4 +1,4 @@ -// Settings > Agents > Chiefs (u2586): every Chief with its picture, name, role, backend and lock; +// Settings > Chief > Chiefs (u2586): every Chief with its picture, name, role, backend and lock; // a row opens the same editor as Home (a page in the card, never a dialog), New Chief opens it // empty, and Save goes through the host's page relay (`cmux.chief.profile.*`). import { act } from "react"; @@ -14,7 +14,7 @@ const button = (scope: ParentNode, label: string) => [...scope.querySelectorAll("button")].find((node) => node.textContent === label)!; test("Chiefs lists every Chief: picture, name, role, backend and lock", async () => { - const page = await renderPage({ path: "/settings/agents" }); + const page = await renderPage({ path: "/settings/chief" }); const rows = [...card(page.container).querySelectorAll("[data-chief]")]; expect(rows.map((row) => row.dataset.chief)).toEqual(["agent_chief", "agent_release"]); expect(rows[0]!.textContent).toContain("Chief"); @@ -29,7 +29,7 @@ test("Chiefs lists every Chief: picture, name, role, backend and lock", async () test("a row names the backend the way Home and the Chief editor do, never by its raw id", async () => { const page = await renderPage({ - path: "/settings/agents", + path: "/settings/chief", setup: (provider) => { provider.chiefs[0]!.engine = { harness: "default", model: "opus" }; provider.chiefs[1]!.engine = { harness: "unii" }; @@ -45,7 +45,7 @@ test("a row names the backend the way Home and the Chief editor do, never by its test("a row shows a chosen model even when no harness is named", async () => { const page = await renderPage({ - path: "/settings/agents", + path: "/settings/chief", setup: (provider) => { provider.chiefs[0]!.engine = { model: "opus" }; provider.chiefs[1]!.engine = { harness: "default" }; @@ -60,7 +60,7 @@ test("a row shows a chosen model even when no harness is named", async () => { }); test("a row opens the same editor as Home, and Save goes through the host's relay", async () => { - const page = await renderPage({ path: "/settings/agents" }); + const page = await renderPage({ path: "/settings/chief" }); await act(async () => card(page.container).querySelector('[data-chief="agent_release"]')!.click()); await settle(); const editor = card(page.container).querySelector("section.chief-editor"); @@ -87,7 +87,7 @@ test("a row opens the same editor as Home, and Save goes through the host's rela }); test("New Chief opens the editor empty; Back returns to the list", async () => { - const page = await renderPage({ path: "/settings/agents" }); + const page = await renderPage({ path: "/settings/chief" }); await act(async () => button(card(page.container), "New Chief").click()); await settle(); const editor = card(page.container).querySelector('section.chief-editor[data-chief-page="new"]')!; diff --git a/webviews/src/pages/settings/components/ChiefsCard.tsx b/webviews/src/pages/settings/components/ChiefsCard.tsx index 86623e7f0b92..89f2a7bde0a7 100644 --- a/webviews/src/pages/settings/components/ChiefsCard.tsx +++ b/webviews/src/pages/settings/components/ChiefsCard.tsx @@ -1,4 +1,4 @@ -// Settings > Agents > Chiefs (u2586): every Chief (picture, name, role, backend, locked), each row +// Settings > Chief > Chiefs (u2586): every Chief (picture, name, role, backend, locked), each row // opening the same editor Home shows (home-channels/ChiefPage.tsx), and New Chief. The card has // no daemon connection of its own: it reads and writes through the host's page relay to the Chief // owner (`cmux.chief.profile.*`) and the host's harness center (`cmux.chief.backend.*`), as Home's diff --git a/webviews/src/pages/settings/settings.gallery.ts b/webviews/src/pages/settings/settings.gallery.ts index 5a57df246ef2..88b48df7e9f6 100644 --- a/webviews/src/pages/settings/settings.gallery.ts +++ b/webviews/src/pages/settings/settings.gallery.ts @@ -722,12 +722,12 @@ Object.assign(variants, { steps: [wait("[data-agent-harness]")], note: "Every harness acpmux knows: kind, source, a probe problem; Check and Remove on user profiles.", }), - // Settings > Agents > Chiefs (u2586): every Chief; a row opens the same editor as Home. - "agents-chiefs": variant("agents", { + // Settings > Chief > Chiefs (u2586): every Chief; a row opens the same editor as Home. + "chief-chiefs": variant("chief", { steps: [wait('[data-card="chiefs"] [data-chief]')], note: "Chiefs: picture, name, role, backend and a Locked badge; New Chief opens the editor.", }), - "agents-chief-editor": variant("agents", { + "chief-editor": variant("chief", { steps: [click('[data-chief="agent_release"]'), wait('[data-card="chiefs"] section.chief-editor')], note: "A Chief row opens its editor in the card: backend, lock and history, never a dialog.", }), From bab8dd6193302688a41ce06bbf19de0ec995f5ad Mon Sep 17 00:00:00 2001 From: Leo Li Date: Wed, 21 Oct 2026 06:20:59 +0000 Subject: [PATCH 4/4] Regenerate the settings exports for Settings > Chief (PR autofix run 39553280427) The PR autofix leaves its repairs as an artifact on pull_request runs; this is that patch, applied unchanged. Settings > Chief replaces the chief-pet category; the rest (notifications, trust, sidebar defaults) is base source the committed exports had not caught up with. Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39553280427 Co-Authored-By: Claude Opus 5.5 --- docs/mdm/com.manaflow.cmux.json | 6 ++-- docs/mdm/com.manaflow.cmux.plist | 6 ++-- docs/mdm/managed-preferences.md | 6 ++-- schemas/defaults/cmux-next.json | 10 ++++-- .../settings-schema.sources.sha256 | 8 ++--- schemas/settings/settings-schema.json | 36 +++++++++---------- 6 files changed, 38 insertions(+), 34 deletions(-) diff --git a/docs/mdm/com.manaflow.cmux.json b/docs/mdm/com.manaflow.cmux.json index 56758b483b3b..cd34878a8ec9 100644 --- a/docs/mdm/com.manaflow.cmux.json +++ b/docs/mdm/com.manaflow.cmux.json @@ -2663,7 +2663,7 @@ "type" : "number" }, "notifications.attention.moveToTop" : { - "default" : true, + "default" : false, "description" : "A notification moves its workspace to the top of the unpinned rows, unless you are looking at its pane.", "title" : "Move the Workspace to the Top", "type" : "boolean" @@ -2687,7 +2687,7 @@ "type" : "boolean" }, "notifications.attention.style" : { - "default" : "blink", + "default" : "steady", "description" : "notifications.attention.style", "enum" : [ "blink", @@ -2719,7 +2719,7 @@ "type" : "string" }, "notifications.dismissal" : { - "default" : "focus", + "default" : "click", "description" : "notifications.dismissal", "enum" : [ "keystroke", diff --git a/docs/mdm/com.manaflow.cmux.plist b/docs/mdm/com.manaflow.cmux.plist index ecb4ef888756..b3869140b1f4 100644 --- a/docs/mdm/com.manaflow.cmux.plist +++ b/docs/mdm/com.manaflow.cmux.plist @@ -6429,7 +6429,7 @@ pfm_default - focus + click pfm_name notifications.dismissal pfm_range_list @@ -6683,7 +6683,7 @@ pfm_default - blink + steady pfm_name notifications.attention.style pfm_range_list @@ -6780,7 +6780,7 @@ pfm_default - + pfm_description A notification moves its workspace to the top of the unpinned rows, unless you are looking at its pane. pfm_name diff --git a/docs/mdm/managed-preferences.md b/docs/mdm/managed-preferences.md index e220a281b24c..4353698774f9 100644 --- a/docs/mdm/managed-preferences.md +++ b/docs/mdm/managed-preferences.md @@ -457,7 +457,7 @@ Files: `com.manaflow.cmux.plist` (ProfileManifests: iMazing Profile Editor, Prof | `home.channelsEnabled` | boolean | `false` | | Channels. Show Channels below Home in the sidebar. You can also turn it on or off from the command palette. | | `home.chiefPetEnabled` | boolean | `false` | | Show Chief Pet. A small Chief floats over every app and shows agent events above it. Drag it anywhere; click it to message the Chief or reply to a session. While it shows, ⌃⌥⌘C opens its reply box from any app. | | `home.chiefPetMascot` | string | `"orb"` | `orb`, `orb-spark`, `orb-hood`, `machine`, `machine-cyan`, `machine-blue`, `moon`, `moon-blue`, `fox` | Character | -| `notifications.dismissal` | string | `"focus"` | `keystroke`, `click`, `focus`, `explicit`, `timeout`, `never` | Clear Notification When | +| `notifications.dismissal` | string | `"click"` | `keystroke`, `click`, `focus`, `explicit`, `timeout`, `never` | Clear Notification When | | `notifications.timeoutSeconds` | real | `30` | 1 to 86400 | Timeout. Used when a source clears after a timeout. | | `notifications.sources.agent.dismissal` | string | | `keystroke`, `click`, `focus`, `explicit`, `timeout`, `never` | Agents | | `notifications.sources.terminal.dismissal` | string | | `keystroke`, `click`, `focus`, `explicit`, `timeout`, `never` | Terminal Programs | @@ -473,7 +473,7 @@ Files: `com.manaflow.cmux.plist` (ProfileManifests: iMazing Profile Editor, Prof | `feed.mirrorNotifications.agents` | boolean | `true` | | Copy Agent Notifications to the Feed. Notifications from agents and cmux notify go to your cmux account's feed and can reach your iPhone. | | `feed.mirrorNotifications.terminal` | string | `"off"` | `off`, `title`, `full` | Copy Terminal Notifications to the Feed. Notifications that programs send through the terminal can contain secrets. Off sends nothing to your cmux account. | | `feed.agentPermissionPrompts` | boolean | `false` | | Send Agent Permission Requests to the Feed. Each request's tool and command summary goes to your own cmux feed, so your iPhone can answer it. | -| `notifications.attention.style` | string | `"blink"` | `blink`, `pulse`, `steady`, `none` | Style | +| `notifications.attention.style` | string | `"steady"` | `blink`, `pulse`, `steady`, `none` | Style | | `notifications.attention.color` | string | | | Color | | `notifications.attention.width` | real | `2` | 0.5 to 8 | Width | | `notifications.attention.blinkCount` | real | `2` | 1 to 10 | Blinks | @@ -481,7 +481,7 @@ Files: `com.manaflow.cmux.plist` (ProfileManifests: iMazing Profile Editor, Prof | `notifications.attention.persist` | boolean | `true` | | Keep Ring Until Read | | `notifications.attention.showOnTab` | boolean | `true` | | Mark the Tab | | `notifications.attention.showOnSidebar` | boolean | `true` | | Mark the Sidebar Row | -| `notifications.attention.moveToTop` | boolean | `true` | | Move the Workspace to the Top. A notification moves its workspace to the top of the unpinned rows, unless you are looking at its pane. | +| `notifications.attention.moveToTop` | boolean | `false` | | Move the Workspace to the Top. A notification moves its workspace to the top of the unpinned rows, unless you are looking at its pane. | | `notifications.mutedWorkspaces` | array | `[]` | | Muted Workspaces. Workspace ids whose notifications are silent. Mute a workspace from its sidebar row menu. | | `labs.previewFeatures` | boolean | `false` | | Show Preview Features. Unfinished surfaces, such as the agent session's coverage label and Pull requests view. | | `labs.classicHome` | boolean | `false` | | Classic Home. Show Home as a full page instead of a workspace with the Chief docked on the left. Takes effect after cmux restarts. | diff --git a/schemas/defaults/cmux-next.json b/schemas/defaults/cmux-next.json index cb2b27f651ca..fe3069595bcd 100644 --- a/schemas/defaults/cmux-next.json +++ b/schemas/defaults/cmux-next.json @@ -244,6 +244,9 @@ "setting.agents.subsessions.enabled": true, "setting.agents.subsessions.maxChildren": 50, "setting.agents.subsessions.maxDepth": 10, + "setting.agents.trust.autoTrust": false, + "setting.agents.trust.ownOrgs": [], + "setting.agents.trust.projectRoots": [], "setting.announcements.enabled": true, "setting.announcements.fetch": true, "setting.app.globalHotKey": false, @@ -510,14 +513,14 @@ "setting.notifications.attention.blinkCount": 2, "setting.notifications.attention.color": null, "setting.notifications.attention.duration": 3, - "setting.notifications.attention.moveToTop": true, + "setting.notifications.attention.moveToTop": false, "setting.notifications.attention.persist": true, "setting.notifications.attention.showOnSidebar": true, "setting.notifications.attention.showOnTab": true, - "setting.notifications.attention.style": "blink", + "setting.notifications.attention.style": "steady", "setting.notifications.attention.width": 2, "setting.notifications.desktop": "unlessFocused", - "setting.notifications.dismissal": "focus", + "setting.notifications.dismissal": "click", "setting.notifications.dockBadge": true, "setting.notifications.dockBounce": "once", "setting.notifications.mutedWorkspaces": [], @@ -584,6 +587,7 @@ "setting.sidebar.priorityView.enabled": false, "setting.sidebar.priorityView.shown": true, "setting.sidebar.sectionLook": "quiet", + "setting.sidebar.sessionTree": false, "setting.sidebar.showChats": true, "setting.sidebar.showProfileControl": true, "setting.sidebar.showProjects": true, diff --git a/schemas/settings-export/settings-schema.sources.sha256 b/schemas/settings-export/settings-schema.sources.sha256 index 29a8ab7a16ed..f826682df8fe 100644 --- a/schemas/settings-export/settings-schema.sources.sha256 +++ b/schemas/settings-export/settings-schema.sources.sha256 @@ -200,7 +200,7 @@ f6190cfeca4fa8b6e7a8fc495646e4f1febdbf801e79cac5030ae811aa5e28c1 Packages/macOS 69d7e7fe1d80c27c5ca44664c5b145d3151b9f3374f7c1885d8d66168c2ffdf4 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/LinkRules/BrowserExternalURLWildcardToken.swift -1d47e0ae516713f9b7562a5a080c5604583d9a3a541663e29ad3434cf95b9c45 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings +3b9c160efd1683ab8347a0fc6be841c08eb24d3cc9744be414f6acdeec72f656 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings ff3c704da19b51b151a7686af2299ae672d5c20ab9a1070b954cb5f7729c14ac Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Managed/Chrome/CFChromePolicyReader.swift @@ -260,11 +260,11 @@ abf3127556a9de512a7e2858c7b56811b336dd991aa01789ea2dcf7ec1190e35 Packages/macOS 4448d64ec314c406588edc6620c5c4afaa33fa6a43273fbbdb1014f415881e16 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/NotificationConfigParser.swift -cbc06bcc1f9eb8df665ef9f6a308f709a50a2caaf156c88f01a93e11640cea0f Packages/macOS/CmuxNext/Sources/CmuxNextSettings/NotificationModes.swift +1108376131466adde6a89c2110b5d57f75fc77c1cc41061dc1e27814456bad17 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/NotificationModes.swift 37e6fae5a0f758bda1d5322fae9b45e0a66404c6d49370fa4035c040427c5fda Packages/macOS/CmuxNext/Sources/CmuxNextSettings/NotificationPolicy.swift -b27c612ea41c047c639fd0b71f504d2cc80f860b42a516209c56c449916f3892 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/NotificationPreferences.swift +6aaa83a774f471cb15e7fe3adf4fb7538cc76af96ee5857122b6c25a22264c8d Packages/macOS/CmuxNext/Sources/CmuxNextSettings/NotificationPreferences.swift a9611156320b923ccd7504e408c9f327693312550f8b921d0e8d4d16178095d1 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/NotificationSource.swift @@ -344,7 +344,7 @@ ea1a09694740863848c15a76d98f32e0bfe1b3a6d6ab47711beb665d8e2030b6 Packages/macOS 3df34a09959f7b325f9e8450944ee5d92410df990ed26b3a0ea09bd88f360b54 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingText.swift -d7fe84ad82b8f7b7b23a09bcc743546a79eef64765f19dcb5f0618d318bc3ec0 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsPageLayout.swift +a4c46c18eeb1a70b78e16569ad501e4214717612f80ea7b6ee04373f7a786b73 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsPageLayout.swift 1a441b78de00617b589e7581c8a0de433b88e5a239dd0f6321099e87be61dff0 Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift diff --git a/schemas/settings/settings-schema.json b/schemas/settings/settings-schema.json index 3b4646b5648e..87cf7bdc6935 100644 --- a/schemas/settings/settings-schema.json +++ b/schemas/settings/settings-schema.json @@ -747,16 +747,6 @@ "text" : "Agent Chat" } }, - { - "key" : "settings.group.chiefChat", - "rows" : [ - "home.chiefBubbleStyle" - ], - "title" : { - "key" : "settings.group.chiefChat", - "text" : "Chief Chat" - } - }, { "key" : "settings.group.computerUse", "rows" : [ @@ -827,7 +817,6 @@ "trail" : [ "harnesses", "agentHarnesses", - "chiefs", "computerUse" ] }, @@ -839,6 +828,16 @@ ], "groups" : [ + { + "key" : "settings.group.chiefChat", + "rows" : [ + "home.chiefBubbleStyle" + ], + "title" : { + "key" : "settings.group.chiefChat", + "text" : "Chief Chat" + } + }, { "key" : "settings.group.chiefPet", "rows" : [ @@ -851,14 +850,15 @@ } } ], - "id" : "chief-pet", + "id" : "chief", "lead" : [ + "chiefs", "chiefPet" ], - "symbol" : "pawprint", + "symbol" : "crown", "title" : { - "key" : "settings.category.chiefPet", - "text" : "Chief Pet" + "key" : "settings.category.chief", + "text" : "Chief" }, "trail" : [ @@ -30927,7 +30927,7 @@ "consumers" : [ "cmux-next" ], - "default" : "focus", + "default" : "click", "default_label" : null, "group" : { "key" : "settings.group.dismissal", @@ -31935,7 +31935,7 @@ "consumers" : [ "cmux-next" ], - "default" : "blink", + "default" : "steady", "default_label" : null, "group" : { "key" : "settings.group.attention", @@ -32302,7 +32302,7 @@ "consumers" : [ "cmux-next" ], - "default" : true, + "default" : false, "default_label" : null, "group" : { "key" : "settings.group.attention",