@qwen-code/qwen-code 0.19.12-preview.0 → 0.20.0-nightly.20260720.0c271659d

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 (277) hide show
  1. package/bundled/qc-helper/docs/features/channels/overview.md +4 -2
  2. package/bundled/qc-helper/docs/integration-github-action.md +1 -1
  3. package/bundled/qc-helper/docs/qwen-serve.md +42 -5
  4. package/bundled/review/DESIGN.md +2 -2
  5. package/bundled/review/SKILL.md +13 -9
  6. package/chunks/{MaxSizedBox-3KIWAU6Z.js → MaxSizedBox-ED3QND6V.js} +30 -27
  7. package/chunks/{StandaloneSessionPicker-TF626NO7.js → StandaloneSessionPicker-NQVAOTKS.js} +50 -45
  8. package/chunks/{acpAgent-JDVJXVBO.js → acpAgent-HOBFF5B6.js} +353 -130
  9. package/chunks/{agent-BONWC4VY.js → agent-J7EPFLA6.js} +22 -22
  10. package/chunks/{agent-headless-H7HKMGLZ.js → agent-headless-RRG3JU7Q.js} +22 -22
  11. package/chunks/{anthropicContentGenerator-ZZRGFEES.js → anthropicContentGenerator-HVKLXOOU.js} +6 -5
  12. package/chunks/{artifact-tool-PHO5XEGZ.js → artifact-tool-WBCAMD3O.js} +2 -2
  13. package/chunks/{askUserQuestion-CEPBT47X.js → askUserQuestion-6DZC4UV5.js} +2 -2
  14. package/chunks/{bridge-ATN2TLWJ.js → bridge-OW5FZ6BF.js} +25 -25
  15. package/chunks/build-SSCNEHZZ.js +62 -0
  16. package/chunks/{channel-worker-group-S3H5QHTI.js → channel-worker-group-53CMOPFT.js} +4 -4
  17. package/chunks/{channel-worker-manager-ZJ4HTMO2.js → channel-worker-manager-UTXILKC2.js} +4 -4
  18. package/chunks/{channel-worker-supervisor-JA6VZ5V5.js → channel-worker-supervisor-ZGO2W2MD.js} +3 -3
  19. package/chunks/chunk-27AJEU6G.js +442 -0
  20. package/chunks/{chunk-53UMEONK.js → chunk-2HOVDT7W.js} +1 -1
  21. package/chunks/{chunk-6WZZHJSZ.js → chunk-2JOLZA6L.js} +5 -5
  22. package/chunks/{chunk-NSZJQACR.js → chunk-2TDSM7I6.js} +3 -3
  23. package/chunks/{chunk-ILQ42UG6.js → chunk-2YJLFCYI.js} +7 -7
  24. package/chunks/{chunk-CMHJEUVB.js → chunk-37MGCVTS.js} +1 -1
  25. package/chunks/{chunk-F2YCCUXI.js → chunk-3ML52IFS.js} +4 -4
  26. package/chunks/{chunk-3PE7OY2G.js → chunk-3QR5MOHP.js} +2 -2
  27. package/chunks/{chunk-4AGBO6RB.js → chunk-3SNKL6L6.js} +29 -13
  28. package/chunks/{chunk-OZWJAFFE.js → chunk-3ZL6YMO2.js} +3 -3
  29. package/chunks/chunk-43T5WDQ7.js +127 -0
  30. package/chunks/{chunk-E655RDRL.js → chunk-4ODB7WIB.js} +1 -1
  31. package/chunks/{chunk-66F4IJ4L.js → chunk-4UH63YE5.js} +5 -5
  32. package/chunks/{chunk-QGONRHUS.js → chunk-53OPIXUE.js} +3 -3
  33. package/chunks/{chunk-HTHUX2T5.js → chunk-5QWWOFGG.js} +0 -1
  34. package/chunks/{chunk-3DJY4IFO.js → chunk-5SCI6E3E.js} +1 -1
  35. package/chunks/{chunk-4CHDYDG3.js → chunk-6EFTQYW7.js} +1 -1
  36. package/chunks/{chunk-4W55BHOC.js → chunk-6HQW55TM.js} +29 -2
  37. package/chunks/{chunk-LODZMRXC.js → chunk-6MN6XJTR.js} +2379 -1291
  38. package/chunks/{chunk-EWPLL4OT.js → chunk-6VGRTGOG.js} +1 -1
  39. package/chunks/{chunk-R32BTEZY.js → chunk-7JQK6FXK.js} +198 -120
  40. package/chunks/{chunk-SMASS3CY.js → chunk-A4TJMY65.js} +1 -1
  41. package/chunks/{chunk-JUNVFQVY.js → chunk-AMRWCMX4.js} +4 -4
  42. package/chunks/{chunk-XAAEDML2.js → chunk-AYCDXHZB.js} +1 -1
  43. package/chunks/{chunk-VAJS2E2D.js → chunk-BDBMYST4.js} +1 -1
  44. package/chunks/{chunk-F2RR4HO2.js → chunk-BVLROR2T.js} +1 -1
  45. package/chunks/{chunk-UE5TZ55T.js → chunk-C27BYUX6.js} +29 -2
  46. package/chunks/{chunk-ZPVGEMVC.js → chunk-CL7IRYTA.js} +1 -1
  47. package/chunks/{chunk-DULSE2SH.js → chunk-COWNNAWJ.js} +1 -1
  48. package/chunks/{chunk-UOA2IHRI.js → chunk-CPCVCKKF.js} +1 -1
  49. package/chunks/{chunk-4RPARQ5D.js → chunk-D2VIDMVM.js} +2 -2
  50. package/chunks/{chunk-PTXVHS2O.js → chunk-DCCW7CRR.js} +6 -6
  51. package/chunks/chunk-DIKIJS6Z.js +114 -0
  52. package/chunks/{chunk-NVUGS23Y.js → chunk-DR5AUNJ2.js} +4 -4
  53. package/chunks/{chunk-7KS72E2N.js → chunk-DSBCU6JY.js} +3 -3
  54. package/chunks/{chunk-LKR7QQ63.js → chunk-EAUYY7SS.js} +3 -3
  55. package/chunks/{chunk-J2MKYJKZ.js → chunk-EIAK6Q2B.js} +2 -2
  56. package/chunks/{chunk-WEPXQKGP.js → chunk-EZVDJFZ7.js} +1 -1
  57. package/chunks/{chunk-WHQNBBWW.js → chunk-FLSVD6BS.js} +2 -2
  58. package/chunks/{chunk-XACBIZJB.js → chunk-FODJ5Q5K.js} +3 -3
  59. package/chunks/{chunk-4XCVGEEX.js → chunk-FSL5W5TI.js} +3 -3
  60. package/chunks/{chunk-K7P34F2J.js → chunk-FWT66O5E.js} +2 -2
  61. package/chunks/{chunk-OSSDHJDU.js → chunk-G45X5TRN.js} +1 -1
  62. package/chunks/{chunk-R4RIMOJL.js → chunk-G6MDKXDP.js} +12 -12
  63. package/chunks/{chunk-KANTXY7B.js → chunk-GKY2OJ7R.js} +2 -2
  64. package/chunks/chunk-GMGDLUC7.js +37 -0
  65. package/chunks/{chunk-J6NT5YTN.js → chunk-H2XVO6NE.js} +1 -289
  66. package/chunks/{chunk-7OZGMFHC.js → chunk-I4HZ4GOD.js} +8 -8
  67. package/chunks/{chunk-YN2I5I42.js → chunk-I6JUVU7J.js} +34 -24
  68. package/chunks/{chunk-LLIGYAQU.js → chunk-IDGTC5AS.js} +3 -3
  69. package/chunks/{chunk-LHEQDKAR.js → chunk-INL2RSLA.js} +1 -1
  70. package/chunks/{chunk-CXWUXRD5.js → chunk-INQQM52C.js} +18 -16
  71. package/chunks/{chunk-2DZ7E27L.js → chunk-JBCFW3IL.js} +2 -2
  72. package/chunks/{chunk-LPHGXXZX.js → chunk-JD3MKVKL.js} +1 -1
  73. package/chunks/{chunk-6TDA4EVC.js → chunk-JDPCOUZ3.js} +2282 -662
  74. package/chunks/{chunk-NUHSLBJZ.js → chunk-JNWZQ27S.js} +15 -9
  75. package/chunks/{chunk-IKLWU6YS.js → chunk-JRJ2LV6P.js} +6 -226
  76. package/chunks/{chunk-QSG4ZFG4.js → chunk-KTUQMDEP.js} +1 -1
  77. package/chunks/{chunk-HZXU6YZW.js → chunk-LTQ5C5AB.js} +4 -4
  78. package/chunks/{chunk-V4PCIS25.js → chunk-MAQQGNQ5.js} +44 -1
  79. package/chunks/{chunk-BEFQGC6H.js → chunk-NBMIC7DR.js} +2 -2
  80. package/chunks/{chunk-GEHSF7MS.js → chunk-NEEB7UEN.js} +2545 -1974
  81. package/chunks/{chunk-MHEZV3OY.js → chunk-NIJEXGV6.js} +250 -75
  82. package/chunks/{chunk-NGTQA57Y.js → chunk-NQVA6O7F.js} +2 -2
  83. package/chunks/{chunk-54KPEDM2.js → chunk-NT324EJ6.js} +13 -8
  84. package/chunks/{chunk-WTHRMVKB.js → chunk-O2SPEQFA.js} +5 -5
  85. package/chunks/{chunk-MCYZTKBV.js → chunk-OLMETXLX.js} +2 -2
  86. package/chunks/{chunk-JCJPZMJV.js → chunk-OOCI5VVU.js} +1 -1
  87. package/chunks/{chunk-XSPFQQRE.js → chunk-OONJNQ42.js} +3 -3
  88. package/chunks/{chunk-ANRANWVE.js → chunk-OP4MOGXF.js} +1 -1
  89. package/chunks/{chunk-SGPFJMRP.js → chunk-PBATSWUQ.js} +1 -1
  90. package/chunks/chunk-QKYTTBYW.js +624 -0
  91. package/chunks/{chunk-4OVECYBM.js → chunk-QOSKUG5P.js} +77 -20
  92. package/chunks/{chunk-76BFY7AF.js → chunk-QTERJVPZ.js} +1 -6
  93. package/chunks/{chunk-Y5UDBQYF.js → chunk-RB7NXUP5.js} +3 -3
  94. package/chunks/{chunk-HCCR43AY.js → chunk-RFIAR4YL.js} +1 -1
  95. package/chunks/{chunk-XFJU7SVP.js → chunk-RS5JPH6Y.js} +3 -3
  96. package/chunks/chunk-RS7MT2QG.js +305 -0
  97. package/chunks/{chunk-WACI4VES.js → chunk-SG2PEESS.js} +1106 -592
  98. package/chunks/{chunk-FEZXQXW2.js → chunk-SLLG5XXE.js} +1 -1
  99. package/chunks/{chunk-W4DFAUAO.js → chunk-SQMTULHJ.js} +1 -1
  100. package/chunks/{chunk-Z4ZCVYJ5.js → chunk-STFP7PJR.js} +6 -6
  101. package/chunks/chunk-SV5PQVQE.js +71 -0
  102. package/chunks/{chunk-7LMAKIWE.js → chunk-TFNZCC4B.js} +1 -1
  103. package/chunks/{chunk-ZFHHBRRA.js → chunk-THNJYTA6.js} +2 -2
  104. package/chunks/{chunk-6QGZVKOO.js → chunk-TN2BYMNH.js} +69 -2216
  105. package/chunks/{chunk-TFV3XVAZ.js → chunk-TQBA6DVX.js} +1 -1
  106. package/chunks/{chunk-AWOU24F6.js → chunk-U24E4R5U.js} +3 -3
  107. package/chunks/{chunk-4CA4WUMS.js → chunk-UEY4AYUL.js} +2 -2
  108. package/chunks/{chunk-DYUPBU7H.js → chunk-UGRL5B5F.js} +1 -1
  109. package/chunks/chunk-V7RNNPGC.js +44 -0
  110. package/chunks/{chunk-LYFDJTXE.js → chunk-VGFFYNBD.js} +1 -1
  111. package/chunks/chunk-VIOFKPPN.js +125 -0
  112. package/chunks/{chunk-BEZPRKD3.js → chunk-VLDBVLC4.js} +156 -2
  113. package/chunks/{chunk-HQ7MDVBO.js → chunk-VWLLDHAY.js} +6 -6
  114. package/chunks/chunk-WCDH2CRI.js +1187 -0
  115. package/chunks/{chunk-7SX6WZNO.js → chunk-XVVH63JG.js} +3 -3
  116. package/chunks/{chunk-HVWPSGDY.js → chunk-Y2ENGUD6.js} +1 -1
  117. package/chunks/{chunk-PSISZNIT.js → chunk-Y5534U4G.js} +346 -122
  118. package/chunks/{chunk-IQRQVPGN.js → chunk-YDZ6J2BY.js} +72 -159
  119. package/chunks/{chunk-7O7WZH7N.js → chunk-YNBP3YSU.js} +7 -6
  120. package/chunks/{chunk-NJQPQ4IO.js → chunk-YWEW33JY.js} +7 -7
  121. package/chunks/{chunk-335ECZTA.js → chunk-ZEOZL37W.js} +1 -1
  122. package/chunks/{chunk-SNONG66P.js → chunk-ZGJ4LDD2.js} +53 -28
  123. package/chunks/{computer-use-UY4A72X7.js → computer-use-ET5476VX.js} +22 -22
  124. package/chunks/{config-utils-KWTRFP7D.js → config-utils-AHQ6YZ66.js} +3 -3
  125. package/chunks/{contextCommand-3DZ2SVH6.js → contextCommand-QIULFDBF.js} +25 -26
  126. package/chunks/{create-sub-session-OT7WXLDO.js → create-sub-session-BVL2ZHTM.js} +22 -22
  127. package/chunks/{create-sub-session-DIJOV6HV.js → create-sub-session-P26FE5GG.js} +2 -2
  128. package/chunks/{cron-create-X462ERYA.js → cron-create-JWFHBDRQ.js} +4 -4
  129. package/chunks/{cron-delete-SL5UJUM3.js → cron-delete-GDX4E26G.js} +4 -4
  130. package/chunks/{cron-list-3MD6SVXI.js → cron-list-USMAIWPT.js} +4 -4
  131. package/chunks/{daemon-ZW6LHOXT.js → daemon-EE5T3KOW.js} +169 -84
  132. package/chunks/{daemon-status-provider-GTZOYSBO.js → daemon-status-provider-L5UW7TGV.js} +29 -29
  133. package/chunks/{dist-RZBJT5O2.js → dist-2BHAYBKP.js} +1 -1
  134. package/chunks/{dist-O2IP3G5D.js → dist-2MIU4UUH.js} +1 -1
  135. package/chunks/{dist-HCUUS6IH.js → dist-53PZYC5B.js} +2 -2
  136. package/chunks/{dist-ZJHKKWUD.js → dist-AU7NQQRP.js} +1 -1
  137. package/chunks/{dist-YTPTCUAD.js → dist-FUTEXY6A.js} +1 -1
  138. package/chunks/{dist-Y54RURGT.js → dist-WGTQO7F2.js} +1 -1
  139. package/chunks/{earlyInputCapture-GGWVGBZ7.js → earlyInputCapture-ZLAL5GTE.js} +23 -23
  140. package/chunks/{edit-JN467GIR.js → edit-4ZOPT6OC.js} +23 -23
  141. package/chunks/{enter-worktree-MMO4VBQE.js → enter-worktree-DFP5CZYS.js} +22 -22
  142. package/chunks/{enterPlanMode-BRZOG4DB.js → enterPlanMode-7VEJ7A2A.js} +22 -22
  143. package/chunks/{environment-LOCDCWMZ.js → environment-KHS35XJY.js} +24 -24
  144. package/chunks/{errors-XXSL5HGG.js → errors-574WBU5R.js} +24 -24
  145. package/chunks/{exit-worktree-UD7PI5H5.js → exit-worktree-5Q7V6D4C.js} +22 -22
  146. package/chunks/{exitPlanMode-EIUETQI6.js → exitPlanMode-SX2F6PDJ.js} +22 -22
  147. package/chunks/{fast-path-ULGAEUVK.js → fast-path-G7BLOZVF.js} +2 -2
  148. package/chunks/{gemini-KW3APZ4P.js → gemini-M4JWSTGU.js} +70 -68
  149. package/chunks/{geminiContentGenerator-4BQ5QHPR.js → geminiContentGenerator-MKXLUFUH.js} +4 -4
  150. package/chunks/{glob-FPKAMR6B.js → glob-FPKZY5W6.js} +22 -22
  151. package/chunks/{grep-MOGRCYB4.js → grep-RS22OMZG.js} +22 -22
  152. package/chunks/{handleAutoUpdate-QUMRZZOS.js → handleAutoUpdate-RFNQ36JC.js} +27 -28
  153. package/chunks/{i18n-F3W6YUYP.js → i18n-MAEWSKYF.js} +23 -23
  154. package/chunks/{initializer-KLU2KAIZ.js → initializer-T2BFZJBP.js} +28 -28
  155. package/chunks/{installationInfo-P3ZP2SIZ.js → installationInfo-3UETF773.js} +25 -23
  156. package/chunks/{keychain-token-storage-K23CFKGN.js → keychain-token-storage-DWRJMNH3.js} +2 -2
  157. package/chunks/{list-4X6D5JD2.js → list-FWZUKWD2.js} +30 -30
  158. package/chunks/{loadedSettingsAdapter-446B6WKA.js → loadedSettingsAdapter-3DUNHAPX.js} +27 -27
  159. package/chunks/{loop-wakeup-6H7OENTB.js → loop-wakeup-5GLTUBHA.js} +5 -5
  160. package/chunks/{ls-APTSOOS5.js → ls-FHBY3Y7I.js} +4 -4
  161. package/chunks/{lsp-HPACPJAN.js → lsp-B6VMEW6Y.js} +2 -2
  162. package/chunks/{mcp-JYVOJZOD.js → mcp-POXS7QWD.js} +27 -27
  163. package/chunks/{monitor-KY7YH7TL.js → monitor-2ZZC2NKH.js} +22 -22
  164. package/chunks/nonInteractiveCli-WSJVCB2W.js +126 -0
  165. package/chunks/{notebook-edit-IHGW42QK.js → notebook-edit-BMQLME3Q.js} +23 -23
  166. package/chunks/{openaiContentGenerator-FURUCKQJ.js → openaiContentGenerator-GOREG72R.js} +11 -11
  167. package/chunks/{pidfile-WKUVXDMR.js → pidfile-MVZDE5TC.js} +23 -23
  168. package/chunks/{processUtils-LHSRN76X.js → processUtils-RH5KNLDH.js} +2 -2
  169. package/chunks/{qwenContentGenerator-NRLM7R36.js → qwenContentGenerator-R55BCLRI.js} +24 -24
  170. package/chunks/{qwenOAuth2-5FNX3AWH.js → qwenOAuth2-QZBI2SOZ.js} +11 -11
  171. package/chunks/react-SG7JAQSZ.js +8 -0
  172. package/chunks/{read-file-VLEAEXFP.js → read-file-CPS2CYYG.js} +8 -8
  173. package/chunks/{read-mcp-resource-C6NT52T6.js → read-mcp-resource-AKCL7I43.js} +2 -2
  174. package/chunks/{record-artifact-ENCU7QCL.js → record-artifact-PEUB7727.js} +2 -2
  175. package/chunks/resumeHistoryUtils-YD6DSYHU.js +78 -0
  176. package/chunks/{ripGrep-MT23EIDD.js → ripGrep-UKGJ7RHZ.js} +22 -22
  177. package/chunks/{run-qwen-serve-5HWOQFLI.js → run-qwen-serve-GFKSKLF6.js} +1442 -148
  178. package/chunks/{runtime-6IVKJSLW.js → runtime-4KGNL3TP.js} +31 -31
  179. package/chunks/{scheduler-63GJG75U.js → scheduler-GJ3CELWI.js} +22 -22
  180. package/chunks/{send-message-5GZ4FX2V.js → send-message-3RHE7HSM.js} +3 -3
  181. package/chunks/{serve-3LL7RRDP.js → serve-UU6Z4C7W.js} +27 -27
  182. package/chunks/{server-AA24QLPA.js → server-RTJUMN24.js} +393 -256
  183. package/chunks/{session-LRVCFQQQ.js → session-EYD3CEB5.js} +79 -163
  184. package/chunks/{settings-ZX3OKUT4.js → settings-H5O22TGQ.js} +26 -26
  185. package/chunks/{shell-KR3IMYH6.js → shell-KVNHDHMT.js} +22 -22
  186. package/chunks/{skill-QLM2LSF7.js → skill-32525KCE.js} +10 -10
  187. package/chunks/{spawnChannel-6WFOK3SA.js → spawnChannel-G7DUQKHL.js} +24 -24
  188. package/chunks/{src-ADLNIPHD.js → src-DUFUUEHE.js} +52 -22
  189. package/chunks/{standalone-update-C54OTJWJ.js → standalone-update-UC6CWBLH.js} +24 -24
  190. package/chunks/{startInteractiveUI-KFAOS6HC.js → startInteractiveUI-A5YYAWLF.js} +5455 -2041
  191. package/chunks/{syntheticOutput-ULOVVLY4.js → syntheticOutput-FG5PQKIR.js} +3 -3
  192. package/chunks/{task-create-DUE2PMNI.js → task-create-HX32YXO7.js} +7 -7
  193. package/chunks/{task-list-WVPNX7BZ.js → task-list-QWSY4ZIU.js} +5 -5
  194. package/chunks/{task-stop-CPEQWOT6.js → task-stop-GWC6UWAL.js} +2 -2
  195. package/chunks/{task-update-HY2LNFFB.js → task-update-NCTAB73Q.js} +7 -7
  196. package/chunks/{team-create-Q5B5M7UD.js → team-create-LS2Q32Y4.js} +22 -22
  197. package/chunks/{team-delete-JJV6IUOA.js → team-delete-KK37HTOG.js} +5 -5
  198. package/chunks/{team-plan-approval-J55PXNY2.js → team-plan-approval-DWCZABX6.js} +22 -22
  199. package/chunks/{theme-manager-QWTDRPHV.js → theme-manager-E22CNBIL.js} +23 -23
  200. package/chunks/{todoWrite-JHHIDOIV.js → todoWrite-ERCAMLFS.js} +4 -4
  201. package/chunks/{tool-search-LSSKWZKH.js → tool-search-MHXUDFD2.js} +9 -9
  202. package/chunks/{total-session-admission-S6ATY5HY.js → total-session-admission-KOPTGDJZ.js} +25 -25
  203. package/chunks/{trustedFolders-CY4TUPDJ.js → trustedFolders-ANQXYAQT.js} +23 -23
  204. package/chunks/{update-relaunch-IOKOUV3K.js → update-relaunch-HFGRB7PE.js} +9 -9
  205. package/chunks/{updateCheck-YNRFE4V7.js → updateCheck-EKIPND4B.js} +33 -26
  206. package/chunks/useAutoAcceptIndicator-EE22V2F5.js +80 -0
  207. package/chunks/{validateNonInterActiveAuth-OXTECS4B.js → validateNonInterActiveAuth-RUICXVPH.js} +61 -63
  208. package/chunks/{version-2CZQQDL5.js → version-QLT755OV.js} +1 -1
  209. package/chunks/{web-fetch-7QTEGJI5.js → web-fetch-DINW4Z65.js} +10 -10
  210. package/chunks/{workflow-G3CZU256.js → workflow-GPMXRWKK.js} +23 -23
  211. package/chunks/{workspace-providers-status-UHQOIPAZ.js → workspace-providers-status-XCQKBVSX.js} +30 -30
  212. package/chunks/{workspace-registration-store-5WPCMX4F.js → workspace-registration-store-4I4KL7TN.js} +1 -1
  213. package/chunks/{workspace-registry-LAQCRQTH.js → workspace-registry-N4J57SFQ.js} +25 -25
  214. package/chunks/{workspace-service-6ZEUJY2Z.js → workspace-service-JJNJWVH3.js} +32 -32
  215. package/chunks/{workspace-skills-status-YG6OITSM.js → workspace-skills-status-CEHLAQ2Y.js} +28 -28
  216. package/chunks/{write-file-E7T3PU3B.js → write-file-XRGEJRCC.js} +23 -23
  217. package/cli.js +11 -11
  218. package/package.json +3 -3
  219. package/web-shell/assets/{arc-_dVIKMdB.js → arc-DwJhljn9.js} +1 -1
  220. package/web-shell/assets/{architectureDiagram-3BPJPVTR-MuN3nKpL.js → architectureDiagram-3BPJPVTR-qdxSRav-.js} +1 -1
  221. package/web-shell/assets/{blockDiagram-GPEHLZMM-BtmvJjzx.js → blockDiagram-GPEHLZMM-2-dKM5aM.js} +1 -1
  222. package/web-shell/assets/{c4Diagram-AAUBKEIU-Dvi58_BU.js → c4Diagram-AAUBKEIU-Dt_Nu2HD.js} +1 -1
  223. package/web-shell/assets/channel-C6uyh95L.js +1 -0
  224. package/web-shell/assets/{chunk-2J33WTMH-YqxOVhS1.js → chunk-2J33WTMH-CBCeeNfD.js} +1 -1
  225. package/web-shell/assets/{chunk-4BX2VUAB-DoBgbC9z.js → chunk-4BX2VUAB-DPAzjqNs.js} +1 -1
  226. package/web-shell/assets/{chunk-55IACEB6-3NEQrBAr.js → chunk-55IACEB6-yrqyxvIK.js} +1 -1
  227. package/web-shell/assets/{chunk-727SXJPM-DrCZQxp0.js → chunk-727SXJPM-DguD_BBT.js} +1 -1
  228. package/web-shell/assets/{chunk-AQP2D5EJ-m_g3zjgv.js → chunk-AQP2D5EJ-KRUOG9v0.js} +1 -1
  229. package/web-shell/assets/{chunk-FMBD7UC4-D1_crABJ.js → chunk-FMBD7UC4-C0lilT2U.js} +1 -1
  230. package/web-shell/assets/{chunk-ND2GUHAM-BdhgVtBx.js → chunk-ND2GUHAM-DG9epIWK.js} +1 -1
  231. package/web-shell/assets/{chunk-QZHKN3VN-BlmThhm-.js → chunk-QZHKN3VN-PdJDkYHw.js} +1 -1
  232. package/web-shell/assets/classDiagram-4FO5ZUOK-Cv8Ulf-B.js +1 -0
  233. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cv8Ulf-B.js +1 -0
  234. package/web-shell/assets/{cose-bilkent-S5V4N54A-Cbjm_00Z.js → cose-bilkent-S5V4N54A-BAOPPuJm.js} +1 -1
  235. package/web-shell/assets/{dagre-BM42HDAG-C39QNVgC.js → dagre-BM42HDAG-CDHJv82_.js} +1 -1
  236. package/web-shell/assets/{diagram-2AECGRRQ-DNXSAixC.js → diagram-2AECGRRQ-C_hkG5fN.js} +1 -1
  237. package/web-shell/assets/{diagram-5GNKFQAL-BCbGUPEA.js → diagram-5GNKFQAL-e9zo_eKt.js} +1 -1
  238. package/web-shell/assets/{diagram-KO2AKTUF-1eujKSDC.js → diagram-KO2AKTUF-BFN41SCb.js} +1 -1
  239. package/web-shell/assets/{diagram-LMA3HP47-DUMKXgql.js → diagram-LMA3HP47-DG72N0W0.js} +1 -1
  240. package/web-shell/assets/{diagram-OG6HWLK6-BFktU3_u.js → diagram-OG6HWLK6-Dkmp-tdv.js} +1 -1
  241. package/web-shell/assets/{erDiagram-TEJ5UH35-BvJC7DLk.js → erDiagram-TEJ5UH35-CyS0GnQV.js} +1 -1
  242. package/web-shell/assets/{flowDiagram-I6XJVG4X-Cgu3PlOt.js → flowDiagram-I6XJVG4X-Cg1SRmzV.js} +1 -1
  243. package/web-shell/assets/{ganttDiagram-6RSMTGT7-DLNXN5Xh.js → ganttDiagram-6RSMTGT7-CoNkSLs3.js} +1 -1
  244. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BQFRDv6R.js → gitGraphDiagram-PVQCEYII-DEA6GWPa.js} +1 -1
  245. package/web-shell/assets/index-B49xd8_A.css +5 -0
  246. package/web-shell/assets/{index-CdC3pjP3.js → index-CMaZgs6B.js} +1 -1
  247. package/web-shell/assets/index-D-cDAZgO.js +1192 -0
  248. package/web-shell/assets/{infoDiagram-5YYISTIA-DT2mOSvp.js → infoDiagram-5YYISTIA-BZshyoGT.js} +1 -1
  249. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-9fy_K4bd.js → ishikawaDiagram-YF4QCWOH-CT2ssZqC.js} +1 -1
  250. package/web-shell/assets/{journeyDiagram-JHISSGLW-CoGSEuhE.js → journeyDiagram-JHISSGLW-BtMQ0rDG.js} +1 -1
  251. package/web-shell/assets/{kanban-definition-UN3LZRKU-BP9hHYIj.js → kanban-definition-UN3LZRKU-CoDbK5Db.js} +1 -1
  252. package/web-shell/assets/{linear-uIroDsmp.js → linear-CwhZ6u7u.js} +1 -1
  253. package/web-shell/assets/{mermaid.core-BUwoStsA.js → mermaid.core-C9nn0nrr.js} +5 -5
  254. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DZB-FWim.js → mindmap-definition-RKZ34NQL-BXUbjTeL.js} +1 -1
  255. package/web-shell/assets/{pieDiagram-4H26LBE5-YPptloKl.js → pieDiagram-4H26LBE5-JddiYlWQ.js} +1 -1
  256. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-dgk3DSzm.js → quadrantDiagram-W4KKPZXB-DK5HKzXO.js} +1 -1
  257. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BH2En2i9.js → requirementDiagram-4Y6WPE33-Y-uipa_6.js} +1 -1
  258. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BB98feeI.js → sankeyDiagram-5OEKKPKP-BbWeqo8H.js} +1 -1
  259. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CunAIGh8.js → sequenceDiagram-3UESZ5HK-tX2gOoo5.js} +1 -1
  260. package/web-shell/assets/{stateDiagram-AJRCARHV-DTJs_-I2.js → stateDiagram-AJRCARHV-CACN457G.js} +1 -1
  261. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DaUeO2zt.js +1 -0
  262. package/web-shell/assets/{timeline-definition-PNZ67QCA-Cd4AN7O0.js → timeline-definition-PNZ67QCA-DnHWKSOq.js} +1 -1
  263. package/web-shell/assets/{vennDiagram-CIIHVFJN-xIG-rUU9.js → vennDiagram-CIIHVFJN-BO8Yl2FG.js} +1 -1
  264. package/web-shell/assets/{wardley-L42UT6IY-D1UyjIcG.js → wardley-L42UT6IY-1NMqqrBi.js} +1 -1
  265. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BVM0Mb99.js → wardleyDiagram-YWT4CUSO-C3eWgIvD.js} +1 -1
  266. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BX31JDSz.js → xychartDiagram-2RQKCTM6-D0h8FgFX.js} +1 -1
  267. package/web-shell/index.html +2 -2
  268. package/chunks/chunk-675SVDMD.js +0 -3288
  269. package/chunks/chunk-CHVH4DVN.js +0 -368
  270. package/chunks/chunk-JCYMQU5F.js +0 -709
  271. package/chunks/nonInteractiveCli-EK35TLVJ.js +0 -129
  272. package/web-shell/assets/channel-Bi5TehaT.js +0 -1
  273. package/web-shell/assets/classDiagram-4FO5ZUOK-BKhhRdd1.js +0 -1
  274. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BKhhRdd1.js +0 -1
  275. package/web-shell/assets/index-C_ouplMQ.js +0 -1187
  276. package/web-shell/assets/index-XGDFJE-X.css +0 -5
  277. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DrfFMYta.js +0 -1
@@ -0,0 +1,1187 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ BACKSLASH_ENTER_DETECTION_WINDOW_MS,
5
+ CHAR_CODE_ESC,
6
+ KITTY_CTRL_C,
7
+ KITTY_KEYCODE_BACKSPACE,
8
+ KITTY_KEYCODE_ENTER,
9
+ KITTY_KEYCODE_NUMPAD_ENTER,
10
+ KITTY_KEYCODE_TAB,
11
+ KITTY_MODIFIER_BASE,
12
+ KITTY_MODIFIER_EVENT_TYPES_OFFSET,
13
+ MAX_KITTY_SEQUENCE_LENGTH,
14
+ MODIFIER_ALT_BIT,
15
+ MODIFIER_CTRL_BIT,
16
+ MODIFIER_SHIFT_BIT,
17
+ clipboardHasImage
18
+ } from "./chunk-QKYTTBYW.js";
19
+ import {
20
+ noteInteraction
21
+ } from "./chunk-KW7NOTN6.js";
22
+ import {
23
+ require_jsx_runtime
24
+ } from "./chunk-SV5PQVQE.js";
25
+ import {
26
+ use_stdin_default,
27
+ use_stdout_default
28
+ } from "./chunk-NEEB7UEN.js";
29
+ import {
30
+ require_react
31
+ } from "./chunk-5QWWOFGG.js";
32
+ import {
33
+ KittySequenceOverflowEvent,
34
+ logKittySequenceOverflow
35
+ } from "./chunk-I6JUVU7J.js";
36
+ import {
37
+ createDebugLogger
38
+ } from "./chunk-C27BYUX6.js";
39
+ import {
40
+ init_esbuild_shims
41
+ } from "./chunk-5O2XNYP6.js";
42
+ import {
43
+ __name,
44
+ __toESM
45
+ } from "./chunk-J2S4EL5Y.js";
46
+
47
+ // packages/cli/src/ui/hooks/useKeypress.ts
48
+ init_esbuild_shims();
49
+ var import_react3 = __toESM(require_react(), 1);
50
+
51
+ // packages/cli/src/ui/contexts/KeypressContext.tsx
52
+ init_esbuild_shims();
53
+ var import_react2 = __toESM(require_react(), 1);
54
+ import readline from "node:readline";
55
+ import { PassThrough } from "node:stream";
56
+
57
+ // packages/cli/src/ui/utils/mouse.ts
58
+ init_esbuild_shims();
59
+ var ESC = "\x1B";
60
+ var SGR_EVENT_PREFIX = `${ESC}[<`;
61
+ var X11_EVENT_PREFIX = `${ESC}[M`;
62
+ var MAX_SGR_MOUSE_SEQUENCE_LENGTH = 50;
63
+ var SGR_MOUSE_REGEX = /^\x1b\[<(\d+);(\d+);(\d+)([mM])/;
64
+ function getEventName(buttonCode, isRelease) {
65
+ const isMove = (buttonCode & 32) !== 0;
66
+ if (buttonCode === 66) return "scroll-left";
67
+ if (buttonCode === 67) return "scroll-right";
68
+ if ((buttonCode & 64) === 64) {
69
+ return (buttonCode & 1) === 0 ? "scroll-up" : "scroll-down";
70
+ }
71
+ if (isMove) return "move";
72
+ const button = buttonCode & 3;
73
+ const type = isRelease ? "release" : "press";
74
+ switch (button) {
75
+ case 0:
76
+ return `left-${type}`;
77
+ case 1:
78
+ return `middle-${type}`;
79
+ case 2:
80
+ return `right-${type}`;
81
+ default:
82
+ return null;
83
+ }
84
+ }
85
+ __name(getEventName, "getEventName");
86
+ function buttonFromCode(code) {
87
+ switch (code & 3) {
88
+ case 0:
89
+ return "left";
90
+ case 1:
91
+ return "middle";
92
+ case 2:
93
+ return "right";
94
+ default:
95
+ return "none";
96
+ }
97
+ }
98
+ __name(buttonFromCode, "buttonFromCode");
99
+ function parseSGRMouseEvent(buffer) {
100
+ const match = buffer.match(SGR_MOUSE_REGEX);
101
+ if (!match) return null;
102
+ const buttonCode = parseInt(match[1], 10);
103
+ const col = parseInt(match[2], 10);
104
+ const row = parseInt(match[3], 10);
105
+ const isRelease = match[4] === "m";
106
+ const name = getEventName(buttonCode, isRelease);
107
+ if (!name) return null;
108
+ return {
109
+ event: {
110
+ name,
111
+ col,
112
+ row,
113
+ shift: (buttonCode & 4) !== 0,
114
+ meta: (buttonCode & 8) !== 0,
115
+ ctrl: (buttonCode & 16) !== 0,
116
+ button: buttonFromCode(buttonCode)
117
+ },
118
+ length: match[0].length
119
+ };
120
+ }
121
+ __name(parseSGRMouseEvent, "parseSGRMouseEvent");
122
+ var ENABLE_SGR_MOUSE = {
123
+ button: "\x1B[?1002h\x1B[?1006h",
124
+ any: "\x1B[?1003h\x1B[?1006h"
125
+ };
126
+ var DISABLE_SGR_MOUSE = {
127
+ button: "\x1B[?1006l\x1B[?1002l",
128
+ any: "\x1B[?1006l\x1B[?1003l"
129
+ };
130
+ function enableMouseEvents(stdout, tracking = "button") {
131
+ stdout.write(ENABLE_SGR_MOUSE[tracking]);
132
+ }
133
+ __name(enableMouseEvents, "enableMouseEvents");
134
+ function disableMouseEvents(stdout, tracking = "button") {
135
+ stdout.write(DISABLE_SGR_MOUSE[tracking]);
136
+ }
137
+ __name(disableMouseEvents, "disableMouseEvents");
138
+
139
+ // packages/cli/src/ui/hooks/useFocus.ts
140
+ init_esbuild_shims();
141
+ var import_react = __toESM(require_react(), 1);
142
+ var ENABLE_FOCUS_REPORTING = "\x1B[?1004h";
143
+ var DISABLE_FOCUS_REPORTING = "\x1B[?1004l";
144
+ var FOCUS_IN = "\x1B[I";
145
+ var FOCUS_OUT = "\x1B[O";
146
+ var useFocus = /* @__PURE__ */ __name(() => {
147
+ const { stdin } = use_stdin_default();
148
+ const { stdout } = use_stdout_default();
149
+ const [isFocused, setIsFocused] = (0, import_react.useState)(true);
150
+ (0, import_react.useEffect)(() => {
151
+ const handleData = /* @__PURE__ */ __name((data) => {
152
+ const sequence = data.toString();
153
+ const lastFocusIn = sequence.lastIndexOf(FOCUS_IN);
154
+ const lastFocusOut = sequence.lastIndexOf(FOCUS_OUT);
155
+ if (lastFocusIn > lastFocusOut) {
156
+ setIsFocused(true);
157
+ } else if (lastFocusOut > lastFocusIn) {
158
+ setIsFocused(false);
159
+ }
160
+ }, "handleData");
161
+ stdout?.write(ENABLE_FOCUS_REPORTING);
162
+ stdin?.on("data", handleData);
163
+ return () => {
164
+ stdout?.write(DISABLE_FOCUS_REPORTING);
165
+ stdin?.removeListener("data", handleData);
166
+ };
167
+ }, [stdin, stdout]);
168
+ useKeypress(
169
+ (_) => {
170
+ if (!isFocused) {
171
+ setIsFocused(true);
172
+ }
173
+ },
174
+ { isActive: true }
175
+ );
176
+ return isFocused;
177
+ }, "useFocus");
178
+
179
+ // packages/cli/src/ui/contexts/KeypressContext.tsx
180
+ var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
181
+ var ESC2 = "\x1B";
182
+ var OPTION_T_COMPOSED_GLYPH = "\u2020";
183
+ var PASTE_MODE_PREFIX = `${ESC2}[200~`;
184
+ var PASTE_MODE_SUFFIX = `${ESC2}[201~`;
185
+ var KITTY_SEQUENCE_TIMEOUT_MS = 200;
186
+ var PASTE_IDLE_TIMEOUT_MS = 1e3;
187
+ var KITTY_KEYPAD_PRINTABLE_KEYCODE_TO_CHAR = {
188
+ 57399: "0",
189
+ 57400: "1",
190
+ 57401: "2",
191
+ 57402: "3",
192
+ 57403: "4",
193
+ 57404: "5",
194
+ 57405: "6",
195
+ 57406: "7",
196
+ 57407: "8",
197
+ 57408: "9",
198
+ 57409: ".",
199
+ 57410: "/",
200
+ 57411: "*",
201
+ 57412: "-",
202
+ 57413: "+",
203
+ // 57414 is keypad Enter - handled separately via CSI~ sequence
204
+ 57415: "=",
205
+ 57416: ","
206
+ };
207
+ var KITTY_KEYPAD_FUNCTIONAL_KEYCODE_TO_NAME = {
208
+ 57417: "left",
209
+ 57418: "right",
210
+ 57419: "up",
211
+ 57420: "down",
212
+ 57421: "pageup",
213
+ 57422: "pagedown",
214
+ 57423: "home",
215
+ 57424: "end",
216
+ 57425: "insert",
217
+ 57426: "delete"
218
+ };
219
+ var KeypressContext = (0, import_react2.createContext)(
220
+ void 0
221
+ );
222
+ var debugLogger = createDebugLogger("KEYPRESS");
223
+ function useKeypressContext() {
224
+ const context = (0, import_react2.useContext)(KeypressContext);
225
+ if (!context) {
226
+ throw new Error(
227
+ "useKeypressContext must be used within a KeypressProvider"
228
+ );
229
+ }
230
+ return context;
231
+ }
232
+ __name(useKeypressContext, "useKeypressContext");
233
+ function KeypressProvider({
234
+ children,
235
+ kittyProtocolEnabled,
236
+ pasteWorkaround = false,
237
+ config,
238
+ debugKeystrokeLogging,
239
+ initialCapturedInput
240
+ }) {
241
+ const { stdin, setRawMode } = use_stdin_default();
242
+ const subscribers = (0, import_react2.useRef)(/* @__PURE__ */ new Set()).current;
243
+ const mouseSubscribers = (0, import_react2.useRef)(/* @__PURE__ */ new Set()).current;
244
+ const subscribe = (0, import_react2.useCallback)(
245
+ (handler) => {
246
+ subscribers.add(handler);
247
+ },
248
+ [subscribers]
249
+ );
250
+ const unsubscribe = (0, import_react2.useCallback)(
251
+ (handler) => {
252
+ subscribers.delete(handler);
253
+ },
254
+ [subscribers]
255
+ );
256
+ const subscribeMouse = (0, import_react2.useCallback)(
257
+ (handler) => {
258
+ mouseSubscribers.add(handler);
259
+ },
260
+ [mouseSubscribers]
261
+ );
262
+ const unsubscribeMouse = (0, import_react2.useCallback)(
263
+ (handler) => {
264
+ mouseSubscribers.delete(handler);
265
+ },
266
+ [mouseSubscribers]
267
+ );
268
+ (0, import_react2.useEffect)(() => {
269
+ setRawMode(true);
270
+ const capturedInput = initialCapturedInput ?? Buffer.alloc(0);
271
+ const keypressStream = new PassThrough();
272
+ let usePassthrough = false;
273
+ if (pasteWorkaround) {
274
+ usePassthrough = true;
275
+ }
276
+ let isPaste = false;
277
+ let pasteBuffer = Buffer.alloc(0);
278
+ let pasteAlreadyFlushed = false;
279
+ let pasteIdleTimeout = null;
280
+ const kittySequenceBufferRef = { current: "" };
281
+ let kittySequenceTimeout = null;
282
+ let backslashTimeout = null;
283
+ let waitingForEnterAfterBackslash = false;
284
+ let rawDataBuffer = Buffer.alloc(0);
285
+ let rawFlushTimeout = null;
286
+ let swallowingSgrMouse = false;
287
+ let sgrMouseBuffer = "";
288
+ let sgrMouseTimeout = null;
289
+ const resetSgrMouse = /* @__PURE__ */ __name(() => {
290
+ swallowingSgrMouse = false;
291
+ sgrMouseBuffer = "";
292
+ if (sgrMouseTimeout) {
293
+ clearTimeout(sgrMouseTimeout);
294
+ sgrMouseTimeout = null;
295
+ }
296
+ }, "resetSgrMouse");
297
+ const updateKittyBuffer = /* @__PURE__ */ __name((value) => {
298
+ kittySequenceBufferRef.current = value;
299
+ }, "updateKittyBuffer");
300
+ const clearKittyTimeout = /* @__PURE__ */ __name(() => {
301
+ if (kittySequenceTimeout) {
302
+ clearTimeout(kittySequenceTimeout);
303
+ kittySequenceTimeout = null;
304
+ }
305
+ }, "clearKittyTimeout");
306
+ const startKittyTimeout = /* @__PURE__ */ __name(() => {
307
+ clearKittyTimeout();
308
+ kittySequenceTimeout = setTimeout(() => {
309
+ if (kittySequenceBufferRef.current) {
310
+ while (kittySequenceBufferRef.current) {
311
+ const parsed = parseKittyPrefix(kittySequenceBufferRef.current);
312
+ if (parsed) {
313
+ kittySequenceBufferRef.current = kittySequenceBufferRef.current.slice(parsed.length);
314
+ broadcast(parsed.key);
315
+ continue;
316
+ }
317
+ const plain = parsePlainTextPrefix(kittySequenceBufferRef.current);
318
+ if (plain) {
319
+ kittySequenceBufferRef.current = kittySequenceBufferRef.current.slice(plain.length);
320
+ broadcast(plain.key);
321
+ continue;
322
+ }
323
+ break;
324
+ }
325
+ if (kittySequenceBufferRef.current) {
326
+ if (debugKeystrokeLogging) {
327
+ debugLogger.debug(
328
+ "[DEBUG] Kitty buffer timeout, clearing:",
329
+ kittySequenceBufferRef.current
330
+ );
331
+ }
332
+ kittySequenceBufferRef.current = "";
333
+ }
334
+ }
335
+ }, KITTY_SEQUENCE_TIMEOUT_MS);
336
+ }, "startKittyTimeout");
337
+ const clearKittyBufferAndTimeout = /* @__PURE__ */ __name(() => {
338
+ clearKittyTimeout();
339
+ kittySequenceBufferRef.current = "";
340
+ }, "clearKittyBufferAndTimeout");
341
+ const clearPasteIdleTimeout = /* @__PURE__ */ __name(() => {
342
+ if (pasteIdleTimeout) {
343
+ clearTimeout(pasteIdleTimeout);
344
+ pasteIdleTimeout = null;
345
+ }
346
+ }, "clearPasteIdleTimeout");
347
+ const forceFlushStuckPaste = /* @__PURE__ */ __name(() => {
348
+ clearPasteIdleTimeout();
349
+ if (!isPaste && pasteBuffer.length === 0) return;
350
+ const buffered = pasteBuffer.toString();
351
+ isPaste = false;
352
+ pasteBuffer = Buffer.alloc(0);
353
+ pasteAlreadyFlushed = true;
354
+ if (buffered.length > 0) {
355
+ broadcast({
356
+ name: "",
357
+ ctrl: false,
358
+ meta: false,
359
+ shift: false,
360
+ paste: true,
361
+ sequence: buffered
362
+ });
363
+ }
364
+ }, "forceFlushStuckPaste");
365
+ const startPasteIdleTimeout = /* @__PURE__ */ __name(() => {
366
+ clearPasteIdleTimeout();
367
+ pasteIdleTimeout = setTimeout(
368
+ forceFlushStuckPaste,
369
+ PASTE_IDLE_TIMEOUT_MS
370
+ );
371
+ }, "startPasteIdleTimeout");
372
+ const createPrintableKey = /* @__PURE__ */ __name((char) => {
373
+ const printableName = char === " " ? "space" : /^[A-Za-z]$/.test(char) ? char.toLowerCase() : char;
374
+ return {
375
+ name: printableName,
376
+ ctrl: false,
377
+ meta: false,
378
+ shift: false,
379
+ paste: false,
380
+ sequence: char,
381
+ kittyProtocol: true
382
+ };
383
+ }, "createPrintableKey");
384
+ const parseKittyPrefix = /* @__PURE__ */ __name((buffer) => {
385
+ const revTabLegacy = new RegExp(`^${ESC2}\\[Z`);
386
+ let m = buffer.match(revTabLegacy);
387
+ if (m) {
388
+ return {
389
+ key: {
390
+ name: "tab",
391
+ ctrl: false,
392
+ meta: false,
393
+ shift: true,
394
+ paste: false,
395
+ sequence: buffer.slice(0, m[0].length),
396
+ kittyProtocol: true
397
+ },
398
+ length: m[0].length
399
+ };
400
+ }
401
+ const revTabParam = new RegExp(`^${ESC2}\\[1;(\\d+)Z`);
402
+ m = buffer.match(revTabParam);
403
+ if (m) {
404
+ let mods = parseInt(m[1], 10);
405
+ if (mods >= KITTY_MODIFIER_EVENT_TYPES_OFFSET) {
406
+ mods -= KITTY_MODIFIER_EVENT_TYPES_OFFSET;
407
+ }
408
+ const bits = mods - KITTY_MODIFIER_BASE;
409
+ const alt = (bits & MODIFIER_ALT_BIT) === MODIFIER_ALT_BIT;
410
+ const ctrl = (bits & MODIFIER_CTRL_BIT) === MODIFIER_CTRL_BIT;
411
+ return {
412
+ key: {
413
+ name: "tab",
414
+ ctrl,
415
+ meta: alt,
416
+ // Reverse tab implies Shift behavior; force shift regardless of mods
417
+ shift: true,
418
+ paste: false,
419
+ sequence: buffer.slice(0, m[0].length),
420
+ kittyProtocol: true
421
+ },
422
+ length: m[0].length
423
+ };
424
+ }
425
+ const arrowPrefix = new RegExp(`^${ESC2}\\[1;(\\d+)([ABCDHFPQSR])`);
426
+ m = buffer.match(arrowPrefix);
427
+ if (m) {
428
+ let mods = parseInt(m[1], 10);
429
+ if (mods >= KITTY_MODIFIER_EVENT_TYPES_OFFSET) {
430
+ mods -= KITTY_MODIFIER_EVENT_TYPES_OFFSET;
431
+ }
432
+ const bits = mods - KITTY_MODIFIER_BASE;
433
+ const shift = (bits & MODIFIER_SHIFT_BIT) === MODIFIER_SHIFT_BIT;
434
+ const alt = (bits & MODIFIER_ALT_BIT) === MODIFIER_ALT_BIT;
435
+ const ctrl = (bits & MODIFIER_CTRL_BIT) === MODIFIER_CTRL_BIT;
436
+ const sym = m[2];
437
+ const symbolToName = {
438
+ A: "up",
439
+ B: "down",
440
+ C: "right",
441
+ D: "left",
442
+ H: "home",
443
+ F: "end",
444
+ P: "f1",
445
+ Q: "f2",
446
+ R: "f3",
447
+ S: "f4"
448
+ };
449
+ const name = symbolToName[sym] || "";
450
+ if (!name) return null;
451
+ return {
452
+ key: {
453
+ name,
454
+ ctrl,
455
+ meta: alt,
456
+ shift,
457
+ paste: false,
458
+ sequence: buffer.slice(0, m[0].length),
459
+ kittyProtocol: true
460
+ },
461
+ length: m[0].length
462
+ };
463
+ }
464
+ const csiUPrefix = new RegExp(
465
+ `^${ESC2}\\[(\\d+)(?::\\d+)*(?:;(\\d+)(?::\\d+)*)?(?:;\\d+)?([u~])`
466
+ );
467
+ m = buffer.match(csiUPrefix);
468
+ if (m) {
469
+ const keyCode = parseInt(m[1], 10);
470
+ let modifiers = m[2] ? parseInt(m[2], 10) : KITTY_MODIFIER_BASE;
471
+ if (modifiers >= KITTY_MODIFIER_EVENT_TYPES_OFFSET) {
472
+ modifiers -= KITTY_MODIFIER_EVENT_TYPES_OFFSET;
473
+ }
474
+ const modifierBits = modifiers - KITTY_MODIFIER_BASE;
475
+ const shift = (modifierBits & MODIFIER_SHIFT_BIT) === MODIFIER_SHIFT_BIT;
476
+ const alt = (modifierBits & MODIFIER_ALT_BIT) === MODIFIER_ALT_BIT;
477
+ const ctrl = (modifierBits & MODIFIER_CTRL_BIT) === MODIFIER_CTRL_BIT;
478
+ const terminator = m[3];
479
+ if (terminator === "~") {
480
+ let name2 = null;
481
+ switch (keyCode) {
482
+ case 1:
483
+ name2 = "home";
484
+ break;
485
+ case 2:
486
+ name2 = "insert";
487
+ break;
488
+ case 3:
489
+ name2 = "delete";
490
+ break;
491
+ case 4:
492
+ name2 = "end";
493
+ break;
494
+ case 5:
495
+ name2 = "pageup";
496
+ break;
497
+ case 6:
498
+ name2 = "pagedown";
499
+ break;
500
+ default:
501
+ break;
502
+ }
503
+ if (name2) {
504
+ return {
505
+ key: {
506
+ name: name2,
507
+ ctrl,
508
+ meta: alt,
509
+ shift,
510
+ paste: false,
511
+ sequence: buffer.slice(0, m[0].length),
512
+ kittyProtocol: true
513
+ },
514
+ length: m[0].length
515
+ };
516
+ }
517
+ }
518
+ const kittyKeyCodeToName = {
519
+ [CHAR_CODE_ESC]: "escape",
520
+ [KITTY_KEYCODE_TAB]: "tab",
521
+ [KITTY_KEYCODE_BACKSPACE]: "backspace",
522
+ [KITTY_KEYCODE_ENTER]: "return",
523
+ [KITTY_KEYCODE_NUMPAD_ENTER]: "return"
524
+ };
525
+ const name = kittyKeyCodeToName[keyCode];
526
+ if (name) {
527
+ return {
528
+ key: {
529
+ name,
530
+ ctrl,
531
+ meta: alt,
532
+ shift,
533
+ paste: false,
534
+ sequence: buffer.slice(0, m[0].length),
535
+ kittyProtocol: true
536
+ },
537
+ length: m[0].length
538
+ };
539
+ }
540
+ if (!ctrl) {
541
+ const keypadChar = KITTY_KEYPAD_PRINTABLE_KEYCODE_TO_CHAR[keyCode];
542
+ if (keypadChar) {
543
+ return {
544
+ key: {
545
+ name: keypadChar,
546
+ ctrl: false,
547
+ meta: alt,
548
+ shift,
549
+ paste: false,
550
+ sequence: keypadChar,
551
+ kittyProtocol: true
552
+ },
553
+ length: m[0].length
554
+ };
555
+ }
556
+ }
557
+ const keypadName = KITTY_KEYPAD_FUNCTIONAL_KEYCODE_TO_NAME[keyCode];
558
+ if (keypadName) {
559
+ return {
560
+ key: {
561
+ name: keypadName,
562
+ ctrl,
563
+ meta: alt,
564
+ shift,
565
+ paste: false,
566
+ sequence: buffer.slice(0, m[0].length),
567
+ kittyProtocol: true
568
+ },
569
+ length: m[0].length
570
+ };
571
+ }
572
+ if (terminator === "u" && !ctrl && keyCode >= 32 && keyCode !== 127 && keyCode <= 1114111 && !(keyCode >= 57344 && keyCode <= 63743)) {
573
+ return {
574
+ key: {
575
+ ...createPrintableKey(String.fromCodePoint(keyCode)),
576
+ meta: alt,
577
+ shift
578
+ },
579
+ length: m[0].length
580
+ };
581
+ }
582
+ if (ctrl && keyCode >= "a".charCodeAt(0) && keyCode <= "z".charCodeAt(0)) {
583
+ const letter = String.fromCharCode(keyCode);
584
+ return {
585
+ key: {
586
+ name: letter,
587
+ ctrl: true,
588
+ meta: alt,
589
+ shift,
590
+ paste: false,
591
+ sequence: buffer.slice(0, m[0].length),
592
+ kittyProtocol: true
593
+ },
594
+ length: m[0].length
595
+ };
596
+ }
597
+ }
598
+ const legacyFuncKey = new RegExp(`^${ESC2}\\[([ABCDHF])`);
599
+ m = buffer.match(legacyFuncKey);
600
+ if (m) {
601
+ const sym = m[1];
602
+ const nameMap = {
603
+ A: "up",
604
+ B: "down",
605
+ C: "right",
606
+ D: "left",
607
+ H: "home",
608
+ F: "end"
609
+ };
610
+ const name = nameMap[sym];
611
+ return {
612
+ key: {
613
+ name,
614
+ ctrl: false,
615
+ meta: false,
616
+ shift: false,
617
+ paste: false,
618
+ sequence: buffer.slice(0, m[0].length),
619
+ kittyProtocol: true
620
+ },
621
+ length: m[0].length
622
+ };
623
+ }
624
+ return null;
625
+ }, "parseKittyPrefix");
626
+ const getCompleteCsiSequenceLength = /* @__PURE__ */ __name((buffer) => {
627
+ if (!buffer.startsWith(`${ESC2}[`)) {
628
+ return null;
629
+ }
630
+ for (let i = 2; i < buffer.length; i++) {
631
+ const code = buffer.charCodeAt(i);
632
+ if (code >= 64 && code <= 126) {
633
+ return i + 1;
634
+ }
635
+ if (code < 32 || code > 63) {
636
+ return 0;
637
+ }
638
+ }
639
+ return null;
640
+ }, "getCompleteCsiSequenceLength");
641
+ const parsePlainTextPrefix = /* @__PURE__ */ __name((buffer) => {
642
+ if (!buffer || buffer.startsWith(ESC2)) {
643
+ return null;
644
+ }
645
+ const [char] = Array.from(buffer);
646
+ if (!char) {
647
+ return null;
648
+ }
649
+ return {
650
+ key: createPrintableKey(char),
651
+ length: char.length
652
+ };
653
+ }, "parsePlainTextPrefix");
654
+ const broadcast = /* @__PURE__ */ __name((key) => {
655
+ noteInteraction();
656
+ for (const handler of subscribers) {
657
+ handler(key);
658
+ }
659
+ }, "broadcast");
660
+ const TERMINAL_RESPONSE_RE = /^\x1b\[[?>][\d;]*[uc]$/;
661
+ const handleKeypress = /* @__PURE__ */ __name(async (_, key) => {
662
+ if (TERMINAL_RESPONSE_RE.test(key.sequence)) {
663
+ return;
664
+ }
665
+ if (key.sequence === FOCUS_IN || key.sequence === FOCUS_OUT) {
666
+ return;
667
+ }
668
+ if (isPaste) {
669
+ resetSgrMouse();
670
+ } else if (swallowingSgrMouse) {
671
+ if (key.ctrl && key.name === "c") {
672
+ resetSgrMouse();
673
+ } else if (key.name === "paste-start") {
674
+ resetSgrMouse();
675
+ } else {
676
+ sgrMouseBuffer += key.sequence;
677
+ if (key.name === "m" || key.sequence === "M") {
678
+ swallowingSgrMouse = false;
679
+ if (sgrMouseTimeout) {
680
+ clearTimeout(sgrMouseTimeout);
681
+ sgrMouseTimeout = null;
682
+ }
683
+ const parsed = parseSGRMouseEvent(sgrMouseBuffer);
684
+ if (parsed) {
685
+ for (const handler of mouseSubscribers) {
686
+ handler(parsed.event);
687
+ }
688
+ }
689
+ sgrMouseBuffer = "";
690
+ } else if (sgrMouseBuffer.length >= MAX_SGR_MOUSE_SEQUENCE_LENGTH) {
691
+ resetSgrMouse();
692
+ }
693
+ return;
694
+ }
695
+ }
696
+ if (!isPaste && key.sequence === `${ESC2}[<`) {
697
+ swallowingSgrMouse = true;
698
+ sgrMouseBuffer = `${ESC2}[<`;
699
+ if (sgrMouseTimeout) {
700
+ clearTimeout(sgrMouseTimeout);
701
+ }
702
+ sgrMouseTimeout = setTimeout(() => {
703
+ swallowingSgrMouse = false;
704
+ sgrMouseBuffer = "";
705
+ sgrMouseTimeout = null;
706
+ }, KITTY_SEQUENCE_TIMEOUT_MS);
707
+ return;
708
+ }
709
+ const isCtrlCKey = key.ctrl && key.name === "c" || key.sequence === `${ESC2}${KITTY_CTRL_C}`;
710
+ if (isCtrlCKey) {
711
+ if (isPaste || pasteBuffer.length > 0) {
712
+ isPaste = false;
713
+ pasteBuffer = Buffer.alloc(0);
714
+ pasteAlreadyFlushed = true;
715
+ clearPasteIdleTimeout();
716
+ }
717
+ if (kittySequenceBufferRef.current && debugKeystrokeLogging) {
718
+ debugLogger.debug(
719
+ "[DEBUG] Kitty buffer cleared on Ctrl+C:",
720
+ kittySequenceBufferRef.current
721
+ );
722
+ }
723
+ clearKittyBufferAndTimeout();
724
+ if (key.sequence === `${ESC2}${KITTY_CTRL_C}`) {
725
+ broadcast({
726
+ name: "c",
727
+ ctrl: true,
728
+ meta: false,
729
+ shift: false,
730
+ paste: false,
731
+ sequence: key.sequence,
732
+ kittyProtocol: true
733
+ });
734
+ } else {
735
+ broadcast(key);
736
+ }
737
+ return;
738
+ }
739
+ if (key.name === "paste-start") {
740
+ isPaste = true;
741
+ pasteAlreadyFlushed = false;
742
+ startPasteIdleTimeout();
743
+ return;
744
+ }
745
+ if (key.name === "paste-end") {
746
+ clearPasteIdleTimeout();
747
+ if (pasteAlreadyFlushed) {
748
+ pasteAlreadyFlushed = false;
749
+ isPaste = false;
750
+ pasteBuffer = Buffer.alloc(0);
751
+ return;
752
+ }
753
+ isPaste = false;
754
+ if (pasteBuffer.toString().length > 0) {
755
+ broadcast({
756
+ name: "",
757
+ ctrl: false,
758
+ meta: false,
759
+ shift: false,
760
+ paste: true,
761
+ sequence: pasteBuffer.toString()
762
+ });
763
+ } else {
764
+ let clipboardImageUnavailable = false;
765
+ const hasImage = await clipboardHasImage(() => {
766
+ clipboardImageUnavailable = true;
767
+ });
768
+ broadcast({
769
+ name: "",
770
+ ctrl: false,
771
+ meta: false,
772
+ shift: false,
773
+ paste: true,
774
+ pasteImage: hasImage,
775
+ clipboardImageUnavailable,
776
+ sequence: pasteBuffer.toString()
777
+ });
778
+ }
779
+ pasteBuffer = Buffer.alloc(0);
780
+ return;
781
+ }
782
+ if (isPaste) {
783
+ pasteBuffer = Buffer.concat([pasteBuffer, Buffer.from(key.sequence)]);
784
+ startPasteIdleTimeout();
785
+ return;
786
+ }
787
+ if (key.name === "return" && waitingForEnterAfterBackslash) {
788
+ if (backslashTimeout) {
789
+ clearTimeout(backslashTimeout);
790
+ backslashTimeout = null;
791
+ }
792
+ waitingForEnterAfterBackslash = false;
793
+ broadcast({
794
+ ...key,
795
+ shift: true,
796
+ sequence: "\r"
797
+ // Corrected escaping for newline
798
+ });
799
+ return;
800
+ }
801
+ if (key.sequence === "\\" && !key.name) {
802
+ waitingForEnterAfterBackslash = true;
803
+ backslashTimeout = setTimeout(() => {
804
+ waitingForEnterAfterBackslash = false;
805
+ backslashTimeout = null;
806
+ broadcast(key);
807
+ }, BACKSLASH_ENTER_DETECTION_WINDOW_MS);
808
+ return;
809
+ }
810
+ if (waitingForEnterAfterBackslash && key.name !== "return") {
811
+ if (backslashTimeout) {
812
+ clearTimeout(backslashTimeout);
813
+ backslashTimeout = null;
814
+ }
815
+ waitingForEnterAfterBackslash = false;
816
+ broadcast({
817
+ name: "",
818
+ sequence: "\\",
819
+ ctrl: false,
820
+ meta: false,
821
+ shift: false,
822
+ paste: false
823
+ });
824
+ }
825
+ if (["up", "down", "left", "right"].includes(key.name)) {
826
+ broadcast(key);
827
+ return;
828
+ }
829
+ if (kittyProtocolEnabled) {
830
+ if (kittySequenceBufferRef.current || key.sequence.startsWith(`${ESC2}[`) && !key.sequence.startsWith(PASTE_MODE_PREFIX) && !key.sequence.startsWith(PASTE_MODE_SUFFIX) && !key.sequence.startsWith(FOCUS_IN) && !key.sequence.startsWith(FOCUS_OUT)) {
831
+ updateKittyBuffer(kittySequenceBufferRef.current + key.sequence);
832
+ startKittyTimeout();
833
+ if (debugKeystrokeLogging) {
834
+ debugLogger.debug(
835
+ "[DEBUG] Kitty buffer accumulating:",
836
+ kittySequenceBufferRef.current
837
+ );
838
+ }
839
+ let bufferedInputHandled = false;
840
+ while (kittySequenceBufferRef.current) {
841
+ const parsed = parseKittyPrefix(kittySequenceBufferRef.current);
842
+ if (parsed) {
843
+ if (debugKeystrokeLogging) {
844
+ const parsedSequence = kittySequenceBufferRef.current.slice(
845
+ 0,
846
+ parsed.length
847
+ );
848
+ if (kittySequenceBufferRef.current.length > parsed.length) {
849
+ debugLogger.debug(
850
+ "[DEBUG] Kitty sequence parsed successfully (prefix):",
851
+ parsedSequence
852
+ );
853
+ } else {
854
+ debugLogger.debug(
855
+ "[DEBUG] Kitty sequence parsed successfully:",
856
+ parsedSequence
857
+ );
858
+ }
859
+ }
860
+ updateKittyBuffer(
861
+ kittySequenceBufferRef.current.slice(parsed.length)
862
+ );
863
+ if (!kittySequenceBufferRef.current) {
864
+ clearKittyTimeout();
865
+ }
866
+ broadcast(parsed.key);
867
+ bufferedInputHandled = true;
868
+ continue;
869
+ }
870
+ const completeUnsupportedCsiLength = getCompleteCsiSequenceLength(
871
+ kittySequenceBufferRef.current
872
+ );
873
+ if (completeUnsupportedCsiLength) {
874
+ if (debugKeystrokeLogging) {
875
+ debugLogger.debug(
876
+ "[DEBUG] Dropping unsupported complete CSI sequence:",
877
+ kittySequenceBufferRef.current.slice(
878
+ 0,
879
+ completeUnsupportedCsiLength
880
+ )
881
+ );
882
+ }
883
+ updateKittyBuffer(
884
+ kittySequenceBufferRef.current.slice(
885
+ completeUnsupportedCsiLength
886
+ )
887
+ );
888
+ if (!kittySequenceBufferRef.current) {
889
+ clearKittyTimeout();
890
+ }
891
+ bufferedInputHandled = true;
892
+ continue;
893
+ }
894
+ const plainTextPrefix = parsePlainTextPrefix(
895
+ kittySequenceBufferRef.current
896
+ );
897
+ if (plainTextPrefix) {
898
+ if (debugKeystrokeLogging) {
899
+ debugLogger.debug(
900
+ "[DEBUG] Recovered plain text after kitty sequence:",
901
+ plainTextPrefix.key.sequence
902
+ );
903
+ }
904
+ updateKittyBuffer(
905
+ kittySequenceBufferRef.current.slice(plainTextPrefix.length)
906
+ );
907
+ if (!kittySequenceBufferRef.current) {
908
+ clearKittyTimeout();
909
+ }
910
+ broadcast(plainTextPrefix.key);
911
+ bufferedInputHandled = true;
912
+ continue;
913
+ }
914
+ const nextStart = kittySequenceBufferRef.current.indexOf(
915
+ `${ESC2}[`,
916
+ 1
917
+ );
918
+ if (nextStart > 0) {
919
+ if (debugKeystrokeLogging) {
920
+ debugLogger.debug(
921
+ "[DEBUG] Skipping incomplete/invalid CSI prefix:",
922
+ kittySequenceBufferRef.current.slice(0, nextStart)
923
+ );
924
+ }
925
+ updateKittyBuffer(
926
+ kittySequenceBufferRef.current.slice(nextStart)
927
+ );
928
+ if (!kittySequenceBufferRef.current) {
929
+ clearKittyTimeout();
930
+ }
931
+ bufferedInputHandled = true;
932
+ continue;
933
+ }
934
+ break;
935
+ }
936
+ if (bufferedInputHandled) return;
937
+ if (config?.getDebugMode() || debugKeystrokeLogging) {
938
+ const codes = Array.from(kittySequenceBufferRef.current).map(
939
+ (ch) => ch.charCodeAt(0)
940
+ );
941
+ debugLogger.warn("Kitty sequence buffer has char codes:", codes);
942
+ }
943
+ if (kittySequenceBufferRef.current.length > MAX_KITTY_SEQUENCE_LENGTH) {
944
+ if (debugKeystrokeLogging) {
945
+ debugLogger.debug(
946
+ "[DEBUG] Kitty buffer overflow, clearing:",
947
+ kittySequenceBufferRef.current
948
+ );
949
+ }
950
+ if (config) {
951
+ const event = new KittySequenceOverflowEvent(
952
+ kittySequenceBufferRef.current.length,
953
+ kittySequenceBufferRef.current
954
+ );
955
+ logKittySequenceOverflow(config, event);
956
+ }
957
+ clearKittyBufferAndTimeout();
958
+ } else {
959
+ return;
960
+ }
961
+ }
962
+ }
963
+ if (key.name === "return" && key.sequence === `${ESC2}\r`) {
964
+ key.meta = true;
965
+ }
966
+ if (process.platform === "darwin" && !isPaste && key.sequence === OPTION_T_COMPOSED_GLYPH) {
967
+ key.name = "t";
968
+ key.meta = true;
969
+ }
970
+ broadcast({ ...key, paste: isPaste });
971
+ }, "handleKeypress");
972
+ const clearRawFlushTimeout = /* @__PURE__ */ __name(() => {
973
+ if (rawFlushTimeout) {
974
+ clearTimeout(rawFlushTimeout);
975
+ rawFlushTimeout = null;
976
+ }
977
+ }, "clearRawFlushTimeout");
978
+ const createPasteKeyEvent = /* @__PURE__ */ __name((name = "", sequence = "") => ({
979
+ name,
980
+ ctrl: false,
981
+ meta: false,
982
+ shift: false,
983
+ paste: false,
984
+ sequence
985
+ }), "createPasteKeyEvent");
986
+ const shouldFlushRawDataAsPaste = /* @__PURE__ */ __name((data) => {
987
+ const hasReturn = data.includes(13);
988
+ const hasEmbeddedTab = data.length > 1 && data.includes(9);
989
+ const isSingleReturn = data.length <= 2 && hasReturn;
990
+ return !isSingleReturn && (hasReturn || hasEmbeddedTab);
991
+ }, "shouldFlushRawDataAsPaste");
992
+ const flushRawBuffer = /* @__PURE__ */ __name(() => {
993
+ if (!rawDataBuffer.length) {
994
+ return;
995
+ }
996
+ const pasteModePrefixBuffer = Buffer.from(PASTE_MODE_PREFIX);
997
+ const pasteModeSuffixBuffer = Buffer.from(PASTE_MODE_SUFFIX);
998
+ const data = rawDataBuffer;
999
+ let cursor = 0;
1000
+ while (cursor < data.length) {
1001
+ const prefixPos = data.indexOf(pasteModePrefixBuffer, cursor);
1002
+ const suffixPos = data.indexOf(pasteModeSuffixBuffer, cursor);
1003
+ const hasPrefix = prefixPos !== -1 && prefixPos + pasteModePrefixBuffer.length <= data.length;
1004
+ const hasSuffix = suffixPos !== -1 && suffixPos + pasteModeSuffixBuffer.length <= data.length;
1005
+ let markerPos = -1;
1006
+ let markerLength = 0;
1007
+ let markerType = null;
1008
+ if (hasPrefix && (!hasSuffix || prefixPos < suffixPos)) {
1009
+ markerPos = prefixPos;
1010
+ markerLength = pasteModePrefixBuffer.length;
1011
+ markerType = "prefix";
1012
+ } else if (hasSuffix) {
1013
+ markerPos = suffixPos;
1014
+ markerLength = pasteModeSuffixBuffer.length;
1015
+ markerType = "suffix";
1016
+ }
1017
+ if (markerPos === -1) {
1018
+ break;
1019
+ }
1020
+ const nextData = data.slice(cursor, markerPos);
1021
+ if (nextData.length > 0) {
1022
+ keypressStream.write(nextData);
1023
+ }
1024
+ if (markerType === "prefix") {
1025
+ handleKeypress(void 0, createPasteKeyEvent("paste-start"));
1026
+ } else if (markerType === "suffix") {
1027
+ handleKeypress(void 0, createPasteKeyEvent("paste-end"));
1028
+ }
1029
+ cursor = markerPos + markerLength;
1030
+ }
1031
+ rawDataBuffer = data.slice(cursor);
1032
+ if (rawDataBuffer.length === 0) {
1033
+ return;
1034
+ }
1035
+ if (isPaste || !shouldFlushRawDataAsPaste(rawDataBuffer)) {
1036
+ keypressStream.write(rawDataBuffer);
1037
+ } else {
1038
+ handleKeypress(void 0, createPasteKeyEvent("paste-start"));
1039
+ keypressStream.write(rawDataBuffer);
1040
+ handleKeypress(void 0, createPasteKeyEvent("paste-end"));
1041
+ }
1042
+ rawDataBuffer = Buffer.alloc(0);
1043
+ clearRawFlushTimeout();
1044
+ }, "flushRawBuffer");
1045
+ const handleRawKeypress = /* @__PURE__ */ __name((_data) => {
1046
+ const data = Buffer.isBuffer(_data) ? _data : Buffer.from(_data, "utf8");
1047
+ rawDataBuffer = Buffer.concat([rawDataBuffer, data]);
1048
+ clearRawFlushTimeout();
1049
+ const isReturnChar = rawDataBuffer.length <= 2 && rawDataBuffer.includes(13);
1050
+ if (isReturnChar) {
1051
+ rawFlushTimeout = setTimeout(flushRawBuffer, 100);
1052
+ } else {
1053
+ flushRawBuffer();
1054
+ }
1055
+ }, "handleRawKeypress");
1056
+ let rl;
1057
+ if (usePassthrough) {
1058
+ rl = readline.createInterface({
1059
+ input: keypressStream,
1060
+ escapeCodeTimeout: 0
1061
+ });
1062
+ readline.emitKeypressEvents(keypressStream, rl);
1063
+ keypressStream.on("keypress", handleKeypress);
1064
+ stdin.on("data", handleRawKeypress);
1065
+ } else {
1066
+ rl = readline.createInterface({ input: stdin, escapeCodeTimeout: 0 });
1067
+ readline.emitKeypressEvents(stdin, rl);
1068
+ stdin.on("keypress", handleKeypress);
1069
+ }
1070
+ let replayPending = false;
1071
+ if (capturedInput.length > 0) {
1072
+ debugLogger.debug(
1073
+ `Replaying ${capturedInput.length} bytes of captured input`
1074
+ );
1075
+ replayPending = true;
1076
+ setImmediate(() => {
1077
+ if (!replayPending) return;
1078
+ try {
1079
+ stdin.emit("data", capturedInput);
1080
+ } catch (err) {
1081
+ debugLogger.error("Failed to replay captured input:", err);
1082
+ }
1083
+ });
1084
+ }
1085
+ return () => {
1086
+ replayPending = false;
1087
+ if (usePassthrough) {
1088
+ keypressStream.removeListener("keypress", handleKeypress);
1089
+ stdin.removeListener("data", handleRawKeypress);
1090
+ } else {
1091
+ stdin.removeListener("keypress", handleKeypress);
1092
+ }
1093
+ rl.close();
1094
+ setRawMode(false);
1095
+ if (backslashTimeout) {
1096
+ clearTimeout(backslashTimeout);
1097
+ backslashTimeout = null;
1098
+ }
1099
+ clearKittyBufferAndTimeout();
1100
+ clearPasteIdleTimeout();
1101
+ resetSgrMouse();
1102
+ if (rawFlushTimeout) {
1103
+ clearTimeout(rawFlushTimeout);
1104
+ rawFlushTimeout = null;
1105
+ }
1106
+ if (isPaste) {
1107
+ broadcast({
1108
+ name: "",
1109
+ ctrl: false,
1110
+ meta: false,
1111
+ shift: false,
1112
+ paste: true,
1113
+ sequence: pasteBuffer.toString()
1114
+ });
1115
+ pasteBuffer = Buffer.alloc(0);
1116
+ }
1117
+ };
1118
+ }, [
1119
+ stdin,
1120
+ setRawMode,
1121
+ kittyProtocolEnabled,
1122
+ debugKeystrokeLogging,
1123
+ pasteWorkaround,
1124
+ config,
1125
+ subscribers,
1126
+ mouseSubscribers,
1127
+ initialCapturedInput
1128
+ ]);
1129
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1130
+ KeypressContext.Provider,
1131
+ {
1132
+ value: {
1133
+ subscribe,
1134
+ unsubscribe,
1135
+ subscribeMouse,
1136
+ unsubscribeMouse,
1137
+ pasteWorkaround
1138
+ },
1139
+ children
1140
+ }
1141
+ );
1142
+ }
1143
+ __name(KeypressProvider, "KeypressProvider");
1144
+
1145
+ // packages/cli/src/ui/hooks/useKeypress.ts
1146
+ function useKeypress(onKeypress, { isActive }) {
1147
+ const { subscribe, unsubscribe } = useKeypressContext();
1148
+ const onKeypressRef = (0, import_react3.useRef)(onKeypress);
1149
+ onKeypressRef.current = onKeypress;
1150
+ const handleKeypress = (0, import_react3.useCallback)((key) => {
1151
+ onKeypressRef.current(key);
1152
+ }, []);
1153
+ (0, import_react3.useEffect)(() => {
1154
+ if (!isActive) {
1155
+ return;
1156
+ }
1157
+ subscribe(handleKeypress);
1158
+ return () => {
1159
+ unsubscribe(handleKeypress);
1160
+ };
1161
+ }, [isActive, handleKeypress, subscribe, unsubscribe]);
1162
+ }
1163
+ __name(useKeypress, "useKeypress");
1164
+
1165
+ export {
1166
+ enableMouseEvents,
1167
+ disableMouseEvents,
1168
+ useKeypress,
1169
+ useFocus,
1170
+ useKeypressContext,
1171
+ KeypressProvider
1172
+ };
1173
+ /**
1174
+ * @license
1175
+ * Copyright 2025 Qwen
1176
+ * SPDX-License-Identifier: Apache-2.0
1177
+ *
1178
+ * Adapted from gemini-cli (Google LLC, Apache-2.0):
1179
+ * packages/cli/src/ui/utils/mouse.ts + utils/input.ts. Trimmed to the
1180
+ * subset the virtual-viewport scroll path needs (SGR + X11 parsing,
1181
+ * incomplete-sequence detection, enable/disable helpers).
1182
+ */
1183
+ /**
1184
+ * @license
1185
+ * Copyright 2025 Google LLC
1186
+ * SPDX-License-Identifier: Apache-2.0
1187
+ */