π Mycelium v0.1.0 β First public release
Highlights
First public release of Mycelium β the reactive, AI-native symbol graph that perceives code like a nervous system.
Core engine: Trunk (Materialized Path Radix Trie) + Synapse (per-EdgeKind adjacency lists) + Cortex (Salsa 3 incremental reactive layer). In-memory graph with MessagePack snapshot persistence (.mycelium/index.rmp). Full tree-sitter extraction pipeline for 10 languages.
AI interface: Hyphae DSL β a CSS-selector-inspired query language that replaces multi-round-trip JSON MCP calls with a single compact query (β€ 30% of JSON token count β Charter Β§2 SLA). Plus 90+ specialized MCP graph-intelligence tools.
All Charter Β§2 SLAs satisfied:
- Cold symbol lookup: ~8 ns (target: < 5 ms)
- 3-hop traversal: ~392 ns (target: < 1 ms)
- Reactive re-query: Salsa-memoized (target: < 10 ms)
- AI token efficiency: Hyphae DSL β€ 30% JSON baseline β
- Language onboarding: β€ 3 files, 0 core changes β
- Test coverage: 96.27% lines / 835 tests β (target: β₯ 90%)
- Fast CI: 1.5 s local, < 5 min gate β
- Documentation: 100% pub items have rustdoc β
Added
- Day-0 project skeleton: charter, governance, GitFlow, code of conduct, security policy.
.hive/definition of the autonomous AI development team..hive/memory/persistent shared memory (append-only JSONL).- RFC-0000 RFC template and RFC-0001 draft (Trunk + Synapse storage layer).
- GitHub workflows skeleton:
ci.yml,release.yml,nightly.yml,hive.yml,triage.yml. - Issue and PR templates.
- macOS
launchdplists for autonomous Hive scheduling. - Cargo workspace stub with
mycelium-core,mycelium-hyphae,mycelium-pack,mycelium-cli,mycelium-mcpcrates. - First language packs: Python and TypeScript skeletons under
packs/. mycelium-core: RFC-0002Extractorβ tree-sitter β Store bridge; parses Python source files and populatesTrunknodes +Containsedges for modules, functions, classes, methods, and imports.mycelium-pack: language pack loader (LanguagePack::load) withpack.tomlmanifest parsing and query-source validation.mycelium index <path>: first end-user-visible CLI command β walks a directory tree, extracts Python symbols via RFC-0002Extractor, and reports file/error counts.- TypeScript language pack (
packs/typescript/) βfunction_declaration,class_declaration, methods,interface_declaration,type_alias_declaration, and import references. - Extractor generic
definition.*dispatch: any capture name starting withdefinition.(other thanmodule/method) creates a top-level child node, enabling language-pack authors to use custom definition kinds. - Rust language pack (
packs/rust/) β functions, structs, enums, traits, type aliases, consts, inline mods, impl methods, and use declarations. mycelium indexnow indexes Python, TypeScript, and Rust source trees.- RFC-0004 MCP server (
mycelium-mcp):mycelium serve --mcpstarts a stdio JSON-RPC 2.0 server with three tools βmycelium_index_workspace,mycelium_search_symbol,mycelium_get_ancestors. Store::search_symbolβ case-insensitive substring search over all materialized path name-segments; returns sorted results up to a configurable limit.Store::ancestors_of_pathβ returns ancestor path strings (child-to-root) for a given trunk path string.- RFC-0005: JavaScript language pack (
packs/javascript/) β top-level functions, arrow functions, class declarations, methods, and import references for.jsand.jsxfiles. - RFC-0005:
.jsxand.tsxextension dispatch in CLI and MCP indexing layers. - RFC-0005:
mycelium_get_descendantsMCP tool β returns all symbols nested under a trunk path. - RFC-0005:
mycelium_index_workspacenow includes a"languages"field listing all indexed language names. - RFC-0005:
Store::descendants_of_pathβ symmetric counterpart toancestors_of_path; returns descendant path strings in unspecified order. - RFC-0005: MCP server identity corrected β
get_info()now reports{"name":"mycelium-mcp","version":"0.0.1"}instead of the rmcp library name. - RFC-0006:
Store::save()β serializes the full Trunk+Synapse graph to aMessagePacksnapshot; creates parent directories automatically. - RFC-0006:
Store::load()β deserializes aStorefrom a.mycelium/index.rmpsnapshot file. - RFC-0006:
mycelium indexCLI auto-saves snapshot to.mycelium/index.rmpafter indexing. - RFC-0006:
mycelium_index_workspaceMCP tool auto-saves snapshot after indexing. - RFC-0006:
mycelium_load_indexMCP tool β reloads a previously-saved index from.mycelium/index.rmpwithout re-parsing source files. - RFC-0006: All core types (
NodeId,NodeKind,EdgeKind,Language,Trunk,Synapse,Store) now implementserde::Serialize+Deserialize. - RFC-0007:
MyceliumServer::with_root(path)β new constructor that pre-loads a.mycelium/index.rmpsnapshot, or falls back to a live index + auto-save. - RFC-0007:
serve_stdio(root: Option<PathBuf>)β passes--rootthrough towith_root. - RFC-0007:
mycelium serve --mcp --root <path>CLI flag β server starts ready without needingmycelium_index_workspace. - RFC-0007:
mycelium_server_statusMCP tool β returnsnode_count,indexed_root, andis_loadedfor client diagnostics. - RFC-0008: File-system watch mode β
MyceliumServer::start_watch(root)spawns a background loop that debounces FSE events (300 ms window) and incrementally re-indexes changed/created/deleted files. - RFC-0008:
with_rootnow automatically starts the watch loop after loading. - RFC-0008:
mycelium_watch_statusMCP tool β returnswatching,root, andbatches_processed. - RFC-0008:
reindex_filehelper β single-file extraction used by the watch loop. - RFC-0009: Gitignore-aware file walking β CLI
index_pathand MCPrun_indexnow useignore::WalkBuilderto respect.gitignoreand.myceliumignorepatterns. - RFC-0009:
target/and.mycelium/are always excluded from indexing, even without an ignore file. - RFC-0009: Background FSE watch loop filters events for ignored paths before re-indexing.
- RFC-0009:
.myceliumignoreis registered as a custom ignore filename inWalkBuilder. - RFC-0010:
Synapse::edge_count()β total directed edges across allEdgeKindbuckets. - RFC-0010:
Store::edge_count()β delegates toSynapse::edge_count(). - RFC-0010:
mycelium_server_statusnow includes"edge_count"alongside"node_count". - RFC-0011: Call graph edges β
reference.callpatterns added to Python, TypeScript, JavaScript, and Rust language packs. - RFC-0011:
Extractornow populatesEdgeKind::Callsedges between caller and callee nodes. - RFC-0011: Intra-file call resolution: callees defined before callers in the same file are resolved to their definition nodes rather than bare stubs.
- RFC-0012:
mycelium_get_calleesMCP tool β returns all symbols a given path calls, as a sorted list. - RFC-0012:
mycelium_get_callersMCP tool β returns all symbols that call a given path, as a sorted list. - RFC-0013: Two-pass extraction β
Extractor::extractnow makes two sequential AST traversals (definitions first, references second) so forward-reference call edges always resolve to definition nodes rather than bare stubs. - RFC-0014: Cross-file call stub resolution β
Store::resolve_bare_call_stubs()runs after each full workspace index, rewiringCallsedges that point to bare stub nodes to their actual definition nodes (unambiguous matches only). - RFC-0014:
AdjacencyList::redirect_nodeandSynapse::redirect_nodeβ edge-rewiring primitives used by stub resolution. - RFC-0014:
mycelium_index_workspaceresponse now includes"stubs_resolved"count. - RFC-0015: Watch-mode stub resolution β
resolve_bare_call_stubs()is called at the end of each FSE debounce batch, so cross-file call edges are kept accurate during incremental re-indexing without requiring a full re-index. - RFC-0016:
mycelium_get_symbol_infoMCP tool β returns ancestors, descendants, callers, and callees for any symbol path in a single call; all lists are sorted lexicographically. - RFC-0017:
Store::find_call_path(from, to, max_depth)β BFS shortest call path search; returnsSome(Vec<NodeId>)including both endpoints, orNoneif unreachable; cycle-safe via visited set;max_depthlimits hops. - RFC-0017:
mycelium_find_call_pathMCP tool β BFS call chain tool; request{ from_path, to_path, max_depth? }; returns{ path, hops }on success or{ path: [], hops: null, message }when unreachable; unknown paths return{ error }. - RFC-0018:
Store::all_file_paths()β returns all trunk paths with no>separator (file-level nodes), sorted lexicographically. - RFC-0018:
mycelium_get_filesMCP tool β enumerates all indexed source files; optionalpath_prefixparameter filters results; returns{ files: [...] }sorted. - RFC-0019:
Store::top_callee_symbols(limit)β returns top-N(path, caller_count)pairs sorted by caller count descending (ties by path ascending); symbols with 0 callers excluded. - RFC-0019:
mycelium_rank_symbolsMCP tool β hot-spot analysis; request{ limit? }; returns{ symbols: [{ path, caller_count }, ...] }; limit defaults to 10, capped at 100. - RFC-0020:
CalleeNode { id, children }struct β DFS callee tree node; cycle-safe via per-traversal visited set with backtrack removal. - RFC-0020:
Store::callee_tree(id, max_depth)β depth-limited recursive DFS over Calls edges. - RFC-0020:
mycelium_get_callee_treeMCP tool β returns{ root: { path, children: [...] } }; max_depth defaults to 4, capped at 10; unknown path returns{ error }. - RFC-0021:
CallerNode { id, callers }struct β symmetric complement toCalleeNode; DFS up incoming Calls edges; cycle-safe via path-tracking visited set. - RFC-0021:
Store::caller_tree(id, max_depth)β depth-limited recursive DFS over incoming Calls edges. - RFC-0021:
mycelium_get_caller_treeMCP tool β returns{ root: { path, callers: [...] } }; max_depth defaults to 4, capped at 10; unknown path returns{ error }. - RFC-0022:
Store::entry_points(prefix)β returns all symbol paths (containing>) with zero incoming Calls edges, sorted lexicographically; optional prefix filter. - RFC-0022:
mycelium_get_entry_pointsMCP tool β returns{ entry_points: [...] }; optionalpath_prefixfilter; excludes file-level nodes. - RFC-0023:
Store::imports_of(id)/Store::imported_by(id)β outgoing/incomingImportsedge resolvers; results sorted lexicographically. - RFC-0023:
mycelium_get_importsMCP tool β returns{ imports: [...], imported_by: [...] }for a path; unknown path returns{ error }. - RFC-0024:
ImportNode { id, imports }struct β DFS import dependency tree node; cycle-safe via path-tracking visited set. - RFC-0024:
Store::import_tree(id, max_depth)β depth-limited recursive DFS over outgoingImportsedges. - RFC-0024:
mycelium_get_import_treeMCP tool β returns{ root: { path, imports: [...] } }; max_depth defaults to 4, capped at 10; unknown path returns{ error }. - RFC-0025:
mycelium_batch_symbol_infoMCP tool β batch variant ofmycelium_get_symbol_info; accepts up to 50 paths in one call; returns{ symbols: [{ path, ancestors, descendants, callers, callees }] }in input order; unknown paths return{ path, error }without failing the whole request. - RFC-0026:
mycelium_get_extendsMCP tool β returns{ extends, extended_by }for a path usingEdgeKind::Extends; both lists sorted lexicographically; unknown path returns{ error }. - RFC-0026:
mycelium_get_implementsMCP tool β returns{ implements, implemented_by }for a path usingEdgeKind::Implements; both lists sorted lexicographically; unknown path returns{ error }. - RFC-0027:
Store::find_import_path(from, to, max_depth)β BFS shortest import-dependency path; returnsSome(Vec<NodeId>)including both endpoints orNoneif unreachable; cycle-safe;max_depthlimits hops. - RFC-0027:
mycelium_find_import_pathMCP tool β BFS import chain tool; request{ from_path, to_path, max_depth? }; returns{ path, hops }on success or{ path: [], hops: null, message }when unreachable; unknown paths return{ error }. - RFC-0028:
Store::kind_mapβ per-nodeNodeKindmetadata stored alongside each node; zero query-time cost. - RFC-0028:
Store::set_kind(id, kind),Store::kind_of(id) -> Option<NodeKind>,Store::symbols_of_kind(kind, prefix) -> Vec<String>β kind storage and query methods. - RFC-0028:
Extractornow callsset_kindfor every extracted node (file βFile, functions βFunction, classes βClass, methods βMethod, etc.). - RFC-0028:
mycelium_get_node_kindMCP tool β returns{ path, kind }where kind is the wire string ornullif unrecorded; unknown path returns{ error }. - RFC-0028:
mycelium_get_symbols_by_kindMCP tool β returns{ symbols: [...] }for all indexed symbols of a given kind; optionalpath_prefixfilter; unknown kind returns{ error }. - RFC-0029:
SourceSpannow derivesSerialize+Deserializeso it persists in the MessagePack snapshot. - RFC-0029:
Store::set_span(id, span),Store::span_of(id) -> Option<SourceSpan>β source location storage and retrieval. - RFC-0029:
Extractornow callsset_spanfor every extracted node using tree-sitter node positions (rows converted to 1-indexed lines). - RFC-0029:
mycelium_get_source_spanMCP tool β returns{ path, start_line, start_col, end_line, end_col, start_byte, end_byte }on hit,{ path, span: null }when unrecorded, or{ error }when path is not found. - RFC-0030:
Store::find_extends_path(from, to, max_depth)β BFS shortest extends-chain search overEdgeKind::Extends; completes thefind_*_pathtriad. - RFC-0030:
mycelium_find_extends_pathMCP tool β returns{ path, hops }on success,{ path: [], hops: null, message }when unreachable, or{ error }for unknown paths;max_depthdefaults to 8, capped at 20. - RFC-0031:
ExtendsNode { id, parents }struct β DFS superclass tree node; cycle-safe via path-tracking visited set with backtrack removal. - RFC-0031:
Store::extends_tree(id, max_depth)β depth-limited recursive DFS over outgoingExtendsedges. - RFC-0031:
mycelium_get_extends_treeMCP tool β returns{ root: { path, parents: [...] } };max_depthdefaults to 4, capped at 10; unknown path returns{ error }. - RFC-0032:
SubclassNode { id, subclasses }struct β DFS subclass forest node; cycle-safe via path-tracking visited set with backtrack removal. - RFC-0032:
Store::subclasses_tree(id, max_depth)β depth-limited recursive DFS over incomingExtendsedges. - RFC-0032:
mycelium_get_subclasses_treeMCP tool β returns{ root: { path, subclasses: [...] } };max_depthdefaults to 4, capped at 10; unknown path returns{ error }. Complementsextends_tree(outgoing) for full class-hierarchy exploration. - RFC-0033:
Store::find_implements_path(from, to, max_depth)β BFS shortest implements-chain search overEdgeKind::Implements; completes thefind_*_pathfamily (calls / imports / extends / implements). - RFC-0033:
mycelium_find_implements_pathMCP tool β returns{ path, hops }on success,{ path: [], hops: null, message }when unreachable, or{ error }for unknown paths;max_depthdefaults to 8, capped at 20. - RFC-0034:
ImplementsNode { id, interfaces }struct β DFS interface hierarchy node; cycle-safe via path-tracking visited set with backtrack removal. - RFC-0034:
Store::implements_tree(id, max_depth)β depth-limited recursive DFS over outgoingImplementsedges. - RFC-0034:
mycelium_get_implements_treeMCP tool β returns{ root: { path, interfaces: [...] } };max_depthdefaults to 4, capped at 10; unknown path returns{ error }. - RFC-0035:
ImplementorNode { id, implementors }struct β DFS implementor forest node; cycle-safe via path-tracking visited set with backtrack removal. - RFC-0035:
Store::implementors_tree(id, max_depth)β depth-limited recursive DFS over incomingImplementsedges. - RFC-0035:
mycelium_get_implementors_treeMCP tool β returns{ root: { path, implementors: [...] } };max_depthdefaults to 4, capped at 10; unknown path returns{ error }. Completes the Implements family. - RFC-0036:
ImporterNode { id, importers }struct β DFS reverse-dependency tree node; cycle-safe via path-tracking visited set with backtrack removal. - RFC-0036:
Store::importers_tree(id, max_depth)β depth-limited recursive DFS over incomingImportsedges. - RFC-0036:
mycelium_get_importers_treeMCP tool β returns{ root: { path, importers: [...] } };max_depthdefaults to 4, capped at 10; unknown path returns{ error }. Completes the Imports family and the full symmetric DFS coverage for all fourEdgeKindvariants. - RFC-0037:
Store::dead_symbols(prefix)β returns all symbol paths (containing>) with zero incomingCallsedges and zero incomingImportsedges; file-level nodes excluded; optional prefix filter; results sorted lexicographically. - RFC-0037:
mycelium_get_dead_symbolsMCP tool β dead-code analysis tool; returns{ dead_symbols: [...], count: N }; optionalpath_prefixfilter; dead symbols are candidates for deletion or documentation review. - RFC-0038:
GraphStats { total_nodes, total_edges, nodes_by_kind, edges_by_kind }struct β per-kind breakdown of the indexed graph. - RFC-0038:
Synapse::edge_counts_by_kind()β iterator over non-empty(EdgeKind, usize)pairs. - RFC-0038:
Store::graph_stats()β returnsGraphStatswith node counts grouped byNodeKindand edge counts grouped byEdgeKind; kinds with zero count are omitted. - RFC-0038:
mycelium_get_statsMCP tool β comprehensive per-kind statistics; extendsmycelium_server_statuswith the breakdown needed for architectural analysis; returns{ total_nodes, total_edges, nodes_by_kind, edges_by_kind }. - RFC-0039:
CrossRefs { callers, importers, extended_by, implemented_by }struct β all incoming edges for a symbol grouped byEdgeKind. - RFC-0039:
Store::cross_refs(id)β collects incomingCalls,Imports,Extends, andImplementsedges and resolves them to sorted path strings; all four lists always present. - RFC-0039:
mycelium_get_cross_refsMCP tool β unified "who references this?" primitive for impact analysis; returns{ callers, importers, extended_by, implemented_by }or{ error }for unknown paths. - RFC-0040:
Store::nodes_in_cycles(edge_kind, prefix)β iterative DFS within_stacktracking; returns all paths participating in at least one cycle for the givenEdgeKind; optional prefix filter; results sorted lexicographically. - RFC-0040:
mycelium_detect_cyclesMCP tool β circular dependency detection;edge_kindmust be"calls","imports","extends", or"implements"; returns{ cycle_nodes, count }or{ error }for unknown edge kind. - RFC-0041:
OutgoingRefs { callees, imports, extends, implements }struct β all outgoing edges from a symbol grouped byEdgeKind; symmetric complement toCrossRefs. - RFC-0041:
Store::outgoing_refs(id)β collects outgoingCalls,Imports,Extends,Implementsedges and resolves them to sorted path strings; all four lists always present. - RFC-0041:
mycelium_get_outgoing_refsMCP tool β "what does this reference?" primitive; paired withmycelium_get_cross_refsprovides complete incoming/outgoing reference picture in two calls; returns{ callees, imports, extends, implements }or{ error }. - RFC-0042:
Store::all_symbols(prefix, kind)β returns all non-file symbol paths (paths containing>), sorted lexicographically, with optional path-prefix andNodeKindfilters; file-level nodes are excluded. - RFC-0042:
mycelium_get_all_symbolsMCP tool β enumerates every indexed symbol across all kinds; accepts optionalpath_prefixandkindparameters; returns{ symbols, count }or{ error }for an unknown kind string. - RFC-0043:
Store::reachable_from(id, kind, max_depth)β flat BFS reachability from a node via outgoing edges of anyEdgeKind, depth-limited (cap 20), cycle-safe; starting node excluded; results sorted lexicographically. - RFC-0043:
mycelium_get_reachableMCP tool β transitive dependency enumeration in a single call; acceptspath,edge_kind, and optionalmax_depth; returns{ reachable, count }or{ error }for unknown path or edge kind. - RFC-0044:
Store::reachable_to(id, kind, max_depth)β flat BFS backward reachability following incomingEdgeKindedges; depth-limited (cap 20), cycle-safe, starting node excluded; symmetric complement toreachable_from. - RFC-0044:
mycelium_get_reachable_toMCP tool β impact analysis primitive answering "who transitively depends on this symbol?"; paired withmycelium_get_reachableprovides complete forward+backward reachability. - RFC-0045:
Store::siblings(id)β returns all direct siblings (other children of the same parent container in the containment tree), excluding the node itself; root nodes return emptyVec; results sorted lexicographically. - RFC-0045:
mycelium_get_siblingsMCP tool β "what else is in this class/file?" query in a single call; returns{ siblings, count }or{ error }for unknown paths. - RFC-0046:
NodeDegreestruct β per-node edge count summary: in/out degree for each of the fourEdgeKinds (calls, imports, extends, implements). - RFC-0046:
Store::node_degree(id)β O(1) per-kind edge count summary without pulling full edge lists; useful for fast coupling analysis and hub-node detection. - RFC-0046:
mycelium_get_node_degreeMCP tool β connectivity fingerprint for any path; returns{ in_calls, out_calls, in_imports, out_imports, in_extends, out_extends, in_implements, out_implements }or{ error }. - RFC-0047:
Store::top_files(limit)β returns top-N source files ranked by direct child symbol count (descending), ties broken alphabetically; files with no direct symbols excluded; limit capped at 100. - RFC-0047:
mycelium_get_top_filesMCP tool β god-file detector identifying the most symbol-dense source files; returns{ files: [{ path, symbol_count }], count }. - RFC-0048:
Store::most_connected(limit, kind)β top-N symbol nodes ranked by total degree (in + out) for any EdgeKind; zero-degree nodes excluded; sorted descending by degree, ties broken alphabetically; limit capped at 100. - RFC-0048:
mycelium_get_most_connectedMCP tool β hub-node detector for any edge kind; returns{ symbols: [{ path, degree }], count }or{ error }for unknown edge kind. - RFC-0049:
Store::leaf_symbols(kind, limit)β symbol nodes with out-degree 0 for any EdgeKind; symmetric complement toentry_points(RFC-0022, in-degree 0 for Calls); sorted alphabetically; limit capped at 100. - RFC-0049:
mycelium_get_leaf_symbolsMCP tool β leaf-implementation detector for any edge kind; returns{ symbols, count }or{ error }for unknown edge kind. - RFC-0050:
Store::shortest_path(from, to, kind)β BFS minimum-hop path between two symbol nodes via outgoing EdgeKind edges; returnsSome(path_strings)with both endpoints, orNoneif unreachable; cycle-safe. - RFC-0050:
mycelium_get_shortest_pathMCP tool β "how does A reach B?" in a single call; returns{ path, length }if found,{ path: null, length: null }if no path, or{ error }for unknown edge kind or unrecognised node paths. - RFC-0051:
Store::symbol_count_by_kind()β per-NodeKindsymbol histogram fromkind_map; wire-string keys sorted alphabetically; zero-count kinds excluded. - RFC-0051:
Store::upsert_node_with_kind(path, kind)β convenience method: insert or retrieve a node and record itsNodeKindin a single call. - RFC-0051:
mycelium_get_symbol_count_by_kindMCP tool β codebase composition histogram; returns{ kinds: [{ kind, count }], total }. - RFC-0052:
Store::common_callers(target_ids, kind)β set intersection of each target's incoming-neighbour set for any EdgeKind; answers "which symbols depend on ALL of these targets?"; results sorted alphabetically. - RFC-0052:
mycelium_get_common_callersMCP tool β shared-dependency detector; accepts{ paths, edge_kind }and returns{ callers, count }or{ error }. - RFC-0053:
Store::fan_out_rank(kind, limit)β top-N symbol nodes ranked by out-degree for any EdgeKind; "orchestrator detector" identifying symbols that call/import/extend many others; zero-degree nodes excluded; sorted descending by degree, ties broken alphabetically; limit capped at 100. - RFC-0053:
mycelium_get_fan_out_rankMCP tool β identifies orchestrating symbols; returns{ symbols: [{ path, out_degree }], count }or{ error }for unknown edge kind; limit defaults to 10. - RFC-0054:
Store::fan_in_rank(kind, limit)β top-N symbol nodes ranked by in-degree for any EdgeKind; "hotspot detector" identifying symbols depended upon by many others; zero-degree nodes excluded; sorted descending by degree, ties broken alphabetically; limit capped at 100. Symmetric complement tofan_out_rank. - RFC-0054:
mycelium_get_fan_in_rankMCP tool β identifies high-demand hotspot symbols; returns{ symbols: [{ path, in_degree }], count }or{ error }for unknown edge kind; limit defaults to 10. - RFC-0055:
Store::common_callees(source_ids, kind)β set intersection of each source's outgoing-neighbour set for any EdgeKind; answers "which symbols are called/imported by ALL of these sources?"; results sorted alphabetically. Symmetric complement tocommon_callers(RFC-0052). - RFC-0055:
mycelium_get_common_calleesMCP tool β shared-dependency detector (outgoing direction); accepts{ paths, edge_kind }and returns{ callees, count }or{ error }. - RFC-0056:
Store::isolated_symbols(prefix)β symbol nodes with zero connectivity across all four EdgeKinds (Calls, Imports, Extends, Implements); stronger thandead_symbols(RFC-0037) which only checks incoming edges; optional path prefix filter; results sorted alphabetically. - RFC-0056:
mycelium_get_isolated_symbolsMCP tool β completely-disconnected symbol detector; returns{ isolated_symbols, count }; optionalpath_prefixfilter. - RFC-0057:
Store::scc_groups(kind)β Tarjan's iterative Strongly Connected Components algorithm over symbol nodes for a given EdgeKind; returns groups of size β₯ 2 (singletons excluded), sorted by size descending then by first path ascending; reveals mutually-recursive dependency clusters. - RFC-0057:
mycelium_get_scc_groupsMCP tool β mutually-recursive symbol cluster detector; accepts{ edge_kind }and returns{ groups, group_count, total_symbols }or{ error }for unknown edge kind. - RFC-0058:
Store::dependency_layers(kind)β Kahn's BFS topological dependency layering; layer 0 = utility/leaf symbols (zero outgoing edges forkind), layer k+1 = symbols all of whose direct dependencies are in layers 0..=k; symbols in cycles excluded; paths within each layer sorted ascending. - RFC-0058:
mycelium_get_dependency_layersMCP tool β architectural layering inspector; accepts{ edge_kind }and returns{ layers, layer_count, total_symbols, cycle_excluded_count }or{ error }for unknown edge kind. Complementsscc_groups(cycles) andentry_points(zero in-degree). - RFC-0059:
Store::two_hop_neighbors(id, kind)β symbol paths reachable in exactly 2 outgoing steps forkind; excludes source and direct (1-hop) neighbours; focused bridge detector without full reachability traversal; results sorted ascending. - RFC-0059:
mycelium_get_two_hop_neighborsMCP tool β indirect dependency bridge detector; accepts{ path, edge_kind }and returns{ neighbors, count },{ neighbors: [], count: 0 }for unknown path, or{ error }for unknown edge kind. - RFC-0060:
Store::symbol_neighborhood(id, kind)+SymbolNeighborhoodstruct β ego-graph of a symbol for a single EdgeKind; returns path + direct incoming + direct outgoing, both lists sorted ascending; returns empty neighborhood for unknown id. - RFC-0060:
mycelium_get_symbol_neighborhoodMCP tool β bidirectional single-kind ego-graph query; accepts{ path, edge_kind }and returns{ path, incoming, outgoing, incoming_count, outgoing_count }, empty neighborhood for unknown path, or{ error }for unknown edge kind. - RFC-0061:
Store::hub_symbols(kind, min_in, min_out, limit)β symbols with both in-degree β₯min_inAND out-degree β₯min_outfor a given EdgeKind; returns(path, in_degree, out_degree)sorted byin_degree + out_degreedescending (ties by path ascending); limit capped at 100; file nodes excluded. - RFC-0061:
mycelium_get_hub_symbolsMCP tool β architectural hub detector identifying symbols that are both widely-used (high in-degree) and orchestrating (high out-degree); accepts{ edge_kind, min_in?, min_out?, limit? }and returns{ hubs: [{ path, in_degree, out_degree }], count }or{ error }for unknown edge kind;min_in/min_outdefault to 1. - RFC-0062:
Store::singly_referenced(kind, limit)β symbols with exactly one incoming edge for a given EdgeKind; returns(symbol_path, referencing_path)pairs sorted by symbol path ascending; limit capped at 100; file nodes excluded. Fills the in-degree=1 gap betweenentry_points(0) andfan_in_rank(top-N). - RFC-0062:
mycelium_get_singly_referencedMCP tool β inlining and privatisation candidate detector; accepts{ edge_kind, limit? }and returns{ symbols: [{ path, referenced_by }], count }or{ error }for unknown edge kind; limit defaults to 10. - RFC-0063:
Store::batch_reachable_to(ids, kind, max_depth)β union of transitive incoming dependents for a set of symbols; deduplicated, input nodes excluded, sorted ascending, max_depth capped at 20. Answers "what is the total blast radius if any of these symbols change?" - RFC-0063:
mycelium_batch_reachable_toMCP tool β total change-impact surface in one call; accepts{ paths (up to 20), edge_kind, max_depth? }and returns{ reachable, count }or{ error }for unknown edge kind; max_depth defaults to 10. - RFC-0064:
Store::k_core(kind, k)β k-core decomposition of the symbol graph; the maximal induced subgraph where every node has total degree (in + out within the subgraph) β₯ k; iterative peeling algorithm; k=0 returns all symbols; file nodes excluded; results sorted ascending. - RFC-0064:
mycelium_get_k_coreMCP tool β hard-to-refactor core detector; accepts{ edge_kind, k? }and returns{ core, count, k }or{ error }for unknown edge kind; k defaults to 2. - RFC-0065:
Store::batch_reachable_from(ids, kind, max_depth)β union of symbols transitively reachable FROM a set of sources via outgoing edges; deduplicated, input nodes excluded, sorted ascending, max_depth capped at 20. Symmetric complement ofbatch_reachable_to(RFC-0063). - RFC-0065:
mycelium_batch_reachable_fromMCP tool β collective forward-reachability in one call; accepts{ paths (up to 20), edge_kind, max_depth? }and returns{ reachable, count }or{ error }for unknown edge kind; max_depth defaults to 10. - RFC-0066:
Store::batch_node_degree(ids)β returns oneNodeDegreeperNodeIdin input order; ids absent from the synapse returnNodeDegree::default()(all counts zero). Batch version ofnode_degree(RFC-0046) eliminating N round trips when analysing a set of related symbols. - RFC-0066:
mycelium_batch_node_degreeMCP tool β batch degree query for up to 50 symbols in one call; accepts{ paths }and returns{ degrees: [{ path, in_calls, out_calls, in_imports, out_imports, in_extends, out_extends, in_implements, out_implements }], count }with unknown paths returning{ path, error: "path not found" }; results in input order. - RFC-0067:
Store::cycle_members(kind)β paths of all symbol nodes participating in at least one directed cycle for a given EdgeKind; uses iterative Kosaraju's SCC algorithm (O(V+E)); file nodes excluded; results sorted ascending. Returns[]when no cycles exist. - RFC-0067:
mycelium_find_cycle_membersMCP tool β circular dependency detector; accepts{ edge_kind }and returns{ members, count }(cycle-member symbol paths, sorted) or{ error }for unknown edge kind. Detects circular imports, mutually-recursive functions, and inheritance cycles. - RFC-0068:
Store::weakly_connected_components(kind)β groups symbol nodes into weakly-connected components (WCCs) treating edges as undirected; uses path-compressed Union-Find (O(Ξ±(V)Β·E)); components sorted by size descending (ties by first element); file nodes excluded. Surfaces isolated clusters and self-contained subsystems. - RFC-0068:
mycelium_get_wccMCP tool β cluster detector; accepts{ edge_kind, min_size? }and returns{ components, component_count, total_symbols }or{ error }for unknown edge kind;min_size(default 1) filters singletons to focus on real clusters. - RFC-0069:
Store::topological_sort(kind)β topological ordering of the symbol graph via Kahn's BFS algorithm; returnsTopologicalOrder { order, cycle_members }whereorderplaces each symbol after all itskind-predecessors (ties broken by path ascending) andcycle_memberslists symbols that form directed cycles; file nodes excluded. - RFC-0069:
mycelium_topological_sortMCP tool β dependency order analysis; accepts{ edge_kind }and returns{ order, cycle_members, ordered_count, cycle_count }or{ error }for unknown edge kind. Useful for build order, initialization sequences, and layered architecture validation. - RFC-0070:
Store::articulation_points(kind)β cut vertices in the undirected symbol graph for a given EdgeKind via iterative Tarjan DFS (O(V+E)); file nodes excluded; singleton nodes (degree 0) never returned; results sorted ascending. A node is an articulation point if its removal disconnects its weakly-connected component. - RFC-0070:
mycelium_find_articulation_pointsMCP tool β single-point-of-failure detector; accepts{ edge_kind }and returns{ points, count }or{ error }for unknown edge kind. Identifies modules whose removal fragments the dependency graph β critical for safe refactoring and resilience analysis. - RFC-0071:
Store::bridge_edges(kind)β bridge edges (cut edges) in the undirected symbol graph via iterative Tarjan bridge-finding DFS (O(V+E)); file nodes excluded; multigraph-safe (parallel edges are not bridges); canonical(from β€ to)pairs sorted ascending. Complements articulation points (RFC-0070): where APs are vertex cut-points, bridges are edge cut-points. - RFC-0071:
mycelium_find_bridge_edgesMCP tool β fragile single-link connection detector; accepts{ edge_kind }and returns{ bridges: [{ from, to }], count }or{ error }for unknown edge kind. Identifies dependency edges whose removal would disconnect two subsystems. - RFC-0072:
Store::biconnected_components(kind)β partitions the undirected symbol graph into biconnected components (BCCs) via iterative Tarjan BCC detection with edge stack (O(V+E)); bridge edges produce 2-node BCCs; larger BCCs represent cycle-rich cohesive clusters; singletons excluded; groups sorted by size descending. Completes the cut-point analysis trilogy: WCC (RFC-0068), articulation points (RFC-0070), bridge edges (RFC-0071). - RFC-0072:
mycelium_get_biconnected_componentsMCP tool β tightly-coupled cluster detector; accepts{ edge_kind }and returns{ components, component_count, total_symbols }or{ error }for unknown edge kind. Reveals which symbol groups are so interdependent that no single node is a cut point. - RFC-0073:
DegreeHistogram { in_degrees, out_degrees }struct β frequency distribution of in- and out-degrees as(degree, count)pairs sorted ascending. - RFC-0073:
Store::degree_histogram(kind)β O(V) in- and out-degree frequency histograms over all symbol nodes for a given EdgeKind; degree 0 included; file nodes excluded. - RFC-0073:
mycelium_get_degree_histogramMCP tool β graph shape analysis; accepts{ edge_kind }and returns{ in_degrees: [{degree, count}], out_degrees: [{degree, count}], total_symbols }or{ error }. Power-law shape = hub-spoke architecture; uniform = balanced modular design. - RFC-0074:
EdgeKindMetrics { symbol_count, directed_edge_count, density, avg_degree, max_in_degree, max_out_degree }struct β structural summary for one EdgeKind. - RFC-0074:
Store::graph_metrics(kind)β O(V+E) structural summary: directed graph density (E / V(V-1)), average degree, and maximum in/out degree across all symbol nodes; file nodes excluded. - RFC-0074:
mycelium_get_graph_metricsMCP tool β instant architectural health check; accepts{ edge_kind }and returns{ symbol_count, directed_edge_count, density, avg_degree, max_in_degree, max_out_degree }or{ error }. Density near 0 = sparse/modular; near 1 = tightly coupled. - RFC-0075:
Store::neighbor_similarity_stats(id1, id2, kind)β returns(similarity, shared, total)in one pass; N(x) = outgoing βͺ incoming neighbors (self excluded); Jaccard = shared / total; both isolated β (0.0, 0, 0). O(max_degree). - RFC-0075:
Store::neighbor_similarity(id1, id2, kind)β Jaccard similarity β [0.0, 1.0] between combined neighbor sets for a given EdgeKind; thin wrapper overneighbor_similarity_stats. - RFC-0075:
mycelium_get_neighbor_similarityMCP tool β structural role similarity detector; accepts{ path1, path2, edge_kind }and returns{ similarity, shared, total }or{ error }. Score 1.0 = identical structural roles (same callers+callees); 0.0 = no overlap. Useful for refactoring candidates and duplicate detection. - RFC-0076:
Store::clustering_coefficient_stats(id, kind)β returns(coefficient, neighbor_count, neighbor_edge_count)in one pass; CC(u) = #{directed edges among N(u)} / (|N(u)|*(|N(u)|-1)); N(u) = outgoing βͺ incoming, self and file nodes excluded;|N| < 2β 0.0. O(degreeΒ²). - RFC-0076:
Store::clustering_coefficient(id, kind)β local clustering coefficient β [0.0, 1.0] for a symbol node; thin wrapper overclustering_coefficient_stats. High CC = node embedded in tightly-coupled cluster. - RFC-0076:
mycelium_get_clustering_coefficientMCP tool β cluster density probe; accepts{ path, edge_kind }and returns{ coefficient, neighbor_count, neighbor_edge_count }or{ error }. Complements neighbor_similarity (RFC-0075): measures how densely a single node's neighborhood is interconnected. - RFC-0077:
Store::eccentricity_stats(id, kind)β returns(max_distance, reachable_count)via single BFS (O(V+E)); file nodes excluded; isolated node β (0, 0). - RFC-0077:
Store::eccentricity(id, kind)β maximum BFS distance from a symbol node to any reachable symbol node; thin wrapper overeccentricity_stats. - RFC-0077:
mycelium_get_eccentricityMCP tool β directed reach depth probe; accepts{ path, edge_kind }and returns{ eccentricity, reachable_count }or{ error }. High eccentricity = deep dependency chains emanating from this node. - RFC-0078:
Store::harmonic_centrality_stats(id, kind)β returns(centrality, reachable_count, symbol_count)via single BFS (O(V+E)); HC(u) = (1/(n-1))ΓΞ£(1/d(v)); unreachable nodes contribute 0; file nodes excluded. - RFC-0078:
Store::harmonic_centrality(id, kind)β harmonic centrality β [0.0, 1.0]; thin wrapper overharmonic_centrality_stats. Near 1.0 = reaches all symbols in ~1 hop; 0.0 = isolated. - RFC-0078:
mycelium_get_harmonic_centralityMCP tool β average closeness probe; accepts{ path, edge_kind }and returns{ harmonic_centrality, reachable_count, symbol_count }or{ error }. Complements eccentricity (RFC-0077): average vs. max distance. - RFC-0079:
MutualReachabilitystruct βforward,backward,mutualflags plusforward_distance/backward_distanceOption<usize>hop counts. - RFC-0079:
Store::mutual_reachability(id1, id2, kind)β bidirectional BFS reachability; two traversals O(V+E) each;id1 == id2short-circuits with both distancesSome(0); file nodes excluded. - RFC-0079:
mycelium_get_mutual_reachabilityMCP tool β bidirectional reachability probe; accepts{ path1, path2, edge_kind }and returns{ forward, backward, mutual, forward_distance, backward_distance }or{ error }. Answers "are these two symbols connected, and in which direction(s)?". - RFC-0080:
Store::reachable_set(id, kind)β BFS transitive closure from a symbol node; returns sorted paths of all reachable symbols (source excluded, file nodes excluded); O(V+E). Answers "what does this symbol transitively call/import/extend?". - RFC-0080:
mycelium_get_reachable_setMCP tool β transitive dependency explorer; accepts{ path, edge_kind }and returns{ reachable, count }or{ error }. - RFC-0081:
Store::reaches_into(id, kind)β reverse BFS transitive closure; returns sorted paths of all symbols that can transitively reachidviakindedges (source excluded, file nodes excluded); O(V+E). Answers "what transitively depends on this symbol?". - RFC-0081:
mycelium_get_reaches_intoMCP tool β reverse transitive dependency explorer; accepts{ path, edge_kind }and returns{ callers, count }or{ error }. Symmetric companion tomycelium_get_reachable_set. - RFC-0082:
PageRankEntrystruct{ path, score }β one result entry frompage_rank. - RFC-0082:
Store::page_rank(kind, damping, iterations)β iterative power-method PageRank; dangling nodes redistribute mass uniformly; damping clamped[0.0, 1.0]; file nodes excluded; returns entries sorted descending by score. Identifies globally important hub symbols. - RFC-0082:
mycelium_page_rankMCP tool β global importance ranker; accepts{ edge_kind, damping?, iterations?, top_n? }and returns{ nodes: [{path, score}], symbol_count, top_n }or{ error }. Complements local metrics (harmonic centrality, eccentricity) with a global ranking. - RFC-0083:
Store::common_reachable(id1, id2, kind)β intersection of transitive reachable sets of two symbol nodes;id1 == id2equalsreachable_set; file nodes excluded; sorted alphabetically; O(V+E). Answers "what symbols do both nodes transitively depend on?". - RFC-0083:
mycelium_get_common_reachableMCP tool β shared dependency finder; accepts{ path1, path2, edge_kind }and returns{ common, count }or{ error }. Useful for refactoring analysis and finding shared utilities. - RFC-0084:
Store::k_hop_neighbors(id, kind, k)β BFS frontier at exactly depth k; nodes reached at depth < k excluded; source excluded; file nodes excluded; sorted alphabetically; O(V+E). Answers "what is reachable at exactly depth k?". - RFC-0084:
mycelium_get_k_hop_neighborsMCP tool β depth-scoped neighbor probe; accepts{ path, edge_kind, k }and returns{ neighbors, count, k }or{ error }. k=1 = direct neighbors; k=2 = two-hop callees only. - RFC-0085:
BetweennessEntrystruct{ path, score }β one result entry frombetweenness_centrality. - RFC-0085:
Store::betweenness_centrality(kind)β Brandes' O(VΓ(V+E)) algorithm; BFS per source with backward delta accumulation; normalized by (n-1)Γ(n-2); file nodes excluded; sorted descending. Identifies bridge nodes that lie on many shortest dependency paths. - RFC-0085:
mycelium_get_betweenness_centralityMCP tool β bridge node detector; accepts{ edge_kind, top_n? }and returns{ nodes: [{path, score}], symbol_count, top_n }or{ error }. Score β [0, 1]; high score = critical bottleneck. - RFC-0086:
SccEntrystruct{ members, size }β one strongly connected component fromstrongly_connected_components. - RFC-0086:
Store::strongly_connected_components(kind)β iterative Tarjan's O(V+E) algorithm; identifies groups of symbols that mutually depend on each other (circular dependencies); members sorted alphabetically; results sorted descending by size. - RFC-0086:
mycelium_get_strongly_connected_componentsMCP tool β circular dependency detector; accepts{ edge_kind, min_size? }(defaultmin_size=1; use2for non-trivial cycles only) and returns{ components: [{members, size}], total_components, symbol_count, min_size }or{ error }. - RFC-0087:
DegreeCentralityEntrystruct{ path, in_degree, out_degree, in_centrality, out_centrality }β one result entry fromdegree_centrality. - RFC-0087:
Store::degree_centrality(kind)β O(V+E) in-degree and out-degree centrality; both scores normalized by(n-1); sorted descending byin_centrality. Identifies fan-in hubs (widely-used dependencies) and fan-out hubs (wide surface area). - RFC-0087:
mycelium_get_degree_centralityMCP tool β degree hub detector; accepts{ edge_kind, top_n?, sort_by? }(sort_by: "in"or"out", defaults to"in") and returns{ nodes: [{path, in_degree, out_degree, in_centrality, out_centrality}], symbol_count, top_n, sort_by }or{ error }. - RFC-0089:
Store::dependency_depth(id, kind) -> Option<usize>β longest-path distance from any root (no incoming symbol edges ofkind) toid, following incoming edges; cycle-safe via relaxation updates; file nodes excluded; returnsNonefor unknown or file-level nodes; leaf nodes returnSome(0). - RFC-0089:
mycelium_get_dependency_depthMCP tool β accepts{ path, edge_kind }and returns{ path, depth, edge_kind }on success, or{ error }for unknown path, file node, or unrecognised edge kind. Depth 0 = root; depth N = N layers of dependents above the node. - RFC-0088:
ClosenessCentralityEntrystruct{ path, score }β one result entry fromcloseness_centrality. - RFC-0088:
Store::closeness_centrality(kind)β Wasserman-Faust normalized BFS closeness;CC_WF(v) = (n_reach/(n-1))^2 * (n_reach/sum_dist); handles disconnected graphs; file nodes excluded; sorted descending. Identifies well-connected hubs that propagate influence quickly. - RFC-0088:
mycelium_get_closeness_centralityMCP tool β connection hub detector; accepts{ edge_kind, top_n? }and returns{ nodes: [{path, score}], symbol_count, top_n }or{ error }. Score β [0, 1]. - RFC-0090:
compact_mode: Arc<AtomicBool>field onMyceliumServerβ server-side flag that switches symbol-search output format; thread-safe viaAtomicBool; defaults tofalse. - RFC-0090:
mycelium_set_compact_modeMCP tool β toggle compact output; accepts{ "enabled": true | false }and returns{ compact_mode, message }. - RFC-0090:
mycelium_get_token_statsMCP tool β sample-payload byte-count comparison; returns{ sample_query, json_bytes, msgpack_bytes, ratio }to let callers verify the Charter Β§2 AI token-efficiency SLA (raw MessagePack bytes vs JSON bytes). - RFC-0090:
mycelium_search_symbolβ when compact mode is enabled, serialises the result withrmp_serde::to_vec_namedand returns{ "fmt": "msgpack_hex", "data": "<hex>", "bytes": N }instead of plain JSON, achieving significant token-count reduction for large result sets. - RFC-0090:
encode_msgpack_hexprivate helper β encodes anyserde_json::Valueas MessagePack then hex; falls back to plain JSON on serialization error (logged viatracing::warn). - SPRINT-002: CI coverage job now gates on
--fail-under-branches 80in addition to--fail-under-lines 90, enforcing Charter Β§2 / Β§5.4 branch coverage SLA. A second--json --no-runstep captures per-crate branch percentages for Codecov upload. - RFC-0004:
mycelium-hyphaeEvaluatorβ executes a parsed HyphaeAstagainst aStore; supports*,#name,.kind,:calls(),:callers(),:imports(),:extends()pseudo-classes;>child, descendant space, and~sibling combinators; comma union; returns sorted deduplicated paths. - RFC-0004: Parser now accepts empty-argument pseudo-classes
()(e.g.*:calls()matches any symbol with at least one outgoing call edge), mapping them to "match everything" semantics. - RFC-0004:
mycelium_queryMCP tool β accepts{ query, limit? }, runs a Hyphae query against the live index, returns{ results, count, query }on success or{ error }on parse failure. Primary token-efficiency interface for AI agents (Charter Β§2 β€ 30% SLA). - RFC-0004:
mycelium-mcpnow depends onmycelium-hyphaeand importsEvaluatorfor inline query evaluation.
Fixed
-
RFC-0013: Forward-reference calls (callee defined after caller in source order) no longer create duplicate bare stub nodes;
Callsedges now always point to the definition node. -
RFC-0006 / RFC-0005:
.tsxfiles were dispatched toLANGUAGE_TYPESCRIPTwhich cannot parse JSX syntax; corrected to usetree_sitter_typescript::LANGUAGE_TSX.
Changed
- (none)
Deprecated
- (none)
Removed
- (none)
Fixed
- (none)
Security
- (none)