DiffWeave / diffweave /cli /commands /push_cmd.py
shak3008's picture
feat(cli): add dw push command, resilient workspace init, auto commit message approval, and shell-safe quickstart guide
a8391ca
Raw History Blame Contribute Delete
1.95 kB
"""
`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)