<!-- Generated by scripts/gen-docs.ts from the TSDoc in src/. Do not edit by hand. -->

# `reporters/index`

Source: [`src/reporters/index.ts`](https://github.com/AI-for-dev/combo/blob/main/src/reporters/index.ts)

Choosing a reporter, so the caller does not have to.

Requirement 3 of the project: you watch subagents work in herdr if it is
running, in pi's TUI otherwise, **without changing a line of calling code**.
That promise is this one function.

## `autoReporter`

*function*

```typescript
export function autoReporter(options: AutoReporterOptions = {}): EventListener { /* … */ }
```

The herdr reporter when we are inside herdr, the fallback otherwise.

Never throws, never warns: not running under herdr is the normal case, not a
degraded one.

## `AutoReporterOptions`

*type*

```typescript
export type AutoReporterOptions = HerdrOptions & {
	/** Used when herdr is absent. Defaults to {@link silentReporter}. */
	fallback?: EventListener;
};
```

{@link HerdrOptions}, plus what to do when there is no herdr to talk to.

## `combineReporters`

*function*

```typescript
export function combineReporters(...reporters: (EventListener | undefined)[]): EventListener { /* … */ }
```

Feeds one event stream to several reporters.

`onEvent` takes a single listener, so watching in two places at once - the pi
TUI *and* herdr - needs composing. Absent entries are dropped, which is what
makes `combineReporters(picture.reporter, createHerdrReporter())` read well:
`createHerdrReporter` returns `undefined` outside herdr.

One reporter throwing does not stop the others; that guarantee belongs to the
bus, and this keeps it when there is no bus in between.
