Compare commits
4 Commits
e8a01163fd
...
0.0.4
| Author | SHA1 | Date | |
|---|---|---|---|
| 56fb39de08 | |||
| 8a509e590a | |||
| cb68b0b93f | |||
| 2ed962d639 |
@@ -92,11 +92,13 @@ def build(
|
||||
@cli.command()
|
||||
@click.option("--mcp", is_flag=True, help="Serve MCP documentation")
|
||||
@click.option("--mkdocs", is_flag=True, help="Serve MkDocs site")
|
||||
@click.option("--module", help="Python module to serve")
|
||||
@click.option("--mkdocs-yml", type=click.Path(path_type=Path), default=Path("mkdocs.yml"), help="MkDocs config path")
|
||||
@click.option("--out-dir", type=click.Path(path_type=Path), default=Path("mcp_docs"), help="MCP root directory")
|
||||
def serve(
|
||||
mcp: bool,
|
||||
mkdocs: bool,
|
||||
module: Optional[str],
|
||||
mkdocs_yml: Path,
|
||||
out_dir: Path,
|
||||
) -> None:
|
||||
@@ -106,6 +108,7 @@ def serve(
|
||||
Args:
|
||||
mcp: Serve MCP resources via an MCP server.
|
||||
mkdocs: Serve the MkDocs site using the built-in development server.
|
||||
module: The dotted path of the module to serve.
|
||||
mkdocs_yml: (MkDocs) Path to the mkdocs.yml configuration.
|
||||
out_dir: (MCP) Path to the mcp_docs/ directory.
|
||||
"""
|
||||
@@ -113,37 +116,38 @@ def serve(
|
||||
raise click.UsageError("Cannot specify both --mcp and --mkdocs")
|
||||
if not mcp and not mkdocs:
|
||||
raise click.UsageError("Must specify either --mcp or --mkdocs")
|
||||
if mcp and not module:
|
||||
raise click.UsageError("--module is required for MCP serve")
|
||||
|
||||
if mkdocs:
|
||||
mkdocs_utils.serve(mkdocs_yml)
|
||||
elif mcp:
|
||||
mcp_utils.serve(out_dir)
|
||||
mcp_utils.serve(module, out_dir)
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option(
|
||||
"--modules",
|
||||
multiple=True,
|
||||
"--module",
|
||||
required=True,
|
||||
help="Python module import paths to introspect",
|
||||
help="Python module import path to introspect",
|
||||
)
|
||||
@click.option(
|
||||
"--project-name",
|
||||
help="Project name (defaults to first module)",
|
||||
help="Project name (defaults to specified module)",
|
||||
)
|
||||
def tree(
|
||||
modules: Sequence[str],
|
||||
module: str,
|
||||
project_name: Optional[str],
|
||||
) -> None:
|
||||
"""
|
||||
Visualize the project structure in the terminal.
|
||||
|
||||
Args:
|
||||
modules: List of module import paths to recursively introspect.
|
||||
module: The module import path to recursively introspect.
|
||||
project_name: Optional override for the project name shown at the root.
|
||||
"""
|
||||
loader = GriffeLoader()
|
||||
project = loader.load_project(list(modules), project_name)
|
||||
project = loader.load_project([module], project_name)
|
||||
|
||||
click.echo(project.name)
|
||||
|
||||
|
||||
@@ -20,12 +20,13 @@ def build(
|
||||
def serve(
|
||||
mcp: bool,
|
||||
mkdocs: bool,
|
||||
module: Optional[str],
|
||||
mkdocs_yml: Path,
|
||||
out_dir: Path,
|
||||
) -> None: ...
|
||||
|
||||
def tree(
|
||||
modules: Sequence[str],
|
||||
module: str,
|
||||
project_name: Optional[str],
|
||||
) -> None: ...
|
||||
|
||||
|
||||
@@ -20,11 +20,12 @@ def generate_resources(module: str, project_name: str | None, out_dir: Path) ->
|
||||
renderer = MCPRenderer()
|
||||
renderer.generate_sources(project, out_dir)
|
||||
|
||||
def serve(mcp_root: Path) -> None:
|
||||
def serve(module: str, mcp_root: Path) -> None:
|
||||
"""
|
||||
Serve MCP documentation from a pre-built bundle.
|
||||
|
||||
Args:
|
||||
module: The dotted path of the primary module to serve.
|
||||
mcp_root: Path to the directory containing index.json, nav.json, and modules/.
|
||||
"""
|
||||
if not mcp_root.exists():
|
||||
@@ -42,6 +43,6 @@ def serve(mcp_root: Path) -> None:
|
||||
|
||||
server = MCPServer(
|
||||
mcp_root=mcp_root,
|
||||
name="doc-forge-mcp",
|
||||
name=f"{module}-mcp",
|
||||
)
|
||||
server.run()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from pathlib import Path
|
||||
|
||||
def generate_resources(module: str, project_name: str | None, out_dir: Path) -> None: ...
|
||||
def serve(mcp_root: Path) -> None: ...
|
||||
def serve(module: str, mcp_root: Path) -> None: ...
|
||||
|
||||
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "doc-forge"
|
||||
version = "0.0.3"
|
||||
version = "0.0.4"
|
||||
description = "A renderer-agnostic Python documentation compiler"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.10"
|
||||
|
||||
@@ -10,7 +10,7 @@ def test_mcp_serve(
|
||||
|
||||
result = cli_runner.invoke(
|
||||
cli,
|
||||
["serve", "--mcp", "--out-dir", str(fake_mcp_docs)],
|
||||
["serve", "--mcp", "--module", "fake_module", "--out-dir", str(fake_mcp_docs)],
|
||||
)
|
||||
|
||||
assert result.exit_code == 0
|
||||
|
||||
Reference in New Issue
Block a user