From ec245c9fef7ed2c71494f9bae39745f207bc431f Mon Sep 17 00:00:00 2001 From: Michael Chihlas Date: Sat, 21 Mar 2026 17:00:41 -0400 Subject: [PATCH] feat: add Script Builder frontend types and API client Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/api/index.ts | 1 + frontend/src/api/scriptBuilder.ts | 47 ++++++++++++++++++++++++++++ frontend/src/types/index.ts | 1 + frontend/src/types/script-builder.ts | 47 ++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 frontend/src/api/scriptBuilder.ts create mode 100644 frontend/src/types/script-builder.ts diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index d67e774c..bcbb2656 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -30,3 +30,4 @@ export { flowpilotAnalyticsApi } from './flowpilotAnalytics' export { notificationsApi } from './notifications' export { publicTemplatesApi } from './publicTemplates' export { uploadsApi, default as uploadsApiDefault } from './uploads' +export { scriptBuilderApi } from './scriptBuilder' diff --git a/frontend/src/api/scriptBuilder.ts b/frontend/src/api/scriptBuilder.ts new file mode 100644 index 00000000..09998486 --- /dev/null +++ b/frontend/src/api/scriptBuilder.ts @@ -0,0 +1,47 @@ +import { apiClient } from './client' +import type { + ScriptBuilderSessionSummary, + ScriptBuilderSessionDetail, + ScriptBuilderMessageResponse, + SaveToLibraryRequest, +} from '@/types' +import type { ScriptTemplateDetail } from '@/types' + +export const scriptBuilderApi = { + async createSession(language: string): Promise { + const { data } = await apiClient.post('/scripts/builder/sessions', { language }) + return data + }, + + async listSessions(limit = 20, offset = 0): Promise { + const { data } = await apiClient.get('/scripts/builder/sessions', { + params: { limit, offset }, + }) + return data + }, + + async getSession(sessionId: string): Promise { + const { data } = await apiClient.get(`/scripts/builder/sessions/${sessionId}`) + return data + }, + + async sendMessage(sessionId: string, content: string): Promise { + const { data } = await apiClient.post( + `/scripts/builder/sessions/${sessionId}/messages`, + { content } + ) + return data + }, + + async deleteSession(sessionId: string): Promise { + await apiClient.delete(`/scripts/builder/sessions/${sessionId}`) + }, + + async saveToLibrary(sessionId: string, req: SaveToLibraryRequest): Promise { + const { data } = await apiClient.post( + `/scripts/builder/sessions/${sessionId}/save`, + req + ) + return data + }, +} diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 71decc0a..f1967d46 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -93,6 +93,7 @@ export type { } from './kbAccelerator' export * from './scripts' +export * from './script-builder' export * from './integrations' export * from './notification' export type * from './public-templates' diff --git a/frontend/src/types/script-builder.ts b/frontend/src/types/script-builder.ts new file mode 100644 index 00000000..76dbae02 --- /dev/null +++ b/frontend/src/types/script-builder.ts @@ -0,0 +1,47 @@ +export interface ScriptBuilderSessionSummary { + id: string + language: string + title: string | null + message_count: number + latest_script_filename: string | null + created_at: string + updated_at: string +} + +export interface ScriptBuilderSessionDetail { + id: string + language: string + title: string | null + messages: ScriptBuilderMessage[] + latest_script: string | null + latest_script_filename: string | null + message_count: number + ai_session_id: string | null + created_at: string + updated_at: string +} + +export interface ScriptBuilderMessage { + role: 'user' | 'assistant' + content: string + script?: string | null + script_filename?: string | null + line_count?: number | null + timestamp: string +} + +export interface ScriptBuilderMessageResponse { + role: 'assistant' + content: string + script: string | null + script_filename: string | null + line_count: number | null + timestamp: string +} + +export interface SaveToLibraryRequest { + name: string + description?: string + category_id?: string + share_with_team?: boolean +}