LogosDB 1.0.0
First stable, production-ready release. This milestone covers everything shipped since v0.12.0 plus a hardening and quality pass specifically targeting the 1.0.0 bar.
🚀 New features
- Smart Chunking (#98, #112) — new
auto/line/section/legacychunking modes.autodetects the best strategy from file extension: line-window for code, section-aware for Markdown / RST, paragraph-fallback for everything else. Configure globally viaLOGOSDB_CHUNK_MODEor per-call via thechunkingparameter oflogosdb_index_file. - Incremental index fingerprints
chunkMode(#112) — changing the chunking strategy on an existing incremental namespace forces a clean re-index automatically. Old manifests (nochunkMode) compare equal toautoto avoid a forced mass re-index on upgrade. - Codex semantic memory plugin (#78, #106) — first-class MCP integration for Codex/OpenAI Agents.
🔒 Security & hardening
- UTF-8 NFC normalization + bidi/invisible-char rejection (#109, #112) — all user-provided text is normalized to NFC before indexing; bidirectional control characters and zero-width characters are rejected outright.
- Path traversal hardening — MCP (#108, #112) —
resolveIndexablePathandcollectFilesSafeinsecurity.tsblock null bytes,..traversal, and symlink escapes. - Path traversal hardening — Python adapter (#111, #112) —
vibe.pynow usesos.walk(followlinks=False)and per-entry confinement checks; single-file indexing rejects symlinks._resolve_confinedhelper raisesValueErroron any path that escapesindex_root.
🧪 Tests (251 passing + smoke)
chunker.test.ts(97 tests, #110) — all four modes,targetChars=1,overlapChars=0, CRLF, ATX + Setext headings, large-section sub-splitting, Unicode stress, offset monotonicity invariants.security.test.ts(59 tests, #110) — full C0/C1 control-char matrix, all bidi/invisible Unicode ranges, NFC/NFD/Hangul/emoji, null-byte paths, double symlink escapes, allSKIP_DIRS, hidden directories, deep nesting.- Live MCP stdio smoke test confirms
logosdb_search,logosdb_index_file,logosdb_listare registered on every build.
🐛 Bug fixes
sanitizeEntryinfile-index-manifest.tsno longer serializeschunkMode: undefined— omitting the key preserves round-tripdeepStrictEqualand backward compatibility with pre-1.0.0 manifests.splitLongTexthelper correctly sub-splits single paragraphs larger thantargetChars(no internal blank lines), fixing section-mode sub-splitting and legacy-mode overlap carry.
📦 Package bumps
| Package | Previous | Now |
|---|---|---|
logosdb (Python / PyPI) |
0.12.0 | 1.0.0 |
logosdb (Node.js / npm) |
0.12.0 | 1.0.0 |
logosdb-mcp-server (npm) |
0.12.0 | 1.0.0 |
logosdb-n8n-node (npm) |
0.12.0 | 1.0.0 |
C++ project (CMakeLists.txt) |
0.9.0 | 1.0.0 |
| PyPI classifier | Alpha | Production/Stable |
⚠️ Migration notes
- The
chunk(text, chunkSize)two-argument call still works unchanged (legacymode). The preferred signature is nowchunk(text, { targetChars, mode, filePath }). - Existing incremental namespaces are not force-re-indexed on upgrade (old entries are treated as
auto). To switch a namespace to the smart chunker, runlogosdb_index_fileonce withincremental: false.
Full Changelog: v0.12.0...v1.0.0