fix(backend): bridge maps real Pi message_update->text_delta for FE streaming
Live end-to-end against real pi --mode rpc revealed Pi streams assistant text as top-level message_update events whose nested assistantMessageEvent carries the incremental delta — not the top-level text_delta the fake-pi-rpc emits. The bridge now maps message_update(assistantMessageEvent.text_delta).delta -> FE text_delta, so the chat shows the model's output during a real session. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,19 @@ function fakeRpc() {
|
||||
};
|
||||
}
|
||||
|
||||
test("real Pi message_update (assistantMessageEvent text_delta) becomes a text_delta to the FE", () => {
|
||||
const { rpc, fire } = fakeRpc();
|
||||
const b = new SessionBridge(rpc);
|
||||
const seen: any[] = [];
|
||||
b.onClientEvent((e) => seen.push(e));
|
||||
// Shape emitted by real `pi --mode rpc`: text streams inside message_update.assistantMessageEvent.delta
|
||||
fire({ type: "message_update", assistantMessageEvent: { type: "text_delta", contentIndex: 0, delta: "Avvio" } });
|
||||
expect(seen[0]).toEqual({ type: "text_delta", text: "Avvio" });
|
||||
// Non-text message_update events (e.g. text_start) are ignored.
|
||||
fire({ type: "message_update", assistantMessageEvent: { type: "text_start", contentIndex: 0 } });
|
||||
expect(seen).toHaveLength(1);
|
||||
});
|
||||
|
||||
test("extension_ui_request nativo (method:input, title=json) diventa ui_request ed è il pendente", () => {
|
||||
const { rpc, fire } = fakeRpc();
|
||||
const b = new SessionBridge(rpc);
|
||||
|
||||
Reference in New Issue
Block a user