cli-jaw 2.17.17 → 2.17.18

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 (289) hide show
  1. package/dist/bin/commands/skill.js +10 -11
  2. package/dist/bin/commands/skill.js.map +1 -1
  3. package/dist/bin/commands/status.js +40 -6
  4. package/dist/bin/commands/status.js.map +1 -1
  5. package/dist/lib/mcp/skills-reset.js +8 -7
  6. package/dist/lib/mcp/skills-reset.js.map +1 -1
  7. package/dist/lib/mcp/skills-utils.js +44 -0
  8. package/dist/lib/mcp/skills-utils.js.map +1 -1
  9. package/dist/scripts/check-deps-audit.js +89 -0
  10. package/dist/scripts/check-deps-audit.js.map +1 -0
  11. package/dist/src/discord/send-only-client.js +2 -1
  12. package/dist/src/discord/send-only-client.js.map +1 -1
  13. package/dist/src/manager/memory/federation.js +5 -0
  14. package/dist/src/manager/memory/federation.js.map +1 -1
  15. package/dist/src/manager/memory/instance-discovery.js +27 -4
  16. package/dist/src/manager/memory/instance-discovery.js.map +1 -1
  17. package/dist/src/manager/server.js +1 -0
  18. package/dist/src/manager/server.js.map +1 -1
  19. package/dist/src/prompt/builder.js +8 -7
  20. package/dist/src/prompt/builder.js.map +1 -1
  21. package/dist/src/prompt/templates/a1-system.md +5 -1
  22. package/dist/src/prompt/templates/skills.md +6 -0
  23. package/dist/src/slack/api.js +7 -0
  24. package/dist/src/slack/api.js.map +1 -1
  25. package/dist/src/slack/slack-file.js +8 -0
  26. package/dist/src/slack/slack-file.js.map +1 -1
  27. package/dist/src/telegram/bot.js +32 -3
  28. package/dist/src/telegram/bot.js.map +1 -1
  29. package/dist/src/telegram/rich-message.js +40 -12
  30. package/dist/src/telegram/rich-message.js.map +1 -1
  31. package/package.json +4 -3
  32. package/public/dist/assets/{AdvancedExport-IOkupLFE.js → AdvancedExport-tXydxVAh.js} +1 -1
  33. package/public/dist/assets/{Agent-CVt8RCVj.js → Agent-BjxJRsKG.js} +1 -1
  34. package/public/dist/assets/{Browser-J4TPo4bX.js → Browser-Dm5J1gXP.js} +1 -1
  35. package/public/dist/assets/{ChannelEnablementControl-Da_t_jq6.js → ChannelEnablementControl-B9KiYDZZ.js} +1 -1
  36. package/public/dist/assets/{ChannelsDiscord-kNjCCJcA.js → ChannelsDiscord-D6jmfyHe.js} +1 -1
  37. package/public/dist/assets/{ChannelsSlack-U0_Sfkz0.js → ChannelsSlack-BcykASIN.js} +1 -1
  38. package/public/dist/assets/{ChannelsTelegram-DBIFDz4R.js → ChannelsTelegram-XkNtVi8o.js} +1 -1
  39. package/public/dist/assets/{CodeCanvas-CaeLVtZi.js → CodeCanvas-D-JH2Ikl.js} +2 -2
  40. package/public/dist/assets/{DashboardMeta-Dsj8kEuW.js → DashboardMeta-D6nJsY8n.js} +1 -1
  41. package/public/dist/assets/{Display-nkXitDjD.js → Display-B25HqCMH.js} +1 -1
  42. package/public/dist/assets/{DocPanel-ogNttSee.js → DocPanel-qiqo6365.js} +1 -1
  43. package/public/dist/assets/{Employees-CU_1YnrA.js → Employees-CR41RcWo.js} +1 -1
  44. package/public/dist/assets/{Heartbeat-BeGhWW4a.js → Heartbeat-B8c_YvS7.js} +1 -1
  45. package/public/dist/assets/{MarkdownRenderer-Cd3kkg_s.js → MarkdownRenderer-DZ-hWmCB.js} +3 -3
  46. package/public/dist/assets/MarkdownRenderer-uwE0Wam5.js +1 -0
  47. package/public/dist/assets/{Mcp-2HD1qR7F.js → Mcp-DSIEQZfH.js} +1 -1
  48. package/public/dist/assets/{Memory-I30i-svi.js → Memory-BY88ur_h.js} +1 -1
  49. package/public/dist/assets/{MilkdownWysiwygEditor-BkEzO5cz.js → MilkdownWysiwygEditor-DanGAZL5.js} +1 -1
  50. package/public/dist/assets/{ModelProvider-B96RCkFb.js → ModelProvider-mtAtYLmW.js} +1 -1
  51. package/public/dist/assets/{Network-DfzqHi9q.js → Network-ByNu-VCZ.js} +1 -1
  52. package/public/dist/assets/{NotesGraphWorkspace-BRIiraP9.js → NotesGraphWorkspace-Be6ctzYE.js} +1 -1
  53. package/public/dist/assets/Permissions-B-74b-nO.js +1 -0
  54. package/public/dist/assets/{Permissions-RgyF1O6q.js → Permissions-x_6_kLC1.js} +1 -1
  55. package/public/dist/assets/{Profile-DXKtAzfg.js → Profile-Bf9-QN2Y.js} +1 -1
  56. package/public/dist/assets/{Prompts-C7njPWCu.js → Prompts-DGDw56NQ.js} +1 -1
  57. package/public/dist/assets/{SpeechKeys-B7SDWzo9.js → SpeechKeys-CIq4c1iz.js} +1 -1
  58. package/public/dist/assets/{TelegramHub-C61X3f-H.js → TelegramHub-BrCeAZEf.js} +1 -1
  59. package/public/dist/assets/abnfDiagram-VCTEODGH-DOF68zXc.js +1 -0
  60. package/public/dist/assets/{app-wKiMVlyi.js → app-DhDdCs_s.js} +5 -5
  61. package/public/dist/assets/architecture-7GRP2DOG-DxLizWvy.js +1 -0
  62. package/public/dist/assets/architectureDiagram-5GKGNRK7-BpxFEoT5.js +36 -0
  63. package/public/dist/assets/{bgtask-badge-BM93vlbj.js → bgtask-badge-CT6s6rND.js} +1 -1
  64. package/public/dist/assets/bgtask-badge-CidVvjWb.js +1 -0
  65. package/public/dist/assets/blockDiagram-OSKFZWR5-CRNzDJwU.js +129 -0
  66. package/public/dist/assets/c4Diagram-7LVT6UL2-Bg0DdRYW.js +38 -0
  67. package/public/dist/assets/channel-BjgXjYj8.js +1 -0
  68. package/public/dist/assets/chunk-2Q5K7J3B-BClkI2P5.js +1 -0
  69. package/public/dist/assets/chunk-2ZTRR5NV-DF9qGbFc.js +2 -0
  70. package/public/dist/assets/chunk-3NF5O7KM-DXOprKA_.js +168 -0
  71. package/public/dist/assets/chunk-3Z5EZCMW-D-umBnbE.js +1 -0
  72. package/public/dist/assets/chunk-4HAMMTFA-BzeIXjef.js +62 -0
  73. package/public/dist/assets/chunk-5V3GS4D5-DB7RMaO_.js +1 -0
  74. package/public/dist/assets/{chunk-FMBD7UC4-BEz4FhFn.js → chunk-5VM5RSS4-CEUkek2W.js} +1 -1
  75. package/public/dist/assets/chunk-6AZGARVD-qPN7cVYY.js +1 -0
  76. package/public/dist/assets/{chunk-N66VUXT2-DJVNyglo.js → chunk-6EIED4P4-Bt6lS0r9.js} +1 -1
  77. package/public/dist/assets/chunk-6K3QC6MW-BC_6hNGf.js +1 -0
  78. package/public/dist/assets/chunk-6TQVIW2G-NQr1OdRE.js +1 -0
  79. package/public/dist/assets/chunk-747NJXEK-CukETSeX.js +2 -0
  80. package/public/dist/assets/chunk-75Z2AOVW-BLiFJXcr.js +2 -0
  81. package/public/dist/assets/chunk-CLGD4ZFX-B5zkZ8n6.js +1 -0
  82. package/public/dist/assets/chunk-DU6HZSFF-CqT8wcBs.js +126 -0
  83. package/public/dist/assets/{chunk-ND2GUHAM-1k8TCCsJ.js → chunk-F27PBJKO-Ccrogyxp.js} +1 -1
  84. package/public/dist/assets/chunk-FOHPRMQF--f9XSh-3.js +161 -0
  85. package/public/dist/assets/chunk-GMAD6QVW-BJLz4nC-.js +13 -0
  86. package/public/dist/assets/chunk-GVQU2GXP-BlVn1fMW.js +1 -0
  87. package/public/dist/assets/chunk-H2I77ZZE-BXf4_vA2.js +1 -0
  88. package/public/dist/assets/{chunk-727SXJPM-CUOujQg0.js → chunk-HLEWEB6X-BKWwzzZJ.js} +2 -2
  89. package/public/dist/assets/chunk-I5DQTOEV-B46sdKHC.js +1 -0
  90. package/public/dist/assets/chunk-ICYGCRZG-CSu4gXtC.js +1 -0
  91. package/public/dist/assets/chunk-IH6LHLGP-B2m3mWfU.js +1 -0
  92. package/public/dist/assets/{chunk-4BX2VUAB-DU36Vmpr.js → chunk-JWPE2WC7-D-FE5omP.js} +1 -1
  93. package/public/dist/assets/chunk-KI3K4JFJ-Bfn6wbch.js +1 -0
  94. package/public/dist/assets/chunk-L3NEJ4N5-FGXu31jw.js +1 -0
  95. package/public/dist/assets/chunk-LNGE3PJU-Dyjtq0ks.js +34 -0
  96. package/public/dist/assets/chunk-LQGUR6SS-qUTD5FMI.js +2 -0
  97. package/public/dist/assets/chunk-OSK3NFVY-CrXjNywV.js +10 -0
  98. package/public/dist/assets/chunk-OUJLGHUK-DkWSHliq.js +2 -0
  99. package/public/dist/assets/chunk-P2QGCYS3-B-9ymCdr.js +1 -0
  100. package/public/dist/assets/chunk-POPQ4Y6H-Df0_Odad.js +1 -0
  101. package/public/dist/assets/chunk-PWAF6VOD-B1cuaLs-.js +1 -0
  102. package/public/dist/assets/chunk-SVP7TREG-DCh4QTp-.js +88 -0
  103. package/public/dist/assets/chunk-UY3FDG6J--uyeDRt4.js +1 -0
  104. package/public/dist/assets/chunk-X3CZISLH-C1s9nTVF.js +1 -0
  105. package/public/dist/assets/chunk-XHIXRSVI-CQtpMKYq.js +1 -0
  106. package/public/dist/assets/chunk-XXDRQBXY-DEwmqeYc.js +1 -0
  107. package/public/dist/assets/chunk-Y2CYZVJY-DlLjK0OJ.js +1 -0
  108. package/public/dist/assets/chunk-ZLD2IHE6-DOKyEMMC.js +231 -0
  109. package/public/dist/assets/classDiagram-CYGNFDIV-hbaxbeYd.js +1 -0
  110. package/public/dist/assets/classDiagram-v2-TLXNO2FR-_OfX3b6Y.js +1 -0
  111. package/public/dist/assets/cose-bilkent-JH36ORCC-HnUYAhwC.js +1 -0
  112. package/public/dist/assets/cynefin-OW5HDTMX-VXYSLvft.js +1 -0
  113. package/public/dist/assets/cynefinDiagram-5FMLGOSQ-D0dmg5fA.js +62 -0
  114. package/public/dist/assets/cytoscape.esm-CS3SmpXd.js +321 -0
  115. package/public/dist/assets/dagre-DDTOgfwg.js +1 -0
  116. package/public/dist/assets/dagre-OS7QT2EB-c-JkA4ju.js +4 -0
  117. package/public/dist/assets/diagram-S7CK7UJ4-CgObZnGW.js +30 -0
  118. package/public/dist/assets/diagram-UQ7AKVKN-DTiko3yH.js +41 -0
  119. package/public/dist/assets/{diagram-KO2AKTUF-uRuKS97A.js → diagram-VSXAHHWV-BtwoQsOH.js} +2 -2
  120. package/public/dist/assets/diagram-VX7I27RA-BvFpphqo.js +24 -0
  121. package/public/dist/assets/diagram-Z3DM3KII-Zq8iJClC.js +24 -0
  122. package/public/dist/assets/ebnfDiagram-PWID7BFC-_fcO3z5G.js +1 -0
  123. package/public/dist/assets/{employees-C0CQgpI9.js → employees-DCju7V1x.js} +1 -1
  124. package/public/dist/assets/erDiagram-2YWLMYGG-YIq0Go-p.js +99 -0
  125. package/public/dist/assets/eventmodeling-NTZA5JFV-Csqcv5T_.js +1 -0
  126. package/public/dist/assets/flowDiagram-T62WH6J4-Del9dfOW.js +1 -0
  127. package/public/dist/assets/ganttDiagram-EL5Y4UJY-CezfIvti.js +292 -0
  128. package/public/dist/assets/gitGraph-4MIJSDKK-D_1mlgPm.js +1 -0
  129. package/public/dist/assets/gitGraphDiagram-WWUBYQGX-Bg3OM_0S.js +106 -0
  130. package/public/dist/assets/{graphlib-B06FTUqA.js → graphlib-Cjg_soTo.js} +1 -1
  131. package/public/dist/assets/{iframe-renderer-CgCPbWs-.js → iframe-renderer-LZp7Nqm1.js} +3 -3
  132. package/public/dist/assets/iframe-renderer-aFXUtTXX.js +1 -0
  133. package/public/dist/assets/info-A6RAGUB7-ce7F80NR.js +1 -0
  134. package/public/dist/assets/infoDiagram-FKFFQAWI-Dbi9pIPw.js +2 -0
  135. package/public/dist/assets/{ishikawaDiagram-YF4QCWOH-fyJrRZTW.js → ishikawaDiagram-5VMMS53U-C1FUP-sO.js} +1 -1
  136. package/public/dist/assets/{journeyDiagram-JHISSGLW-Dd6CvR-c.js → journeyDiagram-EYS64GPL-CaEEa3uT.js} +1 -1
  137. package/public/dist/assets/{kanban-definition-UN3LZRKU-C2ZH4LXA.js → kanban-definition-UXKFOSKX-DQjqFxtj.js} +2 -2
  138. package/public/dist/assets/katex-BoGadFcG.js +1 -0
  139. package/public/dist/assets/{manager-C_EnQ0Fc.js → manager-BEvw_3H1.js} +5 -5
  140. package/public/dist/assets/memory-BcZdf_oz.js +1 -0
  141. package/public/dist/assets/{memory-8-eJn9cp.js → memory-V5caYbpS.js} +1 -1
  142. package/public/dist/assets/mermaid-loader-BcReSszT.js +1 -0
  143. package/public/dist/assets/mermaid-parser.core-CBiGpWk6.js +3 -0
  144. package/public/dist/assets/{mermaid-preprocess-0hqEN7sn.js → mermaid-preprocess-4oGDpf1X.js} +1 -1
  145. package/public/dist/assets/mermaid.core-BJIXJ0Ir.js +11 -0
  146. package/public/dist/assets/mermaid.core-J6tiqiVK.js +1 -0
  147. package/public/dist/assets/{message-history-BEy8JQHJ.js → message-history-Bp_sUDSx.js} +1 -1
  148. package/public/dist/assets/message-history-DrEPUdTy.js +1 -0
  149. package/public/dist/assets/{mindmap-definition-RKZ34NQL-DUQBUbUA.js → mindmap-definition-THT77NOG-CXOyjall.js} +1 -1
  150. package/public/dist/assets/packet-AYTQ26CC-86oNpyWh.js +1 -0
  151. package/public/dist/assets/pegDiagram-XKGWAZYB-DVD3P7WU.js +1 -0
  152. package/public/dist/assets/pie-WAS4IAKB-CMzmzfvT.js +1 -0
  153. package/public/dist/assets/pieDiagram-E7YTZNPT-DEH6UJP4.js +39 -0
  154. package/public/dist/assets/{quadrantDiagram-W4KKPZXB-lbpz07e4.js → quadrantDiagram-AXDQQJYC-CAbCNOON.js} +3 -3
  155. package/public/dist/assets/radar-RG4KPBEZ-CsDBxCx4.js +1 -0
  156. package/public/dist/assets/railroad-74A4TZTK-B6s85Oul.js +1 -0
  157. package/public/dist/assets/railroad-abnf-HS5TGJTU-jnABoAnr.js +1 -0
  158. package/public/dist/assets/railroad-ebnf-LZEXJU2U-C_VWXbk9.js +1 -0
  159. package/public/dist/assets/railroad-peg-WCYAUIDC-y3jeoP_s.js +1 -0
  160. package/public/dist/assets/railroadDiagram-O6MQD6OU-CEs81LrU.js +1 -0
  161. package/public/dist/assets/{render-B-8i-Rxq.js → render-Cd4frZ2U.js} +3 -3
  162. package/public/dist/assets/{requirementDiagram-4Y6WPE33-CrApoE_l.js → requirementDiagram-IS5BZ75X-DsPApdKv.js} +3 -3
  163. package/public/dist/assets/{sankeyDiagram-5OEKKPKP-Df1lU-mT.js → sankeyDiagram-P5KCCOFB-Im52Eou9.js} +3 -3
  164. package/public/dist/assets/{sequenceDiagram-3UESZ5HK-CelQN5jY.js → sequenceDiagram-WJ2MYXX4-BChOR6yh.js} +3 -3
  165. package/public/dist/assets/{settings-dDNt6x3f.js → settings-a0blK1fr.js} +1 -1
  166. package/public/dist/assets/{settings-core-DQCWldQD.js → settings-core-C5qo8giT.js} +1 -1
  167. package/public/dist/assets/settings-core-Cm-CmVLA.js +1 -0
  168. package/public/dist/assets/settings-mbGEtP5B.js +1 -0
  169. package/public/dist/assets/{sidebar-BDAnwLnk.js → sidebar-FbI4udzs.js} +4 -4
  170. package/public/dist/assets/sizeCapture-INFHLROL-D9Rpk-aA.js +1 -0
  171. package/public/dist/assets/{skills-BNbUv5Ty.js → skills-DeG9lWF2.js} +1 -1
  172. package/public/dist/assets/skills-G8KUeHBV.js +1 -0
  173. package/public/dist/assets/slash-commands-BYv3yboz.js +1 -0
  174. package/public/dist/assets/{slash-commands-BP2nZDmp.js → slash-commands-FoQuZXga.js} +1 -1
  175. package/public/dist/assets/stateDiagram-XQSTLZYL-B5CxGVqv.js +1 -0
  176. package/public/dist/assets/stateDiagram-v2-IH3M54BS-BmdRqxzy.js +1 -0
  177. package/public/dist/assets/swimlanes-V6O3JKXN-Ckem4dQh.js +1 -0
  178. package/public/dist/assets/swimlanesDiagram-JKAHXJPX-DW_0PiOk.js +8 -0
  179. package/public/dist/assets/{timeline-definition-PNZ67QCA-DP0lPzQ_.js → timeline-definition-24CTP7MA-CJRsjFnd.js} +2 -2
  180. package/public/dist/assets/{trace-drawer-CT83NUo4.js → trace-drawer-CWs8ydMO.js} +1 -1
  181. package/public/dist/assets/treeView-Q6P3EWNA-ChnMvz2a.js +1 -0
  182. package/public/dist/assets/treemap-WGGIJYW6-DZJ4jE42.js +1 -0
  183. package/public/dist/assets/{ui-NdMDA7kW.js → ui-Cd8etFwN.js} +2 -2
  184. package/public/dist/assets/ui-yrn3s72A.js +1 -0
  185. package/public/dist/assets/vendor-render-BpGO1zp3.js +383 -0
  186. package/public/dist/assets/vendor-render-kIxHrxDV.css +1 -0
  187. package/public/dist/assets/{vendor-utils-BK07iQND.js → vendor-utils-BUFU5ypz.js} +1 -1
  188. package/public/dist/assets/vennDiagram-4TSXK5OY-fVndHq7T.js +34 -0
  189. package/public/dist/assets/wardley-WFR3VGLG-CGM_JiX0.js +1 -0
  190. package/public/dist/assets/{wardleyDiagram-YWT4CUSO-CapVnCz5.js → wardleyDiagram-VM6X3IG4-CXIfS7ZF.js} +2 -2
  191. package/public/dist/assets/{wiki-link-resolver-N9fDy5zP.js → wiki-link-resolver-BGpGBLMp.js} +1 -1
  192. package/public/dist/assets/xychartDiagram-S5SC5T6Z-CqC-Uvuc.js +7 -0
  193. package/public/dist/index.html +2 -2
  194. package/public/dist/manager/index.html +2 -2
  195. package/scripts/audit-allowlist.json +81 -0
  196. package/scripts/check-deps-audit.ts +97 -0
  197. package/public/dist/assets/MarkdownRenderer-B6HbiZ6i.js +0 -1
  198. package/public/dist/assets/Permissions-ByUy_5DT.js +0 -1
  199. package/public/dist/assets/architecture-7EHR7CIX-Byg-B8Sh.js +0 -1
  200. package/public/dist/assets/architectureDiagram-3BPJPVTR-DA7niVYs.js +0 -36
  201. package/public/dist/assets/bgtask-badge-BjVnOXkr.js +0 -1
  202. package/public/dist/assets/blockDiagram-GPEHLZMM-czRsW1WP.js +0 -132
  203. package/public/dist/assets/c4Diagram-AAUBKEIU-zoRyRo1y.js +0 -10
  204. package/public/dist/assets/channel-Cr7Dmg2t.js +0 -1
  205. package/public/dist/assets/chunk-2J33WTMH-DMaZjiDe.js +0 -1
  206. package/public/dist/assets/chunk-3OPIFGDE-fm0Uteda.js +0 -62
  207. package/public/dist/assets/chunk-4EGX6M5U-CYPeQu4F.js +0 -1
  208. package/public/dist/assets/chunk-55IACEB6-Dkm6BnqN.js +0 -1
  209. package/public/dist/assets/chunk-5DO6E6H7-CIcLA1n6.js +0 -1
  210. package/public/dist/assets/chunk-5ZQYHXKU-NjOvV6Nd.js +0 -2
  211. package/public/dist/assets/chunk-AGHRB4JF-Cdp9MZGh.js +0 -1
  212. package/public/dist/assets/chunk-AQP2D5EJ-2nFXTQ0W.js +0 -231
  213. package/public/dist/assets/chunk-BR22UD5L-BoyFFQuR.js +0 -1
  214. package/public/dist/assets/chunk-BSJP7CBP-B1MMwNrU.js +0 -1
  215. package/public/dist/assets/chunk-CSCIHK7Q-C0MOgWVt.js +0 -123
  216. package/public/dist/assets/chunk-FHYWG6QK-CmUWtJPn.js +0 -1
  217. package/public/dist/assets/chunk-KSCS5N6A-B2XGqWQY.js +0 -10
  218. package/public/dist/assets/chunk-L5ZTLDWV-CfZ2hrJ2.js +0 -1
  219. package/public/dist/assets/chunk-LZXEDZCA-BXuFCBsZ.js +0 -2
  220. package/public/dist/assets/chunk-MPE355IW-BdSiU-oV.js +0 -1
  221. package/public/dist/assets/chunk-MZUSXYTE-VYfI8Uwx.js +0 -1
  222. package/public/dist/assets/chunk-NNHCCRGN-ChI2WAS0.js +0 -159
  223. package/public/dist/assets/chunk-NZK2D7GU-CkYWftT8.js +0 -1
  224. package/public/dist/assets/chunk-O5CBEL6O-B5g0NbhD.js +0 -11
  225. package/public/dist/assets/chunk-PUPMXCY4-DJKmByz8.js +0 -1
  226. package/public/dist/assets/chunk-QZHKN3VN-C6ktI6EQ.js +0 -1
  227. package/public/dist/assets/chunk-UIBZB4QT-DgLbPJ3_.js +0 -1
  228. package/public/dist/assets/chunk-WCWK7LTN-DWxi0w0a.js +0 -1
  229. package/public/dist/assets/chunk-WU5MYG2G-Cwe6QZ3_.js +0 -1
  230. package/public/dist/assets/chunk-XPW4576I-CaTDAC52.js +0 -32
  231. package/public/dist/assets/classDiagram-4FO5ZUOK-BzLBk9sv.js +0 -1
  232. package/public/dist/assets/classDiagram-v2-Q7XG4LA2-9K8wUz3g.js +0 -1
  233. package/public/dist/assets/cose-bilkent-S5V4N54A-B9Tcz6qW.js +0 -1
  234. package/public/dist/assets/cytoscape.esm-PBXWcYR1.js +0 -321
  235. package/public/dist/assets/dagre-BM42HDAG-OH37BMnf.js +0 -4
  236. package/public/dist/assets/dagre-BsKKQnyU.js +0 -1
  237. package/public/dist/assets/diagram-2AECGRRQ-B1t73Wn1.js +0 -43
  238. package/public/dist/assets/diagram-5GNKFQAL-DBGIcSxH.js +0 -10
  239. package/public/dist/assets/diagram-LMA3HP47-XMEHnr3B.js +0 -24
  240. package/public/dist/assets/diagram-OG6HWLK6-B_vRUJSJ.js +0 -24
  241. package/public/dist/assets/erDiagram-TEJ5UH35-CTHxg4ER.js +0 -85
  242. package/public/dist/assets/eventmodeling-FCH6USID-LckY84Wp.js +0 -1
  243. package/public/dist/assets/flowDiagram-I6XJVG4X-DgCs6PPU.js +0 -162
  244. package/public/dist/assets/ganttDiagram-6RSMTGT7-DGjdFJRc.js +0 -292
  245. package/public/dist/assets/gitGraph-WXDBUCRP-DXhEIZXY.js +0 -1
  246. package/public/dist/assets/gitGraphDiagram-PVQCEYII-DvCWiClL.js +0 -106
  247. package/public/dist/assets/iframe-renderer-CRPZFtWm.js +0 -1
  248. package/public/dist/assets/info-J43DQDTF-iXM3vzuR.js +0 -1
  249. package/public/dist/assets/infoDiagram-5YYISTIA-DxkbyTf_.js +0 -2
  250. package/public/dist/assets/katex-BT6jmGul.js +0 -1
  251. package/public/dist/assets/memory-h1JXRpv9.js +0 -1
  252. package/public/dist/assets/mermaid-loader-CylkLQP5.js +0 -1
  253. package/public/dist/assets/mermaid-parser.core-C-9KB617.js +0 -3
  254. package/public/dist/assets/mermaid.core-8XY13b72.js +0 -9
  255. package/public/dist/assets/mermaid.core-BEuf6y5_.js +0 -1
  256. package/public/dist/assets/message-history-BWh1dvBM.js +0 -1
  257. package/public/dist/assets/packet-YPE3B663-SclsNpNx.js +0 -1
  258. package/public/dist/assets/pie-LRSECV5Y-CF43gDO6.js +0 -1
  259. package/public/dist/assets/pieDiagram-4H26LBE5-ChOXpmZ5.js +0 -30
  260. package/public/dist/assets/radar-GUYGQ44K-BsylzLX_.js +0 -1
  261. package/public/dist/assets/settings-C2zm9EZp.js +0 -1
  262. package/public/dist/assets/settings-core-D72OTH7d.js +0 -1
  263. package/public/dist/assets/skills-DmzEkIbU.js +0 -1
  264. package/public/dist/assets/slash-commands-XwCb5ACm.js +0 -1
  265. package/public/dist/assets/stateDiagram-AJRCARHV-CeyXWXrg.js +0 -1
  266. package/public/dist/assets/stateDiagram-v2-BHNVJYJU-Bhb8zTjh.js +0 -1
  267. package/public/dist/assets/treeView-BLDUP644-DHq0vQpf.js +0 -1
  268. package/public/dist/assets/treemap-LRROVOQU-vKngXIla.js +0 -1
  269. package/public/dist/assets/ui-BVvHzdHI.js +0 -1
  270. package/public/dist/assets/vendor-render-Bjnw0wQ6.css +0 -1
  271. package/public/dist/assets/vendor-render-DCb9B75Q.js +0 -383
  272. package/public/dist/assets/vennDiagram-CIIHVFJN-WB9mzv1f.js +0 -34
  273. package/public/dist/assets/wardley-L42UT6IY-B1jQOSA5.js +0 -1
  274. package/public/dist/assets/xychartDiagram-2RQKCTM6-DduDB3Cd.js +0 -7
  275. /package/public/dist/assets/{BrowserPanel-C0aa2gja.js → BrowserPanel-CsYKexNf.js} +0 -0
  276. /package/public/dist/assets/{DashboardEmbeddingSection-DiqlLiLj.js → DashboardEmbeddingSection-CIOwsVB5.js} +0 -0
  277. /package/public/dist/assets/{DesignPanel-B8CAf6sH.js → DesignPanel-SuUOoyQN.js} +0 -0
  278. /package/public/dist/assets/{DiffPanel-BTZRq6eG.js → DiffPanel-ZaDoV7qS.js} +0 -0
  279. /package/public/dist/assets/{FolderPanel-D0w_zD66.js → FolderPanel-BkggPdTP.js} +0 -0
  280. /package/public/dist/assets/{HealthBadge-CiNMS-1k.js → HealthBadge-D7BQ-LHD.js} +0 -0
  281. /package/public/dist/assets/{InlineWarn-D-fmcQXD.js → InlineWarn-B3bJfG-Z.js} +0 -0
  282. /package/public/dist/assets/{TerminalPanel-DlUFPyzc.js → TerminalPanel-gXH7bTXQ.js} +0 -0
  283. /package/public/dist/assets/{agent-meta-DrYdO9lB.js → agent-meta-_Idad3qq.js} +0 -0
  284. /package/public/dist/assets/{dist-CuL30i1H.js → dist-CX7KjpF3.js} +0 -0
  285. /package/public/dist/assets/{dist-BbhtVnRz.js → dist-uSfGXqs6.js} +0 -0
  286. /package/public/dist/assets/{fields-BwOMlwS0.js → fields-E1L8aEhU.js} +0 -0
  287. /package/public/dist/assets/{page-shell-GpE8A-FA.js → page-shell-DZ1lls_P.js} +0 -0
  288. /package/public/dist/assets/{path-utils-CHwADH-r.js → path-utils-QbjARuCC.js} +0 -0
  289. /package/public/dist/assets/{rough.esm-DeGVhNS9.js → rough.esm-DQG0wzX4.js} +0 -0
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t}from"./settings-types-DPhhM-cj.js";import{n,t as r}from"./jsx-runtime-CYoNlHAD.js";import{t as i}from"./settings-client-D9KY2Ufl.js";import{t as a}from"./error-normalize-CLRJh19F.js";import{a as o,i as s,n as c,r as l,t as u}from"./page-shell-GpE8A-FA.js";import{i as d,s as f}from"./fields-BwOMlwS0.js";import{a as p,n as m,o as h}from"./Permissions-RgyF1O6q.js";import{a as ee,c as g,i as _,l as v,n as y,o as b,r as te,s as ne,t as x}from"./agent-meta-DrYdO9lB.js";import{t as S}from"./path-utils-CHwADH-r.js";var C=e(n(),1),re=1e3,ie=8e3,ae=9e4;function oe(e,t){if(!e||!t)return!1;let n=e[t]?.probeState;return n?n===`checking`||n===`failing`:!1}function se(e){let t=re*2**Math.min(Number.isFinite(e)&&e>0?Math.floor(e):0,8);return Math.min(Math.max(t,re),ie)}function ce(e){let{snapshot:t,cli:n,attempts:r,now:i,deadline:a}=e;if(!oe(t,n))return{kind:`stop`};if(i>=a||r>=24)return{kind:`exhausted`};let o=t?.[n]?.nextRetryAt,s=typeof o==`number`&&o>i?o:i+se(r);return{kind:`wait`,delayMs:Math.max(Math.min(s,a)-i,0)}}var w=r();function le({cli:e,cliOptions:t,provider:n=``,providerOptions:r=[],model:i,modelOptions:a,effort:o,effortOptions:c,workingDir:l,workingDirError:u,cliMeta:p,onCliChange:m,onProviderChange:h,onModelChange:ee,onEffortChange:g,onWorkingDirChange:v}){let y=ne(t),b=y.filter(e=>x.includes(e)).length;return(0,w.jsx)(s,{title:`Agent runtime`,hint:`Active CLI, model, effort, and workspace used by this instance.`,children:(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(d,{id:`agent-cli`,label:`Active CLI`,value:e,options:y.map(e=>({value:e,label:_(e,p).label||e})),collapsedAfter:b,onChange:m}),r.length>0?(0,w.jsx)(d,{id:`agent-${e}-provider`,label:`Provider`,value:n,options:r.map(e=>({value:e,label:e})),onChange:e=>h?.(e)}):null,(0,w.jsx)(d,{id:`agent-model`,label:`Active model`,value:i,options:a.length>0?a:[{value:``,label:`(default)`}],onChange:ee}),(0,w.jsx)(d,{id:`agent-effort`,label:`Effort`,value:o,options:[{value:``,label:`(default)`},...c.map(e=>({value:e,label:e}))],disabled:c.length===0,onChange:g}),(0,w.jsx)(f,{id:`agent-workingDir`,label:`Working directory`,value:l,error:u,placeholder:`/path/to/project`,onChange:v})]})})}var T=[{value:`auto`,label:`Auto`},{value:`custom`,label:`Custom allowlist`}];function ue({value:e,onChange:t}){let n=p(e),r=n.mode===`custom`?`custom`:`auto`,i=n.mode===`custom`?n.tokens:[],a=n.mode===`custom`?`${i.length} explicit token${i.length===1?``:`s`}`:`Runtime resolves allowed capabilities`;return(0,w.jsxs)(s,{title:`Permissions`,hint:`Quick runtime mode. Open Permissions for detailed allowlist editing.`,children:[(0,w.jsx)(d,{id:`agent-permissions-mode`,label:`Mode`,value:r,options:T,onChange:e=>{t(e===`auto`?`auto`:i.length>0&&m(i)?i:h(null))}}),(0,w.jsx)(`p`,{className:`settings-agent-note`,children:a})]})}function de({activeCli:e,flushCli:t,flushModel:n,cliOptions:r,modelOptions:i,cliMeta:a,loading:o,error:c,onFlushCliChange:l,onFlushModelChange:u}){let f=t||e,p=f?_(f,a).label||f:`active`;return(0,w.jsx)(s,{title:`Flush Agent`,hint:`Separate summary agent used for context flush and compact work.`,children:(0,w.jsxs)(`details`,{className:`settings-agent-flush`,children:[(0,w.jsxs)(`summary`,{children:[(0,w.jsx)(`span`,{children:`Flush runtime`}),(0,w.jsxs)(`code`,{children:[p,n&&n!==`default`?` / ${n}`:``]})]}),o?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading flush settings...`}):null,c?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:c}):null,(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(d,{id:`agent-flush-cli`,label:`Flush CLI`,value:t,options:[{value:``,label:`(active CLI)`},...r.map(e=>({value:e,label:_(e,a).label||e}))],onChange:l}),(0,w.jsx)(d,{id:`agent-flush-model`,label:`Flush model`,value:n,options:[{value:``,label:`(default)`},...i],onChange:u})]})]})})}function E(e){return e.source===`static`||e.id.startsWith(`static:`)}function D(){return`new:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`}function O(e,t){let n=e[0]||`claude`,r=t?.[n]?.models?.[0]||`default`;return{id:D(),name:`New Agent`,cli:n,model:r,role:``,status:`idle`,source:`db`}}function fe(e){return Array.isArray(e)?e.map(k).filter(Boolean):e.data.map(k).filter(Boolean)}function k(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.id==`string`?t.id:``,r=typeof t.name==`string`?t.name:``;if(!n||!r)return null;let i=t.source===`static`||n.startsWith(`static:`)?`static`:`db`,a={id:n,name:r,cli:typeof t.cli==`string`&&t.cli?t.cli:`claude`,model:typeof t.model==`string`&&t.model?t.model:`default`,role:typeof t.role==`string`?t.role:``,source:i};return typeof t.status==`string`&&(a.status=t.status),a}function A(e){return e.name.trim()?e.cli.trim()?e.model.trim()?null:`Model is required`:`CLI is required`:`Name is required`}function pe(e){return e.some(e=>A(e)!==null)}function me(e,t){return JSON.stringify(e.map(N))===JSON.stringify(t.map(N))}function he(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Set(t.map(e=>e.id)),i=[],a=[],o=[];for(let e of t){let t=n.get(e.id);if(!t||e.id.startsWith(`new:`)){i.push(e);continue}let r=M(t,e);Object.keys(r).length>0&&a.push({before:t,after:e,patch:r})}for(let t of e)!r.has(t.id)&&!E(t)&&o.push(t);return{added:i,updated:a,removed:o}}function ge(e,t){let n=he(e,t);return{added:n.added.length,updated:n.updated.length,removed:n.removed.length}}async function j(e,t,n){let r=he(t,n);for(let t of r.removed)await e.delete(`/api/employees/${encodeURIComponent(t.id)}`);for(let t of r.added)await e.post(`/api/employees`,_e(t));for(let t of r.updated)await e.put(`/api/employees/${encodeURIComponent(t.after.id)}`,t.patch)}function M(e,t){if(E(t))return e.model===t.model?{}:{model:t.model};let n={};for(let r of[`name`,`cli`,`model`,`role`,`status`])(e[r]||``)!==(t[r]||``)&&(n[r]=t[r]||``);return n}function _e(e){return{name:e.name.trim()||`New Agent`,cli:e.cli.trim()||`claude`,model:e.model.trim()||`default`,role:e.role.trim()}}function N(e){let t={id:e.id,name:e.name,cli:e.cli,model:e.model,role:e.role,source:e.source};return e.status!==void 0&&(t.status=e.status),t}function P({employee:e,index:t,cliOptions:n,cliMeta:r,onChange:i,onRemove:a}){let o=E(e),s=b(_(e.cli,r).models,e.model),c=A(e),l=Array.from(new Set([...n,e.cli,`claude`])).filter(Boolean);return(0,w.jsxs)(`fieldset`,{className:`settings-runtime-employee-row`,children:[(0,w.jsxs)(`legend`,{children:[e.name||`Employee ${t+1}`,o?(0,w.jsx)(`span`,{children:`static`}):null]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-grid`,children:[(0,w.jsx)(f,{id:`runtime-employee-${e.id}-name`,label:`Name`,value:e.name,disabled:o,error:c===`Name is required`?c:null,onChange:e=>i({name:e})}),(0,w.jsx)(d,{id:`runtime-employee-${e.id}-cli`,label:`CLI`,value:e.cli,disabled:o,options:l.map(e=>({value:e,label:_(e,r).label||e})),onChange:e=>{i({cli:e,model:_(e,r).models[0]||`default`})}}),(0,w.jsx)(d,{id:`runtime-employee-${e.id}-model`,label:`Model`,value:e.model,options:s.length>0?s:[{value:`default`,label:`default`}],onChange:e=>i({model:e})}),(0,w.jsx)(f,{id:`runtime-employee-${e.id}-role`,label:`Role`,value:e.role,disabled:o,onChange:e=>i({role:e})})]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-footer`,children:[(0,w.jsxs)(`span`,{children:[e.source,e.status?` / ${e.status}`:``]}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:o,onClick:a,"aria-label":`Remove employee ${e.name||t+1}`,children:`Remove`})]})]})}function ve({roster:e,original:t,cliOptions:n,cliMeta:r,loading:i,error:a,onRosterChange:o}){let c=ge(t,e),l=pe(e);function u(t,n){o(e.map((e,r)=>r===t?{...e,...n}:e))}function d(t){o(e.filter((e,n)=>n!==t))}return(0,w.jsxs)(s,{title:`Employees`,hint:`Runtime dispatch roster. Static employees keep their locked identity; database employees can be edited.`,children:[(0,w.jsxs)(`div`,{className:`settings-runtime-employee-summary`,children:[(0,w.jsxs)(`span`,{children:[`+`,c.added]}),(0,w.jsxs)(`span`,{children:[`~`,c.updated]}),(0,w.jsxs)(`span`,{children:[`-`,c.removed]}),l?(0,w.jsx)(`strong`,{children:`Fix invalid rows before saving.`}):null]}),i?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading employees...`}):null,a?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:a}):null,e.length===0?(0,w.jsx)(`p`,{className:`settings-empty`,children:`No runtime employees configured.`}):(0,w.jsx)(`div`,{className:`settings-runtime-employee-list`,children:e.map((e,t)=>(0,w.jsx)(P,{employee:e,index:t,cliOptions:n,cliMeta:r??null,onChange:e=>u(t,e),onRemove:()=>d(t)},e.id))}),(0,w.jsx)(`div`,{className:`settings-employee-footer-bar`,children:(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>o([...e,O(n,r)]),children:`+ Add employee`})})]})}var F=new Set([`runtimeEmployees`,`flushCli`,`flushModel`]);function I(e){let t={},n=null,r=null;for(let[i,a]of Object.entries(e))i===`runtimeEmployees`?r=a:i===`flushCli`||i===`flushModel`?(n??={},n[i===`flushCli`?`cli`:`model`]=String(a??``)):F.has(i)||(t[i]=a);return{settingsBundle:t,flushPatch:n,runtimeEmployeesNext:r}}async function ye(e){let{client:t,bundle:n,employeeDraft:r,employeeOriginal:i}=e;if(pe(r))throw Error(`runtime employees: fix invalid rows before saving`);let{settingsBundle:a,flushPatch:o,runtimeEmployeesNext:s}=I(n),c=null;try{if(Object.keys(a).length>0){let e=await t.put(`/api/settings`,S(a));c=e&&typeof e==`object`&&`data`in e?e.data:e}}catch(e){throw Error(`settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{o&&await t.put(`/api/memory-files/settings`,o)}catch(e){throw Error(`flush settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{s&&await j(t,i,s)}catch(e){throw Error(`runtime employees save failed: ${e instanceof Error?e.message:String(e)}`)}return c}function be({status:e,exhausted:n=!1}){if(n)return(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`alert`,children:`상태 확인이 끝나지 않았습니다. 새로고침하거나 잠시 후 다시 확인하세요.`});if(!e)return null;let r=t(e);return r.kind===`checking`?(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`status`,"aria-live":`polite`,children:`상태 확인 중`}):r.kind===`unknown`?(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`alert`,children:r.message}):r.kind===`failing`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`alert`,children:[`상태 확인 실패 (재시도 중)`,e.probeError?`: ${e.probeError}`:``]}):null}function L(e){if(!(e instanceof i)||e.status!==409)return null;try{return JSON.parse(e.detail).settings??null}catch{return null}}function R({port:e,client:t,dirty:n,registerSave:r}){let{state:i,refresh:s,setData:d}=o(t,`/api/settings`),[f,m]=(0,C.useState)({cli:``,provider:``,model:``,effort:``,workingDir:``,permissions:`auto`}),[h,ne]=(0,C.useState)({}),[x,S]=(0,C.useState)({}),[re,ie]=(0,C.useState)(!0),[oe,se]=(0,C.useState)(null),[T,E]=(0,C.useState)([]),[D,O]=(0,C.useState)([]),[k,A]=(0,C.useState)(!0),[he,ge]=(0,C.useState)(null),[j,M]=(0,C.useState)(null),[_e,N]=(0,C.useState)({}),[P,F]=(0,C.useState)(!1),[I,R]=(0,C.useState)(null),[xe,Se]=(0,C.useState)(!1),[Ce,we]=(0,C.useState)(null),z=(0,C.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);M(ee(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{M(null)}},[t]),B=(0,C.useRef)(0),V=(0,C.useRef)({}),[Te,Ee]=(0,C.useState)(!1),H=(0,C.useCallback)(async e=>{try{let n=await t.get(`/api/cli-status`);if(e!==void 0&&e!==B.current)return;V.current=n,N(n)}catch{if(e!==void 0&&e!==B.current)return;V.current={},N({})}},[t]),U=(0,C.useCallback)(async()=>{ie(!0),se(null);try{let e=await t.get(`/api/memory-files`),n={cli:e.cli||``,model:e.model||``};ne(n),S(n)}catch(e){se(e instanceof Error?e.message:String(e))}finally{ie(!1)}},[t]),W=(0,C.useCallback)(async()=>{A(!0),ge(null);try{let e=fe(await t.get(`/api/employees`));E(e),O(e)}catch(e){ge(e instanceof Error?e.message:String(e))}finally{A(!1)}},[t]);(0,C.useEffect)(()=>{z(),H(),U(),W()},[z,H,W,U]),(0,C.useEffect)(()=>{if(!f.cli)return;let e=B.current+1;B.current=e,Ee(!1);let t=Date.now()+ae,n=0,r,i=()=>{if(e!==B.current)return;let a=ce({snapshot:V.current,cli:f.cli,attempts:n,now:Date.now(),deadline:t});if(a.kind!==`stop`){if(a.kind===`exhausted`){Ee(!0);return}r=setTimeout(()=>{e===B.current&&(n+=1,H(e).then(()=>{e===B.current&&i()}))},a.delayMs)}};return i(),()=>{B.current=e+1,r!==void 0&&clearTimeout(r)}},[f.cli,H]),(0,C.useEffect)(()=>{if(i.kind!==`ready`)return;let e=Object.keys(i.data.perCli||{}),t=i.data.cli||e[0]||``,n=p(i.data.permissions),r=_(t,j);m({cli:t,provider:i.data.perCli?.[t]?.provider||r.defaultProvider||``,model:v(t,i.data.perCli,i.data.activeOverrides),effort:g(t,i.data.perCli,i.data.activeOverrides),workingDir:i.data.workingDir||``,permissions:n.mode===`custom`?n.tokens:`auto`})},[j,i]),(0,C.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`cli`||e===`workingDir`||e===`permissions`||e===`runtimeEmployees`||e===`flushCli`||e===`flushModel`||e.startsWith(`activeOverrides.`))&&n.remove(e)},[n]);let G=(0,C.useCallback)((e,t)=>n.set(e,t),[n]),De=(0,C.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await ye({client:t,bundle:e,employeeDraft:D,employeeOriginal:T});n.clear(),r&&d(r),await s(),await z(),await U(),await W()},[t,n,D,T,z,W,U,s,d]);(0,C.useEffect)(()=>{if(r)return r(De),()=>r(null)},[r,De]);let K=i.kind===`ready`?i.data:{},q=K.perCli||{},J=K.activeOverrides||{},Y=(0,C.useMemo)(()=>Object.keys(q),[q]),X=_(f.cli,j),Z=f.provider||X.defaultProvider||X.providers?.[0]||``,Oe=f.cli===`pi`,Q=!Oe&&(X.providers?.length??0)>0,ke=b(Q&&X.modelsByProvider?.[Z]||X.models,f.model),Ae=Q?te(X,f.model,X.effortsByProvider?.[Z]||X.efforts,Z):te(X,f.model),je=f.workingDir.trim()?null:`Required`,Me=(0,C.useCallback)(async e=>{F(!0),R(null);try{let n=await t.post(`/api/settings/runtime-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=L(e);if(t){d(t);return}R(a(e))}finally{F(!1)}},[t,d]),Ne=(0,C.useCallback)(async e=>{Se(!0),we(null);try{let n=await t.post(`/api/settings/multi-session-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=L(e);if(t){d(t);return}we(a(e))}finally{Se(!1)}},[t,d]);if(i.kind===`loading`)return(0,w.jsx)(c,{});if(i.kind===`offline`)return(0,w.jsx)(l,{port:e});if(i.kind===`error`)return(0,w.jsx)(u,{message:i.message});function Pe(){for(let e of Array.from(n.pending.keys()))e.startsWith(`activeOverrides.`)&&n.remove(e)}function $(e){m(e)}return(0,w.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),De()},children:[K.runtimeDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`기본 런타임 변경 안내`}),(0,w.jsx)(`p`,{children:`기존 선택은 유지됩니다. Codex App으로 전환하거나 현재 런타임을 계속 사용할 수 있습니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:P,onClick:()=>void Me(`accept`),children:`Codex App 사용`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:P,onClick:()=>void Me(`keep`),children:`현재 런타임 유지`})]}),I?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:I}):null]}):null,K.multiSessionDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`다중 세션 안내`}),(0,w.jsx)(`p`,{children:`대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 2로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 설정은 그대로 유지됩니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:xe,onClick:()=>void Ne(`accept`),children:`다중 세션 켜기`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:xe,onClick:()=>void Ne(`keep`),children:`지금 설정 유지`})]}),Ce?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:Ce}):null]}):null,(0,w.jsx)(be,{status:_e[f.cli],exhausted:Te}),(0,w.jsx)(le,{cli:f.cli,cliOptions:Y.length>0?Y:[f.cli||`claude`],provider:Z,providerOptions:Oe?[]:X.providers||[],model:f.model,modelOptions:ke,effort:f.effort,effortOptions:Ae,workingDir:f.workingDir,workingDirError:je,cliMeta:j,onCliChange:e=>{let t=_(e,j),n={...f,cli:e,provider:q[e]?.provider||t.defaultProvider||``,model:v(e,q,J),effort:g(e,q,J)};Pe(),$(n),G(`cli`,{value:e,original:K.cli||``,valid:!0})},onProviderChange:e=>{let t=X.modelsByProvider?.[e]||[],n=X.effortsByProvider?.[e]||[],r=t.includes(f.model)?f.model:t[0]||``,i=y(X,r,f.effort,n,e);$({...f,provider:e,model:r,effort:i}),G(`perCli.${f.cli}.provider`,{value:e,original:q[f.cli]?.provider||X.defaultProvider||``,valid:!0}),G(`activeOverrides.${f.cli}.model`,{value:r,original:v(f.cli,q,J),valid:r.trim().length>0}),G(`activeOverrides.${f.cli}.effort`,{value:i,original:g(f.cli,q,J),valid:!0})},onModelChange:e=>{let t=y(X,e,f.effort,Q?X.effortsByProvider?.[Z]||X.efforts:void 0,Q?Z:void 0);$({...f,model:e,effort:t}),G(`activeOverrides.${f.cli}.model`,{value:e,original:v(f.cli,q,J),valid:e.trim().length>0}),t!==f.effort&&G(`activeOverrides.${f.cli}.effort`,{value:t,original:g(f.cli,q,J),valid:!0})},onEffortChange:e=>{$({...f,effort:e}),G(`activeOverrides.${f.cli}.effort`,{value:e,original:g(f.cli,q,J),valid:!0})},onWorkingDirChange:e=>{$({...f,workingDir:e}),G(`workingDir`,{value:e,original:K.workingDir||``,valid:e.trim().length>0})}}),(0,w.jsx)(ue,{value:f.permissions,onChange:e=>{$({...f,permissions:e}),G(`permissions`,{value:e,original:K.permissions??`auto`,valid:e===`auto`||e.length>0})}}),(0,w.jsx)(de,{activeCli:f.cli,flushCli:x.cli||``,flushModel:x.model||``,cliOptions:Y,cliMeta:j,modelOptions:b(_(x.cli||f.cli,j).models,x.model||``),loading:re,error:oe,onFlushCliChange:e=>{let t=e&&_(e,j).models[0]||``;S({cli:e,model:t}),G(`flushCli`,{value:e,original:h.cli||``,valid:!0}),G(`flushModel`,{value:t,original:h.model||``,valid:!0})},onFlushModelChange:e=>{S({...x,model:e}),G(`flushModel`,{value:e,original:h.model||``,valid:!0})}}),(0,w.jsx)(ve,{roster:D,original:T,cliOptions:Y,cliMeta:j,loading:k,error:he,onRosterChange:e=>{if(O(e),me(e,T)){n.remove(`runtimeEmployees`);return}n.set(`runtimeEmployees`,{value:e,original:T,valid:!pe(e)})}})]})}export{be as CliProbeNotice,L as conflictSettingsFromError,R as default,I as splitAgentSaveBundle};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t}from"./settings-types-DPhhM-cj.js";import{n,t as r}from"./jsx-runtime-CYoNlHAD.js";import{t as i}from"./settings-client-D9KY2Ufl.js";import{t as a}from"./error-normalize-CLRJh19F.js";import{a as o,i as s,n as c,r as l,t as u}from"./page-shell-DZ1lls_P.js";import{i as d,s as f}from"./fields-E1L8aEhU.js";import{a as p,n as m,o as h}from"./Permissions-x_6_kLC1.js";import{a as ee,c as g,i as _,l as v,n as y,o as b,r as te,s as ne,t as x}from"./agent-meta-_Idad3qq.js";import{t as S}from"./path-utils-QbjARuCC.js";var C=e(n(),1),re=1e3,ie=8e3,ae=9e4;function oe(e,t){if(!e||!t)return!1;let n=e[t]?.probeState;return n?n===`checking`||n===`failing`:!1}function se(e){let t=re*2**Math.min(Number.isFinite(e)&&e>0?Math.floor(e):0,8);return Math.min(Math.max(t,re),ie)}function ce(e){let{snapshot:t,cli:n,attempts:r,now:i,deadline:a}=e;if(!oe(t,n))return{kind:`stop`};if(i>=a||r>=24)return{kind:`exhausted`};let o=t?.[n]?.nextRetryAt,s=typeof o==`number`&&o>i?o:i+se(r);return{kind:`wait`,delayMs:Math.max(Math.min(s,a)-i,0)}}var w=r();function le({cli:e,cliOptions:t,provider:n=``,providerOptions:r=[],model:i,modelOptions:a,effort:o,effortOptions:c,workingDir:l,workingDirError:u,cliMeta:p,onCliChange:m,onProviderChange:h,onModelChange:ee,onEffortChange:g,onWorkingDirChange:v}){let y=ne(t),b=y.filter(e=>x.includes(e)).length;return(0,w.jsx)(s,{title:`Agent runtime`,hint:`Active CLI, model, effort, and workspace used by this instance.`,children:(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(d,{id:`agent-cli`,label:`Active CLI`,value:e,options:y.map(e=>({value:e,label:_(e,p).label||e})),collapsedAfter:b,onChange:m}),r.length>0?(0,w.jsx)(d,{id:`agent-${e}-provider`,label:`Provider`,value:n,options:r.map(e=>({value:e,label:e})),onChange:e=>h?.(e)}):null,(0,w.jsx)(d,{id:`agent-model`,label:`Active model`,value:i,options:a.length>0?a:[{value:``,label:`(default)`}],onChange:ee}),(0,w.jsx)(d,{id:`agent-effort`,label:`Effort`,value:o,options:[{value:``,label:`(default)`},...c.map(e=>({value:e,label:e}))],disabled:c.length===0,onChange:g}),(0,w.jsx)(f,{id:`agent-workingDir`,label:`Working directory`,value:l,error:u,placeholder:`/path/to/project`,onChange:v})]})})}var T=[{value:`auto`,label:`Auto`},{value:`custom`,label:`Custom allowlist`}];function ue({value:e,onChange:t}){let n=p(e),r=n.mode===`custom`?`custom`:`auto`,i=n.mode===`custom`?n.tokens:[],a=n.mode===`custom`?`${i.length} explicit token${i.length===1?``:`s`}`:`Runtime resolves allowed capabilities`;return(0,w.jsxs)(s,{title:`Permissions`,hint:`Quick runtime mode. Open Permissions for detailed allowlist editing.`,children:[(0,w.jsx)(d,{id:`agent-permissions-mode`,label:`Mode`,value:r,options:T,onChange:e=>{t(e===`auto`?`auto`:i.length>0&&m(i)?i:h(null))}}),(0,w.jsx)(`p`,{className:`settings-agent-note`,children:a})]})}function de({activeCli:e,flushCli:t,flushModel:n,cliOptions:r,modelOptions:i,cliMeta:a,loading:o,error:c,onFlushCliChange:l,onFlushModelChange:u}){let f=t||e,p=f?_(f,a).label||f:`active`;return(0,w.jsx)(s,{title:`Flush Agent`,hint:`Separate summary agent used for context flush and compact work.`,children:(0,w.jsxs)(`details`,{className:`settings-agent-flush`,children:[(0,w.jsxs)(`summary`,{children:[(0,w.jsx)(`span`,{children:`Flush runtime`}),(0,w.jsxs)(`code`,{children:[p,n&&n!==`default`?` / ${n}`:``]})]}),o?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading flush settings...`}):null,c?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:c}):null,(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(d,{id:`agent-flush-cli`,label:`Flush CLI`,value:t,options:[{value:``,label:`(active CLI)`},...r.map(e=>({value:e,label:_(e,a).label||e}))],onChange:l}),(0,w.jsx)(d,{id:`agent-flush-model`,label:`Flush model`,value:n,options:[{value:``,label:`(default)`},...i],onChange:u})]})]})})}function E(e){return e.source===`static`||e.id.startsWith(`static:`)}function D(){return`new:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`}function O(e,t){let n=e[0]||`claude`,r=t?.[n]?.models?.[0]||`default`;return{id:D(),name:`New Agent`,cli:n,model:r,role:``,status:`idle`,source:`db`}}function fe(e){return Array.isArray(e)?e.map(k).filter(Boolean):e.data.map(k).filter(Boolean)}function k(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.id==`string`?t.id:``,r=typeof t.name==`string`?t.name:``;if(!n||!r)return null;let i=t.source===`static`||n.startsWith(`static:`)?`static`:`db`,a={id:n,name:r,cli:typeof t.cli==`string`&&t.cli?t.cli:`claude`,model:typeof t.model==`string`&&t.model?t.model:`default`,role:typeof t.role==`string`?t.role:``,source:i};return typeof t.status==`string`&&(a.status=t.status),a}function A(e){return e.name.trim()?e.cli.trim()?e.model.trim()?null:`Model is required`:`CLI is required`:`Name is required`}function pe(e){return e.some(e=>A(e)!==null)}function me(e,t){return JSON.stringify(e.map(N))===JSON.stringify(t.map(N))}function he(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Set(t.map(e=>e.id)),i=[],a=[],o=[];for(let e of t){let t=n.get(e.id);if(!t||e.id.startsWith(`new:`)){i.push(e);continue}let r=M(t,e);Object.keys(r).length>0&&a.push({before:t,after:e,patch:r})}for(let t of e)!r.has(t.id)&&!E(t)&&o.push(t);return{added:i,updated:a,removed:o}}function ge(e,t){let n=he(e,t);return{added:n.added.length,updated:n.updated.length,removed:n.removed.length}}async function j(e,t,n){let r=he(t,n);for(let t of r.removed)await e.delete(`/api/employees/${encodeURIComponent(t.id)}`);for(let t of r.added)await e.post(`/api/employees`,_e(t));for(let t of r.updated)await e.put(`/api/employees/${encodeURIComponent(t.after.id)}`,t.patch)}function M(e,t){if(E(t))return e.model===t.model?{}:{model:t.model};let n={};for(let r of[`name`,`cli`,`model`,`role`,`status`])(e[r]||``)!==(t[r]||``)&&(n[r]=t[r]||``);return n}function _e(e){return{name:e.name.trim()||`New Agent`,cli:e.cli.trim()||`claude`,model:e.model.trim()||`default`,role:e.role.trim()}}function N(e){let t={id:e.id,name:e.name,cli:e.cli,model:e.model,role:e.role,source:e.source};return e.status!==void 0&&(t.status=e.status),t}function P({employee:e,index:t,cliOptions:n,cliMeta:r,onChange:i,onRemove:a}){let o=E(e),s=b(_(e.cli,r).models,e.model),c=A(e),l=Array.from(new Set([...n,e.cli,`claude`])).filter(Boolean);return(0,w.jsxs)(`fieldset`,{className:`settings-runtime-employee-row`,children:[(0,w.jsxs)(`legend`,{children:[e.name||`Employee ${t+1}`,o?(0,w.jsx)(`span`,{children:`static`}):null]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-grid`,children:[(0,w.jsx)(f,{id:`runtime-employee-${e.id}-name`,label:`Name`,value:e.name,disabled:o,error:c===`Name is required`?c:null,onChange:e=>i({name:e})}),(0,w.jsx)(d,{id:`runtime-employee-${e.id}-cli`,label:`CLI`,value:e.cli,disabled:o,options:l.map(e=>({value:e,label:_(e,r).label||e})),onChange:e=>{i({cli:e,model:_(e,r).models[0]||`default`})}}),(0,w.jsx)(d,{id:`runtime-employee-${e.id}-model`,label:`Model`,value:e.model,options:s.length>0?s:[{value:`default`,label:`default`}],onChange:e=>i({model:e})}),(0,w.jsx)(f,{id:`runtime-employee-${e.id}-role`,label:`Role`,value:e.role,disabled:o,onChange:e=>i({role:e})})]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-footer`,children:[(0,w.jsxs)(`span`,{children:[e.source,e.status?` / ${e.status}`:``]}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:o,onClick:a,"aria-label":`Remove employee ${e.name||t+1}`,children:`Remove`})]})]})}function ve({roster:e,original:t,cliOptions:n,cliMeta:r,loading:i,error:a,onRosterChange:o}){let c=ge(t,e),l=pe(e);function u(t,n){o(e.map((e,r)=>r===t?{...e,...n}:e))}function d(t){o(e.filter((e,n)=>n!==t))}return(0,w.jsxs)(s,{title:`Employees`,hint:`Runtime dispatch roster. Static employees keep their locked identity; database employees can be edited.`,children:[(0,w.jsxs)(`div`,{className:`settings-runtime-employee-summary`,children:[(0,w.jsxs)(`span`,{children:[`+`,c.added]}),(0,w.jsxs)(`span`,{children:[`~`,c.updated]}),(0,w.jsxs)(`span`,{children:[`-`,c.removed]}),l?(0,w.jsx)(`strong`,{children:`Fix invalid rows before saving.`}):null]}),i?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading employees...`}):null,a?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:a}):null,e.length===0?(0,w.jsx)(`p`,{className:`settings-empty`,children:`No runtime employees configured.`}):(0,w.jsx)(`div`,{className:`settings-runtime-employee-list`,children:e.map((e,t)=>(0,w.jsx)(P,{employee:e,index:t,cliOptions:n,cliMeta:r??null,onChange:e=>u(t,e),onRemove:()=>d(t)},e.id))}),(0,w.jsx)(`div`,{className:`settings-employee-footer-bar`,children:(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>o([...e,O(n,r)]),children:`+ Add employee`})})]})}var F=new Set([`runtimeEmployees`,`flushCli`,`flushModel`]);function I(e){let t={},n=null,r=null;for(let[i,a]of Object.entries(e))i===`runtimeEmployees`?r=a:i===`flushCli`||i===`flushModel`?(n??={},n[i===`flushCli`?`cli`:`model`]=String(a??``)):F.has(i)||(t[i]=a);return{settingsBundle:t,flushPatch:n,runtimeEmployeesNext:r}}async function ye(e){let{client:t,bundle:n,employeeDraft:r,employeeOriginal:i}=e;if(pe(r))throw Error(`runtime employees: fix invalid rows before saving`);let{settingsBundle:a,flushPatch:o,runtimeEmployeesNext:s}=I(n),c=null;try{if(Object.keys(a).length>0){let e=await t.put(`/api/settings`,S(a));c=e&&typeof e==`object`&&`data`in e?e.data:e}}catch(e){throw Error(`settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{o&&await t.put(`/api/memory-files/settings`,o)}catch(e){throw Error(`flush settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{s&&await j(t,i,s)}catch(e){throw Error(`runtime employees save failed: ${e instanceof Error?e.message:String(e)}`)}return c}function be({status:e,exhausted:n=!1}){if(n)return(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`alert`,children:`상태 확인이 끝나지 않았습니다. 새로고침하거나 잠시 후 다시 확인하세요.`});if(!e)return null;let r=t(e);return r.kind===`checking`?(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`status`,"aria-live":`polite`,children:`상태 확인 중`}):r.kind===`unknown`?(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`alert`,children:r.message}):r.kind===`failing`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`alert`,children:[`상태 확인 실패 (재시도 중)`,e.probeError?`: ${e.probeError}`:``]}):null}function L(e){if(!(e instanceof i)||e.status!==409)return null;try{return JSON.parse(e.detail).settings??null}catch{return null}}function R({port:e,client:t,dirty:n,registerSave:r}){let{state:i,refresh:s,setData:d}=o(t,`/api/settings`),[f,m]=(0,C.useState)({cli:``,provider:``,model:``,effort:``,workingDir:``,permissions:`auto`}),[h,ne]=(0,C.useState)({}),[x,S]=(0,C.useState)({}),[re,ie]=(0,C.useState)(!0),[oe,se]=(0,C.useState)(null),[T,E]=(0,C.useState)([]),[D,O]=(0,C.useState)([]),[k,A]=(0,C.useState)(!0),[he,ge]=(0,C.useState)(null),[j,M]=(0,C.useState)(null),[_e,N]=(0,C.useState)({}),[P,F]=(0,C.useState)(!1),[I,R]=(0,C.useState)(null),[xe,Se]=(0,C.useState)(!1),[Ce,we]=(0,C.useState)(null),z=(0,C.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);M(ee(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{M(null)}},[t]),B=(0,C.useRef)(0),V=(0,C.useRef)({}),[Te,Ee]=(0,C.useState)(!1),H=(0,C.useCallback)(async e=>{try{let n=await t.get(`/api/cli-status`);if(e!==void 0&&e!==B.current)return;V.current=n,N(n)}catch{if(e!==void 0&&e!==B.current)return;V.current={},N({})}},[t]),U=(0,C.useCallback)(async()=>{ie(!0),se(null);try{let e=await t.get(`/api/memory-files`),n={cli:e.cli||``,model:e.model||``};ne(n),S(n)}catch(e){se(e instanceof Error?e.message:String(e))}finally{ie(!1)}},[t]),W=(0,C.useCallback)(async()=>{A(!0),ge(null);try{let e=fe(await t.get(`/api/employees`));E(e),O(e)}catch(e){ge(e instanceof Error?e.message:String(e))}finally{A(!1)}},[t]);(0,C.useEffect)(()=>{z(),H(),U(),W()},[z,H,W,U]),(0,C.useEffect)(()=>{if(!f.cli)return;let e=B.current+1;B.current=e,Ee(!1);let t=Date.now()+ae,n=0,r,i=()=>{if(e!==B.current)return;let a=ce({snapshot:V.current,cli:f.cli,attempts:n,now:Date.now(),deadline:t});if(a.kind!==`stop`){if(a.kind===`exhausted`){Ee(!0);return}r=setTimeout(()=>{e===B.current&&(n+=1,H(e).then(()=>{e===B.current&&i()}))},a.delayMs)}};return i(),()=>{B.current=e+1,r!==void 0&&clearTimeout(r)}},[f.cli,H]),(0,C.useEffect)(()=>{if(i.kind!==`ready`)return;let e=Object.keys(i.data.perCli||{}),t=i.data.cli||e[0]||``,n=p(i.data.permissions),r=_(t,j);m({cli:t,provider:i.data.perCli?.[t]?.provider||r.defaultProvider||``,model:v(t,i.data.perCli,i.data.activeOverrides),effort:g(t,i.data.perCli,i.data.activeOverrides),workingDir:i.data.workingDir||``,permissions:n.mode===`custom`?n.tokens:`auto`})},[j,i]),(0,C.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`cli`||e===`workingDir`||e===`permissions`||e===`runtimeEmployees`||e===`flushCli`||e===`flushModel`||e.startsWith(`activeOverrides.`))&&n.remove(e)},[n]);let G=(0,C.useCallback)((e,t)=>n.set(e,t),[n]),De=(0,C.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await ye({client:t,bundle:e,employeeDraft:D,employeeOriginal:T});n.clear(),r&&d(r),await s(),await z(),await U(),await W()},[t,n,D,T,z,W,U,s,d]);(0,C.useEffect)(()=>{if(r)return r(De),()=>r(null)},[r,De]);let K=i.kind===`ready`?i.data:{},q=K.perCli||{},J=K.activeOverrides||{},Y=(0,C.useMemo)(()=>Object.keys(q),[q]),X=_(f.cli,j),Z=f.provider||X.defaultProvider||X.providers?.[0]||``,Oe=f.cli===`pi`,Q=!Oe&&(X.providers?.length??0)>0,ke=b(Q&&X.modelsByProvider?.[Z]||X.models,f.model),Ae=Q?te(X,f.model,X.effortsByProvider?.[Z]||X.efforts,Z):te(X,f.model),je=f.workingDir.trim()?null:`Required`,Me=(0,C.useCallback)(async e=>{F(!0),R(null);try{let n=await t.post(`/api/settings/runtime-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=L(e);if(t){d(t);return}R(a(e))}finally{F(!1)}},[t,d]),Ne=(0,C.useCallback)(async e=>{Se(!0),we(null);try{let n=await t.post(`/api/settings/multi-session-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=L(e);if(t){d(t);return}we(a(e))}finally{Se(!1)}},[t,d]);if(i.kind===`loading`)return(0,w.jsx)(c,{});if(i.kind===`offline`)return(0,w.jsx)(l,{port:e});if(i.kind===`error`)return(0,w.jsx)(u,{message:i.message});function Pe(){for(let e of Array.from(n.pending.keys()))e.startsWith(`activeOverrides.`)&&n.remove(e)}function $(e){m(e)}return(0,w.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),De()},children:[K.runtimeDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`기본 런타임 변경 안내`}),(0,w.jsx)(`p`,{children:`기존 선택은 유지됩니다. Codex App으로 전환하거나 현재 런타임을 계속 사용할 수 있습니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:P,onClick:()=>void Me(`accept`),children:`Codex App 사용`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:P,onClick:()=>void Me(`keep`),children:`현재 런타임 유지`})]}),I?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:I}):null]}):null,K.multiSessionDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`다중 세션 안내`}),(0,w.jsx)(`p`,{children:`대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 2로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 설정은 그대로 유지됩니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:xe,onClick:()=>void Ne(`accept`),children:`다중 세션 켜기`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:xe,onClick:()=>void Ne(`keep`),children:`지금 설정 유지`})]}),Ce?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:Ce}):null]}):null,(0,w.jsx)(be,{status:_e[f.cli],exhausted:Te}),(0,w.jsx)(le,{cli:f.cli,cliOptions:Y.length>0?Y:[f.cli||`claude`],provider:Z,providerOptions:Oe?[]:X.providers||[],model:f.model,modelOptions:ke,effort:f.effort,effortOptions:Ae,workingDir:f.workingDir,workingDirError:je,cliMeta:j,onCliChange:e=>{let t=_(e,j),n={...f,cli:e,provider:q[e]?.provider||t.defaultProvider||``,model:v(e,q,J),effort:g(e,q,J)};Pe(),$(n),G(`cli`,{value:e,original:K.cli||``,valid:!0})},onProviderChange:e=>{let t=X.modelsByProvider?.[e]||[],n=X.effortsByProvider?.[e]||[],r=t.includes(f.model)?f.model:t[0]||``,i=y(X,r,f.effort,n,e);$({...f,provider:e,model:r,effort:i}),G(`perCli.${f.cli}.provider`,{value:e,original:q[f.cli]?.provider||X.defaultProvider||``,valid:!0}),G(`activeOverrides.${f.cli}.model`,{value:r,original:v(f.cli,q,J),valid:r.trim().length>0}),G(`activeOverrides.${f.cli}.effort`,{value:i,original:g(f.cli,q,J),valid:!0})},onModelChange:e=>{let t=y(X,e,f.effort,Q?X.effortsByProvider?.[Z]||X.efforts:void 0,Q?Z:void 0);$({...f,model:e,effort:t}),G(`activeOverrides.${f.cli}.model`,{value:e,original:v(f.cli,q,J),valid:e.trim().length>0}),t!==f.effort&&G(`activeOverrides.${f.cli}.effort`,{value:t,original:g(f.cli,q,J),valid:!0})},onEffortChange:e=>{$({...f,effort:e}),G(`activeOverrides.${f.cli}.effort`,{value:e,original:g(f.cli,q,J),valid:!0})},onWorkingDirChange:e=>{$({...f,workingDir:e}),G(`workingDir`,{value:e,original:K.workingDir||``,valid:e.trim().length>0})}}),(0,w.jsx)(ue,{value:f.permissions,onChange:e=>{$({...f,permissions:e}),G(`permissions`,{value:e,original:K.permissions??`auto`,valid:e===`auto`||e.length>0})}}),(0,w.jsx)(de,{activeCli:f.cli,flushCli:x.cli||``,flushModel:x.model||``,cliOptions:Y,cliMeta:j,modelOptions:b(_(x.cli||f.cli,j).models,x.model||``),loading:re,error:oe,onFlushCliChange:e=>{let t=e&&_(e,j).models[0]||``;S({cli:e,model:t}),G(`flushCli`,{value:e,original:h.cli||``,valid:!0}),G(`flushModel`,{value:t,original:h.model||``,valid:!0})},onFlushModelChange:e=>{S({...x,model:e}),G(`flushModel`,{value:e,original:h.model||``,valid:!0})}}),(0,w.jsx)(ve,{roster:D,original:T,cliOptions:Y,cliMeta:j,loading:k,error:he,onRosterChange:e=>{if(O(e),me(e,T)){n.remove(`runtimeEmployees`);return}n.set(`runtimeEmployees`,{value:e,original:T,valid:!pe(e)})}})]})}export{be as CliProbeNotice,L as conflictSettingsFromError,R as default,I as splitAgentSaveBundle};
@@ -1 +1 @@
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"./settings-client-D9KY2Ufl.js";import{i,n as a,t as o}from"./page-shell-GpE8A-FA.js";import{t as s}from"./InlineWarn-D-fmcQXD.js";var c=e(t(),1),l=n(),u=3e3;function d(e){if(!e||typeof e!=`object`)return{running:!1,tabs:0};let t=e,n={running:t.running===!0,tabs:typeof t.tabs==`number`&&Number.isFinite(t.tabs)?t.tabs:0};return typeof t.cdpUrl==`string`&&(n.cdpUrl=t.cdpUrl),n}function f(e){if(!e||typeof e!=`object`)return null;let t=e,n=t.tab&&typeof t.tab==`object`?t.tab:null,r={ok:t.ok===!0};if(typeof t.reason==`string`&&(r.reason=t.reason),n){let e={};typeof n.url==`string`&&(e.url=n.url),typeof n.title==`string`&&(e.title=n.title),typeof n.targetId==`string`&&(e.targetId=n.targetId),r.tab=e}else r.tab=null;return r}function p(e){return e?e.running?`running`:`stopped`:`unknown`}function m({port:e,client:t}){let[n,p]=(0,c.useState)({kind:`loading`}),[m,h]=(0,c.useState)({kind:`idle`}),g=(0,c.useRef)(0),_=(0,c.useRef)(0),v=(0,c.useCallback)(async e=>{try{let[n,r]=await Promise.all([t.get(`/api/browser/status`),t.get(`/api/browser/active-tab`).catch(()=>null)]);if(e!==g.current)return;let i=d(n);p({kind:`ready`,status:i,activeTab:i.running?f(r):null})}catch(t){if(e!==g.current)return;p({kind:`error`,message:t instanceof r||t instanceof Error?t.message:String(t)})}},[t]);(0,c.useEffect)(()=>{let e=g.current+1;g.current=e,p({kind:`loading`}),v(e);let t=setInterval(()=>{v(e)},u);return()=>{g.current=e+1,clearInterval(t)}},[v]);let y=(0,c.useCallback)(async(e,t)=>{let n=_.current+1;_.current=n,h({kind:`pending`,label:e});try{if(await t(),n!==_.current)return;h({kind:`success`,message:`${e} succeeded`}),v(g.current)}catch(e){if(n!==_.current)return;h({kind:`error`,message:e instanceof Error?e.message:String(e)})}},[v]),b=(0,c.useCallback)(()=>{y(`Start visible browser`,()=>t.post(`/api/browser/start`,{mode:`manual`,headless:!1}))},[t,y]),x=(0,c.useCallback)(()=>{y(`Start agent browser`,()=>t.post(`/api/browser/start`,{mode:`agent`,headless:!0}))},[t,y]),S=(0,c.useCallback)(()=>{y(`Stop`,()=>t.post(`/api/browser/stop`,{}))},[t,y]),C=(0,c.useCallback)(()=>{typeof window<`u`&&!window.confirm(`Reset the browser profile? Stops the browser and clears the persisted profile directory. Re-launch will start fresh.`)||y(`Reset profile`,()=>t.post(`/api/browser/stop`,{}))},[t,y]);if(n.kind===`loading`)return(0,l.jsx)(a,{label:`Polling browser status…`});if(n.kind===`error`)return(0,l.jsx)(o,{message:n.message});let{status:w,activeTab:T}=n,E=m.kind===`pending`;return(0,l.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,l.jsxs)(i,{title:`Status`,hint:`Polled every ${u/1e3}s while this page is open.`,children:[(0,l.jsxs)(`dl`,{className:`settings-readonly-grid`,children:[(0,l.jsx)(`dt`,{children:`Running`}),(0,l.jsx)(`dd`,{children:w.running?`✅ yes`:`❌ no`}),(0,l.jsx)(`dt`,{children:`Tabs`}),(0,l.jsx)(`dd`,{children:w.tabs}),(0,l.jsx)(`dt`,{children:`CDP URL`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:w.cdpUrl||`—`})}),(0,l.jsx)(`dt`,{children:`Instance port`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:e})})]}),(0,l.jsxs)(`div`,{className:`browser-actions`,children:[(0,l.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:w.running||E,onClick:b,children:`Start visible browser`}),(0,l.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:w.running||E,onClick:x,children:`Start agent browser`}),(0,l.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:!w.running||E,onClick:S,children:`Stop`}),(0,l.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:E,onClick:C,children:`Reset profile`})]}),m.kind===`pending`&&(0,l.jsxs)(`p`,{className:`settings-section-hint`,role:`status`,children:[m.label,`…`]}),m.kind===`success`&&(0,l.jsxs)(`p`,{className:`settings-section-hint`,role:`status`,children:[`✅ `,m.message]}),m.kind===`error`&&(0,l.jsx)(s,{role:`alert`,children:m.message})]}),(0,l.jsx)(i,{title:`Active tab`,hint:`Tab the agent currently targets. Empty when the browser is stopped.`,children:w.running?T&&T.ok&&T.tab?(0,l.jsxs)(`dl`,{className:`settings-readonly-grid`,children:[(0,l.jsx)(`dt`,{children:`URL`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:T.tab.url||`—`})}),(0,l.jsx)(`dt`,{children:`Title`}),(0,l.jsx)(`dd`,{children:T.tab.title||`—`}),(0,l.jsx)(`dt`,{children:`Target ID`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:T.tab.targetId||`—`})})]}):(0,l.jsxs)(`p`,{className:`settings-section-hint`,children:[`No verified active tab`,T?.reason?` (${T.reason})`:``,`.`]}):(0,l.jsx)(`p`,{className:`settings-section-hint`,children:`Browser is not running.`})})]})}export{m as default,p as describeStatus,f as normalizeActiveTab,d as normalizeBrowserStatus};
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"./settings-client-D9KY2Ufl.js";import{i,n as a,t as o}from"./page-shell-DZ1lls_P.js";import{t as s}from"./InlineWarn-B3bJfG-Z.js";var c=e(t(),1),l=n(),u=3e3;function d(e){if(!e||typeof e!=`object`)return{running:!1,tabs:0};let t=e,n={running:t.running===!0,tabs:typeof t.tabs==`number`&&Number.isFinite(t.tabs)?t.tabs:0};return typeof t.cdpUrl==`string`&&(n.cdpUrl=t.cdpUrl),n}function f(e){if(!e||typeof e!=`object`)return null;let t=e,n=t.tab&&typeof t.tab==`object`?t.tab:null,r={ok:t.ok===!0};if(typeof t.reason==`string`&&(r.reason=t.reason),n){let e={};typeof n.url==`string`&&(e.url=n.url),typeof n.title==`string`&&(e.title=n.title),typeof n.targetId==`string`&&(e.targetId=n.targetId),r.tab=e}else r.tab=null;return r}function p(e){return e?e.running?`running`:`stopped`:`unknown`}function m({port:e,client:t}){let[n,p]=(0,c.useState)({kind:`loading`}),[m,h]=(0,c.useState)({kind:`idle`}),g=(0,c.useRef)(0),_=(0,c.useRef)(0),v=(0,c.useCallback)(async e=>{try{let[n,r]=await Promise.all([t.get(`/api/browser/status`),t.get(`/api/browser/active-tab`).catch(()=>null)]);if(e!==g.current)return;let i=d(n);p({kind:`ready`,status:i,activeTab:i.running?f(r):null})}catch(t){if(e!==g.current)return;p({kind:`error`,message:t instanceof r||t instanceof Error?t.message:String(t)})}},[t]);(0,c.useEffect)(()=>{let e=g.current+1;g.current=e,p({kind:`loading`}),v(e);let t=setInterval(()=>{v(e)},u);return()=>{g.current=e+1,clearInterval(t)}},[v]);let y=(0,c.useCallback)(async(e,t)=>{let n=_.current+1;_.current=n,h({kind:`pending`,label:e});try{if(await t(),n!==_.current)return;h({kind:`success`,message:`${e} succeeded`}),v(g.current)}catch(e){if(n!==_.current)return;h({kind:`error`,message:e instanceof Error?e.message:String(e)})}},[v]),b=(0,c.useCallback)(()=>{y(`Start visible browser`,()=>t.post(`/api/browser/start`,{mode:`manual`,headless:!1}))},[t,y]),x=(0,c.useCallback)(()=>{y(`Start agent browser`,()=>t.post(`/api/browser/start`,{mode:`agent`,headless:!0}))},[t,y]),S=(0,c.useCallback)(()=>{y(`Stop`,()=>t.post(`/api/browser/stop`,{}))},[t,y]),C=(0,c.useCallback)(()=>{typeof window<`u`&&!window.confirm(`Reset the browser profile? Stops the browser and clears the persisted profile directory. Re-launch will start fresh.`)||y(`Reset profile`,()=>t.post(`/api/browser/stop`,{}))},[t,y]);if(n.kind===`loading`)return(0,l.jsx)(a,{label:`Polling browser status…`});if(n.kind===`error`)return(0,l.jsx)(o,{message:n.message});let{status:w,activeTab:T}=n,E=m.kind===`pending`;return(0,l.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,l.jsxs)(i,{title:`Status`,hint:`Polled every ${u/1e3}s while this page is open.`,children:[(0,l.jsxs)(`dl`,{className:`settings-readonly-grid`,children:[(0,l.jsx)(`dt`,{children:`Running`}),(0,l.jsx)(`dd`,{children:w.running?`✅ yes`:`❌ no`}),(0,l.jsx)(`dt`,{children:`Tabs`}),(0,l.jsx)(`dd`,{children:w.tabs}),(0,l.jsx)(`dt`,{children:`CDP URL`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:w.cdpUrl||`—`})}),(0,l.jsx)(`dt`,{children:`Instance port`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:e})})]}),(0,l.jsxs)(`div`,{className:`browser-actions`,children:[(0,l.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:w.running||E,onClick:b,children:`Start visible browser`}),(0,l.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:w.running||E,onClick:x,children:`Start agent browser`}),(0,l.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:!w.running||E,onClick:S,children:`Stop`}),(0,l.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:E,onClick:C,children:`Reset profile`})]}),m.kind===`pending`&&(0,l.jsxs)(`p`,{className:`settings-section-hint`,role:`status`,children:[m.label,`…`]}),m.kind===`success`&&(0,l.jsxs)(`p`,{className:`settings-section-hint`,role:`status`,children:[`✅ `,m.message]}),m.kind===`error`&&(0,l.jsx)(s,{role:`alert`,children:m.message})]}),(0,l.jsx)(i,{title:`Active tab`,hint:`Tab the agent currently targets. Empty when the browser is stopped.`,children:w.running?T&&T.ok&&T.tab?(0,l.jsxs)(`dl`,{className:`settings-readonly-grid`,children:[(0,l.jsx)(`dt`,{children:`URL`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:T.tab.url||`—`})}),(0,l.jsx)(`dt`,{children:`Title`}),(0,l.jsx)(`dd`,{children:T.tab.title||`—`}),(0,l.jsx)(`dt`,{children:`Target ID`}),(0,l.jsx)(`dd`,{children:(0,l.jsx)(`code`,{children:T.tab.targetId||`—`})})]}):(0,l.jsxs)(`p`,{className:`settings-section-hint`,children:[`No verified active tab`,T?.reason?` (${T.reason})`:``,`.`]}):(0,l.jsx)(`p`,{className:`settings-section-hint`,children:`Browser is not running.`})})]})}export{m as default,p as describeStatus,f as normalizeActiveTab,d as normalizeBrowserStatus};
@@ -1 +1 @@
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}from"./fields-BwOMlwS0.js";var i=e(t(),1),a=n();function o(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 s(e){return e===`telegram`||e===`discord`||e===`slack`}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.activeInboundChannels,i;if(r!==void 0)i=Array.isArray(r)&&r.every(s)?[...new Set(r)]:null;else{let e=n.activeInbound;i=s(e)?[e]:null}if(!i)return null;let a=n.activeInbound;if(!s(a)||!o(n.telegram)||!o(n.discord))return null;let c=o(n.slack)?n.slack:{configured:!1,activeInbound:!1,sendCapable:!1,reason:`unavailable`};return{activeInbound:a,activeInboundChannels:i,telegram:n.telegram,discord:n.discord,slack:c}}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,r]=(0,i.useState)(null),[o,s]=(0,i.useState)(null),u=(0,i.useRef)(!0),d=(0,i.useCallback)(async()=>{try{let t=await e.get(`/api/health`);if(!u.current)return;let n=c(t);r(n),s(n?null:`Channel health unavailable on this instance.`)}catch(e){if(!u.current)return;r(null),s(e instanceof Error?e.message:String(e))}},[e]);(0,i.useEffect)(()=>(u.current=!0,d(),()=>{u.current=!1}),[d]);let f=n?.[t]??null,p=!!(f?.configured&&f.sendCapable&&!f.activeInbound);return(0,a.jsxs)(`div`,{className:`settings-transport-status`,role:`status`,"aria-live":`polite`,children:[o?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:o}):null,f?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{className:`settings-transport-chips`,children:l(f).map(e=>(0,a.jsx)(`span`,{className:`settings-health-pill is-ok`,children:e},e))}),p?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:`This transport is not receiving inbound messages, but send-only delivery remains available.`}):null]}):null,(0,a.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void d(),children:`Refresh transport status`})]})}function d({pageChannel:e,snapshot:t,enabledChannels:n,homeChannel:o,setEnabledChannels:s,setHomeChannel:c,dirty:l,idPrefix:u=`channel`}){let d=t.messaging||{},p=Array.isArray(d.enabledChannels)?d.enabledChannels:[],m=d.homeChannel||`telegram`,h=(0,i.useCallback)(e=>{l.set(`messaging.enabledChannels`,{value:e,original:p,valid:!0})},[l,p]),g=(0,i.useCallback)(e=>{l.set(`messaging.homeChannel`,{value:e,original:m,valid:!0})},[l,m]),_=n.includes(e);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r,{id:`${u}-enabled`,label:`Receive inbound messages on ${f(e)}`,value:_,onChange:t=>{let r=t?[...new Set([...n,e])]:n.filter(t=>t!==e);s(r),h(r),t&&n.length===0&&(c(e),g(e))}}),(0,a.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,a.jsx)(`legend`,{className:`settings-field-label`,children:`Home channel (fallback for proactive sends)`}),(0,a.jsx)(`div`,{className:`settings-active-channel-options`,role:`radiogroup`,"aria-label":`Home channel`,children:[`telegram`,`discord`,`slack`].map(e=>(0,a.jsxs)(`label`,{className:`settings-radio`,children:[(0,a.jsx)(`input`,{type:`radio`,name:`${u}-homeChannel`,checked:o===e,onChange:()=>{c(e),g(e)}}),(0,a.jsx)(`span`,{children:f(e)})]},e))})]})]})}function f(e){return e.charAt(0).toUpperCase()+e.slice(1)}export{u as n,d 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}from"./fields-E1L8aEhU.js";var i=e(t(),1),a=n();function o(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 s(e){return e===`telegram`||e===`discord`||e===`slack`}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.activeInboundChannels,i;if(r!==void 0)i=Array.isArray(r)&&r.every(s)?[...new Set(r)]:null;else{let e=n.activeInbound;i=s(e)?[e]:null}if(!i)return null;let a=n.activeInbound;if(!s(a)||!o(n.telegram)||!o(n.discord))return null;let c=o(n.slack)?n.slack:{configured:!1,activeInbound:!1,sendCapable:!1,reason:`unavailable`};return{activeInbound:a,activeInboundChannels:i,telegram:n.telegram,discord:n.discord,slack:c}}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,r]=(0,i.useState)(null),[o,s]=(0,i.useState)(null),u=(0,i.useRef)(!0),d=(0,i.useCallback)(async()=>{try{let t=await e.get(`/api/health`);if(!u.current)return;let n=c(t);r(n),s(n?null:`Channel health unavailable on this instance.`)}catch(e){if(!u.current)return;r(null),s(e instanceof Error?e.message:String(e))}},[e]);(0,i.useEffect)(()=>(u.current=!0,d(),()=>{u.current=!1}),[d]);let f=n?.[t]??null,p=!!(f?.configured&&f.sendCapable&&!f.activeInbound);return(0,a.jsxs)(`div`,{className:`settings-transport-status`,role:`status`,"aria-live":`polite`,children:[o?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:o}):null,f?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{className:`settings-transport-chips`,children:l(f).map(e=>(0,a.jsx)(`span`,{className:`settings-health-pill is-ok`,children:e},e))}),p?(0,a.jsx)(`p`,{className:`settings-field-hint`,children:`This transport is not receiving inbound messages, but send-only delivery remains available.`}):null]}):null,(0,a.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void d(),children:`Refresh transport status`})]})}function d({pageChannel:e,snapshot:t,enabledChannels:n,homeChannel:o,setEnabledChannels:s,setHomeChannel:c,dirty:l,idPrefix:u=`channel`}){let d=t.messaging||{},p=Array.isArray(d.enabledChannels)?d.enabledChannels:[],m=d.homeChannel||`telegram`,h=(0,i.useCallback)(e=>{l.set(`messaging.enabledChannels`,{value:e,original:p,valid:!0})},[l,p]),g=(0,i.useCallback)(e=>{l.set(`messaging.homeChannel`,{value:e,original:m,valid:!0})},[l,m]),_=n.includes(e);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r,{id:`${u}-enabled`,label:`Receive inbound messages on ${f(e)}`,value:_,onChange:t=>{let r=t?[...new Set([...n,e])]:n.filter(t=>t!==e);s(r),h(r),t&&n.length===0&&(c(e),g(e))}}),(0,a.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,a.jsx)(`legend`,{className:`settings-field-label`,children:`Home channel (fallback for proactive sends)`}),(0,a.jsx)(`div`,{className:`settings-active-channel-options`,role:`radiogroup`,"aria-label":`Home channel`,children:[`telegram`,`discord`,`slack`].map(e=>(0,a.jsxs)(`label`,{className:`settings-radio`,children:[(0,a.jsx)(`input`,{type:`radio`,name:`${u}-homeChannel`,checked:o===e,onChange:()=>{c(e),g(e)}}),(0,a.jsx)(`span`,{children:f(e)})]},e))})]})]})}function f(e){return e.charAt(0).toUpperCase()+e.slice(1)}export{u as n,d as t};
@@ -1 +1 @@
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,n as l,o as u,s as d}from"./fields-BwOMlwS0.js";import{t as f}from"./path-utils-CHwADH-r.js";import{n as p,t as m}from"./HealthBadge-CiNMS-1k.js";import{n as h,t as g}from"./ChannelEnablementControl-Da_t_jq6.js";var _=e(t(),1),v=n(),y=[`messaging.enabledChannels`,`messaging.homeChannel`,`discord.enabled`,`discord.token`,`discord.guildId`,`discord.channelIds`,`discord.forwardAll`,`discord.allowBots`,`discord.mentionOnly`];function b(e){return e?/^\d{5,32}$/.test(e.trim()):!1}function x({port:e,client:t,dirty:n,registerSave:x}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,_.useState)([]),[O,k]=(0,_.useState)(`telegram`),[A,j]=(0,_.useState)(!1),[M,N]=(0,_.useState)(``),[P,F]=(0,_.useState)(``),[I,L]=(0,_.useState)([]),[R,z]=(0,_.useState)(!0),[B,V]=(0,_.useState)(!1),[H,U]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(C.kind!==`ready`)return;let e=C.data.messaging||{};D((Array.isArray(e.enabledChannels)?e.enabledChannels:[]).filter(S)),k(S(e.homeChannel)?e.homeChannel:`telegram`);let t=C.data.discord||{};j(!!t.enabled),N(``),F(t.guildId??``),L(Array.isArray(t.channelIds)?[...t.channelIds]:[]),z(t.forwardAll!==!1),V(!!t.allowBots),U(!!t.mentionOnly)},[C]),(0,_.useEffect)(()=>()=>{for(let e of y)n.remove(e)},[n]);let W=(0,_.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,_.useMemo)(()=>C.kind===`ready`&&C.data.discord||{},[C]),K=(0,_.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.messaging||{};D(Array.isArray(o.enabledChannels)?o.enabledChannels.filter(S):[]),k(S(o.homeChannel)?o.homeChannel:`telegram`);let s=a.discord||{};j(!!s.enabled),N(``),F(s.guildId??``),L(Array.isArray(s.channelIds)?[...s.channelIds]:[]),z(s.forwardAll!==!1),V(!!s.allowBots),U(!!s.mentionOnly),await w()},[t,n,w,T]);if((0,_.useEffect)(()=>{if(x)return x(K),()=>x(null)},[x,K]),C.kind===`loading`)return(0,v.jsx)(a,{});if(C.kind===`offline`)return(0,v.jsx)(o,{port:e});if(C.kind===`error`)return(0,v.jsx)(s,{message:C.message});let q=G.token?G.token.slice(-4):``,J=G.token?`••••••••${q}`:`(empty)`,Y=P&&!b(P)?`Guild ID must be a numeric snowflake.`:null,X=I.filter(e=>!b(e)),Z=X.length>0?`Snowflake IDs only — invalid: ${X.join(`, `)}`:null;return(0,v.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),K()},children:[(0,v.jsxs)(i,{title:`Channels`,hint:`Choose which channels receive inbound chat. Outbound send can still work on any configured channel.`,children:[(0,v.jsx)(g,{pageChannel:`discord`,snapshot:C.kind===`ready`?C.data:{},enabledChannels:E,homeChannel:O,setEnabledChannels:D,setHomeChannel:k,dirty:n,idPrefix:`di-channel`}),(0,v.jsx)(h,{client:t,channel:`discord`})]}),(0,v.jsxs)(i,{title:`Discord`,hint:`Bot token, guild + channels, forwarding rules.`,children:[(0,v.jsx)(c,{id:`dc-enabled`,label:`Discord enabled`,value:A,onChange:e=>{j(e),W(`discord.enabled`,{value:e,original:!!G.enabled,valid:!0})}}),(0,v.jsx)(u,{id:`dc-token`,label:`Bot token`,value:M,placeholder:J,onChange:e=>{if(N(e),e.length===0){n.remove(`discord.token`);return}W(`discord.token`,{value:e,original:G.token??``,valid:!0})}}),(0,v.jsx)(d,{id:`dc-guildId`,label:`Guild ID`,value:P,placeholder:`123456789012345678`,error:Y,onChange:e=>{F(e);let t=e.length===0||b(e);W(`discord.guildId`,{value:e,original:G.guildId??``,valid:t})}}),(0,v.jsx)(l,{id:`dc-channelIds`,label:`Channel IDs`,value:I,placeholder:`987654321098765432`,error:Z,onChange:e=>{L(e);let t=e.every(b);W(`discord.channelIds`,{value:e,original:G.channelIds??[],valid:t})}}),(0,v.jsx)(c,{id:`dc-forwardAll`,label:`Forward all`,value:R,onChange:e=>{z(e),W(`discord.forwardAll`,{value:e,original:G.forwardAll!==!1,valid:!0})}}),(0,v.jsx)(c,{id:`dc-allowBots`,label:`Allow other bots`,value:B,onChange:e=>{V(e),W(`discord.allowBots`,{value:e,original:!!G.allowBots,valid:!0})}}),(0,v.jsx)(c,{id:`dc-mentionOnly`,label:`Mention only`,value:H,onChange:e=>{U(e),W(`discord.mentionOnly`,{value:e,original:!!G.mentionOnly,valid:!0})}})]}),(0,v.jsx)(i,{title:`Health`,hint:`Probes /api/health for Discord readiness. Degraded mode means the bot is missing the MESSAGE_CONTENT intent (slash commands only).`,children:(0,v.jsx)(m,{client:t,label:`Discord`,endpoint:`/api/health`,method:`GET`,interpret:p})})]})}function S(e){return e===`telegram`||e===`discord`||e===`slack`}export{x as default,b as isValidSnowflake};
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-DZ1lls_P.js";import{a as c,n as l,o as u,s as d}from"./fields-E1L8aEhU.js";import{t as f}from"./path-utils-QbjARuCC.js";import{n as p,t as m}from"./HealthBadge-D7BQ-LHD.js";import{n as h,t as g}from"./ChannelEnablementControl-B9KiYDZZ.js";var _=e(t(),1),v=n(),y=[`messaging.enabledChannels`,`messaging.homeChannel`,`discord.enabled`,`discord.token`,`discord.guildId`,`discord.channelIds`,`discord.forwardAll`,`discord.allowBots`,`discord.mentionOnly`];function b(e){return e?/^\d{5,32}$/.test(e.trim()):!1}function x({port:e,client:t,dirty:n,registerSave:x}){let{state:C,refresh:w,setData:T}=r(t,`/api/settings`),[E,D]=(0,_.useState)([]),[O,k]=(0,_.useState)(`telegram`),[A,j]=(0,_.useState)(!1),[M,N]=(0,_.useState)(``),[P,F]=(0,_.useState)(``),[I,L]=(0,_.useState)([]),[R,z]=(0,_.useState)(!0),[B,V]=(0,_.useState)(!1),[H,U]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(C.kind!==`ready`)return;let e=C.data.messaging||{};D((Array.isArray(e.enabledChannels)?e.enabledChannels:[]).filter(S)),k(S(e.homeChannel)?e.homeChannel:`telegram`);let t=C.data.discord||{};j(!!t.enabled),N(``),F(t.guildId??``),L(Array.isArray(t.channelIds)?[...t.channelIds]:[]),z(t.forwardAll!==!1),V(!!t.allowBots),U(!!t.mentionOnly)},[C]),(0,_.useEffect)(()=>()=>{for(let e of y)n.remove(e)},[n]);let W=(0,_.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,_.useMemo)(()=>C.kind===`ready`&&C.data.discord||{},[C]),K=(0,_.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.messaging||{};D(Array.isArray(o.enabledChannels)?o.enabledChannels.filter(S):[]),k(S(o.homeChannel)?o.homeChannel:`telegram`);let s=a.discord||{};j(!!s.enabled),N(``),F(s.guildId??``),L(Array.isArray(s.channelIds)?[...s.channelIds]:[]),z(s.forwardAll!==!1),V(!!s.allowBots),U(!!s.mentionOnly),await w()},[t,n,w,T]);if((0,_.useEffect)(()=>{if(x)return x(K),()=>x(null)},[x,K]),C.kind===`loading`)return(0,v.jsx)(a,{});if(C.kind===`offline`)return(0,v.jsx)(o,{port:e});if(C.kind===`error`)return(0,v.jsx)(s,{message:C.message});let q=G.token?G.token.slice(-4):``,J=G.token?`••••••••${q}`:`(empty)`,Y=P&&!b(P)?`Guild ID must be a numeric snowflake.`:null,X=I.filter(e=>!b(e)),Z=X.length>0?`Snowflake IDs only — invalid: ${X.join(`, `)}`:null;return(0,v.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),K()},children:[(0,v.jsxs)(i,{title:`Channels`,hint:`Choose which channels receive inbound chat. Outbound send can still work on any configured channel.`,children:[(0,v.jsx)(g,{pageChannel:`discord`,snapshot:C.kind===`ready`?C.data:{},enabledChannels:E,homeChannel:O,setEnabledChannels:D,setHomeChannel:k,dirty:n,idPrefix:`di-channel`}),(0,v.jsx)(h,{client:t,channel:`discord`})]}),(0,v.jsxs)(i,{title:`Discord`,hint:`Bot token, guild + channels, forwarding rules.`,children:[(0,v.jsx)(c,{id:`dc-enabled`,label:`Discord enabled`,value:A,onChange:e=>{j(e),W(`discord.enabled`,{value:e,original:!!G.enabled,valid:!0})}}),(0,v.jsx)(u,{id:`dc-token`,label:`Bot token`,value:M,placeholder:J,onChange:e=>{if(N(e),e.length===0){n.remove(`discord.token`);return}W(`discord.token`,{value:e,original:G.token??``,valid:!0})}}),(0,v.jsx)(d,{id:`dc-guildId`,label:`Guild ID`,value:P,placeholder:`123456789012345678`,error:Y,onChange:e=>{F(e);let t=e.length===0||b(e);W(`discord.guildId`,{value:e,original:G.guildId??``,valid:t})}}),(0,v.jsx)(l,{id:`dc-channelIds`,label:`Channel IDs`,value:I,placeholder:`987654321098765432`,error:Z,onChange:e=>{L(e);let t=e.every(b);W(`discord.channelIds`,{value:e,original:G.channelIds??[],valid:t})}}),(0,v.jsx)(c,{id:`dc-forwardAll`,label:`Forward all`,value:R,onChange:e=>{z(e),W(`discord.forwardAll`,{value:e,original:G.forwardAll!==!1,valid:!0})}}),(0,v.jsx)(c,{id:`dc-allowBots`,label:`Allow other bots`,value:B,onChange:e=>{V(e),W(`discord.allowBots`,{value:e,original:!!G.allowBots,valid:!0})}}),(0,v.jsx)(c,{id:`dc-mentionOnly`,label:`Mention only`,value:H,onChange:e=>{U(e),W(`discord.mentionOnly`,{value:e,original:!!G.mentionOnly,valid:!0})}})]}),(0,v.jsx)(i,{title:`Health`,hint:`Probes /api/health for Discord readiness. Degraded mode means the bot is missing the MESSAGE_CONTENT intent (slash commands only).`,children:(0,v.jsx)(m,{client:t,label:`Discord`,endpoint:`/api/health`,method:`GET`,interpret:p})})]})}function S(e){return e===`telegram`||e===`discord`||e===`slack`}export{x as default,b as isValidSnowflake};
@@ -1 +1 @@
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,n as l,o as u,s as d}from"./fields-BwOMlwS0.js";import{t as f}from"./path-utils-CHwADH-r.js";import{n as ee,t as p}from"./ChannelEnablementControl-Da_t_jq6.js";var m=e(t(),1),h=n(),g=[`channel`,`slack.enabled`,`slack.botToken`,`slack.appToken`,`slack.teamId`,`slack.channelIds`,`slack.forwardAll`,`slack.allowBots`,`slack.mentionOnly`,`slack.replyInThread`,`slack.ack.enabled`];function _(e){return e?/^[CGD][A-Z0-9]{6,20}$/.test(e.trim().toUpperCase()):!1}function v({port:e,client:t,dirty:n,registerSave:v}){let{state:b,refresh:x,setData:S}=r(t,`/api/settings`),[C,w]=(0,m.useState)([]),[T,E]=(0,m.useState)(`telegram`),[D,O]=(0,m.useState)(!1),[k,A]=(0,m.useState)(``),[j,M]=(0,m.useState)(``),[N,P]=(0,m.useState)(``),[F,I]=(0,m.useState)([]),[te,L]=(0,m.useState)(!0),[R,z]=(0,m.useState)(!1),[B,V]=(0,m.useState)(!0),[H,U]=(0,m.useState)(!0),[W,G]=(0,m.useState)(!1),K=(0,m.useCallback)(e=>{O(!!e.enabled),A(``),M(``),P(e.teamId??``),I(Array.isArray(e.channelIds)?[...e.channelIds]:[]),L(e.forwardAll!==!1),z(!!e.allowBots),V(e.mentionOnly!==!1),U(e.replyInThread!==!1),G(!!e.ack?.enabled)},[]);(0,m.useEffect)(()=>{if(b.kind!==`ready`)return;let e=b.data.messaging||{};w((Array.isArray(e.enabledChannels)?e.enabledChannels:[]).filter(y)),E(y(e.homeChannel)?e.homeChannel:`telegram`),K(b.data.slack||{})},[b,K]),(0,m.useEffect)(()=>()=>{for(let e of g)n.remove(e)},[n]);let q=(0,m.useCallback)((e,t)=>n.set(e,t),[n]),J=(0,m.useMemo)(()=>b.kind===`ready`&&b.data.slack||{},[b]),Y=b.kind===`ready`&&Array.isArray(b.data.slackEnvironmentVariables)?b.data.slackEnvironmentVariables:[],X=Y.length>0,Z=(0,m.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(),S(a),K(a.slack||{}),await x()},[t,n,x,S,K]);if((0,m.useEffect)(()=>{if(v)return v(Z),()=>v(null)},[v,Z]),b.kind===`loading`)return(0,h.jsx)(a,{});if(b.kind===`offline`)return(0,h.jsx)(o,{port:e});if(b.kind===`error`)return(0,h.jsx)(s,{message:b.message});let Q=e=>e?`••••••••${e.slice(-4)}`:`(empty)`,$=F.filter(e=>!_(e)),ne=$.length>0?`Slack conversation IDs only (C…/G…/D…) — invalid: ${$.join(`, `)}`:null,re=k&&!k.startsWith(`xoxb-`)?`Bot tokens start with xoxb-.`:null,ie=j&&!j.startsWith(`xapp-`)?`App-level tokens start with xapp-.`:null,ae=!!J.enabled&&!!J.botToken&&!J.appToken,oe=X?`Connection settings are read-only because they are managed by environment variables: ${Y.join(`, `)}.`:ae?`Currently OUTBOUND-ONLY: the app-level token (xapp-) is missing, so no inbound Slack events can arrive.`:`Slack needs TWO tokens: a bot token (xoxb-) for the Web API and an app-level token (xapp-) for Socket Mode.`;return(0,h.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),Z()},children:[(0,h.jsxs)(i,{title:`Channels`,hint:`Choose which channels receive inbound chat. Outbound send can still work on any configured channel.`,children:[(0,h.jsx)(p,{pageChannel:`slack`,snapshot:b.kind===`ready`?b.data:{},enabledChannels:C,homeChannel:T,setEnabledChannels:w,setHomeChannel:E,dirty:n,idPrefix:`sl-channel`}),(0,h.jsx)(ee,{client:t,channel:`slack`})]}),(0,h.jsxs)(i,{title:`Slack`,hint:oe,children:[(0,h.jsx)(c,{id:`sl-enabled`,label:`Slack enabled`,value:D,disabled:X,onChange:e=>{O(e),q(`slack.enabled`,{value:e,original:!!J.enabled,valid:!0})}}),(0,h.jsx)(u,{id:`sl-botToken`,label:`Bot token`,value:k,placeholder:Q(J.botToken),error:re,disabled:X,onChange:e=>{if(A(e),e.length===0){n.remove(`slack.botToken`);return}q(`slack.botToken`,{value:e,original:J.botToken??``,valid:e.startsWith(`xoxb-`)})}}),(0,h.jsx)(u,{id:`sl-appToken`,label:`App-level token`,value:j,placeholder:Q(J.appToken),error:ie,disabled:X,onChange:e=>{if(M(e),e.length===0){n.remove(`slack.appToken`);return}q(`slack.appToken`,{value:e,original:J.appToken??``,valid:e.startsWith(`xapp-`)})}}),(0,h.jsx)(d,{id:`sl-teamId`,label:`Team ID`,value:N,placeholder:`T01234567 (optional)`,disabled:X,onChange:e=>{P(e),q(`slack.teamId`,{value:e,original:J.teamId??``,valid:!0})}}),(0,h.jsx)(l,{id:`sl-channelIds`,label:`Channel IDs`,value:F,placeholder:`C01234567`,error:ne,disabled:X,onChange:e=>{I(e),q(`slack.channelIds`,{value:e,original:J.channelIds??[],valid:e.every(_)})}}),(0,h.jsx)(c,{id:`sl-mentionOnly`,label:`Mention only`,value:B,onChange:e=>{V(e),q(`slack.mentionOnly`,{value:e,original:J.mentionOnly!==!1,valid:!0})}}),(0,h.jsx)(c,{id:`sl-replyInThread`,label:`Reply in thread`,value:H,onChange:e=>{U(e),q(`slack.replyInThread`,{value:e,original:J.replyInThread!==!1,valid:!0})}}),(0,h.jsx)(c,{id:`sl-forwardAll`,label:`Forward all`,value:te,onChange:e=>{L(e),q(`slack.forwardAll`,{value:e,original:J.forwardAll!==!1,valid:!0})}}),(0,h.jsx)(c,{id:`sl-allowBots`,label:`Allow bots`,value:R,onChange:e=>{z(e),q(`slack.allowBots`,{value:e,original:!!J.allowBots,valid:!0})}}),(0,h.jsx)(c,{id:`sl-ackEnabled`,label:`Emoji reactions (👀 → ✅)`,value:W,onChange:e=>{G(e),q(`slack.ack.enabled`,{value:e,original:!!J.ack?.enabled,valid:!0})}})]})]})}function y(e){return e===`telegram`||e===`discord`||e===`slack`}export{v as default,_ as isValidSlackConversationId};
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-DZ1lls_P.js";import{a as c,n as l,o as u,s as d}from"./fields-E1L8aEhU.js";import{t as f}from"./path-utils-QbjARuCC.js";import{n as ee,t as p}from"./ChannelEnablementControl-B9KiYDZZ.js";var m=e(t(),1),h=n(),g=[`channel`,`slack.enabled`,`slack.botToken`,`slack.appToken`,`slack.teamId`,`slack.channelIds`,`slack.forwardAll`,`slack.allowBots`,`slack.mentionOnly`,`slack.replyInThread`,`slack.ack.enabled`];function _(e){return e?/^[CGD][A-Z0-9]{6,20}$/.test(e.trim().toUpperCase()):!1}function v({port:e,client:t,dirty:n,registerSave:v}){let{state:b,refresh:x,setData:S}=r(t,`/api/settings`),[C,w]=(0,m.useState)([]),[T,E]=(0,m.useState)(`telegram`),[D,O]=(0,m.useState)(!1),[k,A]=(0,m.useState)(``),[j,M]=(0,m.useState)(``),[N,P]=(0,m.useState)(``),[F,I]=(0,m.useState)([]),[te,L]=(0,m.useState)(!0),[R,z]=(0,m.useState)(!1),[B,V]=(0,m.useState)(!0),[H,U]=(0,m.useState)(!0),[W,G]=(0,m.useState)(!1),K=(0,m.useCallback)(e=>{O(!!e.enabled),A(``),M(``),P(e.teamId??``),I(Array.isArray(e.channelIds)?[...e.channelIds]:[]),L(e.forwardAll!==!1),z(!!e.allowBots),V(e.mentionOnly!==!1),U(e.replyInThread!==!1),G(!!e.ack?.enabled)},[]);(0,m.useEffect)(()=>{if(b.kind!==`ready`)return;let e=b.data.messaging||{};w((Array.isArray(e.enabledChannels)?e.enabledChannels:[]).filter(y)),E(y(e.homeChannel)?e.homeChannel:`telegram`),K(b.data.slack||{})},[b,K]),(0,m.useEffect)(()=>()=>{for(let e of g)n.remove(e)},[n]);let q=(0,m.useCallback)((e,t)=>n.set(e,t),[n]),J=(0,m.useMemo)(()=>b.kind===`ready`&&b.data.slack||{},[b]),Y=b.kind===`ready`&&Array.isArray(b.data.slackEnvironmentVariables)?b.data.slackEnvironmentVariables:[],X=Y.length>0,Z=(0,m.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(),S(a),K(a.slack||{}),await x()},[t,n,x,S,K]);if((0,m.useEffect)(()=>{if(v)return v(Z),()=>v(null)},[v,Z]),b.kind===`loading`)return(0,h.jsx)(a,{});if(b.kind===`offline`)return(0,h.jsx)(o,{port:e});if(b.kind===`error`)return(0,h.jsx)(s,{message:b.message});let Q=e=>e?`••••••••${e.slice(-4)}`:`(empty)`,$=F.filter(e=>!_(e)),ne=$.length>0?`Slack conversation IDs only (C…/G…/D…) — invalid: ${$.join(`, `)}`:null,re=k&&!k.startsWith(`xoxb-`)?`Bot tokens start with xoxb-.`:null,ie=j&&!j.startsWith(`xapp-`)?`App-level tokens start with xapp-.`:null,ae=!!J.enabled&&!!J.botToken&&!J.appToken,oe=X?`Connection settings are read-only because they are managed by environment variables: ${Y.join(`, `)}.`:ae?`Currently OUTBOUND-ONLY: the app-level token (xapp-) is missing, so no inbound Slack events can arrive.`:`Slack needs TWO tokens: a bot token (xoxb-) for the Web API and an app-level token (xapp-) for Socket Mode.`;return(0,h.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),Z()},children:[(0,h.jsxs)(i,{title:`Channels`,hint:`Choose which channels receive inbound chat. Outbound send can still work on any configured channel.`,children:[(0,h.jsx)(p,{pageChannel:`slack`,snapshot:b.kind===`ready`?b.data:{},enabledChannels:C,homeChannel:T,setEnabledChannels:w,setHomeChannel:E,dirty:n,idPrefix:`sl-channel`}),(0,h.jsx)(ee,{client:t,channel:`slack`})]}),(0,h.jsxs)(i,{title:`Slack`,hint:oe,children:[(0,h.jsx)(c,{id:`sl-enabled`,label:`Slack enabled`,value:D,disabled:X,onChange:e=>{O(e),q(`slack.enabled`,{value:e,original:!!J.enabled,valid:!0})}}),(0,h.jsx)(u,{id:`sl-botToken`,label:`Bot token`,value:k,placeholder:Q(J.botToken),error:re,disabled:X,onChange:e=>{if(A(e),e.length===0){n.remove(`slack.botToken`);return}q(`slack.botToken`,{value:e,original:J.botToken??``,valid:e.startsWith(`xoxb-`)})}}),(0,h.jsx)(u,{id:`sl-appToken`,label:`App-level token`,value:j,placeholder:Q(J.appToken),error:ie,disabled:X,onChange:e=>{if(M(e),e.length===0){n.remove(`slack.appToken`);return}q(`slack.appToken`,{value:e,original:J.appToken??``,valid:e.startsWith(`xapp-`)})}}),(0,h.jsx)(d,{id:`sl-teamId`,label:`Team ID`,value:N,placeholder:`T01234567 (optional)`,disabled:X,onChange:e=>{P(e),q(`slack.teamId`,{value:e,original:J.teamId??``,valid:!0})}}),(0,h.jsx)(l,{id:`sl-channelIds`,label:`Channel IDs`,value:F,placeholder:`C01234567`,error:ne,disabled:X,onChange:e=>{I(e),q(`slack.channelIds`,{value:e,original:J.channelIds??[],valid:e.every(_)})}}),(0,h.jsx)(c,{id:`sl-mentionOnly`,label:`Mention only`,value:B,onChange:e=>{V(e),q(`slack.mentionOnly`,{value:e,original:J.mentionOnly!==!1,valid:!0})}}),(0,h.jsx)(c,{id:`sl-replyInThread`,label:`Reply in thread`,value:H,onChange:e=>{U(e),q(`slack.replyInThread`,{value:e,original:J.replyInThread!==!1,valid:!0})}}),(0,h.jsx)(c,{id:`sl-forwardAll`,label:`Forward all`,value:te,onChange:e=>{L(e),q(`slack.forwardAll`,{value:e,original:J.forwardAll!==!1,valid:!0})}}),(0,h.jsx)(c,{id:`sl-allowBots`,label:`Allow bots`,value:R,onChange:e=>{z(e),q(`slack.allowBots`,{value:e,original:!!J.allowBots,valid:!0})}}),(0,h.jsx)(c,{id:`sl-ackEnabled`,label:`Emoji reactions (👀 → ✅)`,value:W,onChange:e=>{G(e),q(`slack.ack.enabled`,{value:e,original:!!J.ack?.enabled,valid:!0})}})]})]})}function y(e){return e===`telegram`||e===`discord`||e===`slack`}export{v as default,_ as isValidSlackConversationId};
@@ -1 +1 @@
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,n as l,o as u}from"./fields-BwOMlwS0.js";import{t as d}from"./path-utils-CHwADH-r.js";import{r as f,t as p}from"./HealthBadge-CiNMS-1k.js";import{n as m,t as h}from"./ChannelEnablementControl-Da_t_jq6.js";var g=e(t(),1),_=n(),v=[`messaging.enabledChannels`,`messaging.homeChannel`,`telegram.enabled`,`telegram.token`,`telegram.allowedChatIds`,`telegram.forwardAll`,`telegram.mentionOnly`];function y(e){return e?/^-?\d+$/.test(e.trim()):!1}function b(e){let t=[],n=[];for(let r of e)y(r)?t.push(r.trim()):n.push(r);return{valid:t,invalid:n}}function x(e){return e?e.filter(e=>Number.isFinite(e)).map(e=>String(e)):[]}function S(e){let t=[];for(let n of e){if(!y(n))continue;let e=Number(n);Number.isFinite(e)&&t.push(e)}return t}function C({port:e,client:t,dirty:n,registerSave:C}){let{state:T,refresh:E,setData:D}=r(t,`/api/settings`),[O,k]=(0,g.useState)([]),[A,j]=(0,g.useState)(`telegram`),[M,N]=(0,g.useState)(!1),[P,F]=(0,g.useState)(``),[I,L]=(0,g.useState)([]),[R,z]=(0,g.useState)(!0),[B,V]=(0,g.useState)(!0);(0,g.useEffect)(()=>{if(T.kind!==`ready`)return;let e=T.data.messaging||{};k((Array.isArray(e.enabledChannels)?e.enabledChannels:[]).filter(w)),j(w(e.homeChannel)?e.homeChannel:`telegram`);let t=T.data.telegram||{};N(!!t.enabled),F(``),L(x(t.allowedChatIds)),z(t.forwardAll!==!1),V(t.mentionOnly!==!1)},[T]),(0,g.useEffect)(()=>()=>{for(let e of v)n.remove(e)},[n]);let H=(0,g.useCallback)((e,t)=>n.set(e,t),[n]),U=(0,g.useMemo)(()=>T.kind===`ready`&&T.data.telegram||{},[T]),W=(0,g.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=d(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),D(a);let o=a.messaging||{};k(Array.isArray(o.enabledChannels)?o.enabledChannels.filter(w):[]),j(w(o.homeChannel)?o.homeChannel:`telegram`);let s=a.telegram||{};N(!!s.enabled),F(``),L(x(s.allowedChatIds)),z(s.forwardAll!==!1),V(s.mentionOnly!==!1),await E()},[t,n,E,D]);if((0,g.useEffect)(()=>{if(C)return C(W),()=>C(null)},[C,W]),T.kind===`loading`)return(0,_.jsx)(a,{});if(T.kind===`offline`)return(0,_.jsx)(o,{port:e});if(T.kind===`error`)return(0,_.jsx)(s,{message:T.message});let G=U.token?U.token.slice(-4):``,K=U.token?`••••••••${G}`:`(empty)`,{invalid:q}=b(I),J=q.length>0?`Numeric chat IDs only — invalid: ${q.join(`, `)}`:null;return(0,_.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),W()},children:[(0,_.jsxs)(i,{title:`Channels`,hint:`Choose which channels receive inbound chat. Outbound send can still work on any configured channel.`,children:[(0,_.jsx)(h,{pageChannel:`telegram`,snapshot:T.kind===`ready`?T.data:{},enabledChannels:O,homeChannel:A,setEnabledChannels:k,setHomeChannel:j,dirty:n,idPrefix:`tg-channel`}),(0,_.jsx)(m,{client:t,channel:`telegram`})]}),(0,_.jsxs)(i,{title:`Telegram`,hint:`Bot token, allow-list, and forwarding rules.`,children:[(0,_.jsx)(c,{id:`tg-enabled`,label:`Telegram enabled`,value:M,onChange:e=>{N(e),H(`telegram.enabled`,{value:e,original:!!U.enabled,valid:!0})}}),(0,_.jsx)(u,{id:`tg-token`,label:`Bot token`,value:P,placeholder:K,onChange:e=>{if(F(e),e.length===0){n.remove(`telegram.token`);return}H(`telegram.token`,{value:e,original:U.token??``,valid:!0})}}),(0,_.jsx)(l,{id:`tg-allowedChatIds`,label:`Allowed chat IDs`,value:I,placeholder:`123456789`,error:J,onChange:e=>{L(e);let t=e.every(y);H(`telegram.allowedChatIds`,{value:S(e),original:U.allowedChatIds??[],valid:t})}}),(0,_.jsx)(c,{id:`tg-forwardAll`,label:`Forward all responses`,value:R,onChange:e=>{z(e),H(`telegram.forwardAll`,{value:e,original:U.forwardAll!==!1,valid:!0})}}),(0,_.jsx)(c,{id:`tg-mentionOnly`,label:`Mention only`,value:B,onChange:e=>{V(e),H(`telegram.mentionOnly`,{value:e,original:U.mentionOnly!==!1,valid:!0})}})]}),(0,_.jsx)(i,{title:`Health`,hint:`Probe the bot to confirm token + connectivity. 404 means the instance hasn't shipped the probe endpoint yet.`,children:(0,_.jsx)(p,{client:t,label:`Telegram`,endpoint:`/api/telegram/probe`,method:`POST`,interpret:f})})]})}function w(e){return e===`telegram`||e===`discord`||e===`slack`}export{x as chatIdsToChips,S as chipsToChatIds,C as default,y as isValidChatId,b as partitionChatIds};
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-DZ1lls_P.js";import{a as c,n as l,o as u}from"./fields-E1L8aEhU.js";import{t as d}from"./path-utils-QbjARuCC.js";import{r as f,t as p}from"./HealthBadge-D7BQ-LHD.js";import{n as m,t as h}from"./ChannelEnablementControl-B9KiYDZZ.js";var g=e(t(),1),_=n(),v=[`messaging.enabledChannels`,`messaging.homeChannel`,`telegram.enabled`,`telegram.token`,`telegram.allowedChatIds`,`telegram.forwardAll`,`telegram.mentionOnly`];function y(e){return e?/^-?\d+$/.test(e.trim()):!1}function b(e){let t=[],n=[];for(let r of e)y(r)?t.push(r.trim()):n.push(r);return{valid:t,invalid:n}}function x(e){return e?e.filter(e=>Number.isFinite(e)).map(e=>String(e)):[]}function S(e){let t=[];for(let n of e){if(!y(n))continue;let e=Number(n);Number.isFinite(e)&&t.push(e)}return t}function C({port:e,client:t,dirty:n,registerSave:C}){let{state:T,refresh:E,setData:D}=r(t,`/api/settings`),[O,k]=(0,g.useState)([]),[A,j]=(0,g.useState)(`telegram`),[M,N]=(0,g.useState)(!1),[P,F]=(0,g.useState)(``),[I,L]=(0,g.useState)([]),[R,z]=(0,g.useState)(!0),[B,V]=(0,g.useState)(!0);(0,g.useEffect)(()=>{if(T.kind!==`ready`)return;let e=T.data.messaging||{};k((Array.isArray(e.enabledChannels)?e.enabledChannels:[]).filter(w)),j(w(e.homeChannel)?e.homeChannel:`telegram`);let t=T.data.telegram||{};N(!!t.enabled),F(``),L(x(t.allowedChatIds)),z(t.forwardAll!==!1),V(t.mentionOnly!==!1)},[T]),(0,g.useEffect)(()=>()=>{for(let e of v)n.remove(e)},[n]);let H=(0,g.useCallback)((e,t)=>n.set(e,t),[n]),U=(0,g.useMemo)(()=>T.kind===`ready`&&T.data.telegram||{},[T]),W=(0,g.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=d(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),D(a);let o=a.messaging||{};k(Array.isArray(o.enabledChannels)?o.enabledChannels.filter(w):[]),j(w(o.homeChannel)?o.homeChannel:`telegram`);let s=a.telegram||{};N(!!s.enabled),F(``),L(x(s.allowedChatIds)),z(s.forwardAll!==!1),V(s.mentionOnly!==!1),await E()},[t,n,E,D]);if((0,g.useEffect)(()=>{if(C)return C(W),()=>C(null)},[C,W]),T.kind===`loading`)return(0,_.jsx)(a,{});if(T.kind===`offline`)return(0,_.jsx)(o,{port:e});if(T.kind===`error`)return(0,_.jsx)(s,{message:T.message});let G=U.token?U.token.slice(-4):``,K=U.token?`••••••••${G}`:`(empty)`,{invalid:q}=b(I),J=q.length>0?`Numeric chat IDs only — invalid: ${q.join(`, `)}`:null;return(0,_.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),W()},children:[(0,_.jsxs)(i,{title:`Channels`,hint:`Choose which channels receive inbound chat. Outbound send can still work on any configured channel.`,children:[(0,_.jsx)(h,{pageChannel:`telegram`,snapshot:T.kind===`ready`?T.data:{},enabledChannels:O,homeChannel:A,setEnabledChannels:k,setHomeChannel:j,dirty:n,idPrefix:`tg-channel`}),(0,_.jsx)(m,{client:t,channel:`telegram`})]}),(0,_.jsxs)(i,{title:`Telegram`,hint:`Bot token, allow-list, and forwarding rules.`,children:[(0,_.jsx)(c,{id:`tg-enabled`,label:`Telegram enabled`,value:M,onChange:e=>{N(e),H(`telegram.enabled`,{value:e,original:!!U.enabled,valid:!0})}}),(0,_.jsx)(u,{id:`tg-token`,label:`Bot token`,value:P,placeholder:K,onChange:e=>{if(F(e),e.length===0){n.remove(`telegram.token`);return}H(`telegram.token`,{value:e,original:U.token??``,valid:!0})}}),(0,_.jsx)(l,{id:`tg-allowedChatIds`,label:`Allowed chat IDs`,value:I,placeholder:`123456789`,error:J,onChange:e=>{L(e);let t=e.every(y);H(`telegram.allowedChatIds`,{value:S(e),original:U.allowedChatIds??[],valid:t})}}),(0,_.jsx)(c,{id:`tg-forwardAll`,label:`Forward all responses`,value:R,onChange:e=>{z(e),H(`telegram.forwardAll`,{value:e,original:U.forwardAll!==!1,valid:!0})}}),(0,_.jsx)(c,{id:`tg-mentionOnly`,label:`Mention only`,value:B,onChange:e=>{V(e),H(`telegram.mentionOnly`,{value:e,original:U.mentionOnly!==!1,valid:!0})}})]}),(0,_.jsx)(i,{title:`Health`,hint:`Probe the bot to confirm token + connectivity. 404 means the instance hasn't shipped the probe endpoint yet.`,children:(0,_.jsx)(p,{client:t,label:`Telegram`,endpoint:`/api/telegram/probe`,method:`POST`,interpret:f})})]})}function w(e){return e===`telegram`||e===`discord`||e===`slack`}export{x as chatIdsToChips,S as chipsToChatIds,C as default,y as isValidChatId,b as partitionChatIds};
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-kIxHrxDV.css"])))=>i.map(i=>d[i]);
2
2
  import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{t}from"./preload-helper-DFYRRz9w.js";import{a as n,i as r,n as i,r as a,t as o}from"./esm-CT1xxdH5.js";import{n as s,t as c}from"./jsx-runtime-CYoNlHAD.js";import{n as l,t as u}from"./bounded-set-DXkYOGnQ.js";import{t as d}from"./desktop-bridge-DtydAvqu.js";var f=e(s(),1),p=l();function m(e){let t=typeof window<`u`?window.location.origin:``,n=typeof window<`u`?window.location.port:``,r=t&&n===String(e)?t:`http://127.0.0.1:${e}`;async function i(e,t,n){let i={method:e};n&&(i.headers={"Content-Type":`application/json`},i.body=JSON.stringify(n));let a=await(await fetch(`${r}${t}`,i)).json();if(!a.ok)throw Error(a.error||`${e} ${t} failed`);return a}return{async listSessions(){return(await i(`GET`,`/api/code/sessions`)).sessions},async listStoredSessions(e={}){let t=e.scope??`all`,n=new URLSearchParams({scope:t});return t===`cwd`&&e.cwd&&n.set(`cwd`,e.cwd),(await i(`GET`,`/api/code/sessions/stored${`?${n.toString()}`}`)).sessions},async listModelOptions(){return i(`GET`,`/api/code/models`)},async setDefaultModel(e){return i(`POST`,`/api/code/model-default`,{modelId:e})},async listModelAssignments(){return i(`GET`,`/api/code/model-assignments`)},async setModelAssignment(e,t){let n=typeof t==`string`?{modelId:t}:t;return i(`PUT`,`/api/code/model-assignments/${encodeURIComponent(e)}`,n)},async clearModelAssignment(e){return i(`DELETE`,`/api/code/model-assignments/${encodeURIComponent(e)}`)},async listModelPresets(){return i(`GET`,`/api/code/model-presets`)},async getGitInfo(e){return await i(`GET`,`/api/code/git-info?cwd=${encodeURIComponent(e)}`)},async loadSession(e,t){return(await i(`POST`,`/api/code/sessions/load`,{sessionId:e,cwd:t})).session},async createSession(e,t){return(await i(`POST`,`/api/code/sessions`,{cwd:e,...t?{model:t}:{}})).session},async sendPrompt(e,t){return i(`POST`,`/api/code/sessions/${e}/prompt`,{text:t})},async cancelPrompt(e){await i(`POST`,`/api/code/sessions/${e}/cancel`)},async closeSession(e){await i(`DELETE`,`/api/code/sessions/${e}`)},async answerPermission(e,t){await i(`POST`,`/api/code/permissions/${e}`,{optionId:t})},async setSessionConfig(e,t,n){await i(`POST`,`/api/code/sessions/${e}/config`,{configId:t,valueId:n})},async extMethod(e,t,n){return(await i(`POST`,`/api/code/sessions/${e}/ext`,{method:t,params:n})).result},async forkSession(e,t){return(await i(`POST`,`/api/code/sessions/${e}/fork`,{cwd:t})).session},async setSessionModel(e,t){await i(`POST`,`/api/code/sessions/${e}/model`,{modelId:t})},pickWorkspace(){return i(`POST`,`/api/code/workspace/pick`)}}}var h=c();function g({client:e,activeSessionId:t,workingDir:n,onSelectSession:r,onLoadSession:i,onNewSession:a}){let[o,s]=(0,f.useState)([]),[c,l]=(0,f.useState)([]),[u,d]=(0,f.useState)(!0),[p,m]=(0,f.useState)(``),[g,_]=(0,f.useState)(``),[v,y]=(0,f.useState)(`all`),b=(0,f.useCallback)(async()=>{d(!0),m(``);let t=e=>e instanceof Error?e.message:String(e),r=v===`cwd`?{scope:`cwd`,cwd:n}:{scope:`all`},[i,a]=await Promise.allSettled([e.listSessions(),e.listStoredSessions(r)]),o=[];if(i.status===`fulfilled`){let e=i.value;s(e.filter(e=>e.status!==`closed`));let n=new Set(e.map(e=>e.sessionId));a.status===`fulfilled`?l(a.value.filter(e=>!n.has(e.sessionId))):(l([]),o.push(`History: ${t(a.reason)}`))}else s([]),o.push(`Live: ${t(i.reason)}`),a.status===`fulfilled`?l(a.value):(l([]),o.push(`History: ${t(a.reason)}`));o.length>0&&m(o.join(` · `)),d(!1)},[e,v,n]);(0,f.useEffect)(()=>{b()},[b]);let x=e=>e.split(`/`).pop()||e,S=e=>{let t=e.replayEvents?.find(e=>e.event===`code_user_message_chunk`)?.update??{},n=t.content;return String(n?.text??t.text??``).split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()||``},C=e=>e.title?.trim()||S(e)||x(e.cwd)||e.sessionId.slice(0,12)||`Untitled session`,w=e=>x(e.cwd),T=e=>[e.sessionId,e.title??``,S(e),e.cwd].join(` `).toLowerCase(),E=e=>e.title?.trim()||e.firstMessage?.replace(/\s+/g,` `).trim()||e.sessionId.slice(0,12)||`Untitled session`,D=e=>{if(typeof e.lastModified==`number`)return e.lastModified;if(e.updatedAt){let t=Date.parse(e.updatedAt);if(Number.isFinite(t))return t}return 0},O=e=>{let t=[x(e.cwd)];return e.messageCount!==void 0&&t.push(`${e.messageCount} messages`),t.filter(Boolean).join(` · `)},k=e=>[e.sessionId,e.title??``,e.firstMessage??``,e.cwd].join(` `).toLowerCase(),A=c.filter(e=>!g||k(e).includes(g.toLowerCase())).sort((e,t)=>D(t)-D(e)).slice(0,20),j=A.reduce((e,t)=>{let n=e.find(e=>e.cwd===t.cwd);return n?n.sessions.push(t):e.push({cwd:t.cwd,sessions:[t]}),e},[]),M=p?`Session data could not fully load.`:v===`cwd`?`No sessions for this cwd. Switch to All to browse global history.`:`No JWC sessions found.`;return(0,h.jsxs)(`div`,{className:`code-session-list`,children:[(0,h.jsxs)(`div`,{className:`code-session-list-header`,children:[(0,h.jsx)(`span`,{className:`code-session-list-title`,children:`Sessions`}),(0,h.jsx)(`button`,{type:`button`,className:`code-session-new-btn`,onClick:a,"aria-label":`New code session`,children:`+`})]}),(0,h.jsxs)(`div`,{className:`code-session-view-toggle`,"aria-label":`Session view`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-session-view-btn${v===`all`?` active`:``}`,onClick:()=>y(`all`),children:`All`}),(0,h.jsx)(`button`,{type:`button`,className:`code-session-view-btn${v===`cwd`?` active`:``}`,onClick:()=>y(`cwd`),children:`This cwd`}),(0,h.jsx)(`button`,{type:`button`,className:`code-session-view-btn${v===`grouped`?` active`:``}`,onClick:()=>y(`grouped`),children:`Group`})]}),v===`cwd`&&(0,h.jsx)(`div`,{className:`code-session-view-hint`,children:x(n)}),p&&(0,h.jsx)(`div`,{className:`code-session-list-error`,role:`status`,children:p}),o.length+c.length>3&&(0,h.jsx)(`input`,{className:`code-session-search`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Search sessions...`}),u?(0,h.jsx)(`div`,{className:`code-session-list-loading`,children:`Loading...`}):(0,h.jsxs)(h.Fragment,{children:[o.length>0&&(0,h.jsx)(`ul`,{className:`code-session-list-items`,children:o.filter(e=>!g||T(e).includes(g.toLowerCase())).map(e=>(0,h.jsx)(`li`,{children:(0,h.jsxs)(`button`,{type:`button`,className:`code-session-item ${e.sessionId===t?`active`:``}`,onClick:()=>r(e),children:[(0,h.jsx)(`span`,{className:`code-session-cwd`,children:C(e)}),(0,h.jsx)(`span`,{className:`code-session-meta`,children:w(e)}),(0,h.jsx)(`span`,{className:`code-session-status code-session-status-${e.status}`,children:e.status})]})},e.sessionId))}),A.length>0&&v!==`grouped`&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`code-session-list-divider`,children:`History`}),(0,h.jsx)(`ul`,{className:`code-session-list-items`,children:A.map(e=>(0,h.jsx)(`li`,{children:(0,h.jsxs)(`button`,{type:`button`,className:`code-session-item`,onClick:()=>i(e.sessionId,e.cwd),children:[(0,h.jsx)(`span`,{className:`code-session-cwd`,children:E(e)}),(0,h.jsx)(`span`,{className:`code-session-meta`,children:O(e)}),(0,h.jsx)(`span`,{className:`code-session-status`,children:`stored`})]})},e.sessionId))})]}),A.length>0&&v===`grouped`&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`code-session-list-divider`,children:`History by cwd`}),j.map(e=>(0,h.jsxs)(`section`,{className:`code-session-group`,children:[(0,h.jsxs)(`div`,{className:`code-session-group-title`,title:e.cwd,children:[x(e.cwd),` `,(0,h.jsx)(`span`,{children:e.sessions.length})]}),(0,h.jsx)(`ul`,{className:`code-session-list-items`,children:e.sessions.map(e=>(0,h.jsx)(`li`,{children:(0,h.jsxs)(`button`,{type:`button`,className:`code-session-item`,onClick:()=>i(e.sessionId,e.cwd),children:[(0,h.jsx)(`span`,{className:`code-session-cwd`,children:E(e)}),(0,h.jsx)(`span`,{className:`code-session-meta`,children:O(e)}),(0,h.jsx)(`span`,{className:`code-session-status`,children:`stored`})]})},e.sessionId))})]},e.cwd))]}),o.length===0&&A.length===0&&(0,h.jsx)(`div`,{className:`code-session-list-empty`,children:M})]})]})}function _(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if(r?.role===`tool`&&r.toolCallId===t)return n}return-1}function v(e,t){return e?`${e}/${t}`:t}var y=[`allow_once`,`allow_always`,`reject_once`,`reject_always`],b={allow_once:`Allow once`,allow_always:`Always allow`,reject_once:`Deny once`,reject_always:`Always deny`},x={allow_once:`allow-once`,allow_always:`allow-always`,reject_once:`deny-once`,reject_always:`deny-always`},S=[{value:`always-allow`,label:`Always allow`,detail:`Auto-allow gated tools`,tone:`allow`},{value:`ask`,label:`Ask first`,detail:`Review each gated tool`,tone:`ask`},{value:`always-deny`,label:`Always deny`,detail:`Auto-deny gated tools`,tone:`deny`}],C={ask:`Review each gated tool`,"always-allow":`Auto-allow gated tools`,"always-deny":`Auto-deny gated tools`},w={allow_once:/^(allow[_\s-]?once|allow once)$/i,allow_always:/^(allow[_\s-]?always|always allow|always approve)$/i,reject_once:/^(reject[_\s-]?once|deny[_\s-]?once|reject|deny)$/i,reject_always:/^(reject[_\s-]?always|deny[_\s-]?always|always reject|always deny)$/i};function T(e){return[e.kind,e.optionId,e.id,e.name,e.label].map(e=>String(e??``)).join(` `).trim()}function E(e){let t=e.optionId??e.id;return t==null||t===``?null:String(t)}function D(e,t){let n=e.name??e.label;return n==null||n===``?b[t]:String(n)}function O(e,t){let n=e.find(e=>e.kind===t),r=e.find(e=>e.optionId===t||e.id===t),i=e.find(e=>w[t].test(T(e))),a=n??r??i;if(!a)return null;let o=E(a);return o?{kind:t,optionId:o,label:D(a,t),raw:a}:null}function k(e){return String(e.toolName??e.title??e.name??`tool`)}function A(e,t){let n={permissionId:e.permissionId,toolName:k(e.toolCall),...t};return{role:`permission`,text:n.error??n.optionLabel??n.decision,permissionAudit:n}}function j(e){if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function M(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(typeof n==`string`){n&&t.push(n);continue}if(!n||typeof n!=`object`||Array.isArray(n))continue;let e=n,r=typeof e.type==`string`?e.type.toLowerCase():``,i=e.text;(!r||r===`text`)&&typeof i==`string`&&i&&t.push(i)}return t.length>0?t.join(`
3
- `):null}function ee(e){if(typeof e==`string`)return e;if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=M(t.content);if(n)return n;let r=t.details;if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r.displayContent;if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.text;if(typeof t==`string`&&t)return t}}return null}function N(e){return ee(e)??j(e)}function P(e){if(typeof e==`string`)return{type:`text`,text:e};if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=typeof t.type==`string`?t.type.toLowerCase():``,r=typeof t.label==`string`?t.label:void 0;if(n===`diff`&&typeof t.diff==`string`)return{type:`diff`,diff:t.diff,...r?{label:r}:{}};if(n===`error`)return{type:`error`,text:j(t.text??t.error??t.message??t),...r?{label:r}:{}};if(n===`args`||n===`arguments`||n===`input`)return{type:`args`,json:t.json??t.args??t.arguments??t.input??t,...r?{label:r}:{}};if(n===`output`)return{type:`output`,text:N(t.text??t.output??t),...r?{label:r}:{}};if(n===`json`)return{type:`json`,json:t.json??t.value??t,...r?{label:r}:{}};if(typeof t.diff==`string`)return{type:`diff`,diff:t.diff,...r?{label:r}:{}};if(typeof t.text==`string`)return{type:`text`,text:t.text,...r?{label:r}:{}};let i=ee(t);return i?{type:`text`,text:i,...r?{label:r}:{}}:{type:`json`,json:t,...r?{label:r}:{}}}function F(e,t,n,r){r==null||r===``||(t===`args`||t===`json`?e.push({type:t,label:n,json:r}):e.push({type:t,label:n,text:t===`output`?N(r):j(r)}))}function te(e){let t=[],n=e.content;if(Array.isArray(n))for(let e of n){let n=P(e);n&&t.push(n)}else{let e=P(n);e&&t.push(e)}return F(t,`args`,`Args`,e.args??e.arguments??e.input??e.rawInput),F(t,`output`,`Output`,e.rawOutput??e.output),F(t,`error`,`Error`,e.error??e.errorMessage??e.reason),t}var I={settings:{category:`settings`,popupKind:`settings`},theme:{category:`settings`,popupKind:`settings`},identity:{category:`settings`,popupKind:`settings`},"identity-auto":{category:`settings`,popupKind:`settings`},model:{category:`model`,popupKind:`model`},provider:{category:`provider`,popupKind:`provider`},login:{category:`provider`,popupKind:`provider`}},L={session:`session`,orchestrate:`workflow`,pabcd:`workflow`,goal:`workflow`,mcp:`utility`,move:`utility`,compact:`utility`,dump:`utility`,help:`utility`};function ne(e){return e.trim().replace(/^\/+/,``)}function R(e,t){let n=typeof e.source==`string`?e.source:``,r=typeof e.path==`string`?e.path:``;return n.includes(`skill`)||t.includes(`:`)?`jwc-skill`:n.includes(`custom`)?`jwc-custom`:n.includes(`file`)||r?`jwc-file`:I[t]||L[t]?`jwc-builtin`:`unknown`}function z(e){let t=e.input;if(!t||typeof t!=`object`)return;let n=t.hint;return typeof n==`string`&&n.trim()?n:void 0}function B(e){if(!e||typeof e!=`object`)return null;let t=e,n=ne(String(t.name??``));if(!n)return null;let r=I[n],i=r?.category??L[n]??`unknown`,a=R(t,n),o=t.supported!==!1&&t.disabled!==!0?r?`popup`:i===`unknown`?`pass-through`:`insert`:`unsupported`,s=typeof t.description==`string`&&t.description.trim()?t.description:void 0,c=z(t),l={name:n,displayName:`/${n}`,category:i,actionType:o,source:a,raw:t};return s&&(l.description=s),c&&(l.inputHint=c),r&&(l.popupKind=r.popupKind),o===`unsupported`&&(l.disabledReason=typeof t.disabledReason==`string`&&t.disabledReason.trim()?t.disabledReason:`Unsupported in Code mode`),l}function re(e){let t=Array.isArray(e)?e:[],n=new Set,r=[];for(let e of t){let t=B(e);!t||n.has(t.name)||(n.add(t.name),r.push(t))}return r}function V(e){return[e.name,e.displayName,e.description??``,e.inputHint??``,e.category,e.source].join(` `).toLowerCase()}function ie(e,t){let n=ne(t.split(/\s+/)[0]??``).toLowerCase();if(!n)return e;let r=[],i=[];for(let t of e)t.name.toLowerCase().startsWith(n)?r.push(t):V(t).includes(n)&&i.push(t);return[...r,...i]}function ae({value:e,disabled:t,onChange:n}){let r=S.find(t=>t.value===e)??S[0];return(0,h.jsxs)(`div`,{className:`code-permission-mode-field`,children:[(0,h.jsxs)(`div`,{className:`code-permission-mode-label`,children:[(0,h.jsx)(`span`,{children:`Permission mode`}),(0,h.jsx)(`strong`,{children:`Default: Always allow`})]}),(0,h.jsx)(`div`,{className:`code-permission-mode-list`,role:`listbox`,"aria-label":`Permission mode`,children:S.map(r=>(0,h.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":r.value===e,disabled:t,className:`code-permission-mode-option is-${r.tone}${r.value===e?` is-selected`:``}`,title:r.detail,onClick:()=>n(r.value),children:[(0,h.jsxs)(`span`,{children:[(0,h.jsx)(`strong`,{children:r.label}),(0,h.jsx)(`small`,{children:r.detail})]}),r.value===e&&(0,h.jsx)(`em`,{"aria-hidden":`true`,children:`✓`})]},r.value))}),(0,h.jsx)(`p`,{className:`code-permission-mode-note is-${r?.tone??`ask`}`,children:`Automatic modes answer with JWC persistent options and write a transcript audit row.`})]})}function oe(e){return e===`provider`?`Provider`:e===`model`?`Model`:e===`permission`?`Permissions`:e===`session`?`Session`:`Settings`}function H(e){return e===`jwc-cache`?`JWC cache`:`static fallback`}function se({popupKind:e,command:t,modelOptions:n,provider:r,model:i,modelAssignments:a,modelPresets:o,permissionMode:s,disabled:c,activeSessionId:l,error:u,onClose:d,onRefreshProviders:p,onProviderChange:m,onUseModel:g,onUseForNewSessions:_,onSetDefaultModel:v,onSetModelAssignment:y,onClearModelAssignment:b,onPermissionModeChange:x}){let S=(0,f.useRef)(null),C=(0,f.useRef)(null),w=n.providers.find(e=>e.id===r)??n.providers[0],[T,E]=(0,f.useState)(``),[D,O]=(0,f.useState)(`models`),[k,A]=(0,f.useState)(r),[j,M]=(0,f.useState)(i),[ee,N]=(0,f.useState)({}),P=n.providers.find(e=>e.id===k)??w,F=T.trim().toLowerCase(),te=(0,f.useMemo)(()=>n.providers.filter(e=>F?e.id.toLowerCase().includes(F)||e.models.some(e=>e.toLowerCase().includes(F)):!0),[n.providers,F]),I=(0,f.useMemo)(()=>{let e=P?.models??[];return F?e.filter(e=>e.toLowerCase().includes(F)):e},[P?.models,F]),L=oe(e),ne=(0,f.useMemo)(()=>{let e=n.providers.length;return`${e} authenticated provider${e===1?``:`s`}`},[n.providers.length]),R=!!(l&&k&&j&&!c),z=!!(k&&j&&!c),B=(0,f.useMemo)(()=>[`inherit`,...P?.efforts??[]].map(e=>e===`min`?`minimal`:e).filter((e,t,n)=>e&&n.indexOf(e)===t).map(e=>({value:e,label:e===`inherit`?`inherit`:e===`minimal`?`min`:e})),[P?.efforts]);return(0,f.useEffect)(()=>{S.current?.focus()},[e,t.name]),(0,f.useEffect)(()=>{let e=document.activeElement;return()=>{e?.focus?.()}},[]),(0,f.useEffect)(()=>{e===`model`&&(E(``),A(r),M(i))},[i,e,r]),(0,f.useEffect)(()=>{if(e!==`model`)return;let t=P?.models??[];t.length>0&&!t.includes(j)&&M(t[0]??``)},[j,P?.models,e]),(0,f.useEffect)(()=>{if(e!==`model`||!a)return;let t={};for(let e of a.roles){let n=e.thinkingLevel===`min`?`minimal`:e.thinkingLevel;t[e.role]=n||`inherit`}N(t)},[a,e]),(0,f.useEffect)(()=>{let e=e=>{if(e.key===`Escape`){e.preventDefault(),d();return}if(e.key===`Tab`&&C.current){let t=C.current.querySelectorAll(`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`),n=t[0],r=t[t.length-1];if(!n||!r)return;let i=document.activeElement;e.shiftKey&&i===n?(e.preventDefault(),r.focus()):!e.shiftKey&&i===r&&(e.preventDefault(),n.focus())}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[d]),(0,h.jsx)(`div`,{className:`code-popup-backdrop`,role:`presentation`,onMouseDown:e=>{e.target===e.currentTarget&&d()},children:(0,h.jsxs)(`section`,{ref:C,className:`code-popup`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`code-command-popup-title`,children:[(0,h.jsxs)(`header`,{className:`code-popup-header`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`p`,{className:`code-popup-command`,children:t.displayName}),(0,h.jsx)(`h2`,{id:`code-command-popup-title`,children:L})]}),(0,h.jsx)(`button`,{ref:S,type:`button`,className:`code-popup-close`,onClick:d,"aria-label":`Close popup`,children:`x`})]}),e===`provider`&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[(0,h.jsxs)(`div`,{className:`code-popup-section-head`,children:[(0,h.jsx)(`span`,{children:ne}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:c,onClick:p,children:`Refresh`})]}),n.degraded&&(0,h.jsx)(`p`,{className:`code-popup-warning`,children:n.error??`Provider discovery is degraded.`}),u&&(0,h.jsx)(`p`,{className:`code-popup-error`,children:u}),(0,h.jsx)(`div`,{className:`code-provider-list`,role:`list`,children:n.providers.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-provider-row${e.id===r?` is-selected`:``}`,onClick:()=>m(e.id),disabled:c,children:[(0,h.jsx)(`span`,{className:`code-provider-name`,children:e.id}),(0,h.jsxs)(`span`,{className:`code-provider-meta`,children:[e.models.length,` models · `,H(e.modelSource)]})]},e.id))}),(0,h.jsxs)(`div`,{className:`code-popup-placeholder-actions`,children:[(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Add provider`}),(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Login`}),(0,h.jsx)(`span`,{children:`Provider add/login execution is next slice.`})]})]}),(e===`settings`||e===`permission`)&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[(0,h.jsx)(ae,{value:s,disabled:!!c,onChange:x}),e===`settings`&&(0,h.jsxs)(`div`,{className:`code-popup-summary`,children:[(0,h.jsx)(`span`,{children:`Provider`}),(0,h.jsx)(`strong`,{children:r||`-`}),(0,h.jsx)(`span`,{children:`Model`}),(0,h.jsx)(`strong`,{children:i||`-`})]})]}),e===`model`&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[u&&(0,h.jsx)(`p`,{className:`code-popup-error`,children:u}),(0,h.jsx)(`div`,{className:`code-model-tablist`,role:`tablist`,"aria-label":`Model settings tabs`,children:[`models`,`roles`,`profiles`].map(e=>(0,h.jsx)(`button`,{type:`button`,role:`tab`,id:`code-model-tab-${e}`,"aria-selected":D===e,"aria-controls":`code-model-panel-${e}`,tabIndex:D===e?0:-1,className:`code-model-tab${D===e?` is-active`:``}`,onClick:()=>O(e),onKeyDown:e=>{if(e.key!==`ArrowRight`&&e.key!==`ArrowLeft`)return;e.preventDefault();let t=[`models`,`roles`,`profiles`],n=e.key===`ArrowRight`?1:t.length-1;O(t[(t.indexOf(D)+n)%t.length]??`models`)},children:e===`models`?`Models`:e===`roles`?`Roles`:`Profiles`},e))}),D===`models`&&(0,h.jsxs)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-models`,"aria-labelledby":`code-model-tab-models`,children:[(0,h.jsxs)(`label`,{className:`code-popup-field`,children:[(0,h.jsx)(`span`,{children:`Search models`}),(0,h.jsx)(`input`,{type:`search`,className:`code-model-search`,placeholder:`Search provider or model`,value:T,onChange:e=>E(e.target.value),disabled:c})]}),n.usageOrder&&n.usageOrder.length>0&&(0,h.jsxs)(`div`,{className:`code-model-mru-strip`,"aria-label":`Recently used models`,children:[(0,h.jsx)(`span`,{children:`Recently used`}),n.usageOrder.slice(0,3).map(e=>(0,h.jsx)(`strong`,{children:e},e))]}),(0,h.jsxs)(`div`,{className:`code-model-layout`,children:[(0,h.jsx)(`div`,{className:`code-model-providers`,role:`list`,"aria-label":`Providers`,children:te.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-model-provider${e.id===k?` is-selected`:``}`,onClick:()=>{A(e.id),M(e.models[0]??``)},disabled:c,children:[(0,h.jsx)(`span`,{children:e.id}),(0,h.jsx)(`small`,{children:e.models.length})]},e.id))}),(0,h.jsxs)(`div`,{className:`code-model-list`,role:`list`,"aria-label":`Models`,children:[(0,h.jsxs)(`div`,{className:`code-model-list-head`,children:[(0,h.jsx)(`strong`,{children:P?.id??`No provider`}),(0,h.jsxs)(`span`,{children:[I.length,` models · `,H(P?.modelSource)]})]}),I.length===0?(0,h.jsx)(`p`,{className:`code-popup-note`,children:`No models match this search.`}):I.map(e=>{let t=k===r&&e===i,n=e===j;return(0,h.jsxs)(`button`,{type:`button`,className:`code-model-row${t?` is-active`:``}${n?` is-draft`:``}`,onClick:()=>M(e),disabled:c,children:[(0,h.jsx)(`span`,{children:e}),(0,h.jsx)(`small`,{children:t?`Active`:n?`Selected`:`Available`})]},e)})]})]}),(0,h.jsxs)(`div`,{className:`code-popup-action-row`,children:[(0,h.jsxs)(`div`,{className:`code-popup-summary code-popup-summary-compact`,children:[(0,h.jsx)(`span`,{children:`Active`}),(0,h.jsxs)(`strong`,{children:[r||`-`,` / `,i||`-`]}),(0,h.jsx)(`span`,{children:`Selected`}),(0,h.jsxs)(`strong`,{children:[k||`-`,` / `,j||`-`]}),(0,h.jsx)(`span`,{children:`Default`}),(0,h.jsxs)(`strong`,{children:[n.defaultProvider||`-`,` / `,n.defaultModel||`-`]})]}),(0,h.jsxs)(`div`,{className:`code-popup-action-stack`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-popup-primary`,disabled:!R,onClick:()=>{g(k,j)},children:`Use now`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!z,onClick:()=>{_(k,j)},children:`Use for new sessions`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!z,onClick:()=>{v(k,j)},children:`Set default`})]})]}),!l&&(0,h.jsx)(`p`,{className:`code-popup-note`,children:`Start or load a Code session to apply a live model. Use “Use for new sessions” to set the next session’s model.`})]}),D===`roles`&&(0,h.jsx)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-roles`,"aria-labelledby":`code-model-tab-roles`,children:(0,h.jsxs)(`div`,{className:`code-role-assignment-panel`,"aria-label":`Model role assignments`,children:[(0,h.jsxs)(`div`,{className:`code-role-assignment-head`,children:[(0,h.jsx)(`strong`,{children:`Role assignments`}),(0,h.jsx)(`span`,{children:a?.activeModel.note??`Role assignments do not mutate the active Code session model.`})]}),(0,h.jsx)(`div`,{className:`code-role-assignment-grid`,role:`list`,children:(a?.roles??[]).map(e=>{let t=e.modelId?e.modelId:`Unset`,n=ee[e.role]??(e.thinkingLevel===`min`?`minimal`:e.thinkingLevel)??`inherit`,r=!!(k&&j&&!c),i=!!(e.modelId&&!c);return(0,h.jsxs)(`article`,{className:`code-role-card`,role:`listitem`,children:[(0,h.jsxs)(`div`,{className:`code-role-card-head`,children:[(0,h.jsx)(`span`,{className:`code-role-tag`,children:e.tag}),(0,h.jsx)(`strong`,{children:e.name})]}),(0,h.jsx)(`p`,{className:`code-role-path`,children:e.settingsPath}),(0,h.jsx)(`p`,{className:`code-role-model`,title:t,children:t}),(0,h.jsxs)(`label`,{className:`code-role-thinking`,children:[(0,h.jsx)(`span`,{children:`Thinking`}),(0,h.jsx)(`select`,{value:n,disabled:c,onChange:t=>{let n=t.target.value;N(t=>({...t,[e.role]:n}))},children:B.map(e=>(0,h.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,h.jsxs)(`div`,{className:`code-role-actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!r,onClick:()=>{y(e.role,k,j,n===`inherit`?null:n)},children:`Assign selected`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!i,onClick:()=>{b(e.role)},children:`Clear`})]})]},e.role)})}),!a&&(0,h.jsx)(`p`,{className:`code-popup-note`,children:`Loading role assignments.`})]})}),D===`profiles`&&(0,h.jsx)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-profiles`,"aria-labelledby":`code-model-tab-profiles`,children:(0,h.jsxs)(`div`,{className:`code-model-preset-panel`,"aria-label":`Model profiles and presets`,children:[(0,h.jsxs)(`div`,{className:`code-role-assignment-head`,children:[(0,h.jsx)(`strong`,{children:`Profiles and presets`}),(0,h.jsx)(`span`,{children:o?.applyReason??`Loading JWC profile state.`})]}),(0,h.jsxs)(`div`,{className:`code-model-preset-summary`,children:[(0,h.jsx)(`span`,{children:`Startup profile`}),(0,h.jsx)(`strong`,{children:o?.defaultProfile??`Unset`}),(0,h.jsx)(`span`,{children:`Task presets`}),(0,h.jsx)(`strong`,{children:o?o.taskPresets.length:`-`}),(0,h.jsx)(`span`,{children:`Built-in profiles`}),(0,h.jsx)(`strong`,{children:o?o.builtinProfiles.length:`-`})]}),o&&o.taskPresets.length>0&&(0,h.jsx)(`div`,{className:`code-model-preset-list`,role:`list`,"aria-label":`Task model presets`,children:o.taskPresets.slice(0,4).map(e=>(0,h.jsxs)(`div`,{className:`code-model-preset-row`,role:`listitem`,children:[(0,h.jsx)(`strong`,{children:e.name}),(0,h.jsx)(`span`,{children:e.best?`best ${e.best}`:`best unset`}),(0,h.jsx)(`span`,{children:e.cheap?`cheap ${e.cheap}`:`cheap unset`})]},e.name))}),o&&(0,h.jsx)(`div`,{className:`code-model-profile-chips`,"aria-label":`Built-in profile candidates`,children:o.builtinProfiles.slice(0,8).map(e=>(0,h.jsx)(`span`,{children:e.name},e.name))}),(0,h.jsxs)(`div`,{className:`code-popup-placeholder-actions`,children:[(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Apply profile`}),(0,h.jsx)(`span`,{children:`Profile activation is read-only here; JWC runtime owns credential checks and rollback.`})]})]})})]})]})})}function U(e,t,n){return n<=0?0:(e+t+n)%n}function ce(e){return e.disabledReason?`Disabled`:e.actionType===`popup`?e.popupKind?`${e.popupKind} popup`:`Popup`:e.actionType===`pass-through`?`Pass-through`:e.actionType===`unsupported`?`Unsupported`:`Insert`}function le(e){let[t,n]=(0,f.useState)(0),r=(0,f.useMemo)(()=>ie(e.availableCommands,e.inputText).slice(0,10),[e.availableCommands,e.inputText]),i=r[t],a=i?`code-command-option-${i.name.replace(/[^a-z0-9_-]/gi,`-`)}`:void 0;(0,f.useEffect)(()=>{n(0)},[e.inputText,e.availableCommands]),(0,f.useEffect)(()=>{t>=r.length&&n(Math.max(0,r.length-1))},[t,r.length]);let o=t=>{!t||t.disabledReason||e.onCommandSelect(t)};return(0,h.jsxs)(`div`,{className:`code-composer`,children:[e.showCommands&&r.length>0&&(0,h.jsx)(`div`,{className:`code-command-palette`,role:`listbox`,"aria-label":`Code commands`,id:`code-command-palette`,children:r.map((e,r)=>{let i=r===t;return(0,h.jsxs)(`button`,{id:`code-command-option-${e.name.replace(/[^a-z0-9_-]/gi,`-`)}`,type:`button`,role:`option`,"aria-selected":i,"aria-disabled":e.disabledReason?!0:void 0,className:`code-command-item${i?` is-active`:``}${e.disabledReason?` is-disabled`:``}`,onMouseEnter:()=>n(r),onClick:()=>o(e),children:[(0,h.jsxs)(`span`,{className:`code-command-row-main`,children:[(0,h.jsx)(`span`,{className:`code-command-name`,children:e.displayName}),e.description&&(0,h.jsx)(`span`,{className:`code-command-desc`,children:e.description})]}),(0,h.jsxs)(`span`,{className:`code-command-row-meta`,children:[(0,h.jsx)(`span`,{className:`code-command-chip`,children:e.category}),(0,h.jsx)(`span`,{className:`code-command-chip`,children:e.source}),(0,h.jsx)(`span`,{className:`code-command-chip`,children:ce(e)})]})]},e.name)})}),(0,h.jsxs)(`div`,{className:`code-composer-input-shell`,children:[(0,h.jsx)(`textarea`,{className:`code-composer-input`,value:e.inputText,onChange:t=>e.onInputChange(t.target.value),onKeyDown:t=>{if(t.key===`Escape`&&e.showCommands){t.preventDefault(),e.onShowCommandsChange(!1);return}if(e.showCommands&&r.length>0){if(t.key===`ArrowDown`){t.preventDefault(),n(e=>U(e,1,r.length));return}if(t.key===`ArrowUp`){t.preventDefault(),n(e=>U(e,-1,r.length));return}if(t.key===`Enter`&&!t.shiftKey){t.preventDefault(),o(i);return}}t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),e.onSubmit())},"aria-controls":e.showCommands?`code-command-palette`:void 0,"aria-activedescendant":e.showCommands?a:void 0,"aria-expanded":e.showCommands,placeholder:`Describe a task or ask a question...`,rows:1,disabled:e.sending}),(0,h.jsx)(`span`,{className:`code-composer-hint`,children:`Enter to send · / for commands`})]}),(0,h.jsx)(`button`,{type:`button`,className:`code-composer-send`,onClick:e.onSubmit,disabled:!e.inputText.trim()||e.sending,"aria-label":`Send prompt`,children:`Send`})]})}function W({permissions:e,onAnswer:t}){return e.length===0?null:(0,h.jsx)(`div`,{className:`code-permissions`,children:e.map(e=>(0,h.jsxs)(`div`,{className:`code-permission-card`,children:[(0,h.jsxs)(`div`,{className:`code-permission-title`,children:[(0,h.jsx)(`span`,{children:`Permission request`}),(0,h.jsx)(`strong`,{children:k(e.toolCall)}),(0,h.jsxs)(`small`,{children:[e.options.length,` JWC options`]})]}),(0,h.jsx)(`div`,{className:`code-permission-actions`,children:y.map(n=>{let r=O(e.options,n),i=x[n];return(0,h.jsx)(`button`,{type:`button`,className:`code-permission-btn is-${i}`,disabled:!r,title:r?r.optionId:`${b[n]} option was not provided by JWC`,onClick:()=>t(e,n),children:r?.label??b[n]},n)})})]},e.permissionId))})}var ue=92,de=6;function fe(e){let[{virtualItems:t,totalSize:s},c]=(0,f.useState)({virtualItems:[],totalSize:0}),l=(0,f.useRef)(null);l.current||=new o({count:e.count,getScrollElement:()=>e.scrollElementRef.current,estimateSize:e.estimateSize||(()=>ue),overscan:de,getItemKey:e.getItemKey,indexAttribute:`data-code-transcript-idx`,useAnimationFrameWithResizeObserver:!0,observeElementRect:n,observeElementOffset:r,scrollToFn:i,measureElement:a,onChange:e=>{c({virtualItems:e.getVirtualItems(),totalSize:e.getTotalSize()})}});let u=l.current;return(0,f.useEffect)(()=>u._didMount(),[u]),(0,f.useEffect)(()=>{u.measure()},[u,e.resetKey]),(0,f.useEffect)(()=>()=>{l.current=null},[]),(0,f.useLayoutEffect)(()=>{u.setOptions({...u.options,count:e.count,getItemKey:e.getItemKey,estimateSize:e.estimateSize||(()=>ue)}),u._willUpdate(),c({virtualItems:u.getVirtualItems(),totalSize:u.getTotalSize()})},[e.count,e.estimateSize,e.getItemKey,u]),{measureElement:e=>{e&&u.measureElement(e)},virtualItems:t,totalSize:s}}var G=2e3,pe=80,K=400;function me(e){if(e<=G)return pe;let t=e/G*pe;return Math.min(K,Math.round(t))}function he(e){let[t,n]=(0,f.useState)(e),r=(0,f.useRef)(0),i=(0,f.useRef)(null);return(0,f.useEffect)(()=>{if(!(e.length>=t.length&&e.startsWith(t))){i.current!==null&&(window.clearTimeout(i.current),i.current=null),r.current=Date.now(),n(e);return}if(e===t)return;let a=me(e.length),o=Date.now()-r.current;if(o>=a){r.current=Date.now(),n(e);return}i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{i.current=null,r.current=Date.now(),n(e)},a-o)},[e,t]),(0,f.useEffect)(()=>()=>{i.current!==null&&window.clearTimeout(i.current)},[]),t}var ge=(0,f.lazy)(()=>t(()=>import(`./MarkdownRenderer-B6HbiZ6i.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0])));function _e({text:e,onOpenLocalFile:t}){let n=he(e);return(0,h.jsx)(f.Suspense,{fallback:(0,h.jsx)(`span`,{children:n}),children:(0,h.jsx)(ge,{markdown:n,tableMode:`linear`,onLocalFileOpen:t})})}function q(e,t){let n=e.label??(e.type===`args`?`Args`:e.type===`output`?`Output`:e.type===`error`?`Error`:``),r=`code-tool-${e.type}`,i=e.type===`diff`&&e.diff?e.diff:e.type===`json`||e.type===`args`?JSON.stringify(e.json??e,null,2):e.text??JSON.stringify(e,null,2);return n?(0,h.jsxs)(`div`,{className:`code-tool-section`,children:[(0,h.jsx)(`span`,{className:`code-tool-section-label`,children:n}),(0,h.jsx)(`pre`,{className:r,children:i})]},t):e.type===`diff`&&e.diff?(0,h.jsx)(`pre`,{className:`code-tool-diff`,children:e.diff},t):e.text?(0,h.jsx)(`pre`,{className:`code-tool-text`,children:e.text},t):(0,h.jsx)(`pre`,{className:r,children:i},t)}function ve(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function J(e){return(e.toolContent?.find(e=>typeof e.text==`string`&&e.text.trim())?.text??e.toolOutput??``).replace(/\s+/g,` `).trim().slice(0,240)}function Y(e){return e.split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()??``}function X(e){let t=e.toolContent?.find(e=>e.type===`args`||e.type===`text`||e.type===`json`);if(!t)return null;if(typeof t.text==`string`){let e=Y(t.text);return e?{text:e,...t.type===`args`?{name:`bash`}:/^https?:\/\//.test(e)||e.startsWith(`/`)?{name:`read`}:{}}:null}if(typeof t.json==`string`){let e=Y(t.json);return e?{text:e,...t.type===`args`?{name:`bash`}:{}}:null}if(t.json&&typeof t.json==`object`&&!Array.isArray(t.json)){let e=t.json;for(let[t,n]of[[`command`,`bash`],[`cmd`,`bash`],[`path`,`read`],[`url`,`read`],[`file`,`read`],[`query`,`search`]]){let r=e[t];if(typeof r==`string`&&r.trim())return{name:n,text:Y(r)}}}return null}function Z(e){let t=Y(e.toolName||e.text||`tool`)||`tool`,n=X(e);return t.includes(`:`)||!n?t:t===`tool`?n.name?`${n.name}: ${n.text}`:n.text:`${t}: ${n.text}`}function ye(e){return e===`pending`?`Pending`:e===`allow_once`?`Allow once`:e===`allow_always`?`Always allow`:e===`reject_once`?`Deny once`:e===`reject_always`?`Always deny`:e===`missing_option`?`Missing JWC option`:e===`answer_error`?`Answer failed`:`Cancelled`}function be(e,t){return`${t}:${e.toolCallId||e.permissionAudit?.permissionId||`${e.role}:${e.text.slice(0,48)}`}`}function xe(e){return e?e.role===`tool`?e.toolStatus===`running`?44:64+Math.min(320,(e.toolOutput?.length??0)/5):e.role===`permission`?72:e.role===`thinking`?48+Math.min(180,e.text.length/8):56+Math.min(420,e.text.length/6):48}function Se(e,t,n){return(0,h.jsx)(`div`,{className:`code-message code-message-${e.role}`,children:e.role===`tool`?(()=>{let t=e.toolStatus??`done`,n=t===`failed`||t===`error`,r=n?J(e):``;return(0,h.jsxs)(`details`,{className:`code-tool-card code-tool-${t}`,open:t===`running`||n,children:[(0,h.jsxs)(`summary`,{className:`code-tool-summary`,children:[(0,h.jsx)(`span`,{className:`code-tool-chevron`,children:`>`}),(0,h.jsx)(`span`,{className:`code-tool-name`,children:Z(e)}),(0,h.jsx)(`span`,{className:`code-tool-status`,children:t})]}),r&&(0,h.jsx)(`div`,{className:`code-tool-error-snippet`,children:r}),(e.toolContent?.length??0)>0&&(0,h.jsx)(`div`,{className:`code-tool-content`,children:e.toolContent.map(q)}),e.toolOutput&&(0,h.jsxs)(`pre`,{className:`code-tool-output`,children:[e.toolOutput.slice(0,2e3),e.toolOutput.length>2e3?`...`:``]})]})})():e.role===`permission`&&e.permissionAudit?(()=>{let t=e.permissionAudit,n=t.decision.startsWith(`allow`)?`is-allow`:t.decision.startsWith(`reject`)?`is-deny`:``;return(0,h.jsxs)(`div`,{className:`code-permission-audit is-${t.decision} ${n}`.trim(),children:[(0,h.jsxs)(`div`,{className:`code-permission-audit-head`,children:[(0,h.jsx)(`span`,{children:`Permission`}),(0,h.jsx)(`strong`,{children:t.toolName}),(0,h.jsx)(`em`,{children:ye(t.decision)})]}),(0,h.jsxs)(`div`,{className:`code-permission-audit-meta`,children:[(0,h.jsxs)(`span`,{children:[`mode `,t.mode]}),(0,h.jsx)(`span`,{children:t.decisionMode}),t.optionId&&(0,h.jsx)(`span`,{children:t.optionId})]}),t.error&&(0,h.jsx)(`div`,{className:`code-permission-audit-error`,children:t.error})]})})():e.role===`thinking`?(0,h.jsxs)(`details`,{className:`code-thinking`,children:[(0,h.jsx)(`summary`,{className:`code-thinking-summary`,children:`Thinking...`}),(0,h.jsx)(`div`,{className:`code-thinking-text`,children:e.text})]}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:`code-message-role`,children:e.role===`user`?`You`:`JWC`}),(0,h.jsx)(`div`,{className:`code-message-text`,children:e.role===`assistant`?(0,h.jsx)(_e,{text:e.text,onOpenLocalFile:n}):e.text})]})},t)}function Ce(){return(0,h.jsxs)(`div`,{className:`code-message code-message-assistant`,children:[(0,h.jsx)(`span`,{className:`code-message-role`,children:`JWC`}),(0,h.jsx)(`div`,{className:`code-message-text code-streaming`,children:`Thinking...`})]})}function Q({messages:e,sending:t,workingDir:n,transcriptRef:r,onOpenLocalFile:i,sessionId:a}){let o=t&&e[e.length-1]?.role!==`assistant`,s=e.length+ +!!o,c=(0,f.useRef)(e);c.current=e;let l=(0,f.useCallback)(e=>{let t=c.current[e];return t?be(t,e):`sending-${e}`},[]),u=(0,f.useCallback)(e=>xe(c.current[e]),[]),d=fe({count:s,resetKey:a??null,scrollElementRef:r,getItemKey:l,estimateSize:u});function p(e){if(ve(e.target))return;let t=r.current;if(!t)return;let n=e.key.toLowerCase(),i=Math.max(160,Math.floor(t.clientHeight*.78));n===`d`||n===`j`||e.key===`PageDown`?(e.preventDefault(),t.scrollBy({top:i,behavior:`smooth`})):n===`u`||n===`k`||e.key===`PageUp`?(e.preventDefault(),t.scrollBy({top:-i,behavior:`smooth`})):e.key===`End`?(e.preventDefault(),t.scrollTo({top:t.scrollHeight,behavior:`smooth`})):e.key===`Home`&&(e.preventDefault(),t.scrollTo({top:0,behavior:`smooth`}))}return(0,h.jsx)(`div`,{className:`code-transcript`,ref:r,role:`log`,"aria-live":`polite`,tabIndex:0,onKeyDown:p,children:e.length===0?(0,h.jsxs)(`div`,{className:`code-transcript-empty`,children:[(0,h.jsx)(`p`,{children:`Start a Code session by typing a prompt below.`}),(0,h.jsxs)(`p`,{className:`code-transcript-cwd`,children:[`cwd: `,n||`not set`]})]}):(0,h.jsx)(`div`,{className:`code-transcript-virtual-spacer`,style:{height:`${d.totalSize}px`},children:d.virtualItems.map(t=>{let n=e[t.index];return(0,h.jsx)(`div`,{ref:d.measureElement,className:`code-transcript-virtual-row`,"data-code-transcript-idx":t.index,style:{transform:`translateY(${t.start}px)`},children:n?Se(n,t.index,i):Ce()},t.key)})})})}function we(e){return e.split(`/`).filter(Boolean).slice(-2).join(`/`)||e}function Te({workingDir:e,gitInfo:t,modelOptions:n,sessionTitle:r,usage:i,planEntries:a,onWorkingDirChange:o,cwdLocked:s=!1,workspaceFrozen:c=!1,onPickWorkingDir:l}){let[u,d]=(0,f.useState)(!1),[p,m]=(0,f.useState)(``),g=t?.status?.dirty,_=t?.worktrees.length??0,v=c||s,y=!!(!v&&l&&o);async function b(){if(!(!y||!l)){d(!0),m(``);try{let e=await l();e&&o?.(e)}catch(e){m(e instanceof Error?e.message:String(e))}finally{d(!1)}}}return(0,h.jsxs)(`div`,{className:`code-workspace-header`,children:[(0,h.jsxs)(`div`,{className:`code-workspace-primary`,children:[v?(0,h.jsx)(`span`,{className:`code-workspace-chip`,title:e,"aria-label":`Current Code workspace: ${e}`,children:we(e||`/tmp`)}):(0,h.jsxs)(`button`,{type:`button`,className:`code-workspace-picker`,disabled:!y||u,title:e||`Select Code workspace folder`,"aria-label":`Code workspace: ${e||`not set`}. Choose a folder.`,onClick:()=>void b(),children:[(0,h.jsx)(`span`,{className:`code-workspace-picker-label`,children:we(e||`/tmp`)}),(0,h.jsx)(`span`,{className:`code-workspace-picker-caret`,"aria-hidden":`true`,children:`▾`})]}),!v&&p&&(0,h.jsx)(`span`,{className:`code-workspace-cwd-error`,children:p}),t?.isRepo&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`span`,{className:`code-workspace-pill`,children:[t.branch??`detached`,t.head?` · ${t.head}`:``]}),(0,h.jsx)(`span`,{className:`code-workspace-pill ${g?`is-dirty`:``}`,children:g?`${t.status?.changed??0} changed · ${t.status?.untracked??0} untracked`:`clean`}),(0,h.jsxs)(`span`,{className:`code-workspace-pill`,title:t.currentWorktree?.path??void 0,children:[`worktree `,_]})]}),n?.degraded&&(0,h.jsx)(`span`,{className:`code-workspace-pill is-warning`,title:n.error,children:`provider fallback`})]}),(r||i.contextTokens!==void 0||a.length>0)&&(0,h.jsxs)(`div`,{className:`code-session-header`,children:[r&&(0,h.jsx)(`span`,{className:`code-session-title`,children:r}),i.contextTokens!==void 0&&i.contextLimit?(0,h.jsx)(`span`,{className:`code-context-meter`,title:`${i.contextTokens.toLocaleString()} / ${i.contextLimit.toLocaleString()} tokens${i.cost===void 0?``:` · $${i.cost.toFixed(4)}`}`,children:(0,h.jsx)(`span`,{className:`code-context-bar`,style:{width:`${Math.min(100,i.contextTokens/i.contextLimit*100)}%`}})}):null,a.length>0&&(0,h.jsx)(`div`,{className:`code-plan-entries`,children:a.map((e,t)=>(0,h.jsxs)(`span`,{className:`code-plan-entry code-plan-${e.status}`,children:[e.status===`completed`?`✓`:e.status===`in_progress`?`↻`:`○`,` `,e.title]},t))})]})]})}function Ee({label:e,value:t,options:n,disabled:r,title:i,className:a=``,onChange:o}){let s=(0,f.useId)(),c=(0,f.useRef)(null),[l,u]=(0,f.useState)(!1),d=n.find(e=>e.value===t)??n[0],p=Math.max(0,n.findIndex(e=>e.value===d?.value));(0,f.useEffect)(()=>{if(!l)return;let e=e=>{c.current?.contains(e.target)||u(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[l]);let m=e=>{o(e),u(!1)};return(0,h.jsxs)(`div`,{ref:c,className:`code-footer-menu ${a}`.trim(),children:[(0,h.jsxs)(`button`,{type:`button`,className:`code-footer-menu-trigger`,disabled:r,title:i,"aria-label":e,"aria-haspopup":`listbox`,"aria-expanded":l,"aria-controls":s,onClick:()=>u(e=>!e),onKeyDown:e=>{if(!r){if(e.key===`Escape`){u(!1);return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=n[(p+(e.key===`ArrowDown`?1:-1)+n.length)%n.length];t&&m(t.value);return}(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),u(e=>!e))}},children:[(0,h.jsx)(`span`,{className:`code-footer-label`,children:e}),(0,h.jsx)(`strong`,{children:d?.label??t}),(0,h.jsx)(`span`,{className:`code-footer-chevron`,"aria-hidden":`true`,children:`⌃`})]}),l&&(0,h.jsx)(`div`,{id:s,className:`code-footer-dropup`,role:`listbox`,"aria-label":e,children:n.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-footer-dropup-option${e.value===t?` is-selected`:``}`,role:`option`,"aria-selected":e.value===t,onClick:()=>m(e.value),children:[(0,h.jsxs)(`span`,{children:[(0,h.jsx)(`strong`,{children:e.label}),e.detail&&(0,h.jsx)(`small`,{children:e.detail})]}),e.value===t&&(0,h.jsx)(`em`,{"aria-hidden":`true`,children:`✓`})]},e.value))})]})}function De({provider:e,providerOptions:t,model:n,modelOptions:r,effort:i,effortOptions:a,permissionMode:o,disabled:s,onProviderChange:c,onModelChange:l,onEffortChange:u,onPermissionModeChange:d}){return(0,h.jsxs)(`div`,{className:`code-composer-footer`,children:[(0,h.jsx)(Ee,{label:`Permission`,value:o,options:S,disabled:s,title:C[o],onChange:d}),t.length>0&&(0,h.jsx)(Ee,{label:`Provider`,value:e,options:t.map(e=>({value:e,label:e})),disabled:s,title:e,onChange:c}),(0,h.jsx)(Ee,{label:`Model`,value:n,options:r.map(e=>({value:e,label:e})),disabled:s,title:n,className:`code-footer-field-model`,onChange:l}),a.length>0&&(0,h.jsx)(Ee,{label:`Effort`,value:i,options:a.map(e=>({value:e,label:e})),disabled:s,title:i,onChange:u})]})}function Oe(e){return(0,h.jsxs)(`div`,{className:`code-canvas-main`,children:[(0,h.jsx)(Te,{gitInfo:e.gitInfo,modelOptions:e.modelOptions,sessionTitle:e.sessionTitle,usage:e.usage,planEntries:e.planEntries,workingDir:e.codeWorkingDir,cwdLocked:!!e.activeSessionId,onWorkingDirChange:e.onWorkingDirChange,workspaceFrozen:e.workspaceFrozen,onPickWorkingDir:e.onPickWorkingDir}),e.childRecovery&&(0,h.jsxs)(`section`,{className:`code-child-recovery`,role:`status`,"aria-live":`polite`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`span`,{children:`JWC child recovery`}),(0,h.jsxs)(`strong`,{children:[`ACP child exited: `,e.childRecovery.code]})]}),(0,h.jsx)(`p`,{children:e.childRecovery.message})]}),e.transportState!==`connected`&&(0,h.jsx)(`section`,{className:`code-transport-status is-${e.transportState}`,role:`status`,"aria-live":`polite`,children:e.transportState===`reconnecting`?`Live updates reconnecting…`:`Live updates disconnected — retrying.`}),(0,h.jsx)(Q,{messages:e.messages,sending:e.sending,workingDir:e.codeWorkingDir,transcriptRef:e.transcriptRef,onOpenLocalFile:e.onOpenLocalFile,sessionId:e.activeSessionId}),(0,h.jsx)(W,{permissions:e.permissions,onAnswer:e.onPermissionAnswer}),(0,h.jsx)(`div`,{className:`code-composer-dock`,children:(0,h.jsxs)(`div`,{className:`code-composer-surface`,"aria-label":`Code composer controls`,children:[(0,h.jsx)(le,{inputText:e.inputText,sending:e.sending,showCommands:e.showCommands,availableCommands:e.availableCommands,onInputChange:e.onInputChange,onCommandSelect:e.onCommandSelect,onSubmit:e.onSubmit,onShowCommandsChange:e.onShowCommandsChange}),(0,h.jsx)(De,{provider:e.provider,providerOptions:e.providerOptions,model:e.model,modelOptions:e.currentModelOptions,effort:e.effort,effortOptions:e.currentEffortOptions,permissionMode:e.permissionMode,disabled:e.disabled,onProviderChange:e.onFooterProviderChange,onModelChange:e.onModelChange,onEffortChange:e.onEffortChange,onPermissionModeChange:e.onPermissionModeChange})]})}),e.activePopup&&(0,h.jsx)(se,{popupKind:e.activePopup.kind,command:e.activePopup.command,modelOptions:e.modelOptions,provider:e.provider,model:e.model,modelAssignments:e.modelAssignments,modelPresets:e.modelPresets,permissionMode:e.permissionMode,disabled:e.disabled,activeSessionId:e.activeSessionId,error:e.error,onClose:e.onClosePopup,onRefreshProviders:e.onRefreshProviders,onProviderChange:e.onProviderChange,onUseModel:e.onUseModel,onUseForNewSessions:e.onUseForNewSessions,onSetDefaultModel:e.onSetDefaultModel,onSetModelAssignment:e.onSetModelAssignment,onClearModelAssignment:e.onClearModelAssignment,onPermissionModeChange:e.onPermissionModeChange})]})}var ke={providers:[{id:`anthropic`,models:[`claude-sonnet-4-6`,`claude-opus-5`,`claude-opus-4-8`,`claude-opus-4-7`,`claude-opus-4-6`,`claude-haiku-4-5`,`claude-fable-5`],efforts:[`off`,`min`,`low`,`medium`,`high`,`xhigh`]}],defaultProvider:`anthropic`,defaultModel:`claude-sonnet-4-6`,degraded:!0},Ae=re([{name:`/model`,description:`Choose provider, model, roles, thinking, profiles, and MRU state.`,source:`cli-jaw`},{name:`/provider`,description:`Review authenticated JWC providers.`,source:`cli-jaw`},{name:`/settings`,description:`Adjust Code mode session controls.`,source:`cli-jaw`}]);function je(e){let t=new Set,n=[];for(let r of[...e,...Ae])t.has(r.name)||(t.add(r.name),n.push(r));return n}function Me(e,t,n,r){if(r.appendMessage(A(n,{mode:t,decision:`pending`,decisionMode:t===`ask`?`pending`:`automatic`})),t===`ask`){r.enqueuePermission(n);return}let i=t===`always-allow`?`allow_always`:`reject_always`,a=O(n.options,i);if(!a){r.appendMessage(A(n,{mode:t,decision:`missing_option`,decisionMode:`system`,error:`${i} was not provided by JWC for this request.`})),r.enqueuePermission(n);return}(async()=>{try{await e.answerPermission(n.permissionId,a.optionId),r.appendMessage(A(n,{mode:t,decision:i,decisionMode:`automatic`,optionId:a.optionId,optionLabel:a.label}))}catch(e){r.appendMessage(A(n,{mode:t,decision:`answer_error`,decisionMode:`system`,optionId:a.optionId,optionLabel:a.label,error:e instanceof Error?e.message:String(e)}))}})()}async function Ne(e,t,n,r,i){let a=O(n.options,r);if(!a)return i(A(n,{mode:t,decision:`missing_option`,decisionMode:`system`,error:`${r} was not provided by JWC for this request.`})),!1;try{await e.answerPermission(n.permissionId,a.optionId),i(A(n,{mode:t,decision:r,decisionMode:`manual`,optionId:a.optionId,optionLabel:a.label}))}catch(e){i(A(n,{mode:t,decision:`answer_error`,decisionMode:`system`,optionId:a.optionId,optionLabel:a.label,error:e instanceof Error?e.message:String(e)}))}return!0}function Pe(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return t.toString(36)}var Fe=2e3,Ie=new Set([`code_user_message_chunk`,`code_agent_message_chunk`,`code_agent_thought_chunk`]);function Le(e){let t=e?.content;return String(t?.text??e?.text??``)}function $(e){let t=e?.messageId;return typeof t==`string`?t.trim():``}function Re(e,t){if(!Ie.has(e.event)||!t)return null;let n=$(e.update??{}),r=typeof e.sseEventId==`string`&&e.sseEventId.trim()?e.sseEventId.trim():``,i=n?`msg:${n}`:r?`sse:${r}`:``;return i?`${e.sessionId??``}:${e.event}:${i}:${t.length}:${Pe(t)}`:null}function ze(e,t){for(let n of t){let r=Re(n,Le(n.update));r&&u(e,r,Math.max(Fe,t.length))}}function Be(e,t,n){let r=Re(t,n);return r?e.has(r)?!0:(u(e,r,Fe),!1):!1}function Ve(e,t){let n=e.trim(),r=t.trim();return r.length<80?!1:n===r}var He=80,Ue=.7,We=.78,Ge=32,Ke=8;function qe(e){return e.replace(/\s+/g,` `).trim()}function Je(e){return e.split(/\r?\n/).map(e=>e.replace(/\s+/g,` `).trim()).filter(e=>e.length>=4)}function Ye(e,t){if(e.length===0)return 0;let n=0;for(let r of e)t.has(r)&&(n+=1);return n/e.length}function Xe(e){let t=qe(e);if(t.length<Ge)return[];let n=[];for(let e=0;e<=t.length-Ge;e+=Ke)n.push(t.slice(e,e+Ge));return n}function Ze(e,t){let n=qe(e),r=qe(t);if(n.length<He||r.length<He)return!1;if(r.includes(n))return!0;let i=Je(e),a=new Set(Je(t));if(i.length>=4&&Ye(i,a)>=Ue)return!0;let o=Xe(n);return o.length<3?!1:Ye(o,new Set(Xe(r)))>=We}function Qe(e,t){return!e||!t?`append`:e===t?`drop`:t.startsWith(e)?`replace`:e.startsWith(t)?`drop`:t.length>=e.length&&Ze(e,t)?`replace`:e.length>t.length&&Ze(t,e)?`drop`:`append`}function $e(e){let t=e.toLowerCase();return t===`failed`||t===`error`||t===`errored`?`failed`:t===`completed`||t===`done`||t===`success`?`done`:`running`}function et(e){let t=[];for(let n of e){let e=n.update??{};if(n.event===`code_user_message_chunk`){let n=e.content,r=String(n?.text??e.text??``),i=$(e);r&&t.push({role:`user`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_agent_message_chunk`){let n=e.content,r=String(n?.text??e.text??``);if(!r)continue;let i=$(e),a=t[t.length-1];if(a?.role===`assistant`){let e=Qe(a.text,r);if(a.messageId&&i&&a.messageId!==i){if(e===`replace`){a.text=r,a.messageId=i;continue}t.push({role:`assistant`,text:r,messageId:i});continue}if(e===`drop`)continue;a.text=e===`replace`?r:a.text+r,i&&!a.messageId&&(a.messageId=i)}else t.push({role:`assistant`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_agent_thought_chunk`){let n=e.content,r=String(n?.text??e.text??``);if(!r)continue;let i=$(e),a=t[t.length-1];a?.role===`thinking`&&(!a.messageId||!i||a.messageId===i)?(a.text+=r,i&&!a.messageId&&(a.messageId=i)):t.push({role:`thinking`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_tool_call`){let n=String(e.title??e.toolName??`tool`),r=String(e.toolCallId??``),i=String(e.status??`pending`),a=te(e);t.push({role:`tool`,text:n,toolName:n,toolCallId:r,toolContent:a,toolStatus:$e(i)})}else if(n.event===`code_tool_call_update`){let n=String(e.toolCallId??``),r=String(e.status??``),i=te(e),a=_(t,n);if(a<0)continue;let o={...t[a]};r&&(o.toolStatus=$e(r)),i.length>0&&(o.toolContent=i),t[a]=o}}return t}function tt(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function nt(e,t,n){let r=(0,f.useRef)(null),i=(0,f.useMemo)(()=>{let t=e[e.length-1];if(!t)return`empty`;let n=t.toolContent?.reduce((e,t)=>{let n=t;return e+(n.text?.length??0)+(n.diff?.length??0)+(n.output?.length??0)},0)??0;return`${e.length}:${t.role}:${t.text.length}:${t.toolOutput?.length??0}:${n}:${t.toolStatus??``}`},[e]),a=(0,f.useRef)(null),o=(0,f.useRef)(null);(0,f.useEffect)(()=>()=>{a.current!==null&&cancelAnimationFrame(a.current),o.current!==null&&window.clearTimeout(o.current)},[]);let s=(0,f.useCallback)((e=`smooth`)=>{a.current===null&&(a.current=window.requestAnimationFrame(()=>{a.current=null;let t=r.current;t&&(t.scrollTo({top:t.scrollHeight,behavior:e}),o.current!==null&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>{o.current=null;let e=r.current;e&&e.scrollTo({top:e.scrollHeight,behavior:`auto`})},80))}))},[]),c=(0,f.useCallback)((e,t=`smooth`)=>{window.requestAnimationFrame(()=>{let n=r.current;n&&n.scrollBy({top:e,behavior:t})})},[]),l=(0,f.useCallback)((e=`smooth`)=>{window.requestAnimationFrame(()=>{let t=r.current;t&&t.scrollTo({top:0,behavior:e})})},[]);return(0,f.useEffect)(()=>{s(e.length>1?`smooth`:`auto`)},[i,e.length,t,s]),(0,f.useEffect)(()=>{let e=e=>{if(e.defaultPrevented||n||e.metaKey||e.ctrlKey||e.altKey||tt(e.target))return;let t=r.current;if(!t)return;let i=e.key.toLowerCase(),a=Math.max(160,Math.floor(t.clientHeight*.78));i===`d`||i===`j`||e.key===`PageDown`?(e.preventDefault(),c(a)):i===`u`||i===`k`||e.key===`PageUp`?(e.preventDefault(),c(-a)):e.key===`End`?(e.preventDefault(),s(`smooth`)):e.key===`Home`&&(e.preventDefault(),l(`smooth`))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n,c,s,l]),{transcriptRef:r,scrollTranscriptToBottom:s}}function rt(e){return typeof window<`u`&&window.location.port===String(e)?`${window.location.origin}/api/events`:`http://127.0.0.1:${e}/api/events`}function it({port:e,sessionId:t,sessionIdRef:n,onEvent:r,onTransport:i}){let a=(0,f.useRef)(r);a.current=r;let o=(0,f.useRef)(i);o.current=i;let s=(0,f.useRef)(t);s.current=t,(0,f.useEffect)(()=>{if(!e)return;let t=new EventSource(rt(e));return t.onopen=()=>{o.current?.(`connected`)},t.onmessage=e=>{try{let t={...JSON.parse(e.data),sseEventId:e.lastEventId||void 0};if(t.topic!==`jwc`)return;let r=t.event===`code_child_exit`,i=n?.current??s.current;if(!i&&!r||!r&&t.sessionId&&t.sessionId!==i)return;a.current(t)}catch{}},t.onerror=()=>{o.current?.(t.readyState===EventSource.CLOSED?`disconnected`:`reconnecting`)},()=>t.close()},[e])}function at({port:e,workingDir:t,onWorkingDirChange:n,onOpenLocalFile:r}){let i=(0,f.useMemo)(()=>m(e),[e]),[a,o]=(0,f.useState)(t),[s,c]=(0,f.useState)(null),[l,u]=(0,f.useState)(!1),[y,b]=(0,f.useState)(``),[x,S]=(0,f.useState)(!1),[C,w]=(0,f.useState)([]),[T,E]=(0,f.useState)([]),[D,O]=(0,f.useState)(Ae),[k,A]=(0,f.useState)(!1),[j,M]=(0,f.useState)(null),[ee,N]=(0,f.useState)(``),[P,F]=(0,f.useState)(``),[I,L]=(0,f.useState)({}),[ne,R]=(0,f.useState)([]),[z,B]=(0,f.useState)(`anthropic`),[V,ie]=(0,f.useState)(`claude-sonnet-4-6`),[ae,oe]=(0,f.useState)(`high`),[H,se]=(0,f.useState)(`always-allow`),[U,ce]=(0,f.useState)(ke),[le,W]=(0,f.useState)(null),[ue,de]=(0,f.useState)(null),[fe,G]=(0,f.useState)(null),[pe,K]=(0,f.useState)(null),[me,he]=(0,f.useState)(`connected`),[ge,_e]=(0,f.useState)(null),q=(0,f.useRef)(null),ve=(0,f.useRef)(!1),J=(0,f.useRef)(null),Y=(0,f.useRef)(null),X=(0,f.useRef)(new Set),Z=(0,f.useRef)(new Set),ye=(0,f.useMemo)(()=>V?v(z,V):``,[z,V]),{transcriptRef:be,scrollTranscriptToBottom:xe}=nt(C,x,!!j);(0,f.useEffect)(()=>{q.current||s||o(t)},[s,t]);let Se=(0,f.useCallback)(e=>{q.current||s||l||(o(e??``),n?.(e))},[s,n,l]),Ce=(0,f.useCallback)(async()=>{let e=d();if(e?.folder?.pickFolder){let t=await e.folder.pickFolder();if(t.ok&&t.path)return t.path;if(t.error&&t.error!==`cancelled`)throw Error(t.error);return null}let t=await i.pickWorkspace();return t.ok&&t.path?t.path:null},[i]),Q=(0,f.useCallback)(e=>{ce(e);let t=e.providers.find(t=>t.id===e.defaultProvider)??e.providers[0],n=t?.models.includes(e.defaultModel)?e.defaultModel:t?.models[0]??``;B(t?.id??`anthropic`),ie(n);let r=t?.efforts??[];r.length>0&&oe(r.includes(`high`)?`high`:r[0]??``)},[]);(0,f.useEffect)(()=>{q.current=s},[s]),(0,f.useEffect)(()=>{if(typeof document>`u`){_e(null);return}return _e(document.getElementById(`code-session-sidebar-host`)),()=>_e(null)},[]);let we=(0,f.useCallback)(async()=>{Q(await i.listModelOptions())},[Q,i]),Te=(0,f.useCallback)(async()=>{W(await i.listModelAssignments())},[i]);(0,f.useEffect)(()=>{let e=!1;return(async()=>{try{let[t,n,r]=await Promise.all([i.listModelOptions(),i.listModelAssignments(),i.listModelPresets()]);if(e)return;Q(t),W(n),de(r)}catch(t){e||(ce({...ke,error:t instanceof Error?t.message:String(t)}),W(null),de(null))}})(),()=>{e=!0}},[Q,i]),(0,f.useEffect)(()=>{if(!a){G(null);return}let e=!1;return i.getGitInfo(a).then(t=>{e||G(t)},()=>{e||G(null)}),()=>{e=!0}},[i,a]),(0,f.useEffect)(()=>{if(ve.current){ve.current=!1;return}c(null),q.current=null,w([]),E([]),R([]),F(``),L({}),S(!1),K(null),Z.current=new Set},[a]),it({port:e,sessionId:s,sessionIdRef:q,onEvent:(0,f.useCallback)(e=>{let t=e.update??{},n=e.event;if(!(Y.current&&e.sessionId===Y.current&&n!==`code_child_exit`))if(n===`code_agent_message_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{if(X.current.has(n)&&e[e.length-1]?.role===`user`)return X.current.delete(n),e;let t=e[e.length-1];if(t?.role===`assistant`&&Ve(t.text,n))return e;if(t?.role===`assistant`){let i=Qe(t.text,n);if(t.messageId&&r&&t.messageId!==r)return i===`replace`?[...e.slice(0,-1),{...t,text:n,messageId:r}]:[...e,{role:`assistant`,text:n,messageId:r}];if(i===`drop`)return e;let a=i===`replace`?n:t.text+n;return[...e.slice(0,-1),{...t,text:a,...r&&!t.messageId?{messageId:r}:{}}]}return[...e,{role:`assistant`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_user_message_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{if(J.current===n){let t=-1;for(let r=e.length-1;r>=0;--r){let i=e[r];if(i?.role===`user`&&i.text===n&&i.transient===`pending-user-echo`){t=r;break}}if(t>=0){J.current=null;let i=[...e];return i[t]={role:`user`,text:n,...r?{messageId:r}:{}},i}}return[...e,{role:`user`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_agent_thought_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{let t=e[e.length-1];return t?.role===`thinking`&&(!t.messageId||!r||t.messageId===r)?[...e.slice(0,-1),{...t,text:t.text+n,...r&&!t.messageId?{messageId:r}:{}}]:[...e,{role:`thinking`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_tool_call`){let e=String(t.title??t.toolName??`tool`),n=String(t.toolCallId??``),r=String(t.status??`pending`),i=te(t);w(t=>[...t,{role:`tool`,text:e,toolName:e,toolCallId:n,toolContent:i,toolStatus:$e(r)}])}else if(n===`code_tool_call_update`){let e=String(t.toolCallId??``),n=String(t.status??``),r=te(t);w(t=>{let i=_(t,e);if(i<0)return t;let a=[...t],o={...a[i]};return n&&(o.toolStatus=$e(n)),r.length>0&&(o.toolContent=r),a[i]=o,a})}else if(n===`code_permission_request`){let t=String(e.permissionId??``),n=e.toolCall??{},r=e.options??[];t&&Me(i,H,{permissionId:t,toolCall:n,options:r},{appendMessage:e=>w(t=>[...t,e]),enqueuePermission:e=>{E(t=>[...t,e]),xe(`smooth`)}})}else if(n===`code_session_info_update`){let e=t.title;typeof e==`string`&&F(e)}else if(n===`code_usage_update`){let e={};typeof t.contextTokens==`number`&&(e.contextTokens=t.contextTokens),typeof t.contextLimit==`number`&&(e.contextLimit=t.contextLimit),typeof t.totalCost==`number`&&(e.cost=t.totalCost),L(e)}else if(n===`code_plan`)R((t.entries??[]).filter(e=>e.title).map(e=>({title:String(e.title),status:String(e.status??`pending`)}))),xe(`smooth`);else if(n===`code_available_commands_update`)O(je(re(t.availableCommands)));else if(n===`code_child_exit`){let t=e.code===null||e.code===void 0?`unknown`:String(e.code),n=`JWC ACP child exited (code ${t}). Active Code sessions were closed. Send the prompt again to start a fresh session, or load a stored session from the sidebar.`;q.current=null,c(null),S(!1),E([]),K({code:t,message:n}),w(e=>[...e,{role:`assistant`,text:n}])}else n===`code_turn_done`?S(!1):n===`code_session_error`&&(w(t=>[...t,{role:`assistant`,text:`Error: ${e.reason??`unknown`}`}]),S(!1))},[i,H,xe]),onTransport:he});let Ee=(0,f.useCallback)(async()=>{let e=y.trim();if(!(!e||x)){Y.current=null,S(!0),u(!0),K(null),J.current=e,w(t=>[...t,{role:`user`,text:e,transient:`pending-user-echo`}]),b(``);try{let t=s;if(!t){let e=a||`/tmp`;t=(await i.createSession(e,ye||void 0)).sessionId,q.current=t,c(t)}await i.sendPrompt(t,e)}catch(e){J.current=null,w(t=>[...t,{role:`assistant`,text:`Error: ${e instanceof Error?e.message:String(e)}`}]),S(!1)}}},[y,x,s,i,a,ye]),De=(0,f.useCallback)(e=>{b(e),A(e===`/`||e.startsWith(`/`)&&!e.includes(` `))},[]),Pe=(0,f.useCallback)(e=>{if(!e.disabledReason){if(e.actionType===`popup`&&e.popupKind){N(``),M({kind:e.popupKind,command:e}),A(!1);return}b(`${e.displayName} `),A(!1)}},[]),Fe=(0,f.useCallback)(async(e,t)=>{await Ne(i,H,e,t,e=>w(t=>[...t,e]))&&E(t=>t.filter(t=>t.permissionId!==e.permissionId))},[i,H]),Ie=(0,f.useCallback)(async(e,t,n)=>{N(``),B(e),ie(t);let r=n?.closePopup??!0,a=n?.requireActiveSession??!0;if(!s){a&&N(`Start or load a Code session before applying a live model.`);return}try{await i.setSessionModel(s,v(e,t)),r&&M(null)}catch(e){N(e instanceof Error?e.message:String(e))}},[s,i]),Re=(0,f.useCallback)(async(e,t)=>{N(``);try{Q(await i.setDefaultModel(v(e,t))),Te()}catch(e){N(e instanceof Error?e.message:String(e))}},[Q,i,Te]),He=(0,f.useCallback)(async(e,t,n,r)=>{N(``);try{W(await i.setModelAssignment(e,{provider:t,model:n,...r===void 0?{}:{thinkingLevel:r}}))}catch(e){N(e instanceof Error?e.message:String(e))}},[i]),Ue=(0,f.useCallback)(async e=>{N(``);try{W(await i.clearModelAssignment(e))}catch(e){N(e instanceof Error?e.message:String(e))}},[i]),We=U.providers.find(e=>e.id===z)??U.providers[0],Ge=U.providers.map(e=>e.id),Ke=We?.models??[],qe=We?.efforts??[],Je=e=>{let t=et(e.replayEvents??[]);Z.current=new Set,ze(Z.current,e.replayEvents??[]),X.current=new Set(t.filter(e=>e.role===`assistant`&&e.text).map(e=>e.text)),q.current=e.sessionId,c(e.sessionId),e.cwd!==a&&(ve.current=!0,o(e.cwd)),w(t),E([]),R([]),F(e.title?.trim()||t.find(e=>e.role===`user`)?.text.split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()||``),L({}),S(!1),K(null)};if(!e)return(0,h.jsx)(`div`,{className:`code-canvas`,children:(0,h.jsx)(`div`,{className:`code-transcript-empty`,children:(0,h.jsx)(`p`,{children:`Server not available.`})})});let Ye=(0,h.jsx)(g,{client:i,activeSessionId:s,workingDir:a,onSelectSession:Je,onLoadSession:(e,t)=>{(async()=>{Y.current=e,q.current=e,c(e),J.current=null,X.current=new Set,Z.current=new Set,w([]),R([]),F(``),S(!1);try{let n=await i.loadSession(e,t);if(q.current!==e)return;n.title&&F(n.title);let r=et(n.replayEvents??[]);Z.current=new Set,ze(Z.current,n.replayEvents??[]),X.current=new Set(r.filter(e=>e.role===`assistant`&&e.text).map(e=>e.text)),w(r),S(!1)}catch(t){q.current===e&&(q.current=null,c(null)),w(e=>[...e,{role:`assistant`,text:`Failed to load session: ${t instanceof Error?t.message:String(t)}`}])}finally{Y.current===e&&(Y.current=null)}})()},onNewSession:()=>{q.current=null,Y.current=null,J.current=null,X.current=new Set,Z.current=new Set,c(null),w([]),R([]),F(``),S(!1),u(!1)}}),Xe=e=>{B(e),ie(U.providers.find(t=>t.id===e)?.models[0]??``)},Ze=(0,h.jsx)(Oe,{activePopup:j,activeSessionId:s,availableCommands:D,codeWorkingDir:a,currentEffortOptions:qe,currentModelOptions:Ke,disabled:x,effort:ae,gitInfo:fe,childRecovery:pe,transportState:me,inputText:y,messages:C,model:V,modelAssignments:le,modelOptions:U,modelPresets:ue,permissionMode:H,permissions:T,planEntries:ne,error:ee,provider:z,providerOptions:Ge,sending:x,sessionTitle:P,showCommands:k,transcriptRef:be,usage:I,onClearModelAssignment:Ue,onClosePopup:()=>{N(``),M(null)},onCommandSelect:Pe,onEffortChange:e=>{oe(e),s&&i.setSessionConfig(s,`thinking`,e)},onFooterProviderChange:e=>{Xe(e);let t=U.providers.find(t=>t.id===e),n=t?.models[0]??``;oe(t?.efforts.includes(`high`)?`high`:t?.efforts[0]??``),n&&Ie(e,n,{closePopup:!1,requireActiveSession:!1})},onInputChange:De,onModelChange:e=>{Ie(z,e,{closePopup:!1,requireActiveSession:!1})},onPermissionAnswer:Fe,onPermissionModeChange:se,onProviderChange:Xe,onRefreshProviders:()=>{we()},onSetDefaultModel:Re,onSetModelAssignment:He,onShowCommandsChange:A,onSubmit:()=>{Ee()},onUseModel:Ie,onUseForNewSessions:(e,t)=>{Ie(e,t,{requireActiveSession:!1,closePopup:!1}),M(null)},onWorkingDirChange:Se,onOpenLocalFile:r,workspaceFrozen:l,onPickWorkingDir:Ce});return ge?(0,h.jsxs)(h.Fragment,{children:[(0,p.createPortal)((0,h.jsx)(`div`,{className:`code-manager-session-navigator-content`,children:Ye}),ge),(0,h.jsx)(`div`,{className:`code-canvas code-canvas-workbench`,children:Ze})]}):(0,h.jsxs)(`div`,{className:`code-canvas`,children:[(0,h.jsx)(`div`,{className:`code-canvas-sidebar`,children:Ye}),Ze]})}export{at as CodeCanvas};
3
+ `):null}function ee(e){if(typeof e==`string`)return e;if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=M(t.content);if(n)return n;let r=t.details;if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r.displayContent;if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.text;if(typeof t==`string`&&t)return t}}return null}function N(e){return ee(e)??j(e)}function P(e){if(typeof e==`string`)return{type:`text`,text:e};if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=typeof t.type==`string`?t.type.toLowerCase():``,r=typeof t.label==`string`?t.label:void 0;if(n===`diff`&&typeof t.diff==`string`)return{type:`diff`,diff:t.diff,...r?{label:r}:{}};if(n===`error`)return{type:`error`,text:j(t.text??t.error??t.message??t),...r?{label:r}:{}};if(n===`args`||n===`arguments`||n===`input`)return{type:`args`,json:t.json??t.args??t.arguments??t.input??t,...r?{label:r}:{}};if(n===`output`)return{type:`output`,text:N(t.text??t.output??t),...r?{label:r}:{}};if(n===`json`)return{type:`json`,json:t.json??t.value??t,...r?{label:r}:{}};if(typeof t.diff==`string`)return{type:`diff`,diff:t.diff,...r?{label:r}:{}};if(typeof t.text==`string`)return{type:`text`,text:t.text,...r?{label:r}:{}};let i=ee(t);return i?{type:`text`,text:i,...r?{label:r}:{}}:{type:`json`,json:t,...r?{label:r}:{}}}function F(e,t,n,r){r==null||r===``||(t===`args`||t===`json`?e.push({type:t,label:n,json:r}):e.push({type:t,label:n,text:t===`output`?N(r):j(r)}))}function te(e){let t=[],n=e.content;if(Array.isArray(n))for(let e of n){let n=P(e);n&&t.push(n)}else{let e=P(n);e&&t.push(e)}return F(t,`args`,`Args`,e.args??e.arguments??e.input??e.rawInput),F(t,`output`,`Output`,e.rawOutput??e.output),F(t,`error`,`Error`,e.error??e.errorMessage??e.reason),t}var I={settings:{category:`settings`,popupKind:`settings`},theme:{category:`settings`,popupKind:`settings`},identity:{category:`settings`,popupKind:`settings`},"identity-auto":{category:`settings`,popupKind:`settings`},model:{category:`model`,popupKind:`model`},provider:{category:`provider`,popupKind:`provider`},login:{category:`provider`,popupKind:`provider`}},L={session:`session`,orchestrate:`workflow`,pabcd:`workflow`,goal:`workflow`,mcp:`utility`,move:`utility`,compact:`utility`,dump:`utility`,help:`utility`};function ne(e){return e.trim().replace(/^\/+/,``)}function R(e,t){let n=typeof e.source==`string`?e.source:``,r=typeof e.path==`string`?e.path:``;return n.includes(`skill`)||t.includes(`:`)?`jwc-skill`:n.includes(`custom`)?`jwc-custom`:n.includes(`file`)||r?`jwc-file`:I[t]||L[t]?`jwc-builtin`:`unknown`}function z(e){let t=e.input;if(!t||typeof t!=`object`)return;let n=t.hint;return typeof n==`string`&&n.trim()?n:void 0}function B(e){if(!e||typeof e!=`object`)return null;let t=e,n=ne(String(t.name??``));if(!n)return null;let r=I[n],i=r?.category??L[n]??`unknown`,a=R(t,n),o=t.supported!==!1&&t.disabled!==!0?r?`popup`:i===`unknown`?`pass-through`:`insert`:`unsupported`,s=typeof t.description==`string`&&t.description.trim()?t.description:void 0,c=z(t),l={name:n,displayName:`/${n}`,category:i,actionType:o,source:a,raw:t};return s&&(l.description=s),c&&(l.inputHint=c),r&&(l.popupKind=r.popupKind),o===`unsupported`&&(l.disabledReason=typeof t.disabledReason==`string`&&t.disabledReason.trim()?t.disabledReason:`Unsupported in Code mode`),l}function re(e){let t=Array.isArray(e)?e:[],n=new Set,r=[];for(let e of t){let t=B(e);!t||n.has(t.name)||(n.add(t.name),r.push(t))}return r}function V(e){return[e.name,e.displayName,e.description??``,e.inputHint??``,e.category,e.source].join(` `).toLowerCase()}function ie(e,t){let n=ne(t.split(/\s+/)[0]??``).toLowerCase();if(!n)return e;let r=[],i=[];for(let t of e)t.name.toLowerCase().startsWith(n)?r.push(t):V(t).includes(n)&&i.push(t);return[...r,...i]}function ae({value:e,disabled:t,onChange:n}){let r=S.find(t=>t.value===e)??S[0];return(0,h.jsxs)(`div`,{className:`code-permission-mode-field`,children:[(0,h.jsxs)(`div`,{className:`code-permission-mode-label`,children:[(0,h.jsx)(`span`,{children:`Permission mode`}),(0,h.jsx)(`strong`,{children:`Default: Always allow`})]}),(0,h.jsx)(`div`,{className:`code-permission-mode-list`,role:`listbox`,"aria-label":`Permission mode`,children:S.map(r=>(0,h.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":r.value===e,disabled:t,className:`code-permission-mode-option is-${r.tone}${r.value===e?` is-selected`:``}`,title:r.detail,onClick:()=>n(r.value),children:[(0,h.jsxs)(`span`,{children:[(0,h.jsx)(`strong`,{children:r.label}),(0,h.jsx)(`small`,{children:r.detail})]}),r.value===e&&(0,h.jsx)(`em`,{"aria-hidden":`true`,children:`✓`})]},r.value))}),(0,h.jsx)(`p`,{className:`code-permission-mode-note is-${r?.tone??`ask`}`,children:`Automatic modes answer with JWC persistent options and write a transcript audit row.`})]})}function oe(e){return e===`provider`?`Provider`:e===`model`?`Model`:e===`permission`?`Permissions`:e===`session`?`Session`:`Settings`}function H(e){return e===`jwc-cache`?`JWC cache`:`static fallback`}function se({popupKind:e,command:t,modelOptions:n,provider:r,model:i,modelAssignments:a,modelPresets:o,permissionMode:s,disabled:c,activeSessionId:l,error:u,onClose:d,onRefreshProviders:p,onProviderChange:m,onUseModel:g,onUseForNewSessions:_,onSetDefaultModel:v,onSetModelAssignment:y,onClearModelAssignment:b,onPermissionModeChange:x}){let S=(0,f.useRef)(null),C=(0,f.useRef)(null),w=n.providers.find(e=>e.id===r)??n.providers[0],[T,E]=(0,f.useState)(``),[D,O]=(0,f.useState)(`models`),[k,A]=(0,f.useState)(r),[j,M]=(0,f.useState)(i),[ee,N]=(0,f.useState)({}),P=n.providers.find(e=>e.id===k)??w,F=T.trim().toLowerCase(),te=(0,f.useMemo)(()=>n.providers.filter(e=>F?e.id.toLowerCase().includes(F)||e.models.some(e=>e.toLowerCase().includes(F)):!0),[n.providers,F]),I=(0,f.useMemo)(()=>{let e=P?.models??[];return F?e.filter(e=>e.toLowerCase().includes(F)):e},[P?.models,F]),L=oe(e),ne=(0,f.useMemo)(()=>{let e=n.providers.length;return`${e} authenticated provider${e===1?``:`s`}`},[n.providers.length]),R=!!(l&&k&&j&&!c),z=!!(k&&j&&!c),B=(0,f.useMemo)(()=>[`inherit`,...P?.efforts??[]].map(e=>e===`min`?`minimal`:e).filter((e,t,n)=>e&&n.indexOf(e)===t).map(e=>({value:e,label:e===`inherit`?`inherit`:e===`minimal`?`min`:e})),[P?.efforts]);return(0,f.useEffect)(()=>{S.current?.focus()},[e,t.name]),(0,f.useEffect)(()=>{let e=document.activeElement;return()=>{e?.focus?.()}},[]),(0,f.useEffect)(()=>{e===`model`&&(E(``),A(r),M(i))},[i,e,r]),(0,f.useEffect)(()=>{if(e!==`model`)return;let t=P?.models??[];t.length>0&&!t.includes(j)&&M(t[0]??``)},[j,P?.models,e]),(0,f.useEffect)(()=>{if(e!==`model`||!a)return;let t={};for(let e of a.roles){let n=e.thinkingLevel===`min`?`minimal`:e.thinkingLevel;t[e.role]=n||`inherit`}N(t)},[a,e]),(0,f.useEffect)(()=>{let e=e=>{if(e.key===`Escape`){e.preventDefault(),d();return}if(e.key===`Tab`&&C.current){let t=C.current.querySelectorAll(`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`),n=t[0],r=t[t.length-1];if(!n||!r)return;let i=document.activeElement;e.shiftKey&&i===n?(e.preventDefault(),r.focus()):!e.shiftKey&&i===r&&(e.preventDefault(),n.focus())}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[d]),(0,h.jsx)(`div`,{className:`code-popup-backdrop`,role:`presentation`,onMouseDown:e=>{e.target===e.currentTarget&&d()},children:(0,h.jsxs)(`section`,{ref:C,className:`code-popup`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`code-command-popup-title`,children:[(0,h.jsxs)(`header`,{className:`code-popup-header`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`p`,{className:`code-popup-command`,children:t.displayName}),(0,h.jsx)(`h2`,{id:`code-command-popup-title`,children:L})]}),(0,h.jsx)(`button`,{ref:S,type:`button`,className:`code-popup-close`,onClick:d,"aria-label":`Close popup`,children:`x`})]}),e===`provider`&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[(0,h.jsxs)(`div`,{className:`code-popup-section-head`,children:[(0,h.jsx)(`span`,{children:ne}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:c,onClick:p,children:`Refresh`})]}),n.degraded&&(0,h.jsx)(`p`,{className:`code-popup-warning`,children:n.error??`Provider discovery is degraded.`}),u&&(0,h.jsx)(`p`,{className:`code-popup-error`,children:u}),(0,h.jsx)(`div`,{className:`code-provider-list`,role:`list`,children:n.providers.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-provider-row${e.id===r?` is-selected`:``}`,onClick:()=>m(e.id),disabled:c,children:[(0,h.jsx)(`span`,{className:`code-provider-name`,children:e.id}),(0,h.jsxs)(`span`,{className:`code-provider-meta`,children:[e.models.length,` models · `,H(e.modelSource)]})]},e.id))}),(0,h.jsxs)(`div`,{className:`code-popup-placeholder-actions`,children:[(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Add provider`}),(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Login`}),(0,h.jsx)(`span`,{children:`Provider add/login execution is next slice.`})]})]}),(e===`settings`||e===`permission`)&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[(0,h.jsx)(ae,{value:s,disabled:!!c,onChange:x}),e===`settings`&&(0,h.jsxs)(`div`,{className:`code-popup-summary`,children:[(0,h.jsx)(`span`,{children:`Provider`}),(0,h.jsx)(`strong`,{children:r||`-`}),(0,h.jsx)(`span`,{children:`Model`}),(0,h.jsx)(`strong`,{children:i||`-`})]})]}),e===`model`&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[u&&(0,h.jsx)(`p`,{className:`code-popup-error`,children:u}),(0,h.jsx)(`div`,{className:`code-model-tablist`,role:`tablist`,"aria-label":`Model settings tabs`,children:[`models`,`roles`,`profiles`].map(e=>(0,h.jsx)(`button`,{type:`button`,role:`tab`,id:`code-model-tab-${e}`,"aria-selected":D===e,"aria-controls":`code-model-panel-${e}`,tabIndex:D===e?0:-1,className:`code-model-tab${D===e?` is-active`:``}`,onClick:()=>O(e),onKeyDown:e=>{if(e.key!==`ArrowRight`&&e.key!==`ArrowLeft`)return;e.preventDefault();let t=[`models`,`roles`,`profiles`],n=e.key===`ArrowRight`?1:t.length-1;O(t[(t.indexOf(D)+n)%t.length]??`models`)},children:e===`models`?`Models`:e===`roles`?`Roles`:`Profiles`},e))}),D===`models`&&(0,h.jsxs)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-models`,"aria-labelledby":`code-model-tab-models`,children:[(0,h.jsxs)(`label`,{className:`code-popup-field`,children:[(0,h.jsx)(`span`,{children:`Search models`}),(0,h.jsx)(`input`,{type:`search`,className:`code-model-search`,placeholder:`Search provider or model`,value:T,onChange:e=>E(e.target.value),disabled:c})]}),n.usageOrder&&n.usageOrder.length>0&&(0,h.jsxs)(`div`,{className:`code-model-mru-strip`,"aria-label":`Recently used models`,children:[(0,h.jsx)(`span`,{children:`Recently used`}),n.usageOrder.slice(0,3).map(e=>(0,h.jsx)(`strong`,{children:e},e))]}),(0,h.jsxs)(`div`,{className:`code-model-layout`,children:[(0,h.jsx)(`div`,{className:`code-model-providers`,role:`list`,"aria-label":`Providers`,children:te.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-model-provider${e.id===k?` is-selected`:``}`,onClick:()=>{A(e.id),M(e.models[0]??``)},disabled:c,children:[(0,h.jsx)(`span`,{children:e.id}),(0,h.jsx)(`small`,{children:e.models.length})]},e.id))}),(0,h.jsxs)(`div`,{className:`code-model-list`,role:`list`,"aria-label":`Models`,children:[(0,h.jsxs)(`div`,{className:`code-model-list-head`,children:[(0,h.jsx)(`strong`,{children:P?.id??`No provider`}),(0,h.jsxs)(`span`,{children:[I.length,` models · `,H(P?.modelSource)]})]}),I.length===0?(0,h.jsx)(`p`,{className:`code-popup-note`,children:`No models match this search.`}):I.map(e=>{let t=k===r&&e===i,n=e===j;return(0,h.jsxs)(`button`,{type:`button`,className:`code-model-row${t?` is-active`:``}${n?` is-draft`:``}`,onClick:()=>M(e),disabled:c,children:[(0,h.jsx)(`span`,{children:e}),(0,h.jsx)(`small`,{children:t?`Active`:n?`Selected`:`Available`})]},e)})]})]}),(0,h.jsxs)(`div`,{className:`code-popup-action-row`,children:[(0,h.jsxs)(`div`,{className:`code-popup-summary code-popup-summary-compact`,children:[(0,h.jsx)(`span`,{children:`Active`}),(0,h.jsxs)(`strong`,{children:[r||`-`,` / `,i||`-`]}),(0,h.jsx)(`span`,{children:`Selected`}),(0,h.jsxs)(`strong`,{children:[k||`-`,` / `,j||`-`]}),(0,h.jsx)(`span`,{children:`Default`}),(0,h.jsxs)(`strong`,{children:[n.defaultProvider||`-`,` / `,n.defaultModel||`-`]})]}),(0,h.jsxs)(`div`,{className:`code-popup-action-stack`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-popup-primary`,disabled:!R,onClick:()=>{g(k,j)},children:`Use now`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!z,onClick:()=>{_(k,j)},children:`Use for new sessions`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!z,onClick:()=>{v(k,j)},children:`Set default`})]})]}),!l&&(0,h.jsx)(`p`,{className:`code-popup-note`,children:`Start or load a Code session to apply a live model. Use “Use for new sessions” to set the next session’s model.`})]}),D===`roles`&&(0,h.jsx)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-roles`,"aria-labelledby":`code-model-tab-roles`,children:(0,h.jsxs)(`div`,{className:`code-role-assignment-panel`,"aria-label":`Model role assignments`,children:[(0,h.jsxs)(`div`,{className:`code-role-assignment-head`,children:[(0,h.jsx)(`strong`,{children:`Role assignments`}),(0,h.jsx)(`span`,{children:a?.activeModel.note??`Role assignments do not mutate the active Code session model.`})]}),(0,h.jsx)(`div`,{className:`code-role-assignment-grid`,role:`list`,children:(a?.roles??[]).map(e=>{let t=e.modelId?e.modelId:`Unset`,n=ee[e.role]??(e.thinkingLevel===`min`?`minimal`:e.thinkingLevel)??`inherit`,r=!!(k&&j&&!c),i=!!(e.modelId&&!c);return(0,h.jsxs)(`article`,{className:`code-role-card`,role:`listitem`,children:[(0,h.jsxs)(`div`,{className:`code-role-card-head`,children:[(0,h.jsx)(`span`,{className:`code-role-tag`,children:e.tag}),(0,h.jsx)(`strong`,{children:e.name})]}),(0,h.jsx)(`p`,{className:`code-role-path`,children:e.settingsPath}),(0,h.jsx)(`p`,{className:`code-role-model`,title:t,children:t}),(0,h.jsxs)(`label`,{className:`code-role-thinking`,children:[(0,h.jsx)(`span`,{children:`Thinking`}),(0,h.jsx)(`select`,{value:n,disabled:c,onChange:t=>{let n=t.target.value;N(t=>({...t,[e.role]:n}))},children:B.map(e=>(0,h.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,h.jsxs)(`div`,{className:`code-role-actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!r,onClick:()=>{y(e.role,k,j,n===`inherit`?null:n)},children:`Assign selected`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!i,onClick:()=>{b(e.role)},children:`Clear`})]})]},e.role)})}),!a&&(0,h.jsx)(`p`,{className:`code-popup-note`,children:`Loading role assignments.`})]})}),D===`profiles`&&(0,h.jsx)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-profiles`,"aria-labelledby":`code-model-tab-profiles`,children:(0,h.jsxs)(`div`,{className:`code-model-preset-panel`,"aria-label":`Model profiles and presets`,children:[(0,h.jsxs)(`div`,{className:`code-role-assignment-head`,children:[(0,h.jsx)(`strong`,{children:`Profiles and presets`}),(0,h.jsx)(`span`,{children:o?.applyReason??`Loading JWC profile state.`})]}),(0,h.jsxs)(`div`,{className:`code-model-preset-summary`,children:[(0,h.jsx)(`span`,{children:`Startup profile`}),(0,h.jsx)(`strong`,{children:o?.defaultProfile??`Unset`}),(0,h.jsx)(`span`,{children:`Task presets`}),(0,h.jsx)(`strong`,{children:o?o.taskPresets.length:`-`}),(0,h.jsx)(`span`,{children:`Built-in profiles`}),(0,h.jsx)(`strong`,{children:o?o.builtinProfiles.length:`-`})]}),o&&o.taskPresets.length>0&&(0,h.jsx)(`div`,{className:`code-model-preset-list`,role:`list`,"aria-label":`Task model presets`,children:o.taskPresets.slice(0,4).map(e=>(0,h.jsxs)(`div`,{className:`code-model-preset-row`,role:`listitem`,children:[(0,h.jsx)(`strong`,{children:e.name}),(0,h.jsx)(`span`,{children:e.best?`best ${e.best}`:`best unset`}),(0,h.jsx)(`span`,{children:e.cheap?`cheap ${e.cheap}`:`cheap unset`})]},e.name))}),o&&(0,h.jsx)(`div`,{className:`code-model-profile-chips`,"aria-label":`Built-in profile candidates`,children:o.builtinProfiles.slice(0,8).map(e=>(0,h.jsx)(`span`,{children:e.name},e.name))}),(0,h.jsxs)(`div`,{className:`code-popup-placeholder-actions`,children:[(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Apply profile`}),(0,h.jsx)(`span`,{children:`Profile activation is read-only here; JWC runtime owns credential checks and rollback.`})]})]})})]})]})})}function U(e,t,n){return n<=0?0:(e+t+n)%n}function ce(e){return e.disabledReason?`Disabled`:e.actionType===`popup`?e.popupKind?`${e.popupKind} popup`:`Popup`:e.actionType===`pass-through`?`Pass-through`:e.actionType===`unsupported`?`Unsupported`:`Insert`}function le(e){let[t,n]=(0,f.useState)(0),r=(0,f.useMemo)(()=>ie(e.availableCommands,e.inputText).slice(0,10),[e.availableCommands,e.inputText]),i=r[t],a=i?`code-command-option-${i.name.replace(/[^a-z0-9_-]/gi,`-`)}`:void 0;(0,f.useEffect)(()=>{n(0)},[e.inputText,e.availableCommands]),(0,f.useEffect)(()=>{t>=r.length&&n(Math.max(0,r.length-1))},[t,r.length]);let o=t=>{!t||t.disabledReason||e.onCommandSelect(t)};return(0,h.jsxs)(`div`,{className:`code-composer`,children:[e.showCommands&&r.length>0&&(0,h.jsx)(`div`,{className:`code-command-palette`,role:`listbox`,"aria-label":`Code commands`,id:`code-command-palette`,children:r.map((e,r)=>{let i=r===t;return(0,h.jsxs)(`button`,{id:`code-command-option-${e.name.replace(/[^a-z0-9_-]/gi,`-`)}`,type:`button`,role:`option`,"aria-selected":i,"aria-disabled":e.disabledReason?!0:void 0,className:`code-command-item${i?` is-active`:``}${e.disabledReason?` is-disabled`:``}`,onMouseEnter:()=>n(r),onClick:()=>o(e),children:[(0,h.jsxs)(`span`,{className:`code-command-row-main`,children:[(0,h.jsx)(`span`,{className:`code-command-name`,children:e.displayName}),e.description&&(0,h.jsx)(`span`,{className:`code-command-desc`,children:e.description})]}),(0,h.jsxs)(`span`,{className:`code-command-row-meta`,children:[(0,h.jsx)(`span`,{className:`code-command-chip`,children:e.category}),(0,h.jsx)(`span`,{className:`code-command-chip`,children:e.source}),(0,h.jsx)(`span`,{className:`code-command-chip`,children:ce(e)})]})]},e.name)})}),(0,h.jsxs)(`div`,{className:`code-composer-input-shell`,children:[(0,h.jsx)(`textarea`,{className:`code-composer-input`,value:e.inputText,onChange:t=>e.onInputChange(t.target.value),onKeyDown:t=>{if(t.key===`Escape`&&e.showCommands){t.preventDefault(),e.onShowCommandsChange(!1);return}if(e.showCommands&&r.length>0){if(t.key===`ArrowDown`){t.preventDefault(),n(e=>U(e,1,r.length));return}if(t.key===`ArrowUp`){t.preventDefault(),n(e=>U(e,-1,r.length));return}if(t.key===`Enter`&&!t.shiftKey){t.preventDefault(),o(i);return}}t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),e.onSubmit())},"aria-controls":e.showCommands?`code-command-palette`:void 0,"aria-activedescendant":e.showCommands?a:void 0,"aria-expanded":e.showCommands,placeholder:`Describe a task or ask a question...`,rows:1,disabled:e.sending}),(0,h.jsx)(`span`,{className:`code-composer-hint`,children:`Enter to send · / for commands`})]}),(0,h.jsx)(`button`,{type:`button`,className:`code-composer-send`,onClick:e.onSubmit,disabled:!e.inputText.trim()||e.sending,"aria-label":`Send prompt`,children:`Send`})]})}function W({permissions:e,onAnswer:t}){return e.length===0?null:(0,h.jsx)(`div`,{className:`code-permissions`,children:e.map(e=>(0,h.jsxs)(`div`,{className:`code-permission-card`,children:[(0,h.jsxs)(`div`,{className:`code-permission-title`,children:[(0,h.jsx)(`span`,{children:`Permission request`}),(0,h.jsx)(`strong`,{children:k(e.toolCall)}),(0,h.jsxs)(`small`,{children:[e.options.length,` JWC options`]})]}),(0,h.jsx)(`div`,{className:`code-permission-actions`,children:y.map(n=>{let r=O(e.options,n),i=x[n];return(0,h.jsx)(`button`,{type:`button`,className:`code-permission-btn is-${i}`,disabled:!r,title:r?r.optionId:`${b[n]} option was not provided by JWC`,onClick:()=>t(e,n),children:r?.label??b[n]},n)})})]},e.permissionId))})}var ue=92,de=6;function fe(e){let[{virtualItems:t,totalSize:s},c]=(0,f.useState)({virtualItems:[],totalSize:0}),l=(0,f.useRef)(null);l.current||=new o({count:e.count,getScrollElement:()=>e.scrollElementRef.current,estimateSize:e.estimateSize||(()=>ue),overscan:de,getItemKey:e.getItemKey,indexAttribute:`data-code-transcript-idx`,useAnimationFrameWithResizeObserver:!0,observeElementRect:n,observeElementOffset:r,scrollToFn:i,measureElement:a,onChange:e=>{c({virtualItems:e.getVirtualItems(),totalSize:e.getTotalSize()})}});let u=l.current;return(0,f.useEffect)(()=>u._didMount(),[u]),(0,f.useEffect)(()=>{u.measure()},[u,e.resetKey]),(0,f.useEffect)(()=>()=>{l.current=null},[]),(0,f.useLayoutEffect)(()=>{u.setOptions({...u.options,count:e.count,getItemKey:e.getItemKey,estimateSize:e.estimateSize||(()=>ue)}),u._willUpdate(),c({virtualItems:u.getVirtualItems(),totalSize:u.getTotalSize()})},[e.count,e.estimateSize,e.getItemKey,u]),{measureElement:e=>{e&&u.measureElement(e)},virtualItems:t,totalSize:s}}var G=2e3,pe=80,K=400;function me(e){if(e<=G)return pe;let t=e/G*pe;return Math.min(K,Math.round(t))}function he(e){let[t,n]=(0,f.useState)(e),r=(0,f.useRef)(0),i=(0,f.useRef)(null);return(0,f.useEffect)(()=>{if(!(e.length>=t.length&&e.startsWith(t))){i.current!==null&&(window.clearTimeout(i.current),i.current=null),r.current=Date.now(),n(e);return}if(e===t)return;let a=me(e.length),o=Date.now()-r.current;if(o>=a){r.current=Date.now(),n(e);return}i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{i.current=null,r.current=Date.now(),n(e)},a-o)},[e,t]),(0,f.useEffect)(()=>()=>{i.current!==null&&window.clearTimeout(i.current)},[]),t}var ge=(0,f.lazy)(()=>t(()=>import(`./MarkdownRenderer-uwE0Wam5.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0])));function _e({text:e,onOpenLocalFile:t}){let n=he(e);return(0,h.jsx)(f.Suspense,{fallback:(0,h.jsx)(`span`,{children:n}),children:(0,h.jsx)(ge,{markdown:n,tableMode:`linear`,onLocalFileOpen:t})})}function q(e,t){let n=e.label??(e.type===`args`?`Args`:e.type===`output`?`Output`:e.type===`error`?`Error`:``),r=`code-tool-${e.type}`,i=e.type===`diff`&&e.diff?e.diff:e.type===`json`||e.type===`args`?JSON.stringify(e.json??e,null,2):e.text??JSON.stringify(e,null,2);return n?(0,h.jsxs)(`div`,{className:`code-tool-section`,children:[(0,h.jsx)(`span`,{className:`code-tool-section-label`,children:n}),(0,h.jsx)(`pre`,{className:r,children:i})]},t):e.type===`diff`&&e.diff?(0,h.jsx)(`pre`,{className:`code-tool-diff`,children:e.diff},t):e.text?(0,h.jsx)(`pre`,{className:`code-tool-text`,children:e.text},t):(0,h.jsx)(`pre`,{className:r,children:i},t)}function ve(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function J(e){return(e.toolContent?.find(e=>typeof e.text==`string`&&e.text.trim())?.text??e.toolOutput??``).replace(/\s+/g,` `).trim().slice(0,240)}function Y(e){return e.split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()??``}function X(e){let t=e.toolContent?.find(e=>e.type===`args`||e.type===`text`||e.type===`json`);if(!t)return null;if(typeof t.text==`string`){let e=Y(t.text);return e?{text:e,...t.type===`args`?{name:`bash`}:/^https?:\/\//.test(e)||e.startsWith(`/`)?{name:`read`}:{}}:null}if(typeof t.json==`string`){let e=Y(t.json);return e?{text:e,...t.type===`args`?{name:`bash`}:{}}:null}if(t.json&&typeof t.json==`object`&&!Array.isArray(t.json)){let e=t.json;for(let[t,n]of[[`command`,`bash`],[`cmd`,`bash`],[`path`,`read`],[`url`,`read`],[`file`,`read`],[`query`,`search`]]){let r=e[t];if(typeof r==`string`&&r.trim())return{name:n,text:Y(r)}}}return null}function Z(e){let t=Y(e.toolName||e.text||`tool`)||`tool`,n=X(e);return t.includes(`:`)||!n?t:t===`tool`?n.name?`${n.name}: ${n.text}`:n.text:`${t}: ${n.text}`}function ye(e){return e===`pending`?`Pending`:e===`allow_once`?`Allow once`:e===`allow_always`?`Always allow`:e===`reject_once`?`Deny once`:e===`reject_always`?`Always deny`:e===`missing_option`?`Missing JWC option`:e===`answer_error`?`Answer failed`:`Cancelled`}function be(e,t){return`${t}:${e.toolCallId||e.permissionAudit?.permissionId||`${e.role}:${e.text.slice(0,48)}`}`}function xe(e){return e?e.role===`tool`?e.toolStatus===`running`?44:64+Math.min(320,(e.toolOutput?.length??0)/5):e.role===`permission`?72:e.role===`thinking`?48+Math.min(180,e.text.length/8):56+Math.min(420,e.text.length/6):48}function Se(e,t,n){return(0,h.jsx)(`div`,{className:`code-message code-message-${e.role}`,children:e.role===`tool`?(()=>{let t=e.toolStatus??`done`,n=t===`failed`||t===`error`,r=n?J(e):``;return(0,h.jsxs)(`details`,{className:`code-tool-card code-tool-${t}`,open:t===`running`||n,children:[(0,h.jsxs)(`summary`,{className:`code-tool-summary`,children:[(0,h.jsx)(`span`,{className:`code-tool-chevron`,children:`>`}),(0,h.jsx)(`span`,{className:`code-tool-name`,children:Z(e)}),(0,h.jsx)(`span`,{className:`code-tool-status`,children:t})]}),r&&(0,h.jsx)(`div`,{className:`code-tool-error-snippet`,children:r}),(e.toolContent?.length??0)>0&&(0,h.jsx)(`div`,{className:`code-tool-content`,children:e.toolContent.map(q)}),e.toolOutput&&(0,h.jsxs)(`pre`,{className:`code-tool-output`,children:[e.toolOutput.slice(0,2e3),e.toolOutput.length>2e3?`...`:``]})]})})():e.role===`permission`&&e.permissionAudit?(()=>{let t=e.permissionAudit,n=t.decision.startsWith(`allow`)?`is-allow`:t.decision.startsWith(`reject`)?`is-deny`:``;return(0,h.jsxs)(`div`,{className:`code-permission-audit is-${t.decision} ${n}`.trim(),children:[(0,h.jsxs)(`div`,{className:`code-permission-audit-head`,children:[(0,h.jsx)(`span`,{children:`Permission`}),(0,h.jsx)(`strong`,{children:t.toolName}),(0,h.jsx)(`em`,{children:ye(t.decision)})]}),(0,h.jsxs)(`div`,{className:`code-permission-audit-meta`,children:[(0,h.jsxs)(`span`,{children:[`mode `,t.mode]}),(0,h.jsx)(`span`,{children:t.decisionMode}),t.optionId&&(0,h.jsx)(`span`,{children:t.optionId})]}),t.error&&(0,h.jsx)(`div`,{className:`code-permission-audit-error`,children:t.error})]})})():e.role===`thinking`?(0,h.jsxs)(`details`,{className:`code-thinking`,children:[(0,h.jsx)(`summary`,{className:`code-thinking-summary`,children:`Thinking...`}),(0,h.jsx)(`div`,{className:`code-thinking-text`,children:e.text})]}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:`code-message-role`,children:e.role===`user`?`You`:`JWC`}),(0,h.jsx)(`div`,{className:`code-message-text`,children:e.role===`assistant`?(0,h.jsx)(_e,{text:e.text,onOpenLocalFile:n}):e.text})]})},t)}function Ce(){return(0,h.jsxs)(`div`,{className:`code-message code-message-assistant`,children:[(0,h.jsx)(`span`,{className:`code-message-role`,children:`JWC`}),(0,h.jsx)(`div`,{className:`code-message-text code-streaming`,children:`Thinking...`})]})}function Q({messages:e,sending:t,workingDir:n,transcriptRef:r,onOpenLocalFile:i,sessionId:a}){let o=t&&e[e.length-1]?.role!==`assistant`,s=e.length+ +!!o,c=(0,f.useRef)(e);c.current=e;let l=(0,f.useCallback)(e=>{let t=c.current[e];return t?be(t,e):`sending-${e}`},[]),u=(0,f.useCallback)(e=>xe(c.current[e]),[]),d=fe({count:s,resetKey:a??null,scrollElementRef:r,getItemKey:l,estimateSize:u});function p(e){if(ve(e.target))return;let t=r.current;if(!t)return;let n=e.key.toLowerCase(),i=Math.max(160,Math.floor(t.clientHeight*.78));n===`d`||n===`j`||e.key===`PageDown`?(e.preventDefault(),t.scrollBy({top:i,behavior:`smooth`})):n===`u`||n===`k`||e.key===`PageUp`?(e.preventDefault(),t.scrollBy({top:-i,behavior:`smooth`})):e.key===`End`?(e.preventDefault(),t.scrollTo({top:t.scrollHeight,behavior:`smooth`})):e.key===`Home`&&(e.preventDefault(),t.scrollTo({top:0,behavior:`smooth`}))}return(0,h.jsx)(`div`,{className:`code-transcript`,ref:r,role:`log`,"aria-live":`polite`,tabIndex:0,onKeyDown:p,children:e.length===0?(0,h.jsxs)(`div`,{className:`code-transcript-empty`,children:[(0,h.jsx)(`p`,{children:`Start a Code session by typing a prompt below.`}),(0,h.jsxs)(`p`,{className:`code-transcript-cwd`,children:[`cwd: `,n||`not set`]})]}):(0,h.jsx)(`div`,{className:`code-transcript-virtual-spacer`,style:{height:`${d.totalSize}px`},children:d.virtualItems.map(t=>{let n=e[t.index];return(0,h.jsx)(`div`,{ref:d.measureElement,className:`code-transcript-virtual-row`,"data-code-transcript-idx":t.index,style:{transform:`translateY(${t.start}px)`},children:n?Se(n,t.index,i):Ce()},t.key)})})})}function we(e){return e.split(`/`).filter(Boolean).slice(-2).join(`/`)||e}function Te({workingDir:e,gitInfo:t,modelOptions:n,sessionTitle:r,usage:i,planEntries:a,onWorkingDirChange:o,cwdLocked:s=!1,workspaceFrozen:c=!1,onPickWorkingDir:l}){let[u,d]=(0,f.useState)(!1),[p,m]=(0,f.useState)(``),g=t?.status?.dirty,_=t?.worktrees.length??0,v=c||s,y=!!(!v&&l&&o);async function b(){if(!(!y||!l)){d(!0),m(``);try{let e=await l();e&&o?.(e)}catch(e){m(e instanceof Error?e.message:String(e))}finally{d(!1)}}}return(0,h.jsxs)(`div`,{className:`code-workspace-header`,children:[(0,h.jsxs)(`div`,{className:`code-workspace-primary`,children:[v?(0,h.jsx)(`span`,{className:`code-workspace-chip`,title:e,"aria-label":`Current Code workspace: ${e}`,children:we(e||`/tmp`)}):(0,h.jsxs)(`button`,{type:`button`,className:`code-workspace-picker`,disabled:!y||u,title:e||`Select Code workspace folder`,"aria-label":`Code workspace: ${e||`not set`}. Choose a folder.`,onClick:()=>void b(),children:[(0,h.jsx)(`span`,{className:`code-workspace-picker-label`,children:we(e||`/tmp`)}),(0,h.jsx)(`span`,{className:`code-workspace-picker-caret`,"aria-hidden":`true`,children:`▾`})]}),!v&&p&&(0,h.jsx)(`span`,{className:`code-workspace-cwd-error`,children:p}),t?.isRepo&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`span`,{className:`code-workspace-pill`,children:[t.branch??`detached`,t.head?` · ${t.head}`:``]}),(0,h.jsx)(`span`,{className:`code-workspace-pill ${g?`is-dirty`:``}`,children:g?`${t.status?.changed??0} changed · ${t.status?.untracked??0} untracked`:`clean`}),(0,h.jsxs)(`span`,{className:`code-workspace-pill`,title:t.currentWorktree?.path??void 0,children:[`worktree `,_]})]}),n?.degraded&&(0,h.jsx)(`span`,{className:`code-workspace-pill is-warning`,title:n.error,children:`provider fallback`})]}),(r||i.contextTokens!==void 0||a.length>0)&&(0,h.jsxs)(`div`,{className:`code-session-header`,children:[r&&(0,h.jsx)(`span`,{className:`code-session-title`,children:r}),i.contextTokens!==void 0&&i.contextLimit?(0,h.jsx)(`span`,{className:`code-context-meter`,title:`${i.contextTokens.toLocaleString()} / ${i.contextLimit.toLocaleString()} tokens${i.cost===void 0?``:` · $${i.cost.toFixed(4)}`}`,children:(0,h.jsx)(`span`,{className:`code-context-bar`,style:{width:`${Math.min(100,i.contextTokens/i.contextLimit*100)}%`}})}):null,a.length>0&&(0,h.jsx)(`div`,{className:`code-plan-entries`,children:a.map((e,t)=>(0,h.jsxs)(`span`,{className:`code-plan-entry code-plan-${e.status}`,children:[e.status===`completed`?`✓`:e.status===`in_progress`?`↻`:`○`,` `,e.title]},t))})]})]})}function Ee({label:e,value:t,options:n,disabled:r,title:i,className:a=``,onChange:o}){let s=(0,f.useId)(),c=(0,f.useRef)(null),[l,u]=(0,f.useState)(!1),d=n.find(e=>e.value===t)??n[0],p=Math.max(0,n.findIndex(e=>e.value===d?.value));(0,f.useEffect)(()=>{if(!l)return;let e=e=>{c.current?.contains(e.target)||u(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[l]);let m=e=>{o(e),u(!1)};return(0,h.jsxs)(`div`,{ref:c,className:`code-footer-menu ${a}`.trim(),children:[(0,h.jsxs)(`button`,{type:`button`,className:`code-footer-menu-trigger`,disabled:r,title:i,"aria-label":e,"aria-haspopup":`listbox`,"aria-expanded":l,"aria-controls":s,onClick:()=>u(e=>!e),onKeyDown:e=>{if(!r){if(e.key===`Escape`){u(!1);return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=n[(p+(e.key===`ArrowDown`?1:-1)+n.length)%n.length];t&&m(t.value);return}(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),u(e=>!e))}},children:[(0,h.jsx)(`span`,{className:`code-footer-label`,children:e}),(0,h.jsx)(`strong`,{children:d?.label??t}),(0,h.jsx)(`span`,{className:`code-footer-chevron`,"aria-hidden":`true`,children:`⌃`})]}),l&&(0,h.jsx)(`div`,{id:s,className:`code-footer-dropup`,role:`listbox`,"aria-label":e,children:n.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-footer-dropup-option${e.value===t?` is-selected`:``}`,role:`option`,"aria-selected":e.value===t,onClick:()=>m(e.value),children:[(0,h.jsxs)(`span`,{children:[(0,h.jsx)(`strong`,{children:e.label}),e.detail&&(0,h.jsx)(`small`,{children:e.detail})]}),e.value===t&&(0,h.jsx)(`em`,{"aria-hidden":`true`,children:`✓`})]},e.value))})]})}function De({provider:e,providerOptions:t,model:n,modelOptions:r,effort:i,effortOptions:a,permissionMode:o,disabled:s,onProviderChange:c,onModelChange:l,onEffortChange:u,onPermissionModeChange:d}){return(0,h.jsxs)(`div`,{className:`code-composer-footer`,children:[(0,h.jsx)(Ee,{label:`Permission`,value:o,options:S,disabled:s,title:C[o],onChange:d}),t.length>0&&(0,h.jsx)(Ee,{label:`Provider`,value:e,options:t.map(e=>({value:e,label:e})),disabled:s,title:e,onChange:c}),(0,h.jsx)(Ee,{label:`Model`,value:n,options:r.map(e=>({value:e,label:e})),disabled:s,title:n,className:`code-footer-field-model`,onChange:l}),a.length>0&&(0,h.jsx)(Ee,{label:`Effort`,value:i,options:a.map(e=>({value:e,label:e})),disabled:s,title:i,onChange:u})]})}function Oe(e){return(0,h.jsxs)(`div`,{className:`code-canvas-main`,children:[(0,h.jsx)(Te,{gitInfo:e.gitInfo,modelOptions:e.modelOptions,sessionTitle:e.sessionTitle,usage:e.usage,planEntries:e.planEntries,workingDir:e.codeWorkingDir,cwdLocked:!!e.activeSessionId,onWorkingDirChange:e.onWorkingDirChange,workspaceFrozen:e.workspaceFrozen,onPickWorkingDir:e.onPickWorkingDir}),e.childRecovery&&(0,h.jsxs)(`section`,{className:`code-child-recovery`,role:`status`,"aria-live":`polite`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`span`,{children:`JWC child recovery`}),(0,h.jsxs)(`strong`,{children:[`ACP child exited: `,e.childRecovery.code]})]}),(0,h.jsx)(`p`,{children:e.childRecovery.message})]}),e.transportState!==`connected`&&(0,h.jsx)(`section`,{className:`code-transport-status is-${e.transportState}`,role:`status`,"aria-live":`polite`,children:e.transportState===`reconnecting`?`Live updates reconnecting…`:`Live updates disconnected — retrying.`}),(0,h.jsx)(Q,{messages:e.messages,sending:e.sending,workingDir:e.codeWorkingDir,transcriptRef:e.transcriptRef,onOpenLocalFile:e.onOpenLocalFile,sessionId:e.activeSessionId}),(0,h.jsx)(W,{permissions:e.permissions,onAnswer:e.onPermissionAnswer}),(0,h.jsx)(`div`,{className:`code-composer-dock`,children:(0,h.jsxs)(`div`,{className:`code-composer-surface`,"aria-label":`Code composer controls`,children:[(0,h.jsx)(le,{inputText:e.inputText,sending:e.sending,showCommands:e.showCommands,availableCommands:e.availableCommands,onInputChange:e.onInputChange,onCommandSelect:e.onCommandSelect,onSubmit:e.onSubmit,onShowCommandsChange:e.onShowCommandsChange}),(0,h.jsx)(De,{provider:e.provider,providerOptions:e.providerOptions,model:e.model,modelOptions:e.currentModelOptions,effort:e.effort,effortOptions:e.currentEffortOptions,permissionMode:e.permissionMode,disabled:e.disabled,onProviderChange:e.onFooterProviderChange,onModelChange:e.onModelChange,onEffortChange:e.onEffortChange,onPermissionModeChange:e.onPermissionModeChange})]})}),e.activePopup&&(0,h.jsx)(se,{popupKind:e.activePopup.kind,command:e.activePopup.command,modelOptions:e.modelOptions,provider:e.provider,model:e.model,modelAssignments:e.modelAssignments,modelPresets:e.modelPresets,permissionMode:e.permissionMode,disabled:e.disabled,activeSessionId:e.activeSessionId,error:e.error,onClose:e.onClosePopup,onRefreshProviders:e.onRefreshProviders,onProviderChange:e.onProviderChange,onUseModel:e.onUseModel,onUseForNewSessions:e.onUseForNewSessions,onSetDefaultModel:e.onSetDefaultModel,onSetModelAssignment:e.onSetModelAssignment,onClearModelAssignment:e.onClearModelAssignment,onPermissionModeChange:e.onPermissionModeChange})]})}var ke={providers:[{id:`anthropic`,models:[`claude-sonnet-4-6`,`claude-opus-5`,`claude-opus-4-8`,`claude-opus-4-7`,`claude-opus-4-6`,`claude-haiku-4-5`,`claude-fable-5`],efforts:[`off`,`min`,`low`,`medium`,`high`,`xhigh`]}],defaultProvider:`anthropic`,defaultModel:`claude-sonnet-4-6`,degraded:!0},Ae=re([{name:`/model`,description:`Choose provider, model, roles, thinking, profiles, and MRU state.`,source:`cli-jaw`},{name:`/provider`,description:`Review authenticated JWC providers.`,source:`cli-jaw`},{name:`/settings`,description:`Adjust Code mode session controls.`,source:`cli-jaw`}]);function je(e){let t=new Set,n=[];for(let r of[...e,...Ae])t.has(r.name)||(t.add(r.name),n.push(r));return n}function Me(e,t,n,r){if(r.appendMessage(A(n,{mode:t,decision:`pending`,decisionMode:t===`ask`?`pending`:`automatic`})),t===`ask`){r.enqueuePermission(n);return}let i=t===`always-allow`?`allow_always`:`reject_always`,a=O(n.options,i);if(!a){r.appendMessage(A(n,{mode:t,decision:`missing_option`,decisionMode:`system`,error:`${i} was not provided by JWC for this request.`})),r.enqueuePermission(n);return}(async()=>{try{await e.answerPermission(n.permissionId,a.optionId),r.appendMessage(A(n,{mode:t,decision:i,decisionMode:`automatic`,optionId:a.optionId,optionLabel:a.label}))}catch(e){r.appendMessage(A(n,{mode:t,decision:`answer_error`,decisionMode:`system`,optionId:a.optionId,optionLabel:a.label,error:e instanceof Error?e.message:String(e)}))}})()}async function Ne(e,t,n,r,i){let a=O(n.options,r);if(!a)return i(A(n,{mode:t,decision:`missing_option`,decisionMode:`system`,error:`${r} was not provided by JWC for this request.`})),!1;try{await e.answerPermission(n.permissionId,a.optionId),i(A(n,{mode:t,decision:r,decisionMode:`manual`,optionId:a.optionId,optionLabel:a.label}))}catch(e){i(A(n,{mode:t,decision:`answer_error`,decisionMode:`system`,optionId:a.optionId,optionLabel:a.label,error:e instanceof Error?e.message:String(e)}))}return!0}function Pe(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return t.toString(36)}var Fe=2e3,Ie=new Set([`code_user_message_chunk`,`code_agent_message_chunk`,`code_agent_thought_chunk`]);function Le(e){let t=e?.content;return String(t?.text??e?.text??``)}function $(e){let t=e?.messageId;return typeof t==`string`?t.trim():``}function Re(e,t){if(!Ie.has(e.event)||!t)return null;let n=$(e.update??{}),r=typeof e.sseEventId==`string`&&e.sseEventId.trim()?e.sseEventId.trim():``,i=n?`msg:${n}`:r?`sse:${r}`:``;return i?`${e.sessionId??``}:${e.event}:${i}:${t.length}:${Pe(t)}`:null}function ze(e,t){for(let n of t){let r=Re(n,Le(n.update));r&&u(e,r,Math.max(Fe,t.length))}}function Be(e,t,n){let r=Re(t,n);return r?e.has(r)?!0:(u(e,r,Fe),!1):!1}function Ve(e,t){let n=e.trim(),r=t.trim();return r.length<80?!1:n===r}var He=80,Ue=.7,We=.78,Ge=32,Ke=8;function qe(e){return e.replace(/\s+/g,` `).trim()}function Je(e){return e.split(/\r?\n/).map(e=>e.replace(/\s+/g,` `).trim()).filter(e=>e.length>=4)}function Ye(e,t){if(e.length===0)return 0;let n=0;for(let r of e)t.has(r)&&(n+=1);return n/e.length}function Xe(e){let t=qe(e);if(t.length<Ge)return[];let n=[];for(let e=0;e<=t.length-Ge;e+=Ke)n.push(t.slice(e,e+Ge));return n}function Ze(e,t){let n=qe(e),r=qe(t);if(n.length<He||r.length<He)return!1;if(r.includes(n))return!0;let i=Je(e),a=new Set(Je(t));if(i.length>=4&&Ye(i,a)>=Ue)return!0;let o=Xe(n);return o.length<3?!1:Ye(o,new Set(Xe(r)))>=We}function Qe(e,t){return!e||!t?`append`:e===t?`drop`:t.startsWith(e)?`replace`:e.startsWith(t)?`drop`:t.length>=e.length&&Ze(e,t)?`replace`:e.length>t.length&&Ze(t,e)?`drop`:`append`}function $e(e){let t=e.toLowerCase();return t===`failed`||t===`error`||t===`errored`?`failed`:t===`completed`||t===`done`||t===`success`?`done`:`running`}function et(e){let t=[];for(let n of e){let e=n.update??{};if(n.event===`code_user_message_chunk`){let n=e.content,r=String(n?.text??e.text??``),i=$(e);r&&t.push({role:`user`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_agent_message_chunk`){let n=e.content,r=String(n?.text??e.text??``);if(!r)continue;let i=$(e),a=t[t.length-1];if(a?.role===`assistant`){let e=Qe(a.text,r);if(a.messageId&&i&&a.messageId!==i){if(e===`replace`){a.text=r,a.messageId=i;continue}t.push({role:`assistant`,text:r,messageId:i});continue}if(e===`drop`)continue;a.text=e===`replace`?r:a.text+r,i&&!a.messageId&&(a.messageId=i)}else t.push({role:`assistant`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_agent_thought_chunk`){let n=e.content,r=String(n?.text??e.text??``);if(!r)continue;let i=$(e),a=t[t.length-1];a?.role===`thinking`&&(!a.messageId||!i||a.messageId===i)?(a.text+=r,i&&!a.messageId&&(a.messageId=i)):t.push({role:`thinking`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_tool_call`){let n=String(e.title??e.toolName??`tool`),r=String(e.toolCallId??``),i=String(e.status??`pending`),a=te(e);t.push({role:`tool`,text:n,toolName:n,toolCallId:r,toolContent:a,toolStatus:$e(i)})}else if(n.event===`code_tool_call_update`){let n=String(e.toolCallId??``),r=String(e.status??``),i=te(e),a=_(t,n);if(a<0)continue;let o={...t[a]};r&&(o.toolStatus=$e(r)),i.length>0&&(o.toolContent=i),t[a]=o}}return t}function tt(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function nt(e,t,n){let r=(0,f.useRef)(null),i=(0,f.useMemo)(()=>{let t=e[e.length-1];if(!t)return`empty`;let n=t.toolContent?.reduce((e,t)=>{let n=t;return e+(n.text?.length??0)+(n.diff?.length??0)+(n.output?.length??0)},0)??0;return`${e.length}:${t.role}:${t.text.length}:${t.toolOutput?.length??0}:${n}:${t.toolStatus??``}`},[e]),a=(0,f.useRef)(null),o=(0,f.useRef)(null);(0,f.useEffect)(()=>()=>{a.current!==null&&cancelAnimationFrame(a.current),o.current!==null&&window.clearTimeout(o.current)},[]);let s=(0,f.useCallback)((e=`smooth`)=>{a.current===null&&(a.current=window.requestAnimationFrame(()=>{a.current=null;let t=r.current;t&&(t.scrollTo({top:t.scrollHeight,behavior:e}),o.current!==null&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>{o.current=null;let e=r.current;e&&e.scrollTo({top:e.scrollHeight,behavior:`auto`})},80))}))},[]),c=(0,f.useCallback)((e,t=`smooth`)=>{window.requestAnimationFrame(()=>{let n=r.current;n&&n.scrollBy({top:e,behavior:t})})},[]),l=(0,f.useCallback)((e=`smooth`)=>{window.requestAnimationFrame(()=>{let t=r.current;t&&t.scrollTo({top:0,behavior:e})})},[]);return(0,f.useEffect)(()=>{s(e.length>1?`smooth`:`auto`)},[i,e.length,t,s]),(0,f.useEffect)(()=>{let e=e=>{if(e.defaultPrevented||n||e.metaKey||e.ctrlKey||e.altKey||tt(e.target))return;let t=r.current;if(!t)return;let i=e.key.toLowerCase(),a=Math.max(160,Math.floor(t.clientHeight*.78));i===`d`||i===`j`||e.key===`PageDown`?(e.preventDefault(),c(a)):i===`u`||i===`k`||e.key===`PageUp`?(e.preventDefault(),c(-a)):e.key===`End`?(e.preventDefault(),s(`smooth`)):e.key===`Home`&&(e.preventDefault(),l(`smooth`))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n,c,s,l]),{transcriptRef:r,scrollTranscriptToBottom:s}}function rt(e){return typeof window<`u`&&window.location.port===String(e)?`${window.location.origin}/api/events`:`http://127.0.0.1:${e}/api/events`}function it({port:e,sessionId:t,sessionIdRef:n,onEvent:r,onTransport:i}){let a=(0,f.useRef)(r);a.current=r;let o=(0,f.useRef)(i);o.current=i;let s=(0,f.useRef)(t);s.current=t,(0,f.useEffect)(()=>{if(!e)return;let t=new EventSource(rt(e));return t.onopen=()=>{o.current?.(`connected`)},t.onmessage=e=>{try{let t={...JSON.parse(e.data),sseEventId:e.lastEventId||void 0};if(t.topic!==`jwc`)return;let r=t.event===`code_child_exit`,i=n?.current??s.current;if(!i&&!r||!r&&t.sessionId&&t.sessionId!==i)return;a.current(t)}catch{}},t.onerror=()=>{o.current?.(t.readyState===EventSource.CLOSED?`disconnected`:`reconnecting`)},()=>t.close()},[e])}function at({port:e,workingDir:t,onWorkingDirChange:n,onOpenLocalFile:r}){let i=(0,f.useMemo)(()=>m(e),[e]),[a,o]=(0,f.useState)(t),[s,c]=(0,f.useState)(null),[l,u]=(0,f.useState)(!1),[y,b]=(0,f.useState)(``),[x,S]=(0,f.useState)(!1),[C,w]=(0,f.useState)([]),[T,E]=(0,f.useState)([]),[D,O]=(0,f.useState)(Ae),[k,A]=(0,f.useState)(!1),[j,M]=(0,f.useState)(null),[ee,N]=(0,f.useState)(``),[P,F]=(0,f.useState)(``),[I,L]=(0,f.useState)({}),[ne,R]=(0,f.useState)([]),[z,B]=(0,f.useState)(`anthropic`),[V,ie]=(0,f.useState)(`claude-sonnet-4-6`),[ae,oe]=(0,f.useState)(`high`),[H,se]=(0,f.useState)(`always-allow`),[U,ce]=(0,f.useState)(ke),[le,W]=(0,f.useState)(null),[ue,de]=(0,f.useState)(null),[fe,G]=(0,f.useState)(null),[pe,K]=(0,f.useState)(null),[me,he]=(0,f.useState)(`connected`),[ge,_e]=(0,f.useState)(null),q=(0,f.useRef)(null),ve=(0,f.useRef)(!1),J=(0,f.useRef)(null),Y=(0,f.useRef)(null),X=(0,f.useRef)(new Set),Z=(0,f.useRef)(new Set),ye=(0,f.useMemo)(()=>V?v(z,V):``,[z,V]),{transcriptRef:be,scrollTranscriptToBottom:xe}=nt(C,x,!!j);(0,f.useEffect)(()=>{q.current||s||o(t)},[s,t]);let Se=(0,f.useCallback)(e=>{q.current||s||l||(o(e??``),n?.(e))},[s,n,l]),Ce=(0,f.useCallback)(async()=>{let e=d();if(e?.folder?.pickFolder){let t=await e.folder.pickFolder();if(t.ok&&t.path)return t.path;if(t.error&&t.error!==`cancelled`)throw Error(t.error);return null}let t=await i.pickWorkspace();return t.ok&&t.path?t.path:null},[i]),Q=(0,f.useCallback)(e=>{ce(e);let t=e.providers.find(t=>t.id===e.defaultProvider)??e.providers[0],n=t?.models.includes(e.defaultModel)?e.defaultModel:t?.models[0]??``;B(t?.id??`anthropic`),ie(n);let r=t?.efforts??[];r.length>0&&oe(r.includes(`high`)?`high`:r[0]??``)},[]);(0,f.useEffect)(()=>{q.current=s},[s]),(0,f.useEffect)(()=>{if(typeof document>`u`){_e(null);return}return _e(document.getElementById(`code-session-sidebar-host`)),()=>_e(null)},[]);let we=(0,f.useCallback)(async()=>{Q(await i.listModelOptions())},[Q,i]),Te=(0,f.useCallback)(async()=>{W(await i.listModelAssignments())},[i]);(0,f.useEffect)(()=>{let e=!1;return(async()=>{try{let[t,n,r]=await Promise.all([i.listModelOptions(),i.listModelAssignments(),i.listModelPresets()]);if(e)return;Q(t),W(n),de(r)}catch(t){e||(ce({...ke,error:t instanceof Error?t.message:String(t)}),W(null),de(null))}})(),()=>{e=!0}},[Q,i]),(0,f.useEffect)(()=>{if(!a){G(null);return}let e=!1;return i.getGitInfo(a).then(t=>{e||G(t)},()=>{e||G(null)}),()=>{e=!0}},[i,a]),(0,f.useEffect)(()=>{if(ve.current){ve.current=!1;return}c(null),q.current=null,w([]),E([]),R([]),F(``),L({}),S(!1),K(null),Z.current=new Set},[a]),it({port:e,sessionId:s,sessionIdRef:q,onEvent:(0,f.useCallback)(e=>{let t=e.update??{},n=e.event;if(!(Y.current&&e.sessionId===Y.current&&n!==`code_child_exit`))if(n===`code_agent_message_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{if(X.current.has(n)&&e[e.length-1]?.role===`user`)return X.current.delete(n),e;let t=e[e.length-1];if(t?.role===`assistant`&&Ve(t.text,n))return e;if(t?.role===`assistant`){let i=Qe(t.text,n);if(t.messageId&&r&&t.messageId!==r)return i===`replace`?[...e.slice(0,-1),{...t,text:n,messageId:r}]:[...e,{role:`assistant`,text:n,messageId:r}];if(i===`drop`)return e;let a=i===`replace`?n:t.text+n;return[...e.slice(0,-1),{...t,text:a,...r&&!t.messageId?{messageId:r}:{}}]}return[...e,{role:`assistant`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_user_message_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{if(J.current===n){let t=-1;for(let r=e.length-1;r>=0;--r){let i=e[r];if(i?.role===`user`&&i.text===n&&i.transient===`pending-user-echo`){t=r;break}}if(t>=0){J.current=null;let i=[...e];return i[t]={role:`user`,text:n,...r?{messageId:r}:{}},i}}return[...e,{role:`user`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_agent_thought_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{let t=e[e.length-1];return t?.role===`thinking`&&(!t.messageId||!r||t.messageId===r)?[...e.slice(0,-1),{...t,text:t.text+n,...r&&!t.messageId?{messageId:r}:{}}]:[...e,{role:`thinking`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_tool_call`){let e=String(t.title??t.toolName??`tool`),n=String(t.toolCallId??``),r=String(t.status??`pending`),i=te(t);w(t=>[...t,{role:`tool`,text:e,toolName:e,toolCallId:n,toolContent:i,toolStatus:$e(r)}])}else if(n===`code_tool_call_update`){let e=String(t.toolCallId??``),n=String(t.status??``),r=te(t);w(t=>{let i=_(t,e);if(i<0)return t;let a=[...t],o={...a[i]};return n&&(o.toolStatus=$e(n)),r.length>0&&(o.toolContent=r),a[i]=o,a})}else if(n===`code_permission_request`){let t=String(e.permissionId??``),n=e.toolCall??{},r=e.options??[];t&&Me(i,H,{permissionId:t,toolCall:n,options:r},{appendMessage:e=>w(t=>[...t,e]),enqueuePermission:e=>{E(t=>[...t,e]),xe(`smooth`)}})}else if(n===`code_session_info_update`){let e=t.title;typeof e==`string`&&F(e)}else if(n===`code_usage_update`){let e={};typeof t.contextTokens==`number`&&(e.contextTokens=t.contextTokens),typeof t.contextLimit==`number`&&(e.contextLimit=t.contextLimit),typeof t.totalCost==`number`&&(e.cost=t.totalCost),L(e)}else if(n===`code_plan`)R((t.entries??[]).filter(e=>e.title).map(e=>({title:String(e.title),status:String(e.status??`pending`)}))),xe(`smooth`);else if(n===`code_available_commands_update`)O(je(re(t.availableCommands)));else if(n===`code_child_exit`){let t=e.code===null||e.code===void 0?`unknown`:String(e.code),n=`JWC ACP child exited (code ${t}). Active Code sessions were closed. Send the prompt again to start a fresh session, or load a stored session from the sidebar.`;q.current=null,c(null),S(!1),E([]),K({code:t,message:n}),w(e=>[...e,{role:`assistant`,text:n}])}else n===`code_turn_done`?S(!1):n===`code_session_error`&&(w(t=>[...t,{role:`assistant`,text:`Error: ${e.reason??`unknown`}`}]),S(!1))},[i,H,xe]),onTransport:he});let Ee=(0,f.useCallback)(async()=>{let e=y.trim();if(!(!e||x)){Y.current=null,S(!0),u(!0),K(null),J.current=e,w(t=>[...t,{role:`user`,text:e,transient:`pending-user-echo`}]),b(``);try{let t=s;if(!t){let e=a||`/tmp`;t=(await i.createSession(e,ye||void 0)).sessionId,q.current=t,c(t)}await i.sendPrompt(t,e)}catch(e){J.current=null,w(t=>[...t,{role:`assistant`,text:`Error: ${e instanceof Error?e.message:String(e)}`}]),S(!1)}}},[y,x,s,i,a,ye]),De=(0,f.useCallback)(e=>{b(e),A(e===`/`||e.startsWith(`/`)&&!e.includes(` `))},[]),Pe=(0,f.useCallback)(e=>{if(!e.disabledReason){if(e.actionType===`popup`&&e.popupKind){N(``),M({kind:e.popupKind,command:e}),A(!1);return}b(`${e.displayName} `),A(!1)}},[]),Fe=(0,f.useCallback)(async(e,t)=>{await Ne(i,H,e,t,e=>w(t=>[...t,e]))&&E(t=>t.filter(t=>t.permissionId!==e.permissionId))},[i,H]),Ie=(0,f.useCallback)(async(e,t,n)=>{N(``),B(e),ie(t);let r=n?.closePopup??!0,a=n?.requireActiveSession??!0;if(!s){a&&N(`Start or load a Code session before applying a live model.`);return}try{await i.setSessionModel(s,v(e,t)),r&&M(null)}catch(e){N(e instanceof Error?e.message:String(e))}},[s,i]),Re=(0,f.useCallback)(async(e,t)=>{N(``);try{Q(await i.setDefaultModel(v(e,t))),Te()}catch(e){N(e instanceof Error?e.message:String(e))}},[Q,i,Te]),He=(0,f.useCallback)(async(e,t,n,r)=>{N(``);try{W(await i.setModelAssignment(e,{provider:t,model:n,...r===void 0?{}:{thinkingLevel:r}}))}catch(e){N(e instanceof Error?e.message:String(e))}},[i]),Ue=(0,f.useCallback)(async e=>{N(``);try{W(await i.clearModelAssignment(e))}catch(e){N(e instanceof Error?e.message:String(e))}},[i]),We=U.providers.find(e=>e.id===z)??U.providers[0],Ge=U.providers.map(e=>e.id),Ke=We?.models??[],qe=We?.efforts??[],Je=e=>{let t=et(e.replayEvents??[]);Z.current=new Set,ze(Z.current,e.replayEvents??[]),X.current=new Set(t.filter(e=>e.role===`assistant`&&e.text).map(e=>e.text)),q.current=e.sessionId,c(e.sessionId),e.cwd!==a&&(ve.current=!0,o(e.cwd)),w(t),E([]),R([]),F(e.title?.trim()||t.find(e=>e.role===`user`)?.text.split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()||``),L({}),S(!1),K(null)};if(!e)return(0,h.jsx)(`div`,{className:`code-canvas`,children:(0,h.jsx)(`div`,{className:`code-transcript-empty`,children:(0,h.jsx)(`p`,{children:`Server not available.`})})});let Ye=(0,h.jsx)(g,{client:i,activeSessionId:s,workingDir:a,onSelectSession:Je,onLoadSession:(e,t)=>{(async()=>{Y.current=e,q.current=e,c(e),J.current=null,X.current=new Set,Z.current=new Set,w([]),R([]),F(``),S(!1);try{let n=await i.loadSession(e,t);if(q.current!==e)return;n.title&&F(n.title);let r=et(n.replayEvents??[]);Z.current=new Set,ze(Z.current,n.replayEvents??[]),X.current=new Set(r.filter(e=>e.role===`assistant`&&e.text).map(e=>e.text)),w(r),S(!1)}catch(t){q.current===e&&(q.current=null,c(null)),w(e=>[...e,{role:`assistant`,text:`Failed to load session: ${t instanceof Error?t.message:String(t)}`}])}finally{Y.current===e&&(Y.current=null)}})()},onNewSession:()=>{q.current=null,Y.current=null,J.current=null,X.current=new Set,Z.current=new Set,c(null),w([]),R([]),F(``),S(!1),u(!1)}}),Xe=e=>{B(e),ie(U.providers.find(t=>t.id===e)?.models[0]??``)},Ze=(0,h.jsx)(Oe,{activePopup:j,activeSessionId:s,availableCommands:D,codeWorkingDir:a,currentEffortOptions:qe,currentModelOptions:Ke,disabled:x,effort:ae,gitInfo:fe,childRecovery:pe,transportState:me,inputText:y,messages:C,model:V,modelAssignments:le,modelOptions:U,modelPresets:ue,permissionMode:H,permissions:T,planEntries:ne,error:ee,provider:z,providerOptions:Ge,sending:x,sessionTitle:P,showCommands:k,transcriptRef:be,usage:I,onClearModelAssignment:Ue,onClosePopup:()=>{N(``),M(null)},onCommandSelect:Pe,onEffortChange:e=>{oe(e),s&&i.setSessionConfig(s,`thinking`,e)},onFooterProviderChange:e=>{Xe(e);let t=U.providers.find(t=>t.id===e),n=t?.models[0]??``;oe(t?.efforts.includes(`high`)?`high`:t?.efforts[0]??``),n&&Ie(e,n,{closePopup:!1,requireActiveSession:!1})},onInputChange:De,onModelChange:e=>{Ie(z,e,{closePopup:!1,requireActiveSession:!1})},onPermissionAnswer:Fe,onPermissionModeChange:se,onProviderChange:Xe,onRefreshProviders:()=>{we()},onSetDefaultModel:Re,onSetModelAssignment:He,onShowCommandsChange:A,onSubmit:()=>{Ee()},onUseModel:Ie,onUseForNewSessions:(e,t)=>{Ie(e,t,{requireActiveSession:!1,closePopup:!1}),M(null)},onWorkingDirChange:Se,onOpenLocalFile:r,workspaceFrozen:l,onPickWorkingDir:Ce});return ge?(0,h.jsxs)(h.Fragment,{children:[(0,p.createPortal)((0,h.jsx)(`div`,{className:`code-manager-session-navigator-content`,children:Ye}),ge),(0,h.jsx)(`div`,{className:`code-canvas code-canvas-workbench`,children:Ze})]}):(0,h.jsxs)(`div`,{className:`code-canvas`,children:[(0,h.jsx)(`div`,{className:`code-canvas-sidebar`,children:Ye}),Ze]})}export{at as CodeCanvas};
@@ -1 +1 @@
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,s as c}from"./fields-BwOMlwS0.js";var l=e(t(),1),u=n();function d(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async patch(e,t){let n=await fetch(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PATCH ${e} → ${n.status}`);return await n.json()}}}var f=[`meta.label`,`meta.group`,`meta.favorite`,`meta.hidden`,`meta.notes`];function p(e,t){let n=e?.registry?.instances?.[String(t)];return{label:n?.label??null,favorite:n?.favorite===!0,group:n?.group??null,hidden:n?.hidden===!0,notes:n?.notes??null}}function m(e){return{label:e.label||``,group:e.group||``,favorite:e.favorite,hidden:e.hidden,notes:e.notes||``}}function h({port:e,client:t,dirty:n,registerSave:h,managerClient:g}){let{state:_,refresh:v,setData:y}=r(t,`__dashboard_meta_unused__`,[e]),[b,x]=(0,l.useState)(null),[S,C]=(0,l.useState)(null),[w,T]=(0,l.useState)({label:``,group:``,favorite:!1,hidden:!1,notes:``}),E=g||d();(0,l.useEffect)(()=>{let t=!1;return C(null),E.get(`/api/dashboard/registry`).then(n=>{t||(x(n),T(m(p(n,e))))}).catch(e=>{t||C(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[e]),(0,l.useEffect)(()=>()=>{for(let e of f)n.remove(e)},[n]);let D=p(b,e),O=(0,l.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,l.useCallback)(async()=>{let t=w.label.trim()||null,r=w.group.trim()||null,i=w.notes.trim()||null,a={instances:{[String(e)]:{label:t,group:r,favorite:w.favorite,hidden:w.hidden,notes:i}}},o=await E.patch(`/api/dashboard/registry`,a);x(o),T(m(p(o,e)));for(let e of f)n.remove(e)},[w,E,n,e]);return(0,l.useEffect)(()=>{if(h)return h(k),()=>h(null)},[h,k]),S?(0,u.jsx)(o,{message:S}):b?(0,u.jsx)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),k()},children:(0,u.jsxs)(i,{title:`Dashboard meta`,hint:`Manager-side metadata for this instance. Stored in the dashboard registry.`,children:[(0,u.jsx)(c,{id:`dashmeta-label`,label:`Label`,value:w.label,placeholder:`(unset — falls back to home folder name)`,onChange:e=>{T({...w,label:e}),O(`meta.label`,{value:e,original:D.label||``,valid:!0})}}),(0,u.jsx)(c,{id:`dashmeta-group`,label:`Group`,value:w.group,placeholder:`e.g. work, personal`,onChange:e=>{T({...w,group:e}),O(`meta.group`,{value:e,original:D.group||``,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-favorite`,label:`Pin favorite`,value:w.favorite,onChange:e=>{T({...w,favorite:e}),O(`meta.favorite`,{value:e,original:D.favorite,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-hidden`,label:`Hide by default`,description:`Hide from the default instance list.`,value:w.hidden,onChange:e=>{T({...w,hidden:e}),O(`meta.hidden`,{value:e,original:D.hidden,valid:!0})}}),(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`dashmeta-notes`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Notes`}),(0,u.jsx)(`textarea`,{id:`dashmeta-notes`,rows:4,value:w.notes,placeholder:`Free-form notes only the dashboard remembers.`,onChange:e=>{let t=e.target.value;T({...w,notes:t}),O(`meta.notes`,{value:t,original:D.notes||``,valid:!0})}})]})]})}):(0,u.jsx)(a,{label:`Loading dashboard registry…`})}var g={readInstance:p,toDraft:m,META_KEYS:f};export{g as __test__,h 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-DZ1lls_P.js";import{a as s,s as c}from"./fields-E1L8aEhU.js";var l=e(t(),1),u=n();function d(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async patch(e,t){let n=await fetch(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PATCH ${e} → ${n.status}`);return await n.json()}}}var f=[`meta.label`,`meta.group`,`meta.favorite`,`meta.hidden`,`meta.notes`];function p(e,t){let n=e?.registry?.instances?.[String(t)];return{label:n?.label??null,favorite:n?.favorite===!0,group:n?.group??null,hidden:n?.hidden===!0,notes:n?.notes??null}}function m(e){return{label:e.label||``,group:e.group||``,favorite:e.favorite,hidden:e.hidden,notes:e.notes||``}}function h({port:e,client:t,dirty:n,registerSave:h,managerClient:g}){let{state:_,refresh:v,setData:y}=r(t,`__dashboard_meta_unused__`,[e]),[b,x]=(0,l.useState)(null),[S,C]=(0,l.useState)(null),[w,T]=(0,l.useState)({label:``,group:``,favorite:!1,hidden:!1,notes:``}),E=g||d();(0,l.useEffect)(()=>{let t=!1;return C(null),E.get(`/api/dashboard/registry`).then(n=>{t||(x(n),T(m(p(n,e))))}).catch(e=>{t||C(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[e]),(0,l.useEffect)(()=>()=>{for(let e of f)n.remove(e)},[n]);let D=p(b,e),O=(0,l.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,l.useCallback)(async()=>{let t=w.label.trim()||null,r=w.group.trim()||null,i=w.notes.trim()||null,a={instances:{[String(e)]:{label:t,group:r,favorite:w.favorite,hidden:w.hidden,notes:i}}},o=await E.patch(`/api/dashboard/registry`,a);x(o),T(m(p(o,e)));for(let e of f)n.remove(e)},[w,E,n,e]);return(0,l.useEffect)(()=>{if(h)return h(k),()=>h(null)},[h,k]),S?(0,u.jsx)(o,{message:S}):b?(0,u.jsx)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),k()},children:(0,u.jsxs)(i,{title:`Dashboard meta`,hint:`Manager-side metadata for this instance. Stored in the dashboard registry.`,children:[(0,u.jsx)(c,{id:`dashmeta-label`,label:`Label`,value:w.label,placeholder:`(unset — falls back to home folder name)`,onChange:e=>{T({...w,label:e}),O(`meta.label`,{value:e,original:D.label||``,valid:!0})}}),(0,u.jsx)(c,{id:`dashmeta-group`,label:`Group`,value:w.group,placeholder:`e.g. work, personal`,onChange:e=>{T({...w,group:e}),O(`meta.group`,{value:e,original:D.group||``,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-favorite`,label:`Pin favorite`,value:w.favorite,onChange:e=>{T({...w,favorite:e}),O(`meta.favorite`,{value:e,original:D.favorite,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-hidden`,label:`Hide by default`,description:`Hide from the default instance list.`,value:w.hidden,onChange:e=>{T({...w,hidden:e}),O(`meta.hidden`,{value:e,original:D.hidden,valid:!0})}}),(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`dashmeta-notes`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Notes`}),(0,u.jsx)(`textarea`,{id:`dashmeta-notes`,rows:4,value:w.notes,placeholder:`Free-form notes only the dashboard remembers.`,onChange:e=>{let t=e.target.value;T({...w,notes:t}),O(`meta.notes`,{value:t,original:D.notes||``,valid:!0})}})]})]})}):(0,u.jsx)(a,{label:`Loading dashboard registry…`})}var g={readInstance:p,toDraft:m,META_KEYS:f};export{g as __test__,h as default};
@@ -1 +1 @@
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,r as l}from"./fields-BwOMlwS0.js";import{t as u}from"./path-utils-CHwADH-r.js";var d=e(t(),1),f=n(),p=[{value:`jaw-default`,label:`Jaw default`},{value:`jaw-dark`,label:`Jaw dark`},{value:`jaw-light`,label:`Jaw light`},{value:`jaw-contrast`,label:`High contrast`}],m=[{value:`default`,label:`default`},{value:`vim`,label:`vim`},{value:`emacs`,label:`emacs`}],h=[{value:`summary`,label:`summary`},{value:`unified`,label:`unified`},{value:`side-by-side`,label:`side-by-side`}],g=[`tui.themeSeed`,`tui.keymapPreset`,`tui.pasteCollapseLines`,`tui.pasteCollapseChars`,`tui.diffStyle`];function _({port:e,client:t,dirty:n,registerSave:_}){let{state:v,refresh:y,setData:b}=r(t,`/api/settings`),[x,S]=(0,d.useState)({});(0,d.useEffect)(()=>{v.kind===`ready`&&S({...v.data.tui||{}})},[v]),(0,d.useEffect)(()=>()=>{for(let e of g)n.remove(e)},[n]);let C=(0,d.useCallback)((e,t)=>n.set(e,t),[n]),w=(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(),S({...a.tui||{}}),b(a),await y()},[t,n,y,b]);if((0,d.useEffect)(()=>{if(_)return _(w),()=>_(null)},[_,w]),v.kind===`loading`)return(0,f.jsx)(a,{});if(v.kind===`offline`)return(0,f.jsx)(o,{port:e});if(v.kind===`error`)return(0,f.jsx)(s,{message:v.message});let T=v.data.tui||{};return(0,f.jsx)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),w()},children:(0,f.jsxs)(i,{title:`Display`,hint:`TUI options applied to /i/${e}.`,children:[(0,f.jsx)(c,{id:`display-themeSeed`,label:`Theme seed`,value:x.themeSeed??T.themeSeed??`jaw-default`,options:p,onChange:e=>{S({...x,themeSeed:e}),C(`tui.themeSeed`,{value:e,original:T.themeSeed??`jaw-default`,valid:!0})}}),(0,f.jsx)(c,{id:`display-keymapPreset`,label:`Keymap preset`,value:x.keymapPreset??T.keymapPreset??`default`,options:m,onChange:e=>{S({...x,keymapPreset:e}),C(`tui.keymapPreset`,{value:e,original:T.keymapPreset??`default`,valid:!0})}}),(0,f.jsx)(l,{id:`display-pasteCollapseLines`,label:`Paste collapse — lines`,value:x.pasteCollapseLines??T.pasteCollapseLines??2,min:0,step:1,onChange:e=>{S({...x,pasteCollapseLines:e}),C(`tui.pasteCollapseLines`,{value:e,original:T.pasteCollapseLines??2,valid:Number.isFinite(e)&&e>=0})}}),(0,f.jsx)(l,{id:`display-pasteCollapseChars`,label:`Paste collapse — chars`,value:x.pasteCollapseChars??T.pasteCollapseChars??160,min:0,step:10,onChange:e=>{S({...x,pasteCollapseChars:e}),C(`tui.pasteCollapseChars`,{value:e,original:T.pasteCollapseChars??160,valid:Number.isFinite(e)&&e>=0})}}),(0,f.jsx)(c,{id:`display-diffStyle`,label:`Diff style`,value:x.diffStyle??T.diffStyle??`summary`,options:h,onChange:e=>{S({...x,diffStyle:e}),C(`tui.diffStyle`,{value:e,original:T.diffStyle??`summary`,valid:!0})}})]})})}export{_ 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-DZ1lls_P.js";import{i as c,r as l}from"./fields-E1L8aEhU.js";import{t as u}from"./path-utils-QbjARuCC.js";var d=e(t(),1),f=n(),p=[{value:`jaw-default`,label:`Jaw default`},{value:`jaw-dark`,label:`Jaw dark`},{value:`jaw-light`,label:`Jaw light`},{value:`jaw-contrast`,label:`High contrast`}],m=[{value:`default`,label:`default`},{value:`vim`,label:`vim`},{value:`emacs`,label:`emacs`}],h=[{value:`summary`,label:`summary`},{value:`unified`,label:`unified`},{value:`side-by-side`,label:`side-by-side`}],g=[`tui.themeSeed`,`tui.keymapPreset`,`tui.pasteCollapseLines`,`tui.pasteCollapseChars`,`tui.diffStyle`];function _({port:e,client:t,dirty:n,registerSave:_}){let{state:v,refresh:y,setData:b}=r(t,`/api/settings`),[x,S]=(0,d.useState)({});(0,d.useEffect)(()=>{v.kind===`ready`&&S({...v.data.tui||{}})},[v]),(0,d.useEffect)(()=>()=>{for(let e of g)n.remove(e)},[n]);let C=(0,d.useCallback)((e,t)=>n.set(e,t),[n]),w=(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(),S({...a.tui||{}}),b(a),await y()},[t,n,y,b]);if((0,d.useEffect)(()=>{if(_)return _(w),()=>_(null)},[_,w]),v.kind===`loading`)return(0,f.jsx)(a,{});if(v.kind===`offline`)return(0,f.jsx)(o,{port:e});if(v.kind===`error`)return(0,f.jsx)(s,{message:v.message});let T=v.data.tui||{};return(0,f.jsx)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),w()},children:(0,f.jsxs)(i,{title:`Display`,hint:`TUI options applied to /i/${e}.`,children:[(0,f.jsx)(c,{id:`display-themeSeed`,label:`Theme seed`,value:x.themeSeed??T.themeSeed??`jaw-default`,options:p,onChange:e=>{S({...x,themeSeed:e}),C(`tui.themeSeed`,{value:e,original:T.themeSeed??`jaw-default`,valid:!0})}}),(0,f.jsx)(c,{id:`display-keymapPreset`,label:`Keymap preset`,value:x.keymapPreset??T.keymapPreset??`default`,options:m,onChange:e=>{S({...x,keymapPreset:e}),C(`tui.keymapPreset`,{value:e,original:T.keymapPreset??`default`,valid:!0})}}),(0,f.jsx)(l,{id:`display-pasteCollapseLines`,label:`Paste collapse — lines`,value:x.pasteCollapseLines??T.pasteCollapseLines??2,min:0,step:1,onChange:e=>{S({...x,pasteCollapseLines:e}),C(`tui.pasteCollapseLines`,{value:e,original:T.pasteCollapseLines??2,valid:Number.isFinite(e)&&e>=0})}}),(0,f.jsx)(l,{id:`display-pasteCollapseChars`,label:`Paste collapse — chars`,value:x.pasteCollapseChars??T.pasteCollapseChars??160,min:0,step:10,onChange:e=>{S({...x,pasteCollapseChars:e}),C(`tui.pasteCollapseChars`,{value:e,original:T.pasteCollapseChars??160,valid:Number.isFinite(e)&&e>=0})}}),(0,f.jsx)(c,{id:`display-diffStyle`,label:`Diff style`,value:x.diffStyle??T.diffStyle??`summary`,options:h,onChange:e=>{S({...x,diffStyle:e}),C(`tui.diffStyle`,{value:e,original:T.diffStyle??`summary`,valid:!0})}})]})})}export{_ as default};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{c as r}from"./api-FOqKQ9fm.js";import{t as i}from"./desktop-bridge-DtydAvqu.js";import{t as a}from"./copy-text-Dy0kfmb9.js";import{n as o,t as s}from"./MarkdownRenderer-Cd3kkg_s.js";var c=e(t(),1),l=n(),u={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,py:`python`,rs:`rust`,go:`go`,java:`java`,cpp:`cpp`,c:`cpp`,css:`css`,html:`html`,htm:`html`,xml:`xml`,json:`json`,yaml:`yaml`,yml:`yaml`,sh:`bash`,bash:`bash`,sql:`sql`};function d(e){let t=e.split(`.`).pop()?.toLowerCase();return t?u[t]??null:null}function f(e){return/\.(md|mdx)$/i.test(e)}function p(e){return/\.html?$/i.test(e)}function m(){return i()?.folder??null}function h(e){return!e.startsWith(`/`)&&!/^[a-zA-Z]:[\\/]/.test(e)}function g(e){return e.split(/[\\/]/).pop()||e}function _(e){return[`<!doctype html>`,`<html>`,`<head>`,`<meta http-equiv="Content-Security-Policy" content="${[`default-src 'none'`,`img-src data: blob:`,`style-src 'unsafe-inline' data:`,`font-src data:`,`script-src 'none'`,`connect-src 'none'`,`object-src 'none'`,`base-uri 'none'`,`form-action 'none'`,`frame-src 'none'`].join(`; `)}">`,`<meta charset="utf-8">`,`<style>html,body{margin:0;min-height:100%;}body{font-family:system-ui,sans-serif;}</style>`,`</head>`,`<body>`,e,`</body>`,`</html>`].join(``)}function v(e){return(0,l.jsx)(`iframe`,{className:`doc-html-preview`,title:e.title,sandbox:``,referrerPolicy:`no-referrer`,srcDoc:_(e.content)})}function y(e){if(e.raw)return(0,l.jsx)(`pre`,{className:`doc-pre`,children:(0,l.jsx)(`code`,{children:e.content})});if(f(e.filePath))return(0,l.jsx)(`article`,{className:`notes-preview doc-markdown`,children:(0,l.jsx)(s,{markdown:e.content,onLocalFileOpen:e.onOpenLocalFile})});if(p(e.filePath))return(0,l.jsx)(v,{content:e.content,title:`Rendered preview of ${g(e.filePath)}`});let t=d(e.filePath);return t?(0,l.jsx)(o,{code:e.content,language:t}):(0,l.jsx)(`pre`,{className:`doc-pre`,children:(0,l.jsx)(`code`,{children:e.content})})}function b(e){let t=m(),n=(0,c.useRef)(null),i=(0,c.useRef)(null),o=(0,c.useRef)(void 0),s=(0,c.useRef)({filePath:``,scrollTop:0}),u=(0,c.useRef)(null),d=(0,c.useRef)(null),[f,p]=(0,c.useState)(``),[_,v]=(0,c.useState)(null),[b,x]=(0,c.useState)(!1),[S,C]=(0,c.useState)(!1),[w,T]=(0,c.useState)(!1),[E,D]=(0,c.useState)(null),O=(0,c.useCallback)(e=>{d.current!==null&&window.clearTimeout(d.current),D(e),d.current=window.setTimeout(()=>{d.current=null,D(t=>t===e?null:t)},1200)},[]),k=(0,c.useCallback)(()=>{let t=e.filePath;t&&a(t).then(e=>{e.ok?O(`path`):console.error(`[doc-panel:path-copy]`,e.error)})},[O,e.filePath]),A=(0,c.useCallback)(()=>{a(f).then(e=>{e.ok?O(`content`):console.error(`[doc-panel:content-copy]`,e.error)})},[f,O]),j=(0,c.useCallback)(e=>{u.current!==null&&cancelAnimationFrame(u.current);let t=s.current.filePath===e?s.current.scrollTop:0;u.current=requestAnimationFrame(()=>{u.current=null;let r=n.current;!r||s.current.filePath!==e||(r.scrollTop=t)})},[]);return(0,c.useEffect)(()=>{if(!e.filePath){p(``),v(null),C(!1),D(null),T(!1);return}let n=e.filePath,i=!1;return D(null),T(!1),(async()=>{if(t){let e=await t.readFile(n);if(!e.ok&&e.error?.includes(`path not allowed`)){if(await t.getDefaultRoot(),i)return;e=await t.readFile(n)}if(i)return;e.ok&&e.content!==void 0?(x(e.binary===!0),C(e.truncated===!0&&e.binary!==!0),p(e.binary||e.truncated?``:e.content),v(null)):v(e.error??`Failed to read file`);return}if(!h(n)){i||v(`Document preview for arbitrary local files requires Electron desktop app`);return}try{let e=await r(n);if(i)return;x(!1),C(!1),p(e.content),v(null)}catch(e){i||v(e.message)}})(),()=>{i=!0}},[t,e.filePath]),(0,c.useLayoutEffect)(()=>{let t=n.current,r=e.filePath;if(!(!t||!r)){if(o.current!==r){o.current=r,t.scrollTop=0,s.current={filePath:r,scrollTop:0};return}j(r)}},[f,e.filePath,j]),(0,c.useEffect)(()=>{let t=i.current,n=e.filePath;if(!t||!n)return;let r=new ResizeObserver(()=>{s.current.filePath===n&&j(n)});return r.observe(t),()=>{r.disconnect()}},[f,e.filePath,j]),(0,c.useEffect)(()=>()=>{u.current!==null&&(cancelAnimationFrame(u.current),u.current=null),d.current!==null&&(window.clearTimeout(d.current),d.current=null)},[]),e.filePath?_?(0,l.jsx)(`div`,{className:`doc-panel doc-error`,children:_}):b?(0,l.jsx)(`div`,{className:`doc-panel doc-binary`,children:`Binary file — cannot preview`}):S?(0,l.jsx)(`div`,{className:`doc-panel doc-binary`,children:`File too large to preview (512KB cap) — open it in an editor instead.`}):(0,l.jsxs)(`div`,{className:`doc-panel`,children:[(0,l.jsxs)(`div`,{className:`doc-toolbar`,children:[(0,l.jsx)(`span`,{className:`doc-file-name`,title:e.filePath,children:g(e.filePath)}),(0,l.jsxs)(`div`,{className:`doc-toolbar-actions`,"aria-label":`Document actions`,children:[(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button ${w?`is-active`:``}`,"aria-pressed":w,title:`Show raw source`,onClick:()=>T(e=>!e),children:`Raw`}),(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button`,title:`Copy full path`,onClick:k,children:E===`path`?`Copied`:`Path`}),(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button`,title:`Copy file content`,onClick:A,children:E===`content`?`Copied`:`Copy`})]})]}),(0,l.jsx)(`div`,{className:`doc-content`,ref:n,onScroll:t=>{e.filePath&&(s.current={filePath:e.filePath,scrollTop:t.currentTarget.scrollTop})},children:(0,l.jsx)(`div`,{className:`doc-content-body`,ref:i,children:(0,l.jsx)(y,{filePath:e.filePath,content:f,raw:w,onOpenLocalFile:e.onOpenLocalFile})})})]}):(0,l.jsx)(`div`,{className:`doc-panel doc-empty`,children:`Open Folders and select a file to preview it here.`})}export{b as DocPanel};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{c as r}from"./api-FOqKQ9fm.js";import{t as i}from"./desktop-bridge-DtydAvqu.js";import{t as a}from"./copy-text-Dy0kfmb9.js";import{n as o,t as s}from"./MarkdownRenderer-DZ-hWmCB.js";var c=e(t(),1),l=n(),u={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,py:`python`,rs:`rust`,go:`go`,java:`java`,cpp:`cpp`,c:`cpp`,css:`css`,html:`html`,htm:`html`,xml:`xml`,json:`json`,yaml:`yaml`,yml:`yaml`,sh:`bash`,bash:`bash`,sql:`sql`};function d(e){let t=e.split(`.`).pop()?.toLowerCase();return t?u[t]??null:null}function f(e){return/\.(md|mdx)$/i.test(e)}function p(e){return/\.html?$/i.test(e)}function m(){return i()?.folder??null}function h(e){return!e.startsWith(`/`)&&!/^[a-zA-Z]:[\\/]/.test(e)}function g(e){return e.split(/[\\/]/).pop()||e}function _(e){return[`<!doctype html>`,`<html>`,`<head>`,`<meta http-equiv="Content-Security-Policy" content="${[`default-src 'none'`,`img-src data: blob:`,`style-src 'unsafe-inline' data:`,`font-src data:`,`script-src 'none'`,`connect-src 'none'`,`object-src 'none'`,`base-uri 'none'`,`form-action 'none'`,`frame-src 'none'`].join(`; `)}">`,`<meta charset="utf-8">`,`<style>html,body{margin:0;min-height:100%;}body{font-family:system-ui,sans-serif;}</style>`,`</head>`,`<body>`,e,`</body>`,`</html>`].join(``)}function v(e){return(0,l.jsx)(`iframe`,{className:`doc-html-preview`,title:e.title,sandbox:``,referrerPolicy:`no-referrer`,srcDoc:_(e.content)})}function y(e){if(e.raw)return(0,l.jsx)(`pre`,{className:`doc-pre`,children:(0,l.jsx)(`code`,{children:e.content})});if(f(e.filePath))return(0,l.jsx)(`article`,{className:`notes-preview doc-markdown`,children:(0,l.jsx)(s,{markdown:e.content,onLocalFileOpen:e.onOpenLocalFile})});if(p(e.filePath))return(0,l.jsx)(v,{content:e.content,title:`Rendered preview of ${g(e.filePath)}`});let t=d(e.filePath);return t?(0,l.jsx)(o,{code:e.content,language:t}):(0,l.jsx)(`pre`,{className:`doc-pre`,children:(0,l.jsx)(`code`,{children:e.content})})}function b(e){let t=m(),n=(0,c.useRef)(null),i=(0,c.useRef)(null),o=(0,c.useRef)(void 0),s=(0,c.useRef)({filePath:``,scrollTop:0}),u=(0,c.useRef)(null),d=(0,c.useRef)(null),[f,p]=(0,c.useState)(``),[_,v]=(0,c.useState)(null),[b,x]=(0,c.useState)(!1),[S,C]=(0,c.useState)(!1),[w,T]=(0,c.useState)(!1),[E,D]=(0,c.useState)(null),O=(0,c.useCallback)(e=>{d.current!==null&&window.clearTimeout(d.current),D(e),d.current=window.setTimeout(()=>{d.current=null,D(t=>t===e?null:t)},1200)},[]),k=(0,c.useCallback)(()=>{let t=e.filePath;t&&a(t).then(e=>{e.ok?O(`path`):console.error(`[doc-panel:path-copy]`,e.error)})},[O,e.filePath]),A=(0,c.useCallback)(()=>{a(f).then(e=>{e.ok?O(`content`):console.error(`[doc-panel:content-copy]`,e.error)})},[f,O]),j=(0,c.useCallback)(e=>{u.current!==null&&cancelAnimationFrame(u.current);let t=s.current.filePath===e?s.current.scrollTop:0;u.current=requestAnimationFrame(()=>{u.current=null;let r=n.current;!r||s.current.filePath!==e||(r.scrollTop=t)})},[]);return(0,c.useEffect)(()=>{if(!e.filePath){p(``),v(null),C(!1),D(null),T(!1);return}let n=e.filePath,i=!1;return D(null),T(!1),(async()=>{if(t){let e=await t.readFile(n);if(!e.ok&&e.error?.includes(`path not allowed`)){if(await t.getDefaultRoot(),i)return;e=await t.readFile(n)}if(i)return;e.ok&&e.content!==void 0?(x(e.binary===!0),C(e.truncated===!0&&e.binary!==!0),p(e.binary||e.truncated?``:e.content),v(null)):v(e.error??`Failed to read file`);return}if(!h(n)){i||v(`Document preview for arbitrary local files requires Electron desktop app`);return}try{let e=await r(n);if(i)return;x(!1),C(!1),p(e.content),v(null)}catch(e){i||v(e.message)}})(),()=>{i=!0}},[t,e.filePath]),(0,c.useLayoutEffect)(()=>{let t=n.current,r=e.filePath;if(!(!t||!r)){if(o.current!==r){o.current=r,t.scrollTop=0,s.current={filePath:r,scrollTop:0};return}j(r)}},[f,e.filePath,j]),(0,c.useEffect)(()=>{let t=i.current,n=e.filePath;if(!t||!n)return;let r=new ResizeObserver(()=>{s.current.filePath===n&&j(n)});return r.observe(t),()=>{r.disconnect()}},[f,e.filePath,j]),(0,c.useEffect)(()=>()=>{u.current!==null&&(cancelAnimationFrame(u.current),u.current=null),d.current!==null&&(window.clearTimeout(d.current),d.current=null)},[]),e.filePath?_?(0,l.jsx)(`div`,{className:`doc-panel doc-error`,children:_}):b?(0,l.jsx)(`div`,{className:`doc-panel doc-binary`,children:`Binary file — cannot preview`}):S?(0,l.jsx)(`div`,{className:`doc-panel doc-binary`,children:`File too large to preview (512KB cap) — open it in an editor instead.`}):(0,l.jsxs)(`div`,{className:`doc-panel`,children:[(0,l.jsxs)(`div`,{className:`doc-toolbar`,children:[(0,l.jsx)(`span`,{className:`doc-file-name`,title:e.filePath,children:g(e.filePath)}),(0,l.jsxs)(`div`,{className:`doc-toolbar-actions`,"aria-label":`Document actions`,children:[(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button ${w?`is-active`:``}`,"aria-pressed":w,title:`Show raw source`,onClick:()=>T(e=>!e),children:`Raw`}),(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button`,title:`Copy full path`,onClick:k,children:E===`path`?`Copied`:`Path`}),(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button`,title:`Copy file content`,onClick:A,children:E===`content`?`Copied`:`Copy`})]})]}),(0,l.jsx)(`div`,{className:`doc-content`,ref:n,onScroll:t=>{e.filePath&&(s.current={filePath:e.filePath,scrollTop:t.currentTarget.scrollTop})},children:(0,l.jsx)(`div`,{className:`doc-content-body`,ref:i,children:(0,l.jsx)(y,{filePath:e.filePath,content:f,raw:w,onOpenLocalFile:e.onOpenLocalFile})})})]}):(0,l.jsx)(`div`,{className:`doc-panel doc-empty`,children:`Open Folders and select a file to preview it here.`})}export{b as DocPanel};