@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,22 +0,0 @@
1
- export const AbsoluteAssetImportsPlugin = () => {
2
- return {
3
- name: "absolute-asset-imports",
4
-
5
- transformIndexHtml(html: string, ctx: any) {
6
- if (!ctx.server) return html;
7
-
8
- let baseUrl = (
9
- ctx.server.config?.server?.origin ?? ctx.server.resolvedUrls?.local[0]
10
- ).replace(/\/$/, "");
11
- baseUrl = baseUrl.replace(/\/$/, "");
12
-
13
- return (
14
- html
15
- // import "/@vite/..." or "/@react-refresh"
16
- .replace(/(from\s+["'])\/([^"']+)/g, `$1${baseUrl}/$2`)
17
- // src="/src/..."
18
- .replace(/(src=["'])\/([^"']+)/gi, `$1${baseUrl}/$2`)
19
- );
20
- },
21
- };
22
- };
@@ -1,443 +0,0 @@
1
- import { readFileSync, writeFileSync, mkdirSync } from "fs";
2
- import { glob } from "glob";
3
- import { gqlPluckFromCodeStringSync } from "@graphql-tools/graphql-tag-pluck";
4
- import { createHash } from "crypto";
5
- import type {
6
- ArgumentNode,
7
- ListTypeNode,
8
- NamedTypeNode,
9
- NonNullTypeNode,
10
- TypeNode,
11
- ValueNode,
12
- DocumentNode,
13
- OperationDefinitionNode,
14
- DirectiveNode,
15
- } from "graphql";
16
- import { Kind, parse, print } from "graphql";
17
- import { ApolloClient, ApolloLink, InMemoryCache } from "@apollo/client";
18
- import { removeDirectivesFromDocument } from "@apollo/client/utilities/internal";
19
- import { of } from "rxjs";
20
- import path from "path";
21
- import type {
22
- ApplicationManifest,
23
- ManifestExtraInput,
24
- ManifestTool,
25
- ManifestWidgetSettings,
26
- } from "../types/application-manifest.js";
27
-
28
- const root = process.cwd();
29
-
30
- function getRawValue(node: ValueNode): unknown {
31
- switch (node.kind) {
32
- case Kind.STRING:
33
- case Kind.BOOLEAN:
34
- return node.value;
35
- case Kind.LIST:
36
- return node.values.map(getRawValue);
37
- case Kind.OBJECT:
38
- return node.fields.reduce<Record<string, any>>((acc, field) => {
39
- acc[field.name.value] = getRawValue(field.value);
40
- return acc;
41
- }, {});
42
- default:
43
- throw new Error(
44
- `Error when parsing directive values: unexpected type '${node.kind}'`
45
- );
46
- }
47
- }
48
-
49
- function getArgumentValue(
50
- argument: ArgumentNode,
51
- expectedType: Kind.STRING
52
- ): string;
53
-
54
- function getArgumentValue(
55
- argument: ArgumentNode,
56
- expectedType: Kind.BOOLEAN
57
- ): boolean;
58
-
59
- function getArgumentValue(
60
- argument: ArgumentNode,
61
- expectedType: Kind.LIST
62
- ): unknown[];
63
-
64
- function getArgumentValue(
65
- argument: ArgumentNode,
66
- expectedType: Kind.OBJECT
67
- ): Record<string, unknown>;
68
-
69
- function getArgumentValue(argument: ArgumentNode, expectedType: Kind) {
70
- const argumentType = argument.value.kind;
71
-
72
- invariant(
73
- argumentType === expectedType,
74
- `Expected argument '${argument.name.value}' to be of type '${expectedType}' but found '${argumentType}' instead.`
75
- );
76
-
77
- return getRawValue(argument.value);
78
- }
79
-
80
- interface GetArgumentNodeOptions {
81
- required?: boolean;
82
- }
83
-
84
- function getDirectiveArgument(
85
- argumentName: string,
86
- directive: DirectiveNode,
87
- opts: GetArgumentNodeOptions & { required: true }
88
- ): ArgumentNode;
89
-
90
- function getDirectiveArgument(
91
- argumentName: string,
92
- directive: DirectiveNode,
93
- opts?: GetArgumentNodeOptions
94
- ): ArgumentNode | undefined;
95
-
96
- function getDirectiveArgument(
97
- argumentName: string,
98
- directive: DirectiveNode,
99
- { required = false }: { required?: boolean } = {}
100
- ) {
101
- const argument = directive.arguments?.find(
102
- (directiveArgument) => directiveArgument.name.value === argumentName
103
- );
104
-
105
- invariant(
106
- argument || !required,
107
- `'${argumentName}' argument must be supplied for @tool`
108
- );
109
-
110
- return argument;
111
- }
112
-
113
- function getTypeName(type: TypeNode): string {
114
- let t = type;
115
- while (t.kind === "NonNullType" || t.kind === "ListType") {
116
- t = (t as NonNullTypeNode | ListTypeNode).type;
117
- }
118
- return (t as NamedTypeNode).name.value;
119
- }
120
-
121
- export const ApplicationManifestPlugin = () => {
122
- const cache = new Map();
123
- let packageJson: any = null;
124
- let config: any = null;
125
-
126
- const clientCache = new InMemoryCache();
127
- const client = new ApolloClient({
128
- cache: clientCache,
129
- link: new ApolloLink((operation) => {
130
- const body = print(
131
- removeClientDirective(sortTopLevelDefinitions(operation.query))
132
- );
133
- const name = operation.operationName;
134
- const definition = operation.query.definitions.find(
135
- (d) => d.kind === "OperationDefinition"
136
- );
137
-
138
- // Use `operation.query` so that the error reflects the end-user defined
139
- // document, not our sorted one
140
- invariant(
141
- definition,
142
- `Document does not contain an operation:\n${print(operation.query)}`
143
- );
144
-
145
- const { directives, operation: type } = definition;
146
-
147
- const variables = definition.variableDefinitions?.reduce(
148
- (obj, varDef) => ({
149
- ...obj,
150
- [varDef.variable.name.value]: getTypeName(varDef.type),
151
- }),
152
- {}
153
- );
154
-
155
- const prefetch = directives?.some((d) => d.name.value === "prefetch");
156
- const id = createHash("sha256").update(body).digest("hex");
157
- // TODO: For now, you can only have 1 operation marked as prefetch. In the future, we'll likely support more than 1, and the "prefetchId" will be defined on the `@prefetch` itself as an argument
158
- const prefetchID = prefetch ? "__anonymous" : undefined;
159
-
160
- const tools = directives
161
- ?.filter((d) => d.name.value === "tool")
162
- .map((directive) => {
163
- const name = getArgumentValue(
164
- getDirectiveArgument("name", directive, { required: true }),
165
- Kind.STRING
166
- );
167
-
168
- invariant(
169
- name.indexOf(" ") === -1,
170
- `Tool with name "${name}" contains spaces which is not allowed.`
171
- );
172
-
173
- const description = getArgumentValue(
174
- getDirectiveArgument("description", directive, { required: true }),
175
- Kind.STRING
176
- );
177
-
178
- const extraInputsNode = getDirectiveArgument(
179
- "extraInputs",
180
- directive
181
- );
182
-
183
- const toolOptions: ManifestTool = {
184
- name,
185
- description,
186
- };
187
-
188
- if (extraInputsNode) {
189
- toolOptions.extraInputs = getArgumentValue(
190
- extraInputsNode,
191
- Kind.LIST
192
- ) as ManifestExtraInput[];
193
- }
194
-
195
- return toolOptions;
196
- });
197
-
198
- // TODO: Make this object satisfy the `ManifestOperation` type. Currently
199
- // it errors because we need more validation on a few of these fields
200
- return of({
201
- data: { id, name, type, body, variables, prefetch, prefetchID, tools },
202
- });
203
- }),
204
- });
205
-
206
- const processFile = async (file: string) => {
207
- const code = readFileSync(file, "utf-8");
208
-
209
- if (!code.includes("gql")) return;
210
-
211
- const fileHash = createHash("md5").update(code).digest("hex");
212
- if (cache.get("file")?.hash === fileHash) return;
213
- const sources = gqlPluckFromCodeStringSync(file, code, {
214
- modules: [
215
- { name: "graphql-tag", identifier: "gql" },
216
- { name: "@apollo/client", identifier: "gql" },
217
- ],
218
- }).map((source) => ({
219
- node: parse(source.body),
220
- file,
221
- location: source.locationOffset,
222
- }));
223
-
224
- const operations = [];
225
- for (const source of sources) {
226
- const type = (
227
- source.node.definitions.find(
228
- (d) => d.kind === "OperationDefinition"
229
- ) as OperationDefinitionNode
230
- ).operation;
231
-
232
- let result;
233
- if (type === "query") {
234
- result = await client.query({
235
- query: source.node,
236
- fetchPolicy: "no-cache",
237
- });
238
- } else if (type === "mutation") {
239
- result = await client.mutate({
240
- mutation: source.node,
241
- fetchPolicy: "no-cache",
242
- });
243
- } else {
244
- throw new Error(
245
- "Found an unsupported operation type. Only Query and Mutation are supported."
246
- );
247
- }
248
- operations.push(result.data);
249
- }
250
-
251
- cache.set(file, {
252
- file: file,
253
- hash: fileHash,
254
- operations,
255
- });
256
- };
257
-
258
- const generateManifest = async () => {
259
- const operations = Array.from(cache.values()).flatMap(
260
- (entry) => entry.operations
261
- );
262
-
263
- invariant(
264
- operations.filter((o) => o.prefetch).length <= 1,
265
- "Found multiple operations marked as `@prefetch`. You can only mark 1 operation with `@prefetch`."
266
- );
267
-
268
- let resource = "";
269
- if (config.command === "serve") {
270
- resource =
271
- packageJson.entry?.[config.mode] ??
272
- `http${config.server.https ? "s" : ""}://${config.server.host ?? "localhost"}:${config.server.port}`;
273
- } else {
274
- let entryPoint = packageJson.entry?.[config.mode];
275
- if (entryPoint) {
276
- resource = entryPoint;
277
- } else if (config.mode === "production") {
278
- resource = "index.html";
279
- } else {
280
- throw new Error(
281
- `No entry point found for mode "${config.mode}". Entry points other than "development" and "production" must be defined in package.json file.`
282
- );
283
- }
284
- }
285
-
286
- const manifest: ApplicationManifest = {
287
- format: "apollo-ai-app-manifest",
288
- version: "1",
289
- name: packageJson.name,
290
- description: packageJson.description,
291
- hash: createHash("sha256").update(Date.now().toString()).digest("hex"),
292
- operations: Array.from(cache.values()).flatMap(
293
- (entry) => entry.operations
294
- ),
295
- resource,
296
- csp: {
297
- connectDomains: packageJson.csp?.connectDomains ?? [],
298
- resourceDomains: packageJson.csp?.resourceDomains ?? [],
299
- },
300
- };
301
-
302
- if (
303
- packageJson.widgetSettings &&
304
- Object.keys(packageJson.widgetSettings).length > 0
305
- ) {
306
- function validateWidgetSetting(
307
- key: keyof ManifestWidgetSettings,
308
- type: "string" | "boolean"
309
- ) {
310
- if (key in widgetSettings) {
311
- invariant(
312
- typeof widgetSettings[key] === type,
313
- `Expected 'widgetSettings.${key}' to be of type '${type}' but found '${typeof widgetSettings[key]}' instead.`
314
- );
315
- }
316
- }
317
-
318
- const widgetSettings =
319
- packageJson.widgetSettings as ManifestWidgetSettings;
320
-
321
- validateWidgetSetting("prefersBorder", "boolean");
322
- validateWidgetSetting("description", "string");
323
- validateWidgetSetting("domain", "string");
324
-
325
- manifest.widgetSettings = packageJson.widgetSettings;
326
- }
327
-
328
- // Always write to build directory so the MCP server picks it up
329
- const dest = path.resolve(
330
- root,
331
- config.build.outDir,
332
- ".application-manifest.json"
333
- );
334
- mkdirSync(path.dirname(dest), { recursive: true });
335
- writeFileSync(dest, JSON.stringify(manifest));
336
-
337
- // Always write to the dev location so that the app can bundle the manifest content
338
- writeFileSync(".application-manifest.json", JSON.stringify(manifest));
339
- };
340
-
341
- return {
342
- name: "OperationManifest",
343
-
344
- async configResolved(resolvedConfig: any) {
345
- config = resolvedConfig;
346
- },
347
-
348
- async buildStart() {
349
- // Read package.json on start
350
- packageJson = JSON.parse(readFileSync("package.json", "utf-8"));
351
-
352
- // Scan all files on startup
353
- const files = await glob("src/**/*.{ts,tsx,js,jsx}");
354
-
355
- for (const file of files) {
356
- const fullPath = path.resolve(root, file);
357
- await processFile(fullPath);
358
- }
359
-
360
- // We don't want to do this here on builds cause it just gets overwritten anyways. We'll call it on writeBundle instead.
361
- if (config.command === "serve") {
362
- await generateManifest();
363
- }
364
- },
365
-
366
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
367
- configureServer(server: any) {
368
- server.watcher.on("change", async (file: string) => {
369
- if (file.endsWith("package.json")) {
370
- packageJson = JSON.parse(readFileSync("package.json", "utf-8"));
371
- await generateManifest();
372
- } else if (file.match(/\.(jsx?|tsx?)$/)) {
373
- await processFile(file);
374
- await generateManifest();
375
- }
376
- });
377
- },
378
-
379
- async writeBundle() {
380
- await generateManifest();
381
- },
382
- };
383
- };
384
-
385
- // Sort the definitions in this document so that operations come before fragments,
386
- // and so that each kind of definition is sorted by name.
387
- export function sortTopLevelDefinitions(query: DocumentNode): DocumentNode {
388
- const definitions = [...query.definitions];
389
- // We want to avoid unnecessary dependencies, so write out a comparison
390
- // function instead of using _.orderBy.
391
- definitions.sort((a, b) => {
392
- // This is a reverse sort by kind, so that OperationDefinition precedes FragmentDefinition.
393
- if (a.kind > b.kind) {
394
- return -1;
395
- }
396
- if (a.kind < b.kind) {
397
- return 1;
398
- }
399
-
400
- // Extract the name from each definition. Jump through some hoops because
401
- // non-executable definitions don't have to have names (even though any
402
- // DocumentNode actually passed here should only have executable
403
- // definitions).
404
- const aName =
405
- a.kind === "OperationDefinition" || a.kind === "FragmentDefinition" ?
406
- (a.name?.value ?? "")
407
- : "";
408
- const bName =
409
- b.kind === "OperationDefinition" || b.kind === "FragmentDefinition" ?
410
- (b.name?.value ?? "")
411
- : "";
412
-
413
- // Sort by name ascending.
414
- if (aName < bName) {
415
- return -1;
416
- }
417
- if (aName > bName) {
418
- return 1;
419
- }
420
-
421
- // Assuming that the document is "valid", no operation or fragment name can appear
422
- // more than once, so we don't need to differentiate further to have a deterministic
423
- // sort.
424
- return 0;
425
- });
426
- return {
427
- ...query,
428
- definitions,
429
- };
430
- }
431
-
432
- function removeClientDirective(doc: DocumentNode) {
433
- return removeDirectivesFromDocument(
434
- [{ name: "prefetch" }, { name: "tool" }],
435
- doc
436
- )!;
437
- }
438
-
439
- function invariant(condition: any, message: string): asserts condition {
440
- if (!condition) {
441
- throw new Error(message);
442
- }
443
- }