@vantran-se/openchamber-web 1.23.1 → 1.24.3

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 (313) hide show
  1. package/bin/cli.test.js +29 -6
  2. package/bin/lib/cli-http.js +5 -1
  3. package/bin/lib/commands-status.js +5 -0
  4. package/dist/assets/{CodeMirrorCommentWidgets-BOpqXpFU.js → CodeMirrorCommentWidgets-BjJHrzmU.js} +1 -1
  5. package/dist/assets/DiffView-COVQhWGd.js +4 -0
  6. package/dist/assets/FilesView-B1V5JxFX.js +13 -0
  7. package/dist/assets/GitView-CDOJy5Ay.js +6 -0
  8. package/dist/assets/GuestAttachDialog-D3S0Rjic.js +1 -0
  9. package/dist/assets/{JsonTreeView-nd_E8eVM.js → JsonTreeView-D0C9nU7K.js} +1 -1
  10. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  11. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  12. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  13. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  14. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  15. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  16. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  17. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  18. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  19. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  20. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  21. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  22. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  23. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  24. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  25. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  26. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  27. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  28. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  29. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  30. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  31. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  32. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  33. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  34. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  35. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  36. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  37. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  38. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  39. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  40. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  41. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  42. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  43. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  44. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  45. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  46. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  47. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  48. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  49. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  50. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  51. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  52. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  53. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  54. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  55. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  56. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  57. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  58. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  59. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  60. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  61. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  62. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  63. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  64. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  65. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  66. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  67. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  68. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  69. package/dist/assets/LinearIssuesView-D7FKg1XJ.js +1 -0
  70. package/dist/assets/{MarkdownImageGallery-CVYds3sQ.js → MarkdownImageGallery-BrFjAVEf.js} +1 -1
  71. package/dist/assets/MarkdownRendererImpl-DWepTafh.js +12 -0
  72. package/dist/assets/{OnboardingScreen-Dd2IbPTn.js → OnboardingScreen-Dyxxiqdt.js} +1 -1
  73. package/dist/assets/{PatchDiff-nUu5i4bG.js → PatchDiff-DnEhjXcC.js} +1 -1
  74. package/dist/assets/PierreDiffViewer-DyxZVVVR.js +210 -0
  75. package/dist/assets/PlanView-LW2z_EAP.js +5 -0
  76. package/dist/assets/PluginPane-B4tKno2h.js +3 -0
  77. package/dist/assets/SettingsView-DEaMulN9.js +29 -0
  78. package/dist/assets/{SettingsWindow-BccxY81J.js → SettingsWindow-FLDJXOgQ.js} +1 -1
  79. package/dist/assets/SubmoduleDiffSummary-CvVwD-Vi.js +1 -0
  80. package/dist/assets/ToolOutputDialog-BiP0x2Rw.js +15 -0
  81. package/dist/assets/{ToolPartDiffPreview-BFVgk0UK.js → ToolPartDiffPreview-CkR4msKP.js} +2 -2
  82. package/dist/assets/{VirtualizedFileDiff-z3_H74UR.js → VirtualizedFileDiff-0pyr_mHY.js} +3 -3
  83. package/dist/assets/{WalkthroughView-BqM9GFbJ.js → WalkthroughView-yNj4nOP5.js} +2 -2
  84. package/dist/assets/appThemeRegistry-BuUKhbYQ.js +1 -0
  85. package/dist/assets/commitAndPush-DvJKa3Ks.js +1 -0
  86. package/dist/assets/{computeVirtualFileMetrics-Bdazp9Qo.js → computeVirtualFileMetrics-DxTBMuu-.js} +1 -1
  87. package/dist/assets/de-DgxgFyGG.js +10 -0
  88. package/dist/assets/es-BFsZj5F_.js +16 -0
  89. package/dist/assets/fr-jdZ5KKQi.js +14 -0
  90. package/dist/assets/{index-eo1-D_7z.js → index-CKHjPKbq.js} +1 -1
  91. package/dist/assets/index-Cbci4i1W.js +40 -0
  92. package/dist/assets/index-DqaMWNrC.css +1 -0
  93. package/dist/assets/{isDiffPlainText-BvKH712-.js → isDiffPlainText-D7FkBMP6.js} +1 -1
  94. package/dist/assets/{isFilePlainText-BdVVPukf.js → isFilePlainText-CL2vsrIZ.js} +1 -1
  95. package/dist/assets/ja-C5kKrhO4.js +16 -0
  96. package/dist/assets/ko-DXDTT_0O.js +16 -0
  97. package/dist/assets/main-CZALtVek.js +896 -0
  98. package/dist/assets/main-CgXMBNvG.js +2 -0
  99. package/dist/assets/{markdown-shiki.worker-D5fBU-lw.js → markdown-shiki.worker-CahLvHIq.js} +5 -5
  100. package/dist/assets/markdownCore-Dh7WEsdM.js +5 -0
  101. package/dist/assets/miniChat-CwTmDixi.js +2 -0
  102. package/dist/assets/mobile-CLf2vCtO.js +2 -0
  103. package/dist/assets/{patchFileDiff-B7LjppSS.js → patchFileDiff-Bsba8KFp.js} +3 -3
  104. package/dist/assets/pl-D-7x4Y8Q.js +16 -0
  105. package/dist/assets/pt-BR-CSBZrHa8.js +16 -0
  106. package/dist/assets/renderElectronMiniChatApp-C5gAFBk0.js +2 -0
  107. package/dist/assets/renderMobileApp-V4hYd32H.js +25 -0
  108. package/dist/assets/runtimeEndpointReset-DhlHCn-2.js +25 -0
  109. package/dist/assets/{scheduledTasksApi-hceovDei.js → scheduledTasksApi-DzjbLd8P.js} +1 -1
  110. package/dist/assets/shikiHighlight-8_3csmr6.js +1 -0
  111. package/dist/assets/textMateThemeFromAppTheme-CHo2fCgW.js +1 -0
  112. package/dist/assets/tr-Dr-oJ22L.js +7 -0
  113. package/dist/assets/uk-9Nx83UcI.js +16 -0
  114. package/dist/assets/useAppFontEffects-khZXpFL_.js +7333 -0
  115. package/dist/assets/useInlineCommentController-DkQ_gqpn.js +2 -0
  116. package/dist/assets/useRootScrollLock-DdvHf9Pt.js +2 -0
  117. package/dist/assets/{vendor-base-ui-BY_5qla_.js → vendor-base-ui-CsXYnR5c.js} +1 -1
  118. package/dist/assets/{vendor-codemirror-language-data-DWA1bm1F.js → vendor-codemirror-language-data-CdzUmUyZ.js} +2 -2
  119. package/dist/assets/vendor-framer-motion-Bq3iTZ6r.js +1 -0
  120. package/dist/assets/vendor-katex-Cp579UoJ.css +1 -0
  121. package/dist/assets/{vendor-motion-dom-D_o3BTI3.js → vendor-motion-dom-DcCgeG69.js} +1 -1
  122. package/dist/assets/{vendor-remixicon-react-Dil0zKKT.js → vendor-remixicon-react-BDmGmFCA.js} +1 -1
  123. package/dist/assets/vendor-strip-json-comments-5dJlOkP1.js +4 -0
  124. package/dist/assets/{vendor-tanstack-react-virtual-g05Cx3z9.js → vendor-tanstack-react-virtual-ClYN8CzB.js} +1 -1
  125. package/dist/assets/{vendor-tanstack-virtual-core-Dubg10g5.js → vendor-tanstack-virtual-core-BewVQryB.js} +1 -1
  126. package/dist/assets/{vendor-zod-B6551dwG.js → vendor-zod-CgAdXWZO.js} +4 -4
  127. package/dist/assets/{web-components-B_Z64So5.js → web-components-B8IcVQAA.js} +2 -2
  128. package/dist/assets/zh-CN-Bxy_Hj3r.js +16 -0
  129. package/dist/assets/zh-TW-0BB4gpHM.js +16 -0
  130. package/dist/index.html +6 -4
  131. package/dist/mini-chat.html +6 -4
  132. package/dist/mobile.html +6 -4
  133. package/package.json +12 -9
  134. package/server/built-in-extensions/registry.json +4 -0
  135. package/server/index.d.ts +2 -0
  136. package/server/index.js +44 -10
  137. package/server/lib/agent-tool/DOCUMENTATION.md +17 -4
  138. package/server/lib/agent-tool/runtime.js +62 -15
  139. package/server/lib/agent-tool/runtime.test.js +88 -2
  140. package/server/lib/changelog/update-notes.js +2 -1
  141. package/server/lib/changelog/update-notes.test.js +19 -0
  142. package/server/lib/event-stream/DOCUMENTATION.md +23 -0
  143. package/server/lib/event-stream/delta-coalescer.js +0 -0
  144. package/server/lib/event-stream/delta-coalescer.test.js +292 -0
  145. package/server/lib/event-stream/global-hub.js +53 -23
  146. package/server/lib/event-stream/global-hub.test.js +160 -0
  147. package/server/lib/event-stream/global-ws-bridge.js +1 -0
  148. package/server/lib/event-stream/index.js +4 -0
  149. package/server/lib/fs/DOCUMENTATION.md +10 -1
  150. package/server/lib/fs/git-process.test.js +77 -0
  151. package/server/lib/fs/routes.js +58 -5
  152. package/server/lib/fs/routes.test.js +116 -0
  153. package/server/lib/fs/search.js +2 -1
  154. package/server/lib/git/DOCUMENTATION.md +20 -5
  155. package/server/lib/git/routes.js +16 -3
  156. package/server/lib/git/serial-refresh.js +93 -0
  157. package/server/lib/git/serial-refresh.test.js +112 -0
  158. package/server/lib/git/service.js +429 -70
  159. package/server/lib/git/service.test.js +418 -0
  160. package/server/lib/github/pr-status.js +5 -5
  161. package/server/lib/github/pr-status.test.js +1 -1
  162. package/server/lib/github/routes.js +4 -4
  163. package/server/lib/guests/DOCUMENTATION.md +68 -0
  164. package/server/lib/guests/auth-store.js +184 -0
  165. package/server/lib/guests/auth-store.test.js +112 -0
  166. package/server/lib/guests/background.test.js +83 -0
  167. package/server/lib/guests/builtins.js +34 -0
  168. package/server/lib/guests/builtins.test.js +174 -0
  169. package/server/lib/guests/catalog.js +477 -0
  170. package/server/lib/guests/catalog.test.js +390 -0
  171. package/server/lib/guests/clone.js +297 -0
  172. package/server/lib/guests/extract-zip.js +136 -0
  173. package/server/lib/guests/extract-zip.test.js +109 -0
  174. package/server/lib/guests/files.js +308 -0
  175. package/server/lib/guests/files.test.js +262 -0
  176. package/server/lib/guests/grant-scope.js +81 -0
  177. package/server/lib/guests/grant-scope.test.js +75 -0
  178. package/server/lib/guests/host-session.js +73 -0
  179. package/server/lib/guests/host-session.test.js +30 -0
  180. package/server/lib/guests/html-styles.js +6 -0
  181. package/server/lib/guests/html-styles.test.js +45 -0
  182. package/server/lib/guests/html-tokens.js +73 -0
  183. package/server/lib/guests/html-tokens.test.js +53 -0
  184. package/server/lib/guests/install.js +406 -0
  185. package/server/lib/guests/install.test.js +338 -0
  186. package/server/lib/guests/oauth.js +501 -0
  187. package/server/lib/guests/oauth.test.js +481 -0
  188. package/server/lib/guests/persist.js +336 -0
  189. package/server/lib/guests/persist.test.js +288 -0
  190. package/server/lib/guests/request.js +112 -0
  191. package/server/lib/guests/request.test.js +206 -0
  192. package/server/lib/guests/routes.js +838 -0
  193. package/server/lib/guests/service.js +538 -0
  194. package/server/lib/guests/service.test.js +277 -0
  195. package/server/lib/guests/sockets.js +129 -0
  196. package/server/lib/guests/sockets.test.js +110 -0
  197. package/server/lib/guests/ssh-install.test.js +188 -0
  198. package/server/lib/guests/storage.js +68 -0
  199. package/server/lib/guests/storage.test.js +59 -0
  200. package/server/lib/guests/updates.js +294 -0
  201. package/server/lib/guests/updates.test.js +334 -0
  202. package/server/lib/guests/upload.js +50 -0
  203. package/server/lib/guests/upload.test.js +131 -0
  204. package/server/lib/linear/DOCUMENTATION.md +1 -1
  205. package/server/lib/message-queue/DOCUMENTATION.md +10 -1
  206. package/server/lib/message-queue/runtime.js +21 -1
  207. package/server/lib/message-queue/runtime.test.js +52 -5
  208. package/server/lib/notifications/routes.js +5 -0
  209. package/server/lib/openchamber-control/DOCUMENTATION.md +6 -0
  210. package/server/lib/openchamber-sessions/routes.js +62 -29
  211. package/server/lib/openchamber-sessions/routes.test.js +96 -0
  212. package/server/lib/opencode/DOCUMENTATION.md +55 -1
  213. package/server/lib/opencode/bootstrap-runtime.js +1 -0
  214. package/server/lib/opencode/core-routes.js +39 -1
  215. package/server/lib/opencode/feature-routes-runtime.js +15 -0
  216. package/server/lib/opencode/lifecycle-process.test.js +84 -0
  217. package/server/lib/opencode/lifecycle.js +54 -67
  218. package/server/lib/opencode/openchamber-routes.js +72 -14
  219. package/server/lib/opencode/openchamber-routes.test.js +71 -3
  220. package/server/lib/opencode/session-runtime.js +68 -0
  221. package/server/lib/opencode/session-runtime.test.js +43 -0
  222. package/server/lib/opencode/settings-helpers.js +8 -0
  223. package/server/lib/opencode/settings-helpers.test.js +13 -1
  224. package/server/lib/opencode/settings-normalization-runtime.js +2 -0
  225. package/server/lib/opencode/settings-normalization-runtime.test.js +13 -0
  226. package/server/lib/opencode/settings-registry.json +15 -0
  227. package/server/lib/opencode/shutdown-runtime.js +3 -0
  228. package/server/lib/opencode/shutdown-runtime.test.js +24 -0
  229. package/server/lib/opencode/theme-archive.js +53 -0
  230. package/server/lib/opencode/theme-catalog.js +171 -0
  231. package/server/lib/opencode/theme-catalog.test.js +125 -0
  232. package/server/lib/opencode/theme-import.test.js +144 -0
  233. package/server/lib/opencode/theme-runtime.js +100 -28
  234. package/server/lib/opencode/theme-runtime.test.js +15 -0
  235. package/server/lib/permission-auto-accept/DOCUMENTATION.md +8 -0
  236. package/server/lib/permission-auto-accept/runtime.js +13 -0
  237. package/server/lib/permission-auto-accept/runtime.test.js +37 -1
  238. package/server/lib/projects/project-config.js +2 -2
  239. package/server/lib/quota/DOCUMENTATION.md +0 -1
  240. package/server/lib/quota/providers/index.js +0 -7
  241. package/server/lib/realtime-proxy-terminal.test.js +150 -0
  242. package/server/lib/realtime-proxy.js +2 -0
  243. package/server/lib/routing/DOCUMENTATION.md +83 -0
  244. package/server/lib/routing/defaults.js +98 -0
  245. package/server/lib/routing/feature-flag.js +11 -0
  246. package/server/lib/routing/history.js +34 -0
  247. package/server/lib/routing/jev.js +98 -0
  248. package/server/lib/routing/routes.http.test.js +100 -0
  249. package/server/lib/routing/routes.js +81 -0
  250. package/server/lib/routing/runtime.js +217 -0
  251. package/server/lib/routing/runtime.test.js +188 -0
  252. package/server/lib/routing/store.js +249 -0
  253. package/server/lib/routing/store.test.js +96 -0
  254. package/server/lib/scheduled-tasks/runtime.js +2 -2
  255. package/server/lib/scheduled-tasks/runtime.test.js +14 -0
  256. package/server/lib/security/request-security.js +9 -5
  257. package/server/lib/security/request-security.test.js +37 -0
  258. package/server/lib/small-model/DOCUMENTATION.md +14 -2
  259. package/server/lib/small-model/call.js +37 -6
  260. package/server/lib/small-model/call.test.js +182 -0
  261. package/server/lib/terminal/DOCUMENTATION.md +23 -2
  262. package/server/lib/terminal/runtime.js +27 -5
  263. package/server/lib/terminal/runtime.test.js +67 -0
  264. package/server/lib/terminal/shutdown.js +106 -0
  265. package/server/lib/terminal/shutdown.test.js +84 -0
  266. package/server/lib/tts/service.test.js +78 -0
  267. package/server/lib/ui-auth/DOCUMENTATION.md +8 -0
  268. package/server/lib/ui-auth/session-cookie.js +51 -0
  269. package/server/lib/ui-auth/session-cookie.test.js +46 -0
  270. package/server/lib/ui-auth/ui-auth.js +56 -17
  271. package/server/lib/ui-auth/ui-auth.test.js +96 -0
  272. package/dist/assets/DiffView-CyLmb-wF.js +0 -4
  273. package/dist/assets/DirtyBranchSwitchDialog-pu5kcoir.js +0 -1
  274. package/dist/assets/FilesView-WtJB0y_l.js +0 -13
  275. package/dist/assets/GitView-DkNrV0BK.js +0 -6
  276. package/dist/assets/LinearIssuesView-B0H0Otii.js +0 -1
  277. package/dist/assets/MarkdownRendererImpl-DSqVN2d8.js +0 -12
  278. package/dist/assets/PierreDiffViewer-Bsq9z-sw.js +0 -161
  279. package/dist/assets/PlanView-CAFziKH5.js +0 -5
  280. package/dist/assets/SettingsView-BRittavZ.js +0 -28
  281. package/dist/assets/ToolOutputDialog-B0uYaJio.js +0 -15
  282. package/dist/assets/appThemeRegistry-BK0dHKa6.js +0 -1
  283. package/dist/assets/de-c7CYLCAW.js +0 -10
  284. package/dist/assets/es-BKAVPQmQ.js +0 -16
  285. package/dist/assets/fr-Bj1glqfV.js +0 -14
  286. package/dist/assets/index-BYFyOu_D.css +0 -1
  287. package/dist/assets/index-BfwRClDe.js +0 -40
  288. package/dist/assets/ja-5jwSIbK0.js +0 -16
  289. package/dist/assets/ko-BaDbg-Eb.js +0 -16
  290. package/dist/assets/main-CGG2_uHq.js +0 -2
  291. package/dist/assets/main-CcrSaL4J.js +0 -930
  292. package/dist/assets/markdownCore-DsmQr3bt.js +0 -5
  293. package/dist/assets/miniChat-DEaAhP4b.js +0 -2
  294. package/dist/assets/mobile-BC3rsvv0.js +0 -2
  295. package/dist/assets/pl-BFKVBDFu.js +0 -16
  296. package/dist/assets/pt-BR-qKfHvkDL.js +0 -16
  297. package/dist/assets/registerCustomTheme-BBXUCRnG.js +0 -1
  298. package/dist/assets/renderElectronMiniChatApp-CR9d1Mr0.js +0 -2
  299. package/dist/assets/renderMobileApp-Da5dwobZ.js +0 -25
  300. package/dist/assets/runtimeEndpointReset-CLYVRw2H.js +0 -41
  301. package/dist/assets/shikiHighlight-D1Z9G58W.js +0 -1
  302. package/dist/assets/tr-DYXPoEDG.js +0 -7
  303. package/dist/assets/uk-CwAoloR8.js +0 -16
  304. package/dist/assets/useAppFontEffects-DeStGcUT.js +0 -7282
  305. package/dist/assets/useGitComparison-CpxioduU.js +0 -1
  306. package/dist/assets/useInlineCommentController-gmUnJtrb.js +0 -2
  307. package/dist/assets/useRootScrollLock--a3cPz8s.js +0 -1
  308. package/dist/assets/vendor-framer-motion-livSKyyV.js +0 -1
  309. package/dist/assets/zh-CN-D9MG0lqF.js +0 -16
  310. package/dist/assets/zh-TW-1HNK7shh.js +0 -16
  311. package/server/lib/quota/providers/crof.js +0 -96
  312. package/server/lib/quota/providers/crof.test.js +0 -98
  313. /package/dist/assets/{vendor-katex-k3Ppq1Ha.js → vendor-katex-CHD9BdDO.js} +0 -0
@@ -0,0 +1,3 @@
1
+ import{f as Fn,R as y,j as ce}from"./vendor-react-BUCujlKS.js";import{ij as Pe,ik as Ie,il as Ce,im as $n,io as Xn,ip as qn,iq as Jn,ir as zn,is as Wn,it as Kn,iu as Vn,iv as Yn,iw as Zn,ix as Ut,iy as Qn,iz as es,iA as ts,iB as ns,iC as ss,iD as rs,iE as os,iF as as,iG as is,iH as cs,iI as ls,iJ as J,iK as z,iL as nn,iM as sn,iN as us,iO as ds,iP as ps,iQ as ms,iR as rn,iS as fs,iT as wt,iU as on,iV as an,iW as cn,iX as ln,iY as ys,iZ as jt,i_ as hs,i$ as Ss,j0 as un,j1 as gs,j2 as Es,j3 as Ts,j4 as dn,j5 as ks,j6 as ws,j7 as bs,j8 as xs,j9 as Dt,ja as Lt,jb as _s,jc as Ht,jd as Bt,je as Ft,jf as $t,jg as vs,jh as Rs,ji as As,jj as Is,jk as Os,u as bt,z as ne,b as xt,en as pn,dm as mn,l as le,jl as fn,jm as Ps,fs as yn,bC as Cs,fr as Ms,ee as Gs,fy as Ns,jn as Us,jo as js,ft as Ds,m as Ls,fz as Hs,fA as Bs,fB as Fs,fi as $s,fd as Xs,f as hn,B as Xt,g as Sn,S as qs,af as Js,H as zs,jp as Ws,bY as De,hw as pt,jq as qt,cT as Jt,jr as Ks,js as zt,jt as Vs,h as Ys,ju as Zs,o as Wt,br as ie,jv as Qs,cH as mt}from"./useAppFontEffects-khZXpFL_.js";import{o as r,s,r as Ve,b as K,n as V,_ as v,c as W,a as C,l as c,e as gn,d as Oe,j as Ye,N as er}from"./vendor-zod-CgAdXWZO.js";import{h as F,a as H,u as Ze,aS as tr,dH as nr,a2 as ft,dI as sr,a4 as rr,A as Qe,o as B,aa as or}from"./index-Cbci4i1W.js";import{c as ar}from"./vendor-zustand-BAGL70zf.js";import{toast as X}from"./vendor-sonner-DFyL3AvE.js";const ir=128,cr=65536,lr=2e3,ur=/^(>=)?\d+\.\d+\.\d+$/;class q extends Error{code;constructor(t,n){super(n),this.name="HostRequestError",this.code=t}}const dr=/^[a-z][a-z0-9-]*$/,pr=r({connected:K(),account:s(),hasClient:K(),settings:Ve(s().regex(dr),s()),redirectUri:s().optional()}),mr=r({authorizationUrl:s().min(1)}),fr=r({status:V().int().min(100).max(599),body:s()}),yr=r({error:s().min(1),message:s().min(1).optional()}),Xe=(e,t)=>({ok:!1,code:e,message:t}),hr=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=yr.safeParse(t);return o.success?Xe(Pe(o.data.error),o.data.message??o.data.error):Xe("HOST_REJECTED","Request failed.")}const n=fr.safeParse(t);return n.success?{ok:!0,result:n.data}:Xe("HOST_REJECTED","Request failed.")},Sr=e=>({connection:{connected:e.connected,account:e.account},settings:e.settings,hasClient:e.hasClient,redirectUri:e.redirectUri??""}),Me=async e=>{if(!e.ok)return null;const t=pr.safeParse(await e.json().catch(()=>null));return t.success?Sr(t.data):null},gr=async e=>{try{return await Me(await F(`/api/guests/${e}/oauth/status`))}catch{return null}},Ra=async(e,t,n)=>{const o={clientId:t};n&&(o.clientSecret=n);try{return await Me(await F(`/api/guests/${e}/oauth/client`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}))}catch{return null}},Aa=async(e,t,n)=>{try{return await Me(await F(`/api/guests/${e}/token`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n?{token:t,username:n}:{token:t})}))}catch{return null}},Ia=async(e,t)=>{try{return await Me(await F(`/api/guests/${e}/settings`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}))}catch{return null}},Er=async e=>{try{const t=await F(`/api/guests/${e}/oauth/start`,{method:"POST"});if(!t.ok)return null;const n=mr.safeParse(await t.json().catch(()=>null));return n.success?n.data.authorizationUrl:null}catch{return null}},Tr=async e=>{try{return await Me(await F(`/api/guests/${e}/oauth`,{method:"DELETE"}))}catch{return null}},kr=3*6e4,wr=1500,br=(e,t)=>t.connected?e.connected?t.account!==e.account:!0:!1,xr=async(e,t)=>{try{const n=await F(`/api/guests/${e}/request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return hr(n)}catch{return Xe("HOST_REJECTED","Request failed.")}};let yt=0;const Le=ar(e=>({byId:{},setStatus:(t,n)=>{e(o=>({byId:{...o.byId,[t]:n}}))},refresh:async t=>{const n=yt,o=H(),a=await gr(t);return n!==yt||H()!==o?null:(a&&e(p=>({byId:{...p.byId,[t]:a}})),a)},resetForRuntimeSwitch:()=>{yt++,e({byId:{}})}})),_r=r({status:V().int().min(100).max(599),body:s()}),vr=r({error:s().min(1),message:s().min(1).optional()}),Rr=r({status:v(["stopped","starting","ready","failed"])}),qe=(e,t)=>({ok:!1,code:e,message:t}),Ar=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=vr.safeParse(t);return o.success?qe(Pe(o.data.error),o.data.message??o.data.error):qe("HOST_REJECTED","Request failed.")}const n=_r.safeParse(t);return n.success?{ok:!0,result:n.data}:qe("HOST_REJECTED","Request failed.")},Ir=async(e,t)=>{try{const n=await F(`/api/guests/${e}/service/request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return Ar(n)}catch{return qe("HOST_REJECTED","Request failed.")}},Or=async e=>{try{const t=await F(`/api/guests/${e}/service/status`);if(!t.ok)return{ok:!1,code:"NO_SERVICE",message:"No service for this extension."};const n=Rr.safeParse(await t.json().catch(()=>null));return n.success?{ok:!0,result:n.data}:{ok:!1,code:"HOST_REJECTED",message:"Service status was empty."}}catch{return{ok:!1,code:"HOST_REJECTED",message:"Could not read service status."}}},Pr=r({guest:r({id:s().min(1)}).passthrough()}),Oa=async(e,t,n)=>{try{const o=await F(`/api/guests/${e}/service/sockets`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t,path:n})});return o.ok?Pr.safeParse(await o.json().catch(()=>null)).success:!1}catch{return!1}},En=e=>{const t=Ze.getState();for(const[n,o]of Object.entries(t.contextPanelByDirectory)){const a=o.tabs.filter(p=>p.mode===e).map(p=>p.id);a.length>0&&t.closeContextPanelTabs(n,a)}},Pa=e=>En(tr(e)),_t=e=>Ce.test(e)||ls(e),Kt=e=>{try{const t=new URL(e);return t.protocol==="https:"&&t.username===""&&t.password===""}catch{return!1}},Tn=e=>{try{const t=new URL(e);return t.protocol==="https:"&&t.username===""&&t.password===""&&t.pathname==="/"&&t.search===""&&t.hash===""&&e===t.origin}catch{return!1}},kn=e=>!e.startsWith("/")||e.includes("\0")||e.includes("\\")||e.includes("://")?!1:!e.split("/").some(n=>n==="."||n===".."),wn=/^[A-Za-z][A-Za-z0-9_]*(\.[A-Za-z][A-Za-z0-9_]*)*$/,bn=v(["panel","dialog"]),Cr=r({mode:bn,entry:s().trim().refine(Ie).optional()}).refine(e=>e.mode==="dialog"||e.entry===void 0,{path:["entry"]}),Mr=W([K(),bn,Cr]),Gr=r({id:s().trim().regex(Ce),name:s().trim().min(1),icon:s().trim().refine(_t),entry:s().trim().refine(Ie).optional()}),Nr=r({id:s().trim().regex(Ce),label:s().trim().min(1)}),Ur=r({authorizeUrl:s().trim().refine(Kt),tokenUrl:s().trim().refine(Kt),apiOrigin:s().trim().refine(Tn),scopes:C(s().trim().min(1)).optional(),account:r({path:s().trim().refine(kn),name:s().trim().regex(wn)}).optional()}),jr=r({apiOrigin:s().trim().refine(Tn),account:r({path:s().trim().refine(kn),name:s().trim().regex(wn)}).optional(),scheme:v(["raw","bearer","basic"]).optional(),usernameLabel:s().trim().min(1).max(64).optional()}),Dr=r({provider:v(["linear"])}),Lr=r({name:s().trim().min(1),description:s().trim().min(1),oauth:Ur.optional(),token:jr.optional(),host:Dr.optional(),settings:C(Nr).optional()}).refine(e=>$n(e)!==null,{path:["oauth"]}),Vt=["linux","darwin","win32"],Ae=s().trim().min(1).max(512),Hr=r({linux:C(Ae).max(16).optional(),darwin:C(Ae).max(16).optional(),win32:C(Ae).max(16).optional()}).strict(),Br=r({id:s().trim().regex(Ce).max(64),path:Ae.optional(),candidates:Hr.optional()}).strict().refine(e=>!!e.path||!!e.candidates,{message:"socket binding needs path or candidates"}),Fr=e=>{const t={};if(e.candidates)for(const n of Vt){const o=e.candidates[n];o&&o.length>0&&(t[n]=[...o])}else if(e.path)for(const n of Vt)t[n]=[e.path];return{id:e.id,candidatesByPlatform:t}},$r=W([Ae.transform(e=>({id:e,candidatesByPlatform:{linux:[e],darwin:[e],win32:[e]}})),Br.transform(Fr)]),Xr=r({sockets:C($r).max(32).optional(),exec:C(s().trim().min(1).max(128)).max(32).optional()}).strict().transform(e=>{const t={};return e.sockets&&e.sockets.length>0&&(t.sockets=e.sockets),e.exec&&e.exec.length>0&&(t.exec=[...e.exec]),t}),qr=r({entry:s().trim().refine(Ie),runtime:c("host"),permissions:Xr.optional()}),xn=(e,t)=>new Set(e.map(t)).size===e.length,Jr=r({id:s().trim().regex(Ce).max(64),label:s().trim().min(1).max(Xn),icon:s().trim().refine(_t).optional(),where:v(["message","session"]),mode:v(["open","background"]).optional(),roles:C(v(["user","assistant"])).min(1).max(2).optional(),payload:C(v(["messages"])).max(1).optional()}).refine(e=>e.where==="message"||e.roles===void 0,{path:["roles"]}).refine(e=>e.where==="session"||e.payload===void 0,{path:["payload"]}),zr=C(Jr).min(1).max(qn).refine(e=>xn(e,t=>t.id),{message:"action ids must be unique"}),Wr=r({name:s().trim().regex(zn),description:s().trim().min(1).max(Jn).optional()}),Kr=C(Wr).min(1).max(Wn).refine(e=>xn(e,t=>t.name),{message:"command names must be unique"}),Vr=r({match:s().trim().min(1).max(es).regex(ts),name:s().trim().min(1).max(Qn).optional(),icon:s().trim().refine(_t).optional(),title:s().trim().min(1).max(Ut).optional(),subtitle:s().trim().min(1).max(Ut).optional(),output:v(Zn).optional(),language:s().trim().min(1).max(Yn).optional(),columns:C(s().trim().min(1).max(Kn)).min(1).max(Vn).optional()}).refine(e=>e.output==="code"||e.language===void 0,{path:["language"]}).refine(e=>e.output==="table"==(e.columns!==void 0),{path:["columns"]}),Yr=C(Vr).min(1).max(ns),Zr=r({panel:Gr,background:r({entry:s().trim().refine(e=>Ie(e)&&e.toLowerCase().endsWith(".html"))}).optional(),attach:Mr.optional(),page:W([c(!0),r({entry:s().trim().refine(Ie),title:s().trim().min(1).max(200).optional()})]).optional(),capabilities:C(v(as)).max(8).optional(),integration:Lr.optional(),service:qr.optional(),filesystem:C(s().max(ss).refine(rs)).min(1).max(os).optional(),actions:zr.optional(),commands:Kr.optional(),tools:Yr.optional()}),Qr=e=>{const t=[];return e.page!==void 0&&t.push("page"),e.attach!==void 0&&e.attach!==!1&&t.push("attach"),e.capabilities&&e.capabilities.length>0&&t.push("capabilities"),e.integration!==void 0&&t.push("integration"),e.service!==void 0&&t.push("service"),e.filesystem!==void 0&&t.push("filesystem"),e.actions!==void 0&&t.push("actions"),e.commands!==void 0&&t.push("commands"),t},eo=r({apiVersion:c(cs[0]),engines:r({openchamber:s().trim().regex(ur)}).strict().optional(),contributes:Zr.superRefine((e,t)=>{if(is(e))return;if(e.background){const o=[];e.page!==void 0&&o.push("page"),e.attach!==void 0&&e.attach!==!1&&o.push("attach"),e.actions?.some(a=>a.mode!=="background")&&o.push('actions with mode "open"'),o.length>0&&t.addIssue({code:"custom",path:["panel"],message:`${o.join(", ")} needs panel.entry; background-only actions must declare mode "background".`});return}const n=Qr(e);n.length!==0&&t.addIssue({code:"custom",path:["panel"],message:`${n.map(o=>`contributes.${o}`).join(", ")} needs panel.entry or background.entry; an extension without either may only declare tools.`})})}),to=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,no=s().trim().regex(to).max(64);r({version:no.optional(),openchamber:eo});W([r({openchamber:gn()}),r({openchamber:r({}).passthrough()})]);const $=s().trim().min(1).max(1024),He=v(["loading","ready","error"]),Yt=r({directory:$,name:s(),branch:s(),status:v(["ready","pending","invalid","missing"])}),Zt=Oe("kind",[r({kind:c("projects")}).strict(),r({kind:c("worktrees"),projectId:$}).strict(),r({kind:c("sessions"),projectId:$}).strict()]),_n=Oe("kind",[r({kind:c("projects"),state:He,projects:C(r({id:$,name:s(),directory:$}))}),r({kind:c("worktrees"),projectId:$,state:He,worktrees:C(Yt)}),r({kind:c("sessions"),projectId:$,state:He,coverage:C(r({directory:$,state:He})),sessions:C(r({id:$,title:s(),projectId:$,directory:$,parentId:$.nullable(),createdAt:V(),updatedAt:V(),archivedAt:V().nullable(),worktree:Yt.nullable(),activity:v(["unknown","idle","running","retrying","waiting-permission","waiting-question"]),outcome:v(["completed","failed"]).nullable(),items:C(r({id:$,data:Ye().optional()}))}))})]),so=W([K(),r({kind:c("existing"),directory:$}).strict(),r({kind:c("new"),name:s().trim().min(1).max(200).optional(),baseBranch:s().trim().min(1).max(200).optional()}).strict()]),Je=s().min(1).max(ir),ro=Oe("op",[r({op:c("get"),key:Je}).strict(),r({op:c("delete"),key:Je}).strict(),r({op:c("set"),key:Je,value:Ye().refine(e=>new TextEncoder().encode(JSON.stringify(e)).length<=cr)}).strict(),r({op:c("keys")}).strict()]),vn=W([r({storage:c(!0),op:c("get"),found:c(!1)}),r({storage:c(!0),op:c("get"),found:c(!0),value:Ye()}),r({storage:c(!0),op:v(["set","delete"])}),r({storage:c(!0),op:c("keys"),keys:C(Je).max(lr)})]),E={channel:c(z),v:c(J)},oo=r({background:s().min(1),elevated:s().min(1),foreground:s().min(1),muted:s().min(1),subtle:s().min(1),border:s().min(1),hover:s().min(1),selection:s().min(1),focus:s().min(1),primary:s().min(1),mutedSurface:s().min(1),elevatedForeground:s().min(1),active:s().min(1),selectionForeground:s().min(1),primaryForeground:s().min(1),primaryText:s().min(1),successText:s().min(1),warningText:s().min(1),errorText:s().min(1),infoText:s().min(1),success:s().min(1),warning:s().min(1),error:s().min(1),info:s().min(1),font:s().min(1),mono:s().min(1),radius:s().min(1)}),Rn=r({id:s().min(1),title:s().min(1),busy:K().optional().default(!1),model:s().min(1).max(sn).optional(),agent:s().min(1).max(nn).optional()}).nullable(),An=r({connected:K(),account:s().max(us)}),In=Ve(s().regex(ps),s().max(ds)),ao=r({status:V().int().min(100).max(599),body:s().max(ms)}),Qt=r({directory:s(),name:s(),branch:s(),status:v(["ready","pending","invalid","missing"])}),io=W([r({sessionId:s().min(1),sent:v(rn),directory:s().optional(),worktree:Qt.optional(),linked:K().optional()}),r({sessionId:gn(),sent:c("skipped"),directory:s(),worktree:Qt,failure:v(["bootstrap-failed","session-create-failed"])})]),co=r({sent:v(rn)}),lo=r({status:v(fs)}),uo=r({content:s().max(wt)}),po=r({written:c(!0)}),mo=r({entries:C(r({name:s().min(1),kind:v(on)})).max(an)}),fo=r({kind:v(cn),size:V().int().min(0),mtime:V().int().min(0)}),yo=r({text:s().max(ln)}),ho=W([vn,_n,io,ao,co,lo,uo,po,mo,fo,yo]),Re=r({providerId:s().trim().regex(Ts),id:s().trim().min(1).max(Es),title:s().trim().min(1).max(gs),url:s().trim().min(1).max(un),text:s().trim().min(1).max(Ss).optional(),kind:v(["issue","pull"]).optional(),author:s().trim().min(1).max(hs).optional(),branches:r({head:s().trim().min(1).max(jt),base:s().trim().min(1).max(jt)}).optional(),data:Ye().refine(e=>JSON.stringify(e).length<=ys).optional()}),On=v(["user","assistant"]),Pn=r({kind:c("message"),action:s().trim().min(1).max(64),sessionId:s().min(1),sessionTitle:s(),directory:s().nullable(),messageId:s().min(1),role:On,text:s().max(dn)}),Cn=r({kind:c("session"),action:s().trim().min(1).max(64),sessionId:s().min(1),sessionTitle:s(),directory:s().nullable(),messages:C(r({id:s().min(1),role:On,text:s().max(dn),createdAt:V().int().min(0)})).optional(),truncated:K().optional()}).refine(e=>JSON.stringify(e).length<=ks),Mn=W([Pn,Cn,Re]).nullable(),So=r({theme:r({mode:v(["light","dark"]),tokens:oo}),locale:s().min(1),directory:s().nullable(),session:Rn,surface:v(["panel","dialog","page","background"]),connection:An,settings:In,item:Mn}),go=r({...E,type:c("result"),id:s().min(1),ok:K(),error:s().min(1).optional(),code:s().min(1).optional(),payload:ho.optional()}).transform((e,t)=>e.ok?e.payload?{channel:e.channel,v:e.v,type:"result",id:e.id,ok:!0,payload:e.payload}:{channel:e.channel,v:e.v,type:"result",id:e.id,ok:!0}:e.error?{channel:e.channel,v:e.v,type:"result",id:e.id,ok:!1,error:e.error,code:Pe(e.code)}:(t.addIssue({code:"custom",message:"Failed result needs an error string."}),er));W([r({...E,type:c("workspace"),payload:r({subscriptionId:s().min(1).max(128),snapshot:_n})}),r({...E,type:c("ready"),payload:So}),r({...E,type:c("directory"),payload:r({directory:s().nullable()})}),r({...E,type:c("session"),payload:r({session:Rn})}),r({...E,type:c("connection"),payload:r({connection:An})}),r({...E,type:c("settings"),payload:r({settings:In})}),r({...E,type:c("session-lifecycle"),payload:r({sessionId:s().min(1),phase:v(ws)})}),r({...E,type:c("item"),payload:r({item:Mn})}),r({...E,type:c("resolve"),id:s().min(1),payload:r({command:s().min(1),args:s()})}),go,r({...E,type:c("action"),id:s().min(1),payload:W([Pn,Cn])})]);const Be=s().min(1).max(bs).refine(xs),Eo=Oe("type",[r({...E,type:c("action-result"),id:s().min(1),payload:Oe("ok",[r({ok:c(!0)}),r({ok:c(!1),error:s().trim().min(1).max(Dt)})])}),r({...E,type:c("workspace-read"),id:s().min(1),payload:Zt}),r({...E,type:c("workspace-subscribe"),id:s().min(1),payload:r({subscriptionId:s().min(1).max(128),query:Zt})}),r({...E,type:c("workspace-unsubscribe"),id:s().min(1),payload:r({subscriptionId:s().min(1).max(128)})}),r({...E,type:c("storage"),id:s().min(1),payload:ro}),r({...E,type:c("open-session"),id:s().min(1),payload:r({sessionId:s().min(1).max(1024)})}),r({...E,type:c("hello")}),r({...E,type:c("toast"),id:s().min(1),payload:r({kind:v(["info","success","error"]),message:s().trim().min(1).max(_s),copy:W([K(),r({text:s().min(1).max(Lt)})]).optional(),dismiss:K().optional(),persistent:K().optional()})}),r({...E,type:c("open-url"),id:s().min(1),payload:r({url:s().trim().min(1).max(un)})}),r({...E,type:c("open-surface"),id:s().min(1),payload:r({surfaceId:s().trim().min(1).max(64)})}),r({...E,type:c("clipboard-write"),id:s().min(1),payload:r({text:s().min(1).max(Lt)})}),r({...E,type:c("compose"),id:s().min(1),payload:r({text:s().trim().min(1).max(Ht),mode:v(["replace","append"]).optional()})}),r({...E,type:c("attach"),id:s().min(1),payload:Re}),r({...E,type:c("start-session"),id:s().min(1),payload:Re.extend({worktree:so.optional(),projectId:s().trim().min(1).max(1024).optional(),navigation:v(["preserve","open"]).optional()})}),r({...E,type:c("prompt"),id:s().min(1),payload:r({text:s().trim().min(1).max(Ht),send:K().optional()})}),r({...E,type:c("session-link"),id:s().min(1),payload:Re}),r({...E,type:c("close"),id:s().min(1)}),r({...E,type:c("oauth-start"),id:s().min(1)}),r({...E,type:c("oauth-disconnect"),id:s().min(1)}),r({...E,type:c("request"),id:s().min(1),payload:r({method:v(["GET","POST","PUT","PATCH","DELETE"]),path:s().trim().min(1).max(Ft).refine($t),query:Ve(s().min(1).max(128),s().max(2e3)).optional(),body:s().max(Bt).optional()})}),r({...E,type:c("service-request"),id:s().min(1),payload:r({method:v(["GET","POST","PUT","PATCH","DELETE"]),path:s().trim().min(1).max(Ft).refine($t),query:Ve(s().min(1).max(128),s().max(2e3)).optional(),body:s().max(Bt).optional()})}),r({...E,type:c("service-status"),id:s().min(1)}),r({...E,type:c("file-read"),id:s().min(1),payload:r({path:Be})}),r({...E,type:c("file-write"),id:s().min(1),payload:r({path:Be,content:s().max(wt)})}),r({...E,type:c("file-list"),id:s().min(1),payload:r({path:Be})}),r({...E,type:c("file-stat"),id:s().min(1),payload:r({path:Be})}),r({...E,type:c("generate"),id:s().min(1),payload:r({prompt:s().trim().min(1).max(As),system:s().trim().min(1).max(Rs).optional(),maxOutputTokens:V().int().min(1).max(vs).optional()})}),r({...E,type:c("badge"),id:s().min(1),payload:r({count:V().int().min(0).max(Is).nullable()})}),r({...E,type:c("resolve-result"),id:s().min(1),payload:W([r({item:Re.nullable()}),r({error:s().trim().min(1).max(Dt)})])})]),To=e=>({channel:z,v:J,type:"ready",payload:e}),ko=e=>({channel:z,v:J,type:"directory",payload:{directory:e}}),wo=e=>({channel:z,v:J,type:"session",payload:{session:e}}),bo=e=>({channel:z,v:J,type:"connection",payload:{connection:e}}),xo=e=>({channel:z,v:J,type:"settings",payload:{settings:e}}),_o=e=>({channel:z,v:J,type:"item",payload:{item:e}}),vo=(e,t,n)=>({channel:z,v:J,type:"resolve",id:e,payload:{command:t,args:n}}),Ro=e=>({channel:z,v:J,type:"session-lifecycle",payload:e}),Ao=e=>e?.type==="busy"||e?.type==="retry"?"started":e?.type==="idle"?"completed":e?.type?"failure":null,Io=e=>{const t=e?.providerID?.trim(),n=e?.id?.trim();if(!(!t||!n))return`${t}/${n}`},Oo=e=>{if(!e?.id)return null;const t=e.title?.trim(),n={id:e.id,title:t||e.id,busy:!!e.busy},o=e.model?.trim().slice(0,sn);o&&(n.model=o);const a=e.agent?.trim().slice(0,nn);return a&&(n.agent=a),n},M=(e,t)=>t?{channel:z,v:J,type:"result",id:e,ok:!0,payload:t}:{channel:z,v:J,type:"result",id:e,ok:!0},N=(e,t,n="HOST_REJECTED")=>({channel:z,v:J,type:"result",id:e,ok:!1,error:t,code:n}),Fe=(e,t)=>t.ok?M(e,t.result):N(e,t.message,t.code),$e=e=>{try{const t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}},Po=async(e,t)=>{try{switch(e.type){case"workspace-read":return M(e.id,t.workspaceRead(e.payload));case"workspace-subscribe":return t.workspaceSubscribe(e.payload),M(e.id);case"workspace-unsubscribe":return t.workspaceUnsubscribe(e.payload.subscriptionId),M(e.id);case"storage":return M(e.id,await t.storage(e.payload));case"open-session":return t.openSession(e.payload.sessionId),M(e.id);case"hello":case"action-result":return null;case"toast":return t.toast(e.payload),M(e.id);case"open-url":return $e(e.payload.url)?await t.openUrl(e.payload.url)?M(e.id):N(e.id,"Could not open URL."):N(e.id,"URL must be http or https.");case"open-surface":return nr(e.payload.surfaceId)?(t.openSurface(e.payload.surfaceId),M(e.id)):N(e.id,"Unknown surface.");case"clipboard-write":return await t.writeClipboard(e.payload.text)?M(e.id):N(e.id,"Could not write clipboard.");case"compose":return t.compose(e.payload.text,e.payload.mode??"append"),M(e.id);case"attach":return $e(e.payload.url)?(t.attach(e.payload),M(e.id)):N(e.id,"URL must be http or https.");case"start-session":{if(!$e(e.payload.url))return N(e.id,"URL must be http or https.");const n=await t.startSession(e.payload);return n?"sessionId"in n?M(e.id,n):N(e.id,n.message,n.code):N(e.id,"Could not start that session.")}case"prompt":{const n=await t.prompt(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"session-link":{if(!$e(e.payload.url))return N(e.id,"URL must be http or https.");const n=await t.sessionLink(e.payload);return n.ok?M(e.id):N(e.id,n.message,n.code)}case"close":return t.close(),M(e.id);case"oauth-start":return await t.oauthStart()?M(e.id):N(e.id,"Could not start OAuth.");case"oauth-disconnect":return await t.oauthDisconnect()?M(e.id):N(e.id,"Could not disconnect.");case"request":{const n=await t.request(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"service-request":{const n=await t.serviceRequest(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"service-status":{const n=await t.serviceStatus();return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"file-read":return Fe(e.id,await t.file({op:"read",path:e.payload.path}));case"file-write":return Fe(e.id,await t.file({op:"write",path:e.payload.path,content:e.payload.content}));case"file-list":return Fe(e.id,await t.file({op:"list",path:e.payload.path}));case"file-stat":return Fe(e.id,await t.file({op:"stat",path:e.payload.path}));case"generate":{const n=await t.generate(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"badge":return t.setBadge(e.payload.count),M(e.id);case"resolve-result":return t.resolveResult(e.id,e.payload),null}}catch(n){return e.type==="hello"?null:N(e.id,n instanceof q?n.message:"Extension operation failed.",n instanceof q?n.code:"HOST_REJECTED")}},Co=W([r({content:s().max(wt)}),r({written:c(!0)}),r({entries:C(r({name:s().min(1),kind:v(on)})).max(an)}),r({kind:v(cn),size:V().int().min(0),mtime:V().int().min(0)})]),Mo=r({ok:c(!0),result:Co}),Go=r({error:s().min(1),message:s().min(1).optional()}),ze=(e,t)=>({ok:!1,code:e,message:t}),No=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=Go.safeParse(t);return o.success?ze(Pe(o.data.error),o.data.message??o.data.error):ze("HOST_REJECTED","File operation failed.")}const n=Mo.safeParse(t);return n.success?{ok:!0,result:n.data.result}:ze("HOST_REJECTED","File operation failed.")},Uo=async(e,t,n)=>{const o=new Headers({"Content-Type":"application/json"});n&&o.set("x-opencode-directory",n);try{const a=await F(`/api/guests/${e}/files`,{method:"POST",headers:o,body:JSON.stringify(t)});return No(a)}catch{return ze("HOST_REJECTED","File operation failed.")}},jo=r({ok:c(!0),result:r({text:s().max(ln)})}),Do=r({error:s().min(1),message:s().min(1).optional()}),We=(e,t)=>({ok:!1,code:e,message:t}),Tt="Text generation failed.",Lo=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=Do.safeParse(t);return o.success?We(Pe(o.data.error),o.data.message??o.data.error):We("HOST_REJECTED",Tt)}const n=jo.safeParse(t);return n.success?{ok:!0,result:n.data.result}:We("HOST_REJECTED",Tt)},Ho=async(e,t,n)=>{const o=new Headers({"Content-Type":"application/json"});n&&o.set("x-opencode-directory",n);try{const a=await F(`/api/guests/${e}/generate`,{method:"POST",headers:o,body:JSON.stringify(t)});return Lo(a)}catch{return We("HOST_REJECTED",Tt)}},ht="https://extension.invalid",Bo=500,Fo=40*1024*1024,en=64*1024*1024,St=async e=>{const t=new Uint8Array(await e.arrayBuffer());let n="";for(let o=0;o<t.length;o+=8192)n+=String.fromCharCode(...t.subarray(o,o+8192));return`data:${e.type||"application/octet-stream"};base64,${btoa(n)}`},$o=e=>e.replace(/\\(?:([0-9a-f]{1,6})\s?|([\s\S]))/gi,(t,n,o)=>{if(n){const a=Number.parseInt(n,16);return a>0&&a<=1114111?String.fromCodePoint(a):"�"}return o===`
2
+ `||o==="\r"?"":o??""}),Xo=/\/\*[\s\S]*?\*\/|"(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|\burl\(\s*(?:"((?:\\[\s\S]|[^"\\])*)"|'((?:\\[\s\S]|[^'\\])*)'|((?:\\[\s\S]|[^)\\])*?))\s*\)|@import\s+(?:"((?:\\[\s\S]|[^"\\])*)"|'((?:\\[\s\S]|[^'\\])*)')/gi,qo=async(e,t,n)=>{const o=`/api/guests/${e}/`,a=new URL(t,`${ht}${o}`),p=new Map;let x=0,w=0;const A=async i=>{if(i.origin!==ht||!i.pathname.startsWith(o))throw new Error("Extension resource is outside its package");const f=await n(`${i.pathname}${i.search}`);if(!f.ok)throw new Error(`Could not load extension resource (HTTP ${f.status})`);const b=f.body?.getReader();if(!b)throw new Error("Extension resource has no response body");const m=[];try{for(;;){const{done:l,value:u}=await b.read();if(l)break;if(x+=u.byteLength,x>Fo)throw new Error("Extension document exceeds the resource size limit");m.push(new Uint8Array(u))}}catch(l){throw await b.cancel().catch(()=>{}),l}finally{b.releaseLock()}return new Blob(m,{type:f.headers.get("content-type")?.split(";")[0]||"application/octet-stream"})},G=async(i,f,b)=>{const m=i.trim();if(!m||m.startsWith("#"))return i;const l=new URL(m,f);if(l.origin!==ht)return l.href;const u=l.hash;l.hash="";const T=l.href;if(b.includes(T))throw new Error("Circular extension resource reference");let g=p.get(T);if(!g){if(p.size>=Bo)throw new Error("Extension document has too many resources");const R=[...b,T];g=A(l).then(async U=>{const Z=U.type.split(";")[0];return Z==="text/css"||l.pathname.endsWith(".css")?St(new Blob([await h(await U.text(),l,R)],{type:"text/css"})):St(Z==="text/html"?new Blob([await O(await U.text(),l,R)],{type:"text/html"}):U)}),p.set(T,g)}const P=`${await g}${u}`;if(w+=P.length,w>en)throw new Error("Extension document exceeds the embedded size limit");return P},h=async(i,f,b)=>{let m="",l=0;for(const u of i.matchAll(Xo)){const T=u[1]??u[2]??u[3]??u[4]??u[5];if(T===void 0)continue;m+=i.slice(l,u.index);const g=await G($o(T.trim()),f,b),P=JSON.stringify(g);m+=u[4]!==void 0||u[5]!==void 0?`@import url(${P})`:`url(${P})`,l=u.index+u[0].length}return m+i.slice(l)},_=async(i,f,b)=>{const m=[];let l=i;for(;l.trim();){l=l.replace(/^[\s,]+/,"");const u=/^\S+/.exec(l);if(!u)break;const T=u[0];l=l.slice(T.length);let g="";if(!T.endsWith(",")){const R=l.indexOf(",");g=(R<0?l:l.slice(0,R)).trim(),l=R<0?"":l.slice(R+1)}const P=await G(T.replace(/,+$/,""),f,b);m.push(g?`${P} ${g}`:P)}return m.join(", ")},O=async(i,f,b)=>{const m=new DOMParser().parseFromString(i,"text/html"),l=m.querySelector("base[href]")?.getAttribute("href"),u=m.querySelector("base[target]")?.getAttribute("target"),T=l?new URL(l,f):f;for(const R of m.querySelectorAll("base"))R.remove();const g=m.createElement("base");g.href=T.href,u&&(g.target=u),m.head.prepend(g);for(const R of m.querySelectorAll("script[src], link[href], img[src], source[src], video[src], audio[src], iframe[src], embed[src], object[data], image[href], image[xlink\\:href], use[href], use[xlink\\:href]"))for(const U of["src","href","data","xlink:href"]){const Z=R.getAttribute(U);Z!==null&&R.setAttribute(U,await G(Z,T,b))}for(const R of m.querySelectorAll("[poster]"))R.setAttribute("poster",await G(R.getAttribute("poster")??"",T,b));for(const R of m.querySelectorAll("img[srcset], source[srcset]"))R.setAttribute("srcset",await _(R.getAttribute("srcset")??"",T,b));for(const R of m.querySelectorAll("style"))R.textContent=await h(R.textContent??"",T,b);for(const R of m.querySelectorAll("[style]"))R.setAttribute("style",await h(R.getAttribute("style")??"",T,b));const P=`<!doctype html>
3
+ ${m.documentElement.outerHTML}`;if(P.length>en)throw new Error("Extension document exceeds the size limit");return P},S=await A(a);if(S.type.split(";")[0]!=="text/html")throw new Error("Extension entry is not HTML");return O(await S.text(),a,[a.href])},Jo=async(e,t,n)=>{const o=H(),a=ft();if(a){const w=await qo(e,t,A=>{if(H()!==o||ft()!==a||n?.aborted)throw new DOMException("Extension frame owner changed","AbortError");return F(A,{signal:n})});if(H()!==o||ft()!==a||n?.aborted)throw new DOMException("Extension frame owner changed","AbortError");return{kind:"document",html:w}}const{token:p,expiresAt:x}=await sr(e);if(o!==H())throw new Error("Runtime changed while authorizing extension frame");return{kind:"url",url:rr().assetWithUrlToken(`/api/guests/${e}/${t}`,p,{oc_ui:"issue-page"}),expiresAt:x}},zo=e=>{const t=Fn.c(31),{guestId:n,entry:o,instanceKey:a,enabled:p}=e,[x,w]=y.useState(null),[A,G]=y.useState(0),h=y.useRef(!1),[_,O]=y.useState(H);let S;t[0]!==p||t[1]!==o||t[2]!==n||t[3]!==a||t[4]!==_?(S=JSON.stringify([_,n,o,a,p]),t[0]=p,t[1]=o,t[2]=n,t[3]=a,t[4]=_,t[5]=S):S=t[5];const i=S;let f,b;t[6]===Symbol.for("react.memo_cache_sentinel")?(f=()=>Qe(se=>{O(se.runtimeKey)}),b=[],t[6]=f,t[7]=b):(f=t[6],b=t[7]),y.useEffect(f,b);let m;t[8]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{h.current=!1},t[8]=m):m=t[8];let l;t[9]!==i?(l=[i],t[9]=i,t[10]=l):l=t[10],y.useEffect(m,l);let u;t[11]!==p||t[12]!==o||t[13]!==n||t[14]!==i?(u=()=>{if(w({key:i,status:"loading"}),!o||!p)return;let se=!1;const de=new AbortController;return Jo(n,o,de.signal).then(xe=>{se||w({key:i,status:"ready",source:xe})}).catch(()=>{se||w({key:i,status:"error"})}),()=>{se=!0,de.abort()}},t[11]=p,t[12]=o,t[13]=n,t[14]=i,t[15]=u):u=t[15];let T;t[16]!==p||t[17]!==o||t[18]!==n||t[19]!==i||t[20]!==A?(T=[p,o,n,i,A],t[16]=p,t[17]=o,t[18]=n,t[19]=i,t[20]=A,t[21]=T):T=t[21],y.useEffect(u,T);const g=x?.key===i&&x.status==="ready"?x.source:null;let P;t[22]!==g||t[23]!==i?(P=()=>g?g.kind==="document"||Date.now()<g.expiresAt?!1:(h.current?w({key:i,status:"error"}):(w({key:i,status:"loading"}),h.current=!0,G(Wo)),!0):!0,t[22]=g,t[23]=i,t[24]=P):P=t[24];const R=P;let U;t[25]===Symbol.for("react.memo_cache_sentinel")?(U=()=>{h.current=!1},t[25]=U):U=t[25];const Z=U,he=g?.kind==="url"?g.url:"",we=g?.kind==="document"?g.html:void 0,be=x?.key===i?x.status:"loading";let ue;return t[26]!==R||t[27]!==he||t[28]!==we||t[29]!==be?(ue={src:he,srcDoc:we,status:be,recoverExpiredNavigation:R,acknowledgeHandshake:Z},t[26]=R,t[27]=he,t[28]=we,t[29]=be,t[30]=ue):ue=t[30],ue};function Wo(e){return e+1}const Gn="/api/linear/issues/get",Ko=(e,t)=>e==="host"&&t.method==="GET"&&t.path===Gn,Vo=async(e,t)=>{if(Ko(e,t))try{const n=await F(Gn,{query:t.query});return{status:n.status,body:await n.text()}}catch{return null}},Yo=e=>{const t=xt.getState();if(!t.hasServerSnapshot)throw new q("HOST_UNAVAILABLE","The project registry has not loaded.");const n=t.projects.find(o=>o.id===e);if(!n)throw new q("NOT_FOUND","Project is not registered.");return n},Ke=e=>ne.getState().availableWorktreesByProject.get(B(e)??e)??[],Nn=e=>({directory:e.path,name:e.name??e.label,branch:e.branch,status:e.worktreeStatus==="not-a-repo"?"invalid":e.worktreeStatus??"ready"}),Zo=e=>e.includes("error")?"error":e.includes("loading")?"loading":"ready",Qo=(e,t,n,o)=>{const a=e.directory,p=fn(a),x=mn.getState(),w=x.statusById.get(e.id),A=(w&&B(w.directory)===B(a)?w.status:void 0)??p?.session_status[e.id],G=x.observedById.get(e.id),h=G&&B(G.directory)===B(a)?G:void 0,_=ne.getState().worktreeMetadata.get(e.id),O=o.get(B(a)??a)??(_&&B(_.path)===B(a)?Nn(_):null),S=le.getState().isConnected;let i="unknown";return S&&(A?.type==="busy"?i="running":A?.type==="retry"?i="retrying":(A?.type==="idle"||p?.sessionStatusReady||h)&&(i="idle"),p?.permission[e.id]?.length?i="waiting-permission":p?.question[e.id]?.length&&(i="waiting-question")),{id:e.id,title:e.title||e.id,projectId:t,directory:a,parentId:e.parentID??null,createdAt:e.time.created,updatedAt:e.time.updated,archivedAt:e.time.archived||null,worktree:O,activity:i,outcome:i==="idle"?h?.outcome??null:null,items:Ps(e).flatMap(f=>{if(f.kind!=="guest"||f.providerId!==n)return[];const b={id:f.identifier};return f.data!==void 0&&(b.data=f.data),[b]})}},kt=(e,t)=>{const n=xt.getState();if(e.kind==="projects")return{kind:"projects",state:n.serverSnapshotFailed?"error":n.hasServerSnapshot?"ready":"loading",projects:n.hasServerSnapshot?n.projects.map(i=>({id:i.id,name:i.label||i.path.split("/").pop()||i.path,directory:i.path})):[]};const o=n.projects.find(i=>i.id===e.projectId),a=ne.getState(),p=o?B(o.path)??o.path:"",x=o?a.worktreeDiscoveryByProject.get(p)??"loading":n.hasServerSnapshot?"error":"loading",w=o?Ke(o.path).map(Nn):[];if(e.kind==="worktrees")return{...e,state:x,worktrees:w};const A=new Set(o?[p,...w.map(i=>B(i.directory)??i.directory)]:[]),G=pn(),h=bt.getState(),_=[...A].map(i=>{const b=G.getBootstrapState(i)==="failed"||h.status==="error"?"error":h.status==="ready"?"ready":"loading";return{directory:i,state:b}}),O=new Map;for(const i of A)for(const f of h.structure.activeIdsByDirectory.get(i)??[]){const b=h.entityById.get(f);b&&O.set(f,b)}for(const i of h.archivedSessions)A.has(B(i.directory)??i.directory)&&O.set(i.id,i);for(const i of A)for(const f of fn(i)?.session??[])A.has(B(f.directory)??f.directory)&&(O.has(f.id)||O.set(f.id,f));const S=new Map(w.map(i=>[B(i.directory)??i.directory,i]));return{...e,state:Zo([x,..._.map(i=>i.state)]),coverage:_,sessions:[...O.values()].map(i=>Qo(i,e.projectId,t,S))}},gt=new Map,ea=(e,t,n)=>{const o=JSON.stringify([H(),t,e]);let a=gt.get(o);if(!a){const x=new Set,w={listeners:x,snapshot:kt(e,t),dispose:()=>{}};let A=!1,G=!1,h=JSON.stringify(w.snapshot);const _=()=>{A||G||(A=!0,queueMicrotask(()=>{if(A=!1,G)return;const S=kt(e,t),i=JSON.stringify(S);if(i!==h){h=i,w.snapshot=S;for(const f of x)f(S)}}))},O=[xt.subscribe((S,i)=>{(S.projects!==i.projects||S.hasServerSnapshot!==i.hasServerSnapshot||S.serverSnapshotFailed!==i.serverSnapshotFailed)&&_()})];if(e.kind!=="projects"&&O.push(ne.subscribe((S,i)=>{(S.availableWorktreesByProject!==i.availableWorktreesByProject||S.worktreeDiscoveryByProject!==i.worktreeDiscoveryByProject||S.worktreeMetadata!==i.worktreeMetadata)&&_()})),e.kind==="sessions"){const S=pn();O.push(bt.subscribe((i,f)=>{(i.activeSessions!==f.activeSessions||i.archivedSessions!==f.archivedSessions||i.status!==f.status)&&_()}),mn.subscribe(_),le.subscribe((i,f)=>{i.isConnected!==f.isConnected&&_()}),S.subscribeBootstrap(_),S.subscribeAllSelected(i=>i.session,_),S.subscribeAllSelected(i=>i.permission,_),S.subscribeAllSelected(i=>i.question,_),S.subscribeAllSelected(i=>i.sessionStatusReady,_))}w.dispose=()=>{G=!0;for(const S of O)S();gt.delete(o)},O.push(Qe(w.dispose)),gt.set(o,w),a=w}a.listeners.add(n),n(a.snapshot);const p=a;return()=>{p.listeners.delete(n),p.listeners.size===0&&p.dispose()}},ta=e=>{const t=Os().get(e)??bt.getState().entityById.get(e);if(!t?.directory)throw new q("NO_SESSION","Session is not available.");ne.getState().setCurrentSession(e,t.directory),Ze.getState().closeMainSurfaces()},na=e=>`${e.id} ${e.title}`.trim(),sa=(e,t)=>{const n=e.replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();return`${t==="pull"?"pr":"issue"}-${n||"guest"}`},Un=(e,t,n)=>{const o=t?.trim()??"";if(!o)return{ok:!1,reason:"no-directory"};const a=js(e),p=a.kind==="pull"?"pull":"issue",x={ok:!0,directory:o,title:na(a),worktree:!!a.worktree,branchName:sa(a.id,p),kind:p==="pull"?"pr":"standard",linked:Ds({providerId:a.providerId,identifier:a.id,title:a.title,url:a.url,thread:p,author:a.author,head:a.branches?.head,base:a.branches?.base,data:a.data,linkedAt:n})};return a.text&&(x.text=a.text),x},ra=async(e,t)=>{const n=e.worktree?await t.createWorktree(e.directory,e.branchName,e.kind):await t.createSession(e.title,e.directory);if(!n)return{ok:!1,reason:e.worktree?"worktree-failed":"create-failed"};if(t.initializeSession(n.id),t.closeSurfaces(),await t.setLinkedIssue(n.id,n.directory,e.linked),!e.text)return{ok:!0,sessionId:n.id,sent:"skipped"};const o=await t.sendFirstMessage(n.id,n.directory,e.text);return{ok:!0,sessionId:n.id,sent:o}},oa=()=>{const e=le.getState();if(e.settingsDefaultAgent)return e.settingsDefaultAgent;const t=e.agents.filter(n=>!n.hidden);return e.currentAgentName||t.find(n=>n.mode==="primary"||!n.mode)?.name||t[0]?.name},aa=()=>{const e=$s(le.getState().settingsDefaultModel);return!e||!le.getState().getModelMetadata(e.providerId,e.modelId)?null:{providerID:e.providerId,modelID:e.modelId}},ia=(e,t)=>{const n=le.getState(),o=n.settingsDefaultVariant,a=n.currentProviderId===e&&n.currentModelId===t?n.currentVariant:void 0,x=n.providers.find(A=>A.id===e)?.models.find(A=>A.id===t),w=Xs(x);if(w.length===0)return o||a||void 0;if(o&&w.includes(o))return o;if(a&&w.includes(a))return a},jn=()=>{const e=le.getState(),t=Ls.getState().lastUsedProvider,n=aa(),o=n?.providerID||e.currentProviderId||t?.providerID,a=n?.modelID||e.currentModelId||t?.modelID,p=oa()||e.currentAgentName||void 0;return!o||!a?null:{providerID:o,modelID:a,agentName:p,variant:ia(o,a)}},Dn=async(e,t,n,o=jn())=>{if(!o)return"no-model";try{return await ne.getState().sendMessage(n,o.providerID,o.modelID,o.agentName,void 0,void 0,void 0,o.variant,void 0,{sessionId:e,directory:t}),"sent"}catch{return"failed"}},ca=(e,t,n,o)=>{const a=n?.trim()??"";if(!a)return{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"};const p=t?.trim()??"";if(!p)return{ok:!1,code:"NO_SESSION",message:"No open session.",toastKey:"contextPanel.plugin.sessionLink.noSession"};const x=Un(e,a,o);return x.ok?{ok:!0,sessionId:p,directory:a,linked:x.linked}:{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"}},la=async e=>{const t=ca(e.request,e.sessionId,e.directory,Date.now());if(!t.ok)return X.error(e.t(t.toastKey)),{ok:!1,code:t.code,message:t.message};try{return await yn(t.sessionId,t.directory,t.linked,!0),X.success(e.t("contextPanel.plugin.sessionLink.linked")),{ok:!0}}catch{return X.error(e.t("contextPanel.plugin.sessionLink.failed")),{ok:!1,code:"HOST_REJECTED",message:"Could not link that item."}}},ua=e=>{const t=Us(e.request),n=e.sessionId?.trim()??"";if(!n)return{ok:!1,code:"NO_SESSION",message:"No open session.",toastKey:"contextPanel.plugin.prompt.noSession"};if(!t.send)return{ok:!0,action:"compose",text:t.text};if(e.busy)return{ok:!1,code:"SESSION_BUSY",message:"Session is busy.",toastKey:"contextPanel.plugin.prompt.busy"};const o=e.directory?.trim()??"";return o?{ok:!0,action:"send",text:t.text,sessionId:n,directory:o}:{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"}},da=async e=>{const t=ua(e);if(!t.ok)return X.error(e.t(t.toastKey)),{ok:!1,code:t.code,message:t.message};if(t.action==="compose")return e.compose(t.text,"replace"),{ok:!0,result:{sent:"skipped"}};const n=await Dn(t.sessionId,t.directory,t.text);return n==="no-model"?X.error(e.t("contextPanel.plugin.prompt.noModel")):n==="failed"&&X.error(e.t("contextPanel.plugin.prompt.sendFailed")),{ok:!0,result:{sent:n}}},pa=async e=>{e.assertAuthorized();const t=e.request.projectId?Yo(e.request.projectId):e.directory?Cs(e.directory):null,n=e.request.worktree;let o=e.request.projectId?t?.path??null:e.directory,a;if(n&&n!==!0&&n.kind==="existing"){if(!t)throw new q("NO_DIRECTORY","Project is not registered.");if(a=Ke(t.path).find(m=>B(m.path)===B(n.directory)),!a)throw new q("NOT_FOUND","Worktree does not belong to this project or has not loaded yet.");if(a.worktreeStatus==="missing"||a.worktreeStatus==="invalid"||a.worktreeStatus==="not-a-repo")throw new q("HOST_REJECTED","Worktree is unavailable.");o=a.path}const p=n===!0||!!(n&&n.kind==="new"),x=Un({...e.request,worktree:p},o,Date.now());if(!x.ok)return X.error(e.t("contextPanel.plugin.startSession.noProject")),null;const w=e.request.navigation??"preserve",A=jn();let G=!1;const h=Qe(()=>{G=!0}),_=()=>{if(G)throw new q("DISCONNECTED","The connected server changed.");e.assertAuthorized()};let O="session-create-failed",S=!0,i=o??"";const f=()=>{if(!a)return;const m=t?Ke(t.path).find(l=>l.path===a?.path)??a:a;return{directory:m.path,name:m.name??m.label,branch:m.branch,status:m.worktreeStatus==="not-a-repo"?"invalid":m.worktreeStatus??"ready"}},b=async(m,l)=>{if(a&&t){O="bootstrap-failed";const T=await Hs(t);_(),T&&await Bs(a.path)}_(),O="session-create-failed";const u=await Fs(m,l,null,void 0,void 0,w);if(_(),!u)return null;if(i=u.directory??l,a){const T=t?Ke(t.path).find(g=>g.path===a?.path):void 0;a={...a,worktreeStatus:T?.worktreeStatus??a.worktreeStatus},ne.getState().setWorktreeMetadata(u.id,a)}return{id:u.id,directory:i}};try{const m=await ra(x,{createSession:b,createWorktree:async(l,u,T)=>{if(!t)throw new q("NO_DIRECTORY","Project is not registered.");const g=n&&n!==!0&&n.kind==="new"?n:void 0,P=g?.name??`${u}-${Ms()}`,R=await Gs(t);return _(),a=await Ns(t,{preferredName:P,mode:"new",branchName:P,worktreeName:P,startRef:g?.baseBranch,setupCommands:R,returnAfterDirectoryCreated:!0}),_(),a={...a,kind:T,createdFromBranch:g?.baseBranch},b(x.title,a.path)},initializeSession:l=>{ne.getState().initializeNewOpenChamberSession(l,le.getState().agents)},setLinkedIssue:async(l,u,T)=>{_(),await yn(l,u,T,!0).catch(()=>{S=!1}),_()},sendFirstMessage:(l,u,T)=>(_(),Dn(l,u,T,A)),closeSurfaces:()=>{w==="open"&&Ze.getState().closeMainSurfaces()}});if(_(),!m.ok){const l=f();return l?{sessionId:null,sent:"skipped",directory:l.directory,worktree:l,failure:O}:(X.error(e.t("contextPanel.plugin.startSession.failed")),null)}return m.sent==="no-model"?X.error(e.t("contextPanel.plugin.startSession.noModel")):m.sent==="failed"?X.error(e.t("contextPanel.plugin.startSession.sendFailed")):X.success(e.t("contextPanel.plugin.startSession.created")),{sessionId:m.sessionId,sent:m.sent,directory:i,worktree:f(),linked:S}}catch(m){_();const l=f();if(l)return{sessionId:null,sent:"skipped",directory:l.directory,worktree:l,failure:O};throw m}finally{h()}},ma=async(e,t)=>{const n=await F(`/api/guests/${encodeURIComponent(e)}/storage`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new q("HOST_REJECTED","Storage operation failed. Check extension approval and storage limits.");return vn.parse(await n.json())},fa=({copyText:e,dismiss:t,onDismiss:n})=>{const{t:o}=hn(),[a,p]=y.useState("idle"),x=async()=>{if(!(e===void 0||a==="copying")){p("copying");try{const w=await Sn(e);p(w.ok?"copied":"failed")}catch{p("failed")}}};return ce.jsxs("div",{className:"ml-auto flex shrink-0 flex-col items-end gap-1",children:[ce.jsxs("div",{className:"flex items-center gap-2",children:[e!==void 0&&ce.jsx(Xt,{type:"button",variant:"secondary",size:"xs",disabled:a==="copying",onClick:()=>{x()},"aria-live":"polite",children:o(a==="copied"?"contextPanel.plugin.toast.copied":"contextPanel.plugin.toast.copy")}),t&&ce.jsx(Xt,{type:"button",size:"xs",onClick:n,children:o("contextPanel.plugin.toast.ok")})]}),a==="failed"&&ce.jsx("span",{role:"status",className:"typography-micro text-[var(--status-error-text)]",children:o("contextPanel.plugin.toast.copyFailed")})]})},ya=e=>{const t=e.copy===!0?e.message:e.copy?e.copy.text:void 0,n=e.dismiss===!0||e.persistent===!0;if(t===void 0&&!n){X[e.kind](e.message);return}const o=crypto.randomUUID(),a={id:o,action:ce.jsx(fa,{copyText:t,dismiss:n,onDismiss:()=>X.dismiss(o)})};e.persistent&&(a.duration=1/0),X[e.kind](e.message,a)},tn="*",ha='"SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif',Sa='ui-monospace, "SFMono-Regular", "Menlo", "Cascadia Mono", "Segoe UI Mono", monospace',ga="0.5625rem",ke="The user has not allowed this capability for the extension.",Ea=(e,t)=>e.type==="attach"||e.type==="start-session"||e.type==="session-link"?e.payload.providerId===t?e:{...e,payload:{...e.payload,providerId:t}}:e,Et=(e,t)=>getComputedStyle(document.documentElement).getPropertyValue(e).trim()||t,Ta=({mode:e,surface:t="panel",item:n,headless:o=!1,backgroundAction:a,onDismiss:p,onAttach:x,onSessionStarted:w})=>{const{t:A,locale:G}=hn(),{currentTheme:h}=qs(),_=Js(),O=ne(k=>k.currentSessionId),S=a?a.item.directory??"":_,i=a?a.item.sessionId:O,f=zs(i,S||void 0),b=Ws(i??"",S||void 0),m=y.useRef(null),l=or(e),u=De(k=>k.guests.find(Y=>Y.id===l)??null),T=De(k=>k.status),g=u?pt(u):!0,P=Le(k=>k.byId[l]),R=Le(k=>k.setStatus),U=Le(k=>k.refresh),Z=qt(k=>k.pendingItemByGuest[l]),he=qt(k=>k.takePendingItem),[we,be]=y.useState(null);y.useEffect(()=>{o||n!==void 0||!Z||be(he(l))},[l,o,n,Z,he]);const ue=o?null:n!==void 0?n:we,se=Jt(k=>k.clearBadge);y.useEffect(()=>{t==="panel"&&!o&&se(l)},[se,l,o,t]);const de=b?.type==="busy"||b?.type==="retry",xe=Ao(b),vt=y.useMemo(()=>Oo(i?{id:f?.id??i,title:f?.title??a?.item.sessionTitle,busy:de,model:Io(f?.model),agent:f?.agent}:null),[a,i,f,de]),pe=y.useMemo(()=>Ks(h),[h]),et=y.useMemo(()=>({theme:{mode:h.metadata.variant==="dark"?"dark":"light",tokens:{background:h.colors.surface.background,elevated:h.colors.surface.elevated,foreground:h.colors.surface.foreground,muted:h.colors.surface.mutedForeground,subtle:h.colors.surface.subtle,border:h.colors.interactive.border,hover:h.colors.interactive.hover,selection:h.colors.interactive.selection,focus:h.colors.interactive.focusRing,primary:h.colors.primary.base,mutedSurface:h.colors.surface.muted,elevatedForeground:h.colors.surface.elevatedForeground,active:h.colors.interactive.active,selectionForeground:pe.selectionForeground,primaryForeground:h.colors.primary.foreground??"#ffffff",primaryText:pe.tinted.primary,successText:pe.tinted.success,warningText:pe.tinted.warning,errorText:pe.tinted.error,infoText:pe.tinted.info,success:h.colors.status.success,warning:h.colors.status.warning,error:h.colors.status.error,info:h.colors.status.info,font:Et("--font-sans",ha),mono:Et("--font-mono",Sa),radius:Et("--radius",ga)}},locale:G,directory:S||null,session:vt,surface:o&&u?.backgroundEntry?"background":t,connection:P?.connection??zt,settings:P?.settings??{},item:ue}),[h,pe,S,u?.backgroundEntry,o,ue,G,P,vt,t]),_e=`${l}:${u?.version??""}:${g}:service-${u?.service?.granted?"1":"0"}:${u?.entry??""}:${u?.backgroundEntry??""}`,Ln=u?o?u.backgroundEntry??u.entry??null:t==="page"?u.pageEntry??null:t==="dialog"&&u.attachEntry?u.attachEntry:u.entry??null:null,{src:Ge,srcDoc:Ne,status:tt,recoverExpiredNavigation:Hn,acknowledgeHandshake:Rt}=zo({guestId:l,entry:Ln,instanceKey:_e,enabled:g}),Se=y.useRef(et);Se.current=et;const re=y.useRef(S);re.current=S;const nt=y.useRef(i);nt.current=i;const At=y.useRef(de);At.current=de;const D=y.useRef(l);D.current=l;const oe=y.useRef(g);oe.current=g;const Q=y.useRef(u);Q.current=u;const It=y.useRef(u?.integration?.auth);It.current=u?.integration?.auth;const Ue=y.useRef(A);Ue.current=A;const st=y.useRef(x);st.current=x;const rt=y.useRef(p);rt.current=p;const Ot=y.useRef(w);Ot.current=w;const je=y.useRef(null),ge=y.useRef(new Map),Pt=y.useRef(0),me=y.useCallback(()=>{je.current!=null&&(window.clearInterval(je.current),je.current=null)},[]),L=y.useCallback(k=>{m.current?.contentWindow?.postMessage(k,tn)},[]),ot=y.useCallback(()=>{const k=a?.takeMessage();k&&L(k)},[a,L]),at=y.useRef(!1),it=y.useRef(null),ct=y.useCallback(()=>{if(at.current||t!=="panel"||!o&&Q.current?.backgroundEntry)return;at.current=!0;const k=Q.current,Y=H();it.current=Vs(D.current,fe=>{const ee=De.getState().guests.find(ae=>ae.id===k?.id);return H()!==Y||!ee||!pt(ee)||ee.version!==k?.version||ee.entry!==k?.entry||ee.backgroundEntry!==k?.backgroundEntry?Promise.resolve({ok:!1,reason:"unavailable"}):new Promise(ae=>{Pt.current+=1;const te=`resolve-${Pt.current}`,ut=window.setTimeout(()=>{ge.current.delete(te),ae({ok:!1,reason:"timeout"})},Zs);ge.current.set(te,Ee=>{window.clearTimeout(ut),ge.current.delete(te),ae(Ee)}),m.current?.contentWindow?.postMessage(vo(te,fe.command,fe.args),tn)})})},[o,t]);y.useEffect(()=>()=>{it.current?.(),it.current=null,at.current=!1;for(const k of ge.current.values())k({ok:!1,reason:"unavailable"});ge.current.clear()},[_e,Ge,Ne]);const ve=y.useCallback(()=>{L(To(Se.current)),L(ko(re.current||null)),L(wo(Se.current.session)),L(bo(Se.current.connection)),L(xo(Se.current.settings)),L(_o(Se.current.item))},[L]);y.useEffect(()=>{u?.integration&&U(u.id)},[u?.id,u?.integration,U]),y.useEffect(()=>{u&&!g&&p?.()},[u,g,p]),y.useEffect(()=>{const k=new Map;let Y=!1;const fe=H(),ee=D.current,ae=()=>De.getState().guests.find(Te=>Te.id===ee)??null,te=()=>{for(const Te of k.values())Te();k.clear()},ut=Qe(()=>{Y=!0,te(),me()}),Ee=()=>{if(!ie(ae(),"sessions"))throw new q("NOT_GRANTED",ke)},Ct=Te=>{const dt=m.current;if(!dt||Te.source!==dt.contentWindow)return;const Mt=Eo.safeParse(Te.data);if(!Mt.success||Y||H()!==fe||a&&!a.isActive())return;const ye=Ea(Mt.data,D.current),Gt=ae();if(!Gt||!pt(Gt)){te(),"id"in ye&&L({channel:z,v:J,type:"result",id:ye.id,ok:!1,error:"Extension is unavailable.",code:"DISABLED"});return}if(ye.type==="hello"){Rt(),te(),ve(),ct(),ot();return}if(ye.type==="action-result"){ye.id===a?.id&&a.complete(ye.payload);return}Po(ye,{workspaceRead:d=>(Ee(),kt(d,D.current)),workspaceSubscribe:({subscriptionId:d,query:I})=>{if(Ee(),k.get(d)?.(),k.delete(d),k.size>=32)throw new q("HOST_REJECTED","At most 32 workspace subscriptions per frame.");k.set(d,ea(I,D.current,j=>{!Y&&ie(Q.current,"sessions")&&L({channel:z,v:J,type:"workspace",payload:{subscriptionId:d,snapshot:j}})}))},workspaceUnsubscribe:d=>{k.get(d)?.(),k.delete(d)},storage:d=>ma(D.current,d),openSession:d=>{Ee(),ta(d)},toast:d=>{oe.current&&ya(d)},openUrl:Wt,openSurface:d=>{const I=re.current||"";I&&Ze.getState().openContextSurface(I,d)},writeClipboard:async d=>(await Sn(d)).ok,compose:(d,I)=>{mt.getState().setPendingInputText(d,I)},attach:d=>{if(st.current){st.current(d);return}mt.getState().setPendingGuestIssue(d)},startSession:async d=>{if(!ie(Q.current,"sessions")||d.text&&!ie(Q.current,"prompt"))return{ok:!1,code:"NOT_GRANTED",message:ke};const I=await pa({request:d,directory:re.current||null,t:Ue.current,assertAuthorized:()=>{if(Ee(),d.text&&!ie(ae(),"prompt"))throw new q("NOT_GRANTED",ke)}});return I?.sessionId&&d.navigation==="open"&&(Ot.current?.(),rt.current?.()),I},prompt:d=>d.send&&!ie(Q.current,"prompt")?Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ke}):da({request:d,sessionId:nt.current,directory:re.current||null,busy:At.current,compose:(I,j)=>{mt.getState().setPendingInputText(I,j)},t:Ue.current}),sessionLink:d=>la({request:d,sessionId:nt.current,directory:re.current||null,t:Ue.current}),close:()=>{rt.current?.()},oauthStart:async()=>{if(!oe.current)return!1;const d=D.current,I=Le.getState().byId[d]?.connection??zt,j=await Er(d);if(!j||Y||H()!==fe)return!1;Wt(j),me();const Bn=Date.now()+kr;return je.current=window.setInterval(()=>{(async()=>{if(Date.now()>Bn){me();return}const Nt=await U(d);Nt&&br(I,Nt.connection)&&me()})()},wr),!0},oauthDisconnect:async()=>{const d=await Tr(ee);return!d||Y||H()!==fe?!1:(R(ee,d),!0)},request:async d=>{if(!oe.current)return{ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."};const I=await Vo(It.current,d);if(I!==void 0)return I?{ok:!0,result:I}:{ok:!1,code:"HOST_REJECTED",message:"Request failed."};const j=await xr(D.current,d);return j.ok||U(D.current),j},serviceRequest:d=>oe.current?Ir(D.current,d):Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."}),serviceStatus:()=>Or(D.current),file:d=>{if(!oe.current)return Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."});const I=Qs(d.path);if(!ie(Q.current,I==="project"?"files":"filesystem"))return Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ke});const j=re.current||null;return I==="project"&&!j?Promise.resolve({ok:!1,code:"NO_DIRECTORY",message:"No project is open."}):Uo(D.current,d,j)},generate:d=>oe.current?ie(Q.current,"model")?Ho(D.current,d,re.current||null):Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ke}):Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."}),setBadge:d=>{oe.current&&Jt.getState().setBadge(D.current,d)},resolveResult:(d,I)=>{const j=ge.current.get(d);if(j){if("error"in I){j({ok:!1,reason:"error",message:I.error});return}j({ok:!0,item:I.item})}}}).then(d=>{d&&!Y&&dt===m.current&&H()===fe&&(!a||a.isActive())&&L(d)})};return window.addEventListener("message",Ct),()=>{Y=!0,te(),ut(),window.removeEventListener("message",Ct)}},[Rt,a,_e,g,L,ve,U,ct,ot,R,Ge,Ne,me]),y.useEffect(()=>{a&&(tt==="error"||!g)&&a.complete({ok:!1,reason:"unavailable"})},[a,tt,g]);const lt=y.useRef(!1);return y.useEffect(()=>(lt.current=!0,()=>{lt.current=!1,queueMicrotask(()=>{lt.current||a?.complete({ok:!1,reason:"unavailable"})})}),[a]),y.useEffect(()=>()=>me(),[_e,me]),y.useEffect(()=>{ve()},[ve,et,S]),y.useEffect(()=>{o||T!=="ready"||u?.entry||(En(e),p?.())},[T,u?.entry,o,e,p]),y.useEffect(()=>{!i||!xe||L(Ro({sessionId:i,phase:xe}))},[i,xe,L]),!u&&T!=="ready"&&T!=="error"?null:!u||!Ge&&!Ne?ce.jsx("div",{className:"flex h-full items-center justify-center px-6 text-sm text-muted-foreground",children:A(u&&tt==="loading"?"common.loading":"contextPanel.plugin.loadFailed")}):g?ce.jsx("iframe",{ref:m,title:u.name,src:Ge||void 0,srcDoc:Ne,sandbox:"allow-scripts",className:Ys("h-full w-full min-h-0 min-w-0 border-0 overflow-hidden",t==="dialog"?"bg-transparent":"bg-[var(--surface-background)]"),onLoad:()=>{Hn()||(ve(),ct(),ot())}},_e):null},Ca=Object.freeze(Object.defineProperty({__proto__:null,PluginPane:Ta},Symbol.toStringTag,{value:"Module"}));export{kr as A,Ta as P,sa as a,Er as b,br as c,Tr as d,wr as e,Aa as f,na as g,Ra as h,Pa as i,Oa as j,Ca as k,Ia as s,Le as u};