@hienlh/ppm 0.18.14 → 0.18.16

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 (546) hide show
  1. package/.rdtest2-cf.out +0 -0
  2. package/CHANGELOG.md +26 -0
  3. package/CLAUDE.md +3 -0
  4. package/assets/skills/ppm/SKILL.md +1 -1
  5. package/assets/skills/ppm/references/cli-reference.md +22 -4
  6. package/assets/skills/ppm/references/http-api.md +8 -1
  7. package/dist/web/assets/{adaptive-context-menu-DCZtgOL7.js → adaptive-context-menu-BbuRVTLn.js} +1 -1
  8. package/dist/web/assets/{ai-resource-editor-D5CPBg06.js → ai-resource-editor-Cm4n3VXt.js} +1 -1
  9. package/dist/web/assets/ai-settings-section-BEM1z7kp.js +1 -0
  10. package/dist/web/assets/{angular-html-CTvM4ulF.js → angular-html-BlcrLjUx.js} +1 -1
  11. package/dist/web/assets/{angular-ts-B_vSkjco.js → angular-ts-BUjtceAJ.js} +1 -1
  12. package/dist/web/assets/api-client-D1CePgQ4.js +1 -0
  13. package/dist/web/assets/api-settings-CNtKkHqW.js +1 -0
  14. package/dist/web/assets/{api-settings-B2iNXQ0c.js → api-settings-Cubuqjsu.js} +1 -1
  15. package/dist/web/assets/{api-themes-DrWnJbhs.js → api-themes-YsZgf6Xj.js} +1 -1
  16. package/dist/web/assets/{apl-DywzTry0.js → apl-B3g0v1pk.js} +1 -1
  17. package/dist/web/assets/architecture-PBZL5I3N-6konx-J1.js +1 -0
  18. package/dist/web/assets/{astro-1JaRgaSb.js → astro-FRnyn7cH.js} +1 -1
  19. package/dist/web/assets/{audio-preview-DAuGvOiK.js → audio-preview-DWTRm4HC.js} +1 -1
  20. package/dist/web/assets/{blade-CDeeJWBb.js → blade-NLdOqUKw.js} +1 -1
  21. package/dist/web/assets/{bsl-BfgoPVYR.js → bsl-CenHZfaU.js} +1 -1
  22. package/dist/web/assets/{button-tNy0ba3y.js → button-Cq8yixjf.js} +1 -1
  23. package/dist/web/assets/{cairo-C26gNwWW.js → cairo-B_WR0aiQ.js} +1 -1
  24. package/dist/web/assets/chat-tab-C2e6Pwc2.js +15 -0
  25. package/dist/web/assets/{cobol-D92nBnON.js → cobol-DOynhWYj.js} +1 -1
  26. package/dist/web/assets/code-editor-DWtv_VDo.js +10 -0
  27. package/dist/web/assets/{coffee-CIWH40R1.js → coffee-Bn6dbw4P.js} +1 -1
  28. package/dist/web/assets/{conflict-editor-CDp0I3mD.js → conflict-editor-Bi2RWfKQ.js} +1 -1
  29. package/dist/web/assets/{context-menu-BO1c9jKy.js → context-menu-DfWZAxQy.js} +1 -1
  30. package/dist/web/assets/{cpp-DOrBqXCn.js → cpp-CoZR9t8r.js} +1 -1
  31. package/dist/web/assets/{crystal-BNKqmHux.js → crystal-BSheONSg.js} +1 -1
  32. package/dist/web/assets/{csv-preview-D4svNDAq.js → csv-preview-DxGZ1qg5.js} +1 -1
  33. package/dist/web/assets/{data-grid-overlay-editor-BqV0AxZg.js → data-grid-overlay-editor-gwPoVSCU.js} +1 -1
  34. package/dist/web/assets/{database-viewer-BCvv_Bwf.js → database-viewer-DSPRzZny.js} +1 -1
  35. package/dist/web/assets/{dialog-DcLGDwaX.js → dialog-BSfuiTkJ.js} +1 -1
  36. package/dist/web/assets/{diff-viewer-D41fCFAi.js → diff-viewer-YbpnNv5Y.js} +1 -1
  37. package/dist/web/assets/{docx-preview-DfaQn9v7.js → docx-preview-DqVDOMmv.js} +1 -1
  38. package/dist/web/assets/{edge-Dbjp42Pt.js → edge-DTtoslQu.js} +1 -1
  39. package/dist/web/assets/{edit-diff-preview-BqcUuFCc.js → edit-diff-preview-CXSbSUBX.js} +1 -1
  40. package/dist/web/assets/{elixir-na3b1pYy.js → elixir-CIBCZ3Zi.js} +1 -1
  41. package/dist/web/assets/{elm-_Nalil1R.js → elm-BLmb7K1H.js} +1 -1
  42. package/dist/web/assets/{erb-CW_7dubf.js → erb-BBY8ApRd.js} +1 -1
  43. package/dist/web/assets/{erlang-DmZ7Zzb0.js → erlang-D5Zb5_P0.js} +1 -1
  44. package/dist/web/assets/{esm-CwyBetO1.js → esm-6F8v1jLL.js} +1 -1
  45. package/dist/web/assets/explorer-body-DpQndBVw.js +2 -0
  46. package/dist/web/assets/explorer-window-content-m0K6Mtcg.js +1 -0
  47. package/dist/web/assets/{extension-store-DUaZINyC.js → extension-store-Bhu--fPX.js} +1 -1
  48. package/dist/web/assets/{extension-webview-BW_mccb3.js → extension-webview-BSh6KGd7.js} +1 -1
  49. package/dist/web/assets/{file-store-yReVbR8q.js → file-store-6HW2Lfl4.js} +1 -1
  50. package/dist/web/assets/{fortran-fixed-form-DB2A8L4-.js → fortran-fixed-form-CBdwkEUJ.js} +1 -1
  51. package/dist/web/assets/{fsharp-BYHrti7z.js → fsharp-AT4XdVYH.js} +1 -1
  52. package/dist/web/assets/{gdresource-D5GBin40.js → gdresource-D852fWBR.js} +1 -1
  53. package/dist/web/assets/{git-commit-CUiOBoIL.js → git-commit-DWfWAyxy.js} +1 -1
  54. package/dist/web/assets/{git-log-panel-C1QDkmgl.js → git-log-panel-CkTiR70w.js} +1 -1
  55. package/dist/web/assets/{git-rebase-DOxGnpdw.js → git-rebase-C6opk8gr.js} +1 -1
  56. package/dist/web/assets/gitGraph-HDMCJU4V-ikUwsekd.js +1 -0
  57. package/dist/web/assets/glide-data-grid-BB5mCaCD.js +138 -0
  58. package/dist/web/assets/{glimmer-js-Begy4UT7.js → glimmer-js-DLi5mWYO.js} +1 -1
  59. package/dist/web/assets/{glimmer-ts-rPApRY8N.js → glimmer-ts-D-scFX30.js} +1 -1
  60. package/dist/web/assets/{glsl-wrbPvrBL.js → glsl-dbQzF4iA.js} +1 -1
  61. package/dist/web/assets/{graphql-Cu4-NR__.js → graphql-D1m5Wen2.js} +1 -1
  62. package/dist/web/assets/group-chat-tab-BPIOdFJw.js +1 -0
  63. package/dist/web/assets/{hack-Ddo93XKD.js → hack-CqYmpO7u.js} +1 -1
  64. package/dist/web/assets/{haml-BFX_1i8j.js → haml-BXzKWEag.js} +1 -1
  65. package/dist/web/assets/hand-x0ejq3fS.js +1 -0
  66. package/dist/web/assets/{handlebars-5gFKA4H5.js → handlebars-DXnrtHtq.js} +1 -1
  67. package/dist/web/assets/{html-C06I-zeO.js → html-DhgQJ-xL.js} +1 -1
  68. package/dist/web/assets/{html-derivative-e5JLAFZF.js → html-derivative-xZRft-YE.js} +1 -1
  69. package/dist/web/assets/{http-CrAAhSU7.js → http-B53mSj14.js} +1 -1
  70. package/dist/web/assets/{hurl-T1V3SX9T.js → hurl-CsomVy04.js} +1 -1
  71. package/dist/web/assets/{hxml-B056LLKN.js → hxml-LffjWwKA.js} +1 -1
  72. package/dist/web/assets/{image-preview-DWyuCYT3.js → image-preview-CNA6XMNS.js} +1 -1
  73. package/dist/web/assets/index-BHdtSKzb.js +52 -0
  74. package/dist/web/assets/index-DN9XUQ8D.css +2 -0
  75. package/dist/web/assets/info-3K5VOQVL-BAgmboBp.js +1 -0
  76. package/dist/web/assets/{input-DouJ9Zvt.js → input-D0ol5jW0.js} +1 -1
  77. package/dist/web/assets/{jinja-DGdtRh43.js → jinja-CCHURl7V.js} +1 -1
  78. package/dist/web/assets/{jison-Ah6QobPS.js → jison-7qBd8dnR.js} +1 -1
  79. package/dist/web/assets/{julia-BJeGOK0K.js → julia-BY9pnTcy.js} +1 -1
  80. package/dist/web/assets/{just-iw9oRs7j.js → just-D7wRSNRr.js} +1 -1
  81. package/dist/web/assets/{keybindings-store-0Wqfa7Qp.js → keybindings-store-BGkB72gM.js} +1 -1
  82. package/dist/web/assets/keybindings-store-Bq6VWl5X.js +1 -0
  83. package/dist/web/assets/keyboard-DBBaoQSu.js +1 -0
  84. package/dist/web/assets/{latex-DHjj5hyN.js → latex-RgsCae55.js} +1 -1
  85. package/dist/web/assets/{liquid-B-FFecDc.js → liquid-CnDFzvOZ.js} +1 -1
  86. package/dist/web/assets/{lua-DDianJp_.js → lua-0lj5W8sm.js} +1 -1
  87. package/dist/web/assets/{markdown-renderer-BHiUhQN8.js → markdown-renderer-B9wzBWm9.js} +3 -3
  88. package/dist/web/assets/markdown-renderer-DeSV1CCQ.js +1 -0
  89. package/dist/web/assets/{marko-BW5SBVng.js → marko-CQgqAhbV.js} +1 -1
  90. package/dist/web/assets/{mdc-B9gL9bjl.js → mdc-BkIcTiIy.js} +1 -1
  91. package/dist/web/assets/{media-url-DUK-k0bB.js → media-url-DDciwvLU.js} +1 -1
  92. package/dist/web/assets/mobile-bottom-sheet-pjcHKorA.js +1 -0
  93. package/dist/web/assets/mobile-explorer-sheet-DPdxpnKh.js +1 -0
  94. package/dist/web/assets/monitor-smartphone-DLZ6Q05s.js +1 -0
  95. package/dist/web/assets/{nextflow-dTluY6qy.js → nextflow-DvIW68DS.js} +1 -1
  96. package/dist/web/assets/{nginx-DlwghGI-.js → nginx-O-hft0gG.js} +1 -1
  97. package/dist/web/assets/{nim-N9jddb5D.js → nim-BxrR4HwQ.js} +1 -1
  98. package/dist/web/assets/notification-store-BtijuGez.js +1 -0
  99. package/dist/web/assets/{number-overlay-editor-BVXM7aAs.js → number-overlay-editor-BoLRYuZT.js} +1 -1
  100. package/dist/web/assets/{overview-panel-DCCDmtCQ.js → overview-panel-l3g1gT5e.js} +1 -1
  101. package/dist/web/assets/packet-RMMSAZCW-RVlbbDRS.js +1 -0
  102. package/dist/web/assets/{panel-store-B4rijFKN.js → panel-store-UOV8wrfR.js} +1 -1
  103. package/dist/web/assets/{pdf-preview-D7yLmAZW.js → pdf-preview-B2CJ_EKv.js} +1 -1
  104. package/dist/web/assets/{perl-CkmpYKa_.js → perl-Da-uNqmL.js} +1 -1
  105. package/dist/web/assets/{php-BwZ3KDPo.js → php-JMu45mEx.js} +1 -1
  106. package/dist/web/assets/pie-UPGHQEXC-ZWb4izpk.js +1 -0
  107. package/dist/web/assets/{postgres-viewer--CRN1fvO.js → postgres-viewer-23xdZYxp.js} +3 -3
  108. package/dist/web/assets/process-table-CUsPf7wv.js +1 -0
  109. package/dist/web/assets/{project-store-BuY7rxn_.js → project-store-DTUCS65m.js} +1 -1
  110. package/dist/web/assets/{pug-B3rBPqQo.js → pug-CLzyQhia.js} +1 -1
  111. package/dist/web/assets/{qml-BfDbWFmg.js → qml-BHXfGB1l.js} +1 -1
  112. package/dist/web/assets/radar-KQ55EAFF-bsP5x1Bx.js +1 -0
  113. package/dist/web/assets/{razor-B1ww1r38.js → razor-BqetJLN3.js} +1 -1
  114. package/dist/web/assets/remote-desktop-mobile-sheet-FTF6IBhF.js +2 -0
  115. package/dist/web/assets/remote-desktop-mobile-view-DSwG4OSk.js +1 -0
  116. package/dist/web/assets/remote-desktop-stats-overlay-Bz6xZ5y9.js +1 -0
  117. package/dist/web/assets/remote-desktop-warning-gate-DrYySLZ5.js +1 -0
  118. package/dist/web/assets/remote-desktop-window-content-Ndvezorb.js +1 -0
  119. package/dist/web/assets/{rst-C0MSq6m-.js → rst-iQdJZ0BP.js} +1 -1
  120. package/dist/web/assets/{ruby-ClIZ1wb3.js → ruby-CNwzZGdH.js} +1 -1
  121. package/dist/web/assets/{run-in-terminal-4efbW2Xv.js → run-in-terminal-CBXmVGWa.js} +1 -1
  122. package/dist/web/assets/{sas-DR0j3o4_.js → sas-BpBIT2eR.js} +1 -1
  123. package/dist/web/assets/{scroll-area-ZP8wcwTI.js → scroll-area-lc0ZHORr.js} +1 -1
  124. package/dist/web/assets/{scss-Vh3JLayR.js → scss-D1MotuEp.js} +1 -1
  125. package/dist/web/assets/{send-to-chat-BNrEpAyC.js → send-to-chat-DJAdlvJ8.js} +1 -1
  126. package/dist/web/assets/settings-store-zbPkG7o-.js +2 -0
  127. package/dist/web/assets/settings-tab-Cn-AqUP_.js +1 -0
  128. package/dist/web/assets/settings-tab-xyRpt2gq.js +3 -0
  129. package/dist/web/assets/{shaderlab-0rHRnQ18.js → shaderlab-BNqmcPQi.js} +1 -1
  130. package/dist/web/assets/{shellsession-Dxdw6D8c.js → shellsession-BBLOVOO-.js} +1 -1
  131. package/dist/web/assets/{soy-BHlSNj1y.js → soy-BpTGo9uy.js} +1 -1
  132. package/dist/web/assets/{sparql-B2QaPpni.js → sparql-D7A3yKob.js} +1 -1
  133. package/dist/web/assets/{sql-query-editor-R_iKjPP9.js → sql-query-editor-BE3mLYyz.js} +1 -1
  134. package/dist/web/assets/{sqlite-viewer-b2onA0SP.js → sqlite-viewer-wN5RP8sd.js} +1 -1
  135. package/dist/web/assets/{stata-CwIxjsEJ.js → stata-B7N56ptS.js} +1 -1
  136. package/dist/web/assets/{surrealql-C6vo-rp-.js → surrealql-CTmnD-lv.js} +1 -1
  137. package/dist/web/assets/{svelte-LLdJ6rlH.js → svelte-BppwY9TR.js} +1 -1
  138. package/dist/web/assets/{switch-DV-BDjyk.js → switch-BmjKoIpR.js} +1 -1
  139. package/dist/web/assets/system-monitor-body-B2M0MC6y.js +2 -0
  140. package/dist/web/assets/system-monitor-tab-OYca4qaf.js +1 -0
  141. package/dist/web/assets/{system-monitor-window-content-BPif0azo.js → system-monitor-window-content-CHz9WdTm.js} +1 -1
  142. package/dist/web/assets/{tab-host-window-content-BnAN6m4K.js → tab-host-window-content-DKev3GJz.js} +1 -1
  143. package/dist/web/assets/{tab-store-tFnyPmm4.js → tab-store-DzYSsw5a.js} +1 -1
  144. package/dist/web/assets/team-member-sheet-BQ738Lli.js +2 -0
  145. package/dist/web/assets/{team-member-window-content-BSyU-5Uc.js → team-member-window-content-CK08f5cK.js} +1 -1
  146. package/dist/web/assets/{templ-CJGvhEP5.js → templ-CvTMKKra.js} +1 -1
  147. package/dist/web/assets/{terminal-tab-Ncor0Rfu.js → terminal-tab-DZ3QiYcs.js} +3 -3
  148. package/dist/web/assets/{tex-psXWhc4t.js → tex--c4POEUE.js} +1 -1
  149. package/dist/web/assets/{tool-cards-DdVP1wrD.js → tool-cards-Bw1P0MKU.js} +4 -4
  150. package/dist/web/assets/treemap-KZPCXAKY-Dh1oxNdQ.js +1 -0
  151. package/dist/web/assets/{ts-tags-D5Ar_ZCO.js → ts-tags--kx7D-Hw.js} +1 -1
  152. package/dist/web/assets/{twig-vJgGC-qY.js → twig-UG9uMHGd.js} +1 -1
  153. package/dist/web/assets/{use-blob-url-BOVGWg9F.js → use-blob-url-Bdxopwwc.js} +1 -1
  154. package/dist/web/assets/{use-monaco-theme-BshnLXoY.js → use-monaco-theme-BOmd2wpe.js} +1 -1
  155. package/dist/web/assets/{use-open-team-member-CY3wOdWL.js → use-open-team-member-D9EOB8-i.js} +1 -1
  156. package/dist/web/assets/use-visual-viewport-Sfb6CZ80.js +1 -0
  157. package/dist/web/assets/{use-websocket-B7xjNsyD.js → use-websocket-B7Xj-Q4W.js} +1 -1
  158. package/dist/web/assets/{vendor-mermaid-999ksD45.js → vendor-mermaid-0Nt-ew76.js} +1 -1
  159. package/dist/web/assets/{video-preview-7F72sRwf.js → video-preview-B0nbTGjQ.js} +1 -1
  160. package/dist/web/assets/{vue-html-BN5ZLu-H.js → vue-html-8KEW6-I9.js} +1 -1
  161. package/dist/web/assets/{vue-BWngFyav.js → vue-jjTomlbt.js} +1 -1
  162. package/dist/web/assets/{vue-vine-BZHnO8yV.js → vue-vine-C5tohCkU.js} +1 -1
  163. package/dist/web/assets/{window-pip-registry-BnYU83LE.js → window-pip-registry-FdZdGF7h.js} +1 -1
  164. package/dist/web/assets/window-store-D0x_fxr0.js +1 -0
  165. package/dist/web/assets/{xml-DS2beZHp.js → xml-ByFFosqL.js} +1 -1
  166. package/dist/web/assets/{xsl-Ciiku1Bq.js → xsl-CZUwiLkj.js} +1 -1
  167. package/dist/web/index.html +46 -43
  168. package/dist/web/sw.js +1 -1
  169. package/docs/architecture/ai-chat-and-providers.md +3 -0
  170. package/package.json +1 -1
  171. package/packages/vscode-compat/node_modules/.bin/tsc.bunx +0 -0
  172. package/packages/vscode-compat/node_modules/.bin/tsc.exe +0 -0
  173. package/packages/vscode-compat/node_modules/.bin/tsserver.bunx +0 -0
  174. package/packages/vscode-compat/node_modules/.bin/tsserver.exe +0 -0
  175. package/src/cli/commands/backup-cmd.ts +119 -0
  176. package/src/index.ts +3 -0
  177. package/src/providers/claude-agent-sdk.ts +29 -1
  178. package/src/server/index.ts +42 -15
  179. package/src/server/routes/accounts.ts +30 -2
  180. package/src/server/routes/chat.ts +8 -1
  181. package/src/server/routes/named-tunnel.ts +5 -2
  182. package/src/server/routes/remote-desktop.ts +64 -0
  183. package/src/server/routes/settings.ts +2 -0
  184. package/src/server/ws/chat.ts +126 -7
  185. package/src/server/ws/remote-desktop.ts +86 -0
  186. package/src/services/account.service.ts +106 -23
  187. package/src/services/db-backup/db-backup-paths.ts +66 -0
  188. package/src/services/db-backup/db-backup-restore.ts +105 -0
  189. package/src/services/db-backup/db-backup-retention.ts +96 -0
  190. package/src/services/db-backup/db-backup-sync.ts +113 -0
  191. package/src/services/db-backup/db-backup.service.ts +61 -0
  192. package/src/services/db.service.ts +29 -1
  193. package/src/services/edge-forwarder.ts +191 -191
  194. package/src/services/fs-credential-path-guard.ts +19 -1
  195. package/src/services/named-tunnel/cloudflare-dns-api.ts +20 -4
  196. package/src/services/named-tunnel/cloudflared-login.service.ts +2 -2
  197. package/src/services/named-tunnel/named-tunnel-args.ts +17 -3
  198. package/src/services/named-tunnel/named-tunnel-setup.service.ts +20 -2
  199. package/src/services/nested-subagent-spy.ts +206 -0
  200. package/src/services/remote-desktop/access-unit-assembler.ts +90 -0
  201. package/src/services/remote-desktop/avc1-codec-string.ts +18 -0
  202. package/src/services/remote-desktop/nal-splitter.ts +100 -0
  203. package/src/services/remote-desktop/remote-desktop-capture.ts +120 -0
  204. package/src/services/remote-desktop/remote-desktop-encoder-args.ts +42 -0
  205. package/src/services/remote-desktop/remote-desktop-flag.ts +12 -0
  206. package/src/services/remote-desktop/remote-desktop-input.ts +217 -0
  207. package/src/services/remote-desktop/remote-desktop-nonce.ts +38 -0
  208. package/src/services/remote-desktop/remote-desktop-session.ts +189 -0
  209. package/src/services/remote-desktop/remote-desktop-vk-map.ts +41 -0
  210. package/src/services/subagent-transcript-merger.ts +92 -75
  211. package/src/services/subprocess-retention.ts +29 -6
  212. package/src/services/supervisor.ts +58 -0
  213. package/src/services/team-member-activity/subagent-transcript-index.ts +56 -0
  214. package/src/services/windows-process-tree.ts +351 -351
  215. package/src/types/chat.ts +2 -0
  216. package/src/web/app.tsx +8 -0
  217. package/src/web/components/chat/account-dialogs.tsx +11 -4
  218. package/src/web/components/chat/question-card.tsx +9 -2
  219. package/src/web/components/chat/usage-badge.tsx +17 -3
  220. package/src/web/components/floating-window/window-content-registry.ts +2 -0
  221. package/src/web/components/floating-window/window-store-types.ts +1 -1
  222. package/src/web/components/layout/mobile-drawer.tsx +38 -27
  223. package/src/web/components/layout/nav-section-rail.tsx +10 -2
  224. package/src/web/components/remote-desktop/open-remote-desktop.ts +26 -0
  225. package/src/web/components/remote-desktop/remote-desktop-coords.ts +98 -0
  226. package/src/web/components/remote-desktop/remote-desktop-frame-timestamp.ts +21 -0
  227. package/src/web/components/remote-desktop/remote-desktop-gesture-classifiers.ts +56 -0
  228. package/src/web/components/remote-desktop/remote-desktop-mobile-key-bar.tsx +131 -0
  229. package/src/web/components/remote-desktop/remote-desktop-mobile-sheet.tsx +48 -0
  230. package/src/web/components/remote-desktop/remote-desktop-mobile-toolbar.tsx +79 -0
  231. package/src/web/components/remote-desktop/remote-desktop-mobile-view.tsx +190 -0
  232. package/src/web/components/remote-desktop/remote-desktop-stats-overlay.tsx +54 -0
  233. package/src/web/components/remote-desktop/remote-desktop-stats.ts +37 -0
  234. package/src/web/components/remote-desktop/remote-desktop-touch-gesture-tracker.ts +195 -0
  235. package/src/web/components/remote-desktop/remote-desktop-warning-gate.tsx +106 -0
  236. package/src/web/components/remote-desktop/remote-desktop-window-content.tsx +86 -0
  237. package/src/web/components/remote-desktop/remote-desktop-ws-url.ts +22 -0
  238. package/src/web/components/remote-desktop/use-h264-canvas-decoder.ts +175 -0
  239. package/src/web/components/remote-desktop/use-remote-desktop-available.ts +29 -0
  240. package/src/web/components/remote-desktop/use-remote-desktop-connection.ts +147 -0
  241. package/src/web/components/remote-desktop/use-remote-desktop-mobile-open-state.ts +18 -0
  242. package/src/web/components/remote-desktop/use-remote-desktop-touch.ts +224 -0
  243. package/src/web/components/remote-desktop/use-remote-desktop-virtual-keyboard.ts +50 -0
  244. package/src/web/components/remote-desktop/use-remote-input-capture.ts +92 -0
  245. package/src/web/components/tunnels/named-tunnel/named-tunnel-copy.ts +59 -59
  246. package/src/web/components/tunnels/named-tunnel/named-tunnel-section.tsx +2 -2
  247. package/src/web/hooks/use-notification-badge.ts +19 -11
  248. package/src/web/lib/feature-badges.ts +2 -0
  249. package/src/web/stores/settings-store.ts +25 -0
  250. package/src/web/stores/streaming-store.ts +21 -2
  251. package/dist/web/assets/ai-settings-section-DY-t1bK8.js +0 -1
  252. package/dist/web/assets/api-client-BogqsFna.js +0 -1
  253. package/dist/web/assets/api-settings-DRF9oYkn.js +0 -1
  254. package/dist/web/assets/architecture-PBZL5I3N-nw5-j_I_.js +0 -1
  255. package/dist/web/assets/chat-tab-IcnU3nqQ.js +0 -15
  256. package/dist/web/assets/code-editor-Dno5Srkm.js +0 -10
  257. package/dist/web/assets/explorer-body-DB1L30pa.js +0 -2
  258. package/dist/web/assets/explorer-window-content-Cwlt3C3I.js +0 -1
  259. package/dist/web/assets/gitGraph-HDMCJU4V-C1xf87gN.js +0 -1
  260. package/dist/web/assets/glide-data-grid-Dz8lx6n2.js +0 -138
  261. package/dist/web/assets/group-chat-tab-DFwr-pig.js +0 -1
  262. package/dist/web/assets/index-DWpNR3nB.css +0 -2
  263. package/dist/web/assets/index-oUKV5nIA.js +0 -52
  264. package/dist/web/assets/info-3K5VOQVL-C2z7FTDe.js +0 -1
  265. package/dist/web/assets/keybindings-store-d54pv2NK.js +0 -1
  266. package/dist/web/assets/markdown-renderer-CnE36_gd.js +0 -1
  267. package/dist/web/assets/mobile-bottom-sheet-CJ7ApOkI.js +0 -1
  268. package/dist/web/assets/mobile-explorer-sheet-BzjlS1Xn.js +0 -1
  269. package/dist/web/assets/notification-store-C7UBqxYP.js +0 -1
  270. package/dist/web/assets/packet-RMMSAZCW-DQUxN0wU.js +0 -1
  271. package/dist/web/assets/pie-UPGHQEXC-BOr9ek4Q.js +0 -1
  272. package/dist/web/assets/process-table-CXC10GSy.js +0 -1
  273. package/dist/web/assets/radar-KQ55EAFF-DSErxZFb.js +0 -1
  274. package/dist/web/assets/settings-store-OLJE7dPH.js +0 -2
  275. package/dist/web/assets/settings-tab-B1rvHFc6.js +0 -3
  276. package/dist/web/assets/settings-tab-BUlmPJ2w.js +0 -1
  277. package/dist/web/assets/system-monitor-body-DPYQlBEt.js +0 -2
  278. package/dist/web/assets/system-monitor-tab-CPQdWv27.js +0 -1
  279. package/dist/web/assets/team-member-sheet-Bu2wG1sm.js +0 -2
  280. package/dist/web/assets/treemap-KZPCXAKY-C17p0LQw.js +0 -1
  281. package/dist/web/assets/window-store-CQ1lghvv.js +0 -1
  282. /package/dist/web/assets/{abap-CjzrhAS2.js → abap-C5DFF0s3.js} +0 -0
  283. /package/dist/web/assets/{actionscript-3-B59Kbl-9.js → actionscript-3-B0qyRNbc.js} +0 -0
  284. /package/dist/web/assets/{ada-B7gItKAE.js → ada-bAJzplug.js} +0 -0
  285. /package/dist/web/assets/{andromeeda-Dy5zcy0Q.js → andromeeda-DUCpISy6.js} +0 -0
  286. /package/dist/web/assets/{apache-B6T9jrc0.js → apache-BhAr84Z_.js} +0 -0
  287. /package/dist/web/assets/{apex-CTsIxDQw.js → apex-CRv8YnNq.js} +0 -0
  288. /package/dist/web/assets/{api-client-oY1tC3tM.js → api-client-BzWM7XPR.js} +0 -0
  289. /package/dist/web/assets/{applescript-DuycKmmb.js → applescript-CD-Cw8bt.js} +0 -0
  290. /package/dist/web/assets/{apply-theme-r8tKDrCR.js → apply-theme-DJ794zSQ.js} +0 -0
  291. /package/dist/web/assets/{ara-CISL3599.js → ara-BUzeQYoG.js} +0 -0
  292. /package/dist/web/assets/{asciidoc-BXyE2Lpr.js → asciidoc-CT2hTg-v.js} +0 -0
  293. /package/dist/web/assets/{asm-y258phtP.js → asm-CAu35JeY.js} +0 -0
  294. /package/dist/web/assets/{aurora-x-Dq3Jc78M.js → aurora-x-BeFJoIA1.js} +0 -0
  295. /package/dist/web/assets/{awk-DxL6XSJv.js → awk-Vau-DrGN.js} +0 -0
  296. /package/dist/web/assets/{ayu-dark-DjoK6Evo.js → ayu-dark-CLe-OTsQ.js} +0 -0
  297. /package/dist/web/assets/{ayu-light-CKKXBLMI.js → ayu-light-CJbQfu4M.js} +0 -0
  298. /package/dist/web/assets/{ayu-mirage-DGXSrrXB.js → ayu-mirage-GWaKwdrx.js} +0 -0
  299. /package/dist/web/assets/{ballerina-DZSXFmUf.js → ballerina-DWu0USI5.js} +0 -0
  300. /package/dist/web/assets/{bat-BNsZk6nY.js → bat-_07Huw7E.js} +0 -0
  301. /package/dist/web/assets/{beancount-cPl4gJct.js → beancount-EcvogrcF.js} +0 -0
  302. /package/dist/web/assets/{berry-DGAodERk.js → berry-BBB87SY7.js} +0 -0
  303. /package/dist/web/assets/{bibtex-DftVoRif.js → bibtex-DbueS87A.js} +0 -0
  304. /package/dist/web/assets/{bicep-Suioyyzh.js → bicep-tcmXnUo4.js} +0 -0
  305. /package/dist/web/assets/{bird2-DjU24I2P.js → bird2-B2qwilIR.js} +0 -0
  306. /package/dist/web/assets/{c-DFi8Y_nN.js → c-Z58oivSt.js} +0 -0
  307. /package/dist/web/assets/{c3-1eSHnH5V.js → c3-U40cGT9p.js} +0 -0
  308. /package/dist/web/assets/{cadence-DLLsFwQP.js → cadence-BFcD-LyM.js} +0 -0
  309. /package/dist/web/assets/{can-open-in-ppm-in727eFQ.js → can-open-in-ppm-CdCK2c2a.js} +0 -0
  310. /package/dist/web/assets/{catppuccin-frappe-DDj0JEiY.js → catppuccin-frappe-RkC9AX6J.js} +0 -0
  311. /package/dist/web/assets/{catppuccin-latte-DPyANHyR.js → catppuccin-latte-Bsi4l-nO.js} +0 -0
  312. /package/dist/web/assets/{catppuccin-macchiato-CO-h8VTT.js → catppuccin-macchiato-B8JIdTW-.js} +0 -0
  313. /package/dist/web/assets/{catppuccin-mocha-BCmbN2IZ.js → catppuccin-mocha-oH8wwrDj.js} +0 -0
  314. /package/dist/web/assets/{clarity-C0pYsZjs.js → clarity-C3WNeRCR.js} +0 -0
  315. /package/dist/web/assets/{clipboard-DBLGKMrH.js → clipboard-B-gwJ8DF.js} +0 -0
  316. /package/dist/web/assets/{clojure-JFr6s8iZ.js → clojure-CFoAz7u9.js} +0 -0
  317. /package/dist/web/assets/{cmake-EEcLEgVy.js → cmake-Bcsqp9yR.js} +0 -0
  318. /package/dist/web/assets/{codeowners-Deh3Lx0u.js → codeowners-DC2Z7heP.js} +0 -0
  319. /package/dist/web/assets/{codeql-C317igT5.js → codeql-BfG68Al5.js} +0 -0
  320. /package/dist/web/assets/{common-lisp-DepbATZs.js → common-lisp-Z5P-lKQe.js} +0 -0
  321. /package/dist/web/assets/{coq-MxgxU5ya.js → coq-BJslqrnv.js} +0 -0
  322. /package/dist/web/assets/{csharp-eEFXdsAq.js → csharp-DhhZTOTs.js} +0 -0
  323. /package/dist/web/assets/{css-Db-syWW9.js → css-DiFIpMfE.js} +0 -0
  324. /package/dist/web/assets/{csv-DHeYcbaq.js → csv-DViLbHxI.js} +0 -0
  325. /package/dist/web/assets/{csv-parser-_JWMLGl3.js → csv-parser-B2v8MoUy.js} +0 -0
  326. /package/dist/web/assets/{cue-BmUNowrt.js → cue-CoG3mg2I.js} +0 -0
  327. /package/dist/web/assets/{cypher-XjXHgCNS.js → cypher-jTxC8NAB.js} +0 -0
  328. /package/dist/web/assets/{d-BWJnZtig.js → d-6hKIUAbU.js} +0 -0
  329. /package/dist/web/assets/{dark-plus-Db7umas1.js → dark-plus-D_-np2Sr.js} +0 -0
  330. /package/dist/web/assets/{dart-DSI4HYh1.js → dart-CVpxLpVn.js} +0 -0
  331. /package/dist/web/assets/{data-grid-types-CfVHh9gv.js → data-grid-types-Dq_H1IPa.js} +0 -0
  332. /package/dist/web/assets/{dax-yw1JsAni.js → dax-BPqJ8qIY.js} +0 -0
  333. /package/dist/web/assets/{desktop-C2QO4RvD.js → desktop-u_y5_Hr5.js} +0 -0
  334. /package/dist/web/assets/{diff-Drt8aEyp.js → diff-Duj1XMrd.js} +0 -0
  335. /package/dist/web/assets/{dist-DNRvhVdz.js → dist-CEZ4plgH.js} +0 -0
  336. /package/dist/web/assets/{dist-VBxOHLmN.js → dist-aDSxTR_v.js} +0 -0
  337. /package/dist/web/assets/{docker-ByDKbmLl.js → docker-8UGSCc7N.js} +0 -0
  338. /package/dist/web/assets/{dotenv-BkfOLytR.js → dotenv-DVnj8kyR.js} +0 -0
  339. /package/dist/web/assets/{dracula-DAmrm-Un.js → dracula-D0cEmSg7.js} +0 -0
  340. /package/dist/web/assets/{dracula-soft-BUOEnKqR.js → dracula-soft-DfGS5Yfr.js} +0 -0
  341. /package/dist/web/assets/{dream-maker-DQBIfSiO.js → dream-maker-qG8kMGTF.js} +0 -0
  342. /package/dist/web/assets/{emacs-lisp-Blh5kBD3.js → emacs-lisp-iVqyMLyT.js} +0 -0
  343. /package/dist/web/assets/{everforest-dark-CEzhDxHq.js → everforest-dark-Cruygd5U.js} +0 -0
  344. /package/dist/web/assets/{everforest-light-CPk_5Khm.js → everforest-light-BiJa8RHL.js} +0 -0
  345. /package/dist/web/assets/{fennel-B1MT_EBZ.js → fennel-H6XSEIoz.js} +0 -0
  346. /package/dist/web/assets/{fish-C_HGcewt.js → fish-ho_7CxX6.js} +0 -0
  347. /package/dist/web/assets/{fluent-Dp1Iclmx.js → fluent-1l5ssJTF.js} +0 -0
  348. /package/dist/web/assets/{format-bytes-53WBtyi2.js → format-bytes-gQw5wzqa.js} +0 -0
  349. /package/dist/web/assets/{fortran-free-form-B_-UA4XC.js → fortran-free-form-Bo1x233A.js} +0 -0
  350. /package/dist/web/assets/{gdscript-Bm_JpjS_.js → gdscript-DffFMp_k.js} +0 -0
  351. /package/dist/web/assets/{gdshader-C_PNmfYU.js → gdshader-CvnpAiAF.js} +0 -0
  352. /package/dist/web/assets/{genie-B5rmR2TF.js → genie-2eOvAEzW.js} +0 -0
  353. /package/dist/web/assets/{gherkin-BTJ34TJ9.js → gherkin-DL-5OUlV.js} +0 -0
  354. /package/dist/web/assets/{github-dark-DOkNVj9H.js → github-dark-DrTZprgG.js} +0 -0
  355. /package/dist/web/assets/{github-dark-default-DTsmiyVo.js → github-dark-default-_mDH8IMP.js} +0 -0
  356. /package/dist/web/assets/{github-dark-dimmed-CjbxAe9s.js → github-dark-dimmed-C48hJuLn.js} +0 -0
  357. /package/dist/web/assets/{github-dark-high-contrast-r_M8F_k7.js → github-dark-high-contrast-BQ-zGGNe.js} +0 -0
  358. /package/dist/web/assets/{github-light-BzfxyMyb.js → github-light-BYc90Yx8.js} +0 -0
  359. /package/dist/web/assets/{github-light-default-BOqiBIy5.js → github-light-default-Daecj4J5.js} +0 -0
  360. /package/dist/web/assets/{github-light-high-contrast-DQzBrDM4.js → github-light-high-contrast-DoafCbsU.js} +0 -0
  361. /package/dist/web/assets/{gleam-BWmuAtD8.js → gleam-hUWWjmnp.js} +0 -0
  362. /package/dist/web/assets/{gn-CNQPjiZW.js → gn-7PJ3R70o.js} +0 -0
  363. /package/dist/web/assets/{gnuplot-BlHjcPMe.js → gnuplot-V-Pxck7b.js} +0 -0
  364. /package/dist/web/assets/{go-Bn8Ba9uz.js → go-ARF6DprD.js} +0 -0
  365. /package/dist/web/assets/{groovy-C1Y1_F4V.js → groovy-CKGBIPOz.js} +0 -0
  366. /package/dist/web/assets/{gruvbox-dark-hard-DueOsHav.js → gruvbox-dark-hard-Cm9wqdI3.js} +0 -0
  367. /package/dist/web/assets/{gruvbox-dark-medium-DaQjD538.js → gruvbox-dark-medium-Cmsd6dG8.js} +0 -0
  368. /package/dist/web/assets/{gruvbox-dark-soft-CbbX2WOm.js → gruvbox-dark-soft-BBGlGGCz.js} +0 -0
  369. /package/dist/web/assets/{gruvbox-light-hard-E2M70ljZ.js → gruvbox-light-hard-BCR7KmqG.js} +0 -0
  370. /package/dist/web/assets/{gruvbox-light-medium-B_DDLY6h.js → gruvbox-light-medium-CP32bga8.js} +0 -0
  371. /package/dist/web/assets/{gruvbox-light-soft-2SZmyC1F.js → gruvbox-light-soft-qjxk8ps6.js} +0 -0
  372. /package/dist/web/assets/{haskell-D8DeoXtG.js → haskell-C5DzwGRa.js} +0 -0
  373. /package/dist/web/assets/{haxe-BmZm7B0W.js → haxe-C8f_jCVv.js} +0 -0
  374. /package/dist/web/assets/{hcl-CKnBM3ng.js → hcl-DetJkf6E.js} +0 -0
  375. /package/dist/web/assets/{hjson-Ct9t4-ci.js → hjson-DeZhwIdo.js} +0 -0
  376. /package/dist/web/assets/{hlsl-BZSASBqS.js → hlsl-SMIDLRyX.js} +0 -0
  377. /package/dist/web/assets/{horizon-CzX1AZ08.js → horizon-BMAVDxMx.js} +0 -0
  378. /package/dist/web/assets/{horizon-bright-CCVNeRIP.js → horizon-bright-3BaV_VGD.js} +0 -0
  379. /package/dist/web/assets/{houston-DBlJN7xc.js → houston-BWBbEPvb.js} +0 -0
  380. /package/dist/web/assets/{hy-Dyc6h6Xb.js → hy-DcsmE-Nm.js} +0 -0
  381. /package/dist/web/assets/{image-gallery-DujlrjOC.js → image-gallery-Bqb-wjNw.js} +0 -0
  382. /package/dist/web/assets/{imba-Bauru7s2.js → imba-CnkgnYMf.js} +0 -0
  383. /package/dist/web/assets/{ini-SjdwtaTp.js → ini-BnvTdau7.js} +0 -0
  384. /package/dist/web/assets/{java-D2r0ocpf.js → java-BLFACXat.js} +0 -0
  385. /package/dist/web/assets/{javascript-y-lof7iP.js → javascript-BKcFWENk.js} +0 -0
  386. /package/dist/web/assets/{json-DO4LSx5A.js → json-3AJtJADf.js} +0 -0
  387. /package/dist/web/assets/{json5-BEwWf-W3.js → json5-DLyDVlwe.js} +0 -0
  388. /package/dist/web/assets/{jsonc-OBEFv7gP.js → jsonc-B5DgF1jW.js} +0 -0
  389. /package/dist/web/assets/{jsonl-DOyW4Mg3.js → jsonl-CV_O71a2.js} +0 -0
  390. /package/dist/web/assets/{jsonnet-BL5R2CpP.js → jsonnet-DZfPLgYz.js} +0 -0
  391. /package/dist/web/assets/{jssm-ksPusAyg.js → jssm-Cr1zYOsY.js} +0 -0
  392. /package/dist/web/assets/{jsx-B6XEu6O-.js → jsx-VN-JS2_q.js} +0 -0
  393. /package/dist/web/assets/{kanagawa-dragon-JBVe_ji_.js → kanagawa-dragon-D9CcT3xg.js} +0 -0
  394. /package/dist/web/assets/{kanagawa-lotus-ChprO68_.js → kanagawa-lotus-DLXsB8fr.js} +0 -0
  395. /package/dist/web/assets/{kanagawa-wave-D_uB_R0Q.js → kanagawa-wave-weDs3Wjz.js} +0 -0
  396. /package/dist/web/assets/{kdl-pf5B8N_m.js → kdl-0XF56jnT.js} +0 -0
  397. /package/dist/web/assets/{kotlin-BdF0METC.js → kotlin-BPkH9vzk.js} +0 -0
  398. /package/dist/web/assets/{kusto-BneVP-OU.js → kusto-DMVpADb9.js} +0 -0
  399. /package/dist/web/assets/{laserwave-C4-UPIyG.js → laserwave-Cl6T2cGP.js} +0 -0
  400. /package/dist/web/assets/{lean-BN6Jdymq.js → lean-BvwzQGl1.js} +0 -0
  401. /package/dist/web/assets/{less-Cx-fdlDC.js → less-DI_03xkC.js} +0 -0
  402. /package/dist/web/assets/{lib-CMuBa85c.js → lib-v9x_qXgI.js} +0 -0
  403. /package/dist/web/assets/{libesm-BB74PRsH.js → libesm-dcbw4_18.js} +0 -0
  404. /package/dist/web/assets/{light-plus-DFnnn_iL.js → light-plus-hIiIsQN_.js} +0 -0
  405. /package/dist/web/assets/{llvm-BGxtW0Nw.js → llvm-B5hjjSWc.js} +0 -0
  406. /package/dist/web/assets/{loader-circle-Dpqcv0eS.js → loader-circle-DouKgIXy.js} +0 -0
  407. /package/dist/web/assets/{lock-DldbT31x.js → lock-CNxUGpTk.js} +0 -0
  408. /package/dist/web/assets/{log-kQb4eJnj.js → log-D28raQiE.js} +0 -0
  409. /package/dist/web/assets/{logo-DqAzaq7s.js → logo-6Cdd4ASb.js} +0 -0
  410. /package/dist/web/assets/{luau-Dc2cp-zS.js → luau-CK9nKpOX.js} +0 -0
  411. /package/dist/web/assets/{make-DYg9dwaJ.js → make-CVnxKCB6.js} +0 -0
  412. /package/dist/web/assets/{markdown-O4EPpS3K.js → markdown-B9mMQzD5.js} +0 -0
  413. /package/dist/web/assets/{material-theme-ClP8yfQ2.js → material-theme-BZSs2o0j.js} +0 -0
  414. /package/dist/web/assets/{material-theme-darker-LOK55hGu.js → material-theme-darker-BeAQBzQ_.js} +0 -0
  415. /package/dist/web/assets/{material-theme-lighter-j72tzZqi.js → material-theme-lighter-BAe0IXcs.js} +0 -0
  416. /package/dist/web/assets/{material-theme-ocean-C19LKClA.js → material-theme-ocean-CiPIf0Np.js} +0 -0
  417. /package/dist/web/assets/{material-theme-palenight-DJ5tN2ax.js → material-theme-palenight-DJBb4_XN.js} +0 -0
  418. /package/dist/web/assets/{matlab-DQNZ_NU8.js → matlab-CY0dbp_s.js} +0 -0
  419. /package/dist/web/assets/{mdx-CJayB7XK.js → mdx-DU9zbF7h.js} +0 -0
  420. /package/dist/web/assets/{mermaid-Cb0TRX92.js → mermaid-UmmjGwdh.js} +0 -0
  421. /package/dist/web/assets/{min-dark-CWM8Bo-m.js → min-dark-C59GkzOm.js} +0 -0
  422. /package/dist/web/assets/{min-light-BBR1sjS2.js → min-light-B9QglrdQ.js} +0 -0
  423. /package/dist/web/assets/{mipsasm-Jc7u7YSS.js → mipsasm-Dc6Jsr_D.js} +0 -0
  424. /package/dist/web/assets/{mojo-CTB0cutd.js → mojo-D5ij-nGW.js} +0 -0
  425. /package/dist/web/assets/{monitor-4vWfqzuN.js → monitor-CxPV_fQI.js} +0 -0
  426. /package/dist/web/assets/{monokai-CvM_YNKx.js → monokai-QAtE_yCP.js} +0 -0
  427. /package/dist/web/assets/{moonbit-CbFEfYYM.js → moonbit-BMtIdiTL.js} +0 -0
  428. /package/dist/web/assets/{move-BT38p0kT.js → move-BB_jMHYZ.js} +0 -0
  429. /package/dist/web/assets/{narrat-55QZ_kOG.js → narrat-BvvoKGVn.js} +0 -0
  430. /package/dist/web/assets/{nextflow-groovy-Bg8peyqg.js → nextflow-groovy-CqxtAsnF.js} +0 -0
  431. /package/dist/web/assets/{night-owl-DzS77iPK.js → night-owl-CLoE9kjt.js} +0 -0
  432. /package/dist/web/assets/{night-owl-light-DER7fGnx.js → night-owl-light-BwIFT5Xd.js} +0 -0
  433. /package/dist/web/assets/{nix-BSI8YesN.js → nix-BKlnVT9r.js} +0 -0
  434. /package/dist/web/assets/{nord-9bn7iNWo.js → nord-B7R1KRAK.js} +0 -0
  435. /package/dist/web/assets/{nushell-qDVZn_lw.js → nushell-CzUme-NJ.js} +0 -0
  436. /package/dist/web/assets/{objective-c-Blf-ATos.js → objective-c-D-UKKiOc.js} +0 -0
  437. /package/dist/web/assets/{objective-cpp-Bz8bAq47.js → objective-cpp-BucWn4Fx.js} +0 -0
  438. /package/dist/web/assets/{ocaml-B9heAsc3.js → ocaml-EJCNXMGo.js} +0 -0
  439. /package/dist/web/assets/{odin-BaFYnOwO.js → odin-CEjnRU_3.js} +0 -0
  440. /package/dist/web/assets/{one-dark-pro-D6B_hSe-.js → one-dark-pro-Bv469NX5.js} +0 -0
  441. /package/dist/web/assets/{one-light-Ba-f0wyk.js → one-light-BlzO5RWI.js} +0 -0
  442. /package/dist/web/assets/{openscad-UvYyL2MK.js → openscad-Czl6alLw.js} +0 -0
  443. /package/dist/web/assets/{pascal-B4-qvEoG.js → pascal-BI9fLvG4.js} +0 -0
  444. /package/dist/web/assets/{pkl-B146nqGx.js → pkl-ChQLsyjU.js} +0 -0
  445. /package/dist/web/assets/{plastic-L38t-Id3.js → plastic-DGL3mtdL.js} +0 -0
  446. /package/dist/web/assets/{play-CpCAoQRZ.js → play-DpEEBJTT.js} +0 -0
  447. /package/dist/web/assets/{plsql-ItOG5Cca.js → plsql-BJDjqcWp.js} +0 -0
  448. /package/dist/web/assets/{po-imiCTaNX.js → po-DK5O3OpF.js} +0 -0
  449. /package/dist/web/assets/{poimandres-Bu6sIba9.js → poimandres-CnuqZT4T.js} +0 -0
  450. /package/dist/web/assets/{polar-CTeGoFxV.js → polar-DCsUxSsQ.js} +0 -0
  451. /package/dist/web/assets/{portal-container-context-a399Hd9F.js → portal-container-context-D-495m5C.js} +0 -0
  452. /package/dist/web/assets/{postcss-jvFe6GNE.js → postcss-8UjdFmis.js} +0 -0
  453. /package/dist/web/assets/{powerquery-D9Dw1hJp.js → powerquery-CAp0CGQj.js} +0 -0
  454. /package/dist/web/assets/{powershell-CZqvYQtg.js → powershell-CbBsKZJP.js} +0 -0
  455. /package/dist/web/assets/{prisma-B4D2nO_7.js → prisma-BnNpXCJN.js} +0 -0
  456. /package/dist/web/assets/{prolog-CQbyUcCF.js → prolog-CC-l9E8Y.js} +0 -0
  457. /package/dist/web/assets/{proto-Cwpo0cW1.js → proto-CV_1k2rL.js} +0 -0
  458. /package/dist/web/assets/{puppet-CKxCwBod.js → puppet-2D8HU2bv.js} +0 -0
  459. /package/dist/web/assets/{purescript-B-MyXMMp.js → purescript-BEJAORgU.js} +0 -0
  460. /package/dist/web/assets/{python-D6QbSR2S.js → python-BBdbb7nn.js} +0 -0
  461. /package/dist/web/assets/{qmldir-BpTSVcw_.js → qmldir-D5ZYI4Ie.js} +0 -0
  462. /package/dist/web/assets/{qss-DBc4gbpe.js → qss-BOJVGyXE.js} +0 -0
  463. /package/dist/web/assets/{r-i9jMMi0s.js → r-B5dlEtkj.js} +0 -0
  464. /package/dist/web/assets/{racket-BWNaxU7C.js → racket-BUAEygJ6.js} +0 -0
  465. /package/dist/web/assets/{raku-fqTZLn7L.js → raku-BG0Ss0ID.js} +0 -0
  466. /package/dist/web/assets/{react-X4jUntEf.js → react-B549sK_T.js} +0 -0
  467. /package/dist/web/assets/{red-D-JEcuzA.js → red-C5yyQbtG.js} +0 -0
  468. /package/dist/web/assets/{refresh-cw-B9iv7csb.js → refresh-cw-BQU5g2CY.js} +0 -0
  469. /package/dist/web/assets/{reg-BbirlU1S.js → reg-DHoBWtLf.js} +0 -0
  470. /package/dist/web/assets/{regexp-D8VTFrtg.js → regexp-DDtJrlKv.js} +0 -0
  471. /package/dist/web/assets/{rel-ByQGKiNM.js → rel-CR6WJDRD.js} +0 -0
  472. /package/dist/web/assets/{resolve-theme-Cqb9zWYc.js → resolve-theme-4fexHWl6.js} +0 -0
  473. /package/dist/web/assets/{riscv-B5nqCfLE.js → riscv-2V9tC-nx.js} +0 -0
  474. /package/dist/web/assets/{ron-DOVh_iZR.js → ron-QLTmqGUw.js} +0 -0
  475. /package/dist/web/assets/{rose-pine-jp51ZUzi.js → rose-pine-be0__X3A.js} +0 -0
  476. /package/dist/web/assets/{rose-pine-dawn-B7hkmmWy.js → rose-pine-dawn-n_WQJwsW.js} +0 -0
  477. /package/dist/web/assets/{rose-pine-moon-Ff063yLj.js → rose-pine-moon-t2aLtzgB.js} +0 -0
  478. /package/dist/web/assets/{rosmsg-Cyk7Il8z.js → rosmsg-Ce1JD8vt.js} +0 -0
  479. /package/dist/web/assets/{rotate-ccw-DnuPzJRE.js → rotate-ccw-CpjRo90J.js} +0 -0
  480. /package/dist/web/assets/{rust-DRNM5epF.js → rust-5fHH-ZoW.js} +0 -0
  481. /package/dist/web/assets/{sass-D_cB0-M1.js → sass-DPmGFiOJ.js} +0 -0
  482. /package/dist/web/assets/{save-DxonD4y1.js → save-DYLiVzU8.js} +0 -0
  483. /package/dist/web/assets/{scala-Crl-1kKS.js → scala-BRMVFbZF.js} +0 -0
  484. /package/dist/web/assets/{scheme-DCaWyEJ0.js → scheme-BMSJWevF.js} +0 -0
  485. /package/dist/web/assets/{sdbl-BbXNqwtX.js → sdbl-DTZ-pEHI.js} +0 -0
  486. /package/dist/web/assets/{send-B-t5Mz26.js → send-C_sLFt56.js} +0 -0
  487. /package/dist/web/assets/{shallow-4zAfs2KW.js → shallow-CmPMAPte.js} +0 -0
  488. /package/dist/web/assets/{shellscript-BAgksBhW.js → shellscript-6-9yg5Cz.js} +0 -0
  489. /package/dist/web/assets/{shield-check-CdTiK1j2.js → shield-check-CUI36aSc.js} +0 -0
  490. /package/dist/web/assets/{shield-off-DuetkXKM.js → shield-off-GdkkVhb3.js} +0 -0
  491. /package/dist/web/assets/{slack-dark-GB-ElUW_.js → slack-dark-DKJgiR7e.js} +0 -0
  492. /package/dist/web/assets/{slack-ochin-tU6CFD3S.js → slack-ochin-WjehVgyK.js} +0 -0
  493. /package/dist/web/assets/{smalltalk-DSVGUbtL.js → smalltalk-BChf4SN1.js} +0 -0
  494. /package/dist/web/assets/{snazzy-light-DZhi3PoS.js → snazzy-light-C1WAwOx6.js} +0 -0
  495. /package/dist/web/assets/{solarized-dark-D6AMCco7.js → solarized-dark-BxREZrGx.js} +0 -0
  496. /package/dist/web/assets/{solarized-light-DepuTWSE.js → solarized-light-DG29B1pR.js} +0 -0
  497. /package/dist/web/assets/{solidity-CsxN618l.js → solidity-bDbtGwdR.js} +0 -0
  498. /package/dist/web/assets/{splunk-CF1m0Kkv.js → splunk-Ceqx5njI.js} +0 -0
  499. /package/dist/web/assets/{sql-DvyMDgrB.js → sql-OwMEKbz8.js} +0 -0
  500. /package/dist/web/assets/{ssh-config-a8sDo-Q8.js → ssh-config-WAR3lu2k.js} +0 -0
  501. /package/dist/web/assets/{stylus-DCJ-6AjT.js → stylus-Cjmoz3d8.js} +0 -0
  502. /package/dist/web/assets/{swift-c-ZFxyPP.js → swift-S_ZSBG1q.js} +0 -0
  503. /package/dist/web/assets/{synthwave-84-9NPgBcuv.js → synthwave-84-DiUeWMSh.js} +0 -0
  504. /package/dist/web/assets/{system-verilog-DPD02IOo.js → system-verilog-RRjqPjUV.js} +0 -0
  505. /package/dist/web/assets/{systemd-BUr5HRtU.js → systemd-BD3SkXoU.js} +0 -0
  506. /package/dist/web/assets/{table-FLU8ei8b.js → table-D5Q4ap4W.js} +0 -0
  507. /package/dist/web/assets/{talonscript-BNBQV5YJ.js → talonscript-DWefISOm.js} +0 -0
  508. /package/dist/web/assets/{tasl-BETjpSyu.js → tasl-DCjSS-09.js} +0 -0
  509. /package/dist/web/assets/{tcl-Clp_AZiC.js → tcl-DTYqT_66.js} +0 -0
  510. /package/dist/web/assets/{terraform-B0kZ0lim.js → terraform-CkbP5QnR.js} +0 -0
  511. /package/dist/web/assets/{text-wrap-B05VGRa-.js → text-wrap-DBvQD3kc.js} +0 -0
  512. /package/dist/web/assets/{tokyo-night-oOJ0a7Dk.js → tokyo-night-qVSqO9xy.js} +0 -0
  513. /package/dist/web/assets/{toml-DOPCSumy.js → toml-D9F5Osqs.js} +0 -0
  514. /package/dist/web/assets/{trash-2-CTXlTflF.js → trash-2-By4VMbC4.js} +0 -0
  515. /package/dist/web/assets/{triangle-alert-BRq0VAfd.js → triangle-alert-CUTURFbG.js} +0 -0
  516. /package/dist/web/assets/{tsv-D6qUGf84.js → tsv-C5tpHoxm.js} +0 -0
  517. /package/dist/web/assets/{tsx-B6qYhT6O.js → tsx-CMWkGtGm.js} +0 -0
  518. /package/dist/web/assets/{turtle-C0Rjzw73.js → turtle-Cn4z3xOi.js} +0 -0
  519. /package/dist/web/assets/{typescript-BiydShEu.js → typescript-DSyAEWsn.js} +0 -0
  520. /package/dist/web/assets/{typespec-DjmF6Aww.js → typespec-B93Qap7y.js} +0 -0
  521. /package/dist/web/assets/{typst-CPuscfcL.js → typst-DtlOmFlX.js} +0 -0
  522. /package/dist/web/assets/{use-is-mobile-b94q8RvF.js → use-is-mobile-B9UZNwSm.js} +0 -0
  523. /package/dist/web/assets/{utils-C9OjCrou.js → utils-QHe_Q6UF.js} +0 -0
  524. /package/dist/web/assets/{v-DE4vpLLQ.js → v-Dfzf-szS.js} +0 -0
  525. /package/dist/web/assets/{vala-CmUF2pS5.js → vala-CyiQZQ9f.js} +0 -0
  526. /package/dist/web/assets/{vb-BvcRoX4b.js → vb-C7DGSldd.js} +0 -0
  527. /package/dist/web/assets/{vendor-xterm-K8kpLxdb.js → vendor-xterm-BHKF_Nsf.js} +0 -0
  528. /package/dist/web/assets/{verilog-BGIzyH3R.js → verilog-kF-hClY2.js} +0 -0
  529. /package/dist/web/assets/{vesper-CG7IrHQQ.js → vesper-BmKcADuz.js} +0 -0
  530. /package/dist/web/assets/{vhdl-DMSumomw.js → vhdl-CDnb16KJ.js} +0 -0
  531. /package/dist/web/assets/{viml-Drt7AEmU.js → viml-B8cs6Ady.js} +0 -0
  532. /package/dist/web/assets/{vitesse-black-DmsjfN0b.js → vitesse-black-BR6o9Gto.js} +0 -0
  533. /package/dist/web/assets/{vitesse-dark-Dl55_WeJ.js → vitesse-dark-Dye14-KB.js} +0 -0
  534. /package/dist/web/assets/{vitesse-light-Crbv9aGg.js → vitesse-light-BLpswIxf.js} +0 -0
  535. /package/dist/web/assets/{vyper-CB7psEJj.js → vyper-DU51Z97W.js} +0 -0
  536. /package/dist/web/assets/{wasm-BY1tuM5m.js → wasm-CVqlJAR2.js} +0 -0
  537. /package/dist/web/assets/{wasm-Dck8KPgP.js → wasm-ChtccNfv.js} +0 -0
  538. /package/dist/web/assets/{wenyan-DhewQ68b.js → wenyan-DhCa3hCn.js} +0 -0
  539. /package/dist/web/assets/{wgsl-DlmiP456.js → wgsl-Bj1Ec4vv.js} +0 -0
  540. /package/dist/web/assets/{wikitext-cQCnqNgE.js → wikitext-C90DHNa0.js} +0 -0
  541. /package/dist/web/assets/{wit-S5MaCngB.js → wit-DUgbOD7Z.js} +0 -0
  542. /package/dist/web/assets/{wolfram-Bh8n_9zr.js → wolfram-BgwUqD1I.js} +0 -0
  543. /package/dist/web/assets/{x-YDu4m2Iq.js → x-DiOUR_mp.js} +0 -0
  544. /package/dist/web/assets/{yaml-BoK_17l9.js → yaml-DEQulj-8.js} +0 -0
  545. /package/dist/web/assets/{zenscript-DB3ZFwNJ.js → zenscript-C7Jp7TgT.js} +0 -0
  546. /package/dist/web/assets/{zig-Bv1BWmfT.js → zig-9x4qXYLg.js} +0 -0
@@ -39,6 +39,12 @@ interface SettingsState {
39
39
  dockPosition: DockPosition;
40
40
  dbSidebarExpanded: DbSidebarExpanded;
41
41
  explorerSkin: ExplorerSkinPref;
42
+ /** Show/hide the small fps/KB-per-s/resolution overlay on the remote-desktop viewer
43
+ * (desktop window and mobile full-screen view both read this same flag). */
44
+ remoteDesktopStatsVisible: boolean;
45
+ /** User ticked "don't show again" on the remote-desktop warning that precedes every open
46
+ * (`remote-desktop-warning-gate.tsx`); once true the viewer connects straight away. */
47
+ remoteDesktopWarningDismissed: boolean;
42
48
  deviceName: string | null;
43
49
  version: string | null;
44
50
  tunnelActive: boolean;
@@ -63,6 +69,8 @@ interface SettingsState {
63
69
  setDockPosition: (position: DockPosition) => void;
64
70
  setDbSidebarExpanded: (next: DbSidebarExpanded) => void;
65
71
  setExplorerSkin: (pref: ExplorerSkinPref) => void;
72
+ toggleRemoteDesktopStatsVisible: () => void;
73
+ setRemoteDesktopWarningDismissed: (dismissed: boolean) => void;
66
74
  fetchServerInfo: () => Promise<void>;
67
75
  /** Re-push the in-memory theme selection to the server (see the action for why). */
68
76
  syncThemeToServer: () => Promise<void>;
@@ -86,6 +94,8 @@ interface PersistedSettings {
86
94
  dockPosition?: DockPosition;
87
95
  dbSidebarExpanded?: DbSidebarExpanded;
88
96
  explorerSkin?: ExplorerSkinPref;
97
+ remoteDesktopStatsVisible?: boolean;
98
+ remoteDesktopWarningDismissed?: boolean;
89
99
  }
90
100
 
91
101
  const VALID_STYLES: PpmThemeStyle[] = ["aurora", "slate", "precision", "custom"];
@@ -238,6 +248,8 @@ function applyServerUiPrefs(data: Record<string, unknown>) {
238
248
  if (data.explorerSkin === "auto" || data.explorerSkin === "windows" || data.explorerSkin === "macos") {
239
249
  patch.explorerSkin = data.explorerSkin;
240
250
  }
251
+ if (typeof data.remoteDesktopStatsVisible === "boolean") patch.remoteDesktopStatsVisible = data.remoteDesktopStatsVisible;
252
+ if (typeof data.remoteDesktopWarningDismissed === "boolean") patch.remoteDesktopWarningDismissed = data.remoteDesktopWarningDismissed;
241
253
  const dbExpanded = sanitizeDbExpanded(data.dbSidebarExpanded);
242
254
  if (dbExpanded) patch.dbSidebarExpanded = dbExpanded;
243
255
  if (Object.keys(patch).length === 0) return;
@@ -265,6 +277,8 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
265
277
  dockPosition: (_initial.dockPosition === "left" || _initial.dockPosition === "right") ? _initial.dockPosition : "bottom",
266
278
  dbSidebarExpanded: sanitizeDbExpanded(_initial.dbSidebarExpanded) ?? DEFAULT_DB_EXPANDED,
267
279
  explorerSkin: (_initial.explorerSkin === "windows" || _initial.explorerSkin === "macos") ? _initial.explorerSkin : "auto",
280
+ remoteDesktopStatsVisible: _initial.remoteDesktopStatsVisible ?? false,
281
+ remoteDesktopWarningDismissed: _initial.remoteDesktopWarningDismissed ?? false,
268
282
  deviceName: null,
269
283
  version: null,
270
284
  tunnelActive: false,
@@ -378,6 +392,17 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
378
392
  set({ tabWrap: next });
379
393
  },
380
394
 
395
+ toggleRemoteDesktopStatsVisible: () => {
396
+ const next = !get().remoteDesktopStatsVisible;
397
+ persistUiPref({ remoteDesktopStatsVisible: next });
398
+ set({ remoteDesktopStatsVisible: next });
399
+ },
400
+
401
+ setRemoteDesktopWarningDismissed: (dismissed) => {
402
+ persistUiPref({ remoteDesktopWarningDismissed: dismissed });
403
+ set({ remoteDesktopWarningDismissed: dismissed });
404
+ },
405
+
381
406
  setEditorTabStyle: (style) => {
382
407
  persistUiPref({ editorTabStyle: style });
383
408
  set({ editorTabStyle: style });
@@ -41,5 +41,24 @@ export const useStreamingStore = create<StreamingStore>((set) => ({
41
41
  }),
42
42
  }));
43
43
 
44
- /** Selector: true if any session is streaming */
45
- export const selectAnyStreaming = (s: StreamingStore) => s.sessions.size > 0;
44
+ /**
45
+ * Selector: true if a session *belonging to this project* is streaming.
46
+ *
47
+ * Scoped, because the thing it drives — the favicon and the document title — belongs to one
48
+ * window, and a window shows one project. `/ws/global` carries `session:phase_changed` for
49
+ * every project, so an unscoped "is anything streaming" made every open workspace animate
50
+ * whenever any one of them was working: three PWA windows, one busy, three busy-looking
51
+ * icons, and no way to tell which.
52
+ *
53
+ * No new state is needed for this. The map already records the project per session so
54
+ * `replaceProjectStreaming` can reconcile one project without touching another's entries.
55
+ */
56
+ export const selectProjectStreaming =
57
+ (projectName: string | undefined) =>
58
+ (s: StreamingStore): boolean => {
59
+ if (!projectName) return false;
60
+ for (const project of s.sessions.values()) {
61
+ if (project === projectName) return true;
62
+ }
63
+ return false;
64
+ };
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import{C as r,S as i,T as a,_ as o,b as s,g as c,h as l,j as u,m as d,v as f,w as p,x as m,y as h}from"./vendor-ui-CaeeFO0B.js";import{t as g}from"./createLucideIcon-D8pyde1A.js";import{d as _}from"./context-menu-BO1c9jKy.js";import{t as v}from"./chevron-down-Dp0rpHb8.js";import{n as y,t as b}from"./upload-BNlX8D07.js";import{t as x}from"./download-DG3_9xXy.js";import{t as S}from"./external-link-B6Hl0U4X.js";import{t as C}from"./loader-circle-Dpqcv0eS.js";import{t as w}from"./refresh-cw-B9iv7csb.js";import{t as T}from"./trash-2-CTXlTflF.js";import{i as E,n as D,r as O}from"./api-client-oY1tC3tM.js";import{n as k}from"./utils-C9OjCrou.js";import{n as A}from"./portal-container-context-a399Hd9F.js";import{t as j}from"./input-DouJ9Zvt.js";import{t as M}from"./switch-DV-BDjyk.js";import{a as N,g as P}from"./api-settings-B2iNXQ0c.js";var F=g(`bug`,[[`path`,{d:`M12 20v-9`,key:`1qisl0`}],[`path`,{d:`M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z`,key:`uouzyp`}],[`path`,{d:`M14.12 3.88 16 2`,key:`qol33r`}],[`path`,{d:`M21 21a4 4 0 0 0-3.81-4`,key:`1b0z45`}],[`path`,{d:`M21 5a4 4 0 0 1-3.55 3.97`,key:`5cxbf6`}],[`path`,{d:`M22 13h-4`,key:`1jl80f`}],[`path`,{d:`M3 21a4 4 0 0 1 3.81-4`,key:`1fjd4g`}],[`path`,{d:`M3 5a4 4 0 0 0 3.55 3.97`,key:`1d7oge`}],[`path`,{d:`M6 13H2`,key:`82j7cp`}],[`path`,{d:`m8 2 1.88 1.88`,key:`fmnt4t`}],[`path`,{d:`M9 7.13V6a3 3 0 1 1 6 0v1.13`,key:`1vgav8`}]]),I=g(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),L=g(`monitor-smartphone`,[[`path`,{d:`M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8`,key:`10dyio`}],[`path`,{d:`M10 19v-3.96 3.15`,key:`1irgej`}],[`path`,{d:`M7 19h5`,key:`qswx4l`}],[`rect`,{width:`6`,height:`10`,x:`16`,y:`12`,rx:`2`,key:`1egngj`}]]),R=e(t(),1),z=n();function B({className:e,...t}){return(0,z.jsx)(u,{"data-slot":`label`,className:k(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}function V({...e}){return(0,z.jsx)(s,{"data-slot":`select`,...e})}function H({...e}){return(0,z.jsx)(p,{"data-slot":`select-value`,...e})}function U({className:e,size:t=`default`,children:n,...i}){return(0,z.jsxs)(r,{"data-slot":`select-trigger`,"data-size":t,className:k(`flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...i,children:[n,(0,z.jsx)(l,{asChild:!0,children:(0,z.jsx)(v,{className:`size-4 opacity-50`})})]})}function W({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){let o=A();return(0,z.jsx)(h,{container:o,children:(0,z.jsxs)(d,{"data-slot":`select-content`,className:k(`relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,z.jsx)(K,{}),(0,z.jsx)(a,{className:k(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,z.jsx)(q,{})]})})}function G({className:e,children:t,...n}){return(0,z.jsxs)(c,{"data-slot":`select-item`,className:k(`relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,z.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,z.jsx)(o,{children:(0,z.jsx)(_,{className:`size-4`})})}),(0,z.jsx)(f,{children:t})]})}function K({className:e,...t}){return(0,z.jsx)(i,{"data-slot":`select-scroll-up-button`,className:k(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,z.jsx)(y,{className:`size-4`})})}function q({className:e,...t}){return(0,z.jsx)(m,{"data-slot":`select-scroll-down-button`,className:k(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,z.jsx)(v,{className:`size-4`})})}var J={claude:`C`,cursor:`▶`,codex:`◆`,gemini:`G`};function Y({value:e,onChange:t,projectName:n}){let[r,i]=(0,R.useState)([]),[a,o]=(0,R.useState)(!1),s=(0,R.useRef)(null),c=(0,R.useRef)(0);(0,R.useEffect)(()=>{n&&D.get(`${E(n)}/chat/providers`).then(i).catch(()=>{})},[n]),(0,R.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)},t=s.current?.ownerDocument??document;return t.addEventListener(`mousedown`,e),()=>t.removeEventListener(`mousedown`,e)},[a]),(0,R.useEffect)(()=>{a&&(c.current=Math.max(0,r.findIndex(t=>t.id===e)))},[a,e,r]);let l=(0,R.useCallback)(e=>{if(e.key===`Escape`){o(!1);return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=e.key===`ArrowDown`?1:-1;c.current=(c.current+t+r.length)%r.length,(s.current?.querySelector(`[data-idx="${c.current}"]`))?.focus()}if(e.key===`Enter`){e.preventDefault();let n=r[c.current];n&&(t(n.id),o(!1))}},[t,r]);if(r.length<=1)return null;let u=r.find(t=>t.id===e),d=J[e]||`?`;return(0,z.jsxs)(`div`,{className:`relative`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),o(e=>!e)},className:`inline-flex items-center gap-1.5 px-[9px] py-1 rounded-full text-[11.5px] text-text-2 bg-panel-2 border border-border-soft hover:text-text-primary hover:border-border transition-colors`,"aria-label":`AI Provider: ${u?.name??e}`,children:[(0,z.jsx)(`span`,{className:`inline-flex h-3.5 w-3.5 items-center justify-center rounded text-[9px] font-bold bg-surface-elevated shrink-0`,children:d}),(0,z.jsx)(`span`,{className:`max-w-[80px] truncate capitalize`,children:u?.name??e})]}),a&&(0,z.jsxs)(`div`,{ref:s,role:`listbox`,"aria-label":`AI Providers`,onKeyDown:l,onMouseDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),className:`absolute bottom-full left-0 mb-1 z-50 w-56 rounded-lg border border-border popover-solid shadow-[var(--shadow-panel)]`,children:[(0,z.jsx)(`div`,{className:`px-3 py-2 border-b border-border`,children:(0,z.jsx)(`span`,{className:`text-xs font-medium text-text-secondary`,children:`Provider`})}),(0,z.jsx)(`div`,{className:`py-1`,children:r.map((n,r)=>{let i=J[n.id]||`?`,a=n.id===e;return(0,z.jsxs)(`button`,{"data-idx":r,role:`option`,"aria-selected":a,tabIndex:0,onClick:()=>{t(n.id),o(!1)},className:`w-full flex items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-surface-elevated focus:bg-surface-elevated focus:outline-none ${a?`bg-surface-elevated`:``}`,children:[(0,z.jsx)(`span`,{className:`inline-flex h-5 w-5 items-center justify-center rounded text-[11px] font-bold bg-surface-elevated text-text-subtle shrink-0`,children:i}),(0,z.jsx)(`span`,{className:`flex-1 text-sm font-medium text-text-primary capitalize`,children:n.name}),a&&(0,z.jsx)(_,{className:`size-4 shrink-0 text-primary`})]},n.id)})})]})]})}function X({providerId:e}){return(0,z.jsx)(`span`,{className:`inline-flex h-4 w-4 items-center justify-center rounded text-[10px] font-bold bg-surface-elevated text-text-subtle shrink-0`,title:e,children:J[e]||`?`})}var Z=[{value:`round-robin`,label:`Round-robin`},{value:`fill-first`,label:`Fill-first`},{value:`lowest-usage`,label:`Lowest usage`}];function Q(e){return e==null?`—`:`${Math.round(e*100)}%`}function $(){let[e,t]=(0,R.useState)([]),[n,r]=(0,R.useState)(`round-robin`),[i,a]=(0,R.useState)({}),[o,s]=(0,R.useState)(!1),[c,l]=(0,R.useState)(``),[u,d]=(0,R.useState)(``),[f,p]=(0,R.useState)(!1),[m,h]=(0,R.useState)(null),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(!1),[w,E]=(0,R.useState)(``),[k,A]=(0,R.useState)(!1),[j,M]=(0,R.useState)(!1),[N,P]=(0,R.useState)(null),F=(0,R.useRef)(null),B=(0,R.useCallback)(async()=>{s(!0);try{let e=await D.get(`/api/codex-accounts`);t(e.accounts),r(e.strategy),D.get(`/api/codex-accounts/usage`).then(a).catch(()=>{})}finally{s(!1)}},[]);(0,R.useEffect)(()=>{B()},[B]);let V=async()=>{if(c.trim()){p(!0),h(null);try{await D.post(`/api/codex-accounts/api-key`,{apiKey:c.trim(),label:u.trim()||void 0}),l(``),d(``),await B()}catch(e){h(e.message)}finally{p(!1)}}},H=async()=>{h(null);try{let e=await D.post(`/api/codex-accounts/device-login`,{label:u.trim()||void 0});_(e),y(!0),D.post(`/api/codex-accounts/device-login/${e.id}/await`).then(async()=>{_(null),y(!1),d(``),await B()}).catch(e=>{h(e.message),_(null),y(!1)})}catch(e){h(e.message)}},U=async e=>{await D.del(`/api/codex-accounts/${e}`),await B()},W=async e=>{r(e);try{await D.put(`/api/codex-accounts/strategy`,{strategy:e})}catch{}},G=async()=>{if(!w.trim()){h(`Set a backup password first.`);return}A(!0),h(null),P(null);try{let e={"Content-Type":`application/json`},t=O();t&&(e.Authorization=`Bearer ${t}`);let n=await fetch(`/api/codex-accounts/export`,{method:`POST`,headers:e,body:JSON.stringify({password:w})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`Export failed: ${n.status}`)}let r=await n.text(),i=new Blob([r],{type:`application/json`}),a=document.createElement(`a`);a.href=URL.createObjectURL(i),a.download=`ppm-codex-accounts-backup.json`,a.click(),URL.revokeObjectURL(a.href),P(`Backup downloaded.`)}catch(e){h(e.message)}finally{A(!1)}},K=async e=>{if(!w.trim()){h(`Enter the backup password first.`);return}M(!0),h(null),P(null);try{let t=await e.text(),n=await D.post(`/api/codex-accounts/import`,{data:t,password:w});P(`Imported ${n.imported}${n.skipped?`, skipped ${n.skipped}`:``}.`),await B()}catch(e){h(e.message)}finally{M(!1),F.current&&(F.current.value=``)}};return(0,z.jsxs)(`div`,{className:`space-y-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h3`,{className:`text-sm font-semibold text-text-primary`,children:`Codex Accounts`}),(0,z.jsx)(`p`,{className:`text-xs text-text-subtle mt-0.5`,children:`Each account uses its own login (CODEX_HOME). One is selected per chat by the strategy below.`})]}),m&&(0,z.jsx)(`div`,{className:`text-xs text-error bg-error/10 border border-error/30 rounded-md p-2`,children:m}),N&&(0,z.jsx)(`div`,{className:`text-xs text-success bg-success/10 border border-success/30 rounded-md p-2`,children:N}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,z.jsx)(`span`,{className:`text-xs text-text-secondary`,children:`Selection strategy:`}),Z.map(e=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>W(e.value),className:`text-xs px-3 min-h-[36px] rounded-md border transition-colors ${n===e.value?`border-primary bg-primary/15 text-text-primary`:`border-border bg-surface/50 text-text-secondary hover:bg-surface`}`,children:e.label},e.value))]}),(0,z.jsxs)(`div`,{className:`space-y-2`,children:[o&&e.length===0&&(0,z.jsxs)(`div`,{className:`text-xs text-text-subtle flex items-center gap-2`,children:[(0,z.jsx)(C,{className:`size-3 animate-spin`}),` Loading…`]}),!o&&e.length===0&&(0,z.jsxs)(`div`,{className:`text-xs text-text-subtle`,children:[`No codex accounts yet — add one below. (With none, chats use your default `,(0,z.jsx)(`code`,{children:`~/.codex`}),` login.)`]}),e.map(e=>{let t=i[e.id]??{};return(0,z.jsxs)(`div`,{className:`flex items-center gap-3 border border-border rounded-md bg-surface/40 p-2.5`,children:[(0,z.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`text-sm text-text-primary truncate`,children:e.label}),(0,z.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-text-subtle border border-border rounded px-1`,children:e.type}),e.planType&&(0,z.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:e.planType})]}),(0,z.jsxs)(`div`,{className:`text-[11px] text-text-subtle mt-0.5`,children:[`5h `,Q(t.fiveHour),` · weekly `,Q(t.sevenDay)]})]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>U(e.id),title:`Remove account`,className:`p-2 min-h-[44px] min-w-[44px] flex items-center justify-center text-text-subtle hover:text-error transition-colors`,children:(0,z.jsx)(T,{className:`size-4`})})]},e.id)})]}),(0,z.jsxs)(`div`,{className:`border border-border rounded-md p-3 space-y-2`,children:[(0,z.jsx)(`input`,{value:u,onChange:e=>d(e.target.value),placeholder:`Label (optional)`,className:`w-full text-sm bg-surface border border-border rounded-md px-3 min-h-[40px] text-text-primary placeholder:text-text-subtle`}),(0,z.jsxs)(`div`,{className:`flex gap-2 flex-col sm:flex-row`,children:[(0,z.jsx)(`input`,{value:c,onChange:e=>l(e.target.value),type:`password`,placeholder:`OpenAI API key (sk-…)`,className:`flex-1 text-sm bg-surface border border-border rounded-md px-3 min-h-[44px] text-text-primary placeholder:text-text-subtle font-mono`}),(0,z.jsxs)(`button`,{type:`button`,onClick:V,disabled:f||!c.trim(),className:`inline-flex items-center justify-center gap-2 text-sm px-4 min-h-[44px] rounded-md border border-border bg-surface/50 hover:bg-surface text-text-primary disabled:opacity-60`,children:[f?(0,z.jsx)(C,{className:`size-4 animate-spin`}):(0,z.jsx)(I,{className:`size-4`}),` Add key`]})]}),(0,z.jsxs)(`button`,{type:`button`,onClick:H,disabled:v,className:`inline-flex items-center justify-center gap-2 text-sm px-4 min-h-[44px] w-full sm:w-auto rounded-md border border-border bg-surface/50 hover:bg-surface text-text-primary disabled:opacity-60`,children:[v?(0,z.jsx)(C,{className:`size-4 animate-spin`}):(0,z.jsx)(L,{className:`size-4`}),` Sign in with ChatGPT (device code)`]})]}),(0,z.jsxs)(`div`,{className:`border border-border rounded-md p-3 space-y-2`,children:[(0,z.jsx)(`p`,{className:`text-xs text-text-secondary`,children:`Backup & transfer — password-encrypted file with each account's login.`}),(0,z.jsx)(`input`,{value:w,onChange:e=>E(e.target.value),type:`password`,placeholder:`Backup password`,className:`w-full text-sm bg-surface border border-border rounded-md px-3 min-h-[44px] text-text-primary placeholder:text-text-subtle`}),(0,z.jsxs)(`div`,{className:`flex gap-2 flex-col sm:flex-row`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:G,disabled:k||!w.trim(),className:`flex-1 inline-flex items-center justify-center gap-2 text-sm px-4 min-h-[44px] rounded-md border border-border bg-surface/50 hover:bg-surface text-text-primary disabled:opacity-60`,children:[k?(0,z.jsx)(C,{className:`size-4 animate-spin`}):(0,z.jsx)(x,{className:`size-4`}),` Export`]}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>F.current?.click(),disabled:j||!w.trim(),className:`flex-1 inline-flex items-center justify-center gap-2 text-sm px-4 min-h-[44px] rounded-md border border-border bg-surface/50 hover:bg-surface text-text-primary disabled:opacity-60`,children:[j?(0,z.jsx)(C,{className:`size-4 animate-spin`}):(0,z.jsx)(b,{className:`size-4`}),` Import`]}),(0,z.jsx)(`input`,{ref:F,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&K(t)}})]})]}),g&&(0,z.jsxs)(`div`,{className:`border border-primary/40 bg-primary/10 rounded-md p-3 space-y-2 text-sm`,children:[(0,z.jsx)(`p`,{className:`text-text-primary`,children:`Enter this code to authorize:`}),(0,z.jsx)(`div`,{className:`font-mono text-lg tracking-widest text-text-primary`,children:g.userCode}),(0,z.jsxs)(`a`,{href:g.verificationUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline text-xs`,children:[(0,z.jsx)(S,{className:`size-3`}),` `,g.verificationUrl]}),(0,z.jsxs)(`p`,{className:`text-xs text-text-subtle flex items-center gap-2`,children:[(0,z.jsx)(C,{className:`size-3 animate-spin`}),` Waiting for authorization…`]})]})]})}var ee=[{value:`low`,label:`Low`},{value:`medium`,label:`Medium`},{value:`high`,label:`High`},{value:`xhigh`,label:`Extra`},{value:`max`,label:`Max`}],te=[{value:`bypassPermissions`,label:`Bypass permissions (default)`},{value:`default`,label:`Ask before edits`},{value:`acceptEdits`,label:`Edit automatically`},{value:`plan`,label:`Plan mode`}],ne={claude:`Claude`,cursor:`Cursor`,codex:`Codex`,gemini:`Gemini`};function re({compact:e}={}){let[t,n]=(0,R.useState)(null),[r,i]=(0,R.useState)(``),[a,o]=(0,R.useState)([]),[s,c]=(0,R.useState)(!1),[l,u]=(0,R.useState)(!1),[d,f]=(0,R.useState)(null),[p,m]=(0,R.useState)(0);(0,R.useEffect)(()=>{N().then(e=>{n(e),i(e.default_provider??`claude`)}).catch(e=>f(e.message))},[]),(0,R.useEffect)(()=>{r&&(c(!0),D.get(`/api/settings/ai/providers/${r}/models`).then(o).catch(()=>o([])).finally(()=>c(!1)))},[r]);let h=t?Object.keys(t.providers).filter(e=>e!==`mock`).map(e=>({id:e,name:ne[e]??e})):[],g=t?.providers[r],_=g?.type===`agent-sdk`||!g?.type&&r===`claude`,v=async(e,i)=>{if(t){u(!0),f(null);try{n(await P({providers:{[r]:{[e]:i}}})),m(e=>e+1)}catch(e){f(e.message)}finally{u(!1)}}},y=e?`text-[11px]`:`text-sm`,b=e?`text-xs`:`text-sm`,x=e?`space-y-2`:`space-y-4`,S=e?`space-y-1.5`:`space-y-3`,C=e?`space-y-1`:`space-y-1.5`;if(!t)return(0,z.jsxs)(`div`,{className:S,children:[(0,z.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),(0,z.jsx)(`p`,{className:`${y} text-text-subtle`,children:d?`Error: ${d}`:`Loading...`})]});let w=_?a:[{value:`__default__`,label:`Auto (default)`},...a];return(0,z.jsxs)(`div`,{className:x,children:[(0,z.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),h.length>1&&(0,z.jsx)(`div`,{className:`flex gap-0.5 border-b border-border/50 -mx-1 px-1`,children:h.map(e=>(0,z.jsxs)(`button`,{onClick:()=>i(e.id),className:`flex items-center gap-1 px-2 py-1 text-[11px] rounded-t transition-colors ${r===e.id?`text-primary border-b-2 border-primary font-medium`:`text-text-subtle hover:text-text-secondary`}`,children:[(0,z.jsx)(X,{providerId:e.id}),(0,z.jsx)(`span`,{className:`capitalize`,children:e.name})]},e.id))}),(0,z.jsxs)(`div`,{className:S,children:[r===`codex`&&(0,z.jsx)($,{}),a.length>0&&(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-model`,className:e?y:void 0,children:`Model`}),(0,z.jsxs)(V,{value:_?g?.model??a[0]?.value:g?.model||`__default__`,onValueChange:e=>v(`model`,e===`__default__`?void 0:e),disabled:s,children:[(0,z.jsx)(U,{id:`ai-model`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,z.jsx)(H,{placeholder:s?`Loading models...`:`Select model`})}),(0,z.jsx)(W,{className:`max-h-[300px]`,children:w.map(e=>(0,z.jsx)(G,{value:e.value,children:e.label},e.value))})]})]}),_&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-base-url`,className:e?y:void 0,children:`Base URL`}),(0,z.jsx)(j,{id:`ai-base-url`,type:`url`,defaultValue:g?.base_url??``,placeholder:`https://api.anthropic.com (default)`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{v(`base_url`,e.target.value.trim()||void 0)}},`baseurl-${r}-${p}`)]}),(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-api-key`,className:e?y:void 0,children:`API Key / Token`}),(0,z.jsx)(j,{id:`ai-api-key`,type:`password`,defaultValue:g?.api_key??``,placeholder:`sk-ant-... (optional, overrides accounts)`,className:e?`h-7 text-[11px] font-mono`:`font-mono`,onBlur:e=>{let t=e.target.value.trim();t.startsWith(`••••`)||v(`api_key`,t||void 0)}},`apikey-${r}-${p}`),(0,z.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Direct API key or OAuth token. Leave empty to use connected accounts.`})]}),(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-effort`,className:e?y:void 0,children:`Effort`}),(0,z.jsxs)(V,{value:g?.effort??`high`,onValueChange:e=>v(`effort`,e),children:[(0,z.jsx)(U,{id:`ai-effort`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,z.jsx)(H,{})}),(0,z.jsx)(W,{children:ee.map(e=>(0,z.jsx)(G,{value:e.value,children:e.label},e.value))})]})]}),(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-max-turns`,className:e?y:void 0,children:`Max Turns (1-500)`}),(0,z.jsx)(j,{id:`ai-max-turns`,type:`number`,min:1,max:500,defaultValue:g?.max_turns??100,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);isNaN(t)||v(`max_turns`,t)}},`turns-${r}-${p}`)]}),(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-budget`,className:e?y:void 0,children:`Max Budget (USD)`}),(0,z.jsx)(j,{id:`ai-budget`,type:`number`,step:.1,min:.01,max:50,defaultValue:g?.max_budget_usd??``,placeholder:`No limit`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseFloat(e.target.value);v(`max_budget_usd`,isNaN(t)?void 0:t)}},`budget-${r}-${p}`)]}),(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-thinking`,className:e?y:void 0,children:`Thinking Budget (tokens)`}),(0,z.jsx)(j,{id:`ai-thinking`,type:`number`,min:0,defaultValue:g?.thinking_budget_tokens??``,placeholder:`Adaptive (model decides)`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);v(`thinking_budget_tokens`,isNaN(t)?void 0:t)}},`thinking-${r}-${p}`)]}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(B,{htmlFor:`ai-agent-teams`,className:e?y:void 0,children:`Agent Teams`}),(0,z.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Experimental. Enables multi-agent collaboration with shared tasks and messaging. Uses ~7x more tokens.`})]}),(0,z.jsx)(M,{id:`ai-agent-teams`,checked:g?.agent_teams??!1,onCheckedChange:e=>v(`agent_teams`,e)})]}),g?.agent_teams&&(0,z.jsx)(ie,{compact:e}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(B,{htmlFor:`ai-context-1m`,className:e?y:void 0,children:`1M Context Window`}),(0,z.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Requires an entitled account (Max/Team/Enterprise) and an Opus 4 / Sonnet 4 model. Other accounts will error.`})]}),(0,z.jsx)(M,{id:`ai-context-1m`,checked:g?.context_1m??!1,onCheckedChange:e=>v(`context_1m`,e)})]}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(B,{htmlFor:`ai-inherit-mcp`,className:e?y:void 0,children:`Inherit Claude Code MCP`}),(0,z.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Auto-load MCP servers from Claude Code's ~/.claude.json (global + per-project). Your own MCP servers override inherited ones.`})]}),(0,z.jsx)(M,{id:`ai-inherit-mcp`,checked:g?.inherit_claude_mcp??!0,onCheckedChange:e=>v(`inherit_claude_mcp`,e)})]})]}),(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-permission-mode`,className:e?y:void 0,children:`Default Permission Mode`}),(0,z.jsxs)(V,{value:g?.permission_mode??`bypassPermissions`,onValueChange:e=>v(`permission_mode`,e),children:[(0,z.jsx)(U,{id:`ai-permission-mode`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,z.jsx)(H,{})}),(0,z.jsx)(W,{children:te.map(e=>(0,z.jsx)(G,{value:e.value,children:e.label},e.value))})]})]}),(0,z.jsxs)(`div`,{className:C,children:[(0,z.jsx)(B,{htmlFor:`ai-system-prompt`,className:e?y:void 0,children:`Additional Instructions`}),(0,z.jsx)(`textarea`,{id:`ai-system-prompt`,rows:e?3:4,defaultValue:g?.system_prompt??``,placeholder:`Enter additional instructions for ${r}...`,className:`w-full rounded-md border border-input bg-background px-3 py-2 ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${e?`text-[11px]`:`text-sm`}`,onBlur:e=>{v(`system_prompt`,e.target.value.trim()||void 0)}},`sysprompt-${r}-${p}`)]})]}),l&&(0,z.jsx)(`p`,{className:`text-xs text-text-subtle`,children:`Saving...`}),d&&(0,z.jsx)(`p`,{className:`text-xs text-error`,children:d})]})}function ie({compact:e}){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(!1),[a,o]=(0,R.useState)(null),s=(0,R.useCallback)(async()=>{i(!0);try{n(await D.get(`/api/teams`)??[])}catch{}i(!1)},[]);(0,R.useEffect)(()=>{s()},[s]);let c=async e=>{try{await D.del(`/api/teams/${encodeURIComponent(e)}`),n(t=>t.filter(t=>t.name!==e)),o(null)}catch{}};return t.length===0&&!r?null:(0,z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,z.jsxs)(B,{className:e?`text-[11px]`:void 0,children:[`Teams (`,t.length,`)`]}),(0,z.jsx)(`button`,{onClick:s,className:`text-text-subtle hover:text-foreground p-1`,"aria-label":`Refresh teams`,children:(0,z.jsx)(w,{className:`size-3 ${r?`animate-spin`:``}`})})]}),t.map(e=>(0,z.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded bg-surface-elevated text-xs`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`div`,{className:`font-medium truncate`,children:e.name}),e.description&&(0,z.jsx)(`div`,{className:`text-text-subtle truncate`,children:e.description}),(0,z.jsxs)(`div`,{className:`text-text-subtle`,children:[e.members?.length??e.memberCount??0,` members`,e.createdAt?` · ${new Date(e.createdAt).toLocaleDateString()}`:``]})]}),a===e.name?(0,z.jsxs)(`div`,{className:`flex gap-1 shrink-0 ml-2`,children:[(0,z.jsx)(`button`,{onClick:()=>c(e.name),className:`px-2 py-1 bg-error text-white rounded text-[10px]`,children:`Delete`}),(0,z.jsx)(`button`,{onClick:()=>o(null),className:`px-2 py-1 bg-panel-2 text-text rounded text-[10px]`,children:`Cancel`})]}):(0,z.jsx)(`button`,{onClick:()=>o(e.name),className:`shrink-0 text-text-subtle hover:text-error p-1 ml-2`,"aria-label":`Delete team ${e.name}`,children:(0,z.jsx)(T,{className:`size-3.5`})})]},e.name))]})}export{W as a,H as c,F as d,V as i,B as l,X as n,G as o,Y as r,U as s,re as t,I as u};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{i as e,n as t}from"./api-client-oY1tC3tM.js";export{t as api,e as projectUrl};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import"./api-client-oY1tC3tM.js";import{v as e}from"./api-settings-B2iNXQ0c.js";export{e as updateDeviceName};
@@ -1 +0,0 @@
1
- import{K as e}from"./vendor-mermaid-999ksD45.js";export{e as createArchitectureServices};