| 174 | } |
| 175 | |
| 176 | func runStatusSingle(query string) error { |
| 177 | flags := GetGlobalFlags() |
| 178 | scanDir := ResolveScanDir(nil) |
| 179 | |
| 180 | taskScanner := scanner.NewScanner(scanDir, flags.Verbose, flags.IgnoreDirs) |
| 181 | result, err := taskScanner.Scan() |
| 182 | if err != nil { |
| 183 | return fmt.Errorf("scan failed: %w", err) |
| 184 | } |
| 185 | |
| 186 | tasks := result.Tasks |
| 187 | makeFilePathsRelative(tasks, scanDir) |
| 188 | |
| 189 | // Swap stdin reader for fuzzy selection prompts |
| 190 | origReader := getStdinReader |
| 191 | getStdinReader = statusStdinReader |
| 192 | defer func() { getStdinReader = origReader }() |
| 193 | |
| 194 | task, err := resolveTask(query, tasks, statusExact, statusThreshold) |
| 195 | if err != nil { |
| 196 | return err |
| 197 | } |
| 198 | |
| 199 | var childrenIndex map[string][]*model.Task |
| 200 | if !statusMinimal { |
| 201 | childrenIndex = buildChildrenIndex(tasks) |
| 202 | } |
| 203 | |
| 204 | tasksByID := buildTasksByIDMap(tasks) |
| 205 | out := buildStatusOutputFromTask(task, childrenIndex, tasksByID) |
| 206 | |
| 207 | switch statusFormat { |
| 208 | case "text": |
| 209 | return outputStatusText(out, os.Stdout) |
| 210 | case "json": |
| 211 | return WriteJSON(os.Stdout, out) |
| 212 | case "yaml": |
| 213 | return WriteYAML(os.Stdout, out) |
| 214 | default: |
| 215 | return fmt.Errorf("unsupported format: %s (supported: text, json, yaml)", statusFormat) |
| 216 | } |
| 217 | } |
| 218 | |
| 219 | func outputStatusline(tasks []*model.Task, w io.Writer) error { |
| 220 | task := tasks[0] |