Multi-Agent Configuration Editor and Vector Support
Status: proposed roadmap specification
Research baseline: 4 October 2026
Purpose
This document specifies how the existing config-service editor can become a
multi-agent configuration editor and add Vector as the first new format after
Fluent Bit and Fluentd. It is intended to be detailed enough to drive
specification-led implementation in the OpAMP server without requiring the
implementer to infer the architecture from the current Fluent Bit code.
The recommended approach is to reuse the editor’s version registry, field rendering, YAML handling, validation workflow, and OpAMP integration, but not the Fluent Bit document shape. Vector configuration is a named topology graph; representing it as Fluent Bit-style plugin arrays would discard component identity and connection semantics.
Decision Summary
- Add a server-side configuration-format adapter registry. Parsing, rendering,
validation, file metadata, and editor capabilities must be selected through
an adapter rather than
if fluentbitandif fluentdbranches. - Keep each agent’s native configuration tree as the canonical in-memory
configvalue. Do not invent one universal pipeline model that cannot round trip agent-specific fields. - Generate a versioned Vector editor manifest from the JSON Schema emitted by
the matching Vector binary with
vector generate-schema. - Use JSON Schema for immediate structural validation and
vector validatefor authoritative semantic, topology, VRL, and component validation. - Add generic named-map and connection editors to the browser UI. These are
required for Vector’s
sources,transforms, andsinksmaps. - Retain the current Fluent Bit and Fluentd endpoints as compatibility shims while moving the browser to generic document endpoints.
- Deliver Vector support incrementally: lossless load/save and form editing first, topology-aware connections second, and a visual graph only if it proves useful. A graph canvas is not required for the initial release.
Vector Research
Configuration model
Vector recommends YAML while also accepting TOML and JSON. A full configuration contains top-level global options and named component maps. The principal pipeline sections are:
| Section | Shape | Role |
|---|---|---|
sources |
Map from component ID to component object | Receives observability events. |
transforms |
Map from component ID to component object | Changes, filters, samples, or routes events. |
sinks |
Map from component ID to component object | Sends events to a destination. |
enrichment_tables |
Named map | Supplies reference data to transforms. |
tests |
Array of named test objects | Exercises transforms against test events. |
| Global sections | Objects or scalar values | Configure API, schema, secrets, data directory, health, and other process behavior. |
Every component object has a type discriminator. Transforms and sinks use
inputs to refer to upstream component IDs or wildcard expressions. This is a
directed topology, not merely three independent lists. Renaming or deleting a
component therefore requires reference checks and an explicit repair strategy.
Vector can load several configuration files and can also use automatic
namespacing with directories such as sources/, transforms/, and sinks/.
The initial implementation should edit one complete YAML document. The backend
contract must nevertheless allow a future document-set adapter; Vector’s merge
behavior must not be implemented through Fluent Bit’s include semantics.
Sources:
- Vector configuration overview
- Vector pipeline components reference
- Vector configuration unit tests
- Vector components index
Authoritative configuration schema
Vector has an experimental generate-schema command:
vector generate-schema -o vector-<version>-schema.json
The output is a JSON Schema for the complete configuration supported by that
specific Vector binary. It contains component unions for sources, transforms,
and sinks, field descriptions, defaults, enums, deprecation markers, references,
and Vector-specific _metadata. Vector’s configuration-schema RFC describes
the schema as the code-derived source of truth for external validation and
interactive editing. The current generator identifies its schema dialect as
JSON Schema 2019-09.
The generated schema is suitable as an upstream artifact, but not as the UI’s
direct rendering contract. It uses $ref, allOf, oneOf, nullable unions,
discriminators, and metadata that a browser form renderer would otherwise have
to reinterpret on every page load. A deterministic build tool should compile it
into the smaller editor manifest defined below.
The schema is tied to the producing binary. A schema generated by one Vector version must not be labelled as another version, and the editor must not assume that the latest schema validates older agents.
Sources:
- Vector configuration schema RFC
- Vector schema autocompletion guide
- Vector schema generator implementation
Authoritative validation
Vector provides a native validation command. For an editor-produced YAML file, the baseline dry run is:
vector validate --no-environment --config-yaml <configuration-path>
--no-environment avoids network, component, and sink health checks during an
editor validation. Environment-variable interpolation remains disabled unless
an administrator explicitly opts into Vector’s dangerous interpolation flag.
The server must not enable it automatically because validation output or a
rendered preview could expose secrets.
JSON Schema catches document shape and field constraints quickly. Native validation remains necessary for topology, VRL compilation, semantic checks, and rules evaluated only while Vector builds components.
Source: Vector CLI reference
Open-Source Editor Research
VortexFlow is an open-source,
self-hosted Vector control plane under MPL-2.0. Its published feature set
includes a visual topology editor, schema-generated source and sink forms, VRL
editing, native Vector YAML output, vector validate, fleet rollout, and live
event taps. Its implementation runs vector generate-schema, caches the result,
and falls back to a bundled schema-derived catalog when the binary is absent.
VortexFlow demonstrates that schema-driven Vector forms are practical, but it should be treated as a design reference rather than embedded into this project:
- its React/TypeScript/React Flow frontend conflicts with this repository’s modular vanilla JavaScript UI direction;
- its fleet database, deployment agents, monitoring, and RBAC are outside the configuration editor’s initial scope;
- its current generated catalog intentionally flattens only part of the schema, limits object traversal depth, and focuses on sources and sinks, so it is not a lossless general Vector editor; and
- source reuse would require an explicit MPL-2.0 compatibility and attribution review. This specification does not require copying VortexFlow code.
Useful primary references:
- VortexFlow project and feature description
- Schema-to-catalog converter
- Server-side schema provider
- Schema-driven component form
A hosted Vector configuration generator also exists, but no authoritative open-source repository or software licence was identified during this research. It should not be classified as an open-source implementation or used as a code dependency without further evidence.
Current Config-Service Assessment
The existing implementation already contains several foundations for a multi-agent editor:
catalog-registry.json,service-registry.json, andparser-registry.jsonresolve definitions by configuration type and version;/versions,/catalog/<version>,/schema/<version>,/validate/<version>, and/render/yaml/<version>accept aconfig_typequery parameter;- the field renderer handles required and optional values, enums, booleans, arrays, nested metadata, descriptions, defaults, and documentation links;
- the external validation registry resolves commands by agent type and version;
config-servicecan run standalone or as an OpAMP server component; and- the consumer already has a Vector implementation that can receive remote configuration and report effective configuration.
The principal blockers are format assumptions spread across otherwise generic layers:
| Area | Current assumption | Required change |
|---|---|---|
| Browser document state | service, env, parsers, upstream_servers, and pipeline.inputs/filters/outputs always exist. |
Let a format adapter supply an empty document and section descriptors. |
| Browser layout | Panels and visibility checks are Fluent Bit or Fluentd specific. | Render panels from editor capabilities and collection descriptors. |
| Component renderer | Plugins are arrays whose identity comes from name. |
Add named-map collections with a separate component ID and type discriminator. |
| Catalog validation | Catalogs must expose inputs, filters, and outputs. |
Validate a generic editor-manifest contract; keep legacy catalog translation for existing agents. |
| Schema compilation | SchemaService branches between Fluent Bit and Fluentd. |
Add schema-provider adapters; pass through Vector’s upstream schema. |
| Semantic validation | ValidationService contains engine-specific branches. |
Split structural, common graph, rules-engine, and adapter validation stages. |
| Parse/render API | Parse routes are format-named and render selection is hard-coded. | Add generic document routes that dispatch through the adapter registry. |
| Include handling | Non-Fluentd content is treated as Fluent Bit YAML. | Make document composition an adapter capability. |
| File handling | YAML implies Fluent Bit and .conf implies Fluentd. |
Resolve format from explicit metadata first, then registered extensions and content hints. |
| Native dry run | The registry is generic, but suffixes and adapters know only Fluent Bit/Fluentd. | Add a dedicated Vector adapter and .yaml file metadata. |
Affected code map
Implementation should begin with these ownership boundaries:
| Current file | Responsibility in the refactor |
|---|---|
app.py |
Construct and register format adapters, schema providers, and validators. |
routes/api.py |
Replace format branches with generic document dispatch and retain compatibility routes. |
models/contracts.py |
Add the common document envelope, capability, render, and validation request/response models. |
catalog_service.py |
Load generic editor manifests instead of enforcing only three Fluent-style plugin groups. |
schema_service.py |
Delegate schema acquisition/compilation by format; preserve current compilers behind legacy adapters. |
validation_service.py |
Orchestrate common validation stages and move engine semantics into adapters. |
include_document_service.py |
Delegate composition and include behavior rather than defaulting all YAML to Fluent Bit. |
agent_validation/service.py |
Add safe argv execution, timeout/output controls, and a Vector validation adapter. |
config_ui.js |
Reduce to bootstrap/orchestration and remove the fixed Fluent document skeleton. |
config_ui_api.js |
Call the generic formats and documents API. |
config_ui_sections.js |
Convert fixed sections into capability-registered section renderers. |
config_ui_plugins.js |
Retain Fluent plugin extensions while moving common field/card behavior into generic modules. |
The existing tests under config-service/tests,
config-service/ui-unit-tests, and
config-service/ui-tests are the migration
safety net and should be extended in the phase that changes each boundary.
Reuse of the Fluent Bit Approach
The Fluent Bit approach is applicable at the framework level, not at the data model level.
| Fluent Bit mechanism | Vector applicability | Decision |
|---|---|---|
| Versioned generated catalogs | Strong | Reuse the registry pattern, deriving artifacts from vector generate-schema. |
| Schema-driven fields | Strong | Reuse field controls after adding nested objects, maps, unions, and code fields. |
| YAML parse/render | Strong | Reuse the YAML service while preserving native Vector maps and unknown keys. |
| External binary validation | Strong | Add VectorValidationAdapter using vector validate. |
| Input/filter/output plugin arrays | Weak | Do not reuse as the canonical Vector model. |
Plugin name as type |
Incompatible | Vector uses map key as component ID and type as implementation. |
| Fluent Bit filters | Incomplete mapping | Vector transforms are graph nodes with their own IDs and inputs. |
| Fluent Bit includes | Incompatible semantics | Add future Vector document-set composition separately. |
| Processor and route panels | Agent-specific | Keep behind Fluent Bit capabilities; do not expose for Vector. |
Target Architecture
Native document envelope
The browser and API should exchange a stable envelope while leaving config
native to the selected agent:
{
"config_type": "vector",
"agent_version": "0.58.0",
"serialization": "yaml",
"config": {
"sources": {},
"transforms": {},
"sinks": {}
},
"annotations": {},
"included_documents": []
}
included_documents remains in the common envelope for compatibility. The
Vector adapter must reject or ignore it with a clear capability response until
Vector document-set support is implemented. Agent-specific values must never be
moved into the envelope merely to make the UI simpler.
Configuration-format adapter
Add config_service.formats with a registry and a protocol similar to:
class ConfigurationFormatAdapter(Protocol):
"""Provide one agent format's document lifecycle to config-service."""
config_type: str
def capabilities(self, version: str) -> FormatCapabilities: ...
def empty_config(self, version: str) -> dict[str, Any]: ...
def parse(self, text: str, version: str, source_path: Path | None) -> ParsedDocument: ...
def render(self, document: ConfigDocument) -> RenderedDocument: ...
def validate(self, document: ConfigDocument) -> list[ValidationIssue]: ...
def editor_manifest(self, version: str) -> dict[str, Any]: ...
def file_metadata(self) -> FileMetadata: ...
The concrete adapters should be FluentBitFormatAdapter,
FluentdFormatAdapter, and VectorFormatAdapter. Existing services may be
injected into the first two adapters during migration; they need not be
rewritten in the first change.
FormatCapabilities should explicitly describe:
- supported serializations and file extensions;
- root section kinds;
- comment and annotation support;
- include or document-set support;
- JSON Schema availability;
- native dry-run availability;
- named-component and topology support; and
- optional specialist editors such as Fluent Bit parsers or Vector VRL.
The application factory should register adapters once and expose only the registry through routes. Routes must not import concrete adapter classes.
Editor manifest
Create one generated editor manifest per agent version. It is a UI contract, not a replacement for the authoritative JSON Schema. A Vector manifest should contain:
{
"manifest_version": "1.0.0",
"config_type": "vector",
"agent_version": "0.58.0",
"source_schema_dialect": "https://json-schema.org/draft/2019-09/schema",
"source_schema_sha256": "<digest>",
"sections": [
{
"key": "sources",
"label": "Sources",
"collection_kind": "named_map",
"discriminator": "type",
"connection_field": null
},
{
"key": "transforms",
"label": "Transforms",
"collection_kind": "named_map",
"discriminator": "type",
"connection_field": "inputs"
},
{
"key": "sinks",
"label": "Sinks",
"collection_kind": "named_map",
"discriminator": "type",
"connection_field": "inputs"
}
]
}
Component variants should retain a JSON Schema reference or resolved subschema, title, description, required fields, defaults, examples, deprecation state, stability metadata, supported event types where available, and an upstream documentation URL when one can be derived authoritatively.
The manifest compiler must support $ref, sibling constraints, allOf,
oneOf, anyOf, nullable values, arrays, maps, nested objects, constants,
enums, defaults, examples, formats, numeric/string bounds, and deprecations.
Unsupported constructs must be recorded as diagnostics and rendered through a
raw structured-value control. Silently dropping fields is unacceptable.
Schema acquisition and provenance
Add a development tool such as
config-service/dev-tools/generate_vector_assets.py. For every supported
version it must:
- execute an explicitly configured Vector binary with
--version; - reject a binary whose reported version does not match the requested version;
- execute
generate-schemawithout a shell and with a timeout; - validate the returned JSON and its schema dialect;
- write the immutable upstream schema beneath
json-schemas/vector/<version>/config-schema.json; - compile the editor manifest beneath
json-definitions/vector/<version>/editor-manifest.json; - write deterministic provenance containing the Vector version and source schema SHA-256 digest; and
- support
--checkmode so CI fails when committed generated assets drift.
Generation must be an explicit maintainer action. The production server should not download schemas from the internet. An optional locally configured Vector binary may supply a live schema only when its version and digest are verified; bundled artifacts remain the deterministic fallback.
Generic API
Add these routes under the existing API version:
| Method | Route | Purpose |
|---|---|---|
GET |
/formats |
List formats, versions, defaults, serializations, and capabilities. |
GET |
/formats/<config_type>/<version>/editor-manifest |
Return the generated editor contract. |
GET |
/formats/<config_type>/<version>/schema |
Return the authoritative document schema. |
POST |
/documents/<config_type>/<version>/parse |
Parse text into the native document envelope. |
POST |
/documents/<config_type>/<version>/render |
Render a native document with the requested serialization. |
POST |
/documents/<config_type>/<version>/validate |
Run schema, semantic, rule, and optional native validation stages. |
Responses should use one validation issue model with code, message,
severity, source, path, and optional line/column. Validation sources should
include json_schema, config_service, and vector. Native output must be
parsed where stable and retained as a bounded diagnostic when it cannot be
mapped precisely.
The current routes remain operational and delegate to adapters:
/parse/fluentbit/<version>;/parse/fluentd/<version>;/render/yaml/<version>;/render/fluentd/<version>;/schema/<version>; and/validate/<version>.
No compatibility route should contain new agent-specific behavior after the adapter migration.
Validation pipeline
Validation should run these stages in order:
- Envelope and requested format/version validation.
- JSON Schema validation using the dialect declared by the stored schema.
- Common named-topology checks: valid IDs, duplicate IDs, missing input references, self-references, and cycles where Vector forbids them.
- Agent adapter semantic checks.
- Existing configurable rules-engine checks that declare compatibility with the selected format.
- Optional native dry run through the matching Vector binary.
Use a dedicated VectorValidationAdapter even though the generic command
adapter can launch a process. It should build an argument array, invoke without
shell=True, apply a timeout, cap captured output, delete temporary files, and
redact environment values and secret-like configuration fields from logs. The
result must identify the requested and actual Vector versions.
Browser refactor
Continue the existing window.<ModuleName>.create(deps) modular pattern. Split
format-independent state and behavior from specialist panels:
config_ui_state.js: document envelope, selected format/version, dirty state, and persistence;config_ui_format_registry.js: capabilities and manifest lookup;config_ui_document.js: new/load/parse/render/validate orchestration;config_ui_fields.js: schema-driven scalar, object, array, map, union, and code controls;config_ui_collections.js: list and named-map collections;config_ui_topology.js: component IDs,inputs, reference integrity, rename, and deletion impact; and- existing Fluent Bit parser, route, processor, and Fluentd nested-section modules registered as format-specific extensions.
The first Vector UI should provide:
- add, rename, clone, reorder for display, and delete for named components;
- source, transform, and sink type selection from the manifest;
- schema-driven component fields with required/optional state and help links;
- upstream
inputsselection for transforms and sinks; - clear impact reporting before a referenced component is renamed or removed;
- a VRL-aware multiline editor for code fields, with plain textarea fallback;
- global-options editing generated from the top-level schema;
- raw YAML preview and a raw structured-value escape hatch for unsupported schema constructs; and
- preservation of unknown keys and values during load/edit/save.
The initial topology view may be an ordered component list with connection selectors. A later visual DAG must be a projection of the same native document, not a second source of truth.
Round-trip rule
Lossless round-trip behavior is a release requirement. Parsing a valid Vector configuration, changing one supported field, and rendering it must preserve all unmodified supported and unsupported values. Exact whitespace and comment placement are not guaranteed by the existing YAML service, but a warning must be shown before structured editing when comments cannot be preserved.
Unknown component types should appear as raw-editable components rather than causing the complete document to fail to load. They may block schema validation while still allowing the user to inspect and export the document.
OpAMP Server Integration
The work remains inside the existing config-service component registered with
the provider. Vector does not require a new top-level server component.
Saved configuration metadata must carry config_type, agent_version, and
serialization. The server configuration catalog should use these values to
filter or warn when an operator assigns a configuration to an incompatible
client implementation. A Vector configuration is delivered as native YAML
through the existing OpAMP remote-configuration path; the Vector consumer then
reports the effective configuration using its current capability support.
Assignment and rollout must not depend on the editor manifest. The manifest is editor metadata, while the rendered Vector document is the deployable artifact. Before an offered configuration becomes eligible for assignment, server policy may require successful validation against both the stored schema and the configured matching Vector binary.
Delivery Plan
Phase 0: Characterization
- Add contract tests around current Fluent Bit and Fluentd versions, parse, render, validation, file load/save, and browser workflows.
- Capture representative fixtures containing comments, includes, nested fields, custom plugins, and unknown values.
- Record current endpoint responses so adapter migration can prove compatibility.
Exit criterion: no production behavior changes, and existing formats have a repeatable compatibility baseline.
Phase 1: Adapter seam
- Add document models, format capabilities, adapter protocol, and registry.
- Wrap current Fluent Bit and Fluentd services in adapters.
- Add generic routes and redirect browser calls to them.
- Retain and test all compatibility routes.
Exit criterion: Fluent Bit and Fluentd pass existing backend, UI unit, and Playwright tests through the adapter registry.
Phase 2: Vector asset generation
- Add the pinned schema acquisition and editor-manifest compiler.
- Commit one supported Vector version’s generated schema, manifest, and provenance.
- Add fixture-based tests for references, unions, maps, nested objects, component discriminators, and deterministic output.
Exit criterion: regeneration is deterministic and CI --check detects any
schema, compiler, or manifest drift.
Phase 3: Vector backend
- Add
VectorFormatAdapterfor YAML parsing/rendering and schema validation. - Add
VectorValidationAdapterand version-aware availability reporting. - Add topology diagnostics and normalized native-validation issues.
- Register Vector in format and artifact registries.
Exit criterion: API tests can load, validate, render, and round trip representative Vector sources, transforms, sinks, global options, VRL, and unknown fields.
Phase 4: Vector structured editor
- Add manifest-driven named-map collections and component cards.
- Add component IDs, type selection,
inputs, global options, VRL fields, and raw fallback controls. - Hide Fluent Bit/Fluentd-only panels through capabilities rather than format string checks.
Exit criterion: a user can create, open, edit, validate, download, and reopen a Vector YAML pipeline without data loss.
Phase 5: Topology and OpAMP workflow
- Add rename/delete impact handling and connection validation.
- Add optional topology visualization based on the native document.
- Add compatible-client filtering and validation status to the provider’s configuration assignment workflow.
Exit criterion: a validated Vector configuration can be assigned through the OpAMP server to a Vector consumer, applied, and reported as effective config.
Phase 6: Additional agents
Prove the adapter boundary with a materially different schema source, such as the OpenTelemetry Collector or an Elastic agent. Do not claim a multi-agent architecture complete while adding new formats still requires changes to the generic API or generic field/collection renderers.
Test Specification
Backend unit and API coverage must include:
- adapter registration, duplicate keys, unknown formats, and unsupported versions;
- deterministic Vector schema import and provenance verification;
- every supported schema composition construct and raw fallback diagnostics;
- YAML parse/render and preservation of unknown fields;
- JSON Schema errors mapped to stable paths;
- graph references, wildcards, rename, delete, self-reference, and cycle cases;
- Vector native validation success, warning, error, timeout, missing binary, version mismatch, and oversized output;
- environment interpolation remaining disabled by default;
- old endpoint parity for Fluent Bit and Fluentd; and
- authorization and path containment on load, save, schema, and validation APIs.
Browser unit and Playwright coverage must include:
- format and version switching with empty and populated documents;
- capability-driven panel visibility;
- named component creation for one source, transform, and sink;
- connection selection and reference updates after rename;
- guarded deletion of a referenced component;
- required, optional, enum, bool, number, array, nested object, map, union, code, deprecated, and unknown fields;
- load-edit-render-reload round trips;
- raw fallback retention;
- schema and native validation diagnostics; and
- responsive layouts without overlapping controls on desktop and mobile.
All changed Python and JavaScript paths must pass their module-local quality commands, JavaScript syntax checks, targeted tests, and the repository security gate before packaging.
Acceptance Criteria
The Vector addition is complete only when all of the following are true:
- Given a registered Vector version, the formats API returns its schema, editor manifest, serialization choices, and dry-run capability.
- Given a valid Vector YAML document, parse then render produces a semantically equivalent document and retains unknown values.
- Given a source, transform, and sink, the UI edits their native map keys,
typevalues, fields, andinputswithout converting them to plugin arrays. - Given a component rename, every exact input reference is updated atomically, while wildcard references are reported for review.
- Given a referenced component deletion, the UI blocks the action until the user resolves references or explicitly confirms the displayed impact.
- Given a structurally invalid value, JSON Schema validation reports a stable field path before native validation runs.
- Given invalid topology or VRL, native Vector validation returns a bounded, user-readable diagnostic without leaking configuration secrets.
- Given no Vector binary, structured editing and schema validation continue from bundled assets and native validation clearly reports unavailable.
- Given a binary/schema version mismatch, generation fails and runtime native validation warns or rejects according to configured policy.
- Given existing Fluent Bit and Fluentd workflows, their API and UI regression suites pass without document-shape or output changes.
- Given a validated saved Vector configuration, the OpAMP server can offer it to a compatible Vector consumer and observe effective-config reporting.
- Given an unsupported schema construct or component, the editor preserves it through a raw control and never silently removes it.
Non-Goals for the First Vector Release
- Replacing Vector’s own semantic validator.
- Reimplementing VRL parsing or compilation in JavaScript or Python.
- Supporting TOML and JSON editing before YAML is complete.
- Editing a directory of automatically namespaced Vector fragments.
- Building fleet rollout, live tap, or health dashboards comparable to VortexFlow.
- Copying VortexFlow code or introducing React solely for Vector support.
- Defining one normalized agent pipeline that erases native configuration semantics.
Risks and Mitigations
| Risk | Mitigation |
|---|---|
| Vector marks schema generation experimental. | Pin artifacts by version, retain provenance, test schema changes, and keep raw fallback paths. |
| Generated schemas are large and complex. | Compile deterministic editor manifests and lazy-load component schemas. |
| Forms silently omit unsupported constructs. | Emit compiler diagnostics and preserve unsupported values in raw controls. |
| Native validation executes an external binary. | Use argv execution without a shell, timeouts, output limits, path containment, and redacted debug logs. |
| One UI accumulates format checks. | Require capabilities and extension registration; reject new generic-layer format string checks in review. |
| Component rename breaks wildcard inputs. | Update exact references automatically and surface wildcard matches for explicit review. |
| Schema validation disagrees with Vector runtime behavior. | Treat native validation as authoritative and expose both diagnostic sources. |
| A newer editor assigns config to an older agent. | Store version metadata and enforce compatibility policy during assignment. |
Open Decisions
These decisions can be made during implementation without changing the overall architecture:
- which Vector version becomes the first supported baseline;
- whether native validation is required or advisory before OpAMP assignment;
- whether comments warrant a round-trip YAML library in a later phase;
- whether schema artifacts are generated only in release tooling or may also be generated by an administrator from a locally installed binary; and
- whether the first topology view remains a list or includes a lightweight DAG.
The first supported version should be selected from the versions actually used by the repository’s Vector consumer demonstrations, then pinned in tests and documentation. It should not be inferred from whichever Vector release happens to be newest when the server starts.
OpAMP