@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
@@ -0,0 +1 @@
1
+ * @apollographql/ai-apps
@@ -78,4 +78,26 @@ jobs:
78
78
 
79
79
  - name: Check types
80
80
  shell: bash
81
- run: npm test
81
+ run: npm test -- --coverage
82
+
83
+ arethetypeswrong:
84
+ name: Are the types wrong
85
+ runs-on: ubuntu-latest
86
+ steps:
87
+ - name: Checkout repo
88
+ uses: actions/checkout@v4
89
+
90
+ - name: Setup Node.js
91
+ uses: actions/setup-node@v4
92
+ with:
93
+ node-version: 24.x
94
+
95
+ - name: Install dependencies
96
+ run: npm ci
97
+
98
+ - name: Run build
99
+ run: npm run build
100
+
101
+ - name: Run AreTheTypesWrong
102
+ id: attw
103
+ run: npm run attw -- --format ascii > $GITHUB_STEP_SUMMARY
@@ -14,7 +14,7 @@ jobs:
14
14
  release:
15
15
  name: Release
16
16
  # Important: Only run this when we've merged a "release/*" PR into main... all other PRs should be skipped.
17
- if: github.repository == 'apollographql/apollo-ai-apps-client' && (github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/'))
17
+ if: github.repository == 'apollographql/apollo-client-ai-apps' && (github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/'))
18
18
  runs-on: ubuntu-latest
19
19
  steps:
20
20
  - uses: actions/checkout@v6
@@ -35,10 +35,6 @@ jobs:
35
35
  shell: bash
36
36
  run: npm run build
37
37
 
38
- - name: Test
39
- shell: bash
40
- run: npm run test
41
-
42
38
  - name: Configure Git
43
39
  run: |
44
40
  git config --global user.name GitHub Actions
@@ -2,11 +2,10 @@ name: Verify Changeset
2
2
  on:
3
3
  pull_request:
4
4
  types: [opened, reopened, synchronize, ready_for_review, labeled]
5
- paths-ignore:
6
- - ".github/**"
7
- - ".vscode/**"
8
- - "docs/**"
9
- - "*.md"
5
+ paths:
6
+ - "src/**"
7
+ - "tsconfig.*"
8
+ - "package.json"
10
9
  workflow_dispatch:
11
10
 
12
11
  jobs:
@@ -32,27 +31,119 @@ jobs:
32
31
  f.filename.startsWith(dir) &&
33
32
  ['added','modified','renamed'].includes(f.status)
34
33
  );
35
- if (!ok) {
36
- core.setFailed(`No changeset added to ${dir}.`);
37
- } else {
34
+ if (ok) {
38
35
  core.info(`Changeset found under ${dir}.`);
36
+ } else {
37
+ core.setFailed(`No changeset added to ${dir}.`);
39
38
  }
40
39
  core.setOutput('ok', ok ? 'true' : 'false');
41
- - name: Add changeset missing comment on failure
40
+ - name: Add or update changeset comment on failure
42
41
  uses: actions/github-script@v7
43
42
  if: failure()
44
43
  with:
45
44
  script: |
46
45
  const pr = context.payload.pull_request;
47
- await github.rest.issues.createComment({
48
- owner: context.repo.owner,
49
- repo: context.repo.repo,
50
- issue_number: pr.number,
51
- body: [
52
- " **Changeset file missing for PR**",
53
- "",
54
- "All changes should include an associated changeset file.",
55
- "If this change does not require a changeset, please tag this PR with the `skip-changeset` tag.",
56
- "Please use `knope document-change` to create a changeset. (installation instructions: https://knope.tech/installation/)"
57
- ].join("\n")
58
- });
46
+ const marker = '<!-- changeset-bot-comment -->';
47
+ const body = [
48
+ marker,
49
+ "❌ **Changeset file missing for PR**",
50
+ "",
51
+ "All changes should include an associated changeset file.",
52
+ "Please use `knope document-change` to create a changeset. (installation instructions: https://knope.tech/installation/)"
53
+ ].join("\n");
54
+
55
+ const comments = await github.paginate(
56
+ github.rest.issues.listComments,
57
+ { owner: context.repo.owner, repo: context.repo.repo, issue_number: pr.number }
58
+ );
59
+ const existing = comments.find(c => c.body.includes(marker));
60
+
61
+ if (existing) {
62
+ await github.rest.issues.updateComment({
63
+ owner: context.repo.owner,
64
+ repo: context.repo.repo,
65
+ comment_id: existing.id,
66
+ body: body
67
+ });
68
+ } else {
69
+ await github.rest.issues.createComment({
70
+ owner: context.repo.owner,
71
+ repo: context.repo.repo,
72
+ issue_number: pr.number,
73
+ body: body
74
+ });
75
+ }
76
+
77
+ - name: Add or update changeset comment on success
78
+ uses: actions/github-script@v7
79
+ if: success()
80
+ with:
81
+ script: |
82
+ const pr = context.payload.pull_request;
83
+ const marker = '<!-- changeset-bot-comment -->';
84
+ const body = [
85
+ marker,
86
+ "✅ **Changeset file added - thank you!**"
87
+ ].join("\n");
88
+
89
+ const comments = await github.paginate(
90
+ github.rest.issues.listComments,
91
+ { owner: context.repo.owner, repo: context.repo.repo, issue_number: pr.number }
92
+ );
93
+ const existing = comments.find(c => c.body.includes(marker));
94
+
95
+ if (existing) {
96
+ await github.rest.issues.updateComment({
97
+ owner: context.repo.owner,
98
+ repo: context.repo.repo,
99
+ comment_id: existing.id,
100
+ body: body
101
+ });
102
+ } else {
103
+ await github.rest.issues.createComment({
104
+ owner: context.repo.owner,
105
+ repo: context.repo.repo,
106
+ issue_number: pr.number,
107
+ body: body
108
+ });
109
+ }
110
+
111
+ handle-skip-label:
112
+ if: ${{ contains(github.event.pull_request.labels.*.name, 'skip-changeset') && github.head_ref != 'release' && !startsWith(github.head_ref, 'release/') && !startsWith(github.head_ref, 'conflict/') && !github.event.pull_request.draft }}
113
+ name: Handle Skip Label
114
+ runs-on: ubuntu-24.04
115
+ permissions:
116
+ pull-requests: write
117
+ steps:
118
+ - name: Add or update comment to show skipped
119
+ uses: actions/github-script@v7
120
+ with:
121
+ script: |
122
+ const pr = context.payload.pull_request;
123
+ const marker = '<!-- changeset-bot-comment -->';
124
+ const body = [
125
+ marker,
126
+ "⏭️ **Changeset check skipped via label**"
127
+ ].join("\n");
128
+
129
+ const comments = await github.paginate(
130
+ github.rest.issues.listComments,
131
+ { owner: context.repo.owner, repo: context.repo.repo, issue_number: pr.number }
132
+ );
133
+ const existing = comments.find(c => c.body.includes(marker));
134
+
135
+ if (existing) {
136
+ await github.rest.issues.updateComment({
137
+ owner: context.repo.owner,
138
+ repo: context.repo.repo,
139
+ comment_id: existing.id,
140
+ body: body
141
+ });
142
+ } else {
143
+ await github.rest.issues.createComment({
144
+ owner: context.repo.owner,
145
+ repo: context.repo.repo,
146
+ issue_number: pr.number,
147
+ body: body
148
+ });
149
+ }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,419 @@
1
+ ## 0.5.0 (2026-02-19)
2
+
3
+ ### Breaking Changes
4
+
5
+ #### Introduce compatibility with MCP Apps
6
+
7
+ This change introduces compatibility with the [MCP Apps specification](https://github.com/modelcontextprotocol/ext-apps/blob/a815f31392555b1434ebf9a65a15dd4a7bde3fd6/specification/draft/apps.mdx). As a result, it is now possible to build your apps targeting both ChatGPT apps and MCP Apps.
8
+
9
+ ### Vite plugin
10
+
11
+ A new `apolloClientAiApps` combines existing plugins (`ApplicationManifestPlugin` and `AbsoluteAssetImportsPlugin`) into a single plugin. It requires a `targets` option specifying which platforms to build for, and an optional `devTarget` for development mode when using multiple targets.
12
+
13
+ ```ts
14
+ import { apolloClientAiApps } from "@apollo/client-ai-apps/vite";
15
+
16
+ export default defineConfig({
17
+ plugins: [
18
+ apolloClientAiApps({
19
+ targets: ["openai", "mcp"],
20
+ devTarget: "openai",
21
+ }),
22
+ ],
23
+ });
24
+ ```
25
+
26
+ When building, the plugin produces separate outputs per target.
27
+
28
+ ### Conditional exports
29
+
30
+ Platform-specific code is now gated behind [conditional exports](https://nodejs.org/api/packages.html#conditional-exports) to reduce the possibility for error when building for a specific platform. As such, two new platform-specific entrypoints are now available:
31
+
32
+ - `@apollo/client-ai-apps/mcp`
33
+ - `@apollo/client-ai-apps/openai`
34
+
35
+ Any available root-level exports that contain platform-specific code (e.g. `ApolloClient`, `ToolCallLink`) are provided behind conditional exports to ensure the right implementation is selected at build.
36
+
37
+ ### New optional peer dependency
38
+
39
+ `@modelcontextprotocol/ext-apps` (^0.4.0) is now an optional peer dependency. This is required when you choose to build MCP apps.
40
+
41
+ ### Extendable TypeScript configs
42
+
43
+ Extendable TypeScript configurations are now available for each platform:
44
+
45
+ - `@apollo/client-ai-apps/tsconfig/core`
46
+ - `@apollo/client-ai-apps/tsconfig/mcp`
47
+ - `@apollo/client-ai-apps/tsconfig/openai`
48
+
49
+ ### Breaking changes
50
+
51
+ #### OpenAI hooks and types removed from root export
52
+
53
+ All OpenAI-specific hooks and types have been removed from the root `@apollo/client-ai-apps` entrypoint. Import them from `@apollo/client-ai-apps/openai` instead.
54
+
55
+ ```diff
56
+ - import { useToolName, useToolInput, useToolOutput } from "@apollo/client-ai-apps";
57
+ + import { useToolName, useToolInput, useToolOutput } from "@apollo/client-ai-apps/openai";
58
+ ```
59
+
60
+ #### ApolloProvider is now Suspense-based
61
+
62
+ `ApolloProvider` now uses React Suspense to await client initialization. Wrap `ApolloProvider` in a `Suspense` component to show a loading state while the client is initializing.
63
+
64
+ ```tsx
65
+ import { Suspense } from "react";
66
+ import { ApolloProvider } from "@apollo/client-ai-apps";
67
+
68
+ render(
69
+ <Suspense fallback={<Spinner />}>
70
+ <ApolloProvider client={client}>
71
+ <App />
72
+ <ApolloProvider />
73
+ </Suspense>
74
+ );
75
+ ```
76
+
77
+ #### Changes to vite plugins
78
+
79
+ The `ApplicationManifestPlugin` and `AbsoluteAssetImportsPlugin` have been combined with the `apolloClientAiApps` plugin and are no longer available as individual plugins. Please remove these plugins from your vite config and use the `apolloClientAiApps` plugin instead.
80
+
81
+ ```diff
82
+ // vite.config.ts
83
+ import {
84
+ - ApplicationManifestPlugin,
85
+ - AbsoluteAssetImportsPlugin,
86
+ + apolloClientAiApps
87
+ } from "@apollo/client-ai-apps/vite";
88
+
89
+ export default defineConfig({
90
+ // ...
91
+ plugins: [
92
+ - ApplicationManifestPlugin(),
93
+ - AbsoluteAssetImportsPlugin(),
94
+ + apolloClientAiApps({ targets: [/* define targets here */] }),
95
+ ],
96
+ });
97
+ ```
98
+
99
+ #### Load configuration with cosmiconfig
100
+
101
+ Apps config is now loaded via [cosmiconfig](https://github.com/cosmiconfig/cosmiconfig). As a result, config defined in `package.json` MUST be defined under the `apollo-client-ai-apps` key.
102
+
103
+ ```diff
104
+ // package.json
105
+ {
106
+ // ...
107
+ - "csp": {
108
+ - "connectDomains": ["https://example.com"]
109
+ - }
110
+ + "apollo-client-ai-apps": {
111
+ + "csp": {
112
+ + "connectDomains": ["https://example.com"]
113
+ + }
114
+ + }
115
+ }
116
+ ```
117
+
118
+ Configuration can be loaded from the following files:
119
+
120
+ - `.apollo-client-ai-apps.config.json`
121
+ - `apollo-client-ai-apps.config.json`
122
+ - `.apollo-client-ai-apps.config.yml`
123
+ - `apollo-client-ai-apps.config.yml`
124
+ - `.apollo-client-ai-apps.config.yaml`
125
+ - `apollo-client-ai-apps.config.yaml`
126
+ - `.apollo-client-ai-apps.config.js`
127
+ - `apollo-client-ai-apps.config.js`
128
+ - `.apollo-client-ai-apps.config.ts`
129
+ - `apollo-client-ai-apps.config.ts`
130
+ - `.apollo-client-ai-apps.config.cjs`
131
+ - `apollo-client-ai-apps.config.cjs`
132
+ - A `apollo-client-ai-apps` key in package.json
133
+
134
+ ### Type-safe configuration
135
+
136
+ A `defineConfig` helper is now available to export type-safe configuration when using a `config.ts` file (recommended).
137
+
138
+ ```ts
139
+ // apollo-client-ai-apps.config.ts
140
+ import { defineConfig } from "@apollo/client-ai-apps/config";
141
+
142
+ export default defineConfig({
143
+ csp: {
144
+ connectDomains: ["https://example.com"],
145
+ },
146
+ });
147
+ ```
148
+
149
+ Alternatively you may use the type directly:
150
+
151
+ ```ts
152
+ // apollo-client-ai-apps.config.ts
153
+ import type { ApolloClientAiAppsConfig } from "@apollo/client-ai-apps/config";
154
+
155
+ const config: ApolloClientAiAppsConfig.Config = {
156
+ csp: {
157
+ connectDomains: ["https://example.com"],
158
+ },
159
+ };
160
+
161
+ export default config;
162
+ ```
163
+
164
+ #### Move React-related exports to `/react` entry point
165
+
166
+ Move all React-related exports to `/react` entry point. This ensures apps that built on top of the core APIs do not have to install and use the `react` package. In addition, platform-specific `/react` entry points have been added in order to use platform-specific hooks:
167
+
168
+ - `@apollo/client-ai-apps/react` - Shared React utilities for both platforms
169
+ - `@apollo/client-ai-apps/openai/react` - OpenAI specific React utilities
170
+ - `@apollo/client-ai-apps/mcp/react` - MCP Apps specific React utilities
171
+
172
+ This change means the `react` and `react-dom` packages are now marked as optional peer dependencies.
173
+
174
+ #### Removal of hooks from `/openai` entrypoint
175
+
176
+ The following hooks have been removed from `@apollo/client-ai-apps/openai`.
177
+
178
+ **`useOpenAiGlobal`**
179
+
180
+ This hook is now an internal-only hook. If you use `window.openai` directly and
181
+ need to listen for changes to properties, setup an event listener to listen for
182
+ changes to global values.
183
+
184
+ **`useSendFollowupMessage`**
185
+
186
+ Use the `App` instance returned by `useApp()` to send followup messages.
187
+
188
+ ```diff
189
+ import {
190
+ - useSendFollowupMessage,
191
+ + useApp
192
+ } from "@apollo/client-ai-apps/openai";
193
+
194
+ function MyComponent() {
195
+ - const sendFollowupMessage = useSendFollowupMessage();
196
+ + const app = useApp();
197
+
198
+ function sendMessage() {
199
+ - sendFollowupMessage({ prompt: "..." });
200
+ + app.sendMessage({
201
+ + role: "user",
202
+ + content: [{ type: "text", text: "..." }]
203
+ + });
204
+ }
205
+ }
206
+ ```
207
+
208
+ **`useRequestDisplayMode`**
209
+
210
+ Use the `App` instance returned by `useApp()` to request changes to display mode.
211
+
212
+ ```diff
213
+ import {
214
+ - useRequestDisplayMode,
215
+ + useApp
216
+ } from "@apollo/client-ai-apps/openai";
217
+
218
+ function MyComponent() {
219
+ - const requestDisplayMode = useRequestDisplayMode();
220
+ + const app = useApp();
221
+
222
+ function changeDisplayMode() {
223
+ - requestDisplayMode({ mode: "fullscreen" });
224
+ + app.requestDisplayMode({ mode: "fullscreen" });
225
+ }
226
+ }
227
+ ```
228
+
229
+ **`useOpenExternal`**
230
+
231
+ Use the `App` instance returned by `useApp()` to open external links.
232
+
233
+ ```diff
234
+ import {
235
+ - useOpenExternal,
236
+ + useApp
237
+ } from "@apollo/client-ai-apps/openai";
238
+
239
+ function MyComponent() {
240
+ - const openLink = useOpenExternal();
241
+ + const app = useApp();
242
+
243
+ function changeDisplayMode() {
244
+ - openLink({ href: "https://example.com" });
245
+ + app.openLink({ url: "https://example.com" });
246
+ }
247
+ }
248
+ ```
249
+
250
+ **`useCallTool`**
251
+
252
+ Use the `App` instance returned by `useApp()` to call tools directly.
253
+
254
+ ```diff
255
+ import {
256
+ - useCallTool,
257
+ + useApp
258
+ } from "@apollo/client-ai-apps/openai";
259
+
260
+ function MyComponent() {
261
+ - const callTool = useCallTool();
262
+ + const app = useApp();
263
+
264
+ async function changeDisplayMode() {
265
+ - await callTool("...", params)
266
+ + app.callServerTool({ name: "...", arguments: params });
267
+ }
268
+ }
269
+ ```
270
+
271
+ **`useToolOutput`**
272
+
273
+ Apollo Client uses the tool output to populate the cache. Use the `data` property returned from Apollo Client query hooks instead `useToolOutput`.
274
+
275
+ ### Rename of `useToolResponseMetadata`
276
+
277
+ To better align with the equivalent MCP app hook, `useToolResponseMetadata` has been renamed to `useToolMetadata` and now requires `ApolloClient` in React context to function.
278
+
279
+ #### Remove `useToolEffect` hook
280
+
281
+ Removes the `useToolEffect` hook from `@apollo/client-ai-apps/openai`. This change also removes `ToolUseProvider` as it is no longer used by any remaining hook.
282
+
283
+ #### Updates `openai` related exports to work the the MCP Apps host bridge
284
+
285
+ Uses the MCP Apps host bridge to communicate with the OpenAI host, falling back to `window.openai` where necessary.
286
+
287
+ This change affects both the `useToolName` and `useToolResponseMetadata` hooks exported in `@apollo/client-ai-apps/openai` which now require the use of the `client` in the `ApolloProvider` context.
288
+
289
+ ### Features
290
+
291
+ #### Add a new `Platform` utility
292
+
293
+ Adds a new `Platform` utility that makes it easier to detect the current platform. Useful when needing to select a value based on the current platform in a shared component.
294
+
295
+ ```tsx
296
+ import { Platform } from "@apollo/client-ai-apps";
297
+
298
+ // `Platform.target` returns the current target ("openai" or "mcp")
299
+ // `Platform.select` returns the value based on the current target. The value
300
+ // can by anything.
301
+ <div
302
+ style={{
303
+ border: Platform.select({ mcp: "1px solid red", openai: "1px solid blue" }),
304
+ }}
305
+ >
306
+ {Platform.target}
307
+ </div>;
308
+ ```
309
+
310
+ #### Add a `useToolInput` hook for the `/mcp` entrypoint
311
+
312
+ Adds a `useToolInput` to get the tool input value.
313
+
314
+ #### App version now configured
315
+
316
+ The MCP app version is now configured in the manifest and is set by the version your `package.json` file.
317
+
318
+ #### Apps config now parsed with zod
319
+
320
+ The apps config and directive inputs are now parsed and validated with [`zod`](https://zod.dev/). Validation is now more strict and does not allow additional properties that don't exist in the validation schemas. Additionally, you may see a change in the format of the error message if a validation error occurs.
321
+
322
+ #### Export shared hooks in top-level entry point
323
+
324
+ Common hooks used in the `/openai` and `/mcp` entry points are now exported from the top-level entry point. These include the following:
325
+
326
+ - `useApp`
327
+ - `useToolInput`
328
+ - `useToolMetadata`
329
+ - `useToolName`
330
+
331
+ #### Support for platform-specific entry point config
332
+
333
+ You can now provide a custom entry for a specific target. In your `package.json`:
334
+
335
+ ```json
336
+ {
337
+ "entry": {
338
+ "production": {
339
+ "mcp": "https://mcp.example.com",
340
+ "openai": "https://openai.example.com"
341
+ }
342
+ }
343
+ }
344
+ ```
345
+
346
+ The MCP app version is now configured by the version your `package.json` file
347
+
348
+ ### Fixes
349
+
350
+ #### Remove the app prefix when matching tool names.
351
+
352
+ The app prefix has been removed in tool names from the MCP server, so we no longer need to match against tool names with the app prefix.
353
+
354
+ ## 0.4.0 (2026-01-15)
355
+
356
+ ### Breaking Changes
357
+
358
+ #### Make `@apollo/client` a peer dependency
359
+
360
+ `@apollo/client` is now a peer dependency and must be installed along with this package.
361
+
362
+ `@apollo/client` exports have also been removed from this package and should be imported from `@apollo/client` instead.
363
+
364
+ ```diff
365
+ - import { useQuery } from "@apollo/client-ai-apps";
366
+ + import { useQuery } from "@apollo/client";
367
+ ```
368
+
369
+ ### Features
370
+
371
+ #### Support additional CSP settings
372
+
373
+ Add support for `frameDomains` and `redirectDomains` in CSP settings.
374
+
375
+ #### Support `toolInvocation` labels
376
+
377
+ Add support for `labels` config for both `package.json` and `@tool` directives.
378
+
379
+ ```ts
380
+ // package.json
381
+ {
382
+ "labels": {
383
+ "toolInvocation": {
384
+ "invoking": "Invoking...",
385
+ "invoked": "Invoked!"
386
+ }
387
+ }
388
+ }
389
+ ```
390
+
391
+ ```gql
392
+ query {
393
+ MyQuery
394
+ @tool(
395
+ name: "MyQuery"
396
+ description: "..."
397
+ labels: {
398
+ toolInvocation: { invoking: "Invoking...", invoked: "Invoked!" }
399
+ }
400
+ ) {
401
+ myField
402
+ }
403
+ }
404
+ ```
405
+
406
+ These labels map to the following MCP server config:
407
+
408
+ - `toolInvocation.invoking` -> `toolInvocation/invoking`
409
+ - `toolInvocation.invoked` -> `toolInvocation/invoked`
410
+
411
+ ### Fixes
412
+
413
+ #### Updated `react` and `react-dom` peer dependency versions
414
+
415
+ The `react` and `react-dom` peer dependency versions have been loosened to `^19.0.0`.
416
+
1
417
  ## 0.3.3 (2026-01-13)
2
418
 
3
419
  ### Features
@@ -0,0 +1,3 @@
1
+ const { fs } = require("memfs");
2
+
3
+ module.exports = fs.promises;
@@ -0,0 +1,3 @@
1
+ const { fs } = require("memfs");
2
+
3
+ module.exports = fs;
@@ -0,0 +1,26 @@
1
+ import type { ApolloClientAiAppsConfig } from "./types.js";
2
+ /**
3
+ * Helper type that makes it easier to define app configuration
4
+ */
5
+ export declare function defineConfig(config: ApolloClientAiAppsConfig.Config): {
6
+ name?: string;
7
+ description?: string;
8
+ version?: string;
9
+ entry?: Partial<Record<"development" | "production" | (string & {}), string | Partial<Record<"mcp" | "openai", string>>>>;
10
+ csp?: {
11
+ connectDomains?: string[];
12
+ frameDomains?: string[];
13
+ redirectDomains?: string[];
14
+ resourceDomains?: string[];
15
+ };
16
+ widgetSettings?: {
17
+ prefersBorder?: boolean;
18
+ description?: string;
19
+ domain?: string;
20
+ };
21
+ labels?: {
22
+ "toolInvocation/invoking"?: string;
23
+ "toolInvocation/invoked"?: string;
24
+ };
25
+ };
26
+ //# sourceMappingURL=defineConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineConfig.d.ts","sourceRoot":"","sources":["../../src/config/defineConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,wBAAwB,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;EAEnE"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Helper type that makes it easier to define app configuration
3
+ */
4
+ export function defineConfig(config) {
5
+ return config;
6
+ }
7
+ //# sourceMappingURL=defineConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineConfig.js","sourceRoot":"","sources":["../../src/config/defineConfig.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import type { ApolloClientAiAppsConfig } from \"./types.js\";\n\n/**\n * Helper type that makes it easier to define app configuration\n */\nexport function defineConfig(config: ApolloClientAiAppsConfig.Config) {\n return config;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export type { ApolloClientAiAppsConfig } from "./types.js";
2
+ export { defineConfig } from "./defineConfig.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { defineConfig } from "./defineConfig.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["export type { ApolloClientAiAppsConfig } from \"./types.js\";\nexport { defineConfig } from \"./defineConfig.js\";\n"]}