File size: 1,601 Bytes
4d393e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"""
`dw diff` command.
Semantic Knowledge Diff comparing proposed document claims against committed truth.
"""
from __future__ import annotations

from typing import Optional
import typer

from diffweave.cli.config import get_active_workspace
from diffweave.cli.output import render_diff, print_error, print_json
from diffweave.mcp.client import DiffWeaveMCPClient


def diff_command(
    workspace_id: Optional[str] = typer.Option(None, "--workspace", "-w", help="Workspace UUID override"),
    proposal_id: Optional[str] = typer.Option(None, "--proposal", "-p", help="Diff a specific proposal only"),
    document_id: Optional[str] = typer.Option(None, "--document", "-d", help="Filter diff to proposals from document"),
    as_json: bool = typer.Option(False, "--json", help="Output machine-readable JSON"),
):
    """
    Inspect semantic differences, updates, and contradictions between documents and baseline knowledge.
    """
    try:
        active_ws_id = get_active_workspace(workspace_id)
    except Exception as e:
        print_error(str(e))
        raise typer.Exit(code=1)

    client = DiffWeaveMCPClient()

    try:
        diff_data = client.call_tool_sync(
            "get_semantic_diff",
            {
                "workspace_id": active_ws_id,
                "proposal_id": proposal_id,
                "document_version_id": document_id,
            },
        )
    except Exception as e:
        print_error(f"Failed to generate semantic diff: {e}")
        raise typer.Exit(code=1)

    if as_json:
        print_json(diff_data)
    else:
        render_diff(diff_data)