File size: 1,949 Bytes
a8391ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
50
51
52
53
54
"""
`dw push` command.
Pushes all approved knowledge proposals into the Master Knowledge Register in the cloud.
"""
from __future__ import annotations

from typing import Optional
import typer

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


def push_command(
    workspace_id: Optional[str] = typer.Option(None, "--workspace", "-w", help="Workspace UUID override"),
    message: Optional[str] = typer.Option(None, "--message", "-m", help="Push commit message"),
    as_json: bool = typer.Option(False, "--json", help="Output machine-readable JSON"),
):
    """
    Push and publish staged document proposals to Master Knowledge Truth.
    """
    try:
        active_ws_id = get_active_workspace(workspace_id)
    except Exception as e:
        print_error(str(e))
        raise typer.Exit(code=1)

    client = DiffWeaveMCPClient()

    if not as_json:
        print_info(f"Pushing knowledge proposals to Master Register for workspace [cyan]{active_ws_id}[/cyan]...")

    try:
        res = client.call_tool_sync(
            "batch_review_proposals",
            {
                "workspace_id": active_ws_id,
                "decision": "APPROVED",
                "comments": message or "Synchronized via dw push",
            },
        )
        count = res.get("processed_count", 0)
        if as_json:
            print_json({"pushed": True, "count": count, "workspace_id": active_ws_id})
        else:
            if count > 0:
                print_success(f"Successfully pushed and committed [bold]{count}[/bold] proposal(s) to Master Knowledge Register!")
            else:
                print_success("Knowledge Register is already up to date with workspace state. Everything synced.")
    except Exception as e:
        print_error(f"Push failed: {e}")
        raise typer.Exit(code=1)