2026-03-18 20:12:30 -07:00
|
|
|
export type SessionTranscriptUpdate = {
|
2026-01-17 18:53:48 +00:00
|
|
|
sessionFile: string;
|
2026-03-18 20:12:30 -07:00
|
|
|
sessionKey?: string;
|
|
|
|
|
message?: unknown;
|
|
|
|
|
messageId?: string;
|
2026-01-17 18:53:48 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
type SessionTranscriptListener = (update: SessionTranscriptUpdate) => void;
|
|
|
|
|
|
|
|
|
|
const SESSION_TRANSCRIPT_LISTENERS = new Set<SessionTranscriptListener>();
|
|
|
|
|
|
|
|
|
|
export function onSessionTranscriptUpdate(listener: SessionTranscriptListener): () => void {
|
|
|
|
|
SESSION_TRANSCRIPT_LISTENERS.add(listener);
|
|
|
|
|
return () => {
|
|
|
|
|
SESSION_TRANSCRIPT_LISTENERS.delete(listener);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-18 20:12:30 -07:00
|
|
|
export function emitSessionTranscriptUpdate(update: string | SessionTranscriptUpdate): void {
|
|
|
|
|
const normalized =
|
|
|
|
|
typeof update === "string"
|
|
|
|
|
? { sessionFile: update }
|
|
|
|
|
: {
|
|
|
|
|
sessionFile: update.sessionFile,
|
|
|
|
|
sessionKey: update.sessionKey,
|
|
|
|
|
message: update.message,
|
|
|
|
|
messageId: update.messageId,
|
|
|
|
|
};
|
|
|
|
|
const trimmed = normalized.sessionFile.trim();
|
2026-01-31 16:19:20 +09:00
|
|
|
if (!trimmed) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2026-03-18 20:12:30 -07:00
|
|
|
const nextUpdate: SessionTranscriptUpdate = {
|
|
|
|
|
sessionFile: trimmed,
|
|
|
|
|
...(typeof normalized.sessionKey === "string" && normalized.sessionKey.trim()
|
|
|
|
|
? { sessionKey: normalized.sessionKey.trim() }
|
|
|
|
|
: {}),
|
|
|
|
|
...(normalized.message !== undefined ? { message: normalized.message } : {}),
|
|
|
|
|
...(typeof normalized.messageId === "string" && normalized.messageId.trim()
|
|
|
|
|
? { messageId: normalized.messageId.trim() }
|
|
|
|
|
: {}),
|
|
|
|
|
};
|
2026-02-17 08:36:33 -06:00
|
|
|
for (const listener of SESSION_TRANSCRIPT_LISTENERS) {
|
|
|
|
|
try {
|
2026-03-18 20:12:30 -07:00
|
|
|
listener(nextUpdate);
|
2026-02-17 08:36:33 -06:00
|
|
|
} catch {
|
|
|
|
|
/* ignore */
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-01-17 18:53:48 +00:00
|
|
|
}
|