61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
export type ClawdRequestState<TProgress> = {
|
|
userMessageId: string;
|
|
hint: string | null;
|
|
progressEvents: TProgress[];
|
|
};
|
|
|
|
export type ClawdRequestStateByChatId<TProgress> = Record<
|
|
string,
|
|
ClawdRequestState<TProgress>
|
|
>;
|
|
|
|
export function startClawdRequestState<TProgress>(
|
|
previousState: ClawdRequestStateByChatId<TProgress>,
|
|
chatSessionId: string,
|
|
userMessageId: string,
|
|
hint: string | null
|
|
): ClawdRequestStateByChatId<TProgress> {
|
|
return {
|
|
...previousState,
|
|
[chatSessionId]: {
|
|
userMessageId,
|
|
hint,
|
|
progressEvents: [],
|
|
},
|
|
};
|
|
}
|
|
|
|
export function updateClawdRequestState<TProgress>(
|
|
previousState: ClawdRequestStateByChatId<TProgress>,
|
|
chatSessionId: string,
|
|
userMessageId: string,
|
|
updater: (
|
|
currentState: ClawdRequestState<TProgress>
|
|
) => ClawdRequestState<TProgress>
|
|
): ClawdRequestStateByChatId<TProgress> {
|
|
const currentState = previousState[chatSessionId];
|
|
if (!currentState || currentState.userMessageId !== userMessageId) {
|
|
return previousState;
|
|
}
|
|
|
|
return {
|
|
...previousState,
|
|
[chatSessionId]: updater(currentState),
|
|
};
|
|
}
|
|
|
|
export function clearClawdRequestState<TProgress>(
|
|
previousState: ClawdRequestStateByChatId<TProgress>,
|
|
chatSessionId: string,
|
|
userMessageId: string
|
|
): ClawdRequestStateByChatId<TProgress> {
|
|
const currentState = previousState[chatSessionId];
|
|
if (!currentState || currentState.userMessageId !== userMessageId) {
|
|
return previousState;
|
|
}
|
|
|
|
const nextState = { ...previousState };
|
|
delete nextState[chatSessionId];
|
|
return nextState;
|
|
}
|