11import type { UserMessageAttachment } from "@posthog/ui/features/sessions/userMessageTypes" ;
2- import { logger } from "@posthog/ui/shell/logger" ;
32import { electronStorage } from "@posthog/ui/shell/rendererStorage" ;
43import { create } from "zustand" ;
54import { persist } from "zustand/middleware" ;
65
7- const log = logger . scope ( "pending-task-prompts" ) ;
8-
9- const MAX_PENDING_PROMPTS = 20 ;
10-
116export interface PendingTaskPrompt {
127 promptText : string ;
138 attachments : UserMessageAttachment [ ] ;
@@ -16,26 +11,6 @@ export interface PendingTaskPrompt {
1611
1712export type PendingTaskPromptInput = Omit < PendingTaskPrompt , "createdAt" > ;
1813
19- function capToNewest (
20- byKey : Record < string , PendingTaskPrompt > ,
21- ) : Record < string , PendingTaskPrompt > {
22- const keys = Object . keys ( byKey ) ;
23- if ( keys . length <= MAX_PENDING_PROMPTS ) {
24- return byKey ;
25- }
26- const keptKeys = keys
27- . sort ( ( a , b ) => byKey [ b ] . createdAt - byKey [ a ] . createdAt )
28- . slice ( 0 , MAX_PENDING_PROMPTS ) ;
29- log . warn ( "Dropping oldest unrecovered prompts beyond cap" , {
30- dropped : keys . length - keptKeys . length ,
31- } ) ;
32- const kept : Record < string , PendingTaskPrompt > = { } ;
33- for ( const key of keptKeys ) {
34- kept [ key ] = byKey [ key ] ;
35- }
36- return kept ;
37- }
38-
3914interface PendingTaskPromptStore {
4015 byKey : Record < string , PendingTaskPrompt > ;
4116 _hasHydrated : boolean ;
@@ -54,7 +29,7 @@ export const usePendingTaskPromptStore = create<PendingTaskPromptStore>()(
5429 setHasHydrated : ( hydrated ) => set ( { _hasHydrated : hydrated } ) ,
5530 set : ( key , prompt ) =>
5631 set ( ( state ) => ( {
57- byKey : capToNewest ( {
32+ byKey : capPendingPrompts ( {
5833 ...state . byKey ,
5934 [ key ] : { ...prompt , createdAt : Date . now ( ) } ,
6035 } ) ,
@@ -110,9 +85,7 @@ export const pendingTaskPromptStoreApi = {
11085 usePendingTaskPromptStore . getState ( ) . move ( fromKey , toKey ) ,
11186 clear : ( key : string ) => usePendingTaskPromptStore . getState ( ) . clear ( key ) ,
11287 getAllNewestFirst : ( ) : RecoverablePendingPrompt [ ] =>
113- Object . entries ( usePendingTaskPromptStore . getState ( ) . byKey )
114- . map ( ( [ key , prompt ] ) => ( { key, prompt } ) )
115- . sort ( ( a , b ) => b . prompt . createdAt - a . prompt . createdAt ) ,
88+ listPendingPromptsNewestFirst ( usePendingTaskPromptStore . getState ( ) . byKey ) ,
11689 whenHydrated : ( ) : Promise < void > => {
11790 if ( usePendingTaskPromptStore . getState ( ) . _hasHydrated ) {
11891 return Promise . resolve ( ) ;
@@ -128,10 +101,24 @@ export const pendingTaskPromptStoreApi = {
128101 } ,
129102} ;
130103
104+ export function generatePendingTaskKey ( ) : string {
105+ return buildPendingPromptKey (
106+ globalThis . crypto ?. randomUUID ?.( ) ?? null ,
107+ Date . now ( ) ,
108+ Math . random ( ) . toString ( 36 ) . slice ( 2 , 10 ) ,
109+ ) ;
110+ }
111+
131112export function usePendingTaskPrompt (
132113 key : string | undefined ,
133114) : PendingTaskPrompt | undefined {
134115 return usePendingTaskPromptStore ( ( state ) =>
135116 key ? state . byKey [ key ] : undefined ,
136117 ) ;
137118}
119+
120+ import {
121+ buildPendingPromptKey ,
122+ capPendingPrompts ,
123+ listPendingPromptsNewestFirst ,
124+ } from "@posthog/core/tasks/pendingPrompts" ;
0 commit comments