Release v0.10.0
What's Changed
Added
- Attachment file storage:
HEAD/GET/POST /knowledge/entries/{id}/filefor checking, downloading, and uploading original attachment files (e.g., PDFs stored alongside their extracted text) KnowledgeFileService: filesystem-backed store for original attachments with configurable size limit- Multi-collection routing via
X-Knowledge-Collectionheader: the KB SPA usesknowledge_entries(default), AgentForge Notes useskb_note_entries knowledge_registrymodule: collection-scoped service caching, FastAPI dependency injection, andensure_all_collections()startup hookforce_uniqueflag onCreateEntryRequest. Bypasses content-hash dedup so the same text can be stored under multiple parents- Auto-relink: creating a duplicate entry with a
parent_idreattaches the existing entry under the new parent instead of returning 409 metadatafield onUpdateEntryRequest(was already on create and now on updatable)- Config keys:
knowledge.notes_collection_name,knowledge.files_dir,knowledge.max_attachment_bytes @kband@notescustom agent examples incustom_agents.example.yamlmarkdown/custom-agents/notes.mdsystem prompt for the Notes agent- Notes-aware WebSocket session routing:
source=notessessions auto-scopekb_searchto the notes collection extracted_bytesin/knowledge/extractresponse metadata- pdftotext page-marker formatting (
--- Page N ---) and scaled timeouts for large PDFs
Changed
- Knowledge API routes use FastAPI
Depends()injection instead of a module-level singleton. Each request resolves the correct collection-scoped service KnowledgeVectorServiceaccepts an optionalcollection_nameparameter (defaults tosettings.knowledge.collection_name)- PDF extraction prefers
pdftotextfor large files (>5 MiB) andpdfplumberfor smaller ones (was pdfplumber-first with pdftotext fallback) delete_entryalso removes stored attachment files for the entry (*optionally)
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md