@keystrokehq/platform 0.1.6 → 0.1.9

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 (313) hide show
  1. package/dist/{awk2-LA3USKJP-CWyXAnm3.cjs → awk2-LA3USKJP-C8TQfH53.cjs} +2 -2
  2. package/dist/{awk2-LA3USKJP-CWyXAnm3.cjs.map → awk2-LA3USKJP-C8TQfH53.cjs.map} +1 -1
  3. package/dist/{awk2-LA3USKJP-BhFGxIs7.mjs → awk2-LA3USKJP-iKo516lo.mjs} +2 -2
  4. package/dist/{awk2-LA3USKJP-BhFGxIs7.mjs.map → awk2-LA3USKJP-iKo516lo.mjs.map} +1 -1
  5. package/dist/{base64-C2AIWVNC-JXy8vwLH.cjs → base64-C2AIWVNC-BvnbraSd.cjs} +2 -2
  6. package/dist/{base64-C2AIWVNC-JXy8vwLH.cjs.map → base64-C2AIWVNC-BvnbraSd.cjs.map} +1 -1
  7. package/dist/{base64-C2AIWVNC-bTzuSsmR.mjs → base64-C2AIWVNC-DFlEIYu8.mjs} +2 -2
  8. package/dist/{base64-C2AIWVNC-bTzuSsmR.mjs.map → base64-C2AIWVNC-DFlEIYu8.mjs.map} +1 -1
  9. package/dist/{bash-YZ33HQZQ-BHybPYlT.mjs → bash-YZ33HQZQ-C5bTiiJp.mjs} +2 -2
  10. package/dist/{bash-YZ33HQZQ-BHybPYlT.mjs.map → bash-YZ33HQZQ-C5bTiiJp.mjs.map} +1 -1
  11. package/dist/{bash-YZ33HQZQ-5WKdWyaB.cjs → bash-YZ33HQZQ-CTEFZdqT.cjs} +2 -2
  12. package/dist/{bash-YZ33HQZQ-5WKdWyaB.cjs.map → bash-YZ33HQZQ-CTEFZdqT.cjs.map} +1 -1
  13. package/dist/{cat-TSFMZVYS-T80cqhDV.cjs → cat-TSFMZVYS-B2K0uDKN.cjs} +3 -3
  14. package/dist/{cat-TSFMZVYS-T80cqhDV.cjs.map → cat-TSFMZVYS-B2K0uDKN.cjs.map} +1 -1
  15. package/dist/{cat-TSFMZVYS-Ceu5HL0Q.mjs → cat-TSFMZVYS-D32dnWp3.mjs} +3 -3
  16. package/dist/{cat-TSFMZVYS-Ceu5HL0Q.mjs.map → cat-TSFMZVYS-D32dnWp3.mjs.map} +1 -1
  17. package/dist/{chunk-5H5SCKJM-BFKvZTj1.mjs → chunk-5H5SCKJM-BlgR0V3A.mjs} +2 -2
  18. package/dist/{chunk-5H5SCKJM-BFKvZTj1.mjs.map → chunk-5H5SCKJM-BlgR0V3A.mjs.map} +1 -1
  19. package/dist/{chunk-5H5SCKJM-CGwO8LN_.cjs → chunk-5H5SCKJM-CL3A9kMI.cjs} +2 -2
  20. package/dist/{chunk-5H5SCKJM-CGwO8LN_.cjs.map → chunk-5H5SCKJM-CL3A9kMI.cjs.map} +1 -1
  21. package/dist/{chunk-AQ6FYS2X-CJjPwzf4.mjs → chunk-AQ6FYS2X-AzmRUg3D.mjs} +2 -2
  22. package/dist/{chunk-AQ6FYS2X-CJjPwzf4.mjs.map → chunk-AQ6FYS2X-AzmRUg3D.mjs.map} +1 -1
  23. package/dist/{chunk-AQ6FYS2X-zV3Coc0j.cjs → chunk-AQ6FYS2X-CPSSDKT0.cjs} +2 -2
  24. package/dist/{chunk-AQ6FYS2X-zV3Coc0j.cjs.map → chunk-AQ6FYS2X-CPSSDKT0.cjs.map} +1 -1
  25. package/dist/{chunk-CHFEPBH4-BJfBf11C.mjs → chunk-CHFEPBH4-B59ZOlVh.mjs} +2 -2
  26. package/dist/{chunk-CHFEPBH4-BJfBf11C.mjs.map → chunk-CHFEPBH4-B59ZOlVh.mjs.map} +1 -1
  27. package/dist/{chunk-CHFEPBH4-C7fwqALc.cjs → chunk-CHFEPBH4-DndUvPEz.cjs} +2 -2
  28. package/dist/{chunk-CHFEPBH4-C7fwqALc.cjs.map → chunk-CHFEPBH4-DndUvPEz.cjs.map} +1 -1
  29. package/dist/{chunk-EBAPSGAO-CZPAmSX8.cjs → chunk-EBAPSGAO-BCq1VEUF.cjs} +2 -2
  30. package/dist/{chunk-EBAPSGAO-CZPAmSX8.cjs.map → chunk-EBAPSGAO-BCq1VEUF.cjs.map} +1 -1
  31. package/dist/{chunk-EBAPSGAO-eG42tA2r.mjs → chunk-EBAPSGAO-Bq-JthJ5.mjs} +2 -2
  32. package/dist/{chunk-EBAPSGAO-eG42tA2r.mjs.map → chunk-EBAPSGAO-Bq-JthJ5.mjs.map} +1 -1
  33. package/dist/{chunk-LEKBROJD-Bnp-la65.mjs → chunk-LEKBROJD-BljEVlAX.mjs} +2 -2
  34. package/dist/{chunk-LEKBROJD-Bnp-la65.mjs.map → chunk-LEKBROJD-BljEVlAX.mjs.map} +1 -1
  35. package/dist/{chunk-LEKBROJD-CFSlDKEu.cjs → chunk-LEKBROJD-CYjJVRHn.cjs} +2 -2
  36. package/dist/{chunk-LEKBROJD-CFSlDKEu.cjs.map → chunk-LEKBROJD-CYjJVRHn.cjs.map} +1 -1
  37. package/dist/{chunk-VPADYNBD-Un2OQeml.mjs → chunk-VPADYNBD-22xWuTBB.mjs} +2 -2
  38. package/dist/{chunk-VPADYNBD-Un2OQeml.mjs.map → chunk-VPADYNBD-22xWuTBB.mjs.map} +1 -1
  39. package/dist/{chunk-VPADYNBD-BGC-BkW2.cjs → chunk-VPADYNBD-BB4ObtpU.cjs} +2 -2
  40. package/dist/{chunk-VPADYNBD-BGC-BkW2.cjs.map → chunk-VPADYNBD-BB4ObtpU.cjs.map} +1 -1
  41. package/dist/{chunk-YCLFEX4T-C2ffdKTI.mjs → chunk-YCLFEX4T-BYCz1ce9.mjs} +2 -2
  42. package/dist/{chunk-YCLFEX4T-C2ffdKTI.mjs.map → chunk-YCLFEX4T-BYCz1ce9.mjs.map} +1 -1
  43. package/dist/{chunk-YCLFEX4T-DiUi4t4Y.cjs → chunk-YCLFEX4T-BvTNX2Vz.cjs} +2 -2
  44. package/dist/{chunk-YCLFEX4T-DiUi4t4Y.cjs.map → chunk-YCLFEX4T-BvTNX2Vz.cjs.map} +1 -1
  45. package/dist/{column-XT6UFXNQ-BOensfuu.mjs → column-XT6UFXNQ-2JxGKnhQ.mjs} +2 -2
  46. package/dist/{column-XT6UFXNQ-BOensfuu.mjs.map → column-XT6UFXNQ-2JxGKnhQ.mjs.map} +1 -1
  47. package/dist/{column-XT6UFXNQ-BeOUDpIf.cjs → column-XT6UFXNQ-Dt66NYBA.cjs} +2 -2
  48. package/dist/{column-XT6UFXNQ-BeOUDpIf.cjs.map → column-XT6UFXNQ-Dt66NYBA.cjs.map} +1 -1
  49. package/dist/{comm-VV2LDX2J-C7VcIq-K.mjs → comm-VV2LDX2J-BQ4xi5L9.mjs} +2 -2
  50. package/dist/{comm-VV2LDX2J-C7VcIq-K.mjs.map → comm-VV2LDX2J-BQ4xi5L9.mjs.map} +1 -1
  51. package/dist/{comm-VV2LDX2J-Ca7AKON3.cjs → comm-VV2LDX2J-C8sq4a_X.cjs} +2 -2
  52. package/dist/{comm-VV2LDX2J-Ca7AKON3.cjs.map → comm-VV2LDX2J-C8sq4a_X.cjs.map} +1 -1
  53. package/dist/{config-m9Z87E2p.d.mts → config-4tlyrD1h.d.mts} +28 -2
  54. package/dist/{config-DmqhoHPA.d.cts → config-DCMtEjGV.d.cts} +28 -2
  55. package/dist/config.cjs +1 -1
  56. package/dist/config.d.cts +1 -1
  57. package/dist/config.d.mts +1 -1
  58. package/dist/config.mjs +1 -1
  59. package/dist/{cp-BISAAS7A-HMB8w9Qk.mjs → cp-BISAAS7A-CcMwaVYs.mjs} +2 -2
  60. package/dist/{cp-BISAAS7A-HMB8w9Qk.mjs.map → cp-BISAAS7A-CcMwaVYs.mjs.map} +1 -1
  61. package/dist/{cp-BISAAS7A-B9yK_zET.cjs → cp-BISAAS7A-DmZV5f27.cjs} +2 -2
  62. package/dist/{cp-BISAAS7A-B9yK_zET.cjs.map → cp-BISAAS7A-DmZV5f27.cjs.map} +1 -1
  63. package/dist/{cut-OKARJCCV-NXtL8aUb.mjs → cut-OKARJCCV-Co4UXF7Y.mjs} +3 -3
  64. package/dist/{cut-OKARJCCV-NXtL8aUb.mjs.map → cut-OKARJCCV-Co4UXF7Y.mjs.map} +1 -1
  65. package/dist/{cut-OKARJCCV-qUXIktVO.cjs → cut-OKARJCCV-DwtHdU58.cjs} +3 -3
  66. package/dist/{cut-OKARJCCV-qUXIktVO.cjs.map → cut-OKARJCCV-DwtHdU58.cjs.map} +1 -1
  67. package/dist/{diff-MWJFIG7X-BpMQR3bl.cjs → diff-MWJFIG7X-DX6SkQWo.cjs} +2 -2
  68. package/dist/{diff-MWJFIG7X-BpMQR3bl.cjs.map → diff-MWJFIG7X-DX6SkQWo.cjs.map} +1 -1
  69. package/dist/{diff-MWJFIG7X-DVUdRi3i.mjs → diff-MWJFIG7X-RORXFtQw.mjs} +2 -2
  70. package/dist/{diff-MWJFIG7X-DVUdRi3i.mjs.map → diff-MWJFIG7X-RORXFtQw.mjs.map} +1 -1
  71. package/dist/{dist-BB6Y_75v.mjs → dist-DQZABv1_.mjs} +525 -64
  72. package/dist/dist-DQZABv1_.mjs.map +1 -0
  73. package/dist/{dist-BtAOWi5K.cjs → dist-KeJkUQxy.cjs} +542 -63
  74. package/dist/dist-KeJkUQxy.cjs.map +1 -0
  75. package/dist/{du-572XNP42-B7Daeoyh.cjs → du-572XNP42-ByLXb5YF.cjs} +2 -2
  76. package/dist/{du-572XNP42-B7Daeoyh.cjs.map → du-572XNP42-ByLXb5YF.cjs.map} +1 -1
  77. package/dist/{du-572XNP42-DganHTrH.mjs → du-572XNP42-DJxtt8pO.mjs} +2 -2
  78. package/dist/{du-572XNP42-DganHTrH.mjs.map → du-572XNP42-DJxtt8pO.mjs.map} +1 -1
  79. package/dist/{env-36M5BO7M-Dg1z4ZQ3.cjs → env-36M5BO7M-7mpjgw1V.cjs} +2 -2
  80. package/dist/{env-36M5BO7M-Dg1z4ZQ3.cjs.map → env-36M5BO7M-7mpjgw1V.cjs.map} +1 -1
  81. package/dist/{env-36M5BO7M-D_E39yfu.mjs → env-36M5BO7M-ZlUW3Sl0.mjs} +2 -2
  82. package/dist/{env-36M5BO7M-D_E39yfu.mjs.map → env-36M5BO7M-ZlUW3Sl0.mjs.map} +1 -1
  83. package/dist/{expand-JSPG6VOP-sHoECND6.mjs → expand-JSPG6VOP-B2YxeegL.mjs} +2 -2
  84. package/dist/{expand-JSPG6VOP-sHoECND6.mjs.map → expand-JSPG6VOP-B2YxeegL.mjs.map} +1 -1
  85. package/dist/{expand-JSPG6VOP-D2xi4Y-n.cjs → expand-JSPG6VOP-MOAUsgSe.cjs} +2 -2
  86. package/dist/{expand-JSPG6VOP-D2xi4Y-n.cjs.map → expand-JSPG6VOP-MOAUsgSe.cjs.map} +1 -1
  87. package/dist/{expr-5JAACS4X-DrJ47AJL.cjs → expr-5JAACS4X-C-wWI5Y2.cjs} +2 -2
  88. package/dist/{expr-5JAACS4X-DrJ47AJL.cjs.map → expr-5JAACS4X-C-wWI5Y2.cjs.map} +1 -1
  89. package/dist/{expr-5JAACS4X-gYMEvPyP.mjs → expr-5JAACS4X-DGhrcLeU.mjs} +2 -2
  90. package/dist/{expr-5JAACS4X-gYMEvPyP.mjs.map → expr-5JAACS4X-DGhrcLeU.mjs.map} +1 -1
  91. package/dist/{find-INTH3OLC-NNFVNc1H.cjs → find-INTH3OLC-ErDLi_Ak.cjs} +3 -3
  92. package/dist/{find-INTH3OLC-NNFVNc1H.cjs.map → find-INTH3OLC-ErDLi_Ak.cjs.map} +1 -1
  93. package/dist/{find-INTH3OLC-dBBPukw9.mjs → find-INTH3OLC-Vzv3utqz.mjs} +3 -3
  94. package/dist/{find-INTH3OLC-dBBPukw9.mjs.map → find-INTH3OLC-Vzv3utqz.mjs.map} +1 -1
  95. package/dist/{fold-4TQNYMSW-N0_1Z6_j.mjs → fold-4TQNYMSW-BWKs2Ew0.mjs} +2 -2
  96. package/dist/{fold-4TQNYMSW-N0_1Z6_j.mjs.map → fold-4TQNYMSW-BWKs2Ew0.mjs.map} +1 -1
  97. package/dist/{fold-4TQNYMSW-C7ArceGr.cjs → fold-4TQNYMSW-DoBCXtmy.cjs} +2 -2
  98. package/dist/{fold-4TQNYMSW-C7ArceGr.cjs.map → fold-4TQNYMSW-DoBCXtmy.cjs.map} +1 -1
  99. package/dist/{grep-V3LQVMRQ-D_s5HB2b.cjs → grep-V3LQVMRQ-BU066j1r.cjs} +4 -4
  100. package/dist/{grep-V3LQVMRQ-D_s5HB2b.cjs.map → grep-V3LQVMRQ-BU066j1r.cjs.map} +1 -1
  101. package/dist/{grep-V3LQVMRQ-CN7esn9_.mjs → grep-V3LQVMRQ-Okt1supZ.mjs} +4 -4
  102. package/dist/{grep-V3LQVMRQ-CN7esn9_.mjs.map → grep-V3LQVMRQ-Okt1supZ.mjs.map} +1 -1
  103. package/dist/{gzip-O5ASJAFY-BYavGtyV.cjs → gzip-O5ASJAFY-B1FTMMFq.cjs} +2 -2
  104. package/dist/{gzip-O5ASJAFY-BYavGtyV.cjs.map → gzip-O5ASJAFY-B1FTMMFq.cjs.map} +1 -1
  105. package/dist/{gzip-O5ASJAFY-tQxmEpj_.mjs → gzip-O5ASJAFY-BUU_FNGK.mjs} +2 -2
  106. package/dist/{gzip-O5ASJAFY-tQxmEpj_.mjs.map → gzip-O5ASJAFY-BUU_FNGK.mjs.map} +1 -1
  107. package/dist/{head-442HYESI-Bzlad8f3.mjs → head-442HYESI-CPQWywtB.mjs} +2 -2
  108. package/dist/{head-442HYESI-Bzlad8f3.mjs.map → head-442HYESI-CPQWywtB.mjs.map} +1 -1
  109. package/dist/{head-442HYESI-Du4OHag6.cjs → head-442HYESI-DeLkuG8l.cjs} +2 -2
  110. package/dist/{head-442HYESI-Du4OHag6.cjs.map → head-442HYESI-DeLkuG8l.cjs.map} +1 -1
  111. package/dist/{help-HZ6M2CKN-DxQhQLup.cjs → help-HZ6M2CKN-CACYSgeV.cjs} +2 -2
  112. package/dist/{help-HZ6M2CKN-DxQhQLup.cjs.map → help-HZ6M2CKN-CACYSgeV.cjs.map} +1 -1
  113. package/dist/{help-HZ6M2CKN-DMr18xJE.mjs → help-HZ6M2CKN-Si2t7kXA.mjs} +2 -2
  114. package/dist/{help-HZ6M2CKN-DMr18xJE.mjs.map → help-HZ6M2CKN-Si2t7kXA.mjs.map} +1 -1
  115. package/dist/{html-to-markdown-JW4MSQZO-BZFKTpVV.cjs → html-to-markdown-JW4MSQZO-BnrGqsni.cjs} +3 -3
  116. package/dist/{html-to-markdown-JW4MSQZO-BZFKTpVV.cjs.map → html-to-markdown-JW4MSQZO-BnrGqsni.cjs.map} +1 -1
  117. package/dist/{html-to-markdown-JW4MSQZO-ByplyNhg.mjs → html-to-markdown-JW4MSQZO-yPkAOM4T.mjs} +3 -3
  118. package/dist/{html-to-markdown-JW4MSQZO-ByplyNhg.mjs.map → html-to-markdown-JW4MSQZO-yPkAOM4T.mjs.map} +1 -1
  119. package/dist/internal.cjs +1 -1
  120. package/dist/internal.mjs +1 -1
  121. package/dist/{join-TBRGI3LQ-BJnYqeRE.cjs → join-TBRGI3LQ-BK0v7LDZ.cjs} +2 -2
  122. package/dist/{join-TBRGI3LQ-BJnYqeRE.cjs.map → join-TBRGI3LQ-BK0v7LDZ.cjs.map} +1 -1
  123. package/dist/{join-TBRGI3LQ-zQYqJlyJ.mjs → join-TBRGI3LQ-C3eqxR8J.mjs} +2 -2
  124. package/dist/{join-TBRGI3LQ-zQYqJlyJ.mjs.map → join-TBRGI3LQ-C3eqxR8J.mjs.map} +1 -1
  125. package/dist/{jq-4XLYLOS5-DyYnnhSj.cjs → jq-4XLYLOS5-BPgpTkTX.cjs} +4 -4
  126. package/dist/{jq-4XLYLOS5-DyYnnhSj.cjs.map → jq-4XLYLOS5-BPgpTkTX.cjs.map} +1 -1
  127. package/dist/{jq-4XLYLOS5-rVnHaS8d.mjs → jq-4XLYLOS5-DOiIyV4r.mjs} +4 -4
  128. package/dist/{jq-4XLYLOS5-rVnHaS8d.mjs.map → jq-4XLYLOS5-DOiIyV4r.mjs.map} +1 -1
  129. package/dist/{js-exec-N5KEZBH7-BS33g5Vz.cjs → js-exec-N5KEZBH7-6a2l4HY0.cjs} +3 -3
  130. package/dist/{js-exec-N5KEZBH7-BS33g5Vz.cjs.map → js-exec-N5KEZBH7-6a2l4HY0.cjs.map} +1 -1
  131. package/dist/{js-exec-N5KEZBH7-CelGB_A8.mjs → js-exec-N5KEZBH7-BB3hczF6.mjs} +3 -3
  132. package/dist/{js-exec-N5KEZBH7-CelGB_A8.mjs.map → js-exec-N5KEZBH7-BB3hczF6.mjs.map} +1 -1
  133. package/dist/{lib-BtuXCD2W.cjs → lib-CYQ_gA3u.cjs} +2 -2
  134. package/dist/{lib-BtuXCD2W.cjs.map → lib-CYQ_gA3u.cjs.map} +1 -1
  135. package/dist/{lib-_5zrQvIo.mjs → lib-CcVWhxFS.mjs} +2 -2
  136. package/dist/{lib-_5zrQvIo.mjs.map → lib-CcVWhxFS.mjs.map} +1 -1
  137. package/dist/{ln-4LGSXXGD-DCuMyx3a.mjs → ln-4LGSXXGD-BGCw3j2u.mjs} +2 -2
  138. package/dist/{ln-4LGSXXGD-DCuMyx3a.mjs.map → ln-4LGSXXGD-BGCw3j2u.mjs.map} +1 -1
  139. package/dist/{ln-4LGSXXGD-BjitMbox.cjs → ln-4LGSXXGD-Cq6RmKEo.cjs} +2 -2
  140. package/dist/{ln-4LGSXXGD-BjitMbox.cjs.map → ln-4LGSXXGD-Cq6RmKEo.cjs.map} +1 -1
  141. package/dist/{ls-ZJGQER7M-CsKopKVX.cjs → ls-ZJGQER7M-CJuMmb9p.cjs} +2 -2
  142. package/dist/{ls-ZJGQER7M-CsKopKVX.cjs.map → ls-ZJGQER7M-CJuMmb9p.cjs.map} +1 -1
  143. package/dist/{ls-ZJGQER7M-ByYf3Vxj.mjs → ls-ZJGQER7M-CSzmMPVo.mjs} +2 -2
  144. package/dist/{ls-ZJGQER7M-ByYf3Vxj.mjs.map → ls-ZJGQER7M-CSzmMPVo.mjs.map} +1 -1
  145. package/dist/{lzma-_kmNWjFB.cjs → lzma-BaLt2cZv.cjs} +3 -3
  146. package/dist/{lzma-_kmNWjFB.cjs.map → lzma-BaLt2cZv.cjs.map} +1 -1
  147. package/dist/{lzma-DtV0zx4R.mjs → lzma-d7Yy7VcZ.mjs} +2 -2
  148. package/dist/{lzma-DtV0zx4R.mjs.map → lzma-d7Yy7VcZ.mjs.map} +1 -1
  149. package/dist/{md5sum-SPU24VSG-jewPBR38.cjs → md5sum-SPU24VSG-BL6W95eE.cjs} +3 -3
  150. package/dist/{md5sum-SPU24VSG-jewPBR38.cjs.map → md5sum-SPU24VSG-BL6W95eE.cjs.map} +1 -1
  151. package/dist/{md5sum-SPU24VSG-R7dHHfV4.mjs → md5sum-SPU24VSG-CIeUFHdK.mjs} +3 -3
  152. package/dist/{md5sum-SPU24VSG-R7dHHfV4.mjs.map → md5sum-SPU24VSG-CIeUFHdK.mjs.map} +1 -1
  153. package/dist/{mkdir-MEPGZOB6-DNmJhnvS.cjs → mkdir-MEPGZOB6-BZyyoaAf.cjs} +2 -2
  154. package/dist/{mkdir-MEPGZOB6-DNmJhnvS.cjs.map → mkdir-MEPGZOB6-BZyyoaAf.cjs.map} +1 -1
  155. package/dist/{mkdir-MEPGZOB6-BQe4XS_e.mjs → mkdir-MEPGZOB6-MgHictKj.mjs} +2 -2
  156. package/dist/{mkdir-MEPGZOB6-BQe4XS_e.mjs.map → mkdir-MEPGZOB6-MgHictKj.mjs.map} +1 -1
  157. package/dist/{mv-W5BIQ646-BorqaWWj.mjs → mv-W5BIQ646-CP9-vF4_.mjs} +2 -2
  158. package/dist/{mv-W5BIQ646-BorqaWWj.mjs.map → mv-W5BIQ646-CP9-vF4_.mjs.map} +1 -1
  159. package/dist/{mv-W5BIQ646-BsbfENE0.cjs → mv-W5BIQ646-dwb25lDI.cjs} +2 -2
  160. package/dist/{mv-W5BIQ646-BsbfENE0.cjs.map → mv-W5BIQ646-dwb25lDI.cjs.map} +1 -1
  161. package/dist/{nl-WSDW7I4O-DMfjYou-.cjs → nl-WSDW7I4O-C7rZxzPm.cjs} +2 -2
  162. package/dist/{nl-WSDW7I4O-DMfjYou-.cjs.map → nl-WSDW7I4O-C7rZxzPm.cjs.map} +1 -1
  163. package/dist/{nl-WSDW7I4O-uNIqSVeW.mjs → nl-WSDW7I4O-SXX_wp28.mjs} +2 -2
  164. package/dist/{nl-WSDW7I4O-uNIqSVeW.mjs.map → nl-WSDW7I4O-SXX_wp28.mjs.map} +1 -1
  165. package/dist/{od-WOKFDJTP-DOW6faUi.cjs → od-WOKFDJTP-CDFKqUJg.cjs} +2 -2
  166. package/dist/{od-WOKFDJTP-DOW6faUi.cjs.map → od-WOKFDJTP-CDFKqUJg.cjs.map} +1 -1
  167. package/dist/{od-WOKFDJTP-KhZEaBTC.mjs → od-WOKFDJTP-DyqUJY9V.mjs} +2 -2
  168. package/dist/{od-WOKFDJTP-KhZEaBTC.mjs.map → od-WOKFDJTP-DyqUJY9V.mjs.map} +1 -1
  169. package/dist/{paste-7JC6S4DX-B7D3kyRf.cjs → paste-7JC6S4DX-4vBMkbXu.cjs} +2 -2
  170. package/dist/{paste-7JC6S4DX-B7D3kyRf.cjs.map → paste-7JC6S4DX-4vBMkbXu.cjs.map} +1 -1
  171. package/dist/{paste-7JC6S4DX-DOEPGmaJ.mjs → paste-7JC6S4DX-yV2mN3Xi.mjs} +2 -2
  172. package/dist/{paste-7JC6S4DX-DOEPGmaJ.mjs.map → paste-7JC6S4DX-yV2mN3Xi.mjs.map} +1 -1
  173. package/dist/{printf-TWGXF445-BgY14UrZ.mjs → printf-TWGXF445-AG6ZxuUM.mjs} +3 -3
  174. package/dist/{printf-TWGXF445-BgY14UrZ.mjs.map → printf-TWGXF445-AG6ZxuUM.mjs.map} +1 -1
  175. package/dist/{printf-TWGXF445-MddJu1yx.cjs → printf-TWGXF445-BGeZYMde.cjs} +3 -3
  176. package/dist/{printf-TWGXF445-MddJu1yx.cjs.map → printf-TWGXF445-BGeZYMde.cjs.map} +1 -1
  177. package/dist/{python3-POMOR4OA-BwDdQ_I-.mjs → python3-POMOR4OA-BClYVovb.mjs} +3 -3
  178. package/dist/{python3-POMOR4OA-BwDdQ_I-.mjs.map → python3-POMOR4OA-BClYVovb.mjs.map} +1 -1
  179. package/dist/{python3-POMOR4OA-DXoihZl6.cjs → python3-POMOR4OA-CXiSd1gN.cjs} +3 -3
  180. package/dist/{python3-POMOR4OA-DXoihZl6.cjs.map → python3-POMOR4OA-CXiSd1gN.cjs.map} +1 -1
  181. package/dist/{rev-5EHFX4EJ-CMoRCR7l.mjs → rev-5EHFX4EJ-B82WG1Lv.mjs} +2 -2
  182. package/dist/{rev-5EHFX4EJ-CMoRCR7l.mjs.map → rev-5EHFX4EJ-B82WG1Lv.mjs.map} +1 -1
  183. package/dist/{rev-5EHFX4EJ-C0tEUAtq.cjs → rev-5EHFX4EJ-DIjd9v_Q.cjs} +2 -2
  184. package/dist/{rev-5EHFX4EJ-C0tEUAtq.cjs.map → rev-5EHFX4EJ-DIjd9v_Q.cjs.map} +1 -1
  185. package/dist/{rg-S4FXYXWB-BnlBncIg.cjs → rg-S4FXYXWB-ApQWE_EG.cjs} +3 -3
  186. package/dist/{rg-S4FXYXWB-BnlBncIg.cjs.map → rg-S4FXYXWB-ApQWE_EG.cjs.map} +1 -1
  187. package/dist/{rg-S4FXYXWB-CIJXVbGY.mjs → rg-S4FXYXWB-CyeQeN6m.mjs} +3 -3
  188. package/dist/{rg-S4FXYXWB-CIJXVbGY.mjs.map → rg-S4FXYXWB-CyeQeN6m.mjs.map} +1 -1
  189. package/dist/{rm-SSGETQVQ-ZisaZPqB.cjs → rm-SSGETQVQ-C9JTViwB.cjs} +2 -2
  190. package/dist/{rm-SSGETQVQ-ZisaZPqB.cjs.map → rm-SSGETQVQ-C9JTViwB.cjs.map} +1 -1
  191. package/dist/{rm-SSGETQVQ-Ba0g_xkF.mjs → rm-SSGETQVQ-LQ0RrYWT.mjs} +2 -2
  192. package/dist/{rm-SSGETQVQ-Ba0g_xkF.mjs.map → rm-SSGETQVQ-LQ0RrYWT.mjs.map} +1 -1
  193. package/dist/{rmdir-OC4ZLPYA-CaFxfYPV.cjs → rmdir-OC4ZLPYA-BjJEGyWy.cjs} +2 -2
  194. package/dist/{rmdir-OC4ZLPYA-CaFxfYPV.cjs.map → rmdir-OC4ZLPYA-BjJEGyWy.cjs.map} +1 -1
  195. package/dist/{rmdir-OC4ZLPYA-DhtkbSLr.mjs → rmdir-OC4ZLPYA-j7rpYv9w.mjs} +2 -2
  196. package/dist/{rmdir-OC4ZLPYA-DhtkbSLr.mjs.map → rmdir-OC4ZLPYA-j7rpYv9w.mjs.map} +1 -1
  197. package/dist/run.cjs +1 -1
  198. package/dist/run.mjs +1 -1
  199. package/dist/{sed-S5UIK574-Dg9RxQ3I.cjs → sed-S5UIK574-BKjIhqZC.cjs} +2 -2
  200. package/dist/{sed-S5UIK574-Dg9RxQ3I.cjs.map → sed-S5UIK574-BKjIhqZC.cjs.map} +1 -1
  201. package/dist/{sed-S5UIK574-BYyLDVp9.mjs → sed-S5UIK574-J74NTjfC.mjs} +2 -2
  202. package/dist/{sed-S5UIK574-BYyLDVp9.mjs.map → sed-S5UIK574-J74NTjfC.mjs.map} +1 -1
  203. package/dist/{sha1sum-2PTOAFR6-1lWZQvKU.mjs → sha1sum-2PTOAFR6-IP0cr9Nk.mjs} +3 -3
  204. package/dist/{sha1sum-2PTOAFR6-1lWZQvKU.mjs.map → sha1sum-2PTOAFR6-IP0cr9Nk.mjs.map} +1 -1
  205. package/dist/{sha1sum-2PTOAFR6-BPmv6rQj.cjs → sha1sum-2PTOAFR6-MSflYn0r.cjs} +3 -3
  206. package/dist/{sha1sum-2PTOAFR6-BPmv6rQj.cjs.map → sha1sum-2PTOAFR6-MSflYn0r.cjs.map} +1 -1
  207. package/dist/{sha256sum-NS7D3IXX-DtuuyUn8.cjs → sha256sum-NS7D3IXX-8-O3yDRg.cjs} +3 -3
  208. package/dist/{sha256sum-NS7D3IXX-DtuuyUn8.cjs.map → sha256sum-NS7D3IXX-8-O3yDRg.cjs.map} +1 -1
  209. package/dist/{sha256sum-NS7D3IXX-wQgC_9TD.mjs → sha256sum-NS7D3IXX-B83KYuY_.mjs} +3 -3
  210. package/dist/{sha256sum-NS7D3IXX-wQgC_9TD.mjs.map → sha256sum-NS7D3IXX-B83KYuY_.mjs.map} +1 -1
  211. package/dist/{sleep-X22JJINO-CpWhcnde.cjs → sleep-X22JJINO-CdKETYgR.cjs} +2 -2
  212. package/dist/{sleep-X22JJINO-CpWhcnde.cjs.map → sleep-X22JJINO-CdKETYgR.cjs.map} +1 -1
  213. package/dist/{sleep-X22JJINO-DAN0H6x8.mjs → sleep-X22JJINO-YTG2e9mJ.mjs} +2 -2
  214. package/dist/{sleep-X22JJINO-DAN0H6x8.mjs.map → sleep-X22JJINO-YTG2e9mJ.mjs.map} +1 -1
  215. package/dist/{sort-SW2YEO5B-BrAbgeh7.mjs → sort-SW2YEO5B-CbPi6K24.mjs} +3 -3
  216. package/dist/{sort-SW2YEO5B-BrAbgeh7.mjs.map → sort-SW2YEO5B-CbPi6K24.mjs.map} +1 -1
  217. package/dist/{sort-SW2YEO5B-rDpnVZhF.cjs → sort-SW2YEO5B-Cum9z2a8.cjs} +3 -3
  218. package/dist/{sort-SW2YEO5B-rDpnVZhF.cjs.map → sort-SW2YEO5B-Cum9z2a8.cjs.map} +1 -1
  219. package/dist/{split-4KKZZXXE-BPiXrXbG.mjs → split-4KKZZXXE-CKGhHIFM.mjs} +2 -2
  220. package/dist/{split-4KKZZXXE-BPiXrXbG.mjs.map → split-4KKZZXXE-CKGhHIFM.mjs.map} +1 -1
  221. package/dist/{split-4KKZZXXE-DWMRSG1h.cjs → split-4KKZZXXE-fz33ycN2.cjs} +2 -2
  222. package/dist/{split-4KKZZXXE-DWMRSG1h.cjs.map → split-4KKZZXXE-fz33ycN2.cjs.map} +1 -1
  223. package/dist/{sqlite3-CGOEFJAO-Dw3Z8yEh.mjs → sqlite3-CGOEFJAO-CZRp6vSh.mjs} +3 -3
  224. package/dist/{sqlite3-CGOEFJAO-Dw3Z8yEh.mjs.map → sqlite3-CGOEFJAO-CZRp6vSh.mjs.map} +1 -1
  225. package/dist/{sqlite3-CGOEFJAO-CoAwi92j.cjs → sqlite3-CGOEFJAO-GnOOhzcu.cjs} +3 -3
  226. package/dist/{sqlite3-CGOEFJAO-CoAwi92j.cjs.map → sqlite3-CGOEFJAO-GnOOhzcu.cjs.map} +1 -1
  227. package/dist/{start-CXfv1wyL.cjs → start-BDCUU_Ry.cjs} +232 -233
  228. package/dist/start-BDCUU_Ry.cjs.map +1 -0
  229. package/dist/{start-Dyqmdghh.mjs → start-CJs5Jmpv.mjs} +233 -234
  230. package/dist/start-CJs5Jmpv.mjs.map +1 -0
  231. package/dist/start.cjs +1 -1
  232. package/dist/start.d.cts +1 -1
  233. package/dist/start.d.mts +1 -1
  234. package/dist/start.mjs +1 -1
  235. package/dist/{strings-6WDHLGMX-CxvuK0mi.mjs → strings-6WDHLGMX-CRYfEQoM.mjs} +2 -2
  236. package/dist/{strings-6WDHLGMX-CxvuK0mi.mjs.map → strings-6WDHLGMX-CRYfEQoM.mjs.map} +1 -1
  237. package/dist/{strings-6WDHLGMX-Dhb8yDLC.cjs → strings-6WDHLGMX-_709peER.cjs} +2 -2
  238. package/dist/{strings-6WDHLGMX-Dhb8yDLC.cjs.map → strings-6WDHLGMX-_709peER.cjs.map} +1 -1
  239. package/dist/{tac-2STMMJYW-BFmTtfPi.cjs → tac-2STMMJYW-DaTzHJTH.cjs} +2 -2
  240. package/dist/{tac-2STMMJYW-BFmTtfPi.cjs.map → tac-2STMMJYW-DaTzHJTH.cjs.map} +1 -1
  241. package/dist/{tac-2STMMJYW-D98V7DHS.mjs → tac-2STMMJYW-Dfi2Vjmr.mjs} +2 -2
  242. package/dist/{tac-2STMMJYW-D98V7DHS.mjs.map → tac-2STMMJYW-Dfi2Vjmr.mjs.map} +1 -1
  243. package/dist/{tail-R4PCA2C4-4wnLsL5b.cjs → tail-R4PCA2C4-C4F7cpls.cjs} +2 -2
  244. package/dist/{tail-R4PCA2C4-4wnLsL5b.cjs.map → tail-R4PCA2C4-C4F7cpls.cjs.map} +1 -1
  245. package/dist/{tail-R4PCA2C4-Bu6_miEK.mjs → tail-R4PCA2C4-kxwztnN6.mjs} +2 -2
  246. package/dist/{tail-R4PCA2C4-Bu6_miEK.mjs.map → tail-R4PCA2C4-kxwztnN6.mjs.map} +1 -1
  247. package/dist/{tar-STHHZTZ6-CI536ZUL.mjs → tar-STHHZTZ6-ClyyrPcY.mjs} +5 -5
  248. package/dist/{tar-STHHZTZ6-CI536ZUL.mjs.map → tar-STHHZTZ6-ClyyrPcY.mjs.map} +1 -1
  249. package/dist/{tar-STHHZTZ6-B7s0JAEv.cjs → tar-STHHZTZ6-D5iu_ftt.cjs} +5 -5
  250. package/dist/{tar-STHHZTZ6-B7s0JAEv.cjs.map → tar-STHHZTZ6-D5iu_ftt.cjs.map} +1 -1
  251. package/dist/{tee-YUZ2FKCJ-gBEgGJ5c.cjs → tee-YUZ2FKCJ-Cwpyu4z6.cjs} +2 -2
  252. package/dist/{tee-YUZ2FKCJ-gBEgGJ5c.cjs.map → tee-YUZ2FKCJ-Cwpyu4z6.cjs.map} +1 -1
  253. package/dist/{tee-YUZ2FKCJ-CSJtUwl1.mjs → tee-YUZ2FKCJ-DwiX9lOR.mjs} +2 -2
  254. package/dist/{tee-YUZ2FKCJ-CSJtUwl1.mjs.map → tee-YUZ2FKCJ-DwiX9lOR.mjs.map} +1 -1
  255. package/dist/{time-D4LNBSWX-BXweubfY.cjs → time-D4LNBSWX-Crz6IS_Y.cjs} +2 -2
  256. package/dist/{time-D4LNBSWX-BXweubfY.cjs.map → time-D4LNBSWX-Crz6IS_Y.cjs.map} +1 -1
  257. package/dist/{time-D4LNBSWX-CmK5D5j8.mjs → time-D4LNBSWX-DCUHnjK8.mjs} +2 -2
  258. package/dist/{time-D4LNBSWX-CmK5D5j8.mjs.map → time-D4LNBSWX-DCUHnjK8.mjs.map} +1 -1
  259. package/dist/{timeout-YDCRSLPQ-B5hVfG7d.cjs → timeout-YDCRSLPQ-DDd3NRW_.cjs} +2 -2
  260. package/dist/{timeout-YDCRSLPQ-B5hVfG7d.cjs.map → timeout-YDCRSLPQ-DDd3NRW_.cjs.map} +1 -1
  261. package/dist/{timeout-YDCRSLPQ-p3LY8vYu.mjs → timeout-YDCRSLPQ-DcWnNYBb.mjs} +2 -2
  262. package/dist/{timeout-YDCRSLPQ-p3LY8vYu.mjs.map → timeout-YDCRSLPQ-DcWnNYBb.mjs.map} +1 -1
  263. package/dist/{touch-UA33VN3N-XzfqX6Xj.mjs → touch-UA33VN3N-B2XLBEia.mjs} +2 -2
  264. package/dist/{touch-UA33VN3N-XzfqX6Xj.mjs.map → touch-UA33VN3N-B2XLBEia.mjs.map} +1 -1
  265. package/dist/{touch-UA33VN3N-Cxjf6mOi.cjs → touch-UA33VN3N-qa2uKr61.cjs} +2 -2
  266. package/dist/{touch-UA33VN3N-Cxjf6mOi.cjs.map → touch-UA33VN3N-qa2uKr61.cjs.map} +1 -1
  267. package/dist/{tr-36LHWFRQ-Bj7MhSYO.cjs → tr-36LHWFRQ-CGKncf0e.cjs} +2 -2
  268. package/dist/{tr-36LHWFRQ-Bj7MhSYO.cjs.map → tr-36LHWFRQ-CGKncf0e.cjs.map} +1 -1
  269. package/dist/{tr-36LHWFRQ-BeW3mxZ0.mjs → tr-36LHWFRQ-qB7RaGkH.mjs} +2 -2
  270. package/dist/{tr-36LHWFRQ-BeW3mxZ0.mjs.map → tr-36LHWFRQ-qB7RaGkH.mjs.map} +1 -1
  271. package/dist/{tree-YLD52CNT-Bw83zmWP.mjs → tree-YLD52CNT-CSDgMp-S.mjs} +2 -2
  272. package/dist/{tree-YLD52CNT-Bw83zmWP.mjs.map → tree-YLD52CNT-CSDgMp-S.mjs.map} +1 -1
  273. package/dist/{tree-YLD52CNT-BifusHMT.cjs → tree-YLD52CNT-DCaIk200.cjs} +2 -2
  274. package/dist/{tree-YLD52CNT-BifusHMT.cjs.map → tree-YLD52CNT-DCaIk200.cjs.map} +1 -1
  275. package/dist/{unexpand-CADSA4VO-DCxmAQHt.mjs → unexpand-CADSA4VO-OXSW5LXB.mjs} +2 -2
  276. package/dist/{unexpand-CADSA4VO-DCxmAQHt.mjs.map → unexpand-CADSA4VO-OXSW5LXB.mjs.map} +1 -1
  277. package/dist/{unexpand-CADSA4VO-CJANgVRy.cjs → unexpand-CADSA4VO-Y0YxuYnQ.cjs} +2 -2
  278. package/dist/{unexpand-CADSA4VO-CJANgVRy.cjs.map → unexpand-CADSA4VO-Y0YxuYnQ.cjs.map} +1 -1
  279. package/dist/{uniq-XSIZR6PB-0UT5akN_.cjs → uniq-XSIZR6PB-CUquOIDK.cjs} +3 -3
  280. package/dist/{uniq-XSIZR6PB-0UT5akN_.cjs.map → uniq-XSIZR6PB-CUquOIDK.cjs.map} +1 -1
  281. package/dist/{uniq-XSIZR6PB-KlGH94Ga.mjs → uniq-XSIZR6PB-CddB2OBC.mjs} +3 -3
  282. package/dist/{uniq-XSIZR6PB-KlGH94Ga.mjs.map → uniq-XSIZR6PB-CddB2OBC.mjs.map} +1 -1
  283. package/dist/{wc-LF7NU4LA-QvPk1zKo.cjs → wc-LF7NU4LA-CpWeSthu.cjs} +3 -3
  284. package/dist/{wc-LF7NU4LA-QvPk1zKo.cjs.map → wc-LF7NU4LA-CpWeSthu.cjs.map} +1 -1
  285. package/dist/{wc-LF7NU4LA-B_-ng-Qd.mjs → wc-LF7NU4LA-wLql_W1c.mjs} +3 -3
  286. package/dist/{wc-LF7NU4LA-B_-ng-Qd.mjs.map → wc-LF7NU4LA-wLql_W1c.mjs.map} +1 -1
  287. package/dist/{with-project-scope-BSsArVUs.cjs → with-project-scope-Cz_Tmvau.cjs} +3 -6
  288. package/dist/with-project-scope-Cz_Tmvau.cjs.map +1 -0
  289. package/dist/{with-project-scope-C6gaaB04.mjs → with-project-scope-DWwbN8Qs.mjs} +4 -7
  290. package/dist/with-project-scope-DWwbN8Qs.mjs.map +1 -0
  291. package/dist/{xan-Y6WF3IRG-DHhphzLb.cjs → xan-Y6WF3IRG-BTAFHcaS.cjs} +6 -6
  292. package/dist/{xan-Y6WF3IRG-DHhphzLb.cjs.map → xan-Y6WF3IRG-BTAFHcaS.cjs.map} +1 -1
  293. package/dist/{xan-Y6WF3IRG-BXWEZVur.mjs → xan-Y6WF3IRG-DN5T5LS5.mjs} +6 -6
  294. package/dist/{xan-Y6WF3IRG-BXWEZVur.mjs.map → xan-Y6WF3IRG-DN5T5LS5.mjs.map} +1 -1
  295. package/dist/{xan-view-HDVKHFC2-WPJFqBbO.mjs → xan-view-HDVKHFC2-BQQBGxmS.mjs} +3 -3
  296. package/dist/{xan-view-HDVKHFC2-WPJFqBbO.mjs.map → xan-view-HDVKHFC2-BQQBGxmS.mjs.map} +1 -1
  297. package/dist/{xan-view-HDVKHFC2-C1H88LhM.cjs → xan-view-HDVKHFC2-CgL1WiSa.cjs} +3 -3
  298. package/dist/{xan-view-HDVKHFC2-C1H88LhM.cjs.map → xan-view-HDVKHFC2-CgL1WiSa.cjs.map} +1 -1
  299. package/dist/{xargs-MGZPH7AX-C_1kQIIR.mjs → xargs-MGZPH7AX-B1z5_213.mjs} +2 -2
  300. package/dist/{xargs-MGZPH7AX-C_1kQIIR.mjs.map → xargs-MGZPH7AX-B1z5_213.mjs.map} +1 -1
  301. package/dist/{xargs-MGZPH7AX-D0x1uJ2C.cjs → xargs-MGZPH7AX-D7LS1Gf3.cjs} +2 -2
  302. package/dist/{xargs-MGZPH7AX-D0x1uJ2C.cjs.map → xargs-MGZPH7AX-D7LS1Gf3.cjs.map} +1 -1
  303. package/dist/{yq-4QJW3EQG-CVOgQbCg.cjs → yq-4QJW3EQG-CiIzl_ob.cjs} +3 -3
  304. package/dist/{yq-4QJW3EQG-CVOgQbCg.cjs.map → yq-4QJW3EQG-CiIzl_ob.cjs.map} +1 -1
  305. package/dist/{yq-4QJW3EQG-BGn4IxWd.mjs → yq-4QJW3EQG-D6NJ7PX1.mjs} +3 -3
  306. package/dist/{yq-4QJW3EQG-BGn4IxWd.mjs.map → yq-4QJW3EQG-D6NJ7PX1.mjs.map} +1 -1
  307. package/package.json +1 -1
  308. package/dist/dist-BB6Y_75v.mjs.map +0 -1
  309. package/dist/dist-BtAOWi5K.cjs.map +0 -1
  310. package/dist/start-CXfv1wyL.cjs.map +0 -1
  311. package/dist/start-Dyqmdghh.mjs.map +0 -1
  312. package/dist/with-project-scope-BSsArVUs.cjs.map +0 -1
  313. package/dist/with-project-scope-C6gaaB04.mjs.map +0 -1
@@ -25,6 +25,8 @@ let dockerode = require("dockerode");
25
25
  dockerode = __toESM(dockerode, 1);
26
26
  let node_fs_promises = require("node:fs/promises");
27
27
  let _keystrokehq_database = require("@keystrokehq/database");
28
+ let node_events = require("node:events");
29
+ node_events = __toESM(node_events, 1);
28
30
  let zod = require("zod");
29
31
  let node_async_hooks = require("node:async_hooks");
30
32
  let _keystrokehq_platform_database = require("@keystrokehq/platform-database");
@@ -37,8 +39,6 @@ zod_v4 = __toESM(zod_v4, 1);
37
39
  let node_process = require("node:process");
38
40
  node_process = __toESM(node_process, 1);
39
41
  require("node:stream");
40
- let node_events = require("node:events");
41
- node_events = __toESM(node_events, 1);
42
42
  let node_assert = require("node:assert");
43
43
  node_assert = __toESM(node_assert, 1);
44
44
  let node_timers_promises = require("node:timers/promises");
@@ -5276,18 +5276,19 @@ object({
5276
5276
  source: _enum([
5277
5277
  "custom",
5278
5278
  "mcp",
5279
- "openapi"
5279
+ "openapi",
5280
+ "graphql"
5280
5281
  ]).default("custom"),
5281
- mcpUrl: string().url().optional(),
5282
+ url: string().url().optional(),
5282
5283
  authKind: AppAuthKindSchema$1.optional(),
5283
5284
  fields: optionalCredentialFieldsSchema$1.optional(),
5284
5285
  credentialScheme: AppCredentialSchemeSchema$1.optional(),
5285
5286
  oauthScopes: array(OAuthScopeOptionSchema$1).optional()
5286
5287
  }).superRefine((data, ctx) => {
5287
- if (data.source === "mcp" && !data.mcpUrl) ctx.addIssue({
5288
+ if ((data.source === "mcp" || data.source === "openapi" || data.source === "graphql") && !data.url) ctx.addIssue({
5288
5289
  code: "custom",
5289
- message: "mcpUrl is required for MCP apps",
5290
- path: ["mcpUrl"]
5290
+ message: "url is required for this app source",
5291
+ path: ["url"]
5291
5292
  });
5292
5293
  if (!(data.authKind ?? (data.source === "custom" ? "api_key" : void 0))) {
5293
5294
  ctx.addIssue({
@@ -5313,7 +5314,7 @@ object({
5313
5314
  category: string().min(1),
5314
5315
  authKind: AppAuthKindSchema$1,
5315
5316
  source: AppSourceSchema$1,
5316
- mcpUrl: string().url().nullable().optional(),
5317
+ url: string().url().nullable().optional(),
5317
5318
  credentialFields: optionalCredentialFieldsSchema$1.optional(),
5318
5319
  credentialScheme: AppCredentialSchemeSchema$1.optional(),
5319
5320
  oauthScopes: array(OAuthScopeOptionSchema$1).optional(),
@@ -5333,7 +5334,7 @@ object({
5333
5334
  source: AppSourceSchema$1,
5334
5335
  credentialFields: AppCredentialFieldsSchema$1.optional(),
5335
5336
  credentialScheme: AppCredentialSchemeSchema$1.optional(),
5336
- mcpUrl: string().url().nullable().optional(),
5337
+ url: string().url().nullable().optional(),
5337
5338
  createdAt: string().min(1),
5338
5339
  updatedAt: string().min(1)
5339
5340
  });
@@ -5352,8 +5353,8 @@ object({
5352
5353
  credentialFields: AppCredentialFieldsSchema$1.optional(),
5353
5354
  /** Composio auth scheme when credentialFields are present. */
5354
5355
  credentialScheme: AppCredentialSchemeSchema$1.optional(),
5355
- /** Direct MCP server URL when source is mcp. */
5356
- mcpUrl: string().url().nullable().optional(),
5356
+ /** Endpoint URL for MCP, OpenAPI, or GraphQL custom apps. */
5357
+ url: string().url().nullable().optional(),
5357
5358
  /** When present, the app supports agent gateway bindings (external channels). */
5358
5359
  gateway: AppGatewaySchema$1.optional()
5359
5360
  });
@@ -5387,7 +5388,7 @@ object({
5387
5388
  credentialFields: record(string(), AppCredentialFieldSchema$1).optional(),
5388
5389
  credentialScheme: AppCredentialSchemeSchema$1.optional(),
5389
5390
  oauthScopes: array(OAuthScopeOptionSchema$1),
5390
- mcpUrl: string().url(),
5391
+ url: string().url(),
5391
5392
  oauth: McpAuthProbeOAuthSchema$1.optional(),
5392
5393
  serverName: string().optional(),
5393
5394
  serverDescription: string().optional()
@@ -5411,7 +5412,21 @@ object({
5411
5412
  credentialFields: record(string(), AppCredentialFieldSchema$1).optional(),
5412
5413
  credentialScheme: AppCredentialSchemeSchema$1.optional(),
5413
5414
  oauthScopes: array(OAuthScopeOptionSchema$1),
5414
- openapiUrl: string().url(),
5415
+ url: string().url(),
5416
+ name: string().optional(),
5417
+ description: string().optional(),
5418
+ homepageUrl: string().optional()
5419
+ })
5420
+ });
5421
+ object({ url: string().url() });
5422
+ object({
5423
+ detected: boolean(),
5424
+ template: object({
5425
+ authKind: AppAuthKindSchema$1,
5426
+ credentialFields: record(string(), AppCredentialFieldSchema$1).optional(),
5427
+ credentialScheme: AppCredentialSchemeSchema$1.optional(),
5428
+ oauthScopes: array(OAuthScopeOptionSchema$1),
5429
+ url: string().url(),
5415
5430
  name: string().optional(),
5416
5431
  description: string().optional(),
5417
5432
  homepageUrl: string().optional()
@@ -6975,11 +6990,11 @@ async function waitForHealth(baseUrl, options = {}) {
6975
6990
  try {
6976
6991
  if ((await fetchImpl(url, { signal: AbortSignal.timeout(2e3) })).ok) return;
6977
6992
  } catch {}
6978
- await sleep$1(intervalMs);
6993
+ await sleep$2(intervalMs);
6979
6994
  }
6980
6995
  throw new Error(`Project server health check timed out after ${timeoutMs}ms (${url})`);
6981
6996
  }
6982
- function sleep$1(ms) {
6997
+ function sleep$2(ms) {
6983
6998
  return new Promise((resolve) => {
6984
6999
  setTimeout(resolve, ms);
6985
7000
  });
@@ -8713,18 +8728,19 @@ const CreateCustomAppRequestSchema = zod.z.object({
8713
8728
  source: zod.z.enum([
8714
8729
  "custom",
8715
8730
  "mcp",
8716
- "openapi"
8731
+ "openapi",
8732
+ "graphql"
8717
8733
  ]).default("custom"),
8718
- mcpUrl: zod.z.string().url().optional(),
8734
+ url: zod.z.string().url().optional(),
8719
8735
  authKind: AppAuthKindSchema.optional(),
8720
8736
  fields: optionalCredentialFieldsSchema.optional(),
8721
8737
  credentialScheme: AppCredentialSchemeSchema.optional(),
8722
8738
  oauthScopes: zod.z.array(OAuthScopeOptionSchema).optional()
8723
8739
  }).superRefine((data, ctx) => {
8724
- if (data.source === "mcp" && !data.mcpUrl) ctx.addIssue({
8740
+ if ((data.source === "mcp" || data.source === "openapi" || data.source === "graphql") && !data.url) ctx.addIssue({
8725
8741
  code: "custom",
8726
- message: "mcpUrl is required for MCP apps",
8727
- path: ["mcpUrl"]
8742
+ message: "url is required for this app source",
8743
+ path: ["url"]
8728
8744
  });
8729
8745
  if (!(data.authKind ?? (data.source === "custom" ? "api_key" : void 0))) {
8730
8746
  ctx.addIssue({
@@ -8751,7 +8767,7 @@ const CustomAppDetailSchema = zod.z.object({
8751
8767
  category: zod.z.string().min(1),
8752
8768
  authKind: AppAuthKindSchema,
8753
8769
  source: AppSourceSchema,
8754
- mcpUrl: zod.z.string().url().nullable().optional(),
8770
+ url: zod.z.string().url().nullable().optional(),
8755
8771
  credentialFields: optionalCredentialFieldsSchema.optional(),
8756
8772
  credentialScheme: AppCredentialSchemeSchema.optional(),
8757
8773
  oauthScopes: zod.z.array(OAuthScopeOptionSchema).optional(),
@@ -8773,7 +8789,7 @@ zod.z.object({
8773
8789
  source: AppSourceSchema,
8774
8790
  credentialFields: AppCredentialFieldsSchema.optional(),
8775
8791
  credentialScheme: AppCredentialSchemeSchema.optional(),
8776
- mcpUrl: zod.z.string().url().nullable().optional(),
8792
+ url: zod.z.string().url().nullable().optional(),
8777
8793
  createdAt: zod.z.string().min(1),
8778
8794
  updatedAt: zod.z.string().min(1)
8779
8795
  });
@@ -8796,8 +8812,8 @@ const AppCatalogEntrySchema = zod.z.object({
8796
8812
  credentialFields: AppCredentialFieldsSchema.optional(),
8797
8813
  /** Composio auth scheme when credentialFields are present. */
8798
8814
  credentialScheme: AppCredentialSchemeSchema.optional(),
8799
- /** Direct MCP server URL when source is mcp. */
8800
- mcpUrl: zod.z.string().url().nullable().optional(),
8815
+ /** Endpoint URL for MCP, OpenAPI, or GraphQL custom apps. */
8816
+ url: zod.z.string().url().nullable().optional(),
8801
8817
  /** When present, the app supports agent gateway bindings (external channels). */
8802
8818
  gateway: AppGatewaySchema.optional()
8803
8819
  });
@@ -8832,7 +8848,7 @@ const McpDiscoverResponseSchema = zod.z.object({
8832
8848
  credentialFields: zod.z.record(zod.z.string(), AppCredentialFieldSchema).optional(),
8833
8849
  credentialScheme: AppCredentialSchemeSchema.optional(),
8834
8850
  oauthScopes: zod.z.array(OAuthScopeOptionSchema),
8835
- mcpUrl: zod.z.string().url(),
8851
+ url: zod.z.string().url(),
8836
8852
  oauth: McpAuthProbeOAuthSchema.optional(),
8837
8853
  serverName: zod.z.string().optional(),
8838
8854
  serverDescription: zod.z.string().optional()
@@ -8849,7 +8865,7 @@ const StartMcpOAuthConnectionInputSchema = zod.z.object({
8849
8865
  });
8850
8866
  const StartMcpOAuthConnectionResultSchema = zod.z.object({ authorizeUrl: zod.z.string().url() });
8851
8867
  function mcpProbeToAppTemplate(probe) {
8852
- const mcpUrl = probe.url;
8868
+ const url = probe.url;
8853
8869
  if (probe.mode === "oauth" && probe.oauth) return {
8854
8870
  authKind: "oauth",
8855
8871
  oauthScopes: probe.oauth.scopes.map((name) => ({
@@ -8857,7 +8873,7 @@ function mcpProbeToAppTemplate(probe) {
8857
8873
  description: name,
8858
8874
  defaultSelected: true
8859
8875
  })),
8860
- mcpUrl,
8876
+ url,
8861
8877
  oauth: probe.oauth
8862
8878
  };
8863
8879
  if (probe.mode === "token") return {
@@ -8868,32 +8884,32 @@ function mcpProbeToAppTemplate(probe) {
8868
8884
  label: "Token"
8869
8885
  } },
8870
8886
  oauthScopes: [],
8871
- mcpUrl
8887
+ url
8872
8888
  };
8873
8889
  return {
8874
8890
  authKind: "api_key",
8875
8891
  credentialFields: {},
8876
8892
  oauthScopes: [],
8877
- mcpUrl
8893
+ url
8878
8894
  };
8879
8895
  }
8880
- function isRecord$1(value) {
8896
+ function isRecord$1$1(value) {
8881
8897
  return typeof value === "object" && value !== null && !Array.isArray(value);
8882
8898
  }
8883
- function trimString(value) {
8899
+ function trimString$1(value) {
8884
8900
  if (typeof value !== "string") return;
8885
8901
  const trimmed = value.trim();
8886
8902
  return trimmed.length > 0 ? trimmed : void 0;
8887
8903
  }
8888
8904
  function securitySchemesFromSpec(spec) {
8889
- if (isRecord$1(spec.components) && isRecord$1(spec.components.securitySchemes)) return spec.components.securitySchemes;
8890
- if (isRecord$1(spec.securityDefinitions)) return spec.securityDefinitions;
8905
+ if (isRecord$1$1(spec.components) && isRecord$1$1(spec.components.securitySchemes)) return spec.components.securitySchemes;
8906
+ if (isRecord$1$1(spec.securityDefinitions)) return spec.securityDefinitions;
8891
8907
  }
8892
8908
  function primarySecuritySchemeName(spec) {
8893
8909
  const security = spec.security;
8894
8910
  if (Array.isArray(security) && security.length > 0) {
8895
8911
  const first = security[0];
8896
- if (isRecord$1(first)) {
8912
+ if (isRecord$1$1(first)) {
8897
8913
  const keys = Object.keys(first);
8898
8914
  if (keys.length > 0) return keys[0];
8899
8915
  }
@@ -8908,28 +8924,28 @@ function homepageUrlFromSpec(spec) {
8908
8924
  const servers = spec.servers;
8909
8925
  if (Array.isArray(servers) && servers.length > 0) {
8910
8926
  const first = servers[0];
8911
- if (isRecord$1(first)) {
8912
- const url = trimString(first.url);
8927
+ if (isRecord$1$1(first)) {
8928
+ const url = trimString$1(first.url);
8913
8929
  if (url) return url.replace(/\/+$/, "");
8914
8930
  }
8915
8931
  }
8916
8932
  if (typeof spec.swagger === "string") {
8917
8933
  const schemes = spec.schemes;
8918
8934
  const scheme = Array.isArray(schemes) && typeof schemes[0] === "string" ? schemes[0] : "https";
8919
- const host = trimString(spec.host);
8935
+ const host = trimString$1(spec.host);
8920
8936
  const basePath = typeof spec.basePath === "string" ? spec.basePath : "";
8921
8937
  if (host) return `${scheme}://${host}${basePath}`.replace(/\/+$/, "");
8922
8938
  }
8923
8939
  }
8924
8940
  function oauthScopesFromOas3Scheme(scheme) {
8925
8941
  const flows = scheme.flows;
8926
- if (!isRecord$1(flows)) return [];
8942
+ if (!isRecord$1$1(flows)) return [];
8927
8943
  const scopes = [];
8928
- for (const flow of Object.values(flows)) if (isRecord$1(flow) && isRecord$1(flow.scopes)) scopes.push(...Object.keys(flow.scopes));
8944
+ for (const flow of Object.values(flows)) if (isRecord$1$1(flow) && isRecord$1$1(flow.scopes)) scopes.push(...Object.keys(flow.scopes));
8929
8945
  return scopes;
8930
8946
  }
8931
8947
  function oauthScopesFromSwagger2Scheme(scheme) {
8932
- if (!isRecord$1(scheme.scopes)) return [];
8948
+ if (!isRecord$1$1(scheme.scopes)) return [];
8933
8949
  return Object.keys(scheme.scopes);
8934
8950
  }
8935
8951
  function oauthScopeOptions(scopeNames) {
@@ -8940,7 +8956,7 @@ function oauthScopeOptions(scopeNames) {
8940
8956
  }));
8941
8957
  }
8942
8958
  function apiKeyPlacement(scheme) {
8943
- const name = trimString(scheme.name) ?? "api_key";
8959
+ const name = trimString$1(scheme.name) ?? "api_key";
8944
8960
  if ((typeof scheme.in === "string" ? scheme.in.toLowerCase() : "header") === "query") return {
8945
8961
  kind: "query",
8946
8962
  name
@@ -8982,7 +8998,7 @@ function mapSecurityScheme(scheme) {
8982
8998
  credentialScheme: "API_KEY",
8983
8999
  credentialFields: { token: {
8984
9000
  secret: true,
8985
- label: trimString(scheme.name) ?? "API Key",
9001
+ label: trimString$1(scheme.name) ?? "API Key",
8986
9002
  placement: apiKeyPlacement(scheme)
8987
9003
  } },
8988
9004
  oauthScopes: []
@@ -9014,18 +9030,18 @@ function mapSecurityScheme(scheme) {
9014
9030
  };
9015
9031
  }
9016
9032
  /** Map a parsed OpenAPI/Swagger document to a custom app template. */
9017
- function openApiSpecToAppTemplate(spec, openapiUrl) {
9018
- if (!isRecord$1(spec)) throw new Error("Invalid OpenAPI spec");
9019
- const info = isRecord$1(spec.info) ? spec.info : {};
9020
- const name = trimString(info.title);
9021
- const description = trimString(info.description);
9033
+ function openApiSpecToAppTemplate(spec, url) {
9034
+ if (!isRecord$1$1(spec)) throw new Error("Invalid OpenAPI spec");
9035
+ const info = isRecord$1$1(spec.info) ? spec.info : {};
9036
+ const name = trimString$1(info.title);
9037
+ const description = trimString$1(info.description);
9022
9038
  const homepageUrl = homepageUrlFromSpec(spec);
9023
9039
  const schemes = securitySchemesFromSpec(spec);
9024
9040
  const schemeName = primarySecuritySchemeName(spec);
9025
9041
  let authPart = mapSecurityScheme({ type: "none" });
9026
- if (schemeName && schemes && isRecord$1(schemes[schemeName])) authPart = mapSecurityScheme(schemes[schemeName]);
9042
+ if (schemeName && schemes && isRecord$1$1(schemes[schemeName])) authPart = mapSecurityScheme(schemes[schemeName]);
9027
9043
  return {
9028
- openapiUrl,
9044
+ url,
9029
9045
  name,
9030
9046
  description,
9031
9047
  homepageUrl,
@@ -9043,7 +9059,125 @@ const OpenApiDiscoverResponseSchema = zod.z.object({
9043
9059
  credentialFields: zod.z.record(zod.z.string(), AppCredentialFieldSchema).optional(),
9044
9060
  credentialScheme: AppCredentialSchemeSchema.optional(),
9045
9061
  oauthScopes: zod.z.array(OAuthScopeOptionSchema),
9046
- openapiUrl: zod.z.string().url(),
9062
+ url: zod.z.string().url(),
9063
+ name: zod.z.string().optional(),
9064
+ description: zod.z.string().optional(),
9065
+ homepageUrl: zod.z.string().optional()
9066
+ })
9067
+ });
9068
+ function isRecord(value) {
9069
+ return typeof value === "object" && value !== null && !Array.isArray(value);
9070
+ }
9071
+ function trimString(value) {
9072
+ if (typeof value !== "string") return;
9073
+ const trimmed = value.trim();
9074
+ return trimmed.length > 0 ? trimmed : void 0;
9075
+ }
9076
+ function displayNameFromUrl(value) {
9077
+ try {
9078
+ const hostname = new URL(value).hostname.replace(/^www\./, "");
9079
+ const parts = hostname.split(".").filter(Boolean);
9080
+ let label = parts[0] ?? hostname;
9081
+ if ((label === "mcp" || label === "api" || label === "graphql") && parts.length > 1) label = parts[1] ?? label;
9082
+ if (!label) return;
9083
+ return label.charAt(0).toUpperCase() + label.slice(1);
9084
+ } catch {
9085
+ return;
9086
+ }
9087
+ }
9088
+ function homepageUrlFromEndpoint(endpointUrl) {
9089
+ try {
9090
+ return new URL(endpointUrl).origin;
9091
+ } catch {
9092
+ return;
9093
+ }
9094
+ }
9095
+ function typeDescription(schema) {
9096
+ if (!schema) return;
9097
+ return trimString(schema.description);
9098
+ }
9099
+ function authFromProbe(authProbe) {
9100
+ if (authProbe === "basic") return {
9101
+ authKind: "api_key",
9102
+ credentialScheme: "BASIC",
9103
+ credentialFields: {
9104
+ username: { label: "Username" },
9105
+ password: {
9106
+ secret: true,
9107
+ label: "Password"
9108
+ }
9109
+ },
9110
+ oauthScopes: []
9111
+ };
9112
+ if (authProbe === "none") return {
9113
+ authKind: "api_key",
9114
+ credentialFields: {},
9115
+ oauthScopes: []
9116
+ };
9117
+ return {
9118
+ authKind: "api_key",
9119
+ credentialScheme: "BEARER_TOKEN",
9120
+ credentialFields: { token: {
9121
+ secret: true,
9122
+ label: "Token",
9123
+ placement: DEFAULT_MCP_API_KEY_PLACEMENT
9124
+ } },
9125
+ oauthScopes: []
9126
+ };
9127
+ }
9128
+ /** Infer auth requirements from an unauthenticated probe response. */
9129
+ function inferGraphqlAuthFromProbe(status, wwwAuthenticate, body) {
9130
+ if (status === 401) {
9131
+ if ((wwwAuthenticate?.toLowerCase() ?? "").includes("basic")) return "basic";
9132
+ return "bearer";
9133
+ }
9134
+ if (status === 403) return "bearer";
9135
+ if (isGraphqlAuthError(body)) return "bearer";
9136
+ return "none";
9137
+ }
9138
+ const AUTH_ERROR_PATTERN = /auth|unauthorized|unauthenticated|access token|credentials|not authenticated/i;
9139
+ function isGraphqlAuthError(body) {
9140
+ if (!isRecord(body) || !Array.isArray(body.errors)) return false;
9141
+ return body.errors.some((error) => {
9142
+ if (!isRecord(error)) return false;
9143
+ const message = typeof error.message === "string" ? error.message : "";
9144
+ const extensions = isRecord(error.extensions) ? error.extensions : void 0;
9145
+ const extensionHint = extensions ? `${extensions.code ?? ""} ${extensions.type ?? ""}` : "";
9146
+ return AUTH_ERROR_PATTERN.test(message) || /AUTH/i.test(extensionHint);
9147
+ });
9148
+ }
9149
+ /** Map a GraphQL introspection result to a custom app template. */
9150
+ function graphqlIntrospectionToAppTemplate(introspection, endpointUrl, authProbe = "bearer") {
9151
+ const root = isRecord(introspection) ? introspection : {};
9152
+ const data = isRecord(root.data) ? root.data : root;
9153
+ const schema = isRecord(data.__schema) ? data.__schema : void 0;
9154
+ const queryType = schema && isRecord(schema.queryType) ? schema.queryType : void 0;
9155
+ const mutationType = schema && isRecord(schema.mutationType) ? schema.mutationType : void 0;
9156
+ const queryName = trimString(queryType?.name);
9157
+ const name = queryName === "Query" ? displayNameFromUrl(endpointUrl) : queryName;
9158
+ const description = typeDescription(queryType) || typeDescription(mutationType) || (name ? `GraphQL API for ${name}.` : void 0);
9159
+ const homepageUrl = homepageUrlFromEndpoint(endpointUrl);
9160
+ const authPart = authFromProbe(authProbe);
9161
+ return {
9162
+ url: endpointUrl,
9163
+ name,
9164
+ description,
9165
+ homepageUrl,
9166
+ authKind: authPart.authKind,
9167
+ credentialFields: authPart.credentialFields,
9168
+ credentialScheme: authPart.credentialScheme,
9169
+ oauthScopes: authPart.oauthScopes
9170
+ };
9171
+ }
9172
+ const GraphqlDiscoverRequestSchema = zod.z.object({ url: zod.z.string().url() });
9173
+ const GraphqlDiscoverResponseSchema = zod.z.object({
9174
+ detected: zod.z.boolean(),
9175
+ template: zod.z.object({
9176
+ authKind: AppAuthKindSchema,
9177
+ credentialFields: zod.z.record(zod.z.string(), AppCredentialFieldSchema).optional(),
9178
+ credentialScheme: AppCredentialSchemeSchema.optional(),
9179
+ oauthScopes: zod.z.array(OAuthScopeOptionSchema),
9180
+ url: zod.z.string().url(),
9047
9181
  name: zod.z.string().optional(),
9048
9182
  description: zod.z.string().optional(),
9049
9183
  homepageUrl: zod.z.string().optional()
@@ -29699,9 +29833,9 @@ async function discoverMcpApp(url) {
29699
29833
  };
29700
29834
  }
29701
29835
  async function beginMcpOAuthConnect(options) {
29702
- const mcpUrl = options.app.mcpUrl?.trim();
29703
- if (!mcpUrl || options.app.source !== "mcp" || options.app.authKind !== "oauth") throw new Error("App is not a direct MCP OAuth app");
29704
- const discovered = await discoverOAuthServerInfo(new URL(mcpUrl), {});
29836
+ const appUrl = options.app.url?.trim();
29837
+ if (!appUrl || options.app.source !== "mcp" || options.app.authKind !== "oauth") throw new Error("App is not a direct MCP OAuth app");
29838
+ const discovered = await discoverOAuthServerInfo(new URL(appUrl), {});
29705
29839
  const metadata = discovered.authorizationServerMetadata;
29706
29840
  if (!metadata?.authorization_endpoint || !metadata.token_endpoint) throw new Error("MCP server does not expose OAuth authorization metadata");
29707
29841
  const oauth = {
@@ -29732,9 +29866,9 @@ async function beginMcpOAuthConnect(options) {
29732
29866
  tokenStrategy: "refresh",
29733
29867
  clientId: clientInformation.client_id,
29734
29868
  clientSecret: oauthClientSecretForStorage(clientInformation.client_secret),
29735
- metadata: oauthAppMetadata(oauth, mcpUrl, { tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method })
29869
+ metadata: oauthAppMetadata(oauth, appUrl, { tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method })
29736
29870
  });
29737
- const resourceUrl = oauth.resource ? new URL(oauth.resource) : new URL(mcpUrl);
29871
+ const resourceUrl = oauth.resource ? new URL(oauth.resource) : new URL(appUrl);
29738
29872
  const statePayload = {
29739
29873
  codeVerifier: "",
29740
29874
  appSlug: options.app.slug,
@@ -29747,7 +29881,7 @@ async function beginMcpOAuthConnect(options) {
29747
29881
  authorizationServerUrl: discovered.authorizationServerUrl,
29748
29882
  resource: oauth.resource,
29749
29883
  oauthMetadata: oauth,
29750
- mcpUrl,
29884
+ mcpUrl: appUrl,
29751
29885
  redirectUri: options.redirectUri,
29752
29886
  clientId: clientInformation.client_id,
29753
29887
  clientSecret: clientInformation.client_secret,
@@ -29824,11 +29958,11 @@ async function completeMcpOAuthConnect(options) {
29824
29958
  };
29825
29959
  }
29826
29960
  const MAX_SPEC_BYTES = 5 * 1024 * 1024;
29827
- function isRecord(value) {
29961
+ function isRecord$1(value) {
29828
29962
  return typeof value === "object" && value !== null && !Array.isArray(value);
29829
29963
  }
29830
29964
  function isOpenApiSpec(value) {
29831
- return isRecord(value) && (typeof value.openapi === "string" || typeof value.swagger === "string");
29965
+ return isRecord$1(value) && (typeof value.openapi === "string" || typeof value.swagger === "string");
29832
29966
  }
29833
29967
  async function discoverOpenApiApp(url) {
29834
29968
  const response = await fetch(url, { redirect: "follow" });
@@ -29849,6 +29983,76 @@ async function discoverOpenApiApp(url) {
29849
29983
  template: openApiSpecToAppTemplate(parsed, url)
29850
29984
  };
29851
29985
  }
29986
+ const MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
29987
+ const INTROSPECTION_QUERY = `query IntrospectionQuery {
29988
+ __schema {
29989
+ queryType { name description }
29990
+ mutationType { name description }
29991
+ }
29992
+ }`;
29993
+ const USAGE_AUTH_PROBE_QUERY = "query { __typename }";
29994
+ async function postGraphql(endpointUrl, query) {
29995
+ const response = await fetch(endpointUrl, {
29996
+ method: "POST",
29997
+ redirect: "follow",
29998
+ headers: {
29999
+ "content-type": "application/json",
30000
+ accept: "application/json"
30001
+ },
30002
+ body: JSON.stringify({ query })
30003
+ });
30004
+ const contentLength = response.headers.get("content-length");
30005
+ if (contentLength && Number(contentLength) > MAX_RESPONSE_BYTES) throw new Error("GraphQL introspection response is too large");
30006
+ const text = await response.text();
30007
+ if (text.length > MAX_RESPONSE_BYTES) throw new Error("GraphQL introspection response is too large");
30008
+ let body;
30009
+ try {
30010
+ body = JSON.parse(text);
30011
+ } catch {
30012
+ throw new Error("GraphQL endpoint did not return JSON");
30013
+ }
30014
+ return {
30015
+ response,
30016
+ body,
30017
+ text
30018
+ };
30019
+ }
30020
+ function introspectionDisabled(body) {
30021
+ if (!isRecord(body) || !Array.isArray(body.errors)) return false;
30022
+ return body.errors.some((error) => {
30023
+ if (!isRecord(error)) return false;
30024
+ return (typeof error.message === "string" ? error.message.toLowerCase() : "").includes("introspection");
30025
+ });
30026
+ }
30027
+ function parseEndpointUrl(url) {
30028
+ const trimmed = url.trim();
30029
+ const parsed = new URL(trimmed);
30030
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error("GraphQL endpoint must use http or https");
30031
+ return parsed;
30032
+ }
30033
+ async function discoverGraphqlApp(url) {
30034
+ const endpointUrl = parseEndpointUrl(url).toString();
30035
+ const { response, body } = await postGraphql(endpointUrl, INTROSPECTION_QUERY);
30036
+ const authProbe = inferGraphqlAuthFromProbe(response.status, response.headers.get("www-authenticate"), body);
30037
+ if (!(isRecord(body) && isRecord(body.data) && isRecord(body.data.__schema))) {
30038
+ if (response.status === 401 || response.status === 403) return {
30039
+ detected: true,
30040
+ template: graphqlIntrospectionToAppTemplate({ data: {} }, endpointUrl, authProbe)
30041
+ };
30042
+ if (response.ok && introspectionDisabled(body)) throw new Error("Introspection is disabled on this endpoint");
30043
+ throw new Error(`Failed to introspect GraphQL endpoint (${response.status})`);
30044
+ }
30045
+ let resolvedAuthProbe = authProbe;
30046
+ if (resolvedAuthProbe === "none") {
30047
+ const usageProbe = await postGraphql(endpointUrl, USAGE_AUTH_PROBE_QUERY);
30048
+ const usageAuth = inferGraphqlAuthFromProbe(usageProbe.response.status, usageProbe.response.headers.get("www-authenticate"), usageProbe.body);
30049
+ if (usageAuth !== "none") resolvedAuthProbe = usageAuth;
30050
+ }
30051
+ return {
30052
+ detected: true,
30053
+ template: graphqlIntrospectionToAppTemplate(body, endpointUrl, resolvedAuthProbe)
30054
+ };
30055
+ }
29852
30056
  //#endregion
29853
30057
  //#region ../../packages/workflow/dist/index.mjs
29854
30058
  const zodSchema$1 = zod.z.custom((v) => v instanceof zod.z.ZodType, "must be a Zod schema");
@@ -29893,6 +30097,18 @@ registerWorkflowRunGetter(() => {
29893
30097
  */
29894
30098
  const cronScheduleSchema = zod.z.string().trim().min(1, "cron schedule must be a non-empty string").refine(isParseableCron, "must be a valid cron expression").brand();
29895
30099
  /**
30100
+ * Resolves the effective schedule for an attachment, applying overrides by
30101
+ * precedence: per-attachment override → global override → the authored
30102
+ * schedule. Pure string precedence — no cron parsing.
30103
+ */
30104
+ function resolveCronSchedule(attachmentId, schedule, options) {
30105
+ return options.attachmentScheduleOverrides?.[attachmentId] ?? options.cronScheduleOverride ?? schedule;
30106
+ }
30107
+ /** The next time the schedule fires at or after `from`. */
30108
+ function nextTriggerRunAt(schedule, from = /* @__PURE__ */ new Date()) {
30109
+ return toCron(schedule).getNextDate(from);
30110
+ }
30111
+ /**
29896
30112
  * Single touchpoint for the `cron-schedule` library — every parse, validation,
29897
30113
  * and next-run calculation in this package goes through here.
29898
30114
  */
@@ -42762,7 +42978,7 @@ function createDatabaseJobQueue() {
42762
42978
  while (running) try {
42763
42979
  const job = await (0, _keystrokehq_database.claimNextJob)(workerId);
42764
42980
  if (!job) {
42765
- await sleep(pollIntervalMs);
42981
+ await sleep$1(pollIntervalMs);
42766
42982
  continue;
42767
42983
  }
42768
42984
  try {
@@ -42776,7 +42992,7 @@ function createDatabaseJobQueue() {
42776
42992
  }
42777
42993
  }
42778
42994
  } catch {
42779
- await sleep(pollIntervalMs);
42995
+ await sleep$1(pollIntervalMs);
42780
42996
  }
42781
42997
  };
42782
42998
  loop();
@@ -42789,9 +43005,126 @@ function createDatabaseJobQueue() {
42789
43005
  subscribeCancel: (handler) => cancelChannel.subscribeCancel(handler)
42790
43006
  };
42791
43007
  }
43008
+ function sleep$1(ms) {
43009
+ return new Promise((resolve) => setTimeout(resolve, ms));
43010
+ }
43011
+ function enqueueTriggerJob(jobQueue, row, scheduledAt) {
43012
+ const input = {
43013
+ kind: "trigger",
43014
+ targetId: row.slug,
43015
+ runId: crypto.randomUUID(),
43016
+ trigger: row.kind,
43017
+ payload: {},
43018
+ projectId: row.projectId
43019
+ };
43020
+ if (scheduledAt) input.scheduledAt = scheduledAt;
43021
+ return jobQueue.enqueue(input);
43022
+ }
43023
+ async function claimDue(scope, asOf, resolveNextRunAt, limit) {
43024
+ if (scope === "organization") return (0, _keystrokehq_database.claimDueTriggersForOrg)(asOf, resolveNextRunAt, limit);
43025
+ return (0, _keystrokehq_database.claimDueTriggers)(asOf, resolveNextRunAt, limit).then((rows) => rows.map((row) => ({
43026
+ ...row,
43027
+ projectId: (0, _keystrokehq_database.getProjectScopeId)()
43028
+ })));
43029
+ }
43030
+ function createScheduleTicker(ctx) {
43031
+ const pollIntervalMs = ctx.pollIntervalMs ?? 1e3;
43032
+ const batchSize = ctx.batchSize ?? 10;
43033
+ async function fireDueSchedules(asOf = /* @__PURE__ */ new Date()) {
43034
+ const claimed = await claimDue(ctx.scope ?? "project", asOf, (schedule) => nextTriggerRunAt(schedule, asOf), batchSize);
43035
+ for (const row of claimed) {
43036
+ if (row.kind !== "cron" && row.kind !== "poll") continue;
43037
+ await enqueueTriggerJob(ctx.jobQueue, {
43038
+ slug: row.slug,
43039
+ kind: row.kind,
43040
+ projectId: row.projectId
43041
+ }, asOf);
43042
+ }
43043
+ return claimed.length;
43044
+ }
43045
+ async function startScheduleTicker(options = {}) {
43046
+ const intervalMs = options.pollIntervalMs ?? pollIntervalMs;
43047
+ const limit = options.batchSize ?? batchSize;
43048
+ const scope = options.scope ?? ctx.scope ?? "project";
43049
+ let running = true;
43050
+ const loop = async () => {
43051
+ while (running) {
43052
+ try {
43053
+ const claimed = await claimDue(scope, /* @__PURE__ */ new Date(), (schedule) => nextTriggerRunAt(schedule, /* @__PURE__ */ new Date()), limit);
43054
+ for (const row of claimed) {
43055
+ if (row.kind !== "cron" && row.kind !== "poll") continue;
43056
+ await enqueueTriggerJob(ctx.jobQueue, {
43057
+ slug: row.slug,
43058
+ kind: row.kind,
43059
+ projectId: row.projectId
43060
+ });
43061
+ }
43062
+ } catch {}
43063
+ await sleep(intervalMs);
43064
+ }
43065
+ };
43066
+ loop();
43067
+ return async () => {
43068
+ running = false;
43069
+ };
43070
+ }
43071
+ return {
43072
+ fireDueSchedules,
43073
+ startScheduleTicker
43074
+ };
43075
+ }
42792
43076
  function sleep(ms) {
42793
43077
  return new Promise((resolve) => setTimeout(resolve, ms));
42794
43078
  }
43079
+ function resolveTriggerSchedule(triggerSlug, schedule, overrides) {
43080
+ return resolveCronSchedule(triggerSlug, schedule, {
43081
+ cronScheduleOverride: overrides?.global,
43082
+ attachmentScheduleOverrides: overrides?.byTrigger
43083
+ });
43084
+ }
43085
+ async function syncTriggerSchedules(options) {
43086
+ const now = /* @__PURE__ */ new Date();
43087
+ const projectSlugs = options.schedules.map((schedule) => schedule.triggerSlug);
43088
+ const ephemeralSlugs = await (0, _keystrokehq_database.selectActiveEphemeralScheduledTriggerSlugs)();
43089
+ const slugs = [...projectSlugs, ...ephemeralSlugs];
43090
+ if (slugs.length === 0) {
43091
+ await (0, _keystrokehq_database.disableAllTriggerSchedules)(now);
43092
+ return;
43093
+ }
43094
+ await (0, _keystrokehq_database.disableTriggerSchedulesNotInSlugs)(slugs, now);
43095
+ for (const spec of options.schedules) {
43096
+ const schedule = resolveTriggerSchedule(spec.triggerSlug, spec.schedule, options.scheduleOverrides);
43097
+ const existing = await (0, _keystrokehq_database.selectTriggerBySlug)(spec.triggerSlug);
43098
+ if (!existing) continue;
43099
+ const nextRunAt = !(existing.schedule !== schedule) && existing.enabled === 1 ? existing.nextRunAt : nextTriggerRunAt(schedule, now);
43100
+ const enabled = (await (0, _keystrokehq_database.listExecutableAttachmentsByTriggerIds)([existing.id])).length > 0;
43101
+ await (0, _keystrokehq_database.upsertTriggerScheduleFields)({
43102
+ triggerSlug: spec.triggerSlug,
43103
+ schedule,
43104
+ nextRunAt: nextRunAt ?? now,
43105
+ enabled,
43106
+ updatedAt: now
43107
+ });
43108
+ }
43109
+ }
43110
+ /** Postgres poll loop — default trigger scheduler for pg-boss, polling, and memory paths. */
43111
+ function createDatabaseTriggerScheduler(options) {
43112
+ const ticker = createScheduleTicker({
43113
+ jobQueue: options.jobQueue,
43114
+ scope: options.scope,
43115
+ pollIntervalMs: options.pollIntervalMs,
43116
+ batchSize: options.batchSize
43117
+ });
43118
+ return {
43119
+ sync: (syncOptions) => syncTriggerSchedules(syncOptions),
43120
+ start: (startOptions) => ticker.startScheduleTicker(startOptions),
43121
+ fireDue: (asOf) => ticker.fireDueSchedules(asOf),
43122
+ async remove(triggerSlug) {
43123
+ await (0, _keystrokehq_database.setTriggerScheduleEnabled)(triggerSlug, false, /* @__PURE__ */ new Date());
43124
+ },
43125
+ async upsert(_spec) {}
43126
+ };
43127
+ }
42795
43128
  let boss;
42796
43129
  function resolveDatabaseUrl(url) {
42797
43130
  const resolved = url ?? (0, _keystrokehq_database.resolvePostgresUrlFromEnv)(process.env);
@@ -42844,6 +43177,8 @@ function buildPgBossJobQueue(boss, options) {
42844
43177
  const queueName = options.queueName ?? "keystroke";
42845
43178
  const cancelChannel = (0, _keystrokehq_database.createPostgresCancelChannel)(options.connectionString, pgCancelChannelName(options.cancelScope ?? "platform", options.cancelScope === "organization" ? options.organizationId : options.projectId));
42846
43179
  return {
43180
+ boss,
43181
+ queueName,
42847
43182
  async enqueue(input) {
42848
43183
  const jobId = await boss.send(queueName, {
42849
43184
  ...input,
@@ -42925,9 +43260,129 @@ async function createSharedPgBossJobQueue(boss, options) {
42925
43260
  cancelScope: "platform"
42926
43261
  });
42927
43262
  }
43263
+ /**
43264
+ * pg-boss schedule key for one trigger. Mirrors {@link bullmqTriggerSchedulerId}
43265
+ * so the firing backend is interchangeable: `trigger-<projectId>-<slug>`. pg-boss
43266
+ * keys allow hyphens, so colons (legal in ids) are swapped for `-`.
43267
+ */
43268
+ function pgBossTriggerScheduleKey(spec) {
43269
+ return `trigger-${(spec.projectId ?? (0, _keystrokehq_database.getProjectScopeId)()).replaceAll(":", "-")}-${spec.triggerSlug.replaceAll(":", "-")}`;
43270
+ }
43271
+ /** Key prefix scoping reconcile cleanup to the active project (org queues are shared). */
43272
+ function pgBossTriggerScheduleKeyPrefix(projectId) {
43273
+ return `trigger-${(projectId ?? (0, _keystrokehq_database.getProjectScopeId)()).replaceAll(":", "-")}-`;
43274
+ }
43275
+ function triggerJobData(spec) {
43276
+ return {
43277
+ kind: "trigger",
43278
+ targetId: spec.triggerSlug,
43279
+ runId: "",
43280
+ trigger: spec.kind,
43281
+ payload: {},
43282
+ projectId: spec.projectId ?? (0, _keystrokehq_database.getProjectScopeId)()
43283
+ };
43284
+ }
43285
+ function rowToSpec(row) {
43286
+ if (row.kind !== "cron" && row.kind !== "poll") return;
43287
+ if (!row.schedule) return;
43288
+ return {
43289
+ triggerSlug: row.slug,
43290
+ kind: row.kind,
43291
+ schedule: row.schedule,
43292
+ projectId: row.projectId
43293
+ };
43294
+ }
43295
+ /**
43296
+ * Trigger scheduler backed by pg-boss native cron scheduling. Mirrors
43297
+ * {@link createBullmqTriggerScheduler}: `boss.schedule` registers a recurring job
43298
+ * onto the project/org queue (no per-second DB poll), and reconcile keeps the
43299
+ * `pgboss.schedule` table in sync with the `triggers` table (source of truth).
43300
+ *
43301
+ * Granularity: pg-boss cron is minute-level (it checks schedules every ~30s and
43302
+ * dedupes per minute), so sub-minute schedules effectively fire at most once per
43303
+ * minute — unlike the DB ticker's 1s loop.
43304
+ */
43305
+ function createPgBossTriggerScheduler(_ctx, queue) {
43306
+ async function upsertScheduler(spec, overrides) {
43307
+ const schedule = resolveTriggerSchedule(spec.triggerSlug, spec.schedule, overrides);
43308
+ const key = pgBossTriggerScheduleKey(spec);
43309
+ await queue.boss.schedule(queue.queueName, schedule, triggerJobData({
43310
+ ...spec,
43311
+ schedule
43312
+ }), { key });
43313
+ }
43314
+ async function reconcileFromDatabase(overrides) {
43315
+ const projectPrefix = pgBossTriggerScheduleKeyPrefix();
43316
+ const rows = await (0, _keystrokehq_database.listEnabledScheduledTriggers)();
43317
+ const expectedKeys = /* @__PURE__ */ new Set();
43318
+ const failures = [];
43319
+ for (const row of rows) {
43320
+ const spec = rowToSpec(row);
43321
+ if (!spec) continue;
43322
+ expectedKeys.add(pgBossTriggerScheduleKey(spec));
43323
+ try {
43324
+ await upsertScheduler(spec, overrides);
43325
+ } catch (error) {
43326
+ failures.push({
43327
+ triggerSlug: spec.triggerSlug,
43328
+ error
43329
+ });
43330
+ console.error(`[pg-boss-trigger-scheduler] failed to schedule ${spec.triggerSlug}`, error);
43331
+ }
43332
+ }
43333
+ const schedules = await queue.boss.getSchedules(queue.queueName);
43334
+ for (const schedule of schedules) {
43335
+ const key = schedule.key;
43336
+ if (!key || !key.startsWith(projectPrefix)) continue;
43337
+ if (!expectedKeys.has(key)) try {
43338
+ await queue.boss.unschedule(queue.queueName, key);
43339
+ } catch (error) {
43340
+ failures.push({
43341
+ triggerSlug: key,
43342
+ error
43343
+ });
43344
+ console.error(`[pg-boss-trigger-scheduler] failed to unschedule stale ${key}`, error);
43345
+ }
43346
+ }
43347
+ if (failures.length > 0) throw new Error(`pg-boss trigger scheduler reconcile failed for ${failures.length} trigger(s)`);
43348
+ }
43349
+ return {
43350
+ async sync(syncOptions) {
43351
+ await syncTriggerSchedules(syncOptions);
43352
+ await reconcileFromDatabase(syncOptions.scheduleOverrides);
43353
+ },
43354
+ async start(_options) {
43355
+ return async () => void 0;
43356
+ },
43357
+ fireDue: async () => 0,
43358
+ upsert: upsertScheduler,
43359
+ async remove(triggerSlug, projectId) {
43360
+ await queue.boss.unschedule(queue.queueName, pgBossTriggerScheduleKey({
43361
+ triggerSlug,
43362
+ projectId
43363
+ }));
43364
+ }
43365
+ };
43366
+ }
42928
43367
  function resolveUrl(ctx) {
42929
43368
  return ctx.url ?? (0, _keystrokehq_database.resolveProjectDatabaseUrlFromEnv)(process.env) ?? _keystrokehq_database.DEFAULT_DATABASE_URL;
42930
43369
  }
43370
+ /** DB poll-loop trigger scheduler — used by the SQLite/self-host polling backend. */
43371
+ function createPollingTriggerScheduler(ctx, queue) {
43372
+ const scope = ctx.scope === "organization" ? "organization" : "project";
43373
+ return Promise.resolve(createDatabaseTriggerScheduler({
43374
+ jobQueue: queue,
43375
+ scope
43376
+ }));
43377
+ }
43378
+ function isPgBossJobQueue(queue) {
43379
+ return "boss" in queue && "queueName" in queue;
43380
+ }
43381
+ /** Native pg-boss cron scheduler; falls back to the DB ticker if the queue isn't pg-boss. */
43382
+ function createPgBossTriggerSchedulerForPlugin(ctx, queue) {
43383
+ if (!isPgBossJobQueue(queue)) return createPollingTriggerScheduler(ctx, queue);
43384
+ return Promise.resolve(createPgBossTriggerScheduler(ctx, queue));
43385
+ }
42931
43386
  /** Postgres pg-boss backend. Platform scope shares one queue; org scope gets one queue per org. */
42932
43387
  function pgBossSchedulerPlugin() {
42933
43388
  return defineSchedulerPlugin({
@@ -42954,7 +43409,8 @@ function pgBossSchedulerPlugin() {
42954
43409
  queueName: pgBossProjectQueueName(projectId),
42955
43410
  projectId
42956
43411
  });
42957
- }
43412
+ },
43413
+ createTriggerScheduler: createPgBossTriggerSchedulerForPlugin
42958
43414
  });
42959
43415
  }
42960
43416
  /** DB-table queue (Drizzle `jobs`), for SQLite / self-host. */
@@ -42963,7 +43419,8 @@ function pollingSchedulerPlugin() {
42963
43419
  name: "polling",
42964
43420
  async createJobQueue() {
42965
43421
  return createDatabaseJobQueue();
42966
- }
43422
+ },
43423
+ createTriggerScheduler: createPollingTriggerScheduler
42967
43424
  });
42968
43425
  }
42969
43426
  /** Auto-selects pg-boss (postgres) or polling (sqlite) by dialect. */
@@ -42973,6 +43430,10 @@ function defaultSchedulerPlugin() {
42973
43430
  async createJobQueue(ctx) {
42974
43431
  if ((0, _keystrokehq_database.inferDialect)(resolveUrl(ctx), ctx.dialect) === "postgres") return pgBossSchedulerPlugin().createJobQueue(ctx);
42975
43432
  return pollingSchedulerPlugin().createJobQueue(ctx);
43433
+ },
43434
+ async createTriggerScheduler(ctx, queue) {
43435
+ if ((0, _keystrokehq_database.inferDialect)(resolveUrl(ctx), ctx.dialect) === "postgres") return pgBossSchedulerPlugin().createTriggerScheduler(ctx, queue);
43436
+ return pollingSchedulerPlugin().createTriggerScheduler(ctx, queue);
42976
43437
  }
42977
43438
  });
42978
43439
  }
@@ -43545,6 +44006,18 @@ Object.defineProperty(exports, "GetCustomAppResponseSchema", {
43545
44006
  return GetCustomAppResponseSchema;
43546
44007
  }
43547
44008
  });
44009
+ Object.defineProperty(exports, "GraphqlDiscoverRequestSchema", {
44010
+ enumerable: true,
44011
+ get: function() {
44012
+ return GraphqlDiscoverRequestSchema;
44013
+ }
44014
+ });
44015
+ Object.defineProperty(exports, "GraphqlDiscoverResponseSchema", {
44016
+ enumerable: true,
44017
+ get: function() {
44018
+ return GraphqlDiscoverResponseSchema;
44019
+ }
44020
+ });
43548
44021
  Object.defineProperty(exports, "HistoryRunCancelResponseSchema", {
43549
44022
  enumerable: true,
43550
44023
  get: function() {
@@ -44115,6 +44588,12 @@ Object.defineProperty(exports, "deriveCredentialInstanceSlug", {
44115
44588
  return deriveCredentialInstanceSlug;
44116
44589
  }
44117
44590
  });
44591
+ Object.defineProperty(exports, "discoverGraphqlApp", {
44592
+ enumerable: true,
44593
+ get: function() {
44594
+ return discoverGraphqlApp;
44595
+ }
44596
+ });
44118
44597
  Object.defineProperty(exports, "discoverMcpApp", {
44119
44598
  enumerable: true,
44120
44599
  get: function() {
@@ -44368,4 +44847,4 @@ Object.defineProperty(exports, "validationErrorResponse", {
44368
44847
  }
44369
44848
  });
44370
44849
 
44371
- //# sourceMappingURL=dist-BtAOWi5K.cjs.map
44850
+ //# sourceMappingURL=dist-KeJkUQxy.cjs.map