feat: add Script Builder frontend types and API client

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Michael Chihlas
2026-03-21 17:00:41 -04:00
parent 28f8200b36
commit ec245c9fef
4 changed files with 96 additions and 0 deletions

View File

@@ -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'

View File

@@ -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<ScriptBuilderSessionDetail> {
const { data } = await apiClient.post('/scripts/builder/sessions', { language })
return data
},
async listSessions(limit = 20, offset = 0): Promise<ScriptBuilderSessionSummary[]> {
const { data } = await apiClient.get('/scripts/builder/sessions', {
params: { limit, offset },
})
return data
},
async getSession(sessionId: string): Promise<ScriptBuilderSessionDetail> {
const { data } = await apiClient.get(`/scripts/builder/sessions/${sessionId}`)
return data
},
async sendMessage(sessionId: string, content: string): Promise<ScriptBuilderMessageResponse> {
const { data } = await apiClient.post(
`/scripts/builder/sessions/${sessionId}/messages`,
{ content }
)
return data
},
async deleteSession(sessionId: string): Promise<void> {
await apiClient.delete(`/scripts/builder/sessions/${sessionId}`)
},
async saveToLibrary(sessionId: string, req: SaveToLibraryRequest): Promise<ScriptTemplateDetail> {
const { data } = await apiClient.post(
`/scripts/builder/sessions/${sessionId}/save`,
req
)
return data
},
}

View File

@@ -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'

View File

@@ -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
}