@vantran-se/openchamber-web 2.1.1 → 2.2.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 (442) hide show
  1. package/README.md +32 -24
  2. package/bin/cli.js +1 -3
  3. package/bin/cli.test.js +40 -16
  4. package/bin/lib/DOCUMENTATION.md +6 -5
  5. package/bin/lib/cli-args.js +6 -1
  6. package/bin/lib/cli-args.test.js +34 -0
  7. package/bin/lib/cli-lifecycle.js +0 -1
  8. package/bin/lib/cli-network.js +8 -2
  9. package/bin/lib/cli-process.js +1 -1
  10. package/bin/lib/cli-settings-accessors.test.js +21 -13
  11. package/bin/lib/cli-startup.js +17 -11
  12. package/bin/lib/cli-startup.test.js +92 -2
  13. package/bin/lib/commands-connect-url.js +8 -1
  14. package/bin/lib/commands-schedule.js +8 -2
  15. package/bin/lib/commands-serve.js +15 -21
  16. package/bin/lib/commands-update.js +12 -24
  17. package/bin/lib/commands-update.test.js +14 -46
  18. package/dist/assets/DiffView-Cv9MSXl1.js +4 -0
  19. package/dist/assets/FilePreviewCommentMenu-D4kLseHj.js +4 -0
  20. package/dist/assets/FilesView-BVoD8I2x.js +14 -0
  21. package/dist/assets/{GitView-DzuzhIPx.js → GitView-Bzb8p-ew.js} +4 -4
  22. package/dist/assets/GuestSurfacePane-Crdbvsxo.js +1 -0
  23. package/dist/assets/InProgressOperationBanner-CwMjNQgk.js +2 -0
  24. package/dist/assets/{JsonTreeView-B_EPRjzy.js → JsonTreeView-DRKHZfsn.js} +1 -1
  25. package/dist/assets/MarkdownImageGallery-DZtqT1Zn.js +1 -0
  26. package/dist/assets/MarkdownRendererImpl-CqG7HCNd.js +10 -0
  27. package/dist/assets/OnboardingScreen-DMIxwYK5.js +1 -0
  28. package/dist/assets/{PatchDiff-6yh1csza.js → PatchDiff-CUcCg1jk.js} +1 -1
  29. package/dist/assets/PierreDiffViewer-CnnR-dnD.js +228 -0
  30. package/dist/assets/PlanView-RCBadcY7.js +5 -0
  31. package/dist/assets/SettingsView-CjBjZFRO.js +30 -0
  32. package/dist/assets/SettingsWindow-DyM7QuhI.js +1 -0
  33. package/dist/assets/SubmoduleDiffSummary-BWIfgMED.js +1 -0
  34. package/dist/assets/ToolOutputDialog-Q0P3FuAi.js +15 -0
  35. package/dist/assets/ToolPartDiffPreview-p7qR9FpU.js +8 -0
  36. package/dist/assets/{VirtualizedFileDiff-BTJVRkyo.js → VirtualizedFileDiff-CFpjL8Ns.js} +3 -3
  37. package/dist/assets/{Virtualizer-xCEYz34p.js → Virtualizer-C0IsclZn.js} +1 -1
  38. package/dist/assets/WalkthroughView-DI31zD02.js +4 -0
  39. package/dist/assets/appThemeRegistry-B9gkFq9i.js +1 -0
  40. package/dist/assets/{computeVirtualFileMetrics-CmPe29DM.js → computeVirtualFileMetrics-C2WM6JC2.js} +2 -2
  41. package/dist/assets/de-YKfk5MmC.js +14 -0
  42. package/dist/assets/es-_gwT0kr-.js +20 -0
  43. package/dist/assets/fileTreeStatus-D438yi8M.js +1 -0
  44. package/dist/assets/fr-DqzvXmIm.js +18 -0
  45. package/dist/assets/index-BLaHKdtx.js +1 -0
  46. package/dist/assets/index-BkMXRrVQ.css +1 -0
  47. package/dist/assets/index-DxNa7xYB.js +65 -0
  48. package/dist/assets/initializeSharedPreferences-Bck5EAWP.js +1 -0
  49. package/dist/assets/{isDiffPlainText-CQmDCnEv.js → isDiffPlainText-Dgbw8VKk.js} +1 -1
  50. package/dist/assets/{isFilePlainText-CYBUzW4I.js → isFilePlainText-_ZS5UYRj.js} +1 -1
  51. package/dist/assets/ja-B-GFYhQE.js +20 -0
  52. package/dist/assets/ko-mzksfqDC.js +20 -0
  53. package/dist/assets/main-C5Xx8dn_.js +2 -0
  54. package/dist/assets/main-CfBSQM1H.js +990 -0
  55. package/dist/assets/markdownCore-BmWwW1ll.js +7 -0
  56. package/dist/assets/miniChat-mnKwy4vQ.js +2 -0
  57. package/dist/assets/mobile-DeEQd0wZ.js +2 -0
  58. package/dist/assets/nl-CWQr6NSq.js +20 -0
  59. package/dist/assets/{parseDiffFromFile-Cy0PNxun.js → parseDiffFromFile-BUgn-T9p.js} +2 -2
  60. package/dist/assets/patchFileDiff-Dt8LhgBh.js +13 -0
  61. package/dist/assets/pl-UmRcDUX2.js +20 -0
  62. package/dist/assets/pt-BR-BSLybvVF.js +20 -0
  63. package/dist/assets/relocateRestoredSession-B5E9xb3T.js +1 -0
  64. package/dist/assets/renderElectronMiniChatApp-C0a9A5_J.js +2 -0
  65. package/dist/assets/renderMobileApp-BNncg3Pk.js +25 -0
  66. package/dist/assets/runtimeEndpointReset-CZ5aafpl.js +62 -0
  67. package/dist/assets/{selectionMarkdown-TkYk5h9l.js → selectionMarkdown-CUN3wUld.js} +9 -9
  68. package/dist/assets/{sessionOwnership-Bs1xbRfB.js → sessionOwnership-BSuxCEhb.js} +1 -1
  69. package/dist/assets/shikiHighlight-DHDx-6eM.js +1 -0
  70. package/dist/assets/space-apply-DM_2pRW7.js +1 -0
  71. package/dist/assets/space-close-Bpomt8z0.js +1 -0
  72. package/dist/assets/{surface-B6n7wJtt.js → surface-C-jQaGnL.js} +1 -1
  73. package/dist/assets/{textMateThemeFromAppTheme-CDlKffWz.js → textMateThemeFromAppTheme-DlsTphbY.js} +1 -1
  74. package/dist/assets/tr-gaTrX_HK.js +11 -0
  75. package/dist/assets/uk-CnJF6ykl.js +20 -0
  76. package/dist/assets/{useAppFontEffects-DCqCVGlT.js → useAppFontEffects-DGlvOqP_.js} +194 -233
  77. package/dist/assets/useInlineCommentController-kMN4Wg_D.js +2 -0
  78. package/dist/assets/{useRootScrollLock-BowwS8kq.js → useRootScrollLock-DMPpvpNP.js} +2 -2
  79. package/dist/assets/{vendor-base-ui-DX96QhTP.js → vendor-base-ui-Det7U81h.js} +1 -1
  80. package/dist/assets/{vendor-codemirror-autocomplete-DW1FQz9_.js → vendor-codemirror-autocomplete-BSHQHbKu.js} +1 -1
  81. package/dist/assets/{vendor-codemirror-commands-DpmhalwN.js → vendor-codemirror-commands-C4G_dPWe.js} +1 -1
  82. package/dist/assets/{vendor-codemirror-lang-angular-BqExbN1M.js → vendor-codemirror-lang-angular-B6LbBGHB.js} +1 -1
  83. package/dist/assets/{vendor-codemirror-lang-cpp-DZA36HfS.js → vendor-codemirror-lang-cpp-BWWXBx7W.js} +1 -1
  84. package/dist/assets/{vendor-codemirror-lang-css-B07blnnZ.js → vendor-codemirror-lang-css-Cayfb29q.js} +1 -1
  85. package/dist/assets/{vendor-codemirror-lang-go-BM8K9D1-.js → vendor-codemirror-lang-go-BoKlCNKw.js} +1 -1
  86. package/dist/assets/{vendor-codemirror-lang-html-DaH9adfE.js → vendor-codemirror-lang-html-BQWerHsJ.js} +1 -1
  87. package/dist/assets/{vendor-codemirror-lang-java-CsdC0viz.js → vendor-codemirror-lang-java-DWX7Fq_K.js} +1 -1
  88. package/dist/assets/{vendor-codemirror-lang-javascript-CpGYXGuo.js → vendor-codemirror-lang-javascript-DbpEcZM0.js} +2 -2
  89. package/dist/assets/{vendor-codemirror-lang-jinja-BBeGzXw5.js → vendor-codemirror-lang-jinja-D1JIJRA7.js} +1 -1
  90. package/dist/assets/{vendor-codemirror-lang-json-58T70Hqs.js → vendor-codemirror-lang-json-BzgckzmB.js} +1 -1
  91. package/dist/assets/{vendor-codemirror-lang-less-BI-xCA59.js → vendor-codemirror-lang-less-B9EpDXFi.js} +1 -1
  92. package/dist/assets/{vendor-codemirror-lang-liquid-zEcMa-zy.js → vendor-codemirror-lang-liquid-9U7kRbSf.js} +1 -1
  93. package/dist/assets/{vendor-codemirror-lang-markdown-BLKnlLP4.js → vendor-codemirror-lang-markdown-D2TEBIvZ.js} +1 -1
  94. package/dist/assets/{vendor-codemirror-lang-php-9f35M83-.js → vendor-codemirror-lang-php-BT6sDVzE.js} +1 -1
  95. package/dist/assets/vendor-codemirror-lang-python-jAMtYiA9.js +3 -0
  96. package/dist/assets/{vendor-codemirror-lang-rust-MNDL_jZQ.js → vendor-codemirror-lang-rust-CVO56EiL.js} +1 -1
  97. package/dist/assets/{vendor-codemirror-lang-sass-p9epsSNm.js → vendor-codemirror-lang-sass-DZlOoUWu.js} +1 -1
  98. package/dist/assets/{vendor-codemirror-lang-sql-Bqzh0EXX.js → vendor-codemirror-lang-sql-fZ6t1DPw.js} +1 -1
  99. package/dist/assets/{vendor-codemirror-lang-vue-BnNUWV-p.js → vendor-codemirror-lang-vue-DxbqrLiE.js} +1 -1
  100. package/dist/assets/{vendor-codemirror-lang-wast-C2a-oLmk.js → vendor-codemirror-lang-wast-DyU1Gt-I.js} +1 -1
  101. package/dist/assets/vendor-codemirror-lang-xml-C9a_K5_p.js +1 -0
  102. package/dist/assets/{vendor-codemirror-lang-yaml-C0sjswB0.js → vendor-codemirror-lang-yaml-Cptq8l0e.js} +1 -1
  103. package/dist/assets/{vendor-codemirror-language-ByBn5zIW.js → vendor-codemirror-language-DufXoQvE.js} +2 -2
  104. package/dist/assets/vendor-codemirror-language-data-CtwSWKtX.js +2 -0
  105. package/dist/assets/{vendor-codemirror-search-ib-sHD5W.js → vendor-codemirror-search-CvXM_pZg.js} +1 -1
  106. package/dist/assets/{vendor-codemirror-state-G3UuR-be.js → vendor-codemirror-state-Dek9sMtw.js} +1 -1
  107. package/dist/assets/{vendor-codemirror-view-Bniqp7p5.js → vendor-codemirror-view-1e0FQ6Wn.js} +1 -1
  108. package/dist/assets/vendor-framer-motion-DxDVhOLc.js +9 -0
  109. package/dist/assets/vendor-katex-CuQvj9-L.js +257 -0
  110. package/dist/assets/vendor-katex-DdZNUVNG.css +1 -0
  111. package/dist/assets/{vendor-motion-dom-DcCgeG69.js → vendor-motion-dom-HXPOMxb7.js} +1 -1
  112. package/dist/assets/{vendor-opencode-client-DHzhmLwV.js → vendor-opencode-client-BmFcUkbQ.js} +1 -1
  113. package/dist/assets/{vendor-replit-codemirror-vim-DkzqxN2H.js → vendor-replit-codemirror-vim-BlJRn-cW.js} +2 -2
  114. package/dist/assets/{vendor-tanstack-react-virtual-H_JmXOFV.js → vendor-tanstack-react-virtual-CvuLsk7D.js} +1 -1
  115. package/dist/assets/{vendor-tanstack-virtual-core-Dxc8hSTB.js → vendor-tanstack-virtual-core-DPaNcJcT.js} +1 -1
  116. package/dist/assets/zh-CN-t2vigSB1.js +20 -0
  117. package/dist/assets/zh-TW-jAgqBokB.js +20 -0
  118. package/dist/index.html +6 -6
  119. package/dist/mini-chat.html +6 -6
  120. package/dist/mobile.html +6 -6
  121. package/package.json +8 -5
  122. package/server/index.js +80 -36
  123. package/server/lib/agent-memory/actions.js +1 -6
  124. package/server/lib/agent-memory/routes.js +1 -2
  125. package/server/lib/agent-memory/runtime.js +1 -8
  126. package/server/lib/agent-tool/DOCUMENTATION.md +7 -3
  127. package/server/lib/agent-tool/runtime.js +3 -6
  128. package/server/lib/agent-tool/runtime.test.js +0 -2
  129. package/server/lib/browser-control/DOCUMENTATION.md +6 -0
  130. package/server/lib/changelog/update-notes.js +1 -1
  131. package/server/lib/context-obligatory/runtime.js +1 -2
  132. package/server/lib/dev-tunnel/DOCUMENTATION.md +8 -0
  133. package/server/lib/dev-tunnel/client.js +21 -10
  134. package/server/lib/dev-tunnel/tunnel.test.js +34 -0
  135. package/server/lib/dispatch-results/runtime.js +1 -1
  136. package/server/lib/enterprise-mode.d.ts +1 -0
  137. package/server/lib/enterprise-mode.js +13 -2
  138. package/server/lib/enterprise-mode.test.js +21 -0
  139. package/server/lib/event-stream/DOCUMENTATION.md +2 -2
  140. package/server/lib/event-stream/index.js +1 -3
  141. package/server/lib/event-stream/translate-v2.js +1 -9
  142. package/server/lib/event-stream/translate-v2.test.js +0 -11
  143. package/server/lib/fs/DOCUMENTATION.md +5 -2
  144. package/server/lib/fs/routes.js +62 -15
  145. package/server/lib/fs/routes.test.js +278 -48
  146. package/server/lib/fs/workspace-file-names.js +104 -0
  147. package/server/lib/fs/workspace-file-names.test.js +62 -0
  148. package/server/lib/git/DOCUMENTATION.md +17 -5
  149. package/server/lib/git/contributor-provenance-storage.js +9 -6
  150. package/server/lib/git/contributor-provenance-storage.test.js +29 -0
  151. package/server/lib/git/credential-broker.js +1 -1
  152. package/server/lib/git/credential-resolver.js +1 -4
  153. package/server/lib/git/credentials.js +1 -0
  154. package/server/lib/git/discovery-endpoint.js +1 -1
  155. package/server/lib/git/identity-provisioning.js +2 -1
  156. package/server/lib/git/identity-storage.js +3 -4
  157. package/server/lib/git/lfs-discovery.js +14 -14
  158. package/server/lib/git/lfs-discovery.test.js +16 -6
  159. package/server/lib/git/network-operation-plan.js +50 -62
  160. package/server/lib/git/network-operation-plan.test.js +103 -1
  161. package/server/lib/git/network-operation-registry.js +4 -6
  162. package/server/lib/git/network-operation-storage.js +4 -6
  163. package/server/lib/git/network-operations.js +12 -4
  164. package/server/lib/git/network-operations.test.js +19 -6
  165. package/server/lib/git/redaction.js +2 -1
  166. package/server/lib/git/repository-credential-runtime.js +5 -3
  167. package/server/lib/git/repository-credential-runtime.test.js +22 -0
  168. package/server/lib/git/routes.js +31 -137
  169. package/server/lib/git/routes.test.js +2 -2
  170. package/server/lib/git/service.js +143 -27
  171. package/server/lib/git/service.test.js +215 -1
  172. package/server/lib/git/ssh-credential-storage.js +1 -4
  173. package/server/lib/git/submodule-discovery.js +1 -1
  174. package/server/lib/git/worktree-bootstrap-storage.js +3 -4
  175. package/server/lib/git/worktree-bootstrap-storage.test.js +15 -0
  176. package/server/lib/git/worktree-creation.js +194 -0
  177. package/server/lib/git/worktree-creation.test.js +155 -0
  178. package/server/lib/github/DOCUMENTATION.md +11 -6
  179. package/server/lib/github/auth.js +2 -4
  180. package/server/lib/github/device-flow.js +2 -2
  181. package/server/lib/github/gh-cli-credential.js +1 -0
  182. package/server/lib/github/octokit.js +31 -0
  183. package/server/lib/github/pr-status.js +35 -18
  184. package/server/lib/github/pr-status.test.js +271 -3
  185. package/server/lib/github/reference-search.js +102 -13
  186. package/server/lib/github/reference-search.test.js +48 -7
  187. package/server/lib/github/routes.auth.test.js +18 -0
  188. package/server/lib/github/routes.js +360 -6
  189. package/server/lib/github/routes.mutations.test.js +239 -0
  190. package/server/lib/github/routes.test.js +134 -2
  191. package/server/lib/gitlab/DOCUMENTATION.md +5 -1
  192. package/server/lib/gitlab/auth-storage.test.js +1 -0
  193. package/server/lib/gitlab/mappers.js +30 -1
  194. package/server/lib/gitlab/resources.js +230 -6
  195. package/server/lib/gitlab/resources.test.js +179 -0
  196. package/server/lib/gitlab/routes.js +200 -6
  197. package/server/lib/gitlab/routes.test.js +186 -2
  198. package/server/lib/gitlab/validation.js +1 -5
  199. package/server/lib/guests/DOCUMENTATION.md +1 -1
  200. package/server/lib/guests/oauth.js +2 -2
  201. package/server/lib/guests/service.js +1 -1
  202. package/server/lib/guests/sockets.js +1 -1
  203. package/server/lib/injected-env.d.ts +8 -0
  204. package/server/lib/injected-env.js +50 -0
  205. package/server/lib/injected-env.test.js +56 -0
  206. package/server/lib/linear/DOCUMENTATION.md +5 -6
  207. package/server/lib/linear/issues.js +62 -4
  208. package/server/lib/linear/issues.test.js +68 -0
  209. package/server/lib/linear/oauth.js +5 -5
  210. package/server/lib/linear/parse.js +2 -9
  211. package/server/lib/message-queue/DOCUMENTATION.md +23 -1
  212. package/server/lib/message-queue/runtime.js +85 -12
  213. package/server/lib/message-queue/runtime.test.js +172 -2
  214. package/server/lib/notifications/apns-runtime.js +5 -6
  215. package/server/lib/notifications/apns-runtime.test.js +20 -4
  216. package/server/lib/openchamber-control/DOCUMENTATION.md +19 -1
  217. package/server/lib/openchamber-control/actions.js +2 -1
  218. package/server/lib/openchamber-control/service.js +119 -20
  219. package/server/lib/openchamber-control/service.test.js +166 -0
  220. package/server/lib/openchamber-sessions/archive-store.js +1 -6
  221. package/server/lib/openchamber-sessions/routes.js +47 -12
  222. package/server/lib/openchamber-sessions/routes.test.js +65 -2
  223. package/server/lib/openchamber-sessions/session-metadata-store.js +1 -6
  224. package/server/lib/opencode/DOCUMENTATION.md +22 -8
  225. package/server/lib/opencode/agents.js +62 -0
  226. package/server/lib/opencode/auth-state-runtime.js +3 -1
  227. package/server/lib/opencode/auth.d.ts +1 -1
  228. package/server/lib/opencode/auth.js +8 -0
  229. package/server/lib/opencode/auth.test.js +31 -0
  230. package/server/lib/opencode/config-entity-routes.js +16 -0
  231. package/server/lib/opencode/config-entity-v2.test.js +16 -1
  232. package/server/lib/opencode/config-paths.test.js +2 -2
  233. package/server/lib/opencode/config-v2.js +2 -4
  234. package/server/lib/opencode/feature-routes-runtime.js +89 -49
  235. package/server/lib/opencode/lifecycle.js +41 -21
  236. package/server/lib/opencode/lifecycle.test.js +50 -2
  237. package/server/lib/opencode/model-discovery.js +1 -1
  238. package/server/lib/opencode/model-discovery.test.js +17 -0
  239. package/server/lib/opencode/models-metadata.js +0 -2
  240. package/server/lib/opencode/openchamber-routes.test.js +3 -3
  241. package/server/lib/opencode/plugins.js +6 -9
  242. package/server/lib/opencode/provider-source-route.test.js +101 -3
  243. package/server/lib/opencode/providers-disabled.test.js +59 -0
  244. package/server/lib/opencode/providers.js +34 -0
  245. package/server/lib/opencode/proxy.js +11 -3
  246. package/server/lib/opencode/routes.js +40 -2
  247. package/server/lib/opencode/settings-helpers.js +27 -1
  248. package/server/lib/opencode/settings-helpers.test.js +19 -7
  249. package/server/lib/opencode/settings-registry.json +27 -16
  250. package/server/lib/opencode/settings-runtime.test.js +18 -0
  251. package/server/lib/opencode/shared-service-runtime.js +23 -104
  252. package/server/lib/opencode/shared.js +77 -46
  253. package/server/lib/opencode/shared.test.js +12 -12
  254. package/server/lib/opencode/shutdown-runtime.test.js +2 -3
  255. package/server/lib/opencode/skill-routes.js +123 -38
  256. package/server/lib/opencode/skill-routes.test.js +201 -0
  257. package/server/lib/opencode/skills.js +81 -34
  258. package/server/lib/opencode/skills.test.js +176 -21
  259. package/server/lib/opencode/startup-pipeline-runtime.js +6 -3
  260. package/server/lib/opencode/startup-pipeline-runtime.test.js +2 -1
  261. package/server/lib/opencode/watcher.test.js +0 -54
  262. package/server/lib/outbound-proxy.js +52 -0
  263. package/server/lib/outbound-proxy.test.js +55 -0
  264. package/server/lib/package-manager.js +23 -17
  265. package/server/lib/package-manager.test.js +5 -18
  266. package/server/lib/permission-auto-accept/DOCUMENTATION.md +1 -1
  267. package/server/lib/permission-auto-accept/runtime.js +19 -47
  268. package/server/lib/permission-auto-accept/runtime.test.js +2 -2
  269. package/server/lib/project-context/DOCUMENTATION.md +7 -1
  270. package/server/lib/project-context/routes.js +1 -2
  271. package/server/lib/project-context/runtime.js +12 -14
  272. package/server/lib/project-context/runtime.test.js +78 -2
  273. package/server/lib/projects/project-config.js +30 -15
  274. package/server/lib/projects/project-config.test.js +30 -0
  275. package/server/lib/projects/project-setup.js +1 -2
  276. package/server/lib/projects/routes.js +1 -2
  277. package/server/lib/quota/DOCUMENTATION.md +35 -7
  278. package/server/lib/quota/index.js +1 -0
  279. package/server/lib/quota/providers/claude/index.js +1 -1
  280. package/server/lib/quota/providers/cline-pass.js +1 -1
  281. package/server/lib/quota/providers/exe-dev.js +1 -1
  282. package/server/lib/quota/providers/google/index.js +1 -1
  283. package/server/lib/quota/providers/hyper.js +1 -1
  284. package/server/lib/quota/providers/kimi.js +116 -36
  285. package/server/lib/quota/providers/kimi.test.js +128 -3
  286. package/server/lib/quota/providers/opencode-go.js +144 -21
  287. package/server/lib/quota/providers/opencode-go.test.js +229 -6
  288. package/server/lib/quota/providers/openrouter.js +1 -1
  289. package/server/lib/quota/providers/zenmux.js +1 -1
  290. package/server/lib/quota/utils/auth.js +1 -0
  291. package/server/lib/quota/utils/transformers.js +2 -6
  292. package/server/lib/relay/DOCUMENTATION.md +18 -3
  293. package/server/lib/relay/e2ee.js +7 -7
  294. package/server/lib/relay/host-client.js +84 -13
  295. package/server/lib/relay/host-client.test.js +201 -1
  296. package/server/lib/relay/identity.js +6 -29
  297. package/server/lib/relay/identity.test.js +18 -28
  298. package/server/lib/relay/key-store.js +141 -0
  299. package/server/lib/relay/key-store.test.js +138 -0
  300. package/server/lib/relay/service.js +8 -8
  301. package/server/lib/relay/service.test.js +10 -5
  302. package/server/lib/relay/signing-key.js +13 -36
  303. package/server/lib/relay/tunnel-codec.js +10 -10
  304. package/server/lib/route-module-exports.test.js +22 -0
  305. package/server/lib/routing/DOCUMENTATION.md +23 -3
  306. package/server/lib/routing/cache.js +87 -0
  307. package/server/lib/routing/defaults.js +11 -0
  308. package/server/lib/routing/history.js +12 -4
  309. package/server/lib/routing/runtime.js +39 -3
  310. package/server/lib/routing/runtime.test.js +81 -2
  311. package/server/lib/routing/store.js +12 -1
  312. package/server/lib/routing/store.test.js +13 -0
  313. package/server/lib/scheduled-tasks/DOCUMENTATION.md +59 -1
  314. package/server/lib/scheduled-tasks/existing-session.js +119 -0
  315. package/server/lib/scheduled-tasks/existing-session.test.js +350 -0
  316. package/server/lib/scheduled-tasks/loops.js +1 -8
  317. package/server/lib/scheduled-tasks/routes.js +8 -8
  318. package/server/lib/scheduled-tasks/runtime.js +103 -13
  319. package/server/lib/scheduled-tasks/runtime.test.js +48 -0
  320. package/server/lib/scheduled-tasks/service.js +33 -11
  321. package/server/lib/scheduled-tasks/service.test.js +128 -2
  322. package/server/lib/scheduled-tasks/session-defaults.js +27 -0
  323. package/server/lib/scheduled-tasks/session-defaults.test.js +19 -0
  324. package/server/lib/session-assist/context.js +1 -0
  325. package/server/lib/session-folders/routes.js +2 -2
  326. package/server/lib/session-goal/objectives.js +1 -1
  327. package/server/lib/session-knowledge/routes.js +2 -2
  328. package/server/lib/session-knowledge/runtime.js +1 -2
  329. package/server/lib/session-work/DOCUMENTATION.md +39 -14
  330. package/server/lib/session-work/questions.js +31 -2
  331. package/server/lib/session-work/runtime.js +22 -13
  332. package/server/lib/session-work/runtime.test.js +43 -26
  333. package/server/lib/session-work/state.js +10 -4
  334. package/server/lib/session-work/state.test.js +8 -1
  335. package/server/lib/shared/DOCUMENTATION.md +89 -0
  336. package/server/lib/shared/guards.js +53 -0
  337. package/server/lib/shared/guards.test.js +112 -0
  338. package/server/lib/skills-catalog/DOCUMENTATION.md +10 -8
  339. package/server/lib/skills-catalog/cache.js +3 -2
  340. package/server/lib/skills-catalog/curated-sources.js +5 -1
  341. package/server/lib/skills-catalog/git.js +107 -20
  342. package/server/lib/skills-catalog/git.test.js +78 -0
  343. package/server/lib/skills-catalog/install.js +21 -12
  344. package/server/lib/skills-catalog/scan.js +25 -15
  345. package/server/lib/skills-catalog/source.js +26 -1
  346. package/server/lib/skills-catalog/source.test.js +27 -0
  347. package/server/lib/source-control/DOCUMENTATION.md +2 -1
  348. package/server/lib/source-control/audit-storage.js +7 -6
  349. package/server/lib/source-control/audit-storage.test.js +11 -0
  350. package/server/lib/source-control/binding-service.js +2 -5
  351. package/server/lib/source-control/change-request-worktree.js +90 -0
  352. package/server/lib/source-control/change-request-worktree.test.js +121 -0
  353. package/server/lib/source-control/mutation-executor.js +1 -1
  354. package/server/lib/source-control/mutation-storage.js +11 -5
  355. package/server/lib/source-control/provider-instance.js +1 -2
  356. package/server/lib/source-control/repository-identity.js +1 -1
  357. package/server/lib/source-control/routes.js +14 -2
  358. package/server/lib/spaces/DOCUMENTATION.md +42 -17
  359. package/server/lib/spaces/command-stream.test.js +15 -0
  360. package/server/lib/spaces/dispatcher.js +7 -0
  361. package/server/lib/spaces/dispatcher.test.js +17 -0
  362. package/server/lib/spaces/hardening.js +2 -2
  363. package/server/lib/spaces/hardening.test.js +1 -1
  364. package/server/lib/spaces/host.js +2 -0
  365. package/server/lib/spaces/journey.js +66 -5
  366. package/server/lib/spaces/journey.test.js +95 -4
  367. package/server/lib/spaces/layout.js +1 -1
  368. package/server/lib/spaces/places/docker-disk.js +38 -14
  369. package/server/lib/spaces/places/docker-disk.test.js +80 -1
  370. package/server/lib/spaces/places/docker.js +35 -11
  371. package/server/lib/spaces/places/fake-docker.js +22 -3
  372. package/server/lib/spaces/places/memory-place.js +3 -0
  373. package/server/lib/spaces/places/packed.docker.live.test.js +1 -1
  374. package/server/lib/spaces/routes.js +5 -0
  375. package/server/lib/spaces/routes.test.js +4 -2
  376. package/server/lib/spaces/run-command.js +9 -2
  377. package/server/lib/spaces/tools.js +4 -5
  378. package/server/lib/spaces/tools.test.js +2 -2
  379. package/server/lib/terminal/runtime.js +18 -6
  380. package/server/lib/terminal/runtime.test.js +66 -0
  381. package/server/lib/tts/index.js +3 -0
  382. package/server/lib/tts/service.js +4 -2
  383. package/server/lib/walkthrough/DOCUMENTATION.md +3 -1
  384. package/server/lib/walkthrough/index.js +2 -3
  385. package/server/lib/walkthrough/pr-source.test.js +22 -0
  386. package/server/lib/walkthrough/sources.js +6 -1
  387. package/server/opencode-proxy.test.js +127 -0
  388. package/bin/lib/commands-startup.test.js +0 -15
  389. package/dist/assets/CodeMirrorCommentWidgets-CVDSjcrP.js +0 -1
  390. package/dist/assets/DiffView-Ct7vL3fD.js +0 -4
  391. package/dist/assets/FilesView-DT0uEYgT.js +0 -17
  392. package/dist/assets/GuestSurfacePane-DVvk1VPu.js +0 -1
  393. package/dist/assets/LinearIssuesView-C10MwA9h.js +0 -1
  394. package/dist/assets/MarkdownImageGallery-BbN_K_3d.js +0 -1
  395. package/dist/assets/MarkdownRendererImpl-BLt2Tkk9.js +0 -10
  396. package/dist/assets/OnboardingScreen-Bgp5A3WB.js +0 -1
  397. package/dist/assets/PierreDiffViewer-CWJLj-S-.js +0 -210
  398. package/dist/assets/PlanView-DsRWnsOI.js +0 -5
  399. package/dist/assets/PublishDialog-CCeKloRu.js +0 -2
  400. package/dist/assets/SettingsView-BuPPsNPp.js +0 -30
  401. package/dist/assets/SettingsWindow-CM5fL8Ot.js +0 -1
  402. package/dist/assets/SubmoduleDiffSummary-CfsMcfiQ.js +0 -1
  403. package/dist/assets/ToolOutputDialog-mZrfSofz.js +0 -15
  404. package/dist/assets/ToolPartDiffPreview-BUGCRYEL.js +0 -8
  405. package/dist/assets/WalkthroughView-ClBo7PPd.js +0 -4
  406. package/dist/assets/appThemeRegistry-CxzMxR-H.js +0 -1
  407. package/dist/assets/de-CBla4hjd.js +0 -14
  408. package/dist/assets/es-BmnZtxTD.js +0 -20
  409. package/dist/assets/fileTreeStatus-BSHFIGEg.js +0 -1
  410. package/dist/assets/fr-OVKIBUZO.js +0 -18
  411. package/dist/assets/index-CKCFKmjF.js +0 -1
  412. package/dist/assets/index-Dbx4V4GN.css +0 -1
  413. package/dist/assets/index-vQ1Pg1cr.js +0 -61
  414. package/dist/assets/ja-6v-yr-gE.js +0 -20
  415. package/dist/assets/ko-I_ZLvgQ9.js +0 -20
  416. package/dist/assets/main-CmO4dRtR.js +0 -2
  417. package/dist/assets/main-b9vqhlYM.js +0 -999
  418. package/dist/assets/markdownCore-BPEZRQfP.js +0 -7
  419. package/dist/assets/miniChat-B5Oi7B-6.js +0 -2
  420. package/dist/assets/mobile-CVtShif9.js +0 -2
  421. package/dist/assets/nl-DcvIJf46.js +0 -20
  422. package/dist/assets/patchFileDiff-CW3wCH1O.js +0 -13
  423. package/dist/assets/pl-JxCUl0sd.js +0 -20
  424. package/dist/assets/pt-BR-L89mjja2.js +0 -20
  425. package/dist/assets/relocateRestoredSession-DYh_9oBa.js +0 -1
  426. package/dist/assets/renderElectronMiniChatApp-BD-1JHSg.js +0 -2
  427. package/dist/assets/renderMobileApp-7s5InXt1.js +0 -25
  428. package/dist/assets/runtimeEndpointReset-DqLJC6L1.js +0 -53
  429. package/dist/assets/shikiHighlight-CXgZnvHh.js +0 -1
  430. package/dist/assets/space-apply-1trGVIl8.js +0 -1
  431. package/dist/assets/space-close-y7j-NuBv.js +0 -1
  432. package/dist/assets/tr-ka5J1flt.js +0 -11
  433. package/dist/assets/uk-PyGe6Q_u.js +0 -20
  434. package/dist/assets/useInlineCommentController-CrjSGCpi.js +0 -2
  435. package/dist/assets/vendor-codemirror-lang-python-B7ClrMIT.js +0 -3
  436. package/dist/assets/vendor-codemirror-lang-xml-C8tGnS64.js +0 -1
  437. package/dist/assets/vendor-codemirror-language-data-q2bKO1EM.js +0 -2
  438. package/dist/assets/vendor-framer-motion-Bq3iTZ6r.js +0 -1
  439. package/dist/assets/vendor-katex-CHD9BdDO.js +0 -257
  440. package/dist/assets/vendor-katex-Cp579UoJ.css +0 -1
  441. package/dist/assets/zh-CN-B0P2tybJ.js +0 -20
  442. package/dist/assets/zh-TW-Bs9C5cN8.js +0 -20
@@ -1,210 +0,0 @@
1
- import{R as z,j as F,c as xe,r as l}from"./vendor-react-BUCujlKS.js";import{a as ot}from"./parseDiffFromFile-Cy0PNxun.js";import{b as Ve}from"./isDiffPlainText-CQmDCnEv.js";import{V as st,F as at}from"./VirtualizedFileDiff-BTJVRkyo.js";import{V as lt}from"./Virtualizer-xCEYz34p.js";import{fz as ct,f as dt,fA as _e,bP as ut,cE as ft,h as Ue}from"./useAppFontEffects-DCqCVGlT.js";import"./index-vQ1Pg1cr.js";import{I as Ke,a as ht,u as pt}from"./useInlineCommentController-CrjSGCpi.js";import{bb as mt}from"./runtimeEndpointReset-DqLJC6L1.js";import{ensurePierreThemeRegistered as Ge,getResolvedShikiTheme as Ye}from"./appThemeRegistry-CxzMxR-H.js";const Re=r=>{if(r.type==="new"){const n=Math.min(r.selection.start,r.selection.end),i=Math.max(r.selection.start,r.selection.end);return`new-comment-${r.selection.side??"additions"}-${n}-${i}`}return`draft-${r.draft.id}`},gt=r=>{const{drafts:n,editingDraftId:i,selection:a}=r,c=[];for(const g of n){if(!Number.isFinite(g.endLine))continue;const x=Math.max(1,Math.floor(g.endLine)),T=g.side==="original"?"deletions":"additions";c.push({lineNumber:x,side:T,metadata:{type:g.id===i?"edit":"saved",draft:g}})}return a&&!i&&c.push({lineNumber:Math.max(a.start,a.end),side:a.side??"additions",metadata:{type:"new",selection:a}}),c};function yt(r){const n=r.trim();if(!n)return null;if(/^-?\d+(\.\d+)?$/.test(n)){const i=Number.parseFloat(n);return Number.isFinite(i)?i:null}if(n.endsWith("px")){const i=Number.parseFloat(n.slice(0,-2));return Number.isFinite(i)?i:null}return null}function Xe(r){if(!(!r||r<=0))return Math.max(200,Math.floor(r))}function bt(r){const{diffRootRef:n,drafts:i,selection:a,editingDraftId:c,commentText:g,onTextChange:x,fileLabel:T,onSave:d,onCancel:R,onEdit:A,onDelete:I}=r,[ie,q]=z.useState(0),[he,pe]=z.useState(null),B=z.useMemo(()=>!a||c?null:Re({type:"new",selection:a}),[c,a]),H=z.useMemo(()=>{const u=i.map(b=>Re({type:b.id===c?"edit":"saved",draft:b}));return B&&u.push(B),u},[i,c,B]),$=z.useCallback(u=>{const b=n.current;if(!b)return null;const E=b.querySelector("diffs-container");if(!(E instanceof HTMLElement))return null;const P=E.querySelector(`[data-annotation-id="${u}"]`);if(P instanceof HTMLElement)return P;const O=E.shadowRoot;return O?O.querySelector(`[data-annotation-id="${u}"]`):null},[n]);z.useEffect(()=>{if(H.length===0)return;let u=!1,b=0;const E=12,P=()=>{u||H.every(D=>!!$(D))||b>=E||(b+=1,requestAnimationFrame(()=>{u||(q(D=>D+1),P())}))};return P(),()=>{u=!0}},[H,$]),z.useEffect(()=>{const u=n.current;if(!u)return;const b=()=>{const P=getComputedStyle(u),O=yt(P.getPropertyValue("--oc-context-panel-width")),D=u.getBoundingClientRect(),M=O??D.width;pe(M>0?M:null)};b();const E=new ResizeObserver(()=>{b()});return E.observe(u),window.addEventListener("resize",b),()=>{E.disconnect(),window.removeEventListener("resize",b)}},[n]);const j=z.useCallback(u=>{const E=n.current?.getBoundingClientRect(),P=u.closest("[data-annotation-content]"),O=P instanceof HTMLElement?P.getBoundingClientRect():u.getBoundingClientRect(),D=[O.width];E&&D.push(E.right-O.left);const M=D.filter(W=>Number.isFinite(W)&&W>0);return M.length>0?Xe(Math.min(...M)):Xe(he)},[n,he]);return F.jsxs(F.Fragment,{children:[i.map(u=>{const b=Re({type:u.id===c?"edit":"saved",draft:u}),E=$(b);if(!E)return null;const P=j(E);return u.id===c?xe.createPortal(F.jsx(Ke,{initialText:g,onTextChange:x,fileLabel:T,lineRange:{start:u.startLine,end:u.endLine,side:u.side==="original"?"deletions":"additions"},isEditing:!0,onSave:d,onCancel:R,maxWidth:P}),E,`draft-edit-${u.id}`):xe.createPortal(F.jsx(ht,{draft:u,onEdit:()=>A(u),onDelete:()=>I(u),maxWidth:P}),E,`draft-card-${u.id}`)}),a&&!c&&B&&(()=>{const u=$(B);if(!u)return null;const b=j(u);return xe.createPortal(F.jsx(Ke,{initialText:g,onTextChange:x,fileLabel:T,lineRange:a,isEditing:!1,onSave:d,onCancel:R,maxWidth:b}),u,B)})()]})}const Je=[],vt=`
2
- [data-gutter-buffer="annotation"] { min-height: 0; }
3
- [data-code] { min-height: 2.5rem; align-content: start; }
4
- `,Qe=5e5,wt=`
5
- :host {
6
- font-family: var(--font-mono);
7
- font-size: var(--text-code);
8
- }
9
-
10
- pre, [data-code] {
11
- font-family: var(--font-mono);
12
- font-size: var(--text-code);
13
- }
14
-
15
- /* Mobile touch selection support */
16
- [data-line-number] {
17
- touch-action: manipulation;
18
- -webkit-tap-highlight-color: transparent;
19
- cursor: pointer;
20
- }
21
-
22
- /* Ensure interactive line numbers work on touch */
23
- pre[data-interactive-line-numbers] [data-line-number] {
24
- touch-action: manipulation;
25
- }
26
- `,Ze=`
27
- ${wt}
28
-
29
- /* While a multi-line content drag is being mapped to a line selection the
30
- row highlight is the feedback; the native blue text selection on top of
31
- it reads as double-selection, so it is painted transparent for the drag's
32
- duration only (single-line selections keep the normal look for copying). */
33
- :host([data-oc-comment-drag]) {
34
- user-select: none;
35
- -webkit-user-select: none;
36
- }
37
-
38
- /* Gutter "+" comment utility: theme primary, and smaller than Pierre's
39
- 1lh default, which reads oversized next to our 13px line numbers. */
40
- [data-utility-button] {
41
- width: 16px;
42
- height: 16px;
43
- align-self: center;
44
- margin-right: calc(-16px + 1ch);
45
- border-radius: 5px;
46
- background-color: var(--primary-base);
47
- color: var(--primary-foreground);
48
- }
49
-
50
- :host {
51
- --diffs-bg-separator-override: var(--surface-elevated);
52
- }
53
-
54
- [data-diff-header],
55
- [data-diff] {
56
- [data-separator] {
57
- height: 24px !important;
58
- }
59
- }
60
-
61
- [data-separator="line-info-basic"] {
62
- height: 24px !important;
63
- background: var(--diffs-bg) !important;
64
- position: relative;
65
- }
66
-
67
- [data-diff-type="single"] [data-gutter],
68
- [data-diff-type="split"] [data-deletions] [data-gutter] {
69
- [data-separator-wrapper] {
70
- position: absolute;
71
- left: 100%;
72
- display: flex;
73
- align-items: center;
74
- gap: unset;
75
- width: max-content;
76
- background: transparent;
77
- color: var(--diffs-fg-number);
78
- font-family: var(--diffs-header-font-family, var(--font-sans));
79
- font-size: 0.75rem;
80
- line-height: 1;
81
- margin-left: calc(-2ch - 2px);
82
- }
83
-
84
- [data-separator-wrapper][data-separator-multi-button] {
85
- margin-left: calc(-3ch - 2px);
86
- }
87
-
88
- [data-expand-button],
89
- [data-separator-content] {
90
- display: block;
91
- align-self: unset;
92
- min-width: unset;
93
- min-height: unset;
94
- padding: 0;
95
- flex-shrink: 0;
96
- grid-column: unset;
97
- border: none;
98
- width: auto;
99
- height: auto;
100
- background-color: transparent;
101
- color: inherit;
102
- font: inherit;
103
- }
104
-
105
- [data-expand-button]:not([data-expand-all-button]) {
106
- &[data-expand-down]::before {
107
- content: '\\2191';
108
- }
109
-
110
- &[data-expand-up]::before {
111
- content: '\\2193';
112
- }
113
-
114
- &[data-expand-both]::before {
115
- content: '\\2195';
116
- }
117
-
118
- svg {
119
- display: none;
120
- }
121
- }
122
-
123
- [data-separator-content] {
124
- background: transparent;
125
- margin-left: calc(2px + 1ch);
126
- }
127
-
128
- [data-expand-all-button] {
129
- position: relative;
130
- margin-left: 14px;
131
- text-transform: lowercase;
132
- }
133
-
134
- [data-expand-all-button]::before {
135
- content: '';
136
- display: block;
137
- position: absolute;
138
- top: 50%;
139
- left: -8px;
140
- margin-top: -1px;
141
- width: 3px;
142
- height: 3px;
143
- border-radius: 2px;
144
- background-color: var(--diffs-fg-number);
145
- pointer-events: none;
146
- }
147
-
148
- [data-separator-content]:hover,
149
- [data-expand-button]:hover,
150
- [data-expand-all-button]:hover {
151
- color: var(--diffs-fg);
152
- }
153
-
154
- [data-expand-all-button]:hover {
155
- text-decoration: underline;
156
- }
157
- }
158
-
159
- /* Partial diffs get no expand buttons from Pierre (the lines are not
160
- loaded). When the owner can load them on demand, the gutter separator
161
- itself becomes the button and shows the same glyphs as the real one. */
162
- :host([data-oc-expand-on-demand]) [data-diff-type="single"] [data-gutter] [data-separator-wrapper],
163
- :host([data-oc-expand-on-demand]) [data-diff-type="split"] [data-deletions] [data-gutter] [data-separator-wrapper] {
164
- cursor: pointer;
165
-
166
- &::before {
167
- content: '\\2195';
168
- display: block;
169
- flex-shrink: 0;
170
- }
171
-
172
- &:hover {
173
- color: var(--diffs-fg);
174
- }
175
- }
176
-
177
- :host([data-oc-expand-on-demand]) [data-diff-type="single"] [data-gutter] [data-separator-first] [data-separator-wrapper]::before,
178
- :host([data-oc-expand-on-demand]) [data-diff-type="split"] [data-deletions] [data-gutter] [data-separator-first] [data-separator-wrapper]::before {
179
- content: '\\2191';
180
- }
181
-
182
- /* Full file requested: the glyph becomes a spinner and the separators stop
183
- taking clicks until the highlighted full diff replaces this one. */
184
- :host([data-oc-expand-loading]) [data-diff-type="single"] [data-gutter] [data-separator-wrapper],
185
- :host([data-oc-expand-loading]) [data-diff-type="split"] [data-deletions] [data-gutter] [data-separator-wrapper] {
186
- cursor: default;
187
- pointer-events: none;
188
- opacity: 0.6;
189
-
190
- &::before {
191
- content: '';
192
- width: 9px;
193
- height: 9px;
194
- margin-right: 3px;
195
- border-radius: 50%;
196
- border: 1.5px solid currentColor;
197
- border-right-color: transparent;
198
- animation: oc-expand-spin 0.8s linear infinite;
199
- }
200
- }
201
-
202
- @keyframes oc-expand-spin {
203
- to { transform: rotate(360deg); }
204
- }
205
- `;function kt(r){let n=2166136261;for(let i=0;i<r.length;i+=1)n^=r.charCodeAt(i),n=n+((n<<1)+(n<<4)+(n<<7)+(n<<8)+(n<<24))>>>0;return n.toString(16)}function Se(r){const n=r.length>400?`${r.slice(0,200)}${r.slice(-200)}`:r;return`${r.length}:${kt(n)}`}const xt=2e3,Rt=(r,n)=>{const[i,a]=z.useState(r),c=l.useRef(r);return l.useEffect(()=>{if(r===c.current)return;const g=c.current,x=()=>{c.current=r,a(r)};if(!(g!==void 0&&r!==void 0&&g.isPartial&&!r.isPartial&&g.name===r.name&&n?.isWorkingPool()===!0)){x();return}r.cacheKey??=["diff",r.name,r.prevObjectId??Se(r.deletionLines.join(`
206
- `)),r.newObjectId??Se(r.additionLines.join(`
207
- `))].join(":");let d=!1,R,A;const I=()=>{d||(d=!0,R?.(),clearTimeout(A))},ie=()=>{d||(I(),x())},q=()=>{n.getDiffResultCache(r)&&ie()};if(R=n.subscribeToStatChanges(q),d){R();return}return A=setTimeout(ie,xt),n.primeDiffHighlightCache(r),q(),I},[r,n]),i},St=(r,n,i,a)=>{const c=a.side==="deletions",x=(i?(c?i.deletionLines:i.additionLines).join(""):c?r:n).split(`
208
- `),T=Math.min(a.start,a.end),d=Math.max(a.start,a.end),R=Math.max(1,T),A=Math.min(x.length,d);return R>A?"":x.slice(R-1,A).join(`
209
- `)},Lt=(r,n)=>r===n?!0:!r||!n?!1:r.start===n.start&&r.end===n.end&&r.side===n.side,Et=r=>r==="auto"||r==="scroll"||r==="overlay",Tt=r=>{let n=r?.parentElement??null;for(;n;){const i=window.getComputedStyle(n);if(Et(i.overflowY))return n;n=n.parentElement}return null},Mt=(r,n)=>{if(!r||!n||typeof window>"u")return()=>{};const i=Tt(r);if(!i)return()=>{};const a=n.getBoundingClientRect().height;if(!a)return()=>{};const c=r.getBoundingClientRect().top-i.getBoundingClientRect().top,g=n.style.minHeight;n.style.minHeight=`${Math.ceil(a)}px`;let x=!1;return()=>{if(x)return;x=!0,n.style.minHeight=g;const d=r.getBoundingClientRect().top-i.getBoundingClientRect().top-c;d&&(i.scrollTop+=d)}},Ct=(r,n)=>{const i=r.find(R=>R instanceof HTMLElement&&R.hasAttribute("data-separator"));if(!i)return null;let a=i.nextElementSibling;for(;a&&!a.hasAttribute("data-line-index");)a=a.nextElementSibling;const[c,g]=a?.getAttribute("data-line-index")?.split(",")??[],x=Number.parseInt(c??"",10),T=Number.parseInt(g??"",10);if(Number.isNaN(x)||Number.isNaN(T))return null;const d=n.hunks.find(R=>R.unifiedLineStart<=x&&x<R.unifiedLineStart+R.unifiedLineCount&&R.splitLineStart<=T&&T<R.splitLineStart+R.splitLineCount);return d?{gap:"before-hunk",additionStart:d.additionStart,direction:i.hasAttribute("data-separator-first")?"down":"both"}:null},Pt=3,At=r=>{if(r.type==="new"||r.type==="deleted")return null;const n=r.hunks.at(-1),i=n?.hunkContent.at(-1);return!n||i?.type!=="context"||i.lines<Pt||n.noEOFCRAdditions||n.noEOFCRDeletions?null:{side:"deletions",lineNumber:n.deletionStart+n.deletionCount-1,metadata:{type:"trailing-expand"}}},Ne=(r,n)=>{if(typeof window>"u")return()=>{};let i=null,a=null,c=!1;const g=()=>{c||(a?.disconnect(),a=null,i=window.requestAnimationFrame(()=>{i=window.requestAnimationFrame(()=>{c||n()})}))},x=()=>r.querySelector("diffs-container")?.shadowRoot??void 0,T=(d=x())=>!!d?.querySelector("[data-line]");return T()?g():typeof MutationObserver<"u"?(a=new MutationObserver(()=>{const d=x();if(d){if(T(d)){g();return}a?.disconnect(),a=new MutationObserver(()=>{T(d)&&g()}),a.observe(d,{childList:!0,subtree:!0})}}),a.observe(r,{childList:!0,subtree:!0})):i=window.requestAnimationFrame(g),()=>{c=!0,a?.disconnect(),i!==null&&window.cancelAnimationFrame(i)}},ke=new WeakMap,It={lineHeight:24,hunkSeparatorHeight:24,spacing:0};function Ft(r){const n=r.closest("[data-diff-virtual-root]");if(n instanceof HTMLElement){const i=n.querySelector("[data-diff-virtual-content]");return{key:n,root:n,content:i instanceof HTMLElement?i:void 0}}return{key:document,root:document,content:void 0}}function Nt(r){if(typeof document>"u")return null;const n=Ft(r);let i=ke.get(n.key);if(!i){const c=new lt;c.setup(n.root,n.content),i={virtualizer:c,refs:0},ke.set(n.key,i)}i.refs+=1;let a=!1;return{virtualizer:i.virtualizer,root:n.root,release:()=>{if(a)return;a=!0;const c=ke.get(n.key);c&&(c.refs-=1,!(c.refs>0)&&(c.virtualizer.cleanUp(),ke.delete(n.key)))}}}const Ht=(r,n,i)=>{if(typeof window>"u")return()=>{};const a=[],c=()=>{try{r.rerender()}catch{}const g=n?.root;g instanceof HTMLElement?g.dispatchEvent(new Event("scroll",{bubbles:!1})):document.dispatchEvent(new Event("scroll",{bubbles:!1})),window.dispatchEvent(new Event("resize")),i()};return a.push(window.requestAnimationFrame(c)),a.push(window.requestAnimationFrame(()=>{a.push(window.requestAnimationFrame(c))})),()=>{for(const g of a)window.cancelAnimationFrame(g)}},Ut=({original:r,modified:n,fileDiff:i,language:a,fileName:c,renderSideBySide:g,wrapLines:x,layout:T="fill",enableComments:d=!0,hunkActions:R,onExpandContextRequest:A,pendingContextExpansion:I=null,contextLoading:ie=!1})=>{const q=ct(),{t:he}=dt(),pe=he("diffView.actions.showLinesBelow"),B=l.useRef(()=>{}),H=q?.currentTheme.metadata.variant==="dark",$=q?.availableThemes.find(e=>e.metadata.id===q.lightThemeId)??_e(!1),j=q?.availableThemes.find(e=>e.metadata.id===q.darkThemeId)??_e(!0),{isMobile:u}=ut(),b=R?.anchors??Je,[E,P]=z.useState(()=>({fileDiff:void 0,anchors:Je,targets:new Map})),O=pt({source:"diff",fileLabel:c||"unknown",language:a,getCodeForRange:e=>St(r,n,i,e),toStoreRange:e=>({startLine:e.start,endLine:e.end,side:e.side==="deletions"?"original":"modified"}),fromDraftRange:e=>({start:e.startLine,end:e.endLine,side:e.side==="original"?"deletions":"additions"})}),{drafts:D,selection:M,setSelection:W,commentText:Le,setCommentText:V,editingDraftId:oe,saveComment:He,cancel:De,startEdit:et,deleteDraft:tt}=O,me=l.useRef(null),J=l.useRef(null),se=l.useRef(""),_=l.useRef(!1),ge=l.useRef(null);l.useEffect(()=>{me.current=M},[M]),l.useEffect(()=>{J.current=oe},[oe]),l.useEffect(()=>{se.current=Le},[Le]);const ye=l.useCallback(e=>{if(!d||_.current)return;const t=me.current;if(!(!e&&t&&se.current.trim())){if(u&&t&&e&&e.side===t.side){const o=Math.min(t.start,e.start),s=Math.max(t.end,e.end);W({...e,start:o,end:s})}else W(e);e&&(J.current||V(""))}},[d,u,V,W]),nt=l.useCallback(()=>{De()},[De]),ze=l.useCallback(e=>{const t=document.createElement("div");if(t.style.position="relative",e.metadata.type==="hunk-action")return t.dataset.hunkActionTarget=String(e.metadata.index),t.style.height="0px",t;if(e.metadata.type==="trailing-expand"){const s=document.createElement("button");return s.type="button",s.dataset.ocTrailingExpand="",s.textContent=pe,s.addEventListener("click",p=>{p.stopPropagation(),B.current()}),t.append(s),t}const o=Re(e.metadata);return t.dataset.annotationId=o,t.dataset.annotationSide=e.side,t.dataset.annotationLine=String(e.lineNumber),t},[pe]),$e=l.useCallback((e,t,o)=>{const s=new Map;if(o!=="unmount"){const f=Number.parseFloat(getComputedStyle(document.documentElement).fontSize)*2,v=new Map,L=[];for(const S of e.shadowRoot?.querySelectorAll("slot")??[])for(const C of S.assignedElements()){const w=C.querySelector("[data-hunk-action-target]"),h=Number(w?.dataset.hunkActionTarget);if(!w||!Number.isInteger(h)||h<0)continue;s.set(h,w);const m=S.closest("[data-code]");if(!m)continue;let y=v.get(m);y||(y=m.getBoundingClientRect(),v.set(m,y));const X=w.getBoundingClientRect().top,ue=Math.max(y.top+4,Math.min(X+4,y.bottom-f-4));L.push({target:w,offset:ue-X})}for(const{target:S,offset:C}of L){const w=`${C}px`;S.style.getPropertyValue("--oc-hunk-action-offset")!==w&&S.style.setProperty("--oc-hunk-action-offset",w)}}const p=t.fileDiff;P(f=>f.fileDiff===p&&f.anchors===b&&f.targets.size===s.size&&[...s].every(([v,L])=>f.targets.get(v)===L)?f:{fileDiff:p,anchors:b,targets:s})},[b]),rt=l.useCallback((e,t)=>{He(e,t??M??void 0)},[He,M]),Q=l.useCallback(e=>{W(e);const t=N.current;if(t)try{_.current=!0,t.setSelectedLines(e),ge.current=e}catch{}finally{_.current=!1}},[W]),ae=l.useRef(null),Ee=l.useRef(null);l.useEffect(()=>{if(!d)return;const e=ne.current;if(!e)return;const t=()=>{const h=e.querySelector("diffs-container");return h instanceof HTMLElement?h.shadowRoot:null},o=h=>{const m=e.querySelector("diffs-container");m instanceof HTMLElement&&(h?m.setAttribute("data-oc-comment-drag",""):m.removeAttribute("data-oc-comment-drag"))},s=(h,m)=>{const X=t()?.elementFromPoint(h,m)??document.elementFromPoint(h,m);if(!(X instanceof Element))return null;const ue=!!X.closest("[data-column-number]"),fe=X.closest("[data-line]");if(!(fe instanceof HTMLElement))return null;const Fe=Number.parseInt(fe.getAttribute("data-line")??"",10);if(!Number.isFinite(Fe)||Fe<=0)return null;const it=fe.getAttribute("data-line-type")==="change-deletion"||fe.closest("[data-code][data-deletions]")!=null?"deletions":"additions";return{line:Fe,side:it,numberColumn:ue}};let p=null,f=!1,v=null;const L=h=>{ae.current=h;const m=N.current;if(m)try{_.current=!0,m.setSelectedLines(h)}catch{}finally{_.current=!1}},S=h=>{if(h.button!==0||h.pointerType!=="mouse")return;const m=s(h.clientX,h.clientY);if(!m||m.numberColumn){p=null;return}p={line:m.line,side:m.side},f=!1,v=h.pointerId},C=h=>{if(p==null||h.pointerId!==v)return;const m=s(h.clientX,h.clientY);if(m){if(!f){if(m.line===p.line)return;f=!0,o(!0),window.getSelection()?.removeAllRanges();const y=t();y&&"getSelection"in y&&y.getSelection()?.removeAllRanges()}L({start:Math.min(p.line,m.line),end:Math.max(p.line,m.line),side:p.side})}},w=h=>{if(p==null||h.pointerId!==v)return;const m=f;if(p=null,f=!1,v=null,o(!1),!m)return;const y=ae.current;ae.current=null,y&&(me.current&&se.current.trim()&&!J.current||(Q(y),J.current||V("")))};return e.addEventListener("pointerdown",S),document.addEventListener("pointermove",C,{passive:!0}),document.addEventListener("pointerup",w),()=>{e.removeEventListener("pointerdown",S),document.removeEventListener("pointermove",C),document.removeEventListener("pointerup",w),o(!1)}},[Q,d,V]);const qe=l.useCallback(e=>{if(!d)return;const t=ae.current,o=t&&e.start>=t.start&&e.end<=t.end&&(e.side==null||e.side===t.side);Ee.current!==null&&(window.clearTimeout(Ee.current),Ee.current=null),ae.current=null,Q(o&&t?t:e),J.current||V("")},[Q,d,V]),Oe=l.useCallback(e=>{if(!d||e.numberColumn||window.getSelection()?.toString().trim())return;const t=e.annotationSide,o={start:e.lineNumber,end:e.lineNumber,side:t},s=me.current;if(s&&s.start===o.start&&s.end===o.end&&s.side===o.side){if(!se.current.trim()){W(null);const p=N.current;try{_.current=!0,p?.setSelectedLines(null)}finally{_.current=!1}}return}s&&se.current.trim()&&!J.current||(Q(o),J.current||V(""))},[Q,d,V,W]),We=l.useCallback(e=>{const t=e.closest("[data-line-type]")?.getAttribute("data-line-type")??e.getAttribute("data-line-type");if(t==="change-deletion")return"deletions";if(t==="change-addition")return"additions";const o=e.getAttribute("data-column-side")??e.getAttribute("data-side")??e.closest("[data-column-side]")?.getAttribute("data-column-side");if(o==="deletions"||o==="left"||o==="original")return"deletions";if(o==="additions"||o==="right"||o==="modified")return"additions";const s=e.closest("[data-line-type]");if(s instanceof HTMLElement){const p=s.getBoundingClientRect(),f=e.getBoundingClientRect(),v=p.left+p.width/2;return f.left+f.width/2<v?"deletions":"additions"}return"additions"},[]);Ge($),Ge(j);const te=`${$.metadata.id}:${j.metadata.id}:${H?"dark":"light"}`,le=l.useMemo(()=>{if(i){const e=i.deletionLines.reduce((o,s)=>o+s.length,0),t=i.additionLines.reduce((o,s)=>o+s.length,0);return Math.max(e,t)>Qe}return Math.max(r.length,n.length)>Qe},[i,n.length,r.length]),ne=l.useRef(null),U=l.useRef(null),N=l.useRef(null),ce=l.useRef(null),Te=l.useRef(null),Me=l.useRef(null),Ce=l.useRef(void 0),be=l.useRef(void 0),ve=l.useRef(void 0),we=l.useRef(void 0),[,Pe]=z.useReducer(e=>e+1,0),Z=mt(le?"unified":g?"split":"unified"),k=Rt(i,Z),K=!!A&&k?.isPartial===!0,re=K&&(ie||i!==k),G=l.useMemo(()=>Ye($),[$]),Y=l.useMemo(()=>Ye(j),[j]);z.useLayoutEffect(()=>{const e=ne.current;if(!e)return;const t=e.querySelector("diffs-container");if(!t)return;const o=H?Y:G,s=(X,ue)=>X.colors?.[ue],p=s(G,"terminal.ansiGreen"),f=s(G,"terminal.ansiRed"),v=s(G,"terminal.ansiBlue"),L=s(Y,"terminal.ansiGreen"),S=s(Y,"terminal.ansiRed"),C=s(Y,"terminal.ansiBlue");t.style.setProperty("--shiki-light",G.fg),t.style.setProperty("--shiki-light-bg",G.bg),p&&t.style.setProperty("--shiki-light-addition-color",p),f&&t.style.setProperty("--shiki-light-deletion-color",f),v&&t.style.setProperty("--shiki-light-modified-color",v),t.style.setProperty("--shiki-dark",Y.fg),t.style.setProperty("--shiki-dark-bg",Y.bg),L&&t.style.setProperty("--shiki-dark-addition-color",L),S&&t.style.setProperty("--shiki-dark-deletion-color",S),C&&t.style.setProperty("--shiki-dark-modified-color",C),t.style.setProperty("--diffs-bg",o.bg),t.style.setProperty("--diffs-fg",o.fg);const w=H?L:p,h=H?S:f,m=H?C:v;w&&t.style.setProperty("--diffs-addition-color-override",w),h&&t.style.setProperty("--diffs-deletion-color-override",h),m&&t.style.setProperty("--diffs-modified-color-override",m);const y=t.shadowRoot?.querySelector("pre");y&&(y.style.setProperty("--shiki-light",G.fg),y.style.setProperty("--shiki-light-bg",G.bg),p&&y.style.setProperty("--shiki-light-addition-color",p),f&&y.style.setProperty("--shiki-light-deletion-color",f),v&&y.style.setProperty("--shiki-light-modified-color",v),y.style.setProperty("--shiki-dark",Y.fg),y.style.setProperty("--shiki-dark-bg",Y.bg),L&&y.style.setProperty("--shiki-dark-addition-color",L),S&&y.style.setProperty("--shiki-dark-deletion-color",S),C&&y.style.setProperty("--shiki-dark-modified-color",C),y.style.setProperty("--diffs-bg",o.bg),y.style.setProperty("--diffs-fg",o.fg),w&&y.style.setProperty("--diffs-addition-color-override",w),h&&y.style.setProperty("--diffs-deletion-color-override",h),m&&y.style.setProperty("--diffs-modified-color-override",m))},[Y,te,H,G]);const ee=l.useMemo(()=>({theme:{dark:j.metadata.id,light:$.metadata.id},themeType:H?"dark":"light",diffStyle:g?"split":"unified",diffIndicators:"none",hunkSeparators:"line-info-basic",lineDiffType:"none",maxLineDiffLength:le?0:1e3,maxLineLengthForHighlighting:le?1:1e3,tokenizeMaxLineLength:le?1:1e3,collapsedContextThreshold:0,expansionLineCount:20,overflow:x?"wrap":"scroll",disableFileHeader:!0,enableLineSelection:d,enableGutterUtility:d,onGutterUtilityClick:d?qe:void 0,onLineClick:d?Oe:void 0,onLineSelected:d?ye:void 0,unsafeCSS:b.length>0?`${Ze}
210
- ${vt}`:Ze,renderAnnotation:d||b.length>0||K?ze:void 0,onPostRender:b.length>0?$e:void 0}),[$e,b.length,j.metadata.id,d,K,H,le,$.metadata.id,g,x,ye,qe,Oe,ze]),de=l.useMemo(()=>{const e=d?gt({drafts:D,editingDraftId:oe,selection:M}):[];for(const o of b)e.push({side:o.side,lineNumber:o.lineNumber,metadata:{type:"hunk-action",index:o.index}});const t=K&&k?At(k):null;return t&&e.push(t),e},[oe,d,K,k,D,b,M]),Ae=l.useRef(de);l.useEffect(()=>{Ae.current=de},[de]),l.useEffect(()=>{const e=U.current;return()=>{N.current?.cleanUp(),N.current=null,ce.current?.release(),ce.current=null,Te.current=null,Me.current=null,Ce.current=void 0,be.current=void 0,ve.current=void 0,we.current=void 0,e&&(e.innerHTML="")}},[]),l.useEffect(()=>{if(typeof window>"u")return;const e=U.current,t=ne.current;if(!e||!Z)return;const o=Mt(t,e);let s=ce.current;s||(s=Nt(e),ce.current=s),ce.current=s;const p=s?.virtualizer??null,f=k?void 0:{name:c||"",contents:r,lang:a,cacheKey:`old:${te}:${c}:${Se(r)}`},v=k?void 0:{name:c||"",contents:n,lang:a,cacheKey:`new:${te}:${c}:${Se(n)}`},L=k?be.current!==k:be.current!==void 0||!f||!v||!ve.current||!we.current||!Ve(ve.current,f)||!Ve(we.current,v),S=N.current,C=!!(S&&(Te.current!==p||Me.current!==Z||p&&(Ce.current!==ee.hunkSeparators||L)));C&&(S?.cleanUp(),N.current=null,e.innerHTML="");let w=N.current;const h=!C&&S?!ot(S.options,ee):!1;if(w?w.setOptions(ee):(w=s?new st(ee,s.virtualizer,It,Z):new at(ee,Z),N.current=w,ge.current=null),Te.current=p,Me.current=Z,Ce.current=p?ee.hunkSeparators:void 0,be.current=k,ve.current=f,we.current=v,k)w.render({fileDiff:k,forceRender:h,lineAnnotations:Ae.current,containerWrapper:e});else{if(!f||!v)return;w.render({oldFile:f,newFile:v,forceRender:h,lineAnnotations:Ae.current,containerWrapper:e})}const m=Ne(e,()=>{o(),Ht(w,s,Pe)});return()=>{m(),o()}},[te,k,c,a,n,ee,r,Z]),l.useEffect(()=>{const e=N.current;if(e){try{e.setLineAnnotations(de)}catch(t){console.error("Failed to apply diff line annotations",t);try{e.setLineAnnotations([])}catch{}}requestAnimationFrame(()=>{if(N.current===e){try{e.rerender()}catch{}Pe()}})}},[de]),l.useEffect(()=>{const e=N.current;if(!e||M!==null)return;const t=ge.current;if(!Lt(M,t))try{_.current=!0,e.setSelectedLines(M),ge.current=M}catch{}finally{_.current=!1}},[M]),l.useEffect(()=>{if(!d)return;const e=U.current;if(!e)return;let t=null,o=()=>{};const s=()=>{const f=e.querySelector("diffs-container")?.shadowRoot;if(!f){t=requestAnimationFrame(s);return}const v=L=>{if(!(L instanceof MouseEvent)||L.button!==0||!(L.target instanceof Element))return;const S=L.target.closest("[data-column-number]");if(!(S instanceof HTMLElement))return;const C=S.getAttribute("data-column-number"),w=C?parseInt(C,10):NaN;if(Number.isNaN(w))return;const h=We(S);ye({start:w,end:w,side:h}),L.preventDefault(),L.stopPropagation()};f.addEventListener("click",v,!0),o=()=>{f.removeEventListener("click",v,!0)}};return s(),()=>{t!==null&&cancelAnimationFrame(t),o()}},[te,d,c,ye,We]),l.useEffect(()=>{const e=U.current;if(!e)return;let t=null,o=null;const p=setTimeout(()=>{const f=e.querySelector("diffs-container");if(!(f instanceof HTMLElement))return;const v=f.shadowRoot;t=new MutationObserver(()=>{o&&cancelAnimationFrame(o),o=requestAnimationFrame(()=>{Pe(),o=null})}),t.observe(f,{childList:!0,subtree:!0}),v&&t.observe(v,{childList:!0,subtree:!0})},100);return()=>{clearTimeout(p),o&&cancelAnimationFrame(o),t?.disconnect()}},[te,c]),l.useEffect(()=>{B.current=()=>{re||A?.({gap:"after-last-hunk"})}},[re,A]),l.useEffect(()=>{const e=U.current;if(e)return Ne(e,()=>{const t=e.querySelector("diffs-container");t instanceof HTMLElement&&(t.toggleAttribute("data-oc-expand-on-demand",K),t.toggleAttribute("data-oc-expand-loading",re))})},[re,K,k]),l.useEffect(()=>{const e=U.current;if(!e||!K||re||!k||!A)return;const t=o=>{if(o.button!==0)return;const s=Ct(o.composedPath(),k);s&&(o.preventDefault(),o.stopPropagation(),A(s))};return e.addEventListener("click",t),()=>e.removeEventListener("click",t)},[re,K,k,A]);const Ie=l.useRef(null);if(l.useEffect(()=>{if(!I||!k||k.isPartial||Ie.current===I)return;const e=U.current;if(e)return Ne(e,()=>{const t=N.current;if(!t||t.fileDiff!==k||Ie.current===I)return;if(Ie.current=I,I.gap==="after-last-hunk"){t.expandHunk(k.hunks.length,"up");return}const o=k.hunks.findIndex(s=>s.additionStart<=I.additionStart&&I.additionStart<s.additionStart+Math.max(s.additionCount,1));o<0||t.expandHunk(o,I.direction)})},[k,I]),typeof window>"u")return null;const Be=d?F.jsx(bt,{diffRootRef:ne,drafts:D,selection:M,editingDraftId:oe,commentText:Le,onTextChange:V,fileLabel:c?.split("/").pop()??"",onSave:rt,onCancel:nt,onEdit:e=>{Q({start:e.startLine,end:e.endLine,side:e.side==="original"?"deletions":"additions"}),et(e)},onDelete:tt}):null,je=R&&k&&E.fileDiff===k&&E.anchors===b?[...E.targets].map(([e,t])=>xe.createPortal(R.render(e),t,`hunk-${e}`)):null;return T==="fill"?F.jsx("div",{className:Ue("flex flex-col relative","size-full"),"data-diff-virtual-root":!0,children:F.jsxs("div",{className:"flex-1 relative min-h-0",children:[F.jsx(ft,{outerClassName:"pierre-diff-wrapper size-full",disableHorizontal:!1,fillContainer:!0,"data-diff-virtual-content":!0,children:F.jsx("div",{ref:ne,className:"size-full relative",children:F.jsx("div",{ref:U,className:"size-full"})})}),Be,je]})}):F.jsxs("div",{className:Ue("relative","w-full"),children:[F.jsx("div",{ref:ne,className:"pierre-diff-wrapper w-full overflow-x-auto overflow-y-visible relative",children:F.jsx("div",{ref:U,className:"w-full"})}),Be,je]})};export{Ut as P};
@@ -1,5 +0,0 @@
1
- import{R as t,j as n}from"./vendor-react-BUCujlKS.js";import{n as bt,u as Ye,a as he,C as qe,h as Xe,D as jt}from"./index-vQ1Pg1cr.js";import{c as xt,s as Ct,P as Rt,C as Mt}from"./shikiHighlight-CXgZnvHh.js";import{f as Tt,z as $,dm as kt,bf as Pt,b as Ze,L as Nt,aA as Et,N as It,bP as Dt,_ as Vt,hG as Ft,ah as Lt,km as At,l as et,hF as Ot,a_ as tt,j4 as zt,hD as Kt,gI as nt,hI as Wt,hJ as _t,m as Bt,kn as $t,aT as rt,av as ge,aw as ve,aU as st,B as ee,I as G,ax as we,aW as it,bN as te,g as Gt,cE as Jt,b4 as Ut,d3 as Ht,ko as Qt}from"./useAppFontEffects-DCqCVGlT.js";import{u as Yt,n as qt}from"./useInlineCommentController-CrjSGCpi.js";import{b as Xt}from"./CodeMirrorCommentWidgets-CVDSjcrP.js";import{getResolvedShikiTheme as Zt}from"./appThemeRegistry-CxzMxR-H.js";import{E as en}from"./vendor-codemirror-view-Bniqp7p5.js";import{b6 as tn}from"./runtimeEndpointReset-DqLJC6L1.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-CxRSdNoV.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-client-DHzhmLwV.js";import"./vendor-codemirror-state-G3UuR-be.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-commands-DpmhalwN.js";import"./vendor-codemirror-language-ByBn5zIW.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-codemirror-search-ib-sHD5W.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-replit-codemirror-vim-DkzqxN2H.js";import"./vendor-replit-codemirror-vim-core-FHzKdNUS.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-base-ui-DX96QhTP.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-tanstack-react-virtual-H_JmXOFV.js";import"./vendor-tanstack-virtual-core-Dxc8hSTB.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-lang-javascript-CpGYXGuo.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DW1FQz9_.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-codemirror-lang-json-58T70Hqs.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B07blnnZ.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-DaH9adfE.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BLKnlLP4.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-q2bKO1EM.js";import"./vendor-codemirror-lang-python-B7ClrMIT.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-legendapp-list-DViGR95I.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./textMateThemeFromAppTheme-CDlKffWz.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./space-apply-1trGVIl8.js";import"./vendor-cron-parser-CjvYVigk.js";import"./vendor-luxon-BZ0puJYg.js";const nn=()=>{const l=new Map,d=new Map;return{schedule:(c,s,m)=>{if(s<=(d.get(c)??Number.NEGATIVE_INFINITY))return l.get(c)??Promise.resolve();d.set(c,s);const h=(l.get(c)??Promise.resolve()).then(m,m);return l.set(c,h.catch(()=>{d.get(c)===s&&d.delete(c)})),h},pendingFor:async c=>{await l.get(c)},reset:c=>{d.delete(c)}}},y=l=>{if(!l)return"";const d=l.replace(/\\/g,"/");return d==="/"?"/":d.replace(/\/+$/,"")},rn=(l,d)=>{const c=y(d.currentDirectory),s=y(d.homeDirectory),m=y(l);return c&&m.startsWith(c+"/")?m.slice(c.length+1):s&&m===s?"~":s&&m.startsWith(s+"/")?`~${m.slice(s.length)}`:m},sn=(l,d,c)=>{const s=y(l.trim());if(!s)return null;const m=c?d.find(h=>h.id===c)??null:null;if(m?.path){const h=y(m.path);if(s===h||s.startsWith(`${h}/`))return{id:m.id,path:m.path}}const R=d.filter(h=>{const M=y(h.path);return s===M||s.startsWith(`${M}/`)}).sort((h,M)=>y(M.path).length-y(h.path).length)[0];return R?{id:R.id,path:R.path}:null},on=l=>jt(()=>l()),as=({targetPath:l=null,savedProjectPlan:d=null,onNavigatedToChat:c})=>{const{t:s}=Tt(),m=$(e=>e.currentSessionId),R=$(e=>e.createSession),h=$(e=>e.initializeNewOpenChamberSession),M=$(e=>e.sendMessage),Se=$(e=>e.setCurrentSession),ye=kt(),J=bt(e=>e.homeDirectory),be=Pt(e=>e.planModeEnabled),je=Ze(e=>e.projects),xe=Ze(e=>e.activeProjectId),Ce=Nt(e=>e.directories),Re=Et()??"",Me=Ye(e=>e.setSessionSwitcherOpen),L=It(),A=t.useSyncExternalStore(on,he,he),{isMobile:Te}=Dt(),{currentTheme:U}=Vt(),ne=t.useMemo(()=>m?ye.find(e=>e.id===m)??null:null,[m,ye]),E=t.useMemo(()=>{const e=typeof ne?.directory=="string"?ne.directory:"";return y(e||"")},[ne?.directory]),ke=t.useMemo(()=>y(Re||E),[Re,E]),O=t.useMemo(()=>sn(ke,je,xe),[xe,ke,je]),re=d?.projectRef.id??null,se=d?.projectRef.path??null,g=t.useMemo(()=>re&&se?{id:re,path:se}:null,[re,se]),j=d?.planId??null,z=g&&j?JSON.stringify(["saved-plan",A,Ft(g),j]):null,I=g?.id===Lt,H=t.useMemo(()=>{const e=g??O;return e?Ce.get(e.path)?.isGitRepo===!0:!1},[O,Ce,g]),[T,D]=t.useState(null),[Pe,Ne]=t.useState(!1),[u,K]=t.useState(null),[ie,oe]=t.useState(null),ot=!!u||!!ie,ae=t.useMemo(()=>!u||!E||!J?u:rn(u,{currentDirectory:E,homeDirectory:J}),[u,E,J]),[f,k]=t.useState(""),{isPlaying:Q,play:at,stop:lt}=At(),ct=et(e=>e.showMessageTTSButtons),[Ee,le]=t.useState(null),[Ie,ce]=t.useState(null),ue=t.useMemo(()=>ae&&ae.split("/").pop()||s("planView.file.defaultName"),[ae,s]),de=t.useMemo(()=>f.trim()?Ot(f,s("planView.title.default")).title:s("planView.title.default"),[f,s]),Y=t.useMemo(()=>de.trim()||s("planView.title.default"),[de,s]),[ut,W]=t.useState(!1),[dt,De]=t.useState(!1),[q,Ve]=t.useState("edit"),_=t.useRef(null),[a,w]=t.useState(null),Fe=t.useRef(null),mt=t.useRef(null),Le="openchamber:plan:md-viewer-mode";t.useEffect(()=>{try{const e=localStorage.getItem(Le);if(!e)return;const i=JSON.parse(e);(i==="preview"||i==="edit")&&Ve(i)}catch{}},[]);const pt=t.useCallback(e=>{Ve(e);try{localStorage.setItem(Le,JSON.stringify(e))}catch{}},[]),V=t.useRef(!1),x=t.useRef(null),[Ae,F]=t.useState(!1);t.useEffect(()=>{const e=()=>{V.current=!1,x.current=null,F(!1)};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[]);const ft=t.useCallback((e,i)=>{const o=e.split(`
2
- `),r=Math.max(1,i.start),p=Math.min(o.length,i.end);return r>p?"":o.slice(r-1,p).join(`
3
- `)},[]),ht=Yt({source:"plan",fileLabel:ue,language:u&&tt(u)||"markdown",getCodeForRange:e=>ft(f,qt(e)),toStoreRange:e=>({startLine:e.start,endLine:e.end}),fromDraftRange:e=>({start:e.startLine,end:e.endLine})}),{drafts:Oe,commentText:X,setCommentText:ze,editingDraftId:me,setSelection:Ke,saveComment:We,cancel:B,reset:_e,startEdit:Be,deleteDraft:$e}=ht;t.useEffect(()=>{w(null),_e()},[f,_e]),t.useEffect(()=>{Ke(a)},[a,Ke]);const Ge=t.useCallback(()=>{w(null),B()},[B]),Je=t.useCallback((e,i)=>{i&&w(i),We(e,i??a??void 0),w(null)},[a,We]);t.useEffect(()=>{if(!a)return;const e=o=>{const r=o.target;r.closest('[data-comment-card="true"]')||r.closest('[data-comment-input="true"]')||r.closest(".oc-block-widget")||r.closest(".cm-gutterElement")||r.closest("[data-sonner-toast]")||r.closest("[data-sonner-toaster]")||X.trim()||(w(null),B())},i=window.setTimeout(()=>{document.addEventListener("click",e)},100);return()=>{window.clearTimeout(i),document.removeEventListener("click",e)}},[B,X,me,Te,a]);const pe=Ye(e=>e.editorFontSize),gt=t.useMemo(()=>{const e=u?tt(u):null,i=!!e&&e!=="markdown",o=[xt(U,i?{syntaxColors:!1,fontSize:pe}:{fontSize:pe})],r=zt(u||"plan.md");return r&&o.push(r),i&&e&&o.push(Ct({language:e,themeName:U.metadata.id,theme:Zt(U)})),o.push(en.lineWrapping),o},[U,u,pe]),b=t.useRef({key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""}),P=t.useState(nn)[0],Ue=t.useCallback(async(e,i)=>{if("filePath"in e){const r=L.files??qe()?.files;if(r?.writeFile){if(!(await r.writeFile(e.filePath,i))?.success)throw new Error("Plan file write failed");return}const p=await Xe("/api/fs/write",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.filePath,content:i})});if(!p.ok)throw new Error(`Failed to write plan file (${p.status})`);return}if(!await Kt.getState().savePlan(e.projectRef,e.planId,i))throw new Error("Plan save rejected: the plan no longer exists")},[L.files]),He=t.useRef(Ue);He.current=Ue;const N=t.useCallback(()=>{const e=b.current;if(!e.key||!e.target||e.editRevision<=e.savedRevision)return;const i={key:e.key,target:e.target,content:e.content,revision:e.editRevision,runtimeKey:e.runtimeKey,write:He.current};P.schedule(i.key,i.revision,async()=>{if(he()!==i.runtimeKey)return;await i.write(i.target,i.content);const o=b.current;o.key===i.key&&(o.savedRevision=Math.max(o.savedRevision,i.revision),le(null))}).catch(o=>{b.current.key===i.key&&le(o instanceof Error?o.message:"Plan save failed")})},[P]);t.useEffect(()=>{if(!be&&!l&&!j){N(),b.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},K(null),oe(null),k(""),W(!1);return}let e=!1;const i=async r=>{if(L.files?.readFile)return(await L.files.readFile(r))?.content??"";const p=qe()?.files;if(p?.readFile)return(await p.readFile(r,{optional:!0}))?.content??"";const v=await Xe(`/api/fs/read?path=${encodeURIComponent(r)}&optional=true`,{cache:"no-store"});if(!v.ok)throw new Error(`Failed to read plan file (${v.status})`);return v.text()};return(async()=>{if(N(),b.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},K(null),oe(null),k(""),le(null),ce(null),j&&g&&z){if(await P.pendingFor(z),e)return;P.reset(z),W(!0);try{const r=await Qt(g,j);if(e)return;if(!r){ce("Plan not found");return}b.current={key:z,target:{projectRef:g,planId:j},content:r.raw,editRevision:0,savedRevision:0,runtimeKey:A},k(r.raw),oe(j)}catch(r){if(e)return;ce(r instanceof Error?r.message:"Plan load failed")}finally{e||W(!1)}return}if(l){const r=JSON.stringify(["plan-file",A,l]);if(await P.pendingFor(r),e)return;P.reset(r),W(!0);try{const p=await i(l);if(e)return;b.current={key:r,target:{filePath:l},content:p,editRevision:0,savedRevision:0,runtimeKey:A},K(l),k(p)}catch{if(e)return;K(null),k("")}finally{e||W(!1)}return}K(null),k("")})(),()=>{e=!0}},[A,J,be,L.files,j,z,g,P,N,E,l]);const vt=t.useCallback(e=>{b.current.content=e,b.current.editRevision+=1,k(e)},[]);t.useEffect(()=>{if(!u&&!ie)return;const e=window.setTimeout(()=>{N()},350);return()=>{window.clearTimeout(e)}},[f,ie,u,N]),t.useEffect(()=>()=>{N()},[N]),t.useEffect(()=>()=>{_.current!==null&&window.clearTimeout(_.current)},[]);const Qe=t.useCallback(()=>{Me(!1),c?.()},[c,Me]),wt=t.useCallback(async e=>{const i=g??O;if(!i||!T||I)return;const o=await nt(T.action==="improve"?"plan.improve.visible":"plan.implement.visible",{plan_title:Y}),r=await nt(T.action==="improve"?"plan.improve.instructions":"plan.implement.instructions",{plan_title:Y,plan_path:u??""}),v=[{synthetic:!0,text:u?r:[r,"","The plan is not stored as a file in the repository and has no file path. Its full current contents follow below this note and are the source of truth for the plan. Where the instructions above refer to the plan file, treat the plan as stored in OpenChamber project knowledge (it is edited through the OpenChamber UI): propose plan revisions as plan text in the chat rather than editing a file.","",f].join(`
4
- `)}];Ne(!0);try{Qe();let S=null,fe=i.path;if(T.target==="worktree"){if(!H)return;const C=await Wt(i.path,_t());if(!C?.id)return;S=C.id,fe=C.path}else{const C=await R(void 0,i.path,void 0,{model:{providerID:e.providerID,id:e.modelID,variant:e.variant||void 0},agent:e.agent.trim()||void 0});if(!C?.id)return;S=C.id,fe=C.directory??i.path,h(C.id,et.getState().agents??[])}if(!S)return;const Z=Bt.getState();Z.saveSessionModelSelection(S,e.providerID,e.modelID),e.agent.trim()&&(Z.saveSessionAgentSelection(S,e.agent),Z.saveAgentModelForSession(S,e.agent,e.providerID,e.modelID),Z.saveAgentModelVariantForSession(S,e.agent,e.providerID,e.modelID,e.variant||void 0)),Se(S,fe);const yt=e.runAsGoal===!0?[`Implement the plan "${Y}" end-to-end${u?` (plan file: ${u})`:" (the full plan follows)"}.`,u?"Re-read that file for full details — it is the source of truth.":"The full plan follows in this message and is the source of truth.","",f].join(`
5
- `):null;$t.getState().setArmed(e.runAsGoal===!0,yt),await M(o,e.providerID,e.modelID,e.agent.trim()||void 0,void 0,void 0,v,e.variant||void 0),D(null)}finally{Ne(!1)}},[H,f,R,O,h,I,T,u,Qe,g,M,Y,Se]),St=t.useMemo(()=>Xt({drafts:Oe,editingDraftId:me,commentText:X,onTextChange:ze,selection:a,isDragging:Ae,fileLabel:ue,newWidgetId:"plan-new-comment-input",mapDraftToRange:e=>({start:e.startLine,end:e.endLine}),onSave:Je,onCancel:Ge,onEdit:e=>{Be(e),w({start:e.startLine,end:e.endLine})},onDelete:$e}),[X,$e,me,Ge,Je,Ae,a,Oe,ue,ze,Be]);return n.jsxs("div",{className:"relative flex h-full min-h-0 min-w-0 w-full flex-col overflow-hidden bg-background",children:[n.jsxs("div",{className:"flex min-w-0 items-center gap-2 border-b border-border/40 px-3 py-1.5 flex-shrink-0",children:[n.jsxs("div",{className:"min-w-0 flex-1",children:[n.jsx("div",{className:"typography-ui-label font-medium truncate",children:de}),Ie?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:Ie,children:s("planView.error.loadFailed")}):null,Ee?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:Ee,children:s("planView.error.saveFailed")}):null]}),ot?n.jsxs("div",{className:"flex items-center gap-1",children:[n.jsxs(rt,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(st,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.improvePlanAria"),disabled:!f.trim()||I,children:n.jsx(G,{name:"loop-right-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.improve")})]}),n.jsxs(it,{align:"end",children:[n.jsx(te,{onClick:()=>D({action:"improve",target:"session"}),disabled:I,children:s("planView.actions.sendToNewSession")}),n.jsx(te,{onClick:()=>D({action:"improve",target:"worktree"}),disabled:!H,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsxs(rt,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(st,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.implementPlanAria"),disabled:!f.trim()||I,children:n.jsx(G,{name:"code-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.implement")})]}),n.jsxs(it,{align:"end",children:[n.jsx(te,{onClick:()=>D({action:"implement",target:"session"}),disabled:I,children:s("planView.actions.sendToNewSession")}),n.jsx(te,{onClick:()=>D({action:"implement",target:"worktree"}),disabled:!H,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsx(Rt,{currentMode:q,onToggle:()=>pt(q==="preview"?"edit":"preview")}),q==="preview"&&ct&&n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s(Q?"planView.tts.stopSpeaking":"planView.tts.readAloud"),onClick:()=>{Q?lt():f.trim()&&at(f)},children:n.jsx(G,{name:"volume-up",className:Q?"h-4 w-4 animate-pulse text-[var(--primary-text)]":"h-4 w-4"})})}),n.jsx(we,{sideOffset:8,children:s(Q?"planView.tts.stopSpeaking":"planView.tts.readAloud")})]}),n.jsx(ee,{variant:"ghost",size:"sm",onClick:async()=>{(await Gt(f)).ok&&(De(!0),_.current!==null&&window.clearTimeout(_.current),_.current=window.setTimeout(()=>{De(!1)},1200))},className:"h-5 w-5 p-0",title:s("planView.actions.copyPlanContents"),"aria-label":s("planView.actions.copyPlanContents"),children:dt?n.jsx(G,{name:"check",className:"h-4 w-4 text-[color:var(--status-success)]"}):n.jsx(G,{name:"clipboard",className:"h-4 w-4"})})]}):null]}),n.jsx(tn,{open:T!==null,onOpenChange:e=>{!e&&!Pe&&D(null)},target:T?.target??"session",projectDirectory:g?.path??O?.path??null,submitting:Pe,allowRunAsGoal:!0,onConfirm:wt}),n.jsx("div",{className:"flex-1 min-h-0 min-w-0 relative",children:n.jsx(Jt,{outerClassName:"h-full min-w-0",className:"h-full min-w-0",children:ut?n.jsx("div",{className:"p-3 typography-ui text-muted-foreground",children:s("planView.state.loading")}):n.jsx("div",{className:"relative h-full",children:n.jsx("div",{className:"h-full",children:q==="preview"?n.jsx("div",{className:"h-full overflow-auto p-3",children:n.jsx(Ut,{fallback:n.jsxs("div",{className:"rounded-md border border-destructive/20 bg-destructive/10 px-3 py-2",children:[n.jsx("div",{className:"mb-1 font-medium text-destructive",children:s("planView.error.previewUnavailable")}),n.jsx("div",{className:"text-sm text-muted-foreground",children:s("planView.error.switchToEditMode")})]}),children:n.jsx(Ht,{content:f,className:"typography-markdown-body",enableFileReferences:!1})})}):n.jsx("div",{className:"relative h-full",ref:mt,children:n.jsx(Mt,{value:f,onChange:vt,readOnly:!1,className:"h-full",extensions:gt,onViewReady:e=>{Fe.current=e},onViewDestroy:()=>{Fe.current=null},blockWidgets:St,highlightLines:a?{start:Math.min(a.start,a.end),end:Math.max(a.start,a.end)}:void 0,lineNumbersConfig:{domEventHandlers:{mousedown:(e,i,o)=>{if(!(o instanceof MouseEvent)||o.button!==0)return!1;o.preventDefault();const r=e.state.doc.lineAt(i.from).number;if(a&&!o.shiftKey&&Math.min(a.start,a.end)===r&&Math.max(a.start,a.end)===r)return w(null),B(),V.current=!1,x.current=null,F(!1),!0;if(Te&&a&&!o.shiftKey){const p=Math.min(a.start,a.end,r),v=Math.max(a.start,a.end,r);return w({start:p,end:v}),V.current=!1,x.current=null,F(!1),!0}if(V.current=!0,x.current=r,F(!0),a&&o.shiftKey){const p=Math.min(a.start,r),v=Math.max(a.end,r);w({start:p,end:v})}else w({start:r,end:r});return!0},mouseover:(e,i,o)=>{if(!(o instanceof MouseEvent)||o.buttons!==1||!V.current||x.current===null)return!1;const r=e.state.doc.lineAt(i.from).number,p=Math.min(x.current,r),v=Math.max(x.current,r);return w({start:p,end:v}),F(!0),!1},mouseup:()=>(V.current=!1,x.current=null,F(!1),!1)}}})})})})})})]})};export{as as PlanView};
@@ -1,2 +0,0 @@
1
- import{R as j,f as ke,j as t}from"./vendor-react-BUCujlKS.js";import{u as Rt}from"./vendor-tanstack-react-virtual-H_JmXOFV.js";import{f as xe,av as mt,aw as ft,I as U,ax as ht,b3 as Tt,h as le,eT as wt,B as te,an as zt,ku as $t,cy as $e,cz as Pe,cA as Oe,cB as Fe,cC as _e,cD as Je,bP as Pt,z as gt,ds as xt,kv as Ot,gI as bt,t as Re,d4 as Ft,N as pt,aK as vt,aF as jt,aG as Nt,aH as Ct,kw as ze,aZ as St,gb as Xe,aE as _t,aI as Vt,gl as Gt,i_ as Lt,js as it,jb as nt,iK as Te,cZ as He,c_ as Ke,ga as qe,c$ as Ue,d0 as We,d1 as Ze,kx as Bt,V as Mt,e$ as Qe,h8 as Ht,X as Le,ky as Kt,kz as qt,kA as Ut,kB as Wt,kC as Jt,kD as Xt,a8 as Zt}from"./useAppFontEffects-DCqCVGlT.js";import{u as at,b3 as kt,A as At,aY as Yt,a as Me}from"./index-vQ1Pg1cr.js";import{b7 as Qt,m as Be,I as Dt,t as It,n as es,as as ts,au as ss,at as is,G as ns,b8 as as,b9 as rs}from"./runtimeEndpointReset-DqLJC6L1.js";import{b as ls,c as os,f as cs,T as rt}from"./changesTree-CePHbFcj.js";const ds=j.memo(function(e){const s=ke.c(69),{file:a,actionLabel:i,actionSymbol:f,onAction:c,onViewDiff:m,onRevert:r,isReverting:p,stats:k,rowPaddingClassName:g,indentPx:d,actionAtStart:w,nameOnly:A,showRevert:D}=e,S=d===void 0?0:d,b=w===void 0?!1:w,u=A===void 0?!1:A,x=D===void 0?!0:D;let F;s[0]!==a?(F=Qt(a),s[0]=a,s[1]=F):F=s[1];const T=F,{t:B}=xe();let K;s[2]!==T.descriptionKey||s[3]!==B?(K=B(T.descriptionKey),s[2]=T.descriptionKey,s[3]=B,s[4]=K):K=s[4];const N=K,$=k?.insertions??0,V=k?.deletions??0;let v;s[5]!==c||s[6]!==m?(v=Q=>{Q.key===" "?(Q.preventDefault(),c()):Q.key==="Enter"&&(Q.preventDefault(),m())},s[5]=c,s[6]=m,s[7]=v):v=s[7];const L=v;let C;s[8]!==c?(C=Q=>{Q.preventDefault(),Q.stopPropagation(),c()},s[8]=c,s[9]=C):C=s[9];const P=C;let E;s[10]!==r?(E=Q=>{Q.preventDefault(),Q.stopPropagation(),r()},s[10]=r,s[11]=E):E=s[11];const _=E;let G;s[12]!==i||s[13]!==f||s[14]!==P?(G=t.jsx("button",{type:"button",onClick:P,className:"flex size-5 shrink-0 items-center justify-center rounded typography-micro font-semibold text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)]","aria-label":i,title:i,children:f}),s[12]=i,s[13]=f,s[14]=P,s[15]=G):G=s[15];const R=G;let z;s[16]===Symbol.for("react.memo_cache_sentinel")?(z={color:"var(--status-success)"},s[16]=z):z=s[16];let I;s[17]!==$?(I=t.jsxs("span",{style:z,children:["+",$]}),s[17]=$,s[18]=I):I=s[18];let q,M;s[19]===Symbol.for("react.memo_cache_sentinel")?(q=t.jsx("span",{className:"text-muted-foreground mx-0.5",children:"/"}),M={color:"var(--status-error)"},s[19]=q,s[20]=M):(q=s[19],M=s[20]);let W;s[21]!==V?(W=t.jsxs("span",{style:M,children:["-",V]}),s[21]=V,s[22]=W):W=s[22];let J;s[23]!==I||s[24]!==W?(J=t.jsxs("span",{className:"shrink-0 typography-micro",children:[I,q,W]}),s[23]=I,s[24]=W,s[25]=J):J=s[25];const se=J;let ie;s[26]!==a.path||s[27]!==_||s[28]!==p||s[29]!==x||s[30]!==B?(ie=x?t.jsxs(mt,{children:[t.jsx(ft,{asChild:!0,children:t.jsx("button",{type:"button",onClick:_,disabled:p,className:"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50","aria-label":B("gitView.changes.revertFileAria",{path:a.path}),children:p?t.jsx(U,{name:"loader-4",className:"size-3.5 animate-spin"}):t.jsx(U,{name:"arrow-go-back",className:"size-3.5"})})}),t.jsx(ht,{sideOffset:8,children:B("gitView.changes.revertFileTooltip")})]}):null,s[26]=a.path,s[27]=_,s[28]=p,s[29]=x,s[30]=B,s[31]=ie):ie=s[31];const X=ie,o=`group flex items-center gap-2 py-1.5 cursor-pointer ${g??"px-3"}`;let h;s[32]!==S?(h=S>0?{paddingLeft:`${S}px`}:void 0,s[32]=S,s[33]=h):h=s[33];const n=b?R:null;let y;s[34]!==T.color?(y={color:T.color},s[34]=T.color,s[35]=y):y=s[35];let O;s[36]!==T.code||s[37]!==N||s[38]!==y?(O=t.jsx("span",{className:"typography-micro font-semibold w-4 text-center uppercase",style:y,title:N,"aria-label":N,children:T.code}),s[36]=T.code,s[37]=N,s[38]=y,s[39]=O):O=s[39];let H;s[40]!==a.path?(H=t.jsx(Tt,{filePath:a.path,className:"h-3.5 w-3.5 shrink-0"}),s[40]=a.path,s[41]=H):H=s[41];let Y;if(s[42]!==a.path||s[43]!==u){e:{const Q=a.path.lastIndexOf("/");if(Q===-1||u){let oe;s[45]===Symbol.for("react.memo_cache_sentinel")?(oe={direction:"rtl",textAlign:"left",unicodeBidi:"plaintext"},s[45]=oe):oe=s[45];const fe=a.path,Se=a.path.slice(Q+1);let ee;s[46]!==a.path||s[47]!==Se?(ee=t.jsx("span",{className:"flex-1 min-w-0 truncate typography-ui-label text-foreground",style:oe,title:fe,children:Se}),s[46]=a.path,s[47]=Se,s[48]=ee):ee=s[48],Y=ee;break e}const Ce=a.path.slice(0,Q),de=a.path.slice(Q);let re;s[49]===Symbol.for("react.memo_cache_sentinel")?(re={direction:"rtl",textAlign:"left",unicodeBidi:"plaintext"},s[49]=re):re=s[49];let ue;s[50]===Symbol.for("react.memo_cache_sentinel")?(ue=t.jsx("span",{className:"text-muted-foreground",children:"/"}),s[50]=ue):ue=s[50];const ge=t.jsx("span",{className:"text-foreground",children:de.slice(1)});let me;s[51]!==ge?(me=t.jsxs("span",{className:"flex-shrink-0 typography-ui-label",children:[ue,ge]}),s[51]=ge,s[52]=me):me=s[52],Y=t.jsxs("span",{className:"flex-1 min-w-0 flex items-baseline overflow-hidden",title:a.path,children:[t.jsx("span",{className:"min-w-0 truncate typography-ui-label text-muted-foreground",style:re,children:Ce}),me]})}s[42]=a.path,s[43]=u,s[44]=Y}else Y=s[44];let Z;s[53]!==b||s[54]!==R||s[55]!==p||s[56]!==X||s[57]!==se?(Z=b?t.jsxs(t.Fragment,{children:[se,X]}):t.jsxs("span",{className:"flex shrink-0 items-center justify-items-end gap-2 md:grid",children:[t.jsx("span",{className:le("md:col-start-1 md:row-start-1",p?"md:invisible":"md:group-hover:invisible md:group-focus-within:invisible"),children:se}),t.jsxs("span",{className:le("flex items-center gap-2 md:col-start-1 md:row-start-1",!p&&"md:invisible md:group-hover:visible md:group-focus-within:visible"),children:[X,R]})]}),s[53]=b,s[54]=R,s[55]=p,s[56]=X,s[57]=se,s[58]=Z):Z=s[58];let ne;return s[59]!==L||s[60]!==m||s[61]!==o||s[62]!==h||s[63]!==n||s[64]!==O||s[65]!==H||s[66]!==Y||s[67]!==Z?(ne=t.jsxs("div",{className:o,role:"button",tabIndex:0,onClick:m,onKeyDown:L,style:h,children:[n,O,H,Y,Z]}),s[59]=L,s[60]=m,s[61]=o,s[62]=h,s[63]=n,s[64]=O,s[65]=H,s[66]=Y,s[67]=Z,s[68]=ne):ne=s[68],ne}),us=1e3,yt=34,lt=30,et="pl-0 pr-2",ot=(l,e)=>`${l} ${e}`,Hs=({groups:l,diffStats:e,revertingPaths:s,isRevertingAll:a=!1,headerBackgroundClassName:i="bg-sidebar",onVisiblePathsChange:f,onRevertAll:c,onRevertDirectory:m})=>{const{t:r}=xe(),p=j.useRef(null),g=at(o=>o.gitChangesViewMode)==="tree",d=j.useMemo(()=>l.filter(o=>o.entries.length>0),[l]),[w,A]=j.useState(new Set),[D,S]=j.useState(new Set),[b,u]=j.useState(!1),[x,F]=j.useState(null),T=wt(),{confirm:B}=T,K=j.useCallback(async(o,h)=>{await B({title:r("gitView.changes.revertFileDialogTitle"),message:r("gitView.changes.revertFileDescription",{path:h}),action:r("gitView.changes.revertFileConfirm"),destructive:!0})&&o.onRevertFile(h)},[B,r]),N=j.useMemo(()=>d.map(o=>ls(o.entries)),[d]),$=j.useMemo(()=>{const o=[];return d.forEach((h,n)=>{Array.from(N[n]?.children.values()??[]).forEach(y=>{o.push(ot(h.id,os(y).node.path))})}),o},[N,d]);j.useEffect(()=>{g&&S(o=>{const h=new Set,n=new Set($);return o.forEach(y=>{(y.slice(y.indexOf(" ")+1).includes("/")||n.has(y))&&h.add(y)}),$.forEach(y=>h.add(y)),h})},[g,$]);const V=j.useMemo(()=>{const o=[];return d.forEach((h,n)=>{if(o.push({type:"header",key:`header:${h.id}`,groupIndex:n}),!w.has(h.id)){if(g){const y=new Set;D.forEach(H=>{H.startsWith(`${h.id} `)&&y.add(H.slice(h.id.length+1))}),cs(N[n],y).forEach(H=>{H.kind==="file"?o.push({type:"file",key:`${h.id}:${H.key}`,groupIndex:n,file:H.file,depth:H.depth}):o.push({type:"directory",key:`${h.id}:${H.key}`,groupIndex:n,directory:H.directory,label:H.label,depth:H.depth})});return}h.entries.forEach(y=>{o.push({type:"file",key:`${h.id}:file:${y.path}`,groupIndex:n,file:y,depth:0})})}}),c&&d.length>0&&o.push({type:"revert-all",key:"revert-all"}),o},[w,D,g,c,N,d]),v=V.length,L=v>=us,C=Rt({count:v,enabled:L,getScrollElement:()=>p.current,estimateSize:()=>yt,overscan:12,getItemKey:o=>V[o]?.key??o}),P=C.getVirtualItems(),E=j.useMemo(()=>{if(!L)return 0;const o=p.current?.scrollTop??0;return P.find(n=>n.end>o)?.index??0},[L,P,p]);j.useEffect(()=>{if(!f)return;const o=h=>h&&h.type==="file"?h.file.path:null;if(v===0){f([]);return}if(!L){const h=[];for(const n of V)if(n.type==="file"&&(h.push(n.file.path),h.length>=lt))break;f(h);return}f(V.slice(E,E+Math.ceil((p.current?.clientHeight??0)/yt)+lt).map(h=>o(h)).filter(h=>!!h).slice(0,lt))},[f,v,V,L,E]);const _=j.useCallback(o=>{A(h=>{const n=new Set(h);return n.has(o)?n.delete(o):n.add(o),n})},[]),G=j.useCallback((o,h)=>{S(n=>{const y=new Set(n),O=ot(o,h);return y.has(O)?y.delete(O):y.add(O),y})},[]),R=j.useMemo(()=>{const o=new Set;return d.forEach(h=>h.entries.forEach(n=>o.add(n.path))),Array.from(o)},[d]),z=R.length,I=x?a||x.paths.some(o=>s.has(o)):!1,q=j.useCallback(async()=>{!c||a||R.length===0||(await c(R),u(!1))},[R,a,c]),M=j.useCallback(async()=>{!m||!x||I||(await m(x.paths),F(null))},[I,m,x]),W=j.useCallback((o,h)=>{const n=w.has(o.id),y=o.entries.length;return t.jsxs("div",{className:le("sticky top-0 z-10 flex items-center gap-2 py-2",i,et,!h&&"mt-1 border-t border-border/40"),children:[t.jsx("button",{type:"button",onClick:()=>o.onActionAll(o.entries.map(O=>O.path)),className:"flex size-5 shrink-0 items-center justify-center rounded typography-micro font-semibold text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)]","aria-label":o.actionAllLabel,title:o.actionAllLabel,children:o.actionSymbol}),t.jsxs("button",{type:"button",onClick:()=>_(o.id),className:"flex min-w-0 flex-1 items-center gap-2 rounded text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)]","aria-expanded":!n,children:[t.jsx("h3",{className:"truncate typography-ui-header font-semibold text-foreground",children:o.title}),t.jsx("span",{className:"typography-meta text-muted-foreground",children:y}),t.jsx(U,{name:"arrow-down-s",className:le("size-3.5 shrink-0 text-muted-foreground transition-transform",n&&"-rotate-90")})]})]})},[w,i,_]),J=j.useCallback((o,h,n,y)=>{const O=D.has(ot(o.id,h.path)),H=h.files.map(Z=>Z.path),Y=a||H.some(Z=>s.has(Z));return t.jsxs("div",{className:le("group flex items-center gap-2 py-1.5 text-muted-foreground hover:text-foreground",et),style:{paddingLeft:`${y*rt}px`},children:[t.jsxs("button",{type:"button",onClick:()=>G(o.id,h.path),"aria-expanded":O,className:"flex min-w-0 flex-1 items-center gap-1.5 rounded text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","aria-label":O?r("gitView.changes.collapseDirectoryAria",{path:h.path}):r("gitView.changes.expandDirectoryAria",{path:h.path}),children:[t.jsx("span",{className:"flex w-4 shrink-0 items-center justify-center",children:t.jsx(U,{name:"arrow-right-s",className:le("size-3.5 transition-transform",O&&"rotate-90")})}),t.jsx("span",{className:"min-w-0 truncate typography-ui-label",title:h.path,children:n}),O?null:t.jsx("span",{className:"shrink-0 typography-micro tabular-nums text-muted-foreground/70",children:h.files.length})]}),t.jsxs("span",{className:le("flex shrink-0 items-center gap-2 transition-opacity",!Y&&"md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100"),children:[o.showRevertActions!==!1&&m?t.jsx("button",{type:"button",onClick:()=>F({path:h.path,paths:H,count:H.length}),disabled:Y,className:"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50","aria-label":r("gitView.changes.revertDirectoryAria",{path:h.path}),title:r("gitView.changes.revertDirectoryTooltip"),children:Y?t.jsx(U,{name:"loader-4",className:"size-3.5 animate-spin"}):t.jsx(U,{name:"arrow-go-back",className:"size-3.5"})}):null,t.jsx("button",{type:"button",onClick:()=>o.onActionAll(h.files.map(Z=>Z.path)),className:"flex size-5 shrink-0 items-center justify-center rounded typography-micro font-semibold text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)]","aria-label":r(o.actionSymbol==="+"?"gitView.changes.stageDirectoryAria":"gitView.changes.unstageDirectoryAria",{path:h.path}),title:r(o.actionSymbol==="+"?"gitView.changes.stageDirectoryAria":"gitView.changes.unstageDirectoryAria",{path:h.path}),children:o.actionSymbol})]})]})},[D,a,m,s,r,G]),se=j.useCallback((o,h)=>{if(o.type==="revert-all")return t.jsx("div",{className:le("flex justify-end py-2",et),children:t.jsxs(te,{variant:"ghost",size:"sm",onClick:()=>u(!0),disabled:a,className:"gap-1.5 text-[var(--status-error)] hover:bg-[var(--status-error)]/10 hover:text-[var(--status-error)]",children:[t.jsx(U,{name:"arrow-go-back",className:"size-3.5"}),r("gitView.changes.revertAll")]})});const n=d[o.groupIndex];if(!n)return null;if(o.type==="header")return W(n,h);if(o.type==="directory")return J(n,o.directory,o.label,o.depth);const y=o.file;return t.jsx(ds,{file:y,actionLabel:n.getActionLabel(y.path),actionSymbol:n.actionSymbol,onAction:()=>n.onActionFile(y.path),stats:e?.[n.statsScope]?.[y.path],onViewDiff:()=>n.onViewDiff(y.path),onRevert:()=>{K(n,y.path)},isReverting:s.has(y.path)||a,rowPaddingClassName:et,indentPx:o.depth*rt,actionAtStart:!g,nameOnly:g,showRevert:n.showRevertActions!==!1})},[e,a,g,J,W,K,s,r,d]),ie=o=>o.type!=="file"&&o.type!=="directory"?null:Array.from({length:o.depth},(h,n)=>t.jsx("span",{"aria-hidden":!0,className:"pointer-events-none absolute inset-y-0 w-px bg-border/50",style:{left:`${n*rt+8}px`}},n)),X=j.useCallback(o=>{if(g)return!1;const h=V[o],n=V[o-1];return!h||!n||h.type!=="file"&&h.type!=="directory"||n.type!=="file"&&n.type!=="directory"?!1:n.groupIndex===h.groupIndex},[g,V]);return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"relative flex h-full min-h-0 w-full flex-col overflow-hidden",children:[t.jsx(zt,{ref:p,className:"overlay-scrollbar-target overlay-scrollbar-container min-h-0 w-full flex-1 overflow-x-hidden overflow-y-auto",children:L?t.jsx("div",{style:{height:C.getTotalSize(),position:"relative"},children:P.map(o=>{const h=V[o.index];return h?t.jsxs("div",{"data-index":o.index,ref:C.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${o.start}px)`},className:le(X(o.index)&&"before:pointer-events-none before:absolute before:left-0 before:right-2 before:top-0 before:border-t before:border-border/60"),children:[ie(h),se(h,o.index===0)]},h.key):null})}):t.jsx("div",{role:"list","aria-label":r("gitView.changes.changedFilesAria"),children:V.map((o,h)=>t.jsxs("div",{className:le("relative",X(h)&&"before:pointer-events-none before:absolute before:left-0 before:right-2 before:top-0 before:border-t before:border-border/60"),children:[ie(o),se(o,h===0)]},o.key))})}),t.jsx($t,{containerRef:p,disableHorizontal:!0})]}),T.dialog,t.jsx($e,{open:b,onOpenChange:o=>{!a&&!o&&u(!1)},children:t.jsxs(Pe,{className:"max-w-md",children:[t.jsxs(Oe,{children:[t.jsx(Fe,{children:r("gitView.changes.revertAllDialogTitle")}),t.jsx(_e,{children:z===1?r("gitView.changes.revertAllDescriptionSingle",{count:z}):r("gitView.changes.revertAllDescriptionPlural",{count:z})})]}),t.jsxs(Je,{children:[t.jsx(te,{variant:"outline",size:"sm",onClick:()=>u(!1),disabled:a,children:r("gitView.common.cancel")}),t.jsx(te,{variant:"destructive",size:"sm",onClick:()=>{q()},disabled:a,children:r(a?"gitView.changes.reverting":"gitView.changes.revertAll")})]})]})}),t.jsx($e,{open:!!x,onOpenChange:o=>{!I&&!o&&F(null)},children:t.jsxs(Pe,{className:"max-w-md",children:[t.jsxs(Oe,{children:[t.jsx(Fe,{children:r("gitView.changes.revertDirectoryDialogTitle")}),t.jsx(_e,{children:x?x.count===1?r("gitView.changes.revertDirectoryDescriptionSingle",{count:x.count,path:x.path}):r("gitView.changes.revertDirectoryDescriptionPlural",{count:x.count,path:x.path}):null})]}),t.jsxs(Je,{children:[t.jsx(te,{variant:"outline",size:"sm",onClick:()=>F(null),disabled:I,children:r("gitView.common.cancel")}),t.jsx(te,{variant:"destructive",size:"sm",onClick:()=>{M()},disabled:I||!x,children:r(I?"gitView.changes.reverting":"gitView.changes.revertDirectory")})]})]})})]})},ct=38,tt=200,ms=l=>{const e=ke.c(23),{value:s,onChange:a,onSubmit:i,placeholder:f,disabled:c,hasTouchInput:m,isMobile:r}=l,p=c===void 0?!1:c,k=m===void 0?!1:m,g=r===void 0?!1:r,{t:d}=xe(),w=j.useRef(null),A=at(fs);let D;e[0]===Symbol.for("react.memo_cache_sentinel")?(D=()=>{const v=w.current;if(!v)return;const L=document.activeElement===v,C=()=>{v.style.height=`${ct}px`;const E=v.scrollHeight,_=Math.min(Math.max(E,ct),tt);v.style.height=`${_}px`,v.style.overflowY=E>tt?"auto":"hidden",E>tt&&!L&&(v.scrollTop=v.scrollHeight)};C();const P=window.requestAnimationFrame(C);return()=>{window.cancelAnimationFrame(P)}},e[0]=D):D=e[0];let S;e[1]!==s?(S=[s],e[1]=s,e[2]=S):S=e[2],j.useLayoutEffect(D,S);let b;e[3]!==a?(b=v=>a(v.target.value),e[3]=a,e[4]=b):b=e[4];let u;e[5]!==i?(u=v=>{v.key==="Enter"&&(v.metaKey||v.ctrlKey)&&!v.shiftKey&&!v.altKey&&(v.preventDefault(),i?.())},e[5]=i,e[6]=u):u=e[6];let x;e[7]!==f||e[8]!==d?(x=f??d("gitView.commit.messagePlaceholder"),e[7]=f,e[8]=d,e[9]=x):x=e[9];const F=k?"on":"off",T=k?"sentences":"off",B=g||A,K=p&&"opacity-50";let N;e[10]!==K?(N=le("w-full rounded-lg border border-border/60 bg-surface-elevated px-3 py-2 typography-ui-label text-foreground placeholder:text-muted-foreground","resize-none outline-none transition-[border-color,box-shadow] duration-150","focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)]",K),e[10]=K,e[11]=N):N=e[11];let $;e[12]===Symbol.for("react.memo_cache_sentinel")?($={minHeight:ct,maxHeight:tt},e[12]=$):$=e[12];let V;return e[13]!==p||e[14]!==T||e[15]!==B||e[16]!==N||e[17]!==b||e[18]!==u||e[19]!==x||e[20]!==F||e[21]!==s?(V=t.jsx("textarea",{ref:w,value:s,onChange:b,onKeyDown:u,placeholder:x,rows:1,disabled:p,autoCorrect:F,autoCapitalize:T,spellCheck:B,className:N,style:$}),e[13]=p,e[14]=T,e[15]=B,e[16]=N,e[17]=b,e[18]=u,e[19]=x,e[20]=F,e[21]=s,e[22]=V):V=e[22],V};function fs(l){return l.inputSpellcheckEnabled}const hs=l=>{const e=ke.c(30),{highlights:s,onInsert:a}=l,{t:i}=xe();if(s.length===0)return null;let f;e[0]!==s||e[1]!==a?(f=()=>{a(s)},e[0]=s,e[1]=a,e[2]=f):f=e[2];const c=f;let m;e[3]!==i?(m=i("gitView.commit.aiHighlights.title"),e[3]=i,e[4]=m):m=e[4];let r;e[5]!==m?(r=t.jsx("p",{className:"typography-micro text-muted-foreground",children:m}),e[5]=m,e[6]=r):r=e[6];let p;e[7]!==i?(p=i("gitView.commit.aiHighlights.insertAria"),e[7]=i,e[8]=p):p=e[8];let k;e[9]===Symbol.for("react.memo_cache_sentinel")?(k=t.jsx(U,{name:"arrow-down",className:"size-4"}),e[9]=k):k=e[9];let g;e[10]!==c||e[11]!==p?(g=t.jsx(ft,{asChild:!0,children:t.jsx(te,{variant:"ghost",size:"icon",className:"size-6",onClick:c,"aria-label":p,children:k})}),e[10]=c,e[11]=p,e[12]=g):g=e[12];let d;e[13]!==i?(d=i("gitView.commit.aiHighlights.insertTooltip"),e[13]=i,e[14]=d):d=e[14];let w;e[15]!==d?(w=t.jsx(ht,{sideOffset:8,children:d}),e[15]=d,e[16]=w):w=e[16];let A;e[17]!==g||e[18]!==w?(A=t.jsxs(mt,{children:[g,w]}),e[17]=g,e[18]=w,e[19]=A):A=e[19];let D;e[20]!==r||e[21]!==A?(D=t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[r,A]}),e[20]=r,e[21]=A,e[22]=D):D=e[22];let S;e[23]!==s?(S=s.map(ps),e[23]=s,e[24]=S):S=e[24];let b;e[25]!==S?(b=t.jsx("ul",{className:"space-y-1",children:S}),e[25]=S,e[26]=b):b=e[26];let u;return e[27]!==D||e[28]!==b?(u=t.jsxs("div",{className:"space-y-2 rounded-xl border border-border/60 bg-transparent px-3 py-2",children:[D,b]}),e[27]=D,e[28]=b,e[29]=u):u=e[29],u};function ps(l,e){return t.jsx("li",{className:"typography-meta text-foreground",children:l},`${l}-${e}`)}const Ks=l=>{const e=ke.c(81),{stagedCount:s,commitMessage:a,onCommitMessageChange:i,generatedHighlights:f,onInsertHighlights:c,onGenerateMessage:m,isGeneratingMessage:r,onCommit:p,onCommitAndPush:k,commitAction:g,networkOperationBlocked:d,hasPendingIndexMutation:w,gitmojiEnabled:A,onOpenGitmojiPicker:D}=l,S=d===void 0?!1:d,b=w===void 0?!1:w,{t:u}=xe(),x=s>0;let F;e[0]!==g||e[1]!==a||e[2]!==b||e[3]!==x?(F=a.trim()&&x&&g===null&&!b,e[0]=g,e[1]=a,e[2]=b,e[3]=x,e[4]=F):F=e[4];const T=F,{isMobile:B,hasTouchInput:K}=Pt();let N;e[5]!==u?(N=u("gitView.commit.title"),e[5]=u,e[6]=N):N=e[6];let $;e[7]!==N?($=t.jsx("h3",{className:"typography-ui-header font-semibold text-foreground",children:N}),e[7]=N,e[8]=$):$=e[8];let V;e[9]!==x||e[10]!==u?(V=x?null:t.jsx("span",{className:"min-w-0 truncate typography-meta text-muted-foreground",children:u("gitView.commit.stageFilesHint")}),e[9]=x,e[10]=u,e[11]=V):V=e[11];let v;e[12]!==$||e[13]!==V?(v=t.jsxs("div",{className:"flex w-full items-baseline gap-2 px-0 pt-2 pb-1",children:[$,V]}),e[12]=$,e[13]=V,e[14]=v):v=e[14];let L;e[15]!==f||e[16]!==c?(L=t.jsx(hs,{highlights:f,onInsert:c}),e[15]=f,e[16]=c,e[17]=L):L=e[17];let C;e[18]!==T||e[19]!==r||e[20]!==p?(C=()=>{T&&!r&&p()},e[18]=T,e[19]=r,e[20]=p,e[21]=C):C=e[21];let P;e[22]!==u?(P=u("gitView.commit.messagePlaceholder"),e[22]=u,e[23]=P):P=e[23];const E=g!==null;let _;e[24]!==a||e[25]!==K||e[26]!==B||e[27]!==i||e[28]!==P||e[29]!==E||e[30]!==C?(_=t.jsx(ms,{value:a,onChange:i,onSubmit:C,placeholder:P,disabled:E,hasTouchInput:K,isMobile:B}),e[24]=a,e[25]=K,e[26]=B,e[27]=i,e[28]=P,e[29]=E,e[30]=C,e[31]=_):_=e[31];let G;e[32]!==A||e[33]!==D||e[34]!==u?(G=A&&t.jsxs(te,{variant:"outline",size:"sm",onClick:D,className:"w-fit",type:"button",children:[t.jsx(U,{name:"emotion-happy",className:"size-4"}),u("gitView.commit.addGitmoji")]}),e[32]=A,e[33]=D,e[34]=u,e[35]=G):G=e[35];const R=r||g!==null||b||s===0;let z;e[36]!==u?(z=u("gitView.commit.generateAria"),e[36]=u,e[37]=z):z=e[37];let I;e[38]!==r?(I=r?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(U,{name:"ai-generate-2",className:"size-4 text-primary"}),e[38]=r,e[39]=I):I=e[39];let q;e[40]!==u?(q=u("gitView.commit.generate"),e[40]=u,e[41]=q):q=e[41];let M;e[42]!==q?(M=t.jsx("span",{className:"commit-actions__label",children:q}),e[42]=q,e[43]=M):M=e[43];let W;e[44]!==m||e[45]!==R||e[46]!==z||e[47]!==I||e[48]!==M?(W=t.jsxs(te,{variant:"outline",size:"sm",onClick:m,disabled:R,type:"button","aria-label":z,className:"commit-actions__btn",children:[I,M]}),e[44]=m,e[45]=R,e[46]=z,e[47]=I,e[48]=M,e[49]=W):W=e[49];let J;e[50]===Symbol.for("react.memo_cache_sentinel")?(J=t.jsx("div",{className:"flex-1"}),e[50]=J):J=e[50];const se=!T||r;let ie;e[51]!==u?(ie=u("gitView.commit.commitAria"),e[51]=u,e[52]=ie):ie=e[52];let X;e[53]!==g||e[54]!==u?(X=g==="commit"?t.jsxs(t.Fragment,{children:[t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}),t.jsx("span",{className:"commit-actions__label",children:u("gitView.commit.committing")})]}):t.jsxs(t.Fragment,{children:[t.jsx(U,{name:"git-commit",className:"size-4"}),t.jsx("span",{className:"commit-actions__label",children:u("gitView.commit.commit")})]}),e[53]=g,e[54]=u,e[55]=X):X=e[55];let o;e[56]!==p||e[57]!==se||e[58]!==ie||e[59]!==X?(o=t.jsx(te,{size:"sm",variant:"outline",onClick:p,disabled:se,className:"commit-actions__btn whitespace-nowrap","aria-label":ie,children:X}),e[56]=p,e[57]=se,e[58]=ie,e[59]=X,e[60]=o):o=e[60];let h;e[61]!==T||e[62]!==g||e[63]!==r||e[64]!==B||e[65]!==S||e[66]!==k||e[67]!==u?(h=B?t.jsxs(mt,{children:[t.jsx(ft,{asChild:!0,children:t.jsx(te,{variant:"default",size:"sm",onClick:()=>k(),disabled:!T||r||S,className:"h-7 w-7 p-0","aria-label":u("gitView.commit.pushAria"),children:g==="commitAndPush"?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(U,{name:"arrow-up",className:"size-3.5"})})}),t.jsx(ht,{side:"top",children:t.jsx("p",{children:u("gitView.commit.push")})})]}):t.jsx(te,{size:"sm",variant:"default",onClick:()=>k(),disabled:!T||r||S,className:"commit-actions__btn","aria-label":u("gitView.commit.pushAria"),children:g==="commitAndPush"?t.jsxs(t.Fragment,{children:[t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}),t.jsx("span",{className:"commit-actions__label commit-actions__label--push",children:u("gitView.commit.pushing")})]}):t.jsxs(t.Fragment,{children:[t.jsx(U,{name:"arrow-up",className:"size-3.5"}),t.jsx("span",{className:"commit-actions__label commit-actions__label--push",children:u("gitView.commit.push")})]})}),e[61]=T,e[62]=g,e[63]=r,e[64]=B,e[65]=S,e[66]=k,e[67]=u,e[68]=h):h=e[68];let n;e[69]!==W||e[70]!==o||e[71]!==h?(n=t.jsxs("div",{className:"@container/commit-actions flex items-center gap-2 min-w-0",children:[W,J,o,h]}),e[69]=W,e[70]=o,e[71]=h,e[72]=n):n=e[72];let y;e[73]!==_||e[74]!==G||e[75]!==n||e[76]!==L?(y=t.jsxs("div",{className:"flex flex-col gap-3 px-0 pt-1 pb-3",children:[L,_,G,n]}),e[73]=_,e[74]=G,e[75]=n,e[76]=L,e[77]=y):y=e[77];let O;return e[78]!==y||e[79]!==v?(O=t.jsxs("section",{className:"border-0 bg-transparent rounded-none",children:[v,y]}),e[78]=y,e[79]=v,e[80]=O):O=e[80],O},qs=l=>{const e=ke.c(150),{open:s,onOpenChange:a,conflictFiles:i,directory:f,operation:c,onAbort:m,onClearState:r,onNavigatedToChat:p}=l;let k;e[0]!==i?(k=i===void 0?[]:i,e[0]=i,e[1]=k):k=e[1];const g=k,{t:d}=xe(),w=gt(gs),A=gt(xs),D=xt(bs),S=xt(ys),[b,u]=j.useState(!1),[x,F]=j.useState(null),[T,B]=j.useState(null);let K,N;e[2]!==f||e[3]!==s||e[4]!==d?(K=()=>{!s||!f||(u(!0),B(null),F(null),Ot(f).then(ee=>{F(ee)}).catch(ee=>{const ce=ee instanceof Error?ee.message:d("gitView.conflict.loadFailed");B(ce)}).finally(()=>{u(!1)}))},N=[s,f,d],e[2]=f,e[3]=s,e[4]=d,e[5]=K,e[6]=N):(K=e[5],N=e[6]),j.useEffect(K,N);let $;e[7]!==x||e[8]!==f||e[9]!==c?($=async()=>{if(!x)return null;const ee=c==="merge"?"merge":"rebase",ce=x.headInfo||(c==="merge"?"MERGE_HEAD":"REBASE_HEAD"),be=c==="merge"?"git commit --no-edit":"git rebase --continue",Ve=await bt("git.conflict.resolve.visible",{operation_label:ee,head_ref:ce}),he=await bt("git.conflict.resolve.instructions",{operation_label:ee,directory:f,operation:c,head_info:x.headInfo||"N/A",continue_cmd:be}),pe=`${ee} conflict context (JSON)
2
- ${JSON.stringify({directory:f,operation:x.operation,headInfo:x.headInfo,statusPorcelain:x.statusPorcelain,unmergedFiles:x.unmergedFiles,diff:x.diff},null,2)}`;return{visibleText:Ve,instructionsText:he,payloadText:pe}},e[7]=x,e[8]=f,e[9]=c,e[10]=$):$=e[10];const V=$;let v;e[11]!==m||e[12]!==a?(v=()=>{m(),a(!1)},e[11]=m,e[12]=a,e[13]=v):v=e[13];const L=v;let C;e[14]!==r||e[15]!==a?(C=()=>{r?.(),a(!1)},e[14]=r,e[15]=a,e[16]=C):C=e[16];const P=C;let E;e[17]!==V||e[18]!==A||e[19]!==r||e[20]!==p||e[21]!==a||e[22]!==D||e[23]!==S||e[24]!==d?(E=async()=>{const ee=await V();if(!ee){Re.error(d("gitView.conflict.noDetailsAvailable"));return}if(!A){Re.error(d("gitView.conflict.noActiveSession"),{description:d("gitView.conflict.noActiveSessionDescription")});return}D(ee.visibleText,"replace"),S([{text:ee.instructionsText,synthetic:!0},{text:ee.payloadText,synthetic:!0}]),r?.(),a(!1),p?.()},e[17]=V,e[18]=A,e[19]=r,e[20]=p,e[21]=a,e[22]=D,e[23]=S,e[24]=d,e[25]=E):E=e[25];const _=E;let G;e[26]!==V||e[27]!==f||e[28]!==r||e[29]!==p||e[30]!==a||e[31]!==w||e[32]!==d?(G=async()=>{const ee=await V();if(!ee){Re.error(d("gitView.conflict.noDetailsAvailable"));return}w({directoryOverride:f,initialPrompt:ee.visibleText,syntheticParts:[{text:ee.instructionsText,synthetic:!0},{text:ee.payloadText,synthetic:!0}]}),r?.(),a(!1),p?.()},e[26]=V,e[27]=f,e[28]=r,e[29]=p,e[30]=a,e[31]=w,e[32]=d,e[33]=G):G=e[33];const R=G;let z,I,q,M,W,J,se,ie,X,o,h,n,y,O,H,Y,Z,ne,Q,Ce,de,re;if(e[34]!==x||e[35]!==g||e[36]!==A||e[37]!==L||e[38]!==P||e[39]!==_||e[40]!==R||e[41]!==b||e[42]!==T||e[43]!==a||e[44]!==s||e[45]!==c||e[46]!==d){const ee=d(c==="merge"?"gitView.operation.merge":"gitView.operation.rebase"),ce=x?.unmergedFiles||g;q=$e,de=s,re=a,I=Pe,Ce="max-w-md w-[calc(100vw-2rem)]",O="flex flex-col gap-4 overflow-hidden";let be;e[69]===Symbol.for("react.memo_cache_sentinel")?(be=t.jsx(U,{name:"alert",className:"size-5 shrink-0 text-[var(--status-warning)]"}),e[69]=be):be=e[69];const Ve=t.jsxs("div",{className:"flex items-center gap-2",children:[be,t.jsx(Fe,{children:d("gitView.conflict.detectedTitle",{operation:ee})})]});let he;e[70]!==c||e[71]!==d?(he=d("gitView.conflict.detectedDescription",{operation:c}),e[70]=c,e[71]=d,e[72]=he):he=e[72];let pe;e[73]!==he?(pe=t.jsx(_e,{children:he}),e[73]=he,e[74]=pe):pe=e[74],e[75]!==Ve||e[76]!==pe?(H=t.jsxs(Oe,{children:[Ve,pe]}),e[75]=Ve,e[76]=pe,e[77]=H):H=e[77],e[78]!==b||e[79]!==d?(Y=b&&t.jsxs("div",{className:"flex items-center justify-center gap-2 py-4 text-muted-foreground",children:[t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}),t.jsx("span",{className:"typography-meta",children:d("gitView.conflict.loading")})]}),e[78]=b,e[79]=d,e[80]=Y):Y=e[80],e[81]!==T||e[82]!==d?(Z=T&&t.jsx("div",{className:"rounded-lg bg-[var(--status-error-bg)] p-3 text-[var(--status-error)] typography-meta break-words",children:d("gitView.conflict.errorLoadingDetails",{message:T})}),e[81]=T,e[82]=d,e[83]=Z):Z=e[83],e[84]!==ce||e[85]!==d?(ne=ce.length>0&&t.jsxs("div",{className:"space-y-2 overflow-hidden",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("p",{className:"typography-meta text-muted-foreground",children:d("gitView.conflict.conflictedFiles")}),t.jsx("span",{className:"typography-micro px-1.5 py-0.5 rounded bg-[var(--surface-elevated)] text-muted-foreground",children:ce.length})]}),t.jsx("div",{className:"bg-[var(--surface-elevated)] rounded-lg p-3 max-h-40 overflow-y-auto overflow-x-hidden",children:t.jsx("ul",{className:"space-y-1",children:ce.map(ws)})})]}),e[84]=ce,e[85]=d,e[86]=ne):ne=e[86],e[87]!==x||e[88]!==d?(Q=x?.headInfo&&t.jsxs("div",{className:"space-y-1 overflow-hidden",children:[t.jsx("p",{className:"typography-meta text-muted-foreground",children:d("gitView.conflict.headInfo")}),t.jsx("div",{className:"typography-micro text-foreground font-mono bg-[var(--surface-elevated)] rounded-lg p-3 max-h-24 overflow-y-auto break-words whitespace-pre-wrap",children:x.headInfo})]}),e[87]=x,e[88]=d,e[89]=Q):Q=e[89],h="flex flex-col gap-2 pt-2";let ye;e[90]!==R?(ye=()=>{R()},e[90]=R,e[91]=ye):ye=e[91];const Ae=b||!x;let De;e[92]!==b?(De=b?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(U,{name:"add",className:"size-4"}),e[92]=b,e[93]=De):De=e[93];let Ie;e[94]!==d?(Ie=d("gitView.conflict.resolveNewSession"),e[94]=d,e[95]=Ie):Ie=e[95],e[96]!==ye||e[97]!==Ae||e[98]!==De||e[99]!==Ie?(n=t.jsxs(te,{variant:"default",onClick:ye,disabled:Ae,className:"w-full gap-2",children:[De,Ie]}),e[96]=ye,e[97]=Ae,e[98]=De,e[99]=Ie,e[100]=n):n=e[100];let we;e[101]!==_?(we=()=>{_()},e[101]=_,e[102]=we):we=e[102];const Ee=b||!x||!A;let ve;e[103]!==b?(ve=b?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(U,{name:"chat-1",className:"size-4"}),e[103]=b,e[104]=ve):ve=e[104];let je;e[105]!==d?(je=d("gitView.conflict.resolveCurrentSession"),e[105]=d,e[106]=je):je=e[106],e[107]!==we||e[108]!==Ee||e[109]!==ve||e[110]!==je?(y=t.jsxs(te,{variant:"outline",onClick:we,disabled:Ee,className:"w-full gap-2",children:[ve,je]}),e[107]=we,e[108]=Ee,e[109]=ve,e[110]=je,e[111]=y):y=e[111],X="flex gap-2 pt-1";let Ne;e[112]!==d?(Ne=d("gitView.conflict.continueLater"),e[112]=d,e[113]=Ne):Ne=e[113],e[114]!==P||e[115]!==Ne?(o=t.jsx(te,{variant:"ghost",size:"sm",onClick:P,className:"flex-1",children:Ne}),e[114]=P,e[115]=Ne,e[116]=o):o=e[116],z=te,M="destructive",W="sm",J=L,se="flex-1",ie=d("gitView.conflict.abortOperation",{operation:ee}),e[34]=x,e[35]=g,e[36]=A,e[37]=L,e[38]=P,e[39]=_,e[40]=R,e[41]=b,e[42]=T,e[43]=a,e[44]=s,e[45]=c,e[46]=d,e[47]=z,e[48]=I,e[49]=q,e[50]=M,e[51]=W,e[52]=J,e[53]=se,e[54]=ie,e[55]=X,e[56]=o,e[57]=h,e[58]=n,e[59]=y,e[60]=O,e[61]=H,e[62]=Y,e[63]=Z,e[64]=ne,e[65]=Q,e[66]=Ce,e[67]=de,e[68]=re}else z=e[47],I=e[48],q=e[49],M=e[50],W=e[51],J=e[52],se=e[53],ie=e[54],X=e[55],o=e[56],h=e[57],n=e[58],y=e[59],O=e[60],H=e[61],Y=e[62],Z=e[63],ne=e[64],Q=e[65],Ce=e[66],de=e[67],re=e[68];let ue;e[117]!==z||e[118]!==M||e[119]!==W||e[120]!==J||e[121]!==se||e[122]!==ie?(ue=t.jsx(z,{variant:M,size:W,onClick:J,className:se,children:ie}),e[117]=z,e[118]=M,e[119]=W,e[120]=J,e[121]=se,e[122]=ie,e[123]=ue):ue=e[123];let ge;e[124]!==X||e[125]!==o||e[126]!==ue?(ge=t.jsxs("div",{className:X,children:[o,ue]}),e[124]=X,e[125]=o,e[126]=ue,e[127]=ge):ge=e[127];let me;e[128]!==h||e[129]!==n||e[130]!==y||e[131]!==ge?(me=t.jsxs("div",{className:h,children:[n,y,ge]}),e[128]=h,e[129]=n,e[130]=y,e[131]=ge,e[132]=me):me=e[132];let oe;e[133]!==O||e[134]!==H||e[135]!==Y||e[136]!==Z||e[137]!==ne||e[138]!==Q||e[139]!==me?(oe=t.jsxs("div",{className:O,children:[H,Y,Z,ne,Q,me]}),e[133]=O,e[134]=H,e[135]=Y,e[136]=Z,e[137]=ne,e[138]=Q,e[139]=me,e[140]=oe):oe=e[140];let fe;e[141]!==I||e[142]!==Ce||e[143]!==oe?(fe=t.jsx(I,{className:Ce,children:oe}),e[141]=I,e[142]=Ce,e[143]=oe,e[144]=fe):fe=e[144];let Se;return e[145]!==q||e[146]!==de||e[147]!==re||e[148]!==fe?(Se=t.jsx(q,{open:de,onOpenChange:re,children:fe}),e[145]=q,e[146]=de,e[147]=re,e[148]=fe,e[149]=Se):Se=e[149],Se};function gs(l){return l.openNewSessionDraft}function xs(l){return l.currentSessionId}function bs(l){return l.setPendingInputText}function ys(l){return l.setPendingSyntheticParts}function ws(l){return t.jsx("li",{className:"typography-micro text-foreground font-mono truncate block",title:l,children:l},l)}const Us=({open:l,onOpenChange:e,targetBranch:s,changedFileCount:a,onCommitAndSwitch:i,onGenerateMessage:f,onRevertAndSwitch:c})=>{const{t:m}=xe(),[r,p]=j.useState(""),[k,g]=j.useState(null),[d,w]=j.useState(!1),A=k!==null;j.useEffect(()=>{l||(p(""),w(!1))},[l]);const D=async()=>{g("generate");try{const u=await f();u&&p(u)}catch(u){Re.error(u instanceof Error?u.message:m("gitView.dirtySwitch.actionFailed"))}finally{g(null)}},S=async()=>{g("commit");try{let u=r.trim();if(!u){if(u=(await f()).trim(),!u){Re.error(m("gitView.toast.enterCommitMessage"));return}p(u)}await i(u,d)}catch(u){Re.error(u instanceof Error?u.message:m("gitView.dirtySwitch.actionFailed"))}finally{g(null)}},b=async()=>{g("revert");try{await c()}catch(u){Re.error(u instanceof Error?u.message:m("gitView.dirtySwitch.actionFailed"))}finally{g(null)}};return t.jsx($e,{open:l,onOpenChange:u=>{A||e(u)},children:t.jsx(Pe,{className:"max-w-md w-[calc(100vw-2rem)]",children:t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsxs(Oe,{children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(U,{name:"alert",className:"size-5 shrink-0 text-[var(--status-warning)]"}),t.jsx(Fe,{children:m("gitView.dirtySwitch.title")})]}),t.jsx(_e,{children:a===1?m("gitView.dirtySwitch.descriptionSingle",{branch:s}):m("gitView.dirtySwitch.descriptionPlural",{branch:s,count:a})})]}),t.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border/60 px-3 py-2 focus-within:border-border",children:[t.jsx("input",{value:r,onChange:u=>p(u.target.value),placeholder:m("gitView.commit.messagePlaceholder"),disabled:A,onKeyDown:u=>{u.key==="Enter"&&!A&&(u.preventDefault(),S())},className:"min-w-0 flex-1 bg-transparent typography-meta text-foreground outline-none placeholder:text-muted-foreground"}),t.jsx("button",{type:"button",onClick:()=>{D()},disabled:A,"aria-label":m("gitView.commit.generate"),title:m("gitView.commit.generate"),className:"shrink-0 text-muted-foreground hover:text-foreground disabled:opacity-50",children:k==="generate"?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(U,{name:"ai-generate-2",className:"size-4 text-primary"})})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(Ft,{checked:d,onChange:w,disabled:A,ariaLabel:m("gitView.dirtySwitch.pushAfterCommit")}),t.jsx("span",{className:"typography-ui-label text-foreground cursor-pointer select-none",onClick:()=>!A&&w(!d),children:m("gitView.dirtySwitch.pushAfterCommit")})]}),t.jsxs("div",{className:"flex items-center justify-between gap-2 pt-1",children:[t.jsxs(te,{variant:"destructive",size:"sm",onClick:()=>{b()},disabled:A,className:"gap-2",children:[k==="revert"?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):null,m("gitView.dirtySwitch.revertAndSwitch")]}),t.jsxs(te,{variant:"default",size:"sm",onClick:()=>{S()},disabled:A,className:"gap-2",children:[k==="commit"?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):null,m("gitView.dirtySwitch.commitAndSwitch")]})]})]})})})},vs=l=>{switch(l){case"contributor-fork":return"gitView.contributor.destination.contributor-fork";case"own-fork":return"gitView.contributor.destination.own-fork";case"bound-repository":return"gitView.contributor.destination.bound-repository";case"other":return"gitView.contributor.destination.other"}},Ws=()=>{const l=ke.c(6),e=j.useRef(null),[s,a]=j.useState(null);let i;l[0]===Symbol.for("react.memo_cache_sentinel")?(i=g=>{const d=e.current;e.current=null,a(null),d?.(g)},l[0]=i):i=l[0];const f=i;let c,m;l[1]===Symbol.for("react.memo_cache_sentinel")?(c=()=>{const g=()=>{const w=e.current;e.current=null,a(null),w?.(null)},d=kt(g);return()=>{d(),g()}},m=[],l[1]=c,l[2]=m):(c=l[1],m=l[2]),j.useEffect(c,m);let r;l[3]===Symbol.for("react.memo_cache_sentinel")?(r=g=>new Promise(d=>{e.current?.(null),e.current=d,a(g)}),l[3]=r):r=l[3];const p=r;let k;return l[4]!==s?(k={candidates:s,choose:p,settle:f},l[4]=s,l[5]=k):k=l[5],k},Js=l=>{const e=ke.c(34),{candidates:s,onSelect:a}=l,{t:i}=xe(),f=!!s;let c;e[0]!==a?(c=x=>{x||a(null)},e[0]=a,e[1]=c):c=e[1];let m;e[2]!==i?(m=i("gitView.publish.title"),e[2]=i,e[3]=m):m=e[3];let r;e[4]!==m?(r=t.jsx(Fe,{children:m}),e[4]=m,e[5]=r):r=e[5];let p;e[6]!==i?(p=i("gitView.contributor.chooseDestination"),e[6]=i,e[7]=p):p=e[7];let k;e[8]!==p?(k=t.jsx(_e,{children:p}),e[8]=p,e[9]=k):k=e[9];let g;e[10]!==r||e[11]!==k?(g=t.jsxs(Oe,{children:[r,k]}),e[10]=r,e[11]=k,e[12]=g):g=e[12];let d;e[13]!==s||e[14]!==a||e[15]!==i?(d=s?.map(x=>t.jsx(te,{size:"sm",variant:"outline",onClick:()=>a(x.remote.name),children:t.jsxs("span",{className:"flex min-w-0 flex-1 items-center justify-between gap-3",children:[t.jsx("span",{className:"truncate",children:x.remote.name}),t.jsx("span",{className:"typography-meta text-muted-foreground",children:i(vs(x.classification))})]})},x.remote.name)),e[13]=s,e[14]=a,e[15]=i,e[16]=d):d=e[16];let w;e[17]!==d?(w=t.jsx("div",{className:"flex flex-col gap-2",children:d}),e[17]=d,e[18]=w):w=e[18];let A;e[19]!==a?(A=()=>a(null),e[19]=a,e[20]=A):A=e[20];let D;e[21]!==i?(D=i("gitView.common.cancel"),e[21]=i,e[22]=D):D=e[22];let S;e[23]!==A||e[24]!==D?(S=t.jsx(Je,{children:t.jsx(te,{size:"sm",variant:"ghost",onClick:A,children:D})}),e[23]=A,e[24]=D,e[25]=S):S=e[25];let b;e[26]!==S||e[27]!==g||e[28]!==w?(b=t.jsxs(Pe,{className:"max-w-sm",children:[g,w,S]}),e[26]=S,e[27]=g,e[28]=w,e[29]=b):b=e[29];let u;return e[30]!==f||e[31]!==b||e[32]!==c?(u=t.jsx($e,{open:f,onOpenChange:c,children:b}),e[30]=f,e[31]=b,e[32]=c,e[33]=u):u=e[33],u},dt="max-w-none",js="flex flex-wrap items-center gap-2",Et=l=>{const e=ke.c(6),{error:s,children:a}=l,i=s?"alert":void 0,f=s&&"text-[var(--status-error)]";let c;e[0]!==f?(c=le(Xe,f),e[0]=f,e[1]=c):c=e[1];let m;return e[2]!==a||e[3]!==i||e[4]!==c?(m=t.jsx("p",{role:i,className:c,children:a}),e[2]=a,e[3]=i,e[4]=c,e[5]=m):m=e[5],m},Ns=l=>{if(!l||l.target.operation!=="checkout-hydration")return[];const e=[...l.target.requirements],s=[...(l.hydration?.submodules??[]).map(a=>({kind:"submodule",item:a})),...(l.hydration?.lfs??[]).map(a=>({kind:"lfs",item:a}))];for(const{kind:a,item:i}of s){const f=i.endpoint;f&&(e.some(c=>c.kind===a&&c.path===i.path&&c.endpoint.fingerprint===f.fingerprint)||e.push({kind:a,path:i.path,endpoint:f}))}return e},Cs=l=>{const e=ke.c(45),{directory:s,className:a}=l,{t:i}=xe(),{git:f,sourceControl:c}=pt(),m=vt(s,c),r=Be(Vs),p=Be(ks),k=jt(),g=Nt(As),[d,w]=j.useState(""),[A,D]=j.useState(!1),S=j.useRef(0);let b;e[0]===Symbol.for("react.memo_cache_sentinel")?(b=()=>(S.current=S.current+1,w(""),D(!1),()=>{S.current=S.current+1}),e[0]=b):b=e[0];let u;e[1]!==m.scope||e[2]!==f||e[3]!==c?(u=[m.scope,f,c],e[1]=m.scope,e[2]=f,e[3]=c,e[4]=u):u=e[4],j.useLayoutEffect(b,u);const x=m.read;let F;e[5]!==k?(F=_=>At(_)&&Vt(_,k),e[5]=k,e[6]=F):F=e[6];let T;e[7]!==r||e[8]!==p||e[9]!==F?(T=Ct(r,p,F),e[7]=r,e[8]=p,e[9]=F,e[10]=T):T=e[10];const B=T;let K,N,$,V,v,L,C;if(e[11]!==a||e[12]!==s||e[13]!==f||e[14]!==r||e[15]!==B||e[16]!==d||e[17]!==x||e[18]!==g||e[19]!==c||e[20]!==i){N=Symbol.for("react.early_return_sentinel");e:{const _=x?ze(x):null,G=_?.providers[0]?.primaryRemote??_?.remotes[0]?.name??"origin",R=(x?.repository.remotes??[]).filter(I=>I.name!==G&&_?.remotes.find(q=>q.name===I.name)?.readiness!=="ready"),z=async(I,q)=>{if(d)return;const M=S.current,W=Me(),J=()=>S.current===M&&W===Me();w(I),D(!1);const se=await as({directory:s,identity:q,remoteName:I},{git:f,sourceControl:c});J()&&(se.status!=="applied"&&D(!0),w(""))};if(!R.length||!f.configureTransportBinding){N=null;break e}K=it,e[28]!==i?($=i("gitView.remotes.title"),e[28]=i,e[29]=$):$=e[29],e[30]!==i?(V=i("gitView.remotes.description"),e[30]=i,e[31]=V):V=e[31],e[32]!==a?(v=le("min-w-0",a),e[32]=a,e[33]=v):v=e[33],L=nt,C=R.map(I=>{const q=St(I.fetch.displayUrl);return t.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate typography-ui-label text-foreground",children:I.name}),t.jsx("p",{className:le(Xe,"truncate"),title:I.fetch.displayUrl,children:I.fetch.displayUrl})]}),t.jsx(Dt,{activeProfile:null,identities:B,onSelect:M=>{z(I.name,M)},isApplying:d===I.name,applicability:M=>It(M,q),triggerClassName:"shrink-0 border border-border",onOpen:()=>{g(c,r.map(Ds))}})]},I.name)})}e[11]=a,e[12]=s,e[13]=f,e[14]=r,e[15]=B,e[16]=d,e[17]=x,e[18]=g,e[19]=c,e[20]=i,e[21]=K,e[22]=N,e[23]=$,e[24]=V,e[25]=v,e[26]=L,e[27]=C}else K=e[21],N=e[22],$=e[23],V=e[24],v=e[25],L=e[26],C=e[27];if(N!==Symbol.for("react.early_return_sentinel"))return N;let P;e[34]!==A||e[35]!==i?(P=A?t.jsx(Et,{error:!0,children:i("settings.gitlab.status.operationFailed")}):null,e[34]=A,e[35]=i,e[36]=P):P=e[36];let E;return e[37]!==K||e[38]!==P||e[39]!==$||e[40]!==V||e[41]!==v||e[42]!==L||e[43]!==C?(E=t.jsxs(K,{title:$,description:V,className:v,contentClassName:L,children:[C,P]}),e[37]=K,e[38]=P,e[39]=$,e[40]=V,e[41]=v,e[42]=L,e[43]=C,e[44]=E):E=e[44],E},Ss=({directory:l,className:e})=>{const{t:s}=xe(),{git:a,sourceControl:i}=pt(),f=vt(l,i),c=es(l,a,i),[m,r]=j.useState(""),[p,k]=j.useState(""),[g,d]=j.useState(null),[w,A]=j.useState(!1),[D,S]=j.useState(!1),[b,u]=j.useState(!1),x=j.useRef(0),F=Be(n=>n.profiles),T=Be(n=>n.globalIdentity),B=Be(n=>n.loadProfiles),K=Be(n=>n.loadGlobalIdentity),N=jt(),$=Nt(n=>n.refreshIdentityAccounts),V=_t(l),v=c.entry?.reads.at(-1)?.operation,L=v?.target.operation==="checkout-hydration"&&v.target.remote.name===m?Ns(v):[],C=L.find(n=>JSON.stringify([n.kind,n.path,n.endpoint.fingerprint])===p),P=f.read,E=P?.repository.remotes.find(n=>n.name===m),_=C&&P?.binding?.auxiliary.find(n=>n.kind===C.kind&&n.endpoint.fingerprint===C.endpoint.fingerprint);j.useLayoutEffect(()=>(x.current+=1,r(""),k(""),d(null),A(!1),S(!1),u(!1),()=>{x.current+=1}),[f.scope,a,i]),j.useLayoutEffect(()=>{},[C?.endpoint.fingerprint]),j.useEffect(()=>{b&&(B(),K())},[B,K,b]);const G=j.useMemo(()=>Ct(F,T,n=>At(n)&&Vt(n,N)),[N,F,T]),R=C?.endpoint.displayUrl??"",z=j.useMemo(()=>R?St(R):null,[R]),I=j.useCallback(n=>z?It(n,z):{applicable:!0},[z]),q=j.useMemo(()=>{const n=G.filter(O=>I(O).applicable);return(V?.userName&&V.userEmail?n.find(O=>O.userName===V.userName&&O.userEmail===V.userEmail):void 0)??n.find(O=>O.account&&z?.host&&Gt(O.account.instance)===z.host)??null},[I,G,z,V]),M=(g?.endpoint===C?.endpoint.fingerprint?G.find(n=>n.id===g?.id):null)??q,W=M?Yt(M):null,J=!!(f.status==="ready"&&P?.binding&&E&&C&&a.configureAuxiliaryBinding&&!w&&M&&I(M).applicable&&(W!=="account"||M?.account)&&(W!=="ssh"||M?.sshCredentialId)),se=!!(f.status==="ready"&&_&&E&&a.configureAuxiliaryBinding&&!w),ie=async()=>{if(!m||c.blocked)return;const n=c.start();if(n){S(!1);try{await Bt({directory:l,git:a,sourceControl:i,parentRemoteName:m,onOperation:n.onOperation})}catch(y){y instanceof Mt||S(!0)}finally{n.finish()}}},X=async n=>{if(n==="configure"&&!J||n==="remove"&&!se||!f.isCurrent()||!P?.binding||!E||!C||!a.configureAuxiliaryBinding)return;const y=x.current,O=Me(),H=()=>x.current===y&&O===Me(),Y={directory:l,expectedRepositoryId:P.repository.repositoryId,expectedRevision:P.revision,expectedConfigRevision:P.repository.configRevision,parentRemote:m,expectedParentFingerprint:E.fetch.fingerprint,kind:C.kind,path:C.path,expectedEndpointFingerprint:C.endpoint.fingerprint},Z=n==="remove"?{...Y,operation:n}:M&&rs(M,Y);if(!Z)return;const ne=Qe.captureMutation(f.scope,P);A(!0),S(!1);try{const Q=await a.configureAuxiliaryBinding(Z);Qe.setMutationResult(ne,Q.binding)||await Qe.reconcile(ne,i)}catch{H()&&S(!0),await Qe.reconcile(ne,i)}finally{ne.release(),H()&&A(!1)}},o=!!(L.length&&v&&"error"in v&&v.error.code==="AUTHENTICATION_REQUIRED"),h=n=>s(n==="submodule"?"gitView.hydration.kind.submodule":"gitView.hydration.kind.lfs");return t.jsxs(ts,{open:b,onOpenChange:u,className:le("min-w-0",e),children:[t.jsxs(ss,{className:"w-auto justify-start gap-1.5",children:[t.jsx(Lt,{children:s("gitView.hydration.title")}),t.jsx(U,{name:b?"arrow-up-s":"arrow-down-s",className:"h-4 w-4 text-muted-foreground"})]}),t.jsx(is,{children:t.jsxs(it,{description:s("gitView.hydration.description"),className:"min-w-0 pt-2",contentClassName:nt,children:[t.jsx(Te,{label:s("gitView.hydration.parentRemote"),controlClassName:dt,children:t.jsxs(He,{value:m,onValueChange:n=>{r(n),k(""),d(null)},disabled:!P?.binding||w||c.blocked,children:[t.jsx(Ke,{size:qe,className:"w-full","aria-label":s("gitView.hydration.parentRemote"),children:t.jsx(Ue,{placeholder:s("settings.sourceControl.transport.remoteLabel")})}),t.jsx(We,{children:P?.binding?.remotes.filter(n=>n.readiness==="ready").map(n=>t.jsx(Ze,{value:n.name,children:n.name},n.name))})]})}),t.jsx(ns,{entry:c.entry,onRefresh:()=>{c.refresh()},onCancel:()=>{c.cancel()}}),o?t.jsx("p",{className:Xe,children:s("gitView.hydration.authorizationNeeded")}):null,L.length?t.jsx(Te,{label:s("gitView.hydration.endpoint"),controlClassName:dt,children:t.jsxs(He,{value:p,onValueChange:k,disabled:w,children:[t.jsx(Ke,{size:qe,className:"w-full","aria-label":s("gitView.hydration.endpoint"),children:t.jsx(Ue,{placeholder:s("gitView.hydration.chooseEndpoint"),children:C?`${C.path} · ${h(C.kind)} · ${C.endpoint.displayUrl}`:void 0})}),t.jsx(We,{children:L.map(n=>{const y=JSON.stringify([n.kind,n.path,n.endpoint.fingerprint]);return t.jsxs(Ze,{value:y,children:[n.path," · ",h(n.kind)," · ",n.endpoint.displayUrl]},y)})})]})}):null,C?t.jsx(t.Fragment,{children:t.jsx(Te,{label:s("gitView.hydration.identity"),controlClassName:dt,children:t.jsx(Dt,{activeProfile:M,identities:G,onSelect:n=>d({endpoint:C.endpoint.fingerprint,id:n.id}),isApplying:w,applicability:I,triggerClassName:"w-full max-w-none border border-border",menuAlign:"start",onOpen:()=>{$(i,F.map(n=>n.account))}})})}):null,v?.hydration?.status==="client-missing"?t.jsx("p",{role:"alert",className:le(Xe,"text-[var(--status-warning)]"),children:s("gitView.hydration.lfsMissing")}):null,D?t.jsx(Et,{error:!0,children:s("settings.gitlab.status.operationFailed")}):null,t.jsxs("div",{className:js,children:[t.jsx(te,{size:"sm",variant:"outline",disabled:!m||c.blocked||w,onClick:()=>{ie()},children:s("gitView.hydration.retry")}),C?t.jsxs(t.Fragment,{children:[t.jsx(te,{size:"sm",disabled:!J,onClick:()=>{X("configure")},children:s("settings.common.actions.saveChanges")}),_?t.jsx(te,{size:"sm",variant:"ghost",disabled:!se,onClick:()=>{X("remove")},children:s("settings.common.actions.delete")}):null]}):null]})]})})]})};function Vs(l){return l.profiles}function ks(l){return l.globalIdentity}function As(l){return l.refreshIdentityAccounts}function Ds(l){return l.account}const ut="border-t border-border/60 pt-4",Xs=l=>{const e=ke.c(12),{open:s,onOpenChange:a,directory:i}=l,{t:f}=xe(),c=Ht(),m=at(Is),r=at(Es);let p;e[0]!==i||e[1]!==c||e[2]!==a||e[3]!==s||e[4]!==r||e[5]!==m||e[6]!==f?(p=s?t.jsxs(Pe,{className:"@container min-w-0 max-h-[85dvh] overflow-y-auto",children:[t.jsxs(Oe,{children:[t.jsx(Fe,{children:f("gitView.context.configure")}),t.jsx(_e,{children:f("gitView.context.description")})]}),t.jsx(Cs,{directory:i,className:ut}),t.jsx(Ss,{directory:i,className:ut}),t.jsxs(Je,{className:ut,children:[t.jsx(te,{size:"sm",variant:"ghost",onClick:()=>{a(!1),m("git"),c?c.openSettings():r(!0)},children:f("gitView.context.settings")}),t.jsx(te,{size:"sm",variant:"outline",onClick:()=>a(!1),children:f("dialog.common.actions.close")})]})]}):null,e[0]=i,e[1]=c,e[2]=a,e[3]=s,e[4]=r,e[5]=m,e[6]=f,e[7]=p):p=e[7];let k;return e[8]!==a||e[9]!==s||e[10]!==p?(k=t.jsx($e,{open:s,onOpenChange:a,children:p}),e[8]=a,e[9]=s,e[10]=p,e[11]=k):k=e[11],k};function Is(l){return l.setSettingsPage}function Es(l){return l.setSettingsDialogOpen}const Zs=({mergeInProgress:l,rebaseInProgress:e,onContinue:s,onAbort:a,onResolveWithAI:i,conflictCount:f=0,isLoading:c=!1})=>{const{t:m}=xe(),[r,p]=j.useState(null),k=l&&l.head,g=e&&(e.headName||e.onto),d=k?"merge":g?"rebase":null;if(!d)return null;const w=async()=>{p("continue");try{await s()}finally{p(null)}},A=async()=>{p("abort");try{await a()}finally{p(null)}},D=r!==null,S=f>0,b=m(d==="merge"?"gitView.operation.merge":"gitView.operation.rebase");let u="";l?u=l.message?m("gitView.operation.mergingMessage",{message:l.message}):m("gitView.operation.mergeInProgressWithHead",{head:l.head}):e&&(u=e.headName?m("gitView.operation.rebasingOnto",{headName:e.headName,onto:e.onto||""}):m("gitView.operation.rebaseInProgress"));const x=S?f===1?m("gitView.operation.inProgressTitleOneConflict",{operation:b,count:f}):m("gitView.operation.inProgressTitleManyConflicts",{operation:b,count:f}):m("gitView.operation.inProgressTitle",{operation:b}),F=m(S?"gitView.operation.resolveConflictsHint":"gitView.operation.readyToContinueHint");return t.jsx("div",{className:"mx-4 mt-3 overflow-hidden rounded-lg border border-[var(--status-warning-border)]",children:t.jsxs("div",{className:"flex flex-col gap-3 p-3",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"typography-label text-[var(--status-warning)]",children:x}),u&&t.jsx("p",{className:"typography-micro break-words text-muted-foreground",children:u})]}),t.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[t.jsx("p",{className:"typography-micro min-w-[12rem] flex-1 text-muted-foreground",children:F}),t.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[t.jsxs(te,{variant:"ghost",size:"sm",onClick:A,disabled:D||c,className:"gap-1.5",children:[r==="abort"?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(U,{name:"close",className:"size-4"}),m("gitView.operation.abort")]}),S?i&&t.jsx(te,{variant:"default",size:"sm",onClick:i,disabled:D||c,children:m("gitView.operation.resolveWithAi")}):t.jsxs(te,{variant:"default",size:"sm",onClick:w,disabled:D||c,className:"gap-1.5",children:[r==="continue"?t.jsx(U,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(U,{name:"check",className:"size-4"}),m("gitView.operation.continue")]})]})]})]})})},Rs=l=>{const e=ze(l.bindingRead).remotes.filter(r=>r.readiness==="ready"&&r.mode!=="anonymous"),s=l.status.current,a=l.status.tracking??"",i=e.find(r=>a.startsWith(`${r.name}/`));if(i){const r=`refs/heads/${a.slice(i.name.length+1)}`;return l.action==="sync"?{push:{remoteName:i.name,ref:r},fetch:{remoteName:i.name,ref:r}}:{push:{remoteName:i.name,ref:r}}}if(l.action!=="push")return null;const f=ze(l.bindingRead),c=e.filter(r=>!r.inherited),m=e.find(r=>r.name===f.providers[0]?.primaryRemote)??(c.length===1?c[0]:null)??(e.length===1?e[0]:null);return m?{push:{remoteName:m.name,ref:`refs/heads/${s}`}}:null};function Ys(l){const e=ke.c(20),{directory:s,branch:a,chooseContributor:i}=l,{git:f,sourceControl:c,runtime:m}=pt(),{t:r}=xe(),p=wt(),[k,g]=j.useState(null),d=j.useRef(null),w=j.useRef(null),A=j.useRef(0);let D;e[0]===Symbol.for("react.memo_cache_sentinel")?(D=N=>{const $=d.current;d.current=null,g(null),$?.(N)},e[0]=D):D=e[0];const S=D;let b;e[1]===Symbol.for("react.memo_cache_sentinel")?(b=()=>{const N=()=>{A.current=A.current+1,w.current=null;const V=d.current;d.current=null,g(null),V?.(null)},$=kt(N);return()=>{$(),N()}},e[1]=b):b=e[1];let u;e[2]!==a||e[3]!==s?(u=[s,a],e[2]=a,e[3]=s,e[4]=u):u=e[4],j.useEffect(b,u);let x;e[5]!==i||e[6]!==p||e[7]!==s||e[8]!==f||e[9]!==m||e[10]!==c||e[11]!==r?(x=async(N,$)=>{const V=$===void 0?{}:$;if(!s)throw new Le("binding-required");const v=Me(),L=A.current,C=()=>{if(Me()!==v)throw new Le("stale-runtime");if(A.current!==L)throw new Le("publish-selection-stale")},P=m.isVSCode?{kind:"ordinary"}:await f.listContributorDestinations(s);if(C(),P.kind==="contributor"){const G=await f.getGitStatus(s);if(C(),!G.current||G.current==="HEAD")throw new Le("branch-required");if(V.beforeCommit&&!await p.confirm({title:r("gitView.publish.contributorCommitFirstTitle"),message:r("gitView.publish.contributorCommitFirst"),action:r("gitView.publish.contributorCommitFirstAction")}))throw new Le("publish-cancelled");return async()=>{C();const R=await f.getGitStatus(s);if(C(),R.current!==G.current)throw new Le("publish-selection-stale");if(N==="sync"){const z=await c.repositoryBinding(s);C();const I=ze(z).remotes.find(q=>R.tracking?.startsWith(`${q.name}/`));return Kt({directory:s,remoteName:I?.name??"",status:R,git:f,sourceControl:c,choose:i,onOperation:V.onOperation})}else return await qt({directory:s,branch:R.current,remoteName:"",git:f,sourceControl:c,choose:i,onOperation:V.onOperation}),null}}let E;const _=w.current;return!V.forceChoose&&_&&(N==="push"||_.targets.fetch)?(w.current=null,E={...await Ut({selection:_,git:f,sourceControl:c,allowNewCommit:!0}),action:N,targets:_.targets}):E=await Wt({action:N,directory:s,git:f,sourceControl:c,choose:G=>{C();const R=V.forceChoose?null:Rs(G);return R?Promise.resolve(R):new Promise(z=>{d.current?.(null),d.current=z,g(G)})}}),C(),w.current=E,async()=>{C(),w.current=null;const G=await Jt({selection:E,git:f,sourceControl:c,allowNewCommit:V.beforeCommit,assertCurrent:C,onOperation:V.onOperation});C();const R=await Xt({action:N,directory:s,git:f,sourceControl:c}).catch(Ts);C();const z=ze(E.bindingRead),I=R?ze(R.bindingRead):null;return R&&I&&R.status.current===E.status.current&&I.repositoryId===z.repositoryId&&I.revision===z.revision&&I.configRevision===z.configRevision&&JSON.stringify(I.remotes)===JSON.stringify(z.remotes)&&(R.status.tracking===E.status.tracking||!E.status.tracking&&R.status.tracking===`${E.targets.push.remoteName}/${E.targets.push.ref.slice(11)}`)&&(w.current={...R,targets:E.targets}),G}},e[5]=i,e[6]=p,e[7]=s,e[8]=f,e[9]=m,e[10]=c,e[11]=r,e[12]=x):x=e[12];const F=x;let T;e[13]!==r?(T=N=>N.code==="binding-required"?r("gitView.publish.noGrants"):N.code==="binding-needs-attention"?r("gitView.publish.needsAttention"):N.code==="binding-remote-missing"?r("gitView.publish.remoteNotGranted"):N.code==="tracking-required"?r("gitView.publish.trackingRequired"):N.code==="tracking-remote-mismatch"?r("gitView.publish.trackingRemoteMismatch"):N.code==="anonymous-read-only"?r("settings.sourceControl.transport.anonymous"):N.code==="branch-required"?r("gitView.publish.detached"):N.code==="publish-selection-stale"?r("gitView.publish.stale"):N.code==="publish-cancelled"?r("gitView.publish.cancelled"):null,e[13]=r,e[14]=T):T=e[14];const B=T;let K;return e[15]!==p.dialog||e[16]!==k||e[17]!==B||e[18]!==F?(K={context:k,settle:S,prepare:F,errorMessage:B,confirmDialog:p.dialog},e[15]=p.dialog,e[16]=k,e[17]=B,e[18]=F,e[19]=K):K=e[19],K}function Ts(){return null}const st="max-w-none";function Qs(l){const e=ke.c(111),{context:s,onSelect:a}=l,{t:i}=xe(),f=j.useId(),c=ze(s.bindingRead).remotes;let m;e[0]!==s.status.tracking?(m=ae=>s.status.tracking?.startsWith(`${ae.name}/`),e[0]=s.status.tracking,e[1]=m):m=e[1];const r=c.find(m),[p,k]=j.useState(r?.name??(c.length===1?c[0].name:"")),[g,d]=j.useState(s.status.current),[w,A]=j.useState(r?.name??""),[D,S]=j.useState(r?s.status.tracking?.slice(r.name.length+1)??"":""),b=s.action==="sync";let u;e[2]!==s.branches.all?(u=ae=>s.branches.all.filter(Ge=>Ge.startsWith(`remotes/${ae}/`)).map(Ge=>Ge.slice(`remotes/${ae}/`.length)).filter(Os),e[2]=s.branches.all,e[3]=u):u=e[3];const x=u,F=x(w),T=x(p),B=!!(p&&g.trim()&&g.trim()!=="HEAD"&&c.find(ae=>ae.name===p)?.mode!=="anonymous"&&(!b||w&&F.includes(D))),K=c.find(ae=>ae.name===w)?.fetch.displayUrl,N=c.find(ae=>ae.name===p)?.push.displayUrl,$=$e,V=!0;let v;e[4]!==a?(v=ae=>{ae||a(null)},e[4]=a,e[5]=v):v=e[5];const L=Pe,C="@container max-w-lg max-h-[85dvh] overflow-y-auto",P=b?"gitView.publish.syncTitle":"gitView.publish.title";let E;e[6]!==i||e[7]!==P?(E=i(P),e[6]=i,e[7]=P,e[8]=E):E=e[8];let _;e[9]!==E?(_=t.jsx(Fe,{children:E}),e[9]=E,e[10]=_):_=e[10];let G;e[11]!==s.status.current||e[12]!==i?(G=i("gitView.publish.description",{branch:s.status.current}),e[11]=s.status.current,e[12]=i,e[13]=G):G=e[13];let R;e[14]!==G?(R=t.jsx(_e,{children:G}),e[14]=G,e[15]=R):R=e[15];let z;e[16]!==R||e[17]!==_?(z=t.jsxs(Oe,{children:[_,R]}),e[16]=R,e[17]=_,e[18]=z):z=e[18];const I="flex flex-col gap-4";let q;e[19]!==B||e[20]!==D||e[21]!==w||e[22]!==b||e[23]!==a||e[24]!==g||e[25]!==p?(q=ae=>{if(ae.preventDefault(),!B)return;const Ge={push:{remoteName:p,ref:`refs/heads/${g.trim()}`}};b&&(Ge.fetch={remoteName:w,ref:`refs/heads/${D}`}),a(Ge)},e[19]=B,e[20]=D,e[21]=w,e[22]=b,e[23]=a,e[24]=g,e[25]=p,e[26]=q):q=e[26];const M=b?t.jsxs(it,{title:i("gitView.publish.fetchSource"),contentClassName:nt,children:[t.jsx(Te,{label:i("settings.sourceControl.transport.remoteLabel"),description:K,descriptionPlacement:"after",controlClassName:st,children:t.jsxs(He,{value:w,onValueChange:ae=>{A(ae),S("")},children:[t.jsx(Ke,{size:qe,className:"w-full","aria-label":i("gitView.publish.fetchSource"),children:t.jsx(Ue,{placeholder:i("gitView.publish.selectRemote")})}),t.jsx(We,{children:c.map(Ps)})]})}),t.jsx(Te,{label:i("gitView.publish.sourceBranch"),description:w&&!F.length?i("gitView.publish.fetchFirst"):void 0,descriptionPlacement:"after",controlClassName:st,children:t.jsxs(He,{value:D,onValueChange:S,disabled:!F.length,children:[t.jsx(Ke,{size:qe,className:"w-full","aria-label":i("gitView.publish.sourceBranch"),children:t.jsx(Ue,{placeholder:i("gitView.publish.sourceBranch")})}),t.jsx(We,{children:F.map($s)})]})})]}):null,W=it;let J;e[27]!==i?(J=i("gitView.publish.pushDestination"),e[27]=i,e[28]=J):J=e[28];const se=b?"border-t border-border/60 pt-4":void 0,ie=nt;let X;e[29]!==i?(X=i("settings.sourceControl.transport.remoteLabel"),e[29]=i,e[30]=X):X=e[30];let o;e[31]!==i?(o=i("gitView.publish.pushDestination"),e[31]=i,e[32]=o):o=e[32];let h;e[33]!==i?(h=i("gitView.publish.selectRemote"),e[33]=i,e[34]=h):h=e[34];let n;e[35]!==h?(n=t.jsx(Ue,{placeholder:h}),e[35]=h,e[36]=n):n=e[36];let y;e[37]!==o||e[38]!==n?(y=t.jsx(Ke,{size:qe,className:"w-full","aria-label":o,children:n}),e[37]=o,e[38]=n,e[39]=y):y=e[39];let O;e[40]!==i?(O=ae=>t.jsxs(Ze,{value:ae.name,disabled:ae.mode==="anonymous",children:[ae.name,ae.mode==="anonymous"?` · ${i("settings.sourceControl.transport.anonymous")}`:""]},ae.name),e[40]=i,e[41]=O):O=e[41];const H=c.map(O);let Y;e[42]!==H?(Y=t.jsx(We,{children:H}),e[42]=H,e[43]=Y):Y=e[43];let Z;e[44]!==p||e[45]!==y||e[46]!==Y?(Z=t.jsxs(He,{value:p,onValueChange:k,children:[y,Y]}),e[44]=p,e[45]=y,e[46]=Y,e[47]=Z):Z=e[47];let ne;e[48]!==N||e[49]!==X||e[50]!==Z?(ne=t.jsx(Te,{label:X,description:N,descriptionPlacement:"after",controlClassName:st,children:Z}),e[48]=N,e[49]=X,e[50]=Z,e[51]=ne):ne=e[51];const Q=Te,Ce=`${f}-branch`;let de;e[52]!==i?(de=i("gitView.publish.destinationBranch"),e[52]=i,e[53]=de):de=e[53];let re;e[54]!==Ce||e[55]!==de?(re=t.jsx("label",{htmlFor:Ce,children:de}),e[54]=Ce,e[55]=de,e[56]=re):re=e[56];const ue=st,ge=`${f}-branch`,me=`${f}-branches`;let oe;e[57]===Symbol.for("react.memo_cache_sentinel")?(oe=ae=>d(ae.target.value),e[57]=oe):oe=e[57];let fe;e[58]!==g||e[59]!==ge||e[60]!==me?(fe=t.jsx(Zt,{id:ge,list:me,className:"h-8 rounded-md",value:g,onChange:oe}),e[58]=g,e[59]=ge,e[60]=me,e[61]=fe):fe=e[61];const Se=`${f}-branches`,ee=T.map(zs);let ce;e[62]!==Se||e[63]!==ee?(ce=t.jsx("datalist",{id:Se,children:ee}),e[62]=Se,e[63]=ee,e[64]=ce):ce=e[64];let be;e[65]!==Q||e[66]!==re||e[67]!==ue||e[68]!==fe||e[69]!==ce?(be=t.jsxs(Q,{label:re,controlClassName:ue,children:[fe,ce]}),e[65]=Q,e[66]=re,e[67]=ue,e[68]=fe,e[69]=ce,e[70]=be):be=e[70];let Ve;e[71]!==W||e[72]!==J||e[73]!==se||e[74]!==ie||e[75]!==ne||e[76]!==be?(Ve=t.jsxs(W,{title:J,className:se,contentClassName:ie,children:[ne,be]}),e[71]=W,e[72]=J,e[73]=se,e[74]=ie,e[75]=ne,e[76]=be,e[77]=Ve):Ve=e[77];let he;e[78]!==c.length||e[79]!==i?(he=c.length?null:t.jsx("p",{role:"status",className:le(Xe,"text-[var(--status-warning)]"),children:i("gitView.publish.noGrants")}),e[78]=c.length,e[79]=i,e[80]=he):he=e[80];let pe;e[81]!==a?(pe=()=>a(null),e[81]=a,e[82]=pe):pe=e[82];let ye;e[83]!==i?(ye=i("gitView.common.cancel"),e[83]=i,e[84]=ye):ye=e[84];let Ae;e[85]!==pe||e[86]!==ye?(Ae=t.jsx(te,{type:"button",size:"sm",variant:"ghost",onClick:pe,children:ye}),e[85]=pe,e[86]=ye,e[87]=Ae):Ae=e[87];const De=!B,Ie=b?"gitView.sync.syncChanges":"gitView.publish.title";let we;e[88]!==i||e[89]!==Ie?(we=i(Ie),e[88]=i,e[89]=Ie,e[90]=we):we=e[90];let Ee;e[91]!==De||e[92]!==we?(Ee=t.jsx(te,{type:"submit",size:"sm",disabled:De,children:we}),e[91]=De,e[92]=we,e[93]=Ee):Ee=e[93];let ve;e[94]!==Ae||e[95]!==Ee?(ve=t.jsxs(Je,{children:[Ae,Ee]}),e[94]=Ae,e[95]=Ee,e[96]=ve):ve=e[96];let je;e[97]!==q||e[98]!==M||e[99]!==Ve||e[100]!==he||e[101]!==ve?(je=t.jsxs("form",{className:I,onSubmit:q,children:[M,Ve,he,ve]}),e[97]=q,e[98]=M,e[99]=Ve,e[100]=he,e[101]=ve,e[102]=je):je=e[102];let Ne;e[103]!==L||e[104]!==z||e[105]!==je?(Ne=t.jsxs(L,{className:C,children:[z,je]}),e[103]=L,e[104]=z,e[105]=je,e[106]=Ne):Ne=e[106];let Ye;return e[107]!==$||e[108]!==v||e[109]!==Ne?(Ye=t.jsx($,{open:V,onOpenChange:v,children:Ne}),e[107]=$,e[108]=v,e[109]=Ne,e[110]=Ye):Ye=e[110],Ye}function zs(l){return t.jsx("option",{value:l},l)}function $s(l){return t.jsx(Ze,{value:l,children:l},l)}function Ps(l){return t.jsx(Ze,{value:l.name,children:l.name},l.name)}function Os(l){return l!=="HEAD"}export{Js as C,Us as D,Zs as I,Qs as P,Xs as R,Ys as a,Hs as b,Ks as c,qs as d,Ws as u};