cli-jaw 2.2.19 → 2.2.21

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 (440) hide show
  1. package/README.md +97 -3
  2. package/dist/bin/commands/dispatch.js +62 -16
  3. package/dist/bin/commands/dispatch.js.map +1 -1
  4. package/dist/server.js +14 -0
  5. package/dist/server.js.map +1 -1
  6. package/dist/src/agent/spawn/process-kill.js +96 -2
  7. package/dist/src/agent/spawn/process-kill.js.map +1 -1
  8. package/dist/src/agent/spawn.js +34 -65
  9. package/dist/src/agent/spawn.js.map +1 -1
  10. package/dist/src/bgtask/runner.js +26 -21
  11. package/dist/src/bgtask/runner.js.map +1 -1
  12. package/dist/src/cli/acp-client.js +11 -5
  13. package/dist/src/cli/acp-client.js.map +1 -1
  14. package/dist/src/cli/cli-status-worker.js +22 -3
  15. package/dist/src/cli/cli-status-worker.js.map +1 -1
  16. package/dist/src/cli/cli-status.js +7 -1
  17. package/dist/src/cli/cli-status.js.map +1 -1
  18. package/dist/src/cli/employee-handler.js +3 -2
  19. package/dist/src/cli/employee-handler.js.map +1 -1
  20. package/dist/src/cli/handlers.js +1 -0
  21. package/dist/src/cli/handlers.js.map +1 -1
  22. package/dist/src/code-mode/acp-host.js +22 -10
  23. package/dist/src/code-mode/acp-host.js.map +1 -1
  24. package/dist/src/core/config.js +23 -0
  25. package/dist/src/core/config.js.map +1 -1
  26. package/dist/src/core/db.js +16 -0
  27. package/dist/src/core/db.js.map +1 -1
  28. package/dist/src/core/dispatch-approval-ingress.js +59 -0
  29. package/dist/src/core/dispatch-approval-ingress.js.map +1 -0
  30. package/dist/src/core/dispatch-approval.js +135 -0
  31. package/dist/src/core/dispatch-approval.js.map +1 -0
  32. package/dist/src/core/employees.js +22 -4
  33. package/dist/src/core/employees.js.map +1 -1
  34. package/dist/src/core/runtime-settings.js +27 -0
  35. package/dist/src/core/runtime-settings.js.map +1 -1
  36. package/dist/src/core/serve-log.js +66 -0
  37. package/dist/src/core/serve-log.js.map +1 -0
  38. package/dist/src/core/settings-merge.js +10 -1
  39. package/dist/src/core/settings-merge.js.map +1 -1
  40. package/dist/src/core/windows-shell.js +63 -0
  41. package/dist/src/core/windows-shell.js.map +1 -0
  42. package/dist/src/discord/bot.js +214 -147
  43. package/dist/src/discord/bot.js.map +1 -1
  44. package/dist/src/discord/gateway-supervisor.js +303 -0
  45. package/dist/src/discord/gateway-supervisor.js.map +1 -0
  46. package/dist/src/discord/rest-scheduler.js +448 -0
  47. package/dist/src/discord/rest-scheduler.js.map +1 -0
  48. package/dist/src/discord/send-only-client.js +90 -43
  49. package/dist/src/discord/send-only-client.js.map +1 -1
  50. package/dist/src/manager/lifecycle.js +7 -2
  51. package/dist/src/manager/lifecycle.js.map +1 -1
  52. package/dist/src/manager/notes/capabilities.js +9 -7
  53. package/dist/src/manager/notes/capabilities.js.map +1 -1
  54. package/dist/src/memory/bootstrap.js +5 -1
  55. package/dist/src/memory/bootstrap.js.map +1 -1
  56. package/dist/src/memory/host-toolchain.js +156 -0
  57. package/dist/src/memory/host-toolchain.js.map +1 -0
  58. package/dist/src/messaging/channel-capabilities.js +30 -0
  59. package/dist/src/messaging/channel-capabilities.js.map +1 -0
  60. package/dist/src/messaging/delivery-outcome.js +73 -0
  61. package/dist/src/messaging/delivery-outcome.js.map +1 -0
  62. package/dist/src/messaging/draft-stream.js +154 -0
  63. package/dist/src/messaging/draft-stream.js.map +1 -0
  64. package/dist/src/messaging/runtime.js +3 -9
  65. package/dist/src/messaging/runtime.js.map +1 -1
  66. package/dist/src/messaging/send.js +40 -8
  67. package/dist/src/messaging/send.js.map +1 -1
  68. package/dist/src/messaging/types.js +22 -1
  69. package/dist/src/messaging/types.js.map +1 -1
  70. package/dist/src/notes/search.js +6 -4
  71. package/dist/src/notes/search.js.map +1 -1
  72. package/dist/src/prompt/builder.js +110 -6
  73. package/dist/src/prompt/builder.js.map +1 -1
  74. package/dist/src/prompt/conversation-context.js +23 -0
  75. package/dist/src/prompt/conversation-context.js.map +1 -0
  76. package/dist/src/prompt/templates/a1-system.md +28 -12
  77. package/dist/src/prompt/templates/control-system.md +19 -6
  78. package/dist/src/prompt/templates/employee.md +16 -3
  79. package/dist/src/routes/orchestrate.js +83 -0
  80. package/dist/src/routes/orchestrate.js.map +1 -1
  81. package/dist/src/security/path-guards.js +157 -27
  82. package/dist/src/security/path-guards.js.map +1 -1
  83. package/dist/src/slack/api.js +38 -5
  84. package/dist/src/slack/api.js.map +1 -1
  85. package/dist/src/slack/bot.js +244 -37
  86. package/dist/src/slack/bot.js.map +1 -1
  87. package/dist/src/slack/context.js +192 -0
  88. package/dist/src/slack/context.js.map +1 -0
  89. package/dist/src/slack/conversation.js +275 -0
  90. package/dist/src/slack/conversation.js.map +1 -0
  91. package/dist/src/slack/enrichment-cache.js +334 -0
  92. package/dist/src/slack/enrichment-cache.js.map +1 -0
  93. package/dist/src/slack/history.js +47 -8
  94. package/dist/src/slack/history.js.map +1 -1
  95. package/dist/src/slack/identity.js +99 -190
  96. package/dist/src/slack/identity.js.map +1 -1
  97. package/dist/src/slack/ingress.js +91 -3
  98. package/dist/src/slack/ingress.js.map +1 -1
  99. package/dist/src/slack/progress.js +39 -51
  100. package/dist/src/slack/progress.js.map +1 -1
  101. package/dist/src/slack/thread-tracker.js +88 -0
  102. package/dist/src/slack/thread-tracker.js.map +1 -1
  103. package/dist/src/telegram/bot.js +127 -56
  104. package/dist/src/telegram/bot.js.map +1 -1
  105. package/dist/src/telegram/update-offset.js +152 -0
  106. package/dist/src/telegram/update-offset.js.map +1 -0
  107. package/package.json +1 -1
  108. package/public/dist/assets/{AdvancedExport-c41zCkwB.js → AdvancedExport-IOkupLFE.js} +1 -1
  109. package/public/dist/assets/Agent-DtgCvkB_.js +1 -0
  110. package/public/dist/assets/{Browser-B52Bdaeu.js → Browser-J4TPo4bX.js} +1 -1
  111. package/public/dist/assets/{BrowserPanel-Bh3JpkZO.js → BrowserPanel-C0aa2gja.js} +1 -1
  112. package/public/dist/assets/{ChannelsDiscord-D9FLnZso.js → ChannelsDiscord-D4fD-9hP.js} +1 -1
  113. package/public/dist/assets/{ChannelsSlack-CVNKtoo4.js → ChannelsSlack-_KBwRonM.js} +1 -1
  114. package/public/dist/assets/{ChannelsTelegram-BOCOPrBc.js → ChannelsTelegram-tihzSWVE.js} +1 -1
  115. package/public/dist/assets/{CodeCanvas-CbfPP7Ad.js → CodeCanvas-CaeLVtZi.js} +2 -2
  116. package/public/dist/assets/{DashboardEmbeddingSection-DMgHZQnn.js → DashboardEmbeddingSection-DiqlLiLj.js} +1 -1
  117. package/public/dist/assets/{DashboardMeta-DennaaA_.js → DashboardMeta-Dsj8kEuW.js} +1 -1
  118. package/public/dist/assets/{DesignPanel-DcL369nB.js → DesignPanel-B8CAf6sH.js} +1 -1
  119. package/public/dist/assets/{DiffPanel-B_ljObDk.js → DiffPanel-BTZRq6eG.js} +1 -1
  120. package/public/dist/assets/{Display-hGuSn_W5.js → Display-nkXitDjD.js} +1 -1
  121. package/public/dist/assets/{DocPanel-K8A2pm_1.js → DocPanel-ogNttSee.js} +1 -1
  122. package/public/dist/assets/{Employees-B5YXk5ma.js → Employees-CU_1YnrA.js} +1 -1
  123. package/public/dist/assets/{FolderPanel-CV52EzwG.js → FolderPanel-D0w_zD66.js} +1 -1
  124. package/public/dist/assets/{HealthBadge-megTlF4n.js → HealthBadge-CUaJ1PQH.js} +1 -1
  125. package/public/dist/assets/{Heartbeat-DDmZARWw.js → Heartbeat-BeAP2bMO.js} +1 -1
  126. package/public/dist/assets/{InlineWarn-DDzeHxQw.js → InlineWarn-D-fmcQXD.js} +1 -1
  127. package/public/dist/assets/MarkdownRenderer-B6HbiZ6i.js +1 -0
  128. package/public/dist/assets/{MarkdownRenderer-CXrilOsG.js → MarkdownRenderer-Cd3kkg_s.js} +2 -2
  129. package/public/dist/assets/{Mcp-BHWnJ6SP.js → Mcp-2HD1qR7F.js} +1 -1
  130. package/public/dist/assets/{Memory-CUbviW7N.js → Memory-frrIhLly.js} +1 -1
  131. package/public/dist/assets/{MilkdownWysiwygEditor-BKOCDI4Z.js → MilkdownWysiwygEditor-BkEzO5cz.js} +1 -1
  132. package/public/dist/assets/{ModelProvider-ngg8xTuB.js → ModelProvider-DqUvwyZ6.js} +1 -1
  133. package/public/dist/assets/{Network-AWpSkALD.js → Network-DfzqHi9q.js} +1 -1
  134. package/public/dist/assets/{NotesGraphWorkspace-Dm1xUFl8.js → NotesGraphWorkspace-BRIiraP9.js} +1 -1
  135. package/public/dist/assets/{PanelLayoutProvider-XpTo-i_s.js → PanelLayoutProvider-B9fYsunp.js} +1 -1
  136. package/public/dist/assets/Permissions-ByUy_5DT.js +1 -0
  137. package/public/dist/assets/{Permissions-CnKt44dN.js → Permissions-RgyF1O6q.js} +1 -1
  138. package/public/dist/assets/{Profile-DnIE2ios.js → Profile-DXKtAzfg.js} +1 -1
  139. package/public/dist/assets/{Prompts-B9aKLall.js → Prompts-C7njPWCu.js} +1 -1
  140. package/public/dist/assets/{SpeechKeys-K4Be_o7z.js → SpeechKeys-B7SDWzo9.js} +1 -1
  141. package/public/dist/assets/{TelegramHub-CFwSkzHP.js → TelegramHub-C61X3f-H.js} +1 -1
  142. package/public/dist/assets/{TerminalPanel-CdlFZHAK.js → TerminalPanel-DlUFPyzc.js} +1 -1
  143. package/public/dist/assets/{TransportStatusChips-CjEySMis.js → TransportStatusChips-B0NR0ljO.js} +1 -1
  144. package/public/dist/assets/{app-is76CHGZ.js → app-DUbf-v7B.js} +4 -4
  145. package/public/dist/assets/architecture-7EHR7CIX-Byg-B8Sh.js +1 -0
  146. package/public/dist/assets/{architectureDiagram-3BPJPVTR-q8idz3H3.js → architectureDiagram-3BPJPVTR-DA7niVYs.js} +1 -1
  147. package/public/dist/assets/bgtask-badge-B8KhuBa7.js +1 -0
  148. package/public/dist/assets/{bgtask-badge-B0B1nXUs.js → bgtask-badge-jIH69Dp3.js} +1 -1
  149. package/public/dist/assets/{blockDiagram-GPEHLZMM-DGB0dsia.js → blockDiagram-GPEHLZMM-czRsW1WP.js} +1 -1
  150. package/public/dist/assets/{bounded-set-CFlZiEF4.js → bounded-set-DXkYOGnQ.js} +1 -1
  151. package/public/dist/assets/{c4Diagram-AAUBKEIU-ChP5YfVt.js → c4Diagram-AAUBKEIU-zoRyRo1y.js} +1 -1
  152. package/public/dist/assets/channel-Cr7Dmg2t.js +1 -0
  153. package/public/dist/assets/{chunk-2J33WTMH-D3OPoEHg.js → chunk-2J33WTMH-DMaZjiDe.js} +1 -1
  154. package/public/dist/assets/{chunk-3OPIFGDE-CULJ8ZHF.js → chunk-3OPIFGDE-fm0Uteda.js} +1 -1
  155. package/public/dist/assets/{chunk-4BX2VUAB-DGgktZYr.js → chunk-4BX2VUAB-DU36Vmpr.js} +1 -1
  156. package/public/dist/assets/{chunk-4EGX6M5U-BD3v8KR4.js → chunk-4EGX6M5U-CYPeQu4F.js} +1 -1
  157. package/public/dist/assets/chunk-55IACEB6-Dkm6BnqN.js +1 -0
  158. package/public/dist/assets/{chunk-5DO6E6H7-B-FbGqHn.js → chunk-5DO6E6H7-CIcLA1n6.js} +1 -1
  159. package/public/dist/assets/{chunk-5ZQYHXKU-DVpWOoGS.js → chunk-5ZQYHXKU-NjOvV6Nd.js} +1 -1
  160. package/public/dist/assets/{chunk-727SXJPM-CZjR7q6H.js → chunk-727SXJPM-CUOujQg0.js} +1 -1
  161. package/public/dist/assets/{chunk-AQP2D5EJ-BlGjnlsV.js → chunk-AQP2D5EJ-2nFXTQ0W.js} +1 -1
  162. package/public/dist/assets/{chunk-BR22UD5L-MK8KuB9X.js → chunk-BR22UD5L-BoyFFQuR.js} +1 -1
  163. package/public/dist/assets/{chunk-BSJP7CBP-ypXC4wBv.js → chunk-BSJP7CBP-B1MMwNrU.js} +1 -1
  164. package/public/dist/assets/{chunk-CSCIHK7Q-CmvetykJ.js → chunk-CSCIHK7Q-C0MOgWVt.js} +1 -1
  165. package/public/dist/assets/{chunk-FHYWG6QK-Do5csWDm.js → chunk-FHYWG6QK-CmUWtJPn.js} +1 -1
  166. package/public/dist/assets/{chunk-FMBD7UC4-BXpT25MP.js → chunk-FMBD7UC4-BEz4FhFn.js} +1 -1
  167. package/public/dist/assets/{chunk-KSCS5N6A-DtlfLqto.js → chunk-KSCS5N6A-B2XGqWQY.js} +1 -1
  168. package/public/dist/assets/{chunk-L5ZTLDWV-Czv9NkHn.js → chunk-L5ZTLDWV-CfZ2hrJ2.js} +1 -1
  169. package/public/dist/assets/{chunk-LZXEDZCA-vD7oFdiq.js → chunk-LZXEDZCA-BXuFCBsZ.js} +1 -1
  170. package/public/dist/assets/{chunk-MPE355IW-2ei0PVn0.js → chunk-MPE355IW-BdSiU-oV.js} +1 -1
  171. package/public/dist/assets/{chunk-MZUSXYTE-JO_qTk4K.js → chunk-MZUSXYTE-VYfI8Uwx.js} +1 -1
  172. package/public/dist/assets/{chunk-N66VUXT2-BXL-FniY.js → chunk-N66VUXT2-DJVNyglo.js} +1 -1
  173. package/public/dist/assets/{chunk-ND2GUHAM-B9SIO-4a.js → chunk-ND2GUHAM-1k8TCCsJ.js} +1 -1
  174. package/public/dist/assets/{chunk-NZK2D7GU-CqOo06-Z.js → chunk-NZK2D7GU-CkYWftT8.js} +1 -1
  175. package/public/dist/assets/{chunk-O5CBEL6O-BWbe_grt.js → chunk-O5CBEL6O-B5g0NbhD.js} +1 -1
  176. package/public/dist/assets/{chunk-PUPMXCY4-aFTMGBaR.js → chunk-PUPMXCY4-DJKmByz8.js} +1 -1
  177. package/public/dist/assets/chunk-QZHKN3VN-C6ktI6EQ.js +1 -0
  178. package/public/dist/assets/{chunk-UIBZB4QT-S8EH0jZR.js → chunk-UIBZB4QT-DgLbPJ3_.js} +1 -1
  179. package/public/dist/assets/{chunk-WCWK7LTN-EgrNk7Dj.js → chunk-WCWK7LTN-DWxi0w0a.js} +1 -1
  180. package/public/dist/assets/chunk-WU5MYG2G-Cwe6QZ3_.js +1 -0
  181. package/public/dist/assets/{chunk-XPW4576I-8oydVjY6.js → chunk-XPW4576I-CaTDAC52.js} +1 -1
  182. package/public/dist/assets/classDiagram-4FO5ZUOK-BzLBk9sv.js +1 -0
  183. package/public/dist/assets/classDiagram-v2-Q7XG4LA2-9K8wUz3g.js +1 -0
  184. package/public/dist/assets/{copy-text-BDs2wKjA.js → copy-text-Dy0kfmb9.js} +1 -1
  185. package/public/dist/assets/{cose-bilkent-S5V4N54A-PNmvcq_6.js → cose-bilkent-S5V4N54A-B9Tcz6qW.js} +1 -1
  186. package/public/dist/assets/{dagre-BM42HDAG-BP_m3uo9.js → dagre-BM42HDAG-OH37BMnf.js} +1 -1
  187. package/public/dist/assets/{dagre-Ct2n78X9.js → dagre-BsKKQnyU.js} +1 -1
  188. package/public/dist/assets/{diagram-2AECGRRQ-DhgfR-ol.js → diagram-2AECGRRQ-B1t73Wn1.js} +1 -1
  189. package/public/dist/assets/{diagram-5GNKFQAL-BRLvmdeK.js → diagram-5GNKFQAL-DBGIcSxH.js} +1 -1
  190. package/public/dist/assets/{diagram-KO2AKTUF-Co3C18-Q.js → diagram-KO2AKTUF-uRuKS97A.js} +1 -1
  191. package/public/dist/assets/{diagram-LMA3HP47-3SwoWQij.js → diagram-LMA3HP47-XMEHnr3B.js} +1 -1
  192. package/public/dist/assets/{diagram-OG6HWLK6-bjEryAd3.js → diagram-OG6HWLK6-B_vRUJSJ.js} +1 -1
  193. package/public/dist/assets/{dist-BvQlb9-o.js → dist-BCCaGGDY.js} +1 -1
  194. package/public/dist/assets/{dist-CvzAXxlb.js → dist-BPE4W9iX.js} +1 -1
  195. package/public/dist/assets/{dist-CFU9RsAu.js → dist-BQMBTYXL.js} +1 -1
  196. package/public/dist/assets/{dist-BlMOeJym.js → dist-BaPGPaX4.js} +1 -1
  197. package/public/dist/assets/{dist-B6T-R4xY.js → dist-Bg80xGMJ.js} +1 -1
  198. package/public/dist/assets/{dist-CS1XLdz3.js → dist-BspKh_Zg.js} +1 -1
  199. package/public/dist/assets/{dist-qUky5WRy.js → dist-CBnlLSQZ.js} +1 -1
  200. package/public/dist/assets/{dist-BMC_dTfR.js → dist-CD7tjeNO.js} +1 -1
  201. package/public/dist/assets/{dist-w2YzIhc5.js → dist-CINTuhik.js} +1 -1
  202. package/public/dist/assets/{dist-cBBDKBli.js → dist-CTpw6PFT.js} +1 -1
  203. package/public/dist/assets/{dist-BqzMcuh8.js → dist-CczLsP0o.js} +1 -1
  204. package/public/dist/assets/{dist-ph7PUr0c.js → dist-CdfDDy4r.js} +1 -1
  205. package/public/dist/assets/{dist-D8SW_REQ.js → dist-CgIOBybm.js} +1 -1
  206. package/public/dist/assets/dist-Cl_pRobr.js +1 -0
  207. package/public/dist/assets/{dist-DTcoHNXr.js → dist-CruwQXwE.js} +1 -1
  208. package/public/dist/assets/{dist-BDPUxeoi.js → dist-CuL30i1H.js} +1 -1
  209. package/public/dist/assets/{dist-DMZVNaIe.js → dist-CvE8Qa9r.js} +1 -1
  210. package/public/dist/assets/{dist-B8V2LYzt.js → dist-Cy3mcP1e.js} +1 -1
  211. package/public/dist/assets/{dist-C7pD0dEn.js → dist-CzCFEnHw.js} +1 -1
  212. package/public/dist/assets/{dist-DStWZVZ0.js → dist-D2h9T4I9.js} +1 -1
  213. package/public/dist/assets/{dist-DmjSXJAP.js → dist-D3ShDeDU.js} +1 -1
  214. package/public/dist/assets/{dist-CC2vK_6S.js → dist-D8Zky4R1.js} +1 -1
  215. package/public/dist/assets/{dist-DN-hkAIC.js → dist-DKd_hdkE.js} +1 -1
  216. package/public/dist/assets/{dist-CjzfPsGt.js → dist-DLOg6n0b.js} +1 -1
  217. package/public/dist/assets/{dist-DdJuxxG7.js → dist-DS7cuuIk.js} +1 -1
  218. package/public/dist/assets/dist-DW0I56_o.js +1 -0
  219. package/public/dist/assets/{dist-BSf40pae.js → dist-JnCmAxGR.js} +1 -1
  220. package/public/dist/assets/{dist-DhgwoIqj.js → dist-TombgBki.js} +1 -1
  221. package/public/dist/assets/dist-hBRIxDzG.js +1 -0
  222. package/public/dist/assets/dist-z5Z70wW8.js +1 -0
  223. package/public/dist/assets/{dockerfile-C0jniLkw.js → dockerfile-DkX5AHzr.js} +1 -1
  224. package/public/dist/assets/{employees-eiW0cC8z.js → employees-BNy8a6XX.js} +1 -1
  225. package/public/dist/assets/{erDiagram-TEJ5UH35-DQBxHU1q.js → erDiagram-TEJ5UH35-CTHxg4ER.js} +1 -1
  226. package/public/dist/assets/{error-normalize-BzeO0SXE.js → error-normalize-CLRJh19F.js} +1 -1
  227. package/public/dist/assets/eventmodeling-FCH6USID-LckY84Wp.js +1 -0
  228. package/public/dist/assets/{factor-nzjoQ9cK.js → factor-Xro2mWdw.js} +1 -1
  229. package/public/dist/assets/{fields-zkeByFQW.js → fields-BwOMlwS0.js} +1 -1
  230. package/public/dist/assets/{flowDiagram-I6XJVG4X-BN90fCt5.js → flowDiagram-I6XJVG4X-DgCs6PPU.js} +1 -1
  231. package/public/dist/assets/{ganttDiagram-6RSMTGT7-B-JAlIhh.js → ganttDiagram-6RSMTGT7-DGjdFJRc.js} +1 -1
  232. package/public/dist/assets/gitGraph-WXDBUCRP-DXhEIZXY.js +1 -0
  233. package/public/dist/assets/{gitGraphDiagram-PVQCEYII-CLL2G5U-.js → gitGraphDiagram-PVQCEYII-DvCWiClL.js} +1 -1
  234. package/public/dist/assets/{graphlib-B6dRm8vZ.js → graphlib-B06FTUqA.js} +1 -1
  235. package/public/dist/assets/{iframe-renderer-C7qQJX4c.js → iframe-renderer-C6Zwg9w4.js} +2 -2
  236. package/public/dist/assets/iframe-renderer-DBmV8gCQ.js +1 -0
  237. package/public/dist/assets/info-J43DQDTF-iXM3vzuR.js +1 -0
  238. package/public/dist/assets/{infoDiagram-5YYISTIA-CftYDPfc.js → infoDiagram-5YYISTIA-DxkbyTf_.js} +1 -1
  239. package/public/dist/assets/{ishikawaDiagram-YF4QCWOH-BVa5AJbz.js → ishikawaDiagram-YF4QCWOH-fyJrRZTW.js} +1 -1
  240. package/public/dist/assets/javascript-DZFdG8BN.js +1 -0
  241. package/public/dist/assets/{journeyDiagram-JHISSGLW-BeUKm6ME.js → journeyDiagram-JHISSGLW-Dd6CvR-c.js} +1 -1
  242. package/public/dist/assets/{kanban-definition-UN3LZRKU-K5DYNY4p.js → kanban-definition-UN3LZRKU-C2ZH4LXA.js} +1 -1
  243. package/public/dist/assets/{manager-Bjuh1jpq.js → manager-DzCR6Pam.js} +4 -4
  244. package/public/dist/assets/{memory--Q8Tb5SZ.js → memory-C4O44HMr.js} +1 -1
  245. package/public/dist/assets/memory-Dt_Ji6aP.js +1 -0
  246. package/public/dist/assets/mermaid-loader-CylkLQP5.js +1 -0
  247. package/public/dist/assets/{mermaid-parser.core-Cz70RgAa.js → mermaid-parser.core-C-9KB617.js} +1 -1
  248. package/public/dist/assets/{mermaid.core-Dj5GOPe1.js → mermaid.core-8XY13b72.js} +2 -2
  249. package/public/dist/assets/mermaid.core-BEuf6y5_.js +1 -0
  250. package/public/dist/assets/{message-history-CfAHmCDW.js → message-history-DCxD21J1.js} +1 -1
  251. package/public/dist/assets/message-history-DyISauiv.js +1 -0
  252. package/public/dist/assets/{mindmap-definition-RKZ34NQL-PsH0E_3e.js → mindmap-definition-RKZ34NQL-DUQBUbUA.js} +1 -1
  253. package/public/dist/assets/{nsis-BI3I3OhH.js → nsis-iX94j4T9.js} +1 -1
  254. package/public/dist/assets/packet-YPE3B663-SclsNpNx.js +1 -0
  255. package/public/dist/assets/{page-shell-LF7vVVfG.js → page-shell-GpE8A-FA.js} +1 -1
  256. package/public/dist/assets/pie-LRSECV5Y-CF43gDO6.js +1 -0
  257. package/public/dist/assets/{pieDiagram-4H26LBE5-Dtwtlr0z.js → pieDiagram-4H26LBE5-ChOXpmZ5.js} +1 -1
  258. package/public/dist/assets/{pug-DHfNwv1w.js → pug-C8nPBT90.js} +1 -1
  259. package/public/dist/assets/{quadrantDiagram-W4KKPZXB-CAFUbaV6.js → quadrantDiagram-W4KKPZXB-lbpz07e4.js} +1 -1
  260. package/public/dist/assets/radar-GUYGQ44K-BsylzLX_.js +1 -0
  261. package/public/dist/assets/{render-BDso7Yb5.js → render-A--hkukv.js} +2 -2
  262. package/public/dist/assets/{requirementDiagram-4Y6WPE33-CvBM4AjK.js → requirementDiagram-4Y6WPE33-CrApoE_l.js} +1 -1
  263. package/public/dist/assets/{sankeyDiagram-5OEKKPKP-cordQgRs.js → sankeyDiagram-5OEKKPKP-Df1lU-mT.js} +1 -1
  264. package/public/dist/assets/{sequenceDiagram-3UESZ5HK-DDAqRdga.js → sequenceDiagram-3UESZ5HK-CelQN5jY.js} +1 -1
  265. package/public/dist/assets/settings-3ZdoKHIf.js +56 -0
  266. package/public/dist/assets/settings-C6Pku2GC.js +1 -0
  267. package/public/dist/assets/{settings-core-BxuFkt4a.js → settings-core-CQe1uP6x.js} +17 -17
  268. package/public/dist/assets/settings-core-DqwLJkgP.js +1 -0
  269. package/public/dist/assets/settings-types-DPhhM-cj.js +1 -0
  270. package/public/dist/assets/{sidebar-BNT58qR0.js → sidebar-DxFp_449.js} +3 -3
  271. package/public/dist/assets/{skills-CwRBcm3m.js → skills-BU4q8Q8n.js} +1 -1
  272. package/public/dist/assets/skills-x2gH-1Ry.js +1 -0
  273. package/public/dist/assets/{slash-commands-cm0U58n7.js → slash-commands-BiXOgZ5B.js} +1 -1
  274. package/public/dist/assets/slash-commands-s8eR7Kd1.js +1 -0
  275. package/public/dist/assets/{stateDiagram-AJRCARHV-DUaoSRgZ.js → stateDiagram-AJRCARHV-CeyXWXrg.js} +1 -1
  276. package/public/dist/assets/stateDiagram-v2-BHNVJYJU-Bhb8zTjh.js +1 -0
  277. package/public/dist/assets/{timeline-definition-PNZ67QCA-D85QNy9b.js → timeline-definition-PNZ67QCA-DP0lPzQ_.js} +1 -1
  278. package/public/dist/assets/{trace-drawer-BuwO4m2P.js → trace-drawer-2BTQCor6.js} +1 -1
  279. package/public/dist/assets/treeView-BLDUP644-DHq0vQpf.js +1 -0
  280. package/public/dist/assets/treemap-LRROVOQU-vKngXIla.js +1 -0
  281. package/public/dist/assets/ui-CB0L33o0.js +1 -0
  282. package/public/dist/assets/{ui-C-LHMki1.js → ui-Csy42uNW.js} +1 -1
  283. package/public/dist/assets/{vennDiagram-CIIHVFJN-CQSILdx8.js → vennDiagram-CIIHVFJN-WB9mzv1f.js} +1 -1
  284. package/public/dist/assets/wardley-L42UT6IY-B1jQOSA5.js +1 -0
  285. package/public/dist/assets/{wardleyDiagram-YWT4CUSO-BZEVMlJ4.js → wardleyDiagram-YWT4CUSO-CapVnCz5.js} +1 -1
  286. package/public/dist/assets/{wiki-link-suggestions-Dp6kBQVu.js → wiki-link-suggestions-cvpqJp6c.js} +1 -1
  287. package/public/dist/assets/{xychartDiagram-2RQKCTM6-C8573Tgs.js → xychartDiagram-2RQKCTM6-DduDB3Cd.js} +1 -1
  288. package/public/dist/index.html +1 -1
  289. package/public/dist/manager/index.html +1 -1
  290. package/public/js/features/settings-cli-status.ts +11 -5
  291. package/public/js/features/settings-types.ts +35 -3
  292. package/public/manager/src/settings/cli-status-polling.ts +84 -0
  293. package/public/manager/src/settings/pages/Agent.tsx +111 -16
  294. package/scripts/install-officecli.ps1 +38 -2
  295. package/scripts/install.ps1 +1 -1
  296. package/public/dist/assets/Agent-nMPZsMfN.js +0 -1
  297. package/public/dist/assets/MarkdownRenderer-DZVh_xX2.js +0 -1
  298. package/public/dist/assets/Permissions-DNT0TxYL.js +0 -1
  299. package/public/dist/assets/architecture-7EHR7CIX-D-6Nx315.js +0 -1
  300. package/public/dist/assets/bgtask-badge-B2jUZ5mC.js +0 -1
  301. package/public/dist/assets/channel-ByNDsZsH.js +0 -1
  302. package/public/dist/assets/chunk-55IACEB6-CQFLXxVc.js +0 -1
  303. package/public/dist/assets/chunk-QZHKN3VN-Becu19mF.js +0 -1
  304. package/public/dist/assets/chunk-WU5MYG2G-CkoHFn0F.js +0 -1
  305. package/public/dist/assets/classDiagram-4FO5ZUOK-DVGoKviY.js +0 -1
  306. package/public/dist/assets/classDiagram-v2-Q7XG4LA2-BIZeptY-.js +0 -1
  307. package/public/dist/assets/dist-BmXnOAlo.js +0 -1
  308. package/public/dist/assets/dist-DLY5I6dK.js +0 -1
  309. package/public/dist/assets/dist-DPHcMCqI.js +0 -1
  310. package/public/dist/assets/dist-xHOEvyuU.js +0 -1
  311. package/public/dist/assets/eventmodeling-FCH6USID-BB1OVDLb.js +0 -1
  312. package/public/dist/assets/gitGraph-WXDBUCRP-DAWTa5Fn.js +0 -1
  313. package/public/dist/assets/iframe-renderer-D7PB_yrC.js +0 -1
  314. package/public/dist/assets/info-J43DQDTF-C530y5-j.js +0 -1
  315. package/public/dist/assets/javascript-DbM-pSY-.js +0 -1
  316. package/public/dist/assets/memory-rsKN0aa2.js +0 -1
  317. package/public/dist/assets/mermaid-loader-Bd9rYyxD.js +0 -1
  318. package/public/dist/assets/mermaid.core-TSG49mwm.js +0 -1
  319. package/public/dist/assets/message-history-BttkY77h.js +0 -1
  320. package/public/dist/assets/packet-YPE3B663-BHcxn4sy.js +0 -1
  321. package/public/dist/assets/pie-LRSECV5Y-DjigSia_.js +0 -1
  322. package/public/dist/assets/radar-GUYGQ44K-DPCrmsHJ.js +0 -1
  323. package/public/dist/assets/settings-CqnIqxkG.js +0 -56
  324. package/public/dist/assets/settings-core-CdZ7oKhM.js +0 -1
  325. package/public/dist/assets/settings-pPMHNs0G.js +0 -1
  326. package/public/dist/assets/skills-DiVoaVdS.js +0 -1
  327. package/public/dist/assets/slash-commands-Bx4saHwR.js +0 -1
  328. package/public/dist/assets/stateDiagram-v2-BHNVJYJU-BAesfdhr.js +0 -1
  329. package/public/dist/assets/treeView-BLDUP644-DmufUMul.js +0 -1
  330. package/public/dist/assets/treemap-LRROVOQU-Cg48uw_D.js +0 -1
  331. package/public/dist/assets/ui-XPQDPe-5.js +0 -1
  332. package/public/dist/assets/wardley-L42UT6IY-QZOEXU7f.js +0 -1
  333. /package/public/dist/assets/{agent-meta-Y3DE6sxh.js → agent-meta-Bl-Q0EgC.js} +0 -0
  334. /package/public/dist/assets/{api-B25zNNFJ.js → api-FOqKQ9fm.js} +0 -0
  335. /package/public/dist/assets/{apl-2tE96F_Y.js → apl-CYLd9I-9.js} +0 -0
  336. /package/public/dist/assets/{asciiarmor-ynSKiC17.js → asciiarmor-7YwhfGDq.js} +0 -0
  337. /package/public/dist/assets/{asn1-CfqO1VY8.js → asn1-BlhHp3qx.js} +0 -0
  338. /package/public/dist/assets/{asterisk-DSiRJoqT.js → asterisk-Q0-IBwUt.js} +0 -0
  339. /package/public/dist/assets/{brainfuck-DTcanv-8.js → brainfuck-CM8jf4Gu.js} +0 -0
  340. /package/public/dist/assets/{chunk-AGHRB4JF-BXLzSehp.js → chunk-AGHRB4JF-Cdp9MZGh.js} +0 -0
  341. /package/public/dist/assets/{chunk-NNHCCRGN-D69GtSOc.js → chunk-NNHCCRGN-ChI2WAS0.js} +0 -0
  342. /package/public/dist/assets/{clike-qn72CMAj.js → clike-BcV5UqGE.js} +0 -0
  343. /package/public/dist/assets/{clojure-m8yDiYVc.js → clojure-XHu9GAjV.js} +0 -0
  344. /package/public/dist/assets/{cmake-4AHAWHiF.js → cmake-DhPsEu0W.js} +0 -0
  345. /package/public/dist/assets/{cobol-CxxJP5eX.js → cobol-BEekiT-v.js} +0 -0
  346. /package/public/dist/assets/{coffeescript-BAB3zi48.js → coffeescript-Bgk4ZVWF.js} +0 -0
  347. /package/public/dist/assets/{commonlisp-BPbWuAds.js → commonlisp-Dw4PRJwx.js} +0 -0
  348. /package/public/dist/assets/{crystal-CGuSsWYR.js → crystal-CJ-iCD_G.js} +0 -0
  349. /package/public/dist/assets/{css-DszbR74r.js → css-BDUaiSMY.js} +0 -0
  350. /package/public/dist/assets/{cypher-GUnmv522.js → cypher-CJ05ZgAu.js} +0 -0
  351. /package/public/dist/assets/{cytoscape.esm-D_XyYSBG.js → cytoscape.esm-PBXWcYR1.js} +0 -0
  352. /package/public/dist/assets/{d-Cfm0cznj.js → d-BfHF1VVF.js} +0 -0
  353. /package/public/dist/assets/{desktop-bridge-CvdhnJQo.js → desktop-bridge-DtydAvqu.js} +0 -0
  354. /package/public/dist/assets/{diff-C6rPA7NX.js → diff-BVcHwfdB.js} +0 -0
  355. /package/public/dist/assets/{dist-AgQwqBLq.js → dist-BbhtVnRz.js} +0 -0
  356. /package/public/dist/assets/{dtd-Dxh5tS6M.js → dtd-Bg0TgBY9.js} +0 -0
  357. /package/public/dist/assets/{dylan-BdIVFR1j.js → dylan-BQ0i5j3T.js} +0 -0
  358. /package/public/dist/assets/{ebnf-iU-8xYFu.js → ebnf-QSFUkOiT.js} +0 -0
  359. /package/public/dist/assets/{ecl-DjbzOHI6.js → ecl-oXh4vhiy.js} +0 -0
  360. /package/public/dist/assets/{eiffel-B2ID8LZ3.js → eiffel-S15DDWzw.js} +0 -0
  361. /package/public/dist/assets/{elm-B6vPcfMj.js → elm-B746ZFPi.js} +0 -0
  362. /package/public/dist/assets/{erlang-nDQwRdZV.js → erlang-GRIYhTbY.js} +0 -0
  363. /package/public/dist/assets/{fcl-Bf86o55I.js → fcl-DjQMeb0v.js} +0 -0
  364. /package/public/dist/assets/{folder-drag-payload-Bhln9Mk2.js → folder-drag-payload-CJ0dxhZa.js} +0 -0
  365. /package/public/dist/assets/{forth-CeQJji0n.js → forth-DNnBFTm6.js} +0 -0
  366. /package/public/dist/assets/{fortran-Dm_CqDsH.js → fortran-yg6K9z9n.js} +0 -0
  367. /package/public/dist/assets/{gas-e3EfgE3p.js → gas-fbsH19hy.js} +0 -0
  368. /package/public/dist/assets/{gherkin-Dn_7tSzg.js → gherkin-BCy9haeT.js} +0 -0
  369. /package/public/dist/assets/{groovy-LaKuGRkK.js → groovy-Cm4gdIYU.js} +0 -0
  370. /package/public/dist/assets/{haskell-D9nNX9Mr.js → haskell-Dq28dVw2.js} +0 -0
  371. /package/public/dist/assets/{haxe-Rp176QXJ.js → haxe-BrZpr4Ca.js} +0 -0
  372. /package/public/dist/assets/{http-BOeYLbuM.js → http-B3zr0y0o.js} +0 -0
  373. /package/public/dist/assets/{idl-DHv3vdme.js → idl-C9CL9hdG.js} +0 -0
  374. /package/public/dist/assets/{javascript-Dk2fbl1a.js → javascript-DD7UxIxH.js} +0 -0
  375. /package/public/dist/assets/{jsx-runtime-gFMgZ0TQ.js → jsx-runtime-CYoNlHAD.js} +0 -0
  376. /package/public/dist/assets/{julia-D7CKCk5I.js → julia-CjwfSXBk.js} +0 -0
  377. /package/public/dist/assets/{livescript-gRbr9rhj.js → livescript-vRjI6jFU.js} +0 -0
  378. /package/public/dist/assets/{lua-CgZ_7bxf.js → lua-CxVmDfKg.js} +0 -0
  379. /package/public/dist/assets/{mathematica-B6bTyoab.js → mathematica-DJZPFt8k.js} +0 -0
  380. /package/public/dist/assets/{mbox-C8oQj1cJ.js → mbox-CxBBnlIA.js} +0 -0
  381. /package/public/dist/assets/{mirc-v6L6kZuh.js → mirc-CBWc0vcU.js} +0 -0
  382. /package/public/dist/assets/{mllike-CWu4RdWO.js → mllike-DYddHpeS.js} +0 -0
  383. /package/public/dist/assets/{modelica-B3NBpX1d.js → modelica-B94rrYMn.js} +0 -0
  384. /package/public/dist/assets/{mscgen-C8u7qRYw.js → mscgen-D0PO0iPT.js} +0 -0
  385. /package/public/dist/assets/{mumps-DHjVG4PS.js → mumps-BdPrWvs5.js} +0 -0
  386. /package/public/dist/assets/{nginx-BMt87X3t.js → nginx-C7cLiM4x.js} +0 -0
  387. /package/public/dist/assets/{notes-graph-settings-BgNrT_58.js → notes-graph-settings-Cl4lMj-A.js} +0 -0
  388. /package/public/dist/assets/{ntriples-C8U-Jud2.js → ntriples-DLMpvgb1.js} +0 -0
  389. /package/public/dist/assets/{octave-Bq37AoFm.js → octave-DeJPElAr.js} +0 -0
  390. /package/public/dist/assets/{oz-D6HxSRn3.js → oz-4dtXWqwe.js} +0 -0
  391. /package/public/dist/assets/{pascal-BBqiAVg6.js → pascal-TdeXcL-o.js} +0 -0
  392. /package/public/dist/assets/{path-utils-LsJeDCKF.js → path-utils-CHwADH-r.js} +0 -0
  393. /package/public/dist/assets/{perl-sHANlXjx.js → perl-DfpfXWOH.js} +0 -0
  394. /package/public/dist/assets/{pig-Cufgew--.js → pig-xQ4essgV.js} +0 -0
  395. /package/public/dist/assets/{powershell--Q4mDip6.js → powershell-Dfw2t4-B.js} +0 -0
  396. /package/public/dist/assets/{properties-DoVpJ-kT.js → properties-CrJLOvU2.js} +0 -0
  397. /package/public/dist/assets/{protobuf-B5OiV2Zv.js → protobuf-BYv78GYU.js} +0 -0
  398. /package/public/dist/assets/{provider-icons-VDfahiUp.js → provider-icons-CXA2mnPO.js} +0 -0
  399. /package/public/dist/assets/{puppet-Ce_CFfqW.js → puppet-DnsvBfcg.js} +0 -0
  400. /package/public/dist/assets/{python-pK7Wt6QH.js → python-mfoZJSDM.js} +0 -0
  401. /package/public/dist/assets/{q-Dd3Ltku0.js → q-BrTIu4PU.js} +0 -0
  402. /package/public/dist/assets/{r-CsX__2f0.js → r-FO7GgXB8.js} +0 -0
  403. /package/public/dist/assets/{rough.esm--LLpAgPj.js → rough.esm-DeGVhNS9.js} +0 -0
  404. /package/public/dist/assets/{rpm-D78AjDAl.js → rpm-D8Wbdep5.js} +0 -0
  405. /package/public/dist/assets/{ruby-D_-KI498.js → ruby-Cg1fwXaw.js} +0 -0
  406. /package/public/dist/assets/{sas-D-GUPiy4.js → sas-Ch1GEx-n.js} +0 -0
  407. /package/public/dist/assets/{scheme-DF9WwQDv.js → scheme-DGFmPoR2.js} +0 -0
  408. /package/public/dist/assets/{settings-client-CjbBShxm.js → settings-client-D9KY2Ufl.js} +0 -0
  409. /package/public/dist/assets/{shell-BTUwbV-w.js → shell-BBoIO9l0.js} +0 -0
  410. /package/public/dist/assets/{sieve--Z-EbGZo.js → sieve-8oEe6gDx.js} +0 -0
  411. /package/public/dist/assets/{simple-mode-BUow4bpn.js → simple-mode-BNw0K2rL.js} +0 -0
  412. /package/public/dist/assets/{smalltalk-C2YIwVx3.js → smalltalk-ChbxX23N.js} +0 -0
  413. /package/public/dist/assets/{solr-CYVq4fbf.js → solr-BwGyzi2H.js} +0 -0
  414. /package/public/dist/assets/{sparql-Ccd4fsFv.js → sparql-D9wgprRx.js} +0 -0
  415. /package/public/dist/assets/{spreadsheet-DW0WgMrS.js → spreadsheet-BySehl32.js} +0 -0
  416. /package/public/dist/assets/{sql-C71Zp6qn.js → sql-B6Phvk1R.js} +0 -0
  417. /package/public/dist/assets/{stex-CKuX0g_6.js → stex-32iK7T_9.js} +0 -0
  418. /package/public/dist/assets/{stylus-CBH8s0NO.js → stylus-C689wDNM.js} +0 -0
  419. /package/public/dist/assets/{swift-CfZoxKRA.js → swift-DZwxTp-L.js} +0 -0
  420. /package/public/dist/assets/{tcl-D5MGbeQu.js → tcl-BSOjIY_8.js} +0 -0
  421. /package/public/dist/assets/{textile-DJ3U30FW.js → textile-xOWO1SH7.js} +0 -0
  422. /package/public/dist/assets/{tiddlywiki-_fe1dHUq.js → tiddlywiki-B8jhOxrf.js} +0 -0
  423. /package/public/dist/assets/{tiki-Dd1udTrQ.js → tiki-OG7n6UAo.js} +0 -0
  424. /package/public/dist/assets/{toml-xpw8pqjz.js → toml-DkxT-aUR.js} +0 -0
  425. /package/public/dist/assets/{troff-CgWiec8m.js → troff-vE5gOX7Y.js} +0 -0
  426. /package/public/dist/assets/{ttcn-CSwmFrer.js → ttcn-CPOduycD.js} +0 -0
  427. /package/public/dist/assets/{ttcn-cfg-B5HVIC6z.js → ttcn-cfg-DmA__-R_.js} +0 -0
  428. /package/public/dist/assets/{turtle-Cl_SuWQk.js → turtle-CEzrJHdY.js} +0 -0
  429. /package/public/dist/assets/{vb-BT131bSf.js → vb-Cii5IQTv.js} +0 -0
  430. /package/public/dist/assets/{vbscript-D6S8_XkU.js → vbscript-DcZWGZ_S.js} +0 -0
  431. /package/public/dist/assets/{velocity-9HkI645n.js → velocity-BEag7EnK.js} +0 -0
  432. /package/public/dist/assets/{vendor-utils-DJY0EWnQ.js → vendor-utils-BK07iQND.js} +0 -0
  433. /package/public/dist/assets/{verilog-BzMguKeI.js → verilog-DMw8DKoT.js} +0 -0
  434. /package/public/dist/assets/{vhdl-bHScWzT1.js → vhdl-M4wLPuJt.js} +0 -0
  435. /package/public/dist/assets/{w3c-keyname-a_sRwNLm.js → w3c-keyname-hgmz1BF7.js} +0 -0
  436. /package/public/dist/assets/{webidl-CbgaVHNS.js → webidl-CjehKbx5.js} +0 -0
  437. /package/public/dist/assets/{wiki-link-resolver-DyFzBTIQ.js → wiki-link-resolver-N9fDy5zP.js} +0 -0
  438. /package/public/dist/assets/{xquery-DWZPmAiC.js → xquery-CYbd_YmJ.js} +0 -0
  439. /package/public/dist/assets/{yacas-CEdW4z4K.js → yacas-ClBNsli2.js} +0 -0
  440. /package/public/dist/assets/{z80-CMH3qxNg.js → z80-nGsPT_fm.js} +0 -0
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{a as c,i as l,n as u,r as d,s as f}from"./fields-zkeByFQW.js";import{a as p,i as m,n as h,r as g}from"./agent-meta-Y3DE6sxh.js";import{t as _}from"./path-utils-LsJeDCKF.js";var v=e(t(),1),y=n(),b=[`basic`,`openai`,`anthropic`,`vertex`];function x(e){return e===`anthropic`?`https://api.anthropic.com/v1/messages`:e===`vertex`?`https://LOCATION-aiplatform.googleapis.com/v1`:`http://127.0.0.1:18645/v1`}function S({client:e,pi:t,provider:n,model:r,onClose:i,onRegistered:a}){let o=(0,v.useMemo)(()=>t?.profiles?.find(e=>e.id===n)||t?.profiles?.[0],[t,n]),[s,c]=(0,v.useState)(o?.mode||`basic`),[u,d]=(0,v.useState)(o?.id||n||`progrok`),[p,m]=(0,v.useState)(o?.endpoint||x(s)),[h,g]=(0,v.useState)(r||o?.model||`grok-composer-2.5-fast`),[_,S]=(0,v.useState)(``),[C,w]=(0,v.useState)(!1),[T,E]=(0,v.useState)(null);(0,v.useEffect)(()=>{m(e=>e||x(s))},[s]);let D=async()=>{w(!0),E(null);try{let t=await e.post(`/api/pi/profiles/register`,{id:u,label:u,mode:s,endpoint:p,model:h,apiKey:_});a({provider:u,model:h,models:t.models||[],pi:t.settings?.pi}),i()}catch(e){E(e instanceof Error?e.message:String(e))}finally{w(!1)}};return(0,y.jsx)(`div`,{className:`settings-memory-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pi-profile-title`,children:(0,y.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,y.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,y.jsx)(`h3`,{id:`pi-profile-title`,children:`Pi Settings`}),(0,y.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:i,children:`Close`})]}),(0,y.jsxs)(`div`,{className:`settings-page-form`,children:[(0,y.jsx)(l,{id:`pi-profile-mode`,label:`Mode`,value:s,options:b.map(e=>({value:e,label:e})),onChange:e=>c(e)}),(0,y.jsx)(f,{id:`pi-profile-id`,label:`Provider`,value:u,onChange:d,placeholder:`progrok`}),(0,y.jsx)(f,{id:`pi-profile-endpoint`,label:`Endpoint`,value:p,onChange:m,placeholder:x(s)}),(0,y.jsx)(f,{id:`pi-profile-model`,label:`Model`,value:h,onChange:g,placeholder:`grok-composer-2.5-fast`}),(0,y.jsx)(f,{id:`pi-profile-key`,label:`API Key`,value:_,onChange:S,placeholder:o?.apiKeySet?`set (${o.apiKeyLast4||`****`})`:`empty for local proxy`}),(0,y.jsx)(`p`,{className:`settings-empty`,children:`Default: grok-composer-2.5-fast. Bare grok-composer-2.5 currently has no verified team access.`}),T?(0,y.jsx)(`p`,{className:`settings-field-error`,children:T}):null,(0,y.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:C,onClick:()=>void D(),children:C?`Registering...`:`Register`})]})]})})}function C(e,t,n=``){let r=new Set;n&&r.add(n);for(let n of e?.discoveredModels?.[t]||[])r.add(n);let i=e?.profiles?.find(e=>e.id===t);return i?.model&&r.add(i.model),[...r]}function w(e,t=``){let n=new Set;t&&n.add(t);for(let t of e?.profiles||[])n.add(t.id);return[...n]}function T(e,t,n=!0){return{value:e,original:t,valid:n}}function E({cli:e,meta:t,original:n,value:r,setValue:i,setEntry:a,client:o,pi:s,setPi:u}){let d=`percli-${e}-models`,p=e===`pi`,[m,_]=(0,v.useState)(!1),b=r.provider||t.defaultProvider||t.providers?.[0]||`claude`,x=p?C(s,b,r.model||``):[],E=!p&&(t.providers?.length??0)>0,D=p?x:E?t.modelsByProvider?.[b]??t.models:t.models,O=E?t.effortsByProvider?.[b]??t.efforts:void 0,k=g(t,r.model||``,O,E?b:void 0);return(0,y.jsxs)(`div`,{className:`settings-percli-row`,"data-cli":e,children:[(0,y.jsx)(`h3`,{className:`settings-percli-title`,children:t.label}),(0,y.jsxs)(`div`,{className:`settings-percli-grid`,children:[p&&w(s,b).length?(0,y.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:b,options:w(s,b).map(e=>({value:e,label:e})),onChange:t=>{let o=C(s,t),c=o.includes(r.model||``)?r.model||``:o[0]||``;i({...r,provider:t,model:c}),a(`perCli.${e}.provider`,T(t,n.provider??`progrok`)),a(`perCli.${e}.model`,T(c,n.model??``))}}):E?(0,y.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:b,options:(t.providers??[]).map(e=>({value:e,label:e})),onChange:o=>{let s=t.modelsByProvider?.[o]??[],c=t.effortsByProvider?.[o]??[],l=s.includes(r.model||``)?r.model||``:s[0]||``,u=h(t,l,r.effort??``,c,o);i({...r,provider:o,model:l,effort:u}),a(`perCli.${e}.provider`,T(o,n.provider??t.defaultProvider??`claude`)),a(`perCli.${e}.model`,T(l,n.model??``)),a(`perCli.${e}.effort`,T(u,n.effort??``))}}):null,(0,y.jsxs)(`div`,{className:`settings-percli-model`,children:[p&&D.length>0?(0,y.jsx)(l,{id:`percli-${e}-model`,label:`Model`,value:r.model??D[0]??``,options:D.map(e=>({value:e,label:e})),onChange:o=>{let s=h(t,o,r.effort??``,O,E?b:void 0);i({...r,model:o,effort:s}),a(`perCli.${e}.model`,T(o,n.model??``)),s!==(r.effort??``)&&a(`perCli.${e}.effort`,T(s,n.effort??``))}}):(0,y.jsx)(f,{id:`percli-${e}-model`,label:`Model`,value:r.model??``,onChange:t=>{i({...r,model:t}),a(`perCli.${e}.model`,T(t,n.model??``))},placeholder:D[0]??`model id`}),t.modelNote?(0,y.jsx)(`p`,{className:`settings-percli-note`,children:t.modelNote}):null,D.length>0?(0,y.jsx)(`datalist`,{id:d,children:D.map(e=>(0,y.jsx)(`option`,{value:e},e))}):null]}),k.length>0?(0,y.jsxs)(`div`,{className:`settings-percli-effort`,children:[(0,y.jsx)(l,{id:`percli-${e}-effort`,label:`Effort`,value:r.effort??``,options:[{value:``,label:`(default)`},...k.map(e=>({value:e,label:e}))],onChange:t=>{i({...r,effort:t}),a(`perCli.${e}.effort`,T(t,n.effort??``))}}),t.effortNote?(0,y.jsx)(`p`,{className:`settings-percli-note`,children:t.effortNote}):null]}):t.effortNote?(0,y.jsx)(`p`,{className:`settings-percli-note settings-percli-note--effort`,children:t.effortNote}):null,(0,y.jsx)(c,{id:`percli-${e}-fastmode`,label:`Fast mode`,value:!!r.fastMode,onChange:t=>{i({...r,fastMode:t}),a(`perCli.${e}.fastMode`,T(t,!!n.fastMode))}}),p&&o?(0,y.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:()=>_(!0),children:`Settings`}):null]}),p&&o&&m?(0,y.jsx)(S,{client:o,pi:s,provider:b,model:r.model||`grok-composer-2.5-fast`,onClose:()=>_(!1),onRegistered:({provider:t,model:o,pi:s})=>{s&&u&&u(s),i({...r,provider:t,model:o}),a(`perCli.${e}.provider`,T(t,n.provider??`progrok`)),a(`perCli.${e}.model`,T(o,n.model??``))}}):null]})}function D(e){return[...e].sort((e,t)=>e===`pi`?-1:t===`pi`?1:e===`ai-e`?t===`pi`?1:-1:t===`ai-e`?e===`pi`?-1:1:0)}function O(e){let t=new Set;for(let n of Object.keys(e.activeOverrides||{}))t.add(n);for(let n of Object.keys(e.perCli||{}))t.add(n);let n={};for(let e of t)n[e]={model:``,effort:``};return{activeOverrides:n}}function k({port:e,client:t,dirty:n,registerSave:c}){let{state:l,refresh:f,setData:h}=r(t,`/api/settings`),[g,b]=(0,v.useState)({}),[x,S]=(0,v.useState)(void 0),[C,w]=(0,v.useState)([]),[T,k]=(0,v.useState)({}),[A,j]=(0,v.useState)(!1),[M,N]=(0,v.useState)(null),[P,F]=(0,v.useState)(null),I=(0,v.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);F(p(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{F(null)}},[t]);(0,v.useEffect)(()=>{I()},[I]),(0,v.useEffect)(()=>{if(l.kind!==`ready`)return;b({...l.data.perCli||{}}),S(l.data.pi),w([...l.data.fallbackOrder||[]]);let e=l.data.perCli?.codex||{},t={};typeof e.contextWindowSize==`number`&&(t.contextWindowSize=e.contextWindowSize),typeof e.contextWindowCompactLimit==`number`&&(t.contextWindowCompactLimit=e.contextWindowCompactLimit),k(t)},[l]),(0,v.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`fallbackOrder`||e.startsWith(`perCli.`))&&n.remove(e)},[n]);let L=(0,v.useCallback)((e,t)=>n.set(e,t),[n]),R=(0,v.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=_(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),h(a),b({...a.perCli||{}}),w([...a.fallbackOrder||[]]),await f(),await I()},[t,n,I,f,h]);(0,v.useEffect)(()=>{if(c)return c(R),()=>c(null)},[c,R]);let z=(0,v.useCallback)(async()=>{if(l.kind===`ready`&&window.confirm(`Reset all active overrides?`)){j(!0),N(null);try{let e=O(l.data),n=await t.put(`/api/settings`,e);h(n&&typeof n==`object`&&`data`in n?n.data:n),await f()}catch(e){N(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[t,f,h,l]);if(l.kind===`loading`)return(0,y.jsx)(a,{});if(l.kind===`offline`)return(0,y.jsx)(o,{port:e});if(l.kind===`error`)return(0,y.jsx)(s,{message:l.message});let B=l.data,V=B.perCli||{},H=D(Object.keys(V)),U=V.codex||{},W=B.activeOverrides||{},G=Object.entries(W);return(0,y.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),R()},children:[(0,y.jsx)(i,{title:`Model defaults`,hint:`Per-CLI defaults applied when no active override is set on the Agent page.`,children:H.length===0?(0,y.jsx)(`p`,{className:`settings-empty`,children:`No CLIs registered for this instance.`}):H.map(e=>(0,y.jsx)(E,{cli:e,meta:m(e,P),original:V[e]||{},value:g[e]||V[e]||{},setValue:t=>b({...g,[e]:t}),setEntry:L,client:t,pi:x,setPi:S},e))}),V.codex?(0,y.jsxs)(i,{title:`Codex context window`,hint:`Codex-only sliders. Other CLIs ignore these values.`,children:[(0,y.jsx)(d,{id:`model-codex-ctx`,label:`Context window size`,value:T.contextWindowSize??(typeof U.contextWindowSize==`number`?U.contextWindowSize:1e6),min:0,step:1e4,onChange:e=>{k({...T,contextWindowSize:e}),L(`perCli.codex.contextWindowSize`,{value:e,original:U.contextWindowSize??1e6,valid:Number.isFinite(e)&&e>=0})}}),(0,y.jsx)(d,{id:`model-codex-compact`,label:`Compact limit`,value:T.contextWindowCompactLimit??(typeof U.contextWindowCompactLimit==`number`?U.contextWindowCompactLimit:9e5),min:0,step:1e4,onChange:e=>{k({...T,contextWindowCompactLimit:e}),L(`perCli.codex.contextWindowCompactLimit`,{value:e,original:U.contextWindowCompactLimit??9e5,valid:Number.isFinite(e)&&e>=0})}})]}):null,(0,y.jsx)(i,{title:`Fallback order`,hint:`Order of CLIs used when the active CLI fails. Press Enter to add a chip; Backspace to remove the last.`,children:(0,y.jsx)(u,{id:`model-fallbackOrder`,label:`Fallback order`,value:C,onChange:e=>{w(e),L(`fallbackOrder`,{value:e,original:B.fallbackOrder||[],valid:!0})},placeholder:`cli name`})}),(0,y.jsxs)(i,{title:`Active overrides`,hint:`Per-session overrides applied on top of per-CLI defaults.`,children:[G.length===0?(0,y.jsx)(`p`,{className:`settings-empty`,children:`No active overrides.`}):(0,y.jsxs)(`table`,{className:`settings-overrides-table`,children:[(0,y.jsx)(`thead`,{children:(0,y.jsxs)(`tr`,{children:[(0,y.jsx)(`th`,{scope:`col`,children:`CLI`}),(0,y.jsx)(`th`,{scope:`col`,children:`Model`}),(0,y.jsx)(`th`,{scope:`col`,children:`Effort`})]})}),(0,y.jsx)(`tbody`,{children:G.map(([e,t])=>(0,y.jsxs)(`tr`,{children:[(0,y.jsx)(`td`,{children:e}),(0,y.jsx)(`td`,{children:(0,y.jsx)(`code`,{children:t?.model||`—`})}),(0,y.jsx)(`td`,{children:(0,y.jsx)(`code`,{children:t?.effort||`—`})})]},e))})]}),(0,y.jsxs)(`div`,{className:`settings-overrides-actions`,children:[(0,y.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void z(),disabled:A||G.length===0,children:A?`Resetting…`:`Reset overrides`}),M?(0,y.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:M}):null]})]})]})}export{O as buildResetOverridesPatch,k as default,D as orderModelCliKeys};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-GpE8A-FA.js";import{a as c,i as l,n as u,r as d,s as f}from"./fields-BwOMlwS0.js";import{a as p,i as m,n as h,r as g}from"./agent-meta-Bl-Q0EgC.js";import{t as _}from"./path-utils-CHwADH-r.js";var v=e(t(),1),y=n(),b=[`basic`,`openai`,`anthropic`,`vertex`];function x(e){return e===`anthropic`?`https://api.anthropic.com/v1/messages`:e===`vertex`?`https://LOCATION-aiplatform.googleapis.com/v1`:`http://127.0.0.1:18645/v1`}function S({client:e,pi:t,provider:n,model:r,onClose:i,onRegistered:a}){let o=(0,v.useMemo)(()=>t?.profiles?.find(e=>e.id===n)||t?.profiles?.[0],[t,n]),[s,c]=(0,v.useState)(o?.mode||`basic`),[u,d]=(0,v.useState)(o?.id||n||`progrok`),[p,m]=(0,v.useState)(o?.endpoint||x(s)),[h,g]=(0,v.useState)(r||o?.model||`grok-composer-2.5-fast`),[_,S]=(0,v.useState)(``),[C,w]=(0,v.useState)(!1),[T,E]=(0,v.useState)(null);(0,v.useEffect)(()=>{m(e=>e||x(s))},[s]);let D=async()=>{w(!0),E(null);try{let t=await e.post(`/api/pi/profiles/register`,{id:u,label:u,mode:s,endpoint:p,model:h,apiKey:_});a({provider:u,model:h,models:t.models||[],pi:t.settings?.pi}),i()}catch(e){E(e instanceof Error?e.message:String(e))}finally{w(!1)}};return(0,y.jsx)(`div`,{className:`settings-memory-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pi-profile-title`,children:(0,y.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,y.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,y.jsx)(`h3`,{id:`pi-profile-title`,children:`Pi Settings`}),(0,y.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:i,children:`Close`})]}),(0,y.jsxs)(`div`,{className:`settings-page-form`,children:[(0,y.jsx)(l,{id:`pi-profile-mode`,label:`Mode`,value:s,options:b.map(e=>({value:e,label:e})),onChange:e=>c(e)}),(0,y.jsx)(f,{id:`pi-profile-id`,label:`Provider`,value:u,onChange:d,placeholder:`progrok`}),(0,y.jsx)(f,{id:`pi-profile-endpoint`,label:`Endpoint`,value:p,onChange:m,placeholder:x(s)}),(0,y.jsx)(f,{id:`pi-profile-model`,label:`Model`,value:h,onChange:g,placeholder:`grok-composer-2.5-fast`}),(0,y.jsx)(f,{id:`pi-profile-key`,label:`API Key`,value:_,onChange:S,placeholder:o?.apiKeySet?`set (${o.apiKeyLast4||`****`})`:`empty for local proxy`}),(0,y.jsx)(`p`,{className:`settings-empty`,children:`Default: grok-composer-2.5-fast. Bare grok-composer-2.5 currently has no verified team access.`}),T?(0,y.jsx)(`p`,{className:`settings-field-error`,children:T}):null,(0,y.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:C,onClick:()=>void D(),children:C?`Registering...`:`Register`})]})]})})}function C(e,t,n=``){let r=new Set;n&&r.add(n);for(let n of e?.discoveredModels?.[t]||[])r.add(n);let i=e?.profiles?.find(e=>e.id===t);return i?.model&&r.add(i.model),[...r]}function w(e,t=``){let n=new Set;t&&n.add(t);for(let t of e?.profiles||[])n.add(t.id);return[...n]}function T(e,t,n=!0){return{value:e,original:t,valid:n}}function E({cli:e,meta:t,original:n,value:r,setValue:i,setEntry:a,client:o,pi:s,setPi:u}){let d=`percli-${e}-models`,p=e===`pi`,[m,_]=(0,v.useState)(!1),b=r.provider||t.defaultProvider||t.providers?.[0]||`claude`,x=p?C(s,b,r.model||``):[],E=!p&&(t.providers?.length??0)>0,D=p?x:E?t.modelsByProvider?.[b]??t.models:t.models,O=E?t.effortsByProvider?.[b]??t.efforts:void 0,k=g(t,r.model||``,O,E?b:void 0);return(0,y.jsxs)(`div`,{className:`settings-percli-row`,"data-cli":e,children:[(0,y.jsx)(`h3`,{className:`settings-percli-title`,children:t.label}),(0,y.jsxs)(`div`,{className:`settings-percli-grid`,children:[p&&w(s,b).length?(0,y.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:b,options:w(s,b).map(e=>({value:e,label:e})),onChange:t=>{let o=C(s,t),c=o.includes(r.model||``)?r.model||``:o[0]||``;i({...r,provider:t,model:c}),a(`perCli.${e}.provider`,T(t,n.provider??`progrok`)),a(`perCli.${e}.model`,T(c,n.model??``))}}):E?(0,y.jsx)(l,{id:`percli-${e}-provider`,label:`Provider`,value:b,options:(t.providers??[]).map(e=>({value:e,label:e})),onChange:o=>{let s=t.modelsByProvider?.[o]??[],c=t.effortsByProvider?.[o]??[],l=s.includes(r.model||``)?r.model||``:s[0]||``,u=h(t,l,r.effort??``,c,o);i({...r,provider:o,model:l,effort:u}),a(`perCli.${e}.provider`,T(o,n.provider??t.defaultProvider??`claude`)),a(`perCli.${e}.model`,T(l,n.model??``)),a(`perCli.${e}.effort`,T(u,n.effort??``))}}):null,(0,y.jsxs)(`div`,{className:`settings-percli-model`,children:[p&&D.length>0?(0,y.jsx)(l,{id:`percli-${e}-model`,label:`Model`,value:r.model??D[0]??``,options:D.map(e=>({value:e,label:e})),onChange:o=>{let s=h(t,o,r.effort??``,O,E?b:void 0);i({...r,model:o,effort:s}),a(`perCli.${e}.model`,T(o,n.model??``)),s!==(r.effort??``)&&a(`perCli.${e}.effort`,T(s,n.effort??``))}}):(0,y.jsx)(f,{id:`percli-${e}-model`,label:`Model`,value:r.model??``,onChange:t=>{i({...r,model:t}),a(`perCli.${e}.model`,T(t,n.model??``))},placeholder:D[0]??`model id`}),t.modelNote?(0,y.jsx)(`p`,{className:`settings-percli-note`,children:t.modelNote}):null,D.length>0?(0,y.jsx)(`datalist`,{id:d,children:D.map(e=>(0,y.jsx)(`option`,{value:e},e))}):null]}),k.length>0?(0,y.jsxs)(`div`,{className:`settings-percli-effort`,children:[(0,y.jsx)(l,{id:`percli-${e}-effort`,label:`Effort`,value:r.effort??``,options:[{value:``,label:`(default)`},...k.map(e=>({value:e,label:e}))],onChange:t=>{i({...r,effort:t}),a(`perCli.${e}.effort`,T(t,n.effort??``))}}),t.effortNote?(0,y.jsx)(`p`,{className:`settings-percli-note`,children:t.effortNote}):null]}):t.effortNote?(0,y.jsx)(`p`,{className:`settings-percli-note settings-percli-note--effort`,children:t.effortNote}):null,(0,y.jsx)(c,{id:`percli-${e}-fastmode`,label:`Fast mode`,value:!!r.fastMode,onChange:t=>{i({...r,fastMode:t}),a(`perCli.${e}.fastMode`,T(t,!!n.fastMode))}}),p&&o?(0,y.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:()=>_(!0),children:`Settings`}):null]}),p&&o&&m?(0,y.jsx)(S,{client:o,pi:s,provider:b,model:r.model||`grok-composer-2.5-fast`,onClose:()=>_(!1),onRegistered:({provider:t,model:o,pi:s})=>{s&&u&&u(s),i({...r,provider:t,model:o}),a(`perCli.${e}.provider`,T(t,n.provider??`progrok`)),a(`perCli.${e}.model`,T(o,n.model??``))}}):null]})}function D(e){return[...e].sort((e,t)=>e===`pi`?-1:t===`pi`?1:e===`ai-e`?t===`pi`?1:-1:t===`ai-e`?e===`pi`?-1:1:0)}function O(e){let t=new Set;for(let n of Object.keys(e.activeOverrides||{}))t.add(n);for(let n of Object.keys(e.perCli||{}))t.add(n);let n={};for(let e of t)n[e]={model:``,effort:``};return{activeOverrides:n}}function k({port:e,client:t,dirty:n,registerSave:c}){let{state:l,refresh:f,setData:h}=r(t,`/api/settings`),[g,b]=(0,v.useState)({}),[x,S]=(0,v.useState)(void 0),[C,w]=(0,v.useState)([]),[T,k]=(0,v.useState)({}),[A,j]=(0,v.useState)(!1),[M,N]=(0,v.useState)(null),[P,F]=(0,v.useState)(null),I=(0,v.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);F(p(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{F(null)}},[t]);(0,v.useEffect)(()=>{I()},[I]),(0,v.useEffect)(()=>{if(l.kind!==`ready`)return;b({...l.data.perCli||{}}),S(l.data.pi),w([...l.data.fallbackOrder||[]]);let e=l.data.perCli?.codex||{},t={};typeof e.contextWindowSize==`number`&&(t.contextWindowSize=e.contextWindowSize),typeof e.contextWindowCompactLimit==`number`&&(t.contextWindowCompactLimit=e.contextWindowCompactLimit),k(t)},[l]),(0,v.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`fallbackOrder`||e.startsWith(`perCli.`))&&n.remove(e)},[n]);let L=(0,v.useCallback)((e,t)=>n.set(e,t),[n]),R=(0,v.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=_(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),h(a),b({...a.perCli||{}}),w([...a.fallbackOrder||[]]),await f(),await I()},[t,n,I,f,h]);(0,v.useEffect)(()=>{if(c)return c(R),()=>c(null)},[c,R]);let z=(0,v.useCallback)(async()=>{if(l.kind===`ready`&&window.confirm(`Reset all active overrides?`)){j(!0),N(null);try{let e=O(l.data),n=await t.put(`/api/settings`,e);h(n&&typeof n==`object`&&`data`in n?n.data:n),await f()}catch(e){N(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[t,f,h,l]);if(l.kind===`loading`)return(0,y.jsx)(a,{});if(l.kind===`offline`)return(0,y.jsx)(o,{port:e});if(l.kind===`error`)return(0,y.jsx)(s,{message:l.message});let B=l.data,V=B.perCli||{},H=D(Object.keys(V)),U=V.codex||{},W=B.activeOverrides||{},G=Object.entries(W);return(0,y.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),R()},children:[(0,y.jsx)(i,{title:`Model defaults`,hint:`Per-CLI defaults applied when no active override is set on the Agent page.`,children:H.length===0?(0,y.jsx)(`p`,{className:`settings-empty`,children:`No CLIs registered for this instance.`}):H.map(e=>(0,y.jsx)(E,{cli:e,meta:m(e,P),original:V[e]||{},value:g[e]||V[e]||{},setValue:t=>b({...g,[e]:t}),setEntry:L,client:t,pi:x,setPi:S},e))}),V.codex?(0,y.jsxs)(i,{title:`Codex context window`,hint:`Codex-only sliders. Other CLIs ignore these values.`,children:[(0,y.jsx)(d,{id:`model-codex-ctx`,label:`Context window size`,value:T.contextWindowSize??(typeof U.contextWindowSize==`number`?U.contextWindowSize:1e6),min:0,step:1e4,onChange:e=>{k({...T,contextWindowSize:e}),L(`perCli.codex.contextWindowSize`,{value:e,original:U.contextWindowSize??1e6,valid:Number.isFinite(e)&&e>=0})}}),(0,y.jsx)(d,{id:`model-codex-compact`,label:`Compact limit`,value:T.contextWindowCompactLimit??(typeof U.contextWindowCompactLimit==`number`?U.contextWindowCompactLimit:9e5),min:0,step:1e4,onChange:e=>{k({...T,contextWindowCompactLimit:e}),L(`perCli.codex.contextWindowCompactLimit`,{value:e,original:U.contextWindowCompactLimit??9e5,valid:Number.isFinite(e)&&e>=0})}})]}):null,(0,y.jsx)(i,{title:`Fallback order`,hint:`Order of CLIs used when the active CLI fails. Press Enter to add a chip; Backspace to remove the last.`,children:(0,y.jsx)(u,{id:`model-fallbackOrder`,label:`Fallback order`,value:C,onChange:e=>{w(e),L(`fallbackOrder`,{value:e,original:B.fallbackOrder||[],valid:!0})},placeholder:`cli name`})}),(0,y.jsxs)(i,{title:`Active overrides`,hint:`Per-session overrides applied on top of per-CLI defaults.`,children:[G.length===0?(0,y.jsx)(`p`,{className:`settings-empty`,children:`No active overrides.`}):(0,y.jsxs)(`table`,{className:`settings-overrides-table`,children:[(0,y.jsx)(`thead`,{children:(0,y.jsxs)(`tr`,{children:[(0,y.jsx)(`th`,{scope:`col`,children:`CLI`}),(0,y.jsx)(`th`,{scope:`col`,children:`Model`}),(0,y.jsx)(`th`,{scope:`col`,children:`Effort`})]})}),(0,y.jsx)(`tbody`,{children:G.map(([e,t])=>(0,y.jsxs)(`tr`,{children:[(0,y.jsx)(`td`,{children:e}),(0,y.jsx)(`td`,{children:(0,y.jsx)(`code`,{children:t?.model||`—`})}),(0,y.jsx)(`td`,{children:(0,y.jsx)(`code`,{children:t?.effort||`—`})})]},e))})]}),(0,y.jsxs)(`div`,{className:`settings-overrides-actions`,children:[(0,y.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void z(),disabled:A||G.length===0,children:A?`Resetting…`:`Reset overrides`}),M?(0,y.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:M}):null]})]})]})}export{O as buildResetOverridesPatch,k as default,D as orderModelCliKeys};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{a as c,i as l,s as u}from"./fields-zkeByFQW.js";import{t as d}from"./InlineWarn-DDzeHxQw.js";import{t as f}from"./path-utils-LsJeDCKF.js";var p=e(t(),1),m=n(),h=[`off`,`http-only`,`full`];function g(e){return e===`off`||e===`http-only`||e===`full`}var _=[`network.bindHost`,`network.lanBypass`,`network.remoteAccess.mode`,`network.remoteAccess.trustProxies`,`network.remoteAccess.trustForwardedFor`,`network.remoteAccess.publicOriginHint`],v=[{value:`127.0.0.1`,label:`127.0.0.1 — loopback only (recommended)`},{value:`0.0.0.0`,label:`0.0.0.0 — all interfaces (LAN exposed)`}],y=[{value:`off`,label:`off — block remote requests`},{value:`http-only`,label:`http-only — read-only HTTP from remote`},{value:`full`,label:`full — HTTP + WebSocket from remote`}];function b(e){let t={};return e.bindHost!==void 0&&(t.bindHost=e.bindHost),e.lanBypass!==void 0&&(t.lanBypass=e.lanBypass),t.remoteAccess={...e.remoteAccess??{}},t}function x(e){let t=(e||``).trim();if(t===``)return{kind:`empty`};let n;try{n=new URL(t)}catch{return{kind:`invalid`,reason:`Must be an absolute URL (https://… or http://…).`}}return n.protocol!==`http:`&&n.protocol!==`https:`?{kind:`invalid`,reason:`Only http:// or https:// origins are accepted.`}:n.hostname?n.pathname&&n.pathname!==`/`?{kind:`invalid`,reason:`Origin must not include a path.`}:n.search||n.hash?{kind:`invalid`,reason:`Origin must not include query or hash.`}:{kind:`valid`,origin:n.origin}:{kind:`invalid`,reason:`Origin must include a host.`}}function S(e){let t=(e.locationHost||``).toLowerCase().split(`:`)[0]||``;return t===``||t===`localhost`||t===`127.0.0.1`||t===`::1`||e.currentMode===e.nextMode?!1:e.nextMode===`off`}function C({port:e,client:t,dirty:n,registerSave:h}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)({});(0,p.useEffect)(()=>{C.kind===`ready`&&D(b(C.data.network??{}))},[C]),(0,p.useEffect)(()=>()=>{for(let e of _)n.remove(e)},[n]);let O=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,p.useMemo)(()=>C.kind===`ready`?C.data.network??{}:{},[C]),A=k.remoteAccess??{},j=E.remoteAccess??{},M=E.bindHost??k.bindHost??`127.0.0.1`,N=!!(E.lanBypass??k.lanBypass),P=g(j.mode)?j.mode:g(A.mode)?A.mode:`off`,F=P!==`off`,I=!!(j.trustProxies??A.trustProxies),L=!!(j.trustForwardedFor??A.trustForwardedFor),R=j.publicOriginHint??A.publicOriginHint??``,z=x(R),B=S({currentMode:g(A.mode)?A.mode:`off`,nextMode:P,locationHost:typeof window<`u`?window.location.host:``}),V=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0||B&&typeof window<`u`&&!window.confirm(`You are accessing this dashboard over a remote origin. Saving with remote access "off" will lock you out. Continue?`))return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),D(b(a.network??{})),T(a),await w()},[t,n,B,w,T]);if((0,p.useEffect)(()=>{if(h)return h(V),()=>h(null)},[h,V]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let H=(E.bindHost??k.bindHost)!==(k.bindHost??`127.0.0.1`);return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),V()},children:[(0,m.jsxs)(i,{title:`Bind`,hint:`Listening interface for /i/${e}. Changes require an instance restart.`,children:[(0,m.jsx)(l,{id:`network-bindHost`,label:`Bind host`,value:M,options:v,onChange:e=>{D({...E,bindHost:e}),O(`network.bindHost`,{value:e,original:k.bindHost??`127.0.0.1`,valid:!0})}}),M===`0.0.0.0`&&(0,m.jsxs)(d,{children:[`Listening on `,(0,m.jsx)(`code`,{children:`0.0.0.0`}),` exposes this instance's API to anyone on your LAN. Pair with auth + firewall rules.`]}),H&&(0,m.jsx)(d,{tone:`info`,children:`Restart the instance for the new bind host to take effect.`}),(0,m.jsx)(c,{id:`network-lanBypass`,label:`LAN bypass`,description:`Skip auth checks for clients on the same LAN.`,value:N,onChange:e=>{D({...E,lanBypass:e}),O(`network.lanBypass`,{value:e,original:!!k.lanBypass,valid:!0})}}),N&&(0,m.jsx)(d,{children:`LAN bypass disables auth for any client on the same network. Only enable on a trusted network.`})]}),(0,m.jsxs)(i,{title:`Remote access`,hint:`Mode controls what reaches the API from outside the loopback interface.`,children:[(0,m.jsx)(l,{id:`network-remoteAccess-mode`,label:`Remote access mode`,value:P,options:y,onChange:e=>{g(e)&&(D({...E,remoteAccess:{...j,mode:e}}),O(`network.remoteAccess.mode`,{value:e,original:g(A.mode)?A.mode:`off`,valid:!0}))}}),(0,m.jsxs)(`p`,{className:`settings-section-hint`,children:[(0,m.jsx)(`strong`,{children:`off`}),` — only loopback can talk to the API.`,` `,(0,m.jsx)(`strong`,{children:`http-only`}),` — remote can issue HTTP requests but no WebSocket upgrades. `,(0,m.jsx)(`strong`,{children:`full`}),` — HTTP + WebSocket open to remote (use with auth).`]}),B&&(0,m.jsxs)(d,{role:`alert`,children:[`Saving will close remote access while you're connected from`,(0,m.jsxs)(`code`,{children:[` `,typeof window<`u`?window.location.host:``,` `]}),`— you will be locked out. Reach the dashboard over loopback first.`]}),F&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(c,{id:`network-remoteAccess-trustProxies`,label:`Trust proxies`,description:`Honor proxy headers when computing the client origin.`,value:I,onChange:e=>{D({...E,remoteAccess:{...j,trustProxies:e}}),O(`network.remoteAccess.trustProxies`,{value:e,original:!!A.trustProxies,valid:!0})}}),(0,m.jsx)(c,{id:`network-remoteAccess-trustForwardedFor`,label:`Trust X-Forwarded-For`,description:`Use X-Forwarded-For for the client IP. Only enable behind a known proxy.`,value:L,onChange:e=>{D({...E,remoteAccess:{...j,trustForwardedFor:e}}),O(`network.remoteAccess.trustForwardedFor`,{value:e,original:!!A.trustForwardedFor,valid:!0})}}),L&&!I&&(0,m.jsx)(d,{children:`Trusting X-Forwarded-For without trusting the proxy chain lets any client spoof its IP. Enable "Trust proxies" too.`}),(0,m.jsx)(u,{id:`network-remoteAccess-publicOriginHint`,label:`Public origin hint`,value:R,placeholder:`https://your-tunnel-url`,error:z.kind===`invalid`?z.reason:null,onChange:e=>{D({...E,remoteAccess:{...j,publicOriginHint:e}});let t=x(e);O(`network.remoteAccess.publicOriginHint`,{value:t.kind===`valid`?t.origin:e,original:A.publicOriginHint??``,valid:t.kind!==`invalid`})}})]})]})]})}export{h as REMOTE_ACCESS_MODES,C as default,S as detectSelfLockoutRisk,g as isRemoteAccessMode,x as parsePublicOriginHint};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-GpE8A-FA.js";import{a as c,i as l,s as u}from"./fields-BwOMlwS0.js";import{t as d}from"./InlineWarn-D-fmcQXD.js";import{t as f}from"./path-utils-CHwADH-r.js";var p=e(t(),1),m=n(),h=[`off`,`http-only`,`full`];function g(e){return e===`off`||e===`http-only`||e===`full`}var _=[`network.bindHost`,`network.lanBypass`,`network.remoteAccess.mode`,`network.remoteAccess.trustProxies`,`network.remoteAccess.trustForwardedFor`,`network.remoteAccess.publicOriginHint`],v=[{value:`127.0.0.1`,label:`127.0.0.1 — loopback only (recommended)`},{value:`0.0.0.0`,label:`0.0.0.0 — all interfaces (LAN exposed)`}],y=[{value:`off`,label:`off — block remote requests`},{value:`http-only`,label:`http-only — read-only HTTP from remote`},{value:`full`,label:`full — HTTP + WebSocket from remote`}];function b(e){let t={};return e.bindHost!==void 0&&(t.bindHost=e.bindHost),e.lanBypass!==void 0&&(t.lanBypass=e.lanBypass),t.remoteAccess={...e.remoteAccess??{}},t}function x(e){let t=(e||``).trim();if(t===``)return{kind:`empty`};let n;try{n=new URL(t)}catch{return{kind:`invalid`,reason:`Must be an absolute URL (https://… or http://…).`}}return n.protocol!==`http:`&&n.protocol!==`https:`?{kind:`invalid`,reason:`Only http:// or https:// origins are accepted.`}:n.hostname?n.pathname&&n.pathname!==`/`?{kind:`invalid`,reason:`Origin must not include a path.`}:n.search||n.hash?{kind:`invalid`,reason:`Origin must not include query or hash.`}:{kind:`valid`,origin:n.origin}:{kind:`invalid`,reason:`Origin must include a host.`}}function S(e){let t=(e.locationHost||``).toLowerCase().split(`:`)[0]||``;return t===``||t===`localhost`||t===`127.0.0.1`||t===`::1`||e.currentMode===e.nextMode?!1:e.nextMode===`off`}function C({port:e,client:t,dirty:n,registerSave:h}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)({});(0,p.useEffect)(()=>{C.kind===`ready`&&D(b(C.data.network??{}))},[C]),(0,p.useEffect)(()=>()=>{for(let e of _)n.remove(e)},[n]);let O=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,p.useMemo)(()=>C.kind===`ready`?C.data.network??{}:{},[C]),A=k.remoteAccess??{},j=E.remoteAccess??{},M=E.bindHost??k.bindHost??`127.0.0.1`,N=!!(E.lanBypass??k.lanBypass),P=g(j.mode)?j.mode:g(A.mode)?A.mode:`off`,F=P!==`off`,I=!!(j.trustProxies??A.trustProxies),L=!!(j.trustForwardedFor??A.trustForwardedFor),R=j.publicOriginHint??A.publicOriginHint??``,z=x(R),B=S({currentMode:g(A.mode)?A.mode:`off`,nextMode:P,locationHost:typeof window<`u`?window.location.host:``}),V=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0||B&&typeof window<`u`&&!window.confirm(`You are accessing this dashboard over a remote origin. Saving with remote access "off" will lock you out. Continue?`))return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),D(b(a.network??{})),T(a),await w()},[t,n,B,w,T]);if((0,p.useEffect)(()=>{if(h)return h(V),()=>h(null)},[h,V]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let H=(E.bindHost??k.bindHost)!==(k.bindHost??`127.0.0.1`);return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),V()},children:[(0,m.jsxs)(i,{title:`Bind`,hint:`Listening interface for /i/${e}. Changes require an instance restart.`,children:[(0,m.jsx)(l,{id:`network-bindHost`,label:`Bind host`,value:M,options:v,onChange:e=>{D({...E,bindHost:e}),O(`network.bindHost`,{value:e,original:k.bindHost??`127.0.0.1`,valid:!0})}}),M===`0.0.0.0`&&(0,m.jsxs)(d,{children:[`Listening on `,(0,m.jsx)(`code`,{children:`0.0.0.0`}),` exposes this instance's API to anyone on your LAN. Pair with auth + firewall rules.`]}),H&&(0,m.jsx)(d,{tone:`info`,children:`Restart the instance for the new bind host to take effect.`}),(0,m.jsx)(c,{id:`network-lanBypass`,label:`LAN bypass`,description:`Skip auth checks for clients on the same LAN.`,value:N,onChange:e=>{D({...E,lanBypass:e}),O(`network.lanBypass`,{value:e,original:!!k.lanBypass,valid:!0})}}),N&&(0,m.jsx)(d,{children:`LAN bypass disables auth for any client on the same network. Only enable on a trusted network.`})]}),(0,m.jsxs)(i,{title:`Remote access`,hint:`Mode controls what reaches the API from outside the loopback interface.`,children:[(0,m.jsx)(l,{id:`network-remoteAccess-mode`,label:`Remote access mode`,value:P,options:y,onChange:e=>{g(e)&&(D({...E,remoteAccess:{...j,mode:e}}),O(`network.remoteAccess.mode`,{value:e,original:g(A.mode)?A.mode:`off`,valid:!0}))}}),(0,m.jsxs)(`p`,{className:`settings-section-hint`,children:[(0,m.jsx)(`strong`,{children:`off`}),` — only loopback can talk to the API.`,` `,(0,m.jsx)(`strong`,{children:`http-only`}),` — remote can issue HTTP requests but no WebSocket upgrades. `,(0,m.jsx)(`strong`,{children:`full`}),` — HTTP + WebSocket open to remote (use with auth).`]}),B&&(0,m.jsxs)(d,{role:`alert`,children:[`Saving will close remote access while you're connected from`,(0,m.jsxs)(`code`,{children:[` `,typeof window<`u`?window.location.host:``,` `]}),`— you will be locked out. Reach the dashboard over loopback first.`]}),F&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(c,{id:`network-remoteAccess-trustProxies`,label:`Trust proxies`,description:`Honor proxy headers when computing the client origin.`,value:I,onChange:e=>{D({...E,remoteAccess:{...j,trustProxies:e}}),O(`network.remoteAccess.trustProxies`,{value:e,original:!!A.trustProxies,valid:!0})}}),(0,m.jsx)(c,{id:`network-remoteAccess-trustForwardedFor`,label:`Trust X-Forwarded-For`,description:`Use X-Forwarded-For for the client IP. Only enable behind a known proxy.`,value:L,onChange:e=>{D({...E,remoteAccess:{...j,trustForwardedFor:e}}),O(`network.remoteAccess.trustForwardedFor`,{value:e,original:!!A.trustForwardedFor,valid:!0})}}),L&&!I&&(0,m.jsx)(d,{children:`Trusting X-Forwarded-For without trusting the proxy chain lets any client spoof its IP. Enable "Trust proxies" too.`}),(0,m.jsx)(u,{id:`network-remoteAccess-publicOriginHint`,label:`Public origin hint`,value:R,placeholder:`https://your-tunnel-url`,error:z.kind===`invalid`?z.reason:null,onChange:e=>{D({...E,remoteAccess:{...j,publicOriginHint:e}});let t=x(e);O(`network.remoteAccess.publicOriginHint`,{value:t.kind===`valid`?t.origin:e,original:A.publicOriginHint??``,valid:t.kind!==`invalid`})}})]})]})]})}export{h as REMOTE_ACCESS_MODES,C as default,S as detectSelfLockoutRisk,g as isRemoteAccessMode,x as parsePublicOriginHint};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,o,r as s,t as c}from"./notes-graph-settings-BgNrT_58.js";import{Bt as l,Ft as u,H as d,It as f,Lt as p,Pt as m,Rt as h,V as g,Vt as _}from"./vendor-utils-DJY0EWnQ.js";var v=e(t(),1);function y(e){return{nodeSize:e.nodeSize,linkDistance:e.linkDistance,chargeStrength:e.chargeStrength,labelDensity:e.labelDensity,showArrows:e.showArrows,animate:e.animate}}function b(e,t){let n=e.kind===`tag`?5:e.kind===`missing`||e.kind===`ambiguous`?6:7,r=Math.sqrt(Math.max(0,e.degree))*2.4;return Math.min(26,Math.max(4,(n+r)*t.nodeSize))}function x(e,t,n){return e.kind===`missing`||e.kind===`ambiguous`?t>=.45:e.kind===`tag`?n.labelDensity>.35&&t>=.65:n.labelDensity>=.75?t>=.35:n.labelDensity>=.45?e.degree>0&&t>=.6:e.degree>=2&&t>=.85}var S=n();function C(e,t){let n=e.id===t?` is-selected`:``;return`notes-graph-node notes-graph-node-${e.kind}${n}`}function w(e){return`notes-graph-link notes-graph-link-${e.status}${e.virtual?` is-virtual`:``}`}function T(e){let t=(0,v.useRef)(null),n=(0,v.useRef)(null),r=(0,v.useRef)(e.onNavigate),[i,a]=(0,v.useState)({width:900,height:650});r.current=e.onNavigate;let o=(0,v.useMemo)(()=>y(e.settings),[e.settings]);return(0,v.useEffect)(()=>{let e=n.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect();a({width:Math.max(320,Math.floor(t.width||900)),height:Math.max(320,Math.floor(t.height||650))})};if(t(),typeof window.ResizeObserver!=`function`)return;let r=new window.ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[]),(0,v.useEffect)(()=>{let n=t.current;if(!n)return;let a=_(n);if(a.selectAll(`*`).remove(),a.attr(`viewBox`,`0 0 ${i.width} ${i.height}`),e.data.nodes.length===0)return;let s=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,c=e.data.nodes.map(e=>({...e})),v=new Map(c.map(e=>[e.id,e])),y=e.data.edges.flatMap(e=>{let t=v.get(e.source),n=v.get(e.target),r={raw:e.raw,status:e.status,...e.resolvedPath?{resolvedPath:e.resolvedPath}:{},...e.virtual?{virtual:e.virtual}:{}};return t&&n?[{...r,source:t,target:n}]:[]});a.append(`defs`).append(`marker`).attr(`id`,`notes-graph-arrow`).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,15).attr(`refY`,0).attr(`markerWidth`,6).attr(`markerHeight`,6).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,`currentColor`);let S=a.append(`g`).attr(`class`,`notes-graph-viewport`),T=S.append(`g`).attr(`class`,`notes-graph-links`).selectAll(`line`).data(y).join(`line`).attr(`class`,w).attr(`marker-end`,o.showArrows?`url(#notes-graph-arrow)`:null),E=S.append(`g`).attr(`class`,`notes-graph-nodes`).selectAll(`g`).data(c).join(`g`).attr(`class`,t=>C(t,e.selectedPath)).attr(`tabindex`,e=>e.kind===`note`?0:-1).attr(`role`,e=>e.kind===`note`?`button`:`img`).attr(`aria-label`,e=>`${e.title}, ${e.kind}, ${e.degree} links`).on(`click`,(e,t)=>{t.kind===`note`&&t.path&&r.current(t.path)}).on(`keydown`,(e,t)=>{t.kind!==`note`||!t.path||e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),r.current(t.path))});E.append(`circle`).attr(`r`,e=>b(e,o)).attr(`fill`,e=>e.groupColor??null),E.append(`text`).attr(`class`,`notes-graph-label`).attr(`x`,e=>b(e,o)+8).attr(`y`,4).text(e=>e.title),E.append(`title`).text(e=>e.groupLabel?`${e.title} · ${e.groupLabel}`:e.title);let D=u(c).force(`link`,f(y).id(e=>e.id).distance(o.linkDistance)).force(`charge`,m().strength(o.chargeStrength)).force(`center`,h(i.width/2,i.height/2)).force(`collision`,p().radius(e=>b(e,o)+8));function O(){T.attr(`x1`,e=>e.source.x??0).attr(`y1`,e=>e.source.y??0).attr(`x2`,e=>e.target.x??0).attr(`y2`,e=>e.target.y??0),E.attr(`transform`,e=>`translate(${e.x??i.width/2},${e.y??i.height/2})`)}let k=g().scaleExtent([.18,5]).on(`zoom`,e=>{S.attr(`transform`,e.transform),E.classed(`is-label-visible`,t=>x(t,e.transform.k,o))});a.call(k);let A=d.translate(0,0).scale(1);a.call(k.transform,A);let j=l().on(`start`,(e,t)=>{!e.active&&o.animate&&!s&&D.alphaTarget(.25).restart(),t.fx=t.x,t.fy=t.y}).on(`drag`,(e,t)=>{t.fx=e.x,t.fy=e.y}).on(`end`,(e,t)=>{e.active||D.alphaTarget(0),t.fx=null,t.fy=null});return E.call(j),o.animate&&!s?D.on(`tick`,O):(D.tick(120),O(),D.stop()),()=>{D.stop(),a.on(`.zoom`,null)}},[e.data,e.selectedPath,i,o,e.fitToken]),(0,S.jsxs)(`div`,{ref:n,className:`notes-graph-canvas`,"data-empty":e.data.nodes.length===0?`true`:`false`,children:[e.data.nodes.length===0?(0,S.jsx)(`div`,{className:`notes-graph-empty-state`,children:`No matching graph nodes`}):null,(0,S.jsx)(`svg`,{ref:t,className:`notes-graph-svg`,"aria-label":`Notes graph`})]})}function E(e){return e===`filters`?`Filters`:e===`display`?`Display`:e===`forces`?`Forces`:`Groups`}function D(e,t){return{...e,...t,collapsedSections:t.collapsedSections??e.collapsedSections,groups:t.groups??e.groups}}function O(e){return(0,S.jsxs)(`label`,{className:`notes-graph-toggle${e.disabled?` is-disabled`:``}`,children:[(0,S.jsx)(`span`,{children:e.label}),(0,S.jsx)(`input`,{type:`checkbox`,checked:e.checked,disabled:e.disabled,onChange:t=>e.onChange(t.currentTarget.checked)})]})}function k(e){let{settings:t}=e;function n(n){e.onChange(D(t,n))}function i(e){n({[e]:!t[e]})}function o(e){n({collapsedSections:{...t.collapsedSections,[e]:!t.collapsedSections[e]}})}function c(e,r){n({groups:t.groups.map(t=>t.id===e?{...t,...r}:t)})}function l(){n({groups:[...t.groups,r(t.groups.length,t.query)]})}function u(e){n({groups:t.groups.filter(t=>t.id!==e)})}return(0,S.jsxs)(`aside`,{className:`notes-graph-controls`,"aria-label":`Graph controls`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-controls-header`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h3`,{children:`Graph`}),(0,S.jsx)(`span`,{children:e.selectedPath?`Focus-ready`:`Global view`})]}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:e.onClose,"aria-label":`Close graph controls`,children:`X`})]}),s.map(r=>(0,S.jsxs)(`section`,{className:`notes-graph-control-section`,children:[(0,S.jsxs)(`button`,{type:`button`,className:`notes-graph-section-toggle`,onClick:()=>o(r),"aria-expanded":!t.collapsedSections[r],children:[(0,S.jsx)(`span`,{children:E(r)}),(0,S.jsx)(`span`,{children:t.collapsedSections[r]?`+`:`-`})]}),!t.collapsedSections[r]&&r===`filters`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsx)(`span`,{children:`Search`}),(0,S.jsx)(`input`,{value:t.query,onChange:e=>n({query:e.currentTarget.value}),placeholder:`title, path:, tag:, kind:`})]}),(0,S.jsx)(O,{label:`Existing files only`,checked:t.existingFilesOnly,onChange:()=>i(`existingFilesOnly`)}),(0,S.jsx)(O,{label:`Show orphans`,checked:t.showOrphans,onChange:()=>i(`showOrphans`)}),(0,S.jsx)(O,{label:`Show tags`,checked:t.showTags,onChange:()=>i(`showTags`)}),(0,S.jsx)(O,{label:`Show attachments`,checked:t.showAttachments,onChange:()=>i(`showAttachments`)}),(0,S.jsx)(O,{label:`Focus selected`,checked:t.focusSelected,disabled:!e.selectedPath,onChange:()=>i(`focusSelected`)}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Depth `,t.focusDepth]}),(0,S.jsx)(`input`,{type:`range`,min:`1`,max:`4`,value:t.focusDepth,disabled:!t.focusSelected||!e.selectedPath,onChange:e=>n({focusDepth:Number(e.currentTarget.value)})})]})]}):null,!t.collapsedSections[r]&&r===`display`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Node size `,t.nodeSize.toFixed(1)]}),(0,S.jsx)(`input`,{type:`range`,min:`0.6`,max:`2`,step:`0.1`,value:t.nodeSize,onChange:e=>n({nodeSize:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Labels `,Math.round(t.labelDensity*100),`%`]}),(0,S.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`0.05`,value:t.labelDensity,onChange:e=>n({labelDensity:Number(e.currentTarget.value)})})]}),(0,S.jsx)(O,{label:`Show arrows`,checked:t.showArrows,onChange:()=>i(`showArrows`)}),(0,S.jsx)(O,{label:`Animate`,checked:t.animate,onChange:()=>i(`animate`)})]}):null,!t.collapsedSections[r]&&r===`forces`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Link distance `,t.linkDistance]}),(0,S.jsx)(`input`,{type:`range`,min:`40`,max:`240`,value:t.linkDistance,onChange:e=>n({linkDistance:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Repel `,Math.abs(t.chargeStrength)]}),(0,S.jsx)(`input`,{type:`range`,min:`-800`,max:`-20`,value:t.chargeStrength,onChange:e=>n({chargeStrength:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`div`,{className:`notes-graph-control-row`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:e.onFit,children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:e.onReset,children:`Reset`})]})]}):null,!t.collapsedSections[r]&&r===`groups`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsx)(O,{label:`Query groups`,checked:t.groupMode===`query`,onChange:e=>n({groupMode:e?`query`:`off`})}),(0,S.jsx)(`div`,{className:`notes-graph-groups`,children:t.groups.map((e,t)=>(0,S.jsxs)(`div`,{className:`notes-graph-group-row`,children:[(0,S.jsx)(`input`,{className:`notes-graph-color`,type:`color`,value:e.color,onChange:t=>c(e.id,{color:t.currentTarget.value})}),(0,S.jsx)(`input`,{value:e.label,onChange:t=>c(e.id,{label:t.currentTarget.value}),"aria-label":`Group ${t+1} label`}),(0,S.jsx)(`input`,{value:e.query,onChange:t=>c(e.id,{query:t.currentTarget.value}),"aria-label":`Group ${t+1} query`}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>c(e.id,{enabled:!e.enabled}),"aria-pressed":e.enabled,children:e.enabled?`On`:`Off`}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:()=>u(e.id),"aria-label":`Remove ${e.label}`,children:`X`})]},e.id))}),(0,S.jsx)(`div`,{className:`notes-graph-swatches`,"aria-label":`Group color presets`,children:a.map(e=>(0,S.jsx)(`span`,{style:{background:e}},e))}),(0,S.jsx)(`button`,{type:`button`,onClick:l,children:`Add group`})]}):null]},r))]})}var A={note:0,tag:1,missing:2,ambiguous:3,attachment:4};function j(e){return e.trim().replace(/^#/,``).toLowerCase()}function M(e){return`tag:${j(e)}`}function N(e,t){let n=[e.id,e.title,e.path??``];return t&&n.push(t.title,t.path,...t.aliases,...t.tags),n.filter(Boolean).map(e=>e.toLowerCase())}function P(e,t,n){let r=e.toLowerCase();if(r.startsWith(`kind:`))return t.kind===r.slice(5);if(r.startsWith(`path:`))return(t.path??t.id).toLowerCase().includes(r.slice(5));if(r.startsWith(`tag:`)){let e=j(r.slice(4));return e?t.kind===`tag`?j(t.title).includes(e)||t.id.includes(e):!!n?.tags.some(t=>j(t).includes(e)):!0}return N(t,n).some(e=>e.includes(r))}function F(e,t,n){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?!0:r.every(e=>P(e,t,n))}function I(e,t,n){if(n.groupMode!==`off`)return n.groups.find(n=>n.enabled&&F(n.query,e,t))}function L(e,t){let n=new Map;for(let t of e.graph.nodes)n.set(t.id,{...t});for(let t of e.notes)n.has(t.path)||n.set(t.path,{id:t.path,title:t.title,kind:`note`,path:t.path});let r=e.graph.edges.map(e=>({...e}));if(t.showTags)for(let t of e.notes)for(let e of t.tags){let i=j(e);if(!i)continue;let a=M(i);n.has(a)||n.set(a,{id:a,title:`#${i}`,kind:`tag`}),r.push({source:t.path,target:a,raw:`#${i}`,status:`resolved`,resolvedPath:t.path})}return{nodes:[...n.values()],edges:r}}function R(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1),t.set(n.target,(t.get(n.target)??0)+1);return t}function z(e,t,n){let r=new Map;for(let t of e)r.has(t.source)||r.set(t.source,new Set),r.has(t.target)||r.set(t.target,new Set),r.get(t.source)?.add(t.target),r.get(t.target)?.add(t.source);let i=new Set([t]),a=new Set([t]);for(let e=0;e<n;e+=1){let e=new Set;for(let t of a)for(let n of r.get(t)??[])i.has(n)||(i.add(n),e.add(n));if(a=e,a.size===0)break}return i}function B(e,t){return A[e.kind]-A[t.kind]||e.title.localeCompare(t.title)||e.id.localeCompare(t.id)}function V(e,t,n){if(!e)return{nodes:[],edges:[],noteCount:0,linkCount:0,missingCount:0,tagCount:0,hiddenCount:0};let r=new Map(e.notes.map(e=>[e.path,e])),i=L(e,t),a=i.nodes.filter(e=>t.existingFilesOnly&&(e.kind===`missing`||e.kind===`ambiguous`)||!t.showTags&&e.kind===`tag`||!t.showAttachments&&e.kind===`attachment`?!1:F(t.query,e,r.get(e.path??e.id))),o=new Set(a.map(e=>e.id)),s=i.edges.filter(e=>o.has(e.source)&&o.has(e.target));if(!t.showOrphans){let e=R(s);a=a.filter(t=>t.id===n||(e.get(t.id)??0)>0||t.kind!==`note`),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}if(t.focusSelected&&n&&o.has(n)){let e=z(s,n,t.focusDepth);a=a.filter(t=>e.has(t.id)),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}let c=R(s),l=a.map(e=>{let n=r.get(e.path??e.id),i=I(e,n,t);return{...e,degree:c.get(e.id)??0,...i?{groupColor:i.color,groupLabel:i.label}:{},searchMatch:F(t.query,e,n)}}).sort(B),u=new Set(l.map(e=>e.id)),d=s.filter(e=>u.has(e.source)&&u.has(e.target)).map(e=>({...e,virtual:e.target.startsWith(`tag:`)||e.source.startsWith(`tag:`)})).sort((e,t)=>e.source.localeCompare(t.source)||e.target.localeCompare(t.target)||e.raw.localeCompare(t.raw));return{nodes:l,edges:d,noteCount:l.filter(e=>e.kind===`note`).length,linkCount:d.filter(e=>!e.virtual).length,missingCount:l.filter(e=>e.kind===`missing`||e.kind===`ambiguous`).length,tagCount:l.filter(e=>e.kind===`tag`).length,hiddenCount:i.nodes.length-l.length}}var H={dataPlane:`dashboard-notes-api`,shellPanels:`render-only`};function U(){return i(c)}function W(e){let[t,n]=(0,v.useState)(()=>o(e.settings??U())),[r,i]=(0,v.useState)(0),a=(0,v.useRef)(null);(0,v.useEffect)(()=>{n(o(e.settings??U()))},[e.settings]),(0,v.useEffect)(()=>()=>{a.current!=null&&window.clearTimeout(a.current)},[]);function s(t,r=!1){if(n(t),e.onSettingsChange){if(a.current!=null&&window.clearTimeout(a.current),r){e.onSettingsChange(t);return}a.current=window.setTimeout(()=>e.onSettingsChange?.(t),140)}}function c(){s(U(),!0),i(e=>e+1)}function l(){s({...t,panelOpen:!1},!0)}function u(){s({...t,panelOpen:!0},!0)}let d=(0,v.useMemo)(()=>V(e.vaultIndex,t,e.selectedPath),[e.vaultIndex,t,e.selectedPath]);return(0,S.jsxs)(`div`,{className:`notes-graph-workspace${t.panelOpen?` has-controls`:``}`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-toolbar`,children:[(0,S.jsxs)(`div`,{className:`notes-graph-counts`,"aria-live":`polite`,children:[(0,S.jsx)(`strong`,{children:d.noteCount}),` notes`,(0,S.jsxs)(`span`,{children:[d.linkCount,` links`]}),(0,S.jsxs)(`span`,{children:[d.missingCount,` unresolved`]}),d.tagCount>0?(0,S.jsxs)(`span`,{children:[d.tagCount,` tags`]}):null]}),(0,S.jsxs)(`div`,{className:`notes-graph-actions`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>i(e=>e+1),children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:c,children:`Reset`}),t.panelOpen?null:(0,S.jsx)(`button`,{type:`button`,onClick:u,children:`Controls`})]})]}),(0,S.jsxs)(`div`,{className:`notes-graph-body`,children:[(0,S.jsx)(T,{data:d,selectedPath:e.selectedPath,settings:t,fitToken:r,onNavigate:e.onNavigate}),t.panelOpen?(0,S.jsx)(k,{settings:t,selectedPath:e.selectedPath,onChange:e=>s(e),onReset:c,onFit:()=>i(e=>e+1),onClose:l}):null]})]})}export{H as NOTES_GRAPH_RUNTIME_BOUNDARY,W as NotesGraphWorkspace};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,o,r as s,t as c}from"./notes-graph-settings-Cl4lMj-A.js";import{Bt as l,Ft as u,H as d,It as f,Lt as p,Pt as m,Rt as h,V as g,Vt as _}from"./vendor-utils-BK07iQND.js";var v=e(t(),1);function y(e){return{nodeSize:e.nodeSize,linkDistance:e.linkDistance,chargeStrength:e.chargeStrength,labelDensity:e.labelDensity,showArrows:e.showArrows,animate:e.animate}}function b(e,t){let n=e.kind===`tag`?5:e.kind===`missing`||e.kind===`ambiguous`?6:7,r=Math.sqrt(Math.max(0,e.degree))*2.4;return Math.min(26,Math.max(4,(n+r)*t.nodeSize))}function x(e,t,n){return e.kind===`missing`||e.kind===`ambiguous`?t>=.45:e.kind===`tag`?n.labelDensity>.35&&t>=.65:n.labelDensity>=.75?t>=.35:n.labelDensity>=.45?e.degree>0&&t>=.6:e.degree>=2&&t>=.85}var S=n();function C(e,t){let n=e.id===t?` is-selected`:``;return`notes-graph-node notes-graph-node-${e.kind}${n}`}function w(e){return`notes-graph-link notes-graph-link-${e.status}${e.virtual?` is-virtual`:``}`}function T(e){let t=(0,v.useRef)(null),n=(0,v.useRef)(null),r=(0,v.useRef)(e.onNavigate),[i,a]=(0,v.useState)({width:900,height:650});r.current=e.onNavigate;let o=(0,v.useMemo)(()=>y(e.settings),[e.settings]);return(0,v.useEffect)(()=>{let e=n.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect();a({width:Math.max(320,Math.floor(t.width||900)),height:Math.max(320,Math.floor(t.height||650))})};if(t(),typeof window.ResizeObserver!=`function`)return;let r=new window.ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[]),(0,v.useEffect)(()=>{let n=t.current;if(!n)return;let a=_(n);if(a.selectAll(`*`).remove(),a.attr(`viewBox`,`0 0 ${i.width} ${i.height}`),e.data.nodes.length===0)return;let s=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,c=e.data.nodes.map(e=>({...e})),v=new Map(c.map(e=>[e.id,e])),y=e.data.edges.flatMap(e=>{let t=v.get(e.source),n=v.get(e.target),r={raw:e.raw,status:e.status,...e.resolvedPath?{resolvedPath:e.resolvedPath}:{},...e.virtual?{virtual:e.virtual}:{}};return t&&n?[{...r,source:t,target:n}]:[]});a.append(`defs`).append(`marker`).attr(`id`,`notes-graph-arrow`).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,15).attr(`refY`,0).attr(`markerWidth`,6).attr(`markerHeight`,6).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,`currentColor`);let S=a.append(`g`).attr(`class`,`notes-graph-viewport`),T=S.append(`g`).attr(`class`,`notes-graph-links`).selectAll(`line`).data(y).join(`line`).attr(`class`,w).attr(`marker-end`,o.showArrows?`url(#notes-graph-arrow)`:null),E=S.append(`g`).attr(`class`,`notes-graph-nodes`).selectAll(`g`).data(c).join(`g`).attr(`class`,t=>C(t,e.selectedPath)).attr(`tabindex`,e=>e.kind===`note`?0:-1).attr(`role`,e=>e.kind===`note`?`button`:`img`).attr(`aria-label`,e=>`${e.title}, ${e.kind}, ${e.degree} links`).on(`click`,(e,t)=>{t.kind===`note`&&t.path&&r.current(t.path)}).on(`keydown`,(e,t)=>{t.kind!==`note`||!t.path||e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),r.current(t.path))});E.append(`circle`).attr(`r`,e=>b(e,o)).attr(`fill`,e=>e.groupColor??null),E.append(`text`).attr(`class`,`notes-graph-label`).attr(`x`,e=>b(e,o)+8).attr(`y`,4).text(e=>e.title),E.append(`title`).text(e=>e.groupLabel?`${e.title} · ${e.groupLabel}`:e.title);let D=u(c).force(`link`,f(y).id(e=>e.id).distance(o.linkDistance)).force(`charge`,m().strength(o.chargeStrength)).force(`center`,h(i.width/2,i.height/2)).force(`collision`,p().radius(e=>b(e,o)+8));function O(){T.attr(`x1`,e=>e.source.x??0).attr(`y1`,e=>e.source.y??0).attr(`x2`,e=>e.target.x??0).attr(`y2`,e=>e.target.y??0),E.attr(`transform`,e=>`translate(${e.x??i.width/2},${e.y??i.height/2})`)}let k=g().scaleExtent([.18,5]).on(`zoom`,e=>{S.attr(`transform`,e.transform),E.classed(`is-label-visible`,t=>x(t,e.transform.k,o))});a.call(k);let A=d.translate(0,0).scale(1);a.call(k.transform,A);let j=l().on(`start`,(e,t)=>{!e.active&&o.animate&&!s&&D.alphaTarget(.25).restart(),t.fx=t.x,t.fy=t.y}).on(`drag`,(e,t)=>{t.fx=e.x,t.fy=e.y}).on(`end`,(e,t)=>{e.active||D.alphaTarget(0),t.fx=null,t.fy=null});return E.call(j),o.animate&&!s?D.on(`tick`,O):(D.tick(120),O(),D.stop()),()=>{D.stop(),a.on(`.zoom`,null)}},[e.data,e.selectedPath,i,o,e.fitToken]),(0,S.jsxs)(`div`,{ref:n,className:`notes-graph-canvas`,"data-empty":e.data.nodes.length===0?`true`:`false`,children:[e.data.nodes.length===0?(0,S.jsx)(`div`,{className:`notes-graph-empty-state`,children:`No matching graph nodes`}):null,(0,S.jsx)(`svg`,{ref:t,className:`notes-graph-svg`,"aria-label":`Notes graph`})]})}function E(e){return e===`filters`?`Filters`:e===`display`?`Display`:e===`forces`?`Forces`:`Groups`}function D(e,t){return{...e,...t,collapsedSections:t.collapsedSections??e.collapsedSections,groups:t.groups??e.groups}}function O(e){return(0,S.jsxs)(`label`,{className:`notes-graph-toggle${e.disabled?` is-disabled`:``}`,children:[(0,S.jsx)(`span`,{children:e.label}),(0,S.jsx)(`input`,{type:`checkbox`,checked:e.checked,disabled:e.disabled,onChange:t=>e.onChange(t.currentTarget.checked)})]})}function k(e){let{settings:t}=e;function n(n){e.onChange(D(t,n))}function i(e){n({[e]:!t[e]})}function o(e){n({collapsedSections:{...t.collapsedSections,[e]:!t.collapsedSections[e]}})}function c(e,r){n({groups:t.groups.map(t=>t.id===e?{...t,...r}:t)})}function l(){n({groups:[...t.groups,r(t.groups.length,t.query)]})}function u(e){n({groups:t.groups.filter(t=>t.id!==e)})}return(0,S.jsxs)(`aside`,{className:`notes-graph-controls`,"aria-label":`Graph controls`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-controls-header`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h3`,{children:`Graph`}),(0,S.jsx)(`span`,{children:e.selectedPath?`Focus-ready`:`Global view`})]}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:e.onClose,"aria-label":`Close graph controls`,children:`X`})]}),s.map(r=>(0,S.jsxs)(`section`,{className:`notes-graph-control-section`,children:[(0,S.jsxs)(`button`,{type:`button`,className:`notes-graph-section-toggle`,onClick:()=>o(r),"aria-expanded":!t.collapsedSections[r],children:[(0,S.jsx)(`span`,{children:E(r)}),(0,S.jsx)(`span`,{children:t.collapsedSections[r]?`+`:`-`})]}),!t.collapsedSections[r]&&r===`filters`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsx)(`span`,{children:`Search`}),(0,S.jsx)(`input`,{value:t.query,onChange:e=>n({query:e.currentTarget.value}),placeholder:`title, path:, tag:, kind:`})]}),(0,S.jsx)(O,{label:`Existing files only`,checked:t.existingFilesOnly,onChange:()=>i(`existingFilesOnly`)}),(0,S.jsx)(O,{label:`Show orphans`,checked:t.showOrphans,onChange:()=>i(`showOrphans`)}),(0,S.jsx)(O,{label:`Show tags`,checked:t.showTags,onChange:()=>i(`showTags`)}),(0,S.jsx)(O,{label:`Show attachments`,checked:t.showAttachments,onChange:()=>i(`showAttachments`)}),(0,S.jsx)(O,{label:`Focus selected`,checked:t.focusSelected,disabled:!e.selectedPath,onChange:()=>i(`focusSelected`)}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Depth `,t.focusDepth]}),(0,S.jsx)(`input`,{type:`range`,min:`1`,max:`4`,value:t.focusDepth,disabled:!t.focusSelected||!e.selectedPath,onChange:e=>n({focusDepth:Number(e.currentTarget.value)})})]})]}):null,!t.collapsedSections[r]&&r===`display`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Node size `,t.nodeSize.toFixed(1)]}),(0,S.jsx)(`input`,{type:`range`,min:`0.6`,max:`2`,step:`0.1`,value:t.nodeSize,onChange:e=>n({nodeSize:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Labels `,Math.round(t.labelDensity*100),`%`]}),(0,S.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`0.05`,value:t.labelDensity,onChange:e=>n({labelDensity:Number(e.currentTarget.value)})})]}),(0,S.jsx)(O,{label:`Show arrows`,checked:t.showArrows,onChange:()=>i(`showArrows`)}),(0,S.jsx)(O,{label:`Animate`,checked:t.animate,onChange:()=>i(`animate`)})]}):null,!t.collapsedSections[r]&&r===`forces`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Link distance `,t.linkDistance]}),(0,S.jsx)(`input`,{type:`range`,min:`40`,max:`240`,value:t.linkDistance,onChange:e=>n({linkDistance:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Repel `,Math.abs(t.chargeStrength)]}),(0,S.jsx)(`input`,{type:`range`,min:`-800`,max:`-20`,value:t.chargeStrength,onChange:e=>n({chargeStrength:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`div`,{className:`notes-graph-control-row`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:e.onFit,children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:e.onReset,children:`Reset`})]})]}):null,!t.collapsedSections[r]&&r===`groups`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsx)(O,{label:`Query groups`,checked:t.groupMode===`query`,onChange:e=>n({groupMode:e?`query`:`off`})}),(0,S.jsx)(`div`,{className:`notes-graph-groups`,children:t.groups.map((e,t)=>(0,S.jsxs)(`div`,{className:`notes-graph-group-row`,children:[(0,S.jsx)(`input`,{className:`notes-graph-color`,type:`color`,value:e.color,onChange:t=>c(e.id,{color:t.currentTarget.value})}),(0,S.jsx)(`input`,{value:e.label,onChange:t=>c(e.id,{label:t.currentTarget.value}),"aria-label":`Group ${t+1} label`}),(0,S.jsx)(`input`,{value:e.query,onChange:t=>c(e.id,{query:t.currentTarget.value}),"aria-label":`Group ${t+1} query`}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>c(e.id,{enabled:!e.enabled}),"aria-pressed":e.enabled,children:e.enabled?`On`:`Off`}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:()=>u(e.id),"aria-label":`Remove ${e.label}`,children:`X`})]},e.id))}),(0,S.jsx)(`div`,{className:`notes-graph-swatches`,"aria-label":`Group color presets`,children:a.map(e=>(0,S.jsx)(`span`,{style:{background:e}},e))}),(0,S.jsx)(`button`,{type:`button`,onClick:l,children:`Add group`})]}):null]},r))]})}var A={note:0,tag:1,missing:2,ambiguous:3,attachment:4};function j(e){return e.trim().replace(/^#/,``).toLowerCase()}function M(e){return`tag:${j(e)}`}function N(e,t){let n=[e.id,e.title,e.path??``];return t&&n.push(t.title,t.path,...t.aliases,...t.tags),n.filter(Boolean).map(e=>e.toLowerCase())}function P(e,t,n){let r=e.toLowerCase();if(r.startsWith(`kind:`))return t.kind===r.slice(5);if(r.startsWith(`path:`))return(t.path??t.id).toLowerCase().includes(r.slice(5));if(r.startsWith(`tag:`)){let e=j(r.slice(4));return e?t.kind===`tag`?j(t.title).includes(e)||t.id.includes(e):!!n?.tags.some(t=>j(t).includes(e)):!0}return N(t,n).some(e=>e.includes(r))}function F(e,t,n){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?!0:r.every(e=>P(e,t,n))}function I(e,t,n){if(n.groupMode!==`off`)return n.groups.find(n=>n.enabled&&F(n.query,e,t))}function L(e,t){let n=new Map;for(let t of e.graph.nodes)n.set(t.id,{...t});for(let t of e.notes)n.has(t.path)||n.set(t.path,{id:t.path,title:t.title,kind:`note`,path:t.path});let r=e.graph.edges.map(e=>({...e}));if(t.showTags)for(let t of e.notes)for(let e of t.tags){let i=j(e);if(!i)continue;let a=M(i);n.has(a)||n.set(a,{id:a,title:`#${i}`,kind:`tag`}),r.push({source:t.path,target:a,raw:`#${i}`,status:`resolved`,resolvedPath:t.path})}return{nodes:[...n.values()],edges:r}}function R(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1),t.set(n.target,(t.get(n.target)??0)+1);return t}function z(e,t,n){let r=new Map;for(let t of e)r.has(t.source)||r.set(t.source,new Set),r.has(t.target)||r.set(t.target,new Set),r.get(t.source)?.add(t.target),r.get(t.target)?.add(t.source);let i=new Set([t]),a=new Set([t]);for(let e=0;e<n;e+=1){let e=new Set;for(let t of a)for(let n of r.get(t)??[])i.has(n)||(i.add(n),e.add(n));if(a=e,a.size===0)break}return i}function B(e,t){return A[e.kind]-A[t.kind]||e.title.localeCompare(t.title)||e.id.localeCompare(t.id)}function V(e,t,n){if(!e)return{nodes:[],edges:[],noteCount:0,linkCount:0,missingCount:0,tagCount:0,hiddenCount:0};let r=new Map(e.notes.map(e=>[e.path,e])),i=L(e,t),a=i.nodes.filter(e=>t.existingFilesOnly&&(e.kind===`missing`||e.kind===`ambiguous`)||!t.showTags&&e.kind===`tag`||!t.showAttachments&&e.kind===`attachment`?!1:F(t.query,e,r.get(e.path??e.id))),o=new Set(a.map(e=>e.id)),s=i.edges.filter(e=>o.has(e.source)&&o.has(e.target));if(!t.showOrphans){let e=R(s);a=a.filter(t=>t.id===n||(e.get(t.id)??0)>0||t.kind!==`note`),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}if(t.focusSelected&&n&&o.has(n)){let e=z(s,n,t.focusDepth);a=a.filter(t=>e.has(t.id)),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}let c=R(s),l=a.map(e=>{let n=r.get(e.path??e.id),i=I(e,n,t);return{...e,degree:c.get(e.id)??0,...i?{groupColor:i.color,groupLabel:i.label}:{},searchMatch:F(t.query,e,n)}}).sort(B),u=new Set(l.map(e=>e.id)),d=s.filter(e=>u.has(e.source)&&u.has(e.target)).map(e=>({...e,virtual:e.target.startsWith(`tag:`)||e.source.startsWith(`tag:`)})).sort((e,t)=>e.source.localeCompare(t.source)||e.target.localeCompare(t.target)||e.raw.localeCompare(t.raw));return{nodes:l,edges:d,noteCount:l.filter(e=>e.kind===`note`).length,linkCount:d.filter(e=>!e.virtual).length,missingCount:l.filter(e=>e.kind===`missing`||e.kind===`ambiguous`).length,tagCount:l.filter(e=>e.kind===`tag`).length,hiddenCount:i.nodes.length-l.length}}var H={dataPlane:`dashboard-notes-api`,shellPanels:`render-only`};function U(){return i(c)}function W(e){let[t,n]=(0,v.useState)(()=>o(e.settings??U())),[r,i]=(0,v.useState)(0),a=(0,v.useRef)(null);(0,v.useEffect)(()=>{n(o(e.settings??U()))},[e.settings]),(0,v.useEffect)(()=>()=>{a.current!=null&&window.clearTimeout(a.current)},[]);function s(t,r=!1){if(n(t),e.onSettingsChange){if(a.current!=null&&window.clearTimeout(a.current),r){e.onSettingsChange(t);return}a.current=window.setTimeout(()=>e.onSettingsChange?.(t),140)}}function c(){s(U(),!0),i(e=>e+1)}function l(){s({...t,panelOpen:!1},!0)}function u(){s({...t,panelOpen:!0},!0)}let d=(0,v.useMemo)(()=>V(e.vaultIndex,t,e.selectedPath),[e.vaultIndex,t,e.selectedPath]);return(0,S.jsxs)(`div`,{className:`notes-graph-workspace${t.panelOpen?` has-controls`:``}`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-toolbar`,children:[(0,S.jsxs)(`div`,{className:`notes-graph-counts`,"aria-live":`polite`,children:[(0,S.jsx)(`strong`,{children:d.noteCount}),` notes`,(0,S.jsxs)(`span`,{children:[d.linkCount,` links`]}),(0,S.jsxs)(`span`,{children:[d.missingCount,` unresolved`]}),d.tagCount>0?(0,S.jsxs)(`span`,{children:[d.tagCount,` tags`]}):null]}),(0,S.jsxs)(`div`,{className:`notes-graph-actions`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>i(e=>e+1),children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:c,children:`Reset`}),t.panelOpen?null:(0,S.jsx)(`button`,{type:`button`,onClick:u,children:`Controls`})]})]}),(0,S.jsxs)(`div`,{className:`notes-graph-body`,children:[(0,S.jsx)(T,{data:d,selectedPath:e.selectedPath,settings:t,fitToken:r,onNavigate:e.onNavigate}),t.panelOpen?(0,S.jsx)(k,{settings:t,selectedPath:e.selectedPath,onChange:e=>s(e),onReset:c,onFit:()=>i(e=>e+1),onClose:l}):null]})]})}export{H as NOTES_GRAPH_RUNTIME_BOUNDARY,W as NotesGraphWorkspace};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";var r=e(t(),1),i=null,a={register(e){return i=e,()=>{i===e&&(i=null)}},dispatch(e){return i?.(e)??!1}},o=[`terminal`,`browser`,`logs`,`activity`],s=9999,c=[`files`,`diff`,`browser`,`design`],l={files:`Files`,diff:`Diff`,browser:`Browser`,design:`Design`},u=[`files`,`browser`,`design`],d=`Working tree`,f=.5,p=n();function m(e){return u.includes(e)}function h(e,t){return e===`diff`?`right-diff`:`right-${e}-${t??1}`}function g(e,t){return e===`diff`?d:`${l[e]} ${t??1}`}function _(e,t,n){if(t===`diff`){let t=e.openTabs.find(e=>e.kind===`diff`);if(t)return{...e,activeTabId:t.id};let r={id:h(`diff`),kind:`diff`,title:n?.title??l.diff,specificName:n?.specificName??`Working tree`,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}};return{...e,openTabs:[...e.openTabs,r],activeTabId:r.id}}let r=e.openTabs.filter(e=>e.kind===t).reduce((e,t)=>Math.max(e,t.ordinal??1),0),i=Math.max(e.nextOrdinalByKind[t]??1,r+1),a={id:h(t,i),kind:t,title:n?.title??l[t],specificName:n?.specificName??g(t,i),ordinal:i,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}},o=m(t)?{...e.nextOrdinalByKind,[t]:i+1}:e.nextOrdinalByKind;return{openTabs:[...e.openTabs,a],activeTabId:a.id,nextOrdinalByKind:o}}function v(e,t){let n=e.openTabs.find(e=>e.kind===t);return n?{...e,activeTabId:n.id}:_(e,t)}function y(e,t){return e.openTabs.find(e=>e.id===t)?{...e,activeTabId:t}:e}function b(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t);if(r===-1)return e;let i=e.openTabs[r],a={...i,...n.title===void 0?{}:{title:n.title},...n.specificName===void 0?{}:{specificName:n.specificName},...n.sourceLabel===void 0?{}:{sourceLabel:n.sourceLabel}};if(a.title===i.title&&a.specificName===i.specificName&&a.sourceLabel===i.sourceLabel)return e;let o=[...e.openTabs];return o[r]=a,{...e,openTabs:o}}function x(e){if(!e)return null;let t=e.replace(/\\/g,`/`).replace(/\/+$/,``).split(`/`).filter(Boolean);return t[t.length-1]??null}function S(e,t){return x(t.activeFilePath)??x(t.folderRootPath)??g(`files`,e.ordinal)}function C(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`files`);if(r===-1)return e;let i=e.openTabs[r],a={...i.files,...n},o=S(i,a),s=a.activeFilePath??a.folderRootPath??void 0,c=[...e.openTabs];return c[r]={...i,files:a,specificName:o,...s?{sourceLabel:s}:{}},{...e,openTabs:c}}function w(e,t,n,r){let i=e.openTabs.find(e=>e.id===t&&e.kind===`files`);return i?r===`follow-instance`?C(e,t,{repoRootPath:n,repoRootMode:`instance`}):r===`instance`&&i.files?.repoRootMode===`manual`?e:C(e,t,{repoRootPath:n,repoRootMode:r}):e}function T(e){let t=e.openTabs.find(t=>t.id===e.activeTabId);return t?.kind===`files`?t:e.openTabs.find(e=>e.kind===`files`)??null}function E(e,t){let n=e,r=T(n);return r?n=y(n,r.id):(n=_(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?C(n,r.id,{activeFilePath:t}):n}function D(e,t){let n=e,r=T(n);return r?n=y(n,r.id):(n=_(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?C(n,r.id,{folderRootPath:t,repoRootPath:null,repoRootMode:`instance`}):n}function O(e){if(!e)return null;try{return new URL(e).hostname.replace(/^www\./,``)||null}catch{return null}}function k(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`browser`);if(r===-1)return e;let i=e.openTabs[r],a=n.url??i.browser?.url,o=n.title?.trim()||O(a)||g(`browser`,i.ordinal),s={...i,...a?{browser:{...i.browser,url:a}}:{},specificName:o,...a?{sourceLabel:a}:{}};if(s.specificName===i.specificName&&s.sourceLabel===i.sourceLabel&&s.browser?.url===i.browser?.url)return e;let c=[...e.openTabs];return c[r]=s,{...e,openTabs:c}}function A(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`design`);if(r===-1)return e;let i=e.openTabs[r],a={...i.design};if(n.pageId!==void 0&&(a.pageId=n.pageId),n.zoom!==void 0&&(a.zoom=n.zoom),n.projectKey!==void 0&&(a.projectKey===void 0||a.projectKey===null)&&(a.projectKey=n.projectKey),a.pageId===i.design?.pageId&&a.projectKey===i.design?.projectKey&&a.zoom===i.design?.zoom)return e;let o=[...e.openTabs];return o[r]={...i,design:a},{...e,openTabs:o}}function j(e,t){let n=_(e,`browser`),r=n.openTabs[n.openTabs.length-1];return r?k(n,r.id,{url:t}):n}function M(e,t){let n=e.openTabs.findIndex(e=>e.id===t);if(n===-1)return e;let r=e.openTabs.filter(e=>e.id!==t),i=e.activeTabId;if(e.activeTabId===t)if(r.length===0)i=null;else{let e=Math.min(n,r.length-1);i=(n>0?r[n-1]:r[e])?.id??null}return{openTabs:r,activeTabId:i,nextOrdinalByKind:e.nextOrdinalByKind}}function N(e){return e<=.12?`folder-only`:e>=.88?`file-only`:`split`}function P(e){return typeof e!=`number`||!Number.isFinite(e)?f:Math.max(0,Math.min(1,e))}function F(e){if(e.mode!==`folder-only`)return e;let t=e.lastSplitRatio||.5;return{mode:`split`,splitRatio:t,lastSplitRatio:t}}function I(e){return typeof e!=`number`||!Number.isFinite(e)?480:Math.min(s,Math.max(260,Math.round(e)))}function L(e){return typeof e!=`number`||!Number.isFinite(e)?320:Math.min(520,Math.max(180,Math.round(e)))}function R(e){let t={...e};t.width=I(t.width);let n=t.tabs.openTabs.filter(e=>c.includes(e.kind));return n.length!==t.tabs.openTabs.length&&(t.tabs={...t.tabs,openTabs:n}),t.tabs.activeTabId&&!n.find(e=>e.id===t.tabs.activeTabId)&&(t.tabs={...t.tabs,activeTabId:n[0]?.id??null}),!t.tabs.activeTabId&&n.length>0&&(t.tabs={...t.tabs,activeTabId:n[0].id}),t.tabs.openTabs.length===0&&t.open&&(t.open=!1),t}function z(e,t){switch(t.type){case`SET_RIGHT_OPEN`:return{...e,rightPanel:{...e.rightPanel,open:t.open}};case`SET_RIGHT_WIDTH`:return{...e,rightPanel:{...e.rightPanel,width:I(t.width)}};case`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`:{let n=v(e.rightPanel.tabs,t.kind);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`CREATE_RIGHT_SIDEBAR_TAB`:{let n=_(e.rightPanel.tabs,t.kind,t.tab);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`ACTIVATE_RIGHT_SIDEBAR_TAB`:{let n=y(e.rightPanel.tabs,t.tabId);return{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_RIGHT_SIDEBAR_TAB_META`:{let n=b(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`CLOSE_RIGHT_SIDEBAR_TAB`:{let n=M(e.rightPanel.tabs,t.tabId),r=n.openTabs.length>0;return{...e,rightPanel:{...e.rightPanel,open:r,tabs:n}}}case`OPEN_FILE_IN_FILES_TAB`:{let n=E(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n,fileFolderLayout:F(e.rightPanel.fileFolderLayout)}}}case`OPEN_FOLDER_IN_FILES_TAB`:{let n=D(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_FILES_TAB_FILE`:{let n=C(e.rightPanel.tabs,t.tabId,{activeFilePath:t.path});if(n===e.rightPanel.tabs)return e;let r=t.path?F(e.rightPanel.fileFolderLayout):e.rightPanel.fileFolderLayout;return{...e,rightPanel:{...e.rightPanel,tabs:n,fileFolderLayout:r}}}case`SET_FILES_TAB_ROOT`:{let n=C(e.rightPanel.tabs,t.tabId,{folderRootPath:t.path,repoRootPath:null,repoRootMode:`instance`});return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILES_TAB_REPO_ROOT`:{let n=w(e.rightPanel.tabs,t.tabId,t.path,t.mode);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_BROWSER_TAB_STATE`:{let n={};t.url!==void 0&&(n.url=t.url),t.title!==void 0&&(n.title=t.title);let r=k(e.rightPanel.tabs,t.tabId,n);return r===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:r}}}case`OPEN_BROWSER_MODULE_TAB`:{let n=j(e.rightPanel.tabs,t.url);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_DESIGN_TAB_STATE`:{let n=A(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILE_FOLDER_SPLIT_RATIO`:{let n=P(t.ratio),r=N(n),i=r===`split`?n:e.rightPanel.fileFolderLayout.lastSplitRatio;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:r,splitRatio:n,lastSplitRatio:i}}}}case`SET_FILE_FOLDER_VIEW_MODE`:{let n=e.rightPanel.fileFolderLayout;if(t.mode===n.mode)return e;let r=n.splitRatio,i=n.lastSplitRatio;return t.mode===`folder-only`?r=0:t.mode===`file-only`?r=1:(r=i||.5,i=r),{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:t.mode,splitRatio:r,lastSplitRatio:i}}}}case`RESTORE_FILE_FOLDER_SPLIT`:{let t=e.rightPanel.fileFolderLayout.lastSplitRatio||.5;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:`split`,splitRatio:t,lastSplitRatio:t}}}}case`SET_BOTTOM_OPEN`:return{...e,bottomPanel:{...e.bottomPanel,open:t.open}};case`SET_BOTTOM_HEIGHT`:return{...e,bottomPanel:{...e.bottomPanel,height:L(t.height)}};case`OPEN_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.includes(t.tab)?n.tabs:[...n.tabs,t.tab];return{...e,bottomPanel:{...n,open:!0,tabs:r,activeTab:t.tab}}}case`CLOSE_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.filter(e=>e!==t.tab),i=n.activeTab===t.tab?r[0]??null:n.activeTab,a=r.length>0;return{...e,bottomPanel:{...n,tabs:r,activeTab:i,open:a}}}case`SET_BOTTOM_ACTIVE_TAB`:return{...e,bottomPanel:{...e.bottomPanel,activeTab:t.tab}};case`HYDRATE`:{let n=t.state,r=R({...e.rightPanel,...n.rightPanel}),i={...e.bottomPanel,...n.bottomPanel};return i.height=L(i.height),i.tabs=(i.tabs??[]).filter(e=>o.includes(e)),i.activeTab!==null&&!i.tabs.includes(i.activeTab)&&(i.activeTab=i.tabs[0]??null),{rightPanel:r,bottomPanel:i}}default:return e}}var B={rightPanel:{open:!1,width:480,tabs:{openTabs:[],activeTabId:null,nextOrdinalByKind:{}},fileFolderLayout:{mode:`split`,splitRatio:f,lastSplitRatio:f}},bottomPanel:{open:!1,height:320,tabs:[],activeTab:null}},V=(0,r.createContext)(null);function H(e){let t=window;t.__cliJawPendingTerminalActions=[...t.__cliJawPendingTerminalActions??[],e],window.setTimeout(()=>{document.dispatchEvent(new CustomEvent(`jaw:shortcut-action`,{detail:`flushTerminalShortcutQueue`}))},0)}function U(e){let{tabs:t}=e.rightPanel;return t.activeTabId?t.openTabs.find(e=>e.id===t.activeTabId)?.kind??null:null}function W(e){let[t,n]=(0,r.useReducer)(z,B),i=(0,r.useRef)(!1);(0,r.useEffect)(()=>{!e.initialPanelState||i.current||(i.current=!0,n({type:`HYDRATE`,state:e.initialPanelState}))},[e.initialPanelState]);let o=(0,r.useRef)(e.onStateChange);o.current=e.onStateChange,(0,r.useEffect)(()=>{if(!o.current)return;let e=setTimeout(()=>o.current?.(t),300);return()=>clearTimeout(e)},[t]);let s=t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0&&t.rightPanel.tabs.activeTabId!==null,c=U(t);(0,r.useEffect)(()=>a.register(e=>{switch(e){case`toggleBottomPanel`:return t.bottomPanel.open?n({type:`SET_BOTTOM_OPEN`,open:!1}):n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),!0;case`toggleRightPanel`:return n(s?{type:`SET_RIGHT_OPEN`,open:!1}:{type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`focusTerminal`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),H(`focusTerminal`),!0;case`newTerminalSession`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),H(`newTerminalSession`),!0;case`openDiff`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`diff`}),!0;case`openFolderTree`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`closeActiveBottomTab`:return t.bottomPanel.activeTab&&n({type:`CLOSE_BOTTOM_TAB`,tab:t.bottomPanel.activeTab}),!0;default:return!1}}),[t.bottomPanel.open,t.bottomPanel.activeTab,s]);let l=(0,r.useMemo)(()=>({state:t,dispatch:n,effectiveRightOpen:s,activeRightTabKind:c}),[t,s,c]);return(0,p.jsx)(V.Provider,{value:l,children:e.children})}function G(){let e=(0,r.useContext)(V);if(!e)throw Error(`usePanelLayout must be used within PanelLayoutProvider`);return e}function K(){let{dispatch:e,state:t}=G();return(0,r.useMemo)(()=>({focusOrCreateFirstRightSidebarTab:t=>e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:t}),createRightSidebarTab:(t,n)=>e({type:`CREATE_RIGHT_SIDEBAR_TAB`,kind:t,...n?{tab:n}:{}}),activateRightSidebarTab:t=>e({type:`ACTIVATE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightSidebarTabMeta:(t,n)=>e({type:`SET_RIGHT_SIDEBAR_TAB_META`,tabId:t,patch:n}),closeRightSidebarTab:t=>e({type:`CLOSE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightWidth:t=>e({type:`SET_RIGHT_WIDTH`,width:t}),setFileFolderSplitRatio:t=>e({type:`SET_FILE_FOLDER_SPLIT_RATIO`,ratio:t}),setFileFolderViewMode:t=>e({type:`SET_FILE_FOLDER_VIEW_MODE`,mode:t}),restoreFileFolderSplit:()=>e({type:`RESTORE_FILE_FOLDER_SPLIT`}),toggleRightPanel:()=>t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0?e({type:`SET_RIGHT_OPEN`,open:!1}):e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),openBottomTab:t=>e({type:`OPEN_BOTTOM_TAB`,tab:t}),closeBottomTab:t=>e({type:`CLOSE_BOTTOM_TAB`,tab:t}),setBottomActiveTab:t=>e({type:`SET_BOTTOM_ACTIVE_TAB`,tab:t}),setBottomHeight:t=>e({type:`SET_BOTTOM_HEIGHT`,height:t}),toggleBottomPanel:()=>t.bottomPanel.open?e({type:`SET_BOTTOM_OPEN`,open:!1}):e({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),hydrate:t=>e({type:`HYDRATE`,state:t})}),[e,t.rightPanel.open,t.bottomPanel.open])}export{f as a,c,G as i,l,N as n,d as o,K as r,u as s,W as t,a as u};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";var r=e(t(),1),i=null,a={register(e){return i=e,()=>{i===e&&(i=null)}},dispatch(e){return i?.(e)??!1}},o=[`terminal`,`browser`,`logs`,`activity`],s=9999,c=[`files`,`diff`,`browser`,`design`],l={files:`Files`,diff:`Diff`,browser:`Browser`,design:`Design`},u=[`files`,`browser`,`design`],d=`Working tree`,f=.5,p=n();function m(e){return u.includes(e)}function h(e,t){return e===`diff`?`right-diff`:`right-${e}-${t??1}`}function g(e,t){return e===`diff`?d:`${l[e]} ${t??1}`}function _(e,t,n){if(t===`diff`){let t=e.openTabs.find(e=>e.kind===`diff`);if(t)return{...e,activeTabId:t.id};let r={id:h(`diff`),kind:`diff`,title:n?.title??l.diff,specificName:n?.specificName??`Working tree`,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}};return{...e,openTabs:[...e.openTabs,r],activeTabId:r.id}}let r=e.openTabs.filter(e=>e.kind===t).reduce((e,t)=>Math.max(e,t.ordinal??1),0),i=Math.max(e.nextOrdinalByKind[t]??1,r+1),a={id:h(t,i),kind:t,title:n?.title??l[t],specificName:n?.specificName??g(t,i),ordinal:i,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}},o=m(t)?{...e.nextOrdinalByKind,[t]:i+1}:e.nextOrdinalByKind;return{openTabs:[...e.openTabs,a],activeTabId:a.id,nextOrdinalByKind:o}}function v(e,t){let n=e.openTabs.find(e=>e.kind===t);return n?{...e,activeTabId:n.id}:_(e,t)}function y(e,t){return e.openTabs.find(e=>e.id===t)?{...e,activeTabId:t}:e}function b(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t);if(r===-1)return e;let i=e.openTabs[r],a={...i,...n.title===void 0?{}:{title:n.title},...n.specificName===void 0?{}:{specificName:n.specificName},...n.sourceLabel===void 0?{}:{sourceLabel:n.sourceLabel}};if(a.title===i.title&&a.specificName===i.specificName&&a.sourceLabel===i.sourceLabel)return e;let o=[...e.openTabs];return o[r]=a,{...e,openTabs:o}}function x(e){if(!e)return null;let t=e.replace(/\\/g,`/`).replace(/\/+$/,``).split(`/`).filter(Boolean);return t[t.length-1]??null}function S(e,t){return x(t.activeFilePath)??x(t.folderRootPath)??g(`files`,e.ordinal)}function C(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`files`);if(r===-1)return e;let i=e.openTabs[r],a={...i.files,...n},o=S(i,a),s=a.activeFilePath??a.folderRootPath??void 0,c=[...e.openTabs];return c[r]={...i,files:a,specificName:o,...s?{sourceLabel:s}:{}},{...e,openTabs:c}}function w(e,t,n,r){let i=e.openTabs.find(e=>e.id===t&&e.kind===`files`);return i?r===`follow-instance`?C(e,t,{repoRootPath:n,repoRootMode:`instance`}):r===`instance`&&i.files?.repoRootMode===`manual`?e:C(e,t,{repoRootPath:n,repoRootMode:r}):e}function T(e){let t=e.openTabs.find(t=>t.id===e.activeTabId);return t?.kind===`files`?t:e.openTabs.find(e=>e.kind===`files`)??null}function E(e,t){let n=e,r=T(n);return r?n=y(n,r.id):(n=_(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?C(n,r.id,{activeFilePath:t}):n}function D(e,t){let n=e,r=T(n);return r?n=y(n,r.id):(n=_(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?C(n,r.id,{folderRootPath:t,repoRootPath:null,repoRootMode:`instance`}):n}function O(e){if(!e)return null;try{return new URL(e).hostname.replace(/^www\./,``)||null}catch{return null}}function k(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`browser`);if(r===-1)return e;let i=e.openTabs[r],a=n.url??i.browser?.url,o=n.title?.trim()||O(a)||g(`browser`,i.ordinal),s={...i,...a?{browser:{...i.browser,url:a}}:{},specificName:o,...a?{sourceLabel:a}:{}};if(s.specificName===i.specificName&&s.sourceLabel===i.sourceLabel&&s.browser?.url===i.browser?.url)return e;let c=[...e.openTabs];return c[r]=s,{...e,openTabs:c}}function A(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`design`);if(r===-1)return e;let i=e.openTabs[r],a={...i.design};if(n.pageId!==void 0&&(a.pageId=n.pageId),n.zoom!==void 0&&(a.zoom=n.zoom),n.projectKey!==void 0&&(a.projectKey===void 0||a.projectKey===null)&&(a.projectKey=n.projectKey),a.pageId===i.design?.pageId&&a.projectKey===i.design?.projectKey&&a.zoom===i.design?.zoom)return e;let o=[...e.openTabs];return o[r]={...i,design:a},{...e,openTabs:o}}function j(e,t){let n=_(e,`browser`),r=n.openTabs[n.openTabs.length-1];return r?k(n,r.id,{url:t}):n}function M(e,t){let n=e.openTabs.findIndex(e=>e.id===t);if(n===-1)return e;let r=e.openTabs.filter(e=>e.id!==t),i=e.activeTabId;if(e.activeTabId===t)if(r.length===0)i=null;else{let e=Math.min(n,r.length-1);i=(n>0?r[n-1]:r[e])?.id??null}return{openTabs:r,activeTabId:i,nextOrdinalByKind:e.nextOrdinalByKind}}function N(e){return e<=.12?`folder-only`:e>=.88?`file-only`:`split`}function P(e){return typeof e!=`number`||!Number.isFinite(e)?f:Math.max(0,Math.min(1,e))}function F(e){if(e.mode!==`folder-only`)return e;let t=e.lastSplitRatio||.5;return{mode:`split`,splitRatio:t,lastSplitRatio:t}}function I(e){return typeof e!=`number`||!Number.isFinite(e)?480:Math.min(s,Math.max(260,Math.round(e)))}function L(e){return typeof e!=`number`||!Number.isFinite(e)?320:Math.min(520,Math.max(180,Math.round(e)))}function R(e){let t={...e};t.width=I(t.width);let n=t.tabs.openTabs.filter(e=>c.includes(e.kind));return n.length!==t.tabs.openTabs.length&&(t.tabs={...t.tabs,openTabs:n}),t.tabs.activeTabId&&!n.find(e=>e.id===t.tabs.activeTabId)&&(t.tabs={...t.tabs,activeTabId:n[0]?.id??null}),!t.tabs.activeTabId&&n.length>0&&(t.tabs={...t.tabs,activeTabId:n[0].id}),t.tabs.openTabs.length===0&&t.open&&(t.open=!1),t}function z(e,t){switch(t.type){case`SET_RIGHT_OPEN`:return{...e,rightPanel:{...e.rightPanel,open:t.open}};case`SET_RIGHT_WIDTH`:return{...e,rightPanel:{...e.rightPanel,width:I(t.width)}};case`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`:{let n=v(e.rightPanel.tabs,t.kind);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`CREATE_RIGHT_SIDEBAR_TAB`:{let n=_(e.rightPanel.tabs,t.kind,t.tab);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`ACTIVATE_RIGHT_SIDEBAR_TAB`:{let n=y(e.rightPanel.tabs,t.tabId);return{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_RIGHT_SIDEBAR_TAB_META`:{let n=b(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`CLOSE_RIGHT_SIDEBAR_TAB`:{let n=M(e.rightPanel.tabs,t.tabId),r=n.openTabs.length>0;return{...e,rightPanel:{...e.rightPanel,open:r,tabs:n}}}case`OPEN_FILE_IN_FILES_TAB`:{let n=E(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n,fileFolderLayout:F(e.rightPanel.fileFolderLayout)}}}case`OPEN_FOLDER_IN_FILES_TAB`:{let n=D(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_FILES_TAB_FILE`:{let n=C(e.rightPanel.tabs,t.tabId,{activeFilePath:t.path});if(n===e.rightPanel.tabs)return e;let r=t.path?F(e.rightPanel.fileFolderLayout):e.rightPanel.fileFolderLayout;return{...e,rightPanel:{...e.rightPanel,tabs:n,fileFolderLayout:r}}}case`SET_FILES_TAB_ROOT`:{let n=C(e.rightPanel.tabs,t.tabId,{folderRootPath:t.path,repoRootPath:null,repoRootMode:`instance`});return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILES_TAB_REPO_ROOT`:{let n=w(e.rightPanel.tabs,t.tabId,t.path,t.mode);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_BROWSER_TAB_STATE`:{let n={};t.url!==void 0&&(n.url=t.url),t.title!==void 0&&(n.title=t.title);let r=k(e.rightPanel.tabs,t.tabId,n);return r===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:r}}}case`OPEN_BROWSER_MODULE_TAB`:{let n=j(e.rightPanel.tabs,t.url);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_DESIGN_TAB_STATE`:{let n=A(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILE_FOLDER_SPLIT_RATIO`:{let n=P(t.ratio),r=N(n),i=r===`split`?n:e.rightPanel.fileFolderLayout.lastSplitRatio;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:r,splitRatio:n,lastSplitRatio:i}}}}case`SET_FILE_FOLDER_VIEW_MODE`:{let n=e.rightPanel.fileFolderLayout;if(t.mode===n.mode)return e;let r=n.splitRatio,i=n.lastSplitRatio;return t.mode===`folder-only`?r=0:t.mode===`file-only`?r=1:(r=i||.5,i=r),{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:t.mode,splitRatio:r,lastSplitRatio:i}}}}case`RESTORE_FILE_FOLDER_SPLIT`:{let t=e.rightPanel.fileFolderLayout.lastSplitRatio||.5;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:`split`,splitRatio:t,lastSplitRatio:t}}}}case`SET_BOTTOM_OPEN`:return{...e,bottomPanel:{...e.bottomPanel,open:t.open}};case`SET_BOTTOM_HEIGHT`:return{...e,bottomPanel:{...e.bottomPanel,height:L(t.height)}};case`OPEN_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.includes(t.tab)?n.tabs:[...n.tabs,t.tab];return{...e,bottomPanel:{...n,open:!0,tabs:r,activeTab:t.tab}}}case`CLOSE_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.filter(e=>e!==t.tab),i=n.activeTab===t.tab?r[0]??null:n.activeTab,a=r.length>0;return{...e,bottomPanel:{...n,tabs:r,activeTab:i,open:a}}}case`SET_BOTTOM_ACTIVE_TAB`:return{...e,bottomPanel:{...e.bottomPanel,activeTab:t.tab}};case`HYDRATE`:{let n=t.state,r=R({...e.rightPanel,...n.rightPanel}),i={...e.bottomPanel,...n.bottomPanel};return i.height=L(i.height),i.tabs=(i.tabs??[]).filter(e=>o.includes(e)),i.activeTab!==null&&!i.tabs.includes(i.activeTab)&&(i.activeTab=i.tabs[0]??null),{rightPanel:r,bottomPanel:i}}default:return e}}var B={rightPanel:{open:!1,width:480,tabs:{openTabs:[],activeTabId:null,nextOrdinalByKind:{}},fileFolderLayout:{mode:`split`,splitRatio:f,lastSplitRatio:f}},bottomPanel:{open:!1,height:320,tabs:[],activeTab:null}},V=(0,r.createContext)(null);function H(e){let t=window;t.__cliJawPendingTerminalActions=[...t.__cliJawPendingTerminalActions??[],e],window.setTimeout(()=>{document.dispatchEvent(new CustomEvent(`jaw:shortcut-action`,{detail:`flushTerminalShortcutQueue`}))},0)}function U(e){let{tabs:t}=e.rightPanel;return t.activeTabId?t.openTabs.find(e=>e.id===t.activeTabId)?.kind??null:null}function W(e){let[t,n]=(0,r.useReducer)(z,B),i=(0,r.useRef)(!1);(0,r.useEffect)(()=>{!e.initialPanelState||i.current||(i.current=!0,n({type:`HYDRATE`,state:e.initialPanelState}))},[e.initialPanelState]);let o=(0,r.useRef)(e.onStateChange);o.current=e.onStateChange,(0,r.useEffect)(()=>{if(!o.current)return;let e=setTimeout(()=>o.current?.(t),300);return()=>clearTimeout(e)},[t]);let s=t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0&&t.rightPanel.tabs.activeTabId!==null,c=U(t);(0,r.useEffect)(()=>a.register(e=>{switch(e){case`toggleBottomPanel`:return t.bottomPanel.open?n({type:`SET_BOTTOM_OPEN`,open:!1}):n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),!0;case`toggleRightPanel`:return n(s?{type:`SET_RIGHT_OPEN`,open:!1}:{type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`focusTerminal`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),H(`focusTerminal`),!0;case`newTerminalSession`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),H(`newTerminalSession`),!0;case`openDiff`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`diff`}),!0;case`openFolderTree`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`closeActiveBottomTab`:return t.bottomPanel.activeTab&&n({type:`CLOSE_BOTTOM_TAB`,tab:t.bottomPanel.activeTab}),!0;default:return!1}}),[t.bottomPanel.open,t.bottomPanel.activeTab,s]);let l=(0,r.useMemo)(()=>({state:t,dispatch:n,effectiveRightOpen:s,activeRightTabKind:c}),[t,s,c]);return(0,p.jsx)(V.Provider,{value:l,children:e.children})}function G(){let e=(0,r.useContext)(V);if(!e)throw Error(`usePanelLayout must be used within PanelLayoutProvider`);return e}function K(){let{dispatch:e,state:t}=G();return(0,r.useMemo)(()=>({focusOrCreateFirstRightSidebarTab:t=>e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:t}),createRightSidebarTab:(t,n)=>e({type:`CREATE_RIGHT_SIDEBAR_TAB`,kind:t,...n?{tab:n}:{}}),activateRightSidebarTab:t=>e({type:`ACTIVATE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightSidebarTabMeta:(t,n)=>e({type:`SET_RIGHT_SIDEBAR_TAB_META`,tabId:t,patch:n}),closeRightSidebarTab:t=>e({type:`CLOSE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightWidth:t=>e({type:`SET_RIGHT_WIDTH`,width:t}),setFileFolderSplitRatio:t=>e({type:`SET_FILE_FOLDER_SPLIT_RATIO`,ratio:t}),setFileFolderViewMode:t=>e({type:`SET_FILE_FOLDER_VIEW_MODE`,mode:t}),restoreFileFolderSplit:()=>e({type:`RESTORE_FILE_FOLDER_SPLIT`}),toggleRightPanel:()=>t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0?e({type:`SET_RIGHT_OPEN`,open:!1}):e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),openBottomTab:t=>e({type:`OPEN_BOTTOM_TAB`,tab:t}),closeBottomTab:t=>e({type:`CLOSE_BOTTOM_TAB`,tab:t}),setBottomActiveTab:t=>e({type:`SET_BOTTOM_ACTIVE_TAB`,tab:t}),setBottomHeight:t=>e({type:`SET_BOTTOM_HEIGHT`,height:t}),toggleBottomPanel:()=>t.bottomPanel.open?e({type:`SET_BOTTOM_OPEN`,open:!1}):e({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),hydrate:t=>e({type:`HYDRATE`,state:t})}),[e,t.rightPanel.open,t.bottomPanel.open])}export{f as a,c,G as i,l,N as n,d as o,K as r,u as s,W as t,a as u};
@@ -0,0 +1 @@
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"./Permissions-RgyF1O6q.js";export{a as default,n as isAllowlistValid,i as isPermissionToken,t as isPermissionsAuto,e as parsePermissionsValue,r as seedAutoAllowlist};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{i as c,n as l}from"./fields-zkeByFQW.js";import{t as u}from"./InlineWarn-DDzeHxQw.js";var d=e(t(),1),f=n(),p=/^[a-zA-Z0-9._:*-]+$/,m=[`bash`,`read`,`write`,`edit`,`mcp.*`];function h(e){return e===`auto`}function g(e){return h(e)?{mode:`auto`}:Array.isArray(e)?{mode:`custom`,tokens:e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0)}:{mode:`unknown`}}function _(e){return typeof e!=`string`||e.length===0||e.length>64?!1:p.test(e)}function v(e){return Array.isArray(e)&&e.length>0?Array.from(new Set(e.filter(_))):[...m]}function y(e){return e.length===0?!1:e.every(_)}var b=[{value:`auto`,label:`Auto — runtime resolves the allowlist`},{value:`custom`,label:`Custom — explicit allowlist below`}];function x({port:e,client:t,dirty:n,registerSave:p}){let{state:m,refresh:h,setData:x}=r(t,`/api/settings`),[S,C]=(0,d.useState)(`auto`),[w,T]=(0,d.useState)([]),E=(0,d.useMemo)(()=>m.kind===`ready`?g(m.data.permissions):null,[m]);(0,d.useEffect)(()=>{if(m.kind!==`ready`)return;let e=g(m.data.permissions);e.mode===`custom`?(C(`custom`),T(e.tokens)):(C(`auto`),T([]))},[m]),(0,d.useEffect)(()=>()=>{n.remove(`permissions`)},[n]);let D=(0,d.useCallback)(e=>n.set(`permissions`,e),[n]),O=(0,d.useMemo)(()=>E&&E.mode===`custom`?E.tokens:`auto`,[E]),k=(0,d.useCallback)(e=>{if(e===`auto`){C(`auto`),T([]),D({value:`auto`,original:O,valid:!0});return}if(e===`custom`){C(`custom`);let e=E&&E.mode===`custom`&&E.tokens.length>0?[...E.tokens]:v(null);T(e),D({value:e,original:O,valid:y(e)})}},[E,O,D]),A=(0,d.useCallback)(e=>{let t=e.map(e=>e.trim()).filter(e=>e.length>0);T(t),D({value:t,original:O,valid:y(t)})},[O,D]),j=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await t.put(`/api/settings`,e),i=r&&typeof r==`object`&&`data`in r?r.data:r;n.clear();let a=g(i.permissions);a.mode===`custom`?(C(`custom`),T(a.tokens)):(C(`auto`),T([])),x(i),await h()},[t,n,h,x]);if((0,d.useEffect)(()=>{if(p)return p(j),()=>p(null)},[p,j]),m.kind===`loading`)return(0,f.jsx)(a,{});if(m.kind===`offline`)return(0,f.jsx)(o,{port:e});if(m.kind===`error`)return(0,f.jsx)(s,{message:m.message});let M=w.filter(e=>!_(e)),N=M.length>0,P=S===`custom`&&w.length===0,F=E?.mode===`custom`?`${E.tokens.length} explicit token${E.tokens.length===1?``:`s`}: ${E.tokens.join(`, `)}`:E?.mode===`auto`?`auto (runtime decides)`:`unknown shape — saved value will overwrite on next save`;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,f.jsxs)(i,{title:`Permissions`,hint:`Controls which capabilities the CLI can use. Auto delegates to the runtime; Custom freezes the list to your allowlist.`,children:[(0,f.jsx)(c,{id:`permissions-mode`,label:`Mode`,value:S,options:b,onChange:k}),S===`custom`&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(l,{id:`permissions-allowlist`,label:`Allowlist`,value:w,onChange:A,placeholder:`bash, read, mcp.*`,error:N?`Invalid token${M.length===1?``:`s`}: ${M.join(`, `)}`:P?`Allowlist cannot be empty in Custom mode.`:null}),(0,f.jsxs)(`p`,{className:`settings-section-hint`,children:[`Each chip is a permission token. Examples: `,(0,f.jsx)(`code`,{children:`bash`}),`,`,(0,f.jsx)(`code`,{children:` read`}),`, `,(0,f.jsx)(`code`,{children:` write`}),`, `,(0,f.jsx)(`code`,{children:` mcp.*`}),`.`]}),P&&(0,f.jsx)(u,{role:`alert`,children:`Saving with an empty Custom allowlist would deny every action. Add at least one token or switch back to Auto.`})]})]}),(0,f.jsx)(i,{title:`Currently active`,hint:`Reflects the saved snapshot from /api/settings.`,children:(0,f.jsxs)(`p`,{className:`settings-readonly-line`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:`Resolved permissions`}),(0,f.jsx)(`span`,{children:F})]})})]})}export{g as a,h as i,y as n,v as o,_ as r,x as t};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-GpE8A-FA.js";import{i as c,n as l}from"./fields-BwOMlwS0.js";import{t as u}from"./InlineWarn-D-fmcQXD.js";var d=e(t(),1),f=n(),p=/^[a-zA-Z0-9._:*-]+$/,m=[`bash`,`read`,`write`,`edit`,`mcp.*`];function h(e){return e===`auto`}function g(e){return h(e)?{mode:`auto`}:Array.isArray(e)?{mode:`custom`,tokens:e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0)}:{mode:`unknown`}}function _(e){return typeof e!=`string`||e.length===0||e.length>64?!1:p.test(e)}function v(e){return Array.isArray(e)&&e.length>0?Array.from(new Set(e.filter(_))):[...m]}function y(e){return e.length===0?!1:e.every(_)}var b=[{value:`auto`,label:`Auto — runtime resolves the allowlist`},{value:`custom`,label:`Custom — explicit allowlist below`}];function x({port:e,client:t,dirty:n,registerSave:p}){let{state:m,refresh:h,setData:x}=r(t,`/api/settings`),[S,C]=(0,d.useState)(`auto`),[w,T]=(0,d.useState)([]),E=(0,d.useMemo)(()=>m.kind===`ready`?g(m.data.permissions):null,[m]);(0,d.useEffect)(()=>{if(m.kind!==`ready`)return;let e=g(m.data.permissions);e.mode===`custom`?(C(`custom`),T(e.tokens)):(C(`auto`),T([]))},[m]),(0,d.useEffect)(()=>()=>{n.remove(`permissions`)},[n]);let D=(0,d.useCallback)(e=>n.set(`permissions`,e),[n]),O=(0,d.useMemo)(()=>E&&E.mode===`custom`?E.tokens:`auto`,[E]),k=(0,d.useCallback)(e=>{if(e===`auto`){C(`auto`),T([]),D({value:`auto`,original:O,valid:!0});return}if(e===`custom`){C(`custom`);let e=E&&E.mode===`custom`&&E.tokens.length>0?[...E.tokens]:v(null);T(e),D({value:e,original:O,valid:y(e)})}},[E,O,D]),A=(0,d.useCallback)(e=>{let t=e.map(e=>e.trim()).filter(e=>e.length>0);T(t),D({value:t,original:O,valid:y(t)})},[O,D]),j=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await t.put(`/api/settings`,e),i=r&&typeof r==`object`&&`data`in r?r.data:r;n.clear();let a=g(i.permissions);a.mode===`custom`?(C(`custom`),T(a.tokens)):(C(`auto`),T([])),x(i),await h()},[t,n,h,x]);if((0,d.useEffect)(()=>{if(p)return p(j),()=>p(null)},[p,j]),m.kind===`loading`)return(0,f.jsx)(a,{});if(m.kind===`offline`)return(0,f.jsx)(o,{port:e});if(m.kind===`error`)return(0,f.jsx)(s,{message:m.message});let M=w.filter(e=>!_(e)),N=M.length>0,P=S===`custom`&&w.length===0,F=E?.mode===`custom`?`${E.tokens.length} explicit token${E.tokens.length===1?``:`s`}: ${E.tokens.join(`, `)}`:E?.mode===`auto`?`auto (runtime decides)`:`unknown shape — saved value will overwrite on next save`;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,f.jsxs)(i,{title:`Permissions`,hint:`Controls which capabilities the CLI can use. Auto delegates to the runtime; Custom freezes the list to your allowlist.`,children:[(0,f.jsx)(c,{id:`permissions-mode`,label:`Mode`,value:S,options:b,onChange:k}),S===`custom`&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(l,{id:`permissions-allowlist`,label:`Allowlist`,value:w,onChange:A,placeholder:`bash, read, mcp.*`,error:N?`Invalid token${M.length===1?``:`s`}: ${M.join(`, `)}`:P?`Allowlist cannot be empty in Custom mode.`:null}),(0,f.jsxs)(`p`,{className:`settings-section-hint`,children:[`Each chip is a permission token. Examples: `,(0,f.jsx)(`code`,{children:`bash`}),`,`,(0,f.jsx)(`code`,{children:` read`}),`, `,(0,f.jsx)(`code`,{children:` write`}),`, `,(0,f.jsx)(`code`,{children:` mcp.*`}),`.`]}),P&&(0,f.jsx)(u,{role:`alert`,children:`Saving with an empty Custom allowlist would deny every action. Add at least one token or switch back to Auto.`})]})]}),(0,f.jsx)(i,{title:`Currently active`,hint:`Reflects the saved snapshot from /api/settings.`,children:(0,f.jsxs)(`p`,{className:`settings-readonly-line`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:`Resolved permissions`}),(0,f.jsx)(`span`,{children:F})]})})]})}export{g as a,h as i,y as n,v as o,_ as r,x as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{a as c,i as l}from"./fields-zkeByFQW.js";import{t as u}from"./path-utils-LsJeDCKF.js";var d=e(t(),1),f=n(),p=`image/png,image/jpeg,image/webp,image/gif`;function m({kind:e,port:t}){let[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o,s]=(0,d.useState)(null),c=(0,d.useRef)(null);(0,d.useEffect)(()=>{let n=!1;return s(null),r(null),fetch(`/i/${t}/api/avatar`).then(e=>e.ok?e.json():Promise.reject(Error(`avatar HTTP ${e.status}`))).then(t=>{n||r((`data`in t&&t.data?t.data:t)[e]||null)}).catch(e=>{n||s(e instanceof Error?e.message:String(e))}),()=>{n=!0}},[e,t]);let l=()=>c.current?.click(),u=async n=>{a(!0),s(null);try{let i=await n.arrayBuffer(),a=n.type||`application/octet-stream`,o=await fetch(`/i/${t}/api/avatar/${e}/upload`,{method:`POST`,headers:{"content-type":a,"x-filename":encodeURIComponent(n.name)},body:i});if(!o.ok){let e=await o.text().catch(()=>``);throw Error(`upload failed: ${o.status} ${e}`)}let s=await o.json();r(`data`in s&&s.data?s.data:s)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1),c.current&&(c.current.value=``)}},m=async()=>{a(!0),s(null);try{let n=await fetch(`/i/${t}/api/avatar/${e}/image`,{method:`DELETE`});if(!n.ok)throw Error(`clear failed: ${n.status}`);let i=await n.json();r(`data`in i&&i.data?i.data:i)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},h=n&&n.kind===`image`?`/i/${t}${n.imageUrl}`:null,g=e===`agent`?`Agent avatar`:`User avatar`;return(0,f.jsxs)(`div`,{className:`settings-avatar-card`,children:[(0,f.jsx)(`div`,{className:`settings-avatar-preview`,"aria-label":`${g} preview`,children:h?(0,f.jsx)(`img`,{src:h,alt:`${g} current`}):(0,f.jsx)(`span`,{className:`settings-avatar-placeholder`,"aria-hidden":`true`,children:e===`agent`?`🦈`:`👤`})}),(0,f.jsxs)(`div`,{className:`settings-avatar-controls`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:g}),(0,f.jsx)(`input`,{ref:c,type:`file`,accept:p,style:{display:`none`},onChange:e=>{let t=e.target.files?.[0];t&&u(t)}}),(0,f.jsxs)(`div`,{className:`settings-avatar-buttons`,children:[(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,onClick:l,disabled:i,children:i?`Working…`:`Upload image`}),h?(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void m(),disabled:i,children:`Clear`}):null]}),o?(0,f.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:o}):null]})]})}var h=[{value:`ko`,label:`한국어 (ko)`},{value:`en`,label:`English (en)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}];function g({port:e,client:t,dirty:n,registerSave:p}){let{state:g,refresh:_,setData:v}=r(t,`/api/settings`),[y,b]=(0,d.useState)({});(0,d.useEffect)(()=>{g.kind===`ready`&&b(g.data)},[g]),(0,d.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`locale`||e===`showReasoning`)&&n.remove(e)},[n]);let x=(0,d.useCallback)((e,t)=>n.set(e,t),[n]),S=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=u(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),b(a),v(a),await _()},[t,n,_,v]);if((0,d.useEffect)(()=>{if(p)return p(S),()=>p(null)},[p,S]),g.kind===`loading`)return(0,f.jsx)(a,{});if(g.kind===`offline`)return(0,f.jsx)(o,{port:e});if(g.kind===`error`)return(0,f.jsx)(s,{message:g.message});let C=g.data;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),S()},children:[(0,f.jsxs)(i,{title:`Profile`,hint:`Identity and display preferences for this instance.`,children:[(0,f.jsx)(l,{id:`profile-locale`,label:`Locale`,value:y.locale??C.locale??`ko`,options:h,onChange:e=>{b({...y,locale:e}),x(`locale`,{value:e,original:C.locale??`ko`,valid:!0})}}),(0,f.jsx)(c,{id:`profile-showReasoning`,label:`Show reasoning traces`,value:!!(y.showReasoning??C.showReasoning),onChange:e=>{b({...y,showReasoning:e}),x(`showReasoning`,{value:e,original:!!C.showReasoning,valid:!0})}})]}),(0,f.jsxs)(i,{title:`Avatars`,hint:`Uploads write to the instance's home folder.`,children:[(0,f.jsx)(m,{kind:`agent`,port:e}),(0,f.jsx)(m,{kind:`user`,port:e})]})]})}export{g as default};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-GpE8A-FA.js";import{a as c,i as l}from"./fields-BwOMlwS0.js";import{t as u}from"./path-utils-CHwADH-r.js";var d=e(t(),1),f=n(),p=`image/png,image/jpeg,image/webp,image/gif`;function m({kind:e,port:t}){let[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o,s]=(0,d.useState)(null),c=(0,d.useRef)(null);(0,d.useEffect)(()=>{let n=!1;return s(null),r(null),fetch(`/i/${t}/api/avatar`).then(e=>e.ok?e.json():Promise.reject(Error(`avatar HTTP ${e.status}`))).then(t=>{n||r((`data`in t&&t.data?t.data:t)[e]||null)}).catch(e=>{n||s(e instanceof Error?e.message:String(e))}),()=>{n=!0}},[e,t]);let l=()=>c.current?.click(),u=async n=>{a(!0),s(null);try{let i=await n.arrayBuffer(),a=n.type||`application/octet-stream`,o=await fetch(`/i/${t}/api/avatar/${e}/upload`,{method:`POST`,headers:{"content-type":a,"x-filename":encodeURIComponent(n.name)},body:i});if(!o.ok){let e=await o.text().catch(()=>``);throw Error(`upload failed: ${o.status} ${e}`)}let s=await o.json();r(`data`in s&&s.data?s.data:s)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1),c.current&&(c.current.value=``)}},m=async()=>{a(!0),s(null);try{let n=await fetch(`/i/${t}/api/avatar/${e}/image`,{method:`DELETE`});if(!n.ok)throw Error(`clear failed: ${n.status}`);let i=await n.json();r(`data`in i&&i.data?i.data:i)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},h=n&&n.kind===`image`?`/i/${t}${n.imageUrl}`:null,g=e===`agent`?`Agent avatar`:`User avatar`;return(0,f.jsxs)(`div`,{className:`settings-avatar-card`,children:[(0,f.jsx)(`div`,{className:`settings-avatar-preview`,"aria-label":`${g} preview`,children:h?(0,f.jsx)(`img`,{src:h,alt:`${g} current`}):(0,f.jsx)(`span`,{className:`settings-avatar-placeholder`,"aria-hidden":`true`,children:e===`agent`?`🦈`:`👤`})}),(0,f.jsxs)(`div`,{className:`settings-avatar-controls`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:g}),(0,f.jsx)(`input`,{ref:c,type:`file`,accept:p,style:{display:`none`},onChange:e=>{let t=e.target.files?.[0];t&&u(t)}}),(0,f.jsxs)(`div`,{className:`settings-avatar-buttons`,children:[(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,onClick:l,disabled:i,children:i?`Working…`:`Upload image`}),h?(0,f.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void m(),disabled:i,children:`Clear`}):null]}),o?(0,f.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:o}):null]})]})}var h=[{value:`ko`,label:`한국어 (ko)`},{value:`en`,label:`English (en)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}];function g({port:e,client:t,dirty:n,registerSave:p}){let{state:g,refresh:_,setData:v}=r(t,`/api/settings`),[y,b]=(0,d.useState)({});(0,d.useEffect)(()=>{g.kind===`ready`&&b(g.data)},[g]),(0,d.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`locale`||e===`showReasoning`)&&n.remove(e)},[n]);let x=(0,d.useCallback)((e,t)=>n.set(e,t),[n]),S=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=u(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),b(a),v(a),await _()},[t,n,_,v]);if((0,d.useEffect)(()=>{if(p)return p(S),()=>p(null)},[p,S]),g.kind===`loading`)return(0,f.jsx)(a,{});if(g.kind===`offline`)return(0,f.jsx)(o,{port:e});if(g.kind===`error`)return(0,f.jsx)(s,{message:g.message});let C=g.data;return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),S()},children:[(0,f.jsxs)(i,{title:`Profile`,hint:`Identity and display preferences for this instance.`,children:[(0,f.jsx)(l,{id:`profile-locale`,label:`Locale`,value:y.locale??C.locale??`ko`,options:h,onChange:e=>{b({...y,locale:e}),x(`locale`,{value:e,original:C.locale??`ko`,valid:!0})}}),(0,f.jsx)(c,{id:`profile-showReasoning`,label:`Show reasoning traces`,value:!!(y.showReasoning??C.showReasoning),onChange:e=>{b({...y,showReasoning:e}),x(`showReasoning`,{value:e,original:!!C.showReasoning,valid:!0})}})]}),(0,f.jsxs)(i,{title:`Avatars`,hint:`Uploads write to the instance's home folder.`,children:[(0,f.jsx)(m,{kind:`agent`,port:e}),(0,f.jsx)(m,{kind:`user`,port:e})]})]})}export{g as default};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{t as c}from"./InlineWarn-DDzeHxQw.js";var l=e(t(),1),u=n(),d=`prompt.system`;function f(e){return`prompt.template.${e}`}function p(e){return!e||!Array.isArray(e.templates)?[]:e.templates.filter(e=>!!e&&typeof e.id==`string`&&typeof e.content==`string`)}function m(e){let t=p(e),n=e?.tree,r=[],i=new Set;if(Array.isArray(n)){for(let e of n)if(!(!e||!Array.isArray(e.children)))for(let n of e.children){if(i.has(n))continue;let a=t.find(e=>e.id===n);if(!a)continue;let o=e.emoji?`${e.emoji} ${e.label} · `:`${e.label} · `;r.push({value:a.id,label:`${o}${a.id}`}),i.add(n)}}for(let e of t)i.has(e.id)||(r.push({value:e.id,label:e.id}),i.add(e.id));return r}function h(e,t){return p(e).find(e=>e.id===t)??null}function g({port:e,client:t,dirty:n,registerSave:g}){let _=r(t,`/api/prompt`),v=r(t,`/api/prompt-templates`),[y,b]=(0,l.useState)(``),[x,S]=(0,l.useState)(null),[C,w]=(0,l.useState)(``),T=(0,l.useMemo)(()=>_.state.kind===`ready`?_.state.data?.content??``:``,[_.state]),E=(0,l.useMemo)(()=>v.state.kind===`ready`?v.state.data:null,[v.state]),D=(0,l.useMemo)(()=>m(E),[E]),O=(0,l.useRef)(new Set);(0,l.useEffect)(()=>{_.state.kind===`ready`&&b(_.state.data?.content??``)},[_.state]),(0,l.useEffect)(()=>{if(!E||x!==null)return;let e=p(E);if(e.length===0)return;let t=D[0]?.value??e[0].id;S(t),w(h(E,t)?.content??``)},[E,D,x]),(0,l.useEffect)(()=>()=>{n.remove(d);for(let e of O.current)n.remove(e)},[n]);let k=(0,l.useCallback)((e,t)=>{n.set(e,t),O.current.add(e)},[n]),A=(0,l.useCallback)(e=>{b(e),n.set(d,{value:e,original:T,valid:!0})},[n,T]),j=(0,l.useCallback)(e=>{if(!x)return;w(e);let t=h(E,x)?.content??``;k(f(x),{value:e,original:t,valid:!0})},[x,k,E]),M=(0,l.useCallback)(e=>{if(!x||e===x)return;let t=f(x);if(n.pending.get(t)&&typeof window<`u`&&!window.confirm(`You have unsaved edits to "${x}". Switching will keep them pending — Save will write all dirty templates.`))return;S(e);let r=f(e),i=n.pending.get(r),a=h(E,e)?.content??``;w(i&&typeof i.value==`string`?i.value:a)},[x,n,E]),N=(0,l.useCallback)(async()=>{let e=n.saveBundle(),r=[];d in e&&r.push(t.put(`/api/prompt`,{content:e[d]}));for(let[n,i]of Object.entries(e)){if(!n.startsWith(`prompt.template.`))continue;let e=n.slice(16);r.push(t.put(`/api/prompt-templates/${e}`,{content:i}))}if(r.length!==0){for(let e of r)await e;n.clear(),O.current.clear(),await Promise.all([_.refresh(),v.refresh()])}},[t,n,_,v]);if((0,l.useEffect)(()=>{if(g)return g(N),()=>g(null)},[g,N]),_.state.kind===`loading`||v.state.kind===`loading`)return(0,u.jsx)(a,{});if(_.state.kind===`offline`||v.state.kind===`offline`)return(0,u.jsx)(o,{port:e});if(_.state.kind===`error`)return(0,u.jsx)(s,{message:_.state.message});if(v.state.kind===`error`)return(0,u.jsx)(s,{message:v.state.message});let P=p(E),F=x?h(E,x)?.content??``:``,I=x!==null&&C!==F;return(0,u.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,u.jsxs)(i,{title:`System prompt`,hint:`The agent's a2/system prompt. Saved to a2.md; regenerates the merged b prompt.`,children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-system-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`a2.md`}),(0,u.jsx)(`textarea`,{id:`prompt-system-body`,className:`settings-field-monospace`,value:y,rows:14,spellCheck:!1,onChange:e=>A(e.target.value)})]}),y!==T&&(0,u.jsx)(`p`,{className:`settings-section-hint`,children:`Pending edits to a2.md.`})]}),(0,u.jsx)(i,{title:`Templates`,hint:`Edit individual prompt template bodies. Saving regenerates b automatically.`,children:P.length===0?(0,u.jsx)(c,{tone:`info`,children:`No templates returned by /api/prompt-templates.`}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-select`,htmlFor:`prompt-template-select`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,u.jsx)(`select`,{id:`prompt-template-select`,value:x??``,onChange:e=>M(e.target.value),children:D.map(e=>(0,u.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-template-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:x?`${x}.md`:`Template body`}),(0,u.jsx)(`textarea`,{id:`prompt-template-body`,className:`settings-field-monospace`,value:C,rows:16,spellCheck:!1,disabled:!x,onChange:e=>j(e.target.value)})]}),I&&(0,u.jsxs)(`p`,{className:`settings-section-hint`,children:[`Pending edits to `,x,`.md.`]})]})})]})}export{m as buildTemplateOptions,g as default,h as findTemplate,p as flattenTemplates,f as templateDirtyKey};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-GpE8A-FA.js";import{t as c}from"./InlineWarn-D-fmcQXD.js";var l=e(t(),1),u=n(),d=`prompt.system`;function f(e){return`prompt.template.${e}`}function p(e){return!e||!Array.isArray(e.templates)?[]:e.templates.filter(e=>!!e&&typeof e.id==`string`&&typeof e.content==`string`)}function m(e){let t=p(e),n=e?.tree,r=[],i=new Set;if(Array.isArray(n)){for(let e of n)if(!(!e||!Array.isArray(e.children)))for(let n of e.children){if(i.has(n))continue;let a=t.find(e=>e.id===n);if(!a)continue;let o=e.emoji?`${e.emoji} ${e.label} · `:`${e.label} · `;r.push({value:a.id,label:`${o}${a.id}`}),i.add(n)}}for(let e of t)i.has(e.id)||(r.push({value:e.id,label:e.id}),i.add(e.id));return r}function h(e,t){return p(e).find(e=>e.id===t)??null}function g({port:e,client:t,dirty:n,registerSave:g}){let _=r(t,`/api/prompt`),v=r(t,`/api/prompt-templates`),[y,b]=(0,l.useState)(``),[x,S]=(0,l.useState)(null),[C,w]=(0,l.useState)(``),T=(0,l.useMemo)(()=>_.state.kind===`ready`?_.state.data?.content??``:``,[_.state]),E=(0,l.useMemo)(()=>v.state.kind===`ready`?v.state.data:null,[v.state]),D=(0,l.useMemo)(()=>m(E),[E]),O=(0,l.useRef)(new Set);(0,l.useEffect)(()=>{_.state.kind===`ready`&&b(_.state.data?.content??``)},[_.state]),(0,l.useEffect)(()=>{if(!E||x!==null)return;let e=p(E);if(e.length===0)return;let t=D[0]?.value??e[0].id;S(t),w(h(E,t)?.content??``)},[E,D,x]),(0,l.useEffect)(()=>()=>{n.remove(d);for(let e of O.current)n.remove(e)},[n]);let k=(0,l.useCallback)((e,t)=>{n.set(e,t),O.current.add(e)},[n]),A=(0,l.useCallback)(e=>{b(e),n.set(d,{value:e,original:T,valid:!0})},[n,T]),j=(0,l.useCallback)(e=>{if(!x)return;w(e);let t=h(E,x)?.content??``;k(f(x),{value:e,original:t,valid:!0})},[x,k,E]),M=(0,l.useCallback)(e=>{if(!x||e===x)return;let t=f(x);if(n.pending.get(t)&&typeof window<`u`&&!window.confirm(`You have unsaved edits to "${x}". Switching will keep them pending — Save will write all dirty templates.`))return;S(e);let r=f(e),i=n.pending.get(r),a=h(E,e)?.content??``;w(i&&typeof i.value==`string`?i.value:a)},[x,n,E]),N=(0,l.useCallback)(async()=>{let e=n.saveBundle(),r=[];d in e&&r.push(t.put(`/api/prompt`,{content:e[d]}));for(let[n,i]of Object.entries(e)){if(!n.startsWith(`prompt.template.`))continue;let e=n.slice(16);r.push(t.put(`/api/prompt-templates/${e}`,{content:i}))}if(r.length!==0){for(let e of r)await e;n.clear(),O.current.clear(),await Promise.all([_.refresh(),v.refresh()])}},[t,n,_,v]);if((0,l.useEffect)(()=>{if(g)return g(N),()=>g(null)},[g,N]),_.state.kind===`loading`||v.state.kind===`loading`)return(0,u.jsx)(a,{});if(_.state.kind===`offline`||v.state.kind===`offline`)return(0,u.jsx)(o,{port:e});if(_.state.kind===`error`)return(0,u.jsx)(s,{message:_.state.message});if(v.state.kind===`error`)return(0,u.jsx)(s,{message:v.state.message});let P=p(E),F=x?h(E,x)?.content??``:``,I=x!==null&&C!==F;return(0,u.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,u.jsxs)(i,{title:`System prompt`,hint:`The agent's a2/system prompt. Saved to a2.md; regenerates the merged b prompt.`,children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-system-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`a2.md`}),(0,u.jsx)(`textarea`,{id:`prompt-system-body`,className:`settings-field-monospace`,value:y,rows:14,spellCheck:!1,onChange:e=>A(e.target.value)})]}),y!==T&&(0,u.jsx)(`p`,{className:`settings-section-hint`,children:`Pending edits to a2.md.`})]}),(0,u.jsx)(i,{title:`Templates`,hint:`Edit individual prompt template bodies. Saving regenerates b automatically.`,children:P.length===0?(0,u.jsx)(c,{tone:`info`,children:`No templates returned by /api/prompt-templates.`}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`label`,{className:`settings-field settings-field-select`,htmlFor:`prompt-template-select`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,u.jsx)(`select`,{id:`prompt-template-select`,value:x??``,onChange:e=>M(e.target.value),children:D.map(e=>(0,u.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,u.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-template-body`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:x?`${x}.md`:`Template body`}),(0,u.jsx)(`textarea`,{id:`prompt-template-body`,className:`settings-field-monospace`,value:C,rows:16,spellCheck:!1,disabled:!x,onChange:e=>j(e.target.value)})]}),I&&(0,u.jsxs)(`p`,{className:`settings-section-hint`,children:[`Pending edits to `,x,`.md.`]})]})})]})}export{m as buildTemplateOptions,g as default,h as findTemplate,p as flattenTemplates,f as templateDirtyKey};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{i as c,o as l,s as u,t as d}from"./fields-zkeByFQW.js";import{t as f}from"./path-utils-LsJeDCKF.js";var p=e(t(),1),m=n();function h({title:e,hint:t,children:n}){return(0,m.jsxs)(`fieldset`,{className:`settings-engine-subsection`,children:[(0,m.jsx)(`legend`,{className:`settings-engine-subsection-legend`,children:e}),t?(0,m.jsx)(`p`,{className:`settings-engine-subsection-hint`,children:t}):null,(0,m.jsx)(`div`,{className:`settings-engine-subsection-body`,children:n})]})}var g=[`auto`,`gemini`,`openai`,`whisper`,`vertex`],_={auto:`Auto (try in order)`,gemini:`Gemini`,openai:`OpenAI`,whisper:`Whisper (local MLX)`,vertex:`Vertex AI`};function v(e){return e===`auto`?[`gemini`,`openai`,`whisper`,`vertex`]:[e]}function y(e){if(e.trim()===``)return{valid:!0,error:null};try{return JSON.parse(e),{valid:!0,error:null}}catch(e){return{valid:!1,error:e instanceof Error?e.message:`Invalid JSON`}}}var b=[`stt.engine`,`stt.geminiApiKey`,`stt.geminiModel`,`stt.openaiApiKey`,`stt.openaiBaseUrl`,`stt.openaiModel`,`stt.whisperModel`,`stt.vertexConfig`];function x(e){return g.includes(e)?e:`auto`}function S({port:e,client:t,dirty:n,registerSave:S}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)(`auto`),[O,k]=(0,p.useState)(``),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(``),[P,F]=(0,p.useState)(``),[I,L]=(0,p.useState)(``),[R,z]=(0,p.useState)(``),[B,V]=(0,p.useState)(``),[H,U]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(C.kind!==`ready`)return;let e=C.data.stt||{};D(x(e.engine)),k(``),j(e.geminiModel??``),N(``),F(e.openaiBaseUrl??``),L(e.openaiModel??``),z(e.whisperModel??``),V(e.vertexConfig??``),U(null)},[C]),(0,p.useEffect)(()=>()=>{for(let e of b)n.remove(e)},[n]);let W=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,p.useMemo)(()=>C.kind===`ready`&&C.data.stt||{},[C]),K=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),T(a);let o=a.stt||{};D(x(o.engine)),k(``),j(o.geminiModel??``),N(``),F(o.openaiBaseUrl??``),L(o.openaiModel??``),z(o.whisperModel??``),V(o.vertexConfig??``),U(null),await w()},[t,n,w,T]);if((0,p.useEffect)(()=>{if(S)return S(K),()=>S(null)},[S,K]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let q=v(E),J=q.includes(`gemini`),Y=q.includes(`openai`),X=q.includes(`whisper`),Z=q.includes(`vertex`),Q=G.geminiKeySet?`••••••••${G.geminiKeyLast4??``}`:`(empty)`,$=G.openaiKeySet?`••••••••${G.openaiKeyLast4??``}`:`(empty)`;return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),K()},children:[(0,m.jsx)(i,{title:`Engine`,hint:`Pick a single engine, or 'auto' to fall back through the ladder.`,children:(0,m.jsx)(c,{id:`stt-engine`,label:`Speech-to-text engine`,value:E,options:g.map(e=>({value:e,label:_[e]})),onChange:e=>{let t=x(e);D(t),W(`stt.engine`,{value:t,original:x(G.engine),valid:!0})}})}),J?(0,m.jsx)(i,{title:`Gemini`,hint:`Google AI Studio key. Used by the Gemini transcription path.`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-gemini-key`,label:`API key`,value:O,placeholder:Q,onChange:e=>{if(k(e),e.length===0){n.remove(`stt.geminiApiKey`);return}W(`stt.geminiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-gemini-model`,label:`Model`,value:A,placeholder:`gemini-2.5-flash-lite`,onChange:e=>{j(e),W(`stt.geminiModel`,{value:e,original:G.geminiModel??``,valid:!0})}})]})}):null,Y?(0,m.jsx)(i,{title:`OpenAI`,hint:`Compatible with OpenAI-style transcription endpoints (incl. self-hosted).`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-openai-key`,label:`API key`,value:M,placeholder:$,onChange:e=>{if(N(e),e.length===0){n.remove(`stt.openaiApiKey`);return}W(`stt.openaiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-base-url`,label:`Base URL (optional)`,value:P,placeholder:`https://api.openai.com/v1`,onChange:e=>{F(e),W(`stt.openaiBaseUrl`,{value:e,original:G.openaiBaseUrl??``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-model`,label:`Model`,value:I,placeholder:`whisper-1`,onChange:e=>{L(e),W(`stt.openaiModel`,{value:e,original:G.openaiModel??``,valid:!0})}})]})}):null,X?(0,m.jsx)(i,{title:`Whisper (local MLX)`,hint:`Runs on-device via mlx-whisper. No API key required.`,children:(0,m.jsx)(h,{title:`Model`,children:(0,m.jsx)(u,{id:`stt-whisper-model`,label:`Model identifier`,value:R,placeholder:`mlx-community/whisper-large-v3-mlx`,onChange:e=>{z(e),W(`stt.whisperModel`,{value:e,original:G.whisperModel??``,valid:!0})}})})}):null,Z?(0,m.jsx)(i,{title:`Vertex AI`,hint:`Service-account credentials JSON for Google Cloud Vertex transcription.`,children:(0,m.jsxs)(h,{title:`Service account`,hint:`Paste the service-account credentials JSON. Treated as a secret — invalid JSON refuses to save.`,children:[(0,m.jsx)(d,{id:`stt-vertex-config`,label:`Credentials JSON`,value:B,onChange:(e,t)=>{let n=typeof e==`string`?e:e==null?``:JSON.stringify(e);V(n);let r=y(n);U(t?null:r.error),W(`stt.vertexConfig`,{value:n,original:G.vertexConfig??``,valid:t&&r.valid})}}),H?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:H}):null]})}):null,(0,m.jsx)(i,{title:`Probe`,hint:`A live mic-test isn't available yet — verify by triggering speech-to-text from the active channel.`,children:(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`No backend self-test endpoint is exposed for speech today; this lands as a Phase 9 polish.`})})]})}export{g as STT_ENGINES,S as default,v as revealsForEngine,y as validateVertexConfig};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-GpE8A-FA.js";import{i as c,o as l,s as u,t as d}from"./fields-BwOMlwS0.js";import{t as f}from"./path-utils-CHwADH-r.js";var p=e(t(),1),m=n();function h({title:e,hint:t,children:n}){return(0,m.jsxs)(`fieldset`,{className:`settings-engine-subsection`,children:[(0,m.jsx)(`legend`,{className:`settings-engine-subsection-legend`,children:e}),t?(0,m.jsx)(`p`,{className:`settings-engine-subsection-hint`,children:t}):null,(0,m.jsx)(`div`,{className:`settings-engine-subsection-body`,children:n})]})}var g=[`auto`,`gemini`,`openai`,`whisper`,`vertex`],_={auto:`Auto (try in order)`,gemini:`Gemini`,openai:`OpenAI`,whisper:`Whisper (local MLX)`,vertex:`Vertex AI`};function v(e){return e===`auto`?[`gemini`,`openai`,`whisper`,`vertex`]:[e]}function y(e){if(e.trim()===``)return{valid:!0,error:null};try{return JSON.parse(e),{valid:!0,error:null}}catch(e){return{valid:!1,error:e instanceof Error?e.message:`Invalid JSON`}}}var b=[`stt.engine`,`stt.geminiApiKey`,`stt.geminiModel`,`stt.openaiApiKey`,`stt.openaiBaseUrl`,`stt.openaiModel`,`stt.whisperModel`,`stt.vertexConfig`];function x(e){return g.includes(e)?e:`auto`}function S({port:e,client:t,dirty:n,registerSave:S}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,p.useState)(`auto`),[O,k]=(0,p.useState)(``),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(``),[P,F]=(0,p.useState)(``),[I,L]=(0,p.useState)(``),[R,z]=(0,p.useState)(``),[B,V]=(0,p.useState)(``),[H,U]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(C.kind!==`ready`)return;let e=C.data.stt||{};D(x(e.engine)),k(``),j(e.geminiModel??``),N(``),F(e.openaiBaseUrl??``),L(e.openaiModel??``),z(e.whisperModel??``),V(e.vertexConfig??``),U(null)},[C]),(0,p.useEffect)(()=>()=>{for(let e of b)n.remove(e)},[n]);let W=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,p.useMemo)(()=>C.kind===`ready`&&C.data.stt||{},[C]),K=(0,p.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),T(a);let o=a.stt||{};D(x(o.engine)),k(``),j(o.geminiModel??``),N(``),F(o.openaiBaseUrl??``),L(o.openaiModel??``),z(o.whisperModel??``),V(o.vertexConfig??``),U(null),await w()},[t,n,w,T]);if((0,p.useEffect)(()=>{if(S)return S(K),()=>S(null)},[S,K]),C.kind===`loading`)return(0,m.jsx)(a,{});if(C.kind===`offline`)return(0,m.jsx)(o,{port:e});if(C.kind===`error`)return(0,m.jsx)(s,{message:C.message});let q=v(E),J=q.includes(`gemini`),Y=q.includes(`openai`),X=q.includes(`whisper`),Z=q.includes(`vertex`),Q=G.geminiKeySet?`••••••••${G.geminiKeyLast4??``}`:`(empty)`,$=G.openaiKeySet?`••••••••${G.openaiKeyLast4??``}`:`(empty)`;return(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),K()},children:[(0,m.jsx)(i,{title:`Engine`,hint:`Pick a single engine, or 'auto' to fall back through the ladder.`,children:(0,m.jsx)(c,{id:`stt-engine`,label:`Speech-to-text engine`,value:E,options:g.map(e=>({value:e,label:_[e]})),onChange:e=>{let t=x(e);D(t),W(`stt.engine`,{value:t,original:x(G.engine),valid:!0})}})}),J?(0,m.jsx)(i,{title:`Gemini`,hint:`Google AI Studio key. Used by the Gemini transcription path.`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-gemini-key`,label:`API key`,value:O,placeholder:Q,onChange:e=>{if(k(e),e.length===0){n.remove(`stt.geminiApiKey`);return}W(`stt.geminiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-gemini-model`,label:`Model`,value:A,placeholder:`gemini-2.5-flash-lite`,onChange:e=>{j(e),W(`stt.geminiModel`,{value:e,original:G.geminiModel??``,valid:!0})}})]})}):null,Y?(0,m.jsx)(i,{title:`OpenAI`,hint:`Compatible with OpenAI-style transcription endpoints (incl. self-hosted).`,children:(0,m.jsxs)(h,{title:`Credentials`,children:[(0,m.jsx)(l,{id:`stt-openai-key`,label:`API key`,value:M,placeholder:$,onChange:e=>{if(N(e),e.length===0){n.remove(`stt.openaiApiKey`);return}W(`stt.openaiApiKey`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-base-url`,label:`Base URL (optional)`,value:P,placeholder:`https://api.openai.com/v1`,onChange:e=>{F(e),W(`stt.openaiBaseUrl`,{value:e,original:G.openaiBaseUrl??``,valid:!0})}}),(0,m.jsx)(u,{id:`stt-openai-model`,label:`Model`,value:I,placeholder:`whisper-1`,onChange:e=>{L(e),W(`stt.openaiModel`,{value:e,original:G.openaiModel??``,valid:!0})}})]})}):null,X?(0,m.jsx)(i,{title:`Whisper (local MLX)`,hint:`Runs on-device via mlx-whisper. No API key required.`,children:(0,m.jsx)(h,{title:`Model`,children:(0,m.jsx)(u,{id:`stt-whisper-model`,label:`Model identifier`,value:R,placeholder:`mlx-community/whisper-large-v3-mlx`,onChange:e=>{z(e),W(`stt.whisperModel`,{value:e,original:G.whisperModel??``,valid:!0})}})})}):null,Z?(0,m.jsx)(i,{title:`Vertex AI`,hint:`Service-account credentials JSON for Google Cloud Vertex transcription.`,children:(0,m.jsxs)(h,{title:`Service account`,hint:`Paste the service-account credentials JSON. Treated as a secret — invalid JSON refuses to save.`,children:[(0,m.jsx)(d,{id:`stt-vertex-config`,label:`Credentials JSON`,value:B,onChange:(e,t)=>{let n=typeof e==`string`?e:e==null?``:JSON.stringify(e);V(n);let r=y(n);U(t?null:r.error),W(`stt.vertexConfig`,{value:n,original:G.vertexConfig??``,valid:t&&r.valid})}}),H?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:H}):null]})}):null,(0,m.jsx)(i,{title:`Probe`,hint:`A live mic-test isn't available yet — verify by triggering speech-to-text from the active channel.`,children:(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`No backend self-test endpoint is exposed for speech today; this lands as a Phase 9 polish.`})})]})}export{g as STT_ENGINES,S as default,v as revealsForEngine,y as validateVertexConfig};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,t as o}from"./page-shell-LF7vVVfG.js";import{a as s,o as c,s as l}from"./fields-zkeByFQW.js";var u=e(t(),1),d=n(),f=3457,p=3506;function m(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async put(e,t){let n=await fetch(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PUT ${e} → ${n.status}`);return await n.json()},async delete(e){let t=await fetch(e,{method:`DELETE`});if(!t.ok)throw Error(`DELETE ${e} → ${t.status}`);return await t.json()}}}var h=[`hub.enabled`,`hub.token`,`hub.chatId`,`hub.defaultPort`];function g({port:e,client:t,dirty:n,registerSave:g,managerClient:_}){let{state:v}=r(t,`__telegram_hub_unused__`,[e]),[y,b]=(0,u.useState)(null),[x,S]=(0,u.useState)(null),[C,w]=(0,u.useState)(null),[T,E]=(0,u.useState)(!1),[D,O]=(0,u.useState)(``),[k,A]=(0,u.useState)(``),[j,M]=(0,u.useState)(f),N=_||m(),P=(0,u.useCallback)(async()=>{w(null);try{let e=await N.get(`/api/dashboard/telegram-hub`);b(e.config),S(e.runtime||null),E(e.config.enabled),A(e.config.chatId),M(e.config.defaultPort),O(``)}catch(e){w(e instanceof Error?e.message:String(e))}},[N]);(0,u.useEffect)(()=>{P()},[e]),(0,u.useEffect)(()=>()=>{for(let e of h)n.remove(e)},[n]);let F=(0,u.useCallback)(async()=>{let e={enabled:T,chatId:k.trim(),defaultPort:j};D.trim()&&(e.token=D.trim());let t=await N.put(`/api/dashboard/telegram-hub`,e);b(t.config),S(t.runtime||null),O(``);for(let e of h)n.remove(e)},[T,k,j,D,N,n]);(0,u.useEffect)(()=>{if(g)return g(F),()=>g(null)},[g,F]);let I=(0,u.useCallback)(async e=>{try{await N.delete(`/api/dashboard/telegram-hub/routes/${encodeURIComponent(e.chatId)}/${encodeURIComponent(e.threadId)}`)}catch(e){w(e instanceof Error?e.message:String(e))}await P()},[N,P]);return C?(0,d.jsx)(o,{message:C}):y?(0,d.jsxs)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),F()},children:[(0,d.jsxs)(i,{title:`Telegram hub`,hint:`One dashboard-owned bot routes Telegram chat topics to instances 3457–3506.`,children:[(0,d.jsx)(s,{id:`hub-enabled`,label:`Enable hub`,value:T,onChange:e=>{E(e),n.set(`hub.enabled`,{value:e,original:y.enabled,valid:!0})}}),(0,d.jsx)(c,{id:`hub-token`,label:`Bot token`,value:D,placeholder:y.hasToken?`•••• (saved)`:`paste bot token`,onChange:e=>{O(e),n.set(`hub.token`,{value:e,original:``,valid:!0})}}),(0,d.jsx)(l,{id:`hub-chat-id`,label:`Hub chat ID`,value:k,placeholder:`823… or -100…`,onChange:e=>{A(e),n.set(`hub.chatId`,{value:e,original:y.chatId,valid:!0})}}),x?(0,d.jsxs)(`p`,{className:`settings-help`,children:[`Runtime: `,x.state,x.chatId?` · ${x.chatId}`:``,x.error?` · ${x.error}`:``]}):null,(0,d.jsxs)(`label`,{className:`settings-field`,htmlFor:`hub-default-port`,children:[(0,d.jsx)(`span`,{className:`settings-field-label`,children:`Default port`}),(0,d.jsx)(`input`,{id:`hub-default-port`,type:`number`,min:f,max:p,value:j,onChange:e=>{let t=Number(e.target.value);M(t),n.set(`hub.defaultPort`,{value:t,original:y.defaultPort,valid:t>=f&&t<=p})}})]})]}),(0,d.jsx)(i,{title:`Topic routes`,hint:`(chatId, threadId) → instance port. Bind in a bot private topic or group topic with /setthread <port>.`,children:y.routes.length===0?(0,d.jsx)(`p`,{className:`settings-empty`,children:`No routes yet.`}):(0,d.jsxs)(`table`,{className:`settings-table`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`th`,{children:`Thread`}),(0,d.jsx)(`th`,{children:`Port`}),(0,d.jsx)(`th`,{children:`Label`}),(0,d.jsx)(`th`,{children:`Model`}),(0,d.jsx)(`th`,{children:`Prompt`}),(0,d.jsx)(`th`,{children:`On`}),(0,d.jsx)(`th`,{})]})}),(0,d.jsx)(`tbody`,{children:y.routes.map(e=>(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`td`,{children:e.threadId}),(0,d.jsx)(`td`,{children:e.port}),(0,d.jsx)(`td`,{children:e.label||`—`}),(0,d.jsx)(`td`,{children:e.model||`—`}),(0,d.jsx)(`td`,{children:e.systemPrompt?`✓`:`—`}),(0,d.jsx)(`td`,{children:e.enabled?`✓`:`—`}),(0,d.jsx)(`td`,{children:(0,d.jsx)(`button`,{type:`button`,onClick:()=>void I(e),children:`Delete`})})]},`${e.chatId}:${e.threadId}`))})]})})]}):(0,d.jsx)(a,{label:`Loading Telegram hub…`})}var _={defaultManagerClient:m};export{_ as __test__,g as default};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,t as o}from"./page-shell-GpE8A-FA.js";import{a as s,o as c,s as l}from"./fields-BwOMlwS0.js";var u=e(t(),1),d=n(),f=3457,p=3506;function m(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async put(e,t){let n=await fetch(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PUT ${e} → ${n.status}`);return await n.json()},async delete(e){let t=await fetch(e,{method:`DELETE`});if(!t.ok)throw Error(`DELETE ${e} → ${t.status}`);return await t.json()}}}var h=[`hub.enabled`,`hub.token`,`hub.chatId`,`hub.defaultPort`];function g({port:e,client:t,dirty:n,registerSave:g,managerClient:_}){let{state:v}=r(t,`__telegram_hub_unused__`,[e]),[y,b]=(0,u.useState)(null),[x,S]=(0,u.useState)(null),[C,w]=(0,u.useState)(null),[T,E]=(0,u.useState)(!1),[D,O]=(0,u.useState)(``),[k,A]=(0,u.useState)(``),[j,M]=(0,u.useState)(f),N=_||m(),P=(0,u.useCallback)(async()=>{w(null);try{let e=await N.get(`/api/dashboard/telegram-hub`);b(e.config),S(e.runtime||null),E(e.config.enabled),A(e.config.chatId),M(e.config.defaultPort),O(``)}catch(e){w(e instanceof Error?e.message:String(e))}},[N]);(0,u.useEffect)(()=>{P()},[e]),(0,u.useEffect)(()=>()=>{for(let e of h)n.remove(e)},[n]);let F=(0,u.useCallback)(async()=>{let e={enabled:T,chatId:k.trim(),defaultPort:j};D.trim()&&(e.token=D.trim());let t=await N.put(`/api/dashboard/telegram-hub`,e);b(t.config),S(t.runtime||null),O(``);for(let e of h)n.remove(e)},[T,k,j,D,N,n]);(0,u.useEffect)(()=>{if(g)return g(F),()=>g(null)},[g,F]);let I=(0,u.useCallback)(async e=>{try{await N.delete(`/api/dashboard/telegram-hub/routes/${encodeURIComponent(e.chatId)}/${encodeURIComponent(e.threadId)}`)}catch(e){w(e instanceof Error?e.message:String(e))}await P()},[N,P]);return C?(0,d.jsx)(o,{message:C}):y?(0,d.jsxs)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),F()},children:[(0,d.jsxs)(i,{title:`Telegram hub`,hint:`One dashboard-owned bot routes Telegram chat topics to instances 3457–3506.`,children:[(0,d.jsx)(s,{id:`hub-enabled`,label:`Enable hub`,value:T,onChange:e=>{E(e),n.set(`hub.enabled`,{value:e,original:y.enabled,valid:!0})}}),(0,d.jsx)(c,{id:`hub-token`,label:`Bot token`,value:D,placeholder:y.hasToken?`•••• (saved)`:`paste bot token`,onChange:e=>{O(e),n.set(`hub.token`,{value:e,original:``,valid:!0})}}),(0,d.jsx)(l,{id:`hub-chat-id`,label:`Hub chat ID`,value:k,placeholder:`823… or -100…`,onChange:e=>{A(e),n.set(`hub.chatId`,{value:e,original:y.chatId,valid:!0})}}),x?(0,d.jsxs)(`p`,{className:`settings-help`,children:[`Runtime: `,x.state,x.chatId?` · ${x.chatId}`:``,x.error?` · ${x.error}`:``]}):null,(0,d.jsxs)(`label`,{className:`settings-field`,htmlFor:`hub-default-port`,children:[(0,d.jsx)(`span`,{className:`settings-field-label`,children:`Default port`}),(0,d.jsx)(`input`,{id:`hub-default-port`,type:`number`,min:f,max:p,value:j,onChange:e=>{let t=Number(e.target.value);M(t),n.set(`hub.defaultPort`,{value:t,original:y.defaultPort,valid:t>=f&&t<=p})}})]})]}),(0,d.jsx)(i,{title:`Topic routes`,hint:`(chatId, threadId) → instance port. Bind in a bot private topic or group topic with /setthread <port>.`,children:y.routes.length===0?(0,d.jsx)(`p`,{className:`settings-empty`,children:`No routes yet.`}):(0,d.jsxs)(`table`,{className:`settings-table`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`th`,{children:`Thread`}),(0,d.jsx)(`th`,{children:`Port`}),(0,d.jsx)(`th`,{children:`Label`}),(0,d.jsx)(`th`,{children:`Model`}),(0,d.jsx)(`th`,{children:`Prompt`}),(0,d.jsx)(`th`,{children:`On`}),(0,d.jsx)(`th`,{})]})}),(0,d.jsx)(`tbody`,{children:y.routes.map(e=>(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(`td`,{children:e.threadId}),(0,d.jsx)(`td`,{children:e.port}),(0,d.jsx)(`td`,{children:e.label||`—`}),(0,d.jsx)(`td`,{children:e.model||`—`}),(0,d.jsx)(`td`,{children:e.systemPrompt?`✓`:`—`}),(0,d.jsx)(`td`,{children:e.enabled?`✓`:`—`}),(0,d.jsx)(`td`,{children:(0,d.jsx)(`button`,{type:`button`,onClick:()=>void I(e),children:`Delete`})})]},`${e.chatId}:${e.threadId}`))})]})})]}):(0,d.jsx)(a,{label:`Loading Telegram hub…`})}var _={defaultManagerClient:m};export{_ as __test__,g as default};
@@ -1,4 +1,4 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{t as r}from"./desktop-bridge-CvdhnJQo.js";import{a as i,i as a,r as o}from"./folder-drag-payload-Bhln9Mk2.js";var s=e(t(),1),c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},d=(e,t,n,r)=>{for(var i=r>1?void 0:r?l(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&c(t,n,i),i},f=(e,t)=>(n,r)=>t(n,r,e),p=`Terminal input`,m={get:()=>p,set:e=>p=e},h=`Too much output to announce, navigate to rows manually to read`,g={get:()=>h,set:e=>h=e};function _(e){return e.replace(/\r?\n/g,`\r`)}function v(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function ee(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function te(e,t,n,r){e.stopPropagation(),e.clipboardData&&ne(e.clipboardData.getData(`text/plain`),t,n,r)}function ne(e,t,n,r){e=_(e),e=v(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function re(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function ie(e,t,n,r,i){re(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function y(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function b(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var ae=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},x=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},oe=``,se=` `,ce=class e{constructor(){this.fg=0,this.bg=0,this.extended=new S}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},S=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},C=class e extends ce{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new S,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?y(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},le=`di$target`,ue=`di$dependencies`,w=new Map;function de(e){return e[ue]||[]}function T(e){if(w.has(e))return w.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);fe(t,e,r)};return t._id=e,w.set(e,t),t}function fe(e,t,n){t[le]===t?t[ue].push({id:e,index:n}):(t[ue]=[{id:e,index:n}],t[le]=t)}var E=T(`BufferService`),pe=T(`CoreMouseService`),D=T(`CoreService`),me=T(`CharsetService`),he=T(`InstantiationService`),ge=T(`LogService`),O=T(`OptionsService`),_e=T(`OscLinkService`),ve=T(`UnicodeService`),ye=T(`DecorationService`),be=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new C,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):xe(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};be=d([f(0,E),f(1,O),f(2,_e)],be);function xe(e,t){if(confirm(`Do you want to navigate to ${t}?
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{t as r}from"./desktop-bridge-DtydAvqu.js";import{a as i,i as a,r as o}from"./folder-drag-payload-CJ0dxhZa.js";var s=e(t(),1),c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},d=(e,t,n,r)=>{for(var i=r>1?void 0:r?l(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&c(t,n,i),i},f=(e,t)=>(n,r)=>t(n,r,e),p=`Terminal input`,m={get:()=>p,set:e=>p=e},h=`Too much output to announce, navigate to rows manually to read`,g={get:()=>h,set:e=>h=e};function _(e){return e.replace(/\r?\n/g,`\r`)}function v(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function ee(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function te(e,t,n,r){e.stopPropagation(),e.clipboardData&&ne(e.clipboardData.getData(`text/plain`),t,n,r)}function ne(e,t,n,r){e=_(e),e=v(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function re(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function ie(e,t,n,r,i){re(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function y(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function b(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var ae=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},x=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},oe=``,se=` `,ce=class e{constructor(){this.fg=0,this.bg=0,this.extended=new S}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},S=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},C=class e extends ce{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new S,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?y(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},le=`di$target`,ue=`di$dependencies`,w=new Map;function de(e){return e[ue]||[]}function T(e){if(w.has(e))return w.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);fe(t,e,r)};return t._id=e,w.set(e,t),t}function fe(e,t,n){t[le]===t?t[ue].push({id:e,index:n}):(t[ue]=[{id:e,index:n}],t[le]=t)}var E=T(`BufferService`),pe=T(`CoreMouseService`),D=T(`CoreService`),me=T(`CharsetService`),he=T(`InstantiationService`),ge=T(`LogService`),O=T(`OptionsService`),_e=T(`OscLinkService`),ve=T(`UnicodeService`),ye=T(`DecorationService`),be=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new C,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):xe(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};be=d([f(0,E),f(1,O),f(2,_e)],be);function xe(e,t){if(confirm(`Do you want to navigate to ${t}?
2
2
 
3
3
  WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(`Opening link blocked as opener could not be cleared`)}}var Se=T(`CharSizeService`),Ce=T(`CoreBrowserService`),we=T(`MouseService`),Te=T(`RenderService`),Ee=T(`SelectionService`),De=T(`CharacterJoinerService`),Oe=T(`ThemeService`),ke=T(`LinkProviderService`),Ae=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Ie.isErrorNoTelemetry(e)?new Ie(e.message+`
4
4
 
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";var r=e(t(),1),i=n(),a=[{value:`telegram`,label:`Telegram`},{value:`discord`,label:`Discord`},{value:`slack`,label:`Slack`}];function o({original:e,dirty:t,idPrefix:n=`channel`}){let[o,s]=(0,r.useState)(e??`telegram`),c=(0,r.useCallback)(n=>{s(n),t.set(`channel`,{value:n,original:e??`telegram`,valid:!0})},[t,e]);return(0,i.jsxs)(`fieldset`,{className:`settings-field settings-field-active-channel`,"aria-label":`Active inbound channel`,children:[(0,i.jsx)(`legend`,{className:`settings-field-label`,children:`Active inbound channel (chat replies)`}),(0,i.jsx)(`div`,{className:`settings-active-channel-options`,role:`radiogroup`,children:a.map(e=>{let t=`${n}-${e.value}`,r=o===e.value;return(0,i.jsxs)(`label`,{htmlFor:t,className:`settings-radio`,children:[(0,i.jsx)(`input`,{id:t,type:`radio`,name:n,value:e.value,checked:r,onChange:()=>c(e.value)}),(0,i.jsx)(`span`,{children:e.label})]},e.value)})})]})}function s(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function c(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t,r=n.activeInbound;if(r!==`telegram`&&r!==`discord`&&r!==`slack`||!s(n.telegram)||!s(n.discord))return null;let i=s(n.slack)?n.slack:{configured:!1,activeInbound:!1,sendCapable:!1,reason:`unavailable`};return{activeInbound:r,telegram:n.telegram,discord:n.discord,slack:i}}function l(e){let t=[];return t.push(e.configured?`Configured`:`Not configured`),e.sendCapable&&t.push(`Send-capable`),e.activeInbound&&t.push(`Active inbound`),t}function u({client:e,channel:t}){let[n,a]=(0,r.useState)(null),[o,s]=(0,r.useState)(null),u=(0,r.useRef)(!0),d=(0,r.useCallback)(async()=>{try{let t=await e.get(`/api/health`);if(!u.current)return;let n=c(t);a(n),s(n?null:`Channel health unavailable on this instance.`)}catch(e){if(!u.current)return;a(null),s(e instanceof Error?e.message:String(e))}},[e]);(0,r.useEffect)(()=>(u.current=!0,d(),()=>{u.current=!1}),[d]);let f=n?.[t]??null,p=!!(f?.configured&&f.sendCapable&&!f.activeInbound);return(0,i.jsxs)(`div`,{className:`settings-transport-status`,role:`status`,"aria-live":`polite`,children:[o?(0,i.jsx)(`p`,{className:`settings-field-hint`,children:o}):null,f?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:`settings-transport-chips`,children:l(f).map(e=>(0,i.jsx)(`span`,{className:`settings-health-pill is-ok`,children:e},e))}),p?(0,i.jsx)(`p`,{className:`settings-field-hint`,children:`This transport is not receiving inbound messages, but send-only delivery remains available.`}):null]}):null,(0,i.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void d(),children:`Refresh transport status`})]})}export{o as n,u as t};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";var r=e(t(),1),i=n(),a=[{value:`telegram`,label:`Telegram`},{value:`discord`,label:`Discord`},{value:`slack`,label:`Slack`}];function o({original:e,dirty:t,idPrefix:n=`channel`}){let[o,s]=(0,r.useState)(e??`telegram`),c=(0,r.useCallback)(n=>{s(n),t.set(`channel`,{value:n,original:e??`telegram`,valid:!0})},[t,e]);return(0,i.jsxs)(`fieldset`,{className:`settings-field settings-field-active-channel`,"aria-label":`Active inbound channel`,children:[(0,i.jsx)(`legend`,{className:`settings-field-label`,children:`Active inbound channel (chat replies)`}),(0,i.jsx)(`div`,{className:`settings-active-channel-options`,role:`radiogroup`,children:a.map(e=>{let t=`${n}-${e.value}`,r=o===e.value;return(0,i.jsxs)(`label`,{htmlFor:t,className:`settings-radio`,children:[(0,i.jsx)(`input`,{id:t,type:`radio`,name:n,value:e.value,checked:r,onChange:()=>c(e.value)}),(0,i.jsx)(`span`,{children:e.label})]},e.value)})})]})}function s(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function c(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t,r=n.activeInbound;if(r!==`telegram`&&r!==`discord`&&r!==`slack`||!s(n.telegram)||!s(n.discord))return null;let i=s(n.slack)?n.slack:{configured:!1,activeInbound:!1,sendCapable:!1,reason:`unavailable`};return{activeInbound:r,telegram:n.telegram,discord:n.discord,slack:i}}function l(e){let t=[];return t.push(e.configured?`Configured`:`Not configured`),e.sendCapable&&t.push(`Send-capable`),e.activeInbound&&t.push(`Active inbound`),t}function u({client:e,channel:t}){let[n,a]=(0,r.useState)(null),[o,s]=(0,r.useState)(null),u=(0,r.useRef)(!0),d=(0,r.useCallback)(async()=>{try{let t=await e.get(`/api/health`);if(!u.current)return;let n=c(t);a(n),s(n?null:`Channel health unavailable on this instance.`)}catch(e){if(!u.current)return;a(null),s(e instanceof Error?e.message:String(e))}},[e]);(0,r.useEffect)(()=>(u.current=!0,d(),()=>{u.current=!1}),[d]);let f=n?.[t]??null,p=!!(f?.configured&&f.sendCapable&&!f.activeInbound);return(0,i.jsxs)(`div`,{className:`settings-transport-status`,role:`status`,"aria-live":`polite`,children:[o?(0,i.jsx)(`p`,{className:`settings-field-hint`,children:o}):null,f?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:`settings-transport-chips`,children:l(f).map(e=>(0,i.jsx)(`span`,{className:`settings-health-pill is-ok`,children:e},e))}),p?(0,i.jsx)(`p`,{className:`settings-field-hint`,children:`This transport is not receiving inbound messages, but send-only delivery remains available.`}):null]}):null,(0,i.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void d(),children:`Refresh transport status`})]})}export{o as n,u as t};