wf_artifacts to end this "with" usage

This commit is contained in:
lda
2026-05-21 06:02:00 +07:00 Verified
parent 8df4c94c4e
commit 0a079ec5f1
12 changed files with 480 additions and 213 deletions
+30 -3
View File
@@ -3,7 +3,11 @@ from __future__ import annotations
import time
from typing import Any
from wf_artifacts.drafts import patch_workflow_draft, validate_workflow_draft
from wf_artifacts.drafts import (
WorkflowDraft,
patch_workflow_draft,
validate_workflow_draft,
)
from .models import WorkflowDraftWorkspace, summarize_draft_workspace
from .store import DraftWorkspaceConflictError, DraftWorkspaceStore
@@ -22,11 +26,14 @@ def create_draft_workspace(
"""Validate and save a new mutable draft workspace."""
now = _now_ms()
validation = validate_workflow_draft(draft)
normalized_draft = _canonical_draft_if_valid(
draft, validation_status=validation["status"]
)
workspace = WorkflowDraftWorkspace(
id=workspace_id,
revision=1,
title=title,
draft=draft,
draft=normalized_draft,
status=validation["status"],
diagnostics=validation["diagnostics"],
created_at_epoch_ms=now,
@@ -66,7 +73,10 @@ def patch_draft_workspace(
next_workspace = workspace.model_copy(
update={
"revision": workspace.revision + 1,
"draft": patched["draft"],
"draft": _canonical_draft_if_valid(
patched["draft"],
validation_status=patched["status"],
),
"status": patched["status"],
"diagnostics": patched["diagnostics"],
"updated_at_epoch_ms": _now_ms(),
@@ -96,6 +106,23 @@ def _now_ms() -> int:
return int(time.time() * 1000)
def _canonical_draft_if_valid(
draft: JsonObject,
*,
validation_status: object,
) -> JsonObject:
"""Persist valid drafts in the canonical model shape.
Invalid drafts remain as-authored so diagnostics can still point at the
payload the client sent. Once validation passes, legacy `in`/`with`/`out`
maps become canonical `input`/`output` binding lists on disk and in MCP
responses.
"""
if validation_status != "valid":
return draft
return WorkflowDraft.model_validate(draft).model_dump(mode="json")
def _revision_conflict_payload(
workspace: WorkflowDraftWorkspace,
expected_revision: int,