@frontmcp/ui 1.8.5 → 1.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -81,8 +81,8 @@ export declare class ExtAppsAdapter extends BaseAdapter {
81
81
  openLink(url: string): Promise<void>;
82
82
  requestDisplayMode(mode: DisplayMode): Promise<void>;
83
83
  /**
84
- * Report a desired widget size to the host via the FrontMCP `ui/setSize`
85
- * request (parallels `ui/setDisplayMode`).
84
+ * Report the widget's size to the host with the standard
85
+ * `ui/notifications/size-changed` notification (`{ width?, height? }` in px).
86
86
  */
87
87
  setSize(size: WidgetSize): Promise<void>;
88
88
  requestClose(): Promise<void>;
@@ -168,10 +168,15 @@ export declare class ExtAppsAdapter extends BaseAdapter {
168
168
  private _sendRequest;
169
169
  /**
170
170
  * Send a JSON-RPC notification (no response expected).
171
+ *
172
+ * Unlike the handshake request, a notification is never broadcast with `'*'`:
173
+ * it goes to the pinned host origin or the first configured trusted origin,
174
+ * and is refused when neither exists.
171
175
  */
172
176
  private _sendNotification;
173
177
  /**
174
- * Post a message to the parent window.
178
+ * Post a message to the parent window. Without an explicit `targetOrigin` it
179
+ * uses the pinned host origin, or `'*'` before one exists (the handshake).
175
180
  */
176
181
  private _postMessage;
177
182
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ext-apps.adapter.d.ts","sourceRoot":"","sources":["../../../src/bridge/adapters/ext-apps.adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EAUX,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,OAAO,CAAC,EAAE;QACR,qFAAqF;QACrF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,qCAAqC;QACrC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,wCAAwC;QACxC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kDAAkD;QAClD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gDAAgD;QAChD,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,gBAAgB,CAOV;IACd,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAAmD;gBAEhE,MAAM,CAAC,EAAE,oBAAoB;IAazC;;;;;;;;OAQG;IACH,SAAS,IAAI,OAAO;IA2CpB;;OAEG;IACY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB1C;;OAEG;IACM,OAAO,IAAI,IAAI;IAqBT,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAWvE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASpC,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnE;;;OAGG;IACY,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5C;;;;;;;;OAQG;IACG,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvE;;;;;;;;;OASG;IACG,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrG;;;;;;;;;OASG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1G;;;;;;OAMG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAO/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsBhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0BhC;;OAEG;YACW,iBAAiB;IA0D/B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAUzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAElF;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"ext-apps.adapter.d.ts","sourceRoot":"","sources":["../../../src/bridge/adapters/ext-apps.adapter.ts"],"names":[],"mappings":"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"}
package/bridge/index.js CHANGED
@@ -1183,15 +1183,14 @@ var ExtAppsAdapter = class extends BaseAdapter {
1183
1183
  this._hostContext = { ...this._hostContext, displayMode: mode };
1184
1184
  }
1185
1185
  /**
1186
- * Report a desired widget size to the host via the FrontMCP `ui/setSize`
1187
- * request (parallels `ui/setDisplayMode`).
1186
+ * Report the widget's size to the host with the standard
1187
+ * `ui/notifications/size-changed` notification (`{ width?, height? }` in px).
1188
1188
  */
1189
1189
  async setSize(size) {
1190
- await this._sendRequest("ui/setSize", {
1191
- height: size.height,
1192
- width: size.width,
1193
- aspectRatio: size.aspectRatio
1194
- });
1190
+ const params = {};
1191
+ if (typeof size.width === "number") params.width = size.width;
1192
+ if (typeof size.height === "number") params.height = size.height;
1193
+ this._sendNotification("ui/notifications/size-changed", params);
1195
1194
  }
1196
1195
  async requestClose() {
1197
1196
  await this._sendRequest("ui/close", {});
@@ -1416,21 +1415,29 @@ var ExtAppsAdapter = class extends BaseAdapter {
1416
1415
  }
1417
1416
  /**
1418
1417
  * Send a JSON-RPC notification (no response expected).
1418
+ *
1419
+ * Unlike the handshake request, a notification is never broadcast with `'*'`:
1420
+ * it goes to the pinned host origin or the first configured trusted origin,
1421
+ * and is refused when neither exists.
1419
1422
  */
1420
1423
  _sendNotification(method, params) {
1424
+ const targetOrigin = this._trustedOrigin || this._config.options?.trustedOrigins?.[0];
1425
+ if (!targetOrigin) {
1426
+ throw new Error("Cannot send notification: no trusted origin established");
1427
+ }
1421
1428
  const notification = {
1422
1429
  jsonrpc: "2.0",
1423
1430
  method,
1424
1431
  params
1425
1432
  };
1426
- this._postMessage(notification);
1433
+ this._postMessage(notification, targetOrigin);
1427
1434
  }
1428
1435
  /**
1429
- * Post a message to the parent window.
1436
+ * Post a message to the parent window. Without an explicit `targetOrigin` it
1437
+ * uses the pinned host origin, or `'*'` before one exists (the handshake).
1430
1438
  */
1431
- _postMessage(message) {
1432
- if (typeof window === "undefined") return;
1433
- const targetOrigin = this._trustedOrigin || "*";
1439
+ _postMessage(message, targetOrigin = this._trustedOrigin || "*") {
1440
+ if (typeof window === "undefined" || typeof window.parent?.postMessage !== "function") return;
1434
1441
  window.parent.postMessage(message, targetOrigin);
1435
1442
  }
1436
1443
  // ============================================
@@ -1489,7 +1496,7 @@ var ExtAppsAdapter = class extends BaseAdapter {
1489
1496
  if (!this._config.options?.trustedOrigins?.length) {
1490
1497
  }
1491
1498
  } catch (error) {
1492
- throw new Error(`ext-apps handshake failed: ${error}`);
1499
+ throw new Error(`ext-apps handshake failed: ${error}`, { cause: error });
1493
1500
  }
1494
1501
  }
1495
1502
  // ============================================
@@ -1 +1 @@
1
- {"version":3,"file":"iife-generator.d.ts","sourceRoot":"","sources":["../../../src/bridge/runtime/iife-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC;IACvE,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CA6F7E;AA09BD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,EACvD,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAM,GACnD,MAAM,CAYR;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAuB,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAC"}
1
+ {"version":3,"file":"iife-generator.d.ts","sourceRoot":"","sources":["../../../src/bridge/runtime/iife-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC;IACvE,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CA6F7E;AAyhCD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,EACvD,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAM,GACnD,MAAM,CAYR;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAuB,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAC"}
package/bridge/types.d.ts CHANGED
@@ -173,7 +173,7 @@ export interface PlatformAdapter {
173
173
  *
174
174
  * Behaviour is host-specific: hosts that measure the DOM themselves
175
175
  * (Claude, generic web) treat this as a no-op; ext-apps hosts receive a
176
- * `ui/setSize` request; OpenAI forwards to its Apps SDK when available.
176
+ * `ui/notifications/size-changed` notification; OpenAI forwards to its Apps SDK when available.
177
177
  *
178
178
  * @param size - Desired widget dimensions
179
179
  */
@@ -406,6 +406,7 @@ export interface FrontMcpBridgeInterface {
406
406
  dispose(): void;
407
407
  getTheme(): 'light' | 'dark';
408
408
  getDisplayMode(): DisplayMode;
409
+ getHostContext(): HostContext;
409
410
  getToolInput(): Record<string, unknown>;
410
411
  getToolOutput(): unknown;
411
412
  getStructuredContent<T = unknown>(): T | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridge/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridge/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,KAAK,GAAG,UAAU,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnC,4CAA4C;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,2BAA2B;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,SAAS,EAAE,aAAa,CAAC;IACzB,uBAAuB;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;CAClD;AAMD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,uCAAuC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,+BAA+B;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAMD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAM3C;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;;;OAIG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;IAMhB,wBAAwB;IACxB,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC;IAE7B,+BAA+B;IAC/B,cAAc,IAAI,WAAW,CAAC;IAE9B,0BAA0B;IAC1B,YAAY,IAAI,aAAa,CAAC;IAE9B,wBAAwB;IACxB,SAAS,IAAI,MAAM,CAAC;IAEpB,+BAA+B;IAC/B,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExC,6BAA6B;IAC7B,aAAa,IAAI,OAAO,CAAC;IAEzB,6CAA6C;IAC7C,oBAAoB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC;IAE9C,iCAAiC;IACjC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE1C,2BAA2B;IAC3B,WAAW,IAAI,cAAc,CAAC;IAE9B,wBAAwB;IACxB,WAAW,IAAI,YAAY,GAAG,SAAS,CAAC;IAExC,4BAA4B;IAC5B,cAAc,IAAI,WAAW,CAAC;IAM9B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAMrD;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAE/E;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/D;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,iCAAiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAChD;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,eAAe,EAAE;QACf,KAAK,CAAC,EAAE;YACN,WAAW,EAAE,OAAO,CAAC;SACtB,CAAC;KACH,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,gBAAgB,EAAE;QAChB,kCAAkC;QAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,0DAA0D;QAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,sCAAsC;QACtC,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,4BAA4B;QAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,0CAA0C;QAC1C,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,yCAAyC;QACzC,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,8BAA8B;QAC9B,YAAY,CAAC,EAAE,CAAC,QAAQ,GAAG,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC;KACpD,CAAC;IACF,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,cAAc,GACd,wBAAwB,GACxB,gBAAgB,GAChB,YAAY,GACZ,oBAAoB,GACpB,aAAa,GACb,gBAAgB,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,cAAc,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,wBAAwB,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACrD,oBAAoB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC7D,aAAa,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,gBAAgB,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAMD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,KAAK,eAAe,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAMD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAE9B,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,mCAAmC;IACnC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAEvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,UAAU,IAAI,eAAe,GAAG,SAAS,CAAC;IAE1C;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAAC;IAEvD;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAGhB,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC;IAC7B,cAAc,IAAI,WAAW,CAAC;IAC9B,cAAc,IAAI,WAAW,CAAC;IAC9B,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,aAAa,IAAI,OAAO,CAAC;IACzB,oBAAoB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrD,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/E,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/D"}
@@ -1131,15 +1131,14 @@ var ExtAppsAdapter = class extends BaseAdapter {
1131
1131
  this._hostContext = { ...this._hostContext, displayMode: mode };
1132
1132
  }
1133
1133
  /**
1134
- * Report a desired widget size to the host via the FrontMCP `ui/setSize`
1135
- * request (parallels `ui/setDisplayMode`).
1134
+ * Report the widget's size to the host with the standard
1135
+ * `ui/notifications/size-changed` notification (`{ width?, height? }` in px).
1136
1136
  */
1137
1137
  async setSize(size) {
1138
- await this._sendRequest("ui/setSize", {
1139
- height: size.height,
1140
- width: size.width,
1141
- aspectRatio: size.aspectRatio
1142
- });
1138
+ const params = {};
1139
+ if (typeof size.width === "number") params.width = size.width;
1140
+ if (typeof size.height === "number") params.height = size.height;
1141
+ this._sendNotification("ui/notifications/size-changed", params);
1143
1142
  }
1144
1143
  async requestClose() {
1145
1144
  await this._sendRequest("ui/close", {});
@@ -1364,21 +1363,29 @@ var ExtAppsAdapter = class extends BaseAdapter {
1364
1363
  }
1365
1364
  /**
1366
1365
  * Send a JSON-RPC notification (no response expected).
1366
+ *
1367
+ * Unlike the handshake request, a notification is never broadcast with `'*'`:
1368
+ * it goes to the pinned host origin or the first configured trusted origin,
1369
+ * and is refused when neither exists.
1367
1370
  */
1368
1371
  _sendNotification(method, params) {
1372
+ const targetOrigin = this._trustedOrigin || this._config.options?.trustedOrigins?.[0];
1373
+ if (!targetOrigin) {
1374
+ throw new Error("Cannot send notification: no trusted origin established");
1375
+ }
1369
1376
  const notification = {
1370
1377
  jsonrpc: "2.0",
1371
1378
  method,
1372
1379
  params
1373
1380
  };
1374
- this._postMessage(notification);
1381
+ this._postMessage(notification, targetOrigin);
1375
1382
  }
1376
1383
  /**
1377
- * Post a message to the parent window.
1384
+ * Post a message to the parent window. Without an explicit `targetOrigin` it
1385
+ * uses the pinned host origin, or `'*'` before one exists (the handshake).
1378
1386
  */
1379
- _postMessage(message) {
1380
- if (typeof window === "undefined") return;
1381
- const targetOrigin = this._trustedOrigin || "*";
1387
+ _postMessage(message, targetOrigin = this._trustedOrigin || "*") {
1388
+ if (typeof window === "undefined" || typeof window.parent?.postMessage !== "function") return;
1382
1389
  window.parent.postMessage(message, targetOrigin);
1383
1390
  }
1384
1391
  // ============================================
@@ -1437,7 +1444,7 @@ var ExtAppsAdapter = class extends BaseAdapter {
1437
1444
  if (!this._config.options?.trustedOrigins?.length) {
1438
1445
  }
1439
1446
  } catch (error) {
1440
- throw new Error(`ext-apps handshake failed: ${error}`);
1447
+ throw new Error(`ext-apps handshake failed: ${error}`, { cause: error });
1441
1448
  }
1442
1449
  }
1443
1450
  // ============================================
package/esm/index.mjs CHANGED
@@ -559,7 +559,7 @@ import {
559
559
  } from "@frontmcp/uipack";
560
560
 
561
561
  // libs/ui/src/react/hooks/context.tsx
562
- import { createContext, useContext, useEffect, useState, useMemo } from "react";
562
+ import { createContext, useContext, useEffect, useMemo, useState } from "react";
563
563
  import { jsx } from "react/jsx-runtime";
564
564
  var McpBridgeContext = createContext(null);
565
565
  function McpBridgeProvider({ children, config, onReady, onError }) {
@@ -568,6 +568,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
568
568
  const [bridge, setBridge] = useState(hasExisting ? existingBridge : null);
569
569
  const [loading, setLoading] = useState(!hasExisting);
570
570
  const [error, setError] = useState(null);
571
+ const [revision, setRevision] = useState(0);
571
572
  useEffect(() => {
572
573
  if (hasExisting) {
573
574
  if (existingBridge.initialized) {
@@ -576,6 +577,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
576
577
  const handler = () => {
577
578
  onReady?.(existingBridge);
578
579
  setBridge(existingBridge);
580
+ setRevision((r) => r + 1);
579
581
  };
580
582
  window.addEventListener("bridge:ready", handler, { once: true });
581
583
  return () => window.removeEventListener("bridge:ready", handler);
@@ -617,9 +619,10 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
617
619
  error,
618
620
  ready: !loading && !error && bridge !== null,
619
621
  adapterId: bridge?.adapterId,
620
- capabilities: bridge?.capabilities
622
+ capabilities: bridge?.capabilities,
623
+ revision
621
624
  }),
622
- [bridge, loading, error]
625
+ [bridge, loading, error, revision]
623
626
  );
624
627
  return /* @__PURE__ */ jsx(McpBridgeContext.Provider, { value: contextValue, children });
625
628
  }
@@ -629,7 +632,8 @@ var SSR_DEFAULT_CONTEXT = {
629
632
  error: null,
630
633
  ready: false,
631
634
  adapterId: void 0,
632
- capabilities: void 0
635
+ capabilities: void 0,
636
+ revision: 0
633
637
  };
634
638
  function useMcpBridgeContext() {
635
639
  const context = useContext(McpBridgeContext);
@@ -643,7 +647,7 @@ function useMcpBridge() {
643
647
  return bridge;
644
648
  }
645
649
  function useTheme() {
646
- const { bridge, ready } = useMcpBridgeContext();
650
+ const { bridge, ready, revision } = useMcpBridgeContext();
647
651
  const [theme, setTheme] = useState("light");
648
652
  useEffect(() => {
649
653
  if (!ready || !bridge) return;
@@ -654,11 +658,11 @@ function useTheme() {
654
658
  }
655
659
  });
656
660
  return unsubscribe;
657
- }, [bridge, ready]);
661
+ }, [bridge, ready, revision]);
658
662
  return theme;
659
663
  }
660
664
  function useDisplayMode() {
661
- const { bridge, ready } = useMcpBridgeContext();
665
+ const { bridge, ready, revision } = useMcpBridgeContext();
662
666
  const [displayMode, setDisplayMode] = useState("inline");
663
667
  useEffect(() => {
664
668
  if (!ready || !bridge) return;
@@ -669,23 +673,25 @@ function useDisplayMode() {
669
673
  }
670
674
  });
671
675
  return unsubscribe;
672
- }, [bridge, ready]);
676
+ }, [bridge, ready, revision]);
673
677
  return displayMode;
674
678
  }
675
679
  function useHostContext() {
676
- const { bridge, ready } = useMcpBridgeContext();
680
+ const { bridge, ready, revision } = useMcpBridgeContext();
677
681
  const [context, setContext] = useState(null);
678
682
  useEffect(() => {
679
683
  if (!ready || !bridge) return;
680
684
  const adapter = bridge.getAdapter?.();
681
685
  if (adapter) {
682
686
  setContext(adapter.getHostContext());
687
+ } else if (typeof bridge.getHostContext === "function") {
688
+ setContext({ ...bridge.getHostContext() });
683
689
  }
684
690
  const unsubscribe = bridge.onContextChange((changes) => {
685
- setContext((prev) => prev ? { ...prev, ...changes } : null);
691
+ setContext((prev) => ({ ...prev ?? {}, ...changes }));
686
692
  });
687
693
  return unsubscribe;
688
- }, [bridge, ready]);
694
+ }, [bridge, ready, revision]);
689
695
  return context;
690
696
  }
691
697
  function useCapability(cap) {
@@ -694,9 +700,20 @@ function useCapability(cap) {
694
700
  }
695
701
 
696
702
  // libs/ui/src/react/hooks/tools.tsx
697
- import { useState as useState2, useCallback, useEffect as useEffect2 } from "react";
703
+ import { useCallback, useEffect as useEffect2, useState as useState2 } from "react";
698
704
  function useToolInput() {
699
- const { bridge, ready } = useMcpBridgeContext();
705
+ const { bridge, ready, revision } = useMcpBridgeContext();
706
+ const [, setTick] = useState2(0);
707
+ useEffect2(() => {
708
+ if (!ready || typeof window === "undefined") return;
709
+ const bump = () => setTick((t) => t + 1);
710
+ window.addEventListener("tool:input", bump);
711
+ window.addEventListener("tool:input-partial", bump);
712
+ return () => {
713
+ window.removeEventListener("tool:input", bump);
714
+ window.removeEventListener("tool:input-partial", bump);
715
+ };
716
+ }, [ready, revision]);
700
717
  if (!ready || !bridge) {
701
718
  return null;
702
719
  }
@@ -707,7 +724,7 @@ function useToolInput() {
707
724
  }
708
725
  }
709
726
  function useToolOutput() {
710
- const { bridge, ready } = useMcpBridgeContext();
727
+ const { bridge, ready, revision } = useMcpBridgeContext();
711
728
  const [output, setOutput] = useState2(null);
712
729
  useEffect2(() => {
713
730
  if (!ready || !bridge) return;
@@ -722,11 +739,11 @@ function useToolOutput() {
722
739
  setOutput(result);
723
740
  });
724
741
  return unsubscribe;
725
- }, [bridge, ready]);
742
+ }, [bridge, ready, revision]);
726
743
  return output;
727
744
  }
728
745
  function useStructuredContent() {
729
- const { bridge, ready } = useMcpBridgeContext();
746
+ const { bridge, ready, revision } = useMcpBridgeContext();
730
747
  const [content, setContent] = useState2(null);
731
748
  useEffect2(() => {
732
749
  if (!ready || !bridge) {
@@ -745,7 +762,7 @@ function useStructuredContent() {
745
762
  setContent(readStructured());
746
763
  });
747
764
  return unsubscribe;
748
- }, [bridge, ready]);
765
+ }, [bridge, ready, revision]);
749
766
  return content;
750
767
  }
751
768
  function useCallTool(toolName, options = {}) {
package/esm/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/ui",
3
- "version": "1.8.5",
3
+ "version": "1.8.7",
4
4
  "description": "FrontMCP UI - MUI-based React components, renderers, and MCP bridge for MCP applications",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -439,7 +439,7 @@
439
439
  }
440
440
  },
441
441
  "optionalDependencies": {
442
- "@frontmcp/uipack": "1.8.5"
442
+ "@frontmcp/uipack": "1.8.7"
443
443
  },
444
444
  "devDependencies": {
445
445
  "@types/dompurify": "^3.0.0",
@@ -1,5 +1,5 @@
1
1
  // libs/ui/src/react/hooks/context.tsx
2
- import { createContext, useContext, useEffect, useState, useMemo } from "react";
2
+ import { createContext, useContext, useEffect, useMemo, useState } from "react";
3
3
 
4
4
  // libs/ui/src/bridge/core/adapter-registry.ts
5
5
  var AdapterRegistry = class {
@@ -554,6 +554,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
554
554
  const [bridge, setBridge] = useState(hasExisting ? existingBridge : null);
555
555
  const [loading, setLoading] = useState(!hasExisting);
556
556
  const [error, setError] = useState(null);
557
+ const [revision, setRevision] = useState(0);
557
558
  useEffect(() => {
558
559
  if (hasExisting) {
559
560
  if (existingBridge.initialized) {
@@ -562,6 +563,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
562
563
  const handler = () => {
563
564
  onReady?.(existingBridge);
564
565
  setBridge(existingBridge);
566
+ setRevision((r) => r + 1);
565
567
  };
566
568
  window.addEventListener("bridge:ready", handler, { once: true });
567
569
  return () => window.removeEventListener("bridge:ready", handler);
@@ -603,9 +605,10 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
603
605
  error,
604
606
  ready: !loading && !error && bridge !== null,
605
607
  adapterId: bridge?.adapterId,
606
- capabilities: bridge?.capabilities
608
+ capabilities: bridge?.capabilities,
609
+ revision
607
610
  }),
608
- [bridge, loading, error]
611
+ [bridge, loading, error, revision]
609
612
  );
610
613
  return /* @__PURE__ */ jsx(McpBridgeContext.Provider, { value: contextValue, children });
611
614
  }
@@ -615,7 +618,8 @@ var SSR_DEFAULT_CONTEXT = {
615
618
  error: null,
616
619
  ready: false,
617
620
  adapterId: void 0,
618
- capabilities: void 0
621
+ capabilities: void 0,
622
+ revision: 0
619
623
  };
620
624
  function useMcpBridgeContext() {
621
625
  const context = useContext(McpBridgeContext);
@@ -629,7 +633,7 @@ function useMcpBridge() {
629
633
  return bridge;
630
634
  }
631
635
  function useTheme() {
632
- const { bridge, ready } = useMcpBridgeContext();
636
+ const { bridge, ready, revision } = useMcpBridgeContext();
633
637
  const [theme, setTheme] = useState("light");
634
638
  useEffect(() => {
635
639
  if (!ready || !bridge) return;
@@ -640,11 +644,11 @@ function useTheme() {
640
644
  }
641
645
  });
642
646
  return unsubscribe;
643
- }, [bridge, ready]);
647
+ }, [bridge, ready, revision]);
644
648
  return theme;
645
649
  }
646
650
  function useDisplayMode() {
647
- const { bridge, ready } = useMcpBridgeContext();
651
+ const { bridge, ready, revision } = useMcpBridgeContext();
648
652
  const [displayMode, setDisplayMode] = useState("inline");
649
653
  useEffect(() => {
650
654
  if (!ready || !bridge) return;
@@ -655,23 +659,25 @@ function useDisplayMode() {
655
659
  }
656
660
  });
657
661
  return unsubscribe;
658
- }, [bridge, ready]);
662
+ }, [bridge, ready, revision]);
659
663
  return displayMode;
660
664
  }
661
665
  function useHostContext() {
662
- const { bridge, ready } = useMcpBridgeContext();
666
+ const { bridge, ready, revision } = useMcpBridgeContext();
663
667
  const [context, setContext] = useState(null);
664
668
  useEffect(() => {
665
669
  if (!ready || !bridge) return;
666
670
  const adapter = bridge.getAdapter?.();
667
671
  if (adapter) {
668
672
  setContext(adapter.getHostContext());
673
+ } else if (typeof bridge.getHostContext === "function") {
674
+ setContext({ ...bridge.getHostContext() });
669
675
  }
670
676
  const unsubscribe = bridge.onContextChange((changes) => {
671
- setContext((prev) => prev ? { ...prev, ...changes } : null);
677
+ setContext((prev) => ({ ...prev ?? {}, ...changes }));
672
678
  });
673
679
  return unsubscribe;
674
- }, [bridge, ready]);
680
+ }, [bridge, ready, revision]);
675
681
  return context;
676
682
  }
677
683
  function useCapability(cap) {
@@ -680,9 +686,20 @@ function useCapability(cap) {
680
686
  }
681
687
 
682
688
  // libs/ui/src/react/hooks/tools.tsx
683
- import { useState as useState2, useCallback, useEffect as useEffect2 } from "react";
689
+ import { useCallback, useEffect as useEffect2, useState as useState2 } from "react";
684
690
  function useToolInput() {
685
- const { bridge, ready } = useMcpBridgeContext();
691
+ const { bridge, ready, revision } = useMcpBridgeContext();
692
+ const [, setTick] = useState2(0);
693
+ useEffect2(() => {
694
+ if (!ready || typeof window === "undefined") return;
695
+ const bump = () => setTick((t) => t + 1);
696
+ window.addEventListener("tool:input", bump);
697
+ window.addEventListener("tool:input-partial", bump);
698
+ return () => {
699
+ window.removeEventListener("tool:input", bump);
700
+ window.removeEventListener("tool:input-partial", bump);
701
+ };
702
+ }, [ready, revision]);
686
703
  if (!ready || !bridge) {
687
704
  return null;
688
705
  }
@@ -693,7 +710,7 @@ function useToolInput() {
693
710
  }
694
711
  }
695
712
  function useToolOutput() {
696
- const { bridge, ready } = useMcpBridgeContext();
713
+ const { bridge, ready, revision } = useMcpBridgeContext();
697
714
  const [output, setOutput] = useState2(null);
698
715
  useEffect2(() => {
699
716
  if (!ready || !bridge) return;
@@ -708,11 +725,11 @@ function useToolOutput() {
708
725
  setOutput(result);
709
726
  });
710
727
  return unsubscribe;
711
- }, [bridge, ready]);
728
+ }, [bridge, ready, revision]);
712
729
  return output;
713
730
  }
714
731
  function useStructuredContent() {
715
- const { bridge, ready } = useMcpBridgeContext();
732
+ const { bridge, ready, revision } = useMcpBridgeContext();
716
733
  const [content, setContent] = useState2(null);
717
734
  useEffect2(() => {
718
735
  if (!ready || !bridge) {
@@ -731,7 +748,7 @@ function useStructuredContent() {
731
748
  setContent(readStructured());
732
749
  });
733
750
  return unsubscribe;
734
- }, [bridge, ready]);
751
+ }, [bridge, ready, revision]);
735
752
  return content;
736
753
  }
737
754
  function useCallTool(toolName, options = {}) {
package/index.js CHANGED
@@ -611,6 +611,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
611
611
  const [bridge, setBridge] = (0, import_react.useState)(hasExisting ? existingBridge : null);
612
612
  const [loading, setLoading] = (0, import_react.useState)(!hasExisting);
613
613
  const [error, setError] = (0, import_react.useState)(null);
614
+ const [revision, setRevision] = (0, import_react.useState)(0);
614
615
  (0, import_react.useEffect)(() => {
615
616
  if (hasExisting) {
616
617
  if (existingBridge.initialized) {
@@ -619,6 +620,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
619
620
  const handler = () => {
620
621
  onReady?.(existingBridge);
621
622
  setBridge(existingBridge);
623
+ setRevision((r) => r + 1);
622
624
  };
623
625
  window.addEventListener("bridge:ready", handler, { once: true });
624
626
  return () => window.removeEventListener("bridge:ready", handler);
@@ -660,9 +662,10 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
660
662
  error,
661
663
  ready: !loading && !error && bridge !== null,
662
664
  adapterId: bridge?.adapterId,
663
- capabilities: bridge?.capabilities
665
+ capabilities: bridge?.capabilities,
666
+ revision
664
667
  }),
665
- [bridge, loading, error]
668
+ [bridge, loading, error, revision]
666
669
  );
667
670
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(McpBridgeContext.Provider, { value: contextValue, children });
668
671
  }
@@ -672,7 +675,8 @@ var SSR_DEFAULT_CONTEXT = {
672
675
  error: null,
673
676
  ready: false,
674
677
  adapterId: void 0,
675
- capabilities: void 0
678
+ capabilities: void 0,
679
+ revision: 0
676
680
  };
677
681
  function useMcpBridgeContext() {
678
682
  const context = (0, import_react.useContext)(McpBridgeContext);
@@ -686,7 +690,7 @@ function useMcpBridge() {
686
690
  return bridge;
687
691
  }
688
692
  function useTheme() {
689
- const { bridge, ready } = useMcpBridgeContext();
693
+ const { bridge, ready, revision } = useMcpBridgeContext();
690
694
  const [theme, setTheme] = (0, import_react.useState)("light");
691
695
  (0, import_react.useEffect)(() => {
692
696
  if (!ready || !bridge) return;
@@ -697,11 +701,11 @@ function useTheme() {
697
701
  }
698
702
  });
699
703
  return unsubscribe;
700
- }, [bridge, ready]);
704
+ }, [bridge, ready, revision]);
701
705
  return theme;
702
706
  }
703
707
  function useDisplayMode() {
704
- const { bridge, ready } = useMcpBridgeContext();
708
+ const { bridge, ready, revision } = useMcpBridgeContext();
705
709
  const [displayMode, setDisplayMode] = (0, import_react.useState)("inline");
706
710
  (0, import_react.useEffect)(() => {
707
711
  if (!ready || !bridge) return;
@@ -712,23 +716,25 @@ function useDisplayMode() {
712
716
  }
713
717
  });
714
718
  return unsubscribe;
715
- }, [bridge, ready]);
719
+ }, [bridge, ready, revision]);
716
720
  return displayMode;
717
721
  }
718
722
  function useHostContext() {
719
- const { bridge, ready } = useMcpBridgeContext();
723
+ const { bridge, ready, revision } = useMcpBridgeContext();
720
724
  const [context, setContext] = (0, import_react.useState)(null);
721
725
  (0, import_react.useEffect)(() => {
722
726
  if (!ready || !bridge) return;
723
727
  const adapter = bridge.getAdapter?.();
724
728
  if (adapter) {
725
729
  setContext(adapter.getHostContext());
730
+ } else if (typeof bridge.getHostContext === "function") {
731
+ setContext({ ...bridge.getHostContext() });
726
732
  }
727
733
  const unsubscribe = bridge.onContextChange((changes) => {
728
- setContext((prev) => prev ? { ...prev, ...changes } : null);
734
+ setContext((prev) => ({ ...prev ?? {}, ...changes }));
729
735
  });
730
736
  return unsubscribe;
731
- }, [bridge, ready]);
737
+ }, [bridge, ready, revision]);
732
738
  return context;
733
739
  }
734
740
  function useCapability(cap) {
@@ -739,7 +745,18 @@ function useCapability(cap) {
739
745
  // libs/ui/src/react/hooks/tools.tsx
740
746
  var import_react2 = require("react");
741
747
  function useToolInput() {
742
- const { bridge, ready } = useMcpBridgeContext();
748
+ const { bridge, ready, revision } = useMcpBridgeContext();
749
+ const [, setTick] = (0, import_react2.useState)(0);
750
+ (0, import_react2.useEffect)(() => {
751
+ if (!ready || typeof window === "undefined") return;
752
+ const bump = () => setTick((t) => t + 1);
753
+ window.addEventListener("tool:input", bump);
754
+ window.addEventListener("tool:input-partial", bump);
755
+ return () => {
756
+ window.removeEventListener("tool:input", bump);
757
+ window.removeEventListener("tool:input-partial", bump);
758
+ };
759
+ }, [ready, revision]);
743
760
  if (!ready || !bridge) {
744
761
  return null;
745
762
  }
@@ -750,7 +767,7 @@ function useToolInput() {
750
767
  }
751
768
  }
752
769
  function useToolOutput() {
753
- const { bridge, ready } = useMcpBridgeContext();
770
+ const { bridge, ready, revision } = useMcpBridgeContext();
754
771
  const [output, setOutput] = (0, import_react2.useState)(null);
755
772
  (0, import_react2.useEffect)(() => {
756
773
  if (!ready || !bridge) return;
@@ -765,11 +782,11 @@ function useToolOutput() {
765
782
  setOutput(result);
766
783
  });
767
784
  return unsubscribe;
768
- }, [bridge, ready]);
785
+ }, [bridge, ready, revision]);
769
786
  return output;
770
787
  }
771
788
  function useStructuredContent() {
772
- const { bridge, ready } = useMcpBridgeContext();
789
+ const { bridge, ready, revision } = useMcpBridgeContext();
773
790
  const [content, setContent] = (0, import_react2.useState)(null);
774
791
  (0, import_react2.useEffect)(() => {
775
792
  if (!ready || !bridge) {
@@ -788,7 +805,7 @@ function useStructuredContent() {
788
805
  setContent(readStructured());
789
806
  });
790
807
  return unsubscribe;
791
- }, [bridge, ready]);
808
+ }, [bridge, ready, revision]);
792
809
  return content;
793
810
  }
794
811
  function useCallTool(toolName, options = {}) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/ui",
3
- "version": "1.8.5",
3
+ "version": "1.8.7",
4
4
  "description": "FrontMCP UI - MUI-based React components, renderers, and MCP bridge for MCP applications",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -439,7 +439,7 @@
439
439
  }
440
440
  },
441
441
  "optionalDependencies": {
442
- "@frontmcp/uipack": "1.8.5"
442
+ "@frontmcp/uipack": "1.8.7"
443
443
  },
444
444
  "devDependencies": {
445
445
  "@types/dompurify": "^3.0.0",
@@ -21,7 +21,7 @@
21
21
  * @module @frontmcp/ui/react/hooks
22
22
  */
23
23
  import { type ReactNode } from 'react';
24
- import type { FrontMcpBridgeInterface, BridgeConfig, AdapterCapabilities, HostContext, DisplayMode } from '../../bridge';
24
+ import { type AdapterCapabilities, type BridgeConfig, type DisplayMode, type FrontMcpBridgeInterface, type HostContext } from '../../bridge';
25
25
  /**
26
26
  * MCP Bridge context value.
27
27
  */
@@ -38,6 +38,8 @@ export interface McpBridgeContextValue {
38
38
  adapterId: string | undefined;
39
39
  /** Current adapter capabilities */
40
40
  capabilities: AdapterCapabilities | undefined;
41
+ /** Bumps when a shared bridge finishes its handshake, so hooks re-read host state */
42
+ revision: number;
41
43
  }
42
44
  /**
43
45
  * Props for McpBridgeProvider.
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,EACV,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,WAAW,EACZ,MAAM,cAAc,CAAC;AAOtB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACvC,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mCAAmC;IACnC,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uBAAuB;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpD,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CA8E/F;AAoBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,IAAI,qBAAqB,CAS3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,IAAI,uBAAuB,GAAG,IAAI,CAG7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,IAAI,OAAO,GAAG,MAAM,CAqB3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAsBnD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAGrE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhG,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAMtB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACvC,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mCAAmC;IACnC,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC9C,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uBAAuB;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpD,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CAkF/F;AAqBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,IAAI,qBAAqB,CAS3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,IAAI,uBAAuB,GAAG,IAAI,CAG7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,IAAI,OAAO,GAAG,MAAM,CAqB3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAyBnD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAGrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/tools.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACxE,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,uBAAuB;IACvB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,qDAAqD;IACrD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,IAAI;IAC9D,gCAAgC;IAChC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,yBAAyB;IACzB,SAAS,CAAC,OAAO,CAAC;IAClB,oCAAoC;IACpC,MAAM,IAAI;CACX,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAYnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CA0BrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CA+B5D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,EAC5F,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CA+EpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3D,OAAO,EAAE,CAAC,GACT;KACA,CAAC,IAAI,MAAM,CAAC,GAAG;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACjF,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACrC,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB;CACF,CAwFA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,IAAI;IAChC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAClC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE;CACzD,CA6BA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,IAAI,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAc5D"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/tools.tsx"],"names":[],"mappings":"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"}
package/react/index.js CHANGED
@@ -593,6 +593,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
593
593
  const [bridge, setBridge] = (0, import_react.useState)(hasExisting ? existingBridge : null);
594
594
  const [loading, setLoading] = (0, import_react.useState)(!hasExisting);
595
595
  const [error, setError] = (0, import_react.useState)(null);
596
+ const [revision, setRevision] = (0, import_react.useState)(0);
596
597
  (0, import_react.useEffect)(() => {
597
598
  if (hasExisting) {
598
599
  if (existingBridge.initialized) {
@@ -601,6 +602,7 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
601
602
  const handler = () => {
602
603
  onReady?.(existingBridge);
603
604
  setBridge(existingBridge);
605
+ setRevision((r) => r + 1);
604
606
  };
605
607
  window.addEventListener("bridge:ready", handler, { once: true });
606
608
  return () => window.removeEventListener("bridge:ready", handler);
@@ -642,9 +644,10 @@ function McpBridgeProvider({ children, config, onReady, onError }) {
642
644
  error,
643
645
  ready: !loading && !error && bridge !== null,
644
646
  adapterId: bridge?.adapterId,
645
- capabilities: bridge?.capabilities
647
+ capabilities: bridge?.capabilities,
648
+ revision
646
649
  }),
647
- [bridge, loading, error]
650
+ [bridge, loading, error, revision]
648
651
  );
649
652
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(McpBridgeContext.Provider, { value: contextValue, children });
650
653
  }
@@ -654,7 +657,8 @@ var SSR_DEFAULT_CONTEXT = {
654
657
  error: null,
655
658
  ready: false,
656
659
  adapterId: void 0,
657
- capabilities: void 0
660
+ capabilities: void 0,
661
+ revision: 0
658
662
  };
659
663
  function useMcpBridgeContext() {
660
664
  const context = (0, import_react.useContext)(McpBridgeContext);
@@ -668,7 +672,7 @@ function useMcpBridge() {
668
672
  return bridge;
669
673
  }
670
674
  function useTheme() {
671
- const { bridge, ready } = useMcpBridgeContext();
675
+ const { bridge, ready, revision } = useMcpBridgeContext();
672
676
  const [theme, setTheme] = (0, import_react.useState)("light");
673
677
  (0, import_react.useEffect)(() => {
674
678
  if (!ready || !bridge) return;
@@ -679,11 +683,11 @@ function useTheme() {
679
683
  }
680
684
  });
681
685
  return unsubscribe;
682
- }, [bridge, ready]);
686
+ }, [bridge, ready, revision]);
683
687
  return theme;
684
688
  }
685
689
  function useDisplayMode() {
686
- const { bridge, ready } = useMcpBridgeContext();
690
+ const { bridge, ready, revision } = useMcpBridgeContext();
687
691
  const [displayMode, setDisplayMode] = (0, import_react.useState)("inline");
688
692
  (0, import_react.useEffect)(() => {
689
693
  if (!ready || !bridge) return;
@@ -694,23 +698,25 @@ function useDisplayMode() {
694
698
  }
695
699
  });
696
700
  return unsubscribe;
697
- }, [bridge, ready]);
701
+ }, [bridge, ready, revision]);
698
702
  return displayMode;
699
703
  }
700
704
  function useHostContext() {
701
- const { bridge, ready } = useMcpBridgeContext();
705
+ const { bridge, ready, revision } = useMcpBridgeContext();
702
706
  const [context, setContext] = (0, import_react.useState)(null);
703
707
  (0, import_react.useEffect)(() => {
704
708
  if (!ready || !bridge) return;
705
709
  const adapter = bridge.getAdapter?.();
706
710
  if (adapter) {
707
711
  setContext(adapter.getHostContext());
712
+ } else if (typeof bridge.getHostContext === "function") {
713
+ setContext({ ...bridge.getHostContext() });
708
714
  }
709
715
  const unsubscribe = bridge.onContextChange((changes) => {
710
- setContext((prev) => prev ? { ...prev, ...changes } : null);
716
+ setContext((prev) => ({ ...prev ?? {}, ...changes }));
711
717
  });
712
718
  return unsubscribe;
713
- }, [bridge, ready]);
719
+ }, [bridge, ready, revision]);
714
720
  return context;
715
721
  }
716
722
  function useCapability(cap) {
@@ -721,7 +727,18 @@ function useCapability(cap) {
721
727
  // libs/ui/src/react/hooks/tools.tsx
722
728
  var import_react2 = require("react");
723
729
  function useToolInput() {
724
- const { bridge, ready } = useMcpBridgeContext();
730
+ const { bridge, ready, revision } = useMcpBridgeContext();
731
+ const [, setTick] = (0, import_react2.useState)(0);
732
+ (0, import_react2.useEffect)(() => {
733
+ if (!ready || typeof window === "undefined") return;
734
+ const bump = () => setTick((t) => t + 1);
735
+ window.addEventListener("tool:input", bump);
736
+ window.addEventListener("tool:input-partial", bump);
737
+ return () => {
738
+ window.removeEventListener("tool:input", bump);
739
+ window.removeEventListener("tool:input-partial", bump);
740
+ };
741
+ }, [ready, revision]);
725
742
  if (!ready || !bridge) {
726
743
  return null;
727
744
  }
@@ -732,7 +749,7 @@ function useToolInput() {
732
749
  }
733
750
  }
734
751
  function useToolOutput() {
735
- const { bridge, ready } = useMcpBridgeContext();
752
+ const { bridge, ready, revision } = useMcpBridgeContext();
736
753
  const [output, setOutput] = (0, import_react2.useState)(null);
737
754
  (0, import_react2.useEffect)(() => {
738
755
  if (!ready || !bridge) return;
@@ -747,11 +764,11 @@ function useToolOutput() {
747
764
  setOutput(result);
748
765
  });
749
766
  return unsubscribe;
750
- }, [bridge, ready]);
767
+ }, [bridge, ready, revision]);
751
768
  return output;
752
769
  }
753
770
  function useStructuredContent() {
754
- const { bridge, ready } = useMcpBridgeContext();
771
+ const { bridge, ready, revision } = useMcpBridgeContext();
755
772
  const [content, setContent] = (0, import_react2.useState)(null);
756
773
  (0, import_react2.useEffect)(() => {
757
774
  if (!ready || !bridge) {
@@ -770,7 +787,7 @@ function useStructuredContent() {
770
787
  setContent(readStructured());
771
788
  });
772
789
  return unsubscribe;
773
- }, [bridge, ready]);
790
+ }, [bridge, ready, revision]);
774
791
  return content;
775
792
  }
776
793
  function useCallTool(toolName, options = {}) {