Silex 0.12.0
Silex 0.12.0
Recommended install (official channel):
pip install silex-archaeologyThe wheel attached to this release is an alternative path when pip install from PyPI is not available to you. PyPI is always the source of truth: https://pypi.org/project/silex-archaeology/
pip install https://github.com/silex-tec/silex/releases/latest/download/silex_archaeology-py3-none-any.whlFixed
- The free tier never reaches Neo4j, Qdrant or a paid LLM (Azure APIM) by accident of environment. The decision is now made by tier, before any driver import or socket. Previously a
.envplus a reachable endpoint made a free scan write to the graph (hours of linking) and community detection call a paid model once per class/module. Heavy stages now reportskipped: true, reason: "tier_free"; progress-event shape unchanged. An unknownSILEX_TIERvalue is treated as free everywhere. - The community map now covers procedural code. Module-level functions join the map through the module identity (the file is the "class" for Python/JS). On Silex itself, Python chunks outside any community dropped from 70% to 0.05%, and
silex.community.code_packreaches that code withfile:lineanchors. Edges with ambiguous names are dropped and counted, never guessed. - Chunking faithful to the code. Decorated functions and classes become chunks;
build/lib,*.egg-info, caches and Silex's own artifacts stay out of the scan; a full scan purges ghost chunks and canonicalizes the workspace id in the mirror (on Silex: 84,134 → 40,755 chunks, zero ghosts); god functions/methods land as a parent plus cohesive blocks (symbol_block, id{parent}#bNNN), and the code pack returns blocks instead of a single 15k-token chunk. - Freshness covers new, renamed and deleted files. The git hook now reads
--name-status, so a newly committed file is ingested by the partial rescan without a full scan; renamed files leave no ghost chunks on the old path; deleted files are removed together with their edges. The hook reportsadded= renamed= deleted= modified=counts.
Added
SILEX_EXTRA_STORES=neo4j,qdrant— explicit, declared opt-in that re-enables the heavy stores on the free tier (comma-separated). It never enables the paid LLM provider.result["heavy_stores"]reports the decision.- Freshness git hook (
silex-fresh-hook-install):post-commit/post-mergemark touched files as stale and re-ingest only those into the mirror. Works with a workspace rooted in a monorepo subdirectory. scripts/measure_map_coverage.py— community-map coverage per language.- Smoke scenarios
smoke-chunk/chunk-01..04,smoke-mcp/mcp-06(procedural map),smoke-mcp/mcp-07(free tier under a hostile environment with a network sentinel) andsmoke-fresh/fresh-04(hook ingests new/renamed/deleted files).
Changed
community_code_pack/v4: module members, god-symbol header plus ordered blocks;entity_packandget_structural_findingsresolve member → chunks through the same helper.CONTRACT_DEVICEunset now meansauto:cudawhen a GPU is available, otherwisecpu; an explicit value always wins.get_provider("azure")outsidelegacy/pro/enterpriseraisesLLMProviderBlockedInTier(code: "llm_provider_unavailable_in_tier"). Operations note: server-side enrichment and scripts that used APIM without declaring a tier now fall back to Ollama or a structured error — setSILEX_TIER=pro.SqliteExtractorInputfilterssymbol_block;list_chunks(include_blocks=False)by default, so extractors, communities and retrieval receive the same set as before.
Since v0.11.42
0.12.0 is the first minor bump since 0.11.42. It is fully backward compatible for the free MCP kit (12 tools, same names and schemas); tool descriptions were regenerated for the public reference.
Site & docs: https://silex.tec.br