native macOS codings agent orchestrator prowl.onev.cat
Something went wrong. Try again.
Swift
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051// ProwlCLI/Commands/SelectorOptions.swift// Shared target selector options for commands that support them.
import ArgumentParserimport ProwlCLIShared
struct SelectorOptions: ParsableArguments { @Option(name: .shortAndLong, help: "Auto-resolve target by pane/tab UUID or worktree id/name/path.") var target: String?
@Option(name: .long, help: "Target worktree by id, name, or path.") var worktree: String?
@Option(name: .long, help: "Target tab by UUID or short handle (for example, t4).") var tab: String?
@Option(name: .long, help: "Target pane by UUID or short handle (for example, p3).") var pane: String?
/// Validate mutual exclusivity and return typed selector. func resolve() throws -> TargetSelector { let provided = [target, worktree, tab, pane].compactMap { $0 } guard provided.count <= 1 else { throw ExitError( code: CLIErrorCode.invalidArgument, message: "At most one target selector (--target, --worktree, --tab, --pane) is allowed." ) } if let a = target { return .auto(a) } if let w = worktree { return .worktree(w) } if let t = tab { return .tab(t) } if let p = pane { return .pane(p) } return .none }
/// Resolve with an additional auto-target value from a positional argument. func resolve(positionalTarget: String?) throws -> TargetSelector { let flagSelector = try resolve() if let positionalTarget { guard case .none = flagSelector else { throw ExitError( code: CLIErrorCode.invalidArgument, message: "Use either a positional target or one selector flag (--target, --worktree, --tab, --pane)." ) } return .auto(positionalTarget) } return flagSelector }}