Skip to content

Commit 56b8527

Browse files
committed
chore: update recording API to use append_segments endpoint
Changes to support new backend API structure: - Renamed segments to localSegmentBuffer in activeRecordingStore - Updated to use appendTranscriptSegments instead of updateDesktopRecordingTranscript - Backend now uses append_segments endpoint for incremental updates - Updated RecordingView to use transcript_segments for past recordings - Simplified NotetakerView to store only recording ID instead of full item These changes support the new append-only API pattern which prevents data loss and makes transcript updates more reliable.
1 parent 3a3480f commit 56b8527

File tree

7 files changed

+158
-158
lines changed

7 files changed

+158
-158
lines changed

src/api/generated.ts

Lines changed: 70 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1992,6 +1992,14 @@ export namespace Schemas {
19921992
stop_sequence?: (string | null) | undefined;
19931993
usage: AnthropicUsage;
19941994
};
1995+
export type TranscriptSegment = {
1996+
timestamp?: (number | null) | undefined;
1997+
speaker?: (string | null) | undefined;
1998+
text: string;
1999+
confidence?: (number | null) | undefined;
2000+
is_final?: (boolean | null) | undefined;
2001+
};
2002+
export type AppendSegments = { segments: Array<TranscriptSegment> };
19952003
export type AttributionModeEnum = "first_touch" | "last_touch";
19962004
export type AutocompleteCompletionItemKind =
19972005
| "Method"
@@ -2797,13 +2805,10 @@ export namespace Schemas {
27972805
| "processing"
27982806
| "ready"
27992807
| "error";
2800-
export type RecordingTranscript = {
2801-
full_text: string;
2802-
segments?: unknown | undefined;
2803-
summary?: (string | null) | undefined;
2804-
extracted_tasks?: unknown | undefined;
2805-
created_at: string;
2806-
updated_at: string;
2808+
export type Task = {
2809+
title: string;
2810+
description?: string | undefined;
2811+
assignee?: (string | null) | undefined;
28072812
};
28082813
export type CreateRecordingResponse = {
28092814
id: string;
@@ -2816,14 +2821,21 @@ export namespace Schemas {
28162821
meeting_url?: (string | null) | undefined;
28172822
duration_seconds?: (number | null) | undefined;
28182823
status?: Status292Enum | undefined;
2824+
notes?: (string | null) | undefined;
2825+
error_message?: (string | null) | undefined;
28192826
video_url?: (string | null) | undefined;
28202827
video_size_bytes?: (number | null) | undefined;
2821-
participants?: unknown | undefined;
2828+
participants?: Array<string> | undefined;
2829+
transcript_text: string;
2830+
transcript_segments?: Array<TranscriptSegment> | undefined;
2831+
summary?: (string | null) | undefined;
2832+
extracted_tasks?: Array<Task> | undefined;
2833+
tasks_generated_at?: (string | null) | undefined;
2834+
summary_generated_at?: (string | null) | undefined;
28222835
started_at?: string | undefined;
28232836
completed_at?: (string | null) | undefined;
28242837
created_at: string;
28252838
updated_at: string;
2826-
transcript: RecordingTranscript & unknown;
28272839
upload_token: string;
28282840
};
28292841
export type CreationContextEnum =
@@ -2851,6 +2863,7 @@ export namespace Schemas {
28512863
created_at: string;
28522864
created_by: UserBasic & unknown;
28532865
last_accessed_at?: (string | null) | undefined;
2866+
last_viewed_at: string | null;
28542867
is_shared: boolean;
28552868
deleted?: boolean | undefined;
28562869
creation_mode: CreationModeEnum & unknown;
@@ -2882,6 +2895,7 @@ export namespace Schemas {
28822895
created_at: string;
28832896
created_by: UserBasic & unknown;
28842897
last_accessed_at: string | null;
2898+
last_viewed_at: string | null;
28852899
is_shared: boolean;
28862900
deleted: boolean;
28872901
creation_mode: CreationModeEnum & unknown;
@@ -3263,6 +3277,7 @@ export namespace Schemas {
32633277
| "twilio"
32643278
| "linear"
32653279
| "github"
3280+
| "gitlab"
32663281
| "meta-ads"
32673282
| "clickup"
32683283
| "reddit-ads"
@@ -4753,14 +4768,21 @@ export namespace Schemas {
47534768
meeting_url?: (string | null) | undefined;
47544769
duration_seconds?: (number | null) | undefined;
47554770
status?: Status292Enum | undefined;
4771+
notes?: (string | null) | undefined;
4772+
error_message?: (string | null) | undefined;
47564773
video_url?: (string | null) | undefined;
47574774
video_size_bytes?: (number | null) | undefined;
4758-
participants?: unknown | undefined;
4775+
participants?: Array<string> | undefined;
4776+
transcript_text: string;
4777+
transcript_segments?: Array<TranscriptSegment> | undefined;
4778+
summary?: (string | null) | undefined;
4779+
extracted_tasks?: Array<Task> | undefined;
4780+
tasks_generated_at?: (string | null) | undefined;
4781+
summary_generated_at?: (string | null) | undefined;
47594782
started_at?: string | undefined;
47604783
completed_at?: (string | null) | undefined;
47614784
created_at: string;
47624785
updated_at: string;
4763-
transcript: RecordingTranscript & unknown;
47644786
};
47654787
export type DisplayEnum = "number" | "sparkline";
47664788
export type DistanceFunc = "L1Distance" | "L2Distance" | "cosineDistance";
@@ -4985,12 +5007,17 @@ export namespace Schemas {
49855007
storage_ptr?: (string | null) | undefined;
49865008
failure_reason?: (string | null) | undefined;
49875009
};
5010+
export type EvaluationTypeEnum = "llm_judge";
5011+
export type OutputTypeEnum = "boolean";
49885012
export type Evaluation = {
49895013
id: string;
49905014
name: string;
49915015
description?: string | undefined;
49925016
enabled?: boolean | undefined;
4993-
prompt: string;
5017+
evaluation_type: EvaluationTypeEnum;
5018+
evaluation_config?: unknown | undefined;
5019+
output_type: OutputTypeEnum;
5020+
output_config?: unknown | undefined;
49945021
conditions?: unknown | undefined;
49955022
created_at: string;
49965023
updated_at: string;
@@ -6295,6 +6322,7 @@ export namespace Schemas {
62956322
| "email"
62966323
| "linear"
62976324
| "github"
6325+
| "gitlab"
62986326
| "meta-ads"
62996327
| "twilio"
63006328
| "clickup"
@@ -7605,22 +7633,6 @@ export namespace Schemas {
76057633
previous?: (string | null) | undefined;
76067634
results: Array<Table>;
76077635
};
7608-
export type Task = {
7609-
id: string;
7610-
task_number: number | null;
7611-
slug: string;
7612-
title?: string | undefined;
7613-
description: string;
7614-
origin_product: OriginProductEnum;
7615-
position?: number | undefined;
7616-
github_integration?: (number | null) | undefined;
7617-
repository_config?: unknown | undefined;
7618-
repository_list: string;
7619-
primary_repository: string;
7620-
latest_run: string;
7621-
created_at: string;
7622-
updated_at: string;
7623-
};
76247636
export type PaginatedTaskList = {
76257637
count: number;
76267638
next?: (string | null) | undefined;
@@ -7836,6 +7848,7 @@ export namespace Schemas {
78367848
created_at: string;
78377849
created_by: UserBasic & unknown;
78387850
last_accessed_at: string | null;
7851+
last_viewed_at: string | null;
78397852
is_shared: boolean;
78407853
deleted: boolean;
78417854
creation_mode: CreationModeEnum & unknown;
@@ -7937,14 +7950,21 @@ export namespace Schemas {
79377950
meeting_url: string | null;
79387951
duration_seconds: number | null;
79397952
status: Status292Enum;
7953+
notes: string | null;
7954+
error_message: string | null;
79407955
video_url: string | null;
79417956
video_size_bytes: number | null;
7942-
participants: unknown;
7957+
participants: Array<string>;
7958+
transcript_text: string;
7959+
transcript_segments: Array<TranscriptSegment>;
7960+
summary: string | null;
7961+
extracted_tasks: Array<Task>;
7962+
tasks_generated_at: string | null;
7963+
summary_generated_at: string | null;
79437964
started_at: string;
79447965
completed_at: string | null;
79457966
created_at: string;
79467967
updated_at: string;
7947-
transcript: RecordingTranscript & unknown;
79487968
}>;
79497969
export type PatchedEarlyAccessFeature = Partial<{
79507970
id: string;
@@ -7996,7 +8016,10 @@ export namespace Schemas {
79968016
name: string;
79978017
description: string;
79988018
enabled: boolean;
7999-
prompt: string;
8019+
evaluation_type: EvaluationTypeEnum;
8020+
evaluation_config: unknown;
8021+
output_type: OutputTypeEnum;
8022+
output_config: unknown;
80008023
conditions: unknown;
80018024
created_at: string;
80028025
updated_at: string;
@@ -8489,6 +8512,7 @@ export namespace Schemas {
84898512
latest_run: string;
84908513
created_at: string;
84918514
updated_at: string;
8515+
created_by: UserBasic & unknown;
84928516
}>;
84938517
export type PatchedTaskRunDetail = Partial<{
84948518
id: string;
@@ -10011,10 +10035,6 @@ export namespace Schemas {
1001110035
product_intents: string;
1001210036
managed_viewsets: string;
1001310037
};
10014-
export type UploadTranscript = Partial<{
10015-
segments: Array<Record<string, unknown>>;
10016-
full_text: string;
10017-
}>;
1001810038
export type WebAnalyticsBreakdownResponse = {
1001910039
next?: (string | null) | undefined;
1002010040
results: Array<unknown>;
@@ -10715,25 +10735,16 @@ export namespace Endpoints {
1071510735
};
1071610736
responses: { 204: unknown };
1071710737
};
10718-
export type get_Environments_desktop_recordings_transcript_retrieve = {
10719-
method: "GET";
10720-
path: "/api/environments/{project_id}/desktop_recordings/{id}/transcript/";
10721-
requestFormat: "json";
10722-
parameters: {
10723-
path: { id: string; project_id: string };
10724-
};
10725-
responses: { 200: Schemas.RecordingTranscript; 404: unknown };
10726-
};
10727-
export type post_Environments_desktop_recordings_transcript_create = {
10738+
export type post_Environments_desktop_recordings_append_segments_create = {
1072810739
method: "POST";
10729-
path: "/api/environments/{project_id}/desktop_recordings/{id}/transcript/";
10740+
path: "/api/environments/{project_id}/desktop_recordings/{id}/append_segments/";
1073010741
requestFormat: "json";
1073110742
parameters: {
1073210743
path: { id: string; project_id: string };
1073310744

10734-
body: Schemas.UploadTranscript;
10745+
body: Schemas.AppendSegments;
1073510746
};
10736-
responses: { 200: Schemas.RecordingTranscript };
10747+
responses: { 200: Schemas.DesktopRecording };
1073710748
};
1073810749
export type get_Environments_endpoints_retrieve = {
1073910750
method: "GET";
@@ -11533,6 +11544,15 @@ export namespace Endpoints {
1153311544
};
1153411545
responses: { 200: unknown };
1153511546
};
11547+
export type get_Environments_file_system_log_view_retrieve = {
11548+
method: "GET";
11549+
path: "/api/environments/{project_id}/file_system/log_view/";
11550+
requestFormat: "json";
11551+
parameters: {
11552+
path: { project_id: string };
11553+
};
11554+
responses: { 200: unknown };
11555+
};
1153611556
export type post_Environments_file_system_log_view_create = {
1153711557
method: "POST";
1153811558
path: "/api/environments/{project_id}/file_system/log_view/";
@@ -13620,7 +13640,6 @@ export type EndpointByMethod = {
1362013640
"/api/environments/{project_id}/datasets/{id}/": Endpoints.get_Environments_datasets_retrieve;
1362113641
"/api/environments/{project_id}/desktop_recordings/": Endpoints.get_Environments_desktop_recordings_list;
1362213642
"/api/environments/{project_id}/desktop_recordings/{id}/": Endpoints.get_Environments_desktop_recordings_retrieve;
13623-
"/api/environments/{project_id}/desktop_recordings/{id}/transcript/": Endpoints.get_Environments_desktop_recordings_transcript_retrieve;
1362413643
"/api/environments/{project_id}/endpoints/": Endpoints.get_Environments_endpoints_retrieve;
1362513644
"/api/environments/{project_id}/endpoints/{name}/": Endpoints.get_Environments_endpoints_retrieve_2;
1362613645
"/api/environments/{project_id}/endpoints/{name}/run/": Endpoints.get_Environments_endpoints_run_retrieve;
@@ -13648,6 +13667,7 @@ export type EndpointByMethod = {
1364813667
"/api/environments/{project_id}/exports/{id}/content/": Endpoints.get_Environments_exports_content_retrieve;
1364913668
"/api/environments/{project_id}/file_system/": Endpoints.get_Environments_file_system_list;
1365013669
"/api/environments/{project_id}/file_system/{id}/": Endpoints.get_Environments_file_system_retrieve;
13670+
"/api/environments/{project_id}/file_system/log_view/": Endpoints.get_Environments_file_system_log_view_retrieve;
1365113671
"/api/environments/{project_id}/file_system/unfiled/": Endpoints.get_Environments_file_system_unfiled_retrieve;
1365213672
"/api/environments/{project_id}/file_system_shortcut/": Endpoints.get_Environments_file_system_shortcut_list;
1365313673
"/api/environments/{project_id}/file_system_shortcut/{id}/": Endpoints.get_Environments_file_system_shortcut_retrieve;
@@ -13753,7 +13773,7 @@ export type EndpointByMethod = {
1375313773
"/api/environments/{project_id}/dataset_items/": Endpoints.post_Environments_dataset_items_create;
1375413774
"/api/environments/{project_id}/datasets/": Endpoints.post_Environments_datasets_create;
1375513775
"/api/environments/{project_id}/desktop_recordings/": Endpoints.post_Environments_desktop_recordings_create;
13756-
"/api/environments/{project_id}/desktop_recordings/{id}/transcript/": Endpoints.post_Environments_desktop_recordings_transcript_create;
13776+
"/api/environments/{project_id}/desktop_recordings/{id}/append_segments/": Endpoints.post_Environments_desktop_recordings_append_segments_create;
1375713777
"/api/environments/{project_id}/endpoints/": Endpoints.post_Environments_endpoints_create;
1375813778
"/api/environments/{project_id}/endpoints/{name}/run/": Endpoints.post_Environments_endpoints_run_create;
1375913779
"/api/environments/{project_id}/endpoints/last_execution_times/": Endpoints.post_Environments_endpoints_last_execution_times_create;

src/api/posthogClient.ts

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -298,24 +298,6 @@ export class PostHogAPIClient {
298298
return await response.json();
299299
}
300300

301-
async getDesktopRecordingTranscript(recordingId: string) {
302-
this.validateRecordingId(recordingId);
303-
const teamId = await this.getTeamId();
304-
const url = new URL(
305-
`${this.api.baseUrl}/api/environments/${teamId}/desktop_recordings/${recordingId}/transcript/`,
306-
);
307-
const response = await this.api.fetcher.fetch({
308-
method: "get",
309-
url,
310-
path: `/api/environments/${teamId}/desktop_recordings/${recordingId}/transcript/`,
311-
});
312-
313-
if (!response.ok) {
314-
throw new Error(`Failed to fetch transcript: ${response.statusText}`);
315-
}
316-
317-
return await response.json();
318-
}
319301

320302
async listDesktopRecordings(filters?: {
321303
platform?: string;
@@ -382,27 +364,18 @@ export class PostHogAPIClient {
382364
return data;
383365
}
384366

385-
async updateDesktopRecordingTranscript(
367+
async appendTranscriptSegments(
386368
recordingId: string,
387-
updates: {
388-
segments?: Array<{
389-
timestamp_ms: number;
390-
speaker: string | null;
391-
text: string;
392-
confidence: number | null;
393-
is_final: boolean;
394-
}>;
395-
full_text?: string;
396-
},
397-
) {
369+
segments: Array<Schemas.TranscriptSegment>,
370+
): Promise<Schemas.DesktopRecording> {
398371
this.validateRecordingId(recordingId);
399372
const teamId = await this.getTeamId();
400373

401374
const data = await this.api.post(
402-
"/api/environments/{project_id}/desktop_recordings/{id}/transcript/",
375+
"/api/environments/{project_id}/desktop_recordings/{id}/append_segments/",
403376
{
404377
path: { project_id: teamId.toString(), id: recordingId },
405-
body: updates as any,
378+
body: { segments } as Schemas.AppendSegments,
406379
},
407380
);
408381

0 commit comments

Comments
 (0)