code-squad-cli 1.1.2 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dist/config.d.ts +35 -0
  2. package/dist/config.js +46 -0
  3. package/dist/fileUtils.d.ts +7 -0
  4. package/dist/fileUtils.js +50 -0
  5. package/dist/flip/routes/git.d.ts +17 -0
  6. package/dist/flip/routes/git.js +148 -0
  7. package/dist/flip-ui/dist/assets/abap-BdImnpbu.js +1 -0
  8. package/dist/flip-ui/dist/assets/actionscript-3-CfeIJUat.js +1 -0
  9. package/dist/flip-ui/dist/assets/ada-bCR0ucgS.js +1 -0
  10. package/dist/flip-ui/dist/assets/andromeeda-C-Jbm3Hp.js +1 -0
  11. package/dist/flip-ui/dist/assets/angular-html-CU67Zn6k.js +1 -0
  12. package/dist/flip-ui/dist/assets/angular-ts-BwZT4LLn.js +1 -0
  13. package/dist/flip-ui/dist/assets/apache-Pmp26Uib.js +1 -0
  14. package/dist/flip-ui/dist/assets/apex-D8_7TLub.js +1 -0
  15. package/dist/flip-ui/dist/assets/apl-dKokRX4l.js +1 -0
  16. package/dist/flip-ui/dist/assets/applescript-Co6uUVPk.js +1 -0
  17. package/dist/flip-ui/dist/assets/ara-BRHolxvo.js +1 -0
  18. package/dist/flip-ui/dist/assets/asciidoc-Dv7Oe6Be.js +1 -0
  19. package/dist/flip-ui/dist/assets/asm-D_Q5rh1f.js +1 -0
  20. package/dist/flip-ui/dist/assets/astro-CbQHKStN.js +1 -0
  21. package/dist/flip-ui/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  22. package/dist/flip-ui/dist/assets/awk-DMzUqQB5.js +1 -0
  23. package/dist/flip-ui/dist/assets/ayu-dark-CmMr59Fi.js +1 -0
  24. package/dist/flip-ui/dist/assets/ballerina-BFfxhgS-.js +1 -0
  25. package/dist/flip-ui/dist/assets/bat-BkioyH1T.js +1 -0
  26. package/dist/flip-ui/dist/assets/beancount-k_qm7-4y.js +1 -0
  27. package/dist/flip-ui/dist/assets/berry-uYugtg8r.js +1 -0
  28. package/dist/flip-ui/dist/assets/bibtex-CHM0blh-.js +1 -0
  29. package/dist/flip-ui/dist/assets/bicep-Bmn6On1c.js +1 -0
  30. package/dist/flip-ui/dist/assets/blade-D4QpJJKB.js +1 -0
  31. package/dist/flip-ui/dist/assets/bsl-BO_Y6i37.js +1 -0
  32. package/dist/flip-ui/dist/assets/c-BIGW1oBm.js +1 -0
  33. package/dist/flip-ui/dist/assets/c3-VCDPK7BO.js +1 -0
  34. package/dist/flip-ui/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  35. package/dist/flip-ui/dist/assets/cairo-KRGpt6FW.js +1 -0
  36. package/dist/flip-ui/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  37. package/dist/flip-ui/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  38. package/dist/flip-ui/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  39. package/dist/flip-ui/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  40. package/dist/flip-ui/dist/assets/clarity-D53aC0YG.js +1 -0
  41. package/dist/flip-ui/dist/assets/clojure-P80f7IUj.js +1 -0
  42. package/dist/flip-ui/dist/assets/cmake-D1j8_8rp.js +1 -0
  43. package/dist/flip-ui/dist/assets/cobol-nwyudZeR.js +1 -0
  44. package/dist/flip-ui/dist/assets/codeowners-Bp6g37R7.js +1 -0
  45. package/dist/flip-ui/dist/assets/codeql-DsOJ9woJ.js +1 -0
  46. package/dist/flip-ui/dist/assets/coffee-Ch7k5sss.js +1 -0
  47. package/dist/flip-ui/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  48. package/dist/flip-ui/dist/assets/coq-DkFqJrB1.js +1 -0
  49. package/dist/flip-ui/dist/assets/cpp-CofmeUqb.js +1 -0
  50. package/dist/flip-ui/dist/assets/crystal-tKQVLTB8.js +1 -0
  51. package/dist/flip-ui/dist/assets/csharp-K5feNrxe.js +1 -0
  52. package/dist/flip-ui/dist/assets/css-DPfMkruS.js +1 -0
  53. package/dist/flip-ui/dist/assets/csv-fuZLfV_i.js +1 -0
  54. package/dist/flip-ui/dist/assets/cue-D82EKSYY.js +1 -0
  55. package/dist/flip-ui/dist/assets/cypher-COkxafJQ.js +1 -0
  56. package/dist/flip-ui/dist/assets/d-85-TOEBH.js +1 -0
  57. package/dist/flip-ui/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  58. package/dist/flip-ui/dist/assets/dart-CF10PKvl.js +1 -0
  59. package/dist/flip-ui/dist/assets/dax-CEL-wOlO.js +1 -0
  60. package/dist/flip-ui/dist/assets/desktop-BmXAJ9_W.js +1 -0
  61. package/dist/flip-ui/dist/assets/diff-D97Zzqfu.js +1 -0
  62. package/dist/flip-ui/dist/assets/docker-BcOcwvcX.js +1 -0
  63. package/dist/flip-ui/dist/assets/dotenv-Da5cRb03.js +1 -0
  64. package/dist/flip-ui/dist/assets/dracula-BzJJZx-M.js +1 -0
  65. package/dist/flip-ui/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  66. package/dist/flip-ui/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  67. package/dist/flip-ui/dist/assets/edge-BkV0erSs.js +1 -0
  68. package/dist/flip-ui/dist/assets/elixir-CDX3lj18.js +1 -0
  69. package/dist/flip-ui/dist/assets/elm-DbKCFpqz.js +1 -0
  70. package/dist/flip-ui/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
  71. package/dist/flip-ui/dist/assets/erb-BOJIQeun.js +1 -0
  72. package/dist/flip-ui/dist/assets/erlang-DsQrWhSR.js +1 -0
  73. package/dist/flip-ui/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  74. package/dist/flip-ui/dist/assets/everforest-light-C8M2exoo.js +1 -0
  75. package/dist/flip-ui/dist/assets/fennel-BYunw83y.js +1 -0
  76. package/dist/flip-ui/dist/assets/fish-BvzEVeQv.js +1 -0
  77. package/dist/flip-ui/dist/assets/fluent-C4IJs8-o.js +1 -0
  78. package/dist/flip-ui/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  79. package/dist/flip-ui/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  80. package/dist/flip-ui/dist/assets/fsharp-CXgrBDvD.js +1 -0
  81. package/dist/flip-ui/dist/assets/gdresource-B7Tvp0Sc.js +1 -0
  82. package/dist/flip-ui/dist/assets/gdscript-DTMYz4Jt.js +1 -0
  83. package/dist/flip-ui/dist/assets/gdshader-DkwncUOv.js +1 -0
  84. package/dist/flip-ui/dist/assets/genie-D0YGMca9.js +1 -0
  85. package/dist/flip-ui/dist/assets/gherkin-DyxjwDmM.js +1 -0
  86. package/dist/flip-ui/dist/assets/git-commit-F4YmCXRG.js +1 -0
  87. package/dist/flip-ui/dist/assets/git-rebase-r7XF79zn.js +1 -0
  88. package/dist/flip-ui/dist/assets/github-dark-DHJKELXO.js +1 -0
  89. package/dist/flip-ui/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  90. package/dist/flip-ui/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  91. package/dist/flip-ui/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  92. package/dist/flip-ui/dist/assets/github-light-DAi9KRSo.js +1 -0
  93. package/dist/flip-ui/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  94. package/dist/flip-ui/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  95. package/dist/flip-ui/dist/assets/gleam-BspZqrRM.js +1 -0
  96. package/dist/flip-ui/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
  97. package/dist/flip-ui/dist/assets/glimmer-ts-U6CK756n.js +1 -0
  98. package/dist/flip-ui/dist/assets/glsl-DplSGwfg.js +1 -0
  99. package/dist/flip-ui/dist/assets/gn-n2N0HUVH.js +1 -0
  100. package/dist/flip-ui/dist/assets/gnuplot-DdkO51Og.js +1 -0
  101. package/dist/flip-ui/dist/assets/go-Dn2_MT6a.js +1 -0
  102. package/dist/flip-ui/dist/assets/graphql-ChdNCCLP.js +1 -0
  103. package/dist/flip-ui/dist/assets/groovy-gcz8RCvz.js +1 -0
  104. package/dist/flip-ui/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  105. package/dist/flip-ui/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  106. package/dist/flip-ui/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  107. package/dist/flip-ui/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  108. package/dist/flip-ui/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  109. package/dist/flip-ui/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  110. package/dist/flip-ui/dist/assets/hack-CaT9iCJl.js +1 -0
  111. package/dist/flip-ui/dist/assets/haml-B8DHNrY2.js +1 -0
  112. package/dist/flip-ui/dist/assets/handlebars-BL8al0AC.js +1 -0
  113. package/dist/flip-ui/dist/assets/haskell-Df6bDoY_.js +1 -0
  114. package/dist/flip-ui/dist/assets/haxe-CzTSHFRz.js +1 -0
  115. package/dist/flip-ui/dist/assets/hcl-BWvSN4gD.js +1 -0
  116. package/dist/flip-ui/dist/assets/hjson-D5-asLiD.js +1 -0
  117. package/dist/flip-ui/dist/assets/hlsl-D3lLCCz7.js +1 -0
  118. package/dist/flip-ui/dist/assets/houston-DnULxvSX.js +1 -0
  119. package/dist/flip-ui/dist/assets/html-GMplVEZG.js +1 -0
  120. package/dist/flip-ui/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
  121. package/dist/flip-ui/dist/assets/http-jrhK8wxY.js +1 -0
  122. package/dist/flip-ui/dist/assets/hurl-irOxFIW8.js +1 -0
  123. package/dist/flip-ui/dist/assets/hxml-Bvhsp5Yf.js +1 -0
  124. package/dist/flip-ui/dist/assets/hy-DFXneXwc.js +1 -0
  125. package/dist/flip-ui/dist/assets/imba-DGztddWO.js +1 -0
  126. package/dist/flip-ui/dist/assets/index-BqoCRrTA.css +1 -0
  127. package/dist/flip-ui/dist/assets/index-CgNq-jV5.js +69 -0
  128. package/dist/flip-ui/dist/assets/ini-BEwlwnbL.js +1 -0
  129. package/dist/flip-ui/dist/assets/java-CylS5w8V.js +1 -0
  130. package/dist/flip-ui/dist/assets/javascript-wDzz0qaB.js +1 -0
  131. package/dist/flip-ui/dist/assets/jinja-4LBKfQ-Z.js +1 -0
  132. package/dist/flip-ui/dist/assets/jison-wvAkD_A8.js +1 -0
  133. package/dist/flip-ui/dist/assets/json-Cp-IABpG.js +1 -0
  134. package/dist/flip-ui/dist/assets/json5-C9tS-k6U.js +1 -0
  135. package/dist/flip-ui/dist/assets/jsonc-Des-eS-w.js +1 -0
  136. package/dist/flip-ui/dist/assets/jsonl-DcaNXYhu.js +1 -0
  137. package/dist/flip-ui/dist/assets/jsonnet-DFQXde-d.js +1 -0
  138. package/dist/flip-ui/dist/assets/jssm-C2t-YnRu.js +1 -0
  139. package/dist/flip-ui/dist/assets/jsx-g9-lgVsj.js +1 -0
  140. package/dist/flip-ui/dist/assets/julia-CxzCAyBv.js +1 -0
  141. package/dist/flip-ui/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  142. package/dist/flip-ui/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  143. package/dist/flip-ui/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
  144. package/dist/flip-ui/dist/assets/kdl-DV7GczEv.js +1 -0
  145. package/dist/flip-ui/dist/assets/kotlin-BdnUsdx6.js +1 -0
  146. package/dist/flip-ui/dist/assets/kusto-DZf3V79B.js +1 -0
  147. package/dist/flip-ui/dist/assets/laserwave-DUszq2jm.js +1 -0
  148. package/dist/flip-ui/dist/assets/latex-B4uzh10-.js +1 -0
  149. package/dist/flip-ui/dist/assets/lean-BZvkOJ9d.js +1 -0
  150. package/dist/flip-ui/dist/assets/less-B1dDrJ26.js +1 -0
  151. package/dist/flip-ui/dist/assets/light-plus-B7mTdjB0.js +1 -0
  152. package/dist/flip-ui/dist/assets/liquid-DYVedYrR.js +1 -0
  153. package/dist/flip-ui/dist/assets/llvm-BtvRca6l.js +1 -0
  154. package/dist/flip-ui/dist/assets/log-2UxHyX5q.js +1 -0
  155. package/dist/flip-ui/dist/assets/logo-BtOb2qkB.js +1 -0
  156. package/dist/flip-ui/dist/assets/lua-BbnMAYS6.js +1 -0
  157. package/dist/flip-ui/dist/assets/luau-C-HG3fhB.js +1 -0
  158. package/dist/flip-ui/dist/assets/make-CHLpvVh8.js +1 -0
  159. package/dist/flip-ui/dist/assets/markdown-Cvjx9yec.js +1 -0
  160. package/dist/flip-ui/dist/assets/marko-DZsq8hO1.js +1 -0
  161. package/dist/flip-ui/dist/assets/material-theme-D5KoaKCx.js +1 -0
  162. package/dist/flip-ui/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  163. package/dist/flip-ui/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  164. package/dist/flip-ui/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  165. package/dist/flip-ui/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  166. package/dist/flip-ui/dist/assets/matlab-D7o27uSR.js +1 -0
  167. package/dist/flip-ui/dist/assets/mdc-DUICxH0z.js +1 -0
  168. package/dist/flip-ui/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  169. package/dist/flip-ui/dist/assets/mermaid-mWjccvbQ.js +1 -0
  170. package/dist/flip-ui/dist/assets/min-dark-CafNBF8u.js +1 -0
  171. package/dist/flip-ui/dist/assets/min-light-CTRr51gU.js +1 -0
  172. package/dist/flip-ui/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  173. package/dist/flip-ui/dist/assets/mojo-B93PlW-d.js +1 -0
  174. package/dist/flip-ui/dist/assets/monokai-D4h5O-jR.js +1 -0
  175. package/dist/flip-ui/dist/assets/moonbit-Ba13S78F.js +1 -0
  176. package/dist/flip-ui/dist/assets/move-Bu9oaDYs.js +1 -0
  177. package/dist/flip-ui/dist/assets/narrat-DRg8JJMk.js +1 -0
  178. package/dist/flip-ui/dist/assets/nextflow-BrzmwbiE.js +1 -0
  179. package/dist/flip-ui/dist/assets/nginx-DknmC5AR.js +1 -0
  180. package/dist/flip-ui/dist/assets/night-owl-C39BiMTA.js +1 -0
  181. package/dist/flip-ui/dist/assets/nim-CVrawwO9.js +1 -0
  182. package/dist/flip-ui/dist/assets/nix-CwoSXNpI.js +1 -0
  183. package/dist/flip-ui/dist/assets/nord-Ddv68eIx.js +1 -0
  184. package/dist/flip-ui/dist/assets/nushell-C-sUppwS.js +1 -0
  185. package/dist/flip-ui/dist/assets/objective-c-DXmwc3jG.js +1 -0
  186. package/dist/flip-ui/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  187. package/dist/flip-ui/dist/assets/ocaml-C0hk2d4L.js +1 -0
  188. package/dist/flip-ui/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  189. package/dist/flip-ui/dist/assets/one-light-PoHY5YXO.js +1 -0
  190. package/dist/flip-ui/dist/assets/openscad-C4EeE6gA.js +1 -0
  191. package/dist/flip-ui/dist/assets/pascal-D93ZcfNL.js +1 -0
  192. package/dist/flip-ui/dist/assets/perl-C0TMdlhV.js +1 -0
  193. package/dist/flip-ui/dist/assets/php-CDn_0X-4.js +1 -0
  194. package/dist/flip-ui/dist/assets/pkl-u5AG7uiY.js +1 -0
  195. package/dist/flip-ui/dist/assets/plastic-3e1v2bzS.js +1 -0
  196. package/dist/flip-ui/dist/assets/plsql-ChMvpjG-.js +1 -0
  197. package/dist/flip-ui/dist/assets/po-BTJTHyun.js +1 -0
  198. package/dist/flip-ui/dist/assets/poimandres-CS3Unz2-.js +1 -0
  199. package/dist/flip-ui/dist/assets/polar-C0HS_06l.js +1 -0
  200. package/dist/flip-ui/dist/assets/postcss-CXtECtnM.js +1 -0
  201. package/dist/flip-ui/dist/assets/powerquery-CEu0bR-o.js +1 -0
  202. package/dist/flip-ui/dist/assets/powershell-Dpen1YoG.js +1 -0
  203. package/dist/flip-ui/dist/assets/prisma-Dd19v3D-.js +1 -0
  204. package/dist/flip-ui/dist/assets/prolog-CbFg5uaA.js +1 -0
  205. package/dist/flip-ui/dist/assets/proto-C7zT0LnQ.js +1 -0
  206. package/dist/flip-ui/dist/assets/pug-CGlum2m_.js +1 -0
  207. package/dist/flip-ui/dist/assets/puppet-BMWR74SV.js +1 -0
  208. package/dist/flip-ui/dist/assets/purescript-CklMAg4u.js +1 -0
  209. package/dist/flip-ui/dist/assets/python-B6aJPvgy.js +1 -0
  210. package/dist/flip-ui/dist/assets/qml-3beO22l8.js +1 -0
  211. package/dist/flip-ui/dist/assets/qmldir-C8lEn-DE.js +1 -0
  212. package/dist/flip-ui/dist/assets/qss-IeuSbFQv.js +1 -0
  213. package/dist/flip-ui/dist/assets/r-Dspwwk_N.js +1 -0
  214. package/dist/flip-ui/dist/assets/racket-BqYA7rlc.js +1 -0
  215. package/dist/flip-ui/dist/assets/raku-DXvB9xmW.js +1 -0
  216. package/dist/flip-ui/dist/assets/razor-C1TweQQi.js +1 -0
  217. package/dist/flip-ui/dist/assets/red-bN70gL4F.js +1 -0
  218. package/dist/flip-ui/dist/assets/reg-C-SQnVFl.js +1 -0
  219. package/dist/flip-ui/dist/assets/regexp-CDVJQ6XC.js +1 -0
  220. package/dist/flip-ui/dist/assets/rel-C3B-1QV4.js +1 -0
  221. package/dist/flip-ui/dist/assets/riscv-BM1_JUlF.js +1 -0
  222. package/dist/flip-ui/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  223. package/dist/flip-ui/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  224. package/dist/flip-ui/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
  225. package/dist/flip-ui/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  226. package/dist/flip-ui/dist/assets/rst-B0xPkSld.js +1 -0
  227. package/dist/flip-ui/dist/assets/ruby-BvKwtOVI.js +1 -0
  228. package/dist/flip-ui/dist/assets/rust-B1yitclQ.js +1 -0
  229. package/dist/flip-ui/dist/assets/sas-cz2c8ADy.js +1 -0
  230. package/dist/flip-ui/dist/assets/sass-Cj5Yp3dK.js +1 -0
  231. package/dist/flip-ui/dist/assets/scala-C151Ov-r.js +1 -0
  232. package/dist/flip-ui/dist/assets/scheme-C98Dy4si.js +1 -0
  233. package/dist/flip-ui/dist/assets/scss-OYdSNvt2.js +1 -0
  234. package/dist/flip-ui/dist/assets/sdbl-DVxCFoDh.js +1 -0
  235. package/dist/flip-ui/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  236. package/dist/flip-ui/dist/assets/shellscript-Yzrsuije.js +1 -0
  237. package/dist/flip-ui/dist/assets/shellsession-BADoaaVG.js +1 -0
  238. package/dist/flip-ui/dist/assets/slack-dark-BthQWCQV.js +1 -0
  239. package/dist/flip-ui/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  240. package/dist/flip-ui/dist/assets/smalltalk-BERRCDM3.js +1 -0
  241. package/dist/flip-ui/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  242. package/dist/flip-ui/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
  243. package/dist/flip-ui/dist/assets/solarized-light-L9t79GZl.js +1 -0
  244. package/dist/flip-ui/dist/assets/solidity-rGO070M0.js +1 -0
  245. package/dist/flip-ui/dist/assets/soy-Brmx7dQM.js +1 -0
  246. package/dist/flip-ui/dist/assets/sparql-rVzFXLq3.js +1 -0
  247. package/dist/flip-ui/dist/assets/splunk-BtCnVYZw.js +1 -0
  248. package/dist/flip-ui/dist/assets/sql-BLtJtn59.js +1 -0
  249. package/dist/flip-ui/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  250. package/dist/flip-ui/dist/assets/stata-BH5u7GGu.js +1 -0
  251. package/dist/flip-ui/dist/assets/stylus-BEDo0Tqx.js +1 -0
  252. package/dist/flip-ui/dist/assets/svelte-zxCyuUbr.js +1 -0
  253. package/dist/flip-ui/dist/assets/swift-Dg5xB15N.js +1 -0
  254. package/dist/flip-ui/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  255. package/dist/flip-ui/dist/assets/system-verilog-CnnmHF94.js +1 -0
  256. package/dist/flip-ui/dist/assets/systemd-4A_iFExJ.js +1 -0
  257. package/dist/flip-ui/dist/assets/talonscript-CkByrt1z.js +1 -0
  258. package/dist/flip-ui/dist/assets/tasl-QIJgUcNo.js +1 -0
  259. package/dist/flip-ui/dist/assets/tcl-dwOrl1Do.js +1 -0
  260. package/dist/flip-ui/dist/assets/templ-W15q3VgB.js +1 -0
  261. package/dist/flip-ui/dist/assets/terraform-BETggiCN.js +1 -0
  262. package/dist/flip-ui/dist/assets/tex-CvyZ59Mk.js +1 -0
  263. package/dist/flip-ui/dist/assets/tokyo-night-hegEt444.js +1 -0
  264. package/dist/flip-ui/dist/assets/toml-vGWfd6FD.js +1 -0
  265. package/dist/flip-ui/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
  266. package/dist/flip-ui/dist/assets/tsv-B_m7g4N7.js +1 -0
  267. package/dist/flip-ui/dist/assets/tsx-COt5Ahok.js +1 -0
  268. package/dist/flip-ui/dist/assets/turtle-BsS91CYL.js +1 -0
  269. package/dist/flip-ui/dist/assets/twig-CO9l9SDP.js +1 -0
  270. package/dist/flip-ui/dist/assets/typescript-BPQ3VLAy.js +1 -0
  271. package/dist/flip-ui/dist/assets/typespec-BGHnOYBU.js +1 -0
  272. package/dist/flip-ui/dist/assets/typst-DHCkPAjA.js +1 -0
  273. package/dist/flip-ui/dist/assets/v-BcVCzyr7.js +1 -0
  274. package/dist/flip-ui/dist/assets/vala-CsfeWuGM.js +1 -0
  275. package/dist/flip-ui/dist/assets/vb-D17OF-Vu.js +1 -0
  276. package/dist/flip-ui/dist/assets/verilog-BQ8w6xss.js +1 -0
  277. package/dist/flip-ui/dist/assets/vesper-DU1UobuO.js +1 -0
  278. package/dist/flip-ui/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  279. package/dist/flip-ui/dist/assets/viml-CJc9bBzg.js +1 -0
  280. package/dist/flip-ui/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  281. package/dist/flip-ui/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  282. package/dist/flip-ui/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  283. package/dist/flip-ui/dist/assets/vue-DN_0RTcg.js +1 -0
  284. package/dist/flip-ui/dist/assets/vue-html-AaS7Mt5G.js +1 -0
  285. package/dist/flip-ui/dist/assets/vue-vine-CQOfvN7w.js +1 -0
  286. package/dist/flip-ui/dist/assets/vyper-CDx5xZoG.js +1 -0
  287. package/dist/flip-ui/dist/assets/wasm-CG6Dc4jp.js +1 -0
  288. package/dist/flip-ui/dist/assets/wasm-MzD3tlZU.js +1 -0
  289. package/dist/flip-ui/dist/assets/wenyan-BV7otONQ.js +1 -0
  290. package/dist/flip-ui/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  291. package/dist/flip-ui/dist/assets/wikitext-BhOHFoWU.js +1 -0
  292. package/dist/flip-ui/dist/assets/wit-5i3qLPDT.js +1 -0
  293. package/dist/flip-ui/dist/assets/wolfram-lXgVvXCa.js +1 -0
  294. package/dist/flip-ui/dist/assets/xml-sdJ4AIDG.js +1 -0
  295. package/dist/flip-ui/dist/assets/xsl-CtQFsRM5.js +1 -0
  296. package/dist/flip-ui/dist/assets/yaml-Buea-lGh.js +1 -0
  297. package/dist/flip-ui/dist/assets/zenscript-DVFEvuxE.js +1 -0
  298. package/dist/flip-ui/dist/assets/zig-VOosw3JB.js +1 -0
  299. package/dist/flip-ui/dist/index.html +2 -2
  300. package/dist/index.js +315 -82
  301. package/dist/ui/prompts.js +7 -8
  302. package/package.json +3 -2
  303. package/dist/flip-ui/dist/assets/index-2_ZJL2eQ.css +0 -10
  304. package/dist/flip-ui/dist/assets/index-BGxWXtBJ.js +0 -66
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // dist/index.js
4
- import * as path7 from "path";
5
- import * as fs7 from "fs";
6
- import * as os3 from "os";
4
+ import * as path10 from "path";
5
+ import * as fs10 from "fs";
6
+ import * as os4 from "os";
7
7
  import * as crypto from "crypto";
8
8
  import chalk2 from "chalk";
9
9
 
@@ -12,28 +12,28 @@ import { exec } from "child_process";
12
12
  import * as fs from "fs";
13
13
  var GitAdapter = class {
14
14
  async isGitRepository(workspaceRoot) {
15
- return new Promise((resolve) => {
15
+ return new Promise((resolve2) => {
16
16
  exec(`cd "${workspaceRoot}" && git rev-parse --git-dir`, { maxBuffer: 1024 * 1024 }, (error) => {
17
- resolve(!error);
17
+ resolve2(!error);
18
18
  });
19
19
  });
20
20
  }
21
21
  async getCurrentBranch(workspaceRoot) {
22
- return new Promise((resolve, reject) => {
22
+ return new Promise((resolve2, reject) => {
23
23
  exec(`cd "${workspaceRoot}" && git rev-parse --abbrev-ref HEAD`, { maxBuffer: 1024 * 1024 }, (error, stdout) => {
24
24
  if (error) {
25
25
  reject(error);
26
26
  return;
27
27
  }
28
- resolve(stdout.trim());
28
+ resolve2(stdout.trim());
29
29
  });
30
30
  });
31
31
  }
32
32
  async listWorktrees(workspaceRoot) {
33
- return new Promise((resolve) => {
33
+ return new Promise((resolve2) => {
34
34
  exec(`cd "${workspaceRoot}" && git worktree list --porcelain`, { maxBuffer: 1024 * 1024 }, (error, stdout) => {
35
35
  if (error) {
36
- resolve([]);
36
+ resolve2([]);
37
37
  return;
38
38
  }
39
39
  const worktrees = [];
@@ -51,21 +51,21 @@ var GitAdapter = class {
51
51
  const headMatch = headLine.match(/^HEAD (.+)$/);
52
52
  const branchMatch = branchLine?.match(/^branch refs\/heads\/(.+)$/);
53
53
  if (pathMatch && headMatch) {
54
- const path8 = pathMatch[1];
54
+ const path11 = pathMatch[1];
55
55
  const head = headMatch[1];
56
56
  const branch = branchMatch ? branchMatch[1] : "HEAD";
57
- if (path8 !== workspaceRoot) {
58
- worktrees.push({ path: path8, branch, head });
57
+ if (path11 !== workspaceRoot) {
58
+ worktrees.push({ path: path11, branch, head });
59
59
  }
60
60
  }
61
61
  i += 3;
62
62
  }
63
- resolve(worktrees);
63
+ resolve2(worktrees);
64
64
  });
65
65
  });
66
66
  }
67
67
  async createWorktree(worktreePath, branch, workspaceRoot) {
68
- return new Promise((resolve, reject) => {
68
+ return new Promise((resolve2, reject) => {
69
69
  const parentDir = worktreePath.substring(0, worktreePath.lastIndexOf("/"));
70
70
  const mkdirCmd = parentDir ? `mkdir -p "${parentDir}" && ` : "";
71
71
  exec(`cd "${workspaceRoot}" && ${mkdirCmd}git worktree add "${worktreePath}" -b "${branch}"`, { maxBuffer: 1024 * 1024 }, (error) => {
@@ -73,60 +73,60 @@ var GitAdapter = class {
73
73
  reject(error);
74
74
  return;
75
75
  }
76
- resolve();
76
+ resolve2();
77
77
  });
78
78
  });
79
79
  }
80
80
  async removeWorktree(worktreePath, workspaceRoot, force = false) {
81
- return new Promise((resolve, reject) => {
81
+ return new Promise((resolve2, reject) => {
82
82
  const forceFlag = force ? " --force" : "";
83
83
  exec(`cd "${workspaceRoot}" && git worktree remove "${worktreePath}"${forceFlag}`, { maxBuffer: 1024 * 1024 }, (error) => {
84
84
  if (error) {
85
85
  reject(new Error(`Failed to remove worktree: ${error.message}`));
86
86
  return;
87
87
  }
88
- resolve();
88
+ resolve2();
89
89
  });
90
90
  });
91
91
  }
92
92
  async deleteBranch(branchName, workspaceRoot, force = false) {
93
- return new Promise((resolve, reject) => {
93
+ return new Promise((resolve2, reject) => {
94
94
  const deleteFlag = force ? "-D" : "-d";
95
95
  exec(`cd "${workspaceRoot}" && git branch ${deleteFlag} "${branchName}"`, { maxBuffer: 1024 * 1024 }, (error) => {
96
96
  if (error) {
97
97
  reject(new Error(`Failed to delete branch: ${error.message}`));
98
98
  return;
99
99
  }
100
- resolve();
100
+ resolve2();
101
101
  });
102
102
  });
103
103
  }
104
- async isValidWorktree(path8, workspaceRoot) {
104
+ async isValidWorktree(path11, workspaceRoot) {
105
105
  try {
106
- await fs.promises.access(path8, fs.constants.R_OK);
106
+ await fs.promises.access(path11, fs.constants.R_OK);
107
107
  } catch {
108
108
  return false;
109
109
  }
110
- const isGitRepo = await new Promise((resolve) => {
111
- exec(`cd "${path8}" && git rev-parse --git-dir`, { maxBuffer: 1024 * 1024 }, (error) => {
112
- resolve(!error);
110
+ const isGitRepo = await new Promise((resolve2) => {
111
+ exec(`cd "${path11}" && git rev-parse --git-dir`, { maxBuffer: 1024 * 1024 }, (error) => {
112
+ resolve2(!error);
113
113
  });
114
114
  });
115
115
  if (!isGitRepo) {
116
116
  return false;
117
117
  }
118
118
  const worktrees = await this.listWorktrees(workspaceRoot);
119
- return worktrees.some((wt) => wt.path === path8);
119
+ return worktrees.some((wt) => wt.path === path11);
120
120
  }
121
121
  async getWorktreeBranch(worktreePath) {
122
- return new Promise((resolve, reject) => {
122
+ return new Promise((resolve2, reject) => {
123
123
  exec(`cd "${worktreePath}" && git rev-parse --abbrev-ref HEAD`, { maxBuffer: 1024 * 1024 }, (error, stdout) => {
124
124
  if (error) {
125
125
  reject(new Error(`Failed to get branch name: ${error.message}`));
126
126
  return;
127
127
  }
128
128
  const branch = stdout.trim();
129
- resolve(branch);
129
+ resolve2(branch);
130
130
  });
131
131
  });
132
132
  }
@@ -157,12 +157,12 @@ var cancelableInput = createPrompt((config, done) => {
157
157
  setValue(value.slice(0, -1));
158
158
  setError(null);
159
159
  } else if (key.ctrl || key.name === "tab" || key.name === "up" || key.name === "down") {
160
- } else if (key.name && key.name.length === 1) {
161
- setValue(value + key.name);
162
- setError(null);
163
- } else if (key.name === "space") {
164
- setValue(value + " ");
165
- setError(null);
160
+ } else {
161
+ const seq = key.sequence;
162
+ if (seq && seq.length === 1 && seq >= " ") {
163
+ setValue(value + seq);
164
+ setError(null);
165
+ }
166
166
  }
167
167
  });
168
168
  const errorMsg = error ? chalk.red(`
@@ -582,6 +582,8 @@ router2.get("/", (req, res) => {
582
582
  // dist/flip/routes/git.js
583
583
  import { Router as Router3 } from "express";
584
584
  import { execSync } from "child_process";
585
+ import * as fs4 from "fs";
586
+ import * as path4 from "path";
585
587
  var router3 = Router3();
586
588
  function parseGitStatus(output) {
587
589
  const files = [];
@@ -613,6 +615,75 @@ function parseGitStatus(output) {
613
615
  }
614
616
  return files;
615
617
  }
618
+ function parseUnifiedDiff(diffOutput) {
619
+ const hunks = [];
620
+ const lines = diffOutput.split("\n");
621
+ let currentHunk = null;
622
+ let oldLineNum = 0;
623
+ let newLineNum = 0;
624
+ for (const line of lines) {
625
+ const hunkMatch = line.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
626
+ if (hunkMatch) {
627
+ if (currentHunk) {
628
+ hunks.push(currentHunk);
629
+ }
630
+ currentHunk = {
631
+ oldStart: parseInt(hunkMatch[1], 10),
632
+ oldLines: parseInt(hunkMatch[2] || "1", 10),
633
+ newStart: parseInt(hunkMatch[3], 10),
634
+ newLines: parseInt(hunkMatch[4] || "1", 10),
635
+ lines: []
636
+ };
637
+ oldLineNum = currentHunk.oldStart;
638
+ newLineNum = currentHunk.newStart;
639
+ continue;
640
+ }
641
+ if (!currentHunk)
642
+ continue;
643
+ if (line.startsWith("diff ") || line.startsWith("index ") || line.startsWith("--- ") || line.startsWith("+++ ") || line.startsWith("\\")) {
644
+ continue;
645
+ }
646
+ if (line.startsWith("+")) {
647
+ currentHunk.lines.push({
648
+ type: "add",
649
+ content: line.substring(1),
650
+ newLineNumber: newLineNum++
651
+ });
652
+ } else if (line.startsWith("-")) {
653
+ currentHunk.lines.push({
654
+ type: "delete",
655
+ content: line.substring(1),
656
+ oldLineNumber: oldLineNum++
657
+ });
658
+ } else if (line.startsWith(" ") || line === "") {
659
+ currentHunk.lines.push({
660
+ type: "context",
661
+ content: line.startsWith(" ") ? line.substring(1) : line,
662
+ oldLineNumber: oldLineNum++,
663
+ newLineNumber: newLineNum++
664
+ });
665
+ }
666
+ }
667
+ if (currentHunk) {
668
+ hunks.push(currentHunk);
669
+ }
670
+ return hunks;
671
+ }
672
+ function createAddedFileDiff(content) {
673
+ const lines = content.split("\n");
674
+ const diffLines = lines.map((line, idx) => ({
675
+ type: "add",
676
+ content: line,
677
+ newLineNumber: idx + 1
678
+ }));
679
+ return [{
680
+ oldStart: 0,
681
+ oldLines: 0,
682
+ newStart: 1,
683
+ newLines: lines.length,
684
+ lines: diffLines
685
+ }];
686
+ }
616
687
  router3.get("/status", (req, res) => {
617
688
  const state = req.app.locals.state;
618
689
  let isGitRepo = false;
@@ -647,6 +718,66 @@ router3.get("/status", (req, res) => {
647
718
  };
648
719
  res.json(response);
649
720
  });
721
+ router3.get("/diff", (req, res) => {
722
+ const state = req.app.locals.state;
723
+ const relativePath = req.query.path;
724
+ if (!relativePath) {
725
+ res.status(400).json({ error: "Missing path parameter" });
726
+ return;
727
+ }
728
+ const fullPath = path4.join(state.cwd, relativePath);
729
+ let fileStatus = "modified";
730
+ try {
731
+ const statusOutput = execSync(`git status --porcelain -- "${relativePath}"`, {
732
+ cwd: state.cwd,
733
+ encoding: "utf-8"
734
+ });
735
+ if (statusOutput.startsWith("??")) {
736
+ fileStatus = "untracked";
737
+ } else if (statusOutput.includes("A")) {
738
+ fileStatus = "added";
739
+ } else if (statusOutput.includes("D")) {
740
+ fileStatus = "deleted";
741
+ }
742
+ } catch {
743
+ }
744
+ if (fileStatus === "untracked") {
745
+ try {
746
+ const content = fs4.readFileSync(fullPath, "utf-8");
747
+ const diff = {
748
+ hunks: createAddedFileDiff(content),
749
+ status: "untracked"
750
+ };
751
+ res.json(diff);
752
+ return;
753
+ } catch {
754
+ res.status(404).json({ error: "File not found" });
755
+ return;
756
+ }
757
+ }
758
+ try {
759
+ const diffOutput = execSync(`git diff --no-color -- "${relativePath}"`, {
760
+ cwd: state.cwd,
761
+ encoding: "utf-8"
762
+ });
763
+ if (!diffOutput.trim()) {
764
+ const diff2 = {
765
+ hunks: [],
766
+ status: fileStatus
767
+ };
768
+ res.json(diff2);
769
+ return;
770
+ }
771
+ const hunks = parseUnifiedDiff(diffOutput);
772
+ const diff = {
773
+ hunks,
774
+ status: fileStatus
775
+ };
776
+ res.json(diff);
777
+ } catch (err) {
778
+ res.status(500).json({ error: "Failed to get diff" });
779
+ }
780
+ });
650
781
 
651
782
  // dist/flip/routes/submit.js
652
783
  import { Router as Router4 } from "express";
@@ -675,8 +806,8 @@ async function copyToClipboard(text) {
675
806
 
676
807
  // dist/flip/output/autopaste.js
677
808
  import { execSync as execSync2 } from "child_process";
678
- import fs4 from "fs";
679
- import path4 from "path";
809
+ import fs5 from "fs";
810
+ import path5 from "path";
680
811
  import os from "os";
681
812
  async function schedulePaste(sessionId) {
682
813
  if (process.platform !== "darwin") {
@@ -686,10 +817,10 @@ async function schedulePaste(sessionId) {
686
817
  await pasteToOriginalSession(sessionId);
687
818
  }
688
819
  async function pasteToOriginalSession(sessionId) {
689
- const sessionFile = path4.join(os.tmpdir(), `flip-view-session-${sessionId}`);
820
+ const sessionFile = path5.join(os.tmpdir(), `flip-view-session-${sessionId}`);
690
821
  let itermSessionId;
691
822
  try {
692
- itermSessionId = fs4.readFileSync(sessionFile, "utf-8").trim();
823
+ itermSessionId = fs5.readFileSync(sessionFile, "utf-8").trim();
693
824
  } catch {
694
825
  }
695
826
  let script;
@@ -717,7 +848,7 @@ async function pasteToOriginalSession(sessionId) {
717
848
  end tell
718
849
  `;
719
850
  try {
720
- fs4.unlinkSync(sessionFile);
851
+ fs5.unlinkSync(sessionFile);
721
852
  } catch {
722
853
  }
723
854
  } else {
@@ -787,19 +918,19 @@ router5.post("/", (req, res) => {
787
918
  // dist/flip/routes/static.js
788
919
  import { Router as Router6 } from "express";
789
920
  import express from "express";
790
- import path5 from "path";
921
+ import path6 from "path";
791
922
  import { fileURLToPath } from "url";
792
- import fs5 from "fs";
923
+ import fs6 from "fs";
793
924
  function createStaticRouter() {
794
925
  const router6 = Router6();
795
926
  const __filename = fileURLToPath(import.meta.url);
796
- const __dirname = path5.dirname(__filename);
797
- const distPath = path5.resolve(__dirname, "flip-ui/dist");
798
- if (fs5.existsSync(distPath)) {
927
+ const __dirname = path6.dirname(__filename);
928
+ const distPath = path6.resolve(__dirname, "flip-ui/dist");
929
+ if (fs6.existsSync(distPath)) {
799
930
  router6.use(express.static(distPath));
800
931
  router6.get("*", (req, res) => {
801
- const indexPath = path5.join(distPath, "index.html");
802
- if (fs5.existsSync(indexPath)) {
932
+ const indexPath = path6.join(distPath, "index.html");
933
+ if (fs6.existsSync(indexPath)) {
803
934
  res.sendFile(indexPath);
804
935
  } else {
805
936
  res.status(404).send("Not Found");
@@ -822,7 +953,7 @@ var Server = class {
822
953
  this.port = port;
823
954
  }
824
955
  async run() {
825
- return new Promise((resolve) => {
956
+ return new Promise((resolve2) => {
826
957
  const state = {
827
958
  cwd: this.cwd,
828
959
  resolve: null
@@ -840,7 +971,7 @@ var Server = class {
840
971
  const server = http.createServer(app);
841
972
  state.resolve = (output) => {
842
973
  server.close();
843
- resolve(output);
974
+ resolve2(output);
844
975
  };
845
976
  server.listen(this.port, "127.0.0.1", () => {
846
977
  console.log(`Server running at http://localhost:${this.port}`);
@@ -849,23 +980,23 @@ var Server = class {
849
980
  }
850
981
  };
851
982
  async function findFreePort(preferred) {
852
- return new Promise((resolve) => {
983
+ return new Promise((resolve2) => {
853
984
  const server = net.createServer();
854
985
  server.listen(preferred, "127.0.0.1", () => {
855
986
  server.close(() => {
856
- resolve(preferred);
987
+ resolve2(preferred);
857
988
  });
858
989
  });
859
990
  server.on("error", () => {
860
- findFreePort(preferred + 1).then(resolve);
991
+ findFreePort(preferred + 1).then(resolve2);
861
992
  });
862
993
  });
863
994
  }
864
995
 
865
996
  // dist/flip/index.js
866
997
  import open from "open";
867
- import path6 from "path";
868
- import fs6 from "fs";
998
+ import path7 from "path";
999
+ import fs7 from "fs";
869
1000
  import os2 from "os";
870
1001
  import { execSync as execSync3 } from "child_process";
871
1002
  import { confirm as confirm2 } from "@inquirer/prompts";
@@ -917,7 +1048,7 @@ async function runFlip(args) {
917
1048
  } else {
918
1049
  command = "oneshot";
919
1050
  }
920
- const cwd = pathArg ? path6.resolve(pathArg) : process.cwd();
1051
+ const cwd = pathArg ? path7.resolve(pathArg) : process.cwd();
921
1052
  switch (command) {
922
1053
  case "setup": {
923
1054
  await setupHotkey();
@@ -989,9 +1120,9 @@ function printUsage() {
989
1120
  console.error(" --session <uuid> Session ID for paste-back tracking");
990
1121
  }
991
1122
  async function setupHotkey() {
992
- const configDir = path6.join(os2.homedir(), ".config", "flip");
993
- const applescriptPath = path6.join(configDir, "flip.applescript");
994
- const shPath = path6.join(configDir, "flip.sh");
1123
+ const configDir = path7.join(os2.homedir(), ".config", "flip");
1124
+ const applescriptPath = path7.join(configDir, "flip.applescript");
1125
+ const shPath = path7.join(configDir, "flip.sh");
995
1126
  let nodePath;
996
1127
  try {
997
1128
  nodePath = execSync3("which node", { encoding: "utf-8" }).trim();
@@ -999,7 +1130,7 @@ async function setupHotkey() {
999
1130
  nodePath = "/usr/local/bin/node";
1000
1131
  }
1001
1132
  const csqPath = new URL(import.meta.url).pathname;
1002
- fs6.mkdirSync(configDir, { recursive: true });
1133
+ fs7.mkdirSync(configDir, { recursive: true });
1003
1134
  const applescriptContent = `#!/usr/bin/osascript
1004
1135
 
1005
1136
  -- flip hotkey script
@@ -1016,13 +1147,13 @@ tell application "iTerm2"
1016
1147
  end tell
1017
1148
 
1018
1149
  return ""`;
1019
- fs6.writeFileSync(applescriptPath, applescriptContent);
1020
- fs6.chmodSync(applescriptPath, "755");
1150
+ fs7.writeFileSync(applescriptPath, applescriptContent);
1151
+ fs7.chmodSync(applescriptPath, "755");
1021
1152
  const shContent = `#!/bin/bash
1022
1153
  osascript ${applescriptPath} > /dev/null 2>&1
1023
1154
  `;
1024
- fs6.writeFileSync(shPath, shContent);
1025
- fs6.chmodSync(shPath, "755");
1155
+ fs7.writeFileSync(shPath, shContent);
1156
+ fs7.chmodSync(shPath, "755");
1026
1157
  console.log("");
1027
1158
  console.log("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510");
1028
1159
  console.log("\u2502 Flip Hotkey Setup Wizard \u2502");
@@ -1086,6 +1217,85 @@ osascript ${applescriptPath} > /dev/null 2>&1
1086
1217
  console.log("");
1087
1218
  }
1088
1219
 
1220
+ // dist/config.js
1221
+ import * as fs8 from "fs";
1222
+ import * as os3 from "os";
1223
+ import * as path8 from "path";
1224
+ var GLOBAL_CONFIG_PATH = path8.join(os3.homedir(), ".code-squad", "config.json");
1225
+ async function loadGlobalConfig() {
1226
+ try {
1227
+ const content = await fs8.promises.readFile(GLOBAL_CONFIG_PATH, "utf-8");
1228
+ return JSON.parse(content);
1229
+ } catch (error) {
1230
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
1231
+ return {};
1232
+ }
1233
+ console.warn(`[Code Squad] Warning: Could not load global config at ${GLOBAL_CONFIG_PATH}.`, error);
1234
+ return {};
1235
+ }
1236
+ }
1237
+ async function loadConfig(workspaceRoot) {
1238
+ const globalConfig = await loadGlobalConfig();
1239
+ const normalizedPath = path8.resolve(workspaceRoot);
1240
+ const projectConfig = globalConfig.projects?.[normalizedPath] ?? {};
1241
+ const defaults = globalConfig.defaults ?? {};
1242
+ return {
1243
+ ...defaults,
1244
+ ...projectConfig,
1245
+ worktreeCopyPatterns: [
1246
+ .../* @__PURE__ */ new Set([
1247
+ ...defaults.worktreeCopyPatterns ?? [],
1248
+ ...projectConfig.worktreeCopyPatterns ?? []
1249
+ ])
1250
+ ]
1251
+ };
1252
+ }
1253
+ function getWorktreeCopyPatterns(config) {
1254
+ return config.worktreeCopyPatterns ?? [];
1255
+ }
1256
+
1257
+ // dist/fileUtils.js
1258
+ import * as fs9 from "fs";
1259
+ import * as path9 from "path";
1260
+ import fg from "fast-glob";
1261
+ async function copyFilesWithPatterns(sourceRoot, destRoot, patterns) {
1262
+ const copied = [];
1263
+ const failed = [];
1264
+ if (patterns.length === 0) {
1265
+ return { copied, failed };
1266
+ }
1267
+ for (const pattern of patterns) {
1268
+ try {
1269
+ const files = await fg(pattern, {
1270
+ cwd: sourceRoot,
1271
+ absolute: true,
1272
+ onlyFiles: true,
1273
+ dot: true
1274
+ // .env 같은 dotfile도 매칭
1275
+ });
1276
+ for (const absolutePath of files) {
1277
+ try {
1278
+ await copySingleFile(absolutePath, sourceRoot, destRoot);
1279
+ const relativePath = path9.relative(sourceRoot, absolutePath);
1280
+ copied.push(relativePath);
1281
+ } catch {
1282
+ const relativePath = path9.relative(sourceRoot, absolutePath);
1283
+ failed.push(relativePath);
1284
+ }
1285
+ }
1286
+ } catch {
1287
+ }
1288
+ }
1289
+ return { copied, failed };
1290
+ }
1291
+ async function copySingleFile(absolutePath, sourceRoot, destRoot) {
1292
+ const relativePath = path9.relative(sourceRoot, absolutePath);
1293
+ const destPath = path9.join(destRoot, relativePath);
1294
+ const destDir = path9.dirname(destPath);
1295
+ await fs9.promises.mkdir(destDir, { recursive: true });
1296
+ await fs9.promises.copyFile(absolutePath, destPath);
1297
+ }
1298
+
1089
1299
  // dist/index.js
1090
1300
  process.on("SIGINT", () => {
1091
1301
  process.exit(130);
@@ -1135,13 +1345,13 @@ function getProjectHash(workspaceRoot) {
1135
1345
  }
1136
1346
  function getSessionsPath(workspaceRoot) {
1137
1347
  const projectHash = getProjectHash(workspaceRoot);
1138
- const projectName = path7.basename(workspaceRoot);
1139
- return path7.join(os3.homedir(), ".code-squad", "sessions", `${projectName}-${projectHash}.json`);
1348
+ const projectName = path10.basename(workspaceRoot);
1349
+ return path10.join(os4.homedir(), ".code-squad", "sessions", `${projectName}-${projectHash}.json`);
1140
1350
  }
1141
1351
  async function loadLocalThreads(workspaceRoot) {
1142
1352
  const sessionsPath = getSessionsPath(workspaceRoot);
1143
1353
  try {
1144
- const content = await fs7.promises.readFile(sessionsPath, "utf-8");
1354
+ const content = await fs10.promises.readFile(sessionsPath, "utf-8");
1145
1355
  const data = JSON.parse(content);
1146
1356
  return data.localThreads || [];
1147
1357
  } catch {
@@ -1150,9 +1360,9 @@ async function loadLocalThreads(workspaceRoot) {
1150
1360
  }
1151
1361
  async function saveLocalThreads(workspaceRoot, threads) {
1152
1362
  const sessionsPath = getSessionsPath(workspaceRoot);
1153
- const dir = path7.dirname(sessionsPath);
1154
- await fs7.promises.mkdir(dir, { recursive: true });
1155
- await fs7.promises.writeFile(sessionsPath, JSON.stringify({ localThreads: threads }, null, 2));
1363
+ const dir = path10.dirname(sessionsPath);
1364
+ await fs10.promises.mkdir(dir, { recursive: true });
1365
+ await fs10.promises.writeFile(sessionsPath, JSON.stringify({ localThreads: threads }, null, 2));
1156
1366
  }
1157
1367
  async function addLocalThread(workspaceRoot, name) {
1158
1368
  const threads = await loadLocalThreads(workspaceRoot);
@@ -1232,13 +1442,13 @@ async function listThreads(workspaceRoot) {
1232
1442
  }
1233
1443
  }
1234
1444
  async function createWorktree(workspaceRoot, name) {
1235
- const repoName = path7.basename(workspaceRoot);
1236
- const defaultBasePath = path7.join(path7.dirname(workspaceRoot), `${repoName}.worktree`);
1445
+ const repoName = path10.basename(workspaceRoot);
1446
+ const defaultBasePath = path10.join(path10.dirname(workspaceRoot), `${repoName}.worktree`);
1237
1447
  let worktreeName;
1238
1448
  let worktreePath;
1239
1449
  if (name) {
1240
1450
  worktreeName = name;
1241
- worktreePath = path7.join(defaultBasePath, name);
1451
+ worktreePath = path10.join(defaultBasePath, name);
1242
1452
  } else {
1243
1453
  const form = await newWorktreeForm(defaultBasePath);
1244
1454
  if (!form) {
@@ -1251,24 +1461,39 @@ async function createWorktree(workspaceRoot, name) {
1251
1461
  try {
1252
1462
  await gitAdapter.createWorktree(worktreePath, worktreeName, workspaceRoot);
1253
1463
  console.log(chalk2.green(`\u2713 Created worktree: ${worktreeName}`));
1464
+ await copyWorktreeFiles(workspaceRoot, worktreePath);
1254
1465
  await writeCdFile(worktreePath);
1255
1466
  } catch (error) {
1256
1467
  console.error(chalk2.red(`Failed to create worktree: ${error.message}`));
1257
1468
  process.exit(1);
1258
1469
  }
1259
1470
  }
1471
+ async function copyWorktreeFiles(sourceRoot, destRoot) {
1472
+ const config = await loadConfig(sourceRoot);
1473
+ const patterns = getWorktreeCopyPatterns(config);
1474
+ if (patterns.length === 0) {
1475
+ return;
1476
+ }
1477
+ const { copied, failed } = await copyFilesWithPatterns(sourceRoot, destRoot, patterns);
1478
+ if (copied.length > 0) {
1479
+ console.log(chalk2.green(`\u2713 Copied ${copied.length} file(s) to worktree`));
1480
+ }
1481
+ if (failed.length > 0) {
1482
+ console.log(chalk2.yellow(`\u26A0 Failed to copy ${failed.length} file(s)`));
1483
+ }
1484
+ }
1260
1485
  async function writeCdFile(targetPath) {
1261
1486
  const cdFile = process.env.CSQ_CD_FILE;
1262
1487
  if (cdFile) {
1263
- await fs7.promises.writeFile(cdFile, targetPath);
1488
+ await fs10.promises.writeFile(cdFile, targetPath);
1264
1489
  }
1265
1490
  }
1266
1491
  async function openNewTerminal(targetPath) {
1267
1492
  const { exec: exec2 } = await import("child_process");
1268
1493
  const escapedPath = targetPath.replace(/'/g, "'\\''");
1269
- const hasIterm = await new Promise((resolve) => {
1494
+ const hasIterm = await new Promise((resolve2) => {
1270
1495
  exec2('mdfind "kMDItemCFBundleIdentifier == com.googlecode.iterm2"', (error, stdout) => {
1271
- resolve(!error && stdout.trim().length > 0);
1496
+ resolve2(!error && stdout.trim().length > 0);
1272
1497
  });
1273
1498
  });
1274
1499
  if (hasIterm) {
@@ -1281,13 +1506,13 @@ tell application "iTerm2"
1281
1506
  end tell
1282
1507
  end tell
1283
1508
  end tell`;
1284
- return new Promise((resolve) => {
1509
+ return new Promise((resolve2) => {
1285
1510
  exec2(`osascript -e '${script}'`, (error) => {
1286
1511
  if (error) {
1287
1512
  console.error(chalk2.red("Failed to open iTerm2 split pane"));
1288
- resolve(false);
1513
+ resolve2(false);
1289
1514
  } else {
1290
- resolve(true);
1515
+ resolve2(true);
1291
1516
  }
1292
1517
  });
1293
1518
  });
@@ -1297,13 +1522,13 @@ tell application "Terminal"
1297
1522
  activate
1298
1523
  do script "cd '${escapedPath}'"
1299
1524
  end tell`;
1300
- return new Promise((resolve) => {
1525
+ return new Promise((resolve2) => {
1301
1526
  exec2(`osascript -e '${terminalScript}'`, (error) => {
1302
1527
  if (error) {
1303
1528
  console.error(chalk2.red("Failed to open Terminal"));
1304
- resolve(false);
1529
+ resolve2(false);
1305
1530
  } else {
1306
- resolve(true);
1531
+ resolve2(true);
1307
1532
  }
1308
1533
  });
1309
1534
  });
@@ -1311,7 +1536,14 @@ end tell`;
1311
1536
  async function interactiveMode(workspaceRoot) {
1312
1537
  const result = await runInteraction(workspaceRoot);
1313
1538
  if (result?.cdPath) {
1314
- await openNewTerminal(result.cdPath);
1539
+ if (process.env.CSQ_CD_FILE) {
1540
+ console.log(result.cdPath);
1541
+ } else {
1542
+ console.log(chalk2.dim("\nRun this to switch:"));
1543
+ console.log(chalk2.cyan(` cd "${result.cdPath}"`));
1544
+ console.log(chalk2.dim("\nTip: Add to ~/.zshrc for auto-cd:"));
1545
+ console.log(chalk2.dim(' eval "$(csq --init)"'));
1546
+ }
1315
1547
  }
1316
1548
  }
1317
1549
  async function persistentInteractiveMode(workspaceRoot) {
@@ -1354,7 +1586,7 @@ async function executeDelete(thread, workspaceRoot) {
1354
1586
  }
1355
1587
  async function runInteraction(workspaceRoot, _persistent = false) {
1356
1588
  const threads = await getAllThreads(workspaceRoot);
1357
- const repoName = path7.basename(workspaceRoot);
1589
+ const repoName = path10.basename(workspaceRoot);
1358
1590
  const choice = await selectThread(threads, repoName);
1359
1591
  if (choice.type === "exit") {
1360
1592
  return { exit: true };
@@ -1385,7 +1617,7 @@ async function runInteraction(workspaceRoot, _persistent = false) {
1385
1617
  return null;
1386
1618
  }
1387
1619
  if (newType === "worktree") {
1388
- const defaultBasePath = path7.join(path7.dirname(workspaceRoot), `${repoName}.worktree`);
1620
+ const defaultBasePath = path10.join(path10.dirname(workspaceRoot), `${repoName}.worktree`);
1389
1621
  const form = await newWorktreeForm(defaultBasePath);
1390
1622
  if (!form) {
1391
1623
  return null;
@@ -1393,6 +1625,7 @@ async function runInteraction(workspaceRoot, _persistent = false) {
1393
1625
  try {
1394
1626
  await gitAdapter.createWorktree(form.path, form.name, workspaceRoot);
1395
1627
  console.log(chalk2.green(`\u2713 Created worktree: ${form.name}`));
1628
+ await copyWorktreeFiles(workspaceRoot, form.path);
1396
1629
  targetPath = form.path;
1397
1630
  } catch (error) {
1398
1631
  console.error(chalk2.red(`Failed to create worktree: ${error.message}`));