skybridge 0.0.0-dev.f78ee95 → 0.0.0-dev.f79f9cd

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.
Files changed (192) hide show
  1. package/README.md +155 -126
  2. package/dist/cli/header.js +1 -1
  3. package/dist/cli/header.js.map +1 -1
  4. package/dist/cli/tunnel-control-server.d.ts +9 -0
  5. package/dist/cli/tunnel-control-server.js +31 -0
  6. package/dist/cli/tunnel-control-server.js.map +1 -0
  7. package/dist/cli/tunnel-control-server.test.js +39 -0
  8. package/dist/cli/tunnel-control-server.test.js.map +1 -0
  9. package/dist/cli/tunnel-handler.d.ts +3 -0
  10. package/dist/cli/tunnel-handler.js +48 -0
  11. package/dist/cli/tunnel-handler.js.map +1 -0
  12. package/dist/cli/tunnel-handler.test.js +105 -0
  13. package/dist/cli/tunnel-handler.test.js.map +1 -0
  14. package/dist/cli/tunnel.d.ts +57 -0
  15. package/dist/cli/tunnel.js +154 -0
  16. package/dist/cli/tunnel.js.map +1 -0
  17. package/dist/cli/tunnel.test.js +190 -0
  18. package/dist/cli/tunnel.test.js.map +1 -0
  19. package/dist/cli/types.d.ts +5 -0
  20. package/dist/cli/types.js +2 -0
  21. package/dist/cli/types.js.map +1 -0
  22. package/dist/cli/use-messages.d.ts +3 -0
  23. package/dist/cli/use-messages.js +11 -0
  24. package/dist/cli/use-messages.js.map +1 -0
  25. package/dist/cli/use-nodemon.d.ts +2 -7
  26. package/dist/cli/use-nodemon.js +8 -20
  27. package/dist/cli/use-nodemon.js.map +1 -1
  28. package/dist/cli/use-tunnel.d.ts +14 -0
  29. package/dist/cli/use-tunnel.js +131 -0
  30. package/dist/cli/use-tunnel.js.map +1 -0
  31. package/dist/cli/use-typescript-check.d.ts +1 -0
  32. package/dist/cli/use-typescript-check.js +41 -6
  33. package/dist/cli/use-typescript-check.js.map +1 -1
  34. package/dist/commands/build.js +63 -7
  35. package/dist/commands/build.js.map +1 -1
  36. package/dist/commands/dev.d.ts +2 -0
  37. package/dist/commands/dev.js +40 -3
  38. package/dist/commands/dev.js.map +1 -1
  39. package/dist/commands/start.js +7 -10
  40. package/dist/commands/start.js.map +1 -1
  41. package/dist/server/asset-base-url-transform-plugin.d.ts +5 -6
  42. package/dist/server/asset-base-url-transform-plugin.js +9 -10
  43. package/dist/server/asset-base-url-transform-plugin.js.map +1 -1
  44. package/dist/server/asset-base-url-transform-plugin.test.js +41 -13
  45. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -1
  46. package/dist/server/content-helpers.d.ts +27 -0
  47. package/dist/server/content-helpers.js +46 -0
  48. package/dist/server/content-helpers.js.map +1 -0
  49. package/dist/server/content-helpers.test.d.ts +1 -0
  50. package/dist/server/content-helpers.test.js +70 -0
  51. package/dist/server/content-helpers.test.js.map +1 -0
  52. package/dist/server/express.d.ts +6 -2
  53. package/dist/server/express.js +53 -22
  54. package/dist/server/express.js.map +1 -1
  55. package/dist/server/express.test.js +170 -2
  56. package/dist/server/express.test.js.map +1 -1
  57. package/dist/server/index.d.ts +4 -3
  58. package/dist/server/index.js +3 -2
  59. package/dist/server/index.js.map +1 -1
  60. package/dist/server/inferUtilityTypes.d.ts +6 -6
  61. package/dist/server/metric.d.ts +14 -0
  62. package/dist/server/metric.js +62 -0
  63. package/dist/server/metric.js.map +1 -0
  64. package/dist/server/middleware.test.js +12 -9
  65. package/dist/server/middleware.test.js.map +1 -1
  66. package/dist/server/server.d.ts +112 -74
  67. package/dist/server/server.js +251 -66
  68. package/dist/server/server.js.map +1 -1
  69. package/dist/server/templateHelper.d.ts +5 -7
  70. package/dist/server/templateHelper.js +3 -22
  71. package/dist/server/templateHelper.js.map +1 -1
  72. package/dist/server/templates.generated.d.ts +4 -0
  73. package/dist/server/templates.generated.js +47 -0
  74. package/dist/server/templates.generated.js.map +1 -0
  75. package/dist/server/tunnel-proxy-router.d.ts +7 -0
  76. package/dist/server/tunnel-proxy-router.js +110 -0
  77. package/dist/server/tunnel-proxy-router.js.map +1 -0
  78. package/dist/server/tunnel-proxy-router.test.d.ts +1 -0
  79. package/dist/server/tunnel-proxy-router.test.js +229 -0
  80. package/dist/server/tunnel-proxy-router.test.js.map +1 -0
  81. package/dist/server/viewsDevServer.d.ts +14 -0
  82. package/dist/server/viewsDevServer.js +45 -0
  83. package/dist/server/viewsDevServer.js.map +1 -0
  84. package/dist/test/utils.d.ts +13 -21
  85. package/dist/test/utils.js +42 -37
  86. package/dist/test/utils.js.map +1 -1
  87. package/dist/test/view.test.d.ts +1 -0
  88. package/dist/test/view.test.js +523 -0
  89. package/dist/test/view.test.js.map +1 -0
  90. package/dist/version.d.ts +1 -0
  91. package/dist/version.js +3 -0
  92. package/dist/version.js.map +1 -0
  93. package/dist/web/bridges/apps-sdk/adaptor.d.ts +5 -3
  94. package/dist/web/bridges/apps-sdk/adaptor.js +32 -14
  95. package/dist/web/bridges/apps-sdk/adaptor.js.map +1 -1
  96. package/dist/web/bridges/apps-sdk/types.d.ts +10 -5
  97. package/dist/web/bridges/apps-sdk/types.js.map +1 -1
  98. package/dist/web/bridges/mcp-app/adaptor.d.ts +15 -5
  99. package/dist/web/bridges/mcp-app/adaptor.js +106 -22
  100. package/dist/web/bridges/mcp-app/adaptor.js.map +1 -1
  101. package/dist/web/bridges/types.d.ts +15 -8
  102. package/dist/web/components/modal-provider.js +2 -2
  103. package/dist/web/components/modal-provider.js.map +1 -1
  104. package/dist/web/create-store.js +17 -3
  105. package/dist/web/create-store.js.map +1 -1
  106. package/dist/web/create-store.test.js +14 -16
  107. package/dist/web/create-store.test.js.map +1 -1
  108. package/dist/web/data-llm.d.ts +1 -1
  109. package/dist/web/data-llm.js +3 -3
  110. package/dist/web/data-llm.js.map +1 -1
  111. package/dist/web/data-llm.test.js +22 -22
  112. package/dist/web/data-llm.test.js.map +1 -1
  113. package/dist/web/generate-helpers.d.ts +20 -18
  114. package/dist/web/generate-helpers.js +20 -18
  115. package/dist/web/generate-helpers.js.map +1 -1
  116. package/dist/web/generate-helpers.test-d.js +26 -26
  117. package/dist/web/generate-helpers.test-d.js.map +1 -1
  118. package/dist/web/helpers/state.d.ts +2 -2
  119. package/dist/web/helpers/state.js +11 -11
  120. package/dist/web/helpers/state.js.map +1 -1
  121. package/dist/web/helpers/state.test.js +9 -9
  122. package/dist/web/helpers/state.test.js.map +1 -1
  123. package/dist/web/hooks/index.d.ts +1 -1
  124. package/dist/web/hooks/index.js +1 -1
  125. package/dist/web/hooks/index.js.map +1 -1
  126. package/dist/web/hooks/use-files.d.ts +2 -1
  127. package/dist/web/hooks/use-files.js +1 -0
  128. package/dist/web/hooks/use-files.js.map +1 -1
  129. package/dist/web/hooks/use-files.test.js +22 -2
  130. package/dist/web/hooks/use-files.test.js.map +1 -1
  131. package/dist/web/hooks/use-request-modal.d.ts +1 -1
  132. package/dist/web/hooks/use-request-modal.js +4 -4
  133. package/dist/web/hooks/use-request-modal.js.map +1 -1
  134. package/dist/web/hooks/use-request-modal.test.js +5 -1
  135. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  136. package/dist/web/hooks/use-user.js +18 -2
  137. package/dist/web/hooks/use-user.js.map +1 -1
  138. package/dist/web/hooks/use-user.test.js +28 -0
  139. package/dist/web/hooks/use-user.test.js.map +1 -1
  140. package/dist/web/hooks/use-view-state.d.ts +4 -0
  141. package/dist/web/hooks/use-view-state.js +32 -0
  142. package/dist/web/hooks/use-view-state.js.map +1 -0
  143. package/dist/web/hooks/use-view-state.test.d.ts +1 -0
  144. package/dist/web/hooks/use-view-state.test.js +177 -0
  145. package/dist/web/hooks/use-view-state.test.js.map +1 -0
  146. package/dist/web/index.d.ts +1 -2
  147. package/dist/web/index.js +1 -2
  148. package/dist/web/index.js.map +1 -1
  149. package/dist/web/mount-view.d.ts +1 -0
  150. package/dist/web/{mount-widget.js → mount-view.js} +2 -2
  151. package/dist/web/mount-view.js.map +1 -0
  152. package/dist/web/plugin/plugin.d.ts +4 -1
  153. package/dist/web/plugin/plugin.js +134 -25
  154. package/dist/web/plugin/plugin.js.map +1 -1
  155. package/dist/web/plugin/scan-views.d.ts +16 -0
  156. package/dist/web/plugin/scan-views.js +88 -0
  157. package/dist/web/plugin/scan-views.js.map +1 -0
  158. package/dist/web/plugin/scan-views.test.d.ts +1 -0
  159. package/dist/web/plugin/scan-views.test.js +99 -0
  160. package/dist/web/plugin/scan-views.test.js.map +1 -0
  161. package/dist/web/plugin/transform-data-llm.js +1 -1
  162. package/dist/web/plugin/transform-data-llm.js.map +1 -1
  163. package/dist/web/plugin/validate-view.d.ts +1 -0
  164. package/dist/web/plugin/validate-view.js +9 -0
  165. package/dist/web/plugin/validate-view.js.map +1 -0
  166. package/dist/web/plugin/validate-view.test.d.ts +1 -0
  167. package/dist/web/plugin/validate-view.test.js +24 -0
  168. package/dist/web/plugin/validate-view.test.js.map +1 -0
  169. package/package.json +23 -16
  170. package/tsconfig.base.json +2 -0
  171. package/dist/server/templates/development.hbs +0 -12
  172. package/dist/server/templates/production.hbs +0 -6
  173. package/dist/server/widgetsDevServer.d.ts +0 -13
  174. package/dist/server/widgetsDevServer.js +0 -57
  175. package/dist/server/widgetsDevServer.js.map +0 -1
  176. package/dist/test/widget.test.js +0 -263
  177. package/dist/test/widget.test.js.map +0 -1
  178. package/dist/web/hooks/use-widget-state.d.ts +0 -4
  179. package/dist/web/hooks/use-widget-state.js +0 -32
  180. package/dist/web/hooks/use-widget-state.js.map +0 -1
  181. package/dist/web/hooks/use-widget-state.test.js +0 -64
  182. package/dist/web/hooks/use-widget-state.test.js.map +0 -1
  183. package/dist/web/mount-widget.d.ts +0 -1
  184. package/dist/web/mount-widget.js.map +0 -1
  185. package/dist/web/plugin/validate-widget.d.ts +0 -5
  186. package/dist/web/plugin/validate-widget.js +0 -27
  187. package/dist/web/plugin/validate-widget.js.map +0 -1
  188. package/dist/web/plugin/validate-widget.test.js +0 -42
  189. package/dist/web/plugin/validate-widget.test.js.map +0 -1
  190. /package/dist/{test/widget.test.d.ts → cli/tunnel-control-server.test.d.ts} +0 -0
  191. /package/dist/{web/hooks/use-widget-state.test.d.ts → cli/tunnel-handler.test.d.ts} +0 -0
  192. /package/dist/{web/plugin/validate-widget.test.d.ts → cli/tunnel.test.d.ts} +0 -0
@@ -12,12 +12,18 @@ export class AppsSdkAdaptor {
12
12
  }
13
13
  getHostContextStore(key) {
14
14
  const bridge = AppsSdkBridge.getInstance();
15
- if (key === "widgetState") {
15
+ if (key === "viewState") {
16
16
  return {
17
17
  subscribe: bridge.subscribe("widgetState"),
18
18
  getSnapshot: () => bridge.getSnapshot("widgetState")?.modelContent ?? null,
19
19
  };
20
20
  }
21
+ if (key === "display") {
22
+ return {
23
+ subscribe: bridge.subscribe("view"),
24
+ getSnapshot: () => bridge.getSnapshot("view"),
25
+ };
26
+ }
21
27
  return {
22
28
  subscribe: bridge.subscribe(key),
23
29
  getSnapshot: () => bridge.getSnapshot(key),
@@ -35,7 +41,7 @@ export class AppsSdkAdaptor {
35
41
  openExternal(href, options = {}) {
36
42
  window.openai.openExternal({ href, ...options });
37
43
  }
38
- setWidgetState = (stateOrUpdater) => {
44
+ setViewState = (stateOrUpdater) => {
39
45
  const modelContent = typeof stateOrUpdater === "function"
40
46
  ? stateOrUpdater(window.openai.widgetState?.modelContent ?? null)
41
47
  : stateOrUpdater;
@@ -45,22 +51,34 @@ export class AppsSdkAdaptor {
45
51
  modelContent,
46
52
  });
47
53
  };
48
- uploadFile = (file) => {
49
- return window.openai.uploadFile(file).then(async (metadata) => {
50
- const state = window.openai.widgetState
51
- ? { ...window.openai.widgetState }
52
- : { modelContent: {}, privateContent: {} };
53
- if (!state.imageIds) {
54
- state.imageIds = [];
55
- }
56
- state.imageIds.push(metadata.fileId);
57
- await window.openai.setWidgetState(state);
58
- return metadata;
59
- });
54
+ uploadFile = async (file, options) => {
55
+ const metadata = await window.openai.uploadFile(file, options);
56
+ await this.trackFileIds(metadata.fileId);
57
+ return metadata;
60
58
  };
61
59
  getFileDownloadUrl = (file) => {
62
60
  return window.openai.getFileDownloadUrl(file);
63
61
  };
62
+ selectFiles = async () => {
63
+ if (!window.openai.selectFiles) {
64
+ throw new Error("selectFiles is not supported by the current host version.");
65
+ }
66
+ const files = await window.openai.selectFiles();
67
+ if (files.length > 0) {
68
+ await this.trackFileIds(...files.map((f) => f.fileId));
69
+ }
70
+ return files;
71
+ };
72
+ async trackFileIds(...fileIds) {
73
+ const state = window.openai.widgetState
74
+ ? { ...window.openai.widgetState }
75
+ : { modelContent: {}, privateContent: {} };
76
+ if (!state.imageIds) {
77
+ state.imageIds = [];
78
+ }
79
+ state.imageIds.push(...fileIds);
80
+ await window.openai.setWidgetState(state);
81
+ }
64
82
  openModal(options) {
65
83
  return window.openai.requestModal(options);
66
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adaptor.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/adaptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adaptor.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/adaptor.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { UnknownObject } from "../../types.js";
2
- import type { CallToolArgs, CallToolResponse, FileMetadata, RequestModalOptions } from "../types.js";
2
+ import type { CallToolArgs, CallToolResponse, FileMetadata, RequestModalOptions, UploadFileOptions } from "../types.js";
3
3
  type DisplayMode = "pip" | "inline" | "fullscreen" | "modal";
4
4
  type RequestDisplayMode = Exclude<DisplayMode, "modal">;
5
5
  export type AppsSdkWidgetState = {
@@ -71,11 +71,16 @@ export type AppsSdkMethods<WS extends AppsSdkWidgetState = AppsSdkWidgetState> =
71
71
  * This ensures the modal is correctly displayed and not limited to the widget's area.
72
72
  */
73
73
  requestModal: (args: RequestModalOptions) => Promise<void>;
74
- /** Uploads a new file to the host */
75
- uploadFile: (file: File) => Promise<FileMetadata>;
74
+ /** Uploads a new file to the host. Pass `{ library: true }` to also save to the user's ChatGPT file library. */
75
+ uploadFile: (file: File, options?: UploadFileOptions) => Promise<FileMetadata>;
76
76
  /**
77
- * Downloads a file from the host that was previously uploaded.
78
- * Only files uploaded by the same connector instance can be downloaded.
77
+ * Opens ChatGPT's file library picker and returns app-authorized files.
78
+ * Feature-detect before using: this method may not be available on all host versions.
79
+ */
80
+ selectFiles?: () => Promise<FileMetadata[]>;
81
+ /**
82
+ * Downloads a file from the host. Works for files uploaded by the widget,
83
+ * files selected via selectFiles(), or files provided via tool/file params.
79
84
  */
80
85
  getFileDownloadUrl: (file: FileMetadata) => Promise<{
81
86
  downloadUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/types.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAC/D,MAAM,OAAO,iBAAkB,SAAQ,WAErC;IACkB,IAAI,GAAG,wBAAwB,CAAC;CACnD;AA2FD,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,OAAO,eAAgB,SAAQ,WAEnC;IACkB,IAAI,GAAG,sBAAsB,CAAC;CACjD"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/types.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAC/D,MAAM,OAAO,iBAAkB,SAAQ,WAErC;IACkB,IAAI,GAAG,wBAAwB,CAAC;CACnD;AAoGD,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,OAAO,eAAgB,SAAQ,WAEnC;IACkB,IAAI,GAAG,sBAAsB,CAAC;CACjD"}
@@ -1,11 +1,12 @@
1
- import type { Adaptor, CallToolResponse, HostContext, HostContextStore, OpenExternalOptions, RequestDisplayMode, RequestModalOptions, SetWidgetStateAction } from "../types.js";
1
+ import type { Adaptor, CallToolResponse, HostContext, HostContextStore, OpenExternalOptions, RequestDisplayMode, RequestModalOptions, SetViewStateAction } from "../types.js";
2
2
  export declare class McpAppAdaptor implements Adaptor {
3
3
  private static instance;
4
4
  private stores;
5
- private _widgetState;
6
- private widgetStateListeners;
7
5
  private _viewState;
8
- private viewListeners;
6
+ private viewStateListeners;
7
+ private _viewUUID;
8
+ private _displayState;
9
+ private displayListeners;
9
10
  private constructor();
10
11
  static getInstance(): McpAppAdaptor;
11
12
  static resetInstance(): void;
@@ -18,7 +19,7 @@ export declare class McpAppAdaptor implements Adaptor {
18
19
  sendFollowUpMessage: (prompt: string) => Promise<void>;
19
20
  openExternal(href: string, options?: OpenExternalOptions): void;
20
21
  private initializeStores;
21
- setWidgetState: (stateOrUpdater: SetWidgetStateAction) => Promise<void>;
22
+ setViewState: (stateOrUpdater: SetViewStateAction) => Promise<void>;
22
23
  /**
23
24
  * @throws File upload is not supported in MCP App.
24
25
  */
@@ -31,8 +32,17 @@ export declare class McpAppAdaptor implements Adaptor {
31
32
  getFileDownloadUrl(): Promise<{
32
33
  downloadUrl: string;
33
34
  }>;
35
+ /**
36
+ * @throws File selection is not supported in MCP App.
37
+ */
38
+ selectFiles(): Promise<{
39
+ fileId: string;
40
+ }[]>;
34
41
  openModal(options: RequestModalOptions): void;
35
42
  closeModal(): void;
36
43
  setOpenInAppUrl(_href: string): Promise<void>;
44
+ private subscribeToViewUUID;
45
+ private restoreFromLocalStorage;
46
+ private persistToLocalStorage;
37
47
  private createHostContextStore;
38
48
  }
@@ -1,16 +1,30 @@
1
1
  import { dequal } from "dequal/lite";
2
2
  import { McpAppBridge } from "./bridge.js";
3
+ const STORAGE_PREFIX = "sb:";
4
+ const MAX_STORAGE_ENTRIES = 200;
5
+ function findStorageKey(viewUUID) {
6
+ const suffix = `:${viewUUID}`;
7
+ for (let i = 0; i < localStorage.length; i++) {
8
+ const key = localStorage.key(i);
9
+ if (key?.startsWith(STORAGE_PREFIX) && key.endsWith(suffix)) {
10
+ return key;
11
+ }
12
+ }
13
+ return undefined;
14
+ }
3
15
  export class McpAppAdaptor {
4
16
  static instance = null;
5
17
  stores;
6
- _widgetState = null;
7
- widgetStateListeners = new Set();
8
- _viewState = {
18
+ _viewState = null;
19
+ viewStateListeners = new Set();
20
+ _viewUUID = null;
21
+ _displayState = {
9
22
  mode: "inline",
10
23
  };
11
- viewListeners = new Set();
24
+ displayListeners = new Set();
12
25
  constructor() {
13
26
  this.stores = this.initializeStores();
27
+ this.subscribeToViewUUID();
14
28
  }
15
29
  static getInstance() {
16
30
  if (!McpAppAdaptor.instance) {
@@ -96,36 +110,37 @@ export class McpAppAdaptor {
96
110
  toolInput: this.createHostContextStore(["toolInput"], ({ toolInput }) => toolInput ?? null),
97
111
  toolOutput: this.createHostContextStore(["toolResult"], ({ toolResult }) => toolResult?.structuredContent ?? null),
98
112
  toolResponseMetadata: this.createHostContextStore(["toolResult"], ({ toolResult }) => toolResult?._meta ?? null),
99
- view: {
113
+ display: {
100
114
  subscribe: (onChange) => {
101
- this.viewListeners.add(onChange);
115
+ this.displayListeners.add(onChange);
102
116
  return () => {
103
- this.viewListeners.delete(onChange);
117
+ this.displayListeners.delete(onChange);
104
118
  };
105
119
  },
106
- getSnapshot: () => this._viewState,
120
+ getSnapshot: () => this._displayState,
107
121
  },
108
- widgetState: {
122
+ viewState: {
109
123
  subscribe: (onChange) => {
110
- this.widgetStateListeners.add(onChange);
124
+ this.viewStateListeners.add(onChange);
111
125
  return () => {
112
- this.widgetStateListeners.delete(onChange);
126
+ this.viewStateListeners.delete(onChange);
113
127
  };
114
128
  },
115
- getSnapshot: () => this._widgetState,
129
+ getSnapshot: () => this._viewState,
116
130
  },
117
131
  };
118
132
  }
119
- setWidgetState = async (stateOrUpdater) => {
133
+ setViewState = async (stateOrUpdater) => {
120
134
  const newState = typeof stateOrUpdater === "function"
121
- ? stateOrUpdater(this._widgetState)
135
+ ? stateOrUpdater(this._viewState)
122
136
  : stateOrUpdater;
123
137
  // must happen before the async bridge call to ensure the state is updated immediately for the UI,
124
- // otherwise successive calls to setWidgetState may have stale state
125
- this._widgetState = newState;
126
- this.widgetStateListeners.forEach((listener) => {
138
+ // otherwise successive calls to setViewState may have stale state
139
+ this._viewState = newState;
140
+ this.viewStateListeners.forEach((listener) => {
127
141
  listener();
128
142
  });
143
+ this.persistToLocalStorage(newState);
129
144
  try {
130
145
  const app = await McpAppBridge.getInstance().getApp();
131
146
  await app.updateModelContext({
@@ -134,7 +149,7 @@ export class McpAppAdaptor {
134
149
  });
135
150
  }
136
151
  catch (error) {
137
- console.error("Failed to update widget state in MCP App.", error);
152
+ console.error("Failed to update view state in MCP App.", error);
138
153
  }
139
154
  };
140
155
  /**
@@ -149,21 +164,90 @@ export class McpAppAdaptor {
149
164
  getFileDownloadUrl() {
150
165
  throw new Error("File download is not supported in MCP App.");
151
166
  }
167
+ /**
168
+ * @throws File selection is not supported in MCP App.
169
+ */
170
+ selectFiles() {
171
+ throw new Error("File selection is not supported in MCP App.");
172
+ }
152
173
  openModal(options) {
153
- this._viewState = { mode: "modal", params: options.params };
154
- this.viewListeners.forEach((listener) => {
174
+ this._displayState = { mode: "modal", params: options.params };
175
+ this.displayListeners.forEach((listener) => {
155
176
  listener();
156
177
  });
157
178
  }
158
179
  closeModal() {
159
- this._viewState = { mode: "inline" };
160
- this.viewListeners.forEach((listener) => {
180
+ this._displayState = { mode: "inline" };
181
+ this.displayListeners.forEach((listener) => {
161
182
  listener();
162
183
  });
163
184
  }
164
185
  setOpenInAppUrl(_href) {
165
186
  throw new Error("setOpenInAppUrl is not implemented in MCP App.");
166
187
  }
188
+ subscribeToViewUUID() {
189
+ const bridge = McpAppBridge.getInstance();
190
+ bridge.subscribe("toolResult")(() => {
191
+ const toolResult = bridge.getSnapshot("toolResult");
192
+ const viewUUID = toolResult?._meta?.viewUUID;
193
+ if (viewUUID && viewUUID !== this._viewUUID) {
194
+ this._viewUUID = viewUUID;
195
+ this.restoreFromLocalStorage(viewUUID);
196
+ }
197
+ });
198
+ }
199
+ // localStorage keys: sb:{unix_ms}:{viewUUID}
200
+ // Timestamp is updated on every write (LRU); eviction drops the least recently used entries.
201
+ restoreFromLocalStorage(viewUUID) {
202
+ try {
203
+ const existingKey = findStorageKey(viewUUID);
204
+ if (existingKey) {
205
+ const stored = localStorage.getItem(existingKey);
206
+ if (stored !== null) {
207
+ this._viewState = JSON.parse(stored);
208
+ this.viewStateListeners.forEach((listener) => {
209
+ listener();
210
+ });
211
+ }
212
+ }
213
+ }
214
+ catch (err) {
215
+ console.error(err);
216
+ }
217
+ }
218
+ persistToLocalStorage(state) {
219
+ if (!this._viewUUID || state === null) {
220
+ return;
221
+ }
222
+ try {
223
+ // Remove old key for this view, write with fresh timestamp (LRU)
224
+ const oldKey = findStorageKey(this._viewUUID);
225
+ if (oldKey) {
226
+ localStorage.removeItem(oldKey);
227
+ }
228
+ const newKey = `${STORAGE_PREFIX}${Date.now()}:${this._viewUUID}`;
229
+ localStorage.setItem(newKey, JSON.stringify(state));
230
+ // lru cleanup
231
+ const keys = [];
232
+ for (let i = 0; i < localStorage.length; i++) {
233
+ const key = localStorage.key(i);
234
+ if (key?.startsWith(STORAGE_PREFIX)) {
235
+ keys.push(key);
236
+ }
237
+ }
238
+ if (keys.length <= MAX_STORAGE_ENTRIES) {
239
+ return;
240
+ }
241
+ keys.sort();
242
+ const toRemove = keys.slice(0, keys.length - MAX_STORAGE_ENTRIES);
243
+ for (const key of toRemove) {
244
+ localStorage.removeItem(key);
245
+ }
246
+ }
247
+ catch (err) {
248
+ console.error(err);
249
+ }
250
+ }
167
251
  createHostContextStore(keys, computeSnapshot) {
168
252
  const bridge = McpAppBridge.getInstance();
169
253
  let cachedValue;
@@ -1 +1 @@
1
- {"version":3,"file":"adaptor.js","sourceRoot":"","sources":["../../../../src/web/bridges/mcp-app/adaptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adaptor.js","sourceRoot":"","sources":["../../../../src/web/bridges/mcp-app/adaptor.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
2
  import type { useSyncExternalStore } from "react";
3
- import type { WidgetHostType } from "../../server/index.js";
3
+ import type { ViewHostType } from "../../server/index.js";
4
4
  export type SkybridgeProperties = {
5
- hostType: WidgetHostType;
5
+ hostType: ViewHostType;
6
6
  serverUrl: string;
7
7
  };
8
8
  declare global {
@@ -50,11 +50,11 @@ export interface HostContext {
50
50
  toolInput: Record<string, unknown> | null;
51
51
  toolOutput: Record<string, unknown> | null;
52
52
  toolResponseMetadata: Record<string, unknown> | null;
53
- view: {
53
+ display: {
54
54
  mode: DisplayMode;
55
55
  params?: Record<string, unknown>;
56
56
  };
57
- widgetState: Record<string, unknown> | null;
57
+ viewState: Record<string, unknown> | null;
58
58
  }
59
59
  export type Subscribe = Parameters<typeof useSyncExternalStore>[0];
60
60
  export interface Bridge<Context> {
@@ -66,14 +66,20 @@ export type HostContextStore<K extends keyof HostContext> = {
66
66
  subscribe: Subscribe;
67
67
  getSnapshot: () => HostContext[K];
68
68
  };
69
- export type WidgetState = Record<string, unknown>;
70
- export type SetWidgetStateAction = WidgetState | ((prevState: WidgetState | null) => WidgetState);
69
+ export type ViewState = Record<string, unknown>;
70
+ export type SetViewStateAction = ViewState | ((prevState: ViewState | null) => ViewState);
71
71
  export type FileMetadata = {
72
72
  fileId: string;
73
+ fileName?: string;
74
+ mimeType?: string;
75
+ };
76
+ export type UploadFileOptions = {
77
+ library?: boolean;
73
78
  };
74
79
  export type RequestModalOptions = {
75
80
  title?: string;
76
81
  params?: Record<string, unknown>;
82
+ template?: string;
77
83
  anchor?: {
78
84
  top?: number;
79
85
  left?: number;
@@ -92,11 +98,12 @@ export interface Adaptor {
92
98
  }>;
93
99
  sendFollowUpMessage(prompt: string): Promise<void>;
94
100
  openExternal(href: string, options?: OpenExternalOptions): void;
95
- setWidgetState(stateOrUpdater: SetWidgetStateAction): Promise<void>;
96
- uploadFile(file: File): Promise<FileMetadata>;
101
+ setViewState(stateOrUpdater: SetViewStateAction): Promise<void>;
102
+ uploadFile(file: File, options?: UploadFileOptions): Promise<FileMetadata>;
97
103
  getFileDownloadUrl(file: FileMetadata): Promise<{
98
104
  downloadUrl: string;
99
105
  }>;
106
+ selectFiles(): Promise<FileMetadata[]>;
100
107
  openModal(options: RequestModalOptions): void;
101
108
  setOpenInAppUrl(href: string): Promise<void>;
102
109
  }
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useSyncExternalStore } from "react";
3
- import { McpAppAdaptor } from "../bridges";
3
+ import { McpAppAdaptor } from "../bridges/index.js";
4
4
  const modalStyles = `
5
5
  .sb-modal-backdrop {
6
6
  position: fixed;
@@ -21,7 +21,7 @@ const modalStyles = `
21
21
  `;
22
22
  export function ModalProvider({ children }) {
23
23
  const adaptor = McpAppAdaptor.getInstance();
24
- const { mode } = useSyncExternalStore(adaptor.getHostContextStore("view").subscribe, adaptor.getHostContextStore("view").getSnapshot);
24
+ const { mode } = useSyncExternalStore(adaptor.getHostContextStore("display").subscribe, adaptor.getHostContextStore("display").getSnapshot);
25
25
  const isOpen = mode === "modal";
26
26
  const handleBackdropClick = (e) => {
27
27
  if (e.target === e.currentTarget) {
@@ -1 +1 @@
1
- {"version":3,"file":"modal-provider.js","sourceRoot":"","sources":["../../../src/web/components/modal-provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiBnB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAA2B;IACjE,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAE5C,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAoB,CACnC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,SAAS,EAC7C,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,WAAW,CAChD,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;IAEhC,MAAM,mBAAmB,GAAG,CAAC,CAAmB,EAAE,EAAE;QAClD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;YACjC,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACvB,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtB,OAAO,CACL,8BACE,0BAAQ,WAAW,GAAS,EAC3B,MAAM,IAAI,CAET,cACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAE,mBAAmB,GAC5B,CACH,EACD,cAAK,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,YACtD,QAAQ,GACL,IACL,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"modal-provider.js","sourceRoot":"","sources":["../../../src/web/components/modal-provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiBnB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAA2B;IACjE,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAE5C,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAoB,CACnC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,SAAS,EAChD,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,WAAW,CACnD,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;IAEhC,MAAM,mBAAmB,GAAG,CAAC,CAAmB,EAAE,EAAE;QAClD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;YACjC,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACvB,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtB,OAAO,CACL,8BACE,0BAAQ,WAAW,GAAS,EAC3B,MAAM,IAAI,CAET,cACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAE,mBAAmB,GAC5B,CACH,EACD,cAAK,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,YACtD,QAAQ,GACL,IACL,CACJ,CAAC;AACJ,CAAC"}
@@ -1,6 +1,7 @@
1
+ import { dequal } from "dequal/lite";
1
2
  import { create } from "zustand";
2
3
  import { getAdaptor } from "./bridges/index.js";
3
- import { getInitialState, injectWidgetContext, serializeState, } from "./helpers/state.js";
4
+ import { filterViewContext, getInitialState, injectViewContext, serializeState, } from "./helpers/state.js";
4
5
  export function createStore(storeCreator, defaultState) {
5
6
  const initialState = getInitialState(defaultState);
6
7
  const store = create()((...args) => {
@@ -10,12 +11,25 @@ export function createStore(storeCreator, defaultState) {
10
11
  }
11
12
  return baseStore;
12
13
  });
14
+ // Bidirectional sync between the Zustand store and the adaptor's viewState.
15
+ // Store changes persist to the host; external viewState changes rehydrate the store.
13
16
  store.subscribe((state) => {
14
17
  const serializedState = serializeState(state);
15
18
  if (serializedState !== null && serializedState !== undefined) {
16
- const stateToPersist = injectWidgetContext(serializedState);
19
+ const stateToPersist = injectViewContext(serializedState);
17
20
  if (stateToPersist !== null) {
18
- getAdaptor().setWidgetState(stateToPersist);
21
+ getAdaptor().setViewState(stateToPersist);
22
+ }
23
+ }
24
+ });
25
+ const viewStateStore = getAdaptor().getHostContextStore("viewState");
26
+ viewStateStore.subscribe(() => {
27
+ const externalState = viewStateStore.getSnapshot();
28
+ if (externalState !== null) {
29
+ const filtered = filterViewContext(externalState);
30
+ const current = serializeState(store.getState());
31
+ if (!dequal(filtered, current)) {
32
+ store.setState(filtered);
19
33
  }
20
34
  }
21
35
  });
@@ -1 +1 @@
1
- {"version":3,"file":"create-store.js","sourceRoot":"","sources":["../../src/web/create-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,MAAM,UAAU,WAAW,CACzB,YAAgD,EAChD,YAAoC;IAEpC,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,MAAM,EAAS,CAC3B,CAAC,GAAG,IAAoD,EAAE,EAAE;QAC1D,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;QAC3C,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CACF,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,CAAC,KAAY,EAAE,EAAE;QAC/B,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,cAAc,GAAG,mBAAmB,CAAC,eAAwB,CAAC,CAAC;YACrE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,UAAU,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"create-store.js","sourceRoot":"","sources":["../../src/web/create-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,MAAM,UAAU,WAAW,CACzB,YAAgD,EAChD,YAAoC;IAEpC,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,MAAM,EAAS,CAC3B,CAAC,GAAG,IAAoD,EAAE,EAAE;QAC1D,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;QAC3C,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,qFAAqF;IACrF,KAAK,CAAC,SAAS,CAAC,CAAC,KAAY,EAAE,EAAE;QAC/B,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,cAAc,GAAG,iBAAiB,CAAC,eAAwB,CAAC,CAAC;YACnE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,UAAU,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrE,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE;QAC5B,MAAM,aAAa,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAU,CAAC;YAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAU,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -3,7 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi, } from "vitest";
3
3
  import { McpAppAdaptor } from "./bridges/mcp-app/adaptor.js";
4
4
  import { McpAppBridge } from "./bridges/mcp-app/bridge.js";
5
5
  import { createStore } from "./create-store.js";
6
- import { WIDGET_CONTEXT_KEY } from "./data-llm.js";
6
+ import { VIEW_CONTEXT_KEY } from "./data-llm.js";
7
7
  import { getMcpAppHostPostMessageMock, MockResizeObserver, } from "./hooks/test/utils.js";
8
8
  describe("createStore", () => {
9
9
  afterEach(() => {
@@ -62,18 +62,18 @@ describe("createStore", () => {
62
62
  privateContent: {},
63
63
  });
64
64
  });
65
- it("should filter widget context from initial state", () => {
65
+ it("should filter view context from initial state", () => {
66
66
  const storeCreator = () => ({
67
67
  count: 0,
68
68
  });
69
69
  const windowState = {
70
70
  count: 5,
71
- [WIDGET_CONTEXT_KEY]: "context-value",
71
+ [VIEW_CONTEXT_KEY]: "context-value",
72
72
  };
73
73
  OpenaiMock.widgetState = { modelContent: windowState };
74
74
  const store = createStore(storeCreator);
75
75
  expect(store.getState()).toEqual({ count: 5 });
76
- expect(store.getState()[WIDGET_CONTEXT_KEY]).toBeUndefined();
76
+ expect(store.getState()[VIEW_CONTEXT_KEY]).toBeUndefined();
77
77
  });
78
78
  });
79
79
  describe("mcp-app mode", () => {
@@ -86,12 +86,10 @@ describe("createStore", () => {
86
86
  McpAppBridge.resetInstance();
87
87
  McpAppAdaptor.resetInstance();
88
88
  });
89
- it("should initialize with null widgetState", () => {
89
+ it("should initialize with null viewState", () => {
90
90
  const adaptor = McpAppAdaptor.getInstance();
91
- const widgetState = adaptor
92
- .getHostContextStore("widgetState")
93
- .getSnapshot();
94
- expect(widgetState).toBeNull();
91
+ const viewState = adaptor.getHostContextStore("viewState").getSnapshot();
92
+ expect(viewState).toBeNull();
95
93
  });
96
94
  it("should create a store with default state when no persisted state exists", () => {
97
95
  const storeCreator = () => ({
@@ -100,9 +98,9 @@ describe("createStore", () => {
100
98
  const store = createStore(storeCreator);
101
99
  expect(store.getState()).toEqual({ count: 0 });
102
100
  });
103
- it("should update in-memory state via setWidgetState", async () => {
101
+ it("should update in-memory state via setViewState", async () => {
104
102
  const adaptor = McpAppAdaptor.getInstance();
105
- vi.spyOn(adaptor, "setWidgetState").mockResolvedValue(undefined);
103
+ vi.spyOn(adaptor, "setViewState").mockResolvedValue(undefined);
106
104
  const storeCreator = (set) => ({
107
105
  count: 0,
108
106
  increment: () => set((state) => ({ count: state.count + 1 })),
@@ -110,19 +108,19 @@ describe("createStore", () => {
110
108
  const store = createStore(storeCreator);
111
109
  store.getState().increment();
112
110
  await vi.waitFor(() => {
113
- expect(adaptor.setWidgetState).toHaveBeenCalledWith({ count: 1 });
111
+ expect(adaptor.setViewState).toHaveBeenCalledWith({ count: 1 });
114
112
  });
115
113
  });
116
- it("should notify listeners when widget state changes", async () => {
114
+ it("should notify listeners when view state changes", async () => {
117
115
  const postMessageMock = getMcpAppHostPostMessageMock();
118
116
  vi.stubGlobal("parent", { postMessage: postMessageMock });
119
117
  const adaptor = McpAppAdaptor.getInstance();
120
118
  const listener = vi.fn();
121
- adaptor.getHostContextStore("widgetState").subscribe(listener);
122
- await adaptor.setWidgetState({ count: 42 });
119
+ adaptor.getHostContextStore("viewState").subscribe(listener);
120
+ await adaptor.setViewState({ count: 42 });
123
121
  expect(postMessageMock).toHaveBeenCalledWith(expect.objectContaining({ method: "ui/update-model-context" }), "*");
124
122
  expect(listener).toHaveBeenCalled();
125
- expect(adaptor.getHostContextStore("widgetState").getSnapshot()).toEqual({
123
+ expect(adaptor.getHostContextStore("viewState").getSnapshot()).toEqual({
126
124
  count: 42,
127
125
  });
128
126
  });