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:
@@ -30,3 +30,4 @@ export { flowpilotAnalyticsApi } from './flowpilotAnalytics'
|
|||||||
export { notificationsApi } from './notifications'
|
export { notificationsApi } from './notifications'
|
||||||
export { publicTemplatesApi } from './publicTemplates'
|
export { publicTemplatesApi } from './publicTemplates'
|
||||||
export { uploadsApi, default as uploadsApiDefault } from './uploads'
|
export { uploadsApi, default as uploadsApiDefault } from './uploads'
|
||||||
|
export { scriptBuilderApi } from './scriptBuilder'
|
||||||
|
|||||||
47
frontend/src/api/scriptBuilder.ts
Normal file
47
frontend/src/api/scriptBuilder.ts
Normal 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
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -93,6 +93,7 @@ export type {
|
|||||||
} from './kbAccelerator'
|
} from './kbAccelerator'
|
||||||
|
|
||||||
export * from './scripts'
|
export * from './scripts'
|
||||||
|
export * from './script-builder'
|
||||||
export * from './integrations'
|
export * from './integrations'
|
||||||
export * from './notification'
|
export * from './notification'
|
||||||
export type * from './public-templates'
|
export type * from './public-templates'
|
||||||
|
|||||||
47
frontend/src/types/script-builder.ts
Normal file
47
frontend/src/types/script-builder.ts
Normal 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user