Skip to content

graphsense-lib 2.13.4

Choose a tag to compare

@github-actions github-actions released this 20 May 13:34
· 74 commits to master since this release

[2.13.4] - 2026-05-20

Library (v2.13.4)

Added

  • New MCP tool build_pathfinder_file produces a .gs save file from an investigation agent's findings. The agent passes addresses, transactions, and aggregated edges accumulated via lookup_address / list_neighbors / list_txs_for; the tool returns the .gs bytes as an MCP embedded resource (BlobResourceContents, MIME application/octet-stream, URI file:///<filename>.gs) so clients can hand it to the user as a downloadable attachment without feeding the blob through the model — structured_content carries only {filename, summary} (layout, counts, warnings). Layout is automatic: a new BFS-hierarchical layout (apply_hierarchical_layout in src/graphsenselib/convert/gs_files/encoder.py) runs whenever at least one node is flagged starting_point=true — anchors at column 0, every other node placed by hop distance with txs as stepping stones, within-level order following the spec (so writing the most relevant nodes first puts them near the top of their column); otherwise the columnar GsBuilder defaults apply. The docstring spells out the join semantics (a tx renders only when listed in txs AND referenced from agg_edges.tx_ids) with a worked example, and summary.warnings (_collect_warnings) flags four common authoring mistakes that render an empty/abstract graph: edges with no txs, edges missing tx_ids, tx_ids referencing hashes not in txs, and a/b endpoints not in addresses (advisory only, unknown-id lists truncated to ten). Input boundary uses the same conservative currency/id guards as elsewhere in src/graphsenselib/mcp/tools/consolidated.py. Registered in src/graphsenselib/mcp/curation/tools.yaml under consolidated_tools with replaces: [] — net new surface, no existing tool or endpoint changed.

Changed

  • MCP hides the deprecated entity and status fields on every address, cluster, and raw-tag response. Both fields are already flagged deprecated: true in the OpenAPI schema (Address.entity, Address.status, Entity.entity, NeighborEntity.entity, AddressTag.entity) and the REST surface dual-emits entity alongside the preferred cluster alias for backwards compatibility; surfacing both via MCP made the LLM double-read or pick the wrong one. entity and status are now added to _LEGACY_ADDRESS_FIELDS, entity to _LEGACY_CLUSTER_FIELDS, and a new _LEGACY_TAG_FIELDS = {"entity"} is applied to each row in list_tags_by_address (src/graphsenselib/mcp/tools/consolidated.py). REST endpoints and OpenAPI schemas are unchanged — the deprecation markers continue to advertise the field as legacy for non-MCP consumers.

Fixed

  • Type-checker warnings: namedtuple("Row", ...) calls in tests/schema/test_apply_migrations.py now use names that match their variables (TransformedRow, RawRow). Pure rename — no behavioural change; clears the two mismatched-type-name diagnostics from uv run ty check.

Web API + Python client (webapi-2.13.4)

No changes.

Full Changelog: v2.13.3...v2.13.4