Skip to content

v0.24.0

Choose a tag to compare

@iemejia iemejia released this 13 Jun 19:13
· 177 commits to main since this release

What's New

This release introduces fabio context extract — a new command that builds a relationship graph of Fabric workspace items for use as structured context in coding agents, AI assistants, and external applications. The graph captures items (nodes), their relationships (edges), and workspace metadata, with three layers of discovery depth and incremental building support.

New Command: context extract

fabio context extract scans one or more Fabric workspaces and produces a graph of items and their relationships:

# Quick inventory (~8s for 20 workspaces)
fabio context extract --workspace $WS

# Full relationship discovery via definition scanning (~4m for 154 items)
fabio context extract --workspace $WS --deep --include-connections

# RDF-compatible JSON-LD output for graph databases
fabio context extract --workspace $WS --deep --format jsonld

Key capabilities:

  • Three-layer relationship discovery: properties (fast), definitions via --deep (thorough), connections via --include-connections
  • Parallel execution: concurrent workspace resolution, item listing, and detail fetching
  • 10 relationship types discovered automatically: child_of, has_endpoint, default_lakehouse, bound_to_model, reads_from, streams_to, queries, executes, definition_ref, workspace_ref
  • GUID scanning: discovers all cross-references by regex-matching UUIDs in decoded definitions against a registry of known item IDs — no type-specific parsing logic needed

Incremental Context Building

Agents can build context progressively without re-scanning everything:

# Fast inventory first
fabio context extract --workspace $WS --no-properties --output-file graph.json

# Deepen a specific workspace
fabio context extract --workspace $WS --deep --merge graph.json --output-file graph.json

# Add another workspace
fabio context extract --workspace $WS2 --deep --merge graph.json --output-file graph.json
  • --no-properties — ultra-fast mode (~3s for 20 workspaces), just item names and types
  • --output-file — persist graph to disk for reuse across sessions
  • --merge — load an existing graph and union new nodes/edges into it (idempotent)

JSON-LD Output Format

--format jsonld produces output that is simultaneously valid JSON (agents consume as-is) and valid RDF (importable into Neptune, Stardog, Jena, or any SPARQL endpoint):

{
  "@context": {"fabric": "https://api.fabric.microsoft.com/ontology/", ...},
  "@graph": [
    {"@id": "urn:fabric:item:uuid", "@type": "fabric:Notebook", "name": "...",
     "fabric:defaultLakehouse": {"@id": "urn:fabric:item:target-uuid"}}
  ]
}

No external RDF crate needed — pure serde_json construction.

Performance

Benchmarked against a live tenant with 20 workspaces and 154 items:

Mode Time Edges
Shallow (default) 7.7s 2
Deep + connections 4m 18s 88
No-properties (inventory only) ~3s 0

Improvements

  • Parallel workspace operations: workspace resolution and item listing run concurrently (2x shallow speedup vs sequential)
  • Smart definition skipping: SQLEndpoint, Dashboard, Datamart, PaginatedReport, MLModel, MLExperiment are skipped in deep mode (saves ~20% LRO calls)

API Behaviors Documented

  • bulkExportDefinitions API format documented (was previously undocumented in our codebase): POST /workspaces/{ws}/items/bulkExportDefinitions?beta=True with {"mode":"All"}. Benchmarked but rejected for context extract — requires read+write permissions per item, resulting in only 14/154 items exported vs 35/154 with per-item getDefinition. Completeness > speed for agent context.

Stats

  • 12 commits, 11 files changed, +2,393 / -14 lines
  • 15 unit tests + 20 E2E tests (10 offline dry-run + 10 live tenant validated)
  • Total test count: 1,657 (915 unit + 742 E2E)
  • Cross-compilation: 5/5 targets pass (linux x64/arm64, macOS x64/arm64, Windows x64)

Full Changelog: v0.23.0...v0.24.0

Full Changelog: v0.23.0...v0.24.0