From c9306e40c96ff83a092fa025e3993e61ff5f3392 Mon Sep 17 00:00:00 2001 From: Michael Chihlas Date: Fri, 24 Apr 2026 02:38:07 -0400 Subject: [PATCH] =?UTF-8?q?feat(pilot):=20frontend=20API=20client=20?= =?UTF-8?q?=E2=80=94=20patchScript=20+=20inline=20createSession?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sessionSuggestedFixesApi.patchScript(sessionId, fixId, script, params?) hits the new PATCH /script endpoint. scriptBuilder.createSession accepts an optional options bag with origin + aiSessionId, defaulting to standalone when omitted so legacy callers stay behavior-preserving. Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/src/api/scriptBuilder.ts | 16 ++++++++++++++-- frontend/src/api/sessionSuggestedFixes.ts | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/frontend/src/api/scriptBuilder.ts b/frontend/src/api/scriptBuilder.ts index 09998486..5f377e1e 100644 --- a/frontend/src/api/scriptBuilder.ts +++ b/frontend/src/api/scriptBuilder.ts @@ -7,9 +7,21 @@ import type { } from '@/types' import type { ScriptTemplateDetail } from '@/types' +export interface CreateSessionOptions { + origin?: 'standalone' | 'pilot_inline' + aiSessionId?: string +} + export const scriptBuilderApi = { - async createSession(language: string): Promise { - const { data } = await apiClient.post('/scripts/builder/sessions', { language }) + async createSession( + language: string, + options?: CreateSessionOptions, + ): Promise { + const { data } = await apiClient.post('/scripts/builder/sessions', { + language, + origin: options?.origin, + ai_session_id: options?.aiSessionId, + }) return data }, diff --git a/frontend/src/api/sessionSuggestedFixes.ts b/frontend/src/api/sessionSuggestedFixes.ts index 288c53eb..bd440556 100644 --- a/frontend/src/api/sessionSuggestedFixes.ts +++ b/frontend/src/api/sessionSuggestedFixes.ts @@ -197,6 +197,28 @@ export const sessionSuggestedFixesApi = { return r.data }, + /** + * Attach an engineer-drafted script to a suggested fix (inline Script + * Builder Submit path). Does NOT stamp applied_at — the server treats + * a draft as non-terminal progress. Bumps state_version so the + * Resolve/Escalate preview regenerates. + */ + async patchScript( + sessionId: string, + fixId: string, + aiDraftedScript: string, + aiDraftedParameters?: Record, + ): Promise { + const r = await apiClient.patch( + `/ai-sessions/${sessionId}/suggested-fixes/${fixId}/script`, + { + ai_drafted_script: aiDraftedScript, + ai_drafted_parameters: aiDraftedParameters, + }, + ) + return r.data + }, + /** * Explicitly dismiss the AI-proposed outcome banner ("Not yet"). * Clears ai_outcome_proposal on the server without touching status or