@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 +0,0 @@
1
- import{t as le,E as X,F as Z,d_ as Y,a as F,aG as de,h as E}from"./index-CvLgnuNI.js";import{c as ce}from"./vendor-zustand-BAGL70zf.js";import{R as w,j as h}from"./vendor-react-BUCujlKS.js";import{f as pe,_ as ue,t as Q,c2 as fe,c3 as me,c4 as he,c5 as ye,c6 as ge,c8 as we,c7 as Ae,B as ee}from"./useAppFontEffects-Bzyszv2N.js";const N=[{id:"finder",label:"Finder",appName:"Finder"},{id:"terminal",label:"Terminal",appName:"Terminal"},{id:"iterm2",label:"iTerm2",appName:"iTerm"},{id:"ghostty",label:"Ghostty",appName:"Ghostty"},{id:"vscode",label:"VS Code",appName:"Visual Studio Code"},{id:"vscode-insiders",label:"VS Code Insiders",appName:"Visual Studio Code - Insiders"},{id:"intellij",label:"IntelliJ",appName:"IntelliJ IDEA"},{id:"visual-studio",label:"Visual Studio",appName:"Visual Studio"},{id:"cursor",label:"Cursor",appName:"Cursor"},{id:"android-studio",label:"Android Studio",appName:"Android Studio"},{id:"pycharm",label:"PyCharm",appName:"PyCharm"},{id:"xcode",label:"Xcode",appName:"Xcode"},{id:"sublime-text",label:"Sublime",appName:"Sublime Text"},{id:"webstorm",label:"WebStorm",appName:"WebStorm"},{id:"rider",label:"Rider",appName:"Rider"},{id:"zed",label:"Zed",appName:"Zed"},{id:"phpstorm",label:"PhpStorm",appName:"PhpStorm"},{id:"eclipse",label:"Eclipse",appName:"Eclipse"},{id:"windsurf",label:"Windsurf",appName:"Windsurf"},{id:"vscodium",label:"VSCodium",appName:"VSCodium"},{id:"rustrover",label:"RustRover",appName:"RustRover"},{id:"kiro",label:"Kiro",appName:"Kiro"},{id:"antigravity",label:"Antigravity",appName:"Antigravity"},{id:"trae",label:"Trae",appName:"Trae"}],te="finder",B=new Set(["finder","terminal"]),H=e=>{if(typeof window>"u")return e;const t=window.__OPENCHAMBER_PLATFORM__;if(e.id==="finder"){if(t==="win32")return{...e,label:"Explorer",appName:"File Explorer"};if(t==="linux")return{...e,label:"File Manager"}}return e},V=e=>{if(!e)return null;const t=N.find(a=>a.id===e)??null;return t?H(t):null},M=()=>N.filter(e=>B.has(e.id)).map(e=>({...H(e)})),Ie=()=>{if(typeof window>"u")return te;const e=window.localStorage.getItem("openInAppId");return e&&V(e)?e:te};let $=!1,C=!1,I=!1,b=0,v=null;const ae=()=>{v&&(clearTimeout(v),v=null)},Re=ce()((e,t)=>({selectedAppId:Ie(),availableApps:M(),hasLoadedApps:!1,isCacheStale:!1,isScanning:!1,initialize:()=>{if($||typeof window>"u")return;$=!0;const a=(o,c=!0)=>{if(!Array.isArray(o)||o.length===0){e({availableApps:M(),hasLoadedApps:c});return}const y=new Set(o.map(p=>p.name)),m=new Map(o.map(p=>[p.name,p.iconDataUrl??void 0])),A=N.filter(p=>y.has(p.appName)||B.has(p.id)).map(p=>({...H(p),iconDataUrl:m.get(p.appName)}));e({availableApps:A,hasLoadedApps:!0})},n=async o=>{if(!X()||!Z()||C||t().hasLoadedApps&&!o)return;const y=N.map(m=>m.appName);ae(),C=!0,I=!1,e({isScanning:!0});try{const{apps:m,success:d,hasCache:A,isCacheStale:p}=await Y(y,o),x=d&&!A&&m.length===0&&b<3;if(e({isCacheStale:A?p:!1}),a(m,d?!x:!1),d){if(x){const r=[800,1600,3200][b]??3200;b+=1,I=!0,v=setTimeout(()=>{n()},r);return}b=0,I=!1;return}if(b<3){const r=[1e3,3e3,7e3][b]??7e3;b+=1,I=!0,v=setTimeout(()=>{n()},r)}}finally{C=!1,I||e({isScanning:!1})}};n();const s=o=>{const c=o.detail?.settings,y=c&&typeof c.openInAppId=="string"&&c.openInAppId.length>0&&V(c.openInAppId)?c.openInAppId:null;y&&(window.localStorage.setItem("openInAppId",y),e({selectedAppId:y}))},i=()=>{n()},f=o=>{const c=o.detail;Array.isArray(c)&&(b=3,I=!1,e({isScanning:!1,isCacheStale:!1}),a(c))};window.addEventListener("openchamber:settings-synced",s),window.addEventListener("openchamber:app-ready",i),window.addEventListener("openchamber:installed-apps-updated",f),window.__openchamberAppReady&&n(),window.setTimeout(()=>{t().hasLoadedApps||n()},5e3)},loadInstalledApps:async a=>{if($||t().initialize(),!X()||!Z()||C||t().hasLoadedApps&&!a)return;const s=N.map(i=>i.appName);ae(),a&&e({hasLoadedApps:!1}),C=!0,I=!1,e({isScanning:!0});try{const{apps:i,hasCache:f,isCacheStale:l}=await Y(s,a),o=new Set(i.map(d=>d.name)),c=new Map(i.map(d=>[d.name,d.iconDataUrl??void 0])),m=N.filter(d=>o.has(d.appName)||B.has(d.id)).map(d=>({...d,iconDataUrl:c.get(d.appName)}));e({availableApps:m.length>0?m:M(),hasLoadedApps:m.length>0,isCacheStale:f?l:!1})}finally{C=!1,I||e({isScanning:!1})}},selectApp:async a=>{V(a)&&(e({selectedAppId:a}),typeof window<"u"&&window.localStorage.setItem("openInAppId",a),await le({openInAppId:a}))}}));class Te{pending=new Map;has(t){return this.pending.has(t)}clear(){this.pending.clear()}run(t,a,n=!1){const s=this.pending.get(t);if(s&&!n)return s;const i=()=>this.pending.get(t)===f,f=Promise.resolve().then(()=>i()?a(i):void 0).finally(()=>{i()&&this.pending.delete(t)});return this.pending.set(t,f),f}}const je=(e,t)=>e===t||e.length===t.length&&e.every((a,n)=>{const s=t[n];return a.name===s.name&&a.path===s.path&&a.type===s.type&&a.extension===s.extension&&a.relativePath===s.relativePath}),ve=e=>{const t=new Map,a=new Map;for(const n of e){t.has(n.path)||t.set(n.path,n.index==="A"||n.working_dir==="?"?"git-added":n.index==="D"?"git-deleted":n.index==="M"||n.working_dir==="M"?"git-modified":null);const s=+(n.index==="M"||n.working_dir==="M"),i=+(n.index==="A"||n.working_dir==="?");if(!s&&!i)continue;const f=[""];for(let l=n.path.indexOf("/");l!==-1;l=n.path.indexOf("/",l+1))f.push(n.path.slice(0,l));for(const l of f){const o=a.get(l)??{modified:0,added:0};o.modified+=s,o.added+=i,a.set(l,o)}}return{statusByPath:t,badgeByDir:a}},K=new Set,be=e=>{const t=e.runtimeKey.trim(),a=Array.from(new Set(e.paths.map(n=>n.trim()).filter(Boolean)));if(!(!t||a.length===0))for(const n of K)n({runtimeKey:t,paths:a})},xe=e=>(K.add(e),()=>K.delete(e)),ne=3,se=(e,t)=>`${e.replace(/[\\/]+$/,"")}/${t}`,ie=e=>{const t=e.name;return!t||t==="."||t===".."||t.includes("/")||t.includes("\\")?null:t},De=({root:e,refreshDirectory:t})=>{const{t:a}=pe(),{files:n}=ue(),s=n.uploadFile,[i,f]=w.useState(null),[l,o]=w.useState(null),c=w.useRef(!1),y=w.useRef(e);y.current=e;const m=w.useRef(null),d=w.useRef(null);w.useEffect(()=>{o(null)},[e]);const A=w.useCallback(async(r,u,k=!1)=>{if(!s||u.length===0||c.current||!e)return;const _=e,D=F();c.current=!0,f(r),k&&o(null);const T=[];for(let g=0;g<u.length;g+=ne){const j=u.slice(g,g+ne),P=await Promise.all(j.map(async q=>{const G=ie(q);if(!G||F()!==D)return"failed";try{return(await s(se(r,G),q,{directory:_,overwrite:k})).success?"uploaded":"failed"}catch(O){return!k&&de(O)&&O.reason==="already-exists"?"conflict":"failed"}}));T.push(...P)}const W=T.filter(g=>g==="uploaded").length,re=T.filter(g=>g==="failed").length,U=u.filter((g,j)=>T[j]==="conflict"),z=u.flatMap((g,j)=>{const P=ie(g);return T[j]==="uploaded"&&P?[se(r,P)]:[]}),J=y.current===_&&F()===D;try{z.length>0&&be({runtimeKey:D,paths:z}),W>0&&J&&await t(r),W>0&&Q.success(a(U.length>0?"sidebarFilesTree.toast.uploadedWithoutConflicts":"sidebarFilesTree.toast.uploaded")),re>0&&Q.error(a("sidebarFilesTree.toast.uploadFailed")),U.length>0&&J&&o({directory:r,files:U,runtimeKey:D,workspaceRoot:_})}finally{c.current=!1,f(null)}},[t,e,a,s]),p=w.useCallback(r=>{const u=m.current;!u||c.current||(d.current=r,u.value="",u.click())},[]),x=w.useCallback(r=>{const u=d.current,k=Array.from(r.target.files??[]);d.current=null,r.target.value="",!(!u||k.length===0)&&A(u,k)},[A]),L=h.jsxs(h.Fragment,{children:[h.jsx("input",{ref:m,type:"file",multiple:!0,hidden:!0,onChange:x}),h.jsx(fe,{open:!!l,onOpenChange:r=>!r&&o(null),children:h.jsxs(me,{children:[h.jsxs(he,{children:[h.jsx(ye,{children:a("sidebarFilesTree.dialog.uploadConflicts.title")}),h.jsx(ge,{children:a("sidebarFilesTree.dialog.uploadConflicts.description",{path:l?.directory??""})})]}),h.jsx(we,{outerClassName:"max-h-52",className:"flex flex-col gap-1 pr-2",children:l?.files.map((r,u)=>h.jsx("div",{className:"truncate rounded-md bg-muted px-2 py-1 typography-meta",title:r.name,children:r.name},`${r.name}-${r.size}-${u}`))}),h.jsxs(Ae,{children:[h.jsx(ee,{variant:"outline",onClick:()=>o(null),disabled:i!==null,children:a("sidebarFilesTree.dialog.cancel")}),h.jsx(ee,{onClick:()=>{if(l){if(l.runtimeKey!==F()||l.workspaceRoot!==e){o(null);return}A(l.directory,l.files,!0)}},disabled:i!==null,children:a("sidebarFilesTree.dialog.uploadConflicts.replace")})]})]})})]});return{canUpload:!!s,uploadingDirectory:i,uploadFiles:A,pickFiles:p,uploadElements:L}},R=async(e,t)=>{try{const a=await e.json();if(a&&typeof a.error=="string"&&a.error.trim().length>0)return a.error}catch{return t}return t},S=e=>{const t=typeof e=="string"?e.trim():"";if(!t)throw new Error("projectId is required");return t},Se=async e=>{const t=S(e),a=await E(`/api/projects/${encodeURIComponent(t)}/scheduled-tasks`);if(!a.ok)throw new Error(await R(a,"Failed to load scheduled tasks"));const n=await a.json().catch(()=>null);return!n||!Array.isArray(n.tasks)?[]:n.tasks},Pe=async(e,t)=>{const a=S(e),n=await E(`/api/projects/${encodeURIComponent(a)}/scheduled-tasks`,{method:"PUT",headers:{"content-type":"application/json",accept:"application/json"},body:JSON.stringify({task:t})});if(!n.ok)throw new Error(await R(n,"Failed to save scheduled task"));const s=await n.json().catch(()=>null);return!s||!Array.isArray(s.tasks)?[]:s.tasks},Fe=async(e,t)=>{const a=S(e),n=S(t),s=await E(`/api/projects/${encodeURIComponent(a)}/scheduled-tasks/${encodeURIComponent(n)}`,{method:"DELETE",headers:{accept:"application/json"}});if(!s.ok)throw new Error(await R(s,"Failed to delete scheduled task"));const i=await s.json().catch(()=>null);return!i||!Array.isArray(i.tasks)?[]:i.tasks},oe=(e,t)=>{const a=S(e),n=S(t);return`/api/projects/${encodeURIComponent(a)}/scheduled-tasks/${encodeURIComponent(n)}/loop-file`},Le=async(e,t,a)=>{const n=await E(oe(e,t),{method:"PATCH",headers:{"content-type":"application/json",accept:"application/json"},body:JSON.stringify({enabled:a})});if(!n.ok)throw new Error(await R(n,"Failed to update loop task"))},_e=async(e,t)=>{const a=await E(oe(e,t),{method:"DELETE",headers:{accept:"application/json"}});if(!a.ok)throw new Error(await R(a,"Failed to delete loop file"))},Ue=async e=>{await Se(e)},Oe=async(e,t)=>{const a=S(e),n=S(t),s=await E(`/api/projects/${encodeURIComponent(a)}/scheduled-tasks/${encodeURIComponent(n)}/run`,{method:"POST",headers:{accept:"application/json"}});if(!s.ok)throw new Error(await R(s,"Failed to run scheduled task"));const i=await s.json().catch(()=>null);return{sessionId:typeof i?.sessionId=="string"&&i.sessionId.length>0?i.sessionId:void 0,persistError:typeof i?.persistError=="string"&&i.persistError.trim().length>0?i.persistError.trim():void 0}};export{te as D,N as O,Te as a,je as b,De as c,Pe as d,_e as e,Se as f,Fe as g,Ue as h,xe as i,ve as j,Oe as r,Le as s,Re as u};