@keystrokehq/platform 0.1.3 → 0.1.5

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 (304) hide show
  1. package/dist/{awk2-LA3USKJP-BE8esz9o.cjs → awk2-LA3USKJP-AIZOQ0nh.cjs} +2 -2
  2. package/dist/{awk2-LA3USKJP-BE8esz9o.cjs.map → awk2-LA3USKJP-AIZOQ0nh.cjs.map} +1 -1
  3. package/dist/{awk2-LA3USKJP-CU79F18c.mjs → awk2-LA3USKJP-CPcab6tL.mjs} +2 -2
  4. package/dist/{awk2-LA3USKJP-CU79F18c.mjs.map → awk2-LA3USKJP-CPcab6tL.mjs.map} +1 -1
  5. package/dist/{base64-C2AIWVNC-ESsdavRZ.mjs → base64-C2AIWVNC-BU7vFrSz.mjs} +2 -2
  6. package/dist/{base64-C2AIWVNC-ESsdavRZ.mjs.map → base64-C2AIWVNC-BU7vFrSz.mjs.map} +1 -1
  7. package/dist/{base64-C2AIWVNC-CGFeI4Fm.cjs → base64-C2AIWVNC-fWp5IaIt.cjs} +2 -2
  8. package/dist/{base64-C2AIWVNC-CGFeI4Fm.cjs.map → base64-C2AIWVNC-fWp5IaIt.cjs.map} +1 -1
  9. package/dist/{bash-YZ33HQZQ-Tqw_IzZM.mjs → bash-YZ33HQZQ-B7vkAJM1.mjs} +2 -2
  10. package/dist/{bash-YZ33HQZQ-Tqw_IzZM.mjs.map → bash-YZ33HQZQ-B7vkAJM1.mjs.map} +1 -1
  11. package/dist/{bash-YZ33HQZQ-Z8YFnXLG.cjs → bash-YZ33HQZQ-BfFH_xKv.cjs} +2 -2
  12. package/dist/{bash-YZ33HQZQ-Z8YFnXLG.cjs.map → bash-YZ33HQZQ-BfFH_xKv.cjs.map} +1 -1
  13. package/dist/{cat-TSFMZVYS-B-Qi4MIN.mjs → cat-TSFMZVYS-BoRCwL0X.mjs} +3 -3
  14. package/dist/{cat-TSFMZVYS-B-Qi4MIN.mjs.map → cat-TSFMZVYS-BoRCwL0X.mjs.map} +1 -1
  15. package/dist/{cat-TSFMZVYS-3tq36V6U.cjs → cat-TSFMZVYS-Lk2fLg0m.cjs} +3 -3
  16. package/dist/{cat-TSFMZVYS-3tq36V6U.cjs.map → cat-TSFMZVYS-Lk2fLg0m.cjs.map} +1 -1
  17. package/dist/{chunk-5H5SCKJM-DG2zdmBl.cjs → chunk-5H5SCKJM-Bf_pfjgz.cjs} +2 -2
  18. package/dist/{chunk-5H5SCKJM-DG2zdmBl.cjs.map → chunk-5H5SCKJM-Bf_pfjgz.cjs.map} +1 -1
  19. package/dist/{chunk-5H5SCKJM-jzOek3RA.mjs → chunk-5H5SCKJM-CCkl-6iR.mjs} +2 -2
  20. package/dist/{chunk-5H5SCKJM-jzOek3RA.mjs.map → chunk-5H5SCKJM-CCkl-6iR.mjs.map} +1 -1
  21. package/dist/{chunk-AQ6FYS2X-CWRY3oXA.cjs → chunk-AQ6FYS2X-C_kf5YCJ.cjs} +2 -2
  22. package/dist/{chunk-AQ6FYS2X-CWRY3oXA.cjs.map → chunk-AQ6FYS2X-C_kf5YCJ.cjs.map} +1 -1
  23. package/dist/{chunk-AQ6FYS2X-Bz4Sl0he.mjs → chunk-AQ6FYS2X-CaSbvwYS.mjs} +2 -2
  24. package/dist/{chunk-AQ6FYS2X-Bz4Sl0he.mjs.map → chunk-AQ6FYS2X-CaSbvwYS.mjs.map} +1 -1
  25. package/dist/{chunk-CHFEPBH4-Cg_Ca4ca.mjs → chunk-CHFEPBH4-Bk9Prhxt.mjs} +2 -2
  26. package/dist/{chunk-CHFEPBH4-Cg_Ca4ca.mjs.map → chunk-CHFEPBH4-Bk9Prhxt.mjs.map} +1 -1
  27. package/dist/{chunk-CHFEPBH4-BjRBtKoa.cjs → chunk-CHFEPBH4-Cdk9vq_c.cjs} +2 -2
  28. package/dist/{chunk-CHFEPBH4-BjRBtKoa.cjs.map → chunk-CHFEPBH4-Cdk9vq_c.cjs.map} +1 -1
  29. package/dist/{chunk-EBAPSGAO-TuSvdjDg.cjs → chunk-EBAPSGAO-9HAVo6nm.cjs} +2 -2
  30. package/dist/{chunk-EBAPSGAO-TuSvdjDg.cjs.map → chunk-EBAPSGAO-9HAVo6nm.cjs.map} +1 -1
  31. package/dist/{chunk-EBAPSGAO-BAjudTzg.mjs → chunk-EBAPSGAO-BPVz-6BX.mjs} +2 -2
  32. package/dist/{chunk-EBAPSGAO-BAjudTzg.mjs.map → chunk-EBAPSGAO-BPVz-6BX.mjs.map} +1 -1
  33. package/dist/{chunk-LEKBROJD-VngQ-bGK.cjs → chunk-LEKBROJD-4MTnJXG3.cjs} +2 -2
  34. package/dist/{chunk-LEKBROJD-VngQ-bGK.cjs.map → chunk-LEKBROJD-4MTnJXG3.cjs.map} +1 -1
  35. package/dist/{chunk-LEKBROJD-B7WoDbJJ.mjs → chunk-LEKBROJD-Bk_pJfFK.mjs} +2 -2
  36. package/dist/{chunk-LEKBROJD-B7WoDbJJ.mjs.map → chunk-LEKBROJD-Bk_pJfFK.mjs.map} +1 -1
  37. package/dist/{chunk-VPADYNBD-B7JoVwJq.mjs → chunk-VPADYNBD-Bc5abqkF.mjs} +2 -2
  38. package/dist/{chunk-VPADYNBD-B7JoVwJq.mjs.map → chunk-VPADYNBD-Bc5abqkF.mjs.map} +1 -1
  39. package/dist/{chunk-VPADYNBD-Ju6wgxLY.cjs → chunk-VPADYNBD-CS9VA1aJ.cjs} +2 -2
  40. package/dist/{chunk-VPADYNBD-Ju6wgxLY.cjs.map → chunk-VPADYNBD-CS9VA1aJ.cjs.map} +1 -1
  41. package/dist/{chunk-YCLFEX4T-BoIwWBSQ.mjs → chunk-YCLFEX4T-Cz2QbPh0.mjs} +2 -2
  42. package/dist/{chunk-YCLFEX4T-BoIwWBSQ.mjs.map → chunk-YCLFEX4T-Cz2QbPh0.mjs.map} +1 -1
  43. package/dist/{chunk-YCLFEX4T-81Ii8Wlf.cjs → chunk-YCLFEX4T-D65vwGHr.cjs} +2 -2
  44. package/dist/{chunk-YCLFEX4T-81Ii8Wlf.cjs.map → chunk-YCLFEX4T-D65vwGHr.cjs.map} +1 -1
  45. package/dist/{column-XT6UFXNQ-B8RfIkpb.mjs → column-XT6UFXNQ-BsXqWbAP.mjs} +2 -2
  46. package/dist/{column-XT6UFXNQ-B8RfIkpb.mjs.map → column-XT6UFXNQ-BsXqWbAP.mjs.map} +1 -1
  47. package/dist/{column-XT6UFXNQ-ieIKmRkh.cjs → column-XT6UFXNQ-CwtLFuCh.cjs} +2 -2
  48. package/dist/{column-XT6UFXNQ-ieIKmRkh.cjs.map → column-XT6UFXNQ-CwtLFuCh.cjs.map} +1 -1
  49. package/dist/{comm-VV2LDX2J-DEKxgGlr.mjs → comm-VV2LDX2J-BZdS-Fqy.mjs} +2 -2
  50. package/dist/{comm-VV2LDX2J-DEKxgGlr.mjs.map → comm-VV2LDX2J-BZdS-Fqy.mjs.map} +1 -1
  51. package/dist/{comm-VV2LDX2J-CdE-OYeG.cjs → comm-VV2LDX2J-YL8m_4d1.cjs} +2 -2
  52. package/dist/{comm-VV2LDX2J-CdE-OYeG.cjs.map → comm-VV2LDX2J-YL8m_4d1.cjs.map} +1 -1
  53. package/dist/{config-CXBff_fs.d.mts → config-DF8H5mS5.d.mts} +17 -13
  54. package/dist/{config-C78TqlE1.d.cts → config-DqyMT-Xg.d.cts} +17 -13
  55. package/dist/config.cjs +1 -1
  56. package/dist/config.cjs.map +1 -1
  57. package/dist/config.d.cts +1 -1
  58. package/dist/config.d.mts +1 -1
  59. package/dist/config.mjs +1 -1
  60. package/dist/config.mjs.map +1 -1
  61. package/dist/{cp-BISAAS7A-CMVh32j_.mjs → cp-BISAAS7A-C0MVoZpt.mjs} +2 -2
  62. package/dist/{cp-BISAAS7A-CMVh32j_.mjs.map → cp-BISAAS7A-C0MVoZpt.mjs.map} +1 -1
  63. package/dist/{cp-BISAAS7A-C1ygPb-h.cjs → cp-BISAAS7A-Dx6QG-P9.cjs} +2 -2
  64. package/dist/{cp-BISAAS7A-C1ygPb-h.cjs.map → cp-BISAAS7A-Dx6QG-P9.cjs.map} +1 -1
  65. package/dist/{cut-OKARJCCV-CluNzLiu.mjs → cut-OKARJCCV-BKWEQwCZ.mjs} +3 -3
  66. package/dist/{cut-OKARJCCV-CluNzLiu.mjs.map → cut-OKARJCCV-BKWEQwCZ.mjs.map} +1 -1
  67. package/dist/{cut-OKARJCCV-S-g4hG3d.cjs → cut-OKARJCCV-C1CAocst.cjs} +3 -3
  68. package/dist/{cut-OKARJCCV-S-g4hG3d.cjs.map → cut-OKARJCCV-C1CAocst.cjs.map} +1 -1
  69. package/dist/{diff-MWJFIG7X-Xtqp7FtF.cjs → diff-MWJFIG7X-D5nTdPdk.cjs} +2 -2
  70. package/dist/{diff-MWJFIG7X-Xtqp7FtF.cjs.map → diff-MWJFIG7X-D5nTdPdk.cjs.map} +1 -1
  71. package/dist/{diff-MWJFIG7X-CuSut3C1.mjs → diff-MWJFIG7X-YTniIfbL.mjs} +2 -2
  72. package/dist/{diff-MWJFIG7X-CuSut3C1.mjs.map → diff-MWJFIG7X-YTniIfbL.mjs.map} +1 -1
  73. package/dist/{dist-D1Iv7_7S.cjs → dist-C3ioU2dM.cjs} +559 -329
  74. package/dist/{dist-D1Iv7_7S.cjs.map → dist-C3ioU2dM.cjs.map} +1 -1
  75. package/dist/{dist-70NUfApd.mjs → dist-CQMZgfp_.mjs} +518 -330
  76. package/dist/dist-CQMZgfp_.mjs.map +1 -0
  77. package/dist/{du-572XNP42-f68GOB47.cjs → du-572XNP42-B2vhVgxe.cjs} +2 -2
  78. package/dist/{du-572XNP42-f68GOB47.cjs.map → du-572XNP42-B2vhVgxe.cjs.map} +1 -1
  79. package/dist/{du-572XNP42-BTLDH4CK.mjs → du-572XNP42-CmxmrMJd.mjs} +2 -2
  80. package/dist/{du-572XNP42-BTLDH4CK.mjs.map → du-572XNP42-CmxmrMJd.mjs.map} +1 -1
  81. package/dist/{env-36M5BO7M-DHcnOUrA.cjs → env-36M5BO7M-Dj2YwzST.cjs} +2 -2
  82. package/dist/{env-36M5BO7M-DHcnOUrA.cjs.map → env-36M5BO7M-Dj2YwzST.cjs.map} +1 -1
  83. package/dist/{env-36M5BO7M-CjuGiDaW.mjs → env-36M5BO7M-DupdD4fz.mjs} +2 -2
  84. package/dist/{env-36M5BO7M-CjuGiDaW.mjs.map → env-36M5BO7M-DupdD4fz.mjs.map} +1 -1
  85. package/dist/{expand-JSPG6VOP-Cmm7S480.mjs → expand-JSPG6VOP-BtD3fO-u.mjs} +2 -2
  86. package/dist/{expand-JSPG6VOP-Cmm7S480.mjs.map → expand-JSPG6VOP-BtD3fO-u.mjs.map} +1 -1
  87. package/dist/{expand-JSPG6VOP-BAEvLz6y.cjs → expand-JSPG6VOP-C4VQzWfg.cjs} +2 -2
  88. package/dist/{expand-JSPG6VOP-BAEvLz6y.cjs.map → expand-JSPG6VOP-C4VQzWfg.cjs.map} +1 -1
  89. package/dist/{expr-5JAACS4X-C3PXSs0i.mjs → expr-5JAACS4X-C75E9ncn.mjs} +2 -2
  90. package/dist/{expr-5JAACS4X-C3PXSs0i.mjs.map → expr-5JAACS4X-C75E9ncn.mjs.map} +1 -1
  91. package/dist/{expr-5JAACS4X-BFLtaqNy.cjs → expr-5JAACS4X-DX-k1Bjo.cjs} +2 -2
  92. package/dist/{expr-5JAACS4X-BFLtaqNy.cjs.map → expr-5JAACS4X-DX-k1Bjo.cjs.map} +1 -1
  93. package/dist/{find-INTH3OLC-Bf3-4Zi2.cjs → find-INTH3OLC-2rIv2Sgt.cjs} +3 -3
  94. package/dist/{find-INTH3OLC-Bf3-4Zi2.cjs.map → find-INTH3OLC-2rIv2Sgt.cjs.map} +1 -1
  95. package/dist/{find-INTH3OLC-D6wBmhsd.mjs → find-INTH3OLC-B2oqqlwt.mjs} +3 -3
  96. package/dist/{find-INTH3OLC-D6wBmhsd.mjs.map → find-INTH3OLC-B2oqqlwt.mjs.map} +1 -1
  97. package/dist/{fold-4TQNYMSW-BIl_iV0S.cjs → fold-4TQNYMSW-DFQEjMsZ.cjs} +2 -2
  98. package/dist/{fold-4TQNYMSW-BIl_iV0S.cjs.map → fold-4TQNYMSW-DFQEjMsZ.cjs.map} +1 -1
  99. package/dist/{fold-4TQNYMSW-BVCyD8C0.mjs → fold-4TQNYMSW-DzA5SsAN.mjs} +2 -2
  100. package/dist/{fold-4TQNYMSW-BVCyD8C0.mjs.map → fold-4TQNYMSW-DzA5SsAN.mjs.map} +1 -1
  101. package/dist/{grep-V3LQVMRQ-BLwElJ9a.mjs → grep-V3LQVMRQ-CUJiTsKp.mjs} +4 -4
  102. package/dist/{grep-V3LQVMRQ-BLwElJ9a.mjs.map → grep-V3LQVMRQ-CUJiTsKp.mjs.map} +1 -1
  103. package/dist/{grep-V3LQVMRQ-BcfmH0yO.cjs → grep-V3LQVMRQ-D--OXkar.cjs} +4 -4
  104. package/dist/{grep-V3LQVMRQ-BcfmH0yO.cjs.map → grep-V3LQVMRQ-D--OXkar.cjs.map} +1 -1
  105. package/dist/{gzip-O5ASJAFY-B9ermjPq.cjs → gzip-O5ASJAFY-B3o0_eql.cjs} +2 -2
  106. package/dist/{gzip-O5ASJAFY-B9ermjPq.cjs.map → gzip-O5ASJAFY-B3o0_eql.cjs.map} +1 -1
  107. package/dist/{gzip-O5ASJAFY-BjVFU42g.mjs → gzip-O5ASJAFY-D8i6m9_W.mjs} +2 -2
  108. package/dist/{gzip-O5ASJAFY-BjVFU42g.mjs.map → gzip-O5ASJAFY-D8i6m9_W.mjs.map} +1 -1
  109. package/dist/{head-442HYESI-BGRcjEMI.mjs → head-442HYESI-BDYHKho-.mjs} +2 -2
  110. package/dist/{head-442HYESI-BGRcjEMI.mjs.map → head-442HYESI-BDYHKho-.mjs.map} +1 -1
  111. package/dist/{head-442HYESI-_RXn0SBi.cjs → head-442HYESI-Bztg6Xka.cjs} +2 -2
  112. package/dist/{head-442HYESI-_RXn0SBi.cjs.map → head-442HYESI-Bztg6Xka.cjs.map} +1 -1
  113. package/dist/{help-HZ6M2CKN-BCHt7Yu_.mjs → help-HZ6M2CKN-C95bcvt_.mjs} +2 -2
  114. package/dist/{help-HZ6M2CKN-BCHt7Yu_.mjs.map → help-HZ6M2CKN-C95bcvt_.mjs.map} +1 -1
  115. package/dist/{help-HZ6M2CKN-DJP0l3xk.cjs → help-HZ6M2CKN-CFA5POOW.cjs} +2 -2
  116. package/dist/{help-HZ6M2CKN-DJP0l3xk.cjs.map → help-HZ6M2CKN-CFA5POOW.cjs.map} +1 -1
  117. package/dist/{html-to-markdown-JW4MSQZO-Dq7eYKW0.mjs → html-to-markdown-JW4MSQZO-8YYzjAx0.mjs} +2 -2
  118. package/dist/{html-to-markdown-JW4MSQZO-Dq7eYKW0.mjs.map → html-to-markdown-JW4MSQZO-8YYzjAx0.mjs.map} +1 -1
  119. package/dist/{html-to-markdown-JW4MSQZO-yoaOs45E.cjs → html-to-markdown-JW4MSQZO-B3xkcb1w.cjs} +2 -2
  120. package/dist/{html-to-markdown-JW4MSQZO-yoaOs45E.cjs.map → html-to-markdown-JW4MSQZO-B3xkcb1w.cjs.map} +1 -1
  121. package/dist/{join-TBRGI3LQ-BU7FYSK3.mjs → join-TBRGI3LQ-Cb96ZaTF.mjs} +2 -2
  122. package/dist/{join-TBRGI3LQ-BU7FYSK3.mjs.map → join-TBRGI3LQ-Cb96ZaTF.mjs.map} +1 -1
  123. package/dist/{join-TBRGI3LQ-BOS3zpbh.cjs → join-TBRGI3LQ-CzBO0uid.cjs} +2 -2
  124. package/dist/{join-TBRGI3LQ-BOS3zpbh.cjs.map → join-TBRGI3LQ-CzBO0uid.cjs.map} +1 -1
  125. package/dist/{jq-4XLYLOS5-C-4KbpIO.cjs → jq-4XLYLOS5-Dmw7PtvC.cjs} +4 -4
  126. package/dist/{jq-4XLYLOS5-C-4KbpIO.cjs.map → jq-4XLYLOS5-Dmw7PtvC.cjs.map} +1 -1
  127. package/dist/{jq-4XLYLOS5-tfCBGz19.mjs → jq-4XLYLOS5-QEF-9JGc.mjs} +4 -4
  128. package/dist/{jq-4XLYLOS5-tfCBGz19.mjs.map → jq-4XLYLOS5-QEF-9JGc.mjs.map} +1 -1
  129. package/dist/{js-exec-N5KEZBH7--5grqRpb.cjs → js-exec-N5KEZBH7-BLGWy2LA.cjs} +4 -4
  130. package/dist/{js-exec-N5KEZBH7--5grqRpb.cjs.map → js-exec-N5KEZBH7-BLGWy2LA.cjs.map} +1 -1
  131. package/dist/{js-exec-N5KEZBH7-C5C01q6k.mjs → js-exec-N5KEZBH7-DWi8fMhN.mjs} +4 -4
  132. package/dist/{js-exec-N5KEZBH7-C5C01q6k.mjs.map → js-exec-N5KEZBH7-DWi8fMhN.mjs.map} +1 -1
  133. package/dist/{lib-CNke9ACR.mjs → lib-C8lgRYXp.mjs} +2 -2
  134. package/dist/{lib-CNke9ACR.mjs.map → lib-C8lgRYXp.mjs.map} +1 -1
  135. package/dist/{lib-CW0fuh-i.cjs → lib-ux1xJJmr.cjs} +2 -2
  136. package/dist/{lib-CW0fuh-i.cjs.map → lib-ux1xJJmr.cjs.map} +1 -1
  137. package/dist/{ln-4LGSXXGD-Cy8gNPMC.mjs → ln-4LGSXXGD-BtA5nI4o.mjs} +2 -2
  138. package/dist/{ln-4LGSXXGD-Cy8gNPMC.mjs.map → ln-4LGSXXGD-BtA5nI4o.mjs.map} +1 -1
  139. package/dist/{ln-4LGSXXGD-B0nikKzZ.cjs → ln-4LGSXXGD-CkQRVPru.cjs} +2 -2
  140. package/dist/{ln-4LGSXXGD-B0nikKzZ.cjs.map → ln-4LGSXXGD-CkQRVPru.cjs.map} +1 -1
  141. package/dist/{ls-ZJGQER7M-DMYpsOhX.mjs → ls-ZJGQER7M-Bm9zc4KC.mjs} +2 -2
  142. package/dist/{ls-ZJGQER7M-DMYpsOhX.mjs.map → ls-ZJGQER7M-Bm9zc4KC.mjs.map} +1 -1
  143. package/dist/{ls-ZJGQER7M-CaSRbmLC.cjs → ls-ZJGQER7M-H5DDO7bw.cjs} +2 -2
  144. package/dist/{ls-ZJGQER7M-CaSRbmLC.cjs.map → ls-ZJGQER7M-H5DDO7bw.cjs.map} +1 -1
  145. package/dist/{lzma-L8nnN88o.cjs → lzma-CjqgTQ5J.cjs} +2 -2
  146. package/dist/{lzma-L8nnN88o.cjs.map → lzma-CjqgTQ5J.cjs.map} +1 -1
  147. package/dist/{md5sum-SPU24VSG-wjaqw6M5.cjs → md5sum-SPU24VSG-B6JGibcS.cjs} +3 -3
  148. package/dist/{md5sum-SPU24VSG-wjaqw6M5.cjs.map → md5sum-SPU24VSG-B6JGibcS.cjs.map} +1 -1
  149. package/dist/{md5sum-SPU24VSG-DDehVi3L.mjs → md5sum-SPU24VSG-Dqy3agsE.mjs} +3 -3
  150. package/dist/{md5sum-SPU24VSG-DDehVi3L.mjs.map → md5sum-SPU24VSG-Dqy3agsE.mjs.map} +1 -1
  151. package/dist/{mkdir-MEPGZOB6-D6EapQqG.cjs → mkdir-MEPGZOB6-BFwkd4Z7.cjs} +2 -2
  152. package/dist/{mkdir-MEPGZOB6-D6EapQqG.cjs.map → mkdir-MEPGZOB6-BFwkd4Z7.cjs.map} +1 -1
  153. package/dist/{mkdir-MEPGZOB6-BoeUbSt6.mjs → mkdir-MEPGZOB6-CMrYu1Ht.mjs} +2 -2
  154. package/dist/{mkdir-MEPGZOB6-BoeUbSt6.mjs.map → mkdir-MEPGZOB6-CMrYu1Ht.mjs.map} +1 -1
  155. package/dist/{mv-W5BIQ646-ee9iH5gF.mjs → mv-W5BIQ646-CWgyAnYE.mjs} +2 -2
  156. package/dist/{mv-W5BIQ646-ee9iH5gF.mjs.map → mv-W5BIQ646-CWgyAnYE.mjs.map} +1 -1
  157. package/dist/{mv-W5BIQ646-Cl3grRdX.cjs → mv-W5BIQ646-hheW03eh.cjs} +2 -2
  158. package/dist/{mv-W5BIQ646-Cl3grRdX.cjs.map → mv-W5BIQ646-hheW03eh.cjs.map} +1 -1
  159. package/dist/{nl-WSDW7I4O-DttNn_cO.cjs → nl-WSDW7I4O-DcVnQp-1.cjs} +2 -2
  160. package/dist/{nl-WSDW7I4O-DttNn_cO.cjs.map → nl-WSDW7I4O-DcVnQp-1.cjs.map} +1 -1
  161. package/dist/{nl-WSDW7I4O-DveMZ08l.mjs → nl-WSDW7I4O-hZyrJS6m.mjs} +2 -2
  162. package/dist/{nl-WSDW7I4O-DveMZ08l.mjs.map → nl-WSDW7I4O-hZyrJS6m.mjs.map} +1 -1
  163. package/dist/{od-WOKFDJTP-DCy3_AZ5.mjs → od-WOKFDJTP-60QMVWxL.mjs} +2 -2
  164. package/dist/{od-WOKFDJTP-DCy3_AZ5.mjs.map → od-WOKFDJTP-60QMVWxL.mjs.map} +1 -1
  165. package/dist/{od-WOKFDJTP-BJWjPFho.cjs → od-WOKFDJTP-CIGKYa74.cjs} +2 -2
  166. package/dist/{od-WOKFDJTP-BJWjPFho.cjs.map → od-WOKFDJTP-CIGKYa74.cjs.map} +1 -1
  167. package/dist/{paste-7JC6S4DX-DEoyg9Vv.cjs → paste-7JC6S4DX-CC0xWPbo.cjs} +2 -2
  168. package/dist/{paste-7JC6S4DX-DEoyg9Vv.cjs.map → paste-7JC6S4DX-CC0xWPbo.cjs.map} +1 -1
  169. package/dist/{paste-7JC6S4DX-DL9UawIf.mjs → paste-7JC6S4DX-QB7MigtV.mjs} +2 -2
  170. package/dist/{paste-7JC6S4DX-DL9UawIf.mjs.map → paste-7JC6S4DX-QB7MigtV.mjs.map} +1 -1
  171. package/dist/{printf-TWGXF445-BlwG6dD2.mjs → printf-TWGXF445-BuI_jQx5.mjs} +2 -2
  172. package/dist/{printf-TWGXF445-BlwG6dD2.mjs.map → printf-TWGXF445-BuI_jQx5.mjs.map} +1 -1
  173. package/dist/{printf-TWGXF445-B1fsJl2X.cjs → printf-TWGXF445-bSICkDD6.cjs} +2 -2
  174. package/dist/{printf-TWGXF445-B1fsJl2X.cjs.map → printf-TWGXF445-bSICkDD6.cjs.map} +1 -1
  175. package/dist/{python3-POMOR4OA-qY8EzVSe.mjs → python3-POMOR4OA-CQv_ljO3.mjs} +3 -3
  176. package/dist/{python3-POMOR4OA-qY8EzVSe.mjs.map → python3-POMOR4OA-CQv_ljO3.mjs.map} +1 -1
  177. package/dist/{python3-POMOR4OA-B8aVGk7h.cjs → python3-POMOR4OA-D8YyzdQy.cjs} +3 -3
  178. package/dist/{python3-POMOR4OA-B8aVGk7h.cjs.map → python3-POMOR4OA-D8YyzdQy.cjs.map} +1 -1
  179. package/dist/{rev-5EHFX4EJ-Dxay6iFE.mjs → rev-5EHFX4EJ-BCHr71Dm.mjs} +2 -2
  180. package/dist/{rev-5EHFX4EJ-Dxay6iFE.mjs.map → rev-5EHFX4EJ-BCHr71Dm.mjs.map} +1 -1
  181. package/dist/{rev-5EHFX4EJ-B27blDxm.cjs → rev-5EHFX4EJ-BS2n_x9V.cjs} +2 -2
  182. package/dist/{rev-5EHFX4EJ-B27blDxm.cjs.map → rev-5EHFX4EJ-BS2n_x9V.cjs.map} +1 -1
  183. package/dist/{rg-S4FXYXWB-BL_fs0a0.cjs → rg-S4FXYXWB-Bol68AvR.cjs} +3 -3
  184. package/dist/{rg-S4FXYXWB-BL_fs0a0.cjs.map → rg-S4FXYXWB-Bol68AvR.cjs.map} +1 -1
  185. package/dist/{rg-S4FXYXWB-b3jjC2M6.mjs → rg-S4FXYXWB-C8PEpvTX.mjs} +3 -3
  186. package/dist/{rg-S4FXYXWB-b3jjC2M6.mjs.map → rg-S4FXYXWB-C8PEpvTX.mjs.map} +1 -1
  187. package/dist/{rm-SSGETQVQ-CskLcJOp.cjs → rm-SSGETQVQ-BPv10nPA.cjs} +2 -2
  188. package/dist/{rm-SSGETQVQ-CskLcJOp.cjs.map → rm-SSGETQVQ-BPv10nPA.cjs.map} +1 -1
  189. package/dist/{rm-SSGETQVQ-D0Grjo65.mjs → rm-SSGETQVQ-C1OgRoSu.mjs} +2 -2
  190. package/dist/{rm-SSGETQVQ-D0Grjo65.mjs.map → rm-SSGETQVQ-C1OgRoSu.mjs.map} +1 -1
  191. package/dist/{rmdir-OC4ZLPYA-BZ86Q3Wr.mjs → rmdir-OC4ZLPYA-BFuqEQ5J.mjs} +2 -2
  192. package/dist/{rmdir-OC4ZLPYA-BZ86Q3Wr.mjs.map → rmdir-OC4ZLPYA-BFuqEQ5J.mjs.map} +1 -1
  193. package/dist/{rmdir-OC4ZLPYA-Br6jTWJO.cjs → rmdir-OC4ZLPYA-DngaXCWg.cjs} +2 -2
  194. package/dist/{rmdir-OC4ZLPYA-Br6jTWJO.cjs.map → rmdir-OC4ZLPYA-DngaXCWg.cjs.map} +1 -1
  195. package/dist/run.cjs +1 -1
  196. package/dist/run.mjs +1 -1
  197. package/dist/{sed-S5UIK574-C0ikpRUI.mjs → sed-S5UIK574-C8OThvO-.mjs} +2 -2
  198. package/dist/{sed-S5UIK574-C0ikpRUI.mjs.map → sed-S5UIK574-C8OThvO-.mjs.map} +1 -1
  199. package/dist/{sed-S5UIK574-OUlTmK0x.cjs → sed-S5UIK574-CF78rdnK.cjs} +2 -2
  200. package/dist/{sed-S5UIK574-OUlTmK0x.cjs.map → sed-S5UIK574-CF78rdnK.cjs.map} +1 -1
  201. package/dist/{sha1sum-2PTOAFR6-hLKNluNQ.mjs → sha1sum-2PTOAFR6-BgSg3k-0.mjs} +3 -3
  202. package/dist/{sha1sum-2PTOAFR6-hLKNluNQ.mjs.map → sha1sum-2PTOAFR6-BgSg3k-0.mjs.map} +1 -1
  203. package/dist/{sha1sum-2PTOAFR6-B_DU8HD8.cjs → sha1sum-2PTOAFR6-C48qu6hM.cjs} +3 -3
  204. package/dist/{sha1sum-2PTOAFR6-B_DU8HD8.cjs.map → sha1sum-2PTOAFR6-C48qu6hM.cjs.map} +1 -1
  205. package/dist/{sha256sum-NS7D3IXX-c6RHEh31.mjs → sha256sum-NS7D3IXX-BML40mGR.mjs} +3 -3
  206. package/dist/{sha256sum-NS7D3IXX-c6RHEh31.mjs.map → sha256sum-NS7D3IXX-BML40mGR.mjs.map} +1 -1
  207. package/dist/{sha256sum-NS7D3IXX-YzzSU71d.cjs → sha256sum-NS7D3IXX-DTZ34xii.cjs} +3 -3
  208. package/dist/{sha256sum-NS7D3IXX-YzzSU71d.cjs.map → sha256sum-NS7D3IXX-DTZ34xii.cjs.map} +1 -1
  209. package/dist/{sleep-X22JJINO-lQ5Wi1rP.mjs → sleep-X22JJINO-BzDRKdtv.mjs} +2 -2
  210. package/dist/{sleep-X22JJINO-lQ5Wi1rP.mjs.map → sleep-X22JJINO-BzDRKdtv.mjs.map} +1 -1
  211. package/dist/{sleep-X22JJINO-DFWLmtic.cjs → sleep-X22JJINO-Dy9v8Z4n.cjs} +2 -2
  212. package/dist/{sleep-X22JJINO-DFWLmtic.cjs.map → sleep-X22JJINO-Dy9v8Z4n.cjs.map} +1 -1
  213. package/dist/{sort-SW2YEO5B-Njc26SUn.mjs → sort-SW2YEO5B-ClyGJwMQ.mjs} +3 -3
  214. package/dist/{sort-SW2YEO5B-Njc26SUn.mjs.map → sort-SW2YEO5B-ClyGJwMQ.mjs.map} +1 -1
  215. package/dist/{sort-SW2YEO5B-BlJCEbS7.cjs → sort-SW2YEO5B-DwbO0wml.cjs} +3 -3
  216. package/dist/{sort-SW2YEO5B-BlJCEbS7.cjs.map → sort-SW2YEO5B-DwbO0wml.cjs.map} +1 -1
  217. package/dist/{split-4KKZZXXE-DGFsDrFE.cjs → split-4KKZZXXE-D3kKToq-.cjs} +2 -2
  218. package/dist/{split-4KKZZXXE-DGFsDrFE.cjs.map → split-4KKZZXXE-D3kKToq-.cjs.map} +1 -1
  219. package/dist/{split-4KKZZXXE-C97QsnxB.mjs → split-4KKZZXXE-oyZFQtYU.mjs} +2 -2
  220. package/dist/{split-4KKZZXXE-C97QsnxB.mjs.map → split-4KKZZXXE-oyZFQtYU.mjs.map} +1 -1
  221. package/dist/{sqlite3-CGOEFJAO-HGqCZYuu.mjs → sqlite3-CGOEFJAO-BedLxgf_.mjs} +2 -2
  222. package/dist/{sqlite3-CGOEFJAO-HGqCZYuu.mjs.map → sqlite3-CGOEFJAO-BedLxgf_.mjs.map} +1 -1
  223. package/dist/{sqlite3-CGOEFJAO-D78UkTyw.cjs → sqlite3-CGOEFJAO-DUW1XIou.cjs} +2 -2
  224. package/dist/{sqlite3-CGOEFJAO-D78UkTyw.cjs.map → sqlite3-CGOEFJAO-DUW1XIou.cjs.map} +1 -1
  225. package/dist/{start-DAlaZ5zj.mjs → start-9_8ZcdaU.mjs} +337 -228
  226. package/dist/start-9_8ZcdaU.mjs.map +1 -0
  227. package/dist/{start-BX-bkX9K.cjs → start-CBrH4KOb.cjs} +337 -228
  228. package/dist/start-CBrH4KOb.cjs.map +1 -0
  229. package/dist/start.cjs +1 -1
  230. package/dist/start.d.cts +1 -1
  231. package/dist/start.d.mts +1 -1
  232. package/dist/start.mjs +1 -1
  233. package/dist/{strings-6WDHLGMX-CeJiCt-u.cjs → strings-6WDHLGMX-5ObhNSGS.cjs} +2 -2
  234. package/dist/{strings-6WDHLGMX-CeJiCt-u.cjs.map → strings-6WDHLGMX-5ObhNSGS.cjs.map} +1 -1
  235. package/dist/{strings-6WDHLGMX-Dix-GFiu.mjs → strings-6WDHLGMX-DXaUbNpx.mjs} +2 -2
  236. package/dist/{strings-6WDHLGMX-Dix-GFiu.mjs.map → strings-6WDHLGMX-DXaUbNpx.mjs.map} +1 -1
  237. package/dist/{tac-2STMMJYW-DlI5binK.cjs → tac-2STMMJYW-CLSjS7F2.cjs} +2 -2
  238. package/dist/{tac-2STMMJYW-DlI5binK.cjs.map → tac-2STMMJYW-CLSjS7F2.cjs.map} +1 -1
  239. package/dist/{tac-2STMMJYW-Bm0D_YqQ.mjs → tac-2STMMJYW-Ov0tcgNn.mjs} +2 -2
  240. package/dist/{tac-2STMMJYW-Bm0D_YqQ.mjs.map → tac-2STMMJYW-Ov0tcgNn.mjs.map} +1 -1
  241. package/dist/{tail-R4PCA2C4-TH4AUhAb.cjs → tail-R4PCA2C4-C018_ZAk.cjs} +2 -2
  242. package/dist/{tail-R4PCA2C4-TH4AUhAb.cjs.map → tail-R4PCA2C4-C018_ZAk.cjs.map} +1 -1
  243. package/dist/{tail-R4PCA2C4-7wsnh20i.mjs → tail-R4PCA2C4-KgqykSFz.mjs} +2 -2
  244. package/dist/{tail-R4PCA2C4-7wsnh20i.mjs.map → tail-R4PCA2C4-KgqykSFz.mjs.map} +1 -1
  245. package/dist/{tar-STHHZTZ6-DELlRab1.cjs → tar-STHHZTZ6-BcBkmdCH.cjs} +4 -4
  246. package/dist/{tar-STHHZTZ6-DELlRab1.cjs.map → tar-STHHZTZ6-BcBkmdCH.cjs.map} +1 -1
  247. package/dist/{tar-STHHZTZ6-gShA0vQ1.mjs → tar-STHHZTZ6-CCPYnq7u.mjs} +3 -3
  248. package/dist/{tar-STHHZTZ6-gShA0vQ1.mjs.map → tar-STHHZTZ6-CCPYnq7u.mjs.map} +1 -1
  249. package/dist/{tee-YUZ2FKCJ-D_BE3AiF.cjs → tee-YUZ2FKCJ-Cce_gOKf.cjs} +2 -2
  250. package/dist/{tee-YUZ2FKCJ-D_BE3AiF.cjs.map → tee-YUZ2FKCJ-Cce_gOKf.cjs.map} +1 -1
  251. package/dist/{tee-YUZ2FKCJ-6jGvzLuO.mjs → tee-YUZ2FKCJ-D7LOkjQo.mjs} +2 -2
  252. package/dist/{tee-YUZ2FKCJ-6jGvzLuO.mjs.map → tee-YUZ2FKCJ-D7LOkjQo.mjs.map} +1 -1
  253. package/dist/{time-D4LNBSWX-D7RWA_NU.mjs → time-D4LNBSWX-CvYHvswI.mjs} +2 -2
  254. package/dist/{time-D4LNBSWX-D7RWA_NU.mjs.map → time-D4LNBSWX-CvYHvswI.mjs.map} +1 -1
  255. package/dist/{time-D4LNBSWX-zKxg-wM1.cjs → time-D4LNBSWX-D9C8_lG9.cjs} +2 -2
  256. package/dist/{time-D4LNBSWX-zKxg-wM1.cjs.map → time-D4LNBSWX-D9C8_lG9.cjs.map} +1 -1
  257. package/dist/{timeout-YDCRSLPQ-D42ruxso.mjs → timeout-YDCRSLPQ-CacPbawx.mjs} +2 -2
  258. package/dist/{timeout-YDCRSLPQ-D42ruxso.mjs.map → timeout-YDCRSLPQ-CacPbawx.mjs.map} +1 -1
  259. package/dist/{timeout-YDCRSLPQ-DWs-ACr6.cjs → timeout-YDCRSLPQ-Ccs9ipQM.cjs} +2 -2
  260. package/dist/{timeout-YDCRSLPQ-DWs-ACr6.cjs.map → timeout-YDCRSLPQ-Ccs9ipQM.cjs.map} +1 -1
  261. package/dist/{touch-UA33VN3N-OcSMUASX.mjs → touch-UA33VN3N-D2ndvYPZ.mjs} +2 -2
  262. package/dist/{touch-UA33VN3N-OcSMUASX.mjs.map → touch-UA33VN3N-D2ndvYPZ.mjs.map} +1 -1
  263. package/dist/{touch-UA33VN3N-BALmWXCe.cjs → touch-UA33VN3N-Dxlmlbm_.cjs} +2 -2
  264. package/dist/{touch-UA33VN3N-BALmWXCe.cjs.map → touch-UA33VN3N-Dxlmlbm_.cjs.map} +1 -1
  265. package/dist/{tr-36LHWFRQ-DDHiAg_m.cjs → tr-36LHWFRQ-Bzq2x5-h.cjs} +2 -2
  266. package/dist/{tr-36LHWFRQ-DDHiAg_m.cjs.map → tr-36LHWFRQ-Bzq2x5-h.cjs.map} +1 -1
  267. package/dist/{tr-36LHWFRQ-BHhoJAPK.mjs → tr-36LHWFRQ-CWCuChgL.mjs} +2 -2
  268. package/dist/{tr-36LHWFRQ-BHhoJAPK.mjs.map → tr-36LHWFRQ-CWCuChgL.mjs.map} +1 -1
  269. package/dist/{tree-YLD52CNT-BqqLx-tM.cjs → tree-YLD52CNT-BQipj5RY.cjs} +2 -2
  270. package/dist/{tree-YLD52CNT-BqqLx-tM.cjs.map → tree-YLD52CNT-BQipj5RY.cjs.map} +1 -1
  271. package/dist/{tree-YLD52CNT-CuJMHpsw.mjs → tree-YLD52CNT-CDfF4vcr.mjs} +2 -2
  272. package/dist/{tree-YLD52CNT-CuJMHpsw.mjs.map → tree-YLD52CNT-CDfF4vcr.mjs.map} +1 -1
  273. package/dist/{unexpand-CADSA4VO-BORtdsy_.cjs → unexpand-CADSA4VO-C4qGbx-B.cjs} +2 -2
  274. package/dist/{unexpand-CADSA4VO-BORtdsy_.cjs.map → unexpand-CADSA4VO-C4qGbx-B.cjs.map} +1 -1
  275. package/dist/{unexpand-CADSA4VO-CHiw_MI4.mjs → unexpand-CADSA4VO-COvRSVlE.mjs} +2 -2
  276. package/dist/{unexpand-CADSA4VO-CHiw_MI4.mjs.map → unexpand-CADSA4VO-COvRSVlE.mjs.map} +1 -1
  277. package/dist/{uniq-XSIZR6PB-Byah97Ij.mjs → uniq-XSIZR6PB-C8bN8gfm.mjs} +3 -3
  278. package/dist/{uniq-XSIZR6PB-Byah97Ij.mjs.map → uniq-XSIZR6PB-C8bN8gfm.mjs.map} +1 -1
  279. package/dist/{uniq-XSIZR6PB-CyA5DoCP.cjs → uniq-XSIZR6PB-bJo9kdHr.cjs} +3 -3
  280. package/dist/{uniq-XSIZR6PB-CyA5DoCP.cjs.map → uniq-XSIZR6PB-bJo9kdHr.cjs.map} +1 -1
  281. package/dist/{wc-LF7NU4LA-CPMTeSun.mjs → wc-LF7NU4LA-D4xFJZxz.mjs} +3 -3
  282. package/dist/{wc-LF7NU4LA-CPMTeSun.mjs.map → wc-LF7NU4LA-D4xFJZxz.mjs.map} +1 -1
  283. package/dist/{wc-LF7NU4LA-DUBYnutH.cjs → wc-LF7NU4LA-NAR5lgIG.cjs} +3 -3
  284. package/dist/{wc-LF7NU4LA-DUBYnutH.cjs.map → wc-LF7NU4LA-NAR5lgIG.cjs.map} +1 -1
  285. package/dist/{xan-Y6WF3IRG-CLfddWd-.mjs → xan-Y6WF3IRG-D16SQobd.mjs} +6 -6
  286. package/dist/{xan-Y6WF3IRG-CLfddWd-.mjs.map → xan-Y6WF3IRG-D16SQobd.mjs.map} +1 -1
  287. package/dist/{xan-Y6WF3IRG-W4Yr19gE.cjs → xan-Y6WF3IRG-RigAd0GA.cjs} +6 -6
  288. package/dist/{xan-Y6WF3IRG-W4Yr19gE.cjs.map → xan-Y6WF3IRG-RigAd0GA.cjs.map} +1 -1
  289. package/dist/{xan-view-HDVKHFC2-B_Xy-tdc.mjs → xan-view-HDVKHFC2-CJ527xHS.mjs} +3 -3
  290. package/dist/{xan-view-HDVKHFC2-B_Xy-tdc.mjs.map → xan-view-HDVKHFC2-CJ527xHS.mjs.map} +1 -1
  291. package/dist/{xan-view-HDVKHFC2-CWkN0IJ1.cjs → xan-view-HDVKHFC2-pRqYeBi3.cjs} +3 -3
  292. package/dist/{xan-view-HDVKHFC2-CWkN0IJ1.cjs.map → xan-view-HDVKHFC2-pRqYeBi3.cjs.map} +1 -1
  293. package/dist/{xargs-MGZPH7AX-B_Ocy3BY.cjs → xargs-MGZPH7AX-C0bVMPGM.cjs} +2 -2
  294. package/dist/{xargs-MGZPH7AX-B_Ocy3BY.cjs.map → xargs-MGZPH7AX-C0bVMPGM.cjs.map} +1 -1
  295. package/dist/{xargs-MGZPH7AX-DDoz_2hL.mjs → xargs-MGZPH7AX-DWIn3Zwh.mjs} +2 -2
  296. package/dist/{xargs-MGZPH7AX-DDoz_2hL.mjs.map → xargs-MGZPH7AX-DWIn3Zwh.mjs.map} +1 -1
  297. package/dist/{yq-4QJW3EQG-mUhWBJBJ.mjs → yq-4QJW3EQG-CPcwcHbw.mjs} +3 -3
  298. package/dist/{yq-4QJW3EQG-mUhWBJBJ.mjs.map → yq-4QJW3EQG-CPcwcHbw.mjs.map} +1 -1
  299. package/dist/{yq-4QJW3EQG-BPBhjinw.cjs → yq-4QJW3EQG-CSTlai1q.cjs} +3 -3
  300. package/dist/{yq-4QJW3EQG-BPBhjinw.cjs.map → yq-4QJW3EQG-CSTlai1q.cjs.map} +1 -1
  301. package/package.json +1 -1
  302. package/dist/dist-70NUfApd.mjs.map +0 -1
  303. package/dist/start-BX-bkX9K.cjs.map +0 -1
  304. package/dist/start-DAlaZ5zj.mjs.map +0 -1
@@ -32,11 +32,11 @@ node_path = __toESM(node_path, 1);
32
32
  require("node:fs/promises");
33
33
  let node_fs = require("node:fs");
34
34
  node_fs = __toESM(node_fs, 1);
35
+ let node_async_hooks = require("node:async_hooks");
35
36
  require("node:url");
36
37
  let node_os = require("node:os");
37
38
  let node_module = require("node:module");
38
39
  let node_crypto = require("node:crypto");
39
- let node_async_hooks = require("node:async_hooks");
40
40
  let _keystrokehq_platform_database = require("@keystrokehq/platform-database");
41
41
  require("zod/v3");
42
42
  require("zod/v4-mini");
@@ -63,6 +63,10 @@ const PROJECT_SERVER_HEALTH = {
63
63
  path: "/health",
64
64
  port: PROJECT_SERVER_PORT
65
65
  };
66
+ /** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */
67
+ function encodeOrgArtifacts(artifacts) {
68
+ return Buffer.from(JSON.stringify(artifacts)).toString("base64");
69
+ }
66
70
  const RUNTIME_ENV_KEYS = [
67
71
  "BETTER_AUTH_SECRET",
68
72
  "PUBLIC_SERVER_URL",
@@ -93,28 +97,26 @@ function projectDatabaseRuntimeEnv(database) {
93
97
  };
94
98
  }
95
99
  /**
96
- * Builds the launch spec for a single project server. `artifactStorageKey` is the
97
- * object key for that deploy's built `dist` tarball in the org bucket there is
98
- * no base image, so it is required.
100
+ * Builds the launch spec for an org worker. Each deploy artifact is encoded in
101
+ * `KEYSTROKE_ORG_ARTIFACTS` there is no base image, so at least one artifact is required.
99
102
  */
100
- function resolveRuntimeLaunch(options, artifactStorageKey, database, extraEnv) {
101
- if (!artifactStorageKey) throw new Error("Cannot start a project server without an artifact storage key");
103
+ function resolveRuntimeLaunch(options, artifacts, database, extraEnv) {
104
+ if (artifacts.length === 0) throw new Error("Cannot start an org worker without at least one artifact");
102
105
  const env = options.env ?? process.env;
103
106
  return {
104
107
  image: resolveProjectServerImage(env, options.image),
105
- env: buildRuntimeEnv(env, artifactStorageKey, database, extraEnv),
108
+ env: buildRuntimeEnv(env, artifacts, database, extraEnv),
106
109
  port: PROJECT_SERVER_PORT,
107
110
  health: PROJECT_SERVER_HEALTH
108
111
  };
109
112
  }
110
- /** Env vars passed into the project server container/machine. */
111
- function buildRuntimeEnv(source, artifactStorageKey, database, extraEnv) {
113
+ /** Env vars passed into the org worker container/machine. */
114
+ function buildRuntimeEnv(source, artifacts, database, extraEnv) {
112
115
  const entries = new Map([
113
116
  ["PORT", String(PROJECT_SERVER_PORT)],
114
117
  ["KEYSTROKE_ROOT", PROJECT_SERVER_ROOT],
115
118
  ["KEYSTROKE_RUNTIME_NODE_MODULES", PROJECT_SERVER_FRAMEWORK_NODE_MODULES],
116
- ["ARTIFACT_STORAGE_KEY", artifactStorageKey],
117
- ["PROJECT_ID", database.projectId],
119
+ ["KEYSTROKE_ORG_ARTIFACTS", encodeOrgArtifacts(artifacts)],
118
120
  ["ORGANIZATION_ID", database.organizationId],
119
121
  ["TENANT_ID", database.organizationId]
120
122
  ]);
@@ -217,15 +219,19 @@ const MINIO_DOCKER_NETWORK = process.env.MINIO_DOCKER_NETWORK ?? "keystroke";
217
219
  function createDockerRuntime(options = {}) {
218
220
  const docker = options.docker ?? new dockerode.default();
219
221
  return { async start(input) {
220
- const launch = resolveRuntimeLaunch(options, input.artifactStorageKey, input.database, input.env);
222
+ if (input.projects.length === 0) throw new Error("Docker org runtime requires at least one project deploy");
223
+ const launch = resolveRuntimeLaunch(options, input.projects.map((project) => ({
224
+ projectId: project.projectId,
225
+ artifactStorageKey: project.artifactStorageKey
226
+ })), input.database, input.env);
221
227
  await ensureImage(docker, launch.image);
222
- await removeExistingContainer(docker, input.projectId);
228
+ await removeExistingContainer(docker, input.organizationId);
223
229
  const container = await docker.createContainer({
224
230
  Image: launch.image,
225
- name: containerName(input.projectId),
231
+ name: containerName(input.organizationId),
226
232
  Labels: {
227
- "keystroke.project.id": input.projectId,
228
- "keystroke.project.name": input.name
233
+ "keystroke.organization.id": input.organizationId,
234
+ "keystroke.project.ids": input.projects.map((project) => project.projectId).join(",")
229
235
  },
230
236
  ExposedPorts: { [`${launch.port}/tcp`]: {} },
231
237
  HostConfig: {
@@ -238,7 +244,7 @@ function createDockerRuntime(options = {}) {
238
244
  await container.start();
239
245
  const inspect = await container.inspect();
240
246
  const binding = inspect.NetworkSettings.Ports?.[`${launch.port}/tcp`]?.[0];
241
- if (!binding?.HostPort) throw new Error("Failed to resolve project container host port");
247
+ if (!binding?.HostPort) throw new Error("Failed to resolve org container host port");
242
248
  const baseUrl = `http://127.0.0.1:${binding.HostPort}`;
243
249
  await waitForHealth(baseUrl, {
244
250
  fetchImpl: options.fetchImpl,
@@ -250,12 +256,12 @@ function createDockerRuntime(options = {}) {
250
256
  };
251
257
  } };
252
258
  }
253
- function containerName(projectId) {
254
- return `keystroke-project-${projectId}`;
259
+ function containerName(organizationId) {
260
+ return `keystroke-org-${organizationId}`;
255
261
  }
256
- async function removeExistingContainer(docker, projectId) {
262
+ async function removeExistingContainer(docker, organizationId) {
257
263
  try {
258
- const existing = docker.getContainer(containerName(projectId));
264
+ const existing = docker.getContainer(containerName(organizationId));
259
265
  await existing.stop({ t: 5 }).catch(() => void 0);
260
266
  await existing.remove({ force: true });
261
267
  } catch {}
@@ -989,7 +995,7 @@ _Object_({
989
995
  content: String$1({ description: "Content to write to the file" })
990
996
  });
991
997
  //#endregion
992
- //#region ../../packages/sandbox/dist/files-DJf_h8XJ.mjs
998
+ //#region ../../packages/sandbox/dist/files-XxiqkzS0.mjs
993
999
  const SandboxFileContentSchema = zod.z.object({
994
1000
  path: zod.z.string(),
995
1001
  file: zod.z.string()
@@ -1006,6 +1012,7 @@ const SandboxDefinitionSchema = zod.z.object({
1006
1012
  key: zod.z.string().optional(),
1007
1013
  files: zod.z.array(SandboxFileSchema).optional()
1008
1014
  });
1015
+ new node_async_hooks.AsyncLocalStorage();
1009
1016
  //#endregion
1010
1017
  //#region ../../node_modules/.pnpm/just-bash@3.0.1/node_modules/just-bash/dist/bundle/chunks/chunk-4RUAZWKT.js
1011
1018
  (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href);
@@ -23808,43 +23815,43 @@ var tt = [
23808
23815
  },
23809
23816
  {
23810
23817
  name: "cat",
23811
- load: async () => (await Promise.resolve().then(() => require("./cat-TSFMZVYS-3tq36V6U.cjs"))).catCommand
23818
+ load: async () => (await Promise.resolve().then(() => require("./cat-TSFMZVYS-Lk2fLg0m.cjs"))).catCommand
23812
23819
  },
23813
23820
  {
23814
23821
  name: "printf",
23815
- load: async () => (await Promise.resolve().then(() => require("./printf-TWGXF445-B1fsJl2X.cjs"))).printfCommand
23822
+ load: async () => (await Promise.resolve().then(() => require("./printf-TWGXF445-bSICkDD6.cjs"))).printfCommand
23816
23823
  },
23817
23824
  {
23818
23825
  name: "ls",
23819
- load: async () => (await Promise.resolve().then(() => require("./ls-ZJGQER7M-CaSRbmLC.cjs"))).lsCommand
23826
+ load: async () => (await Promise.resolve().then(() => require("./ls-ZJGQER7M-H5DDO7bw.cjs"))).lsCommand
23820
23827
  },
23821
23828
  {
23822
23829
  name: "mkdir",
23823
- load: async () => (await Promise.resolve().then(() => require("./mkdir-MEPGZOB6-D6EapQqG.cjs"))).mkdirCommand
23830
+ load: async () => (await Promise.resolve().then(() => require("./mkdir-MEPGZOB6-BFwkd4Z7.cjs"))).mkdirCommand
23824
23831
  },
23825
23832
  {
23826
23833
  name: "rmdir",
23827
- load: async () => (await Promise.resolve().then(() => require("./rmdir-OC4ZLPYA-Br6jTWJO.cjs"))).rmdirCommand
23834
+ load: async () => (await Promise.resolve().then(() => require("./rmdir-OC4ZLPYA-DngaXCWg.cjs"))).rmdirCommand
23828
23835
  },
23829
23836
  {
23830
23837
  name: "touch",
23831
- load: async () => (await Promise.resolve().then(() => require("./touch-UA33VN3N-BALmWXCe.cjs"))).touchCommand
23838
+ load: async () => (await Promise.resolve().then(() => require("./touch-UA33VN3N-Dxlmlbm_.cjs"))).touchCommand
23832
23839
  },
23833
23840
  {
23834
23841
  name: "rm",
23835
- load: async () => (await Promise.resolve().then(() => require("./rm-SSGETQVQ-CskLcJOp.cjs"))).rmCommand
23842
+ load: async () => (await Promise.resolve().then(() => require("./rm-SSGETQVQ-BPv10nPA.cjs"))).rmCommand
23836
23843
  },
23837
23844
  {
23838
23845
  name: "cp",
23839
- load: async () => (await Promise.resolve().then(() => require("./cp-BISAAS7A-C1ygPb-h.cjs"))).cpCommand
23846
+ load: async () => (await Promise.resolve().then(() => require("./cp-BISAAS7A-Dx6QG-P9.cjs"))).cpCommand
23840
23847
  },
23841
23848
  {
23842
23849
  name: "mv",
23843
- load: async () => (await Promise.resolve().then(() => require("./mv-W5BIQ646-Cl3grRdX.cjs"))).mvCommand
23850
+ load: async () => (await Promise.resolve().then(() => require("./mv-W5BIQ646-hheW03eh.cjs"))).mvCommand
23844
23851
  },
23845
23852
  {
23846
23853
  name: "ln",
23847
- load: async () => (await Promise.resolve().then(() => require("./ln-4LGSXXGD-B0nikKzZ.cjs"))).lnCommand
23854
+ load: async () => (await Promise.resolve().then(() => require("./ln-4LGSXXGD-CkQRVPru.cjs"))).lnCommand
23848
23855
  },
23849
23856
  {
23850
23857
  name: "chmod",
@@ -23860,15 +23867,15 @@ var tt = [
23860
23867
  },
23861
23868
  {
23862
23869
  name: "head",
23863
- load: async () => (await Promise.resolve().then(() => require("./head-442HYESI-_RXn0SBi.cjs"))).headCommand
23870
+ load: async () => (await Promise.resolve().then(() => require("./head-442HYESI-Bztg6Xka.cjs"))).headCommand
23864
23871
  },
23865
23872
  {
23866
23873
  name: "tail",
23867
- load: async () => (await Promise.resolve().then(() => require("./tail-R4PCA2C4-TH4AUhAb.cjs"))).tailCommand
23874
+ load: async () => (await Promise.resolve().then(() => require("./tail-R4PCA2C4-C018_ZAk.cjs"))).tailCommand
23868
23875
  },
23869
23876
  {
23870
23877
  name: "wc",
23871
- load: async () => (await Promise.resolve().then(() => require("./wc-LF7NU4LA-DUBYnutH.cjs"))).wcCommand
23878
+ load: async () => (await Promise.resolve().then(() => require("./wc-LF7NU4LA-NAR5lgIG.cjs"))).wcCommand
23872
23879
  },
23873
23880
  {
23874
23881
  name: "stat",
@@ -23876,95 +23883,95 @@ var tt = [
23876
23883
  },
23877
23884
  {
23878
23885
  name: "grep",
23879
- load: async () => (await Promise.resolve().then(() => require("./grep-V3LQVMRQ-BcfmH0yO.cjs"))).grepCommand
23886
+ load: async () => (await Promise.resolve().then(() => require("./grep-V3LQVMRQ-D--OXkar.cjs"))).grepCommand
23880
23887
  },
23881
23888
  {
23882
23889
  name: "fgrep",
23883
- load: async () => (await Promise.resolve().then(() => require("./grep-V3LQVMRQ-BcfmH0yO.cjs"))).fgrepCommand
23890
+ load: async () => (await Promise.resolve().then(() => require("./grep-V3LQVMRQ-D--OXkar.cjs"))).fgrepCommand
23884
23891
  },
23885
23892
  {
23886
23893
  name: "egrep",
23887
- load: async () => (await Promise.resolve().then(() => require("./grep-V3LQVMRQ-BcfmH0yO.cjs"))).egrepCommand
23894
+ load: async () => (await Promise.resolve().then(() => require("./grep-V3LQVMRQ-D--OXkar.cjs"))).egrepCommand
23888
23895
  },
23889
23896
  {
23890
23897
  name: "rg",
23891
- load: async () => (await Promise.resolve().then(() => require("./rg-S4FXYXWB-BL_fs0a0.cjs"))).rgCommand
23898
+ load: async () => (await Promise.resolve().then(() => require("./rg-S4FXYXWB-Bol68AvR.cjs"))).rgCommand
23892
23899
  },
23893
23900
  {
23894
23901
  name: "sed",
23895
- load: async () => (await Promise.resolve().then(() => require("./sed-S5UIK574-OUlTmK0x.cjs"))).sedCommand
23902
+ load: async () => (await Promise.resolve().then(() => require("./sed-S5UIK574-CF78rdnK.cjs"))).sedCommand
23896
23903
  },
23897
23904
  {
23898
23905
  name: "awk",
23899
- load: async () => (await Promise.resolve().then(() => require("./awk2-LA3USKJP-BE8esz9o.cjs"))).awkCommand2
23906
+ load: async () => (await Promise.resolve().then(() => require("./awk2-LA3USKJP-AIZOQ0nh.cjs"))).awkCommand2
23900
23907
  },
23901
23908
  {
23902
23909
  name: "sort",
23903
- load: async () => (await Promise.resolve().then(() => require("./sort-SW2YEO5B-BlJCEbS7.cjs"))).sortCommand
23910
+ load: async () => (await Promise.resolve().then(() => require("./sort-SW2YEO5B-DwbO0wml.cjs"))).sortCommand
23904
23911
  },
23905
23912
  {
23906
23913
  name: "uniq",
23907
- load: async () => (await Promise.resolve().then(() => require("./uniq-XSIZR6PB-CyA5DoCP.cjs"))).uniqCommand
23914
+ load: async () => (await Promise.resolve().then(() => require("./uniq-XSIZR6PB-bJo9kdHr.cjs"))).uniqCommand
23908
23915
  },
23909
23916
  {
23910
23917
  name: "comm",
23911
- load: async () => (await Promise.resolve().then(() => require("./comm-VV2LDX2J-CdE-OYeG.cjs"))).commCommand
23918
+ load: async () => (await Promise.resolve().then(() => require("./comm-VV2LDX2J-YL8m_4d1.cjs"))).commCommand
23912
23919
  },
23913
23920
  {
23914
23921
  name: "cut",
23915
- load: async () => (await Promise.resolve().then(() => require("./cut-OKARJCCV-S-g4hG3d.cjs"))).cutCommand
23922
+ load: async () => (await Promise.resolve().then(() => require("./cut-OKARJCCV-C1CAocst.cjs"))).cutCommand
23916
23923
  },
23917
23924
  {
23918
23925
  name: "paste",
23919
- load: async () => (await Promise.resolve().then(() => require("./paste-7JC6S4DX-DEoyg9Vv.cjs"))).pasteCommand
23926
+ load: async () => (await Promise.resolve().then(() => require("./paste-7JC6S4DX-CC0xWPbo.cjs"))).pasteCommand
23920
23927
  },
23921
23928
  {
23922
23929
  name: "tr",
23923
- load: async () => (await Promise.resolve().then(() => require("./tr-36LHWFRQ-DDHiAg_m.cjs"))).trCommand
23930
+ load: async () => (await Promise.resolve().then(() => require("./tr-36LHWFRQ-Bzq2x5-h.cjs"))).trCommand
23924
23931
  },
23925
23932
  {
23926
23933
  name: "rev",
23927
- load: async () => (await Promise.resolve().then(() => require("./rev-5EHFX4EJ-B27blDxm.cjs"))).rev
23934
+ load: async () => (await Promise.resolve().then(() => require("./rev-5EHFX4EJ-BS2n_x9V.cjs"))).rev
23928
23935
  },
23929
23936
  {
23930
23937
  name: "nl",
23931
- load: async () => (await Promise.resolve().then(() => require("./nl-WSDW7I4O-DttNn_cO.cjs"))).nl
23938
+ load: async () => (await Promise.resolve().then(() => require("./nl-WSDW7I4O-DcVnQp-1.cjs"))).nl
23932
23939
  },
23933
23940
  {
23934
23941
  name: "fold",
23935
- load: async () => (await Promise.resolve().then(() => require("./fold-4TQNYMSW-BIl_iV0S.cjs"))).fold
23942
+ load: async () => (await Promise.resolve().then(() => require("./fold-4TQNYMSW-DFQEjMsZ.cjs"))).fold
23936
23943
  },
23937
23944
  {
23938
23945
  name: "expand",
23939
- load: async () => (await Promise.resolve().then(() => require("./expand-JSPG6VOP-BAEvLz6y.cjs"))).expand
23946
+ load: async () => (await Promise.resolve().then(() => require("./expand-JSPG6VOP-C4VQzWfg.cjs"))).expand
23940
23947
  },
23941
23948
  {
23942
23949
  name: "unexpand",
23943
- load: async () => (await Promise.resolve().then(() => require("./unexpand-CADSA4VO-BORtdsy_.cjs"))).unexpand
23950
+ load: async () => (await Promise.resolve().then(() => require("./unexpand-CADSA4VO-C4qGbx-B.cjs"))).unexpand
23944
23951
  },
23945
23952
  {
23946
23953
  name: "strings",
23947
- load: async () => (await Promise.resolve().then(() => require("./strings-6WDHLGMX-CeJiCt-u.cjs"))).strings
23954
+ load: async () => (await Promise.resolve().then(() => require("./strings-6WDHLGMX-5ObhNSGS.cjs"))).strings
23948
23955
  },
23949
23956
  {
23950
23957
  name: "split",
23951
- load: async () => (await Promise.resolve().then(() => require("./split-4KKZZXXE-DGFsDrFE.cjs"))).split
23958
+ load: async () => (await Promise.resolve().then(() => require("./split-4KKZZXXE-D3kKToq-.cjs"))).split
23952
23959
  },
23953
23960
  {
23954
23961
  name: "column",
23955
- load: async () => (await Promise.resolve().then(() => require("./column-XT6UFXNQ-ieIKmRkh.cjs"))).column
23962
+ load: async () => (await Promise.resolve().then(() => require("./column-XT6UFXNQ-CwtLFuCh.cjs"))).column
23956
23963
  },
23957
23964
  {
23958
23965
  name: "join",
23959
- load: async () => (await Promise.resolve().then(() => require("./join-TBRGI3LQ-BOS3zpbh.cjs"))).join
23966
+ load: async () => (await Promise.resolve().then(() => require("./join-TBRGI3LQ-CzBO0uid.cjs"))).join
23960
23967
  },
23961
23968
  {
23962
23969
  name: "tee",
23963
- load: async () => (await Promise.resolve().then(() => require("./tee-YUZ2FKCJ-D_BE3AiF.cjs"))).teeCommand
23970
+ load: async () => (await Promise.resolve().then(() => require("./tee-YUZ2FKCJ-Cce_gOKf.cjs"))).teeCommand
23964
23971
  },
23965
23972
  {
23966
23973
  name: "find",
23967
- load: async () => (await Promise.resolve().then(() => require("./find-INTH3OLC-Bf3-4Zi2.cjs"))).findCommand
23974
+ load: async () => (await Promise.resolve().then(() => require("./find-INTH3OLC-2rIv2Sgt.cjs"))).findCommand
23968
23975
  },
23969
23976
  {
23970
23977
  name: "basename",
@@ -23976,19 +23983,19 @@ var tt = [
23976
23983
  },
23977
23984
  {
23978
23985
  name: "tree",
23979
- load: async () => (await Promise.resolve().then(() => require("./tree-YLD52CNT-BqqLx-tM.cjs"))).treeCommand
23986
+ load: async () => (await Promise.resolve().then(() => require("./tree-YLD52CNT-BQipj5RY.cjs"))).treeCommand
23980
23987
  },
23981
23988
  {
23982
23989
  name: "du",
23983
- load: async () => (await Promise.resolve().then(() => require("./du-572XNP42-f68GOB47.cjs"))).duCommand
23990
+ load: async () => (await Promise.resolve().then(() => require("./du-572XNP42-B2vhVgxe.cjs"))).duCommand
23984
23991
  },
23985
23992
  {
23986
23993
  name: "env",
23987
- load: async () => (await Promise.resolve().then(() => require("./env-36M5BO7M-DHcnOUrA.cjs"))).envCommand
23994
+ load: async () => (await Promise.resolve().then(() => require("./env-36M5BO7M-Dj2YwzST.cjs"))).envCommand
23988
23995
  },
23989
23996
  {
23990
23997
  name: "printenv",
23991
- load: async () => (await Promise.resolve().then(() => require("./env-36M5BO7M-DHcnOUrA.cjs"))).printenvCommand
23998
+ load: async () => (await Promise.resolve().then(() => require("./env-36M5BO7M-Dj2YwzST.cjs"))).printenvCommand
23992
23999
  },
23993
24000
  {
23994
24001
  name: "alias",
@@ -24004,7 +24011,7 @@ var tt = [
24004
24011
  },
24005
24012
  {
24006
24013
  name: "xargs",
24007
- load: async () => (await Promise.resolve().then(() => require("./xargs-MGZPH7AX-B_Ocy3BY.cjs"))).xargsCommand
24014
+ load: async () => (await Promise.resolve().then(() => require("./xargs-MGZPH7AX-C0bVMPGM.cjs"))).xargsCommand
24008
24015
  },
24009
24016
  {
24010
24017
  name: "true",
@@ -24020,23 +24027,23 @@ var tt = [
24020
24027
  },
24021
24028
  {
24022
24029
  name: "bash",
24023
- load: async () => (await Promise.resolve().then(() => require("./bash-YZ33HQZQ-Z8YFnXLG.cjs"))).bashCommand
24030
+ load: async () => (await Promise.resolve().then(() => require("./bash-YZ33HQZQ-BfFH_xKv.cjs"))).bashCommand
24024
24031
  },
24025
24032
  {
24026
24033
  name: "sh",
24027
- load: async () => (await Promise.resolve().then(() => require("./bash-YZ33HQZQ-Z8YFnXLG.cjs"))).shCommand
24034
+ load: async () => (await Promise.resolve().then(() => require("./bash-YZ33HQZQ-BfFH_xKv.cjs"))).shCommand
24028
24035
  },
24029
24036
  {
24030
24037
  name: "jq",
24031
- load: async () => (await Promise.resolve().then(() => require("./jq-4XLYLOS5-C-4KbpIO.cjs"))).jqCommand
24038
+ load: async () => (await Promise.resolve().then(() => require("./jq-4XLYLOS5-Dmw7PtvC.cjs"))).jqCommand
24032
24039
  },
24033
24040
  {
24034
24041
  name: "base64",
24035
- load: async () => (await Promise.resolve().then(() => require("./base64-C2AIWVNC-CGFeI4Fm.cjs"))).base64Command
24042
+ load: async () => (await Promise.resolve().then(() => require("./base64-C2AIWVNC-fWp5IaIt.cjs"))).base64Command
24036
24043
  },
24037
24044
  {
24038
24045
  name: "diff",
24039
- load: async () => (await Promise.resolve().then(() => require("./diff-MWJFIG7X-Xtqp7FtF.cjs"))).diffCommand
24046
+ load: async () => (await Promise.resolve().then(() => require("./diff-MWJFIG7X-D5nTdPdk.cjs"))).diffCommand
24040
24047
  },
24041
24048
  {
24042
24049
  name: "date",
@@ -24044,15 +24051,15 @@ var tt = [
24044
24051
  },
24045
24052
  {
24046
24053
  name: "sleep",
24047
- load: async () => (await Promise.resolve().then(() => require("./sleep-X22JJINO-DFWLmtic.cjs"))).sleepCommand
24054
+ load: async () => (await Promise.resolve().then(() => require("./sleep-X22JJINO-Dy9v8Z4n.cjs"))).sleepCommand
24048
24055
  },
24049
24056
  {
24050
24057
  name: "timeout",
24051
- load: async () => (await Promise.resolve().then(() => require("./timeout-YDCRSLPQ-DWs-ACr6.cjs"))).timeoutCommand
24058
+ load: async () => (await Promise.resolve().then(() => require("./timeout-YDCRSLPQ-Ccs9ipQM.cjs"))).timeoutCommand
24052
24059
  },
24053
24060
  {
24054
24061
  name: "time",
24055
- load: async () => (await Promise.resolve().then(() => require("./time-D4LNBSWX-zKxg-wM1.cjs"))).timeCommand
24062
+ load: async () => (await Promise.resolve().then(() => require("./time-D4LNBSWX-D9C8_lG9.cjs"))).timeCommand
24056
24063
  },
24057
24064
  {
24058
24065
  name: "seq",
@@ -24060,19 +24067,19 @@ var tt = [
24060
24067
  },
24061
24068
  {
24062
24069
  name: "expr",
24063
- load: async () => (await Promise.resolve().then(() => require("./expr-5JAACS4X-BFLtaqNy.cjs"))).exprCommand
24070
+ load: async () => (await Promise.resolve().then(() => require("./expr-5JAACS4X-DX-k1Bjo.cjs"))).exprCommand
24064
24071
  },
24065
24072
  {
24066
24073
  name: "md5sum",
24067
- load: async () => (await Promise.resolve().then(() => require("./md5sum-SPU24VSG-wjaqw6M5.cjs"))).md5sumCommand
24074
+ load: async () => (await Promise.resolve().then(() => require("./md5sum-SPU24VSG-B6JGibcS.cjs"))).md5sumCommand
24068
24075
  },
24069
24076
  {
24070
24077
  name: "sha1sum",
24071
- load: async () => (await Promise.resolve().then(() => require("./sha1sum-2PTOAFR6-B_DU8HD8.cjs"))).sha1sumCommand
24078
+ load: async () => (await Promise.resolve().then(() => require("./sha1sum-2PTOAFR6-C48qu6hM.cjs"))).sha1sumCommand
24072
24079
  },
24073
24080
  {
24074
24081
  name: "sha256sum",
24075
- load: async () => (await Promise.resolve().then(() => require("./sha256sum-NS7D3IXX-YzzSU71d.cjs"))).sha256sumCommand
24082
+ load: async () => (await Promise.resolve().then(() => require("./sha256sum-NS7D3IXX-DTZ34xii.cjs"))).sha256sumCommand
24076
24083
  },
24077
24084
  {
24078
24085
  name: "file",
@@ -24080,11 +24087,11 @@ var tt = [
24080
24087
  },
24081
24088
  {
24082
24089
  name: "html-to-markdown",
24083
- load: async () => (await Promise.resolve().then(() => require("./html-to-markdown-JW4MSQZO-yoaOs45E.cjs"))).htmlToMarkdownCommand
24090
+ load: async () => (await Promise.resolve().then(() => require("./html-to-markdown-JW4MSQZO-B3xkcb1w.cjs"))).htmlToMarkdownCommand
24084
24091
  },
24085
24092
  {
24086
24093
  name: "help",
24087
- load: async () => (await Promise.resolve().then(() => require("./help-HZ6M2CKN-DJP0l3xk.cjs"))).helpCommand
24094
+ load: async () => (await Promise.resolve().then(() => require("./help-HZ6M2CKN-CFA5POOW.cjs"))).helpCommand
24088
24095
  },
24089
24096
  {
24090
24097
  name: "which",
@@ -24092,7 +24099,7 @@ var tt = [
24092
24099
  },
24093
24100
  {
24094
24101
  name: "tac",
24095
- load: async () => (await Promise.resolve().then(() => require("./tac-2STMMJYW-DlI5binK.cjs"))).tac
24102
+ load: async () => (await Promise.resolve().then(() => require("./tac-2STMMJYW-CLSjS7F2.cjs"))).tac
24096
24103
  },
24097
24104
  {
24098
24105
  name: "hostname",
@@ -24104,49 +24111,49 @@ var tt = [
24104
24111
  },
24105
24112
  {
24106
24113
  name: "od",
24107
- load: async () => (await Promise.resolve().then(() => require("./od-WOKFDJTP-BJWjPFho.cjs"))).od
24114
+ load: async () => (await Promise.resolve().then(() => require("./od-WOKFDJTP-CIGKYa74.cjs"))).od
24108
24115
  },
24109
24116
  {
24110
24117
  name: "gzip",
24111
- load: async () => (await Promise.resolve().then(() => require("./gzip-O5ASJAFY-B9ermjPq.cjs"))).gzipCommand
24118
+ load: async () => (await Promise.resolve().then(() => require("./gzip-O5ASJAFY-B3o0_eql.cjs"))).gzipCommand
24112
24119
  },
24113
24120
  {
24114
24121
  name: "gunzip",
24115
- load: async () => (await Promise.resolve().then(() => require("./gzip-O5ASJAFY-B9ermjPq.cjs"))).gunzipCommand
24122
+ load: async () => (await Promise.resolve().then(() => require("./gzip-O5ASJAFY-B3o0_eql.cjs"))).gunzipCommand
24116
24123
  },
24117
24124
  {
24118
24125
  name: "zcat",
24119
- load: async () => (await Promise.resolve().then(() => require("./gzip-O5ASJAFY-B9ermjPq.cjs"))).zcatCommand
24126
+ load: async () => (await Promise.resolve().then(() => require("./gzip-O5ASJAFY-B3o0_eql.cjs"))).zcatCommand
24120
24127
  }
24121
24128
  ];
24122
24129
  (typeof __BROWSER__ > "u" || !__BROWSER__) && (tt.push({
24123
24130
  name: "tar",
24124
- load: async () => (await Promise.resolve().then(() => require("./tar-STHHZTZ6-DELlRab1.cjs"))).tarCommand
24131
+ load: async () => (await Promise.resolve().then(() => require("./tar-STHHZTZ6-BcBkmdCH.cjs"))).tarCommand
24125
24132
  }), tt.push({
24126
24133
  name: "yq",
24127
- load: async () => (await Promise.resolve().then(() => require("./yq-4QJW3EQG-BPBhjinw.cjs"))).yqCommand
24134
+ load: async () => (await Promise.resolve().then(() => require("./yq-4QJW3EQG-CSTlai1q.cjs"))).yqCommand
24128
24135
  }), tt.push({
24129
24136
  name: "xan",
24130
- load: async () => (await Promise.resolve().then(() => require("./xan-Y6WF3IRG-W4Yr19gE.cjs"))).xanCommand
24137
+ load: async () => (await Promise.resolve().then(() => require("./xan-Y6WF3IRG-RigAd0GA.cjs"))).xanCommand
24131
24138
  }), tt.push({
24132
24139
  name: "sqlite3",
24133
- load: async () => (await Promise.resolve().then(() => require("./sqlite3-CGOEFJAO-D78UkTyw.cjs"))).sqlite3Command
24140
+ load: async () => (await Promise.resolve().then(() => require("./sqlite3-CGOEFJAO-DUW1XIou.cjs"))).sqlite3Command
24134
24141
  }));
24135
24142
  var Yt = [];
24136
24143
  (typeof __BROWSER__ > "u" || !__BROWSER__) && (Yt.push({
24137
24144
  name: "python3",
24138
- load: async () => (await Promise.resolve().then(() => require("./python3-POMOR4OA-B8aVGk7h.cjs"))).python3Command
24145
+ load: async () => (await Promise.resolve().then(() => require("./python3-POMOR4OA-D8YyzdQy.cjs"))).python3Command
24139
24146
  }), Yt.push({
24140
24147
  name: "python",
24141
- load: async () => (await Promise.resolve().then(() => require("./python3-POMOR4OA-B8aVGk7h.cjs"))).pythonCommand
24148
+ load: async () => (await Promise.resolve().then(() => require("./python3-POMOR4OA-D8YyzdQy.cjs"))).pythonCommand
24142
24149
  }));
24143
24150
  var Qt = [];
24144
24151
  (typeof __BROWSER__ > "u" || !__BROWSER__) && (Qt.push({
24145
24152
  name: "js-exec",
24146
- load: async () => (await Promise.resolve().then(() => require("./js-exec-N5KEZBH7--5grqRpb.cjs"))).jsExecCommand
24153
+ load: async () => (await Promise.resolve().then(() => require("./js-exec-N5KEZBH7-BLGWy2LA.cjs"))).jsExecCommand
24147
24154
  }), Qt.push({
24148
24155
  name: "node",
24149
- load: async () => (await Promise.resolve().then(() => require("./js-exec-N5KEZBH7--5grqRpb.cjs"))).nodeStubCommand
24156
+ load: async () => (await Promise.resolve().then(() => require("./js-exec-N5KEZBH7-BLGWy2LA.cjs"))).nodeStubCommand
24150
24157
  }));
24151
24158
  new TextEncoder();
24152
24159
  Object.freeze({
@@ -25119,6 +25126,114 @@ const OrganizationSlugSchema = zod.z.string().trim().toLowerCase().min(2, "Slug
25119
25126
  const ClaimableOrganizationSlugSchema = OrganizationSlugSchema.refine((slug) => !RESERVED_ORGANIZATION_SLUGS.has(slug), "This slug is reserved");
25120
25127
  /** Same format as organization slugs — org-scoped, no global reserved list. */
25121
25128
  const ProjectSlugSchema = OrganizationSlugSchema;
25129
+ const PROJECT_SLUG_TAKEN_MESSAGE = "That slug is already taken.";
25130
+ const OrganizationSlugErrorCodeSchema = zod.z.enum([
25131
+ "slug_taken",
25132
+ "slug_reserved",
25133
+ "slug_invalid"
25134
+ ]);
25135
+ const SlugAvailabilityReasonSchema = zod.z.enum([
25136
+ "taken",
25137
+ "reserved",
25138
+ "invalid"
25139
+ ]);
25140
+ const SlugAvailabilityResponseSchema = zod.z.object({
25141
+ slug: zod.z.string(),
25142
+ available: zod.z.boolean(),
25143
+ reason: SlugAvailabilityReasonSchema.optional(),
25144
+ suggestion: OrganizationSlugSchema.optional()
25145
+ });
25146
+ const SlugAvailabilityQuerySchema = zod.z.object({
25147
+ slug: zod.z.string().trim().min(1),
25148
+ excludeOrganizationId: zod.z.string().min(1).optional()
25149
+ });
25150
+ const ProjectSlugAvailabilityReasonSchema = zod.z.enum(["taken", "invalid"]);
25151
+ const ProjectSlugAvailabilityResponseSchema = zod.z.object({
25152
+ slug: zod.z.string(),
25153
+ available: zod.z.boolean(),
25154
+ reason: ProjectSlugAvailabilityReasonSchema.optional(),
25155
+ suggestion: ProjectSlugSchema.optional()
25156
+ });
25157
+ const ProjectSlugAvailabilityQuerySchema = zod.z.object({
25158
+ slug: zod.z.string().trim().min(1),
25159
+ excludeProjectId: zod.z.string().min(1).optional()
25160
+ });
25161
+ function organizationSlugErrorCodeFromMessage(message) {
25162
+ if (message === "That slug is already taken." || /already taken/i.test(message)) return "slug_taken";
25163
+ if (/reserved/i.test(message)) return "slug_reserved";
25164
+ return "slug_invalid";
25165
+ }
25166
+ const ProjectStatusSchema = zod.z.enum([
25167
+ "inactive",
25168
+ "starting",
25169
+ "active",
25170
+ "failed"
25171
+ ]);
25172
+ const OrganizationUserRoleSchema = zod.z.enum([
25173
+ "owner",
25174
+ "admin",
25175
+ "builder"
25176
+ ]);
25177
+ const isoDateTime$5 = zod.z.string().datetime();
25178
+ const OrganizationSchema = zod.z.object({
25179
+ id: zod.z.string(),
25180
+ name: zod.z.string(),
25181
+ slug: OrganizationSlugSchema,
25182
+ createdAt: isoDateTime$5,
25183
+ updatedAt: isoDateTime$5
25184
+ });
25185
+ const ProjectSchema = zod.z.object({
25186
+ id: zod.z.string(),
25187
+ organizationId: zod.z.string(),
25188
+ name: zod.z.string(),
25189
+ slug: ProjectSlugSchema,
25190
+ description: zod.z.string().nullable(),
25191
+ status: ProjectStatusSchema,
25192
+ baseUrl: zod.z.string().nullable(),
25193
+ runtimeId: zod.z.string().nullable(),
25194
+ lastError: zod.z.string().nullable(),
25195
+ createdAt: isoDateTime$5,
25196
+ updatedAt: isoDateTime$5
25197
+ });
25198
+ const UserOrganizationSchema = zod.z.object({
25199
+ organization: OrganizationSchema,
25200
+ role: OrganizationUserRoleSchema
25201
+ });
25202
+ const ActiveOrganizationResponseSchema = UserOrganizationSchema.nullable();
25203
+ const ListOrganizationsResponseSchema = zod.z.array(UserOrganizationSchema);
25204
+ const CreateOrganizationRequestSchema = zod.z.object({
25205
+ name: zod.z.string().trim().min(1),
25206
+ /** Format-only at the wire boundary; reserved-name checks run in platform-database. */
25207
+ slug: OrganizationSlugSchema.optional()
25208
+ });
25209
+ const UpdateOrganizationRequestSchema = zod.z.object({
25210
+ name: zod.z.string().trim().min(1).optional(),
25211
+ slug: ClaimableOrganizationSlugSchema.optional()
25212
+ }).refine((data) => data.name !== void 0 || data.slug !== void 0, { message: "At least one field is required" });
25213
+ const CreateOrganizationResponseSchema = UserOrganizationSchema;
25214
+ const ListProjectsResponseSchema = zod.z.array(ProjectSchema);
25215
+ const ProjectListMetricsSchema = zod.z.object({
25216
+ agentCount: zod.z.number(),
25217
+ workflowCount: zod.z.number(),
25218
+ skillCount: zod.z.number(),
25219
+ credentialCount: zod.z.number(),
25220
+ lastDeploymentAt: isoDateTime$5.nullable()
25221
+ });
25222
+ const ListProjectMetricsResponseSchema = zod.z.record(zod.z.string(), ProjectListMetricsSchema);
25223
+ const CreateProjectRequestSchema = zod.z.object({
25224
+ name: zod.z.string().trim().min(1),
25225
+ description: zod.z.string().trim().min(1).optional()
25226
+ });
25227
+ const UpdateProjectRequestSchema = zod.z.object({
25228
+ name: zod.z.string().trim().min(1).optional(),
25229
+ description: zod.z.string().trim().optional(),
25230
+ slug: ProjectSlugSchema.optional()
25231
+ }).refine((data) => data.name !== void 0 || data.description !== void 0 || data.slug !== void 0, { message: "At least one field is required" });
25232
+ const CreateProjectResponseSchema = ProjectSchema;
25233
+ const ProjectResponseSchema = ProjectSchema;
25234
+ const ProjectReachabilityResponseSchema = zod.z.object({ reachable: zod.z.boolean() });
25235
+ /** Org-custom app slug segment (the part after `{orgSlug}/`). Same format as project slugs. */
25236
+ const AppSlugSchema = ProjectSlugSchema;
25122
25237
  /** TCP port to bind for a local server, derived from a public URL. */
25123
25238
  function listenPortFromUrl(url, fallback) {
25124
25239
  const parsed = new URL(url);
@@ -25148,142 +25263,174 @@ const StoredRouteManifestSkillSchema = zod.z.object({
25148
25263
  description: zod.z.string().optional(),
25149
25264
  moduleFile: zod.z.string()
25150
25265
  });
25151
- const serializedRouteManifestEntrySchema = zod.z.discriminatedUnion("kind", [
25152
- zod.z.object({
25153
- kind: zod.z.literal("health"),
25154
- method: zod.z.literal("GET"),
25155
- path: zod.z.literal("/health")
25156
- }),
25266
+ const attachmentSchemasSchema = zod.z.record(zod.z.string(), zod.z.object({
25267
+ requestSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
25268
+ filterSchema: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
25269
+ }));
25270
+ const storedRouteManifestEntryV2Schema = zod.z.discriminatedUnion("kind", [
25271
+ zod.z.object({ kind: zod.z.literal("health") }),
25157
25272
  zod.z.object({
25158
25273
  kind: zod.z.literal("agent"),
25159
- method: zod.z.literal("POST"),
25160
- path: zod.z.string(),
25161
- agentSlug: zod.z.string(),
25274
+ slug: zod.z.string(),
25162
25275
  moduleFile: zod.z.string(),
25163
25276
  name: zod.z.string().optional(),
25164
25277
  description: zod.z.string().optional(),
25165
25278
  model: zod.z.string(),
25166
25279
  systemPrompt: zod.z.string(),
25167
25280
  toolCount: zod.z.number().int().nonnegative(),
25168
- credentialCount: zod.z.number().int().nonnegative(),
25169
- requestSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
25170
- responseSchema: zod.z.record(zod.z.string(), zod.z.unknown())
25171
- }),
25172
- zod.z.object({
25173
- kind: zod.z.literal("agent-sessions-list"),
25174
- method: zod.z.literal("GET"),
25175
- path: zod.z.string(),
25176
- agentSlug: zod.z.string(),
25177
- moduleFile: zod.z.string()
25178
- }),
25179
- zod.z.object({
25180
- kind: zod.z.literal("agent-session-detail"),
25181
- method: zod.z.literal("GET"),
25182
- path: zod.z.string(),
25183
- agentSlug: zod.z.string(),
25184
- moduleFile: zod.z.string()
25281
+ credentialCount: zod.z.number().int().nonnegative()
25185
25282
  }),
25186
25283
  zod.z.object({
25187
25284
  kind: zod.z.literal("workflow"),
25188
- method: zod.z.literal("POST"),
25189
- path: zod.z.string(),
25190
- workflowSlug: zod.z.string(),
25191
- workflowName: zod.z.string().optional(),
25285
+ slug: zod.z.string(),
25286
+ name: zod.z.string().optional(),
25192
25287
  description: zod.z.string().optional(),
25193
25288
  subscribable: zod.z.boolean(),
25194
25289
  moduleFile: zod.z.string(),
25195
- requestSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
25196
- responseSchema: zod.z.record(zod.z.string(), zod.z.unknown())
25197
- }),
25198
- zod.z.object({
25199
- kind: zod.z.literal("workflow-runs-list"),
25200
- method: zod.z.literal("GET"),
25201
- path: zod.z.string(),
25202
- workflowSlug: zod.z.string(),
25203
- workflowName: zod.z.string().optional(),
25204
- moduleFile: zod.z.string()
25205
- }),
25206
- zod.z.object({
25207
- kind: zod.z.literal("workflow-run-detail"),
25208
- method: zod.z.literal("GET"),
25209
- path: zod.z.string(),
25210
- workflowSlug: zod.z.string(),
25211
- workflowName: zod.z.string().optional(),
25212
- moduleFile: zod.z.string()
25290
+ requestSchema: zod.z.record(zod.z.string(), zod.z.unknown())
25213
25291
  }),
25214
25292
  zod.z.object({
25215
25293
  kind: zod.z.literal("trigger-webhook"),
25216
- method: zod.z.literal("POST"),
25217
- path: zod.z.string(),
25294
+ endpoint: zod.z.string(),
25218
25295
  attachmentIds: zod.z.array(zod.z.string()),
25219
25296
  moduleFile: zod.z.string(),
25220
- requestSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
25221
- attachmentSchemas: zod.z.record(zod.z.string(), zod.z.object({
25222
- requestSchema: zod.z.record(zod.z.string(), zod.z.unknown()),
25223
- filterSchema: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
25224
- })),
25225
- responseSchema: zod.z.record(zod.z.string(), zod.z.unknown())
25297
+ attachmentSchemas: attachmentSchemasSchema
25226
25298
  }),
25227
25299
  zod.z.object({
25228
25300
  kind: zod.z.literal("trigger-poll"),
25229
- method: zod.z.literal("POST"),
25230
- path: zod.z.string(),
25231
25301
  attachmentId: zod.z.string(),
25232
25302
  moduleFile: zod.z.string(),
25233
- schedule: zod.z.string(),
25234
- responseSchema: zod.z.record(zod.z.string(), zod.z.unknown())
25303
+ schedule: zod.z.string()
25235
25304
  }),
25236
25305
  zod.z.object({
25237
25306
  kind: zod.z.literal("trigger-poll-group"),
25238
- method: zod.z.literal("POST"),
25239
- path: zod.z.string(),
25240
25307
  pollId: zod.z.string(),
25241
25308
  attachmentIds: zod.z.array(zod.z.string()),
25242
25309
  moduleFile: zod.z.string(),
25243
- schedule: zod.z.string(),
25244
- responseSchema: zod.z.record(zod.z.string(), zod.z.unknown())
25245
- }),
25246
- zod.z.object({
25247
- kind: zod.z.literal("trigger-runs-list"),
25248
- method: zod.z.literal("GET"),
25249
- path: zod.z.string(),
25250
- attachmentId: zod.z.string(),
25251
- moduleFile: zod.z.string()
25252
- }),
25253
- zod.z.object({
25254
- kind: zod.z.literal("trigger-run-detail"),
25255
- method: zod.z.literal("GET"),
25256
- path: zod.z.string(),
25257
- attachmentId: zod.z.string(),
25258
- moduleFile: zod.z.string()
25310
+ schedule: zod.z.string()
25259
25311
  }),
25260
25312
  zod.z.object({
25261
25313
  kind: zod.z.literal("cron-schedule"),
25262
25314
  attachmentId: zod.z.string(),
25263
25315
  moduleFile: zod.z.string(),
25264
25316
  schedule: zod.z.string()
25265
- }),
25266
- zod.z.object({
25267
- kind: zod.z.literal("plugin"),
25268
- method: zod.z.enum([
25269
- "GET",
25270
- "POST",
25271
- "PUT",
25272
- "PATCH",
25273
- "DELETE"
25274
- ]),
25275
- path: zod.z.string(),
25276
- plugin: zod.z.string()
25277
25317
  })
25278
25318
  ]);
25279
- const StoredRouteManifestSchema = zod.z.object({
25280
- version: zod.z.literal(1),
25281
- entries: zod.z.array(serializedRouteManifestEntrySchema),
25319
+ const storedRouteManifestV2Schema = zod.z.object({
25320
+ version: zod.z.literal(2),
25321
+ entries: zod.z.array(storedRouteManifestEntryV2Schema),
25282
25322
  skills: zod.z.array(StoredRouteManifestSkillSchema).default([]),
25283
25323
  integrations: zod.z.array(zod.z.string()).optional()
25284
25324
  });
25325
+ const DERIVED_ENTRY_KINDS = new Set([
25326
+ "agent-sessions-list",
25327
+ "agent-session-detail",
25328
+ "workflow-runs-list",
25329
+ "workflow-run-detail",
25330
+ "trigger-runs-list",
25331
+ "trigger-run-detail"
25332
+ ]);
25333
+ function webhookEndpointFromPath(path) {
25334
+ return path.replace(/^\/triggers\//, "").replace(/^\/+|\/+$/g, "");
25335
+ }
25336
+ /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
25337
+ function normalizeEntryToV2(entry) {
25338
+ const kind = entry.kind;
25339
+ if (typeof kind !== "string") return null;
25340
+ if (DERIVED_ENTRY_KINDS.has(kind) || kind === "plugin") return null;
25341
+ if (kind === "health") return { kind: "health" };
25342
+ if (kind === "agent") {
25343
+ const slug = typeof entry.slug === "string" ? entry.slug : typeof entry.agentSlug === "string" ? entry.agentSlug : void 0;
25344
+ if (!slug || typeof entry.moduleFile !== "string") return null;
25345
+ return {
25346
+ kind: "agent",
25347
+ slug,
25348
+ moduleFile: entry.moduleFile,
25349
+ ...typeof entry.name === "string" ? { name: entry.name } : {},
25350
+ ...typeof entry.description === "string" ? { description: entry.description } : {},
25351
+ model: typeof entry.model === "string" ? entry.model : "",
25352
+ systemPrompt: typeof entry.systemPrompt === "string" ? entry.systemPrompt : "",
25353
+ toolCount: typeof entry.toolCount === "number" ? entry.toolCount : 0,
25354
+ credentialCount: typeof entry.credentialCount === "number" ? entry.credentialCount : 0
25355
+ };
25356
+ }
25357
+ if (kind === "workflow") {
25358
+ const slug = typeof entry.slug === "string" ? entry.slug : typeof entry.workflowSlug === "string" ? entry.workflowSlug : void 0;
25359
+ if (!slug || typeof entry.moduleFile !== "string") return null;
25360
+ const name = typeof entry.name === "string" ? entry.name : typeof entry.workflowName === "string" ? entry.workflowName : void 0;
25361
+ return {
25362
+ kind: "workflow",
25363
+ slug,
25364
+ moduleFile: entry.moduleFile,
25365
+ ...name ? { name } : {},
25366
+ ...typeof entry.description === "string" ? { description: entry.description } : {},
25367
+ subscribable: entry.subscribable === true,
25368
+ requestSchema: entry.requestSchema && typeof entry.requestSchema === "object" ? entry.requestSchema : {}
25369
+ };
25370
+ }
25371
+ if (kind === "trigger-webhook") {
25372
+ if (typeof entry.moduleFile !== "string" || !Array.isArray(entry.attachmentIds)) return null;
25373
+ const endpoint = typeof entry.endpoint === "string" ? entry.endpoint : typeof entry.path === "string" ? webhookEndpointFromPath(entry.path) : void 0;
25374
+ if (!endpoint) return null;
25375
+ return {
25376
+ kind: "trigger-webhook",
25377
+ endpoint,
25378
+ attachmentIds: entry.attachmentIds,
25379
+ moduleFile: entry.moduleFile,
25380
+ attachmentSchemas: entry.attachmentSchemas && typeof entry.attachmentSchemas === "object" ? entry.attachmentSchemas : {}
25381
+ };
25382
+ }
25383
+ if (kind === "trigger-poll") {
25384
+ if (typeof entry.attachmentId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string") return null;
25385
+ return {
25386
+ kind: "trigger-poll",
25387
+ attachmentId: entry.attachmentId,
25388
+ moduleFile: entry.moduleFile,
25389
+ schedule: entry.schedule
25390
+ };
25391
+ }
25392
+ if (kind === "trigger-poll-group") {
25393
+ if (typeof entry.pollId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string" || !Array.isArray(entry.attachmentIds)) return null;
25394
+ return {
25395
+ kind: "trigger-poll-group",
25396
+ pollId: entry.pollId,
25397
+ attachmentIds: entry.attachmentIds,
25398
+ moduleFile: entry.moduleFile,
25399
+ schedule: entry.schedule
25400
+ };
25401
+ }
25402
+ if (kind === "cron-schedule") {
25403
+ if (typeof entry.attachmentId !== "string" || typeof entry.moduleFile !== "string" || typeof entry.schedule !== "string") return null;
25404
+ return {
25405
+ kind: "cron-schedule",
25406
+ attachmentId: entry.attachmentId,
25407
+ moduleFile: entry.moduleFile,
25408
+ schedule: entry.schedule
25409
+ };
25410
+ }
25411
+ return null;
25412
+ }
25413
+ /** TODO remove after all artifacts rebuilt — upcasts legacy v1 manifests to v2. */
25414
+ function normalizeStoredRouteManifestToV2(value) {
25415
+ if (!value || typeof value !== "object") throw new Error("Invalid route manifest");
25416
+ const raw = value;
25417
+ if (raw.version === 2) return storedRouteManifestV2Schema.parse(value);
25418
+ const entriesRaw = Array.isArray(raw.entries) ? raw.entries : [];
25419
+ const entries = [];
25420
+ for (const entry of entriesRaw) {
25421
+ if (!entry || typeof entry !== "object") continue;
25422
+ const normalized = normalizeEntryToV2(entry);
25423
+ if (normalized) entries.push(normalized);
25424
+ }
25425
+ return storedRouteManifestV2Schema.parse({
25426
+ version: 2,
25427
+ entries,
25428
+ skills: raw.skills ?? [],
25429
+ integrations: raw.integrations
25430
+ });
25431
+ }
25285
25432
  function parseStoredRouteManifest(value) {
25286
- return StoredRouteManifestSchema.parse(value);
25433
+ return normalizeStoredRouteManifestToV2(value);
25287
25434
  }
25288
25435
  /** Messaging platforms that support agent gateway bindings. */
25289
25436
  const ChannelPlatformKeySchema = zod.z.enum(["slack"]);
@@ -25393,8 +25540,8 @@ const ChannelDirectoryEntrySchema = zod.z.object({
25393
25540
  memberCount: zod.z.number().int().nonnegative().optional(),
25394
25541
  isArchived: zod.z.boolean().optional()
25395
25542
  });
25396
- zod.z.object({ connections: zod.z.array(ChannelConnectionSchema) });
25397
- zod.z.object({ channels: zod.z.array(ChannelDirectoryEntrySchema) });
25543
+ zod.z.array(ChannelConnectionSchema);
25544
+ zod.z.array(ChannelDirectoryEntrySchema);
25398
25545
  zod.z.object({ teamName: zod.z.string().min(1).optional() });
25399
25546
  /** OAuth workspace available for channel bindings (e.g. Slack team). */
25400
25547
  const ChannelAccountSchema = zod.z.object({
@@ -25403,7 +25550,7 @@ const ChannelAccountSchema = zod.z.object({
25403
25550
  label: zod.z.string().min(1),
25404
25551
  connectedAt: zod.z.string()
25405
25552
  });
25406
- zod.z.object({ accounts: zod.z.array(ChannelAccountSchema) });
25553
+ zod.z.array(ChannelAccountSchema);
25407
25554
  const NewChannelBindingInputSchema = zod.z.object({
25408
25555
  channelId: zod.z.string().min(1),
25409
25556
  channelName: zod.z.string().min(1),
@@ -25420,6 +25567,29 @@ zod.z.object({ patch: zod.z.object({
25420
25567
  mode: ChannelListenModeSchema.optional(),
25421
25568
  subscribeOnMention: zod.z.boolean().optional()
25422
25569
  }) });
25570
+ /** Metadata for one vault field on a custom api_key app. */
25571
+ const AppCredentialFieldSchema = zod.z.object({
25572
+ label: zod.z.string().trim().min(1).optional(),
25573
+ secret: zod.z.boolean().optional(),
25574
+ optional: zod.z.boolean().optional()
25575
+ });
25576
+ /** Credential template keyed by vault field name. */
25577
+ const AppCredentialFieldsSchema = zod.z.record(zod.z.string().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/), AppCredentialFieldSchema).refine((fields) => Object.keys(fields).length > 0, { message: "At least one credential field is required" }).refine((fields) => Object.values(fields).some((field) => field.optional !== true), { message: "At least one credential field must be required" });
25578
+ function validateCredentialValueAgainstFields(fields, value) {
25579
+ for (const [key, field] of Object.entries(fields)) {
25580
+ if (field.optional === true) continue;
25581
+ const raw = value[key];
25582
+ if (typeof raw !== "string" || raw.trim().length === 0) return {
25583
+ ok: false,
25584
+ message: `Missing required credential field "${key}"`
25585
+ };
25586
+ }
25587
+ for (const key of Object.keys(value)) if (!(key in fields)) return {
25588
+ ok: false,
25589
+ message: `Unknown credential field "${key}"`
25590
+ };
25591
+ return { ok: true };
25592
+ }
25423
25593
  /** A single OAuth scope an app can request, with human copy for connect UI. */
25424
25594
  const OAuthScopeOptionSchema = zod.z.object({
25425
25595
  name: zod.z.string().min(1),
@@ -25447,6 +25617,37 @@ zod.z.object({
25447
25617
  authKind: AppAuthKindSchema,
25448
25618
  oauthScopes: zod.z.array(OAuthScopeOptionSchema)
25449
25619
  }).extend({ source: AppSourceSchema });
25620
+ const customAppNameSchema = zod.z.string().trim().min(1, "Name is required");
25621
+ const AppSlugAvailabilityReasonSchema = ProjectSlugAvailabilityReasonSchema;
25622
+ const AppSlugAvailabilityResponseSchema = zod.z.object({
25623
+ slug: zod.z.string(),
25624
+ available: zod.z.boolean(),
25625
+ reason: AppSlugAvailabilityReasonSchema.optional(),
25626
+ suggestion: AppSlugSchema.optional()
25627
+ });
25628
+ const AppSlugAvailabilityQuerySchema = zod.z.object({ slug: zod.z.string().trim().min(1) });
25629
+ /** Request body for creating an org custom api_key app. */
25630
+ const CreateCustomAppRequestSchema = zod.z.object({
25631
+ name: customAppNameSchema,
25632
+ slug: AppSlugSchema,
25633
+ description: zod.z.string().trim().min(1),
25634
+ fields: AppCredentialFieldsSchema
25635
+ });
25636
+ /** Full custom app detail returned by GET (includes credential template for sync). */
25637
+ const CustomAppDetailSchema = zod.z.object({
25638
+ id: zod.z.string().min(1),
25639
+ slug: zod.z.string().min(1),
25640
+ name: zod.z.string().min(1),
25641
+ description: zod.z.string().min(1),
25642
+ category: zod.z.string().min(1),
25643
+ authKind: zod.z.literal("api_key"),
25644
+ source: zod.z.literal("custom"),
25645
+ credentialFields: AppCredentialFieldsSchema,
25646
+ createdAt: zod.z.string().min(1),
25647
+ updatedAt: zod.z.string().min(1)
25648
+ });
25649
+ const CreateCustomAppResponseSchema = CustomAppDetailSchema;
25650
+ const GetCustomAppResponseSchema = CustomAppDetailSchema;
25450
25651
  zod.z.object({
25451
25652
  id: zod.z.string().min(1),
25452
25653
  organizationId: zod.z.string().min(1).nullable(),
@@ -25458,6 +25659,7 @@ zod.z.object({
25458
25659
  authKind: AppAuthKindSchema,
25459
25660
  oauthScopes: zod.z.array(OAuthScopeOptionSchema),
25460
25661
  source: AppSourceSchema,
25662
+ credentialFields: AppCredentialFieldsSchema.optional(),
25461
25663
  createdAt: zod.z.string().min(1),
25462
25664
  updatedAt: zod.z.string().min(1)
25463
25665
  });
@@ -25474,10 +25676,67 @@ const AppCatalogEntrySchema = zod.z.object({
25474
25676
  logo: zod.z.string().url().nullable().optional(),
25475
25677
  authKind: AppAuthKindSchema,
25476
25678
  oauthScopes: zod.z.array(OAuthScopeOptionSchema),
25679
+ /** Where app metadata and execution are sourced (e.g. composio, custom). */
25680
+ source: AppSourceSchema,
25681
+ /** Custom api_key apps — vault field template for connect UI and sync. */
25682
+ credentialFields: AppCredentialFieldsSchema.optional(),
25477
25683
  /** When present, the app supports agent gateway bindings (external channels). */
25478
25684
  gateway: AppGatewaySchema.optional()
25479
25685
  });
25480
- const ListAppsResponseSchema = zod.z.object({ apps: zod.z.array(AppCatalogEntrySchema) });
25686
+ const ListAppsResponseSchema = zod.z.array(AppCatalogEntrySchema);
25687
+ const CatalogAppSummarySchema = zod.z.object({
25688
+ name: zod.z.string(),
25689
+ description: zod.z.string(),
25690
+ package: zod.z.string()
25691
+ });
25692
+ zod.z.object({
25693
+ items: zod.z.array(CatalogAppSummarySchema),
25694
+ nextCursor: zod.z.string().optional()
25695
+ });
25696
+ zod.z.object({
25697
+ name: zod.z.string(),
25698
+ description: zod.z.string(),
25699
+ package: zod.z.string(),
25700
+ version: zod.z.string().optional()
25701
+ });
25702
+ const CatalogActionSummarySchema = zod.z.object({
25703
+ slug: zod.z.string(),
25704
+ name: zod.z.string(),
25705
+ description: zod.z.string().optional()
25706
+ });
25707
+ zod.z.object({
25708
+ toolkit: zod.z.string().optional(),
25709
+ items: zod.z.array(CatalogActionSummarySchema),
25710
+ nextCursor: zod.z.string().optional()
25711
+ });
25712
+ zod.z.object({
25713
+ slug: zod.z.string(),
25714
+ name: zod.z.string(),
25715
+ description: zod.z.string().optional(),
25716
+ inputParameters: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
25717
+ outputParameters: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
25718
+ version: zod.z.string().optional()
25719
+ });
25720
+ const ORG_SLUG_SEPARATOR = "/";
25721
+ /** Parse a stored app slug into official vs org-custom parts. */
25722
+ function parseAppSlug(slug) {
25723
+ const trimmed = slug.trim();
25724
+ if (!trimmed) throw new Error("parseAppSlug requires a non-empty slug");
25725
+ const separatorIndex = trimmed.indexOf(ORG_SLUG_SEPARATOR);
25726
+ if (separatorIndex === -1) return {
25727
+ kind: "official",
25728
+ slug: trimmed
25729
+ };
25730
+ const orgSlug = trimmed.slice(0, separatorIndex);
25731
+ const name = trimmed.slice(separatorIndex + 1);
25732
+ if (!orgSlug || !name || trimmed.indexOf(ORG_SLUG_SEPARATOR, separatorIndex + 1) !== -1) throw new Error(`Invalid org app slug: ${slug}`);
25733
+ return {
25734
+ kind: "org",
25735
+ orgSlug,
25736
+ name,
25737
+ slug: trimmed
25738
+ };
25739
+ }
25481
25740
  /** How a credential instance is stored (`credential_instances.auth_kind`). */
25482
25741
  const CredentialAuthKindSchema = zod.z.enum([
25483
25742
  "api_key",
@@ -25575,7 +25834,9 @@ function addMissingCredentialTargetIssue(ctx, path = ["projects"]) {
25575
25834
  const CredentialTargetsFieldsSchema = zod.z.object({
25576
25835
  projects: zod.z.array(zod.z.string().min(1)).default([]),
25577
25836
  createOrganizationCredential: zod.z.boolean().default(false),
25578
- createUserProvidedCredential: zod.z.boolean().default(false)
25837
+ createUserProvidedCredential: zod.z.boolean().default(false),
25838
+ /** Display label for created credential instances (apps table / detail page). */
25839
+ label: zod.z.string().trim().min(1).optional()
25579
25840
  });
25580
25841
  CredentialTargetsFieldsSchema.extend({
25581
25842
  appId: zod.z.string().min(1),
@@ -25586,6 +25847,23 @@ zod.z.object({
25586
25847
  status: zod.z.enum(["connected", "redirecting"]),
25587
25848
  authorizeUrl: zod.z.string().url().nullable()
25588
25849
  });
25850
+ zod.z.object({
25851
+ app: zod.z.string().trim().min(1),
25852
+ scopeType: AppCredentialScopeSchema,
25853
+ projectSlug: zod.z.string().trim().min(1).optional(),
25854
+ label: zod.z.string().trim().min(1).optional()
25855
+ }).superRefine((input, ctx) => {
25856
+ if (input.scopeType === "project" && !input.projectSlug?.trim()) ctx.addIssue({
25857
+ code: "custom",
25858
+ message: "projectSlug is required for project scope",
25859
+ path: ["projectSlug"]
25860
+ });
25861
+ });
25862
+ zod.z.object({
25863
+ status: zod.z.enum(["redirecting"]),
25864
+ authorizeUrl: zod.z.string().url(),
25865
+ connectionId: zod.z.string()
25866
+ });
25589
25867
  /** Request body for `POST /api/credentials` (manual api-key fan-out). */
25590
25868
  const CreateCredentialsRequestSchema = CredentialTargetsFieldsSchema.extend({
25591
25869
  appId: zod.z.string().min(1),
@@ -25611,9 +25889,9 @@ const UpdateCredentialRequestSchema = zod.z.object({
25611
25889
  isDefault: zod.z.boolean().optional(),
25612
25890
  value: credentialSecretValueSchema.optional()
25613
25891
  }).refine((input) => input.label !== void 0 || input.isDefault !== void 0 || input.value !== void 0, { message: "At least one field is required" });
25614
- const ListCredentialsResponseSchema = zod.z.object({ credentials: zod.z.array(AppCredentialSummarySchema) });
25615
- const GetCredentialResponseSchema = zod.z.object({ credential: AppCredentialSummarySchema });
25616
- const CreateCredentialsResponseSchema = zod.z.object({ credentials: zod.z.array(AppCredentialSummarySchema) });
25892
+ const ListCredentialsResponseSchema = zod.z.array(AppCredentialSummarySchema);
25893
+ const GetCredentialResponseSchema = AppCredentialSummarySchema;
25894
+ const CreateCredentialsResponseSchema = zod.z.array(AppCredentialSummarySchema);
25617
25895
  const McpConnectionStatusSchema = zod.z.enum([
25618
25896
  "INITIATED",
25619
25897
  "ACTIVE",
@@ -25629,7 +25907,7 @@ const McpAppSchema = zod.z.object({
25629
25907
  connectionId: zod.z.string().optional(),
25630
25908
  status: McpConnectionStatusSchema.optional()
25631
25909
  });
25632
- zod.z.object({ apps: zod.z.array(McpAppSchema) });
25910
+ zod.z.array(McpAppSchema);
25633
25911
  zod.z.object({
25634
25912
  connectionId: zod.z.string(),
25635
25913
  entityId: zod.z.string(),
@@ -25639,11 +25917,6 @@ zod.z.object({
25639
25917
  app: zod.z.string().trim().min(1),
25640
25918
  tool: zod.z.string().trim().min(1),
25641
25919
  arguments: zod.z.record(zod.z.string(), zod.z.unknown()).default({}),
25642
- /**
25643
- * Resolved credential instance to execute against. When set, the platform executes that exact
25644
- * connection (scoped to the caller's org); when omitted it resolves the app's instance by scope.
25645
- */
25646
- instanceId: zod.z.string().trim().min(1).optional(),
25647
25920
  /** Pinned provider toolkit version, sourced from the app definition; forwarded to the provider. */
25648
25921
  version: zod.z.string().trim().min(1)
25649
25922
  });
@@ -25663,112 +25936,6 @@ function isCredentialInput(value) {
25663
25936
  return typeof candidate.key === "string" && CredentialAuthKindSchema.safeParse(candidate.kind).success && candidate.schema instanceof zod.z.ZodType;
25664
25937
  }
25665
25938
  const credentialInputSchema = zod.z.custom((value) => isCredentialInput(value), "must be a credential requirement");
25666
- const PROJECT_SLUG_TAKEN_MESSAGE = "That slug is already taken.";
25667
- const OrganizationSlugErrorCodeSchema = zod.z.enum([
25668
- "slug_taken",
25669
- "slug_reserved",
25670
- "slug_invalid"
25671
- ]);
25672
- const SlugAvailabilityReasonSchema = zod.z.enum([
25673
- "taken",
25674
- "reserved",
25675
- "invalid"
25676
- ]);
25677
- const SlugAvailabilityResponseSchema = zod.z.object({
25678
- slug: zod.z.string(),
25679
- available: zod.z.boolean(),
25680
- reason: SlugAvailabilityReasonSchema.optional(),
25681
- suggestion: OrganizationSlugSchema.optional()
25682
- });
25683
- const SlugAvailabilityQuerySchema = zod.z.object({
25684
- slug: zod.z.string().trim().min(1),
25685
- excludeOrganizationId: zod.z.string().min(1).optional()
25686
- });
25687
- const ProjectSlugAvailabilityReasonSchema = zod.z.enum(["taken", "invalid"]);
25688
- const ProjectSlugAvailabilityResponseSchema = zod.z.object({
25689
- slug: zod.z.string(),
25690
- available: zod.z.boolean(),
25691
- reason: ProjectSlugAvailabilityReasonSchema.optional(),
25692
- suggestion: ProjectSlugSchema.optional()
25693
- });
25694
- const ProjectSlugAvailabilityQuerySchema = zod.z.object({
25695
- slug: zod.z.string().trim().min(1),
25696
- excludeProjectId: zod.z.string().min(1).optional()
25697
- });
25698
- function organizationSlugErrorCodeFromMessage(message) {
25699
- if (message === "That slug is already taken." || /already taken/i.test(message)) return "slug_taken";
25700
- if (/reserved/i.test(message)) return "slug_reserved";
25701
- return "slug_invalid";
25702
- }
25703
- const ProjectStatusSchema = zod.z.enum([
25704
- "inactive",
25705
- "starting",
25706
- "active",
25707
- "failed"
25708
- ]);
25709
- const OrganizationUserRoleSchema = zod.z.enum([
25710
- "owner",
25711
- "admin",
25712
- "builder"
25713
- ]);
25714
- const isoDateTime$5 = zod.z.string().datetime();
25715
- const OrganizationSchema = zod.z.object({
25716
- id: zod.z.string(),
25717
- name: zod.z.string(),
25718
- slug: OrganizationSlugSchema,
25719
- createdAt: isoDateTime$5,
25720
- updatedAt: isoDateTime$5
25721
- });
25722
- const ProjectSchema = zod.z.object({
25723
- id: zod.z.string(),
25724
- organizationId: zod.z.string(),
25725
- name: zod.z.string(),
25726
- slug: ProjectSlugSchema,
25727
- description: zod.z.string().nullable(),
25728
- status: ProjectStatusSchema,
25729
- baseUrl: zod.z.string().nullable(),
25730
- runtimeId: zod.z.string().nullable(),
25731
- lastError: zod.z.string().nullable(),
25732
- createdAt: isoDateTime$5,
25733
- updatedAt: isoDateTime$5
25734
- });
25735
- const UserOrganizationSchema = zod.z.object({
25736
- organization: OrganizationSchema,
25737
- role: OrganizationUserRoleSchema
25738
- });
25739
- const ActiveOrganizationResponseSchema = zod.z.object({ organization: UserOrganizationSchema.nullable() });
25740
- const ListOrganizationsResponseSchema = zod.z.object({ organizations: zod.z.array(UserOrganizationSchema) });
25741
- const CreateOrganizationRequestSchema = zod.z.object({
25742
- name: zod.z.string().trim().min(1),
25743
- /** Format-only at the wire boundary; reserved-name checks run in platform-database. */
25744
- slug: OrganizationSlugSchema.optional()
25745
- });
25746
- const UpdateOrganizationRequestSchema = zod.z.object({
25747
- name: zod.z.string().trim().min(1).optional(),
25748
- slug: ClaimableOrganizationSlugSchema.optional()
25749
- }).refine((data) => data.name !== void 0 || data.slug !== void 0, { message: "At least one field is required" });
25750
- const CreateOrganizationResponseSchema = zod.z.object({ organization: UserOrganizationSchema });
25751
- const ListProjectsResponseSchema = zod.z.object({ projects: zod.z.array(ProjectSchema) });
25752
- const ProjectListMetricsSchema = zod.z.object({
25753
- agentCount: zod.z.number(),
25754
- workflowCount: zod.z.number(),
25755
- skillCount: zod.z.number(),
25756
- credentialCount: zod.z.number(),
25757
- lastDeploymentAt: isoDateTime$5.nullable()
25758
- });
25759
- const ListProjectMetricsResponseSchema = zod.z.object({ metrics: zod.z.record(zod.z.string(), ProjectListMetricsSchema) });
25760
- const CreateProjectRequestSchema = zod.z.object({
25761
- name: zod.z.string().trim().min(1),
25762
- description: zod.z.string().trim().min(1).optional()
25763
- });
25764
- const UpdateProjectRequestSchema = zod.z.object({
25765
- name: zod.z.string().trim().min(1).optional(),
25766
- description: zod.z.string().trim().optional(),
25767
- slug: ProjectSlugSchema.optional()
25768
- }).refine((data) => data.name !== void 0 || data.description !== void 0 || data.slug !== void 0, { message: "At least one field is required" });
25769
- const CreateProjectResponseSchema = zod.z.object({ project: ProjectSchema });
25770
- const ProjectResponseSchema = zod.z.object({ project: ProjectSchema });
25771
- const ProjectReachabilityResponseSchema = zod.z.object({ reachable: zod.z.boolean() });
25772
25939
  const ValidationErrorDetailSchema = zod.z.object({
25773
25940
  path: zod.z.string(),
25774
25941
  message: zod.z.string()
@@ -26414,7 +26581,7 @@ const OrganizationMemberSchema = zod.z.object({
26414
26581
  joinedAt: isoDateTime$4.optional(),
26415
26582
  lastActiveAt: isoDateTime$4.nullable().optional()
26416
26583
  });
26417
- const ListOrganizationMembersResponseSchema = zod.z.object({ members: zod.z.array(OrganizationMemberSchema) });
26584
+ const ListOrganizationMembersResponseSchema = zod.z.array(OrganizationMemberSchema);
26418
26585
  const InviteOrganizationMembersRequestSchema = zod.z.object({
26419
26586
  emails: zod.z.array(zod.z.string().trim().email()).min(1),
26420
26587
  role: InvitableOrganizationMemberRoleSchema
@@ -26430,9 +26597,9 @@ const InviteOrganizationMemberResultSchema = zod.z.object({
26430
26597
  status: InviteOrganizationMemberResultStatusSchema,
26431
26598
  invitationId: zod.z.string().optional()
26432
26599
  });
26433
- const InviteOrganizationMembersResponseSchema = zod.z.object({ results: zod.z.array(InviteOrganizationMemberResultSchema) });
26600
+ const InviteOrganizationMembersResponseSchema = zod.z.array(InviteOrganizationMemberResultSchema);
26434
26601
  const UpdateOrganizationMemberRequestSchema = zod.z.object({ role: InvitableOrganizationMemberRoleSchema });
26435
- const UpdateOrganizationMemberResponseSchema = zod.z.object({ member: OrganizationMemberSchema });
26602
+ const UpdateOrganizationMemberResponseSchema = OrganizationMemberSchema;
26436
26603
  const OrganizationInvitationSchema = zod.z.object({
26437
26604
  id: zod.z.string(),
26438
26605
  organizationName: zod.z.string(),
@@ -26441,8 +26608,8 @@ const OrganizationInvitationSchema = zod.z.object({
26441
26608
  invitedByEmail: zod.z.string().email().optional(),
26442
26609
  role: OrganizationMemberRoleSchema
26443
26610
  });
26444
- const ListOrganizationInvitationsResponseSchema = zod.z.object({ invitations: zod.z.array(OrganizationInvitationSchema) });
26445
- const AcceptOrganizationInvitationResponseSchema = zod.z.object({ organization: UserOrganizationSchema });
26611
+ const ListOrganizationInvitationsResponseSchema = zod.z.array(OrganizationInvitationSchema);
26612
+ const AcceptOrganizationInvitationResponseSchema = UserOrganizationSchema;
26446
26613
  const DeclineOrganizationInvitationResponseSchema = zod.z.object({ success: zod.z.literal(true) });
26447
26614
  /** Web path to auto-accept an invitation after sign-in (used in invite emails). */
26448
26615
  function organizationInvitationAcceptPath(invitationId) {
@@ -26465,7 +26632,7 @@ const ApiKeySummarySchema = zod.z.object({
26465
26632
  createdBy: ApiKeyCreatorSchema,
26466
26633
  isCreatedByCurrentUser: zod.z.boolean()
26467
26634
  });
26468
- const ListApiKeysResponseSchema = zod.z.object({ apiKeys: zod.z.array(ApiKeySummarySchema) });
26635
+ const ListApiKeysResponseSchema = zod.z.array(ApiKeySummarySchema);
26469
26636
  const CreateApiKeyRequestSchema = zod.z.object({ name: zod.z.string().trim().min(1).max(128) });
26470
26637
  const CreateApiKeyResponseSchema = ApiKeySummarySchema.extend({ secret: zod.z.string() });
26471
26638
  const ProjectUserRoleSchema = zod.z.enum(["admin", "builder"]);
@@ -26483,7 +26650,7 @@ const ProjectMemberSchema = zod.z.object({
26483
26650
  createdAt: isoDateTime$2,
26484
26651
  isCurrentUser: zod.z.boolean().optional()
26485
26652
  });
26486
- const ListProjectMembersResponseSchema = zod.z.object({ members: zod.z.array(ProjectMemberSchema) });
26653
+ const ListProjectMembersResponseSchema = zod.z.array(ProjectMemberSchema);
26487
26654
  const InviteProjectMembersRequestSchema = zod.z.object({
26488
26655
  emails: zod.z.array(zod.z.string().trim().email()).min(1),
26489
26656
  role: ProjectUserRoleSchema
@@ -26498,9 +26665,9 @@ const InviteProjectMemberResultSchema = zod.z.object({
26498
26665
  email: zod.z.string(),
26499
26666
  status: InviteProjectMemberResultStatusSchema
26500
26667
  });
26501
- const InviteProjectMembersResponseSchema = zod.z.object({ results: zod.z.array(InviteProjectMemberResultSchema) });
26668
+ const InviteProjectMembersResponseSchema = zod.z.array(InviteProjectMemberResultSchema);
26502
26669
  const UpdateProjectMemberRequestSchema = zod.z.object({ role: ProjectUserRoleSchema });
26503
- const UpdateProjectMemberResponseSchema = zod.z.object({ member: ProjectMemberSchema });
26670
+ const UpdateProjectMemberResponseSchema = ProjectMemberSchema;
26504
26671
  const ProjectSettingsSchema = zod.z.object({
26505
26672
  description: zod.z.string(),
26506
26673
  defaultRole: ProjectUserRoleSchema,
@@ -26511,7 +26678,7 @@ const UpdateProjectSettingsRequestSchema = zod.z.object({
26511
26678
  defaultRole: ProjectUserRoleSchema.optional(),
26512
26679
  invitePermission: ProjectInvitePermissionSchema.optional()
26513
26680
  }).refine((data) => data.description !== void 0 || data.defaultRole !== void 0 || data.invitePermission !== void 0, { message: "At least one field is required" });
26514
- const ProjectSettingsResponseSchema = zod.z.object({ settings: ProjectSettingsSchema });
26681
+ const ProjectSettingsResponseSchema = ProjectSettingsSchema;
26515
26682
  /** Custom avatar override; null means fall back to OAuth `users.image`. */
26516
26683
  const UserAvatarSchema = zod.z.object({ url: zod.z.url().nullable() });
26517
26684
  const UserAvatarPatchSchema = zod.z.object({
@@ -26738,7 +26905,7 @@ const ProjectDeploymentSchema = zod.z.object({
26738
26905
  createdAt: isoDateTime$1,
26739
26906
  active: zod.z.boolean()
26740
26907
  });
26741
- const ListProjectDeploymentsResponseSchema = zod.z.object({ deployments: zod.z.array(ProjectDeploymentSchema) });
26908
+ const ListProjectDeploymentsResponseSchema = zod.z.array(ProjectDeploymentSchema);
26742
26909
  const PLATFORM_RESOURCE_UNSUPPORTED_TEXT = "Not Supported";
26743
26910
  const optionalCount = zod.z.number().int().nonnegative().nullable().optional();
26744
26911
  const optionalTimestamp = zod.z.string().nullable().optional();
@@ -26987,14 +27154,14 @@ zod.z.object({
26987
27154
  new node_async_hooks.AsyncLocalStorage();
26988
27155
  new node_async_hooks.AsyncLocalStorage();
26989
27156
  new AbortController().signal;
26990
- const REGISTRY_KEY = Symbol.for("keystroke.workflowRunGetter");
26991
- function registry() {
27157
+ const REGISTRY_KEY$1 = Symbol.for("keystroke.workflowRunGetter");
27158
+ function registry$1() {
26992
27159
  const globalScope = globalThis;
26993
- if (!globalScope[REGISTRY_KEY]) globalScope[REGISTRY_KEY] = {};
26994
- return globalScope[REGISTRY_KEY];
27160
+ if (!globalScope[REGISTRY_KEY$1]) globalScope[REGISTRY_KEY$1] = {};
27161
+ return globalScope[REGISTRY_KEY$1];
26995
27162
  }
26996
27163
  function registerWorkflowRunGetter(fn) {
26997
- registry().getter = fn;
27164
+ registry$1().getter = fn;
26998
27165
  }
26999
27166
  new node_async_hooks.AsyncLocalStorage();
27000
27167
  //#endregion
@@ -48832,9 +48999,10 @@ function getPgBoss() {
48832
48999
  return boss;
48833
49000
  }
48834
49001
  /** Postgres NOTIFY channel — lowercase identifier (project ids are UUIDs, well under 63 chars). */
48835
- function pgCancelChannelName(scope, projectId) {
49002
+ function pgCancelChannelName(scope, id) {
48836
49003
  if (scope === "platform") return "keystroke_cancel_platform";
48837
- return `keystroke_cancel_${(projectId ?? "default").replace(/[^a-z0-9_]/gi, "_").toLowerCase()}`;
49004
+ if (scope === "organization") return `keystroke_cancel_org_${(id ?? "default").replace(/[^a-z0-9_]/gi, "_").toLowerCase()}`;
49005
+ return `keystroke_cancel_${(id ?? "default").replace(/[^a-z0-9_]/gi, "_").toLowerCase()}`;
48838
49006
  }
48839
49007
  /** Shared queue name for the platform control-plane scope. */
48840
49008
  const DEFAULT_QUEUE_NAME = "keystroke";
@@ -48850,12 +49018,20 @@ function pgBossProjectQueueName(projectId) {
48850
49018
  if (name.length <= 50) return name;
48851
49019
  return `${DEFAULT_QUEUE_NAME}_${(0, node_crypto.createHash)("sha1").update(projectId).digest("hex").slice(0, 40)}`;
48852
49020
  }
49021
+ function pgBossOrgQueueName(organizationId) {
49022
+ const name = `${DEFAULT_QUEUE_NAME}_org_${organizationId.replace(/[^a-zA-Z0-9_]/g, "_")}`;
49023
+ if (name.length <= 50) return name;
49024
+ return `${DEFAULT_QUEUE_NAME}_org_${(0, node_crypto.createHash)("sha1").update(organizationId).digest("hex").slice(0, 36)}`;
49025
+ }
48853
49026
  function buildPgBossJobQueue(boss, options) {
48854
49027
  const queueName = options.queueName ?? "keystroke";
48855
- const cancelChannel = (0, _keystrokehq_database.createPostgresCancelChannel)(options.connectionString, pgCancelChannelName(options.cancelScope ?? "platform", options.projectId));
49028
+ const cancelChannel = (0, _keystrokehq_database.createPostgresCancelChannel)(options.connectionString, pgCancelChannelName(options.cancelScope ?? "platform", options.cancelScope === "organization" ? options.organizationId : options.projectId));
48856
49029
  return {
48857
49030
  async enqueue(input) {
48858
- const jobId = await boss.send(queueName, input, {
49031
+ const jobId = await boss.send(queueName, {
49032
+ ...input,
49033
+ payload: input.payload
49034
+ }, {
48859
49035
  retryLimit: (input.maxAttempts ?? 3) - 1,
48860
49036
  retryDelay: Math.ceil(retryDelayMs(1) / 1e3),
48861
49037
  startAfter: input.scheduledAt,
@@ -48889,7 +49065,8 @@ function buildPgBossJobQueue(boss, options) {
48889
49065
  attempt,
48890
49066
  maxAttempts,
48891
49067
  exhaustedRetries: attempt >= maxAttempts,
48892
- scheduledAt: data.scheduledAt ? new Date(data.scheduledAt) : /* @__PURE__ */ new Date()
49068
+ scheduledAt: data.scheduledAt ? new Date(data.scheduledAt) : /* @__PURE__ */ new Date(),
49069
+ projectId: data.projectId
48893
49070
  });
48894
49071
  });
48895
49072
  return async () => {
@@ -48917,8 +49094,9 @@ async function createPgBossQueue(options) {
48917
49094
  stopBossOnWorkerStop: true,
48918
49095
  queueName,
48919
49096
  connectionString: options.connectionString,
48920
- cancelScope: "project",
48921
- projectId: options.projectId
49097
+ cancelScope: options.cancelScope ?? "project",
49098
+ projectId: options.projectId,
49099
+ organizationId: options.organizationId
48922
49100
  });
48923
49101
  }
48924
49102
  async function createSharedPgBossJobQueue(boss, options) {
@@ -48933,7 +49111,7 @@ async function createSharedPgBossJobQueue(boss, options) {
48933
49111
  function resolveUrl(ctx) {
48934
49112
  return ctx.url ?? (0, _keystrokehq_database.resolveProjectDatabaseUrlFromEnv)(process.env) ?? _keystrokehq_database.DEFAULT_DATABASE_URL;
48935
49113
  }
48936
- /** Postgres pg-boss backend. Platform scope shares one queue; project scope gets a per-project queue. */
49114
+ /** Postgres pg-boss backend. Platform scope shares one queue; org scope gets one queue per org. */
48937
49115
  function pgBossSchedulerPlugin() {
48938
49116
  return defineSchedulerPlugin({
48939
49117
  name: "pg-boss",
@@ -48943,6 +49121,16 @@ function pgBossSchedulerPlugin() {
48943
49121
  await startPgBoss(url);
48944
49122
  return createSharedPgBossJobQueue(getPgBoss(), { connectionString: url });
48945
49123
  }
49124
+ if (ctx.scope === "organization") {
49125
+ const organizationId = ctx.organizationId;
49126
+ if (!organizationId) throw new Error("organizationId is required for organization-scoped pg-boss queue");
49127
+ return createPgBossQueue({
49128
+ connectionString: url,
49129
+ queueName: pgBossOrgQueueName(organizationId),
49130
+ cancelScope: "organization",
49131
+ organizationId
49132
+ });
49133
+ }
48946
49134
  const projectId = ctx.projectId ?? (0, _keystrokehq_database.getProjectScopeId)();
48947
49135
  return createPgBossQueue({
48948
49136
  connectionString: url,
@@ -49373,6 +49561,18 @@ Object.defineProperty(exports, "AgentSummarySchema", {
49373
49561
  return AgentSummarySchema;
49374
49562
  }
49375
49563
  });
49564
+ Object.defineProperty(exports, "AppSlugAvailabilityQuerySchema", {
49565
+ enumerable: true,
49566
+ get: function() {
49567
+ return AppSlugAvailabilityQuerySchema;
49568
+ }
49569
+ });
49570
+ Object.defineProperty(exports, "AppSlugAvailabilityResponseSchema", {
49571
+ enumerable: true,
49572
+ get: function() {
49573
+ return AppSlugAvailabilityResponseSchema;
49574
+ }
49575
+ });
49376
49576
  Object.defineProperty(exports, "CompleteProjectArtifactResponseSchema", {
49377
49577
  enumerable: true,
49378
49578
  get: function() {
@@ -49403,6 +49603,18 @@ Object.defineProperty(exports, "CreateCredentialsResponseSchema", {
49403
49603
  return CreateCredentialsResponseSchema;
49404
49604
  }
49405
49605
  });
49606
+ Object.defineProperty(exports, "CreateCustomAppRequestSchema", {
49607
+ enumerable: true,
49608
+ get: function() {
49609
+ return CreateCustomAppRequestSchema;
49610
+ }
49611
+ });
49612
+ Object.defineProperty(exports, "CreateCustomAppResponseSchema", {
49613
+ enumerable: true,
49614
+ get: function() {
49615
+ return CreateCustomAppResponseSchema;
49616
+ }
49617
+ });
49406
49618
  Object.defineProperty(exports, "CreateOrganizationRequestSchema", {
49407
49619
  enumerable: true,
49408
49620
  get: function() {
@@ -49457,6 +49669,12 @@ Object.defineProperty(exports, "GetCredentialResponseSchema", {
49457
49669
  return GetCredentialResponseSchema;
49458
49670
  }
49459
49671
  });
49672
+ Object.defineProperty(exports, "GetCustomAppResponseSchema", {
49673
+ enumerable: true,
49674
+ get: function() {
49675
+ return GetCustomAppResponseSchema;
49676
+ }
49677
+ });
49460
49678
  Object.defineProperty(exports, "HistoryRunCancelResponseSchema", {
49461
49679
  enumerable: true,
49462
49680
  get: function() {
@@ -50111,6 +50329,12 @@ Object.defineProperty(exports, "p", {
50111
50329
  return p;
50112
50330
  }
50113
50331
  });
50332
+ Object.defineProperty(exports, "parseAppSlug", {
50333
+ enumerable: true,
50334
+ get: function() {
50335
+ return parseAppSlug;
50336
+ }
50337
+ });
50114
50338
  Object.defineProperty(exports, "parseStoredRouteManifest", {
50115
50339
  enumerable: true,
50116
50340
  get: function() {
@@ -50201,6 +50425,12 @@ Object.defineProperty(exports, "userAvatarStorageKey", {
50201
50425
  return userAvatarStorageKey;
50202
50426
  }
50203
50427
  });
50428
+ Object.defineProperty(exports, "validateCredentialValueAgainstFields", {
50429
+ enumerable: true,
50430
+ get: function() {
50431
+ return validateCredentialValueAgainstFields;
50432
+ }
50433
+ });
50204
50434
  Object.defineProperty(exports, "validationErrorResponse", {
50205
50435
  enumerable: true,
50206
50436
  get: function() {
@@ -50220,4 +50450,4 @@ Object.defineProperty(exports, "x$1", {
50220
50450
  }
50221
50451
  });
50222
50452
 
50223
- //# sourceMappingURL=dist-D1Iv7_7S.cjs.map
50453
+ //# sourceMappingURL=dist-C3ioU2dM.cjs.map