Skip to content

Adapter catalog

Every adapter the engine discovers and registers, grouped by package. The always-current list with full JSON-Schema config is the registry itself — GET /api/v1/adapters (and GET /api/v1/adapters/{type} for one adapter's schema). When this page and the registry disagree, the registry wins.

Type names are how you reference an adapter in pipeline YAML (type: web_scraper). Config classes are Pydantic models in the owning package; query the registry for the full field schema.

type:PurposeConfig class
sitemap_parserFetch a sitemap XML, extract URLsSitemapParserConfig
url_expanderFan-out: URL list → one message per URLURLExpanderConfig
web_scraperHTTP fetch with adaptive rate limitingWebScraperConfig
web_crawlerJS-rendered fetch via crawl4ai; detects and fans out PDF linksWebCrawlerConfig
pdf_fetcherDownload a crawl-discovered PDF, stage it for conversionPdfFetcherConfig
web_content_storagePersist HTML + metadataWebContentStorageConfig

pdf_fetcher consumes the PDF links web_crawler fans out, downloads the bytes, and stages them so document_converter produces markdown beside the HTML crawl output. Key fields: max_pdf_size_mb, request_timeout, rate_limit.

type:PurposeConfig class
storage_retrieverRead bytes from storage by keyStorageRetrieverConfig
html_to_markdownGitHub-flavoured HTML → markdownHtmlToMarkdownConfig
smart_segmenterToken-aware markdown splittingSmartSegmenterConfig
segment_publisherFan-out: one message per segmentSegmentPublisherConfig
segment_storagePersist segmentsSegmentStorageConfig
markdown_storage_writerPersist canonical markdownStorageWriterConfig

factflow_markdown also defines a metadata_extractor alias for the same adapter, but it is registered by register_markdown_adapters(), which only the package's own e2e tests call — auto-discovery does not pick it up, so a running server does not have it and a pipeline naming it fails config validation. Use html_to_markdown.

Note markdown_storage_writer uses StorageWriterConfig (the shared writer model), not a markdown-specific class.

type:PurposeConfig class
embedding_generatorGenerate embeddings (multi-model), write to storageEmbeddingGeneratorConfig
type:PurposeConfig class
llm_translatorLLM translation with markdown preservationLLMTranslatorConfig

Composed in the scribe pipeline, upstream of synthesis. Order matters: pii_redactorsensitivity_classifieranti_bac_gatesc_redactor.

type:PurposeConfig class
pii_redactorRedact structured PII (fnr, IBAN, …)PIIRedactorConfig
sensitivity_classifierLLM sensitivity-tier classificationSensitivityClassifierConfig
anti_bac_gateLLM gate that quarantines broken-access-control / org-invariant violations; blanks the body on a fired flagAntiBacGateConfig
sc_redactorBlank strictly-confidential bodiesSCRedactorConfig

anti_bac_gate keys: llm_profile, content_field, origin_field, source_ref_field, content_cutoff. It caches verdicts by (content_hash, model_profile), so weekly re-runs and replay are deterministic.

type:PurposeConfig class
concept_detectionTaxonomy-guided concept extractionConceptDetectionConfig
concept_map_writerPersist the concept mapConceptMapWriterConfig
concept_fanoutFan out concepts for consolidationConceptFanoutConfig
concept_source_loaderLoad source content per conceptConceptSourceLoaderConfig
batch_synthesizerLLM synthesis across sourcesBatchSynthesizerConfig
structural_validatorCitation / length / diversity checksStructuralValidatorConfig
avalon_writerPost consolidated map to AvalonAvalonWriterConfig
concept_map_updaterUpdate stored concept mapConceptMapUpdaterConfig
knowledge_diffCompare maps, emit structured diffKnowledgeDiffConfig
scribe_diff_writerPersist the diffScribeDiffWriterConfig
storage_enumeratorEnumerate stored artefactsStorageEnumeratorConfig
type:PurposeConfig class
sharepoint_enumeratorList files across SharePoint sites (Graph)SharePointEnumeratorConfig
sharepoint_fetcherDownload each fileSharePointFetcherConfig
document_converterConvert Office docs / PDFs → markdownDocumentConverterConfig

Boost owns two adapter families: the conversation processor (enumerate → compact → filter → deduplicate → cluster → catalog) and the routines renderer. Most processing adapters pair with a matching storage writer that persists their output stage.

type:PurposeConfig class
boost_enumeratorWalk an export, emit per-package messagesBoostEnumeratorConfig
boost_batch_processorProcess every file in a package in one invocationBoostBatchProcessorConfig
boost_compactExtract and compact content from individual ActionMeta filesBoostCompactConfig
boost_stored_keys_fanoutFan-out: one message per key written by the batch processorBoostStoredKeysFanoutConfig
boost_filterDrop excluded conversationsBoostFilterConfig
boost_norwegian_filterLLM filter dropping non-Norwegian conversationsBoostNorwegianFilterConfig
boost_filtered_collectorFan-in: aggregate filtered messages per packageBoostFilteredCollectorConfig
boost_deduplicateNear-duplicate removalBoostDeduplicateConfig
boost_clusteringGroup similar conversations (embedding-based)BoostClusteringConfig
boost_catalogLLM-render the catalogueBoostCatalogConfig
boost_storage_writerPersist compacted content + metadata sidecarBoostStorageWriterConfig
boost_deduplicate_writerPersist deduplicated outputBoostDeduplicateStorageWriterConfig
boost_clustering_writerPersist clustering outputBoostClusteringStorageWriterConfig
boost_catalog_writerPersist catalogue outputBoostCatalogStorageWriterConfig
type:PurposeConfig class
boost_routine_discoveryDiscover export dirs, fan-out one message per exportBoostRoutineDiscoveryConfig
boost_routine_indexerParse export data.json, fan-out one message per root intentBoostRoutineIndexerConfig
boost_routine_rendererRender a routine to markdownBoostRoutineRendererConfig
boost_routine_writerWrite rendered markdown to storageBoostRoutineWriterConfig

Replay isn't composed into YAML as a type: — it's invoked via POST /executions/{id}/replay or the CLI. See the Replay guide.

A three-stage ingest chain: crawl a discovery unit, fetch each page, then fetch its attachments. The client is built from env-driven settings and lazily created on first use, so none of these take connection config in YAML.

type:PurposeConfig class
confluence_space_crawlerEnumerates a discovery unit and fans out one message per pageConfluenceCrawlerConfig
confluence_page_fetcherStores a page's HTML and fans out one descriptor per attachmentConfluencePageFetcherConfig
confluence_attachment_fetcherDownloads an attachment, preserving its filename so the converter can infer formatConfluenceAttachmentFetcherConfig

confluence_page_fetcher is 1→N: the stored body goes to the markdown chain and each attachment to the attachment fetcher. Fan-out is routed by an explicit destination on each emitted message — outbound when conditions are not evaluated for emit_messages — so each message carries its own destination queue. A 404 at either fetch stage means the page or attachment was deleted between crawl and fetch; it is skipped, not an error.

Synthetic load for exercising the queue subsystem at volume. Not part of any production pipeline — these carry no business logic and take no dependencies (no network, no LLM, no storage), so a message lost or run twice under them can only have come from message delivery. Used by test-cli scenario s14; see Verifying delivery at volume.

type:PurposeConfig class
synthetic_fanoutEmits count synthetic children to a destination through the real fan-out pathSyntheticFanoutConfig
synthetic_sinkTerminal stage; holds its handler slot for work_ms and records nothingSyntheticSinkConfig

Configure synthetic_fanout twice for a two-level spread (waves, then work items). That keeps each lineage pre-registration transaction bounded to one wave instead of the whole run, which is also the shape real pipelines have — sitemap → URLs → documents.

The registry is the source of truth. Dump it with full config schemas:

Terminal window
curl http://localhost:8000/api/v1/adapters
curl http://localhost:8000/api/v1/adapters/{type}

GET /api/v1/adapters/{type} returns the adapter's config class as JSON Schema — usable for IDE autocomplete and tooling.

This catalog enumerates registry adapters — the type: values you put in pipeline routes. The shipped scribe and avalon configs (config/pipelines/scribe/*.yaml) also carry a monitoring: block whose string values look like types but are not registered adapters: console (a metrics.exporters[].type), queue_connectivity and storage_accessibility (health_checks.checks[].type). They aren't in the adapter registry and won't appear in GET /api/v1/adapters. Don't reference them as route type: values.