@frontmcp/ui 1.8.6 → 1.9.0
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.
- package/bridge/adapters/ext-apps.adapter.d.ts +8 -3
- package/bridge/adapters/ext-apps.adapter.d.ts.map +1 -1
- package/bridge/index.js +20 -13
- package/bridge/runtime/iife-generator.d.ts.map +1 -1
- package/bridge/types.d.ts +2 -1
- package/bridge/types.d.ts.map +1 -1
- package/esm/bridge/index.mjs +20 -13
- package/esm/index.mjs +34 -17
- package/esm/package.json +2 -2
- package/esm/react/index.mjs +34 -17
- package/index.js +32 -15
- package/package.json +2 -2
- package/react/hooks/context.d.ts +3 -1
- package/react/hooks/context.d.ts.map +1 -1
- package/react/hooks/tools.d.ts.map +1 -1
- package/react/index.js +32 -15
|
@@ -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
|
|
85
|
-
*
|
|
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;
|
|
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
|
|
1187
|
-
*
|
|
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
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
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;
|
|
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/
|
|
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;
|
package/bridge/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridge/types.ts"],"names":[],"mappings":"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"}
|
package/esm/bridge/index.mjs
CHANGED
|
@@ -1131,15 +1131,14 @@ var ExtAppsAdapter = class extends BaseAdapter {
|
|
|
1131
1131
|
this._hostContext = { ...this._hostContext, displayMode: mode };
|
|
1132
1132
|
}
|
|
1133
1133
|
/**
|
|
1134
|
-
* Report
|
|
1135
|
-
*
|
|
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
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
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,
|
|
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
|
|
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 {
|
|
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.
|
|
3
|
+
"version": "1.9.0",
|
|
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.
|
|
442
|
+
"@frontmcp/uipack": "1.9.0"
|
|
443
443
|
},
|
|
444
444
|
"devDependencies": {
|
|
445
445
|
"@types/dompurify": "^3.0.0",
|
package/esm/react/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// libs/ui/src/react/hooks/context.tsx
|
|
2
|
-
import { createContext, useContext, useEffect,
|
|
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
|
|
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 {
|
|
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
|
|
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.
|
|
3
|
+
"version": "1.9.0",
|
|
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.
|
|
442
|
+
"@frontmcp/uipack": "1.9.0"
|
|
443
443
|
},
|
|
444
444
|
"devDependencies": {
|
|
445
445
|
"@types/dompurify": "^3.0.0",
|
package/react/hooks/context.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* @module @frontmcp/ui/react/hooks
|
|
22
22
|
*/
|
|
23
23
|
import { type ReactNode } from 'react';
|
|
24
|
-
import type
|
|
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;
|
|
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;
|
|
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
|
|
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 = {}) {
|