@vantran-se/openchamber-web 2.0.4 → 2.0.5

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 (243) hide show
  1. package/dist/assets/{CodeMirrorCommentWidgets-DZF8ntaq.js → CodeMirrorCommentWidgets-DCAQTLMM.js} +1 -1
  2. package/dist/assets/DiffView-uzNpHBlV.js +4 -0
  3. package/dist/assets/FilesView-Bkq0sjNx.js +17 -0
  4. package/dist/assets/{GitView-DwQwqDvu.js → GitView-BmibZC7n.js} +4 -4
  5. package/dist/assets/{GuestAttachDialog-CoXM0gh_.js → GuestAttachDialog-D7TJG1rt.js} +1 -1
  6. package/dist/assets/GuestSurfacePane-PAcYaFzP.js +1 -0
  7. package/dist/assets/{JsonTreeView-Cq_27v0y.js → JsonTreeView-BNT2yUVu.js} +1 -1
  8. package/dist/assets/{LinearIssuesView-CsSSRMhn.js → LinearIssuesView-D3Azksju.js} +1 -1
  9. package/dist/assets/MarkdownImageGallery-BGY6tuiK.js +1 -0
  10. package/dist/assets/MarkdownRendererImpl-DJmhQ37f.js +12 -0
  11. package/dist/assets/{OnboardingScreen-ClatMQAX.js → OnboardingScreen-D_41H2qC.js} +1 -1
  12. package/dist/assets/{PatchDiff-DOwlrIK9.js → PatchDiff-C0RSqa9W.js} +1 -1
  13. package/dist/assets/{PierreDiffViewer-CrcGqqD_.js → PierreDiffViewer-BBE7tTY2.js} +3 -3
  14. package/dist/assets/{PlanView-BGLsMgQk.js → PlanView-Bqc-xuDe.js} +4 -4
  15. package/dist/assets/PluginPane-DQ0k41Q-.js +3 -0
  16. package/dist/assets/SettingsView-BAiJU5hJ.js +30 -0
  17. package/dist/assets/{SettingsWindow-B0BAy-f9.js → SettingsWindow-DuC4ecLw.js} +1 -1
  18. package/dist/assets/{SubmoduleDiffSummary-fcdDzCSW.js → SubmoduleDiffSummary-0HgmcMXz.js} +1 -1
  19. package/dist/assets/{ToolOutputDialog-B7xaUz2H.js → ToolOutputDialog-DdHkQJEE.js} +6 -6
  20. package/dist/assets/{ToolPartDiffPreview-CkWCaUmZ.js → ToolPartDiffPreview-DWdN0r5K.js} +2 -2
  21. package/dist/assets/{VirtualizedFileDiff-DONC4eI2.js → VirtualizedFileDiff-ClDezf2d.js} +1 -1
  22. package/dist/assets/{WalkthroughView-CXDImOXW.js → WalkthroughView-BJicp0RC.js} +2 -2
  23. package/dist/assets/{appThemeRegistry-Br2TLSlb.js → appThemeRegistry-CiuyzfSW.js} +1 -1
  24. package/dist/assets/changesTree-CePHbFcj.js +1 -0
  25. package/dist/assets/commitAndPush-DTKb6IwT.js +1 -0
  26. package/dist/assets/{computeVirtualFileMetrics-_-20umCs.js → computeVirtualFileMetrics-kM_zJNMt.js} +2 -2
  27. package/dist/assets/de-BMnfXm-G.js +10 -0
  28. package/dist/assets/es-DKEvCCL6.js +16 -0
  29. package/dist/assets/fr-D9fgE2xE.js +14 -0
  30. package/dist/assets/index-DUke1nme.css +1 -0
  31. package/dist/assets/{index-OKDYjcMF.js → index-DWB8bR_g.js} +1 -1
  32. package/dist/assets/index-Di6zUe5h.js +41 -0
  33. package/dist/assets/{isDiffPlainText-D77M6q1f.js → isDiffPlainText-DOoIsGqs.js} +1 -1
  34. package/dist/assets/{isFilePlainText-C54B4Mns.js → isFilePlainText-bt5VHvcd.js} +1 -1
  35. package/dist/assets/ja-BEXad-KW.js +16 -0
  36. package/dist/assets/ko-DGrQ0lEe.js +16 -0
  37. package/dist/assets/{main-CGEvLMd2.js → main-BpLQbZC2.js} +2 -2
  38. package/dist/assets/main-CI9DtHJv.js +896 -0
  39. package/dist/assets/{markdown-shiki.worker-CahLvHIq.js → markdown-shiki.worker-Bg8SoAJJ.js} +8 -5
  40. package/dist/assets/markdownCore-DK2KK5RW.js +7 -0
  41. package/dist/assets/{miniChat-BSxkRQLj.js → miniChat-CIWaR8wG.js} +2 -2
  42. package/dist/assets/{mobile-C5KRTNOB.js → mobile-CnWKEYIP.js} +2 -2
  43. package/dist/assets/patchFileDiff-Cqn0C0az.js +13 -0
  44. package/dist/assets/pl-BlhkmR5b.js +16 -0
  45. package/dist/assets/pt-BR-Bs96Ew9I.js +16 -0
  46. package/dist/assets/{renderElectronMiniChatApp-CnkAQV6o.js → renderElectronMiniChatApp-D9t0-9nV.js} +2 -2
  47. package/dist/assets/renderMobileApp-CW7fVs_s.js +25 -0
  48. package/dist/assets/runtimeEndpointReset-D0PcCb3K.js +27 -0
  49. package/dist/assets/scheduledTasksApi-Dahv3ws0.js +1 -0
  50. package/dist/assets/{shikiHighlight-4O0ZM14D.js → shikiHighlight-l-MbaNS4.js} +1 -1
  51. package/dist/assets/{textMateThemeFromAppTheme-yNq7b0DZ.js → textMateThemeFromAppTheme-C-kGcOpD.js} +1 -1
  52. package/dist/assets/tr-CehUK1M9.js +7 -0
  53. package/dist/assets/uk-Bno5WGNz.js +16 -0
  54. package/dist/assets/{useAppFontEffects-Bzyszv2N.js → useAppFontEffects-DDjuwVqi.js} +160 -156
  55. package/dist/assets/{useInlineCommentController-zOf6ORAq.js → useInlineCommentController-Clg8EO3A.js} +2 -2
  56. package/dist/assets/{useRootScrollLock-DCaZ4BWi.js → useRootScrollLock-nDcRrgJ1.js} +2 -2
  57. package/dist/assets/{vendor-codemirror-language-data-6cEFPNUR.js → vendor-codemirror-language-data-oKF0MAwd.js} +2 -2
  58. package/dist/assets/vendor-opencode-client-DSZl7jSi.js +12 -0
  59. package/dist/assets/vendor-zod-BSoePkpP.js +39 -0
  60. package/dist/assets/{web-components-BEo4-ISu.js → web-components-Bc1WPd4i.js} +1 -1
  61. package/dist/assets/zh-CN-DnAweIWo.js +16 -0
  62. package/dist/assets/zh-TW-BbBBK25p.js +16 -0
  63. package/dist/index.html +5 -5
  64. package/dist/mini-chat.html +5 -5
  65. package/dist/mobile.html +5 -5
  66. package/package.json +3 -3
  67. package/server/index.js +82 -0
  68. package/server/lib/agent-tool/DOCUMENTATION.md +132 -47
  69. package/server/lib/agent-tool/runtime.js +34 -15
  70. package/server/lib/agent-tool/runtime.test.js +15 -0
  71. package/server/lib/browser-control/DOCUMENTATION.md +14 -2
  72. package/server/lib/event-stream/global-hub.js +23 -1
  73. package/server/lib/event-stream/global-hub.test.js +35 -0
  74. package/server/lib/event-stream/global-ws-bridge.js +3 -1
  75. package/server/lib/event-stream/upstream-reader.js +3 -2
  76. package/server/lib/git/DOCUMENTATION.md +1 -1
  77. package/server/lib/git/service.js +22 -0
  78. package/server/lib/git/service.test.js +8 -0
  79. package/server/lib/guests/DOCUMENTATION.md +4 -3
  80. package/server/lib/guests/catalog.js +19 -1
  81. package/server/lib/guests/catalog.test.js +22 -0
  82. package/server/lib/guests/html-styles.js +5 -3
  83. package/server/lib/guests/html-styles.test.js +3 -1
  84. package/server/lib/guests/routes.js +11 -3
  85. package/server/lib/guests/service.js +5 -0
  86. package/server/lib/guests/surface.js +55 -9
  87. package/server/lib/guests/surface.test.js +56 -6
  88. package/server/lib/notifications/DOCUMENTATION.md +10 -0
  89. package/server/lib/notifications/emit-route.js +118 -0
  90. package/server/lib/notifications/emit-route.test.js +112 -0
  91. package/server/lib/openchamber-control/actions.js +16 -2
  92. package/server/lib/openchamber-control/service.js +23 -0
  93. package/server/lib/openchamber-control/service.test.js +31 -0
  94. package/server/lib/openchamber-sessions/fork-inheritance.js +103 -0
  95. package/server/lib/openchamber-sessions/fork-inheritance.test.js +69 -0
  96. package/server/lib/openchamber-sessions/routes.js +11 -0
  97. package/server/lib/openchamber-sessions/routes.test.js +18 -0
  98. package/server/lib/opencode/bootstrap-runtime.js +14 -1
  99. package/server/lib/opencode/compatibility.js +6 -3
  100. package/server/lib/opencode/compatibility.test.js +8 -0
  101. package/server/lib/opencode/config-entity-v2.test.js +27 -0
  102. package/server/lib/opencode/config-paths.test.js +12 -0
  103. package/server/lib/opencode/config-v2.d.ts +2 -0
  104. package/server/lib/opencode/config-v2.js +42 -0
  105. package/server/lib/opencode/config-v2.test.js +17 -0
  106. package/server/lib/opencode/core-routes.js +20 -4
  107. package/server/lib/opencode/core-routes.test.js +41 -0
  108. package/server/lib/opencode/env-runtime.js +1 -8
  109. package/server/lib/opencode/feature-routes-runtime.js +2 -1
  110. package/server/lib/opencode/lifecycle.js +30 -2
  111. package/server/lib/opencode/lifecycle.test.js +27 -0
  112. package/server/lib/opencode/managed-config-file.js +18 -6
  113. package/server/lib/opencode/managed-config-file.test.js +23 -7
  114. package/server/lib/opencode/mcp.js +7 -2
  115. package/server/lib/opencode/npm-registry-config.d.ts +1 -0
  116. package/server/lib/opencode/npm-registry-config.js +123 -0
  117. package/server/lib/opencode/npm-registry-config.test.js +167 -0
  118. package/server/lib/opencode/npm-registry.js +5 -6
  119. package/server/lib/opencode/npm-registry.test.js +30 -0
  120. package/server/lib/opencode/openchamber-routes.js +29 -11
  121. package/server/lib/opencode/openchamber-routes.test.js +18 -0
  122. package/server/lib/opencode/project-directory-runtime.js +8 -0
  123. package/server/lib/opencode/project-directory-runtime.test.js +13 -0
  124. package/server/lib/opencode/provider-source-route.test.js +59 -0
  125. package/server/lib/opencode/providers.js +3 -0
  126. package/server/lib/opencode/providers.test.js +62 -0
  127. package/server/lib/opencode/proxy.js +38 -2
  128. package/server/lib/opencode/routes-upgrade.test.js +1 -1
  129. package/server/lib/opencode/routes.js +36 -1
  130. package/server/lib/opencode/server-utils-runtime.js +5 -0
  131. package/server/lib/opencode/settings-helpers.js +10 -0
  132. package/server/lib/opencode/settings-helpers.test.js +2 -2
  133. package/server/lib/opencode/settings-registry.json +17 -0
  134. package/server/lib/opencode/settings-runtime.js +1 -0
  135. package/server/lib/opencode/shared.js +49 -4
  136. package/server/lib/opencode/shared.test.js +78 -1
  137. package/server/lib/opencode/shutdown-runtime.js +3 -0
  138. package/server/lib/opencode/skill-routes.js +28 -12
  139. package/server/lib/opencode/skill-routes.test.js +121 -1
  140. package/server/lib/opencode/upgrade-capability.js +0 -14
  141. package/server/lib/opencode/v1-migration-topup.js +21 -15
  142. package/server/lib/opencode/v1-migration-topup.test.js +14 -6
  143. package/server/lib/opencode/v2-install.d.ts +1 -0
  144. package/server/lib/opencode/v2-install.js +8 -7
  145. package/server/lib/opencode/v2-install.test.js +13 -4
  146. package/server/lib/opencode/watcher.js +3 -1
  147. package/server/lib/opencode/websearch-config.js +13 -1
  148. package/server/lib/quota/providers/kimi.js +1 -1
  149. package/server/lib/realtime-proxy.js +5 -1
  150. package/server/lib/realtime-proxy.test.js +29 -0
  151. package/server/lib/relay/tunnel-host.js +4 -1
  152. package/server/lib/relay/tunnel-host.test.js +11 -0
  153. package/server/lib/session-assist/DOCUMENTATION.md +17 -5
  154. package/server/lib/session-assist/runtime.js +19 -2
  155. package/server/lib/session-assist/runtime.test.js +8 -0
  156. package/server/lib/session-goal/DOCUMENTATION.md +11 -0
  157. package/server/lib/small-model/DOCUMENTATION.md +11 -10
  158. package/server/lib/small-model/index.js +27 -32
  159. package/server/lib/small-model/index.test.js +28 -16
  160. package/server/lib/spaces/DOCUMENTATION.md +404 -32
  161. package/server/lib/spaces/code-in-bait.js +145 -6
  162. package/server/lib/spaces/code-in.js +10 -150
  163. package/server/lib/spaces/code-in.test.js +7 -83
  164. package/server/lib/spaces/code-out.js +1819 -0
  165. package/server/lib/spaces/code-out.test.js +3945 -0
  166. package/server/lib/spaces/code-transfer.js +173 -0
  167. package/server/lib/spaces/command-stream.test.js +181 -0
  168. package/server/lib/spaces/dispatcher.js +670 -0
  169. package/server/lib/spaces/dispatcher.test.js +582 -0
  170. package/server/lib/spaces/gatekeeper-channel.js +61 -7
  171. package/server/lib/spaces/gatekeeper-channel.test.js +43 -7
  172. package/server/lib/spaces/gatekeeper-program.cjs +68 -14
  173. package/server/lib/spaces/gatekeeper-program.test.js +118 -3
  174. package/server/lib/spaces/hardening.js +20 -4
  175. package/server/lib/spaces/hardening.test.js +18 -3
  176. package/server/lib/spaces/host-git.js +7 -4
  177. package/server/lib/spaces/host-git.test.js +6 -2
  178. package/server/lib/spaces/host.js +310 -0
  179. package/server/lib/spaces/host.test.js +273 -0
  180. package/server/lib/spaces/journey.js +552 -0
  181. package/server/lib/spaces/journey.test.js +589 -0
  182. package/server/lib/spaces/layout.js +42 -8
  183. package/server/lib/spaces/manager.js +4 -3
  184. package/server/lib/spaces/manager.test.js +6 -0
  185. package/server/lib/spaces/places/code-out.docker.live.test.js +412 -0
  186. package/server/lib/spaces/places/contract-suite.js +36 -0
  187. package/server/lib/spaces/places/dispatcher.docker.live.test.js +296 -0
  188. package/server/lib/spaces/places/docker-live-support.js +27 -4
  189. package/server/lib/spaces/places/docker.js +33 -5
  190. package/server/lib/spaces/places/docker.test.js +42 -3
  191. package/server/lib/spaces/places/escape-suite.js +118 -14
  192. package/server/lib/spaces/places/fake-docker.js +3 -1
  193. package/server/lib/spaces/places/grants.docker.live.test.js +197 -0
  194. package/server/lib/spaces/places/memory-place.js +24 -1
  195. package/server/lib/spaces/places/registry.js +1 -1
  196. package/server/lib/spaces/places/server.docker.live.test.js +69 -33
  197. package/server/lib/spaces/places/sessions.docker.live.test.js +222 -0
  198. package/server/lib/spaces/routes.js +216 -0
  199. package/server/lib/spaces/routes.test.js +213 -0
  200. package/server/lib/spaces/run-command.js +261 -8
  201. package/server/lib/spaces/run-command.test.js +193 -3
  202. package/server/lib/spaces/space-events.js +153 -0
  203. package/server/lib/spaces/space-events.test.js +160 -0
  204. package/server/lib/spaces/space-opencode.js +52 -0
  205. package/server/lib/spaces/space-opencode.test.js +41 -0
  206. package/server/lib/spaces/space-records.js +150 -0
  207. package/server/lib/spaces/space-records.test.js +113 -0
  208. package/server/lib/spaces/space-sessions.js +210 -0
  209. package/server/lib/spaces/space-sessions.test.js +161 -0
  210. package/server/lib/spaces/websocket.js +329 -0
  211. package/server/lib/spaces/websocket.test.js +345 -0
  212. package/server/lib/ui-auth/ui-auth.js +8 -2
  213. package/server/lib/ui-auth/ui-auth.test.js +29 -0
  214. package/server/opencode-proxy.test.js +113 -0
  215. package/dist/assets/DiffView-D2p4Ar0H.js +0 -4
  216. package/dist/assets/FilesView-BeTtbsip.js +0 -17
  217. package/dist/assets/GuestSurfacePane-DIJvkkM-.js +0 -1
  218. package/dist/assets/MarkdownImageGallery-CY0dWTaE.js +0 -1
  219. package/dist/assets/MarkdownRendererImpl-ILdXzLrt.js +0 -12
  220. package/dist/assets/PluginPane-B39JEUL8.js +0 -3
  221. package/dist/assets/SettingsView-13B2_G-A.js +0 -29
  222. package/dist/assets/commitAndPush-CcI4ol7c.js +0 -1
  223. package/dist/assets/de-BtYnUgII.js +0 -10
  224. package/dist/assets/es-crP5qPye.js +0 -16
  225. package/dist/assets/fr-CLSRuALk.js +0 -14
  226. package/dist/assets/index-CLcM8HKx.css +0 -1
  227. package/dist/assets/index-CvLgnuNI.js +0 -41
  228. package/dist/assets/ja-SZ1-ucLV.js +0 -16
  229. package/dist/assets/ko-HthbT_Ve.js +0 -16
  230. package/dist/assets/main-BJklC7Cl.js +0 -896
  231. package/dist/assets/markdownCore-BzQuETm0.js +0 -5
  232. package/dist/assets/patchFileDiff-DGw2KryM.js +0 -13
  233. package/dist/assets/pl-C8eYfjL1.js +0 -16
  234. package/dist/assets/pt-BR-cYOrZdxS.js +0 -16
  235. package/dist/assets/renderMobileApp-CMxjwisj.js +0 -25
  236. package/dist/assets/runtimeEndpointReset-C45jrFq4.js +0 -27
  237. package/dist/assets/scheduledTasksApi-CkK1F9s2.js +0 -1
  238. package/dist/assets/tr-B4IQ5t-T.js +0 -7
  239. package/dist/assets/uk-DCoXG6ve.js +0 -16
  240. package/dist/assets/vendor-opencode-client-_BAHQo4R.js +0 -12
  241. package/dist/assets/vendor-zod-Gea9uBlY.js +0 -39
  242. package/dist/assets/zh-CN-BXBoxsFk.js +0 -16
  243. package/dist/assets/zh-TW-C6oelpnL.js +0 -16
@@ -1,5 +1,5 @@
1
- import{R as t,j as n}from"./vendor-react-BUCujlKS.js";import{n as jt,u as Qe,a as he,x as Xe,h as qe,y as xt}from"./index-CvLgnuNI.js";import{c as bt,s as Ct,P as Rt,C as Mt}from"./shikiHighlight-4O0ZM14D.js";import{f as Tt,z as G,cC as Pt,aJ as kt,b as Ze,K as Nt,ai as Et,_ as It,bj as Dt,T as Vt,fY as Ft,a3 as Lt,ix as At,l as et,fX as Ot,ay as tt,hy as zt,fV as Kt,dy as nt,f_ as Wt,f$ as _t,m as Bt,iy as $t,as as rt,ae as ge,af as ve,at as st,B as ee,I as L,ag as we,av as it,bh as te,g as Gt,c8 as Jt,aB as Ut,cp as Ht,iz as Yt}from"./useAppFontEffects-Bzyszv2N.js";import{u as Qt,n as Xt}from"./useInlineCommentController-zOf6ORAq.js";import{b as qt}from"./CodeMirrorCommentWidgets-DZF8ntaq.js";import{getResolvedShikiTheme as Zt}from"./appThemeRegistry-Br2TLSlb.js";import{E as en}from"./vendor-codemirror-view-CiLROUVV.js";import{as as tn}from"./runtimeEndpointReset-C45jrFq4.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-Gea9uBlY.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-client-_BAHQo4R.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-codemirror-search-BmS-GmcX.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-replit-codemirror-vim-B2DJlAhT.js";import"./vendor-replit-codemirror-vim-core-FHzKdNUS.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-CsXYnR5c.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-ClYN8CzB.js";import"./vendor-tanstack-virtual-core-BewVQryB.js";import"./contextPanelEmbeddedChat-CirXEPJq.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-6cEFPNUR.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./textMateThemeFromAppTheme-yNq7b0DZ.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./GuestAttachDialog-CoXM0gh_.js";import"./PluginPane-B39JEUL8.js";const nn=()=>{const l=new Map,d=new Map;return{schedule:(c,s,m)=>{if(s<=(d.get(c)??Number.NEGATIVE_INFINITY))return l.get(c)??Promise.resolve();d.set(c,s);const h=(l.get(c)??Promise.resolve()).then(m,m);return l.set(c,h.catch(()=>{d.get(c)===s&&d.delete(c)})),h},pendingFor:async c=>{await l.get(c)},reset:c=>{d.delete(c)}}},y=l=>{if(!l)return"";const d=l.replace(/\\/g,"/");return d==="/"?"/":d.replace(/\/+$/,"")},rn=(l,d)=>{const c=y(d.currentDirectory),s=y(d.homeDirectory),m=y(l);return c&&m.startsWith(c+"/")?m.slice(c.length+1):s&&m===s?"~":s&&m.startsWith(s+"/")?`~${m.slice(s.length)}`:m},sn=(l,d,c)=>{const s=y(l.trim());if(!s)return null;const m=c?d.find(h=>h.id===c)??null:null;if(m?.path){const h=y(m.path);if(s===h||s.startsWith(`${h}/`))return{id:m.id,path:m.path}}const R=d.filter(h=>{const M=y(h.path);return s===M||s.startsWith(`${M}/`)}).sort((h,M)=>y(M.path).length-y(h.path).length)[0];return R?{id:R.id,path:R.path}:null},on=l=>xt(()=>l()),as=({targetPath:l=null,savedProjectPlan:d=null,onNavigatedToChat:c})=>{const{t:s}=Tt(),m=G(e=>e.currentSessionId),R=G(e=>e.createSession),h=G(e=>e.initializeNewOpenChamberSession),M=G(e=>e.sendMessage),Se=G(e=>e.setCurrentSession),ye=Pt(),J=jt(e=>e.homeDirectory),je=kt(e=>e.planModeEnabled),xe=Ze(e=>e.projects),be=Ze(e=>e.activeProjectId),Ce=Nt(e=>e.directories),Re=Et()??"",Me=Qe(e=>e.setSessionSwitcherOpen),A=It(),O=t.useSyncExternalStore(on,he,he),{isMobile:Te}=Dt(),{currentTheme:U}=Vt(),ne=t.useMemo(()=>m?ye.find(e=>e.id===m)??null:null,[m,ye]),E=t.useMemo(()=>{const e=typeof ne?.directory=="string"?ne.directory:"";return y(e||"")},[ne?.directory]),Pe=t.useMemo(()=>y(Re||E),[Re,E]),z=t.useMemo(()=>sn(Pe,xe,be),[be,Pe,xe]),re=d?.projectRef.id??null,se=d?.projectRef.path??null,g=t.useMemo(()=>re&&se?{id:re,path:se}:null,[re,se]),x=d?.planId??null,K=g&&x?JSON.stringify(["saved-plan",O,Ft(g),x]):null,I=g?.id===Lt,H=t.useMemo(()=>{const e=g??z;return e?Ce.get(e.path)?.isGitRepo===!0:!1},[z,Ce,g]),[T,D]=t.useState(null),[ke,Ne]=t.useState(!1),[u,W]=t.useState(null),[ie,oe]=t.useState(null),ot=!!u||!!ie,ae=t.useMemo(()=>!u||!E||!J?u:rn(u,{currentDirectory:E,homeDirectory:J}),[u,E,J]),[f,P]=t.useState(""),{isPlaying:Y,play:at,stop:lt}=At(),ct=et(e=>e.showMessageTTSButtons),[Ee,le]=t.useState(null),[Ie,ce]=t.useState(null),ue=t.useMemo(()=>ae&&ae.split("/").pop()||s("planView.file.defaultName"),[ae,s]),de=t.useMemo(()=>f.trim()?Ot(f,s("planView.title.default")).title:s("planView.title.default"),[f,s]),Q=t.useMemo(()=>de.trim()||s("planView.title.default"),[de,s]),[ut,_]=t.useState(!1),[dt,De]=t.useState(!1),[X,Ve]=t.useState("edit"),B=t.useRef(null),[a,w]=t.useState(null),Fe=t.useRef(null),mt=t.useRef(null),Le="openchamber:plan:md-viewer-mode";t.useEffect(()=>{try{const e=localStorage.getItem(Le);if(!e)return;const i=JSON.parse(e);(i==="preview"||i==="edit")&&Ve(i)}catch{}},[]);const pt=t.useCallback(e=>{Ve(e);try{localStorage.setItem(Le,JSON.stringify(e))}catch{}},[]),V=t.useRef(!1),b=t.useRef(null),[Ae,F]=t.useState(!1);t.useEffect(()=>{const e=()=>{V.current=!1,b.current=null,F(!1)};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[]);const ft=t.useCallback((e,i)=>{const o=e.split(`
1
+ import{R as t,j as n}from"./vendor-react-BUCujlKS.js";import{n as jt,u as Qe,a as he,y as qe,h as Xe,z as bt}from"./index-Di6zUe5h.js";import{c as xt,s as Ct,P as Rt,C as Mt}from"./shikiHighlight-l-MbaNS4.js";import{f as Tt,z as G,cC as Pt,aJ as kt,b as Ze,K as Et,ai as Nt,_ as It,bj as Dt,T as Vt,f$ as Ft,a3 as Lt,iD as At,l as et,f_ as Ot,ay as tt,hE as zt,fY as Kt,dA as nt,g1 as Wt,g2 as _t,m as Bt,iE as $t,as as rt,ae as ge,af as ve,at as st,B as ee,I as L,ag as we,av as it,bh as te,g as Gt,c8 as Jt,aB as Ut,cp as Ht,iF as Yt}from"./useAppFontEffects-DDjuwVqi.js";import{u as Qt,n as qt}from"./useInlineCommentController-Clg8EO3A.js";import{b as Xt}from"./CodeMirrorCommentWidgets-DCAQTLMM.js";import{getResolvedShikiTheme as Zt}from"./appThemeRegistry-CiuyzfSW.js";import{E as en}from"./vendor-codemirror-view-CiLROUVV.js";import{ax as tn}from"./runtimeEndpointReset-D0PcCb3K.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-BSoePkpP.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-client-DSZl7jSi.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-codemirror-search-BmS-GmcX.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-replit-codemirror-vim-B2DJlAhT.js";import"./vendor-replit-codemirror-vim-core-FHzKdNUS.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-CsXYnR5c.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-tanstack-react-virtual-ClYN8CzB.js";import"./vendor-tanstack-virtual-core-BewVQryB.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./contextPanelEmbeddedChat-CirXEPJq.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-oKF0MAwd.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./textMateThemeFromAppTheme-C-kGcOpD.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./GuestAttachDialog-D7TJG1rt.js";import"./PluginPane-DQ0k41Q-.js";const nn=()=>{const l=new Map,d=new Map;return{schedule:(c,s,m)=>{if(s<=(d.get(c)??Number.NEGATIVE_INFINITY))return l.get(c)??Promise.resolve();d.set(c,s);const h=(l.get(c)??Promise.resolve()).then(m,m);return l.set(c,h.catch(()=>{d.get(c)===s&&d.delete(c)})),h},pendingFor:async c=>{await l.get(c)},reset:c=>{d.delete(c)}}},y=l=>{if(!l)return"";const d=l.replace(/\\/g,"/");return d==="/"?"/":d.replace(/\/+$/,"")},rn=(l,d)=>{const c=y(d.currentDirectory),s=y(d.homeDirectory),m=y(l);return c&&m.startsWith(c+"/")?m.slice(c.length+1):s&&m===s?"~":s&&m.startsWith(s+"/")?`~${m.slice(s.length)}`:m},sn=(l,d,c)=>{const s=y(l.trim());if(!s)return null;const m=c?d.find(h=>h.id===c)??null:null;if(m?.path){const h=y(m.path);if(s===h||s.startsWith(`${h}/`))return{id:m.id,path:m.path}}const R=d.filter(h=>{const M=y(h.path);return s===M||s.startsWith(`${M}/`)}).sort((h,M)=>y(M.path).length-y(h.path).length)[0];return R?{id:R.id,path:R.path}:null},on=l=>bt(()=>l()),as=({targetPath:l=null,savedProjectPlan:d=null,onNavigatedToChat:c})=>{const{t:s}=Tt(),m=G(e=>e.currentSessionId),R=G(e=>e.createSession),h=G(e=>e.initializeNewOpenChamberSession),M=G(e=>e.sendMessage),Se=G(e=>e.setCurrentSession),ye=Pt(),J=jt(e=>e.homeDirectory),je=kt(e=>e.planModeEnabled),be=Ze(e=>e.projects),xe=Ze(e=>e.activeProjectId),Ce=Et(e=>e.directories),Re=Nt()??"",Me=Qe(e=>e.setSessionSwitcherOpen),A=It(),O=t.useSyncExternalStore(on,he,he),{isMobile:Te}=Dt(),{currentTheme:U}=Vt(),ne=t.useMemo(()=>m?ye.find(e=>e.id===m)??null:null,[m,ye]),N=t.useMemo(()=>{const e=typeof ne?.directory=="string"?ne.directory:"";return y(e||"")},[ne?.directory]),Pe=t.useMemo(()=>y(Re||N),[Re,N]),z=t.useMemo(()=>sn(Pe,be,xe),[xe,Pe,be]),re=d?.projectRef.id??null,se=d?.projectRef.path??null,g=t.useMemo(()=>re&&se?{id:re,path:se}:null,[re,se]),b=d?.planId??null,K=g&&b?JSON.stringify(["saved-plan",O,Ft(g),b]):null,I=g?.id===Lt,H=t.useMemo(()=>{const e=g??z;return e?Ce.get(e.path)?.isGitRepo===!0:!1},[z,Ce,g]),[T,D]=t.useState(null),[ke,Ee]=t.useState(!1),[u,W]=t.useState(null),[ie,oe]=t.useState(null),ot=!!u||!!ie,ae=t.useMemo(()=>!u||!N||!J?u:rn(u,{currentDirectory:N,homeDirectory:J}),[u,N,J]),[f,P]=t.useState(""),{isPlaying:Y,play:at,stop:lt}=At(),ct=et(e=>e.showMessageTTSButtons),[Ne,le]=t.useState(null),[Ie,ce]=t.useState(null),ue=t.useMemo(()=>ae&&ae.split("/").pop()||s("planView.file.defaultName"),[ae,s]),de=t.useMemo(()=>f.trim()?Ot(f,s("planView.title.default")).title:s("planView.title.default"),[f,s]),Q=t.useMemo(()=>de.trim()||s("planView.title.default"),[de,s]),[ut,_]=t.useState(!1),[dt,De]=t.useState(!1),[q,Ve]=t.useState("edit"),B=t.useRef(null),[a,w]=t.useState(null),Fe=t.useRef(null),mt=t.useRef(null),Le="openchamber:plan:md-viewer-mode";t.useEffect(()=>{try{const e=localStorage.getItem(Le);if(!e)return;const i=JSON.parse(e);(i==="preview"||i==="edit")&&Ve(i)}catch{}},[]);const pt=t.useCallback(e=>{Ve(e);try{localStorage.setItem(Le,JSON.stringify(e))}catch{}},[]),V=t.useRef(!1),x=t.useRef(null),[Ae,F]=t.useState(!1);t.useEffect(()=>{const e=()=>{V.current=!1,x.current=null,F(!1)};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[]);const ft=t.useCallback((e,i)=>{const o=e.split(`
2
2
  `),r=Math.max(1,i.start),p=Math.min(o.length,i.end);return r>p?"":o.slice(r-1,p).join(`
3
- `)},[]),ht=Qt({source:"plan",fileLabel:ue,language:u&&tt(u)||"markdown",getCodeForRange:e=>ft(f,Xt(e)),toStoreRange:e=>({startLine:e.start,endLine:e.end}),fromDraftRange:e=>({start:e.startLine,end:e.endLine})}),{drafts:Oe,commentText:q,setCommentText:ze,editingDraftId:me,setSelection:Ke,saveComment:We,cancel:$,reset:_e,startEdit:Be,deleteDraft:$e}=ht;t.useEffect(()=>{w(null),_e()},[f,_e]),t.useEffect(()=>{Ke(a)},[a,Ke]);const Ge=t.useCallback(()=>{w(null),$()},[$]),Je=t.useCallback((e,i)=>{i&&w(i),We(e,i??a??void 0),w(null)},[a,We]);t.useEffect(()=>{if(!a)return;const e=o=>{const r=o.target;r.closest('[data-comment-card="true"]')||r.closest('[data-comment-input="true"]')||r.closest(".oc-block-widget")||r.closest(".cm-gutterElement")||r.closest("[data-sonner-toast]")||r.closest("[data-sonner-toaster]")||q.trim()||(w(null),$())},i=window.setTimeout(()=>{document.addEventListener("click",e)},100);return()=>{window.clearTimeout(i),document.removeEventListener("click",e)}},[$,q,me,Te,a]);const pe=Qe(e=>e.editorFontSize),gt=t.useMemo(()=>{const e=u?tt(u):null,i=!!e&&e!=="markdown",o=[bt(U,i?{syntaxColors:!1,fontSize:pe}:{fontSize:pe})],r=zt(u||"plan.md");return r&&o.push(r),i&&e&&o.push(Ct({language:e,themeName:U.metadata.id,theme:Zt(U)})),o.push(en.lineWrapping),o},[U,u,pe]),j=t.useRef({key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""}),k=t.useState(nn)[0],Ue=t.useCallback(async(e,i)=>{if("filePath"in e){const r=A.files??Xe()?.files;if(r?.writeFile){if(!(await r.writeFile(e.filePath,i))?.success)throw new Error("Plan file write failed");return}const p=await qe("/api/fs/write",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.filePath,content:i})});if(!p.ok)throw new Error(`Failed to write plan file (${p.status})`);return}if(!await Kt.getState().savePlan(e.projectRef,e.planId,i))throw new Error("Plan save rejected: the plan no longer exists")},[A.files]),He=t.useRef(Ue);He.current=Ue;const N=t.useCallback(()=>{const e=j.current;if(!e.key||!e.target||e.editRevision<=e.savedRevision)return;const i={key:e.key,target:e.target,content:e.content,revision:e.editRevision,runtimeKey:e.runtimeKey,write:He.current};k.schedule(i.key,i.revision,async()=>{if(he()!==i.runtimeKey)return;await i.write(i.target,i.content);const o=j.current;o.key===i.key&&(o.savedRevision=Math.max(o.savedRevision,i.revision),le(null))}).catch(o=>{j.current.key===i.key&&le(o instanceof Error?o.message:"Plan save failed")})},[k]);t.useEffect(()=>{if(!je&&!l&&!x){N(),j.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},W(null),oe(null),P(""),_(!1);return}let e=!1;const i=async r=>{if(A.files?.readFile)return(await A.files.readFile(r))?.content??"";const p=Xe()?.files;if(p?.readFile)return(await p.readFile(r,{optional:!0}))?.content??"";const v=await qe(`/api/fs/read?path=${encodeURIComponent(r)}&optional=true`,{cache:"no-store"});if(!v.ok)throw new Error(`Failed to read plan file (${v.status})`);return v.text()};return(async()=>{if(N(),j.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},W(null),oe(null),P(""),le(null),ce(null),x&&g&&K){if(await k.pendingFor(K),e)return;k.reset(K),_(!0);try{const r=await Yt(g,x);if(e)return;if(!r){ce("Plan not found");return}j.current={key:K,target:{projectRef:g,planId:x},content:r.raw,editRevision:0,savedRevision:0,runtimeKey:O},P(r.raw),oe(x)}catch(r){if(e)return;ce(r instanceof Error?r.message:"Plan load failed")}finally{e||_(!1)}return}if(l){const r=JSON.stringify(["plan-file",O,l]);if(await k.pendingFor(r),e)return;k.reset(r),_(!0);try{const p=await i(l);if(e)return;j.current={key:r,target:{filePath:l},content:p,editRevision:0,savedRevision:0,runtimeKey:O},W(l),P(p)}catch{if(e)return;W(null),P("")}finally{e||_(!1)}return}W(null),P("")})(),()=>{e=!0}},[O,J,je,A.files,x,K,g,k,N,E,l]);const vt=t.useCallback(e=>{j.current.content=e,j.current.editRevision+=1,P(e)},[]);t.useEffect(()=>{if(!u&&!ie)return;const e=window.setTimeout(()=>{N()},350);return()=>{window.clearTimeout(e)}},[f,ie,u,N]),t.useEffect(()=>()=>{N()},[N]),t.useEffect(()=>()=>{B.current!==null&&window.clearTimeout(B.current)},[]);const Ye=t.useCallback(()=>{Me(!1),c?.()},[c,Me]),wt=t.useCallback(async e=>{const i=g??z;if(!i||!T||I)return;const o=await nt(T.action==="improve"?"plan.improve.visible":"plan.implement.visible",{plan_title:Q}),r=await nt(T.action==="improve"?"plan.improve.instructions":"plan.implement.instructions",{plan_title:Q,plan_path:u??""}),v=[{synthetic:!0,text:u?r:[r,"","The plan is not stored as a file in the repository and has no file path. Its full current contents follow below this note and are the source of truth for the plan. Where the instructions above refer to the plan file, treat the plan as stored in OpenChamber project knowledge (it is edited through the OpenChamber UI): propose plan revisions as plan text in the chat rather than editing a file.","",f].join(`
4
- `)}];Ne(!0);try{Ye();let S=null,fe=i.path;if(T.target==="worktree"){if(!H)return;const C=await Wt(i.path,_t());if(!C?.id)return;S=C.id,fe=C.path}else{const C=await R(void 0,i.path,void 0,{model:{providerID:e.providerID,id:e.modelID,variant:e.variant||void 0},agent:e.agent.trim()||void 0});if(!C?.id)return;S=C.id,fe=C.directory??i.path,h(C.id,et.getState().agents??[])}if(!S)return;const Z=Bt.getState();Z.saveSessionModelSelection(S,e.providerID,e.modelID),e.agent.trim()&&(Z.saveSessionAgentSelection(S,e.agent),Z.saveAgentModelForSession(S,e.agent,e.providerID,e.modelID),Z.saveAgentModelVariantForSession(S,e.agent,e.providerID,e.modelID,e.variant||void 0)),Se(S,fe);const yt=e.runAsGoal===!0?[`Implement the plan "${Q}" end-to-end${u?` (plan file: ${u})`:" (the full plan follows)"}.`,u?"Re-read that file for full details — it is the source of truth.":"The full plan follows in this message and is the source of truth.","",f].join(`
5
- `):null;$t.getState().setArmed(e.runAsGoal===!0,yt),await M(o,e.providerID,e.modelID,e.agent.trim()||void 0,void 0,void 0,v,e.variant||void 0),D(null)}finally{Ne(!1)}},[H,f,R,z,h,I,T,u,Ye,g,M,Q,Se]),St=t.useMemo(()=>qt({drafts:Oe,editingDraftId:me,commentText:q,onTextChange:ze,selection:a,isDragging:Ae,fileLabel:ue,newWidgetId:"plan-new-comment-input",mapDraftToRange:e=>({start:e.startLine,end:e.endLine}),onSave:Je,onCancel:Ge,onEdit:e=>{Be(e),w({start:e.startLine,end:e.endLine})},onDelete:$e}),[q,$e,me,Ge,Je,Ae,a,Oe,ue,ze,Be]);return n.jsxs("div",{className:"relative flex h-full min-h-0 min-w-0 w-full flex-col overflow-hidden bg-background",children:[n.jsxs("div",{className:"flex min-w-0 items-center gap-2 border-b border-border/40 px-3 py-1.5 flex-shrink-0",children:[n.jsxs("div",{className:"min-w-0 flex-1",children:[n.jsx("div",{className:"typography-ui-label font-medium truncate",children:de}),Ie?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:Ie,children:s("planView.error.loadFailed")}):null,Ee?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:Ee,children:s("planView.error.saveFailed")}):null]}),ot?n.jsxs("div",{className:"flex items-center gap-1",children:[n.jsxs(rt,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(st,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.improvePlanAria"),disabled:!f.trim()||I,children:n.jsx(L,{name:"loop-right-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.improve")})]}),n.jsxs(it,{align:"end",children:[n.jsx(te,{onClick:()=>D({action:"improve",target:"session"}),disabled:I,children:s("planView.actions.sendToNewSession")}),n.jsx(te,{onClick:()=>D({action:"improve",target:"worktree"}),disabled:!H,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsxs(rt,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(st,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.implementPlanAria"),disabled:!f.trim()||I,children:n.jsx(L,{name:"code-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.implement")})]}),n.jsxs(it,{align:"end",children:[n.jsx(te,{onClick:()=>D({action:"implement",target:"session"}),disabled:I,children:s("planView.actions.sendToNewSession")}),n.jsx(te,{onClick:()=>D({action:"implement",target:"worktree"}),disabled:!H,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsx(Rt,{currentMode:X,onToggle:()=>pt(X==="preview"?"edit":"preview")}),X==="preview"&&ct&&n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s(Y?"planView.tts.stopSpeaking":"planView.tts.readAloud"),onClick:()=>{Y?lt():f.trim()&&at(f)},children:Y?n.jsx(L,{name:"stop",className:"h-4 w-4 text-[color:var(--status-success)]"}):n.jsx(L,{name:"volume-up",className:"h-4 w-4"})})}),n.jsx(we,{sideOffset:8,children:s(Y?"planView.tts.stopSpeaking":"planView.tts.readAloud")})]}),n.jsx(ee,{variant:"ghost",size:"sm",onClick:async()=>{(await Gt(f)).ok&&(De(!0),B.current!==null&&window.clearTimeout(B.current),B.current=window.setTimeout(()=>{De(!1)},1200))},className:"h-5 w-5 p-0",title:s("planView.actions.copyPlanContents"),"aria-label":s("planView.actions.copyPlanContents"),children:dt?n.jsx(L,{name:"check",className:"h-4 w-4 text-[color:var(--status-success)]"}):n.jsx(L,{name:"clipboard",className:"h-4 w-4"})})]}):null]}),n.jsx(tn,{open:T!==null,onOpenChange:e=>{!e&&!ke&&D(null)},target:T?.target??"session",projectDirectory:g?.path??z?.path??null,submitting:ke,allowRunAsGoal:!0,onConfirm:wt}),n.jsx("div",{className:"flex-1 min-h-0 min-w-0 relative",children:n.jsx(Jt,{outerClassName:"h-full min-w-0",className:"h-full min-w-0",children:ut?n.jsx("div",{className:"p-3 typography-ui text-muted-foreground",children:s("planView.state.loading")}):n.jsx("div",{className:"relative h-full",children:n.jsx("div",{className:"h-full",children:X==="preview"?n.jsx("div",{className:"h-full overflow-auto p-3",children:n.jsx(Ut,{fallback:n.jsxs("div",{className:"rounded-md border border-destructive/20 bg-destructive/10 px-3 py-2",children:[n.jsx("div",{className:"mb-1 font-medium text-destructive",children:s("planView.error.previewUnavailable")}),n.jsx("div",{className:"text-sm text-muted-foreground",children:s("planView.error.switchToEditMode")})]}),children:n.jsx(Ht,{content:f,className:"typography-markdown-body",enableFileReferences:!1})})}):n.jsx("div",{className:"relative h-full",ref:mt,children:n.jsx(Mt,{value:f,onChange:vt,readOnly:!1,className:"h-full",extensions:gt,onViewReady:e=>{Fe.current=e},onViewDestroy:()=>{Fe.current=null},blockWidgets:St,highlightLines:a?{start:Math.min(a.start,a.end),end:Math.max(a.start,a.end)}:void 0,lineNumbersConfig:{domEventHandlers:{mousedown:(e,i,o)=>{if(!(o instanceof MouseEvent)||o.button!==0)return!1;o.preventDefault();const r=e.state.doc.lineAt(i.from).number;if(a&&!o.shiftKey&&Math.min(a.start,a.end)===r&&Math.max(a.start,a.end)===r)return w(null),$(),V.current=!1,b.current=null,F(!1),!0;if(Te&&a&&!o.shiftKey){const p=Math.min(a.start,a.end,r),v=Math.max(a.start,a.end,r);return w({start:p,end:v}),V.current=!1,b.current=null,F(!1),!0}if(V.current=!0,b.current=r,F(!0),a&&o.shiftKey){const p=Math.min(a.start,r),v=Math.max(a.end,r);w({start:p,end:v})}else w({start:r,end:r});return!0},mouseover:(e,i,o)=>{if(!(o instanceof MouseEvent)||o.buttons!==1||!V.current||b.current===null)return!1;const r=e.state.doc.lineAt(i.from).number,p=Math.min(b.current,r),v=Math.max(b.current,r);return w({start:p,end:v}),F(!0),!1},mouseup:()=>(V.current=!1,b.current=null,F(!1),!1)}}})})})})})})]})};export{as as PlanView};
3
+ `)},[]),ht=Qt({source:"plan",fileLabel:ue,language:u&&tt(u)||"markdown",getCodeForRange:e=>ft(f,qt(e)),toStoreRange:e=>({startLine:e.start,endLine:e.end}),fromDraftRange:e=>({start:e.startLine,end:e.endLine})}),{drafts:Oe,commentText:X,setCommentText:ze,editingDraftId:me,setSelection:Ke,saveComment:We,cancel:$,reset:_e,startEdit:Be,deleteDraft:$e}=ht;t.useEffect(()=>{w(null),_e()},[f,_e]),t.useEffect(()=>{Ke(a)},[a,Ke]);const Ge=t.useCallback(()=>{w(null),$()},[$]),Je=t.useCallback((e,i)=>{i&&w(i),We(e,i??a??void 0),w(null)},[a,We]);t.useEffect(()=>{if(!a)return;const e=o=>{const r=o.target;r.closest('[data-comment-card="true"]')||r.closest('[data-comment-input="true"]')||r.closest(".oc-block-widget")||r.closest(".cm-gutterElement")||r.closest("[data-sonner-toast]")||r.closest("[data-sonner-toaster]")||X.trim()||(w(null),$())},i=window.setTimeout(()=>{document.addEventListener("click",e)},100);return()=>{window.clearTimeout(i),document.removeEventListener("click",e)}},[$,X,me,Te,a]);const pe=Qe(e=>e.editorFontSize),gt=t.useMemo(()=>{const e=u?tt(u):null,i=!!e&&e!=="markdown",o=[xt(U,i?{syntaxColors:!1,fontSize:pe}:{fontSize:pe})],r=zt(u||"plan.md");return r&&o.push(r),i&&e&&o.push(Ct({language:e,themeName:U.metadata.id,theme:Zt(U)})),o.push(en.lineWrapping),o},[U,u,pe]),j=t.useRef({key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""}),k=t.useState(nn)[0],Ue=t.useCallback(async(e,i)=>{if("filePath"in e){const r=A.files??qe()?.files;if(r?.writeFile){if(!(await r.writeFile(e.filePath,i))?.success)throw new Error("Plan file write failed");return}const p=await Xe("/api/fs/write",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.filePath,content:i})});if(!p.ok)throw new Error(`Failed to write plan file (${p.status})`);return}if(!await Kt.getState().savePlan(e.projectRef,e.planId,i))throw new Error("Plan save rejected: the plan no longer exists")},[A.files]),He=t.useRef(Ue);He.current=Ue;const E=t.useCallback(()=>{const e=j.current;if(!e.key||!e.target||e.editRevision<=e.savedRevision)return;const i={key:e.key,target:e.target,content:e.content,revision:e.editRevision,runtimeKey:e.runtimeKey,write:He.current};k.schedule(i.key,i.revision,async()=>{if(he()!==i.runtimeKey)return;await i.write(i.target,i.content);const o=j.current;o.key===i.key&&(o.savedRevision=Math.max(o.savedRevision,i.revision),le(null))}).catch(o=>{j.current.key===i.key&&le(o instanceof Error?o.message:"Plan save failed")})},[k]);t.useEffect(()=>{if(!je&&!l&&!b){E(),j.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},W(null),oe(null),P(""),_(!1);return}let e=!1;const i=async r=>{if(A.files?.readFile)return(await A.files.readFile(r))?.content??"";const p=qe()?.files;if(p?.readFile)return(await p.readFile(r,{optional:!0}))?.content??"";const v=await Xe(`/api/fs/read?path=${encodeURIComponent(r)}&optional=true`,{cache:"no-store"});if(!v.ok)throw new Error(`Failed to read plan file (${v.status})`);return v.text()};return(async()=>{if(E(),j.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},W(null),oe(null),P(""),le(null),ce(null),b&&g&&K){if(await k.pendingFor(K),e)return;k.reset(K),_(!0);try{const r=await Yt(g,b);if(e)return;if(!r){ce("Plan not found");return}j.current={key:K,target:{projectRef:g,planId:b},content:r.raw,editRevision:0,savedRevision:0,runtimeKey:O},P(r.raw),oe(b)}catch(r){if(e)return;ce(r instanceof Error?r.message:"Plan load failed")}finally{e||_(!1)}return}if(l){const r=JSON.stringify(["plan-file",O,l]);if(await k.pendingFor(r),e)return;k.reset(r),_(!0);try{const p=await i(l);if(e)return;j.current={key:r,target:{filePath:l},content:p,editRevision:0,savedRevision:0,runtimeKey:O},W(l),P(p)}catch{if(e)return;W(null),P("")}finally{e||_(!1)}return}W(null),P("")})(),()=>{e=!0}},[O,J,je,A.files,b,K,g,k,E,N,l]);const vt=t.useCallback(e=>{j.current.content=e,j.current.editRevision+=1,P(e)},[]);t.useEffect(()=>{if(!u&&!ie)return;const e=window.setTimeout(()=>{E()},350);return()=>{window.clearTimeout(e)}},[f,ie,u,E]),t.useEffect(()=>()=>{E()},[E]),t.useEffect(()=>()=>{B.current!==null&&window.clearTimeout(B.current)},[]);const Ye=t.useCallback(()=>{Me(!1),c?.()},[c,Me]),wt=t.useCallback(async e=>{const i=g??z;if(!i||!T||I)return;const o=await nt(T.action==="improve"?"plan.improve.visible":"plan.implement.visible",{plan_title:Q}),r=await nt(T.action==="improve"?"plan.improve.instructions":"plan.implement.instructions",{plan_title:Q,plan_path:u??""}),v=[{synthetic:!0,text:u?r:[r,"","The plan is not stored as a file in the repository and has no file path. Its full current contents follow below this note and are the source of truth for the plan. Where the instructions above refer to the plan file, treat the plan as stored in OpenChamber project knowledge (it is edited through the OpenChamber UI): propose plan revisions as plan text in the chat rather than editing a file.","",f].join(`
4
+ `)}];Ee(!0);try{Ye();let S=null,fe=i.path;if(T.target==="worktree"){if(!H)return;const C=await Wt(i.path,_t());if(!C?.id)return;S=C.id,fe=C.path}else{const C=await R(void 0,i.path,void 0,{model:{providerID:e.providerID,id:e.modelID,variant:e.variant||void 0},agent:e.agent.trim()||void 0});if(!C?.id)return;S=C.id,fe=C.directory??i.path,h(C.id,et.getState().agents??[])}if(!S)return;const Z=Bt.getState();Z.saveSessionModelSelection(S,e.providerID,e.modelID),e.agent.trim()&&(Z.saveSessionAgentSelection(S,e.agent),Z.saveAgentModelForSession(S,e.agent,e.providerID,e.modelID),Z.saveAgentModelVariantForSession(S,e.agent,e.providerID,e.modelID,e.variant||void 0)),Se(S,fe);const yt=e.runAsGoal===!0?[`Implement the plan "${Q}" end-to-end${u?` (plan file: ${u})`:" (the full plan follows)"}.`,u?"Re-read that file for full details — it is the source of truth.":"The full plan follows in this message and is the source of truth.","",f].join(`
5
+ `):null;$t.getState().setArmed(e.runAsGoal===!0,yt),await M(o,e.providerID,e.modelID,e.agent.trim()||void 0,void 0,void 0,v,e.variant||void 0),D(null)}finally{Ee(!1)}},[H,f,R,z,h,I,T,u,Ye,g,M,Q,Se]),St=t.useMemo(()=>Xt({drafts:Oe,editingDraftId:me,commentText:X,onTextChange:ze,selection:a,isDragging:Ae,fileLabel:ue,newWidgetId:"plan-new-comment-input",mapDraftToRange:e=>({start:e.startLine,end:e.endLine}),onSave:Je,onCancel:Ge,onEdit:e=>{Be(e),w({start:e.startLine,end:e.endLine})},onDelete:$e}),[X,$e,me,Ge,Je,Ae,a,Oe,ue,ze,Be]);return n.jsxs("div",{className:"relative flex h-full min-h-0 min-w-0 w-full flex-col overflow-hidden bg-background",children:[n.jsxs("div",{className:"flex min-w-0 items-center gap-2 border-b border-border/40 px-3 py-1.5 flex-shrink-0",children:[n.jsxs("div",{className:"min-w-0 flex-1",children:[n.jsx("div",{className:"typography-ui-label font-medium truncate",children:de}),Ie?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:Ie,children:s("planView.error.loadFailed")}):null,Ne?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:Ne,children:s("planView.error.saveFailed")}):null]}),ot?n.jsxs("div",{className:"flex items-center gap-1",children:[n.jsxs(rt,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(st,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.improvePlanAria"),disabled:!f.trim()||I,children:n.jsx(L,{name:"loop-right-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.improve")})]}),n.jsxs(it,{align:"end",children:[n.jsx(te,{onClick:()=>D({action:"improve",target:"session"}),disabled:I,children:s("planView.actions.sendToNewSession")}),n.jsx(te,{onClick:()=>D({action:"improve",target:"worktree"}),disabled:!H,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsxs(rt,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(st,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.implementPlanAria"),disabled:!f.trim()||I,children:n.jsx(L,{name:"code-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.implement")})]}),n.jsxs(it,{align:"end",children:[n.jsx(te,{onClick:()=>D({action:"implement",target:"session"}),disabled:I,children:s("planView.actions.sendToNewSession")}),n.jsx(te,{onClick:()=>D({action:"implement",target:"worktree"}),disabled:!H,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsx(Rt,{currentMode:q,onToggle:()=>pt(q==="preview"?"edit":"preview")}),q==="preview"&&ct&&n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s(Y?"planView.tts.stopSpeaking":"planView.tts.readAloud"),onClick:()=>{Y?lt():f.trim()&&at(f)},children:Y?n.jsx(L,{name:"stop",className:"h-4 w-4 text-[color:var(--status-success)]"}):n.jsx(L,{name:"volume-up",className:"h-4 w-4"})})}),n.jsx(we,{sideOffset:8,children:s(Y?"planView.tts.stopSpeaking":"planView.tts.readAloud")})]}),n.jsx(ee,{variant:"ghost",size:"sm",onClick:async()=>{(await Gt(f)).ok&&(De(!0),B.current!==null&&window.clearTimeout(B.current),B.current=window.setTimeout(()=>{De(!1)},1200))},className:"h-5 w-5 p-0",title:s("planView.actions.copyPlanContents"),"aria-label":s("planView.actions.copyPlanContents"),children:dt?n.jsx(L,{name:"check",className:"h-4 w-4 text-[color:var(--status-success)]"}):n.jsx(L,{name:"clipboard",className:"h-4 w-4"})})]}):null]}),n.jsx(tn,{open:T!==null,onOpenChange:e=>{!e&&!ke&&D(null)},target:T?.target??"session",projectDirectory:g?.path??z?.path??null,submitting:ke,allowRunAsGoal:!0,onConfirm:wt}),n.jsx("div",{className:"flex-1 min-h-0 min-w-0 relative",children:n.jsx(Jt,{outerClassName:"h-full min-w-0",className:"h-full min-w-0",children:ut?n.jsx("div",{className:"p-3 typography-ui text-muted-foreground",children:s("planView.state.loading")}):n.jsx("div",{className:"relative h-full",children:n.jsx("div",{className:"h-full",children:q==="preview"?n.jsx("div",{className:"h-full overflow-auto p-3",children:n.jsx(Ut,{fallback:n.jsxs("div",{className:"rounded-md border border-destructive/20 bg-destructive/10 px-3 py-2",children:[n.jsx("div",{className:"mb-1 font-medium text-destructive",children:s("planView.error.previewUnavailable")}),n.jsx("div",{className:"text-sm text-muted-foreground",children:s("planView.error.switchToEditMode")})]}),children:n.jsx(Ht,{content:f,className:"typography-markdown-body",enableFileReferences:!1})})}):n.jsx("div",{className:"relative h-full",ref:mt,children:n.jsx(Mt,{value:f,onChange:vt,readOnly:!1,className:"h-full",extensions:gt,onViewReady:e=>{Fe.current=e},onViewDestroy:()=>{Fe.current=null},blockWidgets:St,highlightLines:a?{start:Math.min(a.start,a.end),end:Math.max(a.start,a.end)}:void 0,lineNumbersConfig:{domEventHandlers:{mousedown:(e,i,o)=>{if(!(o instanceof MouseEvent)||o.button!==0)return!1;o.preventDefault();const r=e.state.doc.lineAt(i.from).number;if(a&&!o.shiftKey&&Math.min(a.start,a.end)===r&&Math.max(a.start,a.end)===r)return w(null),$(),V.current=!1,x.current=null,F(!1),!0;if(Te&&a&&!o.shiftKey){const p=Math.min(a.start,a.end,r),v=Math.max(a.start,a.end,r);return w({start:p,end:v}),V.current=!1,x.current=null,F(!1),!0}if(V.current=!0,x.current=r,F(!0),a&&o.shiftKey){const p=Math.min(a.start,r),v=Math.max(a.end,r);w({start:p,end:v})}else w({start:r,end:r});return!0},mouseover:(e,i,o)=>{if(!(o instanceof MouseEvent)||o.buttons!==1||!V.current||x.current===null)return!1;const r=e.state.doc.lineAt(i.from).number,p=Math.min(x.current,r),v=Math.max(x.current,r);return w({start:p,end:v}),F(!0),!1},mouseup:()=>(V.current=!1,x.current=null,F(!1),!1)}}})})})})})})]})};export{as as PlanView};
@@ -0,0 +1,3 @@
1
+ import{f as Qn,R as S,j as ce}from"./vendor-react-BUCujlKS.js";import{iJ as Pe,iK as be,cS as es,iL as ts,iM as ns,iN as Ge,iO as ss,iP as zt,iQ as rs,iR as os,iS as as,iT as is,iU as cs,iV as ls,iW as us,iX as ds,iY as ps,iZ as qt,i_ as ms,i$ as fs,j0 as ys,j1 as hs,j2 as Ss,j3 as gs,j4 as Es,j5 as Ts,j6 as ks,j7 as ws,j8 as _s,j9 as ht,ja as xs,jb as vs,jc as Jt,jd as Kt,je as bs,jf as mn,jg as Wt,jh as Vt,ji as Yt,jj as Zt,jk as It,jl as Rs,jm as As,jn as Is,jo as Os,jp as Cs,jq as Ms,jr as W,js as V,jt as Ps,ju as Qt,jv as Gs,jw as Ns,jx as Us,jy as js,jz as Ds,jA as Ls,jB as Hs,jC as fn,jD as yn,jE as Bs,jF as Fs,jG as $s,jH as Xs,jI as hn,jJ as zs,jK as Sn,jL as gn,jM as En,jN as Tn,jO as kn,jP as qs,jQ as Js,jR as Ks,jS as Ot,jT as Ws,jU as Vs,jV as Ys,jW as Zs,jX as Qs,jY as er,K as bt,jZ as tr,u as Ct,z as se,b as Mt,eu as wn,dq as _n,l as ue,j_ as xn,j$ as nr,fw as vn,bD as sr,fv as rr,el as or,fC as ar,k0 as ir,k1 as cr,fx as lr,m as ur,fD as dr,fE as pr,fF as mr,fm as fr,fh as yr,f as bn,B as en,g as Rn,T as hr,ai as Sr,H as gr,k2 as Er,b_ as Be,hX as St,k3 as tn,cY as nn,k4 as Tr,k5 as sn,k6 as kr,h as wr,k7 as _r,o as rn,bu as ie,k8 as xr,cI as gt}from"./useAppFontEffects-DDjuwVqi.js";import{o as r,s,r as Qe,b as j,n as N,_ as T,u as B,a as O,l as c,f as An,e as de,j as tt,N as vr}from"./vendor-zod-BSoePkpP.js";import{h as z,a as L,u as Ne,aX as br,e3 as Rr,a2 as Et,e4 as Ar,a4 as Ir,z as nt,o as X,a9 as Or,y as Cr,P as Mr,bb as Pr}from"./index-Di6zUe5h.js";import{c as In}from"./vendor-zustand-BAGL70zf.js";import{toast as J}from"./vendor-sonner-DFyL3AvE.js";const Gr=128,Nr=65536,Ur=2e3,jr=/^(>=)?\d+\.\d+\.\d+$/;class K extends Error{code;constructor(t,n){super(n),this.name="HostRequestError",this.code=t}}const Dr=/^[a-z][a-z0-9-]*$/,Lr=r({connected:j(),account:s(),hasClient:j(),settings:Qe(s().regex(Dr),s()),redirectUri:s().optional()}),Hr=r({authorizationUrl:s().min(1)}),Br=r({status:N().int().min(100).max(599),body:s()}),Fr=r({error:s().min(1),message:s().min(1).optional()}),Je=(e,t)=>({ok:!1,code:e,message:t}),$r=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const a=Fr.safeParse(t);return a.success?Je(Pe(a.data.error),a.data.message??a.data.error):Je("HOST_REJECTED","Request failed.")}const n=Br.safeParse(t);return n.success?{ok:!0,result:n.data}:Je("HOST_REJECTED","Request failed.")},Xr=e=>({connection:{connected:e.connected,account:e.account},settings:e.settings,hasClient:e.hasClient,redirectUri:e.redirectUri??""}),Ue=async e=>{if(!e.ok)return null;const t=Lr.safeParse(await e.json().catch(()=>null));return t.success?Xr(t.data):null},zr=async e=>{try{return await Ue(await z(`/api/guests/${e}/oauth/status`))}catch{return null}},ii=async(e,t,n)=>{const a={clientId:t};n&&(a.clientSecret=n);try{return await Ue(await z(`/api/guests/${e}/oauth/client`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}catch{return null}},ci=async(e,t,n)=>{try{return await Ue(await z(`/api/guests/${e}/token`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n?{token:t,username:n}:{token:t})}))}catch{return null}},li=async(e,t)=>{try{return await Ue(await z(`/api/guests/${e}/settings`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}))}catch{return null}},qr=async e=>{try{const t=await z(`/api/guests/${e}/oauth/start`,{method:"POST"});if(!t.ok)return null;const n=Hr.safeParse(await t.json().catch(()=>null));return n.success?n.data.authorizationUrl:null}catch{return null}},Jr=async e=>{try{return await Ue(await z(`/api/guests/${e}/oauth`,{method:"DELETE"}))}catch{return null}},Kr=3*6e4,Wr=1500,Vr=(e,t)=>t.connected?e.connected?t.account!==e.account:!0:!1,Yr=async(e,t)=>{try{const n=await z(`/api/guests/${e}/request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return $r(n)}catch{return Je("HOST_REJECTED","Request failed.")}};let Tt=0;const Fe=In(e=>({byId:{},setStatus:(t,n)=>{e(a=>({byId:{...a.byId,[t]:n}}))},refresh:async t=>{const n=Tt,a=L(),o=await zr(t);return n!==Tt||L()!==a?null:(o&&e(u=>({byId:{...u.byId,[t]:o}})),o)},resetForRuntimeSwitch:()=>{Tt++,e({byId:{}})}})),Zr=r({status:N().int().min(100).max(599),body:s()}),Qr=r({error:s().min(1),message:s().min(1).optional()}),eo=r({status:T(["stopped","starting","ready","failed"])}),Ke=(e,t)=>({ok:!1,code:e,message:t}),to=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const a=Qr.safeParse(t);return a.success?Ke(Pe(a.data.error),a.data.message??a.data.error):Ke("HOST_REJECTED","Request failed.")}const n=Zr.safeParse(t);return n.success?{ok:!0,result:n.data}:Ke("HOST_REJECTED","Request failed.")},no=async(e,t,n)=>{try{const a=await z(`/api/guests/${e}/service/request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n?{...t,viewerId:n}:t)});return to(a)}catch{return Ke("HOST_REJECTED","Request failed.")}},so=async e=>{try{const t=await z(`/api/guests/${e}/service/status`);if(!t.ok)return{ok:!1,code:"NO_SERVICE",message:"No service for this extension."};const n=eo.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."}}},ro=r({guest:r({id:s().min(1)}).passthrough()}),ui=async(e,t,n)=>{try{const a=await z(`/api/guests/${e}/service/sockets`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t,path:n})});return a.ok?ro.safeParse(await a.json().catch(()=>null)).success:!1}catch{return!1}},On=e=>{const t=Ne.getState();for(const[n,a]of Object.entries(t.contextPanelByDirectory)){const o=a.tabs.filter(u=>u.mode===e).map(u=>u.id);o.length>0&&t.closeContextPanelTabs(n,o)}},di=e=>On(br(e)),Pt=e=>Ge.test(e)||vs(e),on=e=>{try{const t=new URL(e);return t.protocol==="https:"&&t.username===""&&t.password===""}catch{return!1}},Cn=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}},Mn=e=>!e.startsWith("/")||e.includes("\0")||e.includes("\\")||e.includes("://")?!1:!e.split("/").some(n=>n==="."||n===".."),Pn=/^[A-Za-z][A-Za-z0-9_]*(\.[A-Za-z][A-Za-z0-9_]*)*$/,Gn=T(["panel","dialog"]),oo=r({mode:Gn,entry:s().trim().refine(be).optional()}).refine(e=>e.mode==="dialog"||e.entry===void 0,{path:["entry"]}),ao=B([j(),Gn,oo]),io=r({id:s().trim().regex(Ge),name:s().trim().min(1),icon:s().trim().refine(Pt),entry:s().trim().refine(be).optional(),dock:T(ns).optional(),size:N().int().min(es).max(ts).optional()}),co=r({id:s().trim().regex(Ge),label:s().trim().min(1)}),lo=r({authorizeUrl:s().trim().refine(on),tokenUrl:s().trim().refine(on),apiOrigin:s().trim().refine(Cn),scopes:O(s().trim().min(1)).optional(),account:r({path:s().trim().refine(Mn),name:s().trim().regex(Pn)}).optional()}),uo=r({apiOrigin:s().trim().refine(Cn),account:r({path:s().trim().refine(Mn),name:s().trim().regex(Pn)}).optional(),scheme:T(["raw","bearer","basic"]).optional(),usernameLabel:s().trim().min(1).max(64).optional()}),po=r({provider:T(["linear"])}),mo=r({name:s().trim().min(1),description:s().trim().min(1),oauth:lo.optional(),token:uo.optional(),host:po.optional(),settings:O(co).optional()}).refine(e=>ss(e)!==null,{path:["oauth"]}),an=["linux","darwin","win32"],Me=s().trim().min(1).max(512),fo=r({linux:O(Me).max(16).optional(),darwin:O(Me).max(16).optional(),win32:O(Me).max(16).optional()}).strict(),yo=r({id:s().trim().regex(Ge).max(64),path:Me.optional(),candidates:fo.optional()}).strict().refine(e=>!!e.path||!!e.candidates,{message:"socket binding needs path or candidates"}),ho=e=>{const t={};if(e.candidates)for(const n of an){const a=e.candidates[n];a&&a.length>0&&(t[n]=[...a])}else if(e.path)for(const n of an)t[n]=[e.path];return{id:e.id,candidatesByPlatform:t}},So=B([Me.transform(e=>({id:e,candidatesByPlatform:{linux:[e],darwin:[e],win32:[e]}})),yo.transform(ho)]),go=r({sockets:O(So).max(32).optional(),exec:O(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}),Eo=r({entry:s().trim().refine(be),runtime:c("host"),permissions:go.optional(),provides:O(T(zt)).min(1).max(zt.length).refine(e=>new Set(e).size===e.length,{message:"provides entries must be unique"}).optional(),surface:c(!0).optional()}),Nn=(e,t)=>new Set(e.map(t)).size===e.length,To=r({id:s().trim().regex(Ge).max(64),label:s().trim().min(1).max(rs),icon:s().trim().refine(Pt).optional(),where:T(["message","session"]),mode:T(["open","background"]).optional(),roles:O(T(["user","assistant"])).min(1).max(2).optional(),payload:O(T(["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"]}),ko=O(To).min(1).max(os).refine(e=>Nn(e,t=>t.id),{message:"action ids must be unique"}),wo=r({name:s().trim().regex(is),description:s().trim().min(1).max(as).optional()}),_o=O(wo).min(1).max(cs).refine(e=>Nn(e,t=>t.name),{message:"command names must be unique"}),xo=r({match:s().trim().min(1).max(fs).regex(ys),name:s().trim().min(1).max(ms).optional(),icon:s().trim().refine(Pt).optional(),title:s().trim().min(1).max(qt).optional(),subtitle:s().trim().min(1).max(qt).optional(),output:T(ps).optional(),language:s().trim().min(1).max(ds).optional(),columns:O(s().trim().min(1).max(ls)).min(1).max(us).optional()}).refine(e=>e.output==="code"||e.language===void 0,{path:["language"]}).refine(e=>e.output==="table"==(e.columns!==void 0),{path:["columns"]}),vo=O(xo).min(1).max(hs),bo=r({panel:io,background:r({entry:s().trim().refine(e=>be(e)&&e.toLowerCase().endsWith(".html"))}).optional(),attach:ao.optional(),page:B([c(!0),r({entry:s().trim().refine(be),title:s().trim().min(1).max(200).optional()})]).optional(),statusSection:B([c(!0),r({entry:s().trim().refine(e=>be(e)&&e.toLowerCase().endsWith(".html")),title:s().trim().min(1).max(_s).optional(),height:N().int().min(ks).max(ws).optional()})]).optional(),capabilities:O(T(Ts)).max(8).optional(),integration:mo.optional(),service:Eo.optional(),filesystem:O(s().max(Ss).refine(gs)).min(1).max(Es).optional(),actions:ko.optional(),commands:_o.optional(),tools:vo.optional()}),Ro=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&&!e.service.provides?.length&&!e.service.surface&&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},Ao=r({apiVersion:c(xs[0]),engines:r({openchamber:s().trim().regex(jr)}).strict().optional(),contributes:bo.superRefine((e,t)=>{if((e.panel.dock!==void 0||e.panel.size!==void 0)&&!(e.service?.surface&&ht(e))){t.addIssue({code:"custom",path:["panel","dock"],message:"panel.dock and panel.size place panel.entry beside service.surface; they need both."});return}if(e.statusSection===!0&&!ht(e)){t.addIssue({code:"custom",path:["statusSection"],message:'contributes.statusSection: true reuses panel.entry; without a panel page, name its own { "entry": "<package .html>" }.'});return}if(ht(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(u=>u.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}if(e.statusSection){const o=[];e.page!==void 0&&o.push("page"),e.attach!==void 0&&e.attach!==!1&&o.push("attach"),e.actions!==void 0&&o.push("actions"),e.commands!==void 0&&o.push("commands"),o.length>0&&t.addIssue({code:"custom",path:["panel"],message:`${o.map(u=>`contributes.${u}`).join(", ")} needs panel.entry or background.entry; a status section only hosts itself.`});return}const a=Ro(e);a.length!==0&&t.addIssue({code:"custom",path:["panel"],message:`${a.map(o=>`contributes.${o}`).join(", ")} needs panel.entry or background.entry; an extension without either may only declare tools.`})})}),Io=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,Oo=s().trim().regex(Io).max(64);r({version:Oo.optional(),openchamber:Ao});B([r({openchamber:An()}),r({openchamber:r({}).passthrough()})]);const q=s().trim().min(1).max(1024),$e=T(["loading","ready","error"]),cn=r({directory:q,name:s(),branch:s(),status:T(["ready","pending","invalid","missing"])}),ln=de("kind",[r({kind:c("projects")}).strict(),r({kind:c("worktrees"),projectId:q}).strict(),r({kind:c("sessions"),projectId:q}).strict()]),Un=de("kind",[r({kind:c("projects"),state:$e,projects:O(r({id:q,name:s(),directory:q}))}),r({kind:c("worktrees"),projectId:q,state:$e,worktrees:O(cn)}),r({kind:c("sessions"),projectId:q,state:$e,coverage:O(r({directory:q,state:$e})),sessions:O(r({id:q,title:s(),projectId:q,directory:q,parentId:q.nullable(),createdAt:N(),updatedAt:N(),archivedAt:N().nullable(),worktree:cn.nullable(),activity:T(["unknown","idle","running","retrying","waiting-permission","waiting-question"]),outcome:T(["completed","failed"]).nullable(),items:O(r({id:q,data:tt().optional()}))}))})]),Co=B([j(),r({kind:c("existing"),directory:q}).strict(),r({kind:c("new"),name:s().trim().min(1).max(200).optional(),baseBranch:s().trim().min(1).max(200).optional()}).strict()]),We=s().min(1).max(Gr),Mo=de("op",[r({op:c("get"),key:We}).strict(),r({op:c("delete"),key:We}).strict(),r({op:c("set"),key:We,value:tt().refine(e=>new TextEncoder().encode(JSON.stringify(e)).length<=Nr)}).strict(),r({op:c("keys")}).strict()]),jn=B([r({storage:c(!0),op:c("get"),found:c(!1)}),r({storage:c(!0),op:c("get"),found:c(!0),value:tt()}),r({storage:c(!0),op:T(["set","delete"])}),r({storage:c(!0),op:c("keys"),keys:O(We).max(Ur)})]),E={channel:c(V),v:c(W)},Po=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)}),Dn=r({id:s().min(1),title:s().min(1),busy:j().optional().default(!1),model:s().min(1).max(yn).optional(),agent:s().min(1).max(fn).optional()}).nullable(),Ln=r({connected:j(),account:s().max(Bs)}),Hn=Qe(s().regex($s),s().max(Fs)),Go=r({status:N().int().min(100).max(599),body:s().max(Xs)}),un=r({directory:s(),name:s(),branch:s(),status:T(["ready","pending","invalid","missing"])}),No=B([r({sessionId:s().min(1),sent:T(hn),directory:s().optional(),worktree:un.optional(),linked:j().optional()}),r({sessionId:An(),sent:c("skipped"),directory:s(),worktree:un,failure:T(["bootstrap-failed","session-create-failed"])})]),Uo=r({sent:T(hn)}),jo=r({status:T(zs)}),Do=r({content:s().max(It)}),Lo=r({written:c(!0)}),Ho=r({entries:O(r({name:s().min(1),kind:T(Sn)})).max(gn)}),Bo=r({kind:T(En),size:N().int().min(0),mtime:N().int().min(0)}),Fo=r({text:s().max(Tn)}),$o=B([jn,Un,No,Go,Uo,jo,Do,Lo,Ho,Bo,Fo]),Ce=r({providerId:s().trim().regex(Ds),id:s().trim().min(1).max(js),title:s().trim().min(1).max(Us),url:s().trim().min(1).max(mn),text:s().trim().min(1).max(Ns).optional(),kind:T(["issue","pull"]).optional(),author:s().trim().min(1).max(Gs).optional(),branches:r({head:s().trim().min(1).max(Qt),base:s().trim().min(1).max(Qt)}).optional(),data:tt().refine(e=>JSON.stringify(e).length<=Ps).optional()}),Bn=T(["user","assistant"]),Fn=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:Bn,text:s().max(kn)}),$n=r({kind:c("session"),action:s().trim().min(1).max(64),sessionId:s().min(1),sessionTitle:s(),directory:s().nullable(),messages:O(r({id:s().min(1),role:Bn,text:s().max(kn),createdAt:N().int().min(0)})).optional(),truncated:j().optional()}).refine(e=>JSON.stringify(e).length<=qs),Xn=B([Fn,$n,Ce]).nullable(),Xo=r({theme:r({mode:T(["light","dark"]),tokens:Po}),locale:s().min(1),directory:s().nullable(),session:Dn,surface:T(["panel","dialog","page","background","status"]),connection:Ln,settings:Hn,item:Xn}),zo=r({...E,type:c("result"),id:s().min(1),ok:j(),error:s().min(1).optional(),code:s().min(1).optional(),payload:$o.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."}),vr));B([r({...E,type:c("workspace"),payload:r({subscriptionId:s().min(1).max(128),snapshot:Un})}),r({...E,type:c("ready"),payload:Xo}),r({...E,type:c("directory"),payload:r({directory:s().nullable()})}),r({...E,type:c("session"),payload:r({session:Dn})}),r({...E,type:c("connection"),payload:r({connection:Ln})}),r({...E,type:c("settings"),payload:r({settings:Hn})}),r({...E,type:c("session-lifecycle"),payload:r({sessionId:s().min(1),phase:T(Js)})}),r({...E,type:c("item"),payload:r({item:Xn})}),r({...E,type:c("resolve"),id:s().min(1),payload:r({command:s().min(1),args:s()})}),zo,r({...E,type:c("action"),id:s().min(1),payload:B([Fn,$n])})]);const Xe=s().min(1).max(Ls).refine(Hs),qo=de("type",[r({...E,type:c("action-result"),id:s().min(1),payload:de("ok",[r({ok:c(!0)}),r({ok:c(!1),error:s().trim().min(1).max(Jt)})])}),r({...E,type:c("workspace-read"),id:s().min(1),payload:ln}),r({...E,type:c("workspace-subscribe"),id:s().min(1),payload:r({subscriptionId:s().min(1).max(128),query:ln})}),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:Mo}),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:T(["info","success","error"]),message:s().trim().min(1).max(bs),copy:B([j(),r({text:s().min(1).max(Kt)})]).optional(),dismiss:j().optional(),persistent:j().optional()})}),r({...E,type:c("open-url"),id:s().min(1),payload:r({url:s().trim().min(1).max(mn)})}),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(Kt)})}),r({...E,type:c("compose"),id:s().min(1),payload:r({text:s().trim().min(1).max(Wt),mode:T(["replace","append"]).optional()})}),r({...E,type:c("attach"),id:s().min(1),payload:Ce}),r({...E,type:c("start-session"),id:s().min(1),payload:Ce.extend({worktree:Co.optional(),projectId:s().trim().min(1).max(1024).optional(),navigation:T(["preserve","open"]).optional()})}),r({...E,type:c("prompt"),id:s().min(1),payload:r({text:s().trim().min(1).max(Wt),send:j().optional()})}),r({...E,type:c("session-link"),id:s().min(1),payload:Ce}),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:T(["GET","POST","PUT","PATCH","DELETE"]),path:s().trim().min(1).max(Yt).refine(Zt),query:Qe(s().min(1).max(128),s().max(2e3)).optional(),body:s().max(Vt).optional()})}),r({...E,type:c("service-request"),id:s().min(1),payload:r({method:T(["GET","POST","PUT","PATCH","DELETE"]),path:s().trim().min(1).max(Yt).refine(Zt),query:Qe(s().min(1).max(128),s().max(2e3)).optional(),body:s().max(Vt).optional()})}),r({...E,type:c("service-status"),id:s().min(1)}),r({...E,type:c("file-read"),id:s().min(1),payload:r({path:Xe})}),r({...E,type:c("file-write"),id:s().min(1),payload:r({path:Xe,content:s().max(It)})}),r({...E,type:c("file-list"),id:s().min(1),payload:r({path:Xe})}),r({...E,type:c("file-stat"),id:s().min(1),payload:r({path:Xe})}),r({...E,type:c("generate"),id:s().min(1),payload:r({prompt:s().trim().min(1).max(Is),system:s().trim().min(1).max(As).optional(),maxOutputTokens:N().int().min(1).max(Rs).optional()})}),r({...E,type:c("badge"),id:s().min(1),payload:r({count:N().int().min(0).max(Os).nullable()})}),r({...E,type:c("open-commit"),id:s().min(1),payload:r({sha:s().regex(Cs)})}),r({...E,type:c("resize"),id:s().min(1),payload:r({height:N().int().min(0).max(Ms)})}),r({...E,type:c("resolve-result"),id:s().min(1),payload:B([r({item:Ce.nullable()}),r({error:s().trim().min(1).max(Jt)})])})]);B([r({ok:c(!0),data:r({}).passthrough()}),r({ok:c(!1),error:s().min(1).max(2e3)})]);T(Ks);const kt=r({alt:j(),ctrl:j(),meta:j(),shift:j()}),xe=N().finite(),Jo=de("type",[r({type:c("pointer"),action:T(["down","up","move"]),x:xe,y:xe,button:N().int().min(-1).max(4),buttons:N().int().min(0).max(31),modifiers:kt}),r({type:c("wheel"),x:xe,y:xe,deltaX:xe,deltaY:xe,modifiers:kt}),r({type:c("key"),action:T(["down","up"]),key:s().min(1).max(64),code:s().max(64),modifiers:kt}),r({type:c("text"),text:s().min(1).max(Ot)})]),le=N().int().min(1).max(Ws);de("type",[r({type:c("ack"),seq:N().int().min(0)}),r({type:c("input"),events:O(Jo).min(1).max(Vs)}),r({type:c("release")}),r({type:c("resize"),width:le,height:le}),r({type:c("clipboard-read"),id:s().min(1).max(64)})]);const Ko=T(Ys),pi=de("type",[r({type:c("hello"),viewerId:s().min(1)}),r({type:c("frame"),seq:N().int().min(0),width:le,height:le,mime:T(Qs),bytes:N().int().min(1),title:s().max(Zs).optional(),agentActive:j()}),r({type:c("control"),controller:Ko,mine:j()}),r({type:c("resized"),width:le,height:le}),r({type:c("clipboard"),id:s().min(1).max(64),text:s().max(Ot)}),r({type:c("error"),code:s().min(1).max(64),message:s().min(1).max(500)}),r({type:c("ended"),reason:T(["service-stopped","extension-unavailable","host-shutdown"])})]);r({width:le,height:le});r({text:s().max(Ot)});const Wo=e=>({channel:V,v:W,type:"ready",payload:e}),Vo=e=>({channel:V,v:W,type:"directory",payload:{directory:e}}),Yo=e=>({channel:V,v:W,type:"session",payload:{session:e}}),Zo=e=>({channel:V,v:W,type:"connection",payload:{connection:e}}),Qo=e=>({channel:V,v:W,type:"settings",payload:{settings:e}}),ea=e=>({channel:V,v:W,type:"item",payload:{item:e}}),ta=(e,t,n)=>({channel:V,v:W,type:"resolve",id:e,payload:{command:t,args:n}}),na=e=>({channel:V,v:W,type:"session-lifecycle",payload:e}),sa=e=>e?.type==="busy"||e?.type==="retry"?"started":e?.type==="idle"?"completed":e?.type?"failure":null,ra=e=>{const t=e?.providerID?.trim(),n=e?.id?.trim();if(!(!t||!n))return`${t}/${n}`},oa=e=>{if(!e?.id)return null;const t=e.title?.trim(),n={id:e.id,title:t||e.id,busy:!!e.busy},a=e.model?.trim().slice(0,yn);a&&(n.model=a);const o=e.agent?.trim().slice(0,fn);return o&&(n.agent=o),n},M=(e,t)=>t?{channel:V,v:W,type:"result",id:e,ok:!0,payload:t}:{channel:V,v:W,type:"result",id:e,ok:!0},U=(e,t,n="HOST_REJECTED")=>({channel:V,v:W,type:"result",id:e,ok:!1,error:t,code:n}),ze=(e,t)=>t.ok?M(e,t.result):U(e,t.message,t.code),qe=e=>{try{const t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}},aa=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 qe(e.payload.url)?await t.openUrl(e.payload.url)?M(e.id):U(e.id,"Could not open URL."):U(e.id,"URL must be http or https.");case"open-surface":return Rr(e.payload.surfaceId)?(t.openSurface(e.payload.surfaceId),M(e.id)):U(e.id,"Unknown surface.");case"clipboard-write":return await t.writeClipboard(e.payload.text)?M(e.id):U(e.id,"Could not write clipboard.");case"compose":return t.compose(e.payload.text,e.payload.mode??"append"),M(e.id);case"attach":return qe(e.payload.url)?(t.attach(e.payload),M(e.id)):U(e.id,"URL must be http or https.");case"start-session":{if(!qe(e.payload.url))return U(e.id,"URL must be http or https.");const n=await t.startSession(e.payload);return n?"sessionId"in n?M(e.id,n):U(e.id,n.message,n.code):U(e.id,"Could not start that session.")}case"prompt":{const n=await t.prompt(e.payload);return n.ok?M(e.id,n.result):U(e.id,n.message,n.code)}case"session-link":{if(!qe(e.payload.url))return U(e.id,"URL must be http or https.");const n=await t.sessionLink(e.payload);return n.ok?M(e.id):U(e.id,n.message,n.code)}case"close":return t.close(),M(e.id);case"oauth-start":return await t.oauthStart()?M(e.id):U(e.id,"Could not start OAuth.");case"oauth-disconnect":return await t.oauthDisconnect()?M(e.id):U(e.id,"Could not disconnect.");case"request":{const n=await t.request(e.payload);return n.ok?M(e.id,n.result):U(e.id,n.message,n.code)}case"service-request":{const n=await t.serviceRequest(e.payload);return n.ok?M(e.id,n.result):U(e.id,n.message,n.code)}case"service-status":{const n=await t.serviceStatus();return n.ok?M(e.id,n.result):U(e.id,n.message,n.code)}case"file-read":return ze(e.id,await t.file({op:"read",path:e.payload.path}));case"file-write":return ze(e.id,await t.file({op:"write",path:e.payload.path,content:e.payload.content}));case"file-list":return ze(e.id,await t.file({op:"list",path:e.payload.path}));case"file-stat":return ze(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):U(e.id,n.message,n.code)}case"badge":return t.setBadge(e.payload.count),M(e.id);case"open-commit":{const n=await t.openCommit(e.payload.sha);return n.ok?M(e.id):U(e.id,n.message,n.code)}case"resize":return t.resize(e.payload.height),M(e.id);case"resolve-result":return t.resolveResult(e.id,e.payload),null}}catch(n){return e.type==="hello"?null:U(e.id,n instanceof K?n.message:"Extension operation failed.",n instanceof K?n.code:"HOST_REJECTED")}},ia=B([r({content:s().max(It)}),r({written:c(!0)}),r({entries:O(r({name:s().min(1),kind:T(Sn)})).max(gn)}),r({kind:T(En),size:N().int().min(0),mtime:N().int().min(0)})]),ca=r({ok:c(!0),result:ia}),la=r({error:s().min(1),message:s().min(1).optional()}),Ve=(e,t)=>({ok:!1,code:e,message:t}),ua=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const a=la.safeParse(t);return a.success?Ve(Pe(a.data.error),a.data.message??a.data.error):Ve("HOST_REJECTED","File operation failed.")}const n=ca.safeParse(t);return n.success?{ok:!0,result:n.data.result}:Ve("HOST_REJECTED","File operation failed.")},da=async(e,t,n)=>{const a=new Headers({"Content-Type":"application/json"});n&&a.set("x-opencode-directory",n);try{const o=await z(`/api/guests/${e}/files`,{method:"POST",headers:a,body:JSON.stringify(t)});return ua(o)}catch{return Ve("HOST_REJECTED","File operation failed.")}},pa=r({ok:c(!0),result:r({text:s().max(Tn)})}),ma=r({error:s().min(1),message:s().min(1).optional()}),Ye=(e,t)=>({ok:!1,code:e,message:t}),Rt="Text generation failed.",fa=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const a=ma.safeParse(t);return a.success?Ye(Pe(a.data.error),a.data.message??a.data.error):Ye("HOST_REJECTED",Rt)}const n=pa.safeParse(t);return n.success?{ok:!0,result:n.data.result}:Ye("HOST_REJECTED",Rt)},ya=async(e,t,n)=>{const a=new Headers({"Content-Type":"application/json"});n&&a.set("x-opencode-directory",n);try{const o=await z(`/api/guests/${e}/generate`,{method:"POST",headers:a,body:JSON.stringify(t)});return fa(o)}catch{return Ye("HOST_REJECTED",Rt)}},ha=(e,t,n=L())=>JSON.stringify([n,e,t]),Sa=In(e=>({selections:new Map,select:(t,n)=>e(a=>{const o=new Map(a.selections);if(o.delete(t),o.set(t,n),o.size>100){const u=o.keys().next().value;u!==void 0&&o.delete(u)}return{selections:o}})})),ga=async({sha:e,directory:t,git:n,currentBranch:a,supported:o})=>{if(!o)return{ok:!1,code:"UNSUPPORTED",message:"This OpenChamber surface has no Diff view."};if(!er(e))return{ok:!1,code:"HOST_REJECTED",message:"Commit id must be 7 to 64 hex characters."};if(!t)return{ok:!1,code:"NO_DIRECTORY",message:"No project is open."};if(!n)return{ok:!1,code:"HOST_UNAVAILABLE",message:"Git is not available yet."};const u=L();let k;try{k=(await n.getGitLog(t,{maxCount:1,to:e})).all[0]}catch{return{ok:!1,code:"NOT_FOUND",message:"That commit is not in this project."}}if(!k||!k.hash.toLowerCase().startsWith(e.toLowerCase()))return{ok:!1,code:"NOT_FOUND",message:"That commit is not in this project."};const w=await a(t);return L()!==u?{ok:!1,code:"HOST_UNAVAILABLE",message:"The connection changed."}:(Sa.getState().select(ha(t,w,bt.getState().runtimeKey),k),Ne.getState().openContextPanelTab(t,{mode:"diff",diffScope:"commit"}),{ok:!0})},Ea=async(e,t)=>(await bt.getState().ensureStatus(t,e).catch(()=>{}),bt.getState().directories.get(t)?.status?.current??null),wt="https://extension.invalid",Ta=500,ka=40*1024*1024,dn=64*1024*1024,_t=async e=>{const t=new Uint8Array(await e.arrayBuffer());let n="";for(let a=0;a<t.length;a+=8192)n+=String.fromCharCode(...t.subarray(a,a+8192));return`data:${e.type||"application/octet-stream"};base64,${btoa(n)}`},wa=e=>e.replace(/\\(?:([0-9a-f]{1,6})\s?|([\s\S]))/gi,(t,n,a)=>{if(n){const o=Number.parseInt(n,16);return o>0&&o<=1114111?String.fromCodePoint(o):"�"}return a===`
2
+ `||a==="\r"?"":a??""}),_a=/\/\*[\s\S]*?\*\/|"(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|\burl\(\s*(?:"((?:\\[\s\S]|[^"\\])*)"|'((?:\\[\s\S]|[^'\\])*)'|((?:\\[\s\S]|[^)\\])*?))\s*\)|@import\s+(?:"((?:\\[\s\S]|[^"\\])*)"|'((?:\\[\s\S]|[^'\\])*)')/gi,xa=async(e,t,n)=>{const a=`/api/guests/${e}/`,o=new URL(t,`${wt}${a}`),u=new Map;let k=0,w=0;const x=async i=>{if(i.origin!==wt||!i.pathname.startsWith(a))throw new Error("Extension resource is outside its package");const m=await n(`${i.pathname}${i.search}`);if(!m.ok)throw new Error(`Could not load extension resource (HTTP ${m.status})`);const g=m.body?.getReader();if(!g)throw new Error("Extension resource has no response body");const y=[];try{for(;;){const{done:d,value:h}=await g.read();if(d)break;if(k+=h.byteLength,k>ka)throw new Error("Extension document exceeds the resource size limit");y.push(new Uint8Array(h))}}catch(d){throw await g.cancel().catch(()=>{}),d}finally{g.releaseLock()}return new Blob(y,{type:m.headers.get("content-type")?.split(";")[0]||"application/octet-stream"})},G=async(i,m,g)=>{const y=i.trim();if(!y||y.startsWith("#"))return i;const d=new URL(y,m);if(d.origin!==wt)return d.href;const h=d.hash;d.hash="";const l=d.href;if(g.includes(l))throw new Error("Circular extension resource reference");let b=u.get(l);if(!b){if(u.size>=Ta)throw new Error("Extension document has too many resources");const R=[...g,l];b=x(d).then(async F=>{const Y=F.type.split(";")[0];return Y==="text/css"||d.pathname.endsWith(".css")?_t(new Blob([await C(await F.text(),d,R)],{type:"text/css"})):_t(Y==="text/html"?new Blob([await P(await F.text(),d,R)],{type:"text/html"}):F)}),u.set(l,b)}const A=`${await b}${h}`;if(w+=A.length,w>dn)throw new Error("Extension document exceeds the embedded size limit");return A},C=async(i,m,g)=>{let y="",d=0;for(const h of i.matchAll(_a)){const l=h[1]??h[2]??h[3]??h[4]??h[5];if(l===void 0)continue;y+=i.slice(d,h.index);const b=await G(wa(l.trim()),m,g),A=JSON.stringify(b);y+=h[4]!==void 0||h[5]!==void 0?`@import url(${A})`:`url(${A})`,d=h.index+h[0].length}return y+i.slice(d)},f=async(i,m,g)=>{const y=[];let d=i;for(;d.trim();){d=d.replace(/^[\s,]+/,"");const h=/^\S+/.exec(d);if(!h)break;const l=h[0];d=d.slice(l.length);let b="";if(!l.endsWith(",")){const R=d.indexOf(",");b=(R<0?d:d.slice(0,R)).trim(),d=R<0?"":d.slice(R+1)}const A=await G(l.replace(/,+$/,""),m,g);y.push(b?`${A} ${b}`:A)}return y.join(", ")},P=async(i,m,g)=>{const y=new DOMParser().parseFromString(i,"text/html"),d=y.querySelector("base[href]")?.getAttribute("href"),h=y.querySelector("base[target]")?.getAttribute("target"),l=d?new URL(d,m):m;for(const R of y.querySelectorAll("base"))R.remove();const b=y.createElement("base");b.href=l.href,h&&(b.target=h),y.head.prepend(b);for(const R of y.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 F of["src","href","data","xlink:href"]){const Y=R.getAttribute(F);Y!==null&&R.setAttribute(F,await G(Y,l,g))}for(const R of y.querySelectorAll("[poster]"))R.setAttribute("poster",await G(R.getAttribute("poster")??"",l,g));for(const R of y.querySelectorAll("img[srcset], source[srcset]"))R.setAttribute("srcset",await f(R.getAttribute("srcset")??"",l,g));for(const R of y.querySelectorAll("style"))R.textContent=await C(R.textContent??"",l,g);for(const R of y.querySelectorAll("[style]"))R.setAttribute("style",await C(R.getAttribute("style")??"",l,g));const A=`<!doctype html>
3
+ ${y.documentElement.outerHTML}`;if(A.length>dn)throw new Error("Extension document exceeds the size limit");return A},v=await x(o);if(v.type.split(";")[0]!=="text/html")throw new Error("Extension entry is not HTML");return P(await v.text(),o,[o.href])},va=async(e,t,n)=>{const a=L(),o=Et();if(o){const w=await xa(e,t,x=>{if(L()!==a||Et()!==o||n?.aborted)throw new DOMException("Extension frame owner changed","AbortError");return z(x,{signal:n})});if(L()!==a||Et()!==o||n?.aborted)throw new DOMException("Extension frame owner changed","AbortError");return{kind:"document",html:w}}const{token:u,expiresAt:k}=await Ar(e);if(a!==L())throw new Error("Runtime changed while authorizing extension frame");return{kind:"url",url:Ir().assetWithUrlToken(`/api/guests/${e}/${t}`,u,{oc_ui:"issue-page"}),expiresAt:k}},ba=e=>{const t=Qn.c(31),{guestId:n,entry:a,instanceKey:o,enabled:u}=e,[k,w]=S.useState(null),[x,G]=S.useState(0),C=S.useRef(!1),[f,P]=S.useState(L);let v;t[0]!==u||t[1]!==a||t[2]!==n||t[3]!==o||t[4]!==f?(v=JSON.stringify([f,n,a,o,u]),t[0]=u,t[1]=a,t[2]=n,t[3]=o,t[4]=f,t[5]=v):v=t[5];const i=v;let m,g;t[6]===Symbol.for("react.memo_cache_sentinel")?(m=()=>nt(re=>{P(re.runtimeKey)}),g=[],t[6]=m,t[7]=g):(m=t[6],g=t[7]),S.useEffect(m,g);let y;t[8]===Symbol.for("react.memo_cache_sentinel")?(y=()=>{C.current=!1},t[8]=y):y=t[8];let d;t[9]!==i?(d=[i],t[9]=i,t[10]=d):d=t[10],S.useEffect(y,d);let h;t[11]!==u||t[12]!==a||t[13]!==n||t[14]!==i?(h=()=>{if(w({key:i,status:"loading"}),!a||!u)return;let re=!1;const Ae=new AbortController;return va(n,a,Ae.signal).then(Ee=>{re||w({key:i,status:"ready",source:Ee})}).catch(()=>{re||w({key:i,status:"error"})}),()=>{re=!0,Ae.abort()}},t[11]=u,t[12]=a,t[13]=n,t[14]=i,t[15]=h):h=t[15];let l;t[16]!==u||t[17]!==a||t[18]!==n||t[19]!==i||t[20]!==x?(l=[u,a,n,i,x],t[16]=u,t[17]=a,t[18]=n,t[19]=i,t[20]=x,t[21]=l):l=t[21],S.useEffect(h,l);const b=k?.key===i&&k.status==="ready"?k.source:null;let A;t[22]!==b||t[23]!==i?(A=()=>b?b.kind==="document"||Date.now()<b.expiresAt?!1:(C.current?w({key:i,status:"error"}):(w({key:i,status:"loading"}),C.current=!0,G(Ra)),!0):!0,t[22]=b,t[23]=i,t[24]=A):A=t[24];const R=A;let F;t[25]===Symbol.for("react.memo_cache_sentinel")?(F=()=>{C.current=!1},t[25]=F):F=t[25];const Y=F,he=b?.kind==="url"?b.url:"",Se=b?.kind==="document"?b.html:void 0,Re=k?.key===i?k.status:"loading";let ge;return t[26]!==R||t[27]!==he||t[28]!==Se||t[29]!==Re?(ge={src:he,srcDoc:Se,status:Re,recoverExpiredNavigation:R,acknowledgeHandshake:Y},t[26]=R,t[27]=he,t[28]=Se,t[29]=Re,t[30]=ge):ge=t[30],ge};function Ra(e){return e+1}const zn="/api/linear/issues/get",Aa=(e,t)=>e==="host"&&t.method==="GET"&&t.path===zn,Ia=async(e,t)=>{if(Aa(e,t))try{const n=await z(zn,{query:t.query});return{status:n.status,body:await n.text()}}catch{return null}},et=new Map,mi=(e,t)=>{et.set(e,t)},fi=(e,t)=>{et.get(e)===t&&et.delete(e)},Oa=e=>et.get(e),Ca=e=>{const t=Mt.getState();if(!t.hasServerSnapshot)throw new K("HOST_UNAVAILABLE","The project registry has not loaded.");const n=t.projects.find(a=>a.id===e);if(!n)throw new K("NOT_FOUND","Project is not registered.");return n},Ze=e=>se.getState().availableWorktreesByProject.get(X(e)??e)??[],qn=e=>({directory:e.path,name:e.name??e.label,branch:e.branch,status:e.worktreeStatus==="not-a-repo"?"invalid":e.worktreeStatus??"ready"}),Ma=e=>e.includes("error")?"error":e.includes("loading")?"loading":"ready",Pa=(e,t,n,a)=>{const o=e.directory,u=xn(o),k=_n.getState(),w=k.statusById.get(e.id),x=(w&&X(w.directory)===X(o)?w.status:void 0)??u?.session_status[e.id],G=k.observedById.get(e.id),C=G&&X(G.directory)===X(o)?G:void 0,f=se.getState().worktreeMetadata.get(e.id),P=a.get(X(o)??o)??(f&&X(f.path)===X(o)?qn(f):null),v=ue.getState().isConnected,i=u?.sessionStatusInvalidated?.[e.id]===!0;let m="unknown";return v&&(x?.type==="busy"?m="running":x?.type==="retry"?m="retrying":(x?.type==="idle"||!i&&(u?.sessionStatusReady||C))&&(m="idle"),u?.permission[e.id]?.length?m="waiting-permission":u?.form[e.id]?.length&&(m="waiting-question")),{id:e.id,title:e.title||e.id,projectId:t,directory:o,parentId:e.parentID??null,createdAt:e.time.created,updatedAt:e.time.updated,archivedAt:e.time.archived||null,worktree:P,activity:m,outcome:m==="idle"?C?.outcome??null:null,items:nr(e).flatMap(g=>{if(g.kind!=="guest"||g.providerId!==n)return[];const y={id:g.identifier};return g.data!==void 0&&(y.data=g.data),[y]})}},At=(e,t)=>{const n=Mt.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 a=n.projects.find(i=>i.id===e.projectId),o=se.getState(),u=a?X(a.path)??a.path:"",k=a?o.worktreeDiscoveryByProject.get(u)??"loading":n.hasServerSnapshot?"error":"loading",w=a?Ze(a.path).map(qn):[];if(e.kind==="worktrees")return{...e,state:k,worktrees:w};const x=new Set(a?[u,...w.map(i=>X(i.directory)??i.directory)]:[]),G=wn(),C=Ct.getState(),f=[...x].map(i=>{const g=G.getBootstrapState(i)==="failed"||C.status==="error"?"error":C.status==="ready"?"ready":"loading";return{directory:i,state:g}}),P=new Map;for(const i of x)for(const m of C.structure.activeIdsByDirectory.get(i)??[]){const g=C.entityById.get(m);g&&P.set(m,g)}for(const i of C.archivedSessions)x.has(X(i.directory)??i.directory)&&P.set(i.id,i);for(const i of x)for(const m of xn(i)?.session??[])x.has(X(m.directory)??m.directory)&&(P.has(m.id)||P.set(m.id,m));const v=new Map(w.map(i=>[X(i.directory)??i.directory,i]));return{...e,state:Ma([k,...f.map(i=>i.state)]),coverage:f,sessions:[...P.values()].map(i=>Pa(i,e.projectId,t,v))}},xt=new Map,Ga=(e,t,n)=>{const a=JSON.stringify([L(),t,e]);let o=xt.get(a);if(!o){const k=new Set,w={listeners:k,snapshot:At(e,t),dispose:()=>{}};let x=!1,G=!1,C=JSON.stringify(w.snapshot);const f=()=>{x||G||(x=!0,queueMicrotask(()=>{if(x=!1,G)return;const v=At(e,t),i=JSON.stringify(v);if(i!==C){C=i,w.snapshot=v;for(const m of k)m(v)}}))},P=[Mt.subscribe((v,i)=>{(v.projects!==i.projects||v.hasServerSnapshot!==i.hasServerSnapshot||v.serverSnapshotFailed!==i.serverSnapshotFailed)&&f()})];if(e.kind!=="projects"&&P.push(se.subscribe((v,i)=>{(v.availableWorktreesByProject!==i.availableWorktreesByProject||v.worktreeDiscoveryByProject!==i.worktreeDiscoveryByProject||v.worktreeMetadata!==i.worktreeMetadata)&&f()})),e.kind==="sessions"){const v=wn();P.push(Ct.subscribe((i,m)=>{(i.activeSessions!==m.activeSessions||i.archivedSessions!==m.archivedSessions||i.status!==m.status)&&f()}),_n.subscribe(f),ue.subscribe((i,m)=>{i.isConnected!==m.isConnected&&f()}),v.subscribeBootstrap(f),v.subscribeAllSelected(i=>i.session,f),v.subscribeAllSelected(i=>i.permission,f),v.subscribeAllSelected(i=>i.form,f),v.subscribeAllSelected(i=>i.sessionStatusReady,f),v.subscribeAllSelected(i=>i.sessionStatusInvalidated,f))}w.dispose=()=>{G=!0;for(const v of P)v();xt.delete(a)},P.push(nt(w.dispose)),xt.set(a,w),o=w}o.listeners.add(n),n(o.snapshot);const u=o;return()=>{u.listeners.delete(n),u.listeners.size===0&&u.dispose()}},Na=e=>{const t=tr().get(e)??Ct.getState().entityById.get(e);if(!t?.directory)throw new K("NO_SESSION","Session is not available.");se.getState().setCurrentSession(e,t.directory),Ne.getState().closeMainSurfaces()},Ua=e=>`${e.id} ${e.title}`.trim(),ja=(e,t)=>{const n=e.replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();return`${t==="pull"?"pr":"issue"}-${n||"guest"}`},Jn=(e,t,n)=>{const a=t?.trim()??"";if(!a)return{ok:!1,reason:"no-directory"};const o=cr(e),u=o.kind==="pull"?"pull":"issue",k={ok:!0,directory:a,title:Ua(o),worktree:!!o.worktree,branchName:ja(o.id,u),kind:u==="pull"?"pr":"standard",linked:lr({providerId:o.providerId,identifier:o.id,title:o.title,url:o.url,thread:u,author:o.author,head:o.branches?.head,base:o.branches?.base,data:o.data,linkedAt:n})};return o.text&&(k.text=o.text),k},Da=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 a=await t.sendFirstMessage(n.id,n.directory,e.text);return{ok:!0,sessionId:n.id,sent:a}},La=()=>{const e=ue.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},Ha=()=>{const e=fr(ue.getState().settingsDefaultModel);return!e||!ue.getState().getModelMetadata(e.providerId,e.modelId)?null:{providerID:e.providerId,modelID:e.modelId}},Ba=(e,t)=>{const n=ue.getState(),a=n.settingsDefaultVariant,o=n.currentProviderId===e&&n.currentModelId===t?n.currentVariant:void 0,k=n.providers.find(x=>x.id===e)?.models.find(x=>x.id===t),w=yr(k);if(w.length===0)return a||o||void 0;if(a&&w.includes(a))return a;if(o&&w.includes(o))return o},Kn=()=>{const e=ue.getState(),t=ur.getState().lastUsedProvider,n=Ha(),a=n?.providerID||e.currentProviderId||t?.providerID,o=n?.modelID||e.currentModelId||t?.modelID,u=La()||e.currentAgentName||void 0;return!a||!o?null:{providerID:a,modelID:o,agentName:u,variant:Ba(a,o)}},Wn=async(e,t,n,a=Kn())=>{if(!a)return"no-model";try{return await se.getState().sendMessage(n,a.providerID,a.modelID,a.agentName,void 0,void 0,void 0,a.variant,void 0,{sessionId:e,directory:t}),"sent"}catch{return"failed"}},Fa=(e,t,n,a)=>{const o=n?.trim()??"";if(!o)return{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"};const u=t?.trim()??"";if(!u)return{ok:!1,code:"NO_SESSION",message:"No open session.",toastKey:"contextPanel.plugin.sessionLink.noSession"};const k=Jn(e,o,a);return k.ok?{ok:!0,sessionId:u,directory:o,linked:k.linked}:{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"}},$a=async e=>{const t=Fa(e.request,e.sessionId,e.directory,Date.now());if(!t.ok)return J.error(e.t(t.toastKey)),{ok:!1,code:t.code,message:t.message};try{return await vn(t.sessionId,t.directory,t.linked,!0),J.success(e.t("contextPanel.plugin.sessionLink.linked")),{ok:!0}}catch{return J.error(e.t("contextPanel.plugin.sessionLink.failed")),{ok:!1,code:"HOST_REJECTED",message:"Could not link that item."}}},Xa=e=>{const t=ir(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 a=e.directory?.trim()??"";return a?{ok:!0,action:"send",text:t.text,sessionId:n,directory:a}:{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"}},za=async e=>{const t=Xa(e);if(!t.ok)return J.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 Wn(t.sessionId,t.directory,t.text);return n==="no-model"?J.error(e.t("contextPanel.plugin.prompt.noModel")):n==="failed"&&J.error(e.t("contextPanel.plugin.prompt.sendFailed")),{ok:!0,result:{sent:n}}},qa=async e=>{e.assertAuthorized();const t=e.request.projectId?Ca(e.request.projectId):e.directory?sr(e.directory):null,n=e.request.worktree;let a=e.request.projectId?t?.path??null:e.directory,o;if(n&&n!==!0&&n.kind==="existing"){if(!t)throw new K("NO_DIRECTORY","Project is not registered.");if(o=Ze(t.path).find(y=>X(y.path)===X(n.directory)),!o)throw new K("NOT_FOUND","Worktree does not belong to this project or has not loaded yet.");if(o.worktreeStatus==="missing"||o.worktreeStatus==="invalid"||o.worktreeStatus==="not-a-repo")throw new K("HOST_REJECTED","Worktree is unavailable.");a=o.path}const u=n===!0||!!(n&&n.kind==="new"),k=Jn({...e.request,worktree:u},a,Date.now());if(!k.ok)return J.error(e.t("contextPanel.plugin.startSession.noProject")),null;const w=e.request.navigation??"preserve",x=Kn();let G=!1;const C=nt(()=>{G=!0}),f=()=>{if(G)throw new K("DISCONNECTED","The connected server changed.");e.assertAuthorized()};let P="session-create-failed",v=!0,i=a??"";const m=()=>{if(!o)return;const y=t?Ze(t.path).find(d=>d.path===o?.path)??o:o;return{directory:y.path,name:y.name??y.label,branch:y.branch,status:y.worktreeStatus==="not-a-repo"?"invalid":y.worktreeStatus??"ready"}},g=async(y,d)=>{if(o&&t){P="bootstrap-failed";const l=await dr(t);f(),l&&await pr(o.path)}f(),P="session-create-failed";const h=await mr(y,d,void 0,void 0,x?{model:{providerID:x.providerID,id:x.modelID,variant:x.variant},agent:x.agentName}:void 0,w);if(f(),!h)return null;if(i=h.directory??d,o){const l=t?Ze(t.path).find(b=>b.path===o?.path):void 0;o={...o,worktreeStatus:l?.worktreeStatus??o.worktreeStatus},se.getState().setWorktreeMetadata(h.id,o)}return{id:h.id,directory:i}};try{const y=await Da(k,{createSession:g,createWorktree:async(d,h,l)=>{if(!t)throw new K("NO_DIRECTORY","Project is not registered.");const b=n&&n!==!0&&n.kind==="new"?n:void 0,A=b?.name??`${h}-${rr()}`,R=await or(t);return f(),o=await ar(t,{preferredName:A,mode:"new",branchName:A,worktreeName:A,startRef:b?.baseBranch,setupCommands:R,returnAfterDirectoryCreated:!0}),f(),o={...o,kind:l,createdFromBranch:b?.baseBranch},g(k.title,o.path)},initializeSession:d=>{se.getState().initializeNewOpenChamberSession(d,ue.getState().agents)},setLinkedIssue:async(d,h,l)=>{f(),await vn(d,h,l,!0).catch(()=>{v=!1}),f()},sendFirstMessage:(d,h,l)=>(f(),Wn(d,h,l,x)),closeSurfaces:()=>{w==="open"&&Ne.getState().closeMainSurfaces()}});if(f(),!y.ok){const d=m();return d?{sessionId:null,sent:"skipped",directory:d.directory,worktree:d,failure:P}:(J.error(e.t("contextPanel.plugin.startSession.failed")),null)}return y.sent==="no-model"?J.error(e.t("contextPanel.plugin.startSession.noModel")):y.sent==="failed"?J.error(e.t("contextPanel.plugin.startSession.sendFailed")):J.success(e.t("contextPanel.plugin.startSession.created")),{sessionId:y.sessionId,sent:y.sent,directory:i,worktree:m(),linked:v}}catch(y){f();const d=m();if(d)return{sessionId:null,sent:"skipped",directory:d.directory,worktree:d,failure:P};throw y}finally{C()}},Ja=async(e,t)=>{const n=await z(`/api/guests/${encodeURIComponent(e)}/storage`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new K("HOST_REJECTED","Storage operation failed. Check extension approval and storage limits.");return jn.parse(await n.json())},Ka=({copyText:e,dismiss:t,onDismiss:n})=>{const{t:a}=bn(),[o,u]=S.useState("idle"),k=async()=>{if(!(e===void 0||o==="copying")){u("copying");try{const w=await Rn(e);u(w.ok?"copied":"failed")}catch{u("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(en,{type:"button",variant:"secondary",size:"xs",disabled:o==="copying",onClick:()=>{k()},"aria-live":"polite",children:a(o==="copied"?"contextPanel.plugin.toast.copied":"contextPanel.plugin.toast.copy")}),t&&ce.jsx(en,{type:"button",size:"xs",onClick:n,children:a("contextPanel.plugin.toast.ok")})]}),o==="failed"&&ce.jsx("span",{role:"status",className:"typography-micro text-[var(--status-error-text)]",children:a("contextPanel.plugin.toast.copyFailed")})]})},Wa=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){J[e.kind](e.message);return}const a=crypto.randomUUID(),o={id:a,action:ce.jsx(Ka,{copyText:t,dismiss:n,onDismiss:()=>J.dismiss(a)})};e.persistent&&(o.duration=1/0),J[e.kind](e.message,o)},pn="*",Va='"SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif',Ya='ui-monospace, "SFMono-Regular", "Menlo", "Cascadia Mono", "Segoe UI Mono", monospace',Za="0.5625rem",ve="The user has not allowed this capability for the extension.",Qa=(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,vt=(e,t)=>getComputedStyle(document.documentElement).getPropertyValue(e).trim()||t,ei=({mode:e,surface:t="panel",item:n,headless:a=!1,backgroundAction:o,onDismiss:u,onAttach:k,onSessionStarted:w,onResize:x})=>{const{t:G,locale:C}=bn(),{currentTheme:f}=hr(),P=Sr(),v=se(_=>_.currentSessionId),i=o?o.item.directory??"":P,m=o?o.item.sessionId:v,g=gr(m,i||void 0),y=Er(m??"",i||void 0),d=S.useRef(null),h=Or(e),l=Be(_=>_.guests.find(Z=>Z.id===h)??null),b=Be(_=>_.status),A=l?St(l):!0,R=Fe(_=>_.byId[h]),F=Fe(_=>_.setStatus),Y=Fe(_=>_.refresh),he=tn(_=>_.pendingItemByGuest[h]),Se=tn(_=>_.takePendingItem),[Re,ge]=S.useState(null);S.useEffect(()=>{a||n!==void 0||!he||ge(Se(h))},[h,a,n,he,Se]);const re=a?null:n!==void 0?n:Re,Ae=nn(_=>_.clearBadge);S.useEffect(()=>{t==="panel"&&!a&&Ae(h)},[Ae,h,a,t]);const Ee=y?.type==="busy"||y?.type==="retry",st=sa(y),Gt=S.useMemo(()=>oa(m?{id:g?.id??m,title:g?.title??o?.item.sessionTitle,busy:Ee,model:ra(g?.model),agent:g?.agent}:null),[o,m,g,Ee]),pe=S.useMemo(()=>Tr(f),[f]),rt=S.useMemo(()=>({theme:{mode:f.metadata.variant==="dark"?"dark":"light",tokens:{background:f.colors.surface.background,elevated:f.colors.surface.elevated,foreground:f.colors.surface.foreground,muted:f.colors.surface.mutedForeground,subtle:f.colors.surface.subtle,border:f.colors.interactive.border,hover:f.colors.interactive.hover,selection:f.colors.interactive.selection,focus:f.colors.interactive.focusRing,primary:f.colors.primary.base,mutedSurface:f.colors.surface.muted,elevatedForeground:f.colors.surface.elevatedForeground,active:f.colors.interactive.active,selectionForeground:pe.selectionForeground,primaryForeground:f.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:f.colors.status.success,warning:f.colors.status.warning,error:f.colors.status.error,info:f.colors.status.info,font:vt("--font-sans",Va),mono:vt("--font-mono",Ya),radius:vt("--radius",Za)}},locale:C,directory:i||null,session:Gt,surface:a&&l?.backgroundEntry?"background":t,connection:R?.connection??sn,settings:R?.settings??{},item:re}),[f,pe,i,l?.backgroundEntry,a,re,C,R,Gt,t]),Ie=`${h}:${l?.version??""}:${A}:service-${l?.service?.granted?"1":"0"}:${l?.entry??""}:${l?.backgroundEntry??""}:${l?.statusEntry??""}`,Vn=l?a?l.backgroundEntry??l.entry??null:t==="page"?l.pageEntry??null:t==="status"?l.statusEntry??null:t==="dialog"&&l.attachEntry?l.attachEntry:l.entry??null:null,{src:je,srcDoc:De,status:ot,recoverExpiredNavigation:Yn,acknowledgeHandshake:Nt}=ba({guestId:h,entry:Vn,instanceKey:Ie,enabled:A}),Te=S.useRef(rt);Te.current=rt;const Q=S.useRef(i);Q.current=i;const at=S.useRef(m);at.current=m;const Ut=S.useRef(Ee);Ut.current=Ee;const H=S.useRef(h);H.current=h;const oe=S.useRef(A);oe.current=A;const ee=S.useRef(l);ee.current=l;const jt=S.useRef(l?.integration?.auth);jt.current=l?.integration?.auth;const Le=S.useRef(G);Le.current=G;const it=S.useRef(k);it.current=k;const ct=S.useRef(u);ct.current=u;const Dt=S.useRef(w);Dt.current=w;const Lt=S.useRef(x);Lt.current=x;const He=S.useRef(null),ke=S.useRef(new Map),Ht=S.useRef(0),me=S.useCallback(()=>{He.current!=null&&(window.clearInterval(He.current),He.current=null)},[]),$=S.useCallback(_=>{d.current?.contentWindow?.postMessage(_,pn)},[]),lt=S.useCallback(()=>{const _=o?.takeMessage();_&&$(_)},[o,$]),ut=S.useRef(!1),dt=S.useRef(null),pt=S.useCallback(()=>{if(ut.current||t!=="panel"||!a&&ee.current?.backgroundEntry)return;ut.current=!0;const _=ee.current,Z=L();dt.current=kr(H.current,fe=>{const te=Be.getState().guests.find(ae=>ae.id===_?.id);return L()!==Z||!te||!St(te)||te.version!==_?.version||te.entry!==_?.entry||te.backgroundEntry!==_?.backgroundEntry?Promise.resolve({ok:!1,reason:"unavailable"}):new Promise(ae=>{Ht.current+=1;const ne=`resolve-${Ht.current}`,ft=window.setTimeout(()=>{ke.current.delete(ne),ae({ok:!1,reason:"timeout"})},_r);ke.current.set(ne,we=>{window.clearTimeout(ft),ke.current.delete(ne),ae(we)}),d.current?.contentWindow?.postMessage(ta(ne,fe.command,fe.args),pn)})})},[a,t]);S.useEffect(()=>()=>{dt.current?.(),dt.current=null,ut.current=!1;for(const _ of ke.current.values())_({ok:!1,reason:"unavailable"});ke.current.clear()},[Ie,je,De]);const Oe=S.useCallback(()=>{$(Wo(Te.current)),$(Vo(Q.current||null)),$(Yo(Te.current.session)),$(Zo(Te.current.connection)),$(Qo(Te.current.settings)),$(ea(Te.current.item))},[$]);S.useEffect(()=>{l?.integration&&Y(l.id)},[l?.id,l?.integration,Y]),S.useEffect(()=>{l&&!A&&u?.()},[l,A,u]),S.useEffect(()=>{const _=new Map;let Z=!1;const fe=L(),te=H.current,ae=()=>Be.getState().guests.find(_e=>_e.id===te)??null,ne=()=>{for(const _e of _.values())_e();_.clear()},ft=nt(()=>{Z=!0,ne(),me()}),we=()=>{if(!ie(ae(),"sessions"))throw new K("NOT_GRANTED",ve)},Bt=_e=>{const yt=d.current;if(!yt||_e.source!==yt.contentWindow)return;const Ft=qo.safeParse(_e.data);if(!Ft.success||Z||L()!==fe||o&&!o.isActive())return;const ye=Qa(Ft.data,H.current),$t=ae();if(!$t||!St($t)){ne(),"id"in ye&&$({channel:V,v:W,type:"result",id:ye.id,ok:!1,error:"Extension is unavailable.",code:"DISABLED"});return}if(ye.type==="hello"){Nt(),ne(),Oe(),pt(),lt();return}if(ye.type==="action-result"){ye.id===o?.id&&o.complete(ye.payload);return}aa(ye,{workspaceRead:p=>(we(),At(p,H.current)),workspaceSubscribe:({subscriptionId:p,query:I})=>{if(we(),_.get(p)?.(),_.delete(p),_.size>=32)throw new K("HOST_REJECTED","At most 32 workspace subscriptions per frame.");_.set(p,Ga(I,H.current,D=>{!Z&&ie(ee.current,"sessions")&&$({channel:V,v:W,type:"workspace",payload:{subscriptionId:p,snapshot:D}})}))},workspaceUnsubscribe:p=>{_.get(p)?.(),_.delete(p)},storage:p=>Ja(H.current,p),openSession:p=>{we(),Na(p)},toast:p=>{oe.current&&Wa(p)},openUrl:rn,openSurface:p=>{const I=Q.current||"";I&&Ne.getState().openContextSurface(I,p)},writeClipboard:async p=>(await Rn(p)).ok,compose:(p,I)=>{gt.getState().setPendingInputText(p,I)},attach:p=>{if(it.current){it.current(p);return}gt.getState().setPendingGuestIssue(p)},startSession:async p=>{if(!ie(ee.current,"sessions")||p.text&&!ie(ee.current,"prompt"))return{ok:!1,code:"NOT_GRANTED",message:ve};const I=await qa({request:p,directory:Q.current||null,t:Le.current,assertAuthorized:()=>{if(we(),p.text&&!ie(ae(),"prompt"))throw new K("NOT_GRANTED",ve)}});return I?.sessionId&&p.navigation==="open"&&(Dt.current?.(),ct.current?.()),I},prompt:p=>p.send&&!ie(ee.current,"prompt")?Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ve}):za({request:p,sessionId:at.current,directory:Q.current||null,busy:Ut.current,compose:(I,D)=>{gt.getState().setPendingInputText(I,D)},t:Le.current}),sessionLink:p=>$a({request:p,sessionId:at.current,directory:Q.current||null,t:Le.current}),close:()=>{ct.current?.()},oauthStart:async()=>{if(!oe.current)return!1;const p=H.current,I=Fe.getState().byId[p]?.connection??sn,D=await qr(p);if(!D||Z||L()!==fe)return!1;rn(D),me();const Zn=Date.now()+Kr;return He.current=window.setInterval(()=>{(async()=>{if(Date.now()>Zn){me();return}const Xt=await Y(p);Xt&&Vr(I,Xt.connection)&&me()})()},Wr),!0},oauthDisconnect:async()=>{const p=await Jr(te);return!p||Z||L()!==fe?!1:(F(te,p),!0)},request:async p=>{if(!oe.current)return{ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."};const I=await Ia(jt.current,p);if(I!==void 0)return I?{ok:!0,result:I}:{ok:!1,code:"HOST_REJECTED",message:"Request failed."};const D=await Yr(H.current,p);return D.ok||Y(H.current),D},serviceRequest:p=>oe.current?no(H.current,p,Oa(H.current)):Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."}),serviceStatus:()=>so(H.current),file:p=>{if(!oe.current)return Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."});const I=xr(p.path);if(!ie(ee.current,I==="project"?"files":"filesystem"))return Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ve});const D=Q.current||null;return I==="project"&&!D?Promise.resolve({ok:!1,code:"NO_DIRECTORY",message:"No project is open."}):da(H.current,p,D)},generate:p=>oe.current?ie(ee.current,"model")?ya(H.current,p,Q.current||null):Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ve}):Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."}),setBadge:p=>{oe.current&&nn.getState().setBadge(H.current,p)},openCommit:p=>{const I=Cr()?.git??null;return ga({sha:p,directory:Q.current||null,git:I,currentBranch:D=>I?Ea(I,D):Promise.resolve(null),supported:!Mr()&&!Pr()})},resize:p=>{Lt.current?.(p)},resolveResult:(p,I)=>{const D=ke.current.get(p);if(D){if("error"in I){D({ok:!1,reason:"error",message:I.error});return}D({ok:!0,item:I.item})}}}).then(p=>{p&&!Z&&yt===d.current&&L()===fe&&(!o||o.isActive())&&$(p)})};return window.addEventListener("message",Bt),()=>{Z=!0,ne(),ft(),window.removeEventListener("message",Bt)}},[Nt,o,Ie,A,$,Oe,Y,pt,lt,F,je,De,me]),S.useEffect(()=>{o&&(ot==="error"||!A)&&o.complete({ok:!1,reason:"unavailable"})},[o,ot,A]);const mt=S.useRef(!1);return S.useEffect(()=>(mt.current=!0,()=>{mt.current=!1,queueMicrotask(()=>{mt.current||o?.complete({ok:!1,reason:"unavailable"})})}),[o]),S.useEffect(()=>()=>me(),[Ie,me]),S.useEffect(()=>{Oe()},[Oe,rt,i]),S.useEffect(()=>{a||t==="status"||b!=="ready"||l?.entry||(On(e),u?.())},[b,l?.entry,a,e,u,t]),S.useEffect(()=>{!m||!st||$(na({sessionId:m,phase:st}))},[m,st,$]),!l&&b!=="ready"&&b!=="error"?null:!l||!je&&!De?ce.jsx("div",{className:"flex h-full items-center justify-center px-6 text-sm text-muted-foreground",children:G(l&&ot==="loading"?"common.loading":"contextPanel.plugin.loadFailed")}):A?ce.jsx("iframe",{ref:d,title:l.name,src:je||void 0,srcDoc:De,sandbox:"allow-scripts",className:wr("h-full w-full min-h-0 min-w-0 border-0 overflow-hidden",t==="dialog"||t==="status"?"bg-transparent":"bg-[var(--surface-background)]"),onLoad:()=>{Yn()||(Oe(),pt(),lt())}},Ie):null},yi=Object.freeze(Object.defineProperty({__proto__:null,PluginPane:ei},Symbol.toStringTag,{value:"Module"}));export{Kr as A,ei as P,ja as a,qr as b,Vr as c,Jr as d,Wr as e,ci as f,Ua as g,ii as h,di as i,ui as j,ha as k,Sa as l,pi as m,mi as n,fi as o,yi as p,li as s,Fe as u};