Skip to content

Commit b848642

Browse files
committed
cr
1 parent 0085768 commit b848642

File tree

2 files changed

+49
-16
lines changed

2 files changed

+49
-16
lines changed

src/app-bridge.test.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,9 @@ describe("App <-> AppBridge integration", () => {
215215

216216
it("app.sendContext triggers bridge.oncontext and returns result", async () => {
217217
const receivedContexts: unknown[] = [];
218-
bridge.oncontext = (params) => {
218+
bridge.oncontext = async (params) => {
219219
receivedContexts.push(params);
220+
return {};
220221
};
221222

222223
await app.connect(appTransport);
@@ -235,8 +236,9 @@ describe("App <-> AppBridge integration", () => {
235236

236237
it("app.sendContext works with multiple content blocks", async () => {
237238
const receivedContexts: unknown[] = [];
238-
bridge.oncontext = (params) => {
239+
bridge.oncontext = async (params) => {
239240
receivedContexts.push(params);
241+
return {};
240242
};
241243

242244
await app.connect(appTransport);
@@ -258,6 +260,20 @@ describe("App <-> AppBridge integration", () => {
258260
});
259261
expect(result).toEqual({});
260262
});
263+
264+
it("app.sendContext returns error result when handler indicates error", async () => {
265+
bridge.oncontext = async () => {
266+
return { isError: true };
267+
};
268+
269+
await app.connect(appTransport);
270+
const result = await app.sendContext({
271+
role: "user",
272+
content: [{ type: "text", text: "Test" }],
273+
});
274+
275+
expect(result.isError).toBe(true);
276+
});
261277
});
262278

263279
describe("App -> Host requests", () => {

src/app-bridge.ts

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import {
4141
McpUiAppCapabilities,
4242
McpUiUpdateContextRequest,
4343
McpUiUpdateContextRequestSchema,
44+
McpUiUpdateContextResult,
4445
McpUiHostCapabilities,
4546
McpUiHostContext,
4647
McpUiHostContextChangedNotification,
@@ -512,30 +513,46 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
512513
* future reasoning. Unlike logging messages, context updates are intended to be
513514
* available to the agent for decision making.
514515
*
515-
* @param callback - Handler that receives context update params
516+
* @param callback - Handler that receives context update params and returns a result
516517
* - params.role - Message role (currently only "user")
517518
* - params.content - Content blocks (text, image, etc.)
519+
* - extra - Request metadata (abort signal, session info)
520+
* - Returns: Promise<McpUiUpdateContextResult> with optional isError flag
518521
*
519522
* @example
520523
* ```typescript
521-
* bridge.oncontext = ({ role, content }) => {
522-
* // Store context update for agent reasoning
523-
* conversationContext.push({
524-
* type: "app_context",
525-
* role,
526-
* content,
527-
* timestamp: Date.now()
528-
* });
524+
* bridge.oncontext = async ({ role, content }, extra) => {
525+
* try {
526+
* // Store context update for agent reasoning
527+
* conversationContext.push({
528+
* type: "app_context",
529+
* role,
530+
* content,
531+
* timestamp: Date.now()
532+
* });
533+
* return {};
534+
* } catch (err) {
535+
* // Handle error and signal failure to the app
536+
* return { isError: true };
537+
* }
529538
* };
530539
* ```
540+
*
541+
* @see {@link McpUiUpdateContextRequest} for the request type
542+
* @see {@link McpUiUpdateContextResult} for the result type
531543
*/
532544
set oncontext(
533-
callback: (params: McpUiUpdateContextRequest["params"]) => void,
545+
callback: (
546+
params: McpUiUpdateContextRequest["params"],
547+
extra: RequestHandlerExtra,
548+
) => Promise<McpUiUpdateContextResult>,
534549
) {
535-
this.setRequestHandler(McpUiUpdateContextRequestSchema, async (request) => {
536-
callback(request.params);
537-
return {};
538-
});
550+
this.setRequestHandler(
551+
McpUiUpdateContextRequestSchema,
552+
async (request, extra) => {
553+
return callback(request.params, extra);
554+
},
555+
);
539556
}
540557

541558
/**

0 commit comments

Comments
 (0)