@keystrokehq/cli 0.1.147 → 0.1.149

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 (179) hide show
  1. package/README.md +35 -42
  2. package/dist/{alias-RTYYYW3D-CLFgrowj.mjs → alias-RTYYYW3D-BDy5K94v.mjs} +2 -2
  3. package/dist/{alias-RTYYYW3D-CLFgrowj.mjs.map → alias-RTYYYW3D-BDy5K94v.mjs.map} +1 -1
  4. package/dist/{awk2-LA3USKJP-BbsfXVlR.mjs → awk2-LA3USKJP-bQiQEw4P.mjs} +8 -8
  5. package/dist/{awk2-LA3USKJP-BbsfXVlR.mjs.map → awk2-LA3USKJP-bQiQEw4P.mjs.map} +1 -1
  6. package/dist/{base64-C2AIWVNC-C0WIgu5V.mjs → base64-C2AIWVNC-DMnyEdfa.mjs} +2 -2
  7. package/dist/{base64-C2AIWVNC-C0WIgu5V.mjs.map → base64-C2AIWVNC-DMnyEdfa.mjs.map} +1 -1
  8. package/dist/{basename-UB3CIYNI-BgNN3bGm.mjs → basename-UB3CIYNI-DOxZLtwj.mjs} +2 -2
  9. package/dist/{basename-UB3CIYNI-BgNN3bGm.mjs.map → basename-UB3CIYNI-DOxZLtwj.mjs.map} +1 -1
  10. package/dist/{bash-YZ33HQZQ-N6YyKtUH.mjs → bash-YZ33HQZQ-D4vRBW1d.mjs} +2 -2
  11. package/dist/{bash-YZ33HQZQ-N6YyKtUH.mjs.map → bash-YZ33HQZQ-D4vRBW1d.mjs.map} +1 -1
  12. package/dist/{cat-TSFMZVYS-Dz3-oHsV.mjs → cat-TSFMZVYS-D8QgnfyP.mjs} +3 -3
  13. package/dist/{cat-TSFMZVYS-Dz3-oHsV.mjs.map → cat-TSFMZVYS-D8QgnfyP.mjs.map} +1 -1
  14. package/dist/{chmod-TFEPA42X-YF02QJUv.mjs → chmod-TFEPA42X-CRWIslQq.mjs} +2 -2
  15. package/dist/{chmod-TFEPA42X-YF02QJUv.mjs.map → chmod-TFEPA42X-CRWIslQq.mjs.map} +1 -1
  16. package/dist/{chunk-5H5SCKJM-BvfXlL01.mjs → chunk-5H5SCKJM-BaNr0aSJ.mjs} +4 -4
  17. package/dist/{chunk-5H5SCKJM-BvfXlL01.mjs.map → chunk-5H5SCKJM-BaNr0aSJ.mjs.map} +1 -1
  18. package/dist/{chunk-EBAPSGAO-Ctfslw2R.mjs → chunk-EBAPSGAO-BRba1GMs.mjs} +2 -2
  19. package/dist/{chunk-EBAPSGAO-Ctfslw2R.mjs.map → chunk-EBAPSGAO-BRba1GMs.mjs.map} +1 -1
  20. package/dist/{chunk-LEKBROJD-CJMrAyu9.mjs → chunk-LEKBROJD-D1fMh3yQ.mjs} +3 -3
  21. package/dist/{chunk-LEKBROJD-CJMrAyu9.mjs.map → chunk-LEKBROJD-D1fMh3yQ.mjs.map} +1 -1
  22. package/dist/{clear-HKGFEOF6-CekN2x-O.mjs → clear-HKGFEOF6-Cy0E2H3t.mjs} +2 -2
  23. package/dist/{clear-HKGFEOF6-CekN2x-O.mjs.map → clear-HKGFEOF6-Cy0E2H3t.mjs.map} +1 -1
  24. package/dist/{column-XT6UFXNQ-DHENV9D2.mjs → column-XT6UFXNQ-czPN0bKF.mjs} +2 -2
  25. package/dist/{column-XT6UFXNQ-DHENV9D2.mjs.map → column-XT6UFXNQ-czPN0bKF.mjs.map} +1 -1
  26. package/dist/{comm-VV2LDX2J-ppxDJFkY.mjs → comm-VV2LDX2J-nTDBS00q.mjs} +2 -2
  27. package/dist/{comm-VV2LDX2J-ppxDJFkY.mjs.map → comm-VV2LDX2J-nTDBS00q.mjs.map} +1 -1
  28. package/dist/{cp-BISAAS7A-CMWayU4n.mjs → cp-BISAAS7A-CXqDGSmH.mjs} +3 -3
  29. package/dist/{cp-BISAAS7A-CMWayU4n.mjs.map → cp-BISAAS7A-CXqDGSmH.mjs.map} +1 -1
  30. package/dist/{cut-OKARJCCV-Bt8b58eI.mjs → cut-OKARJCCV-8_v90N99.mjs} +3 -3
  31. package/dist/{cut-OKARJCCV-Bt8b58eI.mjs.map → cut-OKARJCCV-8_v90N99.mjs.map} +1 -1
  32. package/dist/{date-UUUPW43J-B7T5OTZZ.mjs → date-UUUPW43J-BiJvTWWs.mjs} +2 -2
  33. package/dist/{date-UUUPW43J-B7T5OTZZ.mjs.map → date-UUUPW43J-BiJvTWWs.mjs.map} +1 -1
  34. package/dist/{diff-MWJFIG7X-DhnPc_5r.mjs → diff-MWJFIG7X-D5by0o7Y.mjs} +2 -2
  35. package/dist/{diff-MWJFIG7X-DhnPc_5r.mjs.map → diff-MWJFIG7X-D5by0o7Y.mjs.map} +1 -1
  36. package/dist/{dirname-MPHRFUTI-Dkb3S4OX.mjs → dirname-MPHRFUTI-VCKXiC16.mjs} +2 -2
  37. package/dist/{dirname-MPHRFUTI-Dkb3S4OX.mjs.map → dirname-MPHRFUTI-VCKXiC16.mjs.map} +1 -1
  38. package/dist/dist-BlsDG7kb.mjs +3 -0
  39. package/dist/{dist-E6dh6qXe.mjs → dist-C6adeAws.mjs} +1006 -138
  40. package/dist/dist-C6adeAws.mjs.map +1 -0
  41. package/dist/dist-DJQnugPi.mjs +1829 -0
  42. package/dist/dist-DJQnugPi.mjs.map +1 -0
  43. package/dist/{dist-B72RPrho.mjs → dist-DSkS8uEB.mjs} +43888 -28664
  44. package/dist/dist-DSkS8uEB.mjs.map +1 -0
  45. package/dist/dist-Dq1kkbLy.mjs +4 -0
  46. package/dist/{du-572XNP42-ClP4jXB1.mjs → du-572XNP42-C_zifijt.mjs} +3 -3
  47. package/dist/{du-572XNP42-ClP4jXB1.mjs.map → du-572XNP42-C_zifijt.mjs.map} +1 -1
  48. package/dist/{env-36M5BO7M-CsP_aiWr.mjs → env-36M5BO7M-CEbFSWHW.mjs} +6 -6
  49. package/dist/{env-36M5BO7M-CsP_aiWr.mjs.map → env-36M5BO7M-CEbFSWHW.mjs.map} +1 -1
  50. package/dist/{expand-JSPG6VOP-B-YUvYpu.mjs → expand-JSPG6VOP-CxlV2zRG.mjs} +2 -2
  51. package/dist/{expand-JSPG6VOP-B-YUvYpu.mjs.map → expand-JSPG6VOP-CxlV2zRG.mjs.map} +1 -1
  52. package/dist/{expr-5JAACS4X-1TBq84gG.mjs → expr-5JAACS4X-CM1VDr6S.mjs} +2 -2
  53. package/dist/{expr-5JAACS4X-1TBq84gG.mjs.map → expr-5JAACS4X-CM1VDr6S.mjs.map} +1 -1
  54. package/dist/{file-IPZJC3FQ-DcZNOWyY.mjs → file-IPZJC3FQ-DYa9X4WH.mjs} +17 -17
  55. package/dist/file-IPZJC3FQ-DYa9X4WH.mjs.map +1 -0
  56. package/dist/{find-INTH3OLC-6p47KeeT.mjs → find-INTH3OLC-CPiHWE9r.mjs} +4 -4
  57. package/dist/{find-INTH3OLC-6p47KeeT.mjs.map → find-INTH3OLC-CPiHWE9r.mjs.map} +1 -1
  58. package/dist/{fold-4TQNYMSW-C54bHzLd.mjs → fold-4TQNYMSW-B4tfWHg3.mjs} +2 -2
  59. package/dist/{fold-4TQNYMSW-C54bHzLd.mjs.map → fold-4TQNYMSW-B4tfWHg3.mjs.map} +1 -1
  60. package/dist/{grep-V3LQVMRQ-D99Bq7Kj.mjs → grep-V3LQVMRQ-BbRYJxzz.mjs} +3 -3
  61. package/dist/{grep-V3LQVMRQ-D99Bq7Kj.mjs.map → grep-V3LQVMRQ-BbRYJxzz.mjs.map} +1 -1
  62. package/dist/{gzip-O5ASJAFY-CZDRROqP.mjs → gzip-O5ASJAFY-rKFFXJyd.mjs} +2 -2
  63. package/dist/{gzip-O5ASJAFY-CZDRROqP.mjs.map → gzip-O5ASJAFY-rKFFXJyd.mjs.map} +1 -1
  64. package/dist/{head-442HYESI-D96RMdki.mjs → head-442HYESI-sl2UFkqV.mjs} +2 -2
  65. package/dist/{head-442HYESI-D96RMdki.mjs.map → head-442HYESI-sl2UFkqV.mjs.map} +1 -1
  66. package/dist/{history-WYYKSLSZ-ACNQVupn.mjs → history-WYYKSLSZ-BQO1BlWh.mjs} +2 -2
  67. package/dist/{history-WYYKSLSZ-ACNQVupn.mjs.map → history-WYYKSLSZ-BQO1BlWh.mjs.map} +1 -1
  68. package/dist/{html-to-markdown-JW4MSQZO-DQOxFIvF.mjs → html-to-markdown-JW4MSQZO-CJGwkgpQ.mjs} +2 -2
  69. package/dist/{html-to-markdown-JW4MSQZO-DQOxFIvF.mjs.map → html-to-markdown-JW4MSQZO-CJGwkgpQ.mjs.map} +1 -1
  70. package/dist/index.mjs +9 -1
  71. package/dist/index.mjs.map +1 -1
  72. package/dist/{join-TBRGI3LQ-B8I9tkJ5.mjs → join-TBRGI3LQ-BAeS4llp.mjs} +2 -2
  73. package/dist/{join-TBRGI3LQ-B8I9tkJ5.mjs.map → join-TBRGI3LQ-BAeS4llp.mjs.map} +1 -1
  74. package/dist/{jq-4XLYLOS5-wFZYfsfJ.mjs → jq-4XLYLOS5-BqwoG7Hj.mjs} +7 -7
  75. package/dist/{jq-4XLYLOS5-wFZYfsfJ.mjs.map → jq-4XLYLOS5-BqwoG7Hj.mjs.map} +1 -1
  76. package/dist/{js-exec-N5KEZBH7-CoRL1IOd.mjs → js-exec-N5KEZBH7-DbXmMwbQ.mjs} +13 -13
  77. package/dist/{js-exec-N5KEZBH7-CoRL1IOd.mjs.map → js-exec-N5KEZBH7-DbXmMwbQ.mjs.map} +1 -1
  78. package/dist/{ln-4LGSXXGD-Dg0R9i5G.mjs → ln-4LGSXXGD-CpN9ORGB.mjs} +2 -2
  79. package/dist/{ln-4LGSXXGD-Dg0R9i5G.mjs.map → ln-4LGSXXGD-CpN9ORGB.mjs.map} +1 -1
  80. package/dist/{ls-ZJGQER7M-DLDSfI4x.mjs → ls-ZJGQER7M-B0J6G8Ao.mjs} +3 -3
  81. package/dist/{ls-ZJGQER7M-DLDSfI4x.mjs.map → ls-ZJGQER7M-B0J6G8Ao.mjs.map} +1 -1
  82. package/dist/{maybe-auto-update-CKoJBwJ_.mjs → maybe-auto-update-dzy8lzxn.mjs} +13 -8
  83. package/dist/maybe-auto-update-dzy8lzxn.mjs.map +1 -0
  84. package/dist/{md5sum-SPU24VSG-DQc8sqXO.mjs → md5sum-SPU24VSG-CETB591F.mjs} +3 -3
  85. package/dist/{md5sum-SPU24VSG-DQc8sqXO.mjs.map → md5sum-SPU24VSG-CETB591F.mjs.map} +1 -1
  86. package/dist/{mkdir-MEPGZOB6-BjUKzhdL.mjs → mkdir-MEPGZOB6-B5bpLWTB.mjs} +6 -6
  87. package/dist/{mkdir-MEPGZOB6-BjUKzhdL.mjs.map → mkdir-MEPGZOB6-B5bpLWTB.mjs.map} +1 -1
  88. package/dist/{mv-W5BIQ646-CdSIyY-U.mjs → mv-W5BIQ646-7tYLVIVw.mjs} +3 -3
  89. package/dist/{mv-W5BIQ646-CdSIyY-U.mjs.map → mv-W5BIQ646-7tYLVIVw.mjs.map} +1 -1
  90. package/dist/{nl-WSDW7I4O-DmtCnyKU.mjs → nl-WSDW7I4O-CHnycLPl.mjs} +2 -2
  91. package/dist/{nl-WSDW7I4O-DmtCnyKU.mjs.map → nl-WSDW7I4O-CHnycLPl.mjs.map} +1 -1
  92. package/dist/{paste-7JC6S4DX-CtmM5Qy8.mjs → paste-7JC6S4DX-CKUaf7iE.mjs} +2 -2
  93. package/dist/{paste-7JC6S4DX-CtmM5Qy8.mjs.map → paste-7JC6S4DX-CKUaf7iE.mjs.map} +1 -1
  94. package/dist/{printf-TWGXF445-B7cTysaa.mjs → printf-TWGXF445-Byg8yI9x.mjs} +3 -3
  95. package/dist/{printf-TWGXF445-B7cTysaa.mjs.map → printf-TWGXF445-Byg8yI9x.mjs.map} +1 -1
  96. package/dist/{program-OcNo9lRF.mjs → program-CyirDIA2.mjs} +4538 -1013
  97. package/dist/program-CyirDIA2.mjs.map +1 -0
  98. package/dist/{python3-POMOR4OA-CKy80mpF.mjs → python3-POMOR4OA-D-6P4EKs.mjs} +17 -17
  99. package/dist/python3-POMOR4OA-D-6P4EKs.mjs.map +1 -0
  100. package/dist/{readlink-OPJF4DL5-Rc1Mz_Xx.mjs → readlink-OPJF4DL5-CGS-PxkH.mjs} +2 -2
  101. package/dist/{readlink-OPJF4DL5-Rc1Mz_Xx.mjs.map → readlink-OPJF4DL5-CGS-PxkH.mjs.map} +1 -1
  102. package/dist/{rev-5EHFX4EJ-3dd9vwHW.mjs → rev-5EHFX4EJ-BLJdSt1D.mjs} +2 -2
  103. package/dist/{rev-5EHFX4EJ-3dd9vwHW.mjs.map → rev-5EHFX4EJ-BLJdSt1D.mjs.map} +1 -1
  104. package/dist/{rg-S4FXYXWB-BbXVo6JX.mjs → rg-S4FXYXWB-Ekm2aMrv.mjs} +14 -14
  105. package/dist/{rg-S4FXYXWB-BbXVo6JX.mjs.map → rg-S4FXYXWB-Ekm2aMrv.mjs.map} +1 -1
  106. package/dist/{rm-SSGETQVQ-Ch53Rmrr.mjs → rm-SSGETQVQ-DV-525hw.mjs} +6 -6
  107. package/dist/{rm-SSGETQVQ-Ch53Rmrr.mjs.map → rm-SSGETQVQ-DV-525hw.mjs.map} +1 -1
  108. package/dist/{rmdir-OC4ZLPYA-D3QCHlIB.mjs → rmdir-OC4ZLPYA-BGOrZMUa.mjs} +3 -3
  109. package/dist/{rmdir-OC4ZLPYA-D3QCHlIB.mjs.map → rmdir-OC4ZLPYA-BGOrZMUa.mjs.map} +1 -1
  110. package/dist/{run-package-manager-update-DgeSZuUc.mjs → run-package-manager-update-C4uA6xWB.mjs} +281 -66
  111. package/dist/run-package-manager-update-C4uA6xWB.mjs.map +1 -0
  112. package/dist/{sed-S5UIK574-DE1KeTk3.mjs → sed-S5UIK574-C3nurgzc.mjs} +4 -4
  113. package/dist/{sed-S5UIK574-DE1KeTk3.mjs.map → sed-S5UIK574-C3nurgzc.mjs.map} +1 -1
  114. package/dist/{sha1sum-2PTOAFR6-DNjSNcYK.mjs → sha1sum-2PTOAFR6-GDQNigjA.mjs} +3 -3
  115. package/dist/{sha1sum-2PTOAFR6-DNjSNcYK.mjs.map → sha1sum-2PTOAFR6-GDQNigjA.mjs.map} +1 -1
  116. package/dist/{sha256sum-NS7D3IXX-BMaCKkT5.mjs → sha256sum-NS7D3IXX-bI78J2Ek.mjs} +3 -3
  117. package/dist/{sha256sum-NS7D3IXX-BMaCKkT5.mjs.map → sha256sum-NS7D3IXX-bI78J2Ek.mjs.map} +1 -1
  118. package/dist/skills-bundle/_AGENTS.mcp.md +9 -9
  119. package/dist/skills-bundle/_AGENTS.md +88 -47
  120. package/dist/{sleep-X22JJINO-Do5hEQQW.mjs → sleep-X22JJINO-gsrMSr5k.mjs} +2 -2
  121. package/dist/{sleep-X22JJINO-Do5hEQQW.mjs.map → sleep-X22JJINO-gsrMSr5k.mjs.map} +1 -1
  122. package/dist/{sort-SW2YEO5B-B7j1zw8k.mjs → sort-SW2YEO5B-D5UsbJuA.mjs} +3 -3
  123. package/dist/{sort-SW2YEO5B-B7j1zw8k.mjs.map → sort-SW2YEO5B-D5UsbJuA.mjs.map} +1 -1
  124. package/dist/{split-4KKZZXXE-h8GD4HP4.mjs → split-4KKZZXXE-D_eM0wGE.mjs} +2 -2
  125. package/dist/{split-4KKZZXXE-h8GD4HP4.mjs.map → split-4KKZZXXE-D_eM0wGE.mjs.map} +1 -1
  126. package/dist/{sqlite3-CGOEFJAO-DvzzghDg.mjs → sqlite3-CGOEFJAO-Eu-N4sPa.mjs} +3 -3
  127. package/dist/{sqlite3-CGOEFJAO-DvzzghDg.mjs.map → sqlite3-CGOEFJAO-Eu-N4sPa.mjs.map} +1 -1
  128. package/dist/{stat-CD34IZ4P-B5ZOJh4J.mjs → stat-CD34IZ4P-BS1XgX8K.mjs} +2 -2
  129. package/dist/{stat-CD34IZ4P-B5ZOJh4J.mjs.map → stat-CD34IZ4P-BS1XgX8K.mjs.map} +1 -1
  130. package/dist/{strings-6WDHLGMX-DdiEdoL-.mjs → strings-6WDHLGMX-BGTuHTcR.mjs} +2 -2
  131. package/dist/{strings-6WDHLGMX-DdiEdoL-.mjs.map → strings-6WDHLGMX-BGTuHTcR.mjs.map} +1 -1
  132. package/dist/{tail-R4PCA2C4-CUfroNeu.mjs → tail-R4PCA2C4-CfCvDsXY.mjs} +2 -2
  133. package/dist/{tail-R4PCA2C4-CUfroNeu.mjs.map → tail-R4PCA2C4-CfCvDsXY.mjs.map} +1 -1
  134. package/dist/{tar-STHHZTZ6-DRf60e-G.mjs → tar-STHHZTZ6-CzlFhy51.mjs} +3 -3
  135. package/dist/{tar-STHHZTZ6-DRf60e-G.mjs.map → tar-STHHZTZ6-CzlFhy51.mjs.map} +1 -1
  136. package/dist/{tee-YUZ2FKCJ-po_dfyc_.mjs → tee-YUZ2FKCJ-rZEvi44P.mjs} +2 -2
  137. package/dist/{tee-YUZ2FKCJ-po_dfyc_.mjs.map → tee-YUZ2FKCJ-rZEvi44P.mjs.map} +1 -1
  138. package/dist/templates/hello-world/README.md +1 -1
  139. package/dist/templates/hello-world/package.json +2 -3
  140. package/dist/{time-D4LNBSWX-DVWhAldK.mjs → time-D4LNBSWX-D_2r6q9s.mjs} +6 -6
  141. package/dist/{time-D4LNBSWX-DVWhAldK.mjs.map → time-D4LNBSWX-D_2r6q9s.mjs.map} +1 -1
  142. package/dist/{timeout-YDCRSLPQ-B_yntmXU.mjs → timeout-YDCRSLPQ-BCyope7T.mjs} +7 -7
  143. package/dist/{timeout-YDCRSLPQ-B_yntmXU.mjs.map → timeout-YDCRSLPQ-BCyope7T.mjs.map} +1 -1
  144. package/dist/{touch-UA33VN3N-oW1SBT1r.mjs → touch-UA33VN3N-NfG_nyJw.mjs} +2 -2
  145. package/dist/{touch-UA33VN3N-oW1SBT1r.mjs.map → touch-UA33VN3N-NfG_nyJw.mjs.map} +1 -1
  146. package/dist/{tr-36LHWFRQ-CTq3z6wq.mjs → tr-36LHWFRQ-BqtCYOhC.mjs} +3 -3
  147. package/dist/{tr-36LHWFRQ-CTq3z6wq.mjs.map → tr-36LHWFRQ-BqtCYOhC.mjs.map} +1 -1
  148. package/dist/{tree-YLD52CNT-CIozNsLQ.mjs → tree-YLD52CNT-BjNKvvwq.mjs} +3 -3
  149. package/dist/{tree-YLD52CNT-CIozNsLQ.mjs.map → tree-YLD52CNT-BjNKvvwq.mjs.map} +1 -1
  150. package/dist/{unexpand-CADSA4VO-Cq9DTcUg.mjs → unexpand-CADSA4VO-BRBq66Ny.mjs} +2 -2
  151. package/dist/{unexpand-CADSA4VO-Cq9DTcUg.mjs.map → unexpand-CADSA4VO-BRBq66Ny.mjs.map} +1 -1
  152. package/dist/{uniq-XSIZR6PB-D5lt-IXF.mjs → uniq-XSIZR6PB-CEAOHvgb.mjs} +3 -3
  153. package/dist/{uniq-XSIZR6PB-D5lt-IXF.mjs.map → uniq-XSIZR6PB-CEAOHvgb.mjs.map} +1 -1
  154. package/dist/{wc-LF7NU4LA-BFPabrwD.mjs → wc-LF7NU4LA-DQsmzFSM.mjs} +3 -3
  155. package/dist/{wc-LF7NU4LA-BFPabrwD.mjs.map → wc-LF7NU4LA-DQsmzFSM.mjs.map} +1 -1
  156. package/dist/{which-XEM24D5D-2LvlkpUo.mjs → which-XEM24D5D-ClMwNewh.mjs} +2 -2
  157. package/dist/{which-XEM24D5D-2LvlkpUo.mjs.map → which-XEM24D5D-ClMwNewh.mjs.map} +1 -1
  158. package/dist/{xan-Y6WF3IRG-DjKO96Pj.mjs → xan-Y6WF3IRG-CvZAKNm2.mjs} +7 -7
  159. package/dist/{xan-Y6WF3IRG-DjKO96Pj.mjs.map → xan-Y6WF3IRG-CvZAKNm2.mjs.map} +1 -1
  160. package/dist/{xargs-MGZPH7AX-D2bIgrdg.mjs → xargs-MGZPH7AX-DaERa6_Q.mjs} +6 -6
  161. package/dist/{xargs-MGZPH7AX-D2bIgrdg.mjs.map → xargs-MGZPH7AX-DaERa6_Q.mjs.map} +1 -1
  162. package/dist/{yq-4QJW3EQG-XhB3aACo.mjs → yq-4QJW3EQG-DABmi_in.mjs} +88 -88
  163. package/dist/yq-4QJW3EQG-DABmi_in.mjs.map +1 -0
  164. package/package.json +3 -6
  165. package/dist/dist-B72RPrho.mjs.map +0 -1
  166. package/dist/dist-CBVf3SwI.mjs +0 -11661
  167. package/dist/dist-CBVf3SwI.mjs.map +0 -1
  168. package/dist/dist-CyKcvwuI.mjs +0 -816
  169. package/dist/dist-CyKcvwuI.mjs.map +0 -1
  170. package/dist/dist-Duu6X1Sh.mjs +0 -4
  171. package/dist/dist-E6dh6qXe.mjs.map +0 -1
  172. package/dist/file-IPZJC3FQ-DcZNOWyY.mjs.map +0 -1
  173. package/dist/maybe-auto-update-CKoJBwJ_.mjs.map +0 -1
  174. package/dist/program-OcNo9lRF.mjs.map +0 -1
  175. package/dist/python3-POMOR4OA-CKy80mpF.mjs.map +0 -1
  176. package/dist/run-package-manager-update-DgeSZuUc.mjs.map +0 -1
  177. package/dist/watch-app-DTIeKrbl-CSpsNzVG.mjs +0 -100
  178. package/dist/watch-app-DTIeKrbl-CSpsNzVG.mjs.map +0 -1
  179. package/dist/yq-4QJW3EQG-XhB3aACo.mjs.map +0 -1
@@ -4794,7 +4794,7 @@ function number(params) {
4794
4794
  return /* @__PURE__ */ _coercedNumber(ZodNumber, params);
4795
4795
  }
4796
4796
  //#endregion
4797
- //#region ../../packages/shared/dist/billing-BL8kgXs-.mjs
4797
+ //#region ../../packages/shared/dist/billing-Ig0pw49a.mjs
4798
4798
  const isoDateTime$7 = string().datetime();
4799
4799
  const subscriptionStatusSchema = _enum([
4800
4800
  "none",
@@ -4949,7 +4949,11 @@ const BillingUsageMeterKeySchema = _enum([
4949
4949
  "tigris_storage"
4950
4950
  ]);
4951
4951
  const BillingUsageKeySourceSchema = _enum(["platform", "byok"]);
4952
- const BillingUsageRunKindSchema = _enum(["agent", "workflow"]);
4952
+ const BillingUsageRunKindSchema = _enum([
4953
+ "agent",
4954
+ "workflow",
4955
+ "platform_agent"
4956
+ ]);
4953
4957
  object({ events: array(object({
4954
4958
  projectId: string().min(1).max(255).nullable().optional(),
4955
4959
  runId: string().min(1).max(255).nullable().optional(),
@@ -4972,7 +4976,7 @@ object({
4972
4976
  chargeMicroCredits: number$1().int().nonnegative()
4973
4977
  });
4974
4978
  //#endregion
4975
- //#region ../../packages/shared/dist/credential-runtime-PPZh5Cbn.mjs
4979
+ //#region ../../packages/shared/dist/credential-runtime-Cbm2X9rK.mjs
4976
4980
  const ACTIVE_ORG_HEADER = "x-keystroke-org-id";
4977
4981
  /**
4978
4982
  * Client surface that originated the request. The hosted web app and CLI set this
@@ -5016,8 +5020,7 @@ const ChatAttachmentInputSchema = object({
5016
5020
  mediaType: string().min(1),
5017
5021
  filename: string().optional()
5018
5022
  });
5019
- /** JSON-safe file ref for workflow inputs, step outputs, and `agent.prompt({ files })`. */
5020
- const FilePartSchema = object({
5023
+ object({
5021
5024
  type: literal("file"),
5022
5025
  mediaType: string().min(1),
5023
5026
  url: string().min(1),
@@ -5037,14 +5040,6 @@ const PresignChatAttachmentResponseSchema = object({
5037
5040
  const LOCAL_PLATFORM_ORIGIN = "http://localhost:3002";
5038
5041
  /** Default production platform origin when no env override is set. */
5039
5042
  const DEFAULT_CLOUD_PLATFORM_ORIGIN = "https://api.keystroke.ai";
5040
- /** Reads `PUBLIC_PLATFORM_URL` when explicitly set. */
5041
- function resolveExplicitPublicPlatformOrigin(env = process.env) {
5042
- return env.PUBLIC_PLATFORM_URL?.replace(/\/$/, "") || void 0;
5043
- }
5044
- /** `PUBLIC_PLATFORM_URL` origin; falls back to {@link LOCAL_PLATFORM_ORIGIN} when unset. */
5045
- function resolvePublicPlatformOrigin(env = process.env) {
5046
- return resolveExplicitPublicPlatformOrigin(env) ?? "http://localhost:3002";
5047
- }
5048
5043
  //#endregion
5049
5044
  //#region ../../packages/shared/dist/credential-spec-B-iwg8Oc.mjs
5050
5045
  /** OpenAPI 3.0 JSON Schema for manifests and route discovery. */
@@ -5828,6 +5823,7 @@ const ProjectSchema = object({
5828
5823
  baseUrl: string().nullable(),
5829
5824
  runtimeId: string().nullable(),
5830
5825
  lastError: string().nullable(),
5826
+ activeArtifactId: string().nullable(),
5831
5827
  createdAt: isoDateTime$6,
5832
5828
  updatedAt: isoDateTime$6
5833
5829
  });
@@ -5876,6 +5872,17 @@ function slugifyAppName(name) {
5876
5872
  }
5877
5873
  /** Browser→platform request budget (ping + small platform overhead). */
5878
5874
  const PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS = 17e3;
5875
+ /**
5876
+ * SDK HTTP budget for managed deploy transaction requests. Completion may
5877
+ * download and validate a near-limit artifact, so it must not inherit ky's 10s
5878
+ * default. Local analysis/build runs outside the HTTP request.
5879
+ */
5880
+ const MANAGED_DEPLOY_REQUEST_TIMEOUT_MS = 15 * 6e4;
5881
+ /**
5882
+ * SDK HTTP budget for draft `commit` / `commitFromDiff`. First uploads can be
5883
+ * multi-MB binary patches applied on Code.Storage; ky’s default 10s aborts those.
5884
+ */
5885
+ const PROJECT_DRAFT_COMMIT_REQUEST_TIMEOUT_MS = 5 * 6e4;
5879
5886
  /** Path of the public Mintlify-hosted docs search MCP server, relative to the web origin. */
5880
5887
  const DOCS_MCP_PATH = "/docs/mcp";
5881
5888
  /**
@@ -5915,27 +5922,6 @@ function originFromPublicUrl(value, fallback) {
5915
5922
  if (!trimmed) return fallback.replace(/\/+$/, "");
5916
5923
  return trimmed.replace(/\/+$/, "");
5917
5924
  }
5918
- /** TCP port to bind for a local server, derived from a public URL. */
5919
- function listenPortFromUrl(url, fallback) {
5920
- const parsed = new URL(url);
5921
- if (parsed.port) {
5922
- const port = Number(parsed.port);
5923
- if (Number.isFinite(port) && port > 0) return port;
5924
- }
5925
- if (parsed.protocol === "https:") return 443;
5926
- if (parsed.protocol === "http:") return 80;
5927
- return fallback;
5928
- }
5929
- /** Shorthand: listen port from `PUBLIC_*_URL` or fallback. */
5930
- function listenPortFromPublicUrl(value, fallback) {
5931
- const trimmed = value?.trim();
5932
- if (!trimmed) return fallback;
5933
- try {
5934
- return listenPortFromUrl(trimmed, fallback);
5935
- } catch {
5936
- return fallback;
5937
- }
5938
- }
5939
5925
  /**
5940
5926
  * Target for Zod ↔ JSON Schema round-trips of persisted Keystroke schemas
5941
5927
  * (workflow inputs, webhook payloads, hook resume schemas, agent output schemas).
@@ -5957,8 +5943,8 @@ function zodToStoredJsonSchema(schema, options = {}) {
5957
5943
  } } : {}
5958
5944
  });
5959
5945
  }
5960
- /** On-disk path under the project root (packed in deploy artifacts when present). */
5961
- const ROUTE_MANIFEST_REL_PATH = "dist/.keystroke/route-manifest.json";
5946
+ /** Thin modular project index (source of truth for emit hashes + shard paths). */
5947
+ const PROJECT_MANIFEST_REL_PATH = "dist/.keystroke/manifest.json";
5962
5948
  /**
5963
5949
  * Structural workflow-canvas graph contract.
5964
5950
  *
@@ -6288,6 +6274,7 @@ const storedRouteManifestV2Schema = object({
6288
6274
  skills: array(StoredRouteManifestSkillSchema).default([]),
6289
6275
  integrations: array(string()).optional()
6290
6276
  });
6277
+ const StoredRouteManifestSchema = storedRouteManifestV2Schema;
6291
6278
  /**
6292
6279
  * Parse a stored route manifest. Only the strict v2 schema is supported: the
6293
6280
  * builder always emits v2 and every deploy regenerates the manifest, so there is
@@ -6297,6 +6284,117 @@ const storedRouteManifestV2Schema = object({
6297
6284
  function parseStoredRouteManifest(value) {
6298
6285
  return storedRouteManifestV2Schema.parse(value);
6299
6286
  }
6287
+ const ProjectManifestModuleRefSchema = object({
6288
+ kind: _enum([
6289
+ "agent",
6290
+ "workflow",
6291
+ "trigger"
6292
+ ]),
6293
+ id: string(),
6294
+ /** Path relative to `dist/.keystroke/`. */
6295
+ path: string(),
6296
+ /** Input-closure / source hash that produced the meta shard. */
6297
+ contentHash: string(),
6298
+ /** Workflows only — path of the flow-graph shard relative to `dist/.keystroke/`. */
6299
+ flowPath: string().optional(),
6300
+ /** Workflows only — hash of the workflow source used for the flow producer. */
6301
+ flowHash: string().optional()
6302
+ });
6303
+ const ProjectManifestSchema = object({
6304
+ version: literal(3),
6305
+ modules: array(ProjectManifestModuleRefSchema),
6306
+ skills: array(StoredRouteManifestSkillSchema).default([]),
6307
+ integrations: array(string()).optional(),
6308
+ actionsCatalogPath: string(),
6309
+ actionsCatalogHash: string()
6310
+ });
6311
+ function parseProjectManifest(value) {
6312
+ return ProjectManifestSchema.parse(value);
6313
+ }
6314
+ object({
6315
+ kind: literal("agent"),
6316
+ slug: string(),
6317
+ moduleFile: string(),
6318
+ name: requiredDisplayTextSchema,
6319
+ description: requiredDisplayTextSchema,
6320
+ model: string(),
6321
+ compactionModel: string().optional(),
6322
+ systemPrompt: string(),
6323
+ toolCount: number$1().int().nonnegative(),
6324
+ credentialCount: number$1().int().nonnegative(),
6325
+ appSlugs: array(string()).default([]),
6326
+ toolSlugs: array(string()).default([]),
6327
+ toolRequirements: record(string(), array(CredentialRequirementSummarySchema)).optional(),
6328
+ sandboxRequirements: array(CredentialRequirementSummarySchema).optional()
6329
+ });
6330
+ object({
6331
+ kind: literal("workflow"),
6332
+ slug: string(),
6333
+ name: requiredDisplayTextSchema,
6334
+ description: requiredDisplayTextSchema,
6335
+ subscribable: boolean(),
6336
+ moduleFile: string(),
6337
+ requestSchema: record(string(), unknown()),
6338
+ responseSchema: record(string(), unknown()).optional()
6339
+ });
6340
+ object({
6341
+ flowGraph: WorkflowCanvasGraphSchema,
6342
+ flowGraphSourceHash: string(),
6343
+ flowGraphHash: string()
6344
+ });
6345
+ object({ entries: array(discriminatedUnion("kind", [
6346
+ object({
6347
+ kind: literal("trigger-webhook"),
6348
+ endpoint: string(),
6349
+ attachmentIds: array(string()),
6350
+ moduleFile: string(),
6351
+ sourceHash: string().optional(),
6352
+ attachmentSchemas: attachmentSchemasSchema,
6353
+ attachmentMeta: attachmentMetaSchema.optional()
6354
+ }),
6355
+ object({
6356
+ kind: literal("trigger-poll"),
6357
+ attachmentId: string(),
6358
+ attachmentIds: array(string()),
6359
+ moduleFile: string(),
6360
+ sourceHash: string().optional(),
6361
+ schedule: string(),
6362
+ timezone: string().optional(),
6363
+ name: requiredDisplayTextSchema,
6364
+ description: requiredDisplayTextSchema
6365
+ }),
6366
+ object({
6367
+ kind: literal("trigger-poll-group"),
6368
+ pollId: string(),
6369
+ attachmentIds: array(string()),
6370
+ moduleFile: string(),
6371
+ schedule: string(),
6372
+ timezone: string().optional()
6373
+ }),
6374
+ object({
6375
+ kind: literal("cron-schedule"),
6376
+ attachmentId: string(),
6377
+ attachmentIds: array(string()),
6378
+ moduleFile: string(),
6379
+ sourceHash: string().optional(),
6380
+ schedule: string(),
6381
+ timezone: string().optional(),
6382
+ payload: unknown().optional(),
6383
+ name: requiredDisplayTextSchema,
6384
+ description: requiredDisplayTextSchema
6385
+ })
6386
+ ])).min(1) });
6387
+ object({ entries: array(object({
6388
+ kind: literal("action"),
6389
+ slug: string(),
6390
+ name: requiredDisplayTextSchema,
6391
+ description: requiredDisplayTextSchema,
6392
+ moduleFile: string(),
6393
+ appSlug: string().optional(),
6394
+ inputSchema: record(string(), unknown()),
6395
+ outputSchema: record(string(), unknown()),
6396
+ requirements: array(CredentialRequirementSummarySchema).optional()
6397
+ })) });
6300
6398
  /** Messaging platforms that support agent gateway bindings. */
6301
6399
  const ChannelPlatformKeySchema = _enum(["slack"]);
6302
6400
  const ChannelReactionSupportSchema = _enum([
@@ -6387,6 +6485,8 @@ const ChannelPlatformSchema = object({
6387
6485
  connectAppId: string().min(1).optional(),
6388
6486
  docsUrl: string().url().optional()
6389
6487
  });
6488
+ /** Whether a binding targets a single Slack channel or an entire custom Slack app. */
6489
+ const ChannelBindingTargetKindSchema = _enum(["channel", "app"]);
6390
6490
  const ChannelBindingSchema = object({
6391
6491
  id: string().min(1),
6392
6492
  channelId: string().min(1),
@@ -6394,6 +6494,10 @@ const ChannelBindingSchema = object({
6394
6494
  channelKind: ChannelBindingKindSchema,
6395
6495
  mode: ChannelListenModeSchema,
6396
6496
  subscribeOnMention: boolean(),
6497
+ /** Defaults to `"channel"` for existing per-channel bindings. */
6498
+ bindingKind: ChannelBindingTargetKindSchema.optional(),
6499
+ /** Present for app-level bindings — Slack bot handle without `@`. */
6500
+ slackAppHandle: string().min(1).optional(),
6397
6501
  createdAt: string(),
6398
6502
  updatedAt: string()
6399
6503
  });
@@ -6411,7 +6515,26 @@ const ChannelDirectoryEntrySchema = object({
6411
6515
  name: string().min(1),
6412
6516
  kind: ChannelBindingKindSchema,
6413
6517
  memberCount: number$1().int().nonnegative().optional(),
6414
- isArchived: boolean().optional()
6518
+ isArchived: boolean().optional(),
6519
+ /** Whether the workspace bot is a member (when the directory source provides it). */
6520
+ isMember: boolean().optional()
6521
+ });
6522
+ /** Custom Slack app membership listing for an agent. */
6523
+ const SlackAgentMembershipsResponseSchema = object({
6524
+ handle: string().min(1),
6525
+ slackAppSlug: string().min(1),
6526
+ accountId: string().min(1),
6527
+ /** False when join/leave isn't available (missing scopes, Composio proxy, etc.). */
6528
+ canManage: boolean(),
6529
+ channels: array(ChannelDirectoryEntrySchema.extend({ isMember: boolean() }))
6530
+ });
6531
+ const SlackMembershipChannelBodySchema = object({ channelId: string().min(1) });
6532
+ /** Create-channel response: directory entry plus optional Slack deep link. */
6533
+ const CreateSlackChannelResponseSchema = ChannelDirectoryEntrySchema.extend({
6534
+ /** `https://slack.com/app_redirect?channel=…&team=…` — open after create. */
6535
+ openUrl: string().url(),
6536
+ /** True when the acting user was invited into the new channel. */
6537
+ invitedUser: boolean().optional()
6415
6538
  });
6416
6539
  const ChannelConnectionListResponseSchema = array(ChannelConnectionSchema);
6417
6540
  const ChannelDirectoryListResponseSchema = array(ChannelDirectoryEntrySchema);
@@ -6435,6 +6558,14 @@ const BindChannelBodySchema = object({
6435
6558
  accountId: string().min(1),
6436
6559
  binding: NewChannelBindingInputSchema
6437
6560
  });
6561
+ /** Create a Slack channel via the workspace bot token, then optionally bind. */
6562
+ const CreateSlackChannelBodySchema = object({
6563
+ accountId: string().min(1),
6564
+ name: string().trim().min(1).max(80).regex(/^#?[a-z0-9][a-z0-9_-]*$/, "Channel name must be lowercase alphanumeric with _ or -"),
6565
+ isPrivate: boolean().optional().default(false)
6566
+ });
6567
+ /** Bind an agent to a custom Slack app (app-level — mentions/DMs anywhere the app is). */
6568
+ const BindAgentSlackAppBodySchema = object({ slackAppSlug: string().min(1) });
6438
6569
  const UpdateChannelBindingBodySchema = object({ patch: object({
6439
6570
  mode: ChannelListenModeSchema.optional(),
6440
6571
  subscribeOnMention: boolean().optional()
@@ -6682,6 +6813,17 @@ const StartMcpOAuthConnectionInputSchema = object({
6682
6813
  scopes: array(string()).optional()
6683
6814
  });
6684
6815
  const StartMcpOAuthConnectionResultSchema = object({ authorizeUrl: string().url() });
6816
+ /** One tool from a live MCP `tools/list` for a connected custom org app. */
6817
+ const McpAppToolSchema = object({
6818
+ name: string().min(1),
6819
+ description: string().optional(),
6820
+ inputSchema: record(string(), unknown()).optional()
6821
+ });
6822
+ const ListMcpAppToolsResponseSchema = object({
6823
+ slug: string().min(1),
6824
+ url: string().url(),
6825
+ tools: array(McpAppToolSchema)
6826
+ });
6685
6827
  function displayNameFromUrl$1(url) {
6686
6828
  let hostname;
6687
6829
  try {
@@ -6791,14 +6933,28 @@ function parseAppSlug(slug) {
6791
6933
  function buildConnectDeeplink(options) {
6792
6934
  const base = options.webUrl.replace(/\/+$/, "");
6793
6935
  const params = new URLSearchParams({ connect: options.appSlug });
6936
+ if (options.flow) params.set("flow", options.flow);
6794
6937
  return `${base}/${options.orgSlug}/apps?${params.toString()}`;
6795
6938
  }
6796
6939
  /**
6940
+ * Web URL that opens an agent's External Channels Slack dialog.
6941
+ * `rail=configure` shows the channels panel; `slack=` selects Keystroke vs custom wizard.
6942
+ */
6943
+ function buildAgentSlackDeeplink(options) {
6944
+ const base = options.webUrl.replace(/\/+$/, "");
6945
+ const params = new URLSearchParams({
6946
+ rail: "configure",
6947
+ slack: options.kind
6948
+ });
6949
+ return `${base}/${options.orgSlug}/agents/${encodeURIComponent(options.agentId)}?${params.toString()}`;
6950
+ }
6951
+ /**
6797
6952
  * Resolve a connect-catalog slug.
6798
6953
  *
6799
- * `slack` is the action/credential toolkit; External Channels bind through the
6800
- * `slackbot` gateway connect app. When both are in the catalog, `connect slack`
6801
- * remaps to `slackbot` so users get a bindable workspace.
6954
+ * Slack slugs resolve as-is: `slack` (Personal Slack Account) opens the web
6955
+ * chooser, and `slackbot` is the catalog slug for the Keystroke Slack App.
6956
+ * Callers pick a specific Slack dialog with a connect-deeplink `flow` instead
6957
+ * of slug rewriting.
6802
6958
  */
6803
6959
  function resolveConnectAppSlug(slug, apps) {
6804
6960
  const trimmed = slug.trim();
@@ -6808,10 +6964,6 @@ function resolveConnectAppSlug(slug, apps) {
6808
6964
  } catch {
6809
6965
  throw new Error(`Invalid app slug: ${slug}`);
6810
6966
  }
6811
- if (trimmed === "slack") {
6812
- const slackbot = apps.find((app) => app.id === "slackbot");
6813
- if (slackbot) return slackbot;
6814
- }
6815
6967
  const match = apps.find((app) => app.id === trimmed);
6816
6968
  if (!match) {
6817
6969
  const available = apps.map((app) => app.id).join(", ") || "(none)";
@@ -6819,6 +6971,49 @@ function resolveConnectAppSlug(slug, apps) {
6819
6971
  }
6820
6972
  return match;
6821
6973
  }
6974
+ /** Catalog / connect slug for the Keystroke Slack App (bot). */
6975
+ const SLACK_KEYSTROKE_APP_SLUG = "slackbot";
6976
+ /** Catalog / connect slug for a personal Slack user-token connection. */
6977
+ const SLACK_PERSONAL_APP_SLUG = "slack";
6978
+ /**
6979
+ * `?flow=` values for the Apps-page Slack connect deeplink
6980
+ * (`?connect=slack&flow=…`). Omitted flow opens the three-way chooser.
6981
+ * `keystroke` opens the Keystroke Slack App dialog (catalog slug `slackbot`),
6982
+ * `personal` the Personal Slack Account dialog (catalog slug `slack`),
6983
+ * `custom` the custom Slack app wizard.
6984
+ */
6985
+ const SLACK_CONNECT_FLOWS = [
6986
+ "keystroke",
6987
+ "personal",
6988
+ "custom"
6989
+ ];
6990
+ /** Parse a `?flow=` search value; null when missing or not a Slack connect flow. */
6991
+ function parseSlackConnectFlow(value) {
6992
+ return typeof value === "string" && SLACK_CONNECT_FLOWS.includes(value) ? value : null;
6993
+ }
6994
+ /**
6995
+ * Normalize a Slack bot handle to Slack's username charset/length.
6996
+ * Strips leading `@`, lowercases, turns whitespace into hyphens, drops other
6997
+ * disallowed characters, collapses repeated separators, truncates to 21.
6998
+ *
6999
+ * Handles remain lowercase (Slack username rules). App / bot *display* names
7000
+ * may use mixed case and spaces — see {@link slackAppNameFromHandle}.
7001
+ */
7002
+ function normalizeSlackAppHandle(handle) {
7003
+ return handle.trim().replace(/^@+/, "").toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9._-]/g, "").replace(/-+/g, "-").replace(/^[-._]+|[-._]+$/g, "").slice(0, 21);
7004
+ }
7005
+ /** True when a normalized handle is usable as a Slack bot username. */
7006
+ function isValidSlackAppHandle(handle) {
7007
+ const normalized = normalizeSlackAppHandle(handle);
7008
+ return normalized.length > 0 && normalized.length <= 21 && normalized !== "slackbot" && /^[a-z0-9._-]+$/.test(normalized);
7009
+ }
7010
+ /** Human-readable reason a handle is invalid, or null when valid. */
7011
+ function slackAppHandleError(handle) {
7012
+ const normalized = normalizeSlackAppHandle(handle);
7013
+ if (!normalized) return "Handle is required";
7014
+ if (normalized === "slackbot") return "Handle cannot be slackbot";
7015
+ return null;
7016
+ }
6822
7017
  const LOCKFILE_MANAGERS = [
6823
7018
  ["pnpm-lock.yaml", "pnpm"],
6824
7019
  ["yarn.lock", "yarn"],
@@ -6855,6 +7050,20 @@ function detectProjectPackageManagerFromSnapshot(files) {
6855
7050
  return detectFromLockfileNames(paths) ?? "npm";
6856
7051
  }
6857
7052
  /**
7053
+ * Frozen pnpm install for trusted lockfiles (managed draft / deploy worktrees).
7054
+ *
7055
+ * pnpm 11 defaults `minimumReleaseAge` to 1440 minutes and re-verifies every
7056
+ * lockfile entry. Fresh `@keystrokehq/*` publishes are expected in Keystroke
7057
+ * projects, so exclude that scope. `trustLockfile` skips re-applying the age
7058
+ * gate to the committed lockfile (authored under the user's local pnpm).
7059
+ */
7060
+ const PNPM_FROZEN_INSTALL_ARGS = [
7061
+ "install",
7062
+ "--frozen-lockfile",
7063
+ "--config.trustLockfile=true",
7064
+ "--config.minimum-release-age-exclude[]=@keystrokehq/*"
7065
+ ];
7066
+ /**
6858
7067
  * Whether a package-manager install exit should be treated as success.
6859
7068
  *
6860
7069
  * pnpm 10+ exits non-zero with `ERR_PNPM_IGNORED_BUILDS` when a dependency's
@@ -6867,6 +7076,53 @@ function isAcceptableInstallExit(manager, exitCode, output) {
6867
7076
  if (manager === "pnpm" && output.includes("ERR_PNPM_IGNORED_BUILDS")) return true;
6868
7077
  return false;
6869
7078
  }
7079
+ /** Request body for generating a Slack app manifest (stateless). */
7080
+ const SlackAppManifestRequestSchema = object({
7081
+ name: string().trim().min(1).max(80),
7082
+ handle: string().trim().min(1).max(80).transform(normalizeSlackAppHandle).superRefine((handle, ctx) => {
7083
+ if (isValidSlackAppHandle(handle)) return;
7084
+ ctx.addIssue({
7085
+ code: "custom",
7086
+ message: slackAppHandleError(handle) ?? "Handle must be a valid Slack bot username"
7087
+ });
7088
+ })
7089
+ });
7090
+ /** Request body for creating a custom Slack app (credentials + identity). */
7091
+ const CreateSlackAppRequestSchema = SlackAppManifestRequestSchema.extend({
7092
+ clientId: string().trim().min(1),
7093
+ clientSecret: string().trim().min(1),
7094
+ signingSecret: string().trim().min(1),
7095
+ /** Scope the resulting credential to this project (agent flow); org-scoped when omitted. */
7096
+ projectId: string().trim().min(1).optional()
7097
+ });
7098
+ const SlackAppInstalledTeamSchema = object({
7099
+ teamId: string().min(1),
7100
+ teamName: string().min(1).optional(),
7101
+ connectionId: string().min(1)
7102
+ });
7103
+ const SlackAppBoundAgentSchema = object({
7104
+ agentId: string().min(1),
7105
+ agentSlug: string().min(1).optional(),
7106
+ agentName: string().min(1).optional(),
7107
+ projectId: string().min(1).optional()
7108
+ });
7109
+ /** Summary of a custom Slack app for list/detail responses. */
7110
+ const SlackAppSummarySchema = object({
7111
+ id: string().min(1),
7112
+ slug: string().min(1),
7113
+ name: string().min(1),
7114
+ handle: string().min(1),
7115
+ slackAppId: string().min(1).optional(),
7116
+ installedTeams: array(SlackAppInstalledTeamSchema),
7117
+ boundAgent: SlackAppBoundAgentSchema.optional()
7118
+ });
7119
+ const SlackAppListResponseSchema = array(SlackAppSummarySchema);
7120
+ const SlackAppManifestResponseSchema = object({ manifest: record(string(), unknown()) });
7121
+ const CreateSlackAppResponseSchema = object({
7122
+ app: SlackAppSummarySchema,
7123
+ authorizeUrl: string().url()
7124
+ });
7125
+ const SlackAppInstallStartResponseSchema = object({ authorizeUrl: string().url() });
6870
7126
  /** Scope of a platform app credential (maps to `credential_instances.scope_type`). */
6871
7127
  const AppCredentialScopeSchema = _enum([
6872
7128
  "user",
@@ -6964,7 +7220,9 @@ const CreateCredentialsRequestSchema = CredentialTargetsFieldsSchema.extend({
6964
7220
  appId: string().min(1),
6965
7221
  connectionKind: AppCredentialConnectionKindSchema,
6966
7222
  value: credentialSecretValueSchema.optional(),
6967
- scopes: array(string().min(1)).optional()
7223
+ scopes: array(string().min(1)).optional(),
7224
+ /** Friendly per-scope slug; when omitted, derived from label/name. */
7225
+ slug: string().trim().min(1).optional()
6968
7226
  }).superRefine((input, ctx) => {
6969
7227
  if (!hasCredentialTarget(input)) addMissingCredentialTargetIssue(ctx);
6970
7228
  if (input.connectionKind === "manual" && !input.value) ctx.addIssue({
@@ -7030,11 +7288,14 @@ const SubmitTeamRequestRequestSchema = object({
7030
7288
  "enterprise-upgrade",
7031
7289
  "verification",
7032
7290
  "slack-connect",
7033
- "connector-access"
7291
+ "connector-access",
7292
+ "platform-agent-feedback"
7034
7293
  ]),
7035
7294
  message: string().trim().max(5e3).optional(),
7036
7295
  /** Required for connector-access requests (sandbox VM secret exposure). */
7037
- appSlug: string().trim().min(1).optional()
7296
+ appSlug: string().trim().min(1).optional(),
7297
+ /** Optional platform-agent chat/session id for feedback requests. */
7298
+ sessionId: string().trim().min(1).optional()
7038
7299
  }).superRefine((value, ctx) => {
7039
7300
  if (value.type === "connector-access" && !value.appSlug) ctx.addIssue({
7040
7301
  code: ZodIssueCode.custom,
@@ -7346,7 +7607,9 @@ const HistoryRunSchema = object({
7346
7607
  otherServicesUsed: array(string()),
7347
7608
  totalCostUsd: number$1().nullable(),
7348
7609
  messageCount: number$1().optional(),
7349
- stepCount: number$1().optional()
7610
+ stepCount: number$1().optional(),
7611
+ /** Present for workflow child runs when known. */
7612
+ parentWorkflowRunId: string().nullable().optional()
7350
7613
  });
7351
7614
  const HistoryTraceSpanSchema = object({
7352
7615
  id: string(),
@@ -7399,6 +7662,7 @@ const HistoryTraceSchema = object({
7399
7662
  const HistoryWorkflowStepSchema = object({
7400
7663
  id: string(),
7401
7664
  actionKey: string(),
7665
+ input: unknown().nullable(),
7402
7666
  output: unknown(),
7403
7667
  completedAt: string()
7404
7668
  });
@@ -7412,6 +7676,7 @@ const HistoryWorkflowRunDetailSchema = object({
7412
7676
  triggeredAt: string(),
7413
7677
  startedAt: string().nullable(),
7414
7678
  finishedAt: string().nullable(),
7679
+ parentWorkflowRunId: string().nullable(),
7415
7680
  input: unknown().nullable(),
7416
7681
  output: unknown().nullable(),
7417
7682
  error: unknown().nullable()
@@ -7541,7 +7806,8 @@ const WorkflowRunSummarySchema = object({
7541
7806
  sourceKind: RunSourceKindSchema,
7542
7807
  sourceId: string().nullable(),
7543
7808
  triggerRunId: string().nullable(),
7544
- attachmentId: string().nullable()
7809
+ attachmentId: string().nullable(),
7810
+ parentWorkflowRunId: string().nullable()
7545
7811
  });
7546
7812
  const WorkflowRunRecordSchema = object({
7547
7813
  id: string(),
@@ -7574,7 +7840,8 @@ const WorkflowRunListResponseSchema = object({
7574
7840
  _enum([
7575
7841
  "trigger",
7576
7842
  "steps",
7577
- "trace"
7843
+ "trace",
7844
+ "children"
7578
7845
  ]);
7579
7846
  object({ include: string().optional() });
7580
7847
  const TriggerRunDetailSchema = object({
@@ -7593,9 +7860,16 @@ const TriggerRunDetailSchema = object({
7593
7860
  const WorkflowStepRunSchema = object({
7594
7861
  id: string(),
7595
7862
  actionKey: string(),
7863
+ /** Step input when recorded; `null` for legacy events that only stored output. */
7864
+ input: unknown().nullable(),
7596
7865
  output: unknown(),
7597
7866
  completedAt: string()
7598
7867
  });
7868
+ object({
7869
+ type: literal("keystroke.step-completed.v1"),
7870
+ input: unknown(),
7871
+ output: unknown()
7872
+ });
7599
7873
  const TraceTriggerSummarySchema = object({
7600
7874
  triggerType: string(),
7601
7875
  triggerRunId: string(),
@@ -7644,20 +7918,43 @@ const TraceResponseSchema = object({
7644
7918
  spans: array(TraceSpanSchema),
7645
7919
  logs: array(TraceLogSchema)
7646
7920
  });
7647
- const WorkflowRunDetailResponseSchema = object({
7648
- run: WorkflowRunRecordSchema,
7649
- trigger: TriggerRunDetailSchema.nullable(),
7650
- steps: array(WorkflowStepRunSchema),
7651
- trace: TraceResponseSchema.nullable()
7652
- });
7653
7921
  const WorkflowHookStatusSchema = _enum(["waiting", "resumed"]);
7654
- const WorkflowRunHooksResponseSchema = object({ items: array(object({
7922
+ const WorkflowHookSummarySchema = object({
7655
7923
  token: string(),
7656
7924
  correlationId: string(),
7657
7925
  status: WorkflowHookStatusSchema,
7658
7926
  createdAt: string(),
7659
7927
  resumeUrl: string().nullable()
7660
- })) });
7928
+ });
7929
+ const WorkflowRunHooksResponseSchema = object({ items: array(WorkflowHookSummarySchema) });
7930
+ /** Light parent→child link (always present; used when `children` is not in include). */
7931
+ const WorkflowChildRunLinkSchema = object({
7932
+ kind: _enum(["workflow", "agent"]),
7933
+ runId: string(),
7934
+ workflowSlug: string().optional(),
7935
+ agentSlug: string().optional(),
7936
+ correlationId: string(),
7937
+ status: string()
7938
+ });
7939
+ const WorkflowRunChildDetailSchema = lazy(() => object({
7940
+ kind: literal("workflow"),
7941
+ correlationId: string(),
7942
+ run: WorkflowRunRecordSchema,
7943
+ trigger: TriggerRunDetailSchema.nullable(),
7944
+ steps: array(WorkflowStepRunSchema),
7945
+ trace: TraceResponseSchema.nullable(),
7946
+ children: array(WorkflowRunChildSchema),
7947
+ hooks: array(WorkflowHookSummarySchema)
7948
+ }));
7949
+ const WorkflowRunChildSchema = lazy(() => union([WorkflowChildRunLinkSchema, WorkflowRunChildDetailSchema]));
7950
+ const WorkflowRunDetailResponseSchema = object({
7951
+ run: WorkflowRunRecordSchema,
7952
+ trigger: TriggerRunDetailSchema.nullable(),
7953
+ steps: array(WorkflowStepRunSchema),
7954
+ trace: TraceResponseSchema.nullable(),
7955
+ children: array(WorkflowRunChildSchema),
7956
+ hooks: array(WorkflowHookSummarySchema)
7957
+ });
7661
7958
  const AgentSessionStatusSchema = _enum([
7662
7959
  "running",
7663
7960
  "completed",
@@ -7735,6 +8032,68 @@ const AgentSessionDetailResponseSchema = object({
7735
8032
  promptFinishEvents: array(HistoryAgentPromptFinishEventSchema).default([]),
7736
8033
  trace: TraceResponseSchema.nullable()
7737
8034
  });
8035
+ const PlatformAgentSessionStatusSchema = _enum([
8036
+ "running",
8037
+ "completed",
8038
+ "failed",
8039
+ "canceled"
8040
+ ]);
8041
+ /** Gateway model id (`vendor/model-id`). Catalog membership is checked at the route. */
8042
+ const PlatformAgentModelIdSchema = string().min(1).regex(/^[^/\s]+\/[^/\s].*$/, "model must be vendor/model-id");
8043
+ const PlatformAgentMessagePartSchema = union([object({
8044
+ type: literal("text"),
8045
+ text: string()
8046
+ }).passthrough(), object({ type: string().min(1) }).passthrough()]);
8047
+ const PlatformAgentTranscriptSchema = array(object({
8048
+ id: string().min(1),
8049
+ role: _enum([
8050
+ "system",
8051
+ "user",
8052
+ "assistant"
8053
+ ]),
8054
+ parts: array(PlatformAgentMessagePartSchema),
8055
+ /** Event-row timestamp when the message was appended (ISO). */
8056
+ createdAt: string().datetime().optional(),
8057
+ /**
8058
+ * Wall-clock work duration for an assistant turn, derived from matching
8059
+ * `agent_start` → `agent_end` events (milliseconds).
8060
+ */
8061
+ workedMs: number$1().int().nonnegative().optional()
8062
+ }).passthrough());
8063
+ const PlatformAgentPromptInputSchema = object({
8064
+ message: string().default(""),
8065
+ projectId: string().min(1),
8066
+ model: PlatformAgentModelIdSchema,
8067
+ sessionId: string().min(1).optional(),
8068
+ files: array(ChatAttachmentInputSchema).max(5).optional()
8069
+ }).strict().refine((data) => data.message.trim().length > 0 || (data.files?.length ?? 0) > 0, { message: "message or files is required" });
8070
+ /** Same enqueue response as project agents — keep one wire shape. */
8071
+ const PlatformAgentPromptResponseSchema = QueuedAgentPromptResponseSchema;
8072
+ const PlatformAgentCancelResponseSchema = object({ ok: literal(true) });
8073
+ object({
8074
+ startIndex: number().int().min(0).optional().default(0),
8075
+ /** Required on run streams so the handler can resolve the owned session / project. */
8076
+ sessionId: string().min(1).optional()
8077
+ });
8078
+ const PlatformAgentSessionSummarySchema = object({
8079
+ id: string(),
8080
+ projectId: string(),
8081
+ status: PlatformAgentSessionStatusSchema,
8082
+ title: string().nullable(),
8083
+ model: string().nullable(),
8084
+ activeRunId: string().nullable(),
8085
+ lastDraftCommitSha: string().nullable(),
8086
+ messageCount: number$1().int().nonnegative(),
8087
+ createdAt: string().datetime(),
8088
+ updatedAt: string().datetime()
8089
+ });
8090
+ const PlatformAgentSessionListResponseSchema = object({ items: array(PlatformAgentSessionSummarySchema) });
8091
+ const PlatformAgentSessionDetailResponseSchema = object({
8092
+ session: PlatformAgentSessionSummarySchema.extend({ error: string().nullable() }),
8093
+ activeRunId: string().nullable().default(null),
8094
+ messages: PlatformAgentTranscriptSchema,
8095
+ compactionEvents: array(HistoryAgentCompactionEventSchema).default([])
8096
+ });
7738
8097
  const SlackGatewayModeSchema = _enum([
7739
8098
  "mention",
7740
8099
  "channel",
@@ -8057,7 +8416,22 @@ object({
8057
8416
  workflow: string().min(1).optional(),
8058
8417
  agent: string().min(1).optional()
8059
8418
  });
8060
- const TriggerInvokeResponseSchema = object({ runId: string().min(1) });
8419
+ /** One attachment that will fire from this invoke (workflow runs are created later). */
8420
+ const TriggerInvokeTargetSchema = object({
8421
+ kind: TriggerTargetKindSchema,
8422
+ slug: string().min(1),
8423
+ attachmentSlug: string().min(1)
8424
+ });
8425
+ /**
8426
+ * `POST /api/triggers/:triggerId/invoke` — 202 Accepted.
8427
+ * `runId` is the trigger-run / trigger-job id (not a workflow run id). Use
8428
+ * `triggers runs get` after dispatch to resolve `workflowRuns` / `agentSessions`.
8429
+ */
8430
+ const TriggerInvokeResponseSchema = object({
8431
+ runId: string().min(1),
8432
+ triggerSlug: string().min(1),
8433
+ targets: array(TriggerInvokeTargetSchema)
8434
+ });
8061
8435
  /**
8062
8436
  * `GET /api/triggers/:triggerId/invoke-inputs` — form metadata for the dashboard.
8063
8437
  * Webhook attachments carry `requestSchema`; cron carries read-only `staticPayload`.
@@ -8328,20 +8702,69 @@ const PresignOrgLogoResponseSchema = object({
8328
8702
  storageKey: string().min(1)
8329
8703
  });
8330
8704
  const ProjectArtifactStatusSchema = _enum(["pending", "ready"]);
8705
+ const commitSha$3 = string().regex(/^[0-9a-f]{40}$/i);
8331
8706
  const isoDateTime$1 = string().datetime();
8707
+ /**
8708
+ * Client-supplied provenance. `sourceRepositoryId` is optional on the wire —
8709
+ * the platform binds it from the ready project repository when omitted.
8710
+ *
8711
+ * Healthy filtered deploy (Slice 3) owns when these fields are required; Slice 1
8712
+ * keeps them optional so snapshot deploys continue to work.
8713
+ */
8714
+ const clientGitProvenanceFields = {
8715
+ sourceCommitSha: commitSha$3,
8716
+ baseMainSha: commitSha$3,
8717
+ baseDraftSha: commitSha$3
8718
+ };
8719
+ function requireClientGitProvenanceFields(data, ctx) {
8720
+ const requiredKeys = [
8721
+ "sourceCommitSha",
8722
+ "baseMainSha",
8723
+ "baseDraftSha"
8724
+ ];
8725
+ const present = requiredKeys.filter((key) => data[key] !== void 0);
8726
+ if (present.length === 0 || present.length === requiredKeys.length) return;
8727
+ for (const key of requiredKeys) if (data[key] === void 0) ctx.addIssue({
8728
+ code: ZodIssueCode.custom,
8729
+ message: `${key} is required when git provenance is provided`,
8730
+ path: [key]
8731
+ });
8732
+ }
8733
+ const CreateProjectArtifactRequestSchema = object({
8734
+ sourceRepositoryId: string().min(1).optional(),
8735
+ sourceCommitSha: clientGitProvenanceFields.sourceCommitSha.optional(),
8736
+ baseMainSha: clientGitProvenanceFields.baseMainSha.optional(),
8737
+ baseDraftSha: clientGitProvenanceFields.baseDraftSha.optional(),
8738
+ /** Lowercase hex sha256 of the gzip tarball — enables content-addressed upload skip. */
8739
+ checksumSha256: string().regex(/^[0-9a-f]{64}$/).optional(),
8740
+ sizeBytes: number$1().int().nonnegative().optional()
8741
+ }).superRefine(requireClientGitProvenanceFields).superRefine((data, ctx) => {
8742
+ if (data.checksumSha256 !== void 0 && data.sizeBytes === void 0) ctx.addIssue({
8743
+ code: ZodIssueCode.custom,
8744
+ message: "sizeBytes is required when checksumSha256 is provided",
8745
+ path: ["sizeBytes"]
8746
+ });
8747
+ });
8332
8748
  const ProjectArtifactSchema = object({
8333
8749
  id: string(),
8334
8750
  projectId: string(),
8335
8751
  storageKey: string(),
8336
8752
  status: ProjectArtifactStatusSchema,
8753
+ sourceCommitSha: string().nullable().optional(),
8337
8754
  createdAt: isoDateTime$1,
8338
8755
  updatedAt: isoDateTime$1
8339
8756
  });
8340
8757
  const CreateProjectArtifactResponseSchema = object({
8341
8758
  artifact: ProjectArtifactSchema,
8342
- uploadUrl: string().url(),
8759
+ /** Null when the tarball bytes already exist at the content-addressed key (skip PUT). */
8760
+ uploadUrl: string().url().nullable(),
8343
8761
  expiresInSeconds: number$1().int().positive()
8344
8762
  });
8763
+ /**
8764
+ * Optional body for artifact complete. When `manifest` is present the platform
8765
+ * skips re-downloading the tarball (CLI already has it in memory after pack).
8766
+ */
8767
+ const CompleteProjectArtifactRequestSchema = object({ manifest: StoredRouteManifestSchema.optional() });
8345
8768
  const CompleteProjectArtifactResponseSchema = object({
8346
8769
  artifact: ProjectArtifactSchema,
8347
8770
  project: ProjectSchema
@@ -8361,6 +8784,527 @@ const ListProjectDeploymentsResponseSchema = array(object({
8361
8784
  createdAt: isoDateTime$1,
8362
8785
  active: boolean()
8363
8786
  }));
8787
+ const ConfiguredProjectGitStatusSchema = object({
8788
+ provider: _enum(["github", "code_storage"]),
8789
+ lifecycleStatus: _enum([
8790
+ "provisioning",
8791
+ "ready",
8792
+ "failed",
8793
+ "deleting",
8794
+ "deleted"
8795
+ ]),
8796
+ contentStatus: _enum([
8797
+ "empty",
8798
+ "awaiting_source",
8799
+ "synced",
8800
+ "failed"
8801
+ ]),
8802
+ defaultBranch: string().min(1),
8803
+ owner: string().nullable(),
8804
+ name: string().nullable(),
8805
+ lastErrorCode: string().nullable(),
8806
+ lastError: string().nullable()
8807
+ });
8808
+ const ProjectGitStatusResponseSchema = discriminatedUnion("configured", [object({ configured: literal(false) }), object({
8809
+ configured: literal(true),
8810
+ repository: ConfiguredProjectGitStatusSchema
8811
+ })]);
8812
+ /** Remotes default to read-only. `draft_write` is Code.Storage-only. */
8813
+ const ProjectGitRemoteRequestSchema = object({
8814
+ ephemeral: boolean().optional(),
8815
+ capability: _enum(["read", "draft_write"]).optional()
8816
+ });
8817
+ const ProjectGitRemoteResponseSchema = object({
8818
+ url: string().url(),
8819
+ username: string().min(1),
8820
+ password: string().min(1),
8821
+ expiresAt: string().datetime(),
8822
+ defaultBranch: literal("main"),
8823
+ draftBranch: literal("ks/draft")
8824
+ });
8825
+ /** Snapshot/content-addressed blob digests are always lowercase sha256. */
8826
+ const sha256Hex$1 = string().regex(/^[a-f0-9]{64}$/, "Expected a lowercase hex sha256 digest");
8827
+ /** One file in a modular deploy artifact (path relative to `dist/`). */
8828
+ const ProjectArtifactIndexFileSchema = object({
8829
+ path: string().min(1).refine((path) => !path.startsWith("/") && !path.includes("\\") && !path.includes("\0") && path.split("/").every((segment) => segment !== "" && segment !== "." && segment !== ".."), "Expected a normalized dist-relative path"),
8830
+ hash: sha256Hex$1,
8831
+ size: number$1().int().nonnegative()
8832
+ });
8833
+ /** Per-deploy index: logical dist paths → content-addressed module blobs. */
8834
+ const ProjectArtifactIndexSchema = object({
8835
+ version: literal(1),
8836
+ files: array(ProjectArtifactIndexFileSchema).min(1)
8837
+ });
8838
+ /** A blob the CLI may need to upload for a modular artifact. */
8839
+ const ModuleBlobRefSchema = object({
8840
+ hash: sha256Hex$1,
8841
+ size: number$1().int().nonnegative()
8842
+ });
8843
+ const isoDateTime = string().datetime();
8844
+ /** Snapshot/content-addressed blob digests are always lowercase sha256. */
8845
+ const sha256Hex = string().regex(/^[a-f0-9]{64}$/, "Expected a lowercase hex sha256 digest");
8846
+ /** Max bytes for a single source file collected or served from a deploy tree. */
8847
+ const PROJECT_SOURCE_MAX_FILE_BYTES = 256 * 1024;
8848
+ /** Max total bytes across all source files in a deploy tree listing. */
8849
+ const PROJECT_SOURCE_MAX_TOTAL_BYTES = 8 * 1024 * 1024;
8850
+ /** Max file count in a deploy tree listing. */
8851
+ const PROJECT_SOURCE_MAX_FILES = 2e3;
8852
+ /** Directory names excluded from project source trees (Git and snapshot). */
8853
+ const PROJECT_SOURCE_IGNORED_DIRS = Object.freeze(new Set([
8854
+ "node_modules",
8855
+ "dist",
8856
+ ".git",
8857
+ ".turbo",
8858
+ "build",
8859
+ "coverage",
8860
+ ".keystroke",
8861
+ ".cache",
8862
+ "tmp"
8863
+ ]));
8864
+ /** Basename regex: any name containing `.env` (e.g. `.env`, `.env.local`). */
8865
+ const PROJECT_SOURCE_IGNORED_ENV_BASENAME = /\.env/;
8866
+ /** Basename regex: names ending in `.log`. */
8867
+ const PROJECT_SOURCE_IGNORED_LOG_BASENAME = /\.log$/;
8868
+ /** True when a basename should be excluded from project source trees. */
8869
+ function isIgnoredProjectSourceFileName(name) {
8870
+ return name === "pnpm-workspace.yaml" || PROJECT_SOURCE_IGNORED_ENV_BASENAME.test(name) || PROJECT_SOURCE_IGNORED_LOG_BASENAME.test(name);
8871
+ }
8872
+ /**
8873
+ * True when any path segment is an ignored directory (e.g. `src/node_modules/x`).
8874
+ * Does not treat the filename itself as a directory.
8875
+ */
8876
+ function isIgnoredProjectSourcePath(path) {
8877
+ const segments = path.split("/");
8878
+ for (let index = 0; index < segments.length - 1; index += 1) {
8879
+ const segment = segments[index];
8880
+ if (segment && PROJECT_SOURCE_IGNORED_DIRS.has(segment)) return true;
8881
+ }
8882
+ const base = segments.at(-1);
8883
+ return base !== void 0 && isIgnoredProjectSourceFileName(base);
8884
+ }
8885
+ /** True when the leading sample of a buffer looks binary (NUL byte). */
8886
+ function isProbablyBinaryProjectSource(bytes) {
8887
+ const sampleLength = Math.min(bytes.length, 8e3);
8888
+ for (let index = 0; index < sampleLength; index += 1) if (bytes[index] === 0) return true;
8889
+ return false;
8890
+ }
8891
+ /**
8892
+ * A single entry in a deploy's file tree, as served to the dashboard. Carries
8893
+ * no contents: `id` is a stable, path-derived handle used for selection and
8894
+ * `?file=` deep links. Contents are fetched lazily by immutable revision + path.
8895
+ */
8896
+ const ProjectFileSummarySchema = object({
8897
+ id: string(),
8898
+ path: string().min(1)
8899
+ });
8900
+ /** Maps a runtime resource slug (agent/workflow/skill) to its source file path. */
8901
+ const ProjectSourceResourceRefSchema = object({
8902
+ slug: string().min(1),
8903
+ path: string().min(1)
8904
+ });
8905
+ const ProjectSourceResourcesSchema = object({
8906
+ agents: array(ProjectSourceResourceRefSchema).default([]),
8907
+ workflows: array(ProjectSourceResourceRefSchema).default([]),
8908
+ skills: array(ProjectSourceResourceRefSchema).default([])
8909
+ });
8910
+ const emptyResources = () => ({
8911
+ agents: [],
8912
+ workflows: [],
8913
+ skills: []
8914
+ });
8915
+ /** Response for the file-tree listing of a project's active deploy. */
8916
+ const ListProjectFilesResponseSchema = object({
8917
+ artifactId: string().nullable(),
8918
+ files: array(ProjectFileSummarySchema),
8919
+ resources: ProjectSourceResourcesSchema.default(emptyResources())
8920
+ });
8921
+ object({
8922
+ path: string().min(1),
8923
+ contents: string(),
8924
+ hash: sha256Hex
8925
+ });
8926
+ /** Request: ask the platform which blobs are missing and get presigned PUTs. */
8927
+ const PresignProjectSourceRequestSchema = object({ blobs: array(object({
8928
+ hash: sha256Hex,
8929
+ size: number$1().int().nonnegative()
8930
+ })) });
8931
+ const PresignedBlobUploadSchema = object({
8932
+ hash: sha256Hex,
8933
+ url: string().url()
8934
+ });
8935
+ /** Response: presigned PUTs for the subset of blobs not already stored. */
8936
+ const PresignProjectSourceResponseSchema = object({ uploads: array(PresignedBlobUploadSchema) });
8937
+ /** Request body the CLI sends to finalize a deploy's source manifest. */
8938
+ const UploadProjectSourceManifestRequestSchema = object({ files: array(object({
8939
+ path: string().min(1),
8940
+ hash: sha256Hex
8941
+ })) });
8942
+ const UploadProjectSourceResponseSchema = object({
8943
+ ok: literal(true),
8944
+ fileCount: number$1().int().nonnegative()
8945
+ });
8946
+ object({
8947
+ files: array(object({
8948
+ id: string(),
8949
+ path: string().min(1),
8950
+ hash: sha256Hex
8951
+ })),
8952
+ generatedAt: isoDateTime
8953
+ });
8954
+ /** A single source file returned by the bulk active-source download endpoint. */
8955
+ const DownloadActiveProjectSourceFileSchema = object({
8956
+ path: string().min(1),
8957
+ contents: string()
8958
+ });
8959
+ /** Response for downloading all source files from a project's active deploy. */
8960
+ const DownloadActiveProjectSourceResponseSchema = object({
8961
+ artifactId: string(),
8962
+ files: array(DownloadActiveProjectSourceFileSchema)
8963
+ });
8964
+ const commitSha$2 = string().regex(/^[0-9a-f]{40}$/i);
8965
+ /**
8966
+ * Metadata for the active project's published source revision.
8967
+ * Contains no credentials — clients mint remotes separately when needed.
8968
+ */
8969
+ const ActiveProjectSourceRevisionSchema = discriminatedUnion("kind", [object({
8970
+ artifactId: string().min(1),
8971
+ kind: literal("git"),
8972
+ commitSha: commitSha$2,
8973
+ branch: string().min(1)
8974
+ }), object({
8975
+ artifactId: string().min(1),
8976
+ kind: literal("snapshot")
8977
+ })]);
8978
+ const commitSha$1 = string().regex(/^[0-9a-f]{40}$/i);
8979
+ const repositoryPath = string().min(1).refine((path) => !path.startsWith("/") && !path.includes("\\") && !path.includes("\0") && path.split("/").every((segment) => segment !== "" && segment !== "." && segment !== ".."), "Expected a normalized repository-relative path");
8980
+ /** Stable filtered-deploy resource key (`agents/foo`, `workflows/bar`). */
8981
+ const ManagedDeployResourceKeySchema = string().regex(/^(agents|workflows)\/[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/);
8982
+ const ManagedDeployModeSchema = _enum(["full", "filtered"]);
8983
+ const ManagedDeployImpactCompletenessSchema = _enum(["complete", "unknown"]);
8984
+ const ManagedDeployCandidateOpSchema = object({
8985
+ path: repositoryPath,
8986
+ op: _enum(["upsert", "delete"])
8987
+ });
8988
+ const ManagedDeployRequireFullCodeSchema = _enum([
8989
+ "package_manifest",
8990
+ "lockfile",
8991
+ "config",
8992
+ "skills_or_assets",
8993
+ "unsafe_delete_or_rename",
8994
+ "dynamic_or_unresolved_import",
8995
+ "missing_ownership",
8996
+ "ambiguous_ownership",
8997
+ "non_filterable_deployable",
8998
+ "unknown_selected_key",
8999
+ "unproven_safe"
9000
+ ]);
9001
+ const ManagedDeployExpansionSchema = object({
9002
+ resourceKey: ManagedDeployResourceKeySchema,
9003
+ reason: string().min(1),
9004
+ sharedInputs: array(string().min(1))
9005
+ });
9006
+ const ManagedDeploySourcePathChangeSchema = object({
9007
+ path: repositoryPath,
9008
+ kind: _enum([
9009
+ "added",
9010
+ "modified",
9011
+ "deleted",
9012
+ "renamed"
9013
+ ]),
9014
+ previousPath: repositoryPath.optional()
9015
+ });
9016
+ object({
9017
+ selectedResourceKeys: array(ManagedDeployResourceKeySchema).min(1),
9018
+ changedPaths: array(union([repositoryPath, ManagedDeploySourcePathChangeSchema])).min(1),
9019
+ /** D0 (draft) checkout root. Defaults to process cwd when omitted. */
9020
+ root: string().min(1).optional(),
9021
+ /** Optional M0 (main) checkout root for dual-tree CLI analyze. */
9022
+ mainRoot: string().min(1).optional(),
9023
+ /** Analyzer contract version the caller expects (forward-compatible). */
9024
+ analyzerContractVersion: string().min(1).optional(),
9025
+ /**
9026
+ * Optional M0 package.json / lockfile contents for package-impact attribution.
9027
+ * When omitted, package/lockfile changes remain full-deploy.
9028
+ */
9029
+ baseManifestFiles: array(object({
9030
+ path: repositoryPath,
9031
+ contents: string()
9032
+ })).optional()
9033
+ });
9034
+ discriminatedUnion("requireFull", [object({
9035
+ requireFull: literal(true),
9036
+ code: ManagedDeployRequireFullCodeSchema,
9037
+ reason: string().min(1)
9038
+ }), object({
9039
+ requireFull: literal(false),
9040
+ resourceKeys: array(ManagedDeployResourceKeySchema).min(1),
9041
+ impactedResourceKeys: array(ManagedDeployResourceKeySchema).default([]),
9042
+ expansions: array(ManagedDeployExpansionSchema),
9043
+ sourceDelta: array(repositoryPath),
9044
+ impactCompleteness: ManagedDeployImpactCompletenessSchema.default("complete"),
9045
+ warnings: array(string()).default([]),
9046
+ candidateOps: array(ManagedDeployCandidateOpSchema).default([]),
9047
+ analyzerContractVersion: string().min(1).optional()
9048
+ })]);
9049
+ object({
9050
+ path: repositoryPath,
9051
+ contents: string()
9052
+ });
9053
+ const ManagedDeployCandidateRecipeEntrySchema = object({
9054
+ path: repositoryPath,
9055
+ op: _enum(["upsert", "delete"]),
9056
+ mode: _enum([
9057
+ "100644",
9058
+ "100755",
9059
+ "120000",
9060
+ "160000"
9061
+ ]).optional(),
9062
+ blobSha: commitSha$1.optional()
9063
+ }).superRefine((data, ctx) => {
9064
+ if (data.op === "upsert") {
9065
+ if (data.mode == null) ctx.addIssue({
9066
+ code: ZodIssueCode.custom,
9067
+ message: "mode is required for upsert entries",
9068
+ path: ["mode"]
9069
+ });
9070
+ if (data.blobSha == null) ctx.addIssue({
9071
+ code: ZodIssueCode.custom,
9072
+ message: "blobSha is required for upsert entries",
9073
+ path: ["blobSha"]
9074
+ });
9075
+ }
9076
+ });
9077
+ const ManagedDeployCandidateRecipeSchema = object({
9078
+ parentSha: commitSha$1,
9079
+ treeSha: commitSha$1,
9080
+ draftSha: commitSha$1,
9081
+ mode: _enum(["full", "filtered"]),
9082
+ entries: array(ManagedDeployCandidateRecipeEntrySchema)
9083
+ }).superRefine((data, ctx) => {
9084
+ const seen = /* @__PURE__ */ new Set();
9085
+ for (const [index, entry] of data.entries.entries()) {
9086
+ if (seen.has(entry.path)) ctx.addIssue({
9087
+ code: ZodIssueCode.custom,
9088
+ message: `Duplicate candidate recipe path: ${entry.path}`,
9089
+ path: [
9090
+ "entries",
9091
+ index,
9092
+ "path"
9093
+ ]
9094
+ });
9095
+ seen.add(entry.path);
9096
+ }
9097
+ });
9098
+ const PrepareManagedDeployRequestSchema = object({
9099
+ mainSha: commitSha$1,
9100
+ draftSha: commitSha$1,
9101
+ mode: ManagedDeployModeSchema,
9102
+ candidateOps: array(ManagedDeployCandidateOpSchema).min(1).optional(),
9103
+ requestedResourceKeys: array(ManagedDeployResourceKeySchema).min(1).optional(),
9104
+ resourceKeys: array(ManagedDeployResourceKeySchema).min(1).optional(),
9105
+ impactCompleteness: ManagedDeployImpactCompletenessSchema.optional(),
9106
+ acceptImpact: boolean().optional()
9107
+ }).superRefine((data, ctx) => {
9108
+ const seenCandidatePaths = /* @__PURE__ */ new Set();
9109
+ for (const [index, operation] of (data.candidateOps ?? []).entries()) {
9110
+ if (seenCandidatePaths.has(operation.path)) ctx.addIssue({
9111
+ code: ZodIssueCode.custom,
9112
+ message: `Duplicate candidate operation path: ${operation.path}`,
9113
+ path: [
9114
+ "candidateOps",
9115
+ index,
9116
+ "path"
9117
+ ]
9118
+ });
9119
+ seenCandidatePaths.add(operation.path);
9120
+ }
9121
+ if (data.mode === "filtered") {
9122
+ if (!data.candidateOps?.length) ctx.addIssue({
9123
+ code: ZodIssueCode.custom,
9124
+ message: "candidateOps is required for filtered deploys",
9125
+ path: ["candidateOps"]
9126
+ });
9127
+ if (!data.requestedResourceKeys?.length) ctx.addIssue({
9128
+ code: ZodIssueCode.custom,
9129
+ message: "requestedResourceKeys is required for filtered deploys",
9130
+ path: ["requestedResourceKeys"]
9131
+ });
9132
+ if (!data.resourceKeys?.length) ctx.addIssue({
9133
+ code: ZodIssueCode.custom,
9134
+ message: "resourceKeys is required for filtered deploys",
9135
+ path: ["resourceKeys"]
9136
+ });
9137
+ if (data.impactCompleteness == null) ctx.addIssue({
9138
+ code: ZodIssueCode.custom,
9139
+ message: "impactCompleteness is required for filtered deploys",
9140
+ path: ["impactCompleteness"]
9141
+ });
9142
+ if (data.requestedResourceKeys && data.resourceKeys && !data.requestedResourceKeys.every((key) => data.resourceKeys.includes(key))) ctx.addIssue({
9143
+ code: ZodIssueCode.custom,
9144
+ message: "requestedResourceKeys must be a subset of resourceKeys",
9145
+ path: ["requestedResourceKeys"]
9146
+ });
9147
+ if ((data.requestedResourceKeys != null && data.resourceKeys != null && (data.requestedResourceKeys.length !== data.resourceKeys.length || !data.requestedResourceKeys.every((key) => data.resourceKeys.includes(key))) || data.impactCompleteness === "unknown") && data.acceptImpact !== true) ctx.addIssue({
9148
+ code: ZodIssueCode.custom,
9149
+ message: "acceptImpact is required for expanded or unknown filtered impact",
9150
+ path: ["acceptImpact"]
9151
+ });
9152
+ return;
9153
+ }
9154
+ for (const field of [
9155
+ "candidateOps",
9156
+ "requestedResourceKeys",
9157
+ "resourceKeys",
9158
+ "impactCompleteness",
9159
+ "acceptImpact"
9160
+ ]) if (data[field] != null) ctx.addIssue({
9161
+ code: ZodIssueCode.custom,
9162
+ message: `${field} is not valid for full deploys`,
9163
+ path: [field]
9164
+ });
9165
+ });
9166
+ const PrepareManagedDeployResponseSchema = object({
9167
+ artifact: ProjectArtifactSchema,
9168
+ project: ProjectSchema,
9169
+ mode: _enum(["full", "filtered"]),
9170
+ mainSha: commitSha$1,
9171
+ draftSha: commitSha$1,
9172
+ candidateRef: string().min(1),
9173
+ candidateEphemeral: boolean(),
9174
+ publishMode: _enum(["git_push", "recipe"]),
9175
+ candidateWriteRemote: object({
9176
+ url: string().min(1),
9177
+ username: string().min(1),
9178
+ password: string().min(1),
9179
+ expiresAt: string().datetime()
9180
+ }).optional(),
9181
+ candidateOps: array(ManagedDeployCandidateOpSchema).nullable().default(null)
9182
+ });
9183
+ const PublishManagedDeployCandidateRequestSchema = object({
9184
+ artifactId: string().uuid(),
9185
+ candidateSha: commitSha$1.optional(),
9186
+ recipe: ManagedDeployCandidateRecipeSchema.optional(),
9187
+ /**
9188
+ * Client-attested tip trees for full-mode equality checks. When both are
9189
+ * present, platform compares the strings and skips provider tree walks.
9190
+ */
9191
+ draftTreeSha: commitSha$1.optional(),
9192
+ candidateTreeSha: commitSha$1.optional()
9193
+ }).superRefine((data, ctx) => {
9194
+ const hasDraft = data.draftTreeSha != null;
9195
+ if (hasDraft !== (data.candidateTreeSha != null)) ctx.addIssue({
9196
+ code: ZodIssueCode.custom,
9197
+ message: "draftTreeSha and candidateTreeSha must both be provided together",
9198
+ path: hasDraft ? ["candidateTreeSha"] : ["draftTreeSha"]
9199
+ });
9200
+ });
9201
+ const PublishManagedDeployCandidateResponseSchema = object({
9202
+ artifactId: string().uuid(),
9203
+ candidateSha: commitSha$1,
9204
+ candidateRef: string().min(1),
9205
+ candidateEphemeral: boolean()
9206
+ });
9207
+ const checksumSha256 = string().regex(/^[0-9a-f]{64}$/);
9208
+ const CompleteManagedDeployArtifactRequestSchema = union([object({
9209
+ artifactId: string().uuid(),
9210
+ index: ProjectArtifactIndexSchema
9211
+ }), object({
9212
+ artifactId: string().uuid(),
9213
+ checksumSha256,
9214
+ sizeBytes: number$1().int().positive()
9215
+ })]);
9216
+ const CompleteManagedDeployArtifactResponseSchema = object({
9217
+ artifact: ProjectArtifactSchema,
9218
+ project: ProjectSchema,
9219
+ candidateSha: commitSha$1,
9220
+ mode: ManagedDeployModeSchema
9221
+ });
9222
+ const CancelManagedDeployRequestSchema = object({ artifactId: string().uuid() });
9223
+ const CancelManagedDeployResponseSchema = object({ cancelled: literal(true) });
9224
+ /** Presign missing module blobs (CAS). Unchanged hashes are omitted from `uploads`. */
9225
+ const RenewManagedDeployUploadRequestSchema = object({
9226
+ artifactId: string().uuid(),
9227
+ blobs: array(ModuleBlobRefSchema)
9228
+ });
9229
+ const RenewManagedDeployUploadResponseSchema = object({
9230
+ uploads: array(PresignedBlobUploadSchema),
9231
+ expiresInSeconds: number$1().int().positive()
9232
+ });
9233
+ const HeartbeatManagedDeployRequestSchema = object({ artifactId: string().uuid() });
9234
+ const HeartbeatManagedDeployResponseSchema = object({ expiresAt: string().datetime() });
9235
+ const commitSha = string().regex(/^[0-9a-f]{40}$/i);
9236
+ /** Tip of the shared unpublished draft branch (`ks/draft`). */
9237
+ const DraftRevisionResponseSchema = object({
9238
+ commitSha,
9239
+ branch: literal("ks/draft")
9240
+ });
9241
+ /** File tree for a draft revision. Clients pin subsequent reads to `commitSha`. */
9242
+ const ListDraftFilesResponseSchema = object({
9243
+ commitSha,
9244
+ files: array(ProjectFileSummarySchema)
9245
+ });
9246
+ object({
9247
+ path: string().min(1),
9248
+ /**
9249
+ * Optional immutable SHA from a prior list/revision response. When omitted,
9250
+ * the platform resolves the current `ks/draft` tip.
9251
+ */
9252
+ commitSha: commitSha.optional()
9253
+ });
9254
+ /** SDK/helper shape for a draft file body plus the SHA it was read at. */
9255
+ const DraftFileContentResponseSchema = object({
9256
+ content: string(),
9257
+ commitSha
9258
+ });
9259
+ const DraftCommitFileChangeSchema = discriminatedUnion("op", [object({
9260
+ op: literal("upsert"),
9261
+ path: string().min(1),
9262
+ content: string()
9263
+ }), object({
9264
+ op: literal("delete"),
9265
+ path: string().min(1)
9266
+ })]);
9267
+ /**
9268
+ * Atomic multi-file commit against `ks/draft`. `expectedHeadSha` is required
9269
+ * for compare-and-swap; overlapping concurrent edits return a conflict.
9270
+ */
9271
+ const CreateDraftCommitRequestSchema = object({
9272
+ expectedHeadSha: commitSha,
9273
+ message: string().min(1).max(500).optional(),
9274
+ files: array(DraftCommitFileChangeSchema).min(1)
9275
+ });
9276
+ const DraftCommitResponseSchema = object({ commitSha });
9277
+ /**
9278
+ * Max decoded bytes for a `git diff --binary` submitted to the draft from-diff
9279
+ * endpoint. Keeps request bodies bounded for CLI sync and trusted workers.
9280
+ */
9281
+ const PROJECT_DRAFT_DIFF_MAX_BYTES = 2 * 1024 * 1024;
9282
+ /** Base64 expands 3 bytes → 4 chars; pad for padding characters. */
9283
+ const PROJECT_DRAFT_DIFF_MAX_BASE64_CHARS = Math.ceil(PROJECT_DRAFT_DIFF_MAX_BYTES / 3) * 4;
9284
+ /**
9285
+ * Commit a binary Git patch (`git diff --binary`) against `ks/draft`.
9286
+ * `expectedHeadSha` is required for compare-and-swap.
9287
+ */
9288
+ const CreateDraftDiffCommitRequestSchema = object({
9289
+ expectedHeadSha: commitSha,
9290
+ message: string().min(1).max(500).optional(),
9291
+ /** Base64-encoded `git diff --binary` output. */
9292
+ diffBase64: string().min(1).max(PROJECT_DRAFT_DIFF_MAX_BASE64_CHARS)
9293
+ });
9294
+ /** Structured 409 when CAS loses and touched paths overlap concurrent edits. */
9295
+ const DraftConflictResponseSchema = object({
9296
+ error: string(),
9297
+ code: literal("conflict"),
9298
+ currentHeadSha: commitSha
9299
+ });
9300
+ /**
9301
+ * Transient SSE payload after an accepted draft commit. Not a durable event log —
9302
+ * clients use it only to invalidate pinned draft reads.
9303
+ */
9304
+ const DraftUpdateEventSchema = object({
9305
+ projectId: string().min(1),
9306
+ commitSha
9307
+ });
8364
9308
  const optionalCount = number$1().int().nonnegative().nullable().optional();
8365
9309
  const optionalTimestamp = string().nullable().optional();
8366
9310
  const AgentSummarySchema = object({
@@ -8745,82 +9689,6 @@ const PublicFormSubmitBodySchema = object({
8745
9689
  website: string().max(200).optional()
8746
9690
  });
8747
9691
  const PublicFormSubmitResponseSchema = object({ ok: literal(true) });
8748
- const isoDateTime = string().datetime();
8749
- const sha256Hex = string().regex(/^[a-f0-9]{64}$/, "Expected a lowercase hex sha256 digest");
8750
- /**
8751
- * A single entry in a deploy's file tree, as served to the dashboard. Carries
8752
- * no contents: `id` is a stable, path-derived handle used for selection and
8753
- * `?file=` deep links; `hash` is the content address used to fetch the bytes
8754
- * lazily and to cache them immutably in the browser.
8755
- */
8756
- const ProjectFileSummarySchema = object({
8757
- id: string(),
8758
- path: string().min(1),
8759
- hash: sha256Hex
8760
- });
8761
- /** Maps a runtime resource slug (agent/workflow/skill) to its source file path. */
8762
- const ProjectSourceResourceRefSchema = object({
8763
- slug: string().min(1),
8764
- path: string().min(1)
8765
- });
8766
- const ProjectSourceResourcesSchema = object({
8767
- agents: array(ProjectSourceResourceRefSchema).default([]),
8768
- workflows: array(ProjectSourceResourceRefSchema).default([]),
8769
- skills: array(ProjectSourceResourceRefSchema).default([])
8770
- });
8771
- const emptyResources = () => ({
8772
- agents: [],
8773
- workflows: [],
8774
- skills: []
8775
- });
8776
- /** Response for the file-tree listing of a project's active deploy. */
8777
- const ListProjectFilesResponseSchema = object({
8778
- artifactId: string().nullable(),
8779
- files: array(ProjectFileSummarySchema),
8780
- resources: ProjectSourceResourcesSchema.default(emptyResources())
8781
- });
8782
- object({
8783
- path: string().min(1),
8784
- contents: string(),
8785
- hash: sha256Hex
8786
- });
8787
- /** Request: ask the platform which blobs are missing and get presigned PUTs. */
8788
- const PresignProjectSourceRequestSchema = object({ blobs: array(object({
8789
- hash: sha256Hex,
8790
- size: number$1().int().nonnegative()
8791
- })) });
8792
- /** Response: presigned PUTs for the subset of blobs not already stored. */
8793
- const PresignProjectSourceResponseSchema = object({ uploads: array(object({
8794
- hash: sha256Hex,
8795
- url: string().url()
8796
- })) });
8797
- /** Request body the CLI sends to finalize a deploy's source manifest. */
8798
- const UploadProjectSourceManifestRequestSchema = object({ files: array(object({
8799
- path: string().min(1),
8800
- hash: sha256Hex
8801
- })) });
8802
- const UploadProjectSourceResponseSchema = object({
8803
- ok: literal(true),
8804
- fileCount: number$1().int().nonnegative()
8805
- });
8806
- object({
8807
- files: array(object({
8808
- id: string(),
8809
- path: string().min(1),
8810
- hash: sha256Hex
8811
- })),
8812
- generatedAt: isoDateTime
8813
- });
8814
- /** A single source file returned by the bulk active-source download endpoint. */
8815
- const DownloadActiveProjectSourceFileSchema = object({
8816
- path: string().min(1),
8817
- contents: string()
8818
- });
8819
- /** Response for downloading all source files from a project's active deploy. */
8820
- const DownloadActiveProjectSourceResponseSchema = object({
8821
- artifactId: string(),
8822
- files: array(DownloadActiveProjectSourceFileSchema)
8823
- });
8824
9692
  /** Relative path written after a local pull or MCP workspace hydration. */
8825
9693
  const PROJECT_PULL_STATE_RELATIVE_PATH = ".keystroke/pull-state.json";
8826
9694
  const ProjectPullStateSchema = object({
@@ -8838,6 +9706,6 @@ const ListAgentWorkspaceFilesResponseSchema = object({ files: array(object({
8838
9706
  })) });
8839
9707
  const WorkflowRunInputsPutBodySchema = record(string(), unknown());
8840
9708
  //#endregion
8841
- export { HistoryRunCancelResponseSchema as $, WorkflowSummaryListResponseSchema as $n, ZodIssueCode as $r, QueuedAgentPromptResponseSchema as $t, CreateOrganizationResponseSchema as A, UpdateProjectMemberRequestSchema as An, requiredDisplayTextSchema as Ar, OrganizationSidebarBrandingSchema as At, DownloadActiveProjectSourceResponseSchema as B, UserPreferencesSchema as Bn, AutoTopupSummarySchema as Br, PresignUserAvatarResponseSchema as Bt, CreateApiKeyResponseSchema as C, safeParse$1 as Ci, UpdateChannelBindingBodySchema as Cn, CredentialAssignmentRecordSchema as Cr, ListProjectsResponseSchema as Ct, CreateCustomAppRequestSchema as D, UpdateOrganizationMemberRequestSchema as Dn, credentialInputSchema as Dr, McpDiscoverResponseSchema as Dt, CreateCredentialsResponseSchema as E, UpdateManagedServiceCredentialRequestSchema as En, ExecuteKeystrokeToolRequestSchema as Er, ManagedServiceKindSchema as Et, CredentialInstanceRecordSchema as F, UploadProjectSourceResponseSchema as Fn, CLIENT_CHANNEL_HEADER as Fr, PresignOrgLogoRequestSchema as Ft, FormFieldConfigSchema as G, WorkflowFormUpsertBodySchema as Gn, BillingUsageResponseSchema as Gr, ProjectSlugAvailabilityResponseSchema as Gt, DuplicateCredentialsResponseSchema as H, WorkflowCanvasRunSchema as Hn, BillingInvoiceUrlResponseSchema as Hr, ProjectReachabilityResponseSchema as Ht, DOCS_QUERY_TOOL as I, UpsertGatewayAttachmentBodySchema as In, FilePartSchema as Ir, PresignOrgLogoResponseSchema as It, GetCredentialResponseSchema as J, WorkflowRunInputsPutBodySchema as Jn, CreateBillingPortalRequestSchema as Jr, PublicFormMetadataSchema as Jt, GatewayAttachmentRecordSchema as K, WorkflowRunDetailResponseSchema as Kn, ConfirmCheckoutRequestSchema as Kr, PromptInputSchema as Kt, DOCS_SEARCH_TOOL as L, UserAvatarPatchSchema as Ln, PresignChatAttachmentRequestSchema as Lr, PresignProjectSourceRequestSchema as Lt, CreateProjectRequestSchema as M, UpdateProjectRequestSchema as Mn, LOCAL_PLATFORM_ORIGIN as Mr, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS as Mt, CreateProjectResponseSchema as N, UpdateProjectSettingsRequestSchema as Nn, resolvePublicPlatformOrigin as Nr, PresignCustomAppLogoRequestSchema as Nt, CreateCustomAppResponseSchema as O, UpdateOrganizationMemberResponseSchema as On, getOpenApiJsonSchema as Or, OpenApiDiscoverResponseSchema as Ot, CredentialInstanceListResponseSchema as P, UploadProjectSourceManifestRequestSchema as Pn, ACTIVE_ORG_HEADER as Pr, PresignCustomAppLogoResponseSchema as Pt, HealthResponseSchema as Q, WorkflowSummaryDetailResponseSchema as Qn, number as Qr, PublishedFormSchema as Qt, DeclineOrganizationInvitationResponseSchema as R, UserAvatarSchema as Rn, PresignChatAttachmentResponseSchema as Rr, PresignProjectSourceResponseSchema as Rt, CreateApiKeyRequestSchema as S, datetime as Si, TriggerRunListResponseSchema as Sn, CredentialAssignmentListResponseSchema as Sr, ListProjectMetricsResponseSchema as St, CreateCredentialsRequestSchema as T, UpdateCredentialRequestSchema as Tn, CredentialConsumerListResponseSchema as Tr, ManagedServiceCredentialSchema as Tt, FinalizeCustomAppLogoRequestSchema as U, WorkflowCanvasSchema as Un, BillingRedirectResponseSchema as Ur, ProjectResponseSchema as Ut, DuplicateCredentialRequestSchema as V, WorkflowCanvasCredentialBindingsSchema as Vn, BillingActivityResponseSchema as Vr, ProjectPullStateSchema as Vt, FinalizeCustomAppLogoResponseSchema as W, WorkflowFormResponseSchema as Wn, BillingSummaryResponseSchema as Wr, ProjectSettingsResponseSchema as Wt, GetTemplateResponseSchema as X, WorkflowRunListResponseSchema as Xn, CreateSubscriptionCheckoutRequestSchema as Xr, PublicFormSubmitResponseSchema as Xt, GetCustomAppResponseSchema as Y, WorkflowRunInputsSchema as Yn, CreateCreditsCheckoutRequestSchema as Yr, PublicFormSubmitBodySchema as Yt, GraphqlDiscoverResponseSchema as Z, WorkflowRunResponseSchema as Zn, UpdateAutoTopupRequestSchema as Zr, PublishedFormListResponseSchema as Zt, ChannelDirectoryListResponseSchema as _, record as _i, TriggerDetailResponseSchema as _n, resolveDocsMcpUrl as _r, ListOrganizationMembersPageResponseSchema as _t, AgentSummaryDetailResponseSchema as a, array as ai, SkillSummaryListResponseSchema as an, WorkspaceWorkflowOverviewSchema as ar, InviteProjectMembersRequestSchema as at, ConnectManagedServiceCredentialRequestSchema as b, unknown as bi, TriggerListResponseSchema as bn, AssignCredentialBodySchema as br, ListProjectFilesResponseSchema as bt, AppSlugAvailabilityResponseSchema as c, discriminatedUnion as ci, StartKeystrokeConnectionResultSchema as cn, detectProjectPackageManagerFromSnapshot as cr, ListAgentWorkspaceFilesResponseSchema as ct, CatalogActionsPageResponseSchema as d, literal as di, StartOAuthConnectionInputSchema as dn, normalizeDocsSearchPaths as dr, ListChannelPlatformsResponseSchema as dt, ZodType as ei, QueuedRunResponseSchema as en, WorkspaceTriggerDetailSchema as er, HistoryRunDetailResponseSchema as et, CatalogAppDetailResponseSchema as f, looseObject as fi, StartOAuthConnectionResultSchema as fn, originFromPublicUrl as fr, ListCredentialsPageQuerySchema as ft, ChannelConnectionSchema as g, preprocess as gi, TemplateFilesResponseSchema as gn, resolveConnectAppSlug as gr, ListOrganizationMembersPageQuerySchema as gt, ChannelConnectionListResponseSchema as h, optional as hi, SubmitTeamRequestRequestSchema as hn, parseStoredRouteManifest as hr, ListOrganizationInvitationsResponseSchema as ht, AgentSessionListResponseSchema as i, any as ii, SkillSummaryDetailResponseSchema as in, WorkspaceTriggerRunListResponseSchema as ir, InviteOrganizationMembersResponseSchema as it, CreateProjectArtifactResponseSchema as j, UpdateProjectMemberResponseSchema as jn, DEFAULT_CLOUD_PLATFORM_ORIGIN as jr, PROJECT_PULL_STATE_RELATIVE_PATH as jt, CreateOrganizationRequestSchema as k, UpdateOrganizationRequestSchema as kn, normalizeCredentialList as kr, OrganizationSidebarBrandingPatchSchema as kt, BindChannelBodySchema as l, intersection as li, StartMcpOAuthConnectionInputSchema as ln, isAcceptableInstallExit as lr, ListApiKeysResponseSchema as lt, ChannelAccountListResponseSchema as m, object as mi, SubmitMarketingContactRequestSchema as mn, parseErrorResponse as mr, ListManagedServiceCredentialsResponseSchema as mt, ActiveOrganizationResponseSchema as n, _function as ni, RecentResourceListResponseSchema as nn, WorkspaceTriggerListResponseSchema as nr, HistoryRunListResponseSchema as nt, AgentSummaryListResponseSchema as o, boolean as oi, SlugAvailabilityResponseSchema as on, buildConnectDeeplink as or, InviteProjectMembersResponseSchema as ot, CatalogAppsPageResponseSchema as p, number$1 as pi, SubmitAgentFeedbackRequestSchema as pn, parseAppSlug as pr, ListCredentialsPageResponseSchema as pt, GetAppCatalogEntryResponseSchema as q, WorkflowRunHooksResponseSchema as qn, ConfirmCheckoutResponseSchema as qr, PromptResponseSchema as qt, AgentSessionDetailResponseSchema as r, _null as ri, STORED_JSON_SCHEMA_TARGET as rn, WorkspaceTriggerOverviewSchema as rr, InviteOrganizationMembersRequestSchema as rt, AgentTriggerSummaryListResponseSchema as s, custom as si, StartKeystrokeConnectionInputSchema as sn, deriveCustomAppDisplay as sr, ListAgentMemoryFilesResponseSchema as st, AcceptOrganizationInvitationResponseSchema as t, _enum as ti, ROUTE_MANIFEST_REL_PATH as tn, WorkspaceTriggerFileSchema as tr, HistoryRunListQuerySchema as tt, CatalogActionDetailResponseSchema as u, lazy as ui, StartMcpOAuthConnectionResultSchema as un, listenPortFromPublicUrl as ur, ListAppsResponseSchema as ut, CompleteProjectArtifactResponseSchema as v, string as vi, TriggerInvokeInputsSchema as vn, slugifyAppName as vr, ListOrganizationsResponseSchema as vt, CreateCredentialInstanceBodySchema as w, NEVER as wi, UpdateCredentialInstanceBodySchema as wn, CredentialConsumerListQuerySchema as wr, ListTemplatesResponseSchema as wt, ConnectProvidersResponseSchema as x, url as xi, TriggerRunDetailResponseSchema as xn, CredentialAssignmentListQuerySchema as xr, ListProjectMembersResponseSchema as xt, ConnectAuthorizeUrlResponseSchema as y, union as yi, TriggerInvokeResponseSchema as yn, zodToStoredJsonSchema as yr, ListProjectDeploymentsResponseSchema as yt, DownloadActiveProjectArtifactResponseSchema as z, UserPreferencesPatchSchema as zn, PublicModelsResponseSchema as zr, PresignUserAvatarRequestSchema as zt };
9709
+ export { DownloadActiveProjectArtifactResponseSchema as $, CreateCreditsCheckoutRequestSchema as $i, SkillSummaryDetailResponseSchema as $n, WorkflowSummaryDetailResponseSchema as $r, OpenApiDiscoverResponseSchema as $t, CreateApiKeyResponseSchema as A, CredentialConsumerListQuerySchema as Ai, ProjectGitStatusResponseSchema as An, UpdateOrganizationRequestSchema as Ar, ListApiKeysResponseSchema as At, CreateProjectArtifactRequestSchema as B, CLIENT_CHANNEL_HEADER as Bi, PublicFormSubmitResponseSchema as Bn, UserPreferencesPatchSchema as Br, ListOrganizationMembersPageResponseSchema as Bt, CompleteManagedDeployArtifactResponseSchema as C, union as Ca, resolveDocsMcpUrl as Ci, PresignProjectSourceRequestSchema as Cn, TriggerRunListResponseSchema as Cr, HistoryRunListResponseSchema as Ct, ConnectManagedServiceCredentialRequestSchema as D, safeParse$1 as Da, CredentialAssignmentListQuerySchema as Di, ProjectArtifactIndexSchema as Dn, UpdateManagedServiceCredentialRequestSchema as Dr, InviteProjectMembersResponseSchema as Dt, ConnectAuthorizeUrlResponseSchema as E, datetime as Ea, AssignCredentialBodySchema as Ei, PresignUserAvatarResponseSchema as En, UpdateCredentialRequestSchema as Er, InviteProjectMembersRequestSchema as Et, CreateCustomAppResponseSchema as F, normalizeCredentialList as Fi, ProjectSlugAvailabilityResponseSchema as Fn, UploadProjectSourceManifestRequestSchema as Fr, ListDraftFilesResponseSchema as Ft, CreateSlackAppResponseSchema as G, BillingActivityResponseSchema as Gi, QueuedAgentPromptResponseSchema as Gn, WorkflowFormResponseSchema as Gr, ListProjectMetricsResponseSchema as Gt, CreateProjectRequestSchema as H, PresignChatAttachmentResponseSchema as Hi, PublishManagedDeployCandidateResponseSchema as Hn, WorkflowCanvasCredentialBindingsSchema as Hr, ListProjectDeploymentsResponseSchema as Ht, CreateDraftCommitRequestSchema as I, requiredDisplayTextSchema as Ii, PromptInputSchema as In, UploadProjectSourceResponseSchema as Ir, ListManagedServiceCredentialsResponseSchema as It, CredentialInstanceListResponseSchema as J, BillingSummaryResponseSchema as Ji, RenewManagedDeployUploadRequestSchema as Jn, WorkflowRunHooksResponseSchema as Jr, MANAGED_DEPLOY_REQUEST_TIMEOUT_MS as Jt, CreateSlackChannelBodySchema as K, BillingInvoiceUrlResponseSchema as Ki, QueuedRunResponseSchema as Kn, WorkflowFormUpsertBodySchema as Kr, ListProjectsResponseSchema as Kt, CreateDraftDiffCommitRequestSchema as L, DEFAULT_CLOUD_PLATFORM_ORIGIN as Li, PromptResponseSchema as Ln, UpsertGatewayAttachmentBodySchema as Lr, ListMcpAppToolsResponseSchema as Lt, CreateCredentialsRequestSchema as M, ExecuteKeystrokeToolRequestSchema as Mi, ProjectReachabilityResponseSchema as Mn, UpdateProjectMemberResponseSchema as Mr, ListChannelPlatformsResponseSchema as Mt, CreateCredentialsResponseSchema as N, credentialInputSchema as Ni, ProjectResponseSchema as Nn, UpdateProjectRequestSchema as Nr, ListCredentialsPageQuerySchema as Nt, ConnectProvidersResponseSchema as O, NEVER as Oa, CredentialAssignmentListResponseSchema as Oi, ProjectGitRemoteRequestSchema as On, UpdateOrganizationMemberRequestSchema as Or, ListAgentMemoryFilesResponseSchema as Ot, CreateCustomAppRequestSchema as P, getOpenApiJsonSchema as Pi, ProjectSettingsResponseSchema as Pn, UpdateProjectSettingsRequestSchema as Pr, ListCredentialsPageResponseSchema as Pt, DeclineOrganizationInvitationResponseSchema as Q, CreateBillingPortalRequestSchema as Qi, STORED_JSON_SCHEMA_TARGET as Qn, WorkflowRunResponseSchema as Qr, McpDiscoverResponseSchema as Qt, CreateOrganizationRequestSchema as R, LOCAL_PLATFORM_ORIGIN as Ri, PublicFormMetadataSchema as Rn, UserAvatarPatchSchema as Rr, ListOrganizationInvitationsResponseSchema as Rt, CompleteManagedDeployArtifactRequestSchema as S, string as Sa, resolveConnectAppSlug as Si, PresignOrgLogoResponseSchema as Sn, TriggerRunDetailResponseSchema as Sr, HistoryRunListQuerySchema as St, CompleteProjectArtifactResponseSchema as T, url as Ta, zodToStoredJsonSchema as Ti, PresignUserAvatarRequestSchema as Tn, UpdateCredentialInstanceBodySchema as Tr, InviteOrganizationMembersResponseSchema as Tt, CreateProjectResponseSchema as U, PublicModelsResponseSchema as Ui, PublishedFormListResponseSchema as Un, WorkflowCanvasRunSchema as Ur, ListProjectFilesResponseSchema as Ut, CreateProjectArtifactResponseSchema as V, PresignChatAttachmentRequestSchema as Vi, PublishManagedDeployCandidateRequestSchema as Vn, UserPreferencesSchema as Vr, ListOrganizationsResponseSchema as Vt, CreateSlackAppRequestSchema as W, AutoTopupSummarySchema as Wi, PublishedFormSchema as Wn, WorkflowCanvasSchema as Wr, ListProjectMembersResponseSchema as Wt, DOCS_QUERY_TOOL as X, ConfirmCheckoutRequestSchema as Xi, SLACK_KEYSTROKE_APP_SLUG as Xn, WorkflowRunInputsSchema as Xr, ManagedServiceCredentialSchema as Xt, CredentialInstanceRecordSchema as Y, BillingUsageResponseSchema as Yi, RenewManagedDeployUploadResponseSchema as Yn, WorkflowRunInputsPutBodySchema as Yr, ManagedDeployResourceKeySchema as Yt, DOCS_SEARCH_TOOL as Z, ConfirmCheckoutResponseSchema as Zi, SLACK_PERSONAL_APP_SLUG as Zn, WorkflowRunListResponseSchema as Zr, ManagedServiceKindSchema as Zt, CatalogAppsPageResponseSchema as _, number$1 as _a, parseAppSlug as _i, PrepareManagedDeployRequestSchema as _n, TemplateFilesResponseSchema as _r, HealthResponseSchema as _t, AgentSessionListResponseSchema as a, _enum as aa, WorkspaceTriggerRunListResponseSchema as ai, PROJECT_MANIFEST_REL_PATH as an, SlackAppManifestResponseSchema as ar, DraftUpdateEventSchema as at, ChannelConnectionSchema as b, preprocess as ba, parseSlackConnectFlow as bi, PresignCustomAppLogoResponseSchema as bn, TriggerInvokeResponseSchema as br, HistoryRunCancelResponseSchema as bt, AgentTriggerSummaryListResponseSchema as c, any as ca, buildConnectDeeplink as ci, PROJECT_SOURCE_IGNORED_DIRS as cn, StartKeystrokeConnectionInputSchema as cr, FinalizeCustomAppLogoRequestSchema as ct, BindChannelBodySchema as d, custom as da, isAcceptableInstallExit as di, PROJECT_SOURCE_MAX_TOTAL_BYTES as dn, StartMcpOAuthConnectionResultSchema as dr, GatewayAttachmentRecordSchema as dt, CreateSubscriptionCheckoutRequestSchema as ea, WorkflowSummaryListResponseSchema as ei, OrganizationSidebarBrandingPatchSchema as en, SkillSummaryListResponseSchema as er, DownloadActiveProjectSourceResponseSchema as et, CancelManagedDeployRequestSchema as f, discriminatedUnion as fa, isIgnoredProjectSourceFileName as fi, PlatformAgentCancelResponseSchema as fn, StartOAuthConnectionInputSchema as fr, GetAppCatalogEntryResponseSchema as ft, CatalogAppDetailResponseSchema as g, looseObject as ga, originFromPublicUrl as gi, PlatformAgentSessionListResponseSchema as gn, SubmitTeamRequestRequestSchema as gr, GraphqlDiscoverResponseSchema as gt, CatalogActionsPageResponseSchema as h, literal as ha, normalizeDocsSearchPaths as hi, PlatformAgentSessionDetailResponseSchema as hn, SubmitMarketingContactRequestSchema as hr, GetTemplateResponseSchema as ht, AgentSessionDetailResponseSchema as i, ZodType as ia, WorkspaceTriggerOverviewSchema as ii, PROJECT_DRAFT_DIFF_MAX_BYTES as in, SlackAppManifestRequestSchema as ir, DraftRevisionResponseSchema as it, CreateCredentialInstanceBodySchema as j, CredentialConsumerListResponseSchema as ji, ProjectPullStateSchema as jn, UpdateProjectMemberRequestSchema as jr, ListAppsResponseSchema as jt, CreateApiKeyRequestSchema as k, CredentialAssignmentRecordSchema as ki, ProjectGitRemoteResponseSchema as kn, UpdateOrganizationMemberResponseSchema as kr, ListAgentWorkspaceFilesResponseSchema as kt, AppSlugAvailabilityResponseSchema as l, array as la, deriveCustomAppDisplay as li, PROJECT_SOURCE_MAX_FILES as ln, StartKeystrokeConnectionResultSchema as lr, FinalizeCustomAppLogoResponseSchema as lt, CatalogActionDetailResponseSchema as m, lazy as ma, isProbablyBinaryProjectSource as mi, PlatformAgentPromptResponseSchema as mn, SubmitAgentFeedbackRequestSchema as mr, GetCustomAppResponseSchema as mt, ActiveOrganizationResponseSchema as n, number as na, WorkspaceTriggerFileSchema as ni, PNPM_FROZEN_INSTALL_ARGS as nn, SlackAppInstallStartResponseSchema as nr, DraftConflictResponseSchema as nt, AgentSummaryDetailResponseSchema as o, _function as oa, WorkspaceWorkflowOverviewSchema as oi, PROJECT_PULL_STATE_RELATIVE_PATH as on, SlackMembershipChannelBodySchema as or, DuplicateCredentialRequestSchema as ot, CancelManagedDeployResponseSchema as p, intersection as pa, isIgnoredProjectSourcePath as pi, PlatformAgentPromptInputSchema as pn, StartOAuthConnectionResultSchema as pr, GetCredentialResponseSchema as pt, CreateSlackChannelResponseSchema as q, BillingRedirectResponseSchema as qi, RecentResourceListResponseSchema as qn, WorkflowRunDetailResponseSchema as qr, ListTemplatesResponseSchema as qt, ActiveProjectSourceRevisionSchema as r, ZodIssueCode as ra, WorkspaceTriggerListResponseSchema as ri, PROJECT_DRAFT_COMMIT_REQUEST_TIMEOUT_MS as rn, SlackAppListResponseSchema as rr, DraftFileContentResponseSchema as rt, AgentSummaryListResponseSchema as s, _null as sa, buildAgentSlackDeeplink as si, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS as sn, SlugAvailabilityResponseSchema as sr, DuplicateCredentialsResponseSchema as st, AcceptOrganizationInvitationResponseSchema as t, UpdateAutoTopupRequestSchema as ta, WorkspaceTriggerDetailSchema as ti, OrganizationSidebarBrandingSchema as tn, SlackAgentMembershipsResponseSchema as tr, DraftCommitResponseSchema as tt, BindAgentSlackAppBodySchema as u, boolean as ua, detectProjectPackageManagerFromSnapshot as ui, PROJECT_SOURCE_MAX_FILE_BYTES as un, StartMcpOAuthConnectionInputSchema as ur, FormFieldConfigSchema as ut, ChannelAccountListResponseSchema as v, object as va, parseErrorResponse as vi, PrepareManagedDeployResponseSchema as vn, TriggerDetailResponseSchema as vr, HeartbeatManagedDeployRequestSchema as vt, CompleteProjectArtifactRequestSchema as w, unknown as wa, slugifyAppName as wi, PresignProjectSourceResponseSchema as wn, UpdateChannelBindingBodySchema as wr, InviteOrganizationMembersRequestSchema as wt, ChannelDirectoryListResponseSchema as x, record as xa, parseStoredRouteManifest as xi, PresignOrgLogoRequestSchema as xn, TriggerListResponseSchema as xr, HistoryRunDetailResponseSchema as xt, ChannelConnectionListResponseSchema as y, optional as ya, parseProjectManifest as yi, PresignCustomAppLogoRequestSchema as yn, TriggerInvokeInputsSchema as yr, HeartbeatManagedDeployResponseSchema as yt, CreateOrganizationResponseSchema as z, ACTIVE_ORG_HEADER as zi, PublicFormSubmitBodySchema as zn, UserAvatarSchema as zr, ListOrganizationMembersPageQuerySchema as zt };
8842
9710
 
8843
- //# sourceMappingURL=dist-E6dh6qXe.mjs.map
9711
+ //# sourceMappingURL=dist-C6adeAws.mjs.map