Skip to content

Commit c2492d5

Browse files
committed
clawdbot-d02.1.9.1.26: preserve public transcript update compatibility
1 parent fc15745 commit c2492d5

20 files changed

Lines changed: 263 additions & 67 deletions

extensions/codex/src/app-server/transcript-mirror.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,8 +358,17 @@ export async function mirrorCodexAppServerTranscript(params: {
358358
emitSessionTranscriptUpdate({
359359
sessionFile: params.sessionFile,
360360
...(params.sessionKey ? { sessionKey: params.sessionKey } : {}),
361-
...(params.sessionId ? { sessionId: params.sessionId } : {}),
362361
...(params.agentId ? { agentId: params.agentId } : {}),
362+
...(params.sessionId && params.sessionKey && params.agentId
363+
? {
364+
target: {
365+
agentId: params.agentId,
366+
sessionId: params.sessionId,
367+
sessionKey: params.sessionKey,
368+
targetKind: "active-session-file",
369+
},
370+
}
371+
: {}),
363372
message: update.message,
364373
messageId: update.messageId,
365374
messageSeq: update.messageSeq,

extensions/copilot/src/dual-write-transcripts.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,17 @@ export async function mirrorCopilotTranscript(
172172
emitSessionTranscriptUpdate({
173173
sessionFile: params.sessionFile,
174174
sessionKey: params.sessionKey,
175-
...(params.sessionId ? { sessionId: params.sessionId } : {}),
176175
...(params.agentId ? { agentId: params.agentId } : {}),
176+
...(params.sessionId && params.agentId
177+
? {
178+
target: {
179+
agentId: params.agentId,
180+
sessionId: params.sessionId,
181+
sessionKey: params.sessionKey,
182+
targetKind: "active-session-file",
183+
},
184+
}
185+
: {}),
177186
});
178187
} else {
179188
emitSessionTranscriptUpdate(params.sessionFile);

extensions/memory-core/src/memory/manager-sync-ops.startup-catchup.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type {
1414
MemorySyncProgressUpdate,
1515
} from "openclaw/plugin-sdk/memory-core-host-engine-storage";
1616
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
17+
import { emitInternalSessionTranscriptUpdate } from "../../../../src/sessions/transcript-events.js";
1718
import { MemoryManagerSyncOps } from "./manager-sync-ops.js";
1819

1920
type MemoryIndexEntry = {
@@ -271,7 +272,7 @@ describe("session startup catch-up", () => {
271272
const harness = new SessionStartupCatchupHarness([]);
272273
harness.startTranscriptListener();
273274

274-
emitSessionTranscriptUpdate({
275+
emitInternalSessionTranscriptUpdate({
275276
target: {
276277
agentId: "main",
277278
sessionId: "thread",

extensions/memory-core/src/memory/manager-sync-ops.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,46 @@ const IGNORED_MEMORY_WATCH_DIR_NAMES = new Set([
114114
]);
115115

116116
const log = createSubsystemLogger("memory");
117+
const MEMORY_CORE_TRANSCRIPT_UPDATE_SUBSCRIBER_KEY = Symbol.for(
118+
"openclaw.memoryCore.sessionTranscriptUpdateSubscriber",
119+
);
117120
const TEST_MEMORY_WATCH_FACTORY_KEY = Symbol.for("openclaw.test.memoryWatchFactory");
118121
const TEST_MEMORY_NATIVE_WATCH_FACTORY_KEY = Symbol.for("openclaw.test.memoryNativeWatchFactory");
119122

123+
type MemorySessionTranscriptUpdate = {
124+
agentId?: string;
125+
sessionFile?: string;
126+
sessionKey?: string;
127+
target?: {
128+
agentId: string;
129+
sessionId: string;
130+
sessionKey: string;
131+
targetKind: "active-session-file" | "runtime-session";
132+
};
133+
};
134+
135+
type MemoryTranscriptUpdateSubscriber = (
136+
listener: (update: MemorySessionTranscriptUpdate) => void,
137+
) => () => void;
138+
120139
type NativeMemoryWatchPair = {
121140
dir: string;
122141
main: fsSync.FSWatcher;
123142
parent: fsSync.FSWatcher | null;
124143
};
125144

145+
function subscribeMemorySessionTranscriptUpdates(
146+
listener: (update: MemorySessionTranscriptUpdate) => void,
147+
): () => void {
148+
const injected = (globalThis as Record<symbol, unknown>)[
149+
MEMORY_CORE_TRANSCRIPT_UPDATE_SUBSCRIBER_KEY
150+
];
151+
if (typeof injected === "function") {
152+
return (injected as MemoryTranscriptUpdateSubscriber)(listener);
153+
}
154+
return onSessionTranscriptUpdate(listener);
155+
}
156+
126157
function resolveMemoryWatchFactory(): typeof chokidar.watch {
127158
if (process.env.VITEST === "true" || process.env.NODE_ENV === "test") {
128159
const override = (globalThis as Record<PropertyKey, unknown>)[TEST_MEMORY_WATCH_FACTORY_KEY];
@@ -776,7 +807,7 @@ export abstract class MemoryManagerSyncOps {
776807
if (!this.sources.has("sessions") || this.sessionUnsubscribe) {
777808
return;
778809
}
779-
this.sessionUnsubscribe = onSessionTranscriptUpdate((update) => {
810+
this.sessionUnsubscribe = subscribeMemorySessionTranscriptUpdates((update) => {
780811
if (this.closed) {
781812
return;
782813
}

extensions/telegram/src/bot-message-dispatch.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,13 @@ async function mirrorTelegramAssistantReplyToTranscript(params: {
383383
emitSessionTranscriptUpdate({
384384
sessionFile,
385385
sessionKey: params.sessionKey,
386-
sessionId: sessionEntry.sessionId,
387386
agentId: params.route.agentId,
387+
target: {
388+
agentId: params.route.agentId,
389+
sessionId: sessionEntry.sessionId,
390+
sessionKey: params.sessionKey,
391+
targetKind: "active-session-file",
392+
},
388393
message: appendedMessage,
389394
messageId,
390395
});

src/agents/command/attempt-execution.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,13 @@ async function persistTextTurnTranscript(
299299
emitSessionTranscriptUpdate({
300300
sessionFile,
301301
sessionKey: params.sessionKey,
302-
sessionId: params.sessionId,
303302
agentId: params.sessionAgentId,
303+
target: {
304+
agentId: params.sessionAgentId,
305+
sessionId: params.sessionId,
306+
sessionKey: params.sessionKey,
307+
targetKind: "active-session-file",
308+
},
304309
});
305310
return sessionEntry;
306311
}

src/agents/embedded-agent-runner/tool-result-truncation.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -711,8 +711,17 @@ function truncateOversizedToolResultsInExistingSessionManager(params: {
711711
emitSessionTranscriptUpdate({
712712
sessionFile: params.sessionFile,
713713
sessionKey: params.sessionKey,
714-
...(params.sessionId ? { sessionId: params.sessionId } : {}),
715714
...(params.agentId ? { agentId: params.agentId } : {}),
715+
...(params.sessionId && params.sessionKey && params.agentId
716+
? {
717+
target: {
718+
agentId: params.agentId,
719+
sessionId: params.sessionId,
720+
sessionKey: params.sessionKey,
721+
targetKind: "active-session-file",
722+
},
723+
}
724+
: {}),
716725
});
717726
}
718727

@@ -783,8 +792,17 @@ async function truncateOversizedToolResultsInTranscriptState(params: {
783792
emitSessionTranscriptUpdate({
784793
sessionFile: params.sessionFile,
785794
sessionKey: params.sessionKey,
786-
...(params.sessionId ? { sessionId: params.sessionId } : {}),
787795
...(params.agentId ? { agentId: params.agentId } : {}),
796+
...(params.sessionId && params.sessionKey && params.agentId
797+
? {
798+
target: {
799+
agentId: params.agentId,
800+
sessionId: params.sessionId,
801+
sessionKey: params.sessionKey,
802+
targetKind: "active-session-file",
803+
},
804+
}
805+
: {}),
788806
});
789807
}
790808

src/agents/embedded-agent-runner/transcript-rewrite.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,13 @@ export async function rewriteTranscriptEntriesInRuntimeTranscript(params: {
406406
emitSessionTranscriptUpdate({
407407
sessionFile: target.sessionFile,
408408
sessionKey: target.sessionKey,
409-
sessionId: target.sessionId,
410409
agentId: target.agentId,
410+
target: {
411+
agentId: target.agentId,
412+
sessionId: target.sessionId,
413+
sessionKey: target.sessionKey,
414+
targetKind: "active-session-file",
415+
},
411416
});
412417
log.info(
413418
`[transcript-rewrite] rewrote ${result.rewrittenEntries} entr` +
@@ -466,8 +471,17 @@ export async function rewriteTranscriptEntriesInSessionFile(params: {
466471
emitSessionTranscriptUpdate({
467472
sessionFile: params.sessionFile,
468473
sessionKey: params.sessionKey,
469-
...(params.sessionId ? { sessionId: params.sessionId } : {}),
470474
...(params.agentId ? { agentId: params.agentId } : {}),
475+
...(params.sessionId && params.sessionKey && params.agentId
476+
? {
477+
target: {
478+
agentId: params.agentId,
479+
sessionId: params.sessionId,
480+
sessionKey: params.sessionKey,
481+
targetKind: "active-session-file",
482+
},
483+
}
484+
: {}),
471485
});
472486
log.info(
473487
`[transcript-rewrite] rewrote ${result.rewrittenEntries} entr` +

src/config/sessions/transcript.test.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,6 @@ describe("appendAssistantMessageToSessionTranscript", () => {
312312
| undefined;
313313
expect(event?.sessionFile).toBe(sessionFile);
314314
expect(event?.sessionKey).toBe(sessionKey);
315-
expect(event?.sessionId).toBe(sessionId);
316315
expect(event?.messageId).toBeTypeOf("string");
317316
expect(message?.role).toBe("assistant");
318317
expect(message?.provider).toBe("openclaw");
@@ -827,7 +826,6 @@ describe("appendAssistantMessageToSessionTranscript", () => {
827826
expect(emitSpy).toHaveBeenCalledWith({
828827
sessionFile: result.sessionFile,
829828
sessionKey,
830-
sessionId,
831829
});
832830
}
833831
emitSpy.mockRestore();

src/config/sessions/transcript.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,17 @@ export async function appendExactAssistantMessageToSessionTranscript(params: {
342342
emitSessionTranscriptUpdate({
343343
sessionFile,
344344
sessionKey,
345-
sessionId: entry.sessionId,
346345
...(params.agentId ? { agentId: params.agentId } : {}),
346+
...(params.agentId
347+
? {
348+
target: {
349+
agentId: params.agentId,
350+
sessionId: entry.sessionId,
351+
sessionKey,
352+
targetKind: "active-session-file",
353+
},
354+
}
355+
: {}),
347356
message: appendedMessage,
348357
messageId,
349358
});
@@ -352,8 +361,17 @@ export async function appendExactAssistantMessageToSessionTranscript(params: {
352361
emitSessionTranscriptUpdate({
353362
sessionFile,
354363
sessionKey,
355-
sessionId: entry.sessionId,
356364
...(params.agentId ? { agentId: params.agentId } : {}),
365+
...(params.agentId
366+
? {
367+
target: {
368+
agentId: params.agentId,
369+
sessionId: entry.sessionId,
370+
sessionKey,
371+
targetKind: "active-session-file",
372+
},
373+
}
374+
: {}),
357375
});
358376
break;
359377
case "none":

0 commit comments

Comments
 (0)