Skip to content

Add pluggable ingest bundle pipeline - #179

Open
specode wants to merge 1 commit into
VectifyAI:mainfrom
specode:feat/pluggable-ingest-bundles
Open

Add pluggable ingest bundle pipeline#179
specode wants to merge 1 commit into
VectifyAI:mainfrom
specode:feat/pluggable-ingest-bundles

Conversation

@specode

@specode specode commented Jul 10, 2026

Copy link
Copy Markdown

───

Summary

Adds an opt-in pluggable bundle ingest pipeline for openkb add, alongside the existing legacy path (default remains legacy).

Documents are imported as a structured DocumentBundle (blocks, assets, links, provenance), then rendered into the current staging/commit flow so wiki mutation, registry, and long-doc behavior stay compatible.

Pipeline stages

  1. Importer — acquire source (file, url, feishu, plus plugins)
  2. Normalizer — convert to DocumentBundle (markdown, text, pdf-local, markitdown, image, plus plugins)
  3. Enricher — optional post-process (link_discovery, image_vision, plus plugins)
  4. Render + commit — stage artifacts and publish through existing mutation locks

Pluggability

External packages can register components via entry points:

• openkb.ingest.importers
• openkb.ingest.normalizers
• openkb.ingest.enrichers

Minimal example: examples/ingest-plugin/.

How to enable

CLI:

openkb add path/or/url --ingest-pipeline bundle

Config (.openkb/config.yaml):

ingest:
  pipeline: bundle
  importers:
    enabled: [file, url, feishu]
  normalizers:
    enabled: [markdown, text, pdf-local, markitdown, image]
  enrichers:
    enabled: [link_discovery, image_vision]
  link_discovery: false
  max_depth: 0
  max_documents: 50
  allow_domains: []

Compatibility

• Default pipeline is still legacy — no behavior change unless opted in
• Bundle path falls back to legacy for long documents when needed
• Reuses existing ingest lock / staging / publish path

Tests

• tests/test_ingest_bundle.py — pipeline, CLI dispatch, artifacts, plugins
• tests/test_ingest_boundaries.py — config, recursion limits, domains, protocol edges

───

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant