Skip to content

Commit c1a6bc6

Browse files
Muxmux-bot[bot]
authored andcommitted
refactor: extract clonePersistedToolModelUsage helper in streamManager
The deep-clone pattern for PersistedToolModelUsage (spread event, fresh usage object, conditional providerMetadata) was duplicated in recordToolModelUsage and the stream-end tool-usage snapshot. Extract a single file-local helper so both sites share the same implementation. Behavior-preserving: both callsites continue to produce structurally identical clones (usage is always shallow-copied; providerMetadata is included only when non-nullish).
1 parent eb18b4e commit c1a6bc6

1 file changed

Lines changed: 15 additions & 12 deletions

File tree

src/node/services/streamManager.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,19 @@ function buildUsageDeltaEvent(opts: {
323323
};
324324
}
325325

326+
/**
327+
* Deep-clone a PersistedToolModelUsage so the stored copy is independent of the caller's object
328+
* (usage/providerMetadata are nested references the caller may mutate). Keeps providerMetadata
329+
* optional so the cloned object only carries the field when defined.
330+
*/
331+
function clonePersistedToolModelUsage(event: PersistedToolModelUsage): PersistedToolModelUsage {
332+
return {
333+
...event,
334+
usage: { ...event.usage },
335+
...(event.providerMetadata != null ? { providerMetadata: event.providerMetadata } : {}),
336+
};
337+
}
338+
326339
// Comprehensive stream info
327340
interface WorkspaceStreamInfo {
328341
state: StreamState;
@@ -473,11 +486,7 @@ export class StreamManager extends EventEmitter {
473486
return;
474487
}
475488

476-
streamInfo.toolModelUsages.push({
477-
...event,
478-
usage: { ...event.usage },
479-
...(event.providerMetadata != null ? { providerMetadata: event.providerMetadata } : {}),
480-
});
489+
streamInfo.toolModelUsages.push(clonePersistedToolModelUsage(event));
481490
}
482491

483492
/**
@@ -2197,13 +2206,7 @@ export class StreamManager extends EventEmitter {
21972206
streamInfo.model.startsWith("mux-gateway:");
21982207
const toolModelUsages =
21992208
streamInfo.toolModelUsages.length > 0
2200-
? streamInfo.toolModelUsages.map((toolModelUsage) => ({
2201-
...toolModelUsage,
2202-
usage: { ...toolModelUsage.usage },
2203-
...(toolModelUsage.providerMetadata != null
2204-
? { providerMetadata: toolModelUsage.providerMetadata }
2205-
: {}),
2206-
}))
2209+
? streamInfo.toolModelUsages.map(clonePersistedToolModelUsage)
22072210
: undefined;
22082211

22092212
// Emit stream end event with parts preserved in temporal order

0 commit comments

Comments
 (0)