skybridge 0.0.0-dev.6b6417d → 0.0.0-dev.6bfa0e5

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 (165) hide show
  1. package/dist/src/server/devtoolsStaticServer.d.ts +15 -0
  2. package/dist/src/server/devtoolsStaticServer.js +38 -0
  3. package/dist/src/server/devtoolsStaticServer.js.map +1 -0
  4. package/dist/src/server/index.d.ts +3 -2
  5. package/dist/src/server/index.js +1 -0
  6. package/dist/src/server/index.js.map +1 -1
  7. package/dist/src/server/inferUtilityTypes.d.ts +10 -0
  8. package/dist/src/server/server.d.ts +43 -17
  9. package/dist/src/server/server.js +54 -34
  10. package/dist/src/server/server.js.map +1 -1
  11. package/dist/src/server/templateHelper.d.ts +3 -0
  12. package/dist/src/server/templateHelper.js +5 -4
  13. package/dist/src/server/templateHelper.js.map +1 -1
  14. package/dist/src/server/templates/development.hbs +3 -2
  15. package/dist/src/server/templates/production.hbs +1 -0
  16. package/dist/src/server/widgetsDevServer.js +3 -3
  17. package/dist/src/server/widgetsDevServer.js.map +1 -1
  18. package/dist/src/test/utils.d.ts +54 -8
  19. package/dist/src/test/utils.js +86 -8
  20. package/dist/src/test/utils.js.map +1 -1
  21. package/dist/src/test/widget.test.js +83 -27
  22. package/dist/src/test/widget.test.js.map +1 -1
  23. package/dist/src/web/bridges/apps-sdk-adapter.d.ts +4 -0
  24. package/dist/src/web/bridges/apps-sdk-adapter.js +10 -0
  25. package/dist/src/web/bridges/apps-sdk-adapter.js.map +1 -0
  26. package/dist/src/web/bridges/apps-sdk-bridge.d.ts +8 -0
  27. package/dist/src/web/bridges/apps-sdk-bridge.js +41 -0
  28. package/dist/src/web/bridges/apps-sdk-bridge.js.map +1 -0
  29. package/dist/src/web/bridges/get-bridge-methods.d.ts +2 -0
  30. package/dist/src/web/bridges/get-bridge-methods.js +8 -0
  31. package/dist/src/web/bridges/get-bridge-methods.js.map +1 -0
  32. package/dist/src/web/bridges/hooks/types.d.ts +6 -0
  33. package/dist/src/web/bridges/hooks/types.js +2 -0
  34. package/dist/src/web/bridges/hooks/types.js.map +1 -0
  35. package/dist/src/web/bridges/hooks/use-apps-sdk-bridge.d.ts +2 -0
  36. package/dist/src/web/bridges/hooks/use-apps-sdk-bridge.js +7 -0
  37. package/dist/src/web/bridges/hooks/use-apps-sdk-bridge.js.map +1 -0
  38. package/dist/src/web/bridges/hooks/use-bridge.d.ts +2 -0
  39. package/dist/src/web/bridges/hooks/use-bridge.js +19 -0
  40. package/dist/src/web/bridges/hooks/use-bridge.js.map +1 -0
  41. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.d.ts +5 -0
  42. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.js +7 -0
  43. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.js.map +1 -0
  44. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.test.js +50 -0
  45. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.test.js.map +1 -0
  46. package/dist/src/web/bridges/index.d.ts +4 -0
  47. package/dist/src/web/bridges/index.js +5 -0
  48. package/dist/src/web/bridges/index.js.map +1 -0
  49. package/dist/src/web/bridges/mcp-app-adapter.d.ts +6 -0
  50. package/dist/src/web/bridges/mcp-app-adapter.js +80 -0
  51. package/dist/src/web/bridges/mcp-app-adapter.js.map +1 -0
  52. package/dist/src/web/bridges/mcp-app-bridge.d.ts +37 -0
  53. package/dist/src/web/bridges/mcp-app-bridge.js +162 -0
  54. package/dist/src/web/bridges/mcp-app-bridge.js.map +1 -0
  55. package/dist/src/web/bridges/types.d.ts +46 -0
  56. package/dist/src/web/bridges/types.js +2 -0
  57. package/dist/src/web/bridges/types.js.map +1 -0
  58. package/dist/src/web/create-store.d.ts +3 -0
  59. package/dist/src/web/create-store.js +25 -0
  60. package/dist/src/web/create-store.js.map +1 -0
  61. package/dist/src/web/create-store.test.js +70 -0
  62. package/dist/src/web/create-store.test.js.map +1 -0
  63. package/dist/src/web/data-llm.d.ts +1 -0
  64. package/dist/src/web/data-llm.js +8 -5
  65. package/dist/src/web/data-llm.js.map +1 -1
  66. package/dist/src/web/data-llm.test.js.map +1 -1
  67. package/dist/src/web/generate-helpers.d.ts +9 -7
  68. package/dist/src/web/generate-helpers.js +4 -2
  69. package/dist/src/web/generate-helpers.js.map +1 -1
  70. package/dist/src/web/generate-helpers.test-d.js +59 -3
  71. package/dist/src/web/generate-helpers.test-d.js.map +1 -1
  72. package/dist/src/web/generate-helpers.test.js +1 -1
  73. package/dist/src/web/generate-helpers.test.js.map +1 -1
  74. package/dist/src/web/helpers/state.d.ts +7 -0
  75. package/dist/src/web/helpers/state.js +40 -0
  76. package/dist/src/web/helpers/state.js.map +1 -0
  77. package/dist/src/web/helpers/state.test.js +53 -0
  78. package/dist/src/web/helpers/state.test.js.map +1 -0
  79. package/dist/src/web/hooks/index.d.ts +4 -5
  80. package/dist/src/web/hooks/index.js +3 -4
  81. package/dist/src/web/hooks/index.js.map +1 -1
  82. package/dist/src/web/hooks/test/utils.d.ts +10 -0
  83. package/dist/src/web/hooks/test/utils.js +39 -0
  84. package/dist/src/web/hooks/test/utils.js.map +1 -0
  85. package/dist/src/web/hooks/use-call-tool.d.ts +1 -1
  86. package/dist/src/web/hooks/use-call-tool.js +12 -4
  87. package/dist/src/web/hooks/use-call-tool.js.map +1 -1
  88. package/dist/src/web/hooks/use-call-tool.test-d.js +1 -1
  89. package/dist/src/web/hooks/use-call-tool.test-d.js.map +1 -1
  90. package/dist/src/web/hooks/use-call-tool.test.js +35 -15
  91. package/dist/src/web/hooks/use-call-tool.test.js.map +1 -1
  92. package/dist/src/web/hooks/use-display-mode.d.ts +2 -2
  93. package/dist/src/web/hooks/use-display-mode.js +6 -3
  94. package/dist/src/web/hooks/use-display-mode.js.map +1 -1
  95. package/dist/src/web/hooks/use-display-mode.test.js +3 -2
  96. package/dist/src/web/hooks/use-display-mode.test.js.map +1 -1
  97. package/dist/src/web/hooks/use-files.test.js +1 -1
  98. package/dist/src/web/hooks/use-files.test.js.map +1 -1
  99. package/dist/src/web/hooks/use-layout.d.ts +22 -0
  100. package/dist/src/web/hooks/use-layout.js +23 -0
  101. package/dist/src/web/hooks/use-layout.js.map +1 -0
  102. package/dist/src/web/hooks/use-layout.test.d.ts +1 -0
  103. package/dist/src/web/hooks/use-layout.test.js +46 -0
  104. package/dist/src/web/hooks/use-layout.test.js.map +1 -0
  105. package/dist/src/web/hooks/use-open-external.test.js +2 -2
  106. package/dist/src/web/hooks/use-open-external.test.js.map +1 -1
  107. package/dist/src/web/hooks/use-openai-global.d.ts +3 -2
  108. package/dist/src/web/hooks/use-openai-global.js +3 -20
  109. package/dist/src/web/hooks/use-openai-global.js.map +1 -1
  110. package/dist/src/web/hooks/use-request-modal.d.ts +6 -3
  111. package/dist/src/web/hooks/use-request-modal.js +6 -1
  112. package/dist/src/web/hooks/use-request-modal.js.map +1 -1
  113. package/dist/src/web/hooks/use-request-modal.test.js +37 -4
  114. package/dist/src/web/hooks/use-request-modal.test.js.map +1 -1
  115. package/dist/src/web/hooks/use-send-follow-up-message.js +2 -7
  116. package/dist/src/web/hooks/use-send-follow-up-message.js.map +1 -1
  117. package/dist/src/web/hooks/use-tool-info.d.ts +13 -2
  118. package/dist/src/web/hooks/use-tool-info.js +15 -11
  119. package/dist/src/web/hooks/use-tool-info.js.map +1 -1
  120. package/dist/src/web/hooks/use-tool-info.test-d.js +40 -5
  121. package/dist/src/web/hooks/use-tool-info.test-d.js.map +1 -1
  122. package/dist/src/web/hooks/use-tool-info.test.js +118 -48
  123. package/dist/src/web/hooks/use-tool-info.test.js.map +1 -1
  124. package/dist/src/web/hooks/use-user.d.ts +18 -0
  125. package/dist/src/web/hooks/use-user.js +19 -0
  126. package/dist/src/web/hooks/use-user.js.map +1 -0
  127. package/dist/src/web/hooks/use-user.test.d.ts +1 -0
  128. package/dist/src/web/hooks/use-user.test.js +44 -0
  129. package/dist/src/web/hooks/use-user.test.js.map +1 -0
  130. package/dist/src/web/hooks/use-widget-state.js +5 -27
  131. package/dist/src/web/hooks/use-widget-state.js.map +1 -1
  132. package/dist/src/web/hooks/use-widget-state.test.js +3 -2
  133. package/dist/src/web/hooks/use-widget-state.test.js.map +1 -1
  134. package/dist/src/web/index.d.ts +5 -3
  135. package/dist/src/web/index.js +5 -3
  136. package/dist/src/web/index.js.map +1 -1
  137. package/dist/src/web/plugin/plugin.js +10 -4
  138. package/dist/src/web/plugin/plugin.js.map +1 -1
  139. package/dist/src/web/plugin/transform-data-llm.js +6 -3
  140. package/dist/src/web/plugin/transform-data-llm.js.map +1 -1
  141. package/dist/src/web/proxy.js +6 -1
  142. package/dist/src/web/proxy.js.map +1 -1
  143. package/dist/src/web/types.d.ts +30 -14
  144. package/dist/src/web/types.js.map +1 -1
  145. package/package.json +16 -8
  146. package/LICENSE +0 -674
  147. package/README.md +0 -371
  148. package/dist/src/web/hooks/use-locale.d.ts +0 -1
  149. package/dist/src/web/hooks/use-locale.js +0 -5
  150. package/dist/src/web/hooks/use-locale.js.map +0 -1
  151. package/dist/src/web/hooks/use-locale.test.js +0 -21
  152. package/dist/src/web/hooks/use-locale.test.js.map +0 -1
  153. package/dist/src/web/hooks/use-theme.d.ts +0 -1
  154. package/dist/src/web/hooks/use-theme.js +0 -5
  155. package/dist/src/web/hooks/use-theme.js.map +0 -1
  156. package/dist/src/web/hooks/use-theme.test.js +0 -26
  157. package/dist/src/web/hooks/use-theme.test.js.map +0 -1
  158. package/dist/src/web/hooks/use-user-agent.d.ts +0 -1
  159. package/dist/src/web/hooks/use-user-agent.js +0 -5
  160. package/dist/src/web/hooks/use-user-agent.js.map +0 -1
  161. package/dist/src/web/hooks/use-user-agent.test.js +0 -31
  162. package/dist/src/web/hooks/use-user-agent.test.js.map +0 -1
  163. /package/dist/src/web/{hooks/use-locale.test.d.ts → bridges/hooks/use-mcp-app-bridge.test.d.ts} +0 -0
  164. /package/dist/src/web/{hooks/use-theme.test.d.ts → create-store.test.d.ts} +0 -0
  165. /package/dist/src/web/{hooks/use-user-agent.test.d.ts → helpers/state.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"use-display-mode.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-display-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,eAAe,CAAC,aAAa,CAAE,CAAC;IACpD,MAAM,cAAc,GAAG,CAAC,IAAiB,EAAE,EAAE,CAC3C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,WAAW,EAAE,cAAc,CAAU,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"use-display-mode.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-display-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAClD,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,IAAiB,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,EACnD,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,OAAO,CAAC,WAAW,EAAE,cAAc,CAAU,CAAC;AAChD,CAAC"}
@@ -1,6 +1,6 @@
1
+ import { act, renderHook } from "@testing-library/react";
2
+ import { afterEach, beforeEach, describe, expect, it, vi, } from "vitest";
1
3
  import { useDisplayMode } from "./use-display-mode.js";
2
- import { describe, it, expect, vi, beforeEach, afterEach, } from "vitest";
3
- import { renderHook, act } from "@testing-library/react";
4
4
  describe("useDisplayMode", () => {
5
5
  let OpenaiMock;
6
6
  beforeEach(() => {
@@ -9,6 +9,7 @@ describe("useDisplayMode", () => {
9
9
  requestDisplayMode: vi.fn().mockResolvedValue({ mode: "inline" }),
10
10
  };
11
11
  vi.stubGlobal("openai", OpenaiMock);
12
+ vi.stubGlobal("skybridge", { hostType: "apps-sdk" });
12
13
  });
13
14
  afterEach(() => {
14
15
  vi.unstubAllGlobals();
@@ -1 +1 @@
1
- {"version":3,"file":"use-display-mode.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-display-mode.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,QAAQ,EACR,EAAE,EACF,MAAM,EACN,EAAE,EACF,UAAU,EACV,SAAS,GAEV,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAGzD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,UAGH,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG;YACX,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SAClE,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC;QAClC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAEhE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;QACtC,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC5G,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAEtD,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC;YACzD,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"use-display-mode.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-display-mode.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,EAEF,EAAE,GACH,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,UAGH,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG;YACX,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SAClE,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC;QAClC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAEhE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;QACtC,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC5G,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAEtD,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC;YACzD,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
1
  import { renderHook } from "@testing-library/react";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
3
  import { useFiles } from "./use-files.js";
4
4
  describe("useLocale", () => {
5
5
  const OpenaiMock = {
@@ -1 +1 @@
1
- {"version":3,"file":"use-files.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-files.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,MAAM,UAAU,GAAG;QACjB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;KACtB,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAE3C,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"use-files.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-files.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,MAAM,UAAU,GAAG;QACjB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;KACtB,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAE3C,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { SafeArea, Theme } from "../types.js";
2
+ export type LayoutState = {
3
+ theme: Theme;
4
+ maxHeight: number;
5
+ safeArea: SafeArea;
6
+ };
7
+ /**
8
+ * Hook for accessing layout and visual environment information.
9
+ * These values may change on resize or theme toggle.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const { theme, maxHeight, safeArea } = useLayout();
14
+ *
15
+ * // Apply theme-aware styling
16
+ * const backgroundColor = theme === "dark" ? "#1a1a1a" : "#ffffff";
17
+ *
18
+ * // Respect safe area insets
19
+ * const paddingTop = safeArea.insets.top;
20
+ * ```
21
+ */
22
+ export declare function useLayout(): LayoutState;
@@ -0,0 +1,23 @@
1
+ import { useBridge } from "../bridges/index.js";
2
+ /**
3
+ * Hook for accessing layout and visual environment information.
4
+ * These values may change on resize or theme toggle.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const { theme, maxHeight, safeArea } = useLayout();
9
+ *
10
+ * // Apply theme-aware styling
11
+ * const backgroundColor = theme === "dark" ? "#1a1a1a" : "#ffffff";
12
+ *
13
+ * // Respect safe area insets
14
+ * const paddingTop = safeArea.insets.top;
15
+ * ```
16
+ */
17
+ export function useLayout() {
18
+ const theme = useBridge("theme");
19
+ const maxHeight = useBridge("maxHeight");
20
+ const safeArea = useBridge("safeArea");
21
+ return { theme, maxHeight, safeArea };
22
+ }
23
+ //# sourceMappingURL=use-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-layout.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAShD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAEvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ import { renderHook } from "@testing-library/react";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { useLayout } from "./use-layout.js";
4
+ describe("useLayout", () => {
5
+ let OpenaiMock;
6
+ beforeEach(() => {
7
+ OpenaiMock = {
8
+ theme: "light",
9
+ maxHeight: 500,
10
+ safeArea: { insets: { top: 0, bottom: 0, left: 0, right: 0 } },
11
+ };
12
+ vi.stubGlobal("openai", OpenaiMock);
13
+ vi.stubGlobal("skybridge", { hostType: "apps-sdk" });
14
+ });
15
+ afterEach(() => {
16
+ vi.unstubAllGlobals();
17
+ vi.resetAllMocks();
18
+ });
19
+ it("should return theme, maxHeight, and safeArea from window.openai", () => {
20
+ const { result } = renderHook(() => useLayout());
21
+ expect(result.current.theme).toBe("light");
22
+ expect(result.current.maxHeight).toBe(500);
23
+ expect(result.current.safeArea).toEqual({
24
+ insets: { top: 0, bottom: 0, left: 0, right: 0 },
25
+ });
26
+ });
27
+ it("should return dark theme when set to dark", () => {
28
+ OpenaiMock.theme = "dark";
29
+ const { result } = renderHook(() => useLayout());
30
+ expect(result.current.theme).toBe("dark");
31
+ });
32
+ it("should return different maxHeight when set", () => {
33
+ OpenaiMock.maxHeight = 800;
34
+ const { result } = renderHook(() => useLayout());
35
+ expect(result.current.maxHeight).toBe(800);
36
+ });
37
+ it("should return safeArea with insets when set", () => {
38
+ OpenaiMock.safeArea = {
39
+ insets: { top: 44, bottom: 34, left: 0, right: 0 },
40
+ };
41
+ const { result } = renderHook(() => useLayout());
42
+ expect(result.current.safeArea.insets.top).toBe(44);
43
+ expect(result.current.safeArea.insets.bottom).toBe(34);
44
+ });
45
+ });
46
+ //# sourceMappingURL=use-layout.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-layout.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-layout.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { useOpenExternal } from "./use-open-external.js";
2
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
3
1
  import { renderHook } from "@testing-library/react";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { useOpenExternal } from "./use-open-external.js";
4
4
  describe("useOpenExternal", () => {
5
5
  let openExternalMock;
6
6
  beforeEach(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"use-open-external.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-open-external.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,gBAA0C,CAAC;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;YACtB,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG,qBAAqB,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"use-open-external.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-open-external.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,gBAA0C,CAAC;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;YACtB,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG,qBAAqB,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +1,3 @@
1
- import { type OpenAiGlobals } from "../types.js";
2
- export declare function useOpenAiGlobal<K extends keyof OpenAiGlobals>(key: K): OpenAiGlobals[K] | undefined;
1
+ import type { OpenAiProperties } from "../types.js";
2
+ /** @deprecated Use `useAppsSdkBridge` instead */
3
+ export declare function useOpenAiGlobal<K extends keyof OpenAiProperties>(key: K): OpenAiProperties[K];
@@ -1,23 +1,6 @@
1
- import { useSyncExternalStore } from "react";
2
- import { SET_GLOBALS_EVENT_TYPE, SetGlobalsEvent, } from "../types.js";
1
+ import { useAppsSdkBridge } from "../bridges/index.js";
2
+ /** @deprecated Use `useAppsSdkBridge` instead */
3
3
  export function useOpenAiGlobal(key) {
4
- if (!window.openai) {
5
- console.warn("openai is not defined on window. Please make sure to only call this hook inside the OpenAI iFrame skybridge runtime.");
6
- }
7
- return useSyncExternalStore((onChange) => {
8
- const handleSetGlobal = (event) => {
9
- const value = event.detail.globals[key];
10
- if (value === undefined) {
11
- return;
12
- }
13
- onChange();
14
- };
15
- window.addEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal, {
16
- passive: true,
17
- });
18
- return () => {
19
- window.removeEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal);
20
- };
21
- }, () => window.openai?.[key]);
4
+ return useAppsSdkBridge(key);
22
5
  }
23
6
  //# sourceMappingURL=use-openai-global.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-openai-global.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-openai-global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,eAAe,GAEhB,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,eAAe,CAC7B,GAAM;IAEN,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CACV,sHAAsH,CACvH,CAAC;IACJ,CAAC;IAED,OAAO,oBAAoB,CACzB,CAAC,QAAQ,EAAE,EAAE;QACX,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,eAAe,EAAE;YAC/D,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;QACtE,CAAC,CAAC;IACJ,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAC3B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"use-openai-global.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-openai-global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,iDAAiD;AACjD,MAAM,UAAU,eAAe,CAC7B,GAAM;IAEN,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,6 +1,9 @@
1
+ import type { RequestModalOptions } from "../types.js";
1
2
  /**
2
3
  * Triggers a modal containing the widget rendered in display mode "modal"
3
4
  */
4
- export declare function useRequestModal(): (options: {
5
- title: string;
6
- }) => void;
5
+ export declare function useRequestModal(): {
6
+ isOpen: boolean;
7
+ open: (options: RequestModalOptions) => void;
8
+ params: Record<string, unknown> | undefined;
9
+ };
@@ -1,9 +1,14 @@
1
+ import { useAppsSdkBridge } from "../bridges/hooks/use-apps-sdk-bridge.js";
1
2
  /**
2
3
  * Triggers a modal containing the widget rendered in display mode "modal"
3
4
  */
4
5
  export function useRequestModal() {
5
- return (options) => {
6
+ const view = useAppsSdkBridge("view");
7
+ const isOpen = view?.mode === "modal";
8
+ const params = view?.params;
9
+ const open = (options) => {
6
10
  window.openai.requestModal(options);
7
11
  };
12
+ return { isOpen, open, params };
8
13
  }
9
14
  //# sourceMappingURL=use-request-modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-request-modal.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-request-modal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,OAA0B,EAAE,EAAE;QACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"use-request-modal.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-request-modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAG3E;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;IAE5B,MAAM,IAAI,GAAG,CAAC,OAA4B,EAAE,EAAE;QAC5C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC"}
@@ -1,22 +1,55 @@
1
- import { useRequestModal } from "./use-request-modal.js";
2
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
3
1
  import { renderHook } from "@testing-library/react";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { useRequestModal } from "./use-request-modal.js";
4
4
  describe("useRequestModal", () => {
5
5
  let requestModalMock;
6
6
  beforeEach(() => {
7
7
  requestModalMock = vi.fn();
8
+ vi.stubGlobal("skybridge", { hostType: "apps-sdk" });
8
9
  vi.stubGlobal("openai", {
9
10
  requestModal: requestModalMock,
11
+ view: { mode: "inline" },
10
12
  });
11
13
  });
12
14
  afterEach(() => {
13
15
  vi.unstubAllGlobals();
14
16
  vi.resetAllMocks();
15
17
  });
16
- it("should return a function that calls window.openai.requestModal with the options", () => {
18
+ it("should return an object with open, isOpen, and params properties where isOpen is false when mode is not modal", () => {
19
+ const { result } = renderHook(() => useRequestModal());
20
+ expect(typeof result.current).toBe("object");
21
+ expect(result.current).toHaveProperty("open");
22
+ expect(result.current).toHaveProperty("isOpen");
23
+ expect(result.current).toHaveProperty("params");
24
+ const { open, isOpen, params } = result.current;
25
+ expect(typeof open).toBe("function");
26
+ expect(isOpen).toBe(false);
27
+ expect(params).toBeUndefined();
28
+ });
29
+ it("should return isOpen as true when mode is modal", () => {
30
+ vi.stubGlobal("openai", {
31
+ requestModal: requestModalMock,
32
+ view: { mode: "modal" },
33
+ });
34
+ const { result } = renderHook(() => useRequestModal());
35
+ const { isOpen } = result.current;
36
+ expect(isOpen).toBe(true);
37
+ });
38
+ it("should return params from view when available", () => {
39
+ const testParams = { foo: "bar", baz: 42 };
40
+ vi.stubGlobal("openai", {
41
+ requestModal: requestModalMock,
42
+ view: { mode: "modal", params: testParams },
43
+ });
44
+ const { result } = renderHook(() => useRequestModal());
45
+ const { params } = result.current;
46
+ expect(params).toEqual(testParams);
47
+ });
48
+ it("should call window.openai.requestModal with the options when open is called", () => {
17
49
  const { result } = renderHook(() => useRequestModal());
50
+ const { open } = result.current;
18
51
  const options = { title: "Test Modal" };
19
- result.current(options);
52
+ open(options);
20
53
  expect(requestModalMock).toHaveBeenCalledTimes(1);
21
54
  expect(requestModalMock).toHaveBeenCalledWith(options);
22
55
  });
@@ -1 +1 @@
1
- {"version":3,"file":"use-request-modal.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-request-modal.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,gBAA0C,CAAC;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;YACtB,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExB,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"use-request-modal.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-request-modal.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,6 @@
1
- import { useCallback } from "react";
1
+ import { getBridgeMethods } from "../bridges/index.js";
2
2
  export function useSendFollowUpMessage() {
3
- const sendFollowUpMessage = useCallback(async (prompt) => {
4
- if (!window.openai?.sendFollowUpMessage) {
5
- throw new Error("window.openai.sendFollowUpMessage is not available");
6
- }
7
- return window.openai.sendFollowUpMessage({ prompt });
8
- }, []);
3
+ const { sendFollowUpMessage } = getBridgeMethods();
9
4
  return sendFollowUpMessage;
10
5
  }
11
6
  //# sourceMappingURL=use-send-follow-up-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-send-follow-up-message.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-send-follow-up-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEpC,MAAM,UAAU,sBAAsB;IACpC,MAAM,mBAAmB,GAAG,WAAW,CACrC,KAAK,EAAE,MAAc,EAAiB,EAAE;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"use-send-follow-up-message.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-send-follow-up-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,UAAU,sBAAsB;IACpC,MAAM,EAAE,mBAAmB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEnD,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
@@ -1,6 +1,16 @@
1
1
  import type { UnknownObject } from "../types.js";
2
+ export type ToolIdleState = {
3
+ status: "idle";
4
+ isIdle: true;
5
+ isPending: false;
6
+ isSuccess: false;
7
+ input: undefined;
8
+ output: undefined;
9
+ responseMetadata: undefined;
10
+ };
2
11
  export type ToolPendingState<ToolInput extends UnknownObject> = {
3
12
  status: "pending";
13
+ isIdle: false;
4
14
  isPending: true;
5
15
  isSuccess: false;
6
16
  input: ToolInput;
@@ -9,17 +19,18 @@ export type ToolPendingState<ToolInput extends UnknownObject> = {
9
19
  };
10
20
  export type ToolSuccessState<ToolInput extends UnknownObject, ToolOutput extends UnknownObject, ToolResponseMetadata extends UnknownObject> = {
11
21
  status: "success";
22
+ isIdle: false;
12
23
  isPending: false;
13
24
  isSuccess: true;
14
25
  input: ToolInput;
15
26
  output: ToolOutput;
16
27
  responseMetadata: ToolResponseMetadata;
17
28
  };
18
- export type ToolState<ToolInput extends UnknownObject, ToolOutput extends UnknownObject, ToolResponseMetadata extends UnknownObject> = ToolPendingState<ToolInput> | ToolSuccessState<ToolInput, ToolOutput, ToolResponseMetadata>;
29
+ export type ToolState<ToolInput extends UnknownObject, ToolOutput extends UnknownObject, ToolResponseMetadata extends UnknownObject> = ToolIdleState | ToolPendingState<ToolInput> | ToolSuccessState<ToolInput, ToolOutput, ToolResponseMetadata>;
19
30
  type ToolSignature = {
20
31
  input: UnknownObject;
21
32
  output: UnknownObject;
22
33
  responseMetadata: UnknownObject;
23
34
  };
24
- export declare function useToolInfo<TS extends Partial<ToolSignature> = {}>(): ToolState<UnknownObject & TS["input"], UnknownObject & TS["output"], UnknownObject & TS["responseMetadata"]>;
35
+ export declare function useToolInfo<TS extends Partial<ToolSignature> = Record<string, never>>(): ToolState<UnknownObject & TS["input"], UnknownObject & TS["output"], UnknownObject & TS["responseMetadata"]>;
25
36
  export {};
@@ -1,18 +1,22 @@
1
- import { useOpenAiGlobal } from "./use-openai-global.js";
2
- import { useEffect, useState } from "react";
1
+ import { useBridge } from "../bridges/index.js";
2
+ function deriveStatus(input, output, responseMetadata) {
3
+ if (input === null) {
4
+ return "idle";
5
+ }
6
+ if (output === null && responseMetadata === null) {
7
+ return "pending";
8
+ }
9
+ return "success";
10
+ }
3
11
  export function useToolInfo() {
4
- const [status, setStatus] = useState("pending");
5
- const input = useOpenAiGlobal("toolInput");
6
- const output = useOpenAiGlobal("toolOutput") ?? undefined;
7
- const responseMetadata = useOpenAiGlobal("toolResponseMetadata") ?? undefined;
8
- useEffect(() => {
9
- setStatus(output === undefined && responseMetadata === undefined
10
- ? "pending"
11
- : "success");
12
- }, [output, responseMetadata]);
12
+ const input = useBridge("toolInput");
13
+ const output = useBridge("toolOutput");
14
+ const responseMetadata = useBridge("toolResponseMetadata");
15
+ const status = deriveStatus(input, output, responseMetadata);
13
16
  return {
14
17
  input,
15
18
  status,
19
+ isIdle: status === "idle",
16
20
  isPending: status === "pending",
17
21
  isSuccess: status === "success",
18
22
  output,
@@ -1 +1 @@
1
- {"version":3,"file":"use-tool-info.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-tool-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAuC5C,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAwB,SAAS,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;IAC1D,MAAM,gBAAgB,GAAG,eAAe,CAAC,sBAAsB,CAAC,IAAI,SAAS,CAAC;IAE9E,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CACP,MAAM,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS;YACpD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS,CACd,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAM/B,OAAO;QACL,KAAK;QACL,MAAM;QACN,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,MAAM;QACN,gBAAgB;KACqB,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"use-tool-info.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-tool-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAoDhD,SAAS,YAAY,CACnB,KAAqC,EACrC,MAAsC,EACtC,gBAAgD;IAEhD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW;IAGzB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAM7D,OAAO;QACL,KAAK;QACL,MAAM;QACN,MAAM,EAAE,MAAM,KAAK,MAAM;QACzB,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,MAAM;QACN,gBAAgB;KACqB,CAAC;AAC1C,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { expectTypeOf, test } from "vitest";
2
- import { renderHook } from "@testing-library/react";
3
2
  import { useToolInfo } from "./use-tool-info.js";
4
3
  test("useToolInfo - TypeScript typing", () => {
5
4
  test("should have correct types when no generic parameter is provided", () => {
@@ -7,27 +6,46 @@ test("useToolInfo - TypeScript typing", () => {
7
6
  expectTypeOf(result.status);
8
7
  expectTypeOf(result.isPending);
9
8
  expectTypeOf(result.isSuccess);
9
+ expectTypeOf(result.isIdle);
10
10
  expectTypeOf(result.input);
11
11
  });
12
12
  test("should correctly type input, output, and responseMetadata with explicit ToolSignature", () => {
13
13
  const result = useToolInfo();
14
- expectTypeOf(result.input);
14
+ // When idle, input should be undefined
15
+ if (result.status === "idle") {
16
+ expectTypeOf(result.input);
17
+ expectTypeOf(result.output);
18
+ expectTypeOf(result.responseMetadata);
19
+ }
15
20
  // When pending, output and responseMetadata should be undefined
16
21
  if (result.status === "pending") {
22
+ expectTypeOf(result.input);
17
23
  expectTypeOf(result.output);
18
24
  expectTypeOf(result.responseMetadata);
19
25
  }
20
26
  // When success, output and responseMetadata should be defined
21
27
  if (result.status === "success") {
28
+ expectTypeOf(result.input);
22
29
  expectTypeOf(result.output);
23
30
  expectTypeOf(result.responseMetadata);
24
31
  }
25
32
  });
26
33
  test("should correctly narrow types based on status discriminated union", () => {
27
34
  const result = useToolInfo();
28
- // Test type narrowing
35
+ // Test type narrowing for idle
36
+ if (result.isIdle) {
37
+ expectTypeOf(result.status);
38
+ expectTypeOf(result.isIdle);
39
+ expectTypeOf(result.isPending);
40
+ expectTypeOf(result.isSuccess);
41
+ expectTypeOf(result.input);
42
+ expectTypeOf(result.output);
43
+ expectTypeOf(result.responseMetadata);
44
+ }
45
+ // Test type narrowing for pending
29
46
  if (result.isPending) {
30
47
  expectTypeOf(result.status);
48
+ expectTypeOf(result.isIdle);
31
49
  expectTypeOf(result.isPending);
32
50
  expectTypeOf(result.isSuccess);
33
51
  expectTypeOf(result.output);
@@ -35,13 +53,23 @@ test("useToolInfo - TypeScript typing", () => {
35
53
  }
36
54
  if (result.isSuccess) {
37
55
  expectTypeOf(result.status);
56
+ expectTypeOf(result.isIdle);
38
57
  expectTypeOf(result.isPending);
39
58
  expectTypeOf(result.isSuccess);
40
59
  expectTypeOf(result.output);
41
60
  expectTypeOf(result.responseMetadata);
42
61
  }
62
+ if (result.status === "idle") {
63
+ expectTypeOf(result.isIdle);
64
+ expectTypeOf(result.isPending);
65
+ expectTypeOf(result.isSuccess);
66
+ expectTypeOf(result.input);
67
+ expectTypeOf(result.output);
68
+ expectTypeOf(result.responseMetadata);
69
+ }
43
70
  if (result.status === "pending") {
44
71
  expectTypeOf(result.input);
72
+ expectTypeOf(result.isIdle);
45
73
  expectTypeOf(result.isPending);
46
74
  expectTypeOf(result.isSuccess);
47
75
  expectTypeOf(result.output);
@@ -49,6 +77,7 @@ test("useToolInfo - TypeScript typing", () => {
49
77
  }
50
78
  if (result.status === "success") {
51
79
  expectTypeOf(result.input);
80
+ expectTypeOf(result.isIdle);
52
81
  expectTypeOf(result.isPending);
53
82
  expectTypeOf(result.isSuccess);
54
83
  expectTypeOf(result.output);
@@ -57,7 +86,10 @@ test("useToolInfo - TypeScript typing", () => {
57
86
  });
58
87
  test("should handle partial ToolSignature with only input specified", () => {
59
88
  const result = useToolInfo();
60
- expectTypeOf(result.input);
89
+ // Input can be TestInput or undefined (when idle)
90
+ if (result.status === "pending" || result.status === "success") {
91
+ expectTypeOf(result.input);
92
+ }
61
93
  if (result.status === "success") {
62
94
  expectTypeOf(result.output);
63
95
  expectTypeOf(result.responseMetadata);
@@ -65,7 +97,10 @@ test("useToolInfo - TypeScript typing", () => {
65
97
  });
66
98
  test("should handle ToolSignature with only output specified", () => {
67
99
  const result = useToolInfo();
68
- expectTypeOf(result.input);
100
+ // Input can be Record<string, unknown> or undefined (when idle)
101
+ if (result.status === "pending" || result.status === "success") {
102
+ expectTypeOf(result.input);
103
+ }
69
104
  if (result.status === "success") {
70
105
  expectTypeOf(result.output);
71
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-tool-info.test-d.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-tool-info.test-d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-tool-info.test-d.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-tool-info.test-d.ts"],"names":[],"mappings":"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"}