diffs-pane 0.1.0

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 (369) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +216 -0
  3. package/bin/dp.js +2 -0
  4. package/dist/cli/args.js +33 -0
  5. package/dist/cli/args.js.map +1 -0
  6. package/dist/cli/daemon.js +39 -0
  7. package/dist/cli/daemon.js.map +1 -0
  8. package/dist/cli/index.js +245 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/control/client.js +74 -0
  11. package/dist/control/client.js.map +1 -0
  12. package/dist/daemon/main.js +71 -0
  13. package/dist/daemon/main.js.map +1 -0
  14. package/dist/daemon/security.js +66 -0
  15. package/dist/daemon/security.js.map +1 -0
  16. package/dist/daemon/server.js +331 -0
  17. package/dist/daemon/server.js.map +1 -0
  18. package/dist/daemon/session.js +287 -0
  19. package/dist/daemon/session.js.map +1 -0
  20. package/dist/daemon/sessions.js +176 -0
  21. package/dist/daemon/sessions.js.map +1 -0
  22. package/dist/daemon/watcher.js +43 -0
  23. package/dist/daemon/watcher.js.map +1 -0
  24. package/dist/shared/patch.js +313 -0
  25. package/dist/shared/patch.js.map +1 -0
  26. package/dist/shared/protocol.js +9 -0
  27. package/dist/shared/protocol.js.map +1 -0
  28. package/dist/store/fsutil.js +21 -0
  29. package/dist/store/fsutil.js.map +1 -0
  30. package/dist/store/paths.js +39 -0
  31. package/dist/store/paths.js.map +1 -0
  32. package/dist/store/reviews.js +121 -0
  33. package/dist/store/reviews.js.map +1 -0
  34. package/dist/ui/assets/CommitMono-ytizKI8U.woff2 +0 -0
  35. package/dist/ui/assets/abap-BdImnpbu.js +1 -0
  36. package/dist/ui/assets/actionscript-3-CoDkCxhg.js +1 -0
  37. package/dist/ui/assets/ada-bCR0ucgS.js +1 -0
  38. package/dist/ui/assets/andromeeda-C4gqWexZ.js +1 -0
  39. package/dist/ui/assets/angular-html-DA-rfuFy.js +1 -0
  40. package/dist/ui/assets/angular-ts-BrjP3tb8.js +1 -0
  41. package/dist/ui/assets/apache-Pmp26Uib.js +1 -0
  42. package/dist/ui/assets/apex-Dqspr-GT.js +1 -0
  43. package/dist/ui/assets/apl-CORt7UWP.js +1 -0
  44. package/dist/ui/assets/applescript-Co6uUVPk.js +1 -0
  45. package/dist/ui/assets/ara-BRHolxvo.js +1 -0
  46. package/dist/ui/assets/asciidoc-Ve4PFQV2.js +1 -0
  47. package/dist/ui/assets/asm-D_Q5rh1f.js +1 -0
  48. package/dist/ui/assets/astro-HNnZUWAn.js +1 -0
  49. package/dist/ui/assets/aurora-x-D-2ljcwZ.js +1 -0
  50. package/dist/ui/assets/awk-DMzUqQB5.js +1 -0
  51. package/dist/ui/assets/ayu-dark-DYE7WIF3.js +1 -0
  52. package/dist/ui/assets/ayu-light-BA47KaF1.js +1 -0
  53. package/dist/ui/assets/ayu-mirage-32ctXXKs.js +1 -0
  54. package/dist/ui/assets/ballerina-BFfxhgS-.js +1 -0
  55. package/dist/ui/assets/bat-BkioyH1T.js +1 -0
  56. package/dist/ui/assets/beancount-k_qm7-4y.js +1 -0
  57. package/dist/ui/assets/berry-uYugtg8r.js +1 -0
  58. package/dist/ui/assets/bibtex-CHM0blh-.js +1 -0
  59. package/dist/ui/assets/bicep-Bmn6On1c.js +1 -0
  60. package/dist/ui/assets/bird2-BIv1doCn.js +1 -0
  61. package/dist/ui/assets/blade-2xfisSek.js +1 -0
  62. package/dist/ui/assets/bsl-BO_Y6i37.js +1 -0
  63. package/dist/ui/assets/c-BIGW1oBm.js +1 -0
  64. package/dist/ui/assets/c3-MRO5bC_T.js +1 -0
  65. package/dist/ui/assets/cadence-Bv_4Rxtq.js +1 -0
  66. package/dist/ui/assets/cairo-KRGpt6FW.js +1 -0
  67. package/dist/ui/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  68. package/dist/ui/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  69. package/dist/ui/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  70. package/dist/ui/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  71. package/dist/ui/assets/clarity-D53aC0YG.js +1 -0
  72. package/dist/ui/assets/clojure-P80f7IUj.js +1 -0
  73. package/dist/ui/assets/cmake-D1j8_8rp.js +1 -0
  74. package/dist/ui/assets/cobol-nBiQ_Alo.js +1 -0
  75. package/dist/ui/assets/codeowners-Bp6g37R7.js +1 -0
  76. package/dist/ui/assets/codeql-DsOJ9woJ.js +1 -0
  77. package/dist/ui/assets/coffee-Ch7k5sss.js +1 -0
  78. package/dist/ui/assets/common-lisp-Cg-RD9OK.js +1 -0
  79. package/dist/ui/assets/coq-DkFqJrB1.js +1 -0
  80. package/dist/ui/assets/cpp-UfJy6YNI.js +1 -0
  81. package/dist/ui/assets/crystal-DGywbUpC.js +1 -0
  82. package/dist/ui/assets/csharp-DSvCPggb.js +1 -0
  83. package/dist/ui/assets/css-CLj8gQPS.js +1 -0
  84. package/dist/ui/assets/csv-fuZLfV_i.js +1 -0
  85. package/dist/ui/assets/cue-D82EKSYY.js +1 -0
  86. package/dist/ui/assets/cypher-COkxafJQ.js +1 -0
  87. package/dist/ui/assets/d-85-TOEBH.js +1 -0
  88. package/dist/ui/assets/dark-plus-C3mMm8J8.js +1 -0
  89. package/dist/ui/assets/dart-bE4Kk8sk.js +1 -0
  90. package/dist/ui/assets/dax-CEL-wOlO.js +1 -0
  91. package/dist/ui/assets/desktop-BmXAJ9_W.js +1 -0
  92. package/dist/ui/assets/diff-D97Zzqfu.js +1 -0
  93. package/dist/ui/assets/docker-BcOcwvcX.js +1 -0
  94. package/dist/ui/assets/dotenv-Da5cRb03.js +1 -0
  95. package/dist/ui/assets/dracula-BzJJZx-M.js +1 -0
  96. package/dist/ui/assets/dracula-soft-BXkSAIEj.js +1 -0
  97. package/dist/ui/assets/dream-maker-BtqSS_iP.js +1 -0
  98. package/dist/ui/assets/edge-FbVlp4U3.js +1 -0
  99. package/dist/ui/assets/elixir-CkH2-t6x.js +1 -0
  100. package/dist/ui/assets/elm-DbKCFpqz.js +1 -0
  101. package/dist/ui/assets/emacs-lisp-CXvaQtF9.js +1 -0
  102. package/dist/ui/assets/erb-Dm6A9KJ5.js +1 -0
  103. package/dist/ui/assets/erlang-DsQrWhSR.js +1 -0
  104. package/dist/ui/assets/everforest-dark-BgDCqdQA.js +1 -0
  105. package/dist/ui/assets/everforest-light-C8M2exoo.js +1 -0
  106. package/dist/ui/assets/fennel-BYunw83y.js +1 -0
  107. package/dist/ui/assets/fish-BvzEVeQv.js +1 -0
  108. package/dist/ui/assets/fluent-C4IJs8-o.js +1 -0
  109. package/dist/ui/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  110. package/dist/ui/assets/fortran-free-form-BxgE0vQu.js +1 -0
  111. package/dist/ui/assets/fsharp-CXgrBDvD.js +1 -0
  112. package/dist/ui/assets/gdresource-BOOCDP_w.js +1 -0
  113. package/dist/ui/assets/gdscript-C5YyOfLZ.js +1 -0
  114. package/dist/ui/assets/gdshader-DkwncUOv.js +1 -0
  115. package/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  116. package/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  117. package/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  118. package/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  119. package/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  120. package/dist/ui/assets/genie-D0YGMca9.js +1 -0
  121. package/dist/ui/assets/gherkin-DyxjwDmM.js +1 -0
  122. package/dist/ui/assets/git-commit-F4YmCXRG.js +1 -0
  123. package/dist/ui/assets/git-rebase-r7XF79zn.js +1 -0
  124. package/dist/ui/assets/github-dark-DHJKELXO.js +1 -0
  125. package/dist/ui/assets/github-dark-default-Cuk6v7N8.js +1 -0
  126. package/dist/ui/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  127. package/dist/ui/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  128. package/dist/ui/assets/github-light-DAi9KRSo.js +1 -0
  129. package/dist/ui/assets/github-light-default-D7oLnXFd.js +1 -0
  130. package/dist/ui/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  131. package/dist/ui/assets/gleam-BspZqrRM.js +1 -0
  132. package/dist/ui/assets/glimmer-js-ByusRIyA.js +1 -0
  133. package/dist/ui/assets/glimmer-ts-BfAWNZQY.js +1 -0
  134. package/dist/ui/assets/glsl-DplSGwfg.js +1 -0
  135. package/dist/ui/assets/gn-n2N0HUVH.js +1 -0
  136. package/dist/ui/assets/gnuplot-DdkO51Og.js +1 -0
  137. package/dist/ui/assets/go-C27-OAKa.js +1 -0
  138. package/dist/ui/assets/graphql-ChdNCCLP.js +1 -0
  139. package/dist/ui/assets/groovy-gcz8RCvz.js +1 -0
  140. package/dist/ui/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  141. package/dist/ui/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  142. package/dist/ui/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  143. package/dist/ui/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  144. package/dist/ui/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  145. package/dist/ui/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  146. package/dist/ui/assets/hack-DbPARsA_.js +1 -0
  147. package/dist/ui/assets/haml-D5jkg6IW.js +1 -0
  148. package/dist/ui/assets/handlebars-BpdQsYii.js +1 -0
  149. package/dist/ui/assets/haskell-Df6bDoY_.js +1 -0
  150. package/dist/ui/assets/haxe-CzTSHFRz.js +1 -0
  151. package/dist/ui/assets/hcl-BWvSN4gD.js +1 -0
  152. package/dist/ui/assets/hjson-D5-asLiD.js +1 -0
  153. package/dist/ui/assets/hlsl-D3lLCCz7.js +1 -0
  154. package/dist/ui/assets/horizon-BUw7H-hv.js +1 -0
  155. package/dist/ui/assets/horizon-bright-CUuTKBJd.js +1 -0
  156. package/dist/ui/assets/houston-DnULxvSX.js +1 -0
  157. package/dist/ui/assets/html-derivative-DlHx6ybY.js +1 -0
  158. package/dist/ui/assets/html-pp8916En.js +1 -0
  159. package/dist/ui/assets/http-jrhK8wxY.js +1 -0
  160. package/dist/ui/assets/hurl-irOxFIW8.js +1 -0
  161. package/dist/ui/assets/hxml-Bvhsp5Yf.js +1 -0
  162. package/dist/ui/assets/hy-DFXneXwc.js +1 -0
  163. package/dist/ui/assets/imba-DGztddWO.js +1 -0
  164. package/dist/ui/assets/index-DQmd9stL.js +2904 -0
  165. package/dist/ui/assets/index-yTQdnwMD.css +1 -0
  166. package/dist/ui/assets/ini-BEwlwnbL.js +1 -0
  167. package/dist/ui/assets/java-CylS5w8V.js +1 -0
  168. package/dist/ui/assets/javascript-wDzz0qaB.js +1 -0
  169. package/dist/ui/assets/jinja-f2NsQr07.js +1 -0
  170. package/dist/ui/assets/jison-wvAkD_A8.js +1 -0
  171. package/dist/ui/assets/json-Cp-IABpG.js +1 -0
  172. package/dist/ui/assets/json5-C9tS-k6U.js +1 -0
  173. package/dist/ui/assets/jsonc-Des-eS-w.js +1 -0
  174. package/dist/ui/assets/jsonl-DcaNXYhu.js +1 -0
  175. package/dist/ui/assets/jsonnet-DFQXde-d.js +1 -0
  176. package/dist/ui/assets/jssm-C2t-YnRu.js +1 -0
  177. package/dist/ui/assets/jsx-g9-lgVsj.js +1 -0
  178. package/dist/ui/assets/julia-D7OTSIA_.js +1 -0
  179. package/dist/ui/assets/just-CUsbIsdP.js +1 -0
  180. package/dist/ui/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  181. package/dist/ui/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  182. package/dist/ui/assets/kanagawa-wave-DWedfzmr.js +1 -0
  183. package/dist/ui/assets/kdl-DV7GczEv.js +1 -0
  184. package/dist/ui/assets/kotlin-BdnUsdx6.js +1 -0
  185. package/dist/ui/assets/kusto-wEQ09or8.js +1 -0
  186. package/dist/ui/assets/laserwave-DUszq2jm.js +1 -0
  187. package/dist/ui/assets/latex-CaSxy8MP.js +1 -0
  188. package/dist/ui/assets/lean-BZvkOJ9d.js +1 -0
  189. package/dist/ui/assets/less-B1dDrJ26.js +1 -0
  190. package/dist/ui/assets/light-plus-B7mTdjB0.js +1 -0
  191. package/dist/ui/assets/liquid-C0sCDyMI.js +1 -0
  192. package/dist/ui/assets/llvm-DjAJT7YJ.js +1 -0
  193. package/dist/ui/assets/log-2UxHyX5q.js +1 -0
  194. package/dist/ui/assets/logo-BtOb2qkB.js +1 -0
  195. package/dist/ui/assets/lua-BaeVxFsk.js +1 -0
  196. package/dist/ui/assets/luau-KW6xsasC.js +1 -0
  197. package/dist/ui/assets/make-CHLpvVh8.js +1 -0
  198. package/dist/ui/assets/markdown-Cvjx9yec.js +1 -0
  199. package/dist/ui/assets/marko-DjSrsDqO.js +1 -0
  200. package/dist/ui/assets/material-theme-D5KoaKCx.js +1 -0
  201. package/dist/ui/assets/material-theme-darker-BfHTSMKl.js +1 -0
  202. package/dist/ui/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  203. package/dist/ui/assets/material-theme-ocean-CyktbL80.js +1 -0
  204. package/dist/ui/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  205. package/dist/ui/assets/matlab-D7o27uSR.js +1 -0
  206. package/dist/ui/assets/mdc-DTYItulj.js +1 -0
  207. package/dist/ui/assets/mdx-Cmh6b_Ma.js +1 -0
  208. package/dist/ui/assets/mermaid-mWjccvbQ.js +1 -0
  209. package/dist/ui/assets/min-dark-CafNBF8u.js +1 -0
  210. package/dist/ui/assets/min-light-CTRr51gU.js +1 -0
  211. package/dist/ui/assets/mipsasm-CKIfxQSi.js +1 -0
  212. package/dist/ui/assets/mojo-rZm6bMo-.js +1 -0
  213. package/dist/ui/assets/monokai-D4h5O-jR.js +1 -0
  214. package/dist/ui/assets/moonbit-_H4v1dQx.js +1 -0
  215. package/dist/ui/assets/move-IF9eRakj.js +1 -0
  216. package/dist/ui/assets/narrat-DRg8JJMk.js +1 -0
  217. package/dist/ui/assets/nextflow-C-mBbutL.js +1 -0
  218. package/dist/ui/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  219. package/dist/ui/assets/nginx-BpAMiNFr.js +1 -0
  220. package/dist/ui/assets/night-owl-C39BiMTA.js +1 -0
  221. package/dist/ui/assets/night-owl-light-CMTm3GFP.js +1 -0
  222. package/dist/ui/assets/nim-BIad80T-.js +1 -0
  223. package/dist/ui/assets/nix-CwoSXNpI.js +1 -0
  224. package/dist/ui/assets/nord-Ddv68eIx.js +1 -0
  225. package/dist/ui/assets/nushell-Cz2AlsmD.js +1 -0
  226. package/dist/ui/assets/objective-c-DXmwc3jG.js +1 -0
  227. package/dist/ui/assets/objective-cpp-CLxacb5B.js +1 -0
  228. package/dist/ui/assets/ocaml-C0hk2d4L.js +1 -0
  229. package/dist/ui/assets/odin-BBf5iR-q.js +1 -0
  230. package/dist/ui/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  231. package/dist/ui/assets/one-light-C3Wv6jpd.js +1 -0
  232. package/dist/ui/assets/openscad-C4EeE6gA.js +1 -0
  233. package/dist/ui/assets/pascal-D93ZcfNL.js +1 -0
  234. package/dist/ui/assets/perl-B9cMNwum.js +1 -0
  235. package/dist/ui/assets/php-Csjmro_R.js +1 -0
  236. package/dist/ui/assets/pierre-dark-CyvmCCZW.js +1 -0
  237. package/dist/ui/assets/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +1 -0
  238. package/dist/ui/assets/pierre-dark-soft-BHGpRqa4.js +1 -0
  239. package/dist/ui/assets/pierre-dark-tritanopia-Beq2gCRQ.js +1 -0
  240. package/dist/ui/assets/pierre-dark-vibrant-BWBVywrn.js +1 -0
  241. package/dist/ui/assets/pierre-light-480U9XYS.js +1 -0
  242. package/dist/ui/assets/pierre-light-protanopia-deuteranopia-CaVOBURG.js +1 -0
  243. package/dist/ui/assets/pierre-light-soft-CVdyfjmI.js +1 -0
  244. package/dist/ui/assets/pierre-light-tritanopia-B4_gpKOM.js +1 -0
  245. package/dist/ui/assets/pierre-light-vibrant-DdTDNdfJ.js +1 -0
  246. package/dist/ui/assets/pkl-u5AG7uiY.js +1 -0
  247. package/dist/ui/assets/plastic-3e1v2bzS.js +1 -0
  248. package/dist/ui/assets/plsql-ChMvpjG-.js +1 -0
  249. package/dist/ui/assets/po-BTJTHyun.js +1 -0
  250. package/dist/ui/assets/poimandres-CS3Unz2-.js +1 -0
  251. package/dist/ui/assets/polar-C0HS_06l.js +1 -0
  252. package/dist/ui/assets/postcss-CXtECtnM.js +1 -0
  253. package/dist/ui/assets/powerquery-CEu0bR-o.js +1 -0
  254. package/dist/ui/assets/powershell-Dpen1YoG.js +1 -0
  255. package/dist/ui/assets/prisma-Dd19v3D-.js +1 -0
  256. package/dist/ui/assets/prolog-CbFg5uaA.js +1 -0
  257. package/dist/ui/assets/proto-C7zT0LnQ.js +1 -0
  258. package/dist/ui/assets/pug-DKIMFp6K.js +1 -0
  259. package/dist/ui/assets/puppet-BMWR74SV.js +1 -0
  260. package/dist/ui/assets/purescript-CklMAg4u.js +1 -0
  261. package/dist/ui/assets/python-B6aJPvgy.js +1 -0
  262. package/dist/ui/assets/qml-3beO22l8.js +1 -0
  263. package/dist/ui/assets/qmldir-C8lEn-DE.js +1 -0
  264. package/dist/ui/assets/qss-IeuSbFQv.js +1 -0
  265. package/dist/ui/assets/r-Dspwwk_N.js +1 -0
  266. package/dist/ui/assets/racket-BqYA7rlc.js +1 -0
  267. package/dist/ui/assets/raku-DXvB9xmW.js +1 -0
  268. package/dist/ui/assets/razor-BjBPvh-w.js +1 -0
  269. package/dist/ui/assets/red-bN70gL4F.js +1 -0
  270. package/dist/ui/assets/reg-C-SQnVFl.js +1 -0
  271. package/dist/ui/assets/regexp-CDVJQ6XC.js +1 -0
  272. package/dist/ui/assets/rel-C3B-1QV4.js +1 -0
  273. package/dist/ui/assets/riscv-BM1_JUlF.js +1 -0
  274. package/dist/ui/assets/ron-D8l8udqQ.js +1 -0
  275. package/dist/ui/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  276. package/dist/ui/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  277. package/dist/ui/assets/rose-pine-qdsjHGoJ.js +1 -0
  278. package/dist/ui/assets/rosmsg-BJDFO7_C.js +1 -0
  279. package/dist/ui/assets/rst-CpCqk9r5.js +1 -0
  280. package/dist/ui/assets/ruby-DyJCeAvU.js +1 -0
  281. package/dist/ui/assets/rust-B1yitclQ.js +1 -0
  282. package/dist/ui/assets/sas-DEy46yEz.js +1 -0
  283. package/dist/ui/assets/sass-Cj5Yp3dK.js +1 -0
  284. package/dist/ui/assets/scala-C151Ov-r.js +1 -0
  285. package/dist/ui/assets/scheme-C98Dy4si.js +1 -0
  286. package/dist/ui/assets/scss-D5BDwBP9.js +1 -0
  287. package/dist/ui/assets/sdbl-DVxCFoDh.js +1 -0
  288. package/dist/ui/assets/shaderlab-Dg9Lc6iA.js +1 -0
  289. package/dist/ui/assets/shellscript-Yzrsuije.js +1 -0
  290. package/dist/ui/assets/shellsession-BADoaaVG.js +1 -0
  291. package/dist/ui/assets/slack-dark-BthQWCQV.js +1 -0
  292. package/dist/ui/assets/slack-ochin-DqwNpetd.js +1 -0
  293. package/dist/ui/assets/smalltalk-BERRCDM3.js +1 -0
  294. package/dist/ui/assets/snazzy-light-Bw305WKR.js +1 -0
  295. package/dist/ui/assets/solarized-dark-DXbdFlpD.js +1 -0
  296. package/dist/ui/assets/solarized-light-L9t79GZl.js +1 -0
  297. package/dist/ui/assets/solidity-rGO070M0.js +1 -0
  298. package/dist/ui/assets/soy-8wufbnw4.js +1 -0
  299. package/dist/ui/assets/sparql-rVzFXLq3.js +1 -0
  300. package/dist/ui/assets/splunk-BtCnVYZw.js +1 -0
  301. package/dist/ui/assets/sql-CRqJ_cUM.js +1 -0
  302. package/dist/ui/assets/ssh-config-_ykCGR6B.js +1 -0
  303. package/dist/ui/assets/stata-DI20mbqo.js +1 -0
  304. package/dist/ui/assets/stylus-BEDo0Tqx.js +1 -0
  305. package/dist/ui/assets/surrealql-Bq5Q-fJD.js +1 -0
  306. package/dist/ui/assets/svelte-Cy7k_4gC.js +1 -0
  307. package/dist/ui/assets/swift-D82vCrfD.js +1 -0
  308. package/dist/ui/assets/synthwave-84-CbfX1IO0.js +1 -0
  309. package/dist/ui/assets/system-verilog-CnnmHF94.js +1 -0
  310. package/dist/ui/assets/systemd-4A_iFExJ.js +1 -0
  311. package/dist/ui/assets/talonscript-CkByrt1z.js +1 -0
  312. package/dist/ui/assets/tasl-QIJgUcNo.js +1 -0
  313. package/dist/ui/assets/tcl-dwOrl1Do.js +1 -0
  314. package/dist/ui/assets/templ-DhtptRzy.js +1 -0
  315. package/dist/ui/assets/terraform-BETggiCN.js +1 -0
  316. package/dist/ui/assets/tex-idrVyKtj.js +1 -0
  317. package/dist/ui/assets/tokyo-night-hegEt444.js +1 -0
  318. package/dist/ui/assets/toml-vGWfd6FD.js +1 -0
  319. package/dist/ui/assets/ts-tags-D351s5mN.js +1 -0
  320. package/dist/ui/assets/tsv-B_m7g4N7.js +1 -0
  321. package/dist/ui/assets/tsx-COt5Ahok.js +1 -0
  322. package/dist/ui/assets/turtle-BsS91CYL.js +1 -0
  323. package/dist/ui/assets/twig-CW1WmMYd.js +1 -0
  324. package/dist/ui/assets/typescript-BPQ3VLAy.js +1 -0
  325. package/dist/ui/assets/typespec-CAFt9gP4.js +1 -0
  326. package/dist/ui/assets/typst-DHCkPAjA.js +1 -0
  327. package/dist/ui/assets/v-BcVCzyr7.js +1 -0
  328. package/dist/ui/assets/vala-CsfeWuGM.js +1 -0
  329. package/dist/ui/assets/vb-D17OF-Vu.js +1 -0
  330. package/dist/ui/assets/verilog-BQ8w6xss.js +1 -0
  331. package/dist/ui/assets/vesper-DRje8inN.js +1 -0
  332. package/dist/ui/assets/vhdl-CeAyd5Ju.js +1 -0
  333. package/dist/ui/assets/viml-CJc9bBzg.js +1 -0
  334. package/dist/ui/assets/vitesse-black-Bkuqu6BP.js +1 -0
  335. package/dist/ui/assets/vitesse-dark-D0r3Knsf.js +1 -0
  336. package/dist/ui/assets/vitesse-light-CVO1_9PV.js +1 -0
  337. package/dist/ui/assets/vue-D2xRrEX4.js +1 -0
  338. package/dist/ui/assets/vue-html-AaS7Mt5G.js +1 -0
  339. package/dist/ui/assets/vue-vine-BoDAl6tE.js +1 -0
  340. package/dist/ui/assets/vyper-CDx5xZoG.js +1 -0
  341. package/dist/ui/assets/wasm-CG6Dc4jp.js +1 -0
  342. package/dist/ui/assets/wasm-MzD3tlZU.js +1 -0
  343. package/dist/ui/assets/wenyan-BV7otONQ.js +1 -0
  344. package/dist/ui/assets/wgsl-Dx-B1_4e.js +1 -0
  345. package/dist/ui/assets/wikitext-BhOHFoWU.js +1 -0
  346. package/dist/ui/assets/wit-5i3qLPDT.js +1 -0
  347. package/dist/ui/assets/wolfram-lXgVvXCa.js +1 -0
  348. package/dist/ui/assets/worker-DLF4drjM.js +155 -0
  349. package/dist/ui/assets/xml-sdJ4AIDG.js +1 -0
  350. package/dist/ui/assets/xsl-CtQFsRM5.js +1 -0
  351. package/dist/ui/assets/yaml-Buea-lGh.js +1 -0
  352. package/dist/ui/assets/zenscript-DVFEvuxE.js +1 -0
  353. package/dist/ui/assets/zig-VOosw3JB.js +1 -0
  354. package/dist/ui/index.html +14 -0
  355. package/dist/vcs/detect.js +37 -0
  356. package/dist/vcs/detect.js.map +1 -0
  357. package/dist/vcs/exec.js +84 -0
  358. package/dist/vcs/exec.js.map +1 -0
  359. package/dist/vcs/git.js +176 -0
  360. package/dist/vcs/git.js.map +1 -0
  361. package/dist/vcs/jj.js +64 -0
  362. package/dist/vcs/jj.js.map +1 -0
  363. package/dist/vcs/types.js +8 -0
  364. package/dist/vcs/types.js.map +1 -0
  365. package/extension/pi/dp-turn.ts +59 -0
  366. package/package.json +70 -0
  367. package/skills/diffs-pane/SKILL.md +115 -0
  368. package/ui/fonts/CommitMono-LICENSE.txt +92 -0
  369. package/ui/fonts/Geist-LICENSE.txt +93 -0
@@ -0,0 +1,331 @@
1
+ import { createReadStream, existsSync, statSync } from 'node:fs';
2
+ import { createServer } from 'node:http';
3
+ import { extname, join, normalize } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { anchorTextForRange, hunkExcerptForRange, parsePatch } from '../shared/patch.js';
6
+ import { isDiffFilter, } from '../shared/protocol.js';
7
+ import { checkMutationOrigin, checkTransport, readBody } from './security.js';
8
+ import { timingSafeEqualString, DEFAULT_OWNER } from './sessions.js';
9
+ const UI_DIR = fileURLToPath(new URL('../ui', import.meta.url));
10
+ const MIME = {
11
+ '.html': 'text/html; charset=utf-8',
12
+ '.js': 'text/javascript; charset=utf-8',
13
+ '.css': 'text/css; charset=utf-8',
14
+ '.json': 'application/json',
15
+ '.svg': 'image/svg+xml',
16
+ '.png': 'image/png',
17
+ '.woff2': 'font/woff2',
18
+ '.map': 'application/json',
19
+ '.wasm': 'application/wasm',
20
+ };
21
+ export async function startServer(options) {
22
+ const { controlToken, manager } = options;
23
+ let port = 0;
24
+ const server = createServer((req, res) => {
25
+ void handle(req, res).catch((error) => {
26
+ if (!res.headersSent) {
27
+ sendJson(res, 500, { error: error instanceof Error ? error.message : 'internal error' });
28
+ }
29
+ else {
30
+ res.end();
31
+ }
32
+ });
33
+ });
34
+ async function handle(req, res) {
35
+ const transportError = checkTransport(req, port);
36
+ if (transportError)
37
+ return sendJson(res, 403, { error: transportError });
38
+ const url = new URL(req.url ?? '/', `http://127.0.0.1:${port}`);
39
+ const method = req.method ?? 'GET';
40
+ if (method !== 'GET' && method !== 'HEAD') {
41
+ const originError = checkMutationOrigin(req, port);
42
+ if (originError)
43
+ return sendJson(res, 403, { error: originError });
44
+ }
45
+ if (url.pathname.startsWith('/control/'))
46
+ return handleControl(req, res, url, method);
47
+ const match = /^\/s\/([A-Za-z0-9_-]+)(\/.*)?$/.exec(url.pathname);
48
+ if (match) {
49
+ const session = manager.byToken(match[1]);
50
+ if (!session)
51
+ return sendJson(res, 404, { error: 'unknown session' });
52
+ const subPath = match[2] ?? '';
53
+ if (subPath === '') {
54
+ res.writeHead(302, { location: `/s/${match[1]}/` });
55
+ res.end();
56
+ return;
57
+ }
58
+ return handleSession(req, res, url, method, session, subPath);
59
+ }
60
+ sendJson(res, 404, { error: 'not found' });
61
+ }
62
+ async function handleSession(req, res, url, method, session, subPath) {
63
+ if (subPath === '/api/session' && method === 'GET') {
64
+ return sendJson(res, 200, session.info());
65
+ }
66
+ if (subPath === '/api/patch' && method === 'GET') {
67
+ const filter = url.searchParams.get('filter') ?? session.defaultFilter;
68
+ if (!isDiffFilter(filter))
69
+ return sendJson(res, 400, { error: `invalid filter: ${filter}` });
70
+ return sendJson(res, 200, await session.getPatch(filter));
71
+ }
72
+ if (subPath === '/api/events' && method === 'GET') {
73
+ const filter = url.searchParams.get('filter') ?? session.defaultFilter;
74
+ if (!isDiffFilter(filter))
75
+ return sendJson(res, 400, { error: `invalid filter: ${filter}` });
76
+ res.writeHead(200, {
77
+ 'content-type': 'text/event-stream',
78
+ 'cache-control': 'no-store',
79
+ connection: 'keep-alive',
80
+ 'x-accel-buffering': 'no',
81
+ });
82
+ res.write(`event: session\ndata: ${JSON.stringify(session.info())}\n\n`);
83
+ res.write(`event: comments\ndata: ${JSON.stringify({ comments: session.listComments() })}\n\n`);
84
+ session.addClient(res, filter);
85
+ return;
86
+ }
87
+ if (subPath === '/api/comments' && method === 'GET') {
88
+ return sendJson(res, 200, { comments: session.listComments() });
89
+ }
90
+ if (subPath === '/api/comments' && method === 'POST') {
91
+ const body = await parseJsonBody(req);
92
+ if (!body)
93
+ return sendJson(res, 400, { error: 'invalid JSON body' });
94
+ const error = validateNewComment(body);
95
+ if (error)
96
+ return sendJson(res, 422, { error });
97
+ const patch = await session.getPatch(body.filter);
98
+ const file = parsePatch(patch.patch).find((f) => f.path === body.path);
99
+ if (!file)
100
+ return sendJson(res, 422, { error: `file not in ${body.filter} diff: ${body.path}` });
101
+ const anchorText = anchorTextForRange(file, body.side, body.startLine, body.endLine);
102
+ const hunkExcerpt = hunkExcerptForRange(file, body.side, body.startLine);
103
+ if (anchorText === null || hunkExcerpt === null) {
104
+ return sendJson(res, 422, { error: 'selected lines are not part of the current diff' });
105
+ }
106
+ const comment = session.reviewStore.create({
107
+ ...body,
108
+ anchorText,
109
+ hunkExcerpt,
110
+ patchHash: patch.patchHash,
111
+ });
112
+ session.broadcastComments();
113
+ return sendJson(res, 201, comment);
114
+ }
115
+ const commentMatch = /^\/api\/comments\/([A-Za-z0-9-]+)$/.exec(subPath);
116
+ if (commentMatch) {
117
+ const id = commentMatch[1];
118
+ if (method === 'PATCH') {
119
+ const body = await parseJsonBody(req);
120
+ if (!body || typeof body.body !== 'string' || body.body.trim() === '') {
121
+ return sendJson(res, 400, { error: 'body must be a non-empty string' });
122
+ }
123
+ const updated = session.reviewStore.update(id, body.body);
124
+ if (!updated)
125
+ return sendJson(res, 404, { error: 'unknown comment' });
126
+ session.broadcastComments();
127
+ return sendJson(res, 200, updated);
128
+ }
129
+ if (method === 'DELETE') {
130
+ if (!session.reviewStore.delete(id))
131
+ return sendJson(res, 404, { error: 'unknown comment' });
132
+ session.broadcastComments();
133
+ return sendJson(res, 200, { ok: true });
134
+ }
135
+ }
136
+ if (method === 'GET' || method === 'HEAD')
137
+ return serveStatic(res, subPath);
138
+ sendJson(res, 405, { error: 'method not allowed' });
139
+ }
140
+ async function handleControl(req, res, url, method) {
141
+ const token = req.headers['x-dp-control-token'];
142
+ if (typeof token !== 'string' || !timingSafeEqualString(token, controlToken)) {
143
+ return sendJson(res, 403, { error: 'invalid control token' });
144
+ }
145
+ if (url.pathname === '/control/health' && method === 'GET') {
146
+ return sendJson(res, 200, { ok: true, pid: process.pid });
147
+ }
148
+ if (url.pathname === '/control/status' && method === 'GET') {
149
+ const status = {
150
+ version: 1,
151
+ running: true,
152
+ pid: process.pid,
153
+ port,
154
+ sessions: manager.list().map((s) => ({
155
+ sessionId: s.sessionId,
156
+ root: s.root,
157
+ vcs: s.info().vcs,
158
+ url: sessionUrl(s.token),
159
+ owners: [...s.owners],
160
+ clients: s.clientCount(),
161
+ turn: s.info().turn,
162
+ })),
163
+ };
164
+ return sendJson(res, 200, status);
165
+ }
166
+ if (url.pathname === '/control/sessions/ensure' && method === 'POST') {
167
+ const body = await parseJsonBody(req);
168
+ if (!body?.root)
169
+ return sendJson(res, 400, { error: 'root is required' });
170
+ const filter = body.filter;
171
+ if (filter !== undefined && !isDiffFilter(filter)) {
172
+ return sendJson(res, 400, { error: `invalid filter: ${filter}` });
173
+ }
174
+ if (body.watch !== undefined && typeof body.watch !== 'boolean') {
175
+ return sendJson(res, 400, { error: 'watch must be a boolean' });
176
+ }
177
+ try {
178
+ const { session, created } = await manager.ensure(body.root, {
179
+ owner: body.owner ?? DEFAULT_OWNER,
180
+ filter,
181
+ base: body.base,
182
+ watch: body.watch,
183
+ });
184
+ return sendJson(res, 200, {
185
+ url: sessionUrl(session.token),
186
+ sessionId: session.sessionId,
187
+ created,
188
+ });
189
+ }
190
+ catch (error) {
191
+ return sendJson(res, 422, {
192
+ error: error instanceof Error ? error.message : String(error),
193
+ });
194
+ }
195
+ }
196
+ if (url.pathname === '/control/turn' && method === 'POST') {
197
+ const body = await parseJsonBody(req);
198
+ if (!body?.root || !body.turn || (body.action !== 'start' && body.action !== 'end')) {
199
+ return sendJson(res, 400, { error: 'root, turn, and action=start|end are required' });
200
+ }
201
+ const turnKey = `${body.session ?? 'session'}:${body.turn}`;
202
+ let session = await manager.findByRoot(body.root);
203
+ if (!session && body.action === 'start') {
204
+ session = (await manager.ensure(body.root, { owner: body.owner ?? body.agent ?? 'turn' }))
205
+ .session;
206
+ }
207
+ if (!session)
208
+ return sendJson(res, 404, { error: 'no session for root' });
209
+ if (body.action === 'start')
210
+ await session.startTurn(turnKey, body.agent);
211
+ else
212
+ session.endTurn(turnKey);
213
+ return sendJson(res, 200, { ok: true, sessionId: session.sessionId });
214
+ }
215
+ if (url.pathname === '/control/reviews' && method === 'GET') {
216
+ const root = url.searchParams.get('root');
217
+ if (!root)
218
+ return sendJson(res, 400, { error: 'root is required' });
219
+ const session = await manager.findByRoot(root);
220
+ if (!session)
221
+ return sendJson(res, 404, { error: 'no session for root' });
222
+ return sendJson(res, 200, {
223
+ version: 1,
224
+ root: session.root,
225
+ comments: session.listComments(),
226
+ });
227
+ }
228
+ if (url.pathname === '/control/comments/resolve' && method === 'POST') {
229
+ const body = await parseJsonBody(req);
230
+ if (!body?.root || (!Array.isArray(body.ids) && body.all !== true)) {
231
+ return sendJson(res, 400, { error: 'root plus ids[] or all=true are required' });
232
+ }
233
+ const session = await manager.findByRoot(body.root);
234
+ if (!session)
235
+ return sendJson(res, 404, { error: 'no session for root' });
236
+ const ids = body.all === true ? session.listComments().map((comment) => comment.id) : body.ids;
237
+ const removed = session.reviewStore.deleteMany(ids);
238
+ if (removed > 0)
239
+ session.broadcastComments();
240
+ return sendJson(res, 200, { ok: true, removed });
241
+ }
242
+ if (url.pathname === '/control/stop' && method === 'POST') {
243
+ const body = await parseJsonBody(req);
244
+ const owner = body?.owner ?? DEFAULT_OWNER;
245
+ if (body?.all && body.root === undefined) {
246
+ if (body.owner !== undefined) {
247
+ const stopped = await manager.removeOwnerEverywhere(owner);
248
+ return sendJson(res, 200, { ok: true, stoppedSessions: stopped });
249
+ }
250
+ await manager.stopAll();
251
+ return sendJson(res, 200, { ok: true, stoppedSessions: 'all' });
252
+ }
253
+ if (!body?.root)
254
+ return sendJson(res, 400, { error: 'root is required unless --all' });
255
+ const result = await manager.removeOwner(body.root, owner);
256
+ return sendJson(res, 200, { ok: true, ...result });
257
+ }
258
+ sendJson(res, 404, { error: 'unknown control endpoint' });
259
+ }
260
+ function serveStatic(res, subPath) {
261
+ const rel = subPath === '/' ? 'index.html' : subPath.replace(/^\//, '');
262
+ const filePath = normalize(join(UI_DIR, rel));
263
+ if (!filePath.startsWith(UI_DIR) || !existsSync(filePath) || !statSync(filePath).isFile()) {
264
+ // SPA fallback: unknown paths under the session serve the app shell.
265
+ const index = join(UI_DIR, 'index.html');
266
+ if (!existsSync(index)) {
267
+ return sendJson(res, 404, { error: 'UI assets not built; run `pnpm run build:ui`' });
268
+ }
269
+ res.writeHead(200, { 'content-type': MIME['.html'] });
270
+ createReadStream(index).pipe(res);
271
+ return;
272
+ }
273
+ res.writeHead(200, {
274
+ 'content-type': MIME[extname(filePath)] ?? 'application/octet-stream',
275
+ 'cache-control': rel.startsWith('assets/')
276
+ ? 'public, max-age=31536000, immutable'
277
+ : 'no-store',
278
+ });
279
+ createReadStream(filePath).pipe(res);
280
+ }
281
+ function sessionUrl(token) {
282
+ return `http://127.0.0.1:${port}/s/${token}/`;
283
+ }
284
+ await new Promise((resolve, reject) => {
285
+ server.once('error', reject);
286
+ server.listen(0, '127.0.0.1', resolve);
287
+ });
288
+ const address = server.address();
289
+ if (address === null || typeof address === 'string')
290
+ throw new Error('failed to bind');
291
+ port = address.port;
292
+ return { server, port, sessionUrl };
293
+ }
294
+ function sendJson(res, status, value) {
295
+ const body = JSON.stringify(value);
296
+ res.writeHead(status, {
297
+ 'content-type': 'application/json',
298
+ 'content-length': Buffer.byteLength(body),
299
+ 'cache-control': 'no-store',
300
+ });
301
+ res.end(body);
302
+ }
303
+ async function parseJsonBody(req) {
304
+ try {
305
+ const raw = await readBody(req);
306
+ if (raw.length === 0)
307
+ return {};
308
+ return JSON.parse(raw.toString('utf8'));
309
+ }
310
+ catch {
311
+ return null;
312
+ }
313
+ }
314
+ function validateNewComment(body) {
315
+ if (!isDiffFilter(body.filter))
316
+ return 'invalid filter';
317
+ if (typeof body.path !== 'string' || body.path === '')
318
+ return 'path is required';
319
+ if (body.side !== 'additions' && body.side !== 'deletions')
320
+ return 'side must be additions or deletions';
321
+ if (!Number.isInteger(body.startLine) ||
322
+ !Number.isInteger(body.endLine) ||
323
+ body.startLine < 1 ||
324
+ body.endLine < body.startLine) {
325
+ return 'invalid line range';
326
+ }
327
+ if (typeof body.body !== 'string' || body.body.trim() === '')
328
+ return 'comment body is required';
329
+ return null;
330
+ }
331
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,287 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { parsePatch, summarizeFiles } from '../shared/patch.js';
3
+ import { DIFF_FILTERS, } from '../shared/protocol.js';
4
+ import { ReviewStore } from '../store/reviews.js';
5
+ import { ExecError } from '../vcs/exec.js';
6
+ import { VcsError } from '../vcs/types.js';
7
+ import { watchWorkTree } from './watcher.js';
8
+ const MAX_PATCH_BYTES = Number(process.env['DIFFS_PANE_MAX_PATCH_BYTES'] ?? 20 * 1024 * 1024);
9
+ export function sha256(text) {
10
+ return createHash('sha256').update(text).digest('hex');
11
+ }
12
+ /**
13
+ * One live review session for a working tree: owns the watcher, per-filter
14
+ * patch cache, SSE clients, turn state, and the review store.
15
+ */
16
+ export class Session {
17
+ backend;
18
+ reviews;
19
+ onDirty;
20
+ sessionId;
21
+ token;
22
+ root;
23
+ owners = new Set();
24
+ defaultFilter;
25
+ base;
26
+ turn;
27
+ cache = new Map();
28
+ clients = new Set();
29
+ watcher = null;
30
+ refreshAbort = null;
31
+ refreshRunning = false;
32
+ refreshPending = false;
33
+ closed = false;
34
+ constructor(record, backend, reviews, onDirty) {
35
+ this.backend = backend;
36
+ this.reviews = reviews;
37
+ this.onDirty = onDirty;
38
+ this.sessionId = record.sessionId;
39
+ this.token = record.token;
40
+ this.root = record.root;
41
+ this.owners = new Set(record.owners);
42
+ this.defaultFilter = record.defaultFilter;
43
+ this.base = record.base;
44
+ this.turn = record.turn;
45
+ }
46
+ static async start(record, backend, options) {
47
+ const reviews = await ReviewStore.load(record.root, options.stateDir);
48
+ const session = new Session(record, backend, reviews, options.onDirty);
49
+ if (record.watch !== false) {
50
+ session.watcher = await watchWorkTree(record.root, () => session.handleFsChange());
51
+ }
52
+ return session;
53
+ }
54
+ toRecord() {
55
+ return {
56
+ sessionId: this.sessionId,
57
+ token: this.token,
58
+ root: this.root,
59
+ vcs: this.backend.kind,
60
+ owners: [...this.owners],
61
+ defaultFilter: this.defaultFilter,
62
+ base: this.base,
63
+ watch: this.isWatching(),
64
+ turn: this.turn,
65
+ };
66
+ }
67
+ info() {
68
+ return {
69
+ sessionId: this.sessionId,
70
+ root: this.root,
71
+ vcs: this.backend.kind,
72
+ defaultFilter: this.defaultFilter,
73
+ unstagedLabel: this.backend.kind === 'jj' ? 'Working copy' : 'Unstaged',
74
+ turn: this.turn
75
+ ? { turnId: this.turn.turnId, agent: this.turn.agent, active: this.turn.active }
76
+ : null,
77
+ };
78
+ }
79
+ clientCount() {
80
+ return this.clients.size;
81
+ }
82
+ isWatching() {
83
+ return this.watcher !== null;
84
+ }
85
+ async setWatching(enabled) {
86
+ if (enabled === this.isWatching())
87
+ return;
88
+ if (enabled) {
89
+ if (this.closed)
90
+ return;
91
+ const watcher = await watchWorkTree(this.root, () => this.handleFsChange());
92
+ if (this.closed)
93
+ await watcher.close();
94
+ else
95
+ this.watcher = watcher;
96
+ return;
97
+ }
98
+ const watcher = this.watcher;
99
+ this.watcher = null;
100
+ await watcher?.close();
101
+ }
102
+ listComments() {
103
+ return this.reviews.list();
104
+ }
105
+ // ── Patch computation ────────────────────────────────────────────────
106
+ /** Serve the patch for a filter, recomputing only when stale. */
107
+ async getPatch(filter) {
108
+ const entry = this.cache.get(filter);
109
+ if (entry && !entry.dirty)
110
+ return entry.payload;
111
+ const payload = await this.computePayload(filter, undefined);
112
+ // A concurrent refresh may have already stored a fresher result.
113
+ const current = this.cache.get(filter);
114
+ if (!current || current.dirty)
115
+ this.cache.set(filter, { payload, dirty: false });
116
+ return this.cache.get(filter).payload;
117
+ }
118
+ async computePayload(filter, signal) {
119
+ const generatedAt = new Date().toISOString();
120
+ try {
121
+ const patch = await this.backend.computePatch(filter, {
122
+ signal,
123
+ base: this.base,
124
+ turnBaseline: this.turn?.baseline,
125
+ });
126
+ if (Buffer.byteLength(patch, 'utf8') > MAX_PATCH_BYTES) {
127
+ return this.errorPayload(filter, `Patch exceeds the ${Math.round(MAX_PATCH_BYTES / 1024 / 1024)}MB size limit.`, generatedAt);
128
+ }
129
+ const files = summarizeFiles(parsePatch(patch));
130
+ const payload = {
131
+ filter,
132
+ patchHash: sha256(patch),
133
+ patch,
134
+ files,
135
+ error: null,
136
+ generatedAt,
137
+ };
138
+ if (this.reviews.reanchor(filter, patch, payload.patchHash)) {
139
+ this.broadcastComments();
140
+ }
141
+ return payload;
142
+ }
143
+ catch (error) {
144
+ if (error instanceof ExecError && error.aborted)
145
+ throw error;
146
+ const message = error instanceof VcsError
147
+ ? error.message
148
+ : `Failed to compute ${filter} diff: ${error instanceof Error ? error.message : String(error)}`;
149
+ return this.errorPayload(filter, message, generatedAt);
150
+ }
151
+ }
152
+ errorPayload(filter, message, generatedAt) {
153
+ return {
154
+ filter,
155
+ patchHash: sha256(`error:${message}`),
156
+ patch: '',
157
+ files: [],
158
+ error: message,
159
+ generatedAt,
160
+ };
161
+ }
162
+ // ── Refresh scheduling ───────────────────────────────────────────────
163
+ handleFsChange() {
164
+ if (this.closed)
165
+ return;
166
+ // Everything is stale; recompute only what connected clients view.
167
+ for (const filter of DIFF_FILTERS) {
168
+ const entry = this.cache.get(filter);
169
+ if (entry)
170
+ entry.dirty = true;
171
+ }
172
+ void this.scheduleRefresh();
173
+ }
174
+ viewedFilters() {
175
+ const filters = new Set();
176
+ for (const client of this.clients)
177
+ filters.add(client.filter);
178
+ return [...filters];
179
+ }
180
+ async scheduleRefresh() {
181
+ if (this.refreshRunning) {
182
+ // Coalesce: newer filesystem state supersedes the in-flight compute.
183
+ this.refreshPending = true;
184
+ this.refreshAbort?.abort();
185
+ return;
186
+ }
187
+ this.refreshRunning = true;
188
+ try {
189
+ do {
190
+ this.refreshPending = false;
191
+ this.refreshAbort = new AbortController();
192
+ await this.refreshViewed(this.refreshAbort.signal);
193
+ } while (this.refreshPending && !this.closed);
194
+ }
195
+ finally {
196
+ this.refreshRunning = false;
197
+ this.refreshAbort = null;
198
+ }
199
+ }
200
+ async refreshViewed(signal) {
201
+ for (const filter of this.viewedFilters()) {
202
+ const previous = this.cache.get(filter);
203
+ if (previous && !previous.dirty)
204
+ continue;
205
+ let payload;
206
+ try {
207
+ payload = await this.computePayload(filter, signal);
208
+ }
209
+ catch (error) {
210
+ if (error instanceof ExecError && error.aborted)
211
+ return; // Superseded.
212
+ throw error;
213
+ }
214
+ const unchanged = previous?.payload.patchHash === payload.patchHash;
215
+ this.cache.set(filter, { payload, dirty: false });
216
+ if (!unchanged) {
217
+ // Broadcast only real changes so clients never reparse identical patches.
218
+ this.broadcast('patch', { filter, patchHash: payload.patchHash });
219
+ }
220
+ }
221
+ }
222
+ // ── SSE ──────────────────────────────────────────────────────────────
223
+ addClient(res, filter) {
224
+ const client = { res, filter };
225
+ this.clients.add(client);
226
+ res.on('close', () => {
227
+ this.clients.delete(client);
228
+ });
229
+ // If the viewed filter went stale while nobody watched it, catch up now.
230
+ const entry = this.cache.get(filter);
231
+ if (!entry || entry.dirty)
232
+ void this.scheduleRefresh();
233
+ }
234
+ broadcast(event, data) {
235
+ const frame = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
236
+ for (const client of this.clients)
237
+ client.res.write(frame);
238
+ }
239
+ broadcastComments() {
240
+ this.broadcast('comments', { comments: this.reviews.list() });
241
+ }
242
+ ping() {
243
+ for (const client of this.clients)
244
+ client.res.write(': ping\n\n');
245
+ }
246
+ // ── Reviews ──────────────────────────────────────────────────────────
247
+ get reviewStore() {
248
+ return this.reviews;
249
+ }
250
+ // ── Turn lifecycle ───────────────────────────────────────────────────
251
+ /** Idempotent: repeated starts for the same turn keep the first baseline. */
252
+ async startTurn(turnId, agent) {
253
+ if (this.turn && this.turn.turnId === turnId && this.turn.active)
254
+ return;
255
+ const baseline = await this.backend.captureTurnBaseline();
256
+ this.turn = { turnId, agent, active: true, baseline };
257
+ this.invalidateFilter('turn');
258
+ this.onDirty();
259
+ this.broadcast('session', this.info());
260
+ void this.scheduleRefresh();
261
+ }
262
+ endTurn(turnId) {
263
+ if (!this.turn || this.turn.turnId !== turnId || !this.turn.active)
264
+ return;
265
+ this.turn.active = false;
266
+ this.onDirty();
267
+ this.broadcast('session', this.info());
268
+ }
269
+ invalidateFilter(filter) {
270
+ const entry = this.cache.get(filter);
271
+ if (entry)
272
+ entry.dirty = true;
273
+ }
274
+ // ── Shutdown ─────────────────────────────────────────────────────────
275
+ async close() {
276
+ this.closed = true;
277
+ this.refreshAbort?.abort();
278
+ await this.watcher?.close();
279
+ this.watcher = null;
280
+ for (const client of this.clients) {
281
+ client.res.write('event: end\ndata: {}\n\n');
282
+ client.res.end();
283
+ }
284
+ this.clients.clear();
285
+ }
286
+ }
287
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/daemon/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,YAAY,GAKb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAsC,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAwB,MAAM,cAAc,CAAC;AAEnE,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAgC9F,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,OAAO;IAmBC;IACA;IACA;IApBV,SAAS,CAAS;IAClB,KAAK,CAAS;IACd,IAAI,CAAS;IACtB,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3B,aAAa,CAAa;IAC1B,IAAI,CAAqB;IACzB,IAAI,CAAwB;IAEX,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1C,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;IACxC,OAAO,GAA2B,IAAI,CAAC;IACvC,YAAY,GAA2B,IAAI,CAAC;IAC5C,cAAc,GAAG,KAAK,CAAC;IACvB,cAAc,GAAG,KAAK,CAAC;IACvB,MAAM,GAAG,KAAK,CAAC;IAEvB,YACE,MAAqB,EACJ,OAAmB,EACnB,OAAoB,EACpB,OAAmB;QAFnB,YAAO,GAAP,OAAO,CAAY;QACnB,YAAO,GAAP,OAAO,CAAa;QACpB,YAAO,GAAP,OAAO,CAAY;QAEpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,MAAqB,EACrB,OAAmB,EACnB,OAAmD;QAEnD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ;QACN,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACtB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,IAAI;QACF,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACtB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;YACvE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACb,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChF,CAAC,CAAC,IAAI;SACT,CAAC;IACJ,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAgB;QAChC,IAAI,OAAO,KAAK,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YACxB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAC5E,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;;gBAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,wEAAwE;IAExE,iEAAiE;IACjE,KAAK,CAAC,QAAQ,CAAC,MAAkB;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7D,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,OAAO,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,MAAkB,EAClB,MAA+B;QAE/B,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE;gBACpD,MAAM;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ;aAClC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,eAAe,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC,YAAY,CACtB,MAAM,EACN,qBAAqB,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAC9E,WAAW,CACZ,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,MAAM,OAAO,GAAiB;gBAC5B,MAAM;gBACN,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC;gBACxB,KAAK;gBACL,KAAK;gBACL,KAAK,EAAE,IAAI;gBACX,WAAW;aACZ,CAAC;YACF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO;gBAAE,MAAM,KAAK,CAAC;YAC7D,MAAM,OAAO,GACX,KAAK,YAAY,QAAQ;gBACvB,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,qBAAqB,MAAM,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACpG,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,MAAkB,EAAE,OAAe,EAAE,WAAmB;QAC3E,OAAO;YACL,MAAM;YACN,SAAS,EAAE,MAAM,CAAC,SAAS,OAAO,EAAE,CAAC;YACrC,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,OAAO;YACd,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,wEAAwE;IAEhE,cAAc;QACpB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,mEAAmE;QACnE,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,KAAK;gBAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;IAC9B,CAAC;IAEO,aAAa;QACnB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;QACtC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,qEAAqE;YACrE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC;YACH,GAAG,CAAC;gBACF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;gBAC1C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC,QAAQ,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAmB;QAC7C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAAE,SAAS;YAC1C,IAAI,OAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO;oBAAE,OAAO,CAAC,cAAc;gBACvE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,SAAS,GAAG,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,0EAA0E;gBAC1E,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IAExE,SAAS,CAAC,GAAmB,EAAE,MAAkB;QAC/C,MAAM,MAAM,GAAc,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,yEAAyE;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;IACzD,CAAC;IAEO,SAAS,CAAC,KAAa,EAAE,IAAa;QAC5C,MAAM,KAAK,GAAG,UAAU,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QACnE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI;QACF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,wEAAwE;IAExE,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,wEAAwE;IAExE,6EAA6E;IAC7E,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,KAAyB;QACvD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC3E,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,gBAAgB,CAAC,MAAkB;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,wEAAwE;IAExE,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}