@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,13 +0,0 @@
1
- import{f as fe,r as E,j as o}from"./vendor-react-BUCujlKS.js";import{kE as Te,f as oe,w as pe,h as ge,aV as xe,al as Me,dS as ye,I as Y,B as ne,e1 as Ce,e3 as ve,e4 as je,e2 as we,e0 as Se,Z as Ne,aU as be,aW as ke,aT as Pe,cT as qe,L as de,kF as Ke,N as He,kG as Ve,kH as me,cL as We,cM as ze,dk as Ge,aG as Je,cP as Qe,cO as Ue,cN as ie,kI as Xe,cQ as Ye,aS as ce,kJ as Ze,cY as et,kK as tt,kL as st}from"./useAppFontEffects-DCqCVGlT.js";import{u as nt,aa as rt,a as Z}from"./index-vQ1Pg1cr.js";import{q as Oe}from"./runtimeEndpointReset-DqLJC6L1.js";import{c as Be,p as ot}from"./vendor-zustand-BAGL70zf.js";import{p as it}from"./parseDiffFromFile-Cy0PNxun.js";import{j as Ae}from"./computeVirtualFileMetrics-CmPe29DM.js";function at(s,e=10){const n=[];let t;for(const u of s.split(`
2
- `)){const h=u.match(Te);if(h!=null){t!=null&&(t.hunkLines.length>0&&(ae(t,e,"trailing"),he(t,n)),t=void 0);const r=parseInt(h[3]),c=parseInt(h[1]),d=parseInt(h[4]??"1"),l=parseInt(h[2]??"1");isNaN(r)||isNaN(c)||isNaN(d)||isNaN(l)?n.push(u):t={additionStart:r,deletionStart:c,additionCount:0,deletionCount:0,hunkLines:[],contextLines:[]};continue}if(t==null){n.push(u);continue}if(u.startsWith(" "))t.contextLines.push(u);else if(u!==""){if(t.hunkLines.length>0&&t.contextLines.length>e*2){const r=t.contextLines.length-e*2,c=t.contextLines.slice(-e);ae(t,e,"trailing");const{additionCount:d,deletionCount:l}=t;he(t,n),t={additionStart:t.additionStart+d+r,deletionStart:t.deletionStart+l+r,deletionCount:0,additionCount:0,contextLines:c,hunkLines:[]}}ae(t,e,t.hunkLines.length===0?"leading":"before-change"),t.hunkLines.push(u),u.startsWith("+")?t.additionCount+=1:u.startsWith("-")&&(t.deletionCount+=1)}}t!=null&&t.hunkLines.length>0&&(ae(t,e,"trailing"),he(t,n));const i=n.join(`
3
- `);return s.endsWith(`
4
- `)?`${i}
5
- `:i}function ae(s,e,n){if(n==="leading"&&s.contextLines.length>e){const t=s.contextLines.length-e;s.contextLines.splice(0,t),s.additionStart+=t,s.deletionStart+=t}return n==="trailing"&&s.contextLines.length>e&&(s.contextLines.length=e),s.contextLines.length>0&&(Ae(s.hunkLines,s.contextLines),s.additionCount+=s.contextLines.length,s.deletionCount+=s.contextLines.length,s.contextLines.length=0),s}function he(s,e){e.push(`@@ -${Re(s.deletionStart,s.deletionCount)} +${Re(s.additionStart,s.additionCount)} @@`),Ae(e,s.hunkLines)}function Re(s,e){return e===1?`${s}`:`${s},${e}`}function Bt(s){const e=fe.c(74),{branches:n,currentBranch:t,base:i,onSelect:u,mobile:h}=s,r=h===void 0?!1:h,{t:c}=oe(),d=pe(),l=r&&!d.enabled,[f,v]=E.useState(!1),[k,w]=E.useState("");let P;e[0]!==i||e[1]!==c?(P=i?Oe(i):c("gitView.pr.field.baseBranch"),e[0]=i,e[1]=c,e[2]=P):P=e[2];const x=P;let S;e[3]===Symbol.for("react.memo_cache_sentinel")?(S=N=>{v(N),N||w("")},e[3]=S):S=e[3];const L=S;let m;e[4]!==r?(m=ge(xe({size:r?"default":"sm"}),"min-w-0 max-w-48"),e[4]=r,e[5]=m):m=e[5];const y=r||void 0;let b;e[6]!==c?(b=c("gitView.pr.field.baseBranch"),e[6]=c,e[7]=b):b=e[7];const B=l?"dialog":void 0,C=l?f:void 0,z=!t;let R;e[8]!==l?(R=l?()=>L(!0):void 0,e[8]=l,e[9]=R):R=e[9];let F;e[10]===Symbol.for("react.memo_cache_sentinel")?(F=o.jsx(Y,{name:"git-branch",className:"size-3.5"}),e[10]=F):F=e[10];let q;e[11]!==x?(q=o.jsx("span",{className:"truncate",children:x}),e[11]=x,e[12]=q):q=e[12];let A;e[13]===Symbol.for("react.memo_cache_sentinel")?(A=o.jsx(Y,{name:"arrow-down-s",className:"size-3.5"}),e[13]=A):A=e[13];let D;e[14]!==x||e[15]!==R||e[16]!==q||e[17]!==m||e[18]!==y||e[19]!==b||e[20]!==B||e[21]!==C||e[22]!==z?(D=o.jsxs(ne,{variant:"outline",className:m,"data-mobile-comparison-trigger":y,"aria-label":b,"aria-haspopup":B,"aria-expanded":C,title:x,disabled:z,onClick:R,children:[F,q,A]}),e[14]=x,e[15]=R,e[16]=q,e[17]=m,e[18]=y,e[19]=b,e[20]=B,e[21]=C,e[22]=z,e[23]=D):D=e[23];const _=D,G=r?"[&_[data-slot=command-input-wrapper]]:h-11":void 0,$=!l,U=r?"h-11":void 0;let J;e[24]!==c?(J=c("gitView.branch.searchPlaceholder"),e[24]=c,e[25]=J):J=e[25];let W;e[26]!==c?(W=c("gitView.branch.searchPlaceholder"),e[26]=c,e[27]=W):W=e[27];let M;e[28]!==k||e[29]!==$||e[30]!==U||e[31]!==J||e[32]!==W?(M=o.jsx(Ce,{autoFocus:$,className:U,value:k,onValueChange:w,placeholder:J,"aria-label":W}),e[28]=k,e[29]=$,e[30]=U,e[31]=J,e[32]=W,e[33]=M):M=e[33];const K=r?"max-h-[min(45dvh,24rem)]":void 0;let I;e[34]!==c?(I=c("gitView.branch.empty"),e[34]=c,e[35]=I):I=e[35];let H;e[36]!==I?(H=o.jsx(ve,{children:I}),e[36]=I,e[37]=H):H=e[37];let T;e[38]!==i||e[39]!==n||e[40]!==t||e[41]!==r||e[42]!==u||e[43]!==f||e[44]!==k?(T=f&&Me([...new Set(n)].filter(N=>N!==t).sort().map(ct),k,lt).map(N=>o.jsxs(ye,{value:N.ref,className:r?"min-h-11":void 0,onSelect:()=>{u(N.ref),L(!1)},children:[o.jsx("span",{className:"min-w-0 flex-1 truncate",title:N.ref,children:N.label}),(N.ref===i||N.label===i)&&o.jsx(Y,{name:"check",className:"size-3.5"})]},N.ref)),e[38]=i,e[39]=n,e[40]=t,e[41]=r,e[42]=u,e[43]=f,e[44]=k,e[45]=T):T=e[45];let j;e[46]!==T?(j=o.jsx(je,{children:T}),e[46]=T,e[47]=j):j=e[47];let a;e[48]!==K||e[49]!==H||e[50]!==j?(a=o.jsxs(we,{className:K,children:[H,j]}),e[48]=K,e[49]=H,e[50]=j,e[51]=a):a=e[51];let O;e[52]!==G||e[53]!==M||e[54]!==a?(O=o.jsxs(Se,{shouldFilter:!1,className:G,onKeyDown:ut,children:[M,a]}),e[52]=G,e[53]=M,e[54]=a,e[55]=O):O=e[55];const p=O;if(l){let N;e[56]!==c?(N=c("gitView.pr.field.baseBranch"),e[56]=c,e[57]=N):N=e[57];let X;e[58]===Symbol.for("react.memo_cache_sentinel")?(X=()=>L(!1),e[58]=X):X=e[58];let ee;e[59]!==f||e[60]!==p||e[61]!==N?(ee=o.jsx(Ne,{open:f,title:N,onClose:X,children:p}),e[59]=f,e[60]=p,e[61]=N,e[62]=ee):ee=e[62];let re;return e[63]!==ee||e[64]!==_?(re=o.jsxs(o.Fragment,{children:[_,ee]}),e[63]=ee,e[64]=_,e[65]=re):re=e[65],re}let g;e[66]!==_?(g=o.jsx(be,{asChild:!0,children:_}),e[66]=_,e[67]=g):g=e[67];let V;e[68]!==p?(V=o.jsx(ke,{align:"start",className:"w-72 max-w-[calc(100vw-2rem)] p-0",children:p}),e[68]=p,e[69]=V):V=e[69];let Q;return e[70]!==f||e[71]!==g||e[72]!==V?(Q=o.jsxs(Pe,{open:f,onOpenChange:L,children:[g,V]}),e[70]=f,e[71]=g,e[72]=V,e[73]=Q):Q=e[73],Q}function lt(s){return[s.label]}function ct(s){return{ref:s.startsWith("remotes/")?`refs/${s}`:`refs/heads/${s}`,label:Oe(s)}}function ut(s){s.key!=="Escape"&&s.stopPropagation()}function At(s){const e=fe.c(77),{commits:n,selectedHash:t,loading:i,error:u,onSelect:h,onRefresh:r,mobile:c}=s,d=c===void 0?!1:c,{t:l}=oe(),f=pe(),v=d&&!f.enabled,k=nt(mt),[w,P]=E.useState(!1),[x,S]=E.useState("");let L;e[0]!==i||e[1]!==r?(L=g=>{P(g),g?i||r():S("")},e[0]=i,e[1]=r,e[2]=L):L=e[2];const m=L;let y;e[3]!==d?(y=ge(xe({size:d?"default":"sm"}),"min-w-0 max-w-48"),e[3]=d,e[4]=y):y=e[4];const b=d||void 0;let B;e[5]!==m||e[6]!==v?(B=v?()=>m(!0):void 0,e[5]=m,e[6]=v,e[7]=B):B=e[7];const C=v?"dialog":void 0,z=v?w:void 0;let R;e[8]!==l?(R=l("commitComparison.select"),e[8]=l,e[9]=R):R=e[9];let F;e[10]!==t||e[11]!==l?(F=t??l("commitComparison.select"),e[10]=t,e[11]=l,e[12]=F):F=e[12];let q;e[13]===Symbol.for("react.memo_cache_sentinel")?(q=o.jsx(Y,{name:"git-commit",className:"size-3.5"}),e[13]=q):q=e[13];let A;e[14]!==t||e[15]!==l?(A=t?.slice(0,8)??l("commitComparison.select"),e[14]=t,e[15]=l,e[16]=A):A=e[16];let D;e[17]!==A?(D=o.jsx("span",{className:"truncate",children:A}),e[17]=A,e[18]=D):D=e[18];let _;e[19]===Symbol.for("react.memo_cache_sentinel")?(_=o.jsx(Y,{name:"arrow-down-s",className:"size-3.5"}),e[19]=_):_=e[19];let G;e[20]!==D||e[21]!==y||e[22]!==b||e[23]!==B||e[24]!==C||e[25]!==z||e[26]!==R||e[27]!==F?(G=o.jsxs(ne,{variant:"outline",className:y,"data-mobile-comparison-trigger":b,onClick:B,"aria-haspopup":C,"aria-expanded":z,"aria-label":R,title:F,children:[q,D,_]}),e[20]=D,e[21]=y,e[22]=b,e[23]=B,e[24]=C,e[25]=z,e[26]=R,e[27]=F,e[28]=G):G=e[28];const $=G,U=d?"[&_[data-slot=command-input-wrapper]]:h-11":void 0,J=!v,W=d?"h-11":void 0;let M;e[29]!==l?(M=l("commitComparison.search"),e[29]=l,e[30]=M):M=e[30];let K;e[31]!==l?(K=l("commitComparison.search"),e[31]=l,e[32]=K):K=e[32];let I;e[33]!==x||e[34]!==J||e[35]!==W||e[36]!==M||e[37]!==K?(I=o.jsx(Ce,{autoFocus:J,className:W,value:x,onValueChange:S,placeholder:M,"aria-label":K}),e[33]=x,e[34]=J,e[35]=W,e[36]=M,e[37]=K,e[38]=I):I=e[38];let H;e[39]!==m||e[40]!==n||e[41]!==u||e[42]!==i||e[43]!==d||e[44]!==r||e[45]!==h||e[46]!==w||e[47]!==x||e[48]!==t||e[49]!==l||e[50]!==k?(H=i?o.jsxs("div",{className:"flex items-center justify-center gap-2 p-4 typography-meta text-muted-foreground",children:[o.jsx(Y,{name:"loader-4",className:"size-4 animate-spin"}),l("diffView.state.loadingChanges")]}):u?o.jsxs("div",{className:"flex flex-col items-center gap-2 p-4 typography-meta text-muted-foreground",children:[o.jsx("span",{children:l("commitComparison.loadError")}),o.jsx("span",{className:"max-w-full break-words",children:u}),o.jsx(ne,{variant:"outline",size:d?"lg":"sm",onClick:r,children:l("diffView.actions.retry")})]}):o.jsxs(we,{className:d?"max-h-[min(45dvh,24rem)]":void 0,children:[o.jsx(ve,{children:l("commitComparison.noCommits")}),o.jsx(je,{children:w&&Me(n,x,dt).map(g=>o.jsxs(ye,{value:g.hash,className:d?"min-h-11":void 0,onSelect:()=>{h(g),m(!1)},children:[o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsx("div",{className:"truncate typography-ui-label font-semibold",title:g.message,children:g.message}),o.jsxs("div",{className:"flex min-w-0 gap-1 typography-meta text-muted-foreground",children:[o.jsxs("span",{className:"min-w-0 truncate",children:[g.author_name," · ",Number.isNaN(new Date(g.date).getTime())?g.date:qe(new Date(g.date),k,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})]}),o.jsxs("span",{className:"shrink-0",children:["· ",g.hash.slice(0,8)]})]})]}),g.hash===t&&o.jsx(Y,{name:"check",className:"size-3.5"})]},g.hash))})]}),e[39]=m,e[40]=n,e[41]=u,e[42]=i,e[43]=d,e[44]=r,e[45]=h,e[46]=w,e[47]=x,e[48]=t,e[49]=l,e[50]=k,e[51]=H):H=e[51];let T;e[52]!==U||e[53]!==I||e[54]!==H?(T=o.jsxs(Se,{shouldFilter:!1,className:U,onKeyDown:ft,children:[I,H]}),e[52]=U,e[53]=I,e[54]=H,e[55]=T):T=e[55];const j=T;if(v){let g;e[56]!==l?(g=l("commitComparison.select"),e[56]=l,e[57]=g):g=e[57];let V;e[58]!==m?(V=()=>m(!1),e[58]=m,e[59]=V):V=e[59];let Q;e[60]!==w||e[61]!==j||e[62]!==g||e[63]!==V?(Q=o.jsx(Ne,{open:w,title:g,onClose:V,children:j}),e[60]=w,e[61]=j,e[62]=g,e[63]=V,e[64]=Q):Q=e[64];let N;return e[65]!==Q||e[66]!==$?(N=o.jsxs(o.Fragment,{children:[$,Q]}),e[65]=Q,e[66]=$,e[67]=N):N=e[67],N}let a;e[68]!==$?(a=o.jsx(be,{asChild:!0,children:$}),e[68]=$,e[69]=a):a=e[69];let O;e[70]!==j?(O=o.jsx(ke,{align:"start",className:"w-[32rem] max-w-[calc(100vw-2rem)] p-0",children:j}),e[70]=j,e[71]=O):O=e[71];let p;return e[72]!==m||e[73]!==w||e[74]!==a||e[75]!==O?(p=o.jsxs(Pe,{open:w,onOpenChange:m,children:[a,O]}),e[72]=m,e[73]=w,e[74]=a,e[75]=O,e[76]=p):p=e[76],p}function dt(s){return[s.message,s.author_name,s.hash]}function ft(s){s.key!=="Escape"&&s.stopPropagation()}function mt(s){return s.timeFormatPreference}const ht="openchamber.git-base-branch",pt=100,ue=(s,e)=>JSON.stringify([Z(),s,e]),gt=Be()(ot((s,e)=>({overrides:{},getOverride:(n,t)=>!n||!t?null:e().overrides[ue(n,t)]??null,setOverride:(n,t,i)=>{!n||!t||!i||s(u=>{const h=ue(n,t),r=Object.entries({...u.overrides,[h]:i});for(;r.length>pt;)r.shift();return{overrides:Object.fromEntries(r)}})},clearOverride:(n,t)=>{!n||!t||s(i=>{const u=ue(n,t);if(!(u in i.overrides))return i;const h={...i.overrides};return delete h[u],{overrides:h}})}}),{name:ht,storage:rt(),partialize:s=>({overrides:s.overrides})}));function Dt(s,e,n){const t=fe.c(32),i=de(xt);let u;t[0]!==s||t[1]!==n?(u=b=>n&&s?b.directories.get(s)?.lastStatusFetch??0:0,t[0]=s,t[1]=n,t[2]=u):u=t[2];const h=de(u);let r;t[3]!==e||t[4]!==s||t[5]!==i?(r=JSON.stringify([i,s,e]),t[3]=e,t[4]=s,t[5]=i,t[6]=r):r=t[6];const c=r;let d;t[7]!==e||t[8]!==s?(d=s&&e?ue(s,e):null,t[7]=e,t[8]=s,t[9]=d):d=t[9];const l=d;let f;t[10]!==l?(f=b=>l?b.overrides[l]??null:null,t[10]=l,t[11]=f):f=t[11];const v=gt(f),[k,w]=E.useState(null);let P;t[12]!==e||t[13]!==s||t[14]!==n||t[15]!==c||t[16]!==v?(P=()=>{if(!n||!s||!e||v)return;let b=!1;const B=Z();return Ke(s,e).then(C=>{const{base:z}=C;b||Z()!==B||w(R=>R?.key===c&&R.base===z?R:{key:c,base:z})}).catch(()=>{b||Z()!==B||w(C=>C?.key===c?C:{key:c,base:null})}),()=>{b=!0}},t[12]=e,t[13]=s,t[14]=n,t[15]=c,t[16]=v,t[17]=P):P=t[17];let x;t[18]!==e||t[19]!==s||t[20]!==n||t[21]!==c||t[22]!==v||t[23]!==h?(x=[e,s,n,c,v,h],t[18]=e,t[19]=s,t[20]=n,t[21]=c,t[22]=v,t[23]=h,t[24]=x):x=t[24],E.useEffect(P,x);const S=v??(k?.key===c?k.base:null),L=!!v||k?.key===c;let m;t[25]!==i||t[26]!==h?(m=JSON.stringify([i,h]),t[25]=i,t[26]=h,t[27]=m):m=t[27];let y;return t[28]!==S||t[29]!==L||t[30]!==m?(y={base:S,resolved:L,revision:m},t[28]=S,t[29]=L,t[30]=m,t[31]=y):y=t[31],y}function xt(s){return s.runtimeKey}const yt=[];function Tt(s,e,n,t){const{git:i}=He(),{t:u}=oe(),h=de(x=>x.runtimeKey),r=Ve(s??"",e,h),c=me(x=>x.selections.get(r)??null),d=me(x=>x.select),[l,f]=E.useState(null),v=E.useRef(0),k=E.useRef(t);k.current=t;const w=E.useCallback(async()=>{if(!s||!n)return;const x=++v.current,S=Z();f({key:r,status:"loading"});try{const L=await i.getGitLog(s,{maxCount:50,to:e?`refs/heads/${e}`:"HEAD"});if(v.current!==x||Z()!==S)return;const m=L.all.slice(0,50);if(f({key:r,status:"ready",commits:m}),!me.getState().selections.has(r)){const y=k.current?m.find(b=>b.hash===k.current):m[0];y&&d(r,y)}}catch(L){if(v.current!==x||Z()!==S)return;f({key:r,status:"error",message:L instanceof Error?L.message:u("commitComparison.loadError")})}},[e,s,n,i,r,d,u]);E.useEffect(()=>(w(),()=>{v.current+=1}),[w]);const P=l?.key===r?l:null;return{selectedCommit:c,commits:P?.status==="ready"?P.commits:yt,loading:n&&(!P||P.status==="loading"),error:P?.status==="error"?P.message:null,refresh:w,select:x=>d(r,x)}}const Ee=(s,e,n)=>{const t=new Map(s.selections);if(t.delete(e),t.set(e,n),t.size>100){const i=t.keys().next().value;i!==void 0&&t.delete(i)}return{selections:t}},le=Be(s=>({selections:new Map,select:(e,n)=>s(t=>Ee(t,e,{source:n,handoff:t.selections.get(e)?.handoff??null})),acceptHandoff:(e,n)=>s(t=>t.selections.get(e)?.handoff===n?t:Ee(t,e,{source:n,handoff:n}))})),$e=[],Ct=[],vt=6e4,jt=30,te=new Map,wt=s=>{for(te.delete(s.key),te.set(s.key,{list:s,readAt:Date.now()});te.size>jt;)te.delete(te.keys().next().value??"")},St=s=>({kind:"pr",number:s.number,sourceRepo:{owner:s.project.owner,repo:s.project.name}}),Nt=s=>`${s.project.owner}/${s.project.name}#${s.number}`,bt=(s,e,n)=>{const t=Ze(s,e);return{prs:[...new Map([...n?s:[],...t].map(u=>[Nt(u),u])).values()],incompleteProjectIds:e.incompleteProjectIds??[]}};function qt(s,e,n,t,i){const{sourceControl:u}=He(),{t:h}=oe(),r=de(a=>a.runtimeKey),c=n?.provider==="github"||n?.provider==="gitlab"?n:null,d=c?JSON.stringify(We(c)):"",l=E.useRef(c);l.current=c;const f=c,v=ze(s)?.provider,k=f?.provider??v??null,w=JSON.stringify([r,s,e,f?.repositoryId??null]),P=le(a=>a.selections.get(w)??null),x=P?.source??null,S=le(a=>a.select),L=le(a=>a.acceptHandoff),m=i&&P?.handoff!==i?i:null,[y,b]=E.useState(""),B=Ge(y,350).trim(),C=JSON.stringify([w,B,d]),[z,R]=E.useState(()=>te.get(C)?.list??null),F=E.useRef(z);F.current=z;const[q,A]=E.useState(!1),D=E.useRef(0),_=E.useRef({key:C,enabled:t});_.current={key:C,enabled:t};const G=Je(a=>f?a.entries[Qe(f)]:void 0),$=f?Ue(G,f):{authChecked:!1,connected:!1},U=ie(a=>a.ensureEntry),J=ie(a=>a.setParams),W=ie(a=>a.refreshTargets),M=ie(a=>f&&e?Xe(a.entries,f,e):null);E.useEffect(()=>{const a=l.current;if(!t||!a||!e||x||!$.authChecked||!$.connected)return;const O=Ye(a,e);U(O),J(O,{directory:a.directory,branch:e,remoteName:a.primaryRemote,canShow:!0,identity:a,readContext:a,sourceControl:u,authChecked:$.authChecked,connected:$.connected}),W([{context:a,branch:e}])},[$.authChecked,$.connected,e,d,t,U,W,x,J,u]);const K=M?.changeRequest??M?.pr??null,I=M?.project??null;E.useEffect(()=>{!t||!$.connected||!K||!I||le.getState().selections.has(w)||S(w,{kind:"pr",number:K.number,sourceRepo:{owner:I.owner,repo:I.name}})},[$.connected,K,I,t,S,w]),E.useEffect(()=>{i&&L(w,i)},[L,i,w]);const H=E.useCallback(async a=>{if(!s||!t||_.current.key!==C||!_.current.enabled)return;const O=++D.current,p=Z(),g=F.current,V=g?.key===C&&g.status==="ready"?g:null,Q=a?.prs??V?.prs??$e;a?A(!0):(A(!1),V||R({key:C,status:"loading"}));try{const N=l.current;if(!u)throw new Error(h(ce("session.githubPrPicker.error.runtimeUnavailable",k)));if(!N||!$.connected)throw new Error(h(ce("session.githubPrPicker.empty.notConnected",k)));const X=a?a.page+1:1,ee=await u.changeRequestsList(N,{page:X,query:B||void 0});if(D.current!==O||Z()!==p||_.current.key!==C||!_.current.enabled)return;const re=bt(Q,ee,!!a),Le={key:C,status:"ready",...re,page:X,hasMore:ee.hasMore,error:null};wt(Le),R(Le)}catch(N){if(D.current===O&&Z()===p&&_.current.key===C&&_.current.enabled){const X=N instanceof Error?N.message:h(ce("session.githubPrPicker.toast.loadMoreFailed",k));R(a?{...a,error:X}:{key:C,status:"error",message:X})}}finally{D.current===O&&A(!1)}},[$.connected,s,t,C,k,B,u,h]),T=E.useCallback(()=>{const a=te.get(C);return a&&F.current!==a.list&&R(a.list),a&&Date.now()-a.readAt<vt?Promise.resolve():H()},[C,H]);E.useEffect(()=>((F.current?.key!==C||F.current.status!=="ready"||te.has(C))&&T(),()=>{D.current+=1}),[C,T]);const j=z?.key===C?z:null;return{enabled:t,readContext:f,provider:k,selectedSource:m??x,prs:j?.status==="ready"?j.prs:$e,query:y,setQuery:b,loading:t&&(!j||j.status==="loading"||B!==y.trim()),loadingMore:q,hasMore:j?.status==="ready"&&j.hasMore,incompleteProjectIds:j?.status==="ready"?j.incompleteProjectIds:Ct,error:j?.status==="error"?j.message:j?.status==="ready"?j.error:null,refresh:()=>H(),revalidate:T,loadMore:()=>j?.status==="ready"&&j.hasMore&&!q?H(j):Promise.resolve(),select:a=>S(w,St(a))}}function Kt(s){const e=fe.c(77),{comparison:n,mobile:t}=s,i=t===void 0?!1:t,{t:u}=oe();let h;e[0]!==n.provider||e[1]!==u?(h=p=>u(ce(p,n.provider)),e[0]=n.provider,e[1]=u,e[2]=h):h=e[2];const r=h;let c;e[3]!==n.provider?(c=p=>et(n.provider,p),e[3]=n.provider,e[4]=c):c=e[4];const d=c,l=pe(),f=i&&!l.enabled,[v,k]=E.useState(!1);let w,P;e[5]!==n.enabled?(w=()=>{n.enabled||k(!1)},P=[n.enabled],e[5]=n.enabled,e[6]=w,e[7]=P):(w=e[6],P=e[7]),E.useEffect(w,P);let x;e[8]!==r?(x=r("pullRequestComparison.select"),e[8]=r,e[9]=x):x=e[9];const S=x;let L;e[10]!==n?(L=p=>{k(p),p&&!n.loading&&n.revalidate(),p||n.setQuery("")},e[10]=n,e[11]=L):L=e[11];const m=L,y=n.selectedSource;let b;e[12]!==i?(b=ge(xe({size:i?"default":"sm"}),"min-w-0 max-w-48"),e[12]=i,e[13]=b):b=e[13];const B=i||void 0;let C;e[14]!==m||e[15]!==f?(C=f?()=>m(!0):void 0,e[14]=m,e[15]=f,e[16]=C):C=e[16];const z=f?"dialog":void 0,R=f?v:void 0;let F;e[17]!==S||e[18]!==d||e[19]!==y?(F=y?.sourceRepo?`${y.sourceRepo.owner}/${y.sourceRepo.repo} ${d(y.number)}`:S,e[17]=S,e[18]=d,e[19]=y,e[20]=F):F=e[20];let q;e[21]!==S||e[22]!==d||e[23]!==y?(q=y?d(y.number):S,e[21]=S,e[22]=d,e[23]=y,e[24]=q):q=e[24];let A;e[25]!==q?(A=o.jsx("span",{className:"truncate",children:q}),e[25]=q,e[26]=A):A=e[26];let D;e[27]===Symbol.for("react.memo_cache_sentinel")?(D=o.jsx(Y,{name:"arrow-down-s",className:"size-3.5"}),e[27]=D):D=e[27];let _;e[28]!==S||e[29]!==C||e[30]!==z||e[31]!==R||e[32]!==F||e[33]!==A||e[34]!==b||e[35]!==B?(_=o.jsxs(ne,{variant:"outline",className:b,"data-mobile-comparison-trigger":B,onClick:C,"aria-haspopup":z,"aria-expanded":R,"aria-label":S,title:F,children:[A,D]}),e[28]=S,e[29]=C,e[30]=z,e[31]=R,e[32]=F,e[33]=A,e[34]=b,e[35]=B,e[36]=_):_=e[36];const G=_,$=!f,U=n.query,J=n.setQuery;let W;e[37]!==r?(W=r("session.githubPrPicker.searchPlaceholder"),e[37]=r,e[38]=W):W=e[38];let M;e[39]!==r?(M=r("session.githubPrPicker.searchPlaceholder"),e[39]=r,e[40]=M):M=e[40];let K;e[41]!==n.query||e[42]!==n.setQuery||e[43]!==$||e[44]!==W||e[45]!==M?(K=o.jsx(Ce,{autoFocus:$,value:U,onValueChange:J,placeholder:W,"aria-label":M}),e[41]=n.query,e[42]=n.setQuery,e[43]=$,e[44]=W,e[45]=M,e[46]=K):K=e[46];let I;e[47]!==m||e[48]!==n||e[49]!==i||e[50]!==v||e[51]!==d||e[52]!==y||e[53]!==r?(I=n.loading?o.jsxs("div",{className:"flex items-center gap-2 p-4 typography-meta text-muted-foreground",children:[o.jsx(Y,{name:"loader-4",className:"size-4 animate-spin"}),r("session.githubPrPicker.loading.pullRequests")]}):n.error&&n.prs.length===0?o.jsxs("div",{className:"flex flex-col items-center gap-2 p-4 typography-meta text-muted-foreground",children:[o.jsx("span",{children:n.error}),o.jsx(ne,{variant:"outline",size:"sm",onClick:()=>{n.refresh()},children:r("diffView.actions.retry")})]}):o.jsxs(we,{className:i?"max-h-[min(45dvh,24rem)]":void 0,children:[o.jsx(ve,{children:r("session.githubPrPicker.empty.noPullRequestsFound")}),o.jsx(je,{children:v&&n.prs.map(p=>{const g=`${p.project.owner}/${p.project.name}#${p.number}`;return o.jsxs(ye,{value:g,className:i?"min-h-11":void 0,onSelect:()=>{n.select(p),m(!1)},children:[o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsxs("div",{className:"truncate typography-ui-label",title:p.title,children:[d(p.number)," ",p.title]}),o.jsxs("div",{className:"truncate typography-meta text-muted-foreground",children:[p.project.owner,"/",p.project.name," · ",p.head," → ",p.base]})]}),y?.number===p.number&&y.sourceRepo?.owner===p.project.owner&&y.sourceRepo?.repo===p.project.name&&o.jsx(Y,{name:"check",className:"size-3.5"})]},g)})}),n.error&&o.jsx("p",{className:"px-3 py-2 typography-meta text-muted-foreground",children:n.error}),!n.error&&n.incompleteProjectIds.length>0&&o.jsxs("div",{className:"flex items-center justify-between gap-2 px-3 py-2 typography-meta text-muted-foreground",children:[o.jsx("span",{children:r("pullRequestComparison.partial")}),o.jsx(ne,{variant:"outline",size:"sm",onClick:()=>{n.refresh()},children:r("diffView.actions.retry")})]}),n.hasMore&&o.jsx(ne,{variant:"ghost",size:"sm",disabled:n.loadingMore,onClick:()=>{n.loadMore()},children:n.error?r("diffView.actions.retry"):r("session.githubPrPicker.actions.loadMore")})]}),e[47]=m,e[48]=n,e[49]=i,e[50]=v,e[51]=d,e[52]=y,e[53]=r,e[54]=I):I=e[54];let H;e[55]!==K||e[56]!==I?(H=o.jsxs(Se,{shouldFilter:!1,onKeyDown:kt,children:[K,I]}),e[55]=K,e[56]=I,e[57]=H):H=e[57];const T=H;if(f){let p;e[58]!==m?(p=()=>m(!1),e[58]=m,e[59]=p):p=e[59];let g;e[60]!==S||e[61]!==v||e[62]!==T||e[63]!==p?(g=o.jsx(Ne,{open:v,title:S,onClose:p,children:T}),e[60]=S,e[61]=v,e[62]=T,e[63]=p,e[64]=g):g=e[64];let V;return e[65]!==g||e[66]!==G?(V=o.jsxs(o.Fragment,{children:[G,g]}),e[65]=g,e[66]=G,e[67]=V):V=e[67],V}let j;e[68]!==G?(j=o.jsx(be,{asChild:!0,children:G}),e[68]=G,e[69]=j):j=e[69];let a;e[70]!==T?(a=o.jsx(ke,{align:"start",className:"w-[32rem] max-w-[calc(100vw-2rem)] p-0",children:T}),e[70]=T,e[71]=a):a=e[71];let O;return e[72]!==m||e[73]!==v||e[74]!==j||e[75]!==a?(O=o.jsxs(Pe,{open:v,onOpenChange:m,children:[j,a]}),e[72]=m,e[73]=v,e[74]=j,e[75]=a,e[76]=O):O=e[76],O}function kt(s){s.key!=="Escape"&&s.stopPropagation()}const Pt=64,Lt=3,se=new Map,Vt=s=>/^Binary files .+ differ$/m.test(s)||/^GIT binary patch$/m.test(s),Ie=s=>{const e=s.search(/^@@\s/m);if(e<0)return null;const n=s.slice(0,e);return/^index (?:[a-f0-9]{40}|[a-f0-9]{64})\.\.(?:[a-f0-9]{40}|[a-f0-9]{64})(?: [0-7]+)?$/m.test(n)?n:null},Wt=(s,e)=>{const n=Ie(s);return n!==null&&n===Ie(e)},zt=(s,e,n=Lt)=>{const t=`${s}\0${n}\0${e}`,i=se.get(t);if(i)return se.delete(t),se.set(t,i),i;const u=Et(e),h=u?tt(at(e,n),{oldFile:{name:s,contents:u.before},newFile:{name:s,contents:u.after}})??_e(s):st(Rt(s,e))[0]?.files[0]??_e(s);for(se.set(t,h);se.size>Pt;){const r=se.keys().next().value;if(!r)break;se.delete(r)}return h},Rt=(s,e)=>!e.trim()||e.startsWith("diff --git ")||/^--- [^\n]*\r?\n\+\+\+ /m.test(e)?e:`Index: ${s}
6
- ===================================================================
7
- --- ${s}
8
- +++ ${s}
9
- ${e}`,Et=s=>{if(!s.startsWith("diff --git ")&&!/^--- [^\n]*\t?\r?\n\+\+\+ [^\n]*\t?(?:\r?\n|$)/m.test(s))return;const e=[...s.matchAll(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@[^\n]*(?:\r?\n|$)/gm)];if(e.length!==1)return;const n=e[0],t=Number.parseInt(n[1]??"",10),i=Number.parseInt(n[2]??"",10);if(t>1||i>1||!Number.isFinite(t)||!Number.isFinite(i))return;const u=(n.index??0)+n[0].length,h=s.slice(u),r=[],c=[];let d;for(const l of h.split(/\r?\n/)){if(l.startsWith("diff --git ")||l.startsWith("@@ "))break;if(l.startsWith("\\")){if(d==="-"||d===" "){const f=r.at(-1);f&&(f.newline=!1)}if(d==="+"||d===" "){const f=c.at(-1);f&&(f.newline=!1)}continue}if(l.startsWith("-")){r.push({text:l.slice(1),newline:!0}),d="-";continue}if(l.startsWith("+")){c.push({text:l.slice(1),newline:!0}),d="+";continue}l.startsWith(" ")&&(r.push({text:l.slice(1),newline:!0}),c.push({text:l.slice(1),newline:!0}),d=" ")}return{before:Fe(r),after:Fe(c)}},Fe=s=>s.map(e=>e.text+(e.newline?`
10
- `:"")).join(""),_e=s=>it({name:s,contents:""},{name:s,contents:""}),De=s=>{if(!s)return[];const e=[...s.matchAll(/^@@\s/gm)].map(t=>t.index);if(e.length===0)return[];const n=s.slice(0,e[0]);return e.map((t,i)=>{const u=n+s.slice(t,e[i+1]??s.length);return u.endsWith(`
11
- `)?u:`${u}
12
- `})},Gt=(s,e)=>!Number.isInteger(e)||e<0?null:De(s)[e]??null,Jt=s=>{const e=[];for(const[n,t]of De(s).entries()){const i=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@[^\n]*(?:\n|$)/m.exec(t);if(!i)continue;let u=Number(i[1]),h=Number(i[3]),r;for(const c of t.slice(i.index+i[0].length).split(`
13
- `))c.startsWith("-")?r={index:n,side:"deletions",lineNumber:u++}:c.startsWith("+")?r={index:n,side:"additions",lineNumber:h++}:c.startsWith(" ")&&(u+=1,h+=1);r&&Number.isSafeInteger(r.lineNumber)&&r.lineNumber>0&&e.push(r)}return e};export{Bt as B,At as C,Kt as P,Dt as a,Tt as b,qt as c,Gt as e,zt as f,Jt as g,Wt as h,Vt as i,gt as u};