···155155 the source to restart from the beginning when re-added.
156156 - returns `200 OK` if the source was found and removed, `404 Not Found` otherwise.
157157158158+#### firehose source management
159159+160160+- `GET /firehose/sources`: list all currently active firehose relay sources.
161161+ - returns a JSON array of `{ "url": string, "persisted": bool }`.
162162+ - `persisted: true` means the source was added via the API and is stored in the
163163+ database, it will survive a restart. `persisted: false` means the source
164164+ came from `RELAY_HOSTS` and is not written to the database.
165165+- `POST /firehose/sources`: add a firehose relay at runtime.
166166+ - body: `{ "url": string }`.
167167+ - the source is persisted to the database before the ingestor task is started.
168168+ - if a relay with the same URL already exists, it is replaced: the running
169169+ task is stopped and a new one is started. any existing cursor state for that
170170+ URL is preserved.
171171+ - returns `201 Created` on success.
172172+- `DELETE /firehose/sources`: remove a firehose relay at runtime.
173173+ - body: `{ "url": string }`.
174174+ - the ingestor task is stopped immediately.
175175+ - if the source was added via the API (`persisted: true`), it is removed from
176176+ the database and will not reappear on restart. if it came from `RELAY_HOSTS`
177177+ (`persisted: false`), only the running task is stopped; the source reappears
178178+ on the next restart.
179179+ - cursor state is not cleared. use `DELETE /cursors` separately if you want
180180+ the relay to restart from the beginning when re-added.
181181+ - returns `200 OK` if the relay was found and removed, `404 Not Found` otherwise.
182182+158183#### database operations
159184160185- `POST /db/train`: train zstd compression dictionaries for the `repos`,
···165190 in parallel. the crawler, firehose, and backfill worker are paused for the
166191 duration and restored on completion.
167192- `DELETE /cursors`: reset all stored cursors for a given URL. body: `{ "key": "..." }`
168168- where key is a URL. clears the relay crawler cursor, and any by-collection cursors
169169- associated with that URL. causes the next crawler pass to restart from the beginning.
193193+ where key is a URL. clears both the firehose cursor and the relay crawler cursor,
194194+ as well as any by-collection cursors associated with that URL. causes the next
195195+ firehose connection and crawler pass to restart from the beginning.
170196171197#### filter mode
172198