Workspace
workspace
Workspace detection and multi-package analysis.
Detects uv workspaces via [tool.uv.workspace] in pyproject.toml
and aggregates PackageInfo across all member packages.
PackageSummary
Bases: TypedDict
Per-package summary entry inside a :class:WorkspaceContext.
total=False so depth-0 outputs (name only) remain valid.
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
WorkspaceContext
Bases: TypedDict
Aggregate workspace context returned by :func:build_workspace_context.
total=False because the depth-0 view from
:func:format_workspace_context drops package_graph.
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
analyze_workspace(path)
Analyze all packages in a uv workspace.
Discovers workspace members, analyzes each with analyze_package(),
and builds inter-package dependency edges.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
path
|
Path
|
Path to workspace root. |
required |
Returns:
| Type | Description |
|---|---|
WorkspaceInfo
|
WorkspaceInfo with all packages and dependency edges. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If path is not a workspace root. |
Example
ws = analyze_workspace(Path("/path/to/workspace")) len(ws.packages) > 0 True
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
build_workspace_context(path)
Build complete workspace context in one call.
Lists all packages, their mutual dependencies, per-package stats, and the workspace-level dependency graph.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
path
|
Path
|
Path to workspace root. |
required |
Returns:
| Type | Description |
|---|---|
WorkspaceContext
|
Workspace context dict. |
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
build_workspace_dep_graph(ws)
Build an adjacency-list dependency graph between packages.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ws
|
WorkspaceInfo
|
Analyzed workspace info. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, list[str]]
|
Dict mapping package dir name to list of packages it depends on. |
Example
graph = build_workspace_dep_graph(ws) graph["axm-mcp"]
['axm']
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
detect_workspace(path)
Detect a uv workspace at the given path.
Reads pyproject.toml looking for [tool.uv.workspace] members.
If found, resolves each member's source package directory and returns
a populated WorkspaceInfo. Returns None if not a workspace.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
path
|
Path
|
Path to potential workspace root. |
required |
Returns:
| Type | Description |
|---|---|
WorkspaceInfo | None
|
WorkspaceInfo if workspace detected, None otherwise. |
Example
ws = detect_workspace(Path("/path/to/workspace")) ws is not None True
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
format_workspace_context(ctx, *, depth=1)
Apply depth-based filtering to workspace context.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ctx
|
WorkspaceContext
|
Full workspace context from :func: |
required |
depth
|
int
|
Detail level. 0 = compact (names only, no graph),
|
1
|
Returns:
| Type | Description |
|---|---|
WorkspaceContext
|
Filtered workspace context dict. |
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
format_workspace_graph_mermaid(ws)
Format the inter-package dependency graph as Mermaid.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ws
|
WorkspaceInfo
|
Analyzed workspace info. |
required |
Returns:
| Type | Description |
|---|---|
str
|
Mermaid diagram string. |
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
format_workspace_text(ctx)
Format workspace context as compact plain text for ToolResult.text.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ctx
|
WorkspaceContext
|
Workspace context dict from :func: |
required |
Returns:
| Type | Description |
|---|---|
str
|
Compact text string. |
Source code in packages/axm-ast/src/axm_ast/core/workspace.py
parse_workspace_members(text)
Extract workspace member names from pyproject.toml text.
Parses the [tool.uv.workspace] members list. Pure-string helper
promoted to a stable module-public surface so callers (and tests) can
inspect the raw [tool.uv.workspace].members array without forcing
a full :func:analyze_workspace round-trip.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text
|
str
|
Raw pyproject.toml content. |
required |
Returns:
| Type | Description |
|---|---|
list[str]
|
List of member directory names, empty if not found. |