parseTUIFlags parses command-line flags for TUI mode
()
| 158 | |
| 159 | // parseTUIFlags parses command-line flags for TUI mode |
| 160 | func parseTUIFlags() *TUIOptions { |
| 161 | opts := &TUIOptions{ |
| 162 | PRDPath: "", // Will be resolved later |
| 163 | MaxIterations: 0, // 0 signals dynamic calculation (remaining stories + 5) |
| 164 | Verbose: false, |
| 165 | Merge: false, |
| 166 | Force: false, |
| 167 | NoRetry: false, |
| 168 | } |
| 169 | |
| 170 | // Pre-extract agent flags so they don't interfere with positional arg parsing |
| 171 | opts.Agent, opts.AgentPath, _ = parseAgentFlags(os.Args, 1) |
| 172 | |
| 173 | for i := 1; i < len(os.Args); i++ { |
| 174 | arg := os.Args[i] |
| 175 | |
| 176 | switch { |
| 177 | case arg == "--help" || arg == "-h": |
| 178 | printHelp() |
| 179 | return nil |
| 180 | case arg == "--version" || arg == "-v": |
| 181 | fmt.Printf("chief version %s\n", Version) |
| 182 | return nil |
| 183 | case arg == "--verbose": |
| 184 | opts.Verbose = true |
| 185 | case arg == "--merge": |
| 186 | opts.Merge = true |
| 187 | case arg == "--force": |
| 188 | opts.Force = true |
| 189 | case arg == "--no-retry": |
| 190 | opts.NoRetry = true |
| 191 | case arg == "--agent" || arg == "--agent-path": |
| 192 | i++ // skip value (already parsed by parseAgentFlags) |
| 193 | case strings.HasPrefix(arg, "--agent=") || strings.HasPrefix(arg, "--agent-path="): |
| 194 | // already parsed by parseAgentFlags |
| 195 | case arg == "--max-iterations" || arg == "-n": |
| 196 | // Next argument should be the number |
| 197 | if i+1 < len(os.Args) { |
| 198 | i++ |
| 199 | n, err := strconv.Atoi(os.Args[i]) |
| 200 | if err != nil { |
| 201 | fmt.Fprintf(os.Stderr, "Error: invalid value for %s: %s\n", arg, os.Args[i]) |
| 202 | os.Exit(1) |
| 203 | } |
| 204 | if n < 1 { |
| 205 | fmt.Fprintf(os.Stderr, "Error: --max-iterations must be at least 1\n") |
| 206 | os.Exit(1) |
| 207 | } |
| 208 | opts.MaxIterations = n |
| 209 | } else { |
| 210 | fmt.Fprintf(os.Stderr, "Error: %s requires a value\n", arg) |
| 211 | os.Exit(1) |
| 212 | } |
| 213 | case strings.HasPrefix(arg, "--max-iterations="): |
| 214 | val := strings.TrimPrefix(arg, "--max-iterations=") |
| 215 | n, err := strconv.Atoi(val) |
| 216 | if err != nil { |
| 217 | fmt.Fprintf(os.Stderr, "Error: invalid value for --max-iterations: %s\n", val) |
no test coverage detected