Skip to content
Open
22 changes: 18 additions & 4 deletions samples/client/lit/contact/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ type A2AServerPayload =

import { componentRegistry } from "@a2ui/lit/ui";

export interface A2UIClientResponse {
messages: v0_8.Types.ServerToClientMessage[];
fallbackText: string | null;
}

export class A2UIClient {
#ready: Promise<void> = Promise.resolve();
get ready() {
Expand All @@ -40,7 +45,7 @@ export class A2UIClient {

async send(
message: v0_8.Types.A2UIClientEventMessage
): Promise<v0_8.Types.ServerToClientMessage[]> {
): Promise<A2UIClientResponse> {
const catalog = componentRegistry.getInlineCatalog();
const finalMessage = {
...message,
Expand All @@ -59,15 +64,24 @@ export class A2UIClient {
if (response.ok) {
const data = (await response.json()) as A2AServerPayload;
const messages: v0_8.Types.ServerToClientMessage[] = [];
const textParts: string[] = [];
if ("error" in data) {
throw new Error(data.error);
} else {
for (const item of data) {
if (item.kind === "text") continue;
messages.push(item.data);
if (item.kind === "text") {
textParts.push(item.text);
} else {
messages.push(item.data);
}
}
}
return messages;
return {
messages,
fallbackText: messages.length === 0 && textParts.length > 0
? textParts.join('\n')
: null,
};
}

const error = (await response.json()) as { error: string };
Expand Down
10 changes: 6 additions & 4 deletions samples/client/lit/contact/contact.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
} from "lit";
import { customElement, state } from "lit/decorators.js";
import { theme as uiTheme } from "./theme/theme.js";
import { A2UIClient } from "./client.js";
import { A2UIClient, type A2UIClientResponse } from "./client.js";
import {
SnackbarAction,
SnackbarMessage,
Expand Down Expand Up @@ -377,9 +377,11 @@ export class A2UIContactFinder extends SignalWatcher(LitElement) {

async #sendAndProcessMessage(request: v0_8.Types.A2UIClientEventMessage) {
this.#requesting = true;
const messages = await this.#sendMessage(request);
this.#error = null;
const { messages, fallbackText } = await this.#sendMessage(request);

this.#lastMessages = messages;
this.#error = fallbackText;

// this.#processor.clearSurfaces(); // Removed to allow partial updates
this.#processor.processMessages(messages);
Expand All @@ -394,7 +396,7 @@ export class A2UIContactFinder extends SignalWatcher(LitElement) {

async #sendMessage(
message: v0_8.Types.A2UIClientEventMessage
): Promise<v0_8.Types.ServerToClientMessage[]> {
): Promise<A2UIClientResponse> {
try {
this.#requesting = true;
const response = await this.#a2uiClient.send(message);
Expand All @@ -408,7 +410,7 @@ export class A2UIContactFinder extends SignalWatcher(LitElement) {
this.#requesting = false;
}

return [];
return { messages: [], fallbackText: null };
}

snackbar(
Expand Down
13 changes: 7 additions & 6 deletions samples/client/lit/shell/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
} from "lit";
import { customElement, state } from "lit/decorators.js";
import { theme as uiTheme } from "./theme/default-theme.js";
import { A2UIClient } from "./client.js";
import { A2UIClient, type A2UIClientResponse } from "./client.js";
import {
SnackbarAction,
SnackbarMessage,
Expand Down Expand Up @@ -407,12 +407,11 @@ export class A2UILayoutEditor extends SignalWatcher(LitElement) {

async #sendMessage(
message: v0_8.Types.A2UIClientEventMessage
): Promise<v0_8.Types.ServerToClientMessage[]> {
): Promise<A2UIClientResponse> {
try {
this.#requesting = true;
this.#startLoadingAnimation();
const response = this.#a2uiClient.send(message);
await response;
const response = await this.#a2uiClient.send(message);
this.#requesting = false;
this.#stopLoadingAnimation();

Expand All @@ -424,7 +423,7 @@ export class A2UILayoutEditor extends SignalWatcher(LitElement) {
this.#stopLoadingAnimation();
}

return [];
return { messages: [], fallbackText: null };
}

#maybeRenderData() {
Expand Down Expand Up @@ -511,11 +510,13 @@ export class A2UILayoutEditor extends SignalWatcher(LitElement) {
}

async #sendAndProcessMessage(request) {
const messages = await this.#sendMessage(request);
this.#error = null;
const { messages, fallbackText } = await this.#sendMessage(request);

console.log(messages);

this.#lastMessages = messages;
this.#error = fallbackText;
this.#processor.clearSurfaces();
this.#processor.processMessages(messages);
}
Expand Down
19 changes: 16 additions & 3 deletions samples/client/lit/shell/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ import { v0_8 } from "@a2ui/lit";

const A2UI_MIME_TYPE = "application/json+a2ui";

export interface A2UIClientResponse {
messages: v0_8.Types.ServerToClientMessage[];
fallbackText: string | null;
}

export class A2UIClient {
#serverUrl: string;
#client: A2AClient | null = null;
Expand Down Expand Up @@ -54,7 +59,7 @@ export class A2UIClient {

async send(
message: v0_8.Types.A2UIClientEventMessage | string
): Promise<v0_8.Types.ServerToClientMessage[]> {
): Promise<A2UIClientResponse> {
const client = await this.#getClient();

let parts: Part[] = [];
Expand Down Expand Up @@ -99,14 +104,22 @@ export class A2UIClient {
const result = (response as SendMessageSuccessResponse).result as Task;
if (result.kind === "task" && result.status.message?.parts) {
const messages: v0_8.Types.ServerToClientMessage[] = [];
const textParts: string[] = [];
for (const part of result.status.message.parts) {
if (part.kind === 'data') {
messages.push(part.data as v0_8.Types.ServerToClientMessage);
} else if (part.kind === 'text') {
textParts.push(part.text);
}
}
return messages;
return {
messages,
fallbackText: messages.length === 0 && textParts.length > 0
? textParts.join('\n')
: null,
};
}

return [];
return { messages: [], fallbackText: null };
}
}