Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
f008be6
feat: rebrand desktop sections for Cael
May 23, 2026
d47fb8e
checkpoint: preserve Cael desktop native shell state
May 24, 2026
407ad89
checkpoint: preserve pending command center desktop state
May 24, 2026
bab4391
feat: render command center summary in desktop
May 24, 2026
b50c5c5
chore: checkpoint Cael chat avatar assets
May 24, 2026
adac46b
feat: render command center sections in desktop
May 24, 2026
c271270
chore: checkpoint generated Cael image assets
May 24, 2026
909c647
feat: cache command center snapshots in desktop
May 24, 2026
97935bc
fix: show Cael as the default desktop agent
May 24, 2026
c54ce6c
fix: prevent desktop session avatar resource crash
May 24, 2026
0917d63
fix: shorten workspace API timeout
May 25, 2026
954adee
feat: add native command center mirror sections
May 25, 2026
c8c27c5
feat: mirror web command center feature panels
May 25, 2026
543fd98
feat: add native Workspace profiles parity
May 25, 2026
4dc35da
fix: unlock native chat after accepted send
May 25, 2026
072f710
feat: use workspace files API in native editor
May 25, 2026
1419eaf
feat: add native workspace file actions
May 25, 2026
66bb53d
feat: surface tool artifacts natively
May 25, 2026
3902528
feat: add native file upload previews
May 25, 2026
2e12551
feat: show shared workspace tasks in kanban
May 25, 2026
8456346
feat: use shared workspace jobs api
May 25, 2026
3d967b2
feat: add native knowledge fabric search
May 25, 2026
484c595
feat: add native memory file browser
May 25, 2026
bc3b42f
feat: add native mcp server panel
May 25, 2026
9d0fe8f
fix: make workspace chat fallback accepted-send
May 25, 2026
8b0c9c8
feat: show workspace chat active runs
May 25, 2026
e02492f
feat: add native workspace skills marketplace
May 25, 2026
1c201d2
feat: prioritize cael model usage roster
May 25, 2026
3957508
feat: use canonical hermes task ledger
May 25, 2026
e272392
fix: route desktop chat through workspace ledger
May 25, 2026
25f889e
feat: add workspace shared terminal tabs
May 25, 2026
213762b
feat: add native mcp mutation controls
May 25, 2026
073cd10
feat: add knowledge session state writer
May 25, 2026
be7d0cf
feat: add native operations agent controls
May 25, 2026
3eefe27
feat: enrich native operations agent editing
May 25, 2026
6ba5db8
feat: attach desktop to shared terminal sessions
May 25, 2026
19c7d5f
feat: browse shared terminal sessions
May 25, 2026
03ae161
feat: dispatch second brain workflows
May 25, 2026
31d14b3
feat: add native mcp registry views
May 25, 2026
28594ba
feat: show workspace job output
May 25, 2026
b36945a
chore: label native watchdog jobs
May 25, 2026
3519334
feat: review workspace file saves
May 25, 2026
8d24671
feat: launch workspace task sessions
May 25, 2026
3752b36
feat: search mcp marketplace in desktop
May 25, 2026
9ea1e59
feat: manage cael model config from usage
May 25, 2026
702dfa5
feat: add native operations chat jobs
May 25, 2026
5032075
feat: add native swarm runtime controls
May 25, 2026
0b55702
feat: add native conductor mission controls
May 25, 2026
fd00e6e
feat: surface knowledge vault root in desktop
May 25, 2026
5788730
feat: show shared terminal session labels
May 25, 2026
6f7a79a
feat: add native MCP log tail control
May 25, 2026
839ff38
feat: enrich session active run rendering
May 25, 2026
37e8152
fix: create workspace sessions before desktop sends
May 25, 2026
ad03a0f
feat: rename shared terminal sessions
May 25, 2026
631fd99
feat: pick cael models from workspace catalog
May 26, 2026
ecb3b5a
feat: tail workspace chat events
May 26, 2026
6679253
feat: show model context usage in desktop
May 26, 2026
aff738a
feat: show swarm memory and reports
May 26, 2026
010103f
fix: stabilize swarm panel layout
May 26, 2026
fc7636b
feat: show accepted workspace chat runs
May 26, 2026
e6ffd16
fix: load desktop sessions from workspace api
May 26, 2026
1851370
fix: decode structured chat message content
May 26, 2026
9b8f243
fix: keep sessions in chat mode
May 26, 2026
3dbb38c
fix: support image paste in desktop chat
May 26, 2026
174de08
Remove separate transcript mode from desktop chat
May 27, 2026
d2e68b1
Use shared chat runtime endpoints
May 27, 2026
16e6d2b
Deduplicate session chat messages
May 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,395 changes: 1,206 additions & 189 deletions Sources/HermesDesktop/App/AppState.swift

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion Sources/HermesDesktop/App/HermesDesktopApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ struct HermesDesktopApp: App {
@StateObject private var appState = AppState()

var body: some Scene {
WindowGroup("Hermes Desktop") {
WindowGroup("Cael Desktop") {
RootView()
.environmentObject(appState)
.frame(minWidth: 940, minHeight: 520)
.tint(HermesTheme.accent)
.preferredColorScheme(.dark)
.background(HermesTheme.background)
.background(HermesWindowTitleBarConfigurator())
}
.defaultSize(width: 1360, height: 860)
Expand Down
15 changes: 11 additions & 4 deletions Sources/HermesDesktop/App/HermesDesktopCommands.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,18 @@ struct HermesDesktopCommands: Commands {

CommandMenu(L10n.string("Navigate")) {
ForEach(AppSection.allCases) { section in
Button(L10n.string("Show %@", section.title)) {
appState.requestSectionSelection(section)
if let shortcut = section.navigationShortcutKey {
Button(L10n.string("Show %@", section.title)) {
appState.requestSectionSelection(section)
}
.keyboardShortcut(shortcut, modifiers: [.command])
.disabled(!appState.isSectionAvailable(section))
} else {
Button(L10n.string("Show %@", section.title)) {
appState.requestSectionSelection(section)
}
.disabled(!appState.isSectionAvailable(section))
}
.keyboardShortcut(section.navigationShortcutKey, modifiers: [.command])
.disabled(!appState.isSectionAvailable(section))
}
}
}
Expand Down
73 changes: 67 additions & 6 deletions Sources/HermesDesktop/Models/AppSection.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,21 @@ enum AppSection: String, CaseIterable, Identifiable {
case overview
case files
case sessions
case mail
case contacts
case calendar
case workflows
case cronjobs
case kanban
case missionControl
case operations
case swarm
case usage
case memory
case skills
case integrations
case mcp
case profiles
case terminal

var id: String { rawValue }
Expand All @@ -24,21 +34,41 @@ enum AppSection: String, CaseIterable, Identifiable {
case .connections:
"Connections"
case .overview:
"Overview"
"Homebase"
case .files:
"Files"
"Artifacts"
case .sessions:
"Sessions"
"Cael Sessions"
case .mail:
"Mail"
case .contacts:
"Contacts"
case .calendar:
"Calendar"
case .workflows:
"Workflows"
case .cronjobs:
"Cron Jobs"
"Watchdogs"
case .kanban:
"Kanban"
"Tasks"
case .missionControl:
"Mission Control"
case .operations:
"Ops"
case .swarm:
"Swarm"
case .usage:
"Usage"
case .memory:
"Memory"
case .skills:
"Skills"
case .integrations:
"Integrations"
case .mcp:
"MCP"
case .profiles:
"Profiles"
case .terminal:
"Terminal"
}
Expand All @@ -54,22 +84,42 @@ enum AppSection: String, CaseIterable, Identifiable {
"doc.text"
case .sessions:
"bubble.left.and.bubble.right"
case .mail:
"envelope"
case .contacts:
"person.2"
case .calendar:
"calendar"
case .workflows:
"bookmark.square"
case .cronjobs:
"calendar.badge.clock"
case .kanban:
"rectangle.3.group"
case .missionControl:
"paperplane"
case .operations:
"person.2.wave.2"
case .swarm:
"person.3.sequence"
case .usage:
"chart.bar.xaxis"
case .memory:
"brain.head.profile"
case .skills:
"book.closed"
case .integrations:
"link"
case .mcp:
"point.3.connected.trianglepath.dotted"
case .profiles:
"person.crop.circle.badge.checkmark"
case .terminal:
"terminal"
}
}

var navigationShortcutKey: KeyEquivalent {
var navigationShortcutKey: KeyEquivalent? {
switch self {
case .connections:
return "1"
Expand All @@ -91,6 +141,17 @@ enum AppSection: String, CaseIterable, Identifiable {
return "9"
case .terminal:
return "0"
case .mail, .contacts, .calendar, .missionControl, .operations, .swarm, .memory, .integrations, .mcp, .profiles:
return nil
}
}

var isCommandCenterMirrorSection: Bool {
switch self {
case .mail, .contacts, .calendar, .missionControl, .operations, .swarm, .memory, .integrations, .mcp:
return true
case .connections, .overview, .files, .sessions, .workflows, .cronjobs, .kanban, .usage, .skills, .profiles, .terminal:
return false
}
}
}
Loading