Resilience: LaunchAgent restarts BroV on crash; crashed Claude Code/Codex sessions get a resume button (optional auto); login and waiting status in the Claude/ChatGPT pills

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
maksarsanjeev
2026-10-06 22:56:39 +03:00
parent 37c01f991a
commit 0d40b78b26
9 changed files with 453 additions and 7 deletions
+20
View File
@@ -228,6 +228,26 @@ struct SettingsView: View {
// MARK: - General section
@ViewBuilder private var generalSection: some View {
GroupBox("Надёжность") {
VStack(alignment: .leading, spacing: 8) {
Toggle("Поднимать BroV, если он упал, и запускать при входе в систему", isOn: Binding(
get: { UserDefaults.standard.bool(forKey: BroVLaunchAgent.enabledKey) },
set: { on in
UserDefaults.standard.set(on, forKey: BroVLaunchAgent.enabledKey)
if on { BroVLaunchAgent.install(handOver: !BroVLaunchAgent.isManaged) }
else if BroVLaunchAgent.isInstalled { BroVLaunchAgent.uninstall() }
}))
Text("Если выйти через меню, BroV не вернётся. Работает для копии в ~/Applications.")
.font(.system(size: 11)).foregroundColor(.secondary)
Toggle("Сразу поднимать упавшие сессии Claude Code и Codex", isOn: Binding(
get: { UserDefaults.standard.bool(forKey: AgentWatch.autoKey) },
set: { UserDefaults.standard.set($0, forKey: AgentWatch.autoKey) }))
Text("Сессия считается упавшей, если её процесс пропал посреди работы. Без галочки в пилюле появится кнопка «поднять». Не чаще 2 раз за 10 минут.")
.font(.system(size: 11)).foregroundColor(.secondary)
}
.padding(6)
}
GroupBox("Звук") {
VStack(alignment: .leading, spacing: 10) {
Toggle("Включить звуки", isOn: $state.soundEnabled)