@apollo/client-ai-apps 0.3.3 → 0.5.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.
Files changed (404) hide show
  1. package/.github/CODEOWNERS +1 -0
  2. package/.github/workflows/pr.yaml +23 -1
  3. package/.github/workflows/release.yaml +1 -5
  4. package/.github/workflows/verify-changeset.yml +112 -21
  5. package/CHANGELOG.md +416 -0
  6. package/__mocks__/fs/promises.cjs +3 -0
  7. package/__mocks__/fs.cjs +3 -0
  8. package/dist/config/defineConfig.d.ts +26 -0
  9. package/dist/config/defineConfig.d.ts.map +1 -0
  10. package/dist/config/defineConfig.js +7 -0
  11. package/dist/config/defineConfig.js.map +1 -0
  12. package/dist/config/index.d.ts +3 -0
  13. package/dist/config/index.d.ts.map +1 -0
  14. package/dist/config/index.js +2 -0
  15. package/dist/config/index.js.map +1 -0
  16. package/dist/config/schema.d.ts +29 -0
  17. package/dist/config/schema.d.ts.map +1 -0
  18. package/dist/config/schema.js +51 -0
  19. package/dist/config/schema.js.map +1 -0
  20. package/dist/config/types.d.ts +7 -0
  21. package/dist/config/types.d.ts.map +1 -0
  22. package/dist/config/types.js +2 -0
  23. package/dist/config/types.js.map +1 -0
  24. package/dist/core/ApolloClient.d.ts +4 -3
  25. package/dist/core/ApolloClient.d.ts.map +1 -1
  26. package/dist/core/ApolloClient.js +6 -59
  27. package/dist/core/ApolloClient.js.map +1 -1
  28. package/dist/core/Platform.d.ts +8 -0
  29. package/dist/core/Platform.d.ts.map +1 -0
  30. package/dist/core/Platform.js +20 -0
  31. package/dist/core/Platform.js.map +1 -0
  32. package/dist/core/types.d.ts +13 -0
  33. package/dist/core/types.d.ts.map +1 -0
  34. package/dist/core/types.js +2 -0
  35. package/dist/core/types.js.map +1 -0
  36. package/dist/index.d.ts +2 -16
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -14
  39. package/dist/index.js.map +1 -1
  40. package/dist/index.mcp.d.ts +5 -0
  41. package/dist/index.mcp.d.ts.map +1 -0
  42. package/dist/index.mcp.js +5 -0
  43. package/dist/index.mcp.js.map +1 -0
  44. package/dist/index.openai.d.ts +5 -0
  45. package/dist/index.openai.d.ts.map +1 -0
  46. package/dist/index.openai.js +5 -0
  47. package/dist/index.openai.js.map +1 -0
  48. package/dist/link/ToolCallLink.d.ts +3 -3
  49. package/dist/link/ToolCallLink.d.ts.map +1 -1
  50. package/dist/link/ToolCallLink.js +5 -14
  51. package/dist/link/ToolCallLink.js.map +1 -1
  52. package/dist/mcp/core/ApolloClient.d.ts +21 -0
  53. package/dist/mcp/core/ApolloClient.d.ts.map +1 -0
  54. package/dist/mcp/core/ApolloClient.js +65 -0
  55. package/dist/mcp/core/ApolloClient.js.map +1 -0
  56. package/dist/mcp/core/McpAppManager.d.ts +34 -0
  57. package/dist/mcp/core/McpAppManager.d.ts.map +1 -0
  58. package/dist/mcp/core/McpAppManager.js +63 -0
  59. package/dist/mcp/core/McpAppManager.js.map +1 -0
  60. package/dist/mcp/core/Platform.d.ts +8 -0
  61. package/dist/mcp/core/Platform.d.ts.map +1 -0
  62. package/dist/mcp/core/Platform.js +8 -0
  63. package/dist/mcp/core/Platform.js.map +1 -0
  64. package/dist/mcp/index.d.ts +3 -0
  65. package/dist/mcp/index.d.ts.map +1 -0
  66. package/dist/mcp/index.js +3 -0
  67. package/dist/mcp/index.js.map +1 -0
  68. package/dist/mcp/link/ToolCallLink.d.ts +28 -0
  69. package/dist/mcp/link/ToolCallLink.d.ts.map +1 -0
  70. package/dist/mcp/link/ToolCallLink.js +35 -0
  71. package/dist/mcp/link/ToolCallLink.js.map +1 -0
  72. package/dist/mcp/react/hooks/useApolloClient.d.ts +3 -0
  73. package/dist/mcp/react/hooks/useApolloClient.d.ts.map +1 -0
  74. package/dist/mcp/react/hooks/useApolloClient.js +9 -0
  75. package/dist/mcp/react/hooks/useApolloClient.js.map +1 -0
  76. package/dist/mcp/react/hooks/useApp.d.ts +2 -0
  77. package/dist/mcp/react/hooks/useApp.d.ts.map +1 -0
  78. package/dist/mcp/react/hooks/useApp.js +5 -0
  79. package/dist/mcp/react/hooks/useApp.js.map +1 -0
  80. package/dist/mcp/react/hooks/useToolInput.d.ts +2 -0
  81. package/dist/mcp/react/hooks/useToolInput.d.ts.map +1 -0
  82. package/dist/mcp/react/hooks/useToolInput.js +5 -0
  83. package/dist/mcp/react/hooks/useToolInput.js.map +1 -0
  84. package/dist/mcp/react/hooks/useToolMetadata.d.ts +8 -0
  85. package/dist/mcp/react/hooks/useToolMetadata.d.ts.map +1 -0
  86. package/dist/mcp/react/hooks/useToolMetadata.js +5 -0
  87. package/dist/mcp/react/hooks/useToolMetadata.js.map +1 -0
  88. package/dist/mcp/react/hooks/useToolName.d.ts +2 -0
  89. package/dist/mcp/react/hooks/useToolName.d.ts.map +1 -0
  90. package/dist/mcp/react/hooks/useToolName.js +5 -0
  91. package/dist/mcp/react/hooks/useToolName.js.map +1 -0
  92. package/dist/mcp/react/index.d.ts +5 -0
  93. package/dist/mcp/react/index.d.ts.map +1 -0
  94. package/dist/mcp/react/index.js +5 -0
  95. package/dist/mcp/react/index.js.map +1 -0
  96. package/dist/openai/core/ApolloClient.d.ts +21 -0
  97. package/dist/openai/core/ApolloClient.d.ts.map +1 -0
  98. package/dist/openai/core/ApolloClient.js +66 -0
  99. package/dist/openai/core/ApolloClient.js.map +1 -0
  100. package/dist/openai/core/McpAppManager.d.ts +28 -0
  101. package/dist/openai/core/McpAppManager.d.ts.map +1 -0
  102. package/dist/openai/core/McpAppManager.js +73 -0
  103. package/dist/openai/core/McpAppManager.js.map +1 -0
  104. package/dist/openai/core/Platform.d.ts +8 -0
  105. package/dist/openai/core/Platform.d.ts.map +1 -0
  106. package/dist/openai/core/Platform.js +8 -0
  107. package/dist/openai/core/Platform.js.map +1 -0
  108. package/dist/openai/globals.d.ts +12 -0
  109. package/dist/openai/globals.d.ts.map +1 -0
  110. package/dist/openai/globals.js +2 -0
  111. package/dist/openai/globals.js.map +1 -0
  112. package/dist/openai/index.d.ts +3 -0
  113. package/dist/openai/index.d.ts.map +1 -0
  114. package/dist/openai/index.js +3 -0
  115. package/dist/openai/index.js.map +1 -0
  116. package/dist/openai/link/ToolCallLink.d.ts +28 -0
  117. package/dist/openai/link/ToolCallLink.d.ts.map +1 -0
  118. package/dist/openai/link/ToolCallLink.js +35 -0
  119. package/dist/openai/link/ToolCallLink.js.map +1 -0
  120. package/dist/openai/react/hooks/useApolloClient.d.ts +3 -0
  121. package/dist/openai/react/hooks/useApolloClient.d.ts.map +1 -0
  122. package/dist/openai/react/hooks/useApolloClient.js +9 -0
  123. package/dist/openai/react/hooks/useApolloClient.js.map +1 -0
  124. package/dist/openai/react/hooks/useApp.d.ts +2 -0
  125. package/dist/openai/react/hooks/useApp.d.ts.map +1 -0
  126. package/dist/openai/react/hooks/useApp.js +5 -0
  127. package/dist/openai/react/hooks/useApp.js.map +1 -0
  128. package/dist/openai/react/hooks/useOpenAiGlobal.d.ts +3 -0
  129. package/dist/openai/react/hooks/useOpenAiGlobal.d.ts.map +1 -0
  130. package/dist/{react → openai/react}/hooks/useOpenAiGlobal.js +1 -1
  131. package/dist/openai/react/hooks/useOpenAiGlobal.js.map +1 -0
  132. package/dist/openai/react/hooks/useToolInput.d.ts +2 -0
  133. package/dist/openai/react/hooks/useToolInput.d.ts.map +1 -0
  134. package/dist/openai/react/hooks/useToolInput.js +5 -0
  135. package/dist/openai/react/hooks/useToolInput.js.map +1 -0
  136. package/dist/openai/react/hooks/useToolMetadata.d.ts +2 -0
  137. package/dist/openai/react/hooks/useToolMetadata.d.ts.map +1 -0
  138. package/dist/openai/react/hooks/useToolMetadata.js +5 -0
  139. package/dist/openai/react/hooks/useToolMetadata.js.map +1 -0
  140. package/dist/openai/react/hooks/useToolName.d.ts.map +1 -0
  141. package/dist/openai/react/hooks/useToolName.js +5 -0
  142. package/dist/openai/react/hooks/useToolName.js.map +1 -0
  143. package/dist/{react → openai/react}/hooks/useWidgetState.d.ts +1 -1
  144. package/dist/openai/react/hooks/useWidgetState.d.ts.map +1 -0
  145. package/dist/openai/react/hooks/useWidgetState.js.map +1 -0
  146. package/dist/openai/react/index.d.ts +6 -0
  147. package/dist/openai/react/index.d.ts.map +1 -0
  148. package/dist/openai/react/index.js +6 -0
  149. package/dist/openai/react/index.js.map +1 -0
  150. package/dist/{types/openai.d.ts → openai/types.d.ts} +7 -11
  151. package/dist/openai/types.d.ts.map +1 -0
  152. package/dist/{types/openai.js → openai/types.js} +1 -1
  153. package/dist/openai/types.js.map +1 -0
  154. package/dist/react/ApolloProvider.d.ts +6 -2
  155. package/dist/react/ApolloProvider.d.ts.map +1 -1
  156. package/dist/react/ApolloProvider.js +12 -27
  157. package/dist/react/ApolloProvider.js.map +1 -1
  158. package/dist/react/index.d.ts +6 -0
  159. package/dist/react/index.d.ts.map +1 -0
  160. package/dist/react/index.js +9 -0
  161. package/dist/react/index.js.map +1 -0
  162. package/dist/react/index.mcp.d.ts +3 -0
  163. package/dist/react/index.mcp.d.ts.map +1 -0
  164. package/dist/react/index.mcp.js +3 -0
  165. package/dist/react/index.mcp.js.map +1 -0
  166. package/dist/react/index.openai.d.ts +3 -0
  167. package/dist/react/index.openai.d.ts.map +1 -0
  168. package/dist/react/index.openai.js +3 -0
  169. package/dist/react/index.openai.js.map +1 -0
  170. package/dist/react/missingHook.d.ts +2 -0
  171. package/dist/react/missingHook.d.ts.map +1 -0
  172. package/dist/react/missingHook.js +6 -0
  173. package/dist/react/missingHook.js.map +1 -0
  174. package/dist/tsconfig/core/tsconfig.json +5 -0
  175. package/dist/tsconfig/mcp/tsconfig.json +6 -0
  176. package/dist/tsconfig/openai/tsconfig.json +7 -0
  177. package/dist/types/application-manifest.d.ts +13 -1
  178. package/dist/types/application-manifest.d.ts.map +1 -1
  179. package/dist/types/application-manifest.js.map +1 -1
  180. package/dist/utilities/cacheAsync.d.ts +4 -0
  181. package/dist/utilities/cacheAsync.d.ts.map +1 -0
  182. package/dist/utilities/cacheAsync.js +19 -0
  183. package/dist/utilities/cacheAsync.js.map +1 -0
  184. package/dist/utilities/constants.d.ts +6 -0
  185. package/dist/utilities/constants.d.ts.map +1 -0
  186. package/dist/utilities/constants.js +6 -0
  187. package/dist/utilities/constants.js.map +1 -0
  188. package/dist/utilities/emptyModule.d.ts +2 -0
  189. package/dist/utilities/emptyModule.d.ts.map +1 -0
  190. package/dist/utilities/emptyModule.js +2 -0
  191. package/dist/utilities/emptyModule.js.map +1 -0
  192. package/dist/utilities/getVariablesForOperationFromToolInput.d.ts +5 -0
  193. package/dist/utilities/getVariablesForOperationFromToolInput.d.ts.map +1 -0
  194. package/dist/utilities/getVariablesForOperationFromToolInput.js +18 -0
  195. package/dist/utilities/getVariablesForOperationFromToolInput.js.map +1 -0
  196. package/dist/utilities/index.d.ts +6 -0
  197. package/dist/utilities/index.d.ts.map +1 -0
  198. package/dist/utilities/index.js +6 -0
  199. package/dist/utilities/index.js.map +1 -0
  200. package/dist/utilities/invariant.d.ts +2 -0
  201. package/dist/utilities/invariant.d.ts.map +1 -0
  202. package/dist/utilities/invariant.js +6 -0
  203. package/dist/utilities/invariant.js.map +1 -0
  204. package/dist/utilities/promiseWithResolvers.d.ts +7 -0
  205. package/dist/utilities/promiseWithResolvers.d.ts.map +1 -0
  206. package/dist/utilities/promiseWithResolvers.js +16 -0
  207. package/dist/utilities/promiseWithResolvers.js.map +1 -0
  208. package/dist/vite/__tests__/utilities/build.d.ts +41 -0
  209. package/dist/vite/__tests__/utilities/build.d.ts.map +1 -0
  210. package/dist/vite/__tests__/utilities/build.js +63 -0
  211. package/dist/vite/__tests__/utilities/build.js.map +1 -0
  212. package/dist/vite/apolloClientAiApps.d.ts +14 -0
  213. package/dist/vite/apolloClientAiApps.d.ts.map +1 -0
  214. package/dist/vite/apolloClientAiApps.js +350 -0
  215. package/dist/vite/apolloClientAiApps.js.map +1 -0
  216. package/dist/vite/index.d.ts +1 -2
  217. package/dist/vite/index.d.ts.map +1 -1
  218. package/dist/vite/index.js +1 -2
  219. package/dist/vite/index.js.map +1 -1
  220. package/dist/vite/utilities/config.d.ts +2 -0
  221. package/dist/vite/utilities/config.d.ts.map +1 -0
  222. package/dist/vite/utilities/config.js +11 -0
  223. package/dist/vite/utilities/config.js.map +1 -0
  224. package/dist/vite/utilities/graphql.d.ts +20 -0
  225. package/dist/vite/utilities/graphql.d.ts.map +1 -0
  226. package/dist/vite/utilities/graphql.js +42 -0
  227. package/dist/vite/utilities/graphql.js.map +1 -0
  228. package/knope.toml +1 -1
  229. package/package.json +109 -12
  230. package/src/config/defineConfig.ts +8 -0
  231. package/src/config/index.ts +2 -0
  232. package/src/config/schema.ts +73 -0
  233. package/src/config/types.ts +7 -0
  234. package/src/core/ApolloClient.ts +7 -95
  235. package/src/core/Platform.ts +27 -0
  236. package/src/core/types.ts +14 -0
  237. package/src/index.mcp.ts +5 -0
  238. package/src/index.openai.ts +5 -0
  239. package/src/index.ts +4 -28
  240. package/src/link/ToolCallLink.ts +6 -22
  241. package/src/mcp/core/ApolloClient.ts +102 -0
  242. package/src/mcp/core/McpAppManager.ts +98 -0
  243. package/src/mcp/core/Platform.ts +11 -0
  244. package/src/mcp/core/__tests__/ApolloClient.test.ts +464 -0
  245. package/src/mcp/index.ts +2 -0
  246. package/src/mcp/link/ToolCallLink.ts +40 -0
  247. package/src/mcp/link/__tests__/ToolCallLink.test.ts +53 -0
  248. package/src/mcp/react/hooks/__tests__/useApp.test.tsx +46 -0
  249. package/src/mcp/react/hooks/__tests__/useToolInput.test.tsx +50 -0
  250. package/src/mcp/react/hooks/__tests__/useToolMetadata.test.tsx +53 -0
  251. package/src/mcp/react/hooks/__tests__/useToolName.test.tsx +50 -0
  252. package/src/mcp/react/hooks/useApolloClient.ts +14 -0
  253. package/src/mcp/react/hooks/useApp.ts +5 -0
  254. package/src/mcp/react/hooks/useToolInput.ts +5 -0
  255. package/src/mcp/react/hooks/useToolMetadata.ts +5 -0
  256. package/src/mcp/react/hooks/useToolName.ts +5 -0
  257. package/src/mcp/react/index.ts +4 -0
  258. package/src/openai/core/ApolloClient.ts +100 -0
  259. package/src/openai/core/McpAppManager.ts +110 -0
  260. package/src/openai/core/Platform.ts +11 -0
  261. package/src/openai/core/__tests__/ApolloClient.test.ts +537 -0
  262. package/src/openai/globals.ts +14 -0
  263. package/src/openai/index.ts +2 -0
  264. package/src/openai/link/ToolCallLink.ts +40 -0
  265. package/src/{react → openai/react}/hooks/__tests__/useOpenAiGlobal.test.ts +1 -1
  266. package/src/openai/react/hooks/__tests__/useToolInput.test.tsx +85 -0
  267. package/src/openai/react/hooks/__tests__/useToolMetadata.test.tsx +86 -0
  268. package/src/openai/react/hooks/__tests__/useToolName.test.tsx +50 -0
  269. package/src/{react → openai/react}/hooks/__tests__/useWidgetState.test.tsx +1 -1
  270. package/src/openai/react/hooks/useApolloClient.ts +14 -0
  271. package/src/openai/react/hooks/useApp.ts +5 -0
  272. package/src/{react → openai/react}/hooks/useOpenAiGlobal.ts +2 -2
  273. package/src/openai/react/hooks/useToolInput.ts +5 -0
  274. package/src/openai/react/hooks/useToolMetadata.ts +5 -0
  275. package/src/openai/react/hooks/useToolName.ts +5 -0
  276. package/src/{react → openai/react}/hooks/useWidgetState.ts +1 -1
  277. package/src/openai/react/index.ts +5 -0
  278. package/src/{types/openai.ts → openai/types.ts} +9 -13
  279. package/src/react/ApolloProvider.tsx +23 -31
  280. package/src/react/__tests__/ApolloProvider/mcp.test.tsx +74 -0
  281. package/src/react/__tests__/ApolloProvider/openai.test.tsx +146 -0
  282. package/src/react/index.mcp.ts +7 -0
  283. package/src/react/index.openai.ts +7 -0
  284. package/src/react/index.ts +19 -0
  285. package/src/react/missingHook.ts +9 -0
  286. package/src/testing/internal/index.ts +8 -0
  287. package/src/testing/internal/matchers/index.ts +2 -0
  288. package/src/testing/internal/matchers/toComplete.ts +46 -0
  289. package/src/testing/internal/matchers/toEmitValue.ts +71 -0
  290. package/src/testing/internal/matchers/types.ts +3 -0
  291. package/src/testing/internal/mcp/graphqlToolResult.ts +31 -0
  292. package/src/testing/internal/mcp/minimalHostContextWithToolName.ts +9 -0
  293. package/src/testing/internal/mcp/mockMcpHost.ts +188 -0
  294. package/src/testing/internal/openai/dispatchStateChange.ts +1 -1
  295. package/src/testing/internal/openai/stubOpenAiGlobals.ts +22 -9
  296. package/src/testing/internal/react/renderAsync.ts +7 -0
  297. package/src/testing/internal/utilities/ObservableStream.ts +172 -0
  298. package/src/testing/internal/utilities/getSerializableProperties.ts +55 -0
  299. package/src/testing/internal/utilities/mockApplicationManifest.ts +39 -0
  300. package/src/testing/internal/utilities/spyOnConsole.ts +29 -0
  301. package/src/testing/internal/utilities/wait.ts +3 -0
  302. package/src/tsconfig/core/tsconfig.json +5 -0
  303. package/src/tsconfig/mcp/tsconfig.json +6 -0
  304. package/src/tsconfig/openai/tsconfig.json +7 -0
  305. package/src/types/application-manifest.ts +16 -1
  306. package/src/utilities/__tests__/cacheAsync.test.ts +64 -0
  307. package/src/utilities/cacheAsync.ts +25 -0
  308. package/src/utilities/constants.ts +5 -0
  309. package/src/utilities/emptyModule.ts +1 -0
  310. package/src/utilities/getVariablesForOperationFromToolInput.ts +27 -0
  311. package/src/utilities/index.ts +5 -0
  312. package/src/utilities/invariant.ts +5 -0
  313. package/src/utilities/promiseWithResolvers.ts +18 -0
  314. package/src/vite/__tests__/apolloClientAiApps.test.ts +1521 -0
  315. package/src/vite/__tests__/utilities/build.ts +72 -0
  316. package/src/vite/apolloClientAiApps.ts +515 -0
  317. package/src/vite/index.ts +1 -2
  318. package/src/vite/utilities/config.ts +13 -0
  319. package/src/vite/utilities/graphql.ts +123 -0
  320. package/tsconfig.base.json +2 -2
  321. package/tsconfig.vite.build.json +4 -1
  322. package/tsconfig.vite.json +8 -2
  323. package/vitest-setup.ts +28 -0
  324. package/dist/react/context/ToolUseContext.d.ts +0 -16
  325. package/dist/react/context/ToolUseContext.d.ts.map +0 -1
  326. package/dist/react/context/ToolUseContext.js +0 -11
  327. package/dist/react/context/ToolUseContext.js.map +0 -1
  328. package/dist/react/hooks/useCallTool.d.ts +0 -4
  329. package/dist/react/hooks/useCallTool.d.ts.map +0 -1
  330. package/dist/react/hooks/useCallTool.js +0 -5
  331. package/dist/react/hooks/useCallTool.js.map +0 -1
  332. package/dist/react/hooks/useOpenAiGlobal.d.ts +0 -3
  333. package/dist/react/hooks/useOpenAiGlobal.d.ts.map +0 -1
  334. package/dist/react/hooks/useOpenAiGlobal.js.map +0 -1
  335. package/dist/react/hooks/useOpenExternal.d.ts +0 -4
  336. package/dist/react/hooks/useOpenExternal.d.ts.map +0 -1
  337. package/dist/react/hooks/useOpenExternal.js +0 -5
  338. package/dist/react/hooks/useOpenExternal.js.map +0 -1
  339. package/dist/react/hooks/useRequestDisplayMode.d.ts +0 -7
  340. package/dist/react/hooks/useRequestDisplayMode.d.ts.map +0 -1
  341. package/dist/react/hooks/useRequestDisplayMode.js +0 -6
  342. package/dist/react/hooks/useRequestDisplayMode.js.map +0 -1
  343. package/dist/react/hooks/useSendFollowUpMessage.d.ts +0 -2
  344. package/dist/react/hooks/useSendFollowUpMessage.d.ts.map +0 -1
  345. package/dist/react/hooks/useSendFollowUpMessage.js +0 -8
  346. package/dist/react/hooks/useSendFollowUpMessage.js.map +0 -1
  347. package/dist/react/hooks/useToolEffect.d.ts +0 -3
  348. package/dist/react/hooks/useToolEffect.d.ts.map +0 -1
  349. package/dist/react/hooks/useToolEffect.js +0 -28
  350. package/dist/react/hooks/useToolEffect.js.map +0 -1
  351. package/dist/react/hooks/useToolInput.d.ts +0 -2
  352. package/dist/react/hooks/useToolInput.d.ts.map +0 -1
  353. package/dist/react/hooks/useToolInput.js +0 -6
  354. package/dist/react/hooks/useToolInput.js.map +0 -1
  355. package/dist/react/hooks/useToolName.d.ts.map +0 -1
  356. package/dist/react/hooks/useToolName.js +0 -6
  357. package/dist/react/hooks/useToolName.js.map +0 -1
  358. package/dist/react/hooks/useToolOutput.d.ts +0 -2
  359. package/dist/react/hooks/useToolOutput.d.ts.map +0 -1
  360. package/dist/react/hooks/useToolOutput.js +0 -5
  361. package/dist/react/hooks/useToolOutput.js.map +0 -1
  362. package/dist/react/hooks/useToolResponseMetadata.d.ts +0 -2
  363. package/dist/react/hooks/useToolResponseMetadata.d.ts.map +0 -1
  364. package/dist/react/hooks/useToolResponseMetadata.js +0 -5
  365. package/dist/react/hooks/useToolResponseMetadata.js.map +0 -1
  366. package/dist/react/hooks/useWidgetState.d.ts.map +0 -1
  367. package/dist/react/hooks/useWidgetState.js.map +0 -1
  368. package/dist/types/openai.d.ts.map +0 -1
  369. package/dist/types/openai.js.map +0 -1
  370. package/dist/vite/absolute_asset_imports_plugin.d.ts +0 -5
  371. package/dist/vite/absolute_asset_imports_plugin.d.ts.map +0 -1
  372. package/dist/vite/absolute_asset_imports_plugin.js +0 -17
  373. package/dist/vite/absolute_asset_imports_plugin.js.map +0 -1
  374. package/dist/vite/application_manifest_plugin.d.ts +0 -10
  375. package/dist/vite/application_manifest_plugin.d.ts.map +0 -1
  376. package/dist/vite/application_manifest_plugin.js +0 -274
  377. package/dist/vite/application_manifest_plugin.js.map +0 -1
  378. package/src/core/__tests__/ApolloClient.test.ts +0 -626
  379. package/src/react/__tests__/ApolloProvider.test.tsx +0 -41
  380. package/src/react/context/ToolUseContext.tsx +0 -31
  381. package/src/react/hooks/__tests__/useCallTool.test.ts +0 -46
  382. package/src/react/hooks/__tests__/useOpenExternal.test.tsx +0 -24
  383. package/src/react/hooks/__tests__/useRequestDisplayMode.test.ts +0 -17
  384. package/src/react/hooks/__tests__/useSendFollowUpMessage.test.ts +0 -15
  385. package/src/react/hooks/__tests__/useToolEffect.test.tsx +0 -67
  386. package/src/react/hooks/__tests__/useToolInput.test.ts +0 -13
  387. package/src/react/hooks/__tests__/useToolName.test.ts +0 -13
  388. package/src/react/hooks/__tests__/useToolOutput.test.tsx +0 -49
  389. package/src/react/hooks/__tests__/useToolResponseMetadata.test.tsx +0 -49
  390. package/src/react/hooks/useCallTool.ts +0 -13
  391. package/src/react/hooks/useOpenExternal.ts +0 -11
  392. package/src/react/hooks/useRequestDisplayMode.ts +0 -7
  393. package/src/react/hooks/useSendFollowUpMessage.ts +0 -7
  394. package/src/react/hooks/useToolEffect.tsx +0 -37
  395. package/src/react/hooks/useToolInput.ts +0 -7
  396. package/src/react/hooks/useToolName.ts +0 -7
  397. package/src/react/hooks/useToolOutput.ts +0 -5
  398. package/src/react/hooks/useToolResponseMetadata.ts +0 -5
  399. package/src/vite/__tests__/absolute_asset_imports_plugin.test.ts +0 -102
  400. package/src/vite/__tests__/application_manifest_plugin.test.ts +0 -1038
  401. package/src/vite/absolute_asset_imports_plugin.ts +0 -22
  402. package/src/vite/application_manifest_plugin.ts +0 -443
  403. /package/dist/{react → openai/react}/hooks/useToolName.d.ts +0 -0
  404. /package/dist/{react → openai/react}/hooks/useWidgetState.js +0 -0
@@ -1,46 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { useCallTool } from "../useCallTool.js";
3
-
4
- test("Should execute tool when returned function is called", async () => {
5
- vi.stubGlobal("openai", {
6
- callTool: vi.fn(async (name: string, args: Record<string, unknown>) => {
7
- return {
8
- structuredContent: {
9
- data: {
10
- product: {
11
- id: "1",
12
- title: "Pen",
13
- rating: 5,
14
- price: 1.0,
15
- description: "Awesome pen",
16
- images: [],
17
- __typename: "Product",
18
- },
19
- },
20
- },
21
- };
22
- }),
23
- });
24
-
25
- const callTool = useCallTool();
26
- const result = await callTool("my-tool", { id: 1 });
27
-
28
- expect(window.openai.callTool).toBeCalledWith("my-tool", { id: 1 });
29
- expect(result).toMatchInlineSnapshot(`
30
- {
31
- "structuredContent": {
32
- "data": {
33
- "product": {
34
- "__typename": "Product",
35
- "description": "Awesome pen",
36
- "id": "1",
37
- "images": [],
38
- "price": 1,
39
- "rating": 5,
40
- "title": "Pen",
41
- },
42
- },
43
- },
44
- }
45
- `);
46
- });
@@ -1,24 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { renderHookToSnapshotStream } from "@testing-library/react-render-stream";
3
- import { useOpenExternal } from "../useOpenExternal.js";
4
- import { stubOpenAiGlobals } from "../../../testing/internal/index.js";
5
-
6
- test("calls the global openExternal function", async () => {
7
- const openExternalMock = vi.fn();
8
-
9
- stubOpenAiGlobals({ openExternal: openExternalMock });
10
-
11
- const { takeSnapshot } = await renderHookToSnapshotStream(() =>
12
- useOpenExternal()
13
- );
14
-
15
- const openExternal = await takeSnapshot();
16
- openExternal({ href: "https://example.com" });
17
-
18
- expect(openExternalMock).toHaveBeenCalledTimes(1);
19
- expect(openExternalMock).toHaveBeenCalledWith({
20
- href: "https://example.com",
21
- });
22
-
23
- await expect(takeSnapshot).not.toRerender();
24
- });
@@ -1,17 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { useRequestDisplayMode } from "../useRequestDisplayMode.js";
3
- import type { DisplayMode } from "../../../types/openai.js";
4
-
5
- test("Should set display mode when returned function is called", async () => {
6
- vi.stubGlobal("openai", {
7
- requestDisplayMode: vi.fn(async (args: { mode: DisplayMode }) => {
8
- return args;
9
- }),
10
- });
11
-
12
- const requestDisplayMode = useRequestDisplayMode();
13
- const result = await requestDisplayMode({ mode: "inline" });
14
-
15
- expect(window.openai.requestDisplayMode).toBeCalledWith({ mode: "inline" });
16
- expect(result).toEqual({ mode: "inline" });
17
- });
@@ -1,15 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { useSendFollowUpMessage } from "../useSendFollowUpMessage.js";
3
-
4
- test("Should set display mode when returned function is called", async () => {
5
- vi.stubGlobal("openai", {
6
- sendFollowUpMessage: vi.fn(async (args: { prompt: string }) => {}),
7
- });
8
-
9
- const sendFollowUpMessage = useSendFollowUpMessage();
10
- await sendFollowUpMessage("Do a cool thing!");
11
-
12
- expect(window.openai.sendFollowUpMessage).toBeCalledWith({
13
- prompt: "Do a cool thing!",
14
- });
15
- });
@@ -1,67 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { useToolEffect } from "../useToolEffect.js";
3
- import { renderHook } from "@testing-library/react";
4
- import { ToolUseProvider } from "../../context/ToolUseContext.js";
5
-
6
- test("Should trigger effect when tool name matches toolResponseMetadata", async () => {
7
- vi.stubGlobal("openai", {
8
- toolResponseMetadata: { toolName: "my-app--my-tool" },
9
- });
10
- const navigate = vi.fn();
11
- const wrapper = ({ children }: { children: any }) => (
12
- <ToolUseProvider appName="my-app">{children}</ToolUseProvider>
13
- );
14
-
15
- renderHook(() => useToolEffect("my-tool", () => navigate(), [navigate]), {
16
- wrapper,
17
- });
18
-
19
- expect(navigate).toBeCalled();
20
- });
21
-
22
- test("Should trigger effect when one of multiple tool name matches toolResponseMetadata", async () => {
23
- vi.stubGlobal("openai", {
24
- toolResponseMetadata: { toolName: "my-app--my-tool" },
25
- });
26
- const navigate = vi.fn();
27
- const wrapper = ({ children }: { children: any }) => (
28
- <ToolUseProvider appName="my-app">{children}</ToolUseProvider>
29
- );
30
-
31
- renderHook(
32
- () =>
33
- useToolEffect(["my-tool", "my-similar-tool"], () => navigate(), [
34
- navigate,
35
- ]),
36
- { wrapper }
37
- );
38
-
39
- expect(navigate).toBeCalled();
40
- });
41
-
42
- test("Should not trigger effect when tool name does not match toolResponseMetadata", async () => {
43
- vi.stubGlobal("openai", {
44
- toolResponseMetadata: { toolName: "my-app--my-other-tool" },
45
- });
46
- const navigate = vi.fn();
47
- const wrapper = ({ children }: { children: any }) => (
48
- <ToolUseProvider appName="my-app">{children}</ToolUseProvider>
49
- );
50
-
51
- renderHook(() => useToolEffect("my-tool", () => navigate(), [navigate]), {
52
- wrapper,
53
- });
54
-
55
- expect(navigate).not.toBeCalled();
56
- });
57
-
58
- test("Should throw an error when used outside of a ToolUseProvider", async () => {
59
- vi.stubGlobal("openai", {
60
- toolResponseMetadata: { toolName: "my-app--my-other-tool" },
61
- });
62
- const navigate = vi.fn();
63
-
64
- expect(() =>
65
- renderHook(() => useToolEffect("my-tool", () => navigate(), [navigate]))
66
- ).toThrowError("useToolEffect must be used within ToolUseProvider");
67
- });
@@ -1,13 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { useToolInput } from "../useToolInput.js";
3
- import { renderHook } from "@testing-library/react";
4
-
5
- test("Should return tool input when called", async () => {
6
- vi.stubGlobal("openai", {
7
- toolInput: { name: "John" },
8
- });
9
-
10
- const { result } = renderHook(() => useToolInput());
11
-
12
- expect(result.current).toEqual({ name: "John" });
13
- });
@@ -1,13 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { useToolName } from "../useToolName.js";
3
- import { renderHook } from "@testing-library/react";
4
-
5
- test("Should return tool input when called", async () => {
6
- vi.stubGlobal("openai", {
7
- toolResponseMetadata: { toolName: "get-products" },
8
- });
9
-
10
- const { result } = renderHook(() => useToolName());
11
-
12
- expect(result.current).toBe("get-products");
13
- });
@@ -1,49 +0,0 @@
1
- import { afterEach, expect, test, vi } from "vitest";
2
- import {
3
- dispatchStateChange,
4
- stubOpenAiGlobals,
5
- } from "../../../testing/internal/index.js";
6
- import { renderHookToSnapshotStream } from "@testing-library/react-render-stream";
7
- import { useToolOutput } from "../useToolOutput.js";
8
-
9
- afterEach(() => {
10
- vi.unstubAllGlobals();
11
- });
12
-
13
- test("returns the tool output set in window", async () => {
14
- stubOpenAiGlobals({ toolOutput: { test: true } });
15
-
16
- const { takeSnapshot } = await renderHookToSnapshotStream(() =>
17
- useToolOutput()
18
- );
19
-
20
- await expect(takeSnapshot()).resolves.toEqual({ test: true });
21
- await expect(takeSnapshot).not.toRerender();
22
- });
23
-
24
- test("returns null when not set", async () => {
25
- stubOpenAiGlobals();
26
-
27
- const { takeSnapshot } = await renderHookToSnapshotStream(() =>
28
- useToolOutput()
29
- );
30
-
31
- await expect(takeSnapshot()).resolves.toBeNull();
32
- await expect(takeSnapshot).not.toRerender();
33
- });
34
-
35
- test("reacts to changes in globals", async () => {
36
- stubOpenAiGlobals({ toolOutput: { initial: true } });
37
-
38
- const { takeSnapshot } = await renderHookToSnapshotStream(() =>
39
- useToolOutput()
40
- );
41
-
42
- await expect(takeSnapshot()).resolves.toEqual({ initial: true });
43
-
44
- window.openai.toolOutput = { updated: true };
45
- dispatchStateChange();
46
-
47
- await expect(takeSnapshot()).resolves.toEqual({ updated: true });
48
- await expect(takeSnapshot).not.toRerender();
49
- });
@@ -1,49 +0,0 @@
1
- import { afterEach, expect, test, vi } from "vitest";
2
- import {
3
- dispatchStateChange,
4
- stubOpenAiGlobals,
5
- } from "../../../testing/internal/index.js";
6
- import { renderHookToSnapshotStream } from "@testing-library/react-render-stream";
7
- import { useToolResponseMetadata } from "../useToolResponseMetadata.js";
8
-
9
- afterEach(() => {
10
- vi.unstubAllGlobals();
11
- });
12
-
13
- test("returns the tool output set in window", async () => {
14
- stubOpenAiGlobals({ toolResponseMetadata: { test: true } });
15
-
16
- const { takeSnapshot } = await renderHookToSnapshotStream(() =>
17
- useToolResponseMetadata()
18
- );
19
-
20
- await expect(takeSnapshot()).resolves.toEqual({ test: true });
21
- await expect(takeSnapshot).not.toRerender();
22
- });
23
-
24
- test("returns null when not set", async () => {
25
- stubOpenAiGlobals();
26
-
27
- const { takeSnapshot } = await renderHookToSnapshotStream(() =>
28
- useToolResponseMetadata()
29
- );
30
-
31
- await expect(takeSnapshot()).resolves.toBeNull();
32
- await expect(takeSnapshot).not.toRerender();
33
- });
34
-
35
- test("reacts to changes in globals", async () => {
36
- stubOpenAiGlobals({ toolResponseMetadata: { initial: true } });
37
-
38
- const { takeSnapshot } = await renderHookToSnapshotStream(() =>
39
- useToolResponseMetadata()
40
- );
41
-
42
- await expect(takeSnapshot()).resolves.toEqual({ initial: true });
43
-
44
- window.openai.toolResponseMetadata = { updated: true };
45
- dispatchStateChange();
46
-
47
- await expect(takeSnapshot()).resolves.toEqual({ updated: true });
48
- await expect(takeSnapshot).not.toRerender();
49
- });
@@ -1,13 +0,0 @@
1
- type UseCallToolResult = <K>(
2
- toolId: string,
3
- variables?: Record<string, unknown> | undefined
4
- ) => Promise<K>;
5
-
6
- export const useCallTool = (): UseCallToolResult => {
7
- const callTool = async (
8
- toolId: string,
9
- variables: Record<string, unknown> | undefined = {}
10
- ) => await window.openai?.callTool(toolId, variables);
11
-
12
- return callTool;
13
- };
@@ -1,11 +0,0 @@
1
- import { useCallback } from "react";
2
- import type { API } from "../../types/openai.js";
3
-
4
- type OpenExternalFn = API<any>["openExternal"];
5
-
6
- export function useOpenExternal() {
7
- return useCallback<OpenExternalFn>(
8
- (...args) => window.openai.openExternal(...args),
9
- []
10
- );
11
- }
@@ -1,7 +0,0 @@
1
- import type { DisplayMode } from "../../types/openai.js";
2
-
3
- export const useRequestDisplayMode = () => {
4
- return async (args: { mode: DisplayMode }) => {
5
- return await window.openai?.requestDisplayMode(args);
6
- };
7
- };
@@ -1,7 +0,0 @@
1
- export const useSendFollowUpMessage = () => {
2
- return async (prompt: string) => {
3
- await window.openai?.sendFollowUpMessage({
4
- prompt,
5
- });
6
- };
7
- };
@@ -1,37 +0,0 @@
1
- import React, { useEffect } from "react";
2
- import { useToolName } from "./useToolName.js";
3
- import { useToolInput } from "./useToolInput.js";
4
- import { useToolUseState } from "../context/ToolUseContext.js";
5
-
6
- export const useToolEffect = (
7
- toolName: string | string[],
8
- effect: (toolInput: any) => void,
9
- deps: React.DependencyList = []
10
- ) => {
11
- const ctx = useToolUseState();
12
- const fullToolName = useToolName();
13
- const toolInput = useToolInput();
14
- if (!ctx)
15
- throw new Error("useToolEffect must be used within ToolUseProvider");
16
-
17
- const toolNames = Array.isArray(toolName) ? toolName : [toolName];
18
-
19
- useEffect(() => {
20
- const matches = toolNames.some(
21
- (name) => fullToolName === `${ctx.appName}--${name}`
22
- );
23
-
24
- if (!ctx.hasNavigated && matches) {
25
- effect(toolInput);
26
- ctx.setHasNavigated(true);
27
- }
28
- }, [
29
- ctx.hasNavigated,
30
- ctx.setHasNavigated,
31
- ctx.appName,
32
- toolNames,
33
- fullToolName,
34
- toolInput,
35
- ...deps,
36
- ]);
37
- };
@@ -1,7 +0,0 @@
1
- import { useOpenAiGlobal } from "./useOpenAiGlobal.js";
2
-
3
- export const useToolInput = (): any => {
4
- const toolInput = useOpenAiGlobal("toolInput");
5
-
6
- return toolInput;
7
- };
@@ -1,7 +0,0 @@
1
- import { useOpenAiGlobal } from "./useOpenAiGlobal.js";
2
-
3
- export const useToolName = (): string | undefined => {
4
- const toolResponseMetadata = useOpenAiGlobal("toolResponseMetadata");
5
-
6
- return toolResponseMetadata?.toolName as string;
7
- };
@@ -1,5 +0,0 @@
1
- import { useOpenAiGlobal } from "./useOpenAiGlobal.js";
2
-
3
- export function useToolOutput() {
4
- return useOpenAiGlobal("toolOutput") ?? null;
5
- }
@@ -1,5 +0,0 @@
1
- import { useOpenAiGlobal } from "./useOpenAiGlobal.js";
2
-
3
- export function useToolResponseMetadata() {
4
- return useOpenAiGlobal("toolResponseMetadata") ?? null;
5
- }
@@ -1,102 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { AbsoluteAssetImportsPlugin } from "../absolute_asset_imports_plugin.js";
3
-
4
- test("Should replace root relative scripts with full url when origin is provided", () => {
5
- const ctx = {
6
- server: {
7
- config: {
8
- server: {
9
- origin: "http://localhost:3000/",
10
- },
11
- },
12
- },
13
- };
14
- const html = `<html><head><script type="module" src="/@vite/client"></script></head><body><script module src="/assets/main.ts?t=12345"></script></body></html>`;
15
- const plugin = AbsoluteAssetImportsPlugin();
16
-
17
- let result = plugin.transformIndexHtml(html, ctx);
18
-
19
- expect(result).toMatchInlineSnapshot(
20
- `"<html><head><script type="module" src="http://localhost:3000/@vite/client"></script></head><body><script module src="http://localhost:3000/assets/main.ts?t=12345"></script></body></html>"`
21
- );
22
- });
23
-
24
- test("Should replace root relative scripts with full url when origin is not provided", () => {
25
- const ctx = {
26
- server: {
27
- resolvedUrls: {
28
- local: ["http://localhost:3000/"],
29
- },
30
- },
31
- };
32
- const html = `<html><head> <script type="module">import { injectIntoGlobalHook } from "/@react-refresh";
33
- injectIntoGlobalHook(window);
34
- window.$RefreshReg$ = () => {};
35
- window.$RefreshSig$ = () => (type) => type;</script></head></html>`;
36
- const plugin = AbsoluteAssetImportsPlugin();
37
-
38
- let result = plugin.transformIndexHtml(html, ctx);
39
-
40
- expect(result).toMatchInlineSnapshot(`
41
- "<html><head> <script type="module">import { injectIntoGlobalHook } from "http://localhost:3000/@react-refresh";
42
- injectIntoGlobalHook(window);
43
- window.$RefreshReg$ = () => {};
44
- window.$RefreshSig$ = () => (type) => type;</script></head></html>"
45
- `);
46
- });
47
-
48
- test("Should replace root relative imports with full url when origin is provided", () => {
49
- const ctx = {
50
- server: {
51
- config: {
52
- server: {
53
- origin: "http://localhost:3000/",
54
- },
55
- },
56
- },
57
- };
58
- const html = `<html><head> <script type="module">import { injectIntoGlobalHook } from "/@react-refresh";
59
- injectIntoGlobalHook(window);
60
- window.$RefreshReg$ = () => {};
61
- window.$RefreshSig$ = () => (type) => type;</script></head></html>`;
62
- const plugin = AbsoluteAssetImportsPlugin();
63
-
64
- let result = plugin.transformIndexHtml(html, ctx);
65
-
66
- expect(result).toMatchInlineSnapshot(`
67
- "<html><head> <script type="module">import { injectIntoGlobalHook } from "http://localhost:3000/@react-refresh";
68
- injectIntoGlobalHook(window);
69
- window.$RefreshReg$ = () => {};
70
- window.$RefreshSig$ = () => (type) => type;</script></head></html>"
71
- `);
72
- });
73
-
74
- test("Should replace root relative imports with full url when origin is not provided", () => {
75
- const ctx = {
76
- server: {
77
- resolvedUrls: {
78
- local: ["http://localhost:3000/"],
79
- },
80
- },
81
- };
82
- const html = `<html><body><script module src="/assets/main.ts?t=12345"></script></body></html>`;
83
- const plugin = AbsoluteAssetImportsPlugin();
84
-
85
- let result = plugin.transformIndexHtml(html, ctx);
86
-
87
- expect(result).toMatchInlineSnapshot(
88
- `"<html><body><script module src="http://localhost:3000/assets/main.ts?t=12345"></script></body></html>"`
89
- );
90
- });
91
-
92
- test("Should not modify html when not running a local server", () => {
93
- const ctx = {};
94
- const html = `<html><head><script type="module" src="/@vite/client"></script></head><body><script module src="/assets/main.ts?t=12345"></script></body></html>`;
95
- const plugin = AbsoluteAssetImportsPlugin();
96
-
97
- let result = plugin.transformIndexHtml(html, ctx);
98
-
99
- expect(result).toMatchInlineSnapshot(
100
- `"<html><head><script type="module" src="/@vite/client"></script></head><body><script module src="/assets/main.ts?t=12345"></script></body></html>"`
101
- );
102
- });