Add ui/notifications/request-teardown notification for view-initiated termination (#215)
* Add ui/close-resource request for UI to initiate termination * Add missing METHOD export * Fix typo in remaining ui/request-close * Align spec terminology to teardown/termination instead of close/clearnup * Implement final comments * Removing view behavior on initiation of request termination
This commit is contained in:
parent
296b5921fb
commit
c026b398a1
1 changed files with 195 additions and 5 deletions
47
src/app.ts
47
src/app.ts
|
|
@ -44,6 +44,7 @@ import {
|
|||
McpUiResourceTeardownRequest,
|
||||
McpUiResourceTeardownRequestSchema,
|
||||
McpUiResourceTeardownResult,
|
||||
McpUiRequestTeardownNotification,
|
||||
McpUiSizeChangedNotification,
|
||||
McpUiToolCancelledNotification,
|
||||
McpUiToolCancelledNotificationSchema,
|
||||
|
|
@ -177,7 +178,7 @@ type RequestHandlerExtra = Parameters<
|
|||
* 1. **Create**: Instantiate App with info and capabilities
|
||||
* 2. **Connect**: Call `connect()` to establish transport and perform handshake
|
||||
* 3. **Interactive**: Send requests, receive notifications, call tools
|
||||
* 4. **Cleanup**: Host sends teardown request before unmounting
|
||||
* 4. **Teardown**: Host sends teardown request before unmounting
|
||||
*
|
||||
* ## Inherited Methods
|
||||
*
|
||||
|
|
@ -1134,6 +1135,50 @@ export class App extends Protocol<AppRequest, AppNotification, AppResult> {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Request the host to tear down this app.
|
||||
*
|
||||
* Apps call this method to request that the host tear them down. The host
|
||||
* decides whether to proceed - if approved, the host will send
|
||||
* `ui/resource-teardown` to allow the app to perform gracefull termination before being
|
||||
* unmounted. This piggybacks on the existing teardown mechanism, ensuring
|
||||
* the app only needs a single shutdown procedure (via {@link onteardown `onteardown`})
|
||||
* regardless of whether the teardown was initiated by the app or the host.
|
||||
*
|
||||
* This is a fire-and-forget notification - no response is expected.
|
||||
* If the host approves, the app will receive a `ui/resource-teardown`
|
||||
* request via the {@link onteardown `onteardown`} handler to persist unsaved state.
|
||||
*
|
||||
* @param params - Empty params object (reserved for future use)
|
||||
* @returns Promise that resolves when the notification is sent
|
||||
*
|
||||
* @example App-initiated teardown after user action
|
||||
* ```typescript
|
||||
* // User clicks "Done" button in the app
|
||||
* async function handleDoneClick() {
|
||||
* // Request the host to tear down the app
|
||||
* await app.requestTeardown();
|
||||
* // If host approves, onteardown handler will be called for termination
|
||||
* }
|
||||
*
|
||||
* // Set up teardown handler (called for both app-initiated and host-initiated teardown)
|
||||
* app.onteardown = async () => {
|
||||
* await saveState();
|
||||
* closeConnections();
|
||||
* return {};
|
||||
* };
|
||||
* ```
|
||||
*
|
||||
* @see {@link McpUiRequestTeardownNotification `McpUiRequestTeardownNotification`} for notification structure
|
||||
* @see {@link onteardown `onteardown`} for the graceful termination handler
|
||||
*/
|
||||
requestTeardown(params: McpUiRequestTeardownNotification["params"] = {}) {
|
||||
return this.notification(<McpUiRequestTeardownNotification>{
|
||||
method: "ui/notifications/request-teardown",
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Request a change to the display mode.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue