@keystrokehq/platform 0.1.24 → 0.1.26

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 (303) hide show
  1. package/dist/{awk2-LA3USKJP-6nTiL1Fx.cjs → awk2-LA3USKJP-DWN5gyAn.cjs} +2 -2
  2. package/dist/{awk2-LA3USKJP-6nTiL1Fx.cjs.map → awk2-LA3USKJP-DWN5gyAn.cjs.map} +1 -1
  3. package/dist/{awk2-LA3USKJP-DsFCxrAn.mjs → awk2-LA3USKJP-DeBBkGI5.mjs} +2 -2
  4. package/dist/{awk2-LA3USKJP-DsFCxrAn.mjs.map → awk2-LA3USKJP-DeBBkGI5.mjs.map} +1 -1
  5. package/dist/{base64-C2AIWVNC-Jli-NZKT.cjs → base64-C2AIWVNC-Dp8sCZAt.cjs} +2 -2
  6. package/dist/{base64-C2AIWVNC-Jli-NZKT.cjs.map → base64-C2AIWVNC-Dp8sCZAt.cjs.map} +1 -1
  7. package/dist/{base64-C2AIWVNC-BTfHxe6x.mjs → base64-C2AIWVNC-JuDjFqOp.mjs} +2 -2
  8. package/dist/{base64-C2AIWVNC-BTfHxe6x.mjs.map → base64-C2AIWVNC-JuDjFqOp.mjs.map} +1 -1
  9. package/dist/{bash-YZ33HQZQ-Cl3zWejT.cjs → bash-YZ33HQZQ-DVA0EDj-.cjs} +2 -2
  10. package/dist/{bash-YZ33HQZQ-Cl3zWejT.cjs.map → bash-YZ33HQZQ-DVA0EDj-.cjs.map} +1 -1
  11. package/dist/{bash-YZ33HQZQ-BvR1blQy.mjs → bash-YZ33HQZQ-rOVeZOAg.mjs} +2 -2
  12. package/dist/{bash-YZ33HQZQ-BvR1blQy.mjs.map → bash-YZ33HQZQ-rOVeZOAg.mjs.map} +1 -1
  13. package/dist/{cat-TSFMZVYS-p5WuEnly.cjs → cat-TSFMZVYS-COvFG8Nb.cjs} +3 -3
  14. package/dist/{cat-TSFMZVYS-p5WuEnly.cjs.map → cat-TSFMZVYS-COvFG8Nb.cjs.map} +1 -1
  15. package/dist/{cat-TSFMZVYS-BR3SDCDa.mjs → cat-TSFMZVYS-CXlrdMsd.mjs} +3 -3
  16. package/dist/{cat-TSFMZVYS-BR3SDCDa.mjs.map → cat-TSFMZVYS-CXlrdMsd.mjs.map} +1 -1
  17. package/dist/{chunk-5H5SCKJM-DnLsyMd1.cjs → chunk-5H5SCKJM-CHHdX4ki.cjs} +2 -2
  18. package/dist/{chunk-5H5SCKJM-DnLsyMd1.cjs.map → chunk-5H5SCKJM-CHHdX4ki.cjs.map} +1 -1
  19. package/dist/{chunk-5H5SCKJM-CPKgF86S.mjs → chunk-5H5SCKJM-Dkx3HLwU.mjs} +2 -2
  20. package/dist/{chunk-5H5SCKJM-CPKgF86S.mjs.map → chunk-5H5SCKJM-Dkx3HLwU.mjs.map} +1 -1
  21. package/dist/{chunk-AQ6FYS2X-Dj95F41M.cjs → chunk-AQ6FYS2X-BypvbWc4.cjs} +2 -2
  22. package/dist/{chunk-AQ6FYS2X-Dj95F41M.cjs.map → chunk-AQ6FYS2X-BypvbWc4.cjs.map} +1 -1
  23. package/dist/{chunk-AQ6FYS2X-CUa1A4Pd.mjs → chunk-AQ6FYS2X-C_yeVyzo.mjs} +2 -2
  24. package/dist/{chunk-AQ6FYS2X-CUa1A4Pd.mjs.map → chunk-AQ6FYS2X-C_yeVyzo.mjs.map} +1 -1
  25. package/dist/{chunk-CHFEPBH4-Crh-KqiZ.cjs → chunk-CHFEPBH4-B713gemY.cjs} +2 -2
  26. package/dist/{chunk-CHFEPBH4-Crh-KqiZ.cjs.map → chunk-CHFEPBH4-B713gemY.cjs.map} +1 -1
  27. package/dist/{chunk-CHFEPBH4-CnDOsQ68.mjs → chunk-CHFEPBH4-BN_FjUum.mjs} +2 -2
  28. package/dist/{chunk-CHFEPBH4-CnDOsQ68.mjs.map → chunk-CHFEPBH4-BN_FjUum.mjs.map} +1 -1
  29. package/dist/{chunk-EBAPSGAO-C3Qo8RVI.cjs → chunk-EBAPSGAO-C5khy_yB.cjs} +2 -2
  30. package/dist/{chunk-EBAPSGAO-C3Qo8RVI.cjs.map → chunk-EBAPSGAO-C5khy_yB.cjs.map} +1 -1
  31. package/dist/{chunk-EBAPSGAO-B60xzKy-.mjs → chunk-EBAPSGAO-CWkUWuMF.mjs} +2 -2
  32. package/dist/{chunk-EBAPSGAO-B60xzKy-.mjs.map → chunk-EBAPSGAO-CWkUWuMF.mjs.map} +1 -1
  33. package/dist/{chunk-LEKBROJD-CzSjgGrS.mjs → chunk-LEKBROJD-DGOBGAWj.mjs} +2 -2
  34. package/dist/{chunk-LEKBROJD-CzSjgGrS.mjs.map → chunk-LEKBROJD-DGOBGAWj.mjs.map} +1 -1
  35. package/dist/{chunk-LEKBROJD-CQrKRfn9.cjs → chunk-LEKBROJD-n0FRgkoB.cjs} +2 -2
  36. package/dist/{chunk-LEKBROJD-CQrKRfn9.cjs.map → chunk-LEKBROJD-n0FRgkoB.cjs.map} +1 -1
  37. package/dist/{chunk-VPADYNBD-BlYPREz9.cjs → chunk-VPADYNBD-B4yWrLcA.cjs} +2 -2
  38. package/dist/{chunk-VPADYNBD-BlYPREz9.cjs.map → chunk-VPADYNBD-B4yWrLcA.cjs.map} +1 -1
  39. package/dist/{chunk-VPADYNBD-Bu1xj_qj.mjs → chunk-VPADYNBD-Dg8PNXJd.mjs} +2 -2
  40. package/dist/{chunk-VPADYNBD-Bu1xj_qj.mjs.map → chunk-VPADYNBD-Dg8PNXJd.mjs.map} +1 -1
  41. package/dist/{chunk-YCLFEX4T-CmE-atJH.cjs → chunk-YCLFEX4T-Bnzy1Euf.cjs} +2 -2
  42. package/dist/{chunk-YCLFEX4T-CmE-atJH.cjs.map → chunk-YCLFEX4T-Bnzy1Euf.cjs.map} +1 -1
  43. package/dist/{chunk-YCLFEX4T-BMs3IOYN.mjs → chunk-YCLFEX4T-DU6t56E4.mjs} +2 -2
  44. package/dist/{chunk-YCLFEX4T-BMs3IOYN.mjs.map → chunk-YCLFEX4T-DU6t56E4.mjs.map} +1 -1
  45. package/dist/{column-XT6UFXNQ-CKCd9cj4.mjs → column-XT6UFXNQ-5YutVL6D.mjs} +2 -2
  46. package/dist/{column-XT6UFXNQ-CKCd9cj4.mjs.map → column-XT6UFXNQ-5YutVL6D.mjs.map} +1 -1
  47. package/dist/{column-XT6UFXNQ-C-MvTg4x.cjs → column-XT6UFXNQ-Dy7Oa0td.cjs} +2 -2
  48. package/dist/{column-XT6UFXNQ-C-MvTg4x.cjs.map → column-XT6UFXNQ-Dy7Oa0td.cjs.map} +1 -1
  49. package/dist/{comm-VV2LDX2J-DIsxSu6X.cjs → comm-VV2LDX2J-CAqAa0VH.cjs} +2 -2
  50. package/dist/{comm-VV2LDX2J-DIsxSu6X.cjs.map → comm-VV2LDX2J-CAqAa0VH.cjs.map} +1 -1
  51. package/dist/{comm-VV2LDX2J-Cxkv2cbu.mjs → comm-VV2LDX2J-NATbHp7x.mjs} +2 -2
  52. package/dist/{comm-VV2LDX2J-Cxkv2cbu.mjs.map → comm-VV2LDX2J-NATbHp7x.mjs.map} +1 -1
  53. package/dist/{config-4tlyrD1h.d.mts → config-Bf_tiPRV.d.mts} +3 -3
  54. package/dist/{config-DCMtEjGV.d.cts → config-DiHYzgnA.d.cts} +3 -3
  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-RoHZxKSQ.cjs → cp-BISAAS7A-CsllNNA2.cjs} +2 -2
  60. package/dist/{cp-BISAAS7A-RoHZxKSQ.cjs.map → cp-BISAAS7A-CsllNNA2.cjs.map} +1 -1
  61. package/dist/{cp-BISAAS7A-CpbLLWK0.mjs → cp-BISAAS7A-ptJev1Ed.mjs} +2 -2
  62. package/dist/{cp-BISAAS7A-CpbLLWK0.mjs.map → cp-BISAAS7A-ptJev1Ed.mjs.map} +1 -1
  63. package/dist/{cut-OKARJCCV-DV8QkVm0.cjs → cut-OKARJCCV-C3IgdttS.cjs} +3 -3
  64. package/dist/{cut-OKARJCCV-DV8QkVm0.cjs.map → cut-OKARJCCV-C3IgdttS.cjs.map} +1 -1
  65. package/dist/{cut-OKARJCCV-Co1hDP2h.mjs → cut-OKARJCCV-CAXXP7Q-.mjs} +3 -3
  66. package/dist/{cut-OKARJCCV-Co1hDP2h.mjs.map → cut-OKARJCCV-CAXXP7Q-.mjs.map} +1 -1
  67. package/dist/{diff-MWJFIG7X-CeQncm_4.cjs → diff-MWJFIG7X-BN4jYNC5.cjs} +2 -2
  68. package/dist/{diff-MWJFIG7X-CeQncm_4.cjs.map → diff-MWJFIG7X-BN4jYNC5.cjs.map} +1 -1
  69. package/dist/{diff-MWJFIG7X-Buur00F5.mjs → diff-MWJFIG7X-CvZCw_Zo.mjs} +2 -2
  70. package/dist/{diff-MWJFIG7X-Buur00F5.mjs.map → diff-MWJFIG7X-CvZCw_Zo.mjs.map} +1 -1
  71. package/dist/{dist-BGnpuTuc.cjs → dist-BSIIH4ft.cjs} +1431 -244
  72. package/dist/dist-BSIIH4ft.cjs.map +1 -0
  73. package/dist/{dist-DEUmH1sy.mjs → dist-Dfoa0fsU.mjs} +1361 -246
  74. package/dist/dist-Dfoa0fsU.mjs.map +1 -0
  75. package/dist/{du-572XNP42-CjV9eojc.cjs → du-572XNP42-DlYoI7xK.cjs} +2 -2
  76. package/dist/{du-572XNP42-CjV9eojc.cjs.map → du-572XNP42-DlYoI7xK.cjs.map} +1 -1
  77. package/dist/{du-572XNP42-BN--uF4D.mjs → du-572XNP42-dXgrmb6w.mjs} +2 -2
  78. package/dist/{du-572XNP42-BN--uF4D.mjs.map → du-572XNP42-dXgrmb6w.mjs.map} +1 -1
  79. package/dist/{env-36M5BO7M-DAa5KfBX.cjs → env-36M5BO7M-CiUSJDkN.cjs} +2 -2
  80. package/dist/{env-36M5BO7M-DAa5KfBX.cjs.map → env-36M5BO7M-CiUSJDkN.cjs.map} +1 -1
  81. package/dist/{env-36M5BO7M-D69jRYN4.mjs → env-36M5BO7M-D_IGqT9p.mjs} +2 -2
  82. package/dist/{env-36M5BO7M-D69jRYN4.mjs.map → env-36M5BO7M-D_IGqT9p.mjs.map} +1 -1
  83. package/dist/{expand-JSPG6VOP-COLerElO.mjs → expand-JSPG6VOP-CyEF3l9T.mjs} +2 -2
  84. package/dist/{expand-JSPG6VOP-COLerElO.mjs.map → expand-JSPG6VOP-CyEF3l9T.mjs.map} +1 -1
  85. package/dist/{expand-JSPG6VOP-C6vKMQyI.cjs → expand-JSPG6VOP-DI9tAEq8.cjs} +2 -2
  86. package/dist/{expand-JSPG6VOP-C6vKMQyI.cjs.map → expand-JSPG6VOP-DI9tAEq8.cjs.map} +1 -1
  87. package/dist/{expr-5JAACS4X-Bq-liRWE.mjs → expr-5JAACS4X-BjSLGpzH.mjs} +2 -2
  88. package/dist/{expr-5JAACS4X-Bq-liRWE.mjs.map → expr-5JAACS4X-BjSLGpzH.mjs.map} +1 -1
  89. package/dist/{expr-5JAACS4X-DwNhN5_2.cjs → expr-5JAACS4X-BtODvrh-.cjs} +2 -2
  90. package/dist/{expr-5JAACS4X-DwNhN5_2.cjs.map → expr-5JAACS4X-BtODvrh-.cjs.map} +1 -1
  91. package/dist/{find-INTH3OLC-CZJwhn7l.mjs → find-INTH3OLC-BcssH53Z.mjs} +3 -3
  92. package/dist/{find-INTH3OLC-CZJwhn7l.mjs.map → find-INTH3OLC-BcssH53Z.mjs.map} +1 -1
  93. package/dist/{find-INTH3OLC-CUamPw7X.cjs → find-INTH3OLC-CgU4UvVu.cjs} +3 -3
  94. package/dist/{find-INTH3OLC-CUamPw7X.cjs.map → find-INTH3OLC-CgU4UvVu.cjs.map} +1 -1
  95. package/dist/{fold-4TQNYMSW-Cu6mhoq6.cjs → fold-4TQNYMSW-C-vHdcsu.cjs} +2 -2
  96. package/dist/{fold-4TQNYMSW-Cu6mhoq6.cjs.map → fold-4TQNYMSW-C-vHdcsu.cjs.map} +1 -1
  97. package/dist/{fold-4TQNYMSW-GT1iyvMw.mjs → fold-4TQNYMSW-W2QBLbOw.mjs} +2 -2
  98. package/dist/{fold-4TQNYMSW-GT1iyvMw.mjs.map → fold-4TQNYMSW-W2QBLbOw.mjs.map} +1 -1
  99. package/dist/{grep-V3LQVMRQ-D2lsL0yl.cjs → grep-V3LQVMRQ-CFEy1H5w.cjs} +4 -4
  100. package/dist/{grep-V3LQVMRQ-D2lsL0yl.cjs.map → grep-V3LQVMRQ-CFEy1H5w.cjs.map} +1 -1
  101. package/dist/{grep-V3LQVMRQ-BZCEkiLT.mjs → grep-V3LQVMRQ-D2erCIt8.mjs} +4 -4
  102. package/dist/{grep-V3LQVMRQ-BZCEkiLT.mjs.map → grep-V3LQVMRQ-D2erCIt8.mjs.map} +1 -1
  103. package/dist/{gzip-O5ASJAFY-4WU25K8t.cjs → gzip-O5ASJAFY-BFMYd-hT.cjs} +2 -2
  104. package/dist/{gzip-O5ASJAFY-4WU25K8t.cjs.map → gzip-O5ASJAFY-BFMYd-hT.cjs.map} +1 -1
  105. package/dist/{gzip-O5ASJAFY-BRUoPm0T.mjs → gzip-O5ASJAFY-CqxUEEM2.mjs} +2 -2
  106. package/dist/{gzip-O5ASJAFY-BRUoPm0T.mjs.map → gzip-O5ASJAFY-CqxUEEM2.mjs.map} +1 -1
  107. package/dist/{head-442HYESI-BQswaDJF.mjs → head-442HYESI-BUT7-OAn.mjs} +2 -2
  108. package/dist/{head-442HYESI-BQswaDJF.mjs.map → head-442HYESI-BUT7-OAn.mjs.map} +1 -1
  109. package/dist/{head-442HYESI-CREwdwGh.cjs → head-442HYESI-Dl61xdxd.cjs} +2 -2
  110. package/dist/{head-442HYESI-CREwdwGh.cjs.map → head-442HYESI-Dl61xdxd.cjs.map} +1 -1
  111. package/dist/{help-HZ6M2CKN-CyQGg7tY.mjs → help-HZ6M2CKN-BNhOdIlA.mjs} +2 -2
  112. package/dist/{help-HZ6M2CKN-CyQGg7tY.mjs.map → help-HZ6M2CKN-BNhOdIlA.mjs.map} +1 -1
  113. package/dist/{help-HZ6M2CKN-Dm1xJuah.cjs → help-HZ6M2CKN-D58VQaUX.cjs} +2 -2
  114. package/dist/{help-HZ6M2CKN-Dm1xJuah.cjs.map → help-HZ6M2CKN-D58VQaUX.cjs.map} +1 -1
  115. package/dist/{html-to-markdown-JW4MSQZO-kxS6FqAo.cjs → html-to-markdown-JW4MSQZO-Cy2yEvwt.cjs} +3 -3
  116. package/dist/{html-to-markdown-JW4MSQZO-kxS6FqAo.cjs.map → html-to-markdown-JW4MSQZO-Cy2yEvwt.cjs.map} +1 -1
  117. package/dist/{html-to-markdown-JW4MSQZO-bFXHY2YJ.mjs → html-to-markdown-JW4MSQZO-D77ZtAkg.mjs} +3 -3
  118. package/dist/{html-to-markdown-JW4MSQZO-bFXHY2YJ.mjs.map → html-to-markdown-JW4MSQZO-D77ZtAkg.mjs.map} +1 -1
  119. package/dist/{join-TBRGI3LQ-D4bq1eah.cjs → join-TBRGI3LQ-CGvygkdd.cjs} +2 -2
  120. package/dist/{join-TBRGI3LQ-D4bq1eah.cjs.map → join-TBRGI3LQ-CGvygkdd.cjs.map} +1 -1
  121. package/dist/{join-TBRGI3LQ-mMKbGeyt.mjs → join-TBRGI3LQ-DX7NMuzt.mjs} +2 -2
  122. package/dist/{join-TBRGI3LQ-mMKbGeyt.mjs.map → join-TBRGI3LQ-DX7NMuzt.mjs.map} +1 -1
  123. package/dist/{jq-4XLYLOS5-BtVEt-iG.mjs → jq-4XLYLOS5-C58Dd7RS.mjs} +4 -4
  124. package/dist/{jq-4XLYLOS5-BtVEt-iG.mjs.map → jq-4XLYLOS5-C58Dd7RS.mjs.map} +1 -1
  125. package/dist/{jq-4XLYLOS5-1kPGLNfP.cjs → jq-4XLYLOS5-CcpoXWem.cjs} +4 -4
  126. package/dist/{jq-4XLYLOS5-1kPGLNfP.cjs.map → jq-4XLYLOS5-CcpoXWem.cjs.map} +1 -1
  127. package/dist/{js-exec-N5KEZBH7-BiJgLg8R.cjs → js-exec-N5KEZBH7-BfVFKq8I.cjs} +4 -4
  128. package/dist/{js-exec-N5KEZBH7-BiJgLg8R.cjs.map → js-exec-N5KEZBH7-BfVFKq8I.cjs.map} +1 -1
  129. package/dist/{js-exec-N5KEZBH7-yV-xrF3D.mjs → js-exec-N5KEZBH7-PxuNBAca.mjs} +3 -3
  130. package/dist/{js-exec-N5KEZBH7-yV-xrF3D.mjs.map → js-exec-N5KEZBH7-PxuNBAca.mjs.map} +1 -1
  131. package/dist/{lib-B8KKXVFM.mjs → lib-C3b113o2.mjs} +2 -2
  132. package/dist/{lib-B8KKXVFM.mjs.map → lib-C3b113o2.mjs.map} +1 -1
  133. package/dist/{lib-2PzUfcog.cjs → lib-CB6hGKB-.cjs} +2 -2
  134. package/dist/{lib-2PzUfcog.cjs.map → lib-CB6hGKB-.cjs.map} +1 -1
  135. package/dist/{ln-4LGSXXGD-Dn6vKThL.mjs → ln-4LGSXXGD-C8uxwN4w.mjs} +2 -2
  136. package/dist/{ln-4LGSXXGD-Dn6vKThL.mjs.map → ln-4LGSXXGD-C8uxwN4w.mjs.map} +1 -1
  137. package/dist/{ln-4LGSXXGD-BzwowxRB.cjs → ln-4LGSXXGD-D1ZvU7qg.cjs} +2 -2
  138. package/dist/{ln-4LGSXXGD-BzwowxRB.cjs.map → ln-4LGSXXGD-D1ZvU7qg.cjs.map} +1 -1
  139. package/dist/{ls-ZJGQER7M-CUJkuUh-.cjs → ls-ZJGQER7M-BIFh_LBI.cjs} +2 -2
  140. package/dist/{ls-ZJGQER7M-CUJkuUh-.cjs.map → ls-ZJGQER7M-BIFh_LBI.cjs.map} +1 -1
  141. package/dist/{ls-ZJGQER7M-BeJZta9T.mjs → ls-ZJGQER7M-VlE8NU2n.mjs} +2 -2
  142. package/dist/{ls-ZJGQER7M-BeJZta9T.mjs.map → ls-ZJGQER7M-VlE8NU2n.mjs.map} +1 -1
  143. package/dist/{lzma--dxpHlNq.cjs → lzma-BFhxhjwM.cjs} +3 -3
  144. package/dist/{lzma--dxpHlNq.cjs.map → lzma-BFhxhjwM.cjs.map} +1 -1
  145. package/dist/{md5sum-SPU24VSG-CSOni4rN.mjs → md5sum-SPU24VSG-D9FkR68Z.mjs} +3 -3
  146. package/dist/{md5sum-SPU24VSG-CSOni4rN.mjs.map → md5sum-SPU24VSG-D9FkR68Z.mjs.map} +1 -1
  147. package/dist/{md5sum-SPU24VSG-CbRWoiQV.cjs → md5sum-SPU24VSG-DeBwcDpn.cjs} +3 -3
  148. package/dist/{md5sum-SPU24VSG-CbRWoiQV.cjs.map → md5sum-SPU24VSG-DeBwcDpn.cjs.map} +1 -1
  149. package/dist/{mkdir-MEPGZOB6-DQZ1k-4g.cjs → mkdir-MEPGZOB6-CTaJw5WD.cjs} +2 -2
  150. package/dist/{mkdir-MEPGZOB6-DQZ1k-4g.cjs.map → mkdir-MEPGZOB6-CTaJw5WD.cjs.map} +1 -1
  151. package/dist/{mkdir-MEPGZOB6-X9vy2RCy.mjs → mkdir-MEPGZOB6-DKhEU_mo.mjs} +2 -2
  152. package/dist/{mkdir-MEPGZOB6-X9vy2RCy.mjs.map → mkdir-MEPGZOB6-DKhEU_mo.mjs.map} +1 -1
  153. package/dist/{mv-W5BIQ646-CoEt2Xu7.cjs → mv-W5BIQ646-04XTiLIP.cjs} +2 -2
  154. package/dist/{mv-W5BIQ646-CoEt2Xu7.cjs.map → mv-W5BIQ646-04XTiLIP.cjs.map} +1 -1
  155. package/dist/{mv-W5BIQ646-D6ALdw02.mjs → mv-W5BIQ646-wEz7EErl.mjs} +2 -2
  156. package/dist/{mv-W5BIQ646-D6ALdw02.mjs.map → mv-W5BIQ646-wEz7EErl.mjs.map} +1 -1
  157. package/dist/{nl-WSDW7I4O-DDQ244Zw.cjs → nl-WSDW7I4O-Bc1YFLf6.cjs} +2 -2
  158. package/dist/{nl-WSDW7I4O-DDQ244Zw.cjs.map → nl-WSDW7I4O-Bc1YFLf6.cjs.map} +1 -1
  159. package/dist/{nl-WSDW7I4O-DyeXenY-.mjs → nl-WSDW7I4O-BxQfwu-N.mjs} +2 -2
  160. package/dist/{nl-WSDW7I4O-DyeXenY-.mjs.map → nl-WSDW7I4O-BxQfwu-N.mjs.map} +1 -1
  161. package/dist/{od-WOKFDJTP--Dv5qEwr.cjs → od-WOKFDJTP-BMJoqBvk.cjs} +2 -2
  162. package/dist/{od-WOKFDJTP--Dv5qEwr.cjs.map → od-WOKFDJTP-BMJoqBvk.cjs.map} +1 -1
  163. package/dist/{od-WOKFDJTP-C4rrBoz_.mjs → od-WOKFDJTP-BMjM1Vpo.mjs} +2 -2
  164. package/dist/{od-WOKFDJTP-C4rrBoz_.mjs.map → od-WOKFDJTP-BMjM1Vpo.mjs.map} +1 -1
  165. package/dist/{paste-7JC6S4DX-Bji1Bpv0.mjs → paste-7JC6S4DX-BNyYBkM9.mjs} +2 -2
  166. package/dist/{paste-7JC6S4DX-Bji1Bpv0.mjs.map → paste-7JC6S4DX-BNyYBkM9.mjs.map} +1 -1
  167. package/dist/{paste-7JC6S4DX-B3VzuAt0.cjs → paste-7JC6S4DX-xeKsL7xT.cjs} +2 -2
  168. package/dist/{paste-7JC6S4DX-B3VzuAt0.cjs.map → paste-7JC6S4DX-xeKsL7xT.cjs.map} +1 -1
  169. package/dist/{printf-TWGXF445-BTeOHCJZ.cjs → printf-TWGXF445-DYS8xu0v.cjs} +3 -3
  170. package/dist/{printf-TWGXF445-BTeOHCJZ.cjs.map → printf-TWGXF445-DYS8xu0v.cjs.map} +1 -1
  171. package/dist/{printf-TWGXF445-BlhAZROi.mjs → printf-TWGXF445-XVD9Mxrm.mjs} +3 -3
  172. package/dist/{printf-TWGXF445-BlhAZROi.mjs.map → printf-TWGXF445-XVD9Mxrm.mjs.map} +1 -1
  173. package/dist/{python3-POMOR4OA-DG1ouNsU.cjs → python3-POMOR4OA-DYGxPjXO.cjs} +4 -4
  174. package/dist/{python3-POMOR4OA-DG1ouNsU.cjs.map → python3-POMOR4OA-DYGxPjXO.cjs.map} +1 -1
  175. package/dist/{python3-POMOR4OA-DR8mqMXh.mjs → python3-POMOR4OA-Dnqvkl59.mjs} +3 -3
  176. package/dist/{python3-POMOR4OA-DR8mqMXh.mjs.map → python3-POMOR4OA-Dnqvkl59.mjs.map} +1 -1
  177. package/dist/{rev-5EHFX4EJ-CI_VGXqm.mjs → rev-5EHFX4EJ-DhVvFoTy.mjs} +2 -2
  178. package/dist/{rev-5EHFX4EJ-CI_VGXqm.mjs.map → rev-5EHFX4EJ-DhVvFoTy.mjs.map} +1 -1
  179. package/dist/{rev-5EHFX4EJ-CTqxt9T2.cjs → rev-5EHFX4EJ-pW6JW5qN.cjs} +2 -2
  180. package/dist/{rev-5EHFX4EJ-CTqxt9T2.cjs.map → rev-5EHFX4EJ-pW6JW5qN.cjs.map} +1 -1
  181. package/dist/{rg-S4FXYXWB-BxiM0Km5.cjs → rg-S4FXYXWB-C73Aq2Xr.cjs} +3 -3
  182. package/dist/{rg-S4FXYXWB-BxiM0Km5.cjs.map → rg-S4FXYXWB-C73Aq2Xr.cjs.map} +1 -1
  183. package/dist/{rg-S4FXYXWB-BV530Cw5.mjs → rg-S4FXYXWB-z2oeRO1P.mjs} +3 -3
  184. package/dist/{rg-S4FXYXWB-BV530Cw5.mjs.map → rg-S4FXYXWB-z2oeRO1P.mjs.map} +1 -1
  185. package/dist/{rm-SSGETQVQ-BZ_Vwtjq.cjs → rm-SSGETQVQ-CHrR_Tku.cjs} +2 -2
  186. package/dist/{rm-SSGETQVQ-BZ_Vwtjq.cjs.map → rm-SSGETQVQ-CHrR_Tku.cjs.map} +1 -1
  187. package/dist/{rm-SSGETQVQ-0mxnhARQ.mjs → rm-SSGETQVQ-Jci5Ip6D.mjs} +2 -2
  188. package/dist/{rm-SSGETQVQ-0mxnhARQ.mjs.map → rm-SSGETQVQ-Jci5Ip6D.mjs.map} +1 -1
  189. package/dist/{rmdir-OC4ZLPYA-DSmolqBX.cjs → rmdir-OC4ZLPYA-C9GToyPE.cjs} +2 -2
  190. package/dist/{rmdir-OC4ZLPYA-DSmolqBX.cjs.map → rmdir-OC4ZLPYA-C9GToyPE.cjs.map} +1 -1
  191. package/dist/{rmdir-OC4ZLPYA-B91oqgzk.mjs → rmdir-OC4ZLPYA-CbUJDjKj.mjs} +2 -2
  192. package/dist/{rmdir-OC4ZLPYA-B91oqgzk.mjs.map → rmdir-OC4ZLPYA-CbUJDjKj.mjs.map} +1 -1
  193. package/dist/run.cjs +1 -1
  194. package/dist/run.mjs +1 -1
  195. package/dist/{sed-S5UIK574-CUHVLRCU.cjs → sed-S5UIK574-CKdzn0sh.cjs} +2 -2
  196. package/dist/{sed-S5UIK574-CUHVLRCU.cjs.map → sed-S5UIK574-CKdzn0sh.cjs.map} +1 -1
  197. package/dist/{sed-S5UIK574-Bn1VT3VJ.mjs → sed-S5UIK574-DMSLNP6f.mjs} +2 -2
  198. package/dist/{sed-S5UIK574-Bn1VT3VJ.mjs.map → sed-S5UIK574-DMSLNP6f.mjs.map} +1 -1
  199. package/dist/{sha1sum-2PTOAFR6-DL_UeFqk.mjs → sha1sum-2PTOAFR6-BvcG60rc.mjs} +3 -3
  200. package/dist/{sha1sum-2PTOAFR6-DL_UeFqk.mjs.map → sha1sum-2PTOAFR6-BvcG60rc.mjs.map} +1 -1
  201. package/dist/{sha1sum-2PTOAFR6-DqcsWk6l.cjs → sha1sum-2PTOAFR6-D-6ahlIg.cjs} +3 -3
  202. package/dist/{sha1sum-2PTOAFR6-DqcsWk6l.cjs.map → sha1sum-2PTOAFR6-D-6ahlIg.cjs.map} +1 -1
  203. package/dist/{sha256sum-NS7D3IXX-CmnB6TL1.mjs → sha256sum-NS7D3IXX-DVH9Rp51.mjs} +3 -3
  204. package/dist/{sha256sum-NS7D3IXX-CmnB6TL1.mjs.map → sha256sum-NS7D3IXX-DVH9Rp51.mjs.map} +1 -1
  205. package/dist/{sha256sum-NS7D3IXX-DzpZonik.cjs → sha256sum-NS7D3IXX-Drwo830V.cjs} +3 -3
  206. package/dist/{sha256sum-NS7D3IXX-DzpZonik.cjs.map → sha256sum-NS7D3IXX-Drwo830V.cjs.map} +1 -1
  207. package/dist/{sleep-X22JJINO-CbNXwoha.mjs → sleep-X22JJINO-B-F8EJ1A.mjs} +2 -2
  208. package/dist/{sleep-X22JJINO-CbNXwoha.mjs.map → sleep-X22JJINO-B-F8EJ1A.mjs.map} +1 -1
  209. package/dist/{sleep-X22JJINO-DFFy9Bw9.cjs → sleep-X22JJINO-VzGR_aAP.cjs} +2 -2
  210. package/dist/{sleep-X22JJINO-DFFy9Bw9.cjs.map → sleep-X22JJINO-VzGR_aAP.cjs.map} +1 -1
  211. package/dist/{sort-SW2YEO5B-BYbDNrah.mjs → sort-SW2YEO5B-BlCI4ke5.mjs} +3 -3
  212. package/dist/{sort-SW2YEO5B-BYbDNrah.mjs.map → sort-SW2YEO5B-BlCI4ke5.mjs.map} +1 -1
  213. package/dist/{sort-SW2YEO5B-gdNgTdnH.cjs → sort-SW2YEO5B-oXMaUVfX.cjs} +3 -3
  214. package/dist/{sort-SW2YEO5B-gdNgTdnH.cjs.map → sort-SW2YEO5B-oXMaUVfX.cjs.map} +1 -1
  215. package/dist/{split-4KKZZXXE-DaVNgVyU.mjs → split-4KKZZXXE-DInsLVFn.mjs} +2 -2
  216. package/dist/{split-4KKZZXXE-DaVNgVyU.mjs.map → split-4KKZZXXE-DInsLVFn.mjs.map} +1 -1
  217. package/dist/{split-4KKZZXXE-BQei9Yb7.cjs → split-4KKZZXXE-uNycTBLx.cjs} +2 -2
  218. package/dist/{split-4KKZZXXE-BQei9Yb7.cjs.map → split-4KKZZXXE-uNycTBLx.cjs.map} +1 -1
  219. package/dist/{sqlite3-CGOEFJAO-Did6BRU0.cjs → sqlite3-CGOEFJAO-DLGaPKmF.cjs} +4 -4
  220. package/dist/{sqlite3-CGOEFJAO-Did6BRU0.cjs.map → sqlite3-CGOEFJAO-DLGaPKmF.cjs.map} +1 -1
  221. package/dist/{sqlite3-CGOEFJAO-DWuK8T1P.mjs → sqlite3-CGOEFJAO-DdQnH7sK.mjs} +3 -3
  222. package/dist/{sqlite3-CGOEFJAO-DWuK8T1P.mjs.map → sqlite3-CGOEFJAO-DdQnH7sK.mjs.map} +1 -1
  223. package/dist/{start-BXs2tRMp.cjs → start-B-r5AcHg.cjs} +1109 -129
  224. package/dist/start-B-r5AcHg.cjs.map +1 -0
  225. package/dist/{start-Bkcu3Xyf.mjs → start-BopA4OXE.mjs} +1109 -129
  226. package/dist/start-BopA4OXE.mjs.map +1 -0
  227. package/dist/start.cjs +1 -1
  228. package/dist/start.d.cts +1 -1
  229. package/dist/start.d.mts +1 -1
  230. package/dist/start.mjs +1 -1
  231. package/dist/{strings-6WDHLGMX-DghW6u1V.mjs → strings-6WDHLGMX-CQhR5NWI.mjs} +2 -2
  232. package/dist/{strings-6WDHLGMX-DghW6u1V.mjs.map → strings-6WDHLGMX-CQhR5NWI.mjs.map} +1 -1
  233. package/dist/{strings-6WDHLGMX-BYLV5mVI.cjs → strings-6WDHLGMX-CgNUl2be.cjs} +2 -2
  234. package/dist/{strings-6WDHLGMX-BYLV5mVI.cjs.map → strings-6WDHLGMX-CgNUl2be.cjs.map} +1 -1
  235. package/dist/{tac-2STMMJYW-dyBrgE3g.mjs → tac-2STMMJYW-DPVvOOFh.mjs} +2 -2
  236. package/dist/{tac-2STMMJYW-dyBrgE3g.mjs.map → tac-2STMMJYW-DPVvOOFh.mjs.map} +1 -1
  237. package/dist/{tac-2STMMJYW-BUj2w_ls.cjs → tac-2STMMJYW-XOnEZ_Pa.cjs} +2 -2
  238. package/dist/{tac-2STMMJYW-BUj2w_ls.cjs.map → tac-2STMMJYW-XOnEZ_Pa.cjs.map} +1 -1
  239. package/dist/{tail-R4PCA2C4-Cb1qzi12.cjs → tail-R4PCA2C4-BPlLX9IB.cjs} +2 -2
  240. package/dist/{tail-R4PCA2C4-Cb1qzi12.cjs.map → tail-R4PCA2C4-BPlLX9IB.cjs.map} +1 -1
  241. package/dist/{tail-R4PCA2C4-BYcpWm-i.mjs → tail-R4PCA2C4-BXsd_oGy.mjs} +2 -2
  242. package/dist/{tail-R4PCA2C4-BYcpWm-i.mjs.map → tail-R4PCA2C4-BXsd_oGy.mjs.map} +1 -1
  243. package/dist/{tar-STHHZTZ6-y56eAWkM.cjs → tar-STHHZTZ6-BSs3Wex8.cjs} +5 -5
  244. package/dist/{tar-STHHZTZ6-y56eAWkM.cjs.map → tar-STHHZTZ6-BSs3Wex8.cjs.map} +1 -1
  245. package/dist/{tar-STHHZTZ6-FTWsSEpr.mjs → tar-STHHZTZ6-DTf5Ifnn.mjs} +4 -4
  246. package/dist/{tar-STHHZTZ6-FTWsSEpr.mjs.map → tar-STHHZTZ6-DTf5Ifnn.mjs.map} +1 -1
  247. package/dist/{tee-YUZ2FKCJ-oYjZsafd.cjs → tee-YUZ2FKCJ-DgWILkVl.cjs} +2 -2
  248. package/dist/{tee-YUZ2FKCJ-oYjZsafd.cjs.map → tee-YUZ2FKCJ-DgWILkVl.cjs.map} +1 -1
  249. package/dist/{tee-YUZ2FKCJ-DArfnCcS.mjs → tee-YUZ2FKCJ-HOwDepoa.mjs} +2 -2
  250. package/dist/{tee-YUZ2FKCJ-DArfnCcS.mjs.map → tee-YUZ2FKCJ-HOwDepoa.mjs.map} +1 -1
  251. package/dist/{time-D4LNBSWX-BTetD0sZ.cjs → time-D4LNBSWX-Czgb4a8J.cjs} +2 -2
  252. package/dist/{time-D4LNBSWX-BTetD0sZ.cjs.map → time-D4LNBSWX-Czgb4a8J.cjs.map} +1 -1
  253. package/dist/{time-D4LNBSWX-D0AgPrVU.mjs → time-D4LNBSWX-DShdsFLL.mjs} +2 -2
  254. package/dist/{time-D4LNBSWX-D0AgPrVU.mjs.map → time-D4LNBSWX-DShdsFLL.mjs.map} +1 -1
  255. package/dist/{timeout-YDCRSLPQ-m0hOl9RU.mjs → timeout-YDCRSLPQ-CrDWh7NY.mjs} +2 -2
  256. package/dist/{timeout-YDCRSLPQ-m0hOl9RU.mjs.map → timeout-YDCRSLPQ-CrDWh7NY.mjs.map} +1 -1
  257. package/dist/{timeout-YDCRSLPQ-D_NEhBtI.cjs → timeout-YDCRSLPQ-fyDe4rrM.cjs} +2 -2
  258. package/dist/{timeout-YDCRSLPQ-D_NEhBtI.cjs.map → timeout-YDCRSLPQ-fyDe4rrM.cjs.map} +1 -1
  259. package/dist/{touch-UA33VN3N-D-0iV3bm.mjs → touch-UA33VN3N-D8fHlx6X.mjs} +2 -2
  260. package/dist/{touch-UA33VN3N-D-0iV3bm.mjs.map → touch-UA33VN3N-D8fHlx6X.mjs.map} +1 -1
  261. package/dist/{touch-UA33VN3N-C3gdLoXZ.cjs → touch-UA33VN3N-QQeRWr4H.cjs} +2 -2
  262. package/dist/{touch-UA33VN3N-C3gdLoXZ.cjs.map → touch-UA33VN3N-QQeRWr4H.cjs.map} +1 -1
  263. package/dist/{tr-36LHWFRQ-DgJzlhNw.cjs → tr-36LHWFRQ-BvZgWBI7.cjs} +2 -2
  264. package/dist/{tr-36LHWFRQ-DgJzlhNw.cjs.map → tr-36LHWFRQ-BvZgWBI7.cjs.map} +1 -1
  265. package/dist/{tr-36LHWFRQ-DSKHB_Nc.mjs → tr-36LHWFRQ-DkmoHg-J.mjs} +2 -2
  266. package/dist/{tr-36LHWFRQ-DSKHB_Nc.mjs.map → tr-36LHWFRQ-DkmoHg-J.mjs.map} +1 -1
  267. package/dist/{tree-YLD52CNT-io_fc43x.cjs → tree-YLD52CNT-D28PbXCj.cjs} +2 -2
  268. package/dist/{tree-YLD52CNT-io_fc43x.cjs.map → tree-YLD52CNT-D28PbXCj.cjs.map} +1 -1
  269. package/dist/{tree-YLD52CNT-BWhZ09Ar.mjs → tree-YLD52CNT-xjlCOZ0t.mjs} +2 -2
  270. package/dist/{tree-YLD52CNT-BWhZ09Ar.mjs.map → tree-YLD52CNT-xjlCOZ0t.mjs.map} +1 -1
  271. package/dist/{unexpand-CADSA4VO-CAimwjsv.mjs → unexpand-CADSA4VO-Bhs2BUQ5.mjs} +2 -2
  272. package/dist/{unexpand-CADSA4VO-CAimwjsv.mjs.map → unexpand-CADSA4VO-Bhs2BUQ5.mjs.map} +1 -1
  273. package/dist/{unexpand-CADSA4VO-zLmcC151.cjs → unexpand-CADSA4VO-Ct-tDYst.cjs} +2 -2
  274. package/dist/{unexpand-CADSA4VO-zLmcC151.cjs.map → unexpand-CADSA4VO-Ct-tDYst.cjs.map} +1 -1
  275. package/dist/{uniq-XSIZR6PB-ZZpwZg0c.cjs → uniq-XSIZR6PB-4d0zRoTa.cjs} +3 -3
  276. package/dist/{uniq-XSIZR6PB-ZZpwZg0c.cjs.map → uniq-XSIZR6PB-4d0zRoTa.cjs.map} +1 -1
  277. package/dist/{uniq-XSIZR6PB-CWAKZmGl.mjs → uniq-XSIZR6PB-B5Bk1TsC.mjs} +3 -3
  278. package/dist/{uniq-XSIZR6PB-CWAKZmGl.mjs.map → uniq-XSIZR6PB-B5Bk1TsC.mjs.map} +1 -1
  279. package/dist/{wc-LF7NU4LA-DhNBsFLd.mjs → wc-LF7NU4LA-B3_zHGUI.mjs} +3 -3
  280. package/dist/{wc-LF7NU4LA-DhNBsFLd.mjs.map → wc-LF7NU4LA-B3_zHGUI.mjs.map} +1 -1
  281. package/dist/{wc-LF7NU4LA-C4FhC6BH.cjs → wc-LF7NU4LA-D8KKcjuc.cjs} +3 -3
  282. package/dist/{wc-LF7NU4LA-C4FhC6BH.cjs.map → wc-LF7NU4LA-D8KKcjuc.cjs.map} +1 -1
  283. package/dist/{xan-Y6WF3IRG-DN7DU1ab.mjs → xan-Y6WF3IRG-9KChSctb.mjs} +6 -6
  284. package/dist/{xan-Y6WF3IRG-DN7DU1ab.mjs.map → xan-Y6WF3IRG-9KChSctb.mjs.map} +1 -1
  285. package/dist/{xan-Y6WF3IRG-BU79SNfn.cjs → xan-Y6WF3IRG-DlMObnyI.cjs} +6 -6
  286. package/dist/{xan-Y6WF3IRG-BU79SNfn.cjs.map → xan-Y6WF3IRG-DlMObnyI.cjs.map} +1 -1
  287. package/dist/{xan-view-HDVKHFC2-DqGQzO2o.mjs → xan-view-HDVKHFC2-CuXxKOL_.mjs} +3 -3
  288. package/dist/{xan-view-HDVKHFC2-DqGQzO2o.mjs.map → xan-view-HDVKHFC2-CuXxKOL_.mjs.map} +1 -1
  289. package/dist/{xan-view-HDVKHFC2-Dew1rWvx.cjs → xan-view-HDVKHFC2-D4UaWbCt.cjs} +3 -3
  290. package/dist/{xan-view-HDVKHFC2-Dew1rWvx.cjs.map → xan-view-HDVKHFC2-D4UaWbCt.cjs.map} +1 -1
  291. package/dist/{xargs-MGZPH7AX-BH-SyQsU.mjs → xargs-MGZPH7AX-BdScic0s.mjs} +2 -2
  292. package/dist/{xargs-MGZPH7AX-BH-SyQsU.mjs.map → xargs-MGZPH7AX-BdScic0s.mjs.map} +1 -1
  293. package/dist/{xargs-MGZPH7AX-BS-zAwl9.cjs → xargs-MGZPH7AX-DY0UyJRW.cjs} +2 -2
  294. package/dist/{xargs-MGZPH7AX-BS-zAwl9.cjs.map → xargs-MGZPH7AX-DY0UyJRW.cjs.map} +1 -1
  295. package/dist/{yq-4QJW3EQG-CY_mBr2e.mjs → yq-4QJW3EQG-BvkjygaH.mjs} +3 -3
  296. package/dist/{yq-4QJW3EQG-CY_mBr2e.mjs.map → yq-4QJW3EQG-BvkjygaH.mjs.map} +1 -1
  297. package/dist/{yq-4QJW3EQG-B_e-AoZW.cjs → yq-4QJW3EQG-CF1OM3GO.cjs} +3 -3
  298. package/dist/{yq-4QJW3EQG-B_e-AoZW.cjs.map → yq-4QJW3EQG-CF1OM3GO.cjs.map} +1 -1
  299. package/package.json +4 -4
  300. package/dist/dist-BGnpuTuc.cjs.map +0 -1
  301. package/dist/dist-DEUmH1sy.mjs.map +0 -1
  302. package/dist/start-BXs2tRMp.cjs.map +0 -1
  303. package/dist/start-Bkcu3Xyf.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from "node:module";
2
2
  import Docker from "dockerode";
3
3
  import { mkdir } from "node:fs/promises";
4
- import { DEFAULT_DATABASE_URL, claimDueTriggers, claimDueTriggersForOrg, claimNextJob, clearCredentialInstanceDefaults, createPostgresCancelChannel, decryptCredentialPayload, disableAllTriggerSchedules, disableTriggerSchedulesNotInSlugs, encryptCredentialPayload, enqueueJob, ensureOAuthCredentialInstance, failWorkflowRun, getProjectScopeId, inferDialect, listEnabledScheduledTriggers, listExecutableAttachmentsByTriggerIds, markJobComplete, markJobFailed, requeueExpiredLeases, resolvePostgresUrlFromEnv, resolveProjectDatabaseUrlFromEnv, scheduleJobRetry, selectActiveEphemeralScheduledTriggerSlugs, selectCredentialInstancesForScope, selectTriggerBySlug, setTriggerScheduleEnabled, upsertCredentialInstance, upsertTriggerScheduleFields } from "@keystrokehq/database";
4
+ import { DEFAULT_DATABASE_URL, claimDueTriggers, claimDueTriggersForOrg, claimNextJob, clearCredentialInstanceDefaults, createPostgresCancelChannel, decryptCredentialPayload, disableAllTriggerSchedules, disableTriggerSchedulesNotInSlugs, encryptCredentialPayload, enqueueJob, ensureOAuthCredentialInstance, failWorkflowRun, getProjectScopeId, getServerTenantScopeId, inferDialect, isDatabaseInitialized, listCredentialAssignmentsByTarget, listEnabledScheduledTriggers, listExecutableAttachmentsByTriggerIds, markJobComplete, markJobFailed, requeueExpiredLeases, resolvePostgresUrlFromEnv, resolveProjectDatabaseUrlFromEnv, scheduleJobRetry, selectActiveEphemeralScheduledTriggerSlugs, selectCredentialInstanceById, selectCredentialInstancesForScope, selectTriggerBySlug, setTriggerScheduleEnabled, upsertCredentialInstance, upsertTriggerScheduleFields } from "@keystrokehq/database";
5
5
  import EventEmitter$1, { EventEmitter } from "node:events";
6
6
  import { z } from "zod";
7
7
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -179,7 +179,7 @@ function slugify(input) {
179
179
  return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
180
180
  }
181
181
  const captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {};
182
- function isObject(data) {
182
+ function isObject$3(data) {
183
183
  return typeof data === "object" && data !== null && !Array.isArray(data);
184
184
  }
185
185
  const allowsEval = /* @__PURE__ */ cached(() => {
@@ -193,12 +193,12 @@ const allowsEval = /* @__PURE__ */ cached(() => {
193
193
  }
194
194
  });
195
195
  function isPlainObject$1(o) {
196
- if (isObject(o) === false) return false;
196
+ if (isObject$3(o) === false) return false;
197
197
  const ctor = o.constructor;
198
198
  if (ctor === void 0) return true;
199
199
  if (typeof ctor !== "function") return true;
200
200
  const prot = ctor.prototype;
201
- if (isObject(prot) === false) return false;
201
+ if (isObject$3(prot) === false) return false;
202
202
  if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) return false;
203
203
  return true;
204
204
  }
@@ -1586,7 +1586,7 @@ const $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
1586
1586
  }
1587
1587
  return propValues;
1588
1588
  });
1589
- const isObject$1 = isObject;
1589
+ const isObject$1 = isObject$3;
1590
1590
  const catchall = def.catchall;
1591
1591
  let value;
1592
1592
  inst._zod.parse = (payload, ctx) => {
@@ -1715,7 +1715,7 @@ const $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def)
1715
1715
  return (payload, ctx) => fn(shape, payload, ctx);
1716
1716
  };
1717
1717
  let fastpass;
1718
- const isObject$2 = isObject;
1718
+ const isObject$2 = isObject$3;
1719
1719
  const jit = !globalConfig.jitless;
1720
1720
  const fastEnabled = jit && allowsEval.value;
1721
1721
  const catchall = def.catchall;
@@ -1827,7 +1827,7 @@ const $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUn
1827
1827
  });
1828
1828
  inst._zod.parse = (payload, ctx) => {
1829
1829
  const input = payload.value;
1830
- if (!isObject(input)) {
1830
+ if (!isObject$3(input)) {
1831
1831
  payload.issues.push({
1832
1832
  code: "invalid_type",
1833
1833
  expected: "object",
@@ -2298,6 +2298,21 @@ function handleReadonlyResult(payload) {
2298
2298
  payload.value = Object.freeze(payload.value);
2299
2299
  return payload;
2300
2300
  }
2301
+ const $ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => {
2302
+ $ZodType.init(inst, def);
2303
+ defineLazy(inst._zod, "innerType", () => {
2304
+ const d = def;
2305
+ if (!d._cachedInner) d._cachedInner = def.getter();
2306
+ return d._cachedInner;
2307
+ });
2308
+ defineLazy(inst._zod, "pattern", () => inst._zod.innerType?._zod?.pattern);
2309
+ defineLazy(inst._zod, "propValues", () => inst._zod.innerType?._zod?.propValues);
2310
+ defineLazy(inst._zod, "optin", () => inst._zod.innerType?._zod?.optin ?? void 0);
2311
+ defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? void 0);
2312
+ inst._zod.parse = (payload, ctx) => {
2313
+ return inst._zod.innerType._zod.run(payload, ctx);
2314
+ };
2315
+ });
2301
2316
  const $ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => {
2302
2317
  $ZodCheck.init(inst, def);
2303
2318
  $ZodType.init(inst, def);
@@ -3432,6 +3447,12 @@ const optionalProcessor = (schema, ctx, _json, params) => {
3432
3447
  const seen = ctx.seen.get(schema);
3433
3448
  seen.ref = def.innerType;
3434
3449
  };
3450
+ const lazyProcessor = (schema, ctx, _json, params) => {
3451
+ const innerType = schema._zod.innerType;
3452
+ process$1(innerType, ctx, params);
3453
+ const seen = ctx.seen.get(schema);
3454
+ seen.ref = innerType;
3455
+ };
3435
3456
  const ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => {
3436
3457
  $ZodISODateTime.init(inst, def);
3437
3458
  ZodStringFormat.init(inst, def);
@@ -4287,6 +4308,18 @@ function readonly(innerType) {
4287
4308
  innerType
4288
4309
  });
4289
4310
  }
4311
+ const ZodLazy = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => {
4312
+ $ZodLazy.init(inst, def);
4313
+ ZodType.init(inst, def);
4314
+ inst._zod.processJSONSchema = (ctx, json, params) => lazyProcessor(inst, ctx, json, params);
4315
+ inst.unwrap = () => inst._zod.def.getter();
4316
+ });
4317
+ function lazy(getter) {
4318
+ return new ZodLazy({
4319
+ type: "lazy",
4320
+ getter
4321
+ });
4322
+ }
4290
4323
  const ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => {
4291
4324
  $ZodCustom.init(inst, def);
4292
4325
  ZodType.init(inst, def);
@@ -4958,10 +4991,244 @@ const AppSlugSchema$1 = ProjectSlugSchema$1;
4958
4991
  function resolveExplicitPublicPlatformOrigin$1(env = process.env) {
4959
4992
  return env.PUBLIC_PLATFORM_URL?.replace(/\/$/, "") || void 0;
4960
4993
  }
4994
+ /** How a credential instance is stored (`credential_instances.auth_kind`). */
4995
+ const CredentialAuthKindSchema$1 = _enum([
4996
+ "api_key",
4997
+ "oauth_managed",
4998
+ "keystroke"
4999
+ ]);
5000
+ /**
5001
+ * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
5002
+ * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
5003
+ * resolver tries the project default, then the org default, then throws.
5004
+ */
5005
+ const CredentialScopeTypeSchema$1 = _enum([
5006
+ "organization",
5007
+ "project",
5008
+ "user"
5009
+ ]);
5010
+ CredentialAuthKindSchema$1.options;
5011
+ CredentialScopeTypeSchema$1.options;
5012
+ /** Non-empty human-readable label or description (trimmed). */
5013
+ const requiredDisplayTextSchema$1 = string().trim().min(1);
5014
+ /**
5015
+ * Structural workflow-canvas graph contract.
5016
+ *
5017
+ * This is the deterministic skeleton the deploy-time AST producer emits for a
5018
+ * workflow (nodes + edges), plus the manifest-derived trigger-source nodes. It
5019
+ * is the single source of truth shared by:
5020
+ * - the AST producer (emits it at deploy, stored with the manifest),
5021
+ * - the platform route that serves the canvas, and
5022
+ * - the SDK / web client that renders it (React Flow).
5023
+ *
5024
+ * Only the structural skeleton lives here. The LLM enrichment + run-overlay
5025
+ * envelope types live in `workflow-canvas-envelope.ts`; the SDK re-exports them.
5026
+ * See WORKFLOW.md (§4 grammar, §8 node ids, §9 caching).
5027
+ */
5028
+ /**
5029
+ * Canvas node taxonomy — the single discriminator for every canvas node. The
5030
+ * client derives the React Flow component, icon, and per-node treatment from it
5031
+ * (no parallel `type` / `data.kind` fields), and the producer + fixtures emit it
5032
+ * directly, so the structural contract can never silently diverge across the
5033
+ * deploy → render boundary.
5034
+ * - Boundaries: `entry` (Start, owns input) · `exit` (Output, owns output) ·
5035
+ * `error` (a terminal `throw` — an error output that ends the run on a branch)
5036
+ * - Callable: `step` (action / agent / llm / hook / child-workflow invocation) —
5037
+ * the invocation flavor lives in {@link WorkflowCanvasCallKind}
5038
+ * - Structural control flow: `code-block` · `decision` · `merge` · `loop` ·
5039
+ * `parallel` (group containers) · `loop-start` (the group body's entry marker,
5040
+ * shared by loop + parallel)
5041
+ * - Upstream of entry: `trigger-source` (one per manifest trigger attachment)
5042
+ *
5043
+ * `Promise.all([...])` is modeled as a `parallel` group container: the branches
5044
+ * are stacked inside and the container itself is the single prong leaving the
5045
+ * wrapper (there is no separate fork/join pair).
5046
+ *
5047
+ * `exit` and `error` are both terminals: a `return` flows to the shared `exit`
5048
+ * (the workflow output), while a `throw` gets its own `error` terminal off the
5049
+ * branch so guard clauses (`if (bad) throw …`) read as a visible dead-end.
5050
+ */
5051
+ const WorkflowCanvasNodeTypeSchema$1 = _enum([
5052
+ "entry",
5053
+ "exit",
5054
+ "error",
5055
+ "step",
5056
+ "code-block",
5057
+ "decision",
5058
+ "merge",
5059
+ "loop",
5060
+ "parallel",
5061
+ "loop-start",
5062
+ "trigger-source"
5063
+ ]);
5064
+ _enum([
5065
+ "workflow-step",
5066
+ "agent",
5067
+ "llm",
5068
+ "wait",
5069
+ "hook",
5070
+ "tool",
5071
+ "child-workflow"
5072
+ ]);
5073
+ /** A labeled branch output on a decision-style node. */
5074
+ const WorkflowCanvasNodeOutputSchema$1 = object({
5075
+ id: string(),
5076
+ label: string()
5077
+ });
5078
+ /**
5079
+ * A step input's configured value at its call site, captured deterministically
5080
+ * by the producer from the call's argument object. The platform join turns this
5081
+ * into the inspector's {@link WorkflowNodeInputBinding} (filling display labels).
5082
+ */
5083
+ const WorkflowCanvasRawBindingSchema$1 = object({
5084
+ tokens: array(discriminatedUnion("kind", [
5085
+ object({
5086
+ kind: literal("text"),
5087
+ text: string()
5088
+ }),
5089
+ object({
5090
+ kind: literal("reference"),
5091
+ /** Upstream node id this value flows from; absent only for unresolved refs. */
5092
+ sourceNodeId: string().optional(),
5093
+ /** Output field of the source (dotted path); omitted = the whole output. */
5094
+ field: string().optional()
5095
+ }),
5096
+ object({
5097
+ kind: literal("variable"),
5098
+ text: string()
5099
+ }),
5100
+ object({
5101
+ kind: literal("call"),
5102
+ name: string()
5103
+ })
5104
+ ])),
5105
+ /** Render as a tall multi-line box (object/array/multiline template values). */
5106
+ multiline: boolean().optional()
5107
+ });
5108
+ /**
5109
+ * Statically-captured `promptLlm` options for an `llm` step node. Literal-only:
5110
+ * dynamic/expression values (a computed model, a `system` built by a function) are
5111
+ * not captured; `system`/`outputSchema` record presence so the inspector can note
5112
+ * "a system prompt is configured" / "structured output" without their values.
5113
+ */
5114
+ const WorkflowCanvasLlmOptionsSchema$1 = object({
5115
+ model: string().optional(),
5116
+ maxTokens: number$1().optional(),
5117
+ temperature: number$1().optional(),
5118
+ thinkingLevel: string().optional(),
5119
+ hasSystemPrompt: boolean().optional(),
5120
+ hasOutputSchema: boolean().optional()
5121
+ });
5122
+ const WorkflowCanvasNodeDataSchema$1 = object({
5123
+ label: string(),
5124
+ /** Set on group nodes (loop / parallel section containers). */
5125
+ groupKind: _enum([
5126
+ "loop",
5127
+ "parallel",
5128
+ "conditional"
5129
+ ]).optional(),
5130
+ description: string().optional(),
5131
+ /** {@link WorkflowCanvasCallKind} or a looser raw call-site label. */
5132
+ callKind: string().optional(),
5133
+ /**
5134
+ * App/integration slug for a `step` whose action/agent is imported directly
5135
+ * from a `@keystrokehq/<app>` package (e.g. "slack", "apollo"). Lets the client
5136
+ * badge the node with that app's logo; absent for custom (project-local)
5137
+ * actions, which fall back to the call-kind icon.
5138
+ */
5139
+ appSlug: string().optional(),
5140
+ /** Cron/webhook/poll discriminator on trigger-source nodes. */
5141
+ triggerType: string().optional(),
5142
+ /** Branch outputs (decision nodes). */
5143
+ outputs: array(WorkflowCanvasNodeOutputSchema$1).optional(),
5144
+ /**
5145
+ * Action/agent/workflow slug resolved at deploy time (via import → definition).
5146
+ * Optional when the deploy build cannot resolve source (dist-only artifacts).
5147
+ */
5148
+ slug: string().optional(),
5149
+ /**
5150
+ * Durable call-site ids nested inside an off-grammar `code-block` (same-file only).
5151
+ * Used by the run overlay to light the block when any contained step executes.
5152
+ */
5153
+ containedCallSiteIds: array(string()).optional(),
5154
+ /**
5155
+ * Per-input call-site value bindings for `step` nodes, keyed by input field name.
5156
+ * Deterministically captured from the call's argument object; reference tokens point
5157
+ * at the upstream node that produced the value. The platform join fills display labels.
5158
+ */
5159
+ inputBindings: record(string(), WorkflowCanvasRawBindingSchema$1).optional(),
5160
+ /**
5161
+ * Static `promptLlm(prompt, options)` configuration captured at the call site for
5162
+ * `llm` step nodes. Only literal values are captured (model/maxTokens/temperature/
5163
+ * thinkingLevel); `system`/`outputSchema` are usually expressions, so only their
5164
+ * presence is recorded. Absent when no options are statically resolvable.
5165
+ */
5166
+ llmOptions: WorkflowCanvasLlmOptionsSchema$1.optional()
5167
+ });
5168
+ /**
5169
+ * A single structural node. This is the deploy artifact's shape: identity
5170
+ * (`id`), the canonical discriminator (`nodeType`), display `data`, and group
5171
+ * nesting (`parentId`). All layout/rendering — React Flow component key,
5172
+ * positions, sizes, `extent`, group box dimensions — is derived entirely
5173
+ * client-side from this structure, so it never leaks into the wire contract.
5174
+ */
5175
+ const WorkflowCanvasGraphNodeSchema$1 = object({
5176
+ id: string(),
5177
+ nodeType: WorkflowCanvasNodeTypeSchema$1,
5178
+ data: WorkflowCanvasNodeDataSchema$1,
5179
+ /** Set on children nested inside a group (loop / parallel) container. */
5180
+ parentId: string().optional()
5181
+ });
5182
+ const WorkflowCanvasEdgeSchema$1 = object({
5183
+ id: string(),
5184
+ source: string(),
5185
+ target: string(),
5186
+ type: string().optional(),
5187
+ label: string().optional(),
5188
+ sourceHandle: string().optional(),
5189
+ targetHandle: string().optional(),
5190
+ data: object({ branchKind: _enum([
5191
+ "then",
5192
+ "else",
5193
+ "parallel-branch",
5194
+ "error"
5195
+ ]).optional() }).optional()
5196
+ });
5197
+ /** A statically-evaluable top-level `const` value (literal scalars only). */
5198
+ const WorkflowCanvasConstantValueSchema$1 = union([
5199
+ string(),
5200
+ number$1(),
5201
+ boolean()
5202
+ ]);
5203
+ /**
5204
+ * Top-level `const NAME = <literal>` declarations in the workflow source, captured
5205
+ * at deploy. Lets the platform resolve `variable` value tokens (e.g. a `model` set
5206
+ * to a named const) to their concrete value for display. Scalars only — computed,
5207
+ * function-local, or non-literal consts are intentionally omitted.
5208
+ */
5209
+ const WorkflowCanvasConstantsSchema$1 = record(string(), WorkflowCanvasConstantValueSchema$1);
5210
+ const WorkflowCanvasGraphSchema$1 = object({
5211
+ nodes: array(WorkflowCanvasGraphNodeSchema$1),
5212
+ edges: array(WorkflowCanvasEdgeSchema$1),
5213
+ /** Top-level literal constants from the workflow source (for value-token resolution). */
5214
+ constants: WorkflowCanvasConstantsSchema$1.optional()
5215
+ });
5216
+ /**
5217
+ * Deploy-time summary of one credential a step requires, derived from the
5218
+ * action/agent-tool definition's `.credentials`. The workflow-canvas credential
5219
+ * overlay joins a step node's `slug` to these to resolve the bound instance.
5220
+ * `key` doubles as the app slug (matches `credential_instances.app_slug`).
5221
+ */
5222
+ const CredentialRequirementSummarySchema$1 = object({
5223
+ key: string(),
5224
+ kind: CredentialAuthKindSchema$1,
5225
+ /** Scope pinned via `.scope(...)`; absent means project-default → org-default. */
5226
+ scope: CredentialScopeTypeSchema$1.optional()
5227
+ });
4961
5228
  const StoredRouteManifestSkillSchema$1 = object({
4962
5229
  slug: string(),
4963
- name: string().optional(),
4964
- description: string().optional(),
5230
+ name: requiredDisplayTextSchema$1,
5231
+ description: requiredDisplayTextSchema$1,
4965
5232
  moduleFile: string()
4966
5233
  });
4967
5234
  const attachmentSchemasSchema$1 = record(string(), object({
@@ -4969,8 +5236,8 @@ const attachmentSchemasSchema$1 = record(string(), object({
4969
5236
  filterSchema: record(string(), unknown()).optional()
4970
5237
  }));
4971
5238
  const attachmentMetaSchema$1 = record(string(), object({
4972
- name: string().optional(),
4973
- description: string().optional()
5239
+ name: requiredDisplayTextSchema$1,
5240
+ description: requiredDisplayTextSchema$1
4974
5241
  }));
4975
5242
  const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
4976
5243
  object({ kind: literal("health") }),
@@ -4978,23 +5245,43 @@ const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
4978
5245
  kind: literal("agent"),
4979
5246
  slug: string(),
4980
5247
  moduleFile: string(),
4981
- name: string().optional(),
4982
- description: string().optional(),
5248
+ name: requiredDisplayTextSchema$1,
5249
+ description: requiredDisplayTextSchema$1,
4983
5250
  model: string(),
4984
5251
  systemPrompt: string(),
4985
5252
  toolCount: number$1().int().nonnegative(),
4986
5253
  credentialCount: number$1().int().nonnegative(),
4987
5254
  appSlugs: array(string()).default([]),
4988
- toolSlugs: array(string()).default([])
5255
+ toolSlugs: array(string()).default([]),
5256
+ /** Credential requirements per tool slug (the agent's credential consumer key). */
5257
+ toolRequirements: record(string(), array(CredentialRequirementSummarySchema$1)).optional()
5258
+ }),
5259
+ object({
5260
+ kind: literal("action"),
5261
+ slug: string(),
5262
+ name: requiredDisplayTextSchema$1,
5263
+ description: requiredDisplayTextSchema$1,
5264
+ moduleFile: string(),
5265
+ /** App slug for actions imported from an integration package (`@keystrokehq/<app>/actions`). */
5266
+ appSlug: string().optional(),
5267
+ inputSchema: record(string(), unknown()),
5268
+ outputSchema: record(string(), unknown()),
5269
+ /** Credentials this action requires (for the canvas credential overlay). */
5270
+ requirements: array(CredentialRequirementSummarySchema$1).optional()
4989
5271
  }),
4990
5272
  object({
4991
5273
  kind: literal("workflow"),
4992
5274
  slug: string(),
4993
- name: string().optional(),
4994
- description: string().optional(),
5275
+ name: requiredDisplayTextSchema$1,
5276
+ description: requiredDisplayTextSchema$1,
4995
5277
  subscribable: boolean(),
4996
5278
  moduleFile: string(),
4997
- requestSchema: record(string(), unknown())
5279
+ requestSchema: record(string(), unknown()),
5280
+ responseSchema: record(string(), unknown()).optional(),
5281
+ /** Deterministic AST control-flow skeleton (deploy-time producer). */
5282
+ flowGraph: WorkflowCanvasGraphSchema$1.optional(),
5283
+ /** sha256 of the workflow source the `flowGraph` was produced from (staleness). */
5284
+ flowGraphSourceHash: string().optional()
4998
5285
  }),
4999
5286
  object({
5000
5287
  kind: literal("trigger-webhook"),
@@ -5013,8 +5300,8 @@ const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
5013
5300
  moduleFile: string(),
5014
5301
  sourceHash: string().optional(),
5015
5302
  schedule: string(),
5016
- name: string().optional(),
5017
- description: string().optional()
5303
+ name: requiredDisplayTextSchema$1,
5304
+ description: requiredDisplayTextSchema$1
5018
5305
  }),
5019
5306
  object({
5020
5307
  kind: literal("trigger-poll-group"),
@@ -5030,8 +5317,8 @@ const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
5030
5317
  moduleFile: string(),
5031
5318
  sourceHash: string().optional(),
5032
5319
  schedule: string(),
5033
- name: string().optional(),
5034
- description: string().optional()
5320
+ name: requiredDisplayTextSchema$1,
5321
+ description: requiredDisplayTextSchema$1
5035
5322
  })
5036
5323
  ]);
5037
5324
  object({
@@ -5457,24 +5744,6 @@ object({
5457
5744
  outputParameters: record(string(), unknown()).optional(),
5458
5745
  version: string().optional()
5459
5746
  });
5460
- /** How a credential instance is stored (`credential_instances.auth_kind`). */
5461
- const CredentialAuthKindSchema$1 = _enum([
5462
- "api_key",
5463
- "oauth_managed",
5464
- "keystroke"
5465
- ]);
5466
- /**
5467
- * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
5468
- * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
5469
- * resolver tries the project default, then the org default, then throws.
5470
- */
5471
- const CredentialScopeTypeSchema$1 = _enum([
5472
- "organization",
5473
- "project",
5474
- "user"
5475
- ]);
5476
- CredentialAuthKindSchema$1.options;
5477
- CredentialScopeTypeSchema$1.options;
5478
5747
  /** Scope of a platform app credential (maps to `credential_instances.scope_type`). */
5479
5748
  const AppCredentialScopeSchema$1 = _enum([
5480
5749
  "user",
@@ -6470,7 +6739,7 @@ object({
6470
6739
  id: string(),
6471
6740
  slug: string(),
6472
6741
  name: string(),
6473
- description: string().nullable(),
6742
+ description: string().min(1),
6474
6743
  type: TriggerTypeSchema$1,
6475
6744
  status: TriggerStatusSchema$1,
6476
6745
  projectId: string(),
@@ -6766,7 +7035,7 @@ const AgentSummarySchema$1 = object({
6766
7035
  name: string().min(1),
6767
7036
  projectId: string().min(1),
6768
7037
  updatedAt: string().min(1),
6769
- description: string().optional(),
7038
+ description: string().min(1),
6770
7039
  sourcePath: string().min(1).optional(),
6771
7040
  model: string().optional(),
6772
7041
  capabilities: object({
@@ -6788,7 +7057,7 @@ const WorkflowSummarySchema$1 = object({
6788
7057
  name: string().min(1),
6789
7058
  projectId: string().min(1),
6790
7059
  updatedAt: string().min(1),
6791
- description: string().optional(),
7060
+ description: string().min(1),
6792
7061
  sourcePath: string().min(1).optional(),
6793
7062
  lastRunAt: optionalTimestamp$2
6794
7063
  });
@@ -6798,7 +7067,7 @@ const SkillSummarySchema$1 = object({
6798
7067
  name: string().min(1),
6799
7068
  projectId: string().min(1),
6800
7069
  updatedAt: string().min(1),
6801
- description: string().optional(),
7070
+ description: string().min(1),
6802
7071
  sourcePath: string().min(1).optional()
6803
7072
  });
6804
7073
  AgentSummarySchema$1.nullable();
@@ -6907,6 +7176,245 @@ object({ files: array(object({
6907
7176
  id: string(),
6908
7177
  path: string().min(1)
6909
7178
  })) });
7179
+ /** Whether the overview is still being produced or finished. */
7180
+ const WorkflowOverviewStatusSchema$1 = _enum(["generating", "ready"]);
7181
+ /** One phase of the guided-tour overview. */
7182
+ const WorkflowPhaseSchema$1 = object({
7183
+ id: string(),
7184
+ title: string(),
7185
+ copy: string(),
7186
+ nodeIds: array(string())
7187
+ });
7188
+ object({
7189
+ status: WorkflowOverviewStatusSchema$1,
7190
+ summary: string(),
7191
+ phases: array(WorkflowPhaseSchema$1),
7192
+ hash: string(),
7193
+ generatedAt: string().nullable(),
7194
+ model: string()
7195
+ });
7196
+ /** Subset of JSON-Schema field types the dashboard form renders inline. */
7197
+ const WorkflowInputFieldTypeSchema$1 = _enum([
7198
+ "string",
7199
+ "number",
7200
+ "boolean",
7201
+ "enum",
7202
+ "object",
7203
+ "array"
7204
+ ]);
7205
+ const WorkflowInputFieldSchema$1 = lazy(() => object({
7206
+ key: string(),
7207
+ label: string(),
7208
+ type: WorkflowInputFieldTypeSchema$1,
7209
+ required: boolean(),
7210
+ description: string().optional(),
7211
+ placeholder: string().optional(),
7212
+ options: array(string()).optional(),
7213
+ default: union([
7214
+ string(),
7215
+ number$1(),
7216
+ boolean()
7217
+ ]).optional(),
7218
+ children: array(WorkflowInputFieldSchema$1).optional(),
7219
+ format: string().optional()
7220
+ }));
7221
+ object({
7222
+ schema: object({ fields: array(WorkflowInputFieldSchema$1) }),
7223
+ values: record(string(), unknown()).nullable()
7224
+ });
7225
+ object({ runId: string() });
7226
+ /** Annotation lifecycle: "generating" while the LLM pass streams in, then "ready". */
7227
+ const WorkflowCanvasStatusSchema$1 = _enum(["generating", "ready"]);
7228
+ /** LLM-produced enrichment for a single skeleton node. */
7229
+ const WorkflowCanvasAnnotationSchema$1 = object({
7230
+ label: string().optional(),
7231
+ description: string().optional()
7232
+ });
7233
+ /** The configured value of one input at this call site. */
7234
+ const WorkflowNodeInputBindingSchema$1 = object({
7235
+ tokens: array(discriminatedUnion("kind", [
7236
+ object({
7237
+ kind: literal("text"),
7238
+ text: string()
7239
+ }),
7240
+ object({
7241
+ kind: literal("reference"),
7242
+ sourceNodeId: string().optional(),
7243
+ sourceLabel: string(),
7244
+ field: string().optional()
7245
+ }),
7246
+ object({
7247
+ kind: literal("variable"),
7248
+ text: string(),
7249
+ /** Concrete value when `text` resolves to a top-level literal constant. */
7250
+ resolvedValue: string().optional()
7251
+ }),
7252
+ object({
7253
+ kind: literal("call"),
7254
+ name: string()
7255
+ })
7256
+ ])),
7257
+ multiline: boolean().optional()
7258
+ });
7259
+ /** An inspector input with optional call-site binding. */
7260
+ const WorkflowCanvasNodeInputSchema$1 = WorkflowInputFieldSchema$1.and(object({
7261
+ binding: WorkflowNodeInputBindingSchema$1.optional(),
7262
+ additional: boolean().optional()
7263
+ }));
7264
+ /** Authored, deterministic metadata for a single node. */
7265
+ const WorkflowCanvasNodeMetaSchema$1 = object({
7266
+ kind: _enum([
7267
+ "action",
7268
+ "agent",
7269
+ "workflow",
7270
+ "llm",
7271
+ "trigger",
7272
+ "boundary"
7273
+ ]),
7274
+ slug: string(),
7275
+ name: string(),
7276
+ description: string().optional(),
7277
+ appSlug: string().optional(),
7278
+ inputs: array(WorkflowCanvasNodeInputSchema$1),
7279
+ outputs: array(WorkflowInputFieldSchema$1),
7280
+ requiredApps: array(string()).optional(),
7281
+ model: string().optional(),
7282
+ toolCount: number$1().int().nonnegative().optional()
7283
+ });
7284
+ object({
7285
+ graph: WorkflowCanvasGraphSchema$1,
7286
+ nodeMetadata: record(string(), WorkflowCanvasNodeMetaSchema$1),
7287
+ annotations: record(string(), WorkflowCanvasAnnotationSchema$1),
7288
+ status: WorkflowCanvasStatusSchema$1,
7289
+ hash: string(),
7290
+ generatedAt: string().nullable(),
7291
+ model: string()
7292
+ });
7293
+ const WorkflowCanvasNodeRunStateSchema$1 = object({
7294
+ status: _enum([
7295
+ "pending",
7296
+ "running",
7297
+ "succeeded",
7298
+ "failed",
7299
+ "skipped"
7300
+ ]),
7301
+ iteration: object({
7302
+ index: number$1().int().nonnegative(),
7303
+ total: number$1().int().nonnegative()
7304
+ }).optional()
7305
+ });
7306
+ /** Overall lifecycle of a run as the canvas animates it. */
7307
+ const WorkflowCanvasRunStatusSchema$1 = _enum([
7308
+ "running",
7309
+ "succeeded",
7310
+ "failed",
7311
+ "canceled"
7312
+ ]);
7313
+ object({
7314
+ runId: string(),
7315
+ status: WorkflowCanvasRunStatusSchema$1,
7316
+ startedAt: string(),
7317
+ finishedAt: string().nullable(),
7318
+ nodeStates: record(string(), WorkflowCanvasNodeRunStateSchema$1)
7319
+ });
7320
+ /** Scope a credential instance lives in. */
7321
+ const WorkflowCredentialScopeSchema$1 = _enum([
7322
+ "organization",
7323
+ "project",
7324
+ "user"
7325
+ ]);
7326
+ /** The concrete credential instance a binding currently resolves to. */
7327
+ const WorkflowResolvedCredentialSchema$1 = object({
7328
+ id: string(),
7329
+ name: string(),
7330
+ scope: WorkflowCredentialScopeSchema$1,
7331
+ appSlug: string().optional(),
7332
+ isDefault: boolean().optional(),
7333
+ projectId: string().optional(),
7334
+ projectName: string().optional()
7335
+ });
7336
+ record(string(), WorkflowCanvasAnnotationSchema$1);
7337
+ /** One opaque code-block the annotation pass should label, keyed by its canvas node id. */
7338
+ const WorkflowCanvasAnnotationCodeBlockSchema$1 = object({
7339
+ nodeId: string(),
7340
+ /** The raw source snippet (the node's label) the LLM turns into human copy. */
7341
+ source: string()
7342
+ });
7343
+ /** Inputs the worker feeds the LLM for the gated code-block annotation pass. */
7344
+ const WorkflowCanvasAnnotationsInputSchema$1 = object({
7345
+ workflowName: string(),
7346
+ workflowDescription: string().nullable(),
7347
+ codeBlocks: array(WorkflowCanvasAnnotationCodeBlockSchema$1)
7348
+ });
7349
+ object({
7350
+ workflowId: string(),
7351
+ projectId: string(),
7352
+ hash: string(),
7353
+ model: string(),
7354
+ input: WorkflowCanvasAnnotationsInputSchema$1
7355
+ });
7356
+ /** One node as the overview LLM sees it (derived from the canvas node metadata + graph). */
7357
+ const WorkflowOverviewNodeSchema$1 = object({
7358
+ nodeId: string(),
7359
+ label: string(),
7360
+ kind: string(),
7361
+ description: string().optional(),
7362
+ /** App/integration slug for steps imported from a `@keystrokehq/<app>` package. */
7363
+ appSlug: string().optional(),
7364
+ /** Authored input field keys (from the action/agent/workflow definition). */
7365
+ inputs: array(string()).optional(),
7366
+ /** Authored output field keys. */
7367
+ outputs: array(string()).optional(),
7368
+ /** Agent-only: the model the agent runs on. */
7369
+ model: string().optional(),
7370
+ /** Agent-only: number of tools available to the agent. */
7371
+ toolCount: number$1().int().nonnegative().optional()
7372
+ });
7373
+ /** Inputs the worker feeds the LLM to produce the workflow overview (summary + phases). */
7374
+ const WorkflowOverviewInputSchema$1 = object({
7375
+ workflowName: string(),
7376
+ workflowDescription: string().nullable(),
7377
+ /** Display labels of the trigger sources upstream of the workflow (read-only context). */
7378
+ triggers: array(string()),
7379
+ nodes: array(WorkflowOverviewNodeSchema$1),
7380
+ /** The workflow's TypeScript source (best-effort; null when the deploy has no source snapshot). */
7381
+ source: string().nullable()
7382
+ });
7383
+ object({
7384
+ workflowId: string(),
7385
+ projectId: string(),
7386
+ hash: string(),
7387
+ model: string(),
7388
+ input: WorkflowOverviewInputSchema$1
7389
+ });
7390
+ const WorkflowCanvasCredentialBindingBaseSchema$1 = object({
7391
+ credentialKey: string(),
7392
+ label: string(),
7393
+ appSlug: string().optional()
7394
+ });
7395
+ /** How one credential requirement on a step currently resolves. */
7396
+ const WorkflowCanvasCredentialBindingSchema$1 = union([
7397
+ WorkflowCanvasCredentialBindingBaseSchema$1.extend({
7398
+ policy: _enum([
7399
+ "project-default",
7400
+ "org-default",
7401
+ "assigned"
7402
+ ]),
7403
+ instance: WorkflowResolvedCredentialSchema$1
7404
+ }),
7405
+ WorkflowCanvasCredentialBindingBaseSchema$1.extend({
7406
+ policy: literal("scope-pinned"),
7407
+ pinnedScope: WorkflowCredentialScopeSchema$1,
7408
+ instance: WorkflowResolvedCredentialSchema$1
7409
+ }),
7410
+ WorkflowCanvasCredentialBindingBaseSchema$1.extend({
7411
+ policy: literal("unresolved"),
7412
+ reason: _enum(["needs-selection", "missing"]),
7413
+ pinnedScope: WorkflowCredentialScopeSchema$1.optional()
7414
+ })
7415
+ ]);
7416
+ record(string(), array(WorkflowCanvasCredentialBindingSchema$1));
7417
+ record(string(), unknown());
6910
7418
  /** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */
6911
7419
  function encodeOrgArtifacts(artifacts) {
6912
7420
  return Buffer.from(JSON.stringify(artifacts)).toString("base64");
@@ -8299,10 +8807,260 @@ function resolveExternalPlatformOrigin(env = process.env) {
8299
8807
  }
8300
8808
  /** On-disk path under the project root (packed in deploy artifacts when present). */
8301
8809
  const ROUTE_MANIFEST_REL_PATH = "dist/.keystroke/route-manifest.json";
8810
+ /** How a credential instance is stored (`credential_instances.auth_kind`). */
8811
+ const CredentialAuthKindSchema = z.enum([
8812
+ "api_key",
8813
+ "oauth_managed",
8814
+ "keystroke"
8815
+ ]);
8816
+ /**
8817
+ * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
8818
+ * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
8819
+ * resolver tries the project default, then the org default, then throws.
8820
+ */
8821
+ const CredentialScopeTypeSchema = z.enum([
8822
+ "organization",
8823
+ "project",
8824
+ "user"
8825
+ ]);
8826
+ CredentialAuthKindSchema.options;
8827
+ CredentialScopeTypeSchema.options;
8828
+ /** Non-empty human-readable label or description (trimmed). */
8829
+ const requiredDisplayTextSchema = z.string().trim().min(1);
8830
+ /**
8831
+ * Structural workflow-canvas graph contract.
8832
+ *
8833
+ * This is the deterministic skeleton the deploy-time AST producer emits for a
8834
+ * workflow (nodes + edges), plus the manifest-derived trigger-source nodes. It
8835
+ * is the single source of truth shared by:
8836
+ * - the AST producer (emits it at deploy, stored with the manifest),
8837
+ * - the platform route that serves the canvas, and
8838
+ * - the SDK / web client that renders it (React Flow).
8839
+ *
8840
+ * Only the structural skeleton lives here. The LLM enrichment + run-overlay
8841
+ * envelope types live in `workflow-canvas-envelope.ts`; the SDK re-exports them.
8842
+ * See WORKFLOW.md (§4 grammar, §8 node ids, §9 caching).
8843
+ */
8844
+ /**
8845
+ * Canvas node taxonomy — the single discriminator for every canvas node. The
8846
+ * client derives the React Flow component, icon, and per-node treatment from it
8847
+ * (no parallel `type` / `data.kind` fields), and the producer + fixtures emit it
8848
+ * directly, so the structural contract can never silently diverge across the
8849
+ * deploy → render boundary.
8850
+ * - Boundaries: `entry` (Start, owns input) · `exit` (Output, owns output) ·
8851
+ * `error` (a terminal `throw` — an error output that ends the run on a branch)
8852
+ * - Callable: `step` (action / agent / llm / hook / child-workflow invocation) —
8853
+ * the invocation flavor lives in {@link WorkflowCanvasCallKind}
8854
+ * - Structural control flow: `code-block` · `decision` · `merge` · `loop` ·
8855
+ * `parallel` (group containers) · `loop-start` (the group body's entry marker,
8856
+ * shared by loop + parallel)
8857
+ * - Upstream of entry: `trigger-source` (one per manifest trigger attachment)
8858
+ *
8859
+ * `Promise.all([...])` is modeled as a `parallel` group container: the branches
8860
+ * are stacked inside and the container itself is the single prong leaving the
8861
+ * wrapper (there is no separate fork/join pair).
8862
+ *
8863
+ * `exit` and `error` are both terminals: a `return` flows to the shared `exit`
8864
+ * (the workflow output), while a `throw` gets its own `error` terminal off the
8865
+ * branch so guard clauses (`if (bad) throw …`) read as a visible dead-end.
8866
+ */
8867
+ const WorkflowCanvasNodeTypeSchema = z.enum([
8868
+ "entry",
8869
+ "exit",
8870
+ "error",
8871
+ "step",
8872
+ "code-block",
8873
+ "decision",
8874
+ "merge",
8875
+ "loop",
8876
+ "parallel",
8877
+ "loop-start",
8878
+ "trigger-source"
8879
+ ]);
8880
+ z.enum([
8881
+ "workflow-step",
8882
+ "agent",
8883
+ "llm",
8884
+ "wait",
8885
+ "hook",
8886
+ "tool",
8887
+ "child-workflow"
8888
+ ]);
8889
+ /** A labeled branch output on a decision-style node. */
8890
+ const WorkflowCanvasNodeOutputSchema = z.object({
8891
+ id: z.string(),
8892
+ label: z.string()
8893
+ });
8894
+ /**
8895
+ * One token of a step's call-site argument value as captured by the producer.
8896
+ *
8897
+ * Raw form, one per source-expression shape so the inspector can render each
8898
+ * distinctly instead of dumping raw text:
8899
+ * - `text` — a literal value (string/number/boolean) or inert template chunk.
8900
+ * - `reference` — an upstream node output; carries only the structural
8901
+ * `sourceNodeId` + `field` (the human `sourceLabel` is filled by the platform
8902
+ * metadata join).
8903
+ * - `variable` — a code identifier / property access that isn't an upstream
8904
+ * reference (e.g. a `const`, a loop variable, `job.id`). `text` is the source
8905
+ * name; the platform may attach a `resolvedValue` for known top-level consts.
8906
+ * - `call` — a function call; carries only the callee `name` (e.g.
8907
+ * `buildPrompt`), never the full argument list.
8908
+ */
8909
+ const WorkflowCanvasRawValueTokenSchema = z.discriminatedUnion("kind", [
8910
+ z.object({
8911
+ kind: z.literal("text"),
8912
+ text: z.string()
8913
+ }),
8914
+ z.object({
8915
+ kind: z.literal("reference"),
8916
+ /** Upstream node id this value flows from; absent only for unresolved refs. */
8917
+ sourceNodeId: z.string().optional(),
8918
+ /** Output field of the source (dotted path); omitted = the whole output. */
8919
+ field: z.string().optional()
8920
+ }),
8921
+ z.object({
8922
+ kind: z.literal("variable"),
8923
+ text: z.string()
8924
+ }),
8925
+ z.object({
8926
+ kind: z.literal("call"),
8927
+ name: z.string()
8928
+ })
8929
+ ]);
8930
+ /**
8931
+ * A step input's configured value at its call site, captured deterministically
8932
+ * by the producer from the call's argument object. The platform join turns this
8933
+ * into the inspector's {@link WorkflowNodeInputBinding} (filling display labels).
8934
+ */
8935
+ const WorkflowCanvasRawBindingSchema = z.object({
8936
+ tokens: z.array(WorkflowCanvasRawValueTokenSchema),
8937
+ /** Render as a tall multi-line box (object/array/multiline template values). */
8938
+ multiline: z.boolean().optional()
8939
+ });
8940
+ /**
8941
+ * Statically-captured `promptLlm` options for an `llm` step node. Literal-only:
8942
+ * dynamic/expression values (a computed model, a `system` built by a function) are
8943
+ * not captured; `system`/`outputSchema` record presence so the inspector can note
8944
+ * "a system prompt is configured" / "structured output" without their values.
8945
+ */
8946
+ const WorkflowCanvasLlmOptionsSchema = z.object({
8947
+ model: z.string().optional(),
8948
+ maxTokens: z.number().optional(),
8949
+ temperature: z.number().optional(),
8950
+ thinkingLevel: z.string().optional(),
8951
+ hasSystemPrompt: z.boolean().optional(),
8952
+ hasOutputSchema: z.boolean().optional()
8953
+ });
8954
+ const WorkflowCanvasNodeDataSchema = z.object({
8955
+ label: z.string(),
8956
+ /** Set on group nodes (loop / parallel section containers). */
8957
+ groupKind: z.enum([
8958
+ "loop",
8959
+ "parallel",
8960
+ "conditional"
8961
+ ]).optional(),
8962
+ description: z.string().optional(),
8963
+ /** {@link WorkflowCanvasCallKind} or a looser raw call-site label. */
8964
+ callKind: z.string().optional(),
8965
+ /**
8966
+ * App/integration slug for a `step` whose action/agent is imported directly
8967
+ * from a `@keystrokehq/<app>` package (e.g. "slack", "apollo"). Lets the client
8968
+ * badge the node with that app's logo; absent for custom (project-local)
8969
+ * actions, which fall back to the call-kind icon.
8970
+ */
8971
+ appSlug: z.string().optional(),
8972
+ /** Cron/webhook/poll discriminator on trigger-source nodes. */
8973
+ triggerType: z.string().optional(),
8974
+ /** Branch outputs (decision nodes). */
8975
+ outputs: z.array(WorkflowCanvasNodeOutputSchema).optional(),
8976
+ /**
8977
+ * Action/agent/workflow slug resolved at deploy time (via import → definition).
8978
+ * Optional when the deploy build cannot resolve source (dist-only artifacts).
8979
+ */
8980
+ slug: z.string().optional(),
8981
+ /**
8982
+ * Durable call-site ids nested inside an off-grammar `code-block` (same-file only).
8983
+ * Used by the run overlay to light the block when any contained step executes.
8984
+ */
8985
+ containedCallSiteIds: z.array(z.string()).optional(),
8986
+ /**
8987
+ * Per-input call-site value bindings for `step` nodes, keyed by input field name.
8988
+ * Deterministically captured from the call's argument object; reference tokens point
8989
+ * at the upstream node that produced the value. The platform join fills display labels.
8990
+ */
8991
+ inputBindings: z.record(z.string(), WorkflowCanvasRawBindingSchema).optional(),
8992
+ /**
8993
+ * Static `promptLlm(prompt, options)` configuration captured at the call site for
8994
+ * `llm` step nodes. Only literal values are captured (model/maxTokens/temperature/
8995
+ * thinkingLevel); `system`/`outputSchema` are usually expressions, so only their
8996
+ * presence is recorded. Absent when no options are statically resolvable.
8997
+ */
8998
+ llmOptions: WorkflowCanvasLlmOptionsSchema.optional()
8999
+ });
9000
+ /**
9001
+ * A single structural node. This is the deploy artifact's shape: identity
9002
+ * (`id`), the canonical discriminator (`nodeType`), display `data`, and group
9003
+ * nesting (`parentId`). All layout/rendering — React Flow component key,
9004
+ * positions, sizes, `extent`, group box dimensions — is derived entirely
9005
+ * client-side from this structure, so it never leaks into the wire contract.
9006
+ */
9007
+ const WorkflowCanvasGraphNodeSchema = z.object({
9008
+ id: z.string(),
9009
+ nodeType: WorkflowCanvasNodeTypeSchema,
9010
+ data: WorkflowCanvasNodeDataSchema,
9011
+ /** Set on children nested inside a group (loop / parallel) container. */
9012
+ parentId: z.string().optional()
9013
+ });
9014
+ const WorkflowCanvasEdgeSchema = z.object({
9015
+ id: z.string(),
9016
+ source: z.string(),
9017
+ target: z.string(),
9018
+ type: z.string().optional(),
9019
+ label: z.string().optional(),
9020
+ sourceHandle: z.string().optional(),
9021
+ targetHandle: z.string().optional(),
9022
+ data: z.object({ branchKind: z.enum([
9023
+ "then",
9024
+ "else",
9025
+ "parallel-branch",
9026
+ "error"
9027
+ ]).optional() }).optional()
9028
+ });
9029
+ /** A statically-evaluable top-level `const` value (literal scalars only). */
9030
+ const WorkflowCanvasConstantValueSchema = z.union([
9031
+ z.string(),
9032
+ z.number(),
9033
+ z.boolean()
9034
+ ]);
9035
+ /**
9036
+ * Top-level `const NAME = <literal>` declarations in the workflow source, captured
9037
+ * at deploy. Lets the platform resolve `variable` value tokens (e.g. a `model` set
9038
+ * to a named const) to their concrete value for display. Scalars only — computed,
9039
+ * function-local, or non-literal consts are intentionally omitted.
9040
+ */
9041
+ const WorkflowCanvasConstantsSchema = z.record(z.string(), WorkflowCanvasConstantValueSchema);
9042
+ const WorkflowCanvasGraphSchema = z.object({
9043
+ nodes: z.array(WorkflowCanvasGraphNodeSchema),
9044
+ edges: z.array(WorkflowCanvasEdgeSchema),
9045
+ /** Top-level literal constants from the workflow source (for value-token resolution). */
9046
+ constants: WorkflowCanvasConstantsSchema.optional()
9047
+ });
9048
+ /**
9049
+ * Deploy-time summary of one credential a step requires, derived from the
9050
+ * action/agent-tool definition's `.credentials`. The workflow-canvas credential
9051
+ * overlay joins a step node's `slug` to these to resolve the bound instance.
9052
+ * `key` doubles as the app slug (matches `credential_instances.app_slug`).
9053
+ */
9054
+ const CredentialRequirementSummarySchema = z.object({
9055
+ key: z.string(),
9056
+ kind: CredentialAuthKindSchema,
9057
+ /** Scope pinned via `.scope(...)`; absent means project-default → org-default. */
9058
+ scope: CredentialScopeTypeSchema.optional()
9059
+ });
8302
9060
  const StoredRouteManifestSkillSchema = z.object({
8303
9061
  slug: z.string(),
8304
- name: z.string().optional(),
8305
- description: z.string().optional(),
9062
+ name: requiredDisplayTextSchema,
9063
+ description: requiredDisplayTextSchema,
8306
9064
  moduleFile: z.string()
8307
9065
  });
8308
9066
  const attachmentSchemasSchema = z.record(z.string(), z.object({
@@ -8310,8 +9068,8 @@ const attachmentSchemasSchema = z.record(z.string(), z.object({
8310
9068
  filterSchema: z.record(z.string(), z.unknown()).optional()
8311
9069
  }));
8312
9070
  const attachmentMetaSchema = z.record(z.string(), z.object({
8313
- name: z.string().optional(),
8314
- description: z.string().optional()
9071
+ name: requiredDisplayTextSchema,
9072
+ description: requiredDisplayTextSchema
8315
9073
  }));
8316
9074
  const storedRouteManifestEntryV2Schema = z.discriminatedUnion("kind", [
8317
9075
  z.object({ kind: z.literal("health") }),
@@ -8319,23 +9077,43 @@ const storedRouteManifestEntryV2Schema = z.discriminatedUnion("kind", [
8319
9077
  kind: z.literal("agent"),
8320
9078
  slug: z.string(),
8321
9079
  moduleFile: z.string(),
8322
- name: z.string().optional(),
8323
- description: z.string().optional(),
9080
+ name: requiredDisplayTextSchema,
9081
+ description: requiredDisplayTextSchema,
8324
9082
  model: z.string(),
8325
9083
  systemPrompt: z.string(),
8326
9084
  toolCount: z.number().int().nonnegative(),
8327
9085
  credentialCount: z.number().int().nonnegative(),
8328
9086
  appSlugs: z.array(z.string()).default([]),
8329
- toolSlugs: z.array(z.string()).default([])
9087
+ toolSlugs: z.array(z.string()).default([]),
9088
+ /** Credential requirements per tool slug (the agent's credential consumer key). */
9089
+ toolRequirements: z.record(z.string(), z.array(CredentialRequirementSummarySchema)).optional()
9090
+ }),
9091
+ z.object({
9092
+ kind: z.literal("action"),
9093
+ slug: z.string(),
9094
+ name: requiredDisplayTextSchema,
9095
+ description: requiredDisplayTextSchema,
9096
+ moduleFile: z.string(),
9097
+ /** App slug for actions imported from an integration package (`@keystrokehq/<app>/actions`). */
9098
+ appSlug: z.string().optional(),
9099
+ inputSchema: z.record(z.string(), z.unknown()),
9100
+ outputSchema: z.record(z.string(), z.unknown()),
9101
+ /** Credentials this action requires (for the canvas credential overlay). */
9102
+ requirements: z.array(CredentialRequirementSummarySchema).optional()
8330
9103
  }),
8331
9104
  z.object({
8332
9105
  kind: z.literal("workflow"),
8333
9106
  slug: z.string(),
8334
- name: z.string().optional(),
8335
- description: z.string().optional(),
9107
+ name: requiredDisplayTextSchema,
9108
+ description: requiredDisplayTextSchema,
8336
9109
  subscribable: z.boolean(),
8337
9110
  moduleFile: z.string(),
8338
- requestSchema: z.record(z.string(), z.unknown())
9111
+ requestSchema: z.record(z.string(), z.unknown()),
9112
+ responseSchema: z.record(z.string(), z.unknown()).optional(),
9113
+ /** Deterministic AST control-flow skeleton (deploy-time producer). */
9114
+ flowGraph: WorkflowCanvasGraphSchema.optional(),
9115
+ /** sha256 of the workflow source the `flowGraph` was produced from (staleness). */
9116
+ flowGraphSourceHash: z.string().optional()
8339
9117
  }),
8340
9118
  z.object({
8341
9119
  kind: z.literal("trigger-webhook"),
@@ -8354,8 +9132,8 @@ const storedRouteManifestEntryV2Schema = z.discriminatedUnion("kind", [
8354
9132
  moduleFile: z.string(),
8355
9133
  sourceHash: z.string().optional(),
8356
9134
  schedule: z.string(),
8357
- name: z.string().optional(),
8358
- description: z.string().optional()
9135
+ name: requiredDisplayTextSchema,
9136
+ description: requiredDisplayTextSchema
8359
9137
  }),
8360
9138
  z.object({
8361
9139
  kind: z.literal("trigger-poll-group"),
@@ -8371,8 +9149,8 @@ const storedRouteManifestEntryV2Schema = z.discriminatedUnion("kind", [
8371
9149
  moduleFile: z.string(),
8372
9150
  sourceHash: z.string().optional(),
8373
9151
  schedule: z.string(),
8374
- name: z.string().optional(),
8375
- description: z.string().optional()
9152
+ name: requiredDisplayTextSchema,
9153
+ description: requiredDisplayTextSchema
8376
9154
  })
8377
9155
  ]);
8378
9156
  const storedRouteManifestV2Schema = z.object({
@@ -8381,165 +9159,14 @@ const storedRouteManifestV2Schema = z.object({
8381
9159
  skills: z.array(StoredRouteManifestSkillSchema).default([]),
8382
9160
  integrations: z.array(z.string()).optional()
8383
9161
  });
8384
- const DERIVED_ENTRY_KINDS = new Set([
8385
- "agent-sessions-list",
8386
- "agent-session-detail",
8387
- "workflow-runs-list",
8388
- "workflow-run-detail",
8389
- "trigger-runs-list",
8390
- "trigger-run-detail"
8391
- ]);
8392
- function webhookEndpointFromPath(path) {
8393
- return path.replace(/^\/triggers\//, "").replace(/^\/+|\/+$/g, "");
8394
- }
8395
- function legacyAgentAppSlugs(entry) {
8396
- if (Array.isArray(entry.appSlugs)) return entry.appSlugs;
8397
- if (Array.isArray(entry.credentialSlugs)) return entry.credentialSlugs;
8398
- if (Array.isArray(entry.credentialKeys)) return entry.credentialKeys;
8399
- return [];
8400
- }
8401
- /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
8402
- function normalizeEntryToV2(entry) {
8403
- const kind = entry.kind;
8404
- if (typeof kind !== "string") return null;
8405
- if (DERIVED_ENTRY_KINDS.has(kind) || kind === "plugin") return null;
8406
- if (kind === "health") return { kind: "health" };
8407
- if (kind === "agent") {
8408
- const slug = typeof entry.slug === "string" ? entry.slug : typeof entry.agentSlug === "string" ? entry.agentSlug : void 0;
8409
- if (!slug || typeof entry.moduleFile !== "string") return null;
8410
- return {
8411
- kind: "agent",
8412
- slug,
8413
- moduleFile: entry.moduleFile,
8414
- ...typeof entry.name === "string" ? { name: entry.name } : {},
8415
- ...typeof entry.description === "string" ? { description: entry.description } : {},
8416
- model: typeof entry.model === "string" ? entry.model : "",
8417
- systemPrompt: typeof entry.systemPrompt === "string" ? entry.systemPrompt : "",
8418
- toolCount: typeof entry.toolCount === "number" ? entry.toolCount : 0,
8419
- credentialCount: typeof entry.credentialCount === "number" ? entry.credentialCount : 0,
8420
- appSlugs: legacyAgentAppSlugs(entry),
8421
- toolSlugs: Array.isArray(entry.toolSlugs) ? entry.toolSlugs : []
8422
- };
8423
- }
8424
- if (kind === "workflow") {
8425
- const slug = typeof entry.slug === "string" ? entry.slug : typeof entry.workflowSlug === "string" ? entry.workflowSlug : void 0;
8426
- if (!slug || typeof entry.moduleFile !== "string") return null;
8427
- const name = typeof entry.name === "string" ? entry.name : typeof entry.workflowName === "string" ? entry.workflowName : void 0;
8428
- return {
8429
- kind: "workflow",
8430
- slug,
8431
- moduleFile: entry.moduleFile,
8432
- ...name ? { name } : {},
8433
- ...typeof entry.description === "string" ? { description: entry.description } : {},
8434
- subscribable: entry.subscribable === true,
8435
- requestSchema: entry.requestSchema && typeof entry.requestSchema === "object" ? entry.requestSchema : {}
8436
- };
8437
- }
8438
- if (kind === "trigger-webhook") {
8439
- if (typeof entry.moduleFile !== "string" || !Array.isArray(entry.attachmentIds)) return null;
8440
- const endpoint = typeof entry.endpoint === "string" ? entry.endpoint : typeof entry.path === "string" ? webhookEndpointFromPath(entry.path) : void 0;
8441
- if (!endpoint) return null;
8442
- return {
8443
- kind: "trigger-webhook",
8444
- endpoint,
8445
- attachmentIds: entry.attachmentIds,
8446
- moduleFile: entry.moduleFile,
8447
- ...typeof entry.sourceHash === "string" ? { sourceHash: entry.sourceHash } : {},
8448
- attachmentSchemas: entry.attachmentSchemas && typeof entry.attachmentSchemas === "object" ? entry.attachmentSchemas : {},
8449
- ...entry.attachmentMeta && typeof entry.attachmentMeta === "object" ? { attachmentMeta: entry.attachmentMeta } : {}
8450
- };
8451
- }
8452
- if (kind === "trigger-poll") {
8453
- if (typeof entry.attachmentId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string") return null;
8454
- return {
8455
- kind: "trigger-poll",
8456
- attachmentId: entry.attachmentId,
8457
- attachmentIds: Array.isArray(entry.attachmentIds) ? entry.attachmentIds : [entry.attachmentId],
8458
- moduleFile: entry.moduleFile,
8459
- ...typeof entry.sourceHash === "string" ? { sourceHash: entry.sourceHash } : {},
8460
- schedule: entry.schedule,
8461
- ...typeof entry.name === "string" ? { name: entry.name } : {},
8462
- ...typeof entry.description === "string" ? { description: entry.description } : {}
8463
- };
8464
- }
8465
- if (kind === "trigger-poll-group") {
8466
- if (typeof entry.pollId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string" || !Array.isArray(entry.attachmentIds)) return null;
8467
- return {
8468
- kind: "trigger-poll-group",
8469
- pollId: entry.pollId,
8470
- attachmentIds: entry.attachmentIds,
8471
- moduleFile: entry.moduleFile,
8472
- schedule: entry.schedule
8473
- };
8474
- }
8475
- if (kind === "cron-schedule") {
8476
- if (typeof entry.attachmentId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string") return null;
8477
- return {
8478
- kind: "cron-schedule",
8479
- attachmentId: entry.attachmentId,
8480
- attachmentIds: Array.isArray(entry.attachmentIds) ? entry.attachmentIds : [entry.attachmentId],
8481
- moduleFile: entry.moduleFile,
8482
- ...typeof entry.sourceHash === "string" ? { sourceHash: entry.sourceHash } : {},
8483
- schedule: entry.schedule,
8484
- ...typeof entry.name === "string" ? { name: entry.name } : {},
8485
- ...typeof entry.description === "string" ? { description: entry.description } : {}
8486
- };
8487
- }
8488
- return null;
8489
- }
8490
- /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
8491
- function normalizeV2ManifestInput(value) {
8492
- if (!value || typeof value !== "object") return value;
8493
- const raw = value;
8494
- if (raw.version !== 2 || !Array.isArray(raw.entries)) return value;
8495
- return {
8496
- ...raw,
8497
- entries: raw.entries.map((entry) => {
8498
- if (!entry || typeof entry !== "object") return entry;
8499
- const kind = entry.kind;
8500
- if (kind === "trigger-poll" || kind === "cron-schedule" || kind === "trigger-webhook" || kind === "trigger-poll-group") {
8501
- const trigger = entry;
8502
- if (Array.isArray(trigger.attachmentIds)) return entry;
8503
- return {
8504
- ...trigger,
8505
- attachmentIds: typeof trigger.attachmentId === "string" ? [trigger.attachmentId] : []
8506
- };
8507
- }
8508
- if (kind !== "agent") return entry;
8509
- const agent = entry;
8510
- if (Array.isArray(agent.appSlugs)) return entry;
8511
- const appSlugs = legacyAgentAppSlugs(agent);
8512
- if (appSlugs.length === 0) return entry;
8513
- const { credentialKeys: _credentialKeys, credentialSlugs: _credentialSlugs, ...rest } = agent;
8514
- return {
8515
- ...rest,
8516
- appSlugs,
8517
- toolSlugs: Array.isArray(agent.toolSlugs) ? agent.toolSlugs : []
8518
- };
8519
- })
8520
- };
8521
- }
8522
- /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
8523
- function normalizeStoredRouteManifestToV2(value) {
8524
- if (!value || typeof value !== "object") throw new Error("Invalid route manifest");
8525
- const raw = value;
8526
- if (raw.version === 2) return storedRouteManifestV2Schema.parse(normalizeV2ManifestInput(value));
8527
- const entriesRaw = Array.isArray(raw.entries) ? raw.entries : [];
8528
- const entries = [];
8529
- for (const entry of entriesRaw) {
8530
- if (!entry || typeof entry !== "object") continue;
8531
- const normalized = normalizeEntryToV2(entry);
8532
- if (normalized) entries.push(normalized);
8533
- }
8534
- return storedRouteManifestV2Schema.parse({
8535
- version: 2,
8536
- entries,
8537
- skills: raw.skills ?? [],
8538
- integrations: raw.integrations
8539
- });
8540
- }
9162
+ /**
9163
+ * Parse a stored route manifest. Only the strict v2 schema is supported: the
9164
+ * builder always emits v2 and every deploy regenerates the manifest, so there is
9165
+ * no legacy upcasting. (The pre-v2 `normalizeEntryToV2` path was removed once the
9166
+ * data tables were truncated and all artifacts redeployed.)
9167
+ */
8541
9168
  function parseStoredRouteManifest(value) {
8542
- return normalizeStoredRouteManifestToV2(value);
9169
+ return storedRouteManifestV2Schema.parse(value);
8543
9170
  }
8544
9171
  /** Messaging platforms that support agent gateway bindings. */
8545
9172
  const ChannelPlatformKeySchema = z.enum(["slack"]);
@@ -9298,24 +9925,6 @@ function parseAppSlug(slug) {
9298
9925
  slug: trimmed
9299
9926
  };
9300
9927
  }
9301
- /** How a credential instance is stored (`credential_instances.auth_kind`). */
9302
- const CredentialAuthKindSchema = z.enum([
9303
- "api_key",
9304
- "oauth_managed",
9305
- "keystroke"
9306
- ]);
9307
- /**
9308
- * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
9309
- * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
9310
- * resolver tries the project default, then the org default, then throws.
9311
- */
9312
- const CredentialScopeTypeSchema = z.enum([
9313
- "organization",
9314
- "project",
9315
- "user"
9316
- ]);
9317
- CredentialAuthKindSchema.options;
9318
- CredentialScopeTypeSchema.options;
9319
9928
  /** Human-readable app name from a credential slug (e.g. `google-drive` → `Google Drive`). */
9320
9929
  function displayCredentialAppName(appId) {
9321
9930
  return appId.split(/[-_]+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
@@ -10410,7 +11019,7 @@ const WorkspaceTriggerSummarySchema = z.object({
10410
11019
  id: z.string(),
10411
11020
  slug: z.string(),
10412
11021
  name: z.string(),
10413
- description: z.string().nullable(),
11022
+ description: z.string().min(1),
10414
11023
  type: TriggerTypeSchema,
10415
11024
  status: TriggerStatusSchema,
10416
11025
  projectId: z.string(),
@@ -10836,7 +11445,7 @@ const AgentSummarySchema = z.object({
10836
11445
  name: z.string().min(1),
10837
11446
  projectId: z.string().min(1),
10838
11447
  updatedAt: z.string().min(1),
10839
- description: z.string().optional(),
11448
+ description: z.string().min(1),
10840
11449
  sourcePath: z.string().min(1).optional(),
10841
11450
  model: z.string().optional(),
10842
11451
  capabilities: z.object({
@@ -10858,7 +11467,7 @@ const WorkflowSummarySchema = z.object({
10858
11467
  name: z.string().min(1),
10859
11468
  projectId: z.string().min(1),
10860
11469
  updatedAt: z.string().min(1),
10861
- description: z.string().optional(),
11470
+ description: z.string().min(1),
10862
11471
  sourcePath: z.string().min(1).optional(),
10863
11472
  lastRunAt: optionalTimestamp
10864
11473
  });
@@ -10868,7 +11477,7 @@ const SkillSummarySchema = z.object({
10868
11477
  name: z.string().min(1),
10869
11478
  projectId: z.string().min(1),
10870
11479
  updatedAt: z.string().min(1),
10871
- description: z.string().optional(),
11480
+ description: z.string().min(1),
10872
11481
  sourcePath: z.string().min(1).optional()
10873
11482
  });
10874
11483
  const AgentSummaryListResponseSchema = z.array(AgentSummarySchema);
@@ -11010,6 +11619,366 @@ const ListAgentWorkspaceFilesResponseSchema = z.object({ files: z.array(AgentWor
11010
11619
  function agentWorkspaceFileId(path) {
11011
11620
  return projectFileId(path);
11012
11621
  }
11622
+ /** Whether the overview is still being produced or finished. */
11623
+ const WorkflowOverviewStatusSchema = z.enum(["generating", "ready"]);
11624
+ /** One phase of the guided-tour overview. */
11625
+ const WorkflowPhaseSchema = z.object({
11626
+ id: z.string(),
11627
+ title: z.string(),
11628
+ copy: z.string(),
11629
+ nodeIds: z.array(z.string())
11630
+ });
11631
+ /** LLM-generated overview envelope. */
11632
+ const WorkspaceWorkflowOverviewSchema = z.object({
11633
+ status: WorkflowOverviewStatusSchema,
11634
+ summary: z.string(),
11635
+ phases: z.array(WorkflowPhaseSchema),
11636
+ hash: z.string(),
11637
+ generatedAt: z.string().nullable(),
11638
+ model: z.string()
11639
+ });
11640
+ /** Subset of JSON-Schema field types the dashboard form renders inline. */
11641
+ const WorkflowInputFieldTypeSchema = z.enum([
11642
+ "string",
11643
+ "number",
11644
+ "boolean",
11645
+ "enum",
11646
+ "object",
11647
+ "array"
11648
+ ]);
11649
+ const WorkflowInputFieldSchema = z.lazy(() => z.object({
11650
+ key: z.string(),
11651
+ label: z.string(),
11652
+ type: WorkflowInputFieldTypeSchema,
11653
+ required: z.boolean(),
11654
+ description: z.string().optional(),
11655
+ placeholder: z.string().optional(),
11656
+ options: z.array(z.string()).optional(),
11657
+ default: z.union([
11658
+ z.string(),
11659
+ z.number(),
11660
+ z.boolean()
11661
+ ]).optional(),
11662
+ children: z.array(WorkflowInputFieldSchema).optional(),
11663
+ format: z.string().optional()
11664
+ }));
11665
+ /** Flat, render-ready view of a workflow's input schema. */
11666
+ const WorkflowInputSchemaSchema = z.object({ fields: z.array(WorkflowInputFieldSchema) });
11667
+ /** A workflow's run-input contract plus its persisted values. */
11668
+ const WorkflowRunInputsSchema = z.object({
11669
+ schema: WorkflowInputSchemaSchema,
11670
+ values: z.record(z.string(), z.unknown()).nullable()
11671
+ });
11672
+ z.object({ runId: z.string() });
11673
+ /** Annotation lifecycle: "generating" while the LLM pass streams in, then "ready". */
11674
+ const WorkflowCanvasStatusSchema = z.enum(["generating", "ready"]);
11675
+ /** LLM-produced enrichment for a single skeleton node. */
11676
+ const WorkflowCanvasAnnotationSchema = z.object({
11677
+ label: z.string().optional(),
11678
+ description: z.string().optional()
11679
+ });
11680
+ /**
11681
+ * One token of a configured input value (inspector form). Mirrors the producer's
11682
+ * raw token kinds, with display fields filled by the platform join: `reference`
11683
+ * gains a human `sourceLabel`; `variable` may gain a `resolvedValue` when the name
11684
+ * matches a known top-level constant.
11685
+ */
11686
+ const WorkflowNodeValueTokenSchema = z.discriminatedUnion("kind", [
11687
+ z.object({
11688
+ kind: z.literal("text"),
11689
+ text: z.string()
11690
+ }),
11691
+ z.object({
11692
+ kind: z.literal("reference"),
11693
+ sourceNodeId: z.string().optional(),
11694
+ sourceLabel: z.string(),
11695
+ field: z.string().optional()
11696
+ }),
11697
+ z.object({
11698
+ kind: z.literal("variable"),
11699
+ text: z.string(),
11700
+ /** Concrete value when `text` resolves to a top-level literal constant. */
11701
+ resolvedValue: z.string().optional()
11702
+ }),
11703
+ z.object({
11704
+ kind: z.literal("call"),
11705
+ name: z.string()
11706
+ })
11707
+ ]);
11708
+ /** The configured value of one input at this call site. */
11709
+ const WorkflowNodeInputBindingSchema = z.object({
11710
+ tokens: z.array(WorkflowNodeValueTokenSchema),
11711
+ multiline: z.boolean().optional()
11712
+ });
11713
+ /** An inspector input with optional call-site binding. */
11714
+ const WorkflowCanvasNodeInputSchema = WorkflowInputFieldSchema.and(z.object({
11715
+ binding: WorkflowNodeInputBindingSchema.optional(),
11716
+ additional: z.boolean().optional()
11717
+ }));
11718
+ /** Authored, deterministic metadata for a single node. */
11719
+ const WorkflowCanvasNodeMetaSchema = z.object({
11720
+ kind: z.enum([
11721
+ "action",
11722
+ "agent",
11723
+ "workflow",
11724
+ "llm",
11725
+ "trigger",
11726
+ "boundary"
11727
+ ]),
11728
+ slug: z.string(),
11729
+ name: z.string(),
11730
+ description: z.string().optional(),
11731
+ appSlug: z.string().optional(),
11732
+ inputs: z.array(WorkflowCanvasNodeInputSchema),
11733
+ outputs: z.array(WorkflowInputFieldSchema),
11734
+ requiredApps: z.array(z.string()).optional(),
11735
+ model: z.string().optional(),
11736
+ toolCount: z.number().int().nonnegative().optional()
11737
+ });
11738
+ /** The workflow canvas envelope. */
11739
+ const WorkflowCanvasSchema = z.object({
11740
+ graph: WorkflowCanvasGraphSchema,
11741
+ nodeMetadata: z.record(z.string(), WorkflowCanvasNodeMetaSchema),
11742
+ annotations: z.record(z.string(), WorkflowCanvasAnnotationSchema),
11743
+ status: WorkflowCanvasStatusSchema,
11744
+ hash: z.string(),
11745
+ generatedAt: z.string().nullable(),
11746
+ model: z.string()
11747
+ });
11748
+ /** Per-node execution state for a single run. */
11749
+ const WorkflowCanvasNodeRunStatusSchema = z.enum([
11750
+ "pending",
11751
+ "running",
11752
+ "succeeded",
11753
+ "failed",
11754
+ "skipped"
11755
+ ]);
11756
+ const WorkflowCanvasNodeRunStateSchema = z.object({
11757
+ status: WorkflowCanvasNodeRunStatusSchema,
11758
+ iteration: z.object({
11759
+ index: z.number().int().nonnegative(),
11760
+ total: z.number().int().nonnegative()
11761
+ }).optional()
11762
+ });
11763
+ /** Overall lifecycle of a run as the canvas animates it. */
11764
+ const WorkflowCanvasRunStatusSchema = z.enum([
11765
+ "running",
11766
+ "succeeded",
11767
+ "failed",
11768
+ "canceled"
11769
+ ]);
11770
+ /** A run projected onto the canvas. */
11771
+ const WorkflowCanvasRunSchema = z.object({
11772
+ runId: z.string(),
11773
+ status: WorkflowCanvasRunStatusSchema,
11774
+ startedAt: z.string(),
11775
+ finishedAt: z.string().nullable(),
11776
+ nodeStates: z.record(z.string(), WorkflowCanvasNodeRunStateSchema)
11777
+ });
11778
+ /** Scope a credential instance lives in. */
11779
+ const WorkflowCredentialScopeSchema = z.enum([
11780
+ "organization",
11781
+ "project",
11782
+ "user"
11783
+ ]);
11784
+ /** The concrete credential instance a binding currently resolves to. */
11785
+ const WorkflowResolvedCredentialSchema = z.object({
11786
+ id: z.string(),
11787
+ name: z.string(),
11788
+ scope: WorkflowCredentialScopeSchema,
11789
+ appSlug: z.string().optional(),
11790
+ isDefault: z.boolean().optional(),
11791
+ projectId: z.string().optional(),
11792
+ projectName: z.string().optional()
11793
+ });
11794
+ /** Default model for the gated code-block annotation pass — cheap, same as trigger overviews. */
11795
+ const DEFAULT_WORKFLOW_CANVAS_MODEL = "deepseek/deepseek-v4-flash";
11796
+ z.record(z.string(), WorkflowCanvasAnnotationSchema);
11797
+ /** One opaque code-block the annotation pass should label, keyed by its canvas node id. */
11798
+ const WorkflowCanvasAnnotationCodeBlockSchema = z.object({
11799
+ nodeId: z.string(),
11800
+ /** The raw source snippet (the node's label) the LLM turns into human copy. */
11801
+ source: z.string()
11802
+ });
11803
+ /** Inputs the worker feeds the LLM for the gated code-block annotation pass. */
11804
+ const WorkflowCanvasAnnotationsInputSchema = z.object({
11805
+ workflowName: z.string(),
11806
+ workflowDescription: z.string().nullable(),
11807
+ codeBlocks: z.array(WorkflowCanvasAnnotationCodeBlockSchema)
11808
+ });
11809
+ z.object({
11810
+ workflowId: z.string(),
11811
+ projectId: z.string(),
11812
+ hash: z.string(),
11813
+ model: z.string(),
11814
+ input: WorkflowCanvasAnnotationsInputSchema
11815
+ });
11816
+ /** Default model for the workflow overview pass — cheap, same as the annotation/trigger passes. */
11817
+ const DEFAULT_WORKFLOW_OVERVIEW_MODEL = "deepseek/deepseek-v4-flash";
11818
+ /** One node as the overview LLM sees it (derived from the canvas node metadata + graph). */
11819
+ const WorkflowOverviewNodeSchema = z.object({
11820
+ nodeId: z.string(),
11821
+ label: z.string(),
11822
+ kind: z.string(),
11823
+ description: z.string().optional(),
11824
+ /** App/integration slug for steps imported from a `@keystrokehq/<app>` package. */
11825
+ appSlug: z.string().optional(),
11826
+ /** Authored input field keys (from the action/agent/workflow definition). */
11827
+ inputs: z.array(z.string()).optional(),
11828
+ /** Authored output field keys. */
11829
+ outputs: z.array(z.string()).optional(),
11830
+ /** Agent-only: the model the agent runs on. */
11831
+ model: z.string().optional(),
11832
+ /** Agent-only: number of tools available to the agent. */
11833
+ toolCount: z.number().int().nonnegative().optional()
11834
+ });
11835
+ /** Inputs the worker feeds the LLM to produce the workflow overview (summary + phases). */
11836
+ const WorkflowOverviewInputSchema = z.object({
11837
+ workflowName: z.string(),
11838
+ workflowDescription: z.string().nullable(),
11839
+ /** Display labels of the trigger sources upstream of the workflow (read-only context). */
11840
+ triggers: z.array(z.string()),
11841
+ nodes: z.array(WorkflowOverviewNodeSchema),
11842
+ /** The workflow's TypeScript source (best-effort; null when the deploy has no source snapshot). */
11843
+ source: z.string().nullable()
11844
+ });
11845
+ z.object({
11846
+ workflowId: z.string(),
11847
+ projectId: z.string(),
11848
+ hash: z.string(),
11849
+ model: z.string(),
11850
+ input: WorkflowOverviewInputSchema
11851
+ });
11852
+ const WorkflowCanvasCredentialBindingBaseSchema = z.object({
11853
+ credentialKey: z.string(),
11854
+ label: z.string(),
11855
+ appSlug: z.string().optional()
11856
+ });
11857
+ /** How one credential requirement on a step currently resolves. */
11858
+ const WorkflowCanvasCredentialBindingSchema = z.union([
11859
+ WorkflowCanvasCredentialBindingBaseSchema.extend({
11860
+ policy: z.enum([
11861
+ "project-default",
11862
+ "org-default",
11863
+ "assigned"
11864
+ ]),
11865
+ instance: WorkflowResolvedCredentialSchema
11866
+ }),
11867
+ WorkflowCanvasCredentialBindingBaseSchema.extend({
11868
+ policy: z.literal("scope-pinned"),
11869
+ pinnedScope: WorkflowCredentialScopeSchema,
11870
+ instance: WorkflowResolvedCredentialSchema
11871
+ }),
11872
+ WorkflowCanvasCredentialBindingBaseSchema.extend({
11873
+ policy: z.literal("unresolved"),
11874
+ reason: z.enum(["needs-selection", "missing"]),
11875
+ pinnedScope: WorkflowCredentialScopeSchema.optional()
11876
+ })
11877
+ ]);
11878
+ /** Live credential overlay: canvas node id → its step's credential bindings. */
11879
+ const WorkflowCanvasCredentialBindingsSchema = z.record(z.string(), z.array(WorkflowCanvasCredentialBindingSchema));
11880
+ function isObject(value) {
11881
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11882
+ }
11883
+ function titleCaseKey(key) {
11884
+ return key.replace(/([a-z0-9])([A-Z])/g, "$1 $2").split(/[-_/]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
11885
+ }
11886
+ function normalizeFieldType(schema) {
11887
+ const rawType = schema.type;
11888
+ if (Array.isArray(rawType)) {
11889
+ const primary = rawType.find((entry) => entry !== "null");
11890
+ if (typeof primary === "string") return normalizeFieldType({
11891
+ ...schema,
11892
+ type: primary
11893
+ });
11894
+ return null;
11895
+ }
11896
+ if (typeof rawType !== "string") return null;
11897
+ if (Array.isArray(schema.enum) && schema.enum.every((entry) => typeof entry === "string")) return "enum";
11898
+ switch (rawType) {
11899
+ case "string":
11900
+ case "number":
11901
+ case "integer": return rawType === "integer" ? "number" : rawType;
11902
+ case "boolean": return "boolean";
11903
+ case "object": return "object";
11904
+ case "array": return "array";
11905
+ default: return null;
11906
+ }
11907
+ }
11908
+ function normalizeField(key, schema, required) {
11909
+ const type = normalizeFieldType(schema);
11910
+ if (!type) return null;
11911
+ const field = {
11912
+ key,
11913
+ label: typeof schema.title === "string" ? schema.title : titleCaseKey(key),
11914
+ type,
11915
+ required,
11916
+ ...typeof schema.description === "string" ? { description: schema.description } : {},
11917
+ ...typeof schema.format === "string" ? { format: schema.format } : {}
11918
+ };
11919
+ if (type === "enum" && Array.isArray(schema.enum)) field.options = schema.enum.filter((entry) => typeof entry === "string");
11920
+ if (schema.default !== void 0 && (typeof schema.default === "string" || typeof schema.default === "number" || typeof schema.default === "boolean")) field.default = schema.default;
11921
+ if (type === "object" && isObject(schema.properties)) {
11922
+ const childRequired = Array.isArray(schema.required) ? schema.required.filter((entry) => typeof entry === "string") : [];
11923
+ field.children = Object.entries(schema.properties).flatMap(([childKey, childSchema]) => {
11924
+ if (!isObject(childSchema)) return [];
11925
+ const child = normalizeField(childKey, childSchema, childRequired.includes(childKey));
11926
+ return child ? [child] : [];
11927
+ });
11928
+ }
11929
+ if (type === "array" && isObject(schema.items)) {
11930
+ const item = normalizeField("item", schema.items, false);
11931
+ if (item) field.children = [item];
11932
+ }
11933
+ return field;
11934
+ }
11935
+ /** Normalize a workflow manifest JSON Schema into the dashboard run-input form shape. */
11936
+ function jsonSchemaToWorkflowInputSchema(requestSchema) {
11937
+ if (!isObject(requestSchema)) return { fields: [] };
11938
+ const properties = isObject(requestSchema.properties) ? requestSchema.properties : {};
11939
+ const required = Array.isArray(requestSchema.required) ? requestSchema.required.filter((entry) => typeof entry === "string") : [];
11940
+ return { fields: Object.entries(properties).flatMap(([key, propertySchema]) => {
11941
+ if (!isObject(propertySchema)) return [];
11942
+ const field = normalizeField(key, propertySchema, required.includes(key));
11943
+ return field ? [field] : [];
11944
+ }) };
11945
+ }
11946
+ function isEmpty(value) {
11947
+ return value === void 0 || value === null || value === "";
11948
+ }
11949
+ function validateFieldValue(field, value) {
11950
+ if (field.required && isEmpty(value)) return "Required";
11951
+ if (isEmpty(value)) return null;
11952
+ switch (field.type) {
11953
+ case "number":
11954
+ if (typeof value !== "number" && Number.isNaN(Number(value))) return "Must be a number";
11955
+ return null;
11956
+ case "boolean":
11957
+ if (typeof value !== "boolean") return "Must be a boolean";
11958
+ return null;
11959
+ case "enum":
11960
+ if (typeof value !== "string" || field.options && !field.options.includes(value)) return "Invalid option";
11961
+ return null;
11962
+ default: return null;
11963
+ }
11964
+ }
11965
+ /** Validate a run-input payload against the normalized schema (authoritative on save). */
11966
+ function validateWorkflowRunInputValues(schema, values) {
11967
+ const allowedKeys = new Set(schema.fields.map((field) => field.key));
11968
+ for (const key of Object.keys(values)) if (!allowedKeys.has(key)) return {
11969
+ ok: false,
11970
+ error: `Unknown field "${key}"`
11971
+ };
11972
+ for (const field of schema.fields) {
11973
+ const message = validateFieldValue(field, values[field.key]);
11974
+ if (message) return {
11975
+ ok: false,
11976
+ error: `${field.key}: ${message}`
11977
+ };
11978
+ }
11979
+ return { ok: true };
11980
+ }
11981
+ const WorkflowRunInputsPutBodySchema = z.record(z.string(), z.unknown());
11013
11982
  function mapOrganization(row) {
11014
11983
  return OrganizationSchema.parse({
11015
11984
  id: row.id,
@@ -11110,8 +12079,8 @@ function mapProjectDeployment(row) {
11110
12079
  const zodSchema$2 = z.custom((v) => v instanceof z.ZodType, "must be a Zod schema");
11111
12080
  z.object({
11112
12081
  slug: z.string().trim().min(1),
11113
- name: z.string().optional(),
11114
- description: z.string().optional(),
12082
+ name: requiredDisplayTextSchema,
12083
+ description: requiredDisplayTextSchema,
11115
12084
  input: zodSchema$2,
11116
12085
  output: zodSchema$2,
11117
12086
  credentials: z.array(credentialInputSchema).optional(),
@@ -11131,6 +12100,26 @@ function registerWorkflowRunGetter(fn) {
11131
12100
  }
11132
12101
  new AsyncLocalStorage();
11133
12102
  //#endregion
12103
+ //#region ../../packages/credentials/dist/store-4At2Wnk9.mjs
12104
+ function normalizeRow(row) {
12105
+ const { projectId: _projectId, ...rest } = row;
12106
+ return rest;
12107
+ }
12108
+ async function listCredentialAssignmentsByTarget$1(options) {
12109
+ return (await listCredentialAssignmentsByTarget(options)).map(normalizeRow);
12110
+ }
12111
+ function normalizeLocalRow(row) {
12112
+ const { projectId: _projectId, ...rest } = row;
12113
+ return rest;
12114
+ }
12115
+ async function selectCredentialInstanceById$1(id) {
12116
+ const row = await selectCredentialInstanceById(id);
12117
+ return row ? normalizeLocalRow(row) : void 0;
12118
+ }
12119
+ async function selectCredentialInstancesForScope$1(appSlug, scopeType, scopeId) {
12120
+ return (await selectCredentialInstancesForScope(appSlug, scopeType, scopeId)).map(normalizeLocalRow);
12121
+ }
12122
+ //#endregion
11134
12123
  //#region ../../packages/secrets/dist/index.mjs
11135
12124
  const ALGORITHM = "aes-256-gcm";
11136
12125
  const IV_LENGTH = 12;
@@ -29532,6 +30521,130 @@ var import_dist$1 = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exp
29532
30521
  exports.visit = visit.visit;
29533
30522
  exports.visitAsync = visit.visitAsync;
29534
30523
  })))(), 1);
30524
+ const EMPTY_ASSIGNMENT_SET = {
30525
+ byConsumer: {},
30526
+ wildcard: {}
30527
+ };
30528
+ function selectAssignedInstanceId(assignments, consumerId, credentialSlug) {
30529
+ if (!assignments) return;
30530
+ if (consumerId) {
30531
+ const specific = assignments.byConsumer[consumerId]?.[credentialSlug];
30532
+ if (specific) return specific;
30533
+ }
30534
+ return assignments.wildcard[credentialSlug];
30535
+ }
30536
+ function buildAssignmentSet(rows) {
30537
+ const byConsumer = {};
30538
+ const wildcard = {};
30539
+ for (const row of rows) {
30540
+ if (row.consumerId === "*") {
30541
+ wildcard[row.credentialSlug] = row.instanceId;
30542
+ continue;
30543
+ }
30544
+ const bucket = byConsumer[row.consumerId] ?? {};
30545
+ bucket[row.credentialSlug] = row.instanceId;
30546
+ byConsumer[row.consumerId] = bucket;
30547
+ }
30548
+ return {
30549
+ byConsumer,
30550
+ wildcard
30551
+ };
30552
+ }
30553
+ async function loadCredentialAssignments(options) {
30554
+ if (!isDatabaseInitialized()) return EMPTY_ASSIGNMENT_SET;
30555
+ return buildAssignmentSet(await listCredentialAssignmentsByTarget$1(options));
30556
+ }
30557
+ async function withCredentialAssignments(context, options) {
30558
+ const assignments = await loadCredentialAssignments(options);
30559
+ return {
30560
+ ...context,
30561
+ assignments
30562
+ };
30563
+ }
30564
+ function toSummary(row) {
30565
+ return {
30566
+ id: row.id,
30567
+ appSlug: row.appSlug,
30568
+ name: row.name,
30569
+ label: row.label,
30570
+ scopeType: row.scopeType,
30571
+ scopeId: row.scopeId,
30572
+ isDefault: row.isDefault
30573
+ };
30574
+ }
30575
+ /** Pick the single instance for a scope: the only one, or the unique default; else ambiguous. */
30576
+ function pickInstance$1(rows) {
30577
+ if (rows.length === 0) return { kind: "none" };
30578
+ if (rows.length === 1) return {
30579
+ kind: "row",
30580
+ row: rows[0]
30581
+ };
30582
+ const defaults = rows.filter((row) => row.isDefault);
30583
+ if (defaults.length === 1) return {
30584
+ kind: "row",
30585
+ row: defaults[0]
30586
+ };
30587
+ return { kind: "needs-selection" };
30588
+ }
30589
+ function scopeIdFor(scope, context, orgId) {
30590
+ switch (scope) {
30591
+ case "organization": return orgId;
30592
+ case "project": return context.projectId;
30593
+ case "user": return context.userId;
30594
+ }
30595
+ }
30596
+ async function describeCredentialBinding(options) {
30597
+ const { key, scope, consumerId, context } = options;
30598
+ const orgId = context.orgId ?? getServerTenantScopeId();
30599
+ const assignedId = selectAssignedInstanceId(context.assignments, consumerId, key);
30600
+ if (assignedId) {
30601
+ const row = await selectCredentialInstanceById$1(assignedId);
30602
+ if (row && row.appSlug === key) return {
30603
+ policy: "assigned",
30604
+ row: toSummary(row)
30605
+ };
30606
+ }
30607
+ if (scope) {
30608
+ const scopeId = scopeIdFor(scope, context, orgId);
30609
+ const picked = scopeId ? pickInstance$1(await selectCredentialInstancesForScope$1(key, scope, scopeId)) : { kind: "none" };
30610
+ if (picked.kind === "row") return {
30611
+ policy: "scope-pinned",
30612
+ pinnedScope: scope,
30613
+ row: toSummary(picked.row)
30614
+ };
30615
+ return {
30616
+ policy: "unresolved",
30617
+ reason: picked.kind === "needs-selection" ? "needs-selection" : "missing",
30618
+ pinnedScope: scope
30619
+ };
30620
+ }
30621
+ if (context.projectId) {
30622
+ const picked = pickInstance$1(await selectCredentialInstancesForScope$1(key, "project", context.projectId));
30623
+ if (picked.kind === "row") return {
30624
+ policy: "project-default",
30625
+ row: toSummary(picked.row)
30626
+ };
30627
+ if (picked.kind === "needs-selection") return {
30628
+ policy: "unresolved",
30629
+ reason: "needs-selection"
30630
+ };
30631
+ }
30632
+ if (orgId) {
30633
+ const picked = pickInstance$1(await selectCredentialInstancesForScope$1(key, "organization", orgId));
30634
+ if (picked.kind === "row") return {
30635
+ policy: "org-default",
30636
+ row: toSummary(picked.row)
30637
+ };
30638
+ if (picked.kind === "needs-selection") return {
30639
+ policy: "unresolved",
30640
+ reason: "needs-selection"
30641
+ };
30642
+ }
30643
+ return {
30644
+ policy: "unresolved",
30645
+ reason: "missing"
30646
+ };
30647
+ }
29535
30648
  function encodeOAuthState(payload) {
29536
30649
  return encryptCredentialPayload(JSON.stringify(payload));
29537
30650
  }
@@ -29804,8 +30917,8 @@ const zodSchema$1 = z.custom((v) => v instanceof z.ZodType, "must be a Zod schem
29804
30917
  /** Runtime validation for an unbranded workflow definition. */
29805
30918
  const workflowCoreSchema = z.object({
29806
30919
  slug: z.string().trim().min(1),
29807
- name: z.string().optional(),
29808
- description: z.string().optional(),
30920
+ name: requiredDisplayTextSchema,
30921
+ description: requiredDisplayTextSchema,
29809
30922
  subscription: z.object({ mode: z.enum(["system", "subscribable"]).optional() }).optional(),
29810
30923
  input: zodSchema$1,
29811
30924
  output: zodSchema$1,
@@ -29821,6 +30934,7 @@ function isWorkflow(value) {
29821
30934
  if (!(WORKFLOW in value) || value[WORKFLOW] !== true) return false;
29822
30935
  return workflowCoreSchema.safeParse(value).success;
29823
30936
  }
30937
+ new AsyncLocalStorage();
29824
30938
  const storage = new AsyncLocalStorage();
29825
30939
  registerWorkflowRunGetter(() => {
29826
30940
  const store = storage.getStore();
@@ -29883,11 +30997,12 @@ function normalizeLegacySlugFields(value) {
29883
30997
  return next;
29884
30998
  }
29885
30999
  const slugField = z.string().trim().min(1);
29886
- const optionalTextField = z.string().optional();
31000
+ const requiredTextField = z.string().trim().min(1);
31001
+ const optionalTextField = z.string().trim().min(1).optional();
29887
31002
  const baseSourceShape = {
29888
31003
  slug: slugField,
29889
- name: optionalTextField,
29890
- description: optionalTextField,
31004
+ name: requiredTextField,
31005
+ description: requiredTextField,
29891
31006
  attach: z.function()
29892
31007
  };
29893
31008
  const webhookSourceSchema = z.object({
@@ -43623,6 +44738,6 @@ function minioStoragePlugin(options = {}) {
43623
44738
  };
43624
44739
  }
43625
44740
  //#endregion
43626
- export { CreateProjectArtifactResponseSchema as $, mapProjectMember as $n, ProjectSlugAvailabilityResponseSchema as $t, PublicHttpUrlError as A, UserPreferencesPatchSchema as An, ListProjectMembersResponseSchema as At, AgentSummarySchema as B, agentMemoryFileId as Bn, PROJECT_SLUG_TAKEN_MESSAGE as Bt, defaultSchedulerPlugin as C, UpdateProjectMemberResponseSchema as Cn, ListAppsResponseSchema as Ct, discoverGraphqlApp as D, UploadProjectSourceResponseSchema as Dn, ListOrganizationsResponseSchema as Dt, decodeOAuthState as E, UploadProjectSourceManifestRequestSchema as En, ListOrganizationMembersResponseSchema as Et, AcceptOrganizationInvitationResponseSchema as F, WorkspaceTriggerDetailSchema as Fn, OpenApiDiscoverRequestSchema as Ft, CreateApiKeyRequestSchema as G, displayCredentialAppName as Gn, PresignProjectSourceRequestSchema as Gt, AppSlugAvailabilityQuerySchema as H, buildCredentialInstanceLabel as Hn, PresignChatAttachmentResponseSchema as Ht, ActiveOrganizationResponseSchema as I, WorkspaceTriggerFileSchema as In, OpenApiDiscoverResponseSchema as It, CreateCredentialsResponseSchema as J, mapOrganizationInvitation as Jn, PresignUserAvatarResponseSchema as Jt, CreateApiKeyResponseSchema as K, isAllowedChatAttachmentMediaType as Kn, PresignProjectSourceResponseSchema as Kt, AgentMemoryFileSummarySchema as L, WorkspaceTriggerListResponseSchema as Ln, OrganizationSidebarBrandingPatchSchema as Lt, readCredentialInstanceSecret as M, WorkflowSummaryDetailResponseSchema as Mn, ListProjectsResponseSchema as Mt, setCredentialInstanceSecret as N, WorkflowSummaryListResponseSchema as Nn, McpDiscoverRequestSchema as Nt, discoverMcpApp as O, UserAvatarPatchSchema as On, ListProjectDeploymentsResponseSchema as Ot, ACTIVE_ORG_HEADER as P, WorkflowSummarySchema as Pn, McpDiscoverResponseSchema as Pt, CreateOrganizationResponseSchema as Q, mapProjectDeployment as Qn, ProjectSlugAvailabilityQuerySchema as Qt, AgentSummaryDetailResponseSchema as R, WorkspaceTriggerOverviewSchema as Rn, OrganizationSidebarBrandingSchema as Rt, createJobQueue as S, UpdateProjectMemberRequestSchema as Sn, ListApiKeysResponseSchema as St, completeMcpOAuthConnect as T, UpdateProjectSettingsRequestSchema as Tn, ListOrganizationInvitationsResponseSchema as Tt, AppSlugAvailabilityResponseSchema as U, chatAttachmentExtension as Un, PresignOrgLogoRequestSchema as Ut, AgentWorkspaceFileSummarySchema as V, agentWorkspaceFileId as Vn, PresignChatAttachmentRequestSchema as Vt, CompleteProjectArtifactResponseSchema as W, deriveCredentialInstanceSlug as Wn, PresignOrgLogoResponseSchema as Wt, CreateCustomAppResponseSchema as X, mapProject as Xn, ProjectResponseSchema as Xt, CreateCustomAppRequestSchema as Y, mapOrganizationMember as Yn, ProjectReachabilityResponseSchema as Yt, CreateOrganizationRequestSchema as Z, mapProjectArtifact as Zn, ProjectSettingsResponseSchema as Zt, orgLogoStorageKey as _, TriggerRunListQuerySchema as _n, __toESM as _r, InviteOrganizationMembersResponseSchema as _t, extractRouteManifestFromArtifact as a, SkillSummaryListResponseSchema as an, organizationSlugErrorCodeFromMessage as ar, DownloadActiveProjectArtifactResponseSchema as at, publicKeystrokeAssetsObjectUrl as b, UpdateOrganizationMemberResponseSchema as bn, ListAgentMemoryFilesResponseSchema as bt, isKeystrokeAssetsOrgLogoPublicUrl as c, SlugAvailabilityResponseSchema as cn, projectFileId as cr, GetCredentialResponseSchema as ct, isStorageNotFoundError as d, StoredProjectSourceManifestSchema as dn, validateCredentialValueAgainstFields as dr, GraphqlDiscoverResponseSchema as dt, ProjectSourceResourcesSchema as en, mapProjectSettings as er, CreateProjectRequestSchema as et, isUserAvatarStorageKey as f, SubmitMarketingContactRequestSchema as fn, validationErrorResponse as fr, HistoryRunCancelResponseSchema as ft, minioStoragePlugin as g, TriggerAttachmentUpdateRequestSchema as gn, __require as gr, InviteOrganizationMembersRequestSchema as gt, loadProjectSourceFiles as h, SubmitTeamRequestResponseSchema as hn, __commonJSMin as hr, HistoryRunListResponseSchema as ht, ensureKeystrokeAssetsBucket as i, SkillSummaryDetailResponseSchema as in, organizationInvitationAcceptPath as ir, DeclineOrganizationInvitationResponseSchema as it, deleteCredentialInstanceSecret as j, UserPreferencesSchema as jn, ListProjectMetricsResponseSchema as jt, discoverOpenApiApp as k, UserAvatarSchema as kn, ListProjectFilesResponseSchema as kt, isOrgLogoStorageKey as l, StartMcpOAuthConnectionInputSchema as ln, resolveExternalPlatformOrigin as lr, GetCustomAppResponseSchema as lt, keystrokeAssetsOrgLogoKeyFromPublicUrl as m, SubmitTeamRequestRequestSchema as mn, pingProjectTarget as mr, HistoryRunListQuerySchema as mt, chatAttachmentStorageKey as n, RecentResourceListResponseSchema as nn, mergeUserPreferences as nr, DEFAULT_CLOUD_PLATFORM_ORIGIN as nt, isChatAttachmentStorageKey as o, SkillSummarySchema as on, parseAppSlug as or, DownloadActiveProjectSourceResponseSchema as ot, keystrokeAssetsAvatarKeyFromPublicUrl as p, SubmitMarketingContactResponseSchema as pn, defaultHostingPlugin as pr, HistoryRunDetailResponseSchema as pt, CreateCredentialsRequestSchema as q, listenPortFromPublicUrl as qn, PresignUserAvatarRequestSchema as qt, createAssetsStorageClient as r, RecentResourceSchema as rn, normalizeUserPreferences as rr, DEFAULT_TRIGGER_OVERVIEW_MODEL as rt, isKeystrokeAssetsAvatarPublicUrl as s, SlugAvailabilityQuerySchema as sn, parseStoredRouteManifest as sr, ErrorResponseSchema as st, RouteManifestNotFoundError as t, PublicModelsResponseSchema as tn, mapUserOrganization as tr, CreateProjectResponseSchema as tt, isStorageBucketNotFoundError as u, StartMcpOAuthConnectionResultSchema as un, resolveUniqueCredentialInstanceLabel as ur, GraphqlDiscoverRequestSchema as ut, projectArtifactKey as v, UpdateCredentialRequestSchema as vn, InviteProjectMembersRequestSchema as vt, beginMcpOAuthConnect as w, UpdateProjectRequestSchema as wn, ListCredentialsResponseSchema as wt, userAvatarStorageKey as x, UpdateOrganizationRequestSchema as xn, ListAgentWorkspaceFilesResponseSchema as xt, projectSourceBlobKey as y, UpdateOrganizationMemberRequestSchema as yn, InviteProjectMembersResponseSchema as yt, AgentSummaryListResponseSchema as z, WorkspaceTriggerRunListResponseSchema as zn, PLATFORM_RESOURCE_UNSUPPORTED_TEXT as zt };
44741
+ export { CreateOrganizationRequestSchema as $, chatAttachmentExtension as $n, ProjectReachabilityResponseSchema as $t, discoverOpenApiApp as A, UploadProjectSourceManifestRequestSchema as An, ListOrganizationMembersResponseSchema as At, AgentSummaryDetailResponseSchema as B, WorkflowRunInputsSchema as Bn, OpenApiDiscoverResponseSchema as Bt, defaultSchedulerPlugin as C, UpdateOrganizationMemberRequestSchema as Cn, validateWorkflowRunInputValues as Cr, InviteProjectMembersResponseSchema as Ct, describeCredentialBinding as D, UpdateProjectMemberResponseSchema as Dn, __commonJSMin as Dr, ListAppsResponseSchema as Dt, decodeOAuthState as E, UpdateProjectMemberRequestSchema as En, pingProjectTarget as Er, ListApiKeysResponseSchema as Et, setCredentialInstanceSecret as F, UserPreferencesSchema as Fn, ListProjectMetricsResponseSchema as Ft, AppSlugAvailabilityResponseSchema as G, WorkspaceTriggerFileSchema as Gn, PresignChatAttachmentRequestSchema as Gt, AgentSummarySchema as H, WorkflowSummaryListResponseSchema as Hn, OrganizationSidebarBrandingSchema as Ht, ACTIVE_ORG_HEADER as I, WorkflowCanvasCredentialBindingsSchema as In, ListProjectsResponseSchema as It, CreateApiKeyResponseSchema as J, WorkspaceTriggerRunListResponseSchema as Jn, PresignOrgLogoResponseSchema as Jt, CompleteProjectArtifactResponseSchema as K, WorkspaceTriggerListResponseSchema as Kn, PresignChatAttachmentResponseSchema as Kt, AcceptOrganizationInvitationResponseSchema as L, WorkflowCanvasRunSchema as Ln, McpDiscoverRequestSchema as Lt, PublicHttpUrlError as M, UserAvatarPatchSchema as Mn, ListProjectDeploymentsResponseSchema as Mt, deleteCredentialInstanceSecret as N, UserAvatarSchema as Nn, ListProjectFilesResponseSchema as Nt, discoverGraphqlApp as O, UpdateProjectRequestSchema as On, __require as Or, ListCredentialsResponseSchema as Ot, readCredentialInstanceSecret as P, UserPreferencesPatchSchema as Pn, ListProjectMembersResponseSchema as Pt, CreateCustomAppResponseSchema as Q, buildCredentialInstanceLabel as Qn, PresignUserAvatarResponseSchema as Qt, ActiveOrganizationResponseSchema as R, WorkflowCanvasSchema as Rn, McpDiscoverResponseSchema as Rt, createJobQueue as S, UpdateCredentialRequestSchema as Sn, validateCredentialValueAgainstFields as Sr, InviteProjectMembersRequestSchema as St, completeMcpOAuthConnect as T, UpdateOrganizationRequestSchema as Tn, defaultHostingPlugin as Tr, ListAgentWorkspaceFilesResponseSchema as Tt, AgentWorkspaceFileSummarySchema as U, WorkflowSummarySchema as Un, PLATFORM_RESOURCE_UNSUPPORTED_TEXT as Ut, AgentSummaryListResponseSchema as V, WorkflowSummaryDetailResponseSchema as Vn, OrganizationSidebarBrandingPatchSchema as Vt, AppSlugAvailabilityQuerySchema as W, WorkspaceTriggerDetailSchema as Wn, PROJECT_SLUG_TAKEN_MESSAGE as Wt, CreateCredentialsResponseSchema as X, agentMemoryFileId as Xn, PresignProjectSourceResponseSchema as Xt, CreateCredentialsRequestSchema as Y, WorkspaceWorkflowOverviewSchema as Yn, PresignProjectSourceRequestSchema as Yt, CreateCustomAppRequestSchema as Z, agentWorkspaceFileId as Zn, PresignUserAvatarRequestSchema as Zt, orgLogoStorageKey as _, SubmitMarketingContactResponseSchema as _n, parseAppSlug as _r, HistoryRunDetailResponseSchema as _t, extractRouteManifestFromArtifact as a, PublicModelsResponseSchema as an, mapOrganizationInvitation as ar, DEFAULT_TRIGGER_OVERVIEW_MODEL as at, publicKeystrokeAssetsObjectUrl as b, TriggerAttachmentUpdateRequestSchema as bn, resolveExternalPlatformOrigin as br, InviteOrganizationMembersRequestSchema as bt, isKeystrokeAssetsOrgLogoPublicUrl as c, SkillSummaryDetailResponseSchema as cn, mapProjectArtifact as cr, DeclineOrganizationInvitationResponseSchema as ct, isStorageNotFoundError as d, SlugAvailabilityQuerySchema as dn, mapProjectSettings as dr, ErrorResponseSchema as dt, ProjectResponseSchema as en, deriveCredentialInstanceSlug as er, CreateOrganizationResponseSchema as et, isUserAvatarStorageKey as f, SlugAvailabilityResponseSchema as fn, mapUserOrganization as fr, GetCredentialResponseSchema as ft, minioStoragePlugin as g, SubmitMarketingContactRequestSchema as gn, organizationSlugErrorCodeFromMessage as gr, HistoryRunCancelResponseSchema as gt, loadProjectSourceFiles as h, StoredProjectSourceManifestSchema as hn, organizationInvitationAcceptPath as hr, GraphqlDiscoverResponseSchema as ht, ensureKeystrokeAssetsBucket as i, ProjectSourceResourcesSchema as in, listenPortFromPublicUrl as ir, DEFAULT_CLOUD_PLATFORM_ORIGIN as it, withCredentialAssignments as j, UploadProjectSourceResponseSchema as jn, ListOrganizationsResponseSchema as jt, discoverMcpApp as k, UpdateProjectSettingsRequestSchema as kn, __toESM as kr, ListOrganizationInvitationsResponseSchema as kt, isOrgLogoStorageKey as l, SkillSummaryListResponseSchema as ln, mapProjectDeployment as lr, DownloadActiveProjectArtifactResponseSchema as lt, keystrokeAssetsOrgLogoKeyFromPublicUrl as m, StartMcpOAuthConnectionResultSchema as mn, normalizeUserPreferences as mr, GraphqlDiscoverRequestSchema as mt, chatAttachmentStorageKey as n, ProjectSlugAvailabilityQuerySchema as nn, isAllowedChatAttachmentMediaType as nr, CreateProjectRequestSchema as nt, isChatAttachmentStorageKey as o, RecentResourceListResponseSchema as on, mapOrganizationMember as or, DEFAULT_WORKFLOW_CANVAS_MODEL as ot, keystrokeAssetsAvatarKeyFromPublicUrl as p, StartMcpOAuthConnectionInputSchema as pn, mergeUserPreferences as pr, GetCustomAppResponseSchema as pt, CreateApiKeyRequestSchema as q, WorkspaceTriggerOverviewSchema as qn, PresignOrgLogoRequestSchema as qt, createAssetsStorageClient as r, ProjectSlugAvailabilityResponseSchema as rn, jsonSchemaToWorkflowInputSchema as rr, CreateProjectResponseSchema as rt, isKeystrokeAssetsAvatarPublicUrl as s, RecentResourceSchema as sn, mapProject as sr, DEFAULT_WORKFLOW_OVERVIEW_MODEL as st, RouteManifestNotFoundError as t, ProjectSettingsResponseSchema as tn, displayCredentialAppName as tr, CreateProjectArtifactResponseSchema as tt, isStorageBucketNotFoundError as u, SkillSummarySchema as un, mapProjectMember as ur, DownloadActiveProjectSourceResponseSchema as ut, projectArtifactKey as v, SubmitTeamRequestRequestSchema as vn, parseStoredRouteManifest as vr, HistoryRunListQuerySchema as vt, beginMcpOAuthConnect as w, UpdateOrganizationMemberResponseSchema as wn, validationErrorResponse as wr, ListAgentMemoryFilesResponseSchema as wt, userAvatarStorageKey as x, TriggerRunListQuerySchema as xn, resolveUniqueCredentialInstanceLabel as xr, InviteOrganizationMembersResponseSchema as xt, projectSourceBlobKey as y, SubmitTeamRequestResponseSchema as yn, projectFileId as yr, HistoryRunListResponseSchema as yt, AgentMemoryFileSummarySchema as z, WorkflowRunInputsPutBodySchema as zn, OpenApiDiscoverRequestSchema as zt };
43627
44742
 
43628
- //# sourceMappingURL=dist-DEUmH1sy.mjs.map
44743
+ //# sourceMappingURL=dist-Dfoa0fsU.mjs.map