Merge nucleic/olive-slate-falcon-oah6 into dev

This commit is contained in:
2026-08-05 20:26:58 -07:00
parent 9c6a5a649c
commit f2ac08c004
3 changed files with 13 additions and 5 deletions
@@ -39,7 +39,8 @@ enum SandboxToolDisplay {
case "linux_vm_exec", "linux_vm_control": "Linux VM"
case "linux_vm_computer", "linux_vm_computer_batch": "Linux VM screen"
case "linux_container": "Linux container"
case "nucleic_supervise": "Supervising subagents"
case "nucleic_supervise": "Supervising subagents"
case AskUserQuestion.nucleicToolName: "Question for you"
default: nil
}
}
@@ -68,7 +69,8 @@ enum SandboxToolDisplay {
case "mac_vm_request_operator": "Waiting for you to drive the VM…"
case "mac_vm_control": "Managing the macOS VM…"
case "linux_vm_control": "Managing the Linux VM…"
case "nucleic_supervise": "Waiting on subagents…"
case "nucleic_supervise": "Waiting on subagents…"
case AskUserQuestion.nucleicToolName: "Waiting on your answer…"
default: nil
}
}
@@ -86,7 +88,8 @@ enum SandboxToolDisplay {
case "mac_vm_clear_notifications": "bell.slash"
case "mac_vm_request_operator": "hand.raised"
case "mac_vm_control", "linux_vm_control": "power"
case "nucleic_supervise": "eye"
case "nucleic_supervise": "eye"
case AskUserQuestion.nucleicToolName: "questionmark.bubble"
default: nil
}
}
@@ -121,6 +124,11 @@ enum SandboxToolDisplay {
// Takes no arguments: nothing to print beside the label.
case "mac_vm_clear_notifications":
return nil
case AskUserQuestion.nucleicToolName:
guard let questions = AskUserQuestion.questions(from: input),
let first = questions.first else { return nil }
let suffix = questions.count > 1 ? " +\(questions.count - 1) more" : ""
return singleLine(first.question) + suffix
default:
return nil
}
@@ -573,6 +573,7 @@ struct LockLineRow: View {
/// SF Symbols for the common tools + file-change kinds, so a glance reads the action.
enum ToolGlyph {
static func icon(_ name: String) -> String {
if AskUserQuestion.matches(toolName: name) { return "questionmark.bubble" }
switch name {
case "Bash", "Shell": return "terminal"
case "Read": return "doc.text"
@@ -581,7 +582,6 @@ enum ToolGlyph {
case "WebFetch", "WebSearch": return "globe"
case "Task", "Agent", ToolGroup.orchestraSubagentToolName: return "person.2"
case "TodoWrite": return "checklist"
case "AskUserQuestion": return "questionmark.bubble"
case ExitPlanMode.toolName, PlanReview.toolName, PlanReview.qualifiedToolName:
return "list.bullet.clipboard"
case HostCommandSummary.hostExecToolName: return "desktopcomputer"
@@ -120,7 +120,7 @@ struct ToolGroup: Equatable {
var isOrchestration: Bool {
name == "Task" || name == "Agent" || name == Self.orchestraSubagentToolName
}
var isAskUserQuestion: Bool { name == "AskUserQuestion" }
var isAskUserQuestion: Bool { AskUserQuestion.matches(toolName: name) }
var isExitPlanMode: Bool { PlanReview.isPlanTool(name) }
/// The literal shell command a `Bash` call ran, if any (nil for every other tool). Used to