diff --git a/backend/app/schemas/script_builder.py b/backend/app/schemas/script_builder.py index 1a7add15..430022c8 100644 --- a/backend/app/schemas/script_builder.py +++ b/backend/app/schemas/script_builder.py @@ -1,18 +1,27 @@ """Pydantic schemas for the AI Script Builder.""" from datetime import datetime -from typing import Optional +from typing import Literal, Optional from uuid import UUID from pydantic import BaseModel, Field class ScriptBuilderCreateRequest(BaseModel): - """Request to start a new builder session.""" + """Request to start (or get-or-create, for inline origin) a builder session. + + When `origin='pilot_inline'`, `ai_session_id` is REQUIRED and must + reference a pilot session owned by the current user. The endpoint's + get-or-create semantics kick in: if a pilot_inline session already + exists for (user_id, ai_session_id), that row is returned instead of + creating a duplicate. + """ language: str = Field( default="powershell", pattern=r"^(powershell|bash|python)$", description="Script language", ) + origin: Literal["standalone", "pilot_inline"] = "standalone" + ai_session_id: UUID | None = None class ScriptBuilderMessageRequest(BaseModel): diff --git a/backend/app/schemas/session_suggested_fix.py b/backend/app/schemas/session_suggested_fix.py index 38f380b5..2672c764 100644 --- a/backend/app/schemas/session_suggested_fix.py +++ b/backend/app/schemas/session_suggested_fix.py @@ -114,6 +114,17 @@ class SessionSuggestedFixOutcomeRequest(BaseModel): notes: str | None = Field(None, max_length=500) +class SessionSuggestedFixScriptRequest(BaseModel): + """Engineer-submitted drafted script for a suggested fix. + + Called when the inline Script Builder tab's Submit action fires. The + fix must be non-terminal (still proposed/applied_partial). Setting + the script does NOT stamp applied_at — a draft is not an application. + """ + ai_drafted_script: str = Field(..., min_length=1, max_length=50_000) + ai_drafted_parameters: dict[str, Any] | None = None + + # ── Resolution note preview ──────────────────────────────────────────────── class ResolutionNotePreviewResponse(BaseModel):