@waniwani/sdk 0.1.20-beta.8 → 0.2.1

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 (718) hide show
  1. package/README.md +101 -52
  2. package/dist/abap-KGVIZMDC.js +3 -0
  3. package/dist/abap-KGVIZMDC.js.map +1 -0
  4. package/dist/actionscript-3-2UHK5QYP.js +3 -0
  5. package/dist/actionscript-3-2UHK5QYP.js.map +1 -0
  6. package/dist/ada-JKTWR5BV.js +3 -0
  7. package/dist/ada-JKTWR5BV.js.map +1 -0
  8. package/dist/andromeeda-HAPOYWX3.js +3 -0
  9. package/dist/andromeeda-HAPOYWX3.js.map +1 -0
  10. package/dist/angular-html-EOIKHM3D.js +3 -0
  11. package/dist/angular-html-EOIKHM3D.js.map +1 -0
  12. package/dist/angular-ts-A7ZNTSV6.js +3 -0
  13. package/dist/angular-ts-A7ZNTSV6.js.map +1 -0
  14. package/dist/apache-MPGFGQFB.js +3 -0
  15. package/dist/apache-MPGFGQFB.js.map +1 -0
  16. package/dist/apex-BOAZL66Z.js +3 -0
  17. package/dist/apex-BOAZL66Z.js.map +1 -0
  18. package/dist/apl-QBN4KIYA.js +3 -0
  19. package/dist/apl-QBN4KIYA.js.map +1 -0
  20. package/dist/applescript-C4CJ3STL.js +3 -0
  21. package/dist/applescript-C4CJ3STL.js.map +1 -0
  22. package/dist/ara-FSFFBRSD.js +3 -0
  23. package/dist/ara-FSFFBRSD.js.map +1 -0
  24. package/dist/asciidoc-QQK2LANG.js +3 -0
  25. package/dist/asciidoc-QQK2LANG.js.map +1 -0
  26. package/dist/asm-X43A2VYW.js +3 -0
  27. package/dist/asm-X43A2VYW.js.map +1 -0
  28. package/dist/astro-OQUOYMBE.js +3 -0
  29. package/dist/astro-OQUOYMBE.js.map +1 -0
  30. package/dist/aurora-x-R6WAWEBC.js +3 -0
  31. package/dist/aurora-x-R6WAWEBC.js.map +1 -0
  32. package/dist/awk-4Z3PRTF7.js +3 -0
  33. package/dist/awk-4Z3PRTF7.js.map +1 -0
  34. package/dist/ayu-dark-KMD4YO7F.js +3 -0
  35. package/dist/ayu-dark-KMD4YO7F.js.map +1 -0
  36. package/dist/ayu-light-2ATPDILG.js +3 -0
  37. package/dist/ayu-light-2ATPDILG.js.map +1 -0
  38. package/dist/ayu-mirage-LJ7PG5AM.js +3 -0
  39. package/dist/ayu-mirage-LJ7PG5AM.js.map +1 -0
  40. package/dist/ballerina-JCXSJ2QD.js +3 -0
  41. package/dist/ballerina-JCXSJ2QD.js.map +1 -0
  42. package/dist/bat-XFWR7RMZ.js +3 -0
  43. package/dist/bat-XFWR7RMZ.js.map +1 -0
  44. package/dist/beancount-7BBDB4BH.js +3 -0
  45. package/dist/beancount-7BBDB4BH.js.map +1 -0
  46. package/dist/berry-PQ2BEJIZ.js +3 -0
  47. package/dist/berry-PQ2BEJIZ.js.map +1 -0
  48. package/dist/bibtex-J2PAB23I.js +3 -0
  49. package/dist/bibtex-J2PAB23I.js.map +1 -0
  50. package/dist/bicep-TNKT6R3W.js +3 -0
  51. package/dist/bicep-TNKT6R3W.js.map +1 -0
  52. package/dist/blade-QBDEYXMB.js +3 -0
  53. package/dist/blade-QBDEYXMB.js.map +1 -0
  54. package/dist/bsl-PQW6E45S.js +3 -0
  55. package/dist/bsl-PQW6E45S.js.map +1 -0
  56. package/dist/c-PZBJFNXE.js +3 -0
  57. package/dist/c-PZBJFNXE.js.map +1 -0
  58. package/dist/c3-GP7XYHE6.js +3 -0
  59. package/dist/c3-GP7XYHE6.js.map +1 -0
  60. package/dist/cadence-NABGDHKY.js +3 -0
  61. package/dist/cadence-NABGDHKY.js.map +1 -0
  62. package/dist/cairo-WQSC2GLN.js +3 -0
  63. package/dist/cairo-WQSC2GLN.js.map +1 -0
  64. package/dist/catppuccin-frappe-Z4Y2POK6.js +3 -0
  65. package/dist/catppuccin-frappe-Z4Y2POK6.js.map +1 -0
  66. package/dist/catppuccin-latte-4TQUIKX4.js +3 -0
  67. package/dist/catppuccin-latte-4TQUIKX4.js.map +1 -0
  68. package/dist/catppuccin-macchiato-B7YYPERT.js +3 -0
  69. package/dist/catppuccin-macchiato-B7YYPERT.js.map +1 -0
  70. package/dist/catppuccin-mocha-KX33VXKA.js +3 -0
  71. package/dist/catppuccin-mocha-KX33VXKA.js.map +1 -0
  72. package/dist/chat/index.d.ts +14 -3
  73. package/dist/chat/index.js +49 -1
  74. package/dist/chat/index.js.map +1 -1
  75. package/dist/chat/next-js/index.d.ts +148 -40
  76. package/dist/chat/next-js/index.js +1 -1
  77. package/dist/chat/next-js/index.js.map +1 -1
  78. package/dist/chat/server/index.d.ts +5 -0
  79. package/dist/chat/styles.css +1 -1
  80. package/dist/chunk-2RR26LLP.js +3 -0
  81. package/dist/chunk-2RR26LLP.js.map +1 -0
  82. package/dist/chunk-3MXGGSWX.js +3 -0
  83. package/dist/chunk-3MXGGSWX.js.map +1 -0
  84. package/dist/chunk-4LBJUPWV.js +3 -0
  85. package/dist/chunk-4LBJUPWV.js.map +1 -0
  86. package/dist/chunk-4VTSQZWF.js +3 -0
  87. package/dist/chunk-4VTSQZWF.js.map +1 -0
  88. package/dist/chunk-7JLJRE2N.js +3 -0
  89. package/dist/chunk-7JLJRE2N.js.map +1 -0
  90. package/dist/chunk-7PHUBJVC.js +3 -0
  91. package/dist/chunk-7PHUBJVC.js.map +1 -0
  92. package/dist/chunk-AGWJ4LUC.js +3 -0
  93. package/dist/chunk-AGWJ4LUC.js.map +1 -0
  94. package/dist/chunk-ASVQBXNX.js +3 -0
  95. package/dist/chunk-ASVQBXNX.js.map +1 -0
  96. package/dist/chunk-ATLIFHJQ.js +3 -0
  97. package/dist/chunk-ATLIFHJQ.js.map +1 -0
  98. package/dist/chunk-BWAU264B.js +3 -0
  99. package/dist/chunk-BWAU264B.js.map +1 -0
  100. package/dist/chunk-C2XW4T23.js +3 -0
  101. package/dist/chunk-C2XW4T23.js.map +1 -0
  102. package/dist/chunk-C3DWQQH3.js +3 -0
  103. package/dist/chunk-C3DWQQH3.js.map +1 -0
  104. package/dist/chunk-CIEDXAJY.js +3 -0
  105. package/dist/chunk-CIEDXAJY.js.map +1 -0
  106. package/dist/chunk-CNY3RWNZ.js +3 -0
  107. package/dist/chunk-CNY3RWNZ.js.map +1 -0
  108. package/dist/chunk-ED2SBPIQ.js +3 -0
  109. package/dist/chunk-ED2SBPIQ.js.map +1 -0
  110. package/dist/chunk-F3QSOBPN.js +3 -0
  111. package/dist/chunk-F3QSOBPN.js.map +1 -0
  112. package/dist/chunk-FHRHXPXN.js +3 -0
  113. package/dist/chunk-FHRHXPXN.js.map +1 -0
  114. package/dist/chunk-FWHINPYE.js +3 -0
  115. package/dist/chunk-FWHINPYE.js.map +1 -0
  116. package/dist/chunk-HMEGK7JX.js +3 -0
  117. package/dist/chunk-HMEGK7JX.js.map +1 -0
  118. package/dist/chunk-HU77EH3T.js +3 -0
  119. package/dist/chunk-HU77EH3T.js.map +1 -0
  120. package/dist/chunk-HVAT4SNH.js +116 -0
  121. package/dist/chunk-HVAT4SNH.js.map +1 -0
  122. package/dist/chunk-IXROC4D6.js +3 -0
  123. package/dist/chunk-IXROC4D6.js.map +1 -0
  124. package/dist/chunk-JVRIR5KA.js +3 -0
  125. package/dist/chunk-JVRIR5KA.js.map +1 -0
  126. package/dist/chunk-JXSURY23.js +3 -0
  127. package/dist/chunk-JXSURY23.js.map +1 -0
  128. package/dist/chunk-JZBW5KEX.js +3 -0
  129. package/dist/chunk-JZBW5KEX.js.map +1 -0
  130. package/dist/chunk-M4CKEROZ.js +3 -0
  131. package/dist/chunk-M4CKEROZ.js.map +1 -0
  132. package/dist/chunk-NWMKWKIF.js +3 -0
  133. package/dist/chunk-NWMKWKIF.js.map +1 -0
  134. package/dist/chunk-OZU5OBWU.js +3 -0
  135. package/dist/chunk-OZU5OBWU.js.map +1 -0
  136. package/dist/chunk-Q7Y54EZU.js +3 -0
  137. package/dist/chunk-Q7Y54EZU.js.map +1 -0
  138. package/dist/chunk-QLNWMFSL.js +3 -0
  139. package/dist/chunk-QLNWMFSL.js.map +1 -0
  140. package/dist/chunk-R5U25TSM.js +3 -0
  141. package/dist/chunk-R5U25TSM.js.map +1 -0
  142. package/dist/chunk-RH56J7QY.js +3 -0
  143. package/dist/chunk-RH56J7QY.js.map +1 -0
  144. package/dist/chunk-RLHBVYHM.js +3 -0
  145. package/dist/chunk-RLHBVYHM.js.map +1 -0
  146. package/dist/chunk-RYVXTIMY.js +3 -0
  147. package/dist/chunk-RYVXTIMY.js.map +1 -0
  148. package/dist/chunk-U4R5XKLD.js +3 -0
  149. package/dist/chunk-U4R5XKLD.js.map +1 -0
  150. package/dist/chunk-V3ZDECK5.js +3 -0
  151. package/dist/chunk-V3ZDECK5.js.map +1 -0
  152. package/dist/chunk-VBWVDIIW.js +3 -0
  153. package/dist/chunk-VBWVDIIW.js.map +1 -0
  154. package/dist/chunk-VME4UB43.js +3 -0
  155. package/dist/chunk-VME4UB43.js.map +1 -0
  156. package/dist/chunk-VNX5AK2O.js +3 -0
  157. package/dist/chunk-VNX5AK2O.js.map +1 -0
  158. package/dist/chunk-WKR2RWJ6.js +3 -0
  159. package/dist/chunk-WKR2RWJ6.js.map +1 -0
  160. package/dist/chunk-XD5VGPVP.js +3 -0
  161. package/dist/chunk-XD5VGPVP.js.map +1 -0
  162. package/dist/chunk-Z3IKGRKN.js +3 -0
  163. package/dist/chunk-Z3IKGRKN.js.map +1 -0
  164. package/dist/chunk-Z7QCZ4DQ.js +3 -0
  165. package/dist/chunk-Z7QCZ4DQ.js.map +1 -0
  166. package/dist/chunk-ZHMHS6LG.js +3 -0
  167. package/dist/chunk-ZHMHS6LG.js.map +1 -0
  168. package/dist/chunk-ZU32Z5HV.js +3 -0
  169. package/dist/chunk-ZU32Z5HV.js.map +1 -0
  170. package/dist/clarity-NXNSINKX.js +3 -0
  171. package/dist/clarity-NXNSINKX.js.map +1 -0
  172. package/dist/clojure-Y57BKRMA.js +3 -0
  173. package/dist/clojure-Y57BKRMA.js.map +1 -0
  174. package/dist/cmake-LVMEA3JZ.js +3 -0
  175. package/dist/cmake-LVMEA3JZ.js.map +1 -0
  176. package/dist/cobol-6DNJTKH3.js +3 -0
  177. package/dist/cobol-6DNJTKH3.js.map +1 -0
  178. package/dist/code-block-37QAKDTI-M2QCKVTI.js +4 -0
  179. package/dist/code-block-37QAKDTI-M2QCKVTI.js.map +1 -0
  180. package/dist/codeowners-JYHOTXQS.js +3 -0
  181. package/dist/codeowners-JYHOTXQS.js.map +1 -0
  182. package/dist/codeql-IWWSYR3L.js +3 -0
  183. package/dist/codeql-IWWSYR3L.js.map +1 -0
  184. package/dist/coffee-NNDQ5QXC.js +3 -0
  185. package/dist/coffee-NNDQ5QXC.js.map +1 -0
  186. package/dist/common-lisp-JKXCDYH3.js +3 -0
  187. package/dist/common-lisp-JKXCDYH3.js.map +1 -0
  188. package/dist/coq-BEHPNP64.js +3 -0
  189. package/dist/coq-BEHPNP64.js.map +1 -0
  190. package/dist/cpp-IALOHSZA.js +3 -0
  191. package/dist/cpp-IALOHSZA.js.map +1 -0
  192. package/dist/crystal-ZDP3FIUI.js +3 -0
  193. package/dist/crystal-ZDP3FIUI.js.map +1 -0
  194. package/dist/csharp-ODFBXRGA.js +3 -0
  195. package/dist/csharp-ODFBXRGA.js.map +1 -0
  196. package/dist/css-CJGL5AVH.js +3 -0
  197. package/dist/css-CJGL5AVH.js.map +1 -0
  198. package/dist/csv-LIK4TU3Z.js +3 -0
  199. package/dist/csv-LIK4TU3Z.js.map +1 -0
  200. package/dist/cue-UAAEAKHI.js +3 -0
  201. package/dist/cue-UAAEAKHI.js.map +1 -0
  202. package/dist/cypher-SZPVUQZJ.js +3 -0
  203. package/dist/cypher-SZPVUQZJ.js.map +1 -0
  204. package/dist/d-VSCA3XHG.js +3 -0
  205. package/dist/d-VSCA3XHG.js.map +1 -0
  206. package/dist/dark-plus-LNHXUR7U.js +3 -0
  207. package/dist/dark-plus-LNHXUR7U.js.map +1 -0
  208. package/dist/dart-A4PE6FIS.js +3 -0
  209. package/dist/dart-A4PE6FIS.js.map +1 -0
  210. package/dist/dax-TILIKSFB.js +3 -0
  211. package/dist/dax-TILIKSFB.js.map +1 -0
  212. package/dist/desktop-75KK3D55.js +3 -0
  213. package/dist/desktop-75KK3D55.js.map +1 -0
  214. package/dist/diff-HOT6P45M.js +3 -0
  215. package/dist/diff-HOT6P45M.js.map +1 -0
  216. package/dist/docker-FF35TY6T.js +3 -0
  217. package/dist/docker-FF35TY6T.js.map +1 -0
  218. package/dist/dotenv-FVPPHJI3.js +3 -0
  219. package/dist/dotenv-FVPPHJI3.js.map +1 -0
  220. package/dist/dracula-T2CMBBQ5.js +3 -0
  221. package/dist/dracula-T2CMBBQ5.js.map +1 -0
  222. package/dist/dracula-soft-SMFRNKX2.js +3 -0
  223. package/dist/dracula-soft-SMFRNKX2.js.map +1 -0
  224. package/dist/dream-maker-SYE3ZPSJ.js +3 -0
  225. package/dist/dream-maker-SYE3ZPSJ.js.map +1 -0
  226. package/dist/edge-CCLQ2CKA.js +3 -0
  227. package/dist/edge-CCLQ2CKA.js.map +1 -0
  228. package/dist/elixir-F6DQGRKA.js +3 -0
  229. package/dist/elixir-F6DQGRKA.js.map +1 -0
  230. package/dist/elm-5QRQXDZ6.js +3 -0
  231. package/dist/elm-5QRQXDZ6.js.map +1 -0
  232. package/dist/emacs-lisp-NJ4S4OHV.js +3 -0
  233. package/dist/emacs-lisp-NJ4S4OHV.js.map +1 -0
  234. package/dist/erb-HGSLHT5Y.js +3 -0
  235. package/dist/erb-HGSLHT5Y.js.map +1 -0
  236. package/dist/erlang-APEONNZ6.js +3 -0
  237. package/dist/erlang-APEONNZ6.js.map +1 -0
  238. package/dist/everforest-dark-DBZHIUAO.js +3 -0
  239. package/dist/everforest-dark-DBZHIUAO.js.map +1 -0
  240. package/dist/everforest-light-TDAGYJUK.js +3 -0
  241. package/dist/everforest-light-TDAGYJUK.js.map +1 -0
  242. package/dist/fennel-7OCMFVPS.js +3 -0
  243. package/dist/fennel-7OCMFVPS.js.map +1 -0
  244. package/dist/fish-BC46ME2N.js +3 -0
  245. package/dist/fish-BC46ME2N.js.map +1 -0
  246. package/dist/fluent-MXZS6EX3.js +3 -0
  247. package/dist/fluent-MXZS6EX3.js.map +1 -0
  248. package/dist/fortran-fixed-form-35BC2KX6.js +3 -0
  249. package/dist/fortran-fixed-form-35BC2KX6.js.map +1 -0
  250. package/dist/fortran-free-form-AXRAI2HH.js +3 -0
  251. package/dist/fortran-free-form-AXRAI2HH.js.map +1 -0
  252. package/dist/fsharp-JKNSQXHD.js +3 -0
  253. package/dist/fsharp-JKNSQXHD.js.map +1 -0
  254. package/dist/gdresource-ZMKZGPZV.js +3 -0
  255. package/dist/gdresource-ZMKZGPZV.js.map +1 -0
  256. package/dist/gdscript-HNCVXEYB.js +3 -0
  257. package/dist/gdscript-HNCVXEYB.js.map +1 -0
  258. package/dist/gdshader-XAJ4QRYP.js +3 -0
  259. package/dist/gdshader-XAJ4QRYP.js.map +1 -0
  260. package/dist/genie-HEFVQZAP.js +3 -0
  261. package/dist/genie-HEFVQZAP.js.map +1 -0
  262. package/dist/gherkin-OFBRDPXX.js +3 -0
  263. package/dist/gherkin-OFBRDPXX.js.map +1 -0
  264. package/dist/git-commit-ZE2M3Q5H.js +3 -0
  265. package/dist/git-commit-ZE2M3Q5H.js.map +1 -0
  266. package/dist/git-rebase-3N3INGLU.js +3 -0
  267. package/dist/git-rebase-3N3INGLU.js.map +1 -0
  268. package/dist/github-dark-3E25TTAN.js +3 -0
  269. package/dist/github-dark-3E25TTAN.js.map +1 -0
  270. package/dist/github-dark-default-KCBFVSS5.js +3 -0
  271. package/dist/github-dark-default-KCBFVSS5.js.map +1 -0
  272. package/dist/github-dark-dimmed-WRCBXEVS.js +3 -0
  273. package/dist/github-dark-dimmed-WRCBXEVS.js.map +1 -0
  274. package/dist/github-dark-high-contrast-ET7SAHAV.js +3 -0
  275. package/dist/github-dark-high-contrast-ET7SAHAV.js.map +1 -0
  276. package/dist/github-light-6FNTZH5H.js +3 -0
  277. package/dist/github-light-6FNTZH5H.js.map +1 -0
  278. package/dist/github-light-default-GGTAKNM7.js +3 -0
  279. package/dist/github-light-default-GGTAKNM7.js.map +1 -0
  280. package/dist/github-light-high-contrast-LHYKPR5E.js +3 -0
  281. package/dist/github-light-high-contrast-LHYKPR5E.js.map +1 -0
  282. package/dist/gleam-NFFQFQLP.js +3 -0
  283. package/dist/gleam-NFFQFQLP.js.map +1 -0
  284. package/dist/glimmer-js-RSUW6JYN.js +3 -0
  285. package/dist/glimmer-js-RSUW6JYN.js.map +1 -0
  286. package/dist/glimmer-ts-EZGWLX5T.js +3 -0
  287. package/dist/glimmer-ts-EZGWLX5T.js.map +1 -0
  288. package/dist/glsl-VJLRYEVJ.js +3 -0
  289. package/dist/glsl-VJLRYEVJ.js.map +1 -0
  290. package/dist/gn-UH2XQWLG.js +3 -0
  291. package/dist/gn-UH2XQWLG.js.map +1 -0
  292. package/dist/gnuplot-K6IV6NNR.js +3 -0
  293. package/dist/gnuplot-K6IV6NNR.js.map +1 -0
  294. package/dist/go-BDV7RR5G.js +3 -0
  295. package/dist/go-BDV7RR5G.js.map +1 -0
  296. package/dist/graphql-YEJQLMOO.js +3 -0
  297. package/dist/graphql-YEJQLMOO.js.map +1 -0
  298. package/dist/groovy-SX7K3XGL.js +3 -0
  299. package/dist/groovy-SX7K3XGL.js.map +1 -0
  300. package/dist/gruvbox-dark-hard-IQWZCHF7.js +3 -0
  301. package/dist/gruvbox-dark-hard-IQWZCHF7.js.map +1 -0
  302. package/dist/gruvbox-dark-medium-ARPWF4FS.js +3 -0
  303. package/dist/gruvbox-dark-medium-ARPWF4FS.js.map +1 -0
  304. package/dist/gruvbox-dark-soft-ODS6FPID.js +3 -0
  305. package/dist/gruvbox-dark-soft-ODS6FPID.js.map +1 -0
  306. package/dist/gruvbox-light-hard-KFA5YFDW.js +3 -0
  307. package/dist/gruvbox-light-hard-KFA5YFDW.js.map +1 -0
  308. package/dist/gruvbox-light-medium-MMET4L3Y.js +3 -0
  309. package/dist/gruvbox-light-medium-MMET4L3Y.js.map +1 -0
  310. package/dist/gruvbox-light-soft-DBZDERMK.js +3 -0
  311. package/dist/gruvbox-light-soft-DBZDERMK.js.map +1 -0
  312. package/dist/hack-3TGPQNR2.js +3 -0
  313. package/dist/hack-3TGPQNR2.js.map +1 -0
  314. package/dist/haml-335RVEQR.js +3 -0
  315. package/dist/haml-335RVEQR.js.map +1 -0
  316. package/dist/handlebars-73IS6B2J.js +3 -0
  317. package/dist/handlebars-73IS6B2J.js.map +1 -0
  318. package/dist/haskell-P5PTJARU.js +3 -0
  319. package/dist/haskell-P5PTJARU.js.map +1 -0
  320. package/dist/haxe-RCPSSA3N.js +3 -0
  321. package/dist/haxe-RCPSSA3N.js.map +1 -0
  322. package/dist/hcl-AKKZAVC2.js +3 -0
  323. package/dist/hcl-AKKZAVC2.js.map +1 -0
  324. package/dist/hjson-REXV6F6N.js +3 -0
  325. package/dist/hjson-REXV6F6N.js.map +1 -0
  326. package/dist/hlsl-AJ7VWOVL.js +3 -0
  327. package/dist/hlsl-AJ7VWOVL.js.map +1 -0
  328. package/dist/horizon-FSOMPXNP.js +3 -0
  329. package/dist/horizon-FSOMPXNP.js.map +1 -0
  330. package/dist/houston-FAQBCORN.js +3 -0
  331. package/dist/houston-FAQBCORN.js.map +1 -0
  332. package/dist/html-654LNGWF.js +3 -0
  333. package/dist/html-654LNGWF.js.map +1 -0
  334. package/dist/html-derivative-CMQ7BFDQ.js +3 -0
  335. package/dist/html-derivative-CMQ7BFDQ.js.map +1 -0
  336. package/dist/http-NEPTRAQZ.js +3 -0
  337. package/dist/http-NEPTRAQZ.js.map +1 -0
  338. package/dist/hurl-V6ZX2Q3F.js +3 -0
  339. package/dist/hurl-V6ZX2Q3F.js.map +1 -0
  340. package/dist/hxml-5BXJCAAU.js +3 -0
  341. package/dist/hxml-5BXJCAAU.js.map +1 -0
  342. package/dist/hy-SB4TMFE7.js +3 -0
  343. package/dist/hy-SB4TMFE7.js.map +1 -0
  344. package/dist/imba-Y64MHYWP.js +3 -0
  345. package/dist/imba-Y64MHYWP.js.map +1 -0
  346. package/dist/index.d.ts +187 -41
  347. package/dist/index.js +1 -1
  348. package/dist/index.js.map +1 -1
  349. package/dist/ini-J2OP4CNW.js +3 -0
  350. package/dist/ini-J2OP4CNW.js.map +1 -0
  351. package/dist/java-MJKJ5GPP.js +3 -0
  352. package/dist/java-MJKJ5GPP.js.map +1 -0
  353. package/dist/javascript-IYAGHPR6.js +3 -0
  354. package/dist/javascript-IYAGHPR6.js.map +1 -0
  355. package/dist/jinja-WPD26JJ6.js +3 -0
  356. package/dist/jinja-WPD26JJ6.js.map +1 -0
  357. package/dist/jison-UYDZQBN5.js +3 -0
  358. package/dist/jison-UYDZQBN5.js.map +1 -0
  359. package/dist/json-5V4JESJO.js +3 -0
  360. package/dist/json-5V4JESJO.js.map +1 -0
  361. package/dist/json5-7SHUZD3R.js +3 -0
  362. package/dist/json5-7SHUZD3R.js.map +1 -0
  363. package/dist/jsonc-X3Z34FN3.js +3 -0
  364. package/dist/jsonc-X3Z34FN3.js.map +1 -0
  365. package/dist/jsonl-6I3D2HM6.js +3 -0
  366. package/dist/jsonl-6I3D2HM6.js.map +1 -0
  367. package/dist/jsonnet-PZEQIBYV.js +3 -0
  368. package/dist/jsonnet-PZEQIBYV.js.map +1 -0
  369. package/dist/jssm-GJJ25IKR.js +3 -0
  370. package/dist/jssm-GJJ25IKR.js.map +1 -0
  371. package/dist/jsx-NI2J427C.js +3 -0
  372. package/dist/jsx-NI2J427C.js.map +1 -0
  373. package/dist/julia-QPZ7EOS6.js +3 -0
  374. package/dist/julia-QPZ7EOS6.js.map +1 -0
  375. package/dist/kanagawa-dragon-JNDVF5RJ.js +3 -0
  376. package/dist/kanagawa-dragon-JNDVF5RJ.js.map +1 -0
  377. package/dist/kanagawa-lotus-S7JK6TQ6.js +3 -0
  378. package/dist/kanagawa-lotus-S7JK6TQ6.js.map +1 -0
  379. package/dist/kanagawa-wave-QJJIMVEV.js +3 -0
  380. package/dist/kanagawa-wave-QJJIMVEV.js.map +1 -0
  381. package/dist/kb/index.d.ts +79 -0
  382. package/dist/kb/index.js +2 -0
  383. package/dist/kb/index.js.map +1 -0
  384. package/dist/kdl-IA7HA2TL.js +3 -0
  385. package/dist/kdl-IA7HA2TL.js.map +1 -0
  386. package/dist/kotlin-CCRMGYMI.js +3 -0
  387. package/dist/kotlin-CCRMGYMI.js.map +1 -0
  388. package/dist/kusto-7DW25GYH.js +3 -0
  389. package/dist/kusto-7DW25GYH.js.map +1 -0
  390. package/dist/laserwave-YFP3EJVX.js +3 -0
  391. package/dist/laserwave-YFP3EJVX.js.map +1 -0
  392. package/dist/latex-F2CTDTFG.js +3 -0
  393. package/dist/latex-F2CTDTFG.js.map +1 -0
  394. package/dist/lean-MGJJWBTR.js +3 -0
  395. package/dist/lean-MGJJWBTR.js.map +1 -0
  396. package/dist/less-WFSIMX5G.js +3 -0
  397. package/dist/less-WFSIMX5G.js.map +1 -0
  398. package/dist/light-plus-NGDHCPUZ.js +3 -0
  399. package/dist/light-plus-NGDHCPUZ.js.map +1 -0
  400. package/dist/liquid-7CFNUD3V.js +3 -0
  401. package/dist/liquid-7CFNUD3V.js.map +1 -0
  402. package/dist/llvm-CFQSEDXB.js +3 -0
  403. package/dist/llvm-CFQSEDXB.js.map +1 -0
  404. package/dist/log-YQNML6LA.js +3 -0
  405. package/dist/log-YQNML6LA.js.map +1 -0
  406. package/dist/logo-2PPKBL2M.js +3 -0
  407. package/dist/logo-2PPKBL2M.js.map +1 -0
  408. package/dist/lua-RPAMRKNG.js +3 -0
  409. package/dist/lua-RPAMRKNG.js.map +1 -0
  410. package/dist/luau-GR2DOH6N.js +3 -0
  411. package/dist/luau-GR2DOH6N.js.map +1 -0
  412. package/dist/make-DQQEEPI4.js +3 -0
  413. package/dist/make-DQQEEPI4.js.map +1 -0
  414. package/dist/markdown-OC5ILZSY.js +3 -0
  415. package/dist/markdown-OC5ILZSY.js.map +1 -0
  416. package/dist/marko-XSB3CTWQ.js +3 -0
  417. package/dist/marko-XSB3CTWQ.js.map +1 -0
  418. package/dist/material-theme-H2BHKUKX.js +3 -0
  419. package/dist/material-theme-H2BHKUKX.js.map +1 -0
  420. package/dist/material-theme-darker-VENCGWTB.js +3 -0
  421. package/dist/material-theme-darker-VENCGWTB.js.map +1 -0
  422. package/dist/material-theme-lighter-SDMLS22W.js +3 -0
  423. package/dist/material-theme-lighter-SDMLS22W.js.map +1 -0
  424. package/dist/material-theme-ocean-UHDBRLVF.js +3 -0
  425. package/dist/material-theme-ocean-UHDBRLVF.js.map +1 -0
  426. package/dist/material-theme-palenight-3TB2BEET.js +3 -0
  427. package/dist/material-theme-palenight-3TB2BEET.js.map +1 -0
  428. package/dist/matlab-YQY6FS4U.js +3 -0
  429. package/dist/matlab-YQY6FS4U.js.map +1 -0
  430. package/dist/mcp/index.d.ts +381 -31
  431. package/dist/mcp/index.js +3 -3
  432. package/dist/mcp/index.js.map +1 -1
  433. package/dist/mcp/react.d.ts +80 -25
  434. package/dist/mcp/react.js +7 -7
  435. package/dist/mcp/react.js.map +1 -1
  436. package/dist/mcp-apps-client-6WEBHSGH.js +3 -0
  437. package/dist/mcp-apps-client-6WEBHSGH.js.map +1 -0
  438. package/dist/mdc-TEVTGSC7.js +3 -0
  439. package/dist/mdc-TEVTGSC7.js.map +1 -0
  440. package/dist/mdx-ZIH2JLVR.js +3 -0
  441. package/dist/mdx-ZIH2JLVR.js.map +1 -0
  442. package/dist/mermaid-4DMBBIKO-NR6M3PLG.js +3 -0
  443. package/dist/mermaid-4DMBBIKO-NR6M3PLG.js.map +1 -0
  444. package/dist/mermaid-WPX56SBB.js +3 -0
  445. package/dist/mermaid-WPX56SBB.js.map +1 -0
  446. package/dist/min-dark-CQ5WKNT7.js +3 -0
  447. package/dist/min-dark-CQ5WKNT7.js.map +1 -0
  448. package/dist/min-light-LZRD4NPR.js +3 -0
  449. package/dist/min-light-LZRD4NPR.js.map +1 -0
  450. package/dist/mipsasm-IDXQRZ2B.js +3 -0
  451. package/dist/mipsasm-IDXQRZ2B.js.map +1 -0
  452. package/dist/mojo-MH7EQVOK.js +3 -0
  453. package/dist/mojo-MH7EQVOK.js.map +1 -0
  454. package/dist/monokai-WHRY6275.js +3 -0
  455. package/dist/monokai-WHRY6275.js.map +1 -0
  456. package/dist/moonbit-5JDFTWKE.js +3 -0
  457. package/dist/moonbit-5JDFTWKE.js.map +1 -0
  458. package/dist/move-RWSXKYDY.js +3 -0
  459. package/dist/move-RWSXKYDY.js.map +1 -0
  460. package/dist/narrat-QJUEXMVV.js +3 -0
  461. package/dist/narrat-QJUEXMVV.js.map +1 -0
  462. package/dist/nextflow-2EICNZA3.js +3 -0
  463. package/dist/nextflow-2EICNZA3.js.map +1 -0
  464. package/dist/nginx-RIWAEC5Z.js +3 -0
  465. package/dist/nginx-RIWAEC5Z.js.map +1 -0
  466. package/dist/night-owl-7PNEW2JB.js +3 -0
  467. package/dist/night-owl-7PNEW2JB.js.map +1 -0
  468. package/dist/night-owl-light-GJUYOOJR.js +3 -0
  469. package/dist/night-owl-light-GJUYOOJR.js.map +1 -0
  470. package/dist/nim-JPSYX5KC.js +3 -0
  471. package/dist/nim-JPSYX5KC.js.map +1 -0
  472. package/dist/nix-XCKQVWCN.js +3 -0
  473. package/dist/nix-XCKQVWCN.js.map +1 -0
  474. package/dist/nord-EVGUMUX2.js +3 -0
  475. package/dist/nord-EVGUMUX2.js.map +1 -0
  476. package/dist/nushell-QGW7HANA.js +3 -0
  477. package/dist/nushell-QGW7HANA.js.map +1 -0
  478. package/dist/objective-c-V7KYXFHL.js +3 -0
  479. package/dist/objective-c-V7KYXFHL.js.map +1 -0
  480. package/dist/objective-cpp-NKUEWVGU.js +3 -0
  481. package/dist/objective-cpp-NKUEWVGU.js.map +1 -0
  482. package/dist/ocaml-QT2CZJZN.js +3 -0
  483. package/dist/ocaml-QT2CZJZN.js.map +1 -0
  484. package/dist/odin-MVMIXBHP.js +3 -0
  485. package/dist/odin-MVMIXBHP.js.map +1 -0
  486. package/dist/one-dark-pro-PMTR3SA7.js +3 -0
  487. package/dist/one-dark-pro-PMTR3SA7.js.map +1 -0
  488. package/dist/one-light-O7WH4N5X.js +3 -0
  489. package/dist/one-light-O7WH4N5X.js.map +1 -0
  490. package/dist/openai-client-HLQSYZJC.js +3 -0
  491. package/dist/openai-client-HLQSYZJC.js.map +1 -0
  492. package/dist/openscad-BJDUXUUZ.js +3 -0
  493. package/dist/openscad-BJDUXUUZ.js.map +1 -0
  494. package/dist/pascal-HGWEFD6L.js +3 -0
  495. package/dist/pascal-HGWEFD6L.js.map +1 -0
  496. package/dist/perl-X4IFZB22.js +3 -0
  497. package/dist/perl-X4IFZB22.js.map +1 -0
  498. package/dist/php-3V7EPUAN.js +3 -0
  499. package/dist/php-3V7EPUAN.js.map +1 -0
  500. package/dist/pkl-VA5ZK5DW.js +3 -0
  501. package/dist/pkl-VA5ZK5DW.js.map +1 -0
  502. package/dist/plastic-FBVUW6NJ.js +3 -0
  503. package/dist/plastic-FBVUW6NJ.js.map +1 -0
  504. package/dist/plsql-J7A7YWFH.js +3 -0
  505. package/dist/plsql-J7A7YWFH.js.map +1 -0
  506. package/dist/po-5RDI65JX.js +3 -0
  507. package/dist/po-5RDI65JX.js.map +1 -0
  508. package/dist/poimandres-WBB7GZAD.js +3 -0
  509. package/dist/poimandres-WBB7GZAD.js.map +1 -0
  510. package/dist/polar-VUJL2E7F.js +3 -0
  511. package/dist/polar-VUJL2E7F.js.map +1 -0
  512. package/dist/postcss-ESTB5G7N.js +3 -0
  513. package/dist/postcss-ESTB5G7N.js.map +1 -0
  514. package/dist/powerquery-ODTEKQCW.js +3 -0
  515. package/dist/powerquery-ODTEKQCW.js.map +1 -0
  516. package/dist/powershell-ZOYRAWBJ.js +3 -0
  517. package/dist/powershell-ZOYRAWBJ.js.map +1 -0
  518. package/dist/prisma-QHG2W5GE.js +3 -0
  519. package/dist/prisma-QHG2W5GE.js.map +1 -0
  520. package/dist/prolog-CSAPG5PH.js +3 -0
  521. package/dist/prolog-CSAPG5PH.js.map +1 -0
  522. package/dist/proto-WDNJBTSW.js +3 -0
  523. package/dist/proto-WDNJBTSW.js.map +1 -0
  524. package/dist/pug-P7LS6DER.js +3 -0
  525. package/dist/pug-P7LS6DER.js.map +1 -0
  526. package/dist/puppet-LHFWHTY3.js +3 -0
  527. package/dist/puppet-LHFWHTY3.js.map +1 -0
  528. package/dist/purescript-DUFJP4FY.js +3 -0
  529. package/dist/purescript-DUFJP4FY.js.map +1 -0
  530. package/dist/python-5ZNZSNQ2.js +3 -0
  531. package/dist/python-5ZNZSNQ2.js.map +1 -0
  532. package/dist/qml-LTAXB6W5.js +3 -0
  533. package/dist/qml-LTAXB6W5.js.map +1 -0
  534. package/dist/qmldir-7Z2ODQLM.js +3 -0
  535. package/dist/qmldir-7Z2ODQLM.js.map +1 -0
  536. package/dist/qss-FDFD3HQD.js +3 -0
  537. package/dist/qss-FDFD3HQD.js.map +1 -0
  538. package/dist/r-6ZOS53WN.js +3 -0
  539. package/dist/r-6ZOS53WN.js.map +1 -0
  540. package/dist/racket-7AYZPEUI.js +3 -0
  541. package/dist/racket-7AYZPEUI.js.map +1 -0
  542. package/dist/raku-A4F6VHVG.js +3 -0
  543. package/dist/raku-A4F6VHVG.js.map +1 -0
  544. package/dist/razor-4QOCK4UD.js +3 -0
  545. package/dist/razor-4QOCK4UD.js.map +1 -0
  546. package/dist/red-7KAMONOP.js +3 -0
  547. package/dist/red-7KAMONOP.js.map +1 -0
  548. package/dist/reg-FAPHGG66.js +3 -0
  549. package/dist/reg-FAPHGG66.js.map +1 -0
  550. package/dist/regexp-5BYLYA2R.js +3 -0
  551. package/dist/regexp-5BYLYA2R.js.map +1 -0
  552. package/dist/rel-7DJ7HHU4.js +3 -0
  553. package/dist/rel-7DJ7HHU4.js.map +1 -0
  554. package/dist/riscv-YIYJATFG.js +3 -0
  555. package/dist/riscv-YIYJATFG.js.map +1 -0
  556. package/dist/ron-HYYMCHTX.js +3 -0
  557. package/dist/ron-HYYMCHTX.js.map +1 -0
  558. package/dist/rose-pine-F2G5IHZD.js +3 -0
  559. package/dist/rose-pine-F2G5IHZD.js.map +1 -0
  560. package/dist/rose-pine-dawn-ALZ7XGH2.js +3 -0
  561. package/dist/rose-pine-dawn-ALZ7XGH2.js.map +1 -0
  562. package/dist/rose-pine-moon-D3K4SWUL.js +3 -0
  563. package/dist/rose-pine-moon-D3K4SWUL.js.map +1 -0
  564. package/dist/rosmsg-FDNH6QF7.js +3 -0
  565. package/dist/rosmsg-FDNH6QF7.js.map +1 -0
  566. package/dist/rst-WIWCR2KQ.js +3 -0
  567. package/dist/rst-WIWCR2KQ.js.map +1 -0
  568. package/dist/ruby-LXZJUMFB.js +3 -0
  569. package/dist/ruby-LXZJUMFB.js.map +1 -0
  570. package/dist/rust-V3GMJA2K.js +3 -0
  571. package/dist/rust-V3GMJA2K.js.map +1 -0
  572. package/dist/sas-D3G4GB3X.js +3 -0
  573. package/dist/sas-D3G4GB3X.js.map +1 -0
  574. package/dist/sass-JTO65AGR.js +3 -0
  575. package/dist/sass-JTO65AGR.js.map +1 -0
  576. package/dist/scala-4XQGFSVM.js +3 -0
  577. package/dist/scala-4XQGFSVM.js.map +1 -0
  578. package/dist/scheme-CB7AC7IL.js +3 -0
  579. package/dist/scheme-CB7AC7IL.js.map +1 -0
  580. package/dist/scss-6SKV4OGI.js +3 -0
  581. package/dist/scss-6SKV4OGI.js.map +1 -0
  582. package/dist/sdbl-LKGZFJ46.js +3 -0
  583. package/dist/sdbl-LKGZFJ46.js.map +1 -0
  584. package/dist/shaderlab-K536DHEB.js +3 -0
  585. package/dist/shaderlab-K536DHEB.js.map +1 -0
  586. package/dist/shellscript-LRNUKUSZ.js +3 -0
  587. package/dist/shellscript-LRNUKUSZ.js.map +1 -0
  588. package/dist/shellsession-IBQK7VWQ.js +3 -0
  589. package/dist/shellsession-IBQK7VWQ.js.map +1 -0
  590. package/dist/slack-dark-YFPJODWS.js +3 -0
  591. package/dist/slack-dark-YFPJODWS.js.map +1 -0
  592. package/dist/slack-ochin-H67AWZOI.js +3 -0
  593. package/dist/slack-ochin-H67AWZOI.js.map +1 -0
  594. package/dist/smalltalk-DQOSWAW7.js +3 -0
  595. package/dist/smalltalk-DQOSWAW7.js.map +1 -0
  596. package/dist/snazzy-light-OUVS63VK.js +3 -0
  597. package/dist/snazzy-light-OUVS63VK.js.map +1 -0
  598. package/dist/solarized-dark-2RCAVEXJ.js +3 -0
  599. package/dist/solarized-dark-2RCAVEXJ.js.map +1 -0
  600. package/dist/solarized-light-XFSENHTC.js +3 -0
  601. package/dist/solarized-light-XFSENHTC.js.map +1 -0
  602. package/dist/solidity-V2FMZEG4.js +3 -0
  603. package/dist/solidity-V2FMZEG4.js.map +1 -0
  604. package/dist/soy-VW3CKXWF.js +3 -0
  605. package/dist/soy-VW3CKXWF.js.map +1 -0
  606. package/dist/sparql-L2VKP7YP.js +3 -0
  607. package/dist/sparql-L2VKP7YP.js.map +1 -0
  608. package/dist/splunk-KDKHP7GC.js +3 -0
  609. package/dist/splunk-KDKHP7GC.js.map +1 -0
  610. package/dist/sql-UF27CALT.js +3 -0
  611. package/dist/sql-UF27CALT.js.map +1 -0
  612. package/dist/ssh-config-JC2DQ6ED.js +3 -0
  613. package/dist/ssh-config-JC2DQ6ED.js.map +1 -0
  614. package/dist/stata-7PXCUY24.js +3 -0
  615. package/dist/stata-7PXCUY24.js.map +1 -0
  616. package/dist/stylus-2L7N3EZD.js +3 -0
  617. package/dist/stylus-2L7N3EZD.js.map +1 -0
  618. package/dist/surrealql-ZY3E6XEL.js +3 -0
  619. package/dist/surrealql-ZY3E6XEL.js.map +1 -0
  620. package/dist/svelte-Q45XIK2A.js +3 -0
  621. package/dist/svelte-Q45XIK2A.js.map +1 -0
  622. package/dist/swift-XBH5HZSC.js +3 -0
  623. package/dist/swift-XBH5HZSC.js.map +1 -0
  624. package/dist/synthwave-84-5XXB3K6S.js +3 -0
  625. package/dist/synthwave-84-5XXB3K6S.js.map +1 -0
  626. package/dist/system-verilog-VRAUSZY3.js +3 -0
  627. package/dist/system-verilog-VRAUSZY3.js.map +1 -0
  628. package/dist/systemd-JOTSGJD4.js +3 -0
  629. package/dist/systemd-JOTSGJD4.js.map +1 -0
  630. package/dist/talonscript-NNZRZKOU.js +3 -0
  631. package/dist/talonscript-NNZRZKOU.js.map +1 -0
  632. package/dist/tasl-MBFZ4QNC.js +3 -0
  633. package/dist/tasl-MBFZ4QNC.js.map +1 -0
  634. package/dist/tcl-4GEDCBVE.js +3 -0
  635. package/dist/tcl-4GEDCBVE.js.map +1 -0
  636. package/dist/templ-3XM7DLQ3.js +3 -0
  637. package/dist/templ-3XM7DLQ3.js.map +1 -0
  638. package/dist/terraform-XTHOS4UK.js +3 -0
  639. package/dist/terraform-XTHOS4UK.js.map +1 -0
  640. package/dist/tex-UXMN2CV7.js +3 -0
  641. package/dist/tex-UXMN2CV7.js.map +1 -0
  642. package/dist/tokyo-night-CHJCCBJH.js +3 -0
  643. package/dist/tokyo-night-CHJCCBJH.js.map +1 -0
  644. package/dist/toml-J6K55ZSV.js +3 -0
  645. package/dist/toml-J6K55ZSV.js.map +1 -0
  646. package/dist/ts-tags-7WGDLEKX.js +3 -0
  647. package/dist/ts-tags-7WGDLEKX.js.map +1 -0
  648. package/dist/tsv-DOUJHQDQ.js +3 -0
  649. package/dist/tsv-DOUJHQDQ.js.map +1 -0
  650. package/dist/tsx-G5BMVRHK.js +3 -0
  651. package/dist/tsx-G5BMVRHK.js.map +1 -0
  652. package/dist/turtle-JHJ7W6U5.js +3 -0
  653. package/dist/turtle-JHJ7W6U5.js.map +1 -0
  654. package/dist/twig-C6YWFFZU.js +3 -0
  655. package/dist/twig-C6YWFFZU.js.map +1 -0
  656. package/dist/typescript-LMKEAHFC.js +3 -0
  657. package/dist/typescript-LMKEAHFC.js.map +1 -0
  658. package/dist/typespec-5CLTIJYY.js +3 -0
  659. package/dist/typespec-5CLTIJYY.js.map +1 -0
  660. package/dist/typst-4W4Z436Z.js +3 -0
  661. package/dist/typst-4W4Z436Z.js.map +1 -0
  662. package/dist/v-Y4SBDBN7.js +3 -0
  663. package/dist/v-Y4SBDBN7.js.map +1 -0
  664. package/dist/vala-UMKT2MFA.js +3 -0
  665. package/dist/vala-UMKT2MFA.js.map +1 -0
  666. package/dist/vb-DQ7A5WJU.js +3 -0
  667. package/dist/vb-DQ7A5WJU.js.map +1 -0
  668. package/dist/verilog-N6ZF7GQD.js +3 -0
  669. package/dist/verilog-N6ZF7GQD.js.map +1 -0
  670. package/dist/vesper-Y5GIEAN4.js +3 -0
  671. package/dist/vesper-Y5GIEAN4.js.map +1 -0
  672. package/dist/vhdl-BNYDT37G.js +3 -0
  673. package/dist/vhdl-BNYDT37G.js.map +1 -0
  674. package/dist/viml-37RMDCBC.js +3 -0
  675. package/dist/viml-37RMDCBC.js.map +1 -0
  676. package/dist/vitesse-black-7TI33KHX.js +3 -0
  677. package/dist/vitesse-black-7TI33KHX.js.map +1 -0
  678. package/dist/vitesse-dark-FOB25MRB.js +3 -0
  679. package/dist/vitesse-dark-FOB25MRB.js.map +1 -0
  680. package/dist/vitesse-light-4WCNCTCO.js +3 -0
  681. package/dist/vitesse-light-4WCNCTCO.js.map +1 -0
  682. package/dist/vue-O6SLORWU.js +3 -0
  683. package/dist/vue-O6SLORWU.js.map +1 -0
  684. package/dist/vue-html-ZLTZN573.js +3 -0
  685. package/dist/vue-html-ZLTZN573.js.map +1 -0
  686. package/dist/vue-vine-6JKAZ54I.js +3 -0
  687. package/dist/vue-vine-6JKAZ54I.js.map +1 -0
  688. package/dist/vyper-GVXF46KD.js +3 -0
  689. package/dist/vyper-GVXF46KD.js.map +1 -0
  690. package/dist/wasm-EOPKAILK.js +3 -0
  691. package/dist/wasm-EOPKAILK.js.map +1 -0
  692. package/dist/wasm-NTB4O7GL.js +3 -0
  693. package/dist/wasm-NTB4O7GL.js.map +1 -0
  694. package/dist/wenyan-W7WB3BC7.js +3 -0
  695. package/dist/wenyan-W7WB3BC7.js.map +1 -0
  696. package/dist/wgsl-7GTDVXHG.js +3 -0
  697. package/dist/wgsl-7GTDVXHG.js.map +1 -0
  698. package/dist/wikitext-ASAFPAIL.js +3 -0
  699. package/dist/wikitext-ASAFPAIL.js.map +1 -0
  700. package/dist/wit-ZBCR6544.js +3 -0
  701. package/dist/wit-ZBCR6544.js.map +1 -0
  702. package/dist/wolfram-SZRZOETJ.js +3 -0
  703. package/dist/wolfram-SZRZOETJ.js.map +1 -0
  704. package/dist/xml-EBTJCOTU.js +3 -0
  705. package/dist/xml-EBTJCOTU.js.map +1 -0
  706. package/dist/xsl-IBYEXWDX.js +3 -0
  707. package/dist/xsl-IBYEXWDX.js.map +1 -0
  708. package/dist/yaml-GMVQNECR.js +3 -0
  709. package/dist/yaml-GMVQNECR.js.map +1 -0
  710. package/dist/zenscript-O2TZFP4A.js +3 -0
  711. package/dist/zenscript-O2TZFP4A.js.map +1 -0
  712. package/dist/zig-ZLGM7IMN.js +3 -0
  713. package/dist/zig-ZLGM7IMN.js.map +1 -0
  714. package/package.json +20 -39
  715. package/dist/mcp-apps-client-Z62VBB36.js +0 -3
  716. package/dist/mcp-apps-client-Z62VBB36.js.map +0 -1
  717. package/dist/openai-client-MVV4KJUO.js +0 -3
  718. package/dist/openai-client-MVV4KJUO.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
1
2
  import { z } from 'zod';
2
3
  import { McpServer, ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';
3
4
  export { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
@@ -112,23 +113,11 @@ declare global {
112
113
  /**
113
114
  * Result from calling a tool
114
115
  */
115
- type ToolCallResult = {
116
- content?: Array<{
117
- type: string;
118
- text?: string;
119
- }>;
120
- structuredContent?: Record<string, unknown>;
121
- };
116
+ type ToolCallResult = CallToolResult;
122
117
  /**
123
118
  * Tool result notification (what the host pushes to the widget)
124
119
  */
125
- type ToolResult = {
126
- content?: Array<{
127
- type: string;
128
- text?: string;
129
- }>;
130
- structuredContent?: Record<string, unknown>;
131
- };
120
+ type ToolResult = CallToolResult;
132
121
  /**
133
122
  * Host context - all values available from the host.
134
123
  */
@@ -245,14 +234,14 @@ interface UnifiedWidgetClient {
245
234
  onMaxHeightChange(callback: (maxHeight: number | null) => void): () => void;
246
235
  /**
247
236
  * Get the tool response metadata.
248
- * OpenAI-only: returns metadata from window.openai.toolResponseMetadata.
249
- * MCP Apps: returns null.
237
+ * OpenAI: returns metadata from window.openai.toolResponseMetadata.
238
+ * MCP Apps: returns `_meta` from the latest `ui/notifications/tool-result`, if provided by host.
250
239
  */
251
240
  getToolResponseMetadata(): UnknownObject | null;
252
241
  /**
253
242
  * Subscribe to tool response metadata changes.
254
- * OpenAI-only: subscribes to toolResponseMetadata changes.
255
- * MCP Apps: callback is never called.
243
+ * OpenAI: subscribes to toolResponseMetadata changes.
244
+ * MCP Apps: fires when tool result `_meta` changes.
256
245
  */
257
246
  onToolResponseMetadataChange(callback: (metadata: UnknownObject | null) => void): () => void;
258
247
  /**
@@ -316,15 +305,26 @@ declare const START: "__start__";
316
305
  declare const END: "__end__";
317
306
  declare const INTERRUPT: unique symbol;
318
307
  declare const WIDGET: unique symbol;
319
- type InterruptSignal = {
320
- readonly __type: typeof INTERRUPT;
308
+ /** A single question within an interrupt step */
309
+ type InterruptQuestion = {
321
310
  /** Question to ask the user */
322
311
  question: string;
323
312
  /** State key where the answer will be stored */
324
313
  field: string;
325
314
  /** Optional suggestions to present as options */
326
315
  suggestions?: string[];
327
- /** Hidden context/instructions for the assistant (not shown to user directly) */
316
+ /** Hidden context/instructions for this specific question (not shown to user directly) */
317
+ context?: string;
318
+ };
319
+ /**
320
+ * Interrupt signal — pauses the flow and asks the user one or more questions.
321
+ * Single-question and multi-question interrupts use the same type.
322
+ */
323
+ type InterruptSignal = {
324
+ readonly __type: typeof INTERRUPT;
325
+ /** Questions to ask — ask all in one conversational message */
326
+ questions: InterruptQuestion[];
327
+ /** Overall hidden context/instructions for the assistant (not shown to user directly) */
328
328
  context?: string;
329
329
  };
330
330
  type WidgetSignal = {
@@ -335,36 +335,79 @@ type WidgetSignal = {
335
335
  data: Record<string, unknown>;
336
336
  /** Description of what the widget does (for the AI's context) */
337
337
  description?: string;
338
+ /**
339
+ * State key this widget fills — enables auto-skip when the field is already in state.
340
+ * Pass this so the engine can skip the widget step when the answer is already known.
341
+ */
342
+ field?: string;
338
343
  };
339
344
  /**
340
- * Create an interrupt signal — pauses the flow and asks the user a text question.
345
+ * Create an interrupt signal — pauses the flow and asks the user a question.
346
+ *
347
+ * Accepts a single question (shorthand) or multiple questions (array form).
348
+ * Both produce the same signal type.
349
+ *
350
+ * @example Single question
351
+ * ```ts
352
+ * return interrupt({ question: "Your email?", field: "email" })
353
+ * ```
354
+ *
355
+ * @example Multiple questions (asked together in one message)
356
+ * ```ts
357
+ * return interrupt({ questions: [
358
+ * { question: "How many employees?", field: "headcount" },
359
+ * { question: "Average age?", field: "averageAge" },
360
+ * ]})
361
+ * ```
341
362
  */
342
363
  declare function interrupt(config: {
343
364
  question: string;
344
365
  field: string;
345
366
  suggestions?: string[];
346
367
  context?: string;
368
+ } | {
369
+ questions: InterruptQuestion[];
370
+ context?: string;
347
371
  }): InterruptSignal;
348
372
  /**
349
373
  * Create a widget signal — pauses the flow and renders a widget UI.
374
+ *
375
+ * Pass `field` to enable auto-skip: if the field is already in state, the widget
376
+ * step will be skipped automatically.
350
377
  */
351
378
  declare function showWidget(resource: RegisteredResource, config: {
352
379
  data: Record<string, unknown>;
353
380
  description?: string;
381
+ field?: string;
354
382
  }): WidgetSignal;
355
383
  type MaybePromise<T> = T | Promise<T>;
356
- /** Configuration for a flow node */
384
+ /**
385
+ * Optional config for handler-based nodes.
386
+ * Provides metadata used by the engine (e.g., auto-skip on widget steps).
387
+ *
388
+ * For declarative nodes, config is inferred automatically — no need to pass this.
389
+ */
357
390
  type NodeConfig<TState extends Record<string, unknown> = Record<string, unknown>> = {
358
- /** Resource to display when this node returns a WidgetSignal */
359
- resource?: RegisteredResource;
360
- /** State key this node fills enables auto-skip when the field is already in state via `initialState` */
391
+ /**
392
+ * State key this node fills.
393
+ * When set on a handler-based widget node and the field is already in state,
394
+ * the node is auto-skipped. (Alternatively, pass `field` to `showWidget()`.)
395
+ */
361
396
  field?: Extract<keyof TState, string>;
397
+ /**
398
+ * Mark this node as conversational — the AI will engage in back-and-forth
399
+ * conversation before advancing to the next node.
400
+ *
401
+ * - `true` — generic conversational behavior
402
+ * - `string` — specific guidance for the AI (e.g., "Help the user compare plans")
403
+ */
404
+ conversational?: boolean | string;
362
405
  };
363
406
  /**
364
407
  * Node handler — a single function type for all node kinds.
365
408
  * The return value determines behavior:
366
409
  * - `Partial<TState>` → action node (state merged, auto-advance)
367
- * - `InterruptSignal` → interrupt (pause, ask user)
410
+ * - `InterruptSignal` → interrupt (pause, ask user one or more questions)
368
411
  * - `WidgetSignal` → widget step (pause, show widget)
369
412
  */
370
413
  type NodeHandler<TState> = (state: Partial<TState>, meta?: Record<string, unknown>) => MaybePromise<Partial<TState> | InterruptSignal | WidgetSignal>;
@@ -388,7 +431,7 @@ type FlowConfig = {
388
431
  * The state definition serves two purposes:
389
432
  * 1. Type inference — `TState` is automatically derived, no explicit generic needed
390
433
  * 2. AI protocol — field names, types, and descriptions are included in the tool
391
- * description so the AI can pre-fill answers via `initialState`
434
+ * description so the AI can pre-fill answers via `_meta.flow.state`
392
435
  *
393
436
  * @example
394
437
  * ```ts
@@ -445,7 +488,7 @@ type RegisteredFlow = {
445
488
  * title: "User Onboarding",
446
489
  * description: "Guides users through onboarding",
447
490
  * })
448
- * .addNode("ask_name", () => interrupt({ question: "What's your name?", field: "name" }))
491
+ * .addNode("ask_name", (state) => interrupt({ question: "What's your name?", field: "name" }))
449
492
  * .addNode("greet", (state) => ({ greeting: `Hello ${state.name}!` }))
450
493
  * .addEdge(START, "ask_name")
451
494
  * .addEdge("ask_name", "greet")
@@ -464,7 +507,8 @@ declare class StateGraph<TState extends Record<string, unknown>> {
464
507
  */
465
508
  addNode(name: string, handler: NodeHandler<TState>): this;
466
509
  /**
467
- * Add a node with config (e.g., resource, field) and a handler.
510
+ * Add a node with config and a handler.
511
+ * Pass `field` to enable auto-skip on widget nodes.
468
512
  */
469
513
  addNode(name: string, config: NodeConfig<TState>, handler: NodeHandler<TState>): this;
470
514
  /**
@@ -621,4 +665,310 @@ declare function createTool<TInput extends z.ZodRawShape>(config: ToolConfig<TIn
621
665
  */
622
666
  declare function registerTools(server: McpServer, tools: RegisteredTool[]): Promise<void>;
623
667
 
624
- export { type ConditionFn, END, type FlowConfig, type HostContext, type InferFlowState, type InterruptSignal, type NodeConfig, type NodeHandler, type RegisteredFlow, type RegisteredResource, type RegisteredTool, type ResourceConfig, START, StateGraph, type ToolCallResult, type ToolConfig, type ToolHandler, type ToolHandlerContext, type ToolResult, type ToolToolCallback, type UnifiedWidgetClient, type WidgetCSP, type WidgetPlatform, type WidgetSignal, createFlow, createResource, createTool, detectPlatform, interrupt, isMCPApps, isOpenAI, registerTools, showWidget };
668
+ /**
669
+ * Server-side API route handler for widget tracking events.
670
+ *
671
+ * Receives batched events from the `useWaniwani` React hook and forwards them
672
+ * to the WaniWani backend using the server-side SDK.
673
+ *
674
+ * @example Next.js App Router
675
+ * ```typescript
676
+ * // app/api/waniwani/track/route.ts
677
+ * import { createTrackingRoute } from "@waniwani/sdk/mcp";
678
+ *
679
+ * const handler = createTrackingRoute({
680
+ * apiKey: process.env.WANIWANI_API_KEY,
681
+ * baseUrl: process.env.WANIWANI_BASE_URL,
682
+ * });
683
+ *
684
+ * export { handler as POST };
685
+ * ```
686
+ */
687
+ interface TrackingRouteOptions {
688
+ /** API key for the WaniWani backend. Defaults to WANIWANI_API_KEY env var. */
689
+ apiKey?: string;
690
+ /** Base URL for the WaniWani backend. Defaults to https://app.waniwani.ai. */
691
+ baseUrl?: string;
692
+ }
693
+ /**
694
+ * Creates a POST handler that receives tracking events from `useWaniwani`
695
+ * and forwards them to the WaniWani backend.
696
+ */
697
+ declare function createTrackingRoute(options?: TrackingRouteOptions): (request: Request) => Promise<Response>;
698
+
699
+ interface SearchResult {
700
+ source: string;
701
+ heading: string;
702
+ content: string;
703
+ score: number;
704
+ }
705
+ /** A file to ingest into the knowledge base */
706
+ interface KbIngestFile {
707
+ /** Filename (used as chunk source identifier) */
708
+ filename: string;
709
+ /** Markdown content of the file */
710
+ content: string;
711
+ }
712
+ /** Response from the ingest endpoint */
713
+ interface KbIngestResult {
714
+ /** Number of chunks created from the ingested files */
715
+ chunksIngested: number;
716
+ /** Number of files successfully processed */
717
+ filesProcessed: number;
718
+ }
719
+ /** Options for the search method */
720
+ interface KbSearchOptions {
721
+ /** Number of results to return (1-20, default 5) */
722
+ topK?: number;
723
+ /** Minimum similarity score threshold (0-1, default 0.3) */
724
+ minScore?: number;
725
+ }
726
+ /** A source entry in the knowledge base */
727
+ interface KbSource {
728
+ /** Source filename */
729
+ source: string;
730
+ /** Number of chunks from this source */
731
+ chunkCount: number;
732
+ /** ISO timestamp of when the source was first ingested */
733
+ createdAt: string;
734
+ }
735
+ /** KB client for server-side knowledge base operations */
736
+ interface KbClient {
737
+ /**
738
+ * Ingest files into the knowledge base.
739
+ *
740
+ * **Warning**: This is destructive — it deletes ALL existing chunks
741
+ * for the environment before ingesting the new files.
742
+ */
743
+ ingest(files: KbIngestFile[]): Promise<KbIngestResult>;
744
+ /** Search the knowledge base for relevant chunks */
745
+ search(query: string, options?: KbSearchOptions): Promise<SearchResult[]>;
746
+ /** List all sources in the knowledge base */
747
+ sources(): Promise<KbSource[]>;
748
+ }
749
+
750
+ type EventType = "session.started" | "tool.called" | "quote.requested" | "quote.succeeded" | "quote.failed" | "link.clicked" | "purchase.completed" | "widget_render" | "widget_click" | "widget_link_click" | "widget_error" | "widget_scroll" | "widget_form_field" | "widget_form_submit";
751
+ interface ToolCalledProperties {
752
+ name?: string;
753
+ type?: "pricing" | "product_info" | "availability" | "support" | "other";
754
+ }
755
+ interface QuoteSucceededProperties {
756
+ amount?: number;
757
+ currency?: string;
758
+ }
759
+ interface LinkClickedProperties {
760
+ url?: string;
761
+ }
762
+ interface PurchaseCompletedProperties {
763
+ amount?: number;
764
+ currency?: string;
765
+ }
766
+ interface TrackingContext {
767
+ /**
768
+ * MCP request metadata passed through to the API.
769
+ *
770
+ * Location varies by MCP library:
771
+ * - `@vercel/mcp-handler`: `extra._meta`
772
+ * - `@modelcontextprotocol/sdk`: `request.params._meta`
773
+ */
774
+ meta?: Record<string, unknown>;
775
+ /** Legacy metadata field supported for backward compatibility. */
776
+ metadata?: Record<string, unknown>;
777
+ /** Optional explicit correlation fields. */
778
+ sessionId?: string;
779
+ traceId?: string;
780
+ requestId?: string;
781
+ correlationId?: string;
782
+ externalUserId?: string;
783
+ /** Optional explicit envelope fields. */
784
+ eventId?: string;
785
+ timestamp?: string | Date;
786
+ source?: string;
787
+ }
788
+ /**
789
+ * Modern tracking shape (preferred).
790
+ */
791
+ interface BaseTrackEvent extends TrackingContext {
792
+ event: EventType;
793
+ properties?: Record<string, unknown>;
794
+ }
795
+ type TrackEvent = ({
796
+ event: "session.started";
797
+ } & BaseTrackEvent) | ({
798
+ event: "tool.called";
799
+ properties?: ToolCalledProperties;
800
+ } & BaseTrackEvent) | ({
801
+ event: "quote.requested";
802
+ } & BaseTrackEvent) | ({
803
+ event: "quote.succeeded";
804
+ properties?: QuoteSucceededProperties;
805
+ } & BaseTrackEvent) | ({
806
+ event: "quote.failed";
807
+ } & BaseTrackEvent) | ({
808
+ event: "link.clicked";
809
+ properties?: LinkClickedProperties;
810
+ } & BaseTrackEvent) | ({
811
+ event: "purchase.completed";
812
+ properties?: PurchaseCompletedProperties;
813
+ } & BaseTrackEvent);
814
+ /**
815
+ * Legacy tracking shape supported for existing integrations.
816
+ */
817
+ interface LegacyTrackEvent extends TrackingContext {
818
+ eventType: EventType;
819
+ properties?: Record<string, unknown>;
820
+ toolName?: string;
821
+ toolType?: ToolCalledProperties["type"];
822
+ quoteAmount?: number;
823
+ quoteCurrency?: string;
824
+ linkUrl?: string;
825
+ purchaseAmount?: number;
826
+ purchaseCurrency?: string;
827
+ }
828
+ /**
829
+ * Public track input accepted by `client.track()`.
830
+ */
831
+ type TrackInput = TrackEvent | LegacyTrackEvent;
832
+ interface TrackingConfig {
833
+ /** Events API V2 endpoint path. */
834
+ endpointPath?: string;
835
+ /** Periodic flush interval for buffered events. */
836
+ flushIntervalMs?: number;
837
+ /** Max events per HTTP batch send. */
838
+ maxBatchSize?: number;
839
+ /** Max in-memory buffer size before oldest items are dropped. */
840
+ maxBufferSize?: number;
841
+ /** Number of retries for retryable failures. */
842
+ maxRetries?: number;
843
+ /** Retry backoff base delay. */
844
+ retryBaseDelayMs?: number;
845
+ /** Retry backoff max delay. */
846
+ retryMaxDelayMs?: number;
847
+ /** Default shutdown timeout when none is provided. */
848
+ shutdownTimeoutMs?: number;
849
+ }
850
+ interface TrackingShutdownOptions {
851
+ timeoutMs?: number;
852
+ }
853
+ interface TrackingShutdownResult {
854
+ timedOut: boolean;
855
+ pendingEvents: number;
856
+ }
857
+ /**
858
+ * Tracking module methods for WaniWaniClient.
859
+ */
860
+ interface TrackingClient {
861
+ /**
862
+ * Track an event using modern or legacy input shape.
863
+ * Returns a deterministic event id immediately after enqueue.
864
+ */
865
+ track: (event: TrackInput) => Promise<{
866
+ eventId: string;
867
+ }>;
868
+ /**
869
+ * Flush all currently buffered events.
870
+ */
871
+ flush: () => Promise<void>;
872
+ /**
873
+ * Flush and stop the transport.
874
+ */
875
+ shutdown: (options?: TrackingShutdownOptions) => Promise<TrackingShutdownResult>;
876
+ }
877
+
878
+ interface WaniWaniConfig {
879
+ /**
880
+ * Your MCP environment API key
881
+ *
882
+ * Defaults to process.env.WANIWANI_API_KEY if not provided
883
+ *
884
+ * To create one, visit:
885
+ * https://app.waniwani.com/mcp/environments
886
+ */
887
+ apiKey?: string;
888
+ /**
889
+ * The base URL of the WaniWani API
890
+ *
891
+ * Defaults to https://app.waniwani.ai
892
+ */
893
+ baseUrl?: string;
894
+ /**
895
+ * Tracking transport behavior.
896
+ */
897
+ tracking?: TrackingConfig;
898
+ }
899
+ /**
900
+ * WaniWani SDK Client
901
+ *
902
+ * Extends with each module:
903
+ * - TrackingClient: track(), flush(), shutdown()
904
+ *
905
+ * Pass this client to framework adapters:
906
+ * - `toNextJsHandler(wani, { ... })` for Next.js route handlers
907
+ */
908
+ interface WaniWaniClient extends TrackingClient {
909
+ /** @internal Resolved config — used by framework adapters */
910
+ readonly _config: InternalConfig;
911
+ /** Knowledge base client for ingestion, search, and source listing */
912
+ readonly kb: KbClient;
913
+ }
914
+ interface InternalConfig {
915
+ baseUrl: string;
916
+ apiKey: string | undefined;
917
+ tracking: Required<TrackingConfig>;
918
+ }
919
+
920
+ type WaniwaniTracker = Pick<WaniWaniClient, "flush" | "track" | "_config">;
921
+ type UnknownRecord = Record<string, unknown>;
922
+ /**
923
+ * Options for withWaniwani().
924
+ */
925
+ type WithWaniwaniOptions = {
926
+ /**
927
+ * Optional pre-built WaniWani client.
928
+ * When omitted, a new client is created from `config`.
929
+ */
930
+ client?: WaniwaniTracker;
931
+ /**
932
+ * WaniWani client config used when `client` is omitted.
933
+ */
934
+ config?: WaniWaniConfig;
935
+ /**
936
+ * Optional explicit tool type. Defaults to `"other"`.
937
+ */
938
+ toolType?: ToolCalledProperties["type"] | ((toolName: string) => ToolCalledProperties["type"] | undefined);
939
+ /**
940
+ * Optional metadata merged into every tracked event.
941
+ */
942
+ metadata?: UnknownRecord;
943
+ /**
944
+ * Flush tracking transport after each tool call.
945
+ */
946
+ flushAfterToolCall?: boolean;
947
+ /**
948
+ * Optional error callback for non-fatal tracking errors.
949
+ */
950
+ onError?: (error: Error) => void;
951
+ /**
952
+ * Inject widget tracking config into tool response `_meta.waniwani` so browser
953
+ * widgets can send events directly to the WaniWani backend.
954
+ *
955
+ * Always injects `endpoint`. Injects `token` when an API key is configured
956
+ * and token minting succeeds.
957
+ *
958
+ * @default true
959
+ */
960
+ injectWidgetToken?: boolean;
961
+ };
962
+ /**
963
+ * Wrap an MCP server so tool handlers automatically emit `tool.called` events.
964
+ *
965
+ * The wrapper intercepts `server.registerTool(...)`, tracks each invocation,
966
+ * then forwards execution to the original tool handler.
967
+ *
968
+ * When `injectWidgetToken` is enabled (default), tracking config is injected
969
+ * into tool response `_meta.waniwani` so browser widgets can post events
970
+ * directly to the WaniWani backend without a server-side proxy.
971
+ */
972
+ declare function withWaniwani(server: McpServer, options?: WithWaniwaniOptions): McpServer;
973
+
974
+ export { type ConditionFn, END, type FlowConfig, type HostContext, type InferFlowState, type InterruptSignal, type NodeConfig, type NodeHandler, type RegisteredFlow, type RegisteredResource, type RegisteredTool, type ResourceConfig, START, StateGraph, type ToolCallResult, type ToolConfig, type ToolHandler, type ToolHandlerContext, type ToolResult, type ToolToolCallback, type TrackingRouteOptions, type UnifiedWidgetClient, type WidgetCSP, type WidgetPlatform, type WidgetSignal, type WithWaniwaniOptions, createFlow, createResource, createTool, createTrackingRoute, detectPlatform, interrupt, isMCPApps, isOpenAI, registerTools, showWidget, withWaniwani };
package/dist/mcp/index.js CHANGED
@@ -1,4 +1,4 @@
1
- function P(){return typeof window<"u"&&"openai"in window?"openai":"mcp-apps"}function j(){return P()==="openai"}function J(){return P()==="mcp-apps"}var x="__start__",R="__end__",I=Symbol.for("waniwani.flow.interrupt"),F=Symbol.for("waniwani.flow.widget");function O(e){return{__type:I,...e}}function $(e,t){return{__type:F,resource:e,...t}}function M(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===I}function H(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===F}import{z as h}from"zod";var v="text/html+skybridge",E="text/html;profile=mcp-app",A=async(e,t)=>{let o=e.endsWith("/")?e.slice(0,-1):e;return await(await fetch(`${o}${t}`)).text()};function D(e){return{"openai/widgetDescription":e.description,"openai/widgetPrefersBorder":e.prefersBorder,"openai/widgetDomain":e.widgetDomain,...e.widgetCSP&&{"openai/widgetCSP":e.widgetCSP}}}function W(e){let t=e.widgetCSP?{connectDomains:e.widgetCSP.connect_domains,resourceDomains:e.widgetCSP.resource_domains,frameDomains:e.widgetCSP.frame_domains,redirectDomains:e.widgetCSP.redirect_domains}:void 0;return{ui:{...t&&{csp:t},...e.widgetDomain&&{domain:e.widgetDomain},...e.prefersBorder!==void 0&&{prefersBorder:e.prefersBorder}}}}function C(e){return{"openai/outputTemplate":e.openaiTemplateUri,"openai/toolInvocation/invoking":e.invoking,"openai/toolInvocation/invoked":e.invoked,"openai/widgetAccessible":!0,"openai/resultCanProduceWidget":!0,ui:{resourceUri:e.mcpTemplateUri,...e.autoHeight&&{autoHeight:!0}}}}function B(e){let t=e.description??"",o=e._zod?.def;if(o?.type==="enum"&&o.entries){let s=Object.keys(o.entries).map(d=>`"${d}"`).join(" | ");return t?`${s} \u2014 ${t}`:s}return t}function L(e){let t=["","## FLOW EXECUTION PROTOCOL","","This tool implements a multi-step conversational flow. Follow this protocol exactly:","",'1. Call with `action: "start"` to begin. If the user\'s message already'," contains answers to likely questions, extract them into `initialState`"," as `{ field: value }` pairs. The engine will auto-skip questions whose"," fields are already filled."," Only extract values the user explicitly stated \u2014 do NOT guess or invent values."];if(e.state){let o=Object.entries(e.state).map(([s,d])=>{let f=B(d);return f?`\`${s}\` (${f})`:`\`${s}\``}).join(", ");t.push(` Known fields: ${o}.`)}return t.push("2. The response JSON `status` field tells you what to do next:",' - `"interrupt"`: Ask the user the `question` to collect the `field` value.'," If a `context` field is present, use it as hidden instructions to enrich your response (do NOT show it verbatim)."," Then call again with:",' `action: "continue"`, `step` = the returned `step`, `state` = the returned `state`,'," `answer` = the user's answer.",' - `"widget"`: A widget UI is being shown. The `field` property tells you'," which state field this step collects. When the user makes a choice, call again with:",' `action: "widget_result"`, `step` = the returned `step`, `state` = the returned `state`,'," `answer` = the user's selection.",' - `"complete"`: The flow is done. Present the result to the user.',' - `"error"`: Something went wrong. Show the `error` message.',"","3. ALWAYS pass back the `state` object exactly as received.","4. Do NOT invent state values. Only use `initialState` for information the user explicitly provided."),t.join(`
2
- `)}async function N(e,t){return e.type==="direct"?e.to:e.condition(t)}async function b(e,t,o,s,d,f,S){let r=e,p={...t},m=50,n=0;for(;n++<m;){if(r===R)return{text:JSON.stringify({status:"complete",state:p}),data:{status:"complete",state:p}};let g=o.get(r);if(!g)return{text:JSON.stringify({status:"error",error:`Unknown node: "${r}"`}),data:{status:"error"}};try{let a=await g(p,S);if(M(a)){let i=p[a.field];if(i!=null&&i!==""){let l=d.get(r);if(!l)return{text:JSON.stringify({status:"error",error:`No outgoing edge from node "${r}"`}),data:{status:"error"}};r=await N(l,p);continue}return{text:JSON.stringify({status:"interrupt",step:r,question:a.question,field:a.field,suggestions:a.suggestions,...a.context?{context:a.context}:{},state:p}),data:{status:"interrupt",step:r,state:p}}}if(H(a)){let i=s.get(r)?.field;if(i){let u=p[i];if(u!=null&&u!==""){let w=d.get(r);if(!w)return{text:JSON.stringify({status:"error",error:`No outgoing edge from node "${r}"`}),data:{status:"error"}};r=await N(w,p);continue}}let l=a.resource;return{text:JSON.stringify({status:"widget",step:r,...i?{field:i}:{},widgetId:l.id,description:a.description,state:p}),data:{...a.data,__flow:{flowId:f,step:r,state:p}},widgetMeta:C({openaiTemplateUri:l.openaiUri,mcpTemplateUri:l.mcpUri,invoking:"Loading...",invoked:"Loaded",autoHeight:l.autoHeight})}}p={...p,...a};let c=d.get(r);if(!c)return{text:JSON.stringify({status:"error",error:`No outgoing edge from node "${r}"`}),data:{status:"error"}};r=await N(c,p)}catch(a){let c=a instanceof Error?a.message:String(a);return{text:JSON.stringify({status:"error",step:r,error:c,state:p}),data:{status:"error",error:c}}}}return{text:JSON.stringify({status:"error",error:"Flow exceeded maximum iterations (possible infinite loop)"}),data:{status:"error"}}}var Y={action:h.enum(["start","continue","widget_result"]).describe('"start" to begin the flow, "continue" after the user answers a question, "widget_result" when a widget returns data'),step:h.string().optional().describe("Current step name (from the previous response)"),state:h.record(h.string(),h.unknown()).optional().describe("Flow state \u2014 pass back exactly as received"),answer:h.string().optional().describe("The user's answer (for interrupt steps)"),widgetResult:h.record(h.string(),h.unknown()).optional().describe("Data returned by a widget callback"),initialState:h.record(h.string(),h.unknown()).optional().describe(`Pre-filled answers extracted from the user's message (only for action: "start")`)};function U(e){let{config:t,nodes:o,nodeConfigs:s,edges:d}=e,f=L(t),S=`${t.description}
3
- ${f}`,r;for(let n of s.values())if(n.resource){r=n.resource;break}let p=r?C({openaiTemplateUri:r.openaiUri,mcpTemplateUri:r.mcpUri,invoking:"Loading...",invoked:"Loaded",autoHeight:r.autoHeight}):void 0;async function m(n,g){let a=n.state??{};if(n.action==="start"){let c=d.get(x);if(!c)return{text:JSON.stringify({status:"error",error:"No start edge"}),data:{status:"error"}};let i=n.initialState?{...a,...n.initialState}:a,l=await N(c,i);return b(l,i,o,s,d,t.id,g)}if(n.action==="continue"){if(!n.step)return{text:JSON.stringify({status:"error",error:'Missing "step" for continue action'}),data:{status:"error"}};let c={...a};if(n.answer){let u=o.get(n.step);if(u)try{let w=await u(c,g);M(w)&&w.field&&(c={...c,[w.field]:n.answer})}catch{}}let i=d.get(n.step);if(!i)return{text:JSON.stringify({status:"error",error:`No edge from step "${n.step}"`}),data:{status:"error"}};let l=await N(i,c);return b(l,c,o,s,d,t.id,g)}if(n.action==="widget_result"){if(!n.step)return{text:JSON.stringify({status:"error",error:'Missing "step" for widget_result action'}),data:{status:"error"}};let c=n.widgetResult??{};if(n.answer!==void 0&&Object.keys(c).length===0){let w=s.get(n.step)?.field;w&&(c={[w]:n.answer})}let i={...a,...c},l=d.get(n.step);if(!l)return{text:JSON.stringify({status:"error",error:`No edge from step "${n.step}"`}),data:{status:"error"}};let u=await N(l,i);return b(u,i,o,s,d,t.id,g)}return{text:JSON.stringify({status:"error",error:`Unknown action: "${n.action}"`}),data:{status:"error"}}}return{id:t.id,title:t.title,description:S,async register(n){n.registerTool(t.id,{title:t.title,description:S,inputSchema:Y,annotations:t.annotations,...p&&{_meta:p}},(async(g,a)=>{let i=a._meta??{},l=await m(g,i);return l.widgetMeta?{content:[{type:"text",text:l.text}],structuredContent:l.data,_meta:{...l.widgetMeta,...i}}:{content:[{type:"text",text:l.text}]}}))}}}var k=class{nodes=new Map;nodeConfigs=new Map;edges=new Map;config;constructor(t){this.config=t}addNode(t,o,s){if(t===x||t===R)throw new Error(`"${t}" is a reserved name and cannot be used as a node name`);if(this.nodes.has(t))throw new Error(`Node "${t}" already exists`);let d,f={};if(typeof o=="function")d=o;else{if(!s)throw new Error(`addNode("${t}", config, handler) requires a handler as the third argument`);d=s,f=o}return this.nodes.set(t,d),this.nodeConfigs.set(t,f),this}addEdge(t,o){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge. Use addConditionalEdge for branching.`);return this.edges.set(t,{type:"direct",to:o}),this}addConditionalEdge(t,o){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge.`);return this.edges.set(t,{type:"conditional",condition:o}),this}compile(){return this.validate(),U({config:this.config,nodes:new Map(this.nodes),nodeConfigs:new Map(this.nodeConfigs),edges:new Map(this.edges)})}validate(){if(!this.edges.has(x))throw new Error('Flow must have an entry point. Add an edge from START: .addEdge(START, "first_node")');let t=this.edges.get(x);if(t?.type==="direct"&&t.to!==R&&!this.nodes.has(t.to))throw new Error(`START edge references non-existent node: "${t.to}"`);for(let[o,s]of this.edges){if(o!==x&&!this.nodes.has(o))throw new Error(`Edge from non-existent node: "${o}"`);if(s.type==="direct"&&s.to!==R&&!this.nodes.has(s.to))throw new Error(`Edge from "${o}" references non-existent node: "${s.to}"`)}for(let[o]of this.nodes)if(!this.edges.has(o))throw new Error(`Node "${o}" has no outgoing edge. Add one with .addEdge("${o}", ...) or .addConditionalEdge("${o}", ...)`)}};function q(e){return new k(e)}function z(e){let{id:t,title:o,description:s,baseUrl:d,htmlPath:f,widgetDomain:S,prefersBorder:r=!0,autoHeight:p=!0}=e,m=e.widgetCSP??{connect_domains:[d],resource_domains:[d]};if(process.env.NODE_ENV==="development")try{let{hostname:u}=new URL(d);(u==="localhost"||u==="127.0.0.1")&&(m={...m,connect_domains:[...m.connect_domains||[],`ws://${u}:*`,`wss://${u}:*`],resource_domains:[...m.resource_domains||[],`http://${u}:*`]})}catch{}let n=`ui://widgets/apps-sdk/${t}.html`,g=`ui://widgets/ext-apps/${t}.html`,a=null,c=()=>(a||(a=A(d,f)),a),i=s;async function l(u){let w=await c();u.registerResource(`${t}-openai-widget`,n,{title:o,description:i,mimeType:v,_meta:{"openai/widgetDescription":i,"openai/widgetPrefersBorder":r}},async _=>({contents:[{uri:_.href,mimeType:v,text:w,_meta:D({description:i,prefersBorder:r,widgetDomain:S,widgetCSP:m})}]})),u.registerResource(`${t}-mcp-widget`,g,{title:o,description:i,mimeType:E,_meta:{ui:{prefersBorder:r}}},async _=>({contents:[{uri:_.href,mimeType:E,text:w,_meta:W({description:i,prefersBorder:r,widgetCSP:m})}]}))}return{id:t,title:o,description:s,openaiUri:n,mcpUri:g,autoHeight:p,register:l}}function Z(e,t){let{resource:o,description:s,inputSchema:d,annotations:f}=e,S=e.id??o?.id,r=e.title??o?.title;if(!S)throw new Error("createTool: `id` is required when no resource is provided");if(!r)throw new Error("createTool: `title` is required when no resource is provided");let p=o?C({openaiTemplateUri:o.openaiUri,mcpTemplateUri:o.mcpUri,invoking:e.invoking??"Loading...",invoked:e.invoked??"Loaded",autoHeight:o.autoHeight}):void 0;return{id:S,title:r,description:s,async register(m){m.registerTool(S,{title:r,description:s,inputSchema:d,annotations:f,...p&&{_meta:p}},(async(n,g)=>{let c=g._meta??{},i=await t(n,{extra:{_meta:c}});return o&&i.data?{content:[{type:"text",text:i.text}],structuredContent:i.data,_meta:{...p,...c}}:{content:[{type:"text",text:i.text}]}}))}}}async function G(e,t){await Promise.all(t.map(o=>o.register(e)))}export{R as END,x as START,k as StateGraph,q as createFlow,z as createResource,Z as createTool,P as detectPlatform,O as interrupt,J as isMCPApps,j as isOpenAI,G as registerTools,$ as showWidget};
1
+ function U(){return typeof window<"u"&&"openai"in window?"openai":"mcp-apps"}function ge(){return U()==="openai"}function he(){return U()==="mcp-apps"}var v="__start__",E="__end__",B=Symbol.for("waniwani.flow.interrupt"),H=Symbol.for("waniwani.flow.widget");function z(e){if("questions"in e)return{__type:B,questions:e.questions,context:e.context};let{question:t,field:n,context:r,suggestions:o}=e;return{__type:B,questions:[{question:t,field:n,context:r,suggestions:o}]}}function K(e,t){return{__type:H,resource:e,...t}}function Y(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===B}function X(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===H}import{z as I}from"zod";var C="text/html+skybridge",_="text/html;profile=mcp-app",J=async(e,t)=>{let n=e.endsWith("/")?e.slice(0,-1):e;return await(await fetch(`${n}${t}`)).text()};function Z(e){return{"openai/widgetDescription":e.description,"openai/widgetPrefersBorder":e.prefersBorder,"openai/widgetDomain":e.widgetDomain,...e.widgetCSP&&{"openai/widgetCSP":e.widgetCSP}}}function G(e){let t=e.widgetCSP?{connectDomains:e.widgetCSP.connect_domains,resourceDomains:e.widgetCSP.resource_domains,frameDomains:e.widgetCSP.frame_domains,redirectDomains:e.widgetCSP.redirect_domains}:void 0;return{ui:{...t&&{csp:t},...e.widgetDomain&&{domain:e.widgetDomain},...e.prefersBorder!==void 0&&{prefersBorder:e.prefersBorder}}}}function R(e){return{...e.openaiTemplateUri&&{"openai/outputTemplate":e.openaiTemplateUri},"openai/toolInvocation/invoking":e.invoking,"openai/toolInvocation/invoked":e.invoked,"openai/widgetAccessible":!0,"openai/resultCanProduceWidget":!0,...e.mcpTemplateUri&&{ui:{resourceUri:e.mcpTemplateUri,...e.autoHeight&&{autoHeight:!0}}}}}function Q(e){let t=JSON.stringify(e);return typeof Buffer<"u"?Buffer.from(t,"utf-8").toString("base64"):btoa(t)}function ee(e){try{let t;return typeof Buffer<"u"?t=Buffer.from(e,"base64").toString("utf-8"):t=atob(e),JSON.parse(t)}catch{return null}}function me(e){let t=e.description??"",n=e._zod?.def;if(n?.type==="enum"&&n.entries){let r=Object.keys(n.entries).map(o=>`"${o}"`).join(" | ");return t?`${r} \u2014 ${t}`:r}return t}function we(e){let t=["","## FLOW EXECUTION PROTOCOL","","This tool implements a multi-step conversational flow. Follow this protocol exactly:","",'1. Call with `action: "start"` to begin. If the user\'s message already'," contains answers to likely questions, extract them into `stateUpdates`"," as `{ field: value }` pairs. The engine will auto-skip steps whose"," fields are already filled."," Only extract values the user explicitly stated \u2014 do NOT guess or invent values."];if(e.state){let n=Object.entries(e.state).map(([r,o])=>{let a=me(o);return a?`\`${r}\` (${a})`:`\`${r}\``}).join(", ");t.push(` Known fields: ${n}.`)}return t.push("2. The response JSON `status` field tells you what to do next:",' - `"interrupt"`: Pause and ask the user. Two forms:'," a. Single question: `{ question, field, context? }` \u2014 ask `question`, store answer in `field`."," b. Multi-question: `{ questions: [{question, field}, ...], context? }` \u2014 ask ALL questions"," in one conversational message, collect all answers."," `context` (if present) is hidden AI instructions \u2014 use to shape your response, do NOT show verbatim."," Then call again with:",' `action: "continue"`, `flowToken` = the `flowToken` from the response (pass back exactly as received),'," `stateUpdates` = answers keyed by their `field` names, plus any other fields the user mentioned.",' - `"widget"`: A widget UI is being shown. The user will interact with the widget.'," When the user makes a choice, call again with:",' `action: "continue"`, `flowToken` = the `flowToken` from the response,'," `stateUpdates` = `{ [field]: <user's selection> }` plus any other fields the user mentioned.",' - `"complete"`: The flow is done. Present the result to the user.',' - `"error"`: Something went wrong. Show the `error` message.',"","3. ALWAYS pass back the `flowToken` string exactly as received \u2014 it is an opaque token, do not modify it.","4. Do NOT invent state values. Only use `stateUpdates` for information the user explicitly provided.","5. Include only the fields the user actually answered in `stateUpdates` \u2014 do NOT guess missing ones."," If the user did not answer all pending questions, the engine will re-prompt for the remaining ones."," If the user mentioned values for other known fields, include those too \u2014"," they will be applied immediately and those steps will be auto-skipped.",'6. CONVERSATIONAL STEPS: When a response includes a `"conversational"` field:'," - Do NOT immediately call `continue`. Instead, engage in back-and-forth conversation."," - The user may ask follow-up questions, explore options, or request changes.",' - Only call `action: "continue"` when the user explicitly wants to move on',` (e.g., "looks good", "let's continue", "I'll go with X", or selects an option).`," - If `conversational` is a string, use it as guidance for what topics to discuss."," - While conversing, do NOT call the tool \u2014 just respond naturally to the user."),t.join(`
2
+ `)}function ye(e){if(e.flowToken){let t=ee(e.flowToken);if(t)return t}return{step:void 0,state:{}}}async function M(e,t){return e.type==="direct"?e.to:e.condition(t)}function q(e){return e!=null&&e!==""}function te(e,t,n,r,o){if(e.every(f=>q(r[f.field])))return null;let a=e.filter(f=>!q(r[f.field])),i=a.length===1,s=a[0],d=o?typeof o=="string"?o:!0:void 0;return{payload:i&&s?{status:"interrupt",question:s.question,field:s.field,...s.suggestions?{suggestions:s.suggestions}:{},...s.context||t?{context:s.context??t}:{},...d?{conversational:d}:{}}:{status:"interrupt",questions:a,...t?{context:t}:{},...d?{conversational:d}:{}},flowMeta:{step:n,state:r,...i&&s?{field:s.field}:{},questions:e,...t?{interruptContext:t}:{}}}}async function O(e,t,n,r,o,a){let i=e,s={...t},d=50,g=0;for(;g++<d;){if(i===E)return{payload:{status:"complete"},flowMeta:{state:s}};let f=n.get(i);if(!f)return{payload:{status:"error",error:`Unknown node: "${i}"`}};try{let c=await f(s,a);if(Y(c)){let l=te(c.questions,c.context,i,s,r.get(i)?.conversational);if(l)return l;let p=o.get(i);if(!p)return{payload:{status:"error",error:`No outgoing edge from node "${i}"`}};i=await M(p,s);continue}if(X(c)){let l=c.field??r.get(i)?.field;if(l&&q(s[l])){let w=o.get(i);if(!w)return{payload:{status:"error",error:`No outgoing edge from node "${i}"`}};i=await M(w,s);continue}let p=c.resource,T=r.get(i)?.conversational;return{payload:{status:"widget",description:c.description,...T?{conversational:typeof T=="string"?T:!0}:{}},data:c.data,widgetMeta:R({openaiTemplateUri:p.openaiUri,mcpTemplateUri:p.mcpUri,invoking:"Loading...",invoked:"Loaded",autoHeight:p.autoHeight}),flowMeta:{step:i,state:s,field:l,widgetId:p.id}}}s={...s,...c};let u=o.get(i);if(!u)return{payload:{status:"error",error:`No outgoing edge from node "${i}"`}};i=await M(u,s)}catch(c){return{payload:{status:"error",error:c instanceof Error?c.message:String(c)},flowMeta:{step:i,state:s}}}}return{payload:{status:"error",error:"Flow exceeded maximum iterations (possible infinite loop)"}}}var Te={action:I.enum(["start","continue"]).describe('"start" to begin the flow, "continue" to resume after a pause (interrupt or widget)'),stateUpdates:I.record(I.string(),I.unknown()).optional().describe("State field values to set before processing the next node. Use this to pass the user's answer (keyed by the field name from the response) and any other values the user mentioned."),flowToken:I.string().optional().describe("Opaque flow token from the previous response. Pass back exactly as received.")};function ne(e){let{config:t,nodes:n,nodeConfigs:r,edges:o}=e,a=we(t),i=`${t.description}
3
+ ${a}`;async function s(d,g){let f=ye(d),c=f.state;if(d.action==="start"){let u=o.get(v);if(!u)return{payload:{status:"error",error:"No start edge"}};let l={...c,...d.stateUpdates??{}},p=await M(u,l);return O(p,l,n,r,o,g)}if(d.action==="continue"){let u=f.step;if(!u)return{payload:{status:"error",error:'Missing "_meta.flow.step" for continue action'}};let l={...c,...d.stateUpdates??{}};if(f.questions){let p=te(f.questions,f.interruptContext,u,l,r.get(u)?.conversational);if(p)return p}if(f.questions||f.widgetId){let p=o.get(u);if(!p)return{payload:{status:"error",error:`No edge from step "${u}"`}};let T=await M(p,l);return O(T,l,n,r,o,g)}return O(u,l,n,r,o,g)}return{payload:{status:"error",error:`Unknown action: "${d.action}"`}}}return{id:t.id,title:t.title,description:i,async register(d){d.registerTool(t.id,{title:t.title,description:i,inputSchema:Te,annotations:t.annotations},(async(g,f)=>{let u=f._meta??{},l=await s(g,u),p=l.flowMeta?Q({step:l.flowMeta.step??"",state:l.flowMeta.state,field:l.flowMeta.field,widgetId:l.flowMeta.widgetId,questions:l.flowMeta.questions,interruptContext:l.flowMeta.interruptContext}):void 0,T={...l.payload,...p?{flowToken:p,flowId:t.id}:{}},w=[{type:"text",text:JSON.stringify(T,null,2)}],S={...l.widgetMeta??{},...u};return l.widgetMeta?{content:w,structuredContent:l.data,_meta:S}:{content:w,...Object.keys(S).length>0?{_meta:S}:{}}}))}}}var x=class{nodes=new Map;nodeConfigs=new Map;edges=new Map;config;constructor(t){this.config=t}addNode(t,n,r){if(t===v||t===E)throw new Error(`"${t}" is a reserved name and cannot be used as a node name`);if(this.nodes.has(t))throw new Error(`Node "${t}" already exists`);let o,a={};if(typeof n=="function")o=n;else if(r)o=r,a=n;else throw new Error(`Node "${t}" requires a handler function.`);return this.nodes.set(t,o),this.nodeConfigs.set(t,a),this}addEdge(t,n){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge. Use addConditionalEdge for branching.`);return this.edges.set(t,{type:"direct",to:n}),this}addConditionalEdge(t,n){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge.`);return this.edges.set(t,{type:"conditional",condition:n}),this}compile(){return this.validate(),ne({config:this.config,nodes:new Map(this.nodes),nodeConfigs:new Map(this.nodeConfigs),edges:new Map(this.edges)})}validate(){if(!this.edges.has(v))throw new Error('Flow must have an entry point. Add an edge from START: .addEdge(START, "first_node")');let t=this.edges.get(v);if(t?.type==="direct"&&t.to!==E&&!this.nodes.has(t.to))throw new Error(`START edge references non-existent node: "${t.to}"`);for(let[n,r]of this.edges){if(n!==v&&!this.nodes.has(n))throw new Error(`Edge from non-existent node: "${n}"`);if(r.type==="direct"&&r.to!==E&&!this.nodes.has(r.to))throw new Error(`Edge from "${n}" references non-existent node: "${r.to}"`)}for(let[n]of this.nodes)if(!this.edges.has(n))throw new Error(`Node "${n}" has no outgoing edge. Add one with .addEdge("${n}", ...) or .addConditionalEdge("${n}", ...)`)}};function re(e){return new x(e)}function oe(e){let{id:t,title:n,description:r,baseUrl:o,htmlPath:a,widgetDomain:i,prefersBorder:s=!0,autoHeight:d=!0}=e,g=e.widgetCSP??{connect_domains:[o],resource_domains:[o]};if(process.env.NODE_ENV==="development")try{let{hostname:w}=new URL(o);(w==="localhost"||w==="127.0.0.1")&&(g={...g,connect_domains:[...g.connect_domains||[],`ws://${w}:*`,`wss://${w}:*`],resource_domains:[...g.resource_domains||[],`http://${w}:*`]})}catch{}let f=`ui://widgets/apps-sdk/${t}.html`,c=`ui://widgets/ext-apps/${t}.html`,u=null,l=()=>(u||(u=J(o,a)),u),p=r;async function T(w){let S=await l();w.registerResource(`${t}-openai-widget`,f,{title:n,description:p,mimeType:C,_meta:{"openai/widgetDescription":p,"openai/widgetPrefersBorder":s}},async k=>({contents:[{uri:k.href,mimeType:C,text:S,_meta:Z({description:p,prefersBorder:s,widgetDomain:i,widgetCSP:g})}]})),w.registerResource(`${t}-mcp-widget`,c,{title:n,description:p,mimeType:_,_meta:{ui:{prefersBorder:s}}},async k=>({contents:[{uri:k.href,mimeType:_,text:S,_meta:G({description:p,prefersBorder:s,widgetCSP:g})}]}))}return{id:t,title:n,description:r,openaiUri:f,mcpUri:c,autoHeight:d,register:T}}function ke(e,t){let{resource:n,description:r,inputSchema:o,annotations:a}=e,i=e.id??n?.id,s=e.title??n?.title;if(!i)throw new Error("createTool: `id` is required when no resource is provided");if(!s)throw new Error("createTool: `title` is required when no resource is provided");let d=n?R({openaiTemplateUri:n.openaiUri,mcpTemplateUri:n.mcpUri,invoking:e.invoking??"Loading...",invoked:e.invoked??"Loaded",autoHeight:n.autoHeight}):void 0;return{id:i,title:s,description:r,async register(g){g.registerTool(i,{title:s,description:r,inputSchema:o,annotations:a,...d&&{_meta:d}},(async(f,c)=>{let l=c._meta??{},p=await t(f,{extra:{_meta:l}});return n&&p.data?{content:[{type:"text",text:p.text}],structuredContent:p.data,_meta:{...d,...l}}:{content:[{type:"text",text:p.text}]}}))}}}async function Se(e,t){await Promise.all(t.map(n=>n.register(e)))}var P=class extends Error{constructor(n,r){super(n);this.status=r;this.name="WaniWaniError"}};var ve="@waniwani/sdk";function ie(e){let{baseUrl:t,apiKey:n}=e;function r(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}async function o(a,i,s){let d=r(),g=`${t.replace(/\/$/,"")}${i}`,f={Authorization:`Bearer ${d}`,"X-WaniWani-SDK":ve},c={method:a,headers:f};s!==void 0&&(f["Content-Type"]="application/json",c.body=JSON.stringify(s));let u=await fetch(g,c);if(!u.ok){let p=await u.text().catch(()=>"");throw new P(p||`KB API error: HTTP ${u.status}`,u.status)}return(await u.json()).data}return{async ingest(a){return o("POST","/api/mcp/kb/ingest",{files:a})},async search(a,i){return o("POST","/api/mcp/kb/search",{query:a,...i})},async sources(){return o("GET","/api/mcp/kb/sources")}}}var Ee="@waniwani/sdk";function j(e,t={}){let n=t.now??(()=>new Date),r=t.generateId??se,o=Ie(e),a=W(e.meta),i=W(e.metadata),s=Me(e,a),d=y(e.eventId)??r(),g=be(e.timestamp,n),f=y(e.source)??t.source??Ee,c=$(e)?{...e}:void 0,u={...i};return Object.keys(a).length>0&&(u.meta=a),c&&(u.rawLegacy=c),{id:d,type:"mcp.event",name:o,source:f,timestamp:g,correlation:s,properties:xe(e,o),metadata:u,rawLegacy:c}}function se(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`evt_${crypto.randomUUID()}`:`evt_${Math.random().toString(36).slice(2,10)}_${Date.now().toString(36)}`}function xe(e,t){if(!$(e))return W(e.properties);let n=Re(e,t),r=W(e.properties);return{...n,...r}}function Re(e,t){switch(t){case"tool.called":{let n={};return y(e.toolName)&&(n.name=e.toolName),y(e.toolType)&&(n.type=e.toolType),n}case"quote.succeeded":{let n={};return typeof e.quoteAmount=="number"&&(n.amount=e.quoteAmount),y(e.quoteCurrency)&&(n.currency=e.quoteCurrency),n}case"link.clicked":{let n={};return y(e.linkUrl)&&(n.url=e.linkUrl),n}case"purchase.completed":{let n={};return typeof e.purchaseAmount=="number"&&(n.amount=e.purchaseAmount),y(e.purchaseCurrency)&&(n.currency=e.purchaseCurrency),n}default:return{}}}function Ie(e){return $(e)?e.eventType:e.event}function Me(e,t){let n=y(e.requestId)??b(t,["openai/requestId","requestId","mcp/requestId"]),r=y(e.sessionId)??b(t,["openai/sessionId","sessionId","conversationId","anthropic/sessionId"]),o=y(e.traceId)??b(t,["openai/traceId","traceId","mcp/traceId","openai/requestId","requestId"]),a=y(e.externalUserId)??b(t,["openai/userId","externalUserId","userId","actorId"]),i=y(e.correlationId)??b(t,["correlationId","openai/requestId"])??n,s={};return r&&(s.sessionId=r),o&&(s.traceId=o),n&&(s.requestId=n),i&&(s.correlationId=i),a&&(s.externalUserId=a),s}function be(e,t){if(e instanceof Date)return e.toISOString();if(typeof e=="string"){let n=new Date(e);if(!Number.isNaN(n.getTime()))return n.toISOString()}return t().toISOString()}function b(e,t){for(let n of t){let r=e[n];if(typeof r=="string"&&r.trim().length>0)return r}}function W(e){return!e||typeof e!="object"||Array.isArray(e)?{}:e}function y(e){if(typeof e=="string"&&e.trim().length!==0)return e}function $(e){return"eventType"in e}var Ce="/api/mcp/events/v2/batch";var ae="@waniwani/sdk",_e=new Set([401,403]),Pe=new Set([408,425,429,500,502,503,504]);function de(e){return new L(e)}var L=class{endpointUrl;flushIntervalMs;maxBatchSize;maxBufferSize;maxRetries;retryBaseDelayMs;retryMaxDelayMs;shutdownTimeoutMs;sdkVersion;fetchFn;logger;now;sleep;apiKey;buffer=[];flushTimer;flushScheduled=!1;flushScheduledTimer;flushInFlight;inFlightCount=0;isStopped=!1;isShuttingDown=!1;constructor(t){this.endpointUrl=Fe(t.baseUrl,t.endpointPath??Ce),this.flushIntervalMs=t.flushIntervalMs??1e3,this.maxBatchSize=t.maxBatchSize??20,this.maxBufferSize=t.maxBufferSize??1e3,this.maxRetries=t.maxRetries??3,this.retryBaseDelayMs=t.retryBaseDelayMs??200,this.retryMaxDelayMs=t.retryMaxDelayMs??2e3,this.shutdownTimeoutMs=t.shutdownTimeoutMs??2e3,this.fetchFn=t.fetchFn??fetch,this.logger=t.logger??console,this.now=t.now??(()=>new Date),this.sleep=t.sleep??(n=>new Promise(r=>setTimeout(r,n))),this.apiKey=t.apiKey,this.sdkVersion=t.sdkVersion,this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flush()},this.flushIntervalMs))}enqueue(t){if(this.isStopped||this.isShuttingDown){this.logger.warn("[WaniWani] Tracking transport is stopped, dropping event %s",t.id);return}if(this.buffer.length>=this.maxBufferSize){let n=this.buffer.length-this.maxBufferSize+1;this.buffer.splice(0,n),this.logger.warn("[WaniWani] Tracking buffer overflow, dropped %d oldest event(s)",n)}if(this.buffer.push(t),this.buffer.length>=this.maxBatchSize){this.flush();return}this.scheduleMicroFlush()}pendingEvents(){return this.buffer.length+this.inFlightCount}async flush(){return this.flushInFlight?this.flushInFlight:(this.flushInFlight=this.flushLoop().finally(()=>{this.flushInFlight=void 0}),this.flushInFlight)}async shutdown(t){this.isShuttingDown=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=void 0),this.flushScheduledTimer&&(clearTimeout(this.flushScheduledTimer),this.flushScheduledTimer=void 0,this.flushScheduled=!1);let n=t?.timeoutMs??this.shutdownTimeoutMs,r=this.flush();if(!Number.isFinite(n)||n<=0)return await r,this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()};let o=Symbol("shutdown-timeout");return await Promise.race([r.then(()=>"flushed"),this.sleep(n).then(()=>o)])===o?(this.isStopped=!0,{timedOut:!0,pendingEvents:this.pendingEvents()}):(this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()})}scheduleMicroFlush(){this.flushScheduled||(this.flushScheduled=!0,this.flushScheduledTimer=setTimeout(()=>{this.flushScheduledTimer=void 0,this.flushScheduled=!1,this.flush()},0))}async flushLoop(){for(;this.buffer.length>0&&!this.isStopped;){let t=this.buffer.splice(0,this.maxBatchSize);await this.sendBatchWithRetry(t)}}async sendBatchWithRetry(t){let n=0,r=t;for(;r.length>0&&!this.isStopped;){this.inFlightCount=r.length;let o=await this.sendBatchOnce(r);switch(this.inFlightCount=0,o.kind){case"success":return;case"auth":this.stopTransportForAuthFailure(o.status,r.length);return;case"permanent":this.logger.error("[WaniWani] Dropping %d event(s) after permanent failure: %s",r.length,o.reason);return;case"retryable":if(n>=this.maxRetries){this.logger.error("[WaniWani] Dropping %d event(s) after retry exhaustion: %s",r.length,o.reason);return}await this.sleep(this.backoffDelayMs(n)),n+=1;continue;case"partial":if(o.permanent.length>0&&this.logger.error("[WaniWani] Dropping %d event(s) rejected as permanent",o.permanent.length),o.retryable.length===0)return;if(n>=this.maxRetries){this.logger.error("[WaniWani] Dropping %d retryable event(s) after retry exhaustion",o.retryable.length);return}r=o.retryable,await this.sleep(this.backoffDelayMs(n)),n+=1;continue}}}async sendBatchOnce(t){let n;try{n=await this.fetchFn(this.endpointUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-WaniWani-SDK":ae},body:JSON.stringify(this.makeBatchRequest(t))})}catch(a){return{kind:"retryable",reason:Ne(a)}}if(_e.has(n.status))return{kind:"auth",status:n.status};if(Pe.has(n.status))return{kind:"retryable",reason:`HTTP ${n.status}`};if(!n.ok)return{kind:"permanent",reason:`HTTP ${n.status}`};let r=await Ae(n);if(!r?.rejected||r.rejected.length===0)return{kind:"success"};let o=this.classifyRejectedEvents(t,r.rejected);return o.retryable.length===0&&o.permanent.length===0?{kind:"success"}:{kind:"partial",retryable:o.retryable,permanent:o.permanent}}makeBatchRequest(t){return{sentAt:this.now().toISOString(),source:{sdk:ae,version:this.sdkVersion??"0.0.0"},events:t}}classifyRejectedEvents(t,n){let r=new Map(t.map(i=>[i.id,i])),o=[],a=[];for(let i of n){let s=r.get(i.eventId);if(s){if(We(i)){o.push(s);continue}a.push(s)}}return{retryable:o,permanent:a}}backoffDelayMs(t){let n=this.retryBaseDelayMs*2**t;return Math.min(n,this.retryMaxDelayMs)}stopTransportForAuthFailure(t,n){this.isStopped=!0;let r=this.buffer.length;this.buffer.splice(0,r),this.logger.error("[WaniWani] Auth failure (HTTP %d). Stopping tracking transport and dropping %d queued event(s)",t,n+r)}};function We(e){if(e.retryable===!0)return!0;let t=e.code.toLowerCase();return t.includes("timeout")||t.includes("temporary")||t.includes("unavailable")||t.includes("rate_limit")||t.includes("transient")||t.includes("server")}async function Ae(e){let t=await e.text();if(t)try{return JSON.parse(t)}catch{return}}function Fe(e,t){let n=e.endsWith("/")?e:`${e}/`,r=t.startsWith("/")?t.slice(1):t;return`${n}${r}`}function Ne(e){return e instanceof Error?e.message:String(e)}function ce(e){let{baseUrl:t,apiKey:n,tracking:r}=e;function o(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}let a=n?de({baseUrl:t,apiKey:n,endpointPath:r.endpointPath,flushIntervalMs:r.flushIntervalMs,maxBatchSize:r.maxBatchSize,maxBufferSize:r.maxBufferSize,maxRetries:r.maxRetries,retryBaseDelayMs:r.retryBaseDelayMs,retryMaxDelayMs:r.retryMaxDelayMs,shutdownTimeoutMs:r.shutdownTimeoutMs}):void 0,i={async track(s){o();let d=j(s);return a?.enqueue(d),{eventId:d.id}},async flush(){o(),await a?.flush()},async shutdown(s){return o(),await a?.shutdown({timeoutMs:s?.timeoutMs??r.shutdownTimeoutMs})??{timedOut:!1,pendingEvents:0}}};return a&&De(i,r.shutdownTimeoutMs),i}function De(e,t){if(typeof process>"u"||typeof process.once!="function"||typeof process.on!="function")return;let n=()=>{e.shutdown({timeoutMs:t})};process.once("beforeExit",n),process.once("SIGINT",n),process.once("SIGTERM",n)}function A(e){let t=e?.baseUrl??"https://app.waniwani.ai",n=e?.apiKey??process.env.WANIWANI_API_KEY,r={endpointPath:e?.tracking?.endpointPath??"/api/mcp/events/v2/batch",flushIntervalMs:e?.tracking?.flushIntervalMs??1e3,maxBatchSize:e?.tracking?.maxBatchSize??20,maxBufferSize:e?.tracking?.maxBufferSize??1e3,maxRetries:e?.tracking?.maxRetries??3,retryBaseDelayMs:e?.tracking?.retryBaseDelayMs??200,retryMaxDelayMs:e?.tracking?.retryMaxDelayMs??2e3,shutdownTimeoutMs:e?.tracking?.shutdownTimeoutMs??2e3},o={baseUrl:t,apiKey:n,tracking:r},a=ce(o),i=ie(o);return{...a,kb:i,_config:o}}function Ue(e){let t=e.event_type??"widget_click",r=t.startsWith("widget_")?t:`widget_${t}`,o={...e.metadata??{}};return e.event_name&&(o.event_name=e.event_name),{event:r,properties:o,sessionId:e.session_id,traceId:e.trace_id,externalUserId:e.user_id,eventId:e.event_id,timestamp:e.timestamp,source:e.source??"widget"}}function Be(e){let t={apiKey:e?.apiKey,baseUrl:e?.baseUrl},n;function r(){return n||(n=A(t)),n}return async function(a){let i;try{i=await a.json()}catch{return new Response(JSON.stringify({error:"Invalid JSON"}),{status:400,headers:{"Content-Type":"application/json"}})}if(!Array.isArray(i.events)||i.events.length===0)return new Response(JSON.stringify({error:"Missing or empty events array"}),{status:400,headers:{"Content-Type":"application/json"}});try{let s=r(),d=[];for(let g of i.events){let f=Ue(g),c=await s.track(f);d.push(c.eventId)}return await s.flush(),new Response(JSON.stringify({ok:!0,accepted:d.length}),{status:200,headers:{"Content-Type":"application/json"}})}catch(s){let d=s instanceof Error?s.message:"Unknown error";return new Response(JSON.stringify({error:d}),{status:500,headers:{"Content-Type":"application/json"}})}}}var F=class{cached=null;pending=null;config;constructor(t){this.config=t}async getToken(t,n){return this.cached&&Date.now()<this.cached.expiresAt-12e4?this.cached.token:this.pending?this.pending:(this.pending=this.mint(t,n).finally(()=>{this.pending=null}),this.pending)}async mint(t,n){let r=Oe(this.config.baseUrl,"/api/mcp/widget-tokens"),o={};t&&(o.sessionId=t),n&&(o.traceId=n);try{let a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify(o)});if(!a.ok)return null;let i=await a.json(),s=i.data&&typeof i.data=="object"?i.data:i,d=new Date(s.expiresAt).getTime();return!s.token||Number.isNaN(d)?null:(this.cached={token:s.token,expiresAt:d},s.token)}catch{return null}}};function Oe(e,t){return`${e.endsWith("/")?e.slice(0,-1):e}${t}`}var ue="https://app.waniwani.ai";function qe(e,t={}){let n=e;if(n.__waniwaniWrapped)return n;n.__waniwaniWrapped=!0;let r=t.client??A(t.config),o=t.injectWidgetToken!==!1,a=null;function i(){if(a)return a;let d=r._config.apiKey;return d?(a=new F({baseUrl:r._config.baseUrl??ue,apiKey:d}),a):null}let s=e.registerTool.bind(e);return n.registerTool=((...d)=>{let[g,f,c]=d,u=typeof g=="string"&&g.trim().length>0?g:"unknown";if(typeof c!="function")return s(...d);let l=c;return s(g,f,async(T,w)=>{let S=performance.now();try{let k=await l(T,w),D=Math.round(performance.now()-S);return await pe(r,le(u,w,t,{durationMs:D,status:"ok"}),t.onError),t.flushAfterToolCall&&await fe(r,t.onError),o&&await je(k,i(),r._config.baseUrl??ue,t.onError),k}catch(k){let D=Math.round(performance.now()-S);throw await pe(r,le(u,w,t,{durationMs:D,status:"error",errorMessage:k instanceof Error?k.message:String(k)}),t.onError),t.flushAfterToolCall&&await fe(r,t.onError),k}})}),n}async function je(e,t,n,r){if(!N(e))return;N(e._meta)||(e._meta={});let o=e._meta,a={endpoint:`${n.replace(/\/$/,"")}/api/mcp/events/v2/batch`};if(t)try{let i=await t.getToken();i&&(a.token=i)}catch(i){r?.(V(i))}o.waniwani=a}function le(e,t,n,r){let o=$e(e,n.toolType),a=Le(t);return{event:"tool.called",properties:{name:e,type:o,...r??{}},meta:a,metadata:{source:"withWaniwani",...n.metadata??{}}}}function $e(e,t){return typeof t=="function"?t(e)??"other":t??"other"}function Le(e){if(!N(e))return;let t=e._meta;if(N(t))return t}function N(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}async function pe(e,t,n){try{await e.track(t)}catch(r){n?.(V(r))}}async function fe(e,t){try{await e.flush()}catch(n){t?.(V(n))}}function V(e){return e instanceof Error?e:new Error(String(e))}export{E as END,v as START,x as StateGraph,re as createFlow,oe as createResource,ke as createTool,Be as createTrackingRoute,U as detectPlatform,z as interrupt,he as isMCPApps,ge as isOpenAI,Se as registerTools,K as showWidget,qe as withWaniwani};
4
4
  //# sourceMappingURL=index.js.map