@keystrokehq/platform 0.1.25 → 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 +3 -3
  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
@@ -183,7 +183,7 @@ function slugify(input) {
183
183
  return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
184
184
  }
185
185
  const captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {};
186
- function isObject(data) {
186
+ function isObject$3(data) {
187
187
  return typeof data === "object" && data !== null && !Array.isArray(data);
188
188
  }
189
189
  const allowsEval = /* @__PURE__ */ cached(() => {
@@ -197,12 +197,12 @@ const allowsEval = /* @__PURE__ */ cached(() => {
197
197
  }
198
198
  });
199
199
  function isPlainObject$1(o) {
200
- if (isObject(o) === false) return false;
200
+ if (isObject$3(o) === false) return false;
201
201
  const ctor = o.constructor;
202
202
  if (ctor === void 0) return true;
203
203
  if (typeof ctor !== "function") return true;
204
204
  const prot = ctor.prototype;
205
- if (isObject(prot) === false) return false;
205
+ if (isObject$3(prot) === false) return false;
206
206
  if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) return false;
207
207
  return true;
208
208
  }
@@ -1590,7 +1590,7 @@ const $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
1590
1590
  }
1591
1591
  return propValues;
1592
1592
  });
1593
- const isObject$1 = isObject;
1593
+ const isObject$1 = isObject$3;
1594
1594
  const catchall = def.catchall;
1595
1595
  let value;
1596
1596
  inst._zod.parse = (payload, ctx) => {
@@ -1719,7 +1719,7 @@ const $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def)
1719
1719
  return (payload, ctx) => fn(shape, payload, ctx);
1720
1720
  };
1721
1721
  let fastpass;
1722
- const isObject$2 = isObject;
1722
+ const isObject$2 = isObject$3;
1723
1723
  const jit = !globalConfig.jitless;
1724
1724
  const fastEnabled = jit && allowsEval.value;
1725
1725
  const catchall = def.catchall;
@@ -1831,7 +1831,7 @@ const $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUn
1831
1831
  });
1832
1832
  inst._zod.parse = (payload, ctx) => {
1833
1833
  const input = payload.value;
1834
- if (!isObject(input)) {
1834
+ if (!isObject$3(input)) {
1835
1835
  payload.issues.push({
1836
1836
  code: "invalid_type",
1837
1837
  expected: "object",
@@ -2302,6 +2302,21 @@ function handleReadonlyResult(payload) {
2302
2302
  payload.value = Object.freeze(payload.value);
2303
2303
  return payload;
2304
2304
  }
2305
+ const $ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => {
2306
+ $ZodType.init(inst, def);
2307
+ defineLazy(inst._zod, "innerType", () => {
2308
+ const d = def;
2309
+ if (!d._cachedInner) d._cachedInner = def.getter();
2310
+ return d._cachedInner;
2311
+ });
2312
+ defineLazy(inst._zod, "pattern", () => inst._zod.innerType?._zod?.pattern);
2313
+ defineLazy(inst._zod, "propValues", () => inst._zod.innerType?._zod?.propValues);
2314
+ defineLazy(inst._zod, "optin", () => inst._zod.innerType?._zod?.optin ?? void 0);
2315
+ defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? void 0);
2316
+ inst._zod.parse = (payload, ctx) => {
2317
+ return inst._zod.innerType._zod.run(payload, ctx);
2318
+ };
2319
+ });
2305
2320
  const $ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => {
2306
2321
  $ZodCheck.init(inst, def);
2307
2322
  $ZodType.init(inst, def);
@@ -3436,6 +3451,12 @@ const optionalProcessor = (schema, ctx, _json, params) => {
3436
3451
  const seen = ctx.seen.get(schema);
3437
3452
  seen.ref = def.innerType;
3438
3453
  };
3454
+ const lazyProcessor = (schema, ctx, _json, params) => {
3455
+ const innerType = schema._zod.innerType;
3456
+ process$1(innerType, ctx, params);
3457
+ const seen = ctx.seen.get(schema);
3458
+ seen.ref = innerType;
3459
+ };
3439
3460
  const ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => {
3440
3461
  $ZodISODateTime.init(inst, def);
3441
3462
  ZodStringFormat.init(inst, def);
@@ -4291,6 +4312,18 @@ function readonly(innerType) {
4291
4312
  innerType
4292
4313
  });
4293
4314
  }
4315
+ const ZodLazy = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => {
4316
+ $ZodLazy.init(inst, def);
4317
+ ZodType.init(inst, def);
4318
+ inst._zod.processJSONSchema = (ctx, json, params) => lazyProcessor(inst, ctx, json, params);
4319
+ inst.unwrap = () => inst._zod.def.getter();
4320
+ });
4321
+ function lazy(getter) {
4322
+ return new ZodLazy({
4323
+ type: "lazy",
4324
+ getter
4325
+ });
4326
+ }
4294
4327
  const ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => {
4295
4328
  $ZodCustom.init(inst, def);
4296
4329
  ZodType.init(inst, def);
@@ -4962,10 +4995,244 @@ const AppSlugSchema$1 = ProjectSlugSchema$1;
4962
4995
  function resolveExplicitPublicPlatformOrigin$1(env = process.env) {
4963
4996
  return env.PUBLIC_PLATFORM_URL?.replace(/\/$/, "") || void 0;
4964
4997
  }
4998
+ /** How a credential instance is stored (`credential_instances.auth_kind`). */
4999
+ const CredentialAuthKindSchema$1 = _enum([
5000
+ "api_key",
5001
+ "oauth_managed",
5002
+ "keystroke"
5003
+ ]);
5004
+ /**
5005
+ * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
5006
+ * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
5007
+ * resolver tries the project default, then the org default, then throws.
5008
+ */
5009
+ const CredentialScopeTypeSchema$1 = _enum([
5010
+ "organization",
5011
+ "project",
5012
+ "user"
5013
+ ]);
5014
+ CredentialAuthKindSchema$1.options;
5015
+ CredentialScopeTypeSchema$1.options;
5016
+ /** Non-empty human-readable label or description (trimmed). */
5017
+ const requiredDisplayTextSchema$1 = string().trim().min(1);
5018
+ /**
5019
+ * Structural workflow-canvas graph contract.
5020
+ *
5021
+ * This is the deterministic skeleton the deploy-time AST producer emits for a
5022
+ * workflow (nodes + edges), plus the manifest-derived trigger-source nodes. It
5023
+ * is the single source of truth shared by:
5024
+ * - the AST producer (emits it at deploy, stored with the manifest),
5025
+ * - the platform route that serves the canvas, and
5026
+ * - the SDK / web client that renders it (React Flow).
5027
+ *
5028
+ * Only the structural skeleton lives here. The LLM enrichment + run-overlay
5029
+ * envelope types live in `workflow-canvas-envelope.ts`; the SDK re-exports them.
5030
+ * See WORKFLOW.md (§4 grammar, §8 node ids, §9 caching).
5031
+ */
5032
+ /**
5033
+ * Canvas node taxonomy — the single discriminator for every canvas node. The
5034
+ * client derives the React Flow component, icon, and per-node treatment from it
5035
+ * (no parallel `type` / `data.kind` fields), and the producer + fixtures emit it
5036
+ * directly, so the structural contract can never silently diverge across the
5037
+ * deploy → render boundary.
5038
+ * - Boundaries: `entry` (Start, owns input) · `exit` (Output, owns output) ·
5039
+ * `error` (a terminal `throw` — an error output that ends the run on a branch)
5040
+ * - Callable: `step` (action / agent / llm / hook / child-workflow invocation) —
5041
+ * the invocation flavor lives in {@link WorkflowCanvasCallKind}
5042
+ * - Structural control flow: `code-block` · `decision` · `merge` · `loop` ·
5043
+ * `parallel` (group containers) · `loop-start` (the group body's entry marker,
5044
+ * shared by loop + parallel)
5045
+ * - Upstream of entry: `trigger-source` (one per manifest trigger attachment)
5046
+ *
5047
+ * `Promise.all([...])` is modeled as a `parallel` group container: the branches
5048
+ * are stacked inside and the container itself is the single prong leaving the
5049
+ * wrapper (there is no separate fork/join pair).
5050
+ *
5051
+ * `exit` and `error` are both terminals: a `return` flows to the shared `exit`
5052
+ * (the workflow output), while a `throw` gets its own `error` terminal off the
5053
+ * branch so guard clauses (`if (bad) throw …`) read as a visible dead-end.
5054
+ */
5055
+ const WorkflowCanvasNodeTypeSchema$1 = _enum([
5056
+ "entry",
5057
+ "exit",
5058
+ "error",
5059
+ "step",
5060
+ "code-block",
5061
+ "decision",
5062
+ "merge",
5063
+ "loop",
5064
+ "parallel",
5065
+ "loop-start",
5066
+ "trigger-source"
5067
+ ]);
5068
+ _enum([
5069
+ "workflow-step",
5070
+ "agent",
5071
+ "llm",
5072
+ "wait",
5073
+ "hook",
5074
+ "tool",
5075
+ "child-workflow"
5076
+ ]);
5077
+ /** A labeled branch output on a decision-style node. */
5078
+ const WorkflowCanvasNodeOutputSchema$1 = object({
5079
+ id: string(),
5080
+ label: string()
5081
+ });
5082
+ /**
5083
+ * A step input's configured value at its call site, captured deterministically
5084
+ * by the producer from the call's argument object. The platform join turns this
5085
+ * into the inspector's {@link WorkflowNodeInputBinding} (filling display labels).
5086
+ */
5087
+ const WorkflowCanvasRawBindingSchema$1 = object({
5088
+ tokens: array(discriminatedUnion("kind", [
5089
+ object({
5090
+ kind: literal("text"),
5091
+ text: string()
5092
+ }),
5093
+ object({
5094
+ kind: literal("reference"),
5095
+ /** Upstream node id this value flows from; absent only for unresolved refs. */
5096
+ sourceNodeId: string().optional(),
5097
+ /** Output field of the source (dotted path); omitted = the whole output. */
5098
+ field: string().optional()
5099
+ }),
5100
+ object({
5101
+ kind: literal("variable"),
5102
+ text: string()
5103
+ }),
5104
+ object({
5105
+ kind: literal("call"),
5106
+ name: string()
5107
+ })
5108
+ ])),
5109
+ /** Render as a tall multi-line box (object/array/multiline template values). */
5110
+ multiline: boolean().optional()
5111
+ });
5112
+ /**
5113
+ * Statically-captured `promptLlm` options for an `llm` step node. Literal-only:
5114
+ * dynamic/expression values (a computed model, a `system` built by a function) are
5115
+ * not captured; `system`/`outputSchema` record presence so the inspector can note
5116
+ * "a system prompt is configured" / "structured output" without their values.
5117
+ */
5118
+ const WorkflowCanvasLlmOptionsSchema$1 = object({
5119
+ model: string().optional(),
5120
+ maxTokens: number$1().optional(),
5121
+ temperature: number$1().optional(),
5122
+ thinkingLevel: string().optional(),
5123
+ hasSystemPrompt: boolean().optional(),
5124
+ hasOutputSchema: boolean().optional()
5125
+ });
5126
+ const WorkflowCanvasNodeDataSchema$1 = object({
5127
+ label: string(),
5128
+ /** Set on group nodes (loop / parallel section containers). */
5129
+ groupKind: _enum([
5130
+ "loop",
5131
+ "parallel",
5132
+ "conditional"
5133
+ ]).optional(),
5134
+ description: string().optional(),
5135
+ /** {@link WorkflowCanvasCallKind} or a looser raw call-site label. */
5136
+ callKind: string().optional(),
5137
+ /**
5138
+ * App/integration slug for a `step` whose action/agent is imported directly
5139
+ * from a `@keystrokehq/<app>` package (e.g. "slack", "apollo"). Lets the client
5140
+ * badge the node with that app's logo; absent for custom (project-local)
5141
+ * actions, which fall back to the call-kind icon.
5142
+ */
5143
+ appSlug: string().optional(),
5144
+ /** Cron/webhook/poll discriminator on trigger-source nodes. */
5145
+ triggerType: string().optional(),
5146
+ /** Branch outputs (decision nodes). */
5147
+ outputs: array(WorkflowCanvasNodeOutputSchema$1).optional(),
5148
+ /**
5149
+ * Action/agent/workflow slug resolved at deploy time (via import → definition).
5150
+ * Optional when the deploy build cannot resolve source (dist-only artifacts).
5151
+ */
5152
+ slug: string().optional(),
5153
+ /**
5154
+ * Durable call-site ids nested inside an off-grammar `code-block` (same-file only).
5155
+ * Used by the run overlay to light the block when any contained step executes.
5156
+ */
5157
+ containedCallSiteIds: array(string()).optional(),
5158
+ /**
5159
+ * Per-input call-site value bindings for `step` nodes, keyed by input field name.
5160
+ * Deterministically captured from the call's argument object; reference tokens point
5161
+ * at the upstream node that produced the value. The platform join fills display labels.
5162
+ */
5163
+ inputBindings: record(string(), WorkflowCanvasRawBindingSchema$1).optional(),
5164
+ /**
5165
+ * Static `promptLlm(prompt, options)` configuration captured at the call site for
5166
+ * `llm` step nodes. Only literal values are captured (model/maxTokens/temperature/
5167
+ * thinkingLevel); `system`/`outputSchema` are usually expressions, so only their
5168
+ * presence is recorded. Absent when no options are statically resolvable.
5169
+ */
5170
+ llmOptions: WorkflowCanvasLlmOptionsSchema$1.optional()
5171
+ });
5172
+ /**
5173
+ * A single structural node. This is the deploy artifact's shape: identity
5174
+ * (`id`), the canonical discriminator (`nodeType`), display `data`, and group
5175
+ * nesting (`parentId`). All layout/rendering — React Flow component key,
5176
+ * positions, sizes, `extent`, group box dimensions — is derived entirely
5177
+ * client-side from this structure, so it never leaks into the wire contract.
5178
+ */
5179
+ const WorkflowCanvasGraphNodeSchema$1 = object({
5180
+ id: string(),
5181
+ nodeType: WorkflowCanvasNodeTypeSchema$1,
5182
+ data: WorkflowCanvasNodeDataSchema$1,
5183
+ /** Set on children nested inside a group (loop / parallel) container. */
5184
+ parentId: string().optional()
5185
+ });
5186
+ const WorkflowCanvasEdgeSchema$1 = object({
5187
+ id: string(),
5188
+ source: string(),
5189
+ target: string(),
5190
+ type: string().optional(),
5191
+ label: string().optional(),
5192
+ sourceHandle: string().optional(),
5193
+ targetHandle: string().optional(),
5194
+ data: object({ branchKind: _enum([
5195
+ "then",
5196
+ "else",
5197
+ "parallel-branch",
5198
+ "error"
5199
+ ]).optional() }).optional()
5200
+ });
5201
+ /** A statically-evaluable top-level `const` value (literal scalars only). */
5202
+ const WorkflowCanvasConstantValueSchema$1 = union([
5203
+ string(),
5204
+ number$1(),
5205
+ boolean()
5206
+ ]);
5207
+ /**
5208
+ * Top-level `const NAME = <literal>` declarations in the workflow source, captured
5209
+ * at deploy. Lets the platform resolve `variable` value tokens (e.g. a `model` set
5210
+ * to a named const) to their concrete value for display. Scalars only — computed,
5211
+ * function-local, or non-literal consts are intentionally omitted.
5212
+ */
5213
+ const WorkflowCanvasConstantsSchema$1 = record(string(), WorkflowCanvasConstantValueSchema$1);
5214
+ const WorkflowCanvasGraphSchema$1 = object({
5215
+ nodes: array(WorkflowCanvasGraphNodeSchema$1),
5216
+ edges: array(WorkflowCanvasEdgeSchema$1),
5217
+ /** Top-level literal constants from the workflow source (for value-token resolution). */
5218
+ constants: WorkflowCanvasConstantsSchema$1.optional()
5219
+ });
5220
+ /**
5221
+ * Deploy-time summary of one credential a step requires, derived from the
5222
+ * action/agent-tool definition's `.credentials`. The workflow-canvas credential
5223
+ * overlay joins a step node's `slug` to these to resolve the bound instance.
5224
+ * `key` doubles as the app slug (matches `credential_instances.app_slug`).
5225
+ */
5226
+ const CredentialRequirementSummarySchema$1 = object({
5227
+ key: string(),
5228
+ kind: CredentialAuthKindSchema$1,
5229
+ /** Scope pinned via `.scope(...)`; absent means project-default → org-default. */
5230
+ scope: CredentialScopeTypeSchema$1.optional()
5231
+ });
4965
5232
  const StoredRouteManifestSkillSchema$1 = object({
4966
5233
  slug: string(),
4967
- name: string().optional(),
4968
- description: string().optional(),
5234
+ name: requiredDisplayTextSchema$1,
5235
+ description: requiredDisplayTextSchema$1,
4969
5236
  moduleFile: string()
4970
5237
  });
4971
5238
  const attachmentSchemasSchema$1 = record(string(), object({
@@ -4973,8 +5240,8 @@ const attachmentSchemasSchema$1 = record(string(), object({
4973
5240
  filterSchema: record(string(), unknown()).optional()
4974
5241
  }));
4975
5242
  const attachmentMetaSchema$1 = record(string(), object({
4976
- name: string().optional(),
4977
- description: string().optional()
5243
+ name: requiredDisplayTextSchema$1,
5244
+ description: requiredDisplayTextSchema$1
4978
5245
  }));
4979
5246
  const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
4980
5247
  object({ kind: literal("health") }),
@@ -4982,23 +5249,43 @@ const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
4982
5249
  kind: literal("agent"),
4983
5250
  slug: string(),
4984
5251
  moduleFile: string(),
4985
- name: string().optional(),
4986
- description: string().optional(),
5252
+ name: requiredDisplayTextSchema$1,
5253
+ description: requiredDisplayTextSchema$1,
4987
5254
  model: string(),
4988
5255
  systemPrompt: string(),
4989
5256
  toolCount: number$1().int().nonnegative(),
4990
5257
  credentialCount: number$1().int().nonnegative(),
4991
5258
  appSlugs: array(string()).default([]),
4992
- toolSlugs: array(string()).default([])
5259
+ toolSlugs: array(string()).default([]),
5260
+ /** Credential requirements per tool slug (the agent's credential consumer key). */
5261
+ toolRequirements: record(string(), array(CredentialRequirementSummarySchema$1)).optional()
5262
+ }),
5263
+ object({
5264
+ kind: literal("action"),
5265
+ slug: string(),
5266
+ name: requiredDisplayTextSchema$1,
5267
+ description: requiredDisplayTextSchema$1,
5268
+ moduleFile: string(),
5269
+ /** App slug for actions imported from an integration package (`@keystrokehq/<app>/actions`). */
5270
+ appSlug: string().optional(),
5271
+ inputSchema: record(string(), unknown()),
5272
+ outputSchema: record(string(), unknown()),
5273
+ /** Credentials this action requires (for the canvas credential overlay). */
5274
+ requirements: array(CredentialRequirementSummarySchema$1).optional()
4993
5275
  }),
4994
5276
  object({
4995
5277
  kind: literal("workflow"),
4996
5278
  slug: string(),
4997
- name: string().optional(),
4998
- description: string().optional(),
5279
+ name: requiredDisplayTextSchema$1,
5280
+ description: requiredDisplayTextSchema$1,
4999
5281
  subscribable: boolean(),
5000
5282
  moduleFile: string(),
5001
- requestSchema: record(string(), unknown())
5283
+ requestSchema: record(string(), unknown()),
5284
+ responseSchema: record(string(), unknown()).optional(),
5285
+ /** Deterministic AST control-flow skeleton (deploy-time producer). */
5286
+ flowGraph: WorkflowCanvasGraphSchema$1.optional(),
5287
+ /** sha256 of the workflow source the `flowGraph` was produced from (staleness). */
5288
+ flowGraphSourceHash: string().optional()
5002
5289
  }),
5003
5290
  object({
5004
5291
  kind: literal("trigger-webhook"),
@@ -5017,8 +5304,8 @@ const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
5017
5304
  moduleFile: string(),
5018
5305
  sourceHash: string().optional(),
5019
5306
  schedule: string(),
5020
- name: string().optional(),
5021
- description: string().optional()
5307
+ name: requiredDisplayTextSchema$1,
5308
+ description: requiredDisplayTextSchema$1
5022
5309
  }),
5023
5310
  object({
5024
5311
  kind: literal("trigger-poll-group"),
@@ -5034,8 +5321,8 @@ const storedRouteManifestEntryV2Schema$1 = discriminatedUnion("kind", [
5034
5321
  moduleFile: string(),
5035
5322
  sourceHash: string().optional(),
5036
5323
  schedule: string(),
5037
- name: string().optional(),
5038
- description: string().optional()
5324
+ name: requiredDisplayTextSchema$1,
5325
+ description: requiredDisplayTextSchema$1
5039
5326
  })
5040
5327
  ]);
5041
5328
  object({
@@ -5461,24 +5748,6 @@ object({
5461
5748
  outputParameters: record(string(), unknown()).optional(),
5462
5749
  version: string().optional()
5463
5750
  });
5464
- /** How a credential instance is stored (`credential_instances.auth_kind`). */
5465
- const CredentialAuthKindSchema$1 = _enum([
5466
- "api_key",
5467
- "oauth_managed",
5468
- "keystroke"
5469
- ]);
5470
- /**
5471
- * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
5472
- * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
5473
- * resolver tries the project default, then the org default, then throws.
5474
- */
5475
- const CredentialScopeTypeSchema$1 = _enum([
5476
- "organization",
5477
- "project",
5478
- "user"
5479
- ]);
5480
- CredentialAuthKindSchema$1.options;
5481
- CredentialScopeTypeSchema$1.options;
5482
5751
  /** Scope of a platform app credential (maps to `credential_instances.scope_type`). */
5483
5752
  const AppCredentialScopeSchema$1 = _enum([
5484
5753
  "user",
@@ -6474,7 +6743,7 @@ object({
6474
6743
  id: string(),
6475
6744
  slug: string(),
6476
6745
  name: string(),
6477
- description: string().nullable(),
6746
+ description: string().min(1),
6478
6747
  type: TriggerTypeSchema$1,
6479
6748
  status: TriggerStatusSchema$1,
6480
6749
  projectId: string(),
@@ -6770,7 +7039,7 @@ const AgentSummarySchema$1 = object({
6770
7039
  name: string().min(1),
6771
7040
  projectId: string().min(1),
6772
7041
  updatedAt: string().min(1),
6773
- description: string().optional(),
7042
+ description: string().min(1),
6774
7043
  sourcePath: string().min(1).optional(),
6775
7044
  model: string().optional(),
6776
7045
  capabilities: object({
@@ -6792,7 +7061,7 @@ const WorkflowSummarySchema$1 = object({
6792
7061
  name: string().min(1),
6793
7062
  projectId: string().min(1),
6794
7063
  updatedAt: string().min(1),
6795
- description: string().optional(),
7064
+ description: string().min(1),
6796
7065
  sourcePath: string().min(1).optional(),
6797
7066
  lastRunAt: optionalTimestamp$2
6798
7067
  });
@@ -6802,7 +7071,7 @@ const SkillSummarySchema$1 = object({
6802
7071
  name: string().min(1),
6803
7072
  projectId: string().min(1),
6804
7073
  updatedAt: string().min(1),
6805
- description: string().optional(),
7074
+ description: string().min(1),
6806
7075
  sourcePath: string().min(1).optional()
6807
7076
  });
6808
7077
  AgentSummarySchema$1.nullable();
@@ -6911,6 +7180,245 @@ object({ files: array(object({
6911
7180
  id: string(),
6912
7181
  path: string().min(1)
6913
7182
  })) });
7183
+ /** Whether the overview is still being produced or finished. */
7184
+ const WorkflowOverviewStatusSchema$1 = _enum(["generating", "ready"]);
7185
+ /** One phase of the guided-tour overview. */
7186
+ const WorkflowPhaseSchema$1 = object({
7187
+ id: string(),
7188
+ title: string(),
7189
+ copy: string(),
7190
+ nodeIds: array(string())
7191
+ });
7192
+ object({
7193
+ status: WorkflowOverviewStatusSchema$1,
7194
+ summary: string(),
7195
+ phases: array(WorkflowPhaseSchema$1),
7196
+ hash: string(),
7197
+ generatedAt: string().nullable(),
7198
+ model: string()
7199
+ });
7200
+ /** Subset of JSON-Schema field types the dashboard form renders inline. */
7201
+ const WorkflowInputFieldTypeSchema$1 = _enum([
7202
+ "string",
7203
+ "number",
7204
+ "boolean",
7205
+ "enum",
7206
+ "object",
7207
+ "array"
7208
+ ]);
7209
+ const WorkflowInputFieldSchema$1 = lazy(() => object({
7210
+ key: string(),
7211
+ label: string(),
7212
+ type: WorkflowInputFieldTypeSchema$1,
7213
+ required: boolean(),
7214
+ description: string().optional(),
7215
+ placeholder: string().optional(),
7216
+ options: array(string()).optional(),
7217
+ default: union([
7218
+ string(),
7219
+ number$1(),
7220
+ boolean()
7221
+ ]).optional(),
7222
+ children: array(WorkflowInputFieldSchema$1).optional(),
7223
+ format: string().optional()
7224
+ }));
7225
+ object({
7226
+ schema: object({ fields: array(WorkflowInputFieldSchema$1) }),
7227
+ values: record(string(), unknown()).nullable()
7228
+ });
7229
+ object({ runId: string() });
7230
+ /** Annotation lifecycle: "generating" while the LLM pass streams in, then "ready". */
7231
+ const WorkflowCanvasStatusSchema$1 = _enum(["generating", "ready"]);
7232
+ /** LLM-produced enrichment for a single skeleton node. */
7233
+ const WorkflowCanvasAnnotationSchema$1 = object({
7234
+ label: string().optional(),
7235
+ description: string().optional()
7236
+ });
7237
+ /** The configured value of one input at this call site. */
7238
+ const WorkflowNodeInputBindingSchema$1 = object({
7239
+ tokens: array(discriminatedUnion("kind", [
7240
+ object({
7241
+ kind: literal("text"),
7242
+ text: string()
7243
+ }),
7244
+ object({
7245
+ kind: literal("reference"),
7246
+ sourceNodeId: string().optional(),
7247
+ sourceLabel: string(),
7248
+ field: string().optional()
7249
+ }),
7250
+ object({
7251
+ kind: literal("variable"),
7252
+ text: string(),
7253
+ /** Concrete value when `text` resolves to a top-level literal constant. */
7254
+ resolvedValue: string().optional()
7255
+ }),
7256
+ object({
7257
+ kind: literal("call"),
7258
+ name: string()
7259
+ })
7260
+ ])),
7261
+ multiline: boolean().optional()
7262
+ });
7263
+ /** An inspector input with optional call-site binding. */
7264
+ const WorkflowCanvasNodeInputSchema$1 = WorkflowInputFieldSchema$1.and(object({
7265
+ binding: WorkflowNodeInputBindingSchema$1.optional(),
7266
+ additional: boolean().optional()
7267
+ }));
7268
+ /** Authored, deterministic metadata for a single node. */
7269
+ const WorkflowCanvasNodeMetaSchema$1 = object({
7270
+ kind: _enum([
7271
+ "action",
7272
+ "agent",
7273
+ "workflow",
7274
+ "llm",
7275
+ "trigger",
7276
+ "boundary"
7277
+ ]),
7278
+ slug: string(),
7279
+ name: string(),
7280
+ description: string().optional(),
7281
+ appSlug: string().optional(),
7282
+ inputs: array(WorkflowCanvasNodeInputSchema$1),
7283
+ outputs: array(WorkflowInputFieldSchema$1),
7284
+ requiredApps: array(string()).optional(),
7285
+ model: string().optional(),
7286
+ toolCount: number$1().int().nonnegative().optional()
7287
+ });
7288
+ object({
7289
+ graph: WorkflowCanvasGraphSchema$1,
7290
+ nodeMetadata: record(string(), WorkflowCanvasNodeMetaSchema$1),
7291
+ annotations: record(string(), WorkflowCanvasAnnotationSchema$1),
7292
+ status: WorkflowCanvasStatusSchema$1,
7293
+ hash: string(),
7294
+ generatedAt: string().nullable(),
7295
+ model: string()
7296
+ });
7297
+ const WorkflowCanvasNodeRunStateSchema$1 = object({
7298
+ status: _enum([
7299
+ "pending",
7300
+ "running",
7301
+ "succeeded",
7302
+ "failed",
7303
+ "skipped"
7304
+ ]),
7305
+ iteration: object({
7306
+ index: number$1().int().nonnegative(),
7307
+ total: number$1().int().nonnegative()
7308
+ }).optional()
7309
+ });
7310
+ /** Overall lifecycle of a run as the canvas animates it. */
7311
+ const WorkflowCanvasRunStatusSchema$1 = _enum([
7312
+ "running",
7313
+ "succeeded",
7314
+ "failed",
7315
+ "canceled"
7316
+ ]);
7317
+ object({
7318
+ runId: string(),
7319
+ status: WorkflowCanvasRunStatusSchema$1,
7320
+ startedAt: string(),
7321
+ finishedAt: string().nullable(),
7322
+ nodeStates: record(string(), WorkflowCanvasNodeRunStateSchema$1)
7323
+ });
7324
+ /** Scope a credential instance lives in. */
7325
+ const WorkflowCredentialScopeSchema$1 = _enum([
7326
+ "organization",
7327
+ "project",
7328
+ "user"
7329
+ ]);
7330
+ /** The concrete credential instance a binding currently resolves to. */
7331
+ const WorkflowResolvedCredentialSchema$1 = object({
7332
+ id: string(),
7333
+ name: string(),
7334
+ scope: WorkflowCredentialScopeSchema$1,
7335
+ appSlug: string().optional(),
7336
+ isDefault: boolean().optional(),
7337
+ projectId: string().optional(),
7338
+ projectName: string().optional()
7339
+ });
7340
+ record(string(), WorkflowCanvasAnnotationSchema$1);
7341
+ /** One opaque code-block the annotation pass should label, keyed by its canvas node id. */
7342
+ const WorkflowCanvasAnnotationCodeBlockSchema$1 = object({
7343
+ nodeId: string(),
7344
+ /** The raw source snippet (the node's label) the LLM turns into human copy. */
7345
+ source: string()
7346
+ });
7347
+ /** Inputs the worker feeds the LLM for the gated code-block annotation pass. */
7348
+ const WorkflowCanvasAnnotationsInputSchema$1 = object({
7349
+ workflowName: string(),
7350
+ workflowDescription: string().nullable(),
7351
+ codeBlocks: array(WorkflowCanvasAnnotationCodeBlockSchema$1)
7352
+ });
7353
+ object({
7354
+ workflowId: string(),
7355
+ projectId: string(),
7356
+ hash: string(),
7357
+ model: string(),
7358
+ input: WorkflowCanvasAnnotationsInputSchema$1
7359
+ });
7360
+ /** One node as the overview LLM sees it (derived from the canvas node metadata + graph). */
7361
+ const WorkflowOverviewNodeSchema$1 = object({
7362
+ nodeId: string(),
7363
+ label: string(),
7364
+ kind: string(),
7365
+ description: string().optional(),
7366
+ /** App/integration slug for steps imported from a `@keystrokehq/<app>` package. */
7367
+ appSlug: string().optional(),
7368
+ /** Authored input field keys (from the action/agent/workflow definition). */
7369
+ inputs: array(string()).optional(),
7370
+ /** Authored output field keys. */
7371
+ outputs: array(string()).optional(),
7372
+ /** Agent-only: the model the agent runs on. */
7373
+ model: string().optional(),
7374
+ /** Agent-only: number of tools available to the agent. */
7375
+ toolCount: number$1().int().nonnegative().optional()
7376
+ });
7377
+ /** Inputs the worker feeds the LLM to produce the workflow overview (summary + phases). */
7378
+ const WorkflowOverviewInputSchema$1 = object({
7379
+ workflowName: string(),
7380
+ workflowDescription: string().nullable(),
7381
+ /** Display labels of the trigger sources upstream of the workflow (read-only context). */
7382
+ triggers: array(string()),
7383
+ nodes: array(WorkflowOverviewNodeSchema$1),
7384
+ /** The workflow's TypeScript source (best-effort; null when the deploy has no source snapshot). */
7385
+ source: string().nullable()
7386
+ });
7387
+ object({
7388
+ workflowId: string(),
7389
+ projectId: string(),
7390
+ hash: string(),
7391
+ model: string(),
7392
+ input: WorkflowOverviewInputSchema$1
7393
+ });
7394
+ const WorkflowCanvasCredentialBindingBaseSchema$1 = object({
7395
+ credentialKey: string(),
7396
+ label: string(),
7397
+ appSlug: string().optional()
7398
+ });
7399
+ /** How one credential requirement on a step currently resolves. */
7400
+ const WorkflowCanvasCredentialBindingSchema$1 = union([
7401
+ WorkflowCanvasCredentialBindingBaseSchema$1.extend({
7402
+ policy: _enum([
7403
+ "project-default",
7404
+ "org-default",
7405
+ "assigned"
7406
+ ]),
7407
+ instance: WorkflowResolvedCredentialSchema$1
7408
+ }),
7409
+ WorkflowCanvasCredentialBindingBaseSchema$1.extend({
7410
+ policy: literal("scope-pinned"),
7411
+ pinnedScope: WorkflowCredentialScopeSchema$1,
7412
+ instance: WorkflowResolvedCredentialSchema$1
7413
+ }),
7414
+ WorkflowCanvasCredentialBindingBaseSchema$1.extend({
7415
+ policy: literal("unresolved"),
7416
+ reason: _enum(["needs-selection", "missing"]),
7417
+ pinnedScope: WorkflowCredentialScopeSchema$1.optional()
7418
+ })
7419
+ ]);
7420
+ record(string(), array(WorkflowCanvasCredentialBindingSchema$1));
7421
+ record(string(), unknown());
6914
7422
  /** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */
6915
7423
  function encodeOrgArtifacts(artifacts) {
6916
7424
  return Buffer.from(JSON.stringify(artifacts)).toString("base64");
@@ -8303,10 +8811,260 @@ function resolveExternalPlatformOrigin(env = process.env) {
8303
8811
  }
8304
8812
  /** On-disk path under the project root (packed in deploy artifacts when present). */
8305
8813
  const ROUTE_MANIFEST_REL_PATH = "dist/.keystroke/route-manifest.json";
8814
+ /** How a credential instance is stored (`credential_instances.auth_kind`). */
8815
+ const CredentialAuthKindSchema = zod.z.enum([
8816
+ "api_key",
8817
+ "oauth_managed",
8818
+ "keystroke"
8819
+ ]);
8820
+ /**
8821
+ * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
8822
+ * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
8823
+ * resolver tries the project default, then the org default, then throws.
8824
+ */
8825
+ const CredentialScopeTypeSchema = zod.z.enum([
8826
+ "organization",
8827
+ "project",
8828
+ "user"
8829
+ ]);
8830
+ CredentialAuthKindSchema.options;
8831
+ CredentialScopeTypeSchema.options;
8832
+ /** Non-empty human-readable label or description (trimmed). */
8833
+ const requiredDisplayTextSchema = zod.z.string().trim().min(1);
8834
+ /**
8835
+ * Structural workflow-canvas graph contract.
8836
+ *
8837
+ * This is the deterministic skeleton the deploy-time AST producer emits for a
8838
+ * workflow (nodes + edges), plus the manifest-derived trigger-source nodes. It
8839
+ * is the single source of truth shared by:
8840
+ * - the AST producer (emits it at deploy, stored with the manifest),
8841
+ * - the platform route that serves the canvas, and
8842
+ * - the SDK / web client that renders it (React Flow).
8843
+ *
8844
+ * Only the structural skeleton lives here. The LLM enrichment + run-overlay
8845
+ * envelope types live in `workflow-canvas-envelope.ts`; the SDK re-exports them.
8846
+ * See WORKFLOW.md (§4 grammar, §8 node ids, §9 caching).
8847
+ */
8848
+ /**
8849
+ * Canvas node taxonomy — the single discriminator for every canvas node. The
8850
+ * client derives the React Flow component, icon, and per-node treatment from it
8851
+ * (no parallel `type` / `data.kind` fields), and the producer + fixtures emit it
8852
+ * directly, so the structural contract can never silently diverge across the
8853
+ * deploy → render boundary.
8854
+ * - Boundaries: `entry` (Start, owns input) · `exit` (Output, owns output) ·
8855
+ * `error` (a terminal `throw` — an error output that ends the run on a branch)
8856
+ * - Callable: `step` (action / agent / llm / hook / child-workflow invocation) —
8857
+ * the invocation flavor lives in {@link WorkflowCanvasCallKind}
8858
+ * - Structural control flow: `code-block` · `decision` · `merge` · `loop` ·
8859
+ * `parallel` (group containers) · `loop-start` (the group body's entry marker,
8860
+ * shared by loop + parallel)
8861
+ * - Upstream of entry: `trigger-source` (one per manifest trigger attachment)
8862
+ *
8863
+ * `Promise.all([...])` is modeled as a `parallel` group container: the branches
8864
+ * are stacked inside and the container itself is the single prong leaving the
8865
+ * wrapper (there is no separate fork/join pair).
8866
+ *
8867
+ * `exit` and `error` are both terminals: a `return` flows to the shared `exit`
8868
+ * (the workflow output), while a `throw` gets its own `error` terminal off the
8869
+ * branch so guard clauses (`if (bad) throw …`) read as a visible dead-end.
8870
+ */
8871
+ const WorkflowCanvasNodeTypeSchema = zod.z.enum([
8872
+ "entry",
8873
+ "exit",
8874
+ "error",
8875
+ "step",
8876
+ "code-block",
8877
+ "decision",
8878
+ "merge",
8879
+ "loop",
8880
+ "parallel",
8881
+ "loop-start",
8882
+ "trigger-source"
8883
+ ]);
8884
+ zod.z.enum([
8885
+ "workflow-step",
8886
+ "agent",
8887
+ "llm",
8888
+ "wait",
8889
+ "hook",
8890
+ "tool",
8891
+ "child-workflow"
8892
+ ]);
8893
+ /** A labeled branch output on a decision-style node. */
8894
+ const WorkflowCanvasNodeOutputSchema = zod.z.object({
8895
+ id: zod.z.string(),
8896
+ label: zod.z.string()
8897
+ });
8898
+ /**
8899
+ * One token of a step's call-site argument value as captured by the producer.
8900
+ *
8901
+ * Raw form, one per source-expression shape so the inspector can render each
8902
+ * distinctly instead of dumping raw text:
8903
+ * - `text` — a literal value (string/number/boolean) or inert template chunk.
8904
+ * - `reference` — an upstream node output; carries only the structural
8905
+ * `sourceNodeId` + `field` (the human `sourceLabel` is filled by the platform
8906
+ * metadata join).
8907
+ * - `variable` — a code identifier / property access that isn't an upstream
8908
+ * reference (e.g. a `const`, a loop variable, `job.id`). `text` is the source
8909
+ * name; the platform may attach a `resolvedValue` for known top-level consts.
8910
+ * - `call` — a function call; carries only the callee `name` (e.g.
8911
+ * `buildPrompt`), never the full argument list.
8912
+ */
8913
+ const WorkflowCanvasRawValueTokenSchema = zod.z.discriminatedUnion("kind", [
8914
+ zod.z.object({
8915
+ kind: zod.z.literal("text"),
8916
+ text: zod.z.string()
8917
+ }),
8918
+ zod.z.object({
8919
+ kind: zod.z.literal("reference"),
8920
+ /** Upstream node id this value flows from; absent only for unresolved refs. */
8921
+ sourceNodeId: zod.z.string().optional(),
8922
+ /** Output field of the source (dotted path); omitted = the whole output. */
8923
+ field: zod.z.string().optional()
8924
+ }),
8925
+ zod.z.object({
8926
+ kind: zod.z.literal("variable"),
8927
+ text: zod.z.string()
8928
+ }),
8929
+ zod.z.object({
8930
+ kind: zod.z.literal("call"),
8931
+ name: zod.z.string()
8932
+ })
8933
+ ]);
8934
+ /**
8935
+ * A step input's configured value at its call site, captured deterministically
8936
+ * by the producer from the call's argument object. The platform join turns this
8937
+ * into the inspector's {@link WorkflowNodeInputBinding} (filling display labels).
8938
+ */
8939
+ const WorkflowCanvasRawBindingSchema = zod.z.object({
8940
+ tokens: zod.z.array(WorkflowCanvasRawValueTokenSchema),
8941
+ /** Render as a tall multi-line box (object/array/multiline template values). */
8942
+ multiline: zod.z.boolean().optional()
8943
+ });
8944
+ /**
8945
+ * Statically-captured `promptLlm` options for an `llm` step node. Literal-only:
8946
+ * dynamic/expression values (a computed model, a `system` built by a function) are
8947
+ * not captured; `system`/`outputSchema` record presence so the inspector can note
8948
+ * "a system prompt is configured" / "structured output" without their values.
8949
+ */
8950
+ const WorkflowCanvasLlmOptionsSchema = zod.z.object({
8951
+ model: zod.z.string().optional(),
8952
+ maxTokens: zod.z.number().optional(),
8953
+ temperature: zod.z.number().optional(),
8954
+ thinkingLevel: zod.z.string().optional(),
8955
+ hasSystemPrompt: zod.z.boolean().optional(),
8956
+ hasOutputSchema: zod.z.boolean().optional()
8957
+ });
8958
+ const WorkflowCanvasNodeDataSchema = zod.z.object({
8959
+ label: zod.z.string(),
8960
+ /** Set on group nodes (loop / parallel section containers). */
8961
+ groupKind: zod.z.enum([
8962
+ "loop",
8963
+ "parallel",
8964
+ "conditional"
8965
+ ]).optional(),
8966
+ description: zod.z.string().optional(),
8967
+ /** {@link WorkflowCanvasCallKind} or a looser raw call-site label. */
8968
+ callKind: zod.z.string().optional(),
8969
+ /**
8970
+ * App/integration slug for a `step` whose action/agent is imported directly
8971
+ * from a `@keystrokehq/<app>` package (e.g. "slack", "apollo"). Lets the client
8972
+ * badge the node with that app's logo; absent for custom (project-local)
8973
+ * actions, which fall back to the call-kind icon.
8974
+ */
8975
+ appSlug: zod.z.string().optional(),
8976
+ /** Cron/webhook/poll discriminator on trigger-source nodes. */
8977
+ triggerType: zod.z.string().optional(),
8978
+ /** Branch outputs (decision nodes). */
8979
+ outputs: zod.z.array(WorkflowCanvasNodeOutputSchema).optional(),
8980
+ /**
8981
+ * Action/agent/workflow slug resolved at deploy time (via import → definition).
8982
+ * Optional when the deploy build cannot resolve source (dist-only artifacts).
8983
+ */
8984
+ slug: zod.z.string().optional(),
8985
+ /**
8986
+ * Durable call-site ids nested inside an off-grammar `code-block` (same-file only).
8987
+ * Used by the run overlay to light the block when any contained step executes.
8988
+ */
8989
+ containedCallSiteIds: zod.z.array(zod.z.string()).optional(),
8990
+ /**
8991
+ * Per-input call-site value bindings for `step` nodes, keyed by input field name.
8992
+ * Deterministically captured from the call's argument object; reference tokens point
8993
+ * at the upstream node that produced the value. The platform join fills display labels.
8994
+ */
8995
+ inputBindings: zod.z.record(zod.z.string(), WorkflowCanvasRawBindingSchema).optional(),
8996
+ /**
8997
+ * Static `promptLlm(prompt, options)` configuration captured at the call site for
8998
+ * `llm` step nodes. Only literal values are captured (model/maxTokens/temperature/
8999
+ * thinkingLevel); `system`/`outputSchema` are usually expressions, so only their
9000
+ * presence is recorded. Absent when no options are statically resolvable.
9001
+ */
9002
+ llmOptions: WorkflowCanvasLlmOptionsSchema.optional()
9003
+ });
9004
+ /**
9005
+ * A single structural node. This is the deploy artifact's shape: identity
9006
+ * (`id`), the canonical discriminator (`nodeType`), display `data`, and group
9007
+ * nesting (`parentId`). All layout/rendering — React Flow component key,
9008
+ * positions, sizes, `extent`, group box dimensions — is derived entirely
9009
+ * client-side from this structure, so it never leaks into the wire contract.
9010
+ */
9011
+ const WorkflowCanvasGraphNodeSchema = zod.z.object({
9012
+ id: zod.z.string(),
9013
+ nodeType: WorkflowCanvasNodeTypeSchema,
9014
+ data: WorkflowCanvasNodeDataSchema,
9015
+ /** Set on children nested inside a group (loop / parallel) container. */
9016
+ parentId: zod.z.string().optional()
9017
+ });
9018
+ const WorkflowCanvasEdgeSchema = zod.z.object({
9019
+ id: zod.z.string(),
9020
+ source: zod.z.string(),
9021
+ target: zod.z.string(),
9022
+ type: zod.z.string().optional(),
9023
+ label: zod.z.string().optional(),
9024
+ sourceHandle: zod.z.string().optional(),
9025
+ targetHandle: zod.z.string().optional(),
9026
+ data: zod.z.object({ branchKind: zod.z.enum([
9027
+ "then",
9028
+ "else",
9029
+ "parallel-branch",
9030
+ "error"
9031
+ ]).optional() }).optional()
9032
+ });
9033
+ /** A statically-evaluable top-level `const` value (literal scalars only). */
9034
+ const WorkflowCanvasConstantValueSchema = zod.z.union([
9035
+ zod.z.string(),
9036
+ zod.z.number(),
9037
+ zod.z.boolean()
9038
+ ]);
9039
+ /**
9040
+ * Top-level `const NAME = <literal>` declarations in the workflow source, captured
9041
+ * at deploy. Lets the platform resolve `variable` value tokens (e.g. a `model` set
9042
+ * to a named const) to their concrete value for display. Scalars only — computed,
9043
+ * function-local, or non-literal consts are intentionally omitted.
9044
+ */
9045
+ const WorkflowCanvasConstantsSchema = zod.z.record(zod.z.string(), WorkflowCanvasConstantValueSchema);
9046
+ const WorkflowCanvasGraphSchema = zod.z.object({
9047
+ nodes: zod.z.array(WorkflowCanvasGraphNodeSchema),
9048
+ edges: zod.z.array(WorkflowCanvasEdgeSchema),
9049
+ /** Top-level literal constants from the workflow source (for value-token resolution). */
9050
+ constants: WorkflowCanvasConstantsSchema.optional()
9051
+ });
9052
+ /**
9053
+ * Deploy-time summary of one credential a step requires, derived from the
9054
+ * action/agent-tool definition's `.credentials`. The workflow-canvas credential
9055
+ * overlay joins a step node's `slug` to these to resolve the bound instance.
9056
+ * `key` doubles as the app slug (matches `credential_instances.app_slug`).
9057
+ */
9058
+ const CredentialRequirementSummarySchema = zod.z.object({
9059
+ key: zod.z.string(),
9060
+ kind: CredentialAuthKindSchema,
9061
+ /** Scope pinned via `.scope(...)`; absent means project-default → org-default. */
9062
+ scope: CredentialScopeTypeSchema.optional()
9063
+ });
8306
9064
  const StoredRouteManifestSkillSchema = zod.z.object({
8307
9065
  slug: zod.z.string(),
8308
- name: zod.z.string().optional(),
8309
- description: zod.z.string().optional(),
9066
+ name: requiredDisplayTextSchema,
9067
+ description: requiredDisplayTextSchema,
8310
9068
  moduleFile: zod.z.string()
8311
9069
  });
8312
9070
  const attachmentSchemasSchema = zod.z.record(zod.z.string(), zod.z.object({
@@ -8314,8 +9072,8 @@ const attachmentSchemasSchema = zod.z.record(zod.z.string(), zod.z.object({
8314
9072
  filterSchema: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
8315
9073
  }));
8316
9074
  const attachmentMetaSchema = zod.z.record(zod.z.string(), zod.z.object({
8317
- name: zod.z.string().optional(),
8318
- description: zod.z.string().optional()
9075
+ name: requiredDisplayTextSchema,
9076
+ description: requiredDisplayTextSchema
8319
9077
  }));
8320
9078
  const storedRouteManifestEntryV2Schema = zod.z.discriminatedUnion("kind", [
8321
9079
  zod.z.object({ kind: zod.z.literal("health") }),
@@ -8323,23 +9081,43 @@ const storedRouteManifestEntryV2Schema = zod.z.discriminatedUnion("kind", [
8323
9081
  kind: zod.z.literal("agent"),
8324
9082
  slug: zod.z.string(),
8325
9083
  moduleFile: zod.z.string(),
8326
- name: zod.z.string().optional(),
8327
- description: zod.z.string().optional(),
9084
+ name: requiredDisplayTextSchema,
9085
+ description: requiredDisplayTextSchema,
8328
9086
  model: zod.z.string(),
8329
9087
  systemPrompt: zod.z.string(),
8330
9088
  toolCount: zod.z.number().int().nonnegative(),
8331
9089
  credentialCount: zod.z.number().int().nonnegative(),
8332
9090
  appSlugs: zod.z.array(zod.z.string()).default([]),
8333
- toolSlugs: zod.z.array(zod.z.string()).default([])
9091
+ toolSlugs: zod.z.array(zod.z.string()).default([]),
9092
+ /** Credential requirements per tool slug (the agent's credential consumer key). */
9093
+ toolRequirements: zod.z.record(zod.z.string(), zod.z.array(CredentialRequirementSummarySchema)).optional()
9094
+ }),
9095
+ zod.z.object({
9096
+ kind: zod.z.literal("action"),
9097
+ slug: zod.z.string(),
9098
+ name: requiredDisplayTextSchema,
9099
+ description: requiredDisplayTextSchema,
9100
+ moduleFile: zod.z.string(),
9101
+ /** App slug for actions imported from an integration package (`@keystrokehq/<app>/actions`). */
9102
+ appSlug: zod.z.string().optional(),
9103
+ inputSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
9104
+ outputSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
9105
+ /** Credentials this action requires (for the canvas credential overlay). */
9106
+ requirements: zod.z.array(CredentialRequirementSummarySchema).optional()
8334
9107
  }),
8335
9108
  zod.z.object({
8336
9109
  kind: zod.z.literal("workflow"),
8337
9110
  slug: zod.z.string(),
8338
- name: zod.z.string().optional(),
8339
- description: zod.z.string().optional(),
9111
+ name: requiredDisplayTextSchema,
9112
+ description: requiredDisplayTextSchema,
8340
9113
  subscribable: zod.z.boolean(),
8341
9114
  moduleFile: zod.z.string(),
8342
- requestSchema: zod.z.record(zod.z.string(), zod.z.unknown())
9115
+ requestSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
9116
+ responseSchema: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
9117
+ /** Deterministic AST control-flow skeleton (deploy-time producer). */
9118
+ flowGraph: WorkflowCanvasGraphSchema.optional(),
9119
+ /** sha256 of the workflow source the `flowGraph` was produced from (staleness). */
9120
+ flowGraphSourceHash: zod.z.string().optional()
8343
9121
  }),
8344
9122
  zod.z.object({
8345
9123
  kind: zod.z.literal("trigger-webhook"),
@@ -8358,8 +9136,8 @@ const storedRouteManifestEntryV2Schema = zod.z.discriminatedUnion("kind", [
8358
9136
  moduleFile: zod.z.string(),
8359
9137
  sourceHash: zod.z.string().optional(),
8360
9138
  schedule: zod.z.string(),
8361
- name: zod.z.string().optional(),
8362
- description: zod.z.string().optional()
9139
+ name: requiredDisplayTextSchema,
9140
+ description: requiredDisplayTextSchema
8363
9141
  }),
8364
9142
  zod.z.object({
8365
9143
  kind: zod.z.literal("trigger-poll-group"),
@@ -8375,8 +9153,8 @@ const storedRouteManifestEntryV2Schema = zod.z.discriminatedUnion("kind", [
8375
9153
  moduleFile: zod.z.string(),
8376
9154
  sourceHash: zod.z.string().optional(),
8377
9155
  schedule: zod.z.string(),
8378
- name: zod.z.string().optional(),
8379
- description: zod.z.string().optional()
9156
+ name: requiredDisplayTextSchema,
9157
+ description: requiredDisplayTextSchema
8380
9158
  })
8381
9159
  ]);
8382
9160
  const storedRouteManifestV2Schema = zod.z.object({
@@ -8385,165 +9163,14 @@ const storedRouteManifestV2Schema = zod.z.object({
8385
9163
  skills: zod.z.array(StoredRouteManifestSkillSchema).default([]),
8386
9164
  integrations: zod.z.array(zod.z.string()).optional()
8387
9165
  });
8388
- const DERIVED_ENTRY_KINDS = new Set([
8389
- "agent-sessions-list",
8390
- "agent-session-detail",
8391
- "workflow-runs-list",
8392
- "workflow-run-detail",
8393
- "trigger-runs-list",
8394
- "trigger-run-detail"
8395
- ]);
8396
- function webhookEndpointFromPath(path) {
8397
- return path.replace(/^\/triggers\//, "").replace(/^\/+|\/+$/g, "");
8398
- }
8399
- function legacyAgentAppSlugs(entry) {
8400
- if (Array.isArray(entry.appSlugs)) return entry.appSlugs;
8401
- if (Array.isArray(entry.credentialSlugs)) return entry.credentialSlugs;
8402
- if (Array.isArray(entry.credentialKeys)) return entry.credentialKeys;
8403
- return [];
8404
- }
8405
- /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
8406
- function normalizeEntryToV2(entry) {
8407
- const kind = entry.kind;
8408
- if (typeof kind !== "string") return null;
8409
- if (DERIVED_ENTRY_KINDS.has(kind) || kind === "plugin") return null;
8410
- if (kind === "health") return { kind: "health" };
8411
- if (kind === "agent") {
8412
- const slug = typeof entry.slug === "string" ? entry.slug : typeof entry.agentSlug === "string" ? entry.agentSlug : void 0;
8413
- if (!slug || typeof entry.moduleFile !== "string") return null;
8414
- return {
8415
- kind: "agent",
8416
- slug,
8417
- moduleFile: entry.moduleFile,
8418
- ...typeof entry.name === "string" ? { name: entry.name } : {},
8419
- ...typeof entry.description === "string" ? { description: entry.description } : {},
8420
- model: typeof entry.model === "string" ? entry.model : "",
8421
- systemPrompt: typeof entry.systemPrompt === "string" ? entry.systemPrompt : "",
8422
- toolCount: typeof entry.toolCount === "number" ? entry.toolCount : 0,
8423
- credentialCount: typeof entry.credentialCount === "number" ? entry.credentialCount : 0,
8424
- appSlugs: legacyAgentAppSlugs(entry),
8425
- toolSlugs: Array.isArray(entry.toolSlugs) ? entry.toolSlugs : []
8426
- };
8427
- }
8428
- if (kind === "workflow") {
8429
- const slug = typeof entry.slug === "string" ? entry.slug : typeof entry.workflowSlug === "string" ? entry.workflowSlug : void 0;
8430
- if (!slug || typeof entry.moduleFile !== "string") return null;
8431
- const name = typeof entry.name === "string" ? entry.name : typeof entry.workflowName === "string" ? entry.workflowName : void 0;
8432
- return {
8433
- kind: "workflow",
8434
- slug,
8435
- moduleFile: entry.moduleFile,
8436
- ...name ? { name } : {},
8437
- ...typeof entry.description === "string" ? { description: entry.description } : {},
8438
- subscribable: entry.subscribable === true,
8439
- requestSchema: entry.requestSchema && typeof entry.requestSchema === "object" ? entry.requestSchema : {}
8440
- };
8441
- }
8442
- if (kind === "trigger-webhook") {
8443
- if (typeof entry.moduleFile !== "string" || !Array.isArray(entry.attachmentIds)) return null;
8444
- const endpoint = typeof entry.endpoint === "string" ? entry.endpoint : typeof entry.path === "string" ? webhookEndpointFromPath(entry.path) : void 0;
8445
- if (!endpoint) return null;
8446
- return {
8447
- kind: "trigger-webhook",
8448
- endpoint,
8449
- attachmentIds: entry.attachmentIds,
8450
- moduleFile: entry.moduleFile,
8451
- ...typeof entry.sourceHash === "string" ? { sourceHash: entry.sourceHash } : {},
8452
- attachmentSchemas: entry.attachmentSchemas && typeof entry.attachmentSchemas === "object" ? entry.attachmentSchemas : {},
8453
- ...entry.attachmentMeta && typeof entry.attachmentMeta === "object" ? { attachmentMeta: entry.attachmentMeta } : {}
8454
- };
8455
- }
8456
- if (kind === "trigger-poll") {
8457
- if (typeof entry.attachmentId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string") return null;
8458
- return {
8459
- kind: "trigger-poll",
8460
- attachmentId: entry.attachmentId,
8461
- attachmentIds: Array.isArray(entry.attachmentIds) ? entry.attachmentIds : [entry.attachmentId],
8462
- moduleFile: entry.moduleFile,
8463
- ...typeof entry.sourceHash === "string" ? { sourceHash: entry.sourceHash } : {},
8464
- schedule: entry.schedule,
8465
- ...typeof entry.name === "string" ? { name: entry.name } : {},
8466
- ...typeof entry.description === "string" ? { description: entry.description } : {}
8467
- };
8468
- }
8469
- if (kind === "trigger-poll-group") {
8470
- if (typeof entry.pollId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string" || !Array.isArray(entry.attachmentIds)) return null;
8471
- return {
8472
- kind: "trigger-poll-group",
8473
- pollId: entry.pollId,
8474
- attachmentIds: entry.attachmentIds,
8475
- moduleFile: entry.moduleFile,
8476
- schedule: entry.schedule
8477
- };
8478
- }
8479
- if (kind === "cron-schedule") {
8480
- if (typeof entry.attachmentId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string") return null;
8481
- return {
8482
- kind: "cron-schedule",
8483
- attachmentId: entry.attachmentId,
8484
- attachmentIds: Array.isArray(entry.attachmentIds) ? entry.attachmentIds : [entry.attachmentId],
8485
- moduleFile: entry.moduleFile,
8486
- ...typeof entry.sourceHash === "string" ? { sourceHash: entry.sourceHash } : {},
8487
- schedule: entry.schedule,
8488
- ...typeof entry.name === "string" ? { name: entry.name } : {},
8489
- ...typeof entry.description === "string" ? { description: entry.description } : {}
8490
- };
8491
- }
8492
- return null;
8493
- }
8494
- /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
8495
- function normalizeV2ManifestInput(value) {
8496
- if (!value || typeof value !== "object") return value;
8497
- const raw = value;
8498
- if (raw.version !== 2 || !Array.isArray(raw.entries)) return value;
8499
- return {
8500
- ...raw,
8501
- entries: raw.entries.map((entry) => {
8502
- if (!entry || typeof entry !== "object") return entry;
8503
- const kind = entry.kind;
8504
- if (kind === "trigger-poll" || kind === "cron-schedule" || kind === "trigger-webhook" || kind === "trigger-poll-group") {
8505
- const trigger = entry;
8506
- if (Array.isArray(trigger.attachmentIds)) return entry;
8507
- return {
8508
- ...trigger,
8509
- attachmentIds: typeof trigger.attachmentId === "string" ? [trigger.attachmentId] : []
8510
- };
8511
- }
8512
- if (kind !== "agent") return entry;
8513
- const agent = entry;
8514
- if (Array.isArray(agent.appSlugs)) return entry;
8515
- const appSlugs = legacyAgentAppSlugs(agent);
8516
- if (appSlugs.length === 0) return entry;
8517
- const { credentialKeys: _credentialKeys, credentialSlugs: _credentialSlugs, ...rest } = agent;
8518
- return {
8519
- ...rest,
8520
- appSlugs,
8521
- toolSlugs: Array.isArray(agent.toolSlugs) ? agent.toolSlugs : []
8522
- };
8523
- })
8524
- };
8525
- }
8526
- /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
8527
- function normalizeStoredRouteManifestToV2(value) {
8528
- if (!value || typeof value !== "object") throw new Error("Invalid route manifest");
8529
- const raw = value;
8530
- if (raw.version === 2) return storedRouteManifestV2Schema.parse(normalizeV2ManifestInput(value));
8531
- const entriesRaw = Array.isArray(raw.entries) ? raw.entries : [];
8532
- const entries = [];
8533
- for (const entry of entriesRaw) {
8534
- if (!entry || typeof entry !== "object") continue;
8535
- const normalized = normalizeEntryToV2(entry);
8536
- if (normalized) entries.push(normalized);
8537
- }
8538
- return storedRouteManifestV2Schema.parse({
8539
- version: 2,
8540
- entries,
8541
- skills: raw.skills ?? [],
8542
- integrations: raw.integrations
8543
- });
8544
- }
9166
+ /**
9167
+ * Parse a stored route manifest. Only the strict v2 schema is supported: the
9168
+ * builder always emits v2 and every deploy regenerates the manifest, so there is
9169
+ * no legacy upcasting. (The pre-v2 `normalizeEntryToV2` path was removed once the
9170
+ * data tables were truncated and all artifacts redeployed.)
9171
+ */
8545
9172
  function parseStoredRouteManifest(value) {
8546
- return normalizeStoredRouteManifestToV2(value);
9173
+ return storedRouteManifestV2Schema.parse(value);
8547
9174
  }
8548
9175
  /** Messaging platforms that support agent gateway bindings. */
8549
9176
  const ChannelPlatformKeySchema = zod.z.enum(["slack"]);
@@ -9302,24 +9929,6 @@ function parseAppSlug(slug) {
9302
9929
  slug: trimmed
9303
9930
  };
9304
9931
  }
9305
- /** How a credential instance is stored (`credential_instances.auth_kind`). */
9306
- const CredentialAuthKindSchema = zod.z.enum([
9307
- "api_key",
9308
- "oauth_managed",
9309
- "keystroke"
9310
- ]);
9311
- /**
9312
- * Where a credential instance is stored (`credential_instances.scope_type`), and the only thing an
9313
- * action/tool can pin via `.scope(...)`. There is no resolution chain: when no scope is pinned, the
9314
- * resolver tries the project default, then the org default, then throws.
9315
- */
9316
- const CredentialScopeTypeSchema = zod.z.enum([
9317
- "organization",
9318
- "project",
9319
- "user"
9320
- ]);
9321
- CredentialAuthKindSchema.options;
9322
- CredentialScopeTypeSchema.options;
9323
9932
  /** Human-readable app name from a credential slug (e.g. `google-drive` → `Google Drive`). */
9324
9933
  function displayCredentialAppName(appId) {
9325
9934
  return appId.split(/[-_]+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
@@ -10414,7 +11023,7 @@ const WorkspaceTriggerSummarySchema = zod.z.object({
10414
11023
  id: zod.z.string(),
10415
11024
  slug: zod.z.string(),
10416
11025
  name: zod.z.string(),
10417
- description: zod.z.string().nullable(),
11026
+ description: zod.z.string().min(1),
10418
11027
  type: TriggerTypeSchema,
10419
11028
  status: TriggerStatusSchema,
10420
11029
  projectId: zod.z.string(),
@@ -10840,7 +11449,7 @@ const AgentSummarySchema = zod.z.object({
10840
11449
  name: zod.z.string().min(1),
10841
11450
  projectId: zod.z.string().min(1),
10842
11451
  updatedAt: zod.z.string().min(1),
10843
- description: zod.z.string().optional(),
11452
+ description: zod.z.string().min(1),
10844
11453
  sourcePath: zod.z.string().min(1).optional(),
10845
11454
  model: zod.z.string().optional(),
10846
11455
  capabilities: zod.z.object({
@@ -10862,7 +11471,7 @@ const WorkflowSummarySchema = zod.z.object({
10862
11471
  name: zod.z.string().min(1),
10863
11472
  projectId: zod.z.string().min(1),
10864
11473
  updatedAt: zod.z.string().min(1),
10865
- description: zod.z.string().optional(),
11474
+ description: zod.z.string().min(1),
10866
11475
  sourcePath: zod.z.string().min(1).optional(),
10867
11476
  lastRunAt: optionalTimestamp
10868
11477
  });
@@ -10872,7 +11481,7 @@ const SkillSummarySchema = zod.z.object({
10872
11481
  name: zod.z.string().min(1),
10873
11482
  projectId: zod.z.string().min(1),
10874
11483
  updatedAt: zod.z.string().min(1),
10875
- description: zod.z.string().optional(),
11484
+ description: zod.z.string().min(1),
10876
11485
  sourcePath: zod.z.string().min(1).optional()
10877
11486
  });
10878
11487
  const AgentSummaryListResponseSchema = zod.z.array(AgentSummarySchema);
@@ -11014,6 +11623,366 @@ const ListAgentWorkspaceFilesResponseSchema = zod.z.object({ files: zod.z.array(
11014
11623
  function agentWorkspaceFileId(path) {
11015
11624
  return projectFileId(path);
11016
11625
  }
11626
+ /** Whether the overview is still being produced or finished. */
11627
+ const WorkflowOverviewStatusSchema = zod.z.enum(["generating", "ready"]);
11628
+ /** One phase of the guided-tour overview. */
11629
+ const WorkflowPhaseSchema = zod.z.object({
11630
+ id: zod.z.string(),
11631
+ title: zod.z.string(),
11632
+ copy: zod.z.string(),
11633
+ nodeIds: zod.z.array(zod.z.string())
11634
+ });
11635
+ /** LLM-generated overview envelope. */
11636
+ const WorkspaceWorkflowOverviewSchema = zod.z.object({
11637
+ status: WorkflowOverviewStatusSchema,
11638
+ summary: zod.z.string(),
11639
+ phases: zod.z.array(WorkflowPhaseSchema),
11640
+ hash: zod.z.string(),
11641
+ generatedAt: zod.z.string().nullable(),
11642
+ model: zod.z.string()
11643
+ });
11644
+ /** Subset of JSON-Schema field types the dashboard form renders inline. */
11645
+ const WorkflowInputFieldTypeSchema = zod.z.enum([
11646
+ "string",
11647
+ "number",
11648
+ "boolean",
11649
+ "enum",
11650
+ "object",
11651
+ "array"
11652
+ ]);
11653
+ const WorkflowInputFieldSchema = zod.z.lazy(() => zod.z.object({
11654
+ key: zod.z.string(),
11655
+ label: zod.z.string(),
11656
+ type: WorkflowInputFieldTypeSchema,
11657
+ required: zod.z.boolean(),
11658
+ description: zod.z.string().optional(),
11659
+ placeholder: zod.z.string().optional(),
11660
+ options: zod.z.array(zod.z.string()).optional(),
11661
+ default: zod.z.union([
11662
+ zod.z.string(),
11663
+ zod.z.number(),
11664
+ zod.z.boolean()
11665
+ ]).optional(),
11666
+ children: zod.z.array(WorkflowInputFieldSchema).optional(),
11667
+ format: zod.z.string().optional()
11668
+ }));
11669
+ /** Flat, render-ready view of a workflow's input schema. */
11670
+ const WorkflowInputSchemaSchema = zod.z.object({ fields: zod.z.array(WorkflowInputFieldSchema) });
11671
+ /** A workflow's run-input contract plus its persisted values. */
11672
+ const WorkflowRunInputsSchema = zod.z.object({
11673
+ schema: WorkflowInputSchemaSchema,
11674
+ values: zod.z.record(zod.z.string(), zod.z.unknown()).nullable()
11675
+ });
11676
+ zod.z.object({ runId: zod.z.string() });
11677
+ /** Annotation lifecycle: "generating" while the LLM pass streams in, then "ready". */
11678
+ const WorkflowCanvasStatusSchema = zod.z.enum(["generating", "ready"]);
11679
+ /** LLM-produced enrichment for a single skeleton node. */
11680
+ const WorkflowCanvasAnnotationSchema = zod.z.object({
11681
+ label: zod.z.string().optional(),
11682
+ description: zod.z.string().optional()
11683
+ });
11684
+ /**
11685
+ * One token of a configured input value (inspector form). Mirrors the producer's
11686
+ * raw token kinds, with display fields filled by the platform join: `reference`
11687
+ * gains a human `sourceLabel`; `variable` may gain a `resolvedValue` when the name
11688
+ * matches a known top-level constant.
11689
+ */
11690
+ const WorkflowNodeValueTokenSchema = zod.z.discriminatedUnion("kind", [
11691
+ zod.z.object({
11692
+ kind: zod.z.literal("text"),
11693
+ text: zod.z.string()
11694
+ }),
11695
+ zod.z.object({
11696
+ kind: zod.z.literal("reference"),
11697
+ sourceNodeId: zod.z.string().optional(),
11698
+ sourceLabel: zod.z.string(),
11699
+ field: zod.z.string().optional()
11700
+ }),
11701
+ zod.z.object({
11702
+ kind: zod.z.literal("variable"),
11703
+ text: zod.z.string(),
11704
+ /** Concrete value when `text` resolves to a top-level literal constant. */
11705
+ resolvedValue: zod.z.string().optional()
11706
+ }),
11707
+ zod.z.object({
11708
+ kind: zod.z.literal("call"),
11709
+ name: zod.z.string()
11710
+ })
11711
+ ]);
11712
+ /** The configured value of one input at this call site. */
11713
+ const WorkflowNodeInputBindingSchema = zod.z.object({
11714
+ tokens: zod.z.array(WorkflowNodeValueTokenSchema),
11715
+ multiline: zod.z.boolean().optional()
11716
+ });
11717
+ /** An inspector input with optional call-site binding. */
11718
+ const WorkflowCanvasNodeInputSchema = WorkflowInputFieldSchema.and(zod.z.object({
11719
+ binding: WorkflowNodeInputBindingSchema.optional(),
11720
+ additional: zod.z.boolean().optional()
11721
+ }));
11722
+ /** Authored, deterministic metadata for a single node. */
11723
+ const WorkflowCanvasNodeMetaSchema = zod.z.object({
11724
+ kind: zod.z.enum([
11725
+ "action",
11726
+ "agent",
11727
+ "workflow",
11728
+ "llm",
11729
+ "trigger",
11730
+ "boundary"
11731
+ ]),
11732
+ slug: zod.z.string(),
11733
+ name: zod.z.string(),
11734
+ description: zod.z.string().optional(),
11735
+ appSlug: zod.z.string().optional(),
11736
+ inputs: zod.z.array(WorkflowCanvasNodeInputSchema),
11737
+ outputs: zod.z.array(WorkflowInputFieldSchema),
11738
+ requiredApps: zod.z.array(zod.z.string()).optional(),
11739
+ model: zod.z.string().optional(),
11740
+ toolCount: zod.z.number().int().nonnegative().optional()
11741
+ });
11742
+ /** The workflow canvas envelope. */
11743
+ const WorkflowCanvasSchema = zod.z.object({
11744
+ graph: WorkflowCanvasGraphSchema,
11745
+ nodeMetadata: zod.z.record(zod.z.string(), WorkflowCanvasNodeMetaSchema),
11746
+ annotations: zod.z.record(zod.z.string(), WorkflowCanvasAnnotationSchema),
11747
+ status: WorkflowCanvasStatusSchema,
11748
+ hash: zod.z.string(),
11749
+ generatedAt: zod.z.string().nullable(),
11750
+ model: zod.z.string()
11751
+ });
11752
+ /** Per-node execution state for a single run. */
11753
+ const WorkflowCanvasNodeRunStatusSchema = zod.z.enum([
11754
+ "pending",
11755
+ "running",
11756
+ "succeeded",
11757
+ "failed",
11758
+ "skipped"
11759
+ ]);
11760
+ const WorkflowCanvasNodeRunStateSchema = zod.z.object({
11761
+ status: WorkflowCanvasNodeRunStatusSchema,
11762
+ iteration: zod.z.object({
11763
+ index: zod.z.number().int().nonnegative(),
11764
+ total: zod.z.number().int().nonnegative()
11765
+ }).optional()
11766
+ });
11767
+ /** Overall lifecycle of a run as the canvas animates it. */
11768
+ const WorkflowCanvasRunStatusSchema = zod.z.enum([
11769
+ "running",
11770
+ "succeeded",
11771
+ "failed",
11772
+ "canceled"
11773
+ ]);
11774
+ /** A run projected onto the canvas. */
11775
+ const WorkflowCanvasRunSchema = zod.z.object({
11776
+ runId: zod.z.string(),
11777
+ status: WorkflowCanvasRunStatusSchema,
11778
+ startedAt: zod.z.string(),
11779
+ finishedAt: zod.z.string().nullable(),
11780
+ nodeStates: zod.z.record(zod.z.string(), WorkflowCanvasNodeRunStateSchema)
11781
+ });
11782
+ /** Scope a credential instance lives in. */
11783
+ const WorkflowCredentialScopeSchema = zod.z.enum([
11784
+ "organization",
11785
+ "project",
11786
+ "user"
11787
+ ]);
11788
+ /** The concrete credential instance a binding currently resolves to. */
11789
+ const WorkflowResolvedCredentialSchema = zod.z.object({
11790
+ id: zod.z.string(),
11791
+ name: zod.z.string(),
11792
+ scope: WorkflowCredentialScopeSchema,
11793
+ appSlug: zod.z.string().optional(),
11794
+ isDefault: zod.z.boolean().optional(),
11795
+ projectId: zod.z.string().optional(),
11796
+ projectName: zod.z.string().optional()
11797
+ });
11798
+ /** Default model for the gated code-block annotation pass — cheap, same as trigger overviews. */
11799
+ const DEFAULT_WORKFLOW_CANVAS_MODEL = "deepseek/deepseek-v4-flash";
11800
+ zod.z.record(zod.z.string(), WorkflowCanvasAnnotationSchema);
11801
+ /** One opaque code-block the annotation pass should label, keyed by its canvas node id. */
11802
+ const WorkflowCanvasAnnotationCodeBlockSchema = zod.z.object({
11803
+ nodeId: zod.z.string(),
11804
+ /** The raw source snippet (the node's label) the LLM turns into human copy. */
11805
+ source: zod.z.string()
11806
+ });
11807
+ /** Inputs the worker feeds the LLM for the gated code-block annotation pass. */
11808
+ const WorkflowCanvasAnnotationsInputSchema = zod.z.object({
11809
+ workflowName: zod.z.string(),
11810
+ workflowDescription: zod.z.string().nullable(),
11811
+ codeBlocks: zod.z.array(WorkflowCanvasAnnotationCodeBlockSchema)
11812
+ });
11813
+ zod.z.object({
11814
+ workflowId: zod.z.string(),
11815
+ projectId: zod.z.string(),
11816
+ hash: zod.z.string(),
11817
+ model: zod.z.string(),
11818
+ input: WorkflowCanvasAnnotationsInputSchema
11819
+ });
11820
+ /** Default model for the workflow overview pass — cheap, same as the annotation/trigger passes. */
11821
+ const DEFAULT_WORKFLOW_OVERVIEW_MODEL = "deepseek/deepseek-v4-flash";
11822
+ /** One node as the overview LLM sees it (derived from the canvas node metadata + graph). */
11823
+ const WorkflowOverviewNodeSchema = zod.z.object({
11824
+ nodeId: zod.z.string(),
11825
+ label: zod.z.string(),
11826
+ kind: zod.z.string(),
11827
+ description: zod.z.string().optional(),
11828
+ /** App/integration slug for steps imported from a `@keystrokehq/<app>` package. */
11829
+ appSlug: zod.z.string().optional(),
11830
+ /** Authored input field keys (from the action/agent/workflow definition). */
11831
+ inputs: zod.z.array(zod.z.string()).optional(),
11832
+ /** Authored output field keys. */
11833
+ outputs: zod.z.array(zod.z.string()).optional(),
11834
+ /** Agent-only: the model the agent runs on. */
11835
+ model: zod.z.string().optional(),
11836
+ /** Agent-only: number of tools available to the agent. */
11837
+ toolCount: zod.z.number().int().nonnegative().optional()
11838
+ });
11839
+ /** Inputs the worker feeds the LLM to produce the workflow overview (summary + phases). */
11840
+ const WorkflowOverviewInputSchema = zod.z.object({
11841
+ workflowName: zod.z.string(),
11842
+ workflowDescription: zod.z.string().nullable(),
11843
+ /** Display labels of the trigger sources upstream of the workflow (read-only context). */
11844
+ triggers: zod.z.array(zod.z.string()),
11845
+ nodes: zod.z.array(WorkflowOverviewNodeSchema),
11846
+ /** The workflow's TypeScript source (best-effort; null when the deploy has no source snapshot). */
11847
+ source: zod.z.string().nullable()
11848
+ });
11849
+ zod.z.object({
11850
+ workflowId: zod.z.string(),
11851
+ projectId: zod.z.string(),
11852
+ hash: zod.z.string(),
11853
+ model: zod.z.string(),
11854
+ input: WorkflowOverviewInputSchema
11855
+ });
11856
+ const WorkflowCanvasCredentialBindingBaseSchema = zod.z.object({
11857
+ credentialKey: zod.z.string(),
11858
+ label: zod.z.string(),
11859
+ appSlug: zod.z.string().optional()
11860
+ });
11861
+ /** How one credential requirement on a step currently resolves. */
11862
+ const WorkflowCanvasCredentialBindingSchema = zod.z.union([
11863
+ WorkflowCanvasCredentialBindingBaseSchema.extend({
11864
+ policy: zod.z.enum([
11865
+ "project-default",
11866
+ "org-default",
11867
+ "assigned"
11868
+ ]),
11869
+ instance: WorkflowResolvedCredentialSchema
11870
+ }),
11871
+ WorkflowCanvasCredentialBindingBaseSchema.extend({
11872
+ policy: zod.z.literal("scope-pinned"),
11873
+ pinnedScope: WorkflowCredentialScopeSchema,
11874
+ instance: WorkflowResolvedCredentialSchema
11875
+ }),
11876
+ WorkflowCanvasCredentialBindingBaseSchema.extend({
11877
+ policy: zod.z.literal("unresolved"),
11878
+ reason: zod.z.enum(["needs-selection", "missing"]),
11879
+ pinnedScope: WorkflowCredentialScopeSchema.optional()
11880
+ })
11881
+ ]);
11882
+ /** Live credential overlay: canvas node id → its step's credential bindings. */
11883
+ const WorkflowCanvasCredentialBindingsSchema = zod.z.record(zod.z.string(), zod.z.array(WorkflowCanvasCredentialBindingSchema));
11884
+ function isObject(value) {
11885
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11886
+ }
11887
+ function titleCaseKey(key) {
11888
+ return key.replace(/([a-z0-9])([A-Z])/g, "$1 $2").split(/[-_/]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
11889
+ }
11890
+ function normalizeFieldType(schema) {
11891
+ const rawType = schema.type;
11892
+ if (Array.isArray(rawType)) {
11893
+ const primary = rawType.find((entry) => entry !== "null");
11894
+ if (typeof primary === "string") return normalizeFieldType({
11895
+ ...schema,
11896
+ type: primary
11897
+ });
11898
+ return null;
11899
+ }
11900
+ if (typeof rawType !== "string") return null;
11901
+ if (Array.isArray(schema.enum) && schema.enum.every((entry) => typeof entry === "string")) return "enum";
11902
+ switch (rawType) {
11903
+ case "string":
11904
+ case "number":
11905
+ case "integer": return rawType === "integer" ? "number" : rawType;
11906
+ case "boolean": return "boolean";
11907
+ case "object": return "object";
11908
+ case "array": return "array";
11909
+ default: return null;
11910
+ }
11911
+ }
11912
+ function normalizeField(key, schema, required) {
11913
+ const type = normalizeFieldType(schema);
11914
+ if (!type) return null;
11915
+ const field = {
11916
+ key,
11917
+ label: typeof schema.title === "string" ? schema.title : titleCaseKey(key),
11918
+ type,
11919
+ required,
11920
+ ...typeof schema.description === "string" ? { description: schema.description } : {},
11921
+ ...typeof schema.format === "string" ? { format: schema.format } : {}
11922
+ };
11923
+ if (type === "enum" && Array.isArray(schema.enum)) field.options = schema.enum.filter((entry) => typeof entry === "string");
11924
+ if (schema.default !== void 0 && (typeof schema.default === "string" || typeof schema.default === "number" || typeof schema.default === "boolean")) field.default = schema.default;
11925
+ if (type === "object" && isObject(schema.properties)) {
11926
+ const childRequired = Array.isArray(schema.required) ? schema.required.filter((entry) => typeof entry === "string") : [];
11927
+ field.children = Object.entries(schema.properties).flatMap(([childKey, childSchema]) => {
11928
+ if (!isObject(childSchema)) return [];
11929
+ const child = normalizeField(childKey, childSchema, childRequired.includes(childKey));
11930
+ return child ? [child] : [];
11931
+ });
11932
+ }
11933
+ if (type === "array" && isObject(schema.items)) {
11934
+ const item = normalizeField("item", schema.items, false);
11935
+ if (item) field.children = [item];
11936
+ }
11937
+ return field;
11938
+ }
11939
+ /** Normalize a workflow manifest JSON Schema into the dashboard run-input form shape. */
11940
+ function jsonSchemaToWorkflowInputSchema(requestSchema) {
11941
+ if (!isObject(requestSchema)) return { fields: [] };
11942
+ const properties = isObject(requestSchema.properties) ? requestSchema.properties : {};
11943
+ const required = Array.isArray(requestSchema.required) ? requestSchema.required.filter((entry) => typeof entry === "string") : [];
11944
+ return { fields: Object.entries(properties).flatMap(([key, propertySchema]) => {
11945
+ if (!isObject(propertySchema)) return [];
11946
+ const field = normalizeField(key, propertySchema, required.includes(key));
11947
+ return field ? [field] : [];
11948
+ }) };
11949
+ }
11950
+ function isEmpty(value) {
11951
+ return value === void 0 || value === null || value === "";
11952
+ }
11953
+ function validateFieldValue(field, value) {
11954
+ if (field.required && isEmpty(value)) return "Required";
11955
+ if (isEmpty(value)) return null;
11956
+ switch (field.type) {
11957
+ case "number":
11958
+ if (typeof value !== "number" && Number.isNaN(Number(value))) return "Must be a number";
11959
+ return null;
11960
+ case "boolean":
11961
+ if (typeof value !== "boolean") return "Must be a boolean";
11962
+ return null;
11963
+ case "enum":
11964
+ if (typeof value !== "string" || field.options && !field.options.includes(value)) return "Invalid option";
11965
+ return null;
11966
+ default: return null;
11967
+ }
11968
+ }
11969
+ /** Validate a run-input payload against the normalized schema (authoritative on save). */
11970
+ function validateWorkflowRunInputValues(schema, values) {
11971
+ const allowedKeys = new Set(schema.fields.map((field) => field.key));
11972
+ for (const key of Object.keys(values)) if (!allowedKeys.has(key)) return {
11973
+ ok: false,
11974
+ error: `Unknown field "${key}"`
11975
+ };
11976
+ for (const field of schema.fields) {
11977
+ const message = validateFieldValue(field, values[field.key]);
11978
+ if (message) return {
11979
+ ok: false,
11980
+ error: `${field.key}: ${message}`
11981
+ };
11982
+ }
11983
+ return { ok: true };
11984
+ }
11985
+ const WorkflowRunInputsPutBodySchema = zod.z.record(zod.z.string(), zod.z.unknown());
11017
11986
  function mapOrganization(row) {
11018
11987
  return OrganizationSchema.parse({
11019
11988
  id: row.id,
@@ -11114,8 +12083,8 @@ function mapProjectDeployment(row) {
11114
12083
  const zodSchema$2 = zod.z.custom((v) => v instanceof zod.z.ZodType, "must be a Zod schema");
11115
12084
  zod.z.object({
11116
12085
  slug: zod.z.string().trim().min(1),
11117
- name: zod.z.string().optional(),
11118
- description: zod.z.string().optional(),
12086
+ name: requiredDisplayTextSchema,
12087
+ description: requiredDisplayTextSchema,
11119
12088
  input: zodSchema$2,
11120
12089
  output: zodSchema$2,
11121
12090
  credentials: zod.z.array(credentialInputSchema).optional(),
@@ -11135,6 +12104,26 @@ function registerWorkflowRunGetter(fn) {
11135
12104
  }
11136
12105
  new node_async_hooks.AsyncLocalStorage();
11137
12106
  //#endregion
12107
+ //#region ../../packages/credentials/dist/store-4At2Wnk9.mjs
12108
+ function normalizeRow(row) {
12109
+ const { projectId: _projectId, ...rest } = row;
12110
+ return rest;
12111
+ }
12112
+ async function listCredentialAssignmentsByTarget$1(options) {
12113
+ return (await (0, _keystrokehq_database.listCredentialAssignmentsByTarget)(options)).map(normalizeRow);
12114
+ }
12115
+ function normalizeLocalRow(row) {
12116
+ const { projectId: _projectId, ...rest } = row;
12117
+ return rest;
12118
+ }
12119
+ async function selectCredentialInstanceById$1$1(id) {
12120
+ const row = await (0, _keystrokehq_database.selectCredentialInstanceById)(id);
12121
+ return row ? normalizeLocalRow(row) : void 0;
12122
+ }
12123
+ async function selectCredentialInstancesForScope$1$1(appSlug, scopeType, scopeId) {
12124
+ return (await (0, _keystrokehq_database.selectCredentialInstancesForScope)(appSlug, scopeType, scopeId)).map(normalizeLocalRow);
12125
+ }
12126
+ //#endregion
11138
12127
  //#region ../../packages/secrets/dist/index.mjs
11139
12128
  const ALGORITHM = "aes-256-gcm";
11140
12129
  const IV_LENGTH = 12;
@@ -29536,6 +30525,130 @@ var import_dist$1 = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exp
29536
30525
  exports.visit = visit.visit;
29537
30526
  exports.visitAsync = visit.visitAsync;
29538
30527
  })))(), 1);
30528
+ const EMPTY_ASSIGNMENT_SET = {
30529
+ byConsumer: {},
30530
+ wildcard: {}
30531
+ };
30532
+ function selectAssignedInstanceId(assignments, consumerId, credentialSlug) {
30533
+ if (!assignments) return;
30534
+ if (consumerId) {
30535
+ const specific = assignments.byConsumer[consumerId]?.[credentialSlug];
30536
+ if (specific) return specific;
30537
+ }
30538
+ return assignments.wildcard[credentialSlug];
30539
+ }
30540
+ function buildAssignmentSet(rows) {
30541
+ const byConsumer = {};
30542
+ const wildcard = {};
30543
+ for (const row of rows) {
30544
+ if (row.consumerId === "*") {
30545
+ wildcard[row.credentialSlug] = row.instanceId;
30546
+ continue;
30547
+ }
30548
+ const bucket = byConsumer[row.consumerId] ?? {};
30549
+ bucket[row.credentialSlug] = row.instanceId;
30550
+ byConsumer[row.consumerId] = bucket;
30551
+ }
30552
+ return {
30553
+ byConsumer,
30554
+ wildcard
30555
+ };
30556
+ }
30557
+ async function loadCredentialAssignments(options) {
30558
+ if (!(0, _keystrokehq_database.isDatabaseInitialized)()) return EMPTY_ASSIGNMENT_SET;
30559
+ return buildAssignmentSet(await listCredentialAssignmentsByTarget$1(options));
30560
+ }
30561
+ async function withCredentialAssignments(context, options) {
30562
+ const assignments = await loadCredentialAssignments(options);
30563
+ return {
30564
+ ...context,
30565
+ assignments
30566
+ };
30567
+ }
30568
+ function toSummary(row) {
30569
+ return {
30570
+ id: row.id,
30571
+ appSlug: row.appSlug,
30572
+ name: row.name,
30573
+ label: row.label,
30574
+ scopeType: row.scopeType,
30575
+ scopeId: row.scopeId,
30576
+ isDefault: row.isDefault
30577
+ };
30578
+ }
30579
+ /** Pick the single instance for a scope: the only one, or the unique default; else ambiguous. */
30580
+ function pickInstance$1(rows) {
30581
+ if (rows.length === 0) return { kind: "none" };
30582
+ if (rows.length === 1) return {
30583
+ kind: "row",
30584
+ row: rows[0]
30585
+ };
30586
+ const defaults = rows.filter((row) => row.isDefault);
30587
+ if (defaults.length === 1) return {
30588
+ kind: "row",
30589
+ row: defaults[0]
30590
+ };
30591
+ return { kind: "needs-selection" };
30592
+ }
30593
+ function scopeIdFor(scope, context, orgId) {
30594
+ switch (scope) {
30595
+ case "organization": return orgId;
30596
+ case "project": return context.projectId;
30597
+ case "user": return context.userId;
30598
+ }
30599
+ }
30600
+ async function describeCredentialBinding(options) {
30601
+ const { key, scope, consumerId, context } = options;
30602
+ const orgId = context.orgId ?? (0, _keystrokehq_database.getServerTenantScopeId)();
30603
+ const assignedId = selectAssignedInstanceId(context.assignments, consumerId, key);
30604
+ if (assignedId) {
30605
+ const row = await selectCredentialInstanceById$1$1(assignedId);
30606
+ if (row && row.appSlug === key) return {
30607
+ policy: "assigned",
30608
+ row: toSummary(row)
30609
+ };
30610
+ }
30611
+ if (scope) {
30612
+ const scopeId = scopeIdFor(scope, context, orgId);
30613
+ const picked = scopeId ? pickInstance$1(await selectCredentialInstancesForScope$1$1(key, scope, scopeId)) : { kind: "none" };
30614
+ if (picked.kind === "row") return {
30615
+ policy: "scope-pinned",
30616
+ pinnedScope: scope,
30617
+ row: toSummary(picked.row)
30618
+ };
30619
+ return {
30620
+ policy: "unresolved",
30621
+ reason: picked.kind === "needs-selection" ? "needs-selection" : "missing",
30622
+ pinnedScope: scope
30623
+ };
30624
+ }
30625
+ if (context.projectId) {
30626
+ const picked = pickInstance$1(await selectCredentialInstancesForScope$1$1(key, "project", context.projectId));
30627
+ if (picked.kind === "row") return {
30628
+ policy: "project-default",
30629
+ row: toSummary(picked.row)
30630
+ };
30631
+ if (picked.kind === "needs-selection") return {
30632
+ policy: "unresolved",
30633
+ reason: "needs-selection"
30634
+ };
30635
+ }
30636
+ if (orgId) {
30637
+ const picked = pickInstance$1(await selectCredentialInstancesForScope$1$1(key, "organization", orgId));
30638
+ if (picked.kind === "row") return {
30639
+ policy: "org-default",
30640
+ row: toSummary(picked.row)
30641
+ };
30642
+ if (picked.kind === "needs-selection") return {
30643
+ policy: "unresolved",
30644
+ reason: "needs-selection"
30645
+ };
30646
+ }
30647
+ return {
30648
+ policy: "unresolved",
30649
+ reason: "missing"
30650
+ };
30651
+ }
29539
30652
  function encodeOAuthState(payload) {
29540
30653
  return (0, _keystrokehq_database.encryptCredentialPayload)(JSON.stringify(payload));
29541
30654
  }
@@ -29808,8 +30921,8 @@ const zodSchema$1 = zod.z.custom((v) => v instanceof zod.z.ZodType, "must be a Z
29808
30921
  /** Runtime validation for an unbranded workflow definition. */
29809
30922
  const workflowCoreSchema = zod.z.object({
29810
30923
  slug: zod.z.string().trim().min(1),
29811
- name: zod.z.string().optional(),
29812
- description: zod.z.string().optional(),
30924
+ name: requiredDisplayTextSchema,
30925
+ description: requiredDisplayTextSchema,
29813
30926
  subscription: zod.z.object({ mode: zod.z.enum(["system", "subscribable"]).optional() }).optional(),
29814
30927
  input: zodSchema$1,
29815
30928
  output: zodSchema$1,
@@ -29825,6 +30938,7 @@ function isWorkflow(value) {
29825
30938
  if (!(WORKFLOW in value) || value[WORKFLOW] !== true) return false;
29826
30939
  return workflowCoreSchema.safeParse(value).success;
29827
30940
  }
30941
+ new node_async_hooks.AsyncLocalStorage();
29828
30942
  const storage = new node_async_hooks.AsyncLocalStorage();
29829
30943
  registerWorkflowRunGetter(() => {
29830
30944
  const store = storage.getStore();
@@ -29887,11 +31001,12 @@ function normalizeLegacySlugFields(value) {
29887
31001
  return next;
29888
31002
  }
29889
31003
  const slugField = zod.z.string().trim().min(1);
29890
- const optionalTextField = zod.z.string().optional();
31004
+ const requiredTextField = zod.z.string().trim().min(1);
31005
+ const optionalTextField = zod.z.string().trim().min(1).optional();
29891
31006
  const baseSourceShape = {
29892
31007
  slug: slugField,
29893
- name: optionalTextField,
29894
- description: optionalTextField,
31008
+ name: requiredTextField,
31009
+ description: requiredTextField,
29895
31010
  attach: zod.z.function()
29896
31011
  };
29897
31012
  const webhookSourceSchema = zod.z.object({
@@ -43771,6 +44886,18 @@ Object.defineProperty(exports, "DEFAULT_TRIGGER_OVERVIEW_MODEL", {
43771
44886
  return DEFAULT_TRIGGER_OVERVIEW_MODEL;
43772
44887
  }
43773
44888
  });
44889
+ Object.defineProperty(exports, "DEFAULT_WORKFLOW_CANVAS_MODEL", {
44890
+ enumerable: true,
44891
+ get: function() {
44892
+ return DEFAULT_WORKFLOW_CANVAS_MODEL;
44893
+ }
44894
+ });
44895
+ Object.defineProperty(exports, "DEFAULT_WORKFLOW_OVERVIEW_MODEL", {
44896
+ enumerable: true,
44897
+ get: function() {
44898
+ return DEFAULT_WORKFLOW_OVERVIEW_MODEL;
44899
+ }
44900
+ });
43774
44901
  Object.defineProperty(exports, "DeclineOrganizationInvitationResponseSchema", {
43775
44902
  enumerable: true,
43776
44903
  get: function() {
@@ -44275,6 +45402,36 @@ Object.defineProperty(exports, "UserPreferencesSchema", {
44275
45402
  return UserPreferencesSchema;
44276
45403
  }
44277
45404
  });
45405
+ Object.defineProperty(exports, "WorkflowCanvasCredentialBindingsSchema", {
45406
+ enumerable: true,
45407
+ get: function() {
45408
+ return WorkflowCanvasCredentialBindingsSchema;
45409
+ }
45410
+ });
45411
+ Object.defineProperty(exports, "WorkflowCanvasRunSchema", {
45412
+ enumerable: true,
45413
+ get: function() {
45414
+ return WorkflowCanvasRunSchema;
45415
+ }
45416
+ });
45417
+ Object.defineProperty(exports, "WorkflowCanvasSchema", {
45418
+ enumerable: true,
45419
+ get: function() {
45420
+ return WorkflowCanvasSchema;
45421
+ }
45422
+ });
45423
+ Object.defineProperty(exports, "WorkflowRunInputsPutBodySchema", {
45424
+ enumerable: true,
45425
+ get: function() {
45426
+ return WorkflowRunInputsPutBodySchema;
45427
+ }
45428
+ });
45429
+ Object.defineProperty(exports, "WorkflowRunInputsSchema", {
45430
+ enumerable: true,
45431
+ get: function() {
45432
+ return WorkflowRunInputsSchema;
45433
+ }
45434
+ });
44278
45435
  Object.defineProperty(exports, "WorkflowSummaryDetailResponseSchema", {
44279
45436
  enumerable: true,
44280
45437
  get: function() {
@@ -44323,6 +45480,12 @@ Object.defineProperty(exports, "WorkspaceTriggerRunListResponseSchema", {
44323
45480
  return WorkspaceTriggerRunListResponseSchema;
44324
45481
  }
44325
45482
  });
45483
+ Object.defineProperty(exports, "WorkspaceWorkflowOverviewSchema", {
45484
+ enumerable: true,
45485
+ get: function() {
45486
+ return WorkspaceWorkflowOverviewSchema;
45487
+ }
45488
+ });
44326
45489
  Object.defineProperty(exports, "__commonJSMin", {
44327
45490
  enumerable: true,
44328
45491
  get: function() {
@@ -44419,6 +45582,12 @@ Object.defineProperty(exports, "deriveCredentialInstanceSlug", {
44419
45582
  return deriveCredentialInstanceSlug;
44420
45583
  }
44421
45584
  });
45585
+ Object.defineProperty(exports, "describeCredentialBinding", {
45586
+ enumerable: true,
45587
+ get: function() {
45588
+ return describeCredentialBinding;
45589
+ }
45590
+ });
44422
45591
  Object.defineProperty(exports, "discoverGraphqlApp", {
44423
45592
  enumerable: true,
44424
45593
  get: function() {
@@ -44503,6 +45672,12 @@ Object.defineProperty(exports, "isUserAvatarStorageKey", {
44503
45672
  return isUserAvatarStorageKey;
44504
45673
  }
44505
45674
  });
45675
+ Object.defineProperty(exports, "jsonSchemaToWorkflowInputSchema", {
45676
+ enumerable: true,
45677
+ get: function() {
45678
+ return jsonSchemaToWorkflowInputSchema;
45679
+ }
45680
+ });
44506
45681
  Object.defineProperty(exports, "keystrokeAssetsAvatarKeyFromPublicUrl", {
44507
45682
  enumerable: true,
44508
45683
  get: function() {
@@ -44689,11 +45864,23 @@ Object.defineProperty(exports, "validateCredentialValueAgainstFields", {
44689
45864
  return validateCredentialValueAgainstFields;
44690
45865
  }
44691
45866
  });
45867
+ Object.defineProperty(exports, "validateWorkflowRunInputValues", {
45868
+ enumerable: true,
45869
+ get: function() {
45870
+ return validateWorkflowRunInputValues;
45871
+ }
45872
+ });
44692
45873
  Object.defineProperty(exports, "validationErrorResponse", {
44693
45874
  enumerable: true,
44694
45875
  get: function() {
44695
45876
  return validationErrorResponse;
44696
45877
  }
44697
45878
  });
45879
+ Object.defineProperty(exports, "withCredentialAssignments", {
45880
+ enumerable: true,
45881
+ get: function() {
45882
+ return withCredentialAssignments;
45883
+ }
45884
+ });
44698
45885
 
44699
- //# sourceMappingURL=dist-BGnpuTuc.cjs.map
45886
+ //# sourceMappingURL=dist-BSIIH4ft.cjs.map