Open task views in a sheet over the left pane

This commit is contained in:
Ian Gulliver
2026-10-21 17:00:07 -07:00
parent ccb08ab6ec
commit 193401021a
22 changed files with 698 additions and 546 deletions
+9 -8
View File
@@ -8,8 +8,6 @@ let goKeys: Set<String> = ["k", "n", "p", "l", "s", "/"]
@MainActor
func runGo(_ key: String, _ store: Store, _ overlays: Overlays) {
overlays.image = nil
overlays.diagram = nil
switch key {
case "k":
overlays.openSwitcher(store)
@@ -21,9 +19,12 @@ func runGo(_ key: String, _ store: Store, _ overlays: Overlays) {
case "p":
overlays.window?.makeFirstResponder(nil)
overlays.projectFocus += 1
store.focusTab(.project)
if let id = store.selectedTaskId {
store.sheet = Sheet(owner: .task(id), view: .tab(.project))
}
case "l":
overlays.switcher?.close()
store.sheet = nil
overlays.leftTab = .lead
overlays.leadFocus += 1
case "s":
@@ -50,7 +51,7 @@ func createTask(_ projectId: String, _ body: Components.Schemas.TaskCreate, _ st
do {
let task = try await store.api.client.createTask(path: .init(projectId: projectId), body: .json(body)).created.body.json
store.composerFocus = task.id
store.focusTask(task.id, .transcript)
store.focusTask(task.id)
} catch {
overlays.showAlert(errorText(error))
}
@@ -71,11 +72,11 @@ private let shortcuts: [(String, [(String, String)])] = [
("⌘K", "Switch task, or create one"),
("⌘N", "New task in the current project"),
("⌘P", "Open the Project tab"),
("⌘L", "Open the Lead tab and its composer"),
("⌘L", "Open the Lead tab and its composer, closing any view opened over a pane"),
("⌘S", "Merge the right pane's task, or discard it when the agent suggests discarding"),
("⌘[ ⌘]", "Bring the previous or next server's window forward"),
("⌘/", "Show these shortcuts"),
("Esc", "Close the switcher or a dialog"),
("Esc", "Close the switcher, a dialog, or a view opened over a pane"),
]),
("Task switcher", [
("Tab", "Switch between the text and the list"),
@@ -298,7 +299,7 @@ final class SwitcherModel {
store.showQuestion(taskId)
} else {
store.composerFocus = taskId
store.focusTask(taskId, .transcript)
store.focusTask(taskId)
}
}
@@ -316,7 +317,7 @@ final class SwitcherModel {
let ids = try await uploadImages(store.api, imgs)
let task = try await store.api.client.createTask(path: .init(projectId: projectId), body: .json(.init(prompt: message.isEmpty ? nil : message, images: ids, model: store.defaultModel))).created.body.json
store.composerFocus = task.id
store.focusTask(task.id, .transcript)
store.focusTask(task.id)
} catch {
overlays.openSwitcher(store)
if let s = overlays.switcher {