@xopcai/xopc 0.0.77 → 0.0.78

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 (126) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js → agents-Bh_9-1KB.js} +2 -2
  4. package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js.map → agents-Bh_9-1KB.js.map} +1 -1
  5. package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js → apps-page-CB5anZpc.js} +2 -2
  6. package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js.map → apps-page-CB5anZpc.js.map} +1 -1
  7. package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js → channels-settings-Bt1sprhC.js} +2 -2
  8. package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js.map → channels-settings-Bt1sprhC.js.map} +1 -1
  9. package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js → channels-status-swr-Crgak3fg.js} +2 -2
  10. package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js.map → channels-status-swr-Crgak3fg.js.map} +1 -1
  11. package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js → cron-api-CzJGvQQ7.js} +2 -2
  12. package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js.map → cron-api-CzJGvQQ7.js.map} +1 -1
  13. package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js → cron-page-BoNRJNVV.js} +2 -2
  14. package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js.map → cron-page-BoNRJNVV.js.map} +1 -1
  15. package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js → dist-a-eaOUvs.js} +2 -2
  16. package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js.map → dist-a-eaOUvs.js.map} +1 -1
  17. package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js → extension-debug-page-D-O1XjAa.js} +2 -2
  18. package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js.map → extension-debug-page-D-O1XjAa.js.map} +1 -1
  19. package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js → extension-page-B2VpqBTH.js} +2 -2
  20. package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js.map → extension-page-B2VpqBTH.js.map} +1 -1
  21. package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js → extension-settings-page-CmBcQfeO.js} +2 -2
  22. package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js.map → extension-settings-page-CmBcQfeO.js.map} +1 -1
  23. package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js → fetch-EGO9T3MN.js} +3 -3
  24. package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js.map → fetch-EGO9T3MN.js.map} +1 -1
  25. package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js → field-primitives-Bh7G1y4D.js} +2 -2
  26. package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js.map → field-primitives-Bh7G1y4D.js.map} +1 -1
  27. package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js → heartbeat-config-api-DxpIEZNs.js} +2 -2
  28. package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js.map → heartbeat-config-api-DxpIEZNs.js.map} +1 -1
  29. package/dist/gateway/static/root/assets/{index-ChiUhJAs.js → index-Dxy9ZCtC.js} +5 -5
  30. package/dist/gateway/static/root/assets/{index-ChiUhJAs.js.map → index-Dxy9ZCtC.js.map} +1 -1
  31. package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js → logs-page-Dw58E2GE.js} +2 -2
  32. package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js.map → logs-page-Dw58E2GE.js.map} +1 -1
  33. package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js → sessions-page-CPkhCy57.js} +2 -2
  34. package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js.map → sessions-page-CPkhCy57.js.map} +1 -1
  35. package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js → settings-form-section-DLZDVMEf.js} +2 -2
  36. package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js.map → settings-form-section-DLZDVMEf.js.map} +1 -1
  37. package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js +4 -0
  38. package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js.map +1 -0
  39. package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js → skills-page-DueZ9Qfg.js} +2 -2
  40. package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js.map → skills-page-DueZ9Qfg.js.map} +1 -1
  41. package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js → theme-store-CWPq9gW1.js} +2 -2
  42. package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js.map → theme-store-CWPq9gW1.js.map} +1 -1
  43. package/dist/gateway/static/root/assets/{utils-COYrNFF7.js → utils-Cnix55r9.js} +2 -2
  44. package/dist/gateway/static/root/assets/{utils-COYrNFF7.js.map → utils-Cnix55r9.js.map} +1 -1
  45. package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js → voice-api-key-field-BR3Ut06g.js} +2 -2
  46. package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js.map → voice-api-key-field-BR3Ut06g.js.map} +1 -1
  47. package/dist/gateway/static/root/index.html +3 -3
  48. package/dist/package.js +1 -1
  49. package/dist/src/browser/providers/browser-ext-install.js +23 -4
  50. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  51. package/dist/src/cli/commands/tunnel.js +4 -5
  52. package/dist/src/cli/commands/tunnel.js.map +1 -1
  53. package/dist/src/config/index.js +2 -2
  54. package/dist/src/config/rules.js +0 -5
  55. package/dist/src/config/rules.js.map +1 -1
  56. package/dist/src/config/schema.d.ts +0 -27
  57. package/dist/src/config/schema.js +4 -18
  58. package/dist/src/config/schema.js.map +1 -1
  59. package/dist/src/gateway/auth-rate-limit.d.ts +2 -0
  60. package/dist/src/gateway/auth-rate-limit.js +9 -3
  61. package/dist/src/gateway/auth-rate-limit.js.map +1 -1
  62. package/dist/src/gateway/hono/app.js +19 -13
  63. package/dist/src/gateway/hono/app.js.map +1 -1
  64. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
  65. package/dist/src/gateway/hono/lib/config-payload.js +1 -2
  66. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  67. package/dist/src/gateway/hono/routes/tunnel.js +32 -30
  68. package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
  69. package/dist/src/gateway/host.d.ts +24 -0
  70. package/dist/src/gateway/host.js +33 -1
  71. package/dist/src/gateway/host.js.map +1 -1
  72. package/dist/src/gateway/index.d.ts +1 -1
  73. package/dist/src/gateway/index.js +2 -2
  74. package/dist/src/gateway/runtime-config.js +1 -8
  75. package/dist/src/gateway/runtime-config.js.map +1 -1
  76. package/dist/src/gateway/security/audit.js +4 -4
  77. package/dist/src/gateway/security/audit.js.map +1 -1
  78. package/dist/src/gateway/server.js +2 -3
  79. package/dist/src/gateway/server.js.map +1 -1
  80. package/dist/src/gateway/service/types.d.ts +2 -0
  81. package/dist/src/gateway/service.d.ts +2 -0
  82. package/dist/src/gateway/service.js +7 -2
  83. package/dist/src/gateway/service.js.map +1 -1
  84. package/dist/src/tunnel/frp-subdomain-host.d.ts +2 -0
  85. package/dist/src/tunnel/frp-subdomain-host.js +15 -0
  86. package/dist/src/tunnel/frp-subdomain-host.js.map +1 -0
  87. package/dist/src/tunnel/gateway-lifecycle.d.ts +0 -4
  88. package/dist/src/tunnel/gateway-lifecycle.js +9 -11
  89. package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
  90. package/dist/src/tunnel/index.d.ts +2 -4
  91. package/dist/src/tunnel/index.js +2 -4
  92. package/dist/src/tunnel/pair-url.js +7 -1
  93. package/dist/src/tunnel/pair-url.js.map +1 -1
  94. package/dist/src/tunnel/pairing.d.ts +13 -0
  95. package/dist/src/tunnel/pairing.js +48 -1
  96. package/dist/src/tunnel/pairing.js.map +1 -1
  97. package/dist/src/tunnel/tunnel-config.js +2 -16
  98. package/dist/src/tunnel/tunnel-config.js.map +1 -1
  99. package/dist/src/tunnel/tunnel-service.d.ts +1 -10
  100. package/dist/src/tunnel/tunnel-service.js +7 -60
  101. package/dist/src/tunnel/tunnel-service.js.map +1 -1
  102. package/dist/src/tunnel/tunnel-types.d.ts +3 -18
  103. package/dist/src/tunnel/well-known.d.ts +5 -0
  104. package/dist/src/tunnel/well-known.js +2 -1
  105. package/dist/src/tunnel/well-known.js.map +1 -1
  106. package/package.json +2 -2
  107. package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js +0 -4
  108. package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js.map +0 -1
  109. package/dist/src/tunnel/acme-cert-store.d.ts +0 -34
  110. package/dist/src/tunnel/acme-cert-store.js +0 -184
  111. package/dist/src/tunnel/acme-cert-store.js.map +0 -1
  112. package/dist/src/tunnel/acme-client.d.ts +0 -50
  113. package/dist/src/tunnel/acme-client.js +0 -473
  114. package/dist/src/tunnel/acme-client.js.map +0 -1
  115. package/dist/src/tunnel/acme-crypto.d.ts +0 -25
  116. package/dist/src/tunnel/acme-crypto.js +0 -58
  117. package/dist/src/tunnel/acme-crypto.js.map +0 -1
  118. package/dist/src/tunnel/acme-csr.d.ts +0 -5
  119. package/dist/src/tunnel/acme-csr.js +0 -48
  120. package/dist/src/tunnel/acme-csr.js.map +0 -1
  121. package/dist/src/tunnel/tls-server.d.ts +0 -14
  122. package/dist/src/tunnel/tls-server.js +0 -126
  123. package/dist/src/tunnel/tls-server.js.map +0 -1
  124. package/dist/src/tunnel/tunnel-e2e-config.d.ts +0 -11
  125. package/dist/src/tunnel/tunnel-e2e-config.js +0 -29
  126. package/dist/src/tunnel/tunnel-e2e-config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"channels-settings-CYMmWDtP.js","names":["SessionChannelIcon","Button","ChannelsSettingsMessages","cn","interaction","ChannelHubCardVm","ChannelHubPrimaryAction","ChannelHubStatus","statusPillClass","status","statusLabel","ch","hubStatusRunning","hubStatusOffline","hubStatusDisabled","hubStatusNotConfigured","primaryActionLabel","action","hubSetupButton","hubFixButton","hubPairingButton","hubManageButton","ChannelHubCardProps","channelId","title","subtitle","vm","toggleDisabled","onOpen","onReviewPairing","onToggle","next","Promise","ChannelHubCard","t0","$","_c","showToggle","configured","manageable","t1","Symbol","for","t2","t3","t4","t5","t6","t7","t8","t9","t10","pendingPairing","press","e","stopPropagation","hubPairingPendingBadge","replace","String","t11","t12","t13","enabled","enableChannelAria","e_0","t14","t15","t16","summaryLines","length","map","_temp","t17","t18","primaryAction","t19","t20","t21","line","ChannelHubCard","ChannelHubCardVm","ChannelCatalogEntry","ChannelsSettingsMessages","OpenChannelOptions","scrollToPairing","ChannelsHubGrid","props","$","_c","catalog","cards","ch","saving","onOpenChannel","onToggleChannel","t0","Map","map","_temp","cardById","t1","t2","entry","vm","get","id","openPairing","title","subtitle","manageable","next","c","cn","skelBar","ChannelHubCardSkeleton","$","_c","t0","Symbol","for","t1","t2","t3","ChannelsHubGridSkeleton","count","undefined","Array","from","length","_temp","_","i","Dialog","X","ReactNode","Button","cn","ghostIconButton","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","ChannelSettingsPresentation","channelSettingsShellContentClass","presentation","wide","ChannelSettingsShell","t0","$","_c","open","onOpenChange","title","description","srTitle","srDescription","closeAriaLabel","children","footer","t1","headerExtra","undefined","isDrawer","t2","Symbol","for","t3","t4","t5","t6","t7","t8","t9","t10","_temp","t11","e","preventDefault","ExternalLink","Button","ChannelsSettingsMessages","StoredLanguage","docsGuidePageUrl","ChannelSettingsShell","ChannelCatalogEntry","ChannelHubStatus","ExtensionChannelDetailPanel","t0","$","_c","open","onOpenChange","entry","vm","ch","language","statusLabel","status","hubStatusRunning","hubStatusOffline","hubStatusDisabled","hubStatusNotConfigured","t1","title","t2","subtitle","t3","modalCancel","t4","t5","t6","t7","hubExtensionManageHint","t8","hubExtensionStatusLabel","t9","t10","t11","hubExtensionEnabledLabel","t12","enabled","hubExtensionYes","hubExtensionNo","t13","t14","t15","hubExtensionConnectedLabel","t16","connected","t17","t18","t19","t20","t21","Symbol","for","t22","hubViewDocs","t23","t24","RefreshCw","memo","Button","ChannelsSettingsMessages","cn","ChannelsPageHeaderActions","t0","$","_c","ch","refreshing","saveOk","onRefresh","t1","saved","t2","refresh","t3","t4","t5","t6","t7","t8","agentListDisplayName","nativeSelectMaxWidthClass","cn","messages","ChannelsSettingsMessages","useLocaleStore","FieldHint","FieldLabel","channelsInputClassName","ChannelAgentRoutingBlock","t0","$","_c","accountIds","routes","defaultAgentId","agentItems","disabled","onChange","ch","language","_temp","t1","t2","t3","t4","t5","Symbol","for","bb0","agentsMessages","agentsSettings","length","opts","id","t6","agentRoutingTitle","t7","agentRoutingHint","map","acc","agentRoutingAccountLabel","agentRoutingAgentLabel","toLowerCase","e","target","value","ag","s","feishuRoutingAccountIds","telegramRoutingAccountIds","weixinRoutingAccountIds","DmPolicy","FeishuConfig","TelegramConfig","WeixinConfig","PairingPolicyChannelId","defaultChannelDmPolicy","channel","resolveAccountDmPolicy","topDmPolicy","account","dmPolicy","listPairingAccountIds","config","ids","length","isPairingAccountEnabled","enabled","resolveAccountDmPolicyForConfig","accountId","acc","accounts","channelUsesPairingPolicy","accountIds","some","id","hubPairingPendingCount","params","configured","channelEnabled","usesPairing","summaryPending","useCallback","Dispatch","SetStateAction","approveChannelPairingBySender","approveChannelPairingRequest","PairingChannelId","PairingFeedback","kind","text","useChannelPairingApprove","params","channel","accountId","messages","pairingApproved","pairingInvalid","mutate","Promise","setCodeBySender","Record","setBusySender","setFeedback","finishApprove","senderId","run","result","prev","next","replace","e","msg","Error","message","includes","approveByCode","code","trimmed","trim","toUpperCase","quickApprove","useEffect","CHANNEL_PAIRING_SSE_EVENTS","const","CHANNEL_PAIRING_SUMMARY_SWR_KEY","subscribeChannelPairingSse","onRefresh","handler","name","window","addEventListener","removeEventListener","useChannelPairingSseRefresh","t0","$","_c","enabled","undefined","t1","t2","PairingChannelId","channelPairingSectionDomId","channel","scrollToChannelPairingSection","requestAnimationFrame","document","getElementById","scrollIntoView","behavior","block","RefreshCw","X","useCallback","useMemo","useReducer","useRef","useState","SetStateAction","useSWR","Button","dismissChannelPairingPending","fetchChannelPairingState","revokeChannelPairingPaired","PairingChannelId","FeishuConfig","TelegramConfig","WeixinConfig","ChannelsSettingsMessages","cn","FieldHint","FieldLabel","channelUsesPairingPolicy","resolveAccountDmPolicyForConfig","useChannelPairingApprove","useChannelPairingSseRefresh","channelsInputClassName","channelPairingSectionDomId","formatRelativeExpiry","iso","locale","ms","Date","parse","now","Number","isFinite","absMin","Math","max","round","abs","startsWith","hours","pairingSwrKey","channel","accountId","PairingUiState","codeBySender","Record","busySender","dismissingId","revokingId","feedback","kind","text","emptyPairingUiState","PairingUiAction","type","updater","prev","value","senderId","pairingUiReducer","state","action","next","ChannelPairingSection","accountIds","channelConfig","active","ch","language","onPairedChange","pairedCredentialCount","inputClassName","resolvedAccountIds","ids","filter","Boolean","length","sectionUsesPairing","resolveAccountDmPolicy","setAccountId","prevResolvedAccountIds","setPrevResolvedAccountIds","includes","ui","dispatchUi","accountDmPolicy","accountPairingActive","onPairedChangeRef","current","swrKey","data","error","isLoading","mutate","revalidateOnFocus","onSuccess","result","paired","fromCredentials","refresh","pairedCred","setCodeBySender","setBusySender","setFeedback","approveByCode","quickApprove","messages","pairingApproved","pairingInvalid","dismiss","pairingDismissed","replace","e","msg","Error","message","pairingDismissError","revoke","pairingRevoked","pairingRevokeError","pairingTitle","pairingAccountNotPairing","pairingAccountLabel","target","map","id","pending","pairedConfig","fromConfig","pairingSubtitle","pairingRefresh","pairingSetupHint","pairingLoadError","pairingPendingTitle","pairingQuickApproveHint","pairingPendingEmpty","item","code","busy","dismissing","isStale","pairingStaleItem","pairingExpiresHint","expiresAt","codeLast4","pairingCodeHint","pairingApproving","pairingQuickApprove","pairingCodePlaceholder","toUpperCase","key","trim","pairingApprove","pairingDismissing","pairingDismiss","pairedTitle","pairedFromConfig","join","pairedEmpty","pairedFromCredentials","pairingRevokeAria","Check","ChevronDown","Copy","Eye","EyeOff","useEffect","useRef","Button","ChatAgentsPayload","feishuRoutingAccountIds","ChannelsSettingsState","DmPolicy","GroupPolicy","ChannelsSettingsMessages","cn","ChannelAgentRoutingBlock","ChannelPairingSection","FieldHint","FieldLabel","SelectField","scrollToChannelPairingSection","channelsInputClassName","joinAllowFrom","parseIdList","FeishuMoreSettingsSection","t0","$","_c","ch","form","baseline","showFeishuSecret","setShowFeishuSecret","showFeishuWebhookSecrets","setShowFeishuWebhookSecrets","feishuCopied","feishuWebhookCopied","copyFeishuSecret","copyFeishuWebhookConfig","updateFeishu","updateChannelAgentRoute","feishuAccountsDraft","setFeishuAccountsDraft","feishuAccountsError","onFeishuAccountsBlur","dmOpts","groupOpts","chatAgents","saving","language","dialogOpen","pairingFocus","t1","undefined","fs","feishu","t2","feishuAccountIds","t3","length","resolvedFeishuAccounts","feishuBaselineSecret","appSecret","t4","Boolean","String","trim","feishuSecretDisplayLocked","detailsRef","t5","t6","details","current","open","timer","window","setTimeout","_temp","clearTimeout","t7","Symbol","for","t8","advancedShow","t9","feishuAdvancedHint","t10","e","enabled","target","checked","t11","t12","enableFeishuAria","t13","t14","v","dmPolicy","t15","t16","t17","t18","feishuAppId","t19","t20","e_0","appId","value","t21","t22","feishuAppIdDesc","t23","t24","t25","feishuAppSecret","t26","t27","t28","repeat","Math","max","t29","e_1","t30","t31","copied","copy","t32","_temp2","t33","t34","hide","show","t35","t36","t37","feishuAppSecretDesc","t38","t39","feishuDomain","t40","t41","domain","t42","e_2","t43","t44","t45","t46","t47","connectionMode","t48","t49","e_3","t50","t51","t52","t53","connectionModeDesc","t54","t55","t56","encryptKey","encryptKeyDesc","verificationToken","verificationTokenDesc","webhookHost","webhookPath","webhookPathDesc","webhookPort","webhookTitle","_temp3","e_4","e_5","e_6","e_7","Number","e_8","t57","renderMode","t58","t59","e_9","t60","t61","t62","t63","t64","t65","reactionNotifications","t66","t67","e_10","t68","t69","t70","t71","t72","t73","t74","e_11","streaming","t75","t76","enableStreaming","t77","groupPolicy","t78","t79","t80","e_12","t81","map","_temp4","t82","t83","t84","e_13","requireMention","t85","t86","t87","allowFromDm","t88","t89","allowFrom","t90","e_14","t91","t92","allowFromDmDesc","t93","t94","allowFromGroups","t95","t96","groupAllowFrom","t97","e_15","t98","t99","allowFromGroupsDesc","t100","t101","historyLimit","t102","t103","t104","e_16","t105","t106","t107","textChunkLimit","t108","t109","t110","e_17","t111","t112","t113","t114","feishuToolsTitle","t115","feishuToolDoc","t116","feishuToolWiki","t117","feishuToolDrive","t118","feishuToolPerm","t119","feishuToolBitable","t120","feishuToolScopes","t121","t122","const","t123","tools","t124","key","label","e_18","feishuToolsDesc","t125","t126","feishuActionsTitle","t127","actions","reactions","t128","e_19","t129","t130","feishuActionReactions","t131","t132","t133","items","t134","acc","aid","t135","channelAgentRoutes","defaultAgentId","t136","multiAccountJson","t137","t138","e_20","t139","t140","multiAccountJsonDesc","t141","t142","t143","t144","opt","s_0","s","Button","ChannelsSettingsMessages","ChannelsSettingsDialogFooter","t0","$","_c","ch","dirty","saving","onCancel","onDiscard","onSave","showCancel","t1","undefined","t2","unsavedHint","t3","modalCancel","t4","t5","discard","t6","t7","t8","save","t9","t10","t11","ExternalLink","QRCode","useCallback","useEffect","useRef","useState","ReactNode","Button","fetchFeishuSetupStart","fetchFeishuSetupStatus","ChannelsSettingsMessages","cn","interaction","useAsyncResource","ChannelsSettingsDialogFooter","ChannelSettingsShell","ChannelSettingsPresentation","FeishuDomain","QR_IMAGE_OPTIONS","width","margin","errorCorrectionLevel","const","color","dark","light","QrStartData","sessionKey","qrUrl","emptyQrStart","FeishuQrSetupSession","ch","onSetupSuccess","onOpenChange","closeOnSetupSuccess","moreSettings","result","appId","domain","openId","open","setDomain","generation","setGeneration","pollError","setPollError","onSetupSuccessRef","onOpenChangeRef","current","start","then","initial","errorData","data","busy","loading","startError","error","Error","message","String","startScan","d","g","cancelled","intervalId","poll","status","phase","undefined","window","clearInterval","setData","ok","e","setInterval","qrImage","toDataURL","enabled","Boolean","qrDataUrl","qrGenFailed","showQr","qrFrameLoading","feishuQrModalTitle","feishuQrModalSubtitle","feishuQrStarting","feishuQrScanHint","feishuQrEncoding","feishuQrImageError","feishuQrOpenLink","feishuRegionSwitchAria","press","feishuRegionChina","feishuRegionInternational","feishuQrRegenerate","FeishuQrSetupDialog","t0","$","_c","settingsDirty","t1","settingsSaving","t2","onSettingsDiscard","onSettingsSave","presentation","t3","t4","t5","t6","t7","feishuQrCloseAria","feishuSubtitle","feishuTitle","ChannelsSettingsMessages","cn","ChannelPairingSetupSteps","t0","$","_c","ch","usesPairing","tokenReady","pairingComplete","step1Done","step2Done","step1Current","step2Current","t1","t2","t3","t4","telegramSetupStepToken","t5","t6","t7","t8","t9","telegramSetupStepPairing","t10","t11","StepDot","done","current","index","String","ChannelsSettingsState","GroupPolicy","ReplyToMode","StreamMode","cn","ChannelsSettingsMessages","FieldHint","FieldLabel","SelectField","channelsInputClassName","joinAllowFrom","parseIdList","TelegramAdvanced","t0","$","_c","tg","updateTelegram","ch","groupOpts","replyOpts","streamOpts","tgAccountsDraft","setTgAccountsDraft","tgAccountsError","onTgAccountsBlur","t1","apiRoot","t2","Symbol","for","t3","e","target","value","t4","t5","t6","proxy","t7","t8","e_0","t9","t10","t11","v","groupPolicy","t12","t13","v_0","replyToMode","t14","t15","v_1","streamMode","t16","t17","allowFromGroups","t18","t19","groupAllowFrom","t20","e_1","t21","t22","t23","historyLimit","t24","t25","e_2","parseInt","t26","t27","t28","textChunkLimit","t29","t30","e_3","t31","t32","t33","t34","e_4","debug","checked","t35","t36","telegramDebug","t37","multiAccountJson","t38","t39","e_5","t40","t41","multiAccountJsonDesc","t42","t43","useEffect","useState","Check","ChevronDown","Copy","Eye","EyeOff","Button","ChatAgentsPayload","telegramRoutingAccountIds","emptyTelegramAccount","ChannelsSettingsState","DmPolicy","GroupPolicy","ReplyToMode","StreamMode","ChannelsSettingsMessages","cn","ChannelAgentRoutingBlock","ChannelPairingSection","ChannelPairingSetupSteps","channelUsesPairingPolicy","FieldHint","FieldLabel","SelectField","TelegramAdvanced","ChannelsSettingsDialogFooter","ChannelSettingsShell","ChannelSettingsPresentation","scrollToChannelPairingSection","channelsInputClassName","joinAllowFrom","parseIdList","telegramDefaultBotToken","TelegramChannelSettingsDialog","t0","$","_c","open","onOpenChange","presentation","t1","ch","form","baseline","tgAdvanced","setTgAdvanced","showToken","setShowToken","copied","copyToken","updateTelegram","updateChannelAgentRoute","tgAccountsDraft","setTgAccountsDraft","tgAccountsError","onTgAccountsBlur","dmOpts","groupOpts","replyOpts","streamOpts","chatAgents","saving","dirty","save","discard","language","scrollToPairingOnOpen","t2","closeOnSave","t3","undefined","tg","telegram","t4","tgBaselineToken","tgToken","telegramTokenDisplayLocked","Boolean","String","trim","pairedCredentialCount","setPairedCredentialCount","tokenReady","enabled","t5","tgAccountIds","t6","t7","timer","window","setTimeout","_temp","clearTimeout","t8","telegramTitle","t9","telegramSubtitle","t10","t11","t12","modalCancel","t13","t14","t15","ok","t16","t17","e","target","checked","t18","t19","enableTelegramAria","t20","t21","Symbol","for","t22","telegramToken","t23","t24","t25","repeat","Math","max","length","t26","accounts","e_0","prev","default","accountId","botToken","value","t27","t28","copy","t29","_temp2","t30","t31","hide","show","t32","t33","t34","telegramTokenDesc","t35","t36","t37","t38","t39","v","dmPolicy","t40","t41","t42","allowFromDm","t43","t44","allowFrom","t45","e_1","t46","t47","allowFromDmDesc","t48","t49","t50","items","t51","acc","aid","t52","channelAgentRoutes","defaultAgentId","t53","_temp3","t54","t55","t56","t57","advancedHide","advancedShow","t58","t59","t60","t61","a","s","ManageableChannelId","BuiltinChannelCatalogEntry","id","titleKey","subtitleKey","BUILTIN_CHANNEL_CATALOG","const","fetchJson","apiUrl","ChannelHubMetaRow","id","label","description","manageable","order","channelsMetaSwrKey","fetchChannelsMeta","Promise","data","ok","payload","channels","useMemo","useSWR","ChannelsSettingsMessages","BUILTIN_CHANNEL_CATALOG","BuiltinChannelCatalogEntry","channelsMetaSwrKey","fetchChannelsMeta","ChannelHubMetaRow","BUILTIN_CHANNEL_BY_ID","Map","map","entry","id","const","BUILTIN_CHANNEL_ORDER_BY_ID","index","ChannelCatalogEntry","title","subtitle","manageable","order","resolveBuiltinCopy","ch","titleKey","subtitleKey","mergeChannelCatalog","metaRows","byId","row","builtin","get","copy","label","description","hubExtensionSubtitle","set","size","has","Array","from","values","sort","a","b","localeCompare","useChannelCatalog","hasToken","$","_c","t0","t1","Symbol","for","revalidateOnFocus","data","error","isLoading","mutate","t2","entries","t3","ChannelStatus","feishuRoutingAccountIds","telegramRoutingAccountIds","weixinRoutingAccountIds","ChannelPairingSummaryPayload","ChannelsSettingsState","ChannelsSettingsMessages","isManageableChannelId","ManageableChannelId","channelUsesPairingPolicy","hubPairingPendingCount","isFeishuConfigured","isTelegramConfigured","isWeixinConfigured","ChannelHubId","ChannelHubStatus","ChannelHubPrimaryAction","ChannelHubCardVm","id","manageable","configured","enabled","connected","status","summaryLines","pendingPairing","primaryAction","resolveChannelConnected","statuses","find","s","name","readChannelEnabled","isExtensionChannelConfigured","config","channels","undefined","section","Array","isArray","Record","Object","keys","length","resolveChannelHubStatus","resolvePrimaryAction","dmPolicyLabel","ch","policy","dm","accountCountLine","count","hubSummaryAccountCount","replace","String","buildTelegramSummaryLines","form","tg","telegram","lines","hubSummaryDm","dmPolicy","push","buildWeixinSummaryLines","wx","weixin","hubSummaryStream","stream","streamMode","buildFeishuSummaryLines","fs","feishu","mode","connectionMode","hubConnectionWebhook","hubConnectionWebsocket","hubSummaryConnection","pairingSlice","summary","buildManageableChannelHubCardVm","params","pairingSummary","channelConfig","usesPairing","channelEnabled","summaryPending","pending","buildExtensionChannelHubCardVm","hubExtensionConfiguredHint","buildChannelHubCardForCatalogId","buildChannelHubCardsForCatalog","catalogIds","map","useEffect","ChannelStatus","CHANNEL_STATUS_SSE_EVENT","ChannelStatusSsePayload","channels","parseChannelStatusSseDetail","detail","Array","isArray","subscribeChannelStatusSse","onEvent","handler","e","Event","CustomEvent","window","addEventListener","removeEventListener","useChannelStatusSse","t0","$","_c","enabled","undefined","t1","t2","useSWR","useCallback","fetchChannelPairingSummary","ChannelPairingSummaryPayload","CHANNEL_PAIRING_SUMMARY_SWR_KEY","useChannelPairingSseRefresh","EMPTY_SUMMARY","telegram","pending","stale","atCapacity","feishu","weixin","useChannelPairingSummary","enabled","$","_c","t0","Symbol","for","revalidateOnFocus","data","mutate","isLoading","error","t1","refresh","t2","t3","summary","useSWR","useCallback","useMemo","ChannelsSettingsState","channelsStatusSwrKey","fetchChannelsStatusSwr","useGatewayConfigSwr","ChannelsSettingsMessages","buildChannelHubCardsForCatalog","ChannelHubCardVm","parseChannelStatusSseDetail","useChannelStatusSse","useChannelPairingSummary","useChannelCatalog","STATUS_POLL_MS","useChannelsHubData","params","$","_c","hasToken","form","ch","data","cfgData","mutate","mutateConfig","entries","catalogEntries","mutateCatalog","t0","t1","Symbol","for","revalidateOnFocus","refreshInterval","t2","mutateStatus","t3","undefined","statuses","t4","detail","next","revalidate","applyStatusFromSse","summary","pairingSummary","refresh","refreshPairing","t5","map","_temp","catalogIds","configRoot","payload","config","t6","bb0","length","t7","cards","refreshAll","t8","e","id","useCallback","useMemo","useReducer","useRef","useState","useSWR","fetchChatAgents","useGatewayConfigSwr","normalizeChannelsFromConfig","patchChannelsSettings","ChannelsSettingsState","DmPolicy","GroupPolicy","ReplyToMode","StreamMode","messages","copyTextToClipboard","useGatewayStore","useLocaleStore","telegramDefaultBotToken","ChannelsPanelFormState","form","baseline","tgAccountsDraft","tgAccountsError","wxAccountsDraft","wxAccountsError","feishuAccountsDraft","feishuAccountsError","emptyPanelFormState","accountsDraftsFrom","state","Pick","JSON","stringify","telegram","accounts","weixin","feishu","PanelFormAction","type","payload","patch","Partial","channel","accountId","agentId","value","panelFormReducer","action","snapshot","structuredClone","restored","k","channelAgentRoutes","trim","toLowerCase","useChannelsSettingsPanel","language","s","m","ch","channelsSettings","token","st","hasToken","Boolean","dirtyRef","panelForm","dispatchPanelForm","syncSource","setSyncSource","parsed","saving","setSaving","error","setError","saveOk","setSaveOk","weixinSuccessBanner","setWeixinSuccessBanner","feishuSetupSuccessBanner","setFeishuSetupSuccessBanner","tgAdvanced","setTgAdvanced","showToken","setShowToken","showFeishuSecret","setShowFeishuSecret","showFeishuWebhookSecrets","setShowFeishuWebhookSecrets","copied","setCopied","feishuCopied","setFeishuCopied","feishuWebhookCopied","setFeishuWebhookCopied","data","chatAgents","revalidateOnFocus","cfgData","swrError","isLoading","mutate","config","undefined","current","dirty","loading","fetchError","Error","message","String","updateChannelAgentRoute","updateTelegram","updateWeixin","updateFeishu","save","Promise","next","window","setTimeout","e","saveError","discard","toggleChannelEnabled","which","enabled","prev","synced","copyToken","t","ok","handleFeishuQrSetupSuccess","result","appId","domain","openId","feishuQrSetupSuccess","copyFeishuSecret","appSecret","copyFeishuWebhookConfig","fs","connectionMode","verificationToken","encryptKey","webhookHost","webhookPort","webhookPath","setTgAccountsDraft","setWxAccountsDraft","setFeishuAccountsDraft","onTgAccountsBlur","raw","parsedJson","parse","Array","isArray","jsonObjectAccounts","err","jsonInvalid","onWxAccountsBlur","onFeishuAccountsBlur","dmOpts","map","label","policy","dm","groupOpts","group","replyOpts","reply","streamOpts","stream","ExternalLink","QRCode","useCallback","useEffect","useRef","useState","ReactNode","Button","fetchWeixinGatewayQrLoginStart","fetchWeixinGatewayQrLoginStatus","ChannelsSettingsMessages","cn","useAsyncResource","ChannelsSettingsDialogFooter","ChannelSettingsShell","ChannelSettingsPresentation","QR_IMAGE_OPTIONS","width","margin","errorCorrectionLevel","const","color","dark","light","QrStartData","sessionKey","qrcodeUrl","emptyQrStart","WeixinQrLoginSession","ch","onLoginSuccess","onOpenChange","closeOnLoginSuccess","moreSettings","Promise","open","generation","setGeneration","hint","setHint","pollError","setPollError","onLoginSuccessRef","onOpenChangeRef","current","start","then","r","initial","errorData","data","busy","loading","startError","error","Error","message","String","restart","g","cancelled","intervalId","poll","st","phase","setData","prev","qrStatus","weixinQrLoginScanned","undefined","window","clearInterval","ok","e","setInterval","qrImage","toDataURL","enabled","Boolean","qrDataUrl","qrGenFailed","showQr","qrFrameLoading","weixinQrModalTitle","weixinQrModalSubtitle","weixinQrLoginBusy","weixinQrEncoding","weixinQrImageError","weixinQrOpenLink","weixinQrRegenerate","WeixinQrLoginDialog","t0","$","_c","settingsDirty","t1","settingsSaving","t2","onSettingsDiscard","onSettingsSave","presentation","t3","t4","t5","t6","t7","weixinQrModalCloseAria","weixinSubtitle","weixinTitle","ChannelsSettingsState","StreamMode","weixinRoutingAccountIds","cn","ChannelsSettingsMessages","ChannelAgentRoutingBlock","FieldHint","FieldLabel","SelectField","channelsInputClassName","WeixinAdvanced","t0","$","_c","wx","updateWeixin","ch","streamOpts","wxAccountsDraft","setWxAccountsDraft","wxAccountsError","onWxAccountsBlur","channelAgentRoutesWx","defaultAgentId","agentItems","onAgentRouteChange","routingDisabled","t1","weixinAllowFrom","t2","Symbol","for","t3","allowFrom","join","t4","e","target","value","split","flatMap","_temp","t5","t6","weixinAllowFromDesc","t7","t8","v_0","streamMode","v","t9","t10","historyLimit","t11","t12","e_0","parseInt","t13","t14","t15","textChunkLimit","t16","t17","e_1","t18","t19","t20","t21","weixinRouteTag","t22","t23","e_2","routeTag","t24","routeTagPlaceholder","t25","weixinRouteTagDesc","t26","t27","e_3","debug","checked","t28","t29","weixinDebug","t30","weixinDebugDesc","t31","weixinAccountsJson","t32","t33","e_4","t34","t35","weixinAccountsJsonDesc","t36","t37","t38","t39","s","trim","ChevronDown","useEffect","useRef","ChatAgentsPayload","ChannelsSettingsState","DmPolicy","StreamMode","weixinRoutingAccountIds","ChannelsSettingsMessages","ChannelPairingSection","SelectField","scrollToChannelPairingSection","WeixinAdvanced","WeixinMoreSettingsSection","t0","$","_c","ch","wx","updateWeixin","dmOpts","streamOpts","wxAccountsDraft","setWxAccountsDraft","wxAccountsError","onWxAccountsBlur","form","chatAgents","onAgentRouteChange","saving","language","dialogOpen","pairingFocus","t1","undefined","t2","wxAccountIds","t3","length","resolvedWxAccounts","detailsRef","t4","t5","details","current","open","timer","window","setTimeout","_temp","clearTimeout","t6","Symbol","for","t7","advancedShow","t8","weixinAdvancedHint","t9","e","enabled","target","checked","t10","t11","enableWeixinAria","t12","t13","v","dmPolicy","t14","t15","t16","items","t17","channelAgentRoutes","weixin","defaultAgentId","t18","t19","ExternalLink","useCallback","useEffect","useLayoutEffect","useMemo","useState","useNavigate","useParams","useSearchParams","Button","docsGuidePageUrl","ChannelsSettingsMessages","usePageHeaderStore","ChannelsHubGrid","OpenChannelOptions","ChannelsHubGridSkeleton","CHANNELS_HUB_PATH","channelDetailPath","isManageableChannelId","normalizeChannelRouteId","ExtensionChannelDetailPanel","ChannelsPageHeaderActions","FeishuMoreSettingsSection","FeishuQrSetupDialog","TelegramChannelSettingsDialog","useChannelCatalog","useChannelsHubData","useChannelsSettingsPanel","WeixinQrLoginDialog","WeixinMoreSettingsSection","ChannelsSettingsPanel","navigate","channelId","routeChannelId","searchParams","ctx","language","m","ch","hasToken","loading","fetchError","mutate","form","baseline","dirty","saving","error","saveOk","weixinSuccessBanner","setWeixinSuccessBanner","feishuSetupSuccessBanner","tgAdvanced","setTgAdvanced","showToken","setShowToken","showFeishuSecret","setShowFeishuSecret","showFeishuWebhookSecrets","setShowFeishuWebhookSecrets","copied","feishuCopied","feishuWebhookCopied","tgAccountsDraft","setTgAccountsDraft","tgAccountsError","wxAccountsDraft","setWxAccountsDraft","wxAccountsError","feishuAccountsDraft","setFeishuAccountsDraft","feishuAccountsError","chatAgents","updateChannelAgentRoute","updateTelegram","updateWeixin","updateFeishu","save","discard","toggleChannelEnabled","copyToken","handleFeishuQrSetupSuccess","copyFeishuSecret","copyFeishuWebhookConfig","onTgAccountsBlur","onWxAccountsBlur","onFeishuAccountsBlur","dmOpts","groupOpts","replyOpts","streamOpts","refreshing","setRefreshing","entries","catalogEntries","catalogById","Map","map","e","id","activeChannelId","scrollToPairing","get","detailOpen","Boolean","has","cards","refreshAll","activeEntry","undefined","activeCard","find","c","length","replace","openChannel","opts","pairing","closeChannel","handleWeixinOpenChange","nextOpen","handleWeixinLoginSuccess","weixinQrLoginSuccess","window","setTimeout","handleRefresh","settingsSections","channels","needToken","loadError","retry","wx","weixin","pairingFocusWeixin","pairingFocusFeishu","weixinMoreSettings","acc","aid","feishuMoreSettings","subtitle","docsLink","Math","max","enabled","open","manageable","ChannelsPageHeaderRegistration","t0","$","_c","onRefresh","setPageHeader","_temp","clearPageHeader","_temp2","t1","channelsHeaderEnd","t2","t3","startExtra","main","end","s_0","s"],"sources":["../../../../../web/src/features/settings/channels/channel-hub-card.tsx","../../../../../web/src/features/settings/channels/channels-hub-grid.tsx","../../../../../web/src/features/settings/channels/channels-hub-card-skeleton.tsx","../../../../../web/src/features/settings/channels/channel-settings-shell.tsx","../../../../../web/src/features/settings/channels/extension-channel-detail-panel.tsx","../../../../../web/src/features/settings/channels/channels-page-header-actions.tsx","../../../../../web/src/features/settings/channels/channel-agent-routing-block.tsx","../../../../../web/src/features/settings/channels/pairing-policy.ts","../../../../../web/src/features/settings/channels/use-channel-pairing-approve.ts","../../../../../web/src/features/settings/channels/use-channel-pairing-sse.ts","../../../../../web/src/features/settings/channels/pairing-scroll.ts","../../../../../web/src/features/settings/channels/channel-pairing-section.tsx","../../../../../web/src/features/settings/channels/feishu-more-settings-section.tsx","../../../../../web/src/features/settings/channels/channels-settings-dialog-footer.tsx","../../../../../web/src/features/settings/channels/feishu-qr-setup-dialog.tsx","../../../../../web/src/features/settings/channels/channel-pairing-setup-steps.tsx","../../../../../web/src/features/settings/channels/telegram-advanced.tsx","../../../../../web/src/features/settings/channels/telegram-channel-settings-dialog.tsx","../../../../../web/src/features/settings/channels/channel-catalog.ts","../../../../../web/src/features/settings/channels/channels-meta-api.ts","../../../../../web/src/features/settings/channels/use-channel-catalog.ts","../../../../../web/src/features/settings/channels/channel-hub-view-model.ts","../../../../../web/src/features/settings/channels/use-channel-status-sse.ts","../../../../../web/src/features/settings/channels/use-channel-pairing-summary.ts","../../../../../web/src/features/settings/channels/use-channels-hub-data.ts","../../../../../web/src/features/settings/channels/use-channels-settings-panel.ts","../../../../../web/src/features/settings/channels/weixin-qr-login-dialog.tsx","../../../../../web/src/features/settings/channels/weixin-advanced.tsx","../../../../../web/src/features/settings/channels/weixin-more-settings-section.tsx","../../../../../web/src/features/settings/channels/channels-settings-panel.tsx"],"sourcesContent":["import { SessionChannelIcon } from '@/components/shell/session-channel-icon';\nimport { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { interaction } from '@/lib/interaction';\n\nimport type { ChannelHubCardVm, ChannelHubPrimaryAction, ChannelHubStatus } from './channel-hub-view-model';\n\nfunction statusPillClass(status: ChannelHubStatus): string {\n switch (status) {\n case 'running':\n return 'bg-success-soft text-success';\n case 'offline':\n return 'bg-amber-100 text-amber-900 dark:bg-amber-950/60 dark:text-amber-200';\n case 'disabled':\n return 'bg-surface-hover text-fg-muted';\n default:\n return 'bg-surface-hover text-fg-muted';\n }\n}\n\nfunction statusLabel(ch: ChannelsSettingsMessages, status: ChannelHubStatus): string {\n switch (status) {\n case 'running':\n return ch.hubStatusRunning;\n case 'offline':\n return ch.hubStatusOffline;\n case 'disabled':\n return ch.hubStatusDisabled;\n default:\n return ch.hubStatusNotConfigured;\n }\n}\n\nfunction primaryActionLabel(ch: ChannelsSettingsMessages, action: ChannelHubPrimaryAction): string {\n switch (action) {\n case 'setup':\n return ch.hubSetupButton;\n case 'fix':\n return ch.hubFixButton;\n case 'pairing':\n return ch.hubPairingButton;\n default:\n return ch.hubManageButton;\n }\n}\n\nexport type ChannelHubCardProps = {\n channelId: string;\n title: string;\n subtitle: string;\n vm: ChannelHubCardVm;\n toggleDisabled: boolean;\n onOpen: () => void;\n onReviewPairing: () => void;\n onToggle: (next: boolean) => void | Promise<void>;\n ch: ChannelsSettingsMessages;\n};\n\nexport function ChannelHubCard({\n channelId,\n title,\n subtitle,\n vm,\n toggleDisabled,\n onOpen,\n onReviewPairing,\n onToggle,\n ch,\n}: ChannelHubCardProps) {\n const showToggle = vm.configured && vm.manageable;\n\n return (\n <article\n className={cn(\n 'flex h-full min-h-0 flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-panel p-4 shadow-sm transition-colors',\n 'hover:border-edge',\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div\n className={cn(\n 'flex size-11 shrink-0 items-center justify-center rounded-xl ring-1 ring-edge-subtle/40',\n vm.status === 'running' ? 'bg-accent-soft' : 'bg-surface-base',\n )}\n aria-hidden\n >\n <SessionChannelIcon sourceChannel={channelId} className=\"size-5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"text-sm font-semibold text-fg\">{title}</h2>\n <div className=\"mt-1 flex flex-wrap items-center gap-1.5\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium',\n statusPillClass(vm.status),\n )}\n >\n {statusLabel(ch, vm.status)}\n </span>\n {vm.pendingPairing > 0 ? (\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-900 dark:bg-amber-950/60 dark:text-amber-200',\n interaction.press,\n )}\n onClick={(e) => {\n e.stopPropagation();\n onReviewPairing();\n }}\n >\n {ch.hubPairingPendingBadge.replace('{{count}}', String(vm.pendingPairing))}\n </button>\n ) : null}\n </div>\n </div>\n {showToggle ? (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={vm.enabled}\n aria-label={`${title} — ${ch.enableChannelAria}`}\n disabled={toggleDisabled}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n interaction.press,\n vm.enabled ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n toggleDisabled && 'cursor-not-allowed opacity-50',\n )}\n onClick={(e) => {\n e.stopPropagation();\n void onToggle(!vm.enabled);\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n ) : null}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <p className=\"line-clamp-2 text-xs leading-relaxed text-fg-muted\">{subtitle}</p>\n {vm.summaryLines.length > 0 ? (\n <ul className=\"mt-1.5 space-y-0.5\">\n {vm.summaryLines.map((line) => (\n <li key={line} className=\"text-xs text-fg-muted\">\n {line}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n\n <div className=\"mt-auto\">\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"w-full\"\n onClick={() => {\n if (vm.manageable && (vm.primaryAction === 'pairing' || vm.pendingPairing > 0)) {\n onReviewPairing();\n return;\n }\n onOpen();\n }}\n >\n {primaryActionLabel(ch, vm.primaryAction)}\n </Button>\n </div>\n </article>\n );\n}\n","import { ChannelHubCard } from './channel-hub-card';\nimport type { ChannelHubCardVm } from './channel-hub-view-model';\nimport type { ChannelCatalogEntry } from './use-channel-catalog';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nexport type OpenChannelOptions = {\n scrollToPairing?: boolean;\n};\n\nexport function ChannelsHubGrid(props: {\n catalog: ChannelCatalogEntry[];\n cards: ChannelHubCardVm[];\n ch: ChannelsSettingsMessages;\n saving: boolean;\n onOpenChannel: (id: string, opts?: OpenChannelOptions) => void;\n onToggleChannel: (id: string, enabled: boolean) => void | Promise<void>;\n}) {\n const { catalog, cards, ch, saving, onOpenChannel, onToggleChannel } = props;\n\n const cardById = new Map(cards.map((c) => [c.id, c]));\n\n return (\n <ul\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-[repeat(auto-fill,minmax(280px,1fr))]\"\n role=\"list\"\n >\n {catalog.map((entry) => {\n const vm = cardById.get(entry.id);\n if (!vm) return null;\n const openPairing = () => onOpenChannel(entry.id, { scrollToPairing: true });\n return (\n <li key={entry.id} className=\"h-full min-h-0\">\n <ChannelHubCard\n channelId={entry.id}\n title={entry.title}\n subtitle={entry.subtitle}\n vm={vm}\n toggleDisabled={saving || !vm.manageable}\n onOpen={() => onOpenChannel(entry.id)}\n onReviewPairing={openPairing}\n onToggle={(next) => onToggleChannel(entry.id, next)}\n ch={ch}\n />\n </li>\n );\n })}\n </ul>\n );\n}\n","import { cn } from '@/lib/cn';\n\nconst skelBar =\n 'animate-pulse motion-reduce:animate-none rounded-md bg-surface-hover dark:bg-surface-active/50';\n\n/** Matches `ChannelHubCard` layout (icon + status + summary + CTA row). */\nfunction ChannelHubCardSkeleton() {\n return (\n <div\n className=\"flex h-full min-h-[13.5rem] flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-panel p-4 shadow-sm dark:border-edge-subtle\"\n aria-hidden\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn('size-11 shrink-0 rounded-xl', skelBar)} />\n <div className=\"min-w-0 flex-1 space-y-2\">\n <div className={cn('h-4 w-2/5', skelBar)} />\n <div className={cn('h-5 w-16 rounded-full', skelBar)} />\n </div>\n <div className={cn('h-6 w-10 shrink-0 rounded-full', skelBar)} />\n </div>\n <div className=\"space-y-2\">\n <div className={cn('h-3 w-full', skelBar)} />\n <div className={cn('h-3 w-[88%]', skelBar)} />\n </div>\n <div className=\"mt-auto\">\n <div className={cn('h-10 w-full rounded-lg', skelBar)} />\n </div>\n </div>\n );\n}\n\nexport function ChannelsHubGridSkeleton({ count = 3 }: { count?: number }) {\n return (\n <ul className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\" role=\"list\" aria-busy>\n {Array.from({ length: count }, (_, i) => (\n <li key={i} className=\"h-full min-h-0\">\n <ChannelHubCardSkeleton />\n </li>\n ))}\n </ul>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { ghostIconButton } from '@/lib/interaction';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\nexport type ChannelSettingsPresentation = 'modal' | 'drawer';\n\nfunction channelSettingsShellContentClass(\n presentation: ChannelSettingsPresentation,\n wide = false,\n): string {\n if (presentation === 'drawer') {\n return cn(\n 'xopc-drawer-right fixed right-0 top-0 flex size-full flex-col overflow-hidden border-l border-edge bg-surface-panel shadow-popover outline-none dark:border-edge',\n wide ? 'max-w-[36rem]' : 'max-w-xl',\n SETTINGS_SHELL_CONTENT_Z,\n );\n }\n return cn(\n 'fixed left-1/2 top-1/2 flex max-h-[min(90vh,52rem)] w-[min(calc(100%-2rem),32rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden',\n wide && 'max-h-[min(90vh,48rem)] w-[min(calc(100%-2rem),36rem)]',\n SETTINGS_SHELL_CONTENT_Z,\n 'rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none dark:border-edge',\n );\n}\n\nexport function ChannelSettingsShell({\n presentation,\n open,\n onOpenChange,\n title,\n description,\n srTitle,\n srDescription,\n closeAriaLabel,\n children,\n footer,\n wide = false,\n headerExtra,\n}: {\n presentation: ChannelSettingsPresentation;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n srTitle?: string;\n srDescription?: string;\n closeAriaLabel: string;\n children: ReactNode;\n footer?: ReactNode;\n wide?: boolean;\n headerExtra?: ReactNode;\n}) {\n const isDrawer = presentation === 'drawer';\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn(\n 'xopc-dialog-overlay fixed inset-0 bg-scrim backdrop-blur-[1px]',\n SETTINGS_SHELL_OVERLAY_Z,\n )}\n />\n <Dialog.Content\n className={channelSettingsShellContentClass(presentation, wide)}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {srTitle ? <Dialog.Title className=\"sr-only\">{srTitle}</Dialog.Title> : null}\n {srDescription ? <Dialog.Description className=\"sr-only\">{srDescription}</Dialog.Description> : null}\n\n {isDrawer ? (\n <div className=\"flex shrink-0 items-start justify-between gap-3 border-b border-edge px-4 py-3\">\n <div className=\"min-w-0 flex-1\">\n {title ? <div className=\"text-base font-semibold text-fg\">{title}</div> : null}\n {description ? <p className=\"mt-1 text-sm text-fg-muted\">{description}</p> : null}\n </div>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={closeAriaLabel}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n ) : (\n <>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n className={cn(\n ghostIconButton,\n 'absolute right-3 top-3 z-20 p-1.5 hover:bg-surface-hover',\n )}\n aria-label={closeAriaLabel}\n >\n <X className=\"size-4\" />\n </button>\n </Dialog.Close>\n {headerExtra}\n </>\n )}\n\n <div className={cn('min-h-0 flex-1 overflow-y-auto', isDrawer ? 'px-4 py-4' : 'p-6')}>{children}</div>\n {footer}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { ExternalLink } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { docsGuidePageUrl } from '@/navigation';\n\nimport { ChannelSettingsShell } from './channel-settings-shell';\nimport type { ChannelCatalogEntry } from './use-channel-catalog';\nimport type { ChannelHubStatus } from './channel-hub-view-model';\n\nexport function ExtensionChannelDetailPanel({\n open,\n onOpenChange,\n entry,\n vm,\n ch,\n language,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n entry: ChannelCatalogEntry;\n vm: { enabled: boolean; connected: boolean; status: ChannelHubStatus };\n ch: ChannelsSettingsMessages;\n language: StoredLanguage;\n}) {\n const statusLabel =\n vm.status === 'running'\n ? ch.hubStatusRunning\n : vm.status === 'offline'\n ? ch.hubStatusOffline\n : vm.status === 'disabled'\n ? ch.hubStatusDisabled\n : ch.hubStatusNotConfigured;\n\n return (\n <ChannelSettingsShell\n presentation=\"modal\"\n open={open}\n onOpenChange={onOpenChange}\n srTitle={entry.title}\n srDescription={entry.subtitle}\n closeAriaLabel={ch.modalCancel}\n headerExtra={\n <div className=\"border-b border-edge-subtle px-6 pb-4 pt-6 dark:border-edge-subtle\">\n <h2 className=\"text-lg font-semibold tracking-tight text-fg\">{entry.title}</h2>\n <p className=\"mt-1 text-sm text-fg-muted\">{entry.subtitle}</p>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <p className=\"text-sm text-fg-muted\">{ch.hubExtensionManageHint}</p>\n <dl className=\"grid gap-3 text-sm\">\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-fg-subtle\">{ch.hubExtensionStatusLabel}</dt>\n <dd className=\"mt-1 text-fg\">{statusLabel}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-fg-subtle\">{ch.hubExtensionEnabledLabel}</dt>\n <dd className=\"mt-1 text-fg\">{vm.enabled ? ch.hubExtensionYes : ch.hubExtensionNo}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-fg-subtle\">{ch.hubExtensionConnectedLabel}</dt>\n <dd className=\"mt-1 text-fg\">{vm.connected ? ch.hubExtensionYes : ch.hubExtensionNo}</dd>\n </div>\n </dl>\n <Button type=\"button\" variant=\"secondary\" asChild>\n <a href={docsGuidePageUrl(language, 'channels')} target=\"_blank\" rel=\"noreferrer\">\n {ch.hubViewDocs}\n <ExternalLink className=\"ml-2 size-3.5\" />\n </a>\n </Button>\n </div>\n </ChannelSettingsShell>\n );\n}\n","import { RefreshCw } from 'lucide-react';\nimport { memo } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nexport const ChannelsPageHeaderActions = memo(function ChannelsPageHeaderActions({\n ch,\n refreshing,\n saveOk,\n onRefresh,\n}: {\n ch: ChannelsSettingsMessages;\n refreshing: boolean;\n saveOk: boolean;\n onRefresh: () => void;\n}) {\n return (\n <div className=\"flex min-w-0 shrink-0 items-center justify-end gap-2\">\n {saveOk ? <span className=\"text-sm text-fg-muted\">{ch.saved}</span> : null}\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 p-0\"\n disabled={refreshing}\n title={ch.refresh}\n aria-label={ch.refresh}\n onClick={onRefresh}\n >\n <RefreshCw className={cn('size-4', refreshing && 'animate-spin')} aria-hidden />\n </Button>\n </div>\n );\n});\n","import { agentListDisplayName } from '@/features/settings/agents/agent-display-names';\nimport { nativeSelectMaxWidthClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages, type ChannelsSettingsMessages } from '@/i18n/messages';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nimport { FieldHint, FieldLabel } from './field-primitives';\nimport { channelsInputClassName } from './utils';\n\nexport function ChannelAgentRoutingBlock({\n accountIds,\n routes,\n defaultAgentId,\n agentItems,\n disabled,\n onChange,\n ch,\n}: {\n accountIds: string[];\n routes: Record<string, string>;\n defaultAgentId: string;\n agentItems: { id: string; name?: string }[];\n disabled?: boolean;\n onChange: (accountId: string, agentId: string) => void;\n ch: ChannelsSettingsMessages;\n}) {\n const language = useLocaleStore((s) => s.language);\n const agentsMessages = messages(language).agentsSettings;\n if (accountIds.length === 0) return null;\n const opts = agentItems.length > 0 ? agentItems : [{ id: defaultAgentId }];\n return (\n <div className=\"space-y-3 border-t border-edge-subtle pt-4 dark:border-edge\">\n <div>\n <FieldLabel>{ch.agentRoutingTitle}</FieldLabel>\n <FieldHint>{ch.agentRoutingHint}</FieldHint>\n </div>\n <div className=\"space-y-2\">\n {accountIds.map((acc) => (\n <div\n key={acc}\n className=\"grid grid-cols-1 items-start gap-2 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2.5 sm:grid-cols-2 sm:items-center dark:border-edge\"\n >\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-fg-muted\">{ch.agentRoutingAccountLabel}</p>\n <p className=\"mt-0.5 truncate font-mono text-sm text-fg\" title={acc}>\n {acc}\n </p>\n </div>\n <div className=\"min-w-0\">\n <label className=\"sr-only\" htmlFor={`agent-route-${acc}`}>\n {ch.agentRoutingAgentLabel}\n </label>\n <select\n id={`agent-route-${acc}`}\n className={cn(channelsInputClassName(), nativeSelectMaxWidthClass)}\n disabled={disabled}\n value={(routes[acc] ?? defaultAgentId).toLowerCase()}\n onChange={(e) => onChange(acc, e.target.value)}\n >\n {opts.map((ag) => (\n <option key={ag.id} value={ag.id}>\n {`${agentListDisplayName(ag, agentsMessages)} (${ag.id})`}\n </option>\n ))}\n </select>\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import {\n feishuRoutingAccountIds,\n telegramRoutingAccountIds,\n weixinRoutingAccountIds,\n} from '@/features/settings/channel-bindings-merge';\nimport type {\n DmPolicy,\n FeishuConfig,\n TelegramConfig,\n WeixinConfig,\n} from '@/features/settings/channels-settings.types';\n\nexport type PairingPolicyChannelId = 'telegram' | 'feishu' | 'weixin';\n\nfunction defaultChannelDmPolicy(channel: PairingPolicyChannelId): DmPolicy {\n return channel === 'telegram' ? 'pairing' : 'open';\n}\n\nexport function resolveAccountDmPolicy(\n channel: PairingPolicyChannelId,\n topDmPolicy: DmPolicy | undefined,\n account?: { dmPolicy?: DmPolicy },\n): DmPolicy {\n if (account?.dmPolicy) return account.dmPolicy;\n return topDmPolicy ?? defaultChannelDmPolicy(channel);\n}\n\nfunction listPairingAccountIds(\n channel: PairingPolicyChannelId,\n config: TelegramConfig | WeixinConfig | FeishuConfig,\n): string[] {\n if (channel === 'telegram') {\n const ids = telegramRoutingAccountIds(config);\n return ids.length > 0 ? ids : ['default'];\n }\n if (channel === 'weixin') {\n const ids = weixinRoutingAccountIds(config);\n return ids.length > 0 ? ids : ['default'];\n }\n const ids = feishuRoutingAccountIds(config);\n return ids.length > 0 ? ids : ['default'];\n}\n\nfunction isPairingAccountEnabled(account?: { enabled?: boolean }): boolean {\n return account?.enabled !== false;\n}\n\nexport function resolveAccountDmPolicyForConfig(\n channel: PairingPolicyChannelId,\n config: TelegramConfig | WeixinConfig | FeishuConfig,\n accountId: string,\n): DmPolicy {\n const acc = config.accounts?.[accountId];\n return resolveAccountDmPolicy(channel, config.dmPolicy, acc);\n}\n\n/** True when any enabled account uses pairing (matches gateway pairing-service). */\nexport function channelUsesPairingPolicy(\n channel: PairingPolicyChannelId,\n config: TelegramConfig | WeixinConfig | FeishuConfig,\n): boolean {\n const accountIds = listPairingAccountIds(channel, config);\n return accountIds.some((id) => {\n const acc = config.accounts?.[id];\n if (!isPairingAccountEnabled(acc)) return false;\n return resolveAccountDmPolicyForConfig(channel, config, id) === 'pairing';\n });\n}\n\n/** Hub badge: channel configured, enabled, pairing policy active. */\nexport function hubPairingPendingCount(params: {\n configured: boolean;\n channelEnabled: boolean;\n usesPairing: boolean;\n summaryPending: number;\n}): number {\n if (!params.configured || !params.channelEnabled || !params.usesPairing) return 0;\n return params.summaryPending;\n}\n","import { useCallback, type Dispatch, type SetStateAction } from 'react';\n\nimport {\n approveChannelPairingBySender,\n approveChannelPairingRequest,\n type PairingChannelId,\n} from '@/features/settings/channels-config-api';\n\nexport type PairingFeedback = { kind: 'ok' | 'err'; text: string } | null;\n\nexport function useChannelPairingApprove(params: {\n channel: PairingChannelId;\n accountId: string;\n messages: { pairingApproved: string; pairingInvalid: string };\n mutate: () => Promise<unknown>;\n setCodeBySender: Dispatch<SetStateAction<Record<string, string>>>;\n setBusySender: Dispatch<SetStateAction<string | null>>;\n setFeedback: Dispatch<SetStateAction<PairingFeedback>>;\n}) {\n const { channel, accountId, messages, mutate, setCodeBySender, setBusySender, setFeedback } = params;\n\n const finishApprove = useCallback(\n async (senderId: string, run: () => Promise<{ senderId: string }>) => {\n setBusySender(senderId);\n setFeedback(null);\n try {\n const result = await run();\n setCodeBySender((prev) => {\n const next = { ...prev };\n delete next[senderId];\n return next;\n });\n setFeedback({\n kind: 'ok',\n text: messages.pairingApproved.replace('{{id}}', result.senderId),\n });\n await mutate();\n } catch (e) {\n const msg = e instanceof Error ? e.message : messages.pairingInvalid;\n setFeedback({ kind: 'err', text: msg.includes('PAIRING') ? messages.pairingInvalid : msg });\n } finally {\n setBusySender(null);\n }\n },\n [messages.pairingApproved, messages.pairingInvalid, mutate, setBusySender, setCodeBySender, setFeedback],\n );\n\n const approveByCode = useCallback(\n (senderId: string, code: string) => {\n const trimmed = code.trim().toUpperCase();\n if (!trimmed) return;\n void finishApprove(senderId, () =>\n approveChannelPairingRequest({ channel, accountId, code: trimmed }),\n );\n },\n [accountId, channel, finishApprove],\n );\n\n const quickApprove = useCallback(\n (senderId: string) => {\n void finishApprove(senderId, () =>\n approveChannelPairingBySender({ channel, accountId, senderId }),\n );\n },\n [accountId, channel, finishApprove],\n );\n\n return { approveByCode, quickApprove };\n}\n","import { useEffect } from 'react';\n\nexport const CHANNEL_PAIRING_SSE_EVENTS = [\n 'channels-pairing-requested',\n 'channels-pairing-refreshed',\n 'channels-pairing-approved',\n 'channels-pairing-revoked',\n 'channels-pairing-dismissed',\n] as const;\n\nexport const CHANNEL_PAIRING_SUMMARY_SWR_KEY = 'channel-pairing-summary';\n\n/** Subscribe to gateway pairing SSE window events; returns unsubscribe. */\nexport function subscribeChannelPairingSse(onRefresh: () => void): () => void {\n const handler = () => onRefresh();\n for (const name of CHANNEL_PAIRING_SSE_EVENTS) {\n window.addEventListener(name, handler);\n }\n return () => {\n for (const name of CHANNEL_PAIRING_SSE_EVENTS) {\n window.removeEventListener(name, handler);\n }\n };\n}\n\n/** Revalidate pairing SWR keys when gateway broadcasts pairing SSE events. */\nexport function useChannelPairingSseRefresh(onRefresh: () => void, enabled = true): void {\n useEffect(() => {\n if (!enabled) return;\n return subscribeChannelPairingSse(onRefresh);\n }, [enabled, onRefresh]);\n}\n","import type { PairingChannelId } from '@/features/settings/channels-config-api';\n\nexport function channelPairingSectionDomId(channel: PairingChannelId): string {\n return `channel-pairing-${channel}`;\n}\n\nexport function scrollToChannelPairingSection(channel: PairingChannelId): void {\n requestAnimationFrame(() => {\n document.getElementById(channelPairingSectionDomId(channel))?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n });\n });\n}\n","import { RefreshCw, X } from 'lucide-react';\nimport { useCallback, useMemo, useReducer, useRef, useState, type SetStateAction } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport {\n dismissChannelPairingPending,\n fetchChannelPairingState,\n revokeChannelPairingPaired,\n type PairingChannelId,\n} from '@/features/settings/channels-config-api';\nimport type {\n FeishuConfig,\n TelegramConfig,\n WeixinConfig,\n} from '@/features/settings/channels-settings.types';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { FieldHint, FieldLabel } from './field-primitives';\nimport { channelUsesPairingPolicy, resolveAccountDmPolicyForConfig } from './pairing-policy';\nimport { useChannelPairingApprove } from './use-channel-pairing-approve';\nimport { useChannelPairingSseRefresh } from './use-channel-pairing-sse';\nimport { channelsInputClassName } from './utils';\nimport { channelPairingSectionDomId } from './pairing-scroll';\n\nfunction formatRelativeExpiry(iso: string, locale: string): string {\n const ms = Date.parse(iso) - Date.now();\n if (!Number.isFinite(ms)) return iso;\n const absMin = Math.max(1, Math.round(Math.abs(ms) / 60_000));\n if (ms <= 0) {\n return locale.startsWith('zh') ? '已过期' : 'expired';\n }\n if (absMin < 60) {\n return locale.startsWith('zh') ? `${absMin} 分钟后` : `in ${absMin} min`;\n }\n const hours = Math.round(absMin / 60);\n return locale.startsWith('zh') ? `${hours} 小时后` : `in ${hours} h`;\n}\n\nfunction pairingSwrKey(channel: PairingChannelId, accountId: string): string {\n return `channel-pairing-${channel}-${accountId}`;\n}\n\ntype PairingUiState = {\n codeBySender: Record<string, string>;\n busySender: string | null;\n dismissingId: string | null;\n revokingId: string | null;\n feedback: { kind: 'ok' | 'err'; text: string } | null;\n};\n\nconst emptyPairingUiState: PairingUiState = {\n codeBySender: {},\n busySender: null,\n dismissingId: null,\n revokingId: null,\n feedback: null,\n};\n\ntype PairingUiAction =\n | { type: 'setCodeBySender'; updater: (prev: Record<string, string>) => Record<string, string> }\n | { type: 'setBusySender'; value: string | null }\n | { type: 'setDismissingId'; value: string | null }\n | { type: 'setRevokingId'; value: string | null }\n | { type: 'setFeedback'; value: PairingUiState['feedback'] }\n | { type: 'clearSenderCode'; senderId: string };\n\nfunction pairingUiReducer(state: PairingUiState, action: PairingUiAction): PairingUiState {\n switch (action.type) {\n case 'setCodeBySender':\n return { ...state, codeBySender: action.updater(state.codeBySender) };\n case 'setBusySender':\n return { ...state, busySender: action.value };\n case 'setDismissingId':\n return { ...state, dismissingId: action.value };\n case 'setRevokingId':\n return { ...state, revokingId: action.value };\n case 'setFeedback':\n return { ...state, feedback: action.value };\n case 'clearSenderCode': {\n const next = { ...state.codeBySender };\n delete next[action.senderId];\n return { ...state, codeBySender: next };\n }\n }\n}\n\nexport function ChannelPairingSection({\n channel,\n accountIds,\n channelConfig,\n active,\n ch,\n language,\n onPairedChange,\n}: {\n channel: PairingChannelId;\n accountIds?: string[];\n channelConfig: TelegramConfig | WeixinConfig | FeishuConfig;\n active: boolean;\n ch: ChannelsSettingsMessages;\n language: string;\n onPairedChange?: (pairedCredentialCount: number) => void;\n}) {\n const inputClassName = channelsInputClassName;\n const resolvedAccountIds = useMemo(() => {\n const ids = (accountIds ?? ['default']).filter(Boolean);\n return ids.length > 0 ? ids : ['default'];\n }, [accountIds]);\n const sectionUsesPairing = useMemo(\n () => channelUsesPairingPolicy(channel, channelConfig),\n [channel, channelConfig],\n );\n const resolveAccountDmPolicy = useCallback(\n (accountId: string) => resolveAccountDmPolicyForConfig(channel, channelConfig, accountId),\n [channel, channelConfig],\n );\n\n const [accountId, setAccountId] = useState(resolvedAccountIds[0] ?? 'default');\n const [prevResolvedAccountIds, setPrevResolvedAccountIds] = useState(resolvedAccountIds);\n if (resolvedAccountIds !== prevResolvedAccountIds) {\n setPrevResolvedAccountIds(resolvedAccountIds);\n if (!resolvedAccountIds.includes(accountId)) {\n setAccountId(resolvedAccountIds[0] ?? 'default');\n }\n }\n\n const [ui, dispatchUi] = useReducer(pairingUiReducer, emptyPairingUiState);\n const { codeBySender, busySender, dismissingId, revokingId, feedback } = ui;\n\n const accountDmPolicy = resolveAccountDmPolicy(accountId);\n const accountPairingActive = accountDmPolicy === 'pairing';\n\n const onPairedChangeRef = useRef(onPairedChange);\n onPairedChangeRef.current = onPairedChange;\n\n const swrKey = active && sectionUsesPairing && accountPairingActive ? pairingSwrKey(channel, accountId) : null;\n const { data, error, isLoading, mutate } = useSWR(\n swrKey,\n () => fetchChannelPairingState(channel, accountId),\n {\n revalidateOnFocus: true,\n onSuccess: (result) => {\n onPairedChangeRef.current?.(result.paired.fromCredentials.length);\n },\n },\n );\n\n const refresh = useCallback(() => {\n void mutate();\n }, [mutate]);\n\n useChannelPairingSseRefresh(refresh, active && sectionUsesPairing && accountPairingActive);\n\n const pairedCred = data?.paired.fromCredentials ?? [];\n\n const setCodeBySender = useCallback(\n (updater: SetStateAction<Record<string, string>>) => {\n dispatchUi({\n type: 'setCodeBySender',\n updater: typeof updater === 'function' ? updater : () => updater,\n });\n },\n [],\n );\n\n const setBusySender = useCallback((value: SetStateAction<string | null>) => {\n dispatchUi({\n type: 'setBusySender',\n value: typeof value === 'function' ? value(ui.busySender) : value,\n });\n }, [ui.busySender]);\n\n const setFeedback = useCallback((value: SetStateAction<PairingUiState['feedback']>) => {\n dispatchUi({\n type: 'setFeedback',\n value: typeof value === 'function' ? value(ui.feedback) : value,\n });\n }, [ui.feedback]);\n\n const { approveByCode, quickApprove } = useChannelPairingApprove({\n channel,\n accountId,\n messages: { pairingApproved: ch.pairingApproved, pairingInvalid: ch.pairingInvalid },\n mutate,\n setCodeBySender,\n setBusySender,\n setFeedback,\n });\n\n const dismiss = useCallback(\n async (senderId: string) => {\n dispatchUi({ type: 'setDismissingId', value: senderId });\n dispatchUi({ type: 'setFeedback', value: null });\n try {\n await dismissChannelPairingPending({ channel, accountId, senderId });\n dispatchUi({ type: 'clearSenderCode', senderId });\n dispatchUi({\n type: 'setFeedback',\n value: {\n kind: 'ok',\n text: ch.pairingDismissed.replace('{{id}}', senderId),\n },\n });\n await mutate();\n } catch (e) {\n const msg = e instanceof Error ? e.message : ch.pairingDismissError;\n dispatchUi({ type: 'setFeedback', value: { kind: 'err', text: msg } });\n } finally {\n dispatchUi({ type: 'setDismissingId', value: null });\n }\n },\n [accountId, channel, ch.pairingDismissed, ch.pairingDismissError, mutate],\n );\n\n const revoke = useCallback(\n async (senderId: string) => {\n dispatchUi({ type: 'setRevokingId', value: senderId });\n dispatchUi({ type: 'setFeedback', value: null });\n try {\n await revokeChannelPairingPaired({ channel, accountId, senderId });\n dispatchUi({\n type: 'setFeedback',\n value: {\n kind: 'ok',\n text: ch.pairingRevoked.replace('{{id}}', senderId),\n },\n });\n await mutate();\n } catch (e) {\n const msg = e instanceof Error ? e.message : ch.pairingRevokeError;\n dispatchUi({ type: 'setFeedback', value: { kind: 'err', text: msg } });\n } finally {\n dispatchUi({ type: 'setRevokingId', value: null });\n }\n },\n [accountId, channel, ch.pairingRevoked, ch.pairingRevokeError, mutate],\n );\n\n if (!sectionUsesPairing) return null;\n\n if (!accountPairingActive) {\n return (\n <div\n id={channelPairingSectionDomId(channel)}\n className=\"space-y-2 rounded-xl border border-edge-subtle bg-surface-base/50 p-4 dark:border-edge\"\n >\n <h3 className=\"text-sm font-medium text-fg\">{ch.pairingTitle}</h3>\n <p className=\"text-xs text-fg-muted\">{ch.pairingAccountNotPairing.replace('{{account}}', accountId)}</p>\n {resolvedAccountIds.length > 1 ? (\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.pairingAccountLabel}</FieldLabel>\n <select\n className={inputClassName()}\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n >\n {resolvedAccountIds.map((id) => (\n <option key={id} value={id}>\n {id}\n </option>\n ))}\n </select>\n </div>\n ) : null}\n </div>\n );\n }\n\n const pending = data?.pending ?? [];\n const pairedConfig = data?.paired.fromConfig ?? [];\n\n return (\n <div\n id={channelPairingSectionDomId(channel)}\n className=\"space-y-3 rounded-xl border border-edge-subtle bg-surface-base/50 p-4 dark:border-edge\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <h3 className=\"text-sm font-medium text-fg\">{ch.pairingTitle}</h3>\n <p className=\"mt-1 text-xs text-fg-muted\">{ch.pairingSubtitle}</p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-8 shrink-0 p-0\"\n aria-label={ch.pairingRefresh}\n disabled={isLoading}\n onClick={() => void mutate()}\n >\n <RefreshCw className={cn('size-4 text-fg-muted', isLoading && 'animate-spin')} />\n </Button>\n </div>\n\n {resolvedAccountIds.length > 1 ? (\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.pairingAccountLabel}</FieldLabel>\n <select\n className={inputClassName()}\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n >\n {resolvedAccountIds.map((id) => (\n <option key={id} value={id}>\n {id}\n </option>\n ))}\n </select>\n </div>\n ) : null}\n\n <FieldHint>{ch.pairingSetupHint}</FieldHint>\n\n {error ? <p className=\"text-xs text-red-600 dark:text-red-400\">{ch.pairingLoadError}</p> : null}\n {feedback ? (\n <p\n className={cn(\n 'text-xs',\n feedback.kind === 'ok' ? 'text-success' : 'text-red-600 dark:text-red-400',\n )}\n >\n {feedback.text}\n </p>\n ) : null}\n\n <div className=\"space-y-2\">\n <FieldLabel>{ch.pairingPendingTitle}</FieldLabel>\n {pending.length > 0 ? <FieldHint>{ch.pairingQuickApproveHint}</FieldHint> : null}\n {pending.length === 0 ? (\n <p className=\"text-xs text-fg-muted\">{ch.pairingPendingEmpty}</p>\n ) : (\n <ul className=\"space-y-2\">\n {pending.map((item) => {\n const code = codeBySender[item.senderId] ?? '';\n const busy = busySender === item.senderId;\n const dismissing = dismissingId === item.senderId;\n return (\n <li\n key={item.senderId}\n className={cn(\n 'rounded-lg border bg-surface-panel p-3 dark:border-edge',\n item.isStale\n ? 'border-amber-300/50 dark:border-amber-800/50'\n : 'border-edge',\n )}\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n <span className=\"font-mono text-xs text-fg\">{item.senderId}</span>\n <span className=\"text-[11px] text-fg-muted\">\n {item.isStale ? (\n <span className=\"text-amber-800 dark:text-amber-200\">{ch.pairingStaleItem}</span>\n ) : null}\n {item.isStale ? ' · ' : null}\n {ch.pairingExpiresHint.replace(\n '{{time}}',\n formatRelativeExpiry(item.expiresAt, language),\n )}\n </span>\n </div>\n {item.codeLast4 ? (\n <p className=\"mt-1 text-[11px] text-fg-muted\">\n {ch.pairingCodeHint.replace('{{suffix}}', item.codeLast4)}\n </p>\n ) : null}\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"shrink-0 text-xs\"\n disabled={busy || dismissing}\n onClick={() => void quickApprove(item.senderId)}\n >\n {busy ? ch.pairingApproving : ch.pairingQuickApprove}\n </Button>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs uppercase')}\n value={code}\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={8}\n placeholder={ch.pairingCodePlaceholder}\n onChange={(e) =>\n setCodeBySender((prev) => ({\n ...prev,\n [item.senderId]: e.target.value.toUpperCase(),\n }))\n }\n onKeyDown={(e) => {\n if (e.key === 'Enter') approveByCode(item.senderId, code);\n }}\n />\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"shrink-0 text-xs\"\n disabled={busy || dismissing || !code.trim()}\n onClick={() => approveByCode(item.senderId, code)}\n >\n {busy ? ch.pairingApproving : ch.pairingApprove}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"shrink-0 text-xs text-fg-muted hover:text-danger\"\n disabled={busy || dismissing}\n onClick={() => void dismiss(item.senderId)}\n >\n {dismissing ? ch.pairingDismissing : ch.pairingDismiss}\n </Button>\n </div>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n\n <div className=\"space-y-2 border-t border-edge-subtle pt-3 dark:border-edge-subtle\">\n <FieldLabel>{ch.pairedTitle}</FieldLabel>\n <div className=\"grid gap-3 text-xs sm:grid-cols-2\">\n <div>\n <p className=\"text-fg-muted\">{ch.pairedFromConfig}</p>\n <p className=\"mt-0.5 font-mono text-fg\">\n {pairedConfig.length ? pairedConfig.join(', ') : ch.pairedEmpty}\n </p>\n </div>\n <div>\n <p className=\"text-fg-muted\">{ch.pairedFromCredentials}</p>\n {pairedCred.length === 0 ? (\n <p className=\"mt-0.5 font-mono text-fg\">{ch.pairedEmpty}</p>\n ) : (\n <ul className=\"mt-1 space-y-1\">\n {pairedCred.map((id) => (\n <li key={id} className=\"flex items-center justify-between gap-2\">\n <span className=\"font-mono text-fg\">{id}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-7 shrink-0 p-0 text-fg-muted hover:text-danger\"\n aria-label={ch.pairingRevokeAria.replace('{{id}}', id)}\n disabled={revokingId === id}\n onClick={() => void revoke(id)}\n >\n <X className=\"size-3.5\" />\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Check, ChevronDown, Copy, Eye, EyeOff } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChatAgentsPayload } from '@/features/chat/agent-selection/chat-agents-api';\nimport { feishuRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport type { ChannelsSettingsState, DmPolicy, GroupPolicy } from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { ChannelAgentRoutingBlock } from './channel-agent-routing-block';\nimport { ChannelPairingSection } from './channel-pairing-section';\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { scrollToChannelPairingSection } from './pairing-scroll';\nimport { channelsInputClassName, joinAllowFrom, parseIdList } from './utils';\n\nexport function FeishuMoreSettingsSection({\n ch,\n form,\n baseline,\n showFeishuSecret,\n setShowFeishuSecret,\n showFeishuWebhookSecrets,\n setShowFeishuWebhookSecrets,\n feishuCopied,\n feishuWebhookCopied,\n copyFeishuSecret,\n copyFeishuWebhookConfig,\n updateFeishu,\n updateChannelAgentRoute,\n feishuAccountsDraft,\n setFeishuAccountsDraft,\n feishuAccountsError,\n onFeishuAccountsBlur,\n dmOpts,\n groupOpts,\n chatAgents,\n saving,\n language,\n dialogOpen,\n pairingFocus = false,\n}: {\n ch: ChannelsSettingsMessages;\n form: ChannelsSettingsState;\n baseline: ChannelsSettingsState | null;\n showFeishuSecret: boolean;\n setShowFeishuSecret: (v: boolean | ((b: boolean) => boolean)) => void;\n showFeishuWebhookSecrets: boolean;\n setShowFeishuWebhookSecrets: (v: boolean | ((b: boolean) => boolean)) => void;\n feishuCopied: boolean;\n feishuWebhookCopied: boolean;\n copyFeishuSecret: () => Promise<void>;\n copyFeishuWebhookConfig: () => Promise<void>;\n updateFeishu: (patch: Partial<ChannelsSettingsState['feishu']>) => void;\n updateChannelAgentRoute: (\n channel: 'telegram' | 'weixin' | 'feishu',\n accountId: string,\n agentId: string,\n ) => void;\n feishuAccountsDraft: string;\n setFeishuAccountsDraft: (v: string) => void;\n feishuAccountsError: string;\n onFeishuAccountsBlur: () => void;\n dmOpts: { value: DmPolicy; label: string }[];\n groupOpts: { value: GroupPolicy; label: string }[];\n chatAgents: ChatAgentsPayload | undefined;\n saving: boolean;\n language: string;\n dialogOpen: boolean;\n pairingFocus?: boolean;\n}) {\n const inputClassName = channelsInputClassName;\n const fs = form.feishu;\n const feishuAccountIds = feishuRoutingAccountIds(fs);\n const resolvedFeishuAccounts = feishuAccountIds.length > 0 ? feishuAccountIds : ['default'];\n const feishuBaselineSecret = baseline?.feishu?.appSecret ?? '';\n const feishuSecretDisplayLocked =\n !showFeishuSecret &&\n Boolean(String(feishuBaselineSecret).trim()) &&\n fs.appSecret === feishuBaselineSecret;\n\n const detailsRef = useRef<HTMLDetailsElement>(null);\n\n useEffect(() => {\n if (!pairingFocus) return;\n const details = detailsRef.current;\n if (details) details.open = true;\n const timer = window.setTimeout(() => scrollToChannelPairingSection('feishu'), 80);\n return () => window.clearTimeout(timer);\n }, [pairingFocus]);\n\n return (\n <details\n ref={detailsRef}\n className=\"group rounded-xl border border-edge-subtle bg-surface-base open:pb-3 dark:border-edge\"\n >\n <summary className=\"cursor-pointer list-none rounded-xl px-3 py-2.5 text-sm font-medium text-fg transition-colors hover:bg-surface-hover group-open:rounded-b-none [&::-webkit-details-marker]:hidden\">\n <span className=\"inline-flex items-center gap-2\">\n <ChevronDown className=\"size-4 shrink-0 text-fg-muted transition-transform group-open:rotate-180\" />\n {ch.advancedShow}\n </span>\n </summary>\n <div className=\"space-y-4 border-t border-edge-subtle px-3 pb-3 pt-3 dark:border-edge-subtle\">\n <p className=\"text-xs leading-relaxed text-fg-muted\">{ch.feishuAdvancedHint}</p>\n <label className=\"flex cursor-pointer items-start gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox mt-0.5\"\n checked={fs.enabled}\n onChange={(e) => updateFeishu({ enabled: e.target.checked })}\n />\n <span>{ch.enableFeishuAria}</span>\n </label>\n\n <SelectField\n label={ch.dmPolicy}\n value={fs.dmPolicy}\n onChange={(v) => updateFeishu({ dmPolicy: v })}\n options={dmOpts}\n />\n <ChannelPairingSection\n channel=\"feishu\"\n accountIds={resolvedFeishuAccounts}\n channelConfig={fs}\n active={dialogOpen}\n ch={ch}\n language={language}\n />\n\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>\n {ch.feishuAppId}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n value={fs.appId}\n onChange={(e) => updateFeishu({ appId: e.target.value })}\n placeholder=\"cli_xxx\"\n />\n <FieldHint>{ch.feishuAppIdDesc}</FieldHint>\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>\n {ch.feishuAppSecret}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </FieldLabel>\n <div className=\"flex flex-wrap gap-2\">\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showFeishuSecret ? 'text' : 'password'}\n autoComplete=\"off\"\n readOnly={feishuSecretDisplayLocked}\n value={\n feishuSecretDisplayLocked\n ? '*'.repeat(Math.max(1, fs.appSecret.length))\n : fs.appSecret\n }\n onChange={(e) => {\n if (feishuSecretDisplayLocked) return;\n updateFeishu({ appSecret: e.target.value });\n }}\n placeholder=\"••••••••\"\n />\n {fs.appSecret ? (\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => void copyFeishuSecret()}\n >\n {feishuCopied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {feishuCopied ? ch.copied : ch.copy}\n </Button>\n ) : null}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => setShowFeishuSecret((s) => !s)}\n >\n {showFeishuSecret ? <EyeOff className=\"size-3.5\" /> : <Eye className=\"size-3.5\" />}\n {showFeishuSecret ? ch.hide : ch.show}\n </Button>\n </div>\n <FieldHint>{ch.feishuAppSecretDesc}</FieldHint>\n </div>\n\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.feishuDomain}</FieldLabel>\n <select\n className={inputClassName()}\n value={String(fs.domain || 'feishu')}\n onChange={(e) => updateFeishu({ domain: e.target.value })}\n >\n <option value=\"feishu\">feishu</option>\n <option value=\"lark\">lark</option>\n </select>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.connectionMode}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.connectionMode}\n onChange={(e) =>\n updateFeishu({ connectionMode: e.target.value as ChannelsSettingsState['feishu']['connectionMode'] })\n }\n >\n <option value=\"websocket\">websocket</option>\n <option value=\"webhook\">webhook</option>\n </select>\n <FieldHint>{ch.connectionModeDesc}</FieldHint>\n </div>\n </div>\n\n {fs.connectionMode === 'webhook' ? (\n <div className=\"rounded-xl border border-edge-subtle bg-surface px-4 py-3 dark:border-edge-subtle\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-medium text-fg\">{ch.webhookTitle}</div>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => setShowFeishuWebhookSecrets((s) => !s)}\n >\n {showFeishuWebhookSecrets ? <EyeOff className=\"size-3.5\" /> : <Eye className=\"size-3.5\" />}\n {showFeishuWebhookSecrets ? ch.hide : ch.show}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => void copyFeishuWebhookConfig()}\n >\n {feishuWebhookCopied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {feishuWebhookCopied ? ch.copied : ch.copy}\n </Button>\n </div>\n </div>\n\n <div className=\"mt-3 grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.verificationToken}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showFeishuWebhookSecrets ? 'text' : 'password'}\n autoComplete=\"off\"\n value={fs.verificationToken ?? ''}\n onChange={(e) => updateFeishu({ verificationToken: e.target.value })}\n />\n <FieldHint>{ch.verificationTokenDesc}</FieldHint>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.encryptKey}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showFeishuWebhookSecrets ? 'text' : 'password'}\n autoComplete=\"off\"\n value={fs.encryptKey ?? ''}\n onChange={(e) => updateFeishu({ encryptKey: e.target.value })}\n />\n <FieldHint>{ch.encryptKeyDesc}</FieldHint>\n </div>\n </div>\n\n <div className=\"mt-3 grid gap-3 sm:grid-cols-3\">\n <div className=\"flex flex-col gap-1.5 sm:col-span-2\">\n <FieldLabel>{ch.webhookHost}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n value={fs.webhookHost ?? ''}\n onChange={(e) => updateFeishu({ webhookHost: e.target.value })}\n placeholder=\"127.0.0.1\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.webhookPort}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type=\"number\"\n inputMode=\"numeric\"\n value={String(fs.webhookPort ?? '')}\n onChange={(e) =>\n updateFeishu({ webhookPort: Number(e.target.value || '0') || 0 })\n }\n placeholder=\"3000\"\n />\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-col gap-1.5\">\n <FieldLabel>{ch.webhookPath}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n value={fs.webhookPath ?? ''}\n onChange={(e) => updateFeishu({ webhookPath: e.target.value })}\n placeholder=\"/feishu/events\"\n />\n <FieldHint>{ch.webhookPathDesc}</FieldHint>\n </div>\n </div>\n ) : null}\n\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.renderMode}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.renderMode}\n onChange={(e) =>\n updateFeishu({ renderMode: e.target.value as ChannelsSettingsState['feishu']['renderMode'] })\n }\n >\n <option value=\"auto\">auto</option>\n <option value=\"raw\">raw</option>\n <option value=\"card\">card</option>\n </select>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.reactionNotifications}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.reactionNotifications}\n onChange={(e) =>\n updateFeishu({\n reactionNotifications: e.target\n .value as ChannelsSettingsState['feishu']['reactionNotifications'],\n })\n }\n >\n <option value=\"off\">off</option>\n <option value=\"own\">own</option>\n <option value=\"all\">all</option>\n </select>\n </div>\n </div>\n\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={fs.streaming}\n onChange={(e) => updateFeishu({ streaming: e.target.checked })}\n />\n {ch.enableStreaming}\n </label>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.groupPolicy}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.groupPolicy}\n onChange={(e) =>\n updateFeishu({ groupPolicy: e.target.value as ChannelsSettingsState['feishu']['groupPolicy'] })\n }\n >\n {groupOpts.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={fs.requireMention}\n onChange={(e) => updateFeishu({ requireMention: e.target.checked })}\n />\n {ch.requireMention}\n </label>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromDm}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"ou_xxx, on_xxx\"\n value={joinAllowFrom(fs.allowFrom)}\n onChange={(e) => updateFeishu({ allowFrom: parseIdList(e.target.value) })}\n />\n <FieldHint>{ch.allowFromDmDesc}</FieldHint>\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromGroups}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"oc_xxx, oc_yyy\"\n value={joinAllowFrom(fs.groupAllowFrom)}\n onChange={(e) => updateFeishu({ groupAllowFrom: parseIdList(e.target.value) })}\n />\n <FieldHint>{ch.allowFromGroupsDesc}</FieldHint>\n </div>\n\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.historyLimit}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type=\"number\"\n inputMode=\"numeric\"\n value={String(fs.historyLimit)}\n onChange={(e) => updateFeishu({ historyLimit: Number(e.target.value || '0') || 0 })}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.textChunkLimit}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type=\"number\"\n inputMode=\"numeric\"\n value={String(fs.textChunkLimit)}\n onChange={(e) => updateFeishu({ textChunkLimit: Number(e.target.value || '0') || 0 })}\n />\n </div>\n </div>\n\n <div className=\"rounded-xl border border-edge-subtle bg-surface px-4 py-3 dark:border-edge-subtle\">\n <div className=\"text-sm font-medium text-fg\">{ch.feishuToolsTitle}</div>\n <div className=\"mt-2 grid gap-2 sm:grid-cols-2\">\n {(\n [\n ['doc', ch.feishuToolDoc],\n ['wiki', ch.feishuToolWiki],\n ['drive', ch.feishuToolDrive],\n ['perm', ch.feishuToolPerm],\n ['bitable', ch.feishuToolBitable],\n ['scopes', ch.feishuToolScopes],\n ] as const\n ).map(([key, label]) => (\n <label key={key} className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={Boolean(fs.tools?.[key])}\n onChange={(e) =>\n updateFeishu({\n tools: { ...fs.tools, [key]: e.target.checked },\n })\n }\n />\n {label}\n </label>\n ))}\n </div>\n <div className=\"mt-2\">\n <FieldHint>{ch.feishuToolsDesc}</FieldHint>\n </div>\n </div>\n\n <div className=\"rounded-xl border border-edge-subtle bg-surface px-4 py-3 dark:border-edge-subtle\">\n <div className=\"text-sm font-medium text-fg\">{ch.feishuActionsTitle}</div>\n <label className=\"mt-2 flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={Boolean(fs.actions?.reactions)}\n onChange={(e) =>\n updateFeishu({\n actions: { ...fs.actions, reactions: e.target.checked },\n })\n }\n />\n {ch.feishuActionReactions}\n </label>\n </div>\n\n <ChannelAgentRoutingBlock\n accountIds={feishuRoutingAccountIds(fs)}\n routes={form.channelAgentRoutes.feishu}\n defaultAgentId={form.defaultAgentId}\n agentItems={chatAgents?.items ?? []}\n disabled={saving}\n onChange={(acc, aid) => updateChannelAgentRoute('feishu', acc, aid)}\n ch={ch}\n />\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.multiAccountJson}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[140px] resize-y font-mono text-xs')}\n spellCheck={false}\n value={feishuAccountsDraft}\n onChange={(e) => setFeishuAccountsDraft(e.target.value)}\n onBlur={onFeishuAccountsBlur}\n placeholder='{ \"default\": { \"appId\": \"...\", \"appSecret\": \"...\", \"enabled\": true } }'\n />\n {feishuAccountsError ? (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{feishuAccountsError}</p>\n ) : (\n <FieldHint>{ch.multiAccountJsonDesc}</FieldHint>\n )}\n </div>\n </div>\n </div>\n </details>\n );\n}\n","import { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nexport function ChannelsSettingsDialogFooter({\n ch,\n dirty,\n saving,\n onCancel,\n onDiscard,\n onSave,\n showCancel = true,\n}: {\n ch: ChannelsSettingsMessages;\n dirty: boolean;\n saving: boolean;\n onCancel: () => void;\n onDiscard: () => void;\n onSave: () => void | Promise<void | boolean>;\n showCancel?: boolean;\n}) {\n return (\n <div className=\"sticky bottom-0 shrink-0 border-t border-edge-subtle bg-surface-panel px-6 py-4 dark:border-edge-subtle\">\n {dirty ? (\n <p className=\"mb-3 text-xs text-amber-800 dark:text-amber-200\">{ch.unsavedHint}</p>\n ) : null}\n <div className=\"flex flex-wrap justify-end gap-2\">\n {showCancel ? (\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel}>\n {ch.modalCancel}\n </Button>\n ) : null}\n <Button type=\"button\" variant=\"secondary\" disabled={!dirty || saving} onClick={onDiscard}>\n {ch.discard}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={!dirty || saving} onClick={() => void onSave()}>\n {saving ? ch.saving : ch.save}\n </Button>\n </div>\n </div>\n );\n}\n","import { ExternalLink } from 'lucide-react';\nimport QRCode from 'qrcode';\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport {\n fetchFeishuSetupStart,\n fetchFeishuSetupStatus,\n} from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { interaction } from '@/lib/interaction';\nimport { useAsyncResource } from '@/lib/use-async-resource';\n\nimport { ChannelsSettingsDialogFooter } from './channels-settings-dialog-footer';\nimport { ChannelSettingsShell, type ChannelSettingsPresentation } from './channel-settings-shell';\n\ntype FeishuDomain = 'feishu' | 'lark';\n\nconst QR_IMAGE_OPTIONS = {\n width: 208,\n margin: 2,\n errorCorrectionLevel: 'M' as const,\n color: { dark: '#000000ff', light: '#ffffffff' },\n};\n\ntype QrStartData = { sessionKey: string | null; qrUrl: string | null };\n\nconst emptyQrStart: QrStartData = { sessionKey: null, qrUrl: null };\n\nfunction FeishuQrSetupSession({\n ch,\n onSetupSuccess,\n onOpenChange,\n closeOnSetupSuccess,\n moreSettings,\n}: {\n ch: ChannelsSettingsMessages;\n onSetupSuccess: (result: { appId: string; domain: string; openId?: string }) => void;\n onOpenChange: (open: boolean) => void;\n closeOnSetupSuccess: boolean;\n moreSettings?: ReactNode;\n}) {\n const [domain, setDomain] = useState<FeishuDomain>('feishu');\n const [generation, setGeneration] = useState(0);\n const [pollError, setPollError] = useState<string | null>(null);\n\n const onSetupSuccessRef = useRef(onSetupSuccess);\n const onOpenChangeRef = useRef(onOpenChange);\n onSetupSuccessRef.current = onSetupSuccess;\n onOpenChangeRef.current = onOpenChange;\n\n const start = useAsyncResource(\n () =>\n fetchFeishuSetupStart({ domain }).then((result) => ({\n sessionKey: result.sessionKey,\n qrUrl: result.qrUrl,\n })),\n [generation, domain],\n { initial: emptyQrStart, errorData: emptyQrStart },\n );\n\n const sessionKey = start.data.sessionKey;\n const qrUrl = start.data.qrUrl;\n const busy = start.loading;\n const startError =\n start.error instanceof Error\n ? start.error.message\n : start.error\n ? String(start.error)\n : null;\n const error = pollError ?? startError;\n\n const startScan = useCallback((d: FeishuDomain) => {\n setPollError(null);\n setDomain(d);\n setGeneration((g) => g + 1);\n }, []);\n\n useEffect(() => {\n if (!sessionKey) return;\n let cancelled = false;\n let intervalId: number | undefined;\n\n const poll = async () => {\n try {\n const status = await fetchFeishuSetupStatus(sessionKey);\n if (cancelled) return;\n\n if (status.phase === 'polling') return;\n\n if (status.phase === 'done') {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n intervalId = undefined;\n }\n start.setData(emptyQrStart);\n if (status.ok) {\n if (closeOnSetupSuccess) onOpenChangeRef.current(false);\n onSetupSuccessRef.current({\n appId: status.appId,\n domain: status.domain,\n openId: status.openId,\n });\n } else {\n setPollError(status.message);\n }\n return;\n }\n\n if (status.phase === 'unknown') {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n setPollError(status.message);\n start.setData(emptyQrStart);\n }\n } catch (e) {\n if (!cancelled) {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n setPollError(e instanceof Error ? e.message : 'Request failed');\n start.setData(emptyQrStart);\n }\n }\n };\n\n intervalId = window.setInterval(() => void poll(), 3000);\n void poll();\n return () => {\n cancelled = true;\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n };\n }, [sessionKey, closeOnSetupSuccess, start.setData]);\n\n const qrImage = useAsyncResource(\n () => QRCode.toDataURL(qrUrl!, QR_IMAGE_OPTIONS),\n [qrUrl],\n { enabled: Boolean(qrUrl), initial: null as string | null, errorData: null },\n );\n\n const qrDataUrl = qrImage.data;\n const qrGenFailed = qrImage.error !== null && !qrImage.loading;\n\n const showQr = Boolean(qrUrl && sessionKey);\n const qrFrameLoading = !error && !showQr;\n\n return (\n <>\n <div className=\"text-center\">\n <p className=\"text-base font-semibold tracking-tight text-fg\">{ch.feishuQrModalTitle}</p>\n <p className=\"mt-1.5 text-sm text-fg-muted\">{ch.feishuQrModalSubtitle}</p>\n </div>\n\n <div className=\"mt-6 flex min-h-[17.5rem] flex-col items-center justify-center gap-3\">\n {error ? (\n <p className=\"text-center text-sm text-red-600 dark:text-red-400\">{error}</p>\n ) : null}\n\n {!error && (showQr || qrFrameLoading) ? (\n <div className=\"flex w-full flex-col items-center gap-3\">\n <p className=\"text-sm text-fg-muted\">\n {qrFrameLoading ? ch.feishuQrStarting : ch.feishuQrScanHint}\n </p>\n <div\n className={cn(\n 'relative flex size-52 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-edge-subtle bg-white p-3 dark:border-edge',\n qrFrameLoading && 'bg-surface-muted/40 dark:bg-surface-base',\n )}\n >\n {qrFrameLoading ? (\n <div\n className=\"absolute inset-3 animate-pulse rounded-md bg-surface-muted dark:bg-surface-hover\"\n aria-hidden\n />\n ) : null}\n {showQr && qrUrl && !error && qrDataUrl && !qrGenFailed ? (\n <img src={qrDataUrl} alt=\"\" className=\"relative z-[1] size-full object-contain\" />\n ) : null}\n {showQr && qrUrl && !error && !qrDataUrl && !qrGenFailed && !qrFrameLoading ? (\n <p className=\"relative z-[1] px-2 text-center text-sm text-fg-muted\">{ch.feishuQrEncoding}</p>\n ) : null}\n {showQr && qrUrl && !error && qrGenFailed ? (\n <div className=\"relative z-[1] flex size-full flex-col items-center justify-center gap-2 px-1\">\n <p className=\"text-center text-xs text-fg-muted\">{ch.feishuQrImageError}</p>\n <a\n href={qrUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1 text-xs text-accent underline-offset-2 hover:underline\"\n >\n <ExternalLink className=\"size-3 shrink-0\" />\n {ch.feishuQrOpenLink}\n </a>\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n\n <div\n className=\"mx-auto mt-4 flex w-full max-w-[20rem] justify-center px-1\"\n role=\"group\"\n aria-label={ch.feishuRegionSwitchAria}\n >\n <div className=\"inline-flex w-full rounded-full border border-edge bg-surface-muted/60 p-1 dark:border-edge dark:bg-surface-base\">\n <button\n type=\"button\"\n disabled={busy}\n className={cn(\n 'min-w-0 flex-1 rounded-full px-3 py-2 text-center text-sm font-medium transition-colors',\n interaction.press,\n domain === 'feishu'\n ? 'bg-surface-panel text-fg shadow-sm dark:bg-surface-panel'\n : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => startScan('feishu')}\n >\n {ch.feishuRegionChina}\n </button>\n <button\n type=\"button\"\n disabled={busy}\n className={cn(\n 'min-w-0 flex-1 rounded-full px-3 py-2 text-center text-sm font-medium transition-colors',\n interaction.press,\n domain === 'lark'\n ? 'bg-surface-panel text-fg shadow-sm dark:bg-surface-panel'\n : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => startScan('lark')}\n >\n {ch.feishuRegionInternational}\n </button>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-11 w-full rounded-full border-0 bg-fg text-surface-panel hover:opacity-90 dark:bg-fg dark:text-surface-panel\"\n disabled={busy}\n onClick={() => startScan(domain)}\n >\n {busy ? ch.feishuQrStarting : ch.feishuQrRegenerate}\n </Button>\n </div>\n\n {moreSettings ? (\n <div className=\"mt-6 border-t border-edge-subtle pt-4 dark:border-edge-subtle\">{moreSettings}</div>\n ) : null}\n </>\n );\n}\n\nexport function FeishuQrSetupDialog({\n open,\n onOpenChange,\n ch,\n onSetupSuccess,\n moreSettings,\n settingsDirty = false,\n settingsSaving = false,\n onSettingsDiscard,\n onSettingsSave,\n presentation = 'modal',\n closeOnSetupSuccess = true,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n presentation?: ChannelSettingsPresentation;\n closeOnSetupSuccess?: boolean;\n ch: ChannelsSettingsMessages;\n onSetupSuccess: (result: { appId: string; domain: string; openId?: string }) => void;\n moreSettings?: ReactNode;\n settingsDirty?: boolean;\n settingsSaving?: boolean;\n onSettingsDiscard?: () => void;\n onSettingsSave?: () => Promise<boolean>;\n}) {\n return (\n <ChannelSettingsShell\n presentation={presentation}\n open={open}\n onOpenChange={onOpenChange}\n title={ch.feishuTitle}\n description={ch.feishuSubtitle}\n srTitle={ch.feishuQrModalTitle}\n srDescription={ch.feishuQrModalSubtitle}\n closeAriaLabel={ch.feishuQrCloseAria}\n wide\n footer={\n moreSettings && onSettingsDiscard && onSettingsSave ? (\n <ChannelsSettingsDialogFooter\n ch={ch}\n dirty={settingsDirty}\n saving={settingsSaving}\n showCancel={false}\n onCancel={() => onOpenChange(false)}\n onDiscard={onSettingsDiscard}\n onSave={onSettingsSave}\n />\n ) : undefined\n }\n >\n {open ? (\n <FeishuQrSetupSession\n key=\"active\"\n ch={ch}\n onSetupSuccess={onSetupSuccess}\n onOpenChange={onOpenChange}\n closeOnSetupSuccess={closeOnSetupSuccess}\n moreSettings={moreSettings}\n />\n ) : null}\n </ChannelSettingsShell>\n );\n}\n","import type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nexport function ChannelPairingSetupSteps({\n ch,\n usesPairing,\n tokenReady,\n pairingComplete,\n}: {\n ch: ChannelsSettingsMessages;\n usesPairing: boolean;\n tokenReady: boolean;\n pairingComplete: boolean;\n}) {\n if (!usesPairing) return null;\n\n const step1Done = tokenReady;\n const step2Done = pairingComplete;\n const step1Current = !step1Done;\n const step2Current = step1Done && !step2Done;\n\n return (\n <ol className=\"space-y-2 rounded-xl border border-accent/25 bg-accent-soft/20 px-4 py-3 text-xs\">\n <li className=\"flex items-start gap-2\">\n <StepDot done={step1Done} current={step1Current} index={1} />\n <span className={cn('text-fg', step1Done && 'text-fg-muted')}>{ch.telegramSetupStepToken}</span>\n </li>\n <li className=\"flex items-start gap-2\">\n <StepDot done={step2Done} current={step2Current} index={2} />\n <span className={cn('text-fg', step2Done && 'text-fg-muted')}>{ch.telegramSetupStepPairing}</span>\n </li>\n </ol>\n );\n}\n\nfunction StepDot({ done, current, index }: { done: boolean; current: boolean; index: number }) {\n return (\n <span\n className={cn(\n 'mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border text-[10px] font-semibold',\n done && 'border-success bg-success text-white',\n !done && current && 'border-accent bg-accent text-white',\n !done && !current && 'border-edge text-fg-muted',\n )}\n aria-hidden\n >\n {done ? '✓' : String(index)}\n </span>\n );\n}\n","import type {\n ChannelsSettingsState,\n GroupPolicy,\n ReplyToMode,\n StreamMode,\n} from '@/features/settings/channels-config-api';\nimport { cn } from '@/lib/cn';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { channelsInputClassName, joinAllowFrom, parseIdList } from './utils';\n\nexport function TelegramAdvanced({\n tg,\n updateTelegram,\n ch,\n groupOpts,\n replyOpts,\n streamOpts,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n onTgAccountsBlur,\n}: {\n tg: ChannelsSettingsState['telegram'];\n updateTelegram: (p: Partial<ChannelsSettingsState['telegram']>) => void;\n ch: ChannelsSettingsMessages;\n groupOpts: { value: GroupPolicy; label: string }[];\n replyOpts: { value: ReplyToMode; label: string }[];\n streamOpts: { value: StreamMode; label: string }[];\n tgAccountsDraft: string;\n setTgAccountsDraft: (s: string) => void;\n tgAccountsError: string;\n onTgAccountsBlur: () => void;\n}) {\n const inputClassName = channelsInputClassName;\n return (\n <div className=\"space-y-4 border-t border-edge-subtle pt-4 dark:border-edge\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.apiRoot}</FieldLabel>\n <input\n className={inputClassName()}\n value={tg.apiRoot}\n onChange={(e) => updateTelegram({ apiRoot: e.target.value })}\n placeholder=\"https://api.telegram.org\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.proxy}</FieldLabel>\n <input\n className={inputClassName()}\n value={tg.proxy}\n onChange={(e) => updateTelegram({ proxy: e.target.value })}\n placeholder=\"http://proxy.example.com:8080\"\n />\n </div>\n <SelectField\n label={ch.groupPolicy}\n value={tg.groupPolicy}\n onChange={(v) => updateTelegram({ groupPolicy: v })}\n options={groupOpts}\n />\n <SelectField\n label={ch.replyToMode}\n value={tg.replyToMode}\n onChange={(v) => updateTelegram({ replyToMode: v })}\n options={replyOpts}\n />\n <SelectField\n label={ch.streamMode}\n value={tg.streamMode}\n onChange={(v) => updateTelegram({ streamMode: v })}\n options={streamOpts}\n />\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromGroups}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"-1001234567890\"\n value={joinAllowFrom(tg.groupAllowFrom)}\n onChange={(e) => updateTelegram({ groupAllowFrom: parseIdList(e.target.value) })}\n />\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.historyLimit}</FieldLabel>\n <input\n type=\"number\"\n min={10}\n max={200}\n className={inputClassName()}\n value={tg.historyLimit}\n onChange={(e) => updateTelegram({ historyLimit: parseInt(e.target.value, 10) || 50 })}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.textChunkLimit}</FieldLabel>\n <input\n type=\"number\"\n min={1000}\n max={10000}\n step={100}\n className={inputClassName()}\n value={tg.textChunkLimit}\n onChange={(e) => updateTelegram({ textChunkLimit: parseInt(e.target.value, 10) || 4000 })}\n />\n </div>\n </div>\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={tg.debug}\n onChange={(e) => updateTelegram({ debug: e.target.checked })}\n />\n {ch.telegramDebug}\n </label>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.multiAccountJson}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[140px] resize-y font-mono text-xs')}\n spellCheck={false}\n value={tgAccountsDraft}\n onChange={(e) => setTgAccountsDraft(e.target.value)}\n onBlur={onTgAccountsBlur}\n placeholder='{ \"personal\": { \"accountId\": \"personal\", \"botToken\": \"...\", ... } }'\n />\n {tgAccountsError ? (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{tgAccountsError}</p>\n ) : (\n <FieldHint>{ch.multiAccountJsonDesc}</FieldHint>\n )}\n </div>\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { Check, ChevronDown, Copy, Eye, EyeOff } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChatAgentsPayload } from '@/features/chat/agent-selection/chat-agents-api';\nimport { telegramRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport {\n emptyTelegramAccount,\n type ChannelsSettingsState,\n type DmPolicy,\n type GroupPolicy,\n type ReplyToMode,\n type StreamMode,\n} from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { ChannelAgentRoutingBlock } from './channel-agent-routing-block';\nimport { ChannelPairingSection } from './channel-pairing-section';\nimport { ChannelPairingSetupSteps } from './channel-pairing-setup-steps';\nimport { channelUsesPairingPolicy } from './pairing-policy';\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { TelegramAdvanced } from './telegram-advanced';\nimport { ChannelsSettingsDialogFooter } from './channels-settings-dialog-footer';\nimport { ChannelSettingsShell, type ChannelSettingsPresentation } from './channel-settings-shell';\nimport { scrollToChannelPairingSection } from './pairing-scroll';\nimport { channelsInputClassName, joinAllowFrom, parseIdList, telegramDefaultBotToken } from './utils';\n\nexport function TelegramChannelSettingsDialog({\n open,\n onOpenChange,\n presentation = 'modal',\n ch,\n form,\n baseline,\n tgAdvanced,\n setTgAdvanced,\n showToken,\n setShowToken,\n copied,\n copyToken,\n updateTelegram,\n updateChannelAgentRoute,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n onTgAccountsBlur,\n dmOpts,\n groupOpts,\n replyOpts,\n streamOpts,\n chatAgents,\n saving,\n dirty,\n save,\n discard,\n language,\n scrollToPairingOnOpen = false,\n closeOnSave = true,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n presentation?: ChannelSettingsPresentation;\n ch: ChannelsSettingsMessages;\n form: ChannelsSettingsState;\n baseline: ChannelsSettingsState | null;\n tgAdvanced: boolean;\n setTgAdvanced: (v: boolean | ((b: boolean) => boolean)) => void;\n showToken: boolean;\n setShowToken: (v: boolean | ((b: boolean) => boolean)) => void;\n copied: boolean;\n copyToken: () => Promise<void>;\n updateTelegram: (patch: Partial<ChannelsSettingsState['telegram']>) => void;\n updateChannelAgentRoute: (channel: 'telegram', accountId: string, agentId: string) => void;\n tgAccountsDraft: string;\n setTgAccountsDraft: (s: string) => void;\n tgAccountsError: string;\n onTgAccountsBlur: () => void;\n dmOpts: { value: DmPolicy; label: string }[];\n groupOpts: { value: GroupPolicy; label: string }[];\n replyOpts: { value: ReplyToMode; label: string }[];\n streamOpts: { value: StreamMode; label: string }[];\n chatAgents: ChatAgentsPayload | undefined;\n saving: boolean;\n dirty: boolean;\n save: () => Promise<boolean>;\n discard: () => void;\n language: string;\n scrollToPairingOnOpen?: boolean;\n closeOnSave?: boolean;\n}) {\n const inputClassName = channelsInputClassName;\n const tg = form.telegram;\n const tgBaselineToken = baseline ? telegramDefaultBotToken(baseline.telegram) : '';\n const tgToken = telegramDefaultBotToken(tg);\n const telegramTokenDisplayLocked =\n !showToken && Boolean(String(tgBaselineToken).trim()) && tgToken === tgBaselineToken;\n const [pairedCredentialCount, setPairedCredentialCount] = useState(0);\n const tokenReady = Boolean(tgToken.trim()) && tg.enabled;\n const tgAccountIds = telegramRoutingAccountIds(tg);\n\n useEffect(() => {\n if (!open || !scrollToPairingOnOpen) return;\n const timer = window.setTimeout(() => scrollToChannelPairingSection('telegram'), 80);\n return () => window.clearTimeout(timer);\n }, [open, scrollToPairingOnOpen]);\n\n return (\n <ChannelSettingsShell\n presentation={presentation}\n open={open}\n onOpenChange={onOpenChange}\n title={ch.telegramTitle}\n description={ch.telegramSubtitle}\n srTitle={ch.telegramTitle}\n srDescription={ch.telegramSubtitle}\n closeAriaLabel={ch.modalCancel}\n wide\n headerExtra={\n presentation === 'modal' ? (\n <div className=\"border-b border-edge-subtle px-6 pb-4 pt-6 dark:border-edge-subtle\">\n <h2 className=\"text-lg font-semibold tracking-tight text-fg\">{ch.telegramTitle}</h2>\n <p className=\"mt-1 text-sm text-fg-muted\">{ch.telegramSubtitle}</p>\n </div>\n ) : undefined\n }\n footer={\n <ChannelsSettingsDialogFooter\n ch={ch}\n dirty={dirty}\n saving={saving}\n onCancel={() => onOpenChange(false)}\n onDiscard={discard}\n onSave={async () => {\n const ok = await save();\n if (ok && closeOnSave) onOpenChange(false);\n }}\n />\n }\n >\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={tg.enabled}\n onChange={(e) => updateTelegram({ enabled: e.target.checked })}\n />\n <span>{ch.enableTelegramAria}</span>\n </label>\n\n <div className=\"mt-6 space-y-4\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>\n {ch.telegramToken}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </FieldLabel>\n <div className=\"flex flex-wrap gap-2\">\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showToken ? 'text' : 'password'}\n autoComplete=\"off\"\n readOnly={telegramTokenDisplayLocked}\n value={\n telegramTokenDisplayLocked\n ? '*'.repeat(Math.max(1, tgBaselineToken.length))\n : tgToken\n }\n onChange={(e) => {\n if (telegramTokenDisplayLocked) return;\n const prev = tg.accounts?.default ?? emptyTelegramAccount('default');\n updateTelegram({\n accounts: {\n ...tg.accounts,\n default: { ...prev, accountId: 'default', botToken: e.target.value },\n },\n });\n }}\n placeholder=\"123456789:ABCdefGHIjklMNOpqrsTUVwxyz\"\n />\n {tgToken ? (\n <Button type=\"button\" variant=\"secondary\" className=\"px-2 py-1 text-xs\" onClick={() => void copyToken()}>\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {copied ? ch.copied : ch.copy}\n </Button>\n ) : null}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => setShowToken((s) => !s)}\n >\n {showToken ? <EyeOff className=\"size-3.5\" /> : <Eye className=\"size-3.5\" />}\n {showToken ? ch.hide : ch.show}\n </Button>\n </div>\n <FieldHint>{ch.telegramTokenDesc}</FieldHint>\n </div>\n\n <ChannelPairingSetupSteps\n ch={ch}\n usesPairing={channelUsesPairingPolicy('telegram', tg)}\n tokenReady={tokenReady}\n pairingComplete={pairedCredentialCount > 0}\n />\n\n <SelectField\n label={ch.dmPolicy}\n value={tg.dmPolicy}\n onChange={(v) => updateTelegram({ dmPolicy: v })}\n options={dmOpts}\n />\n\n <ChannelPairingSection\n channel=\"telegram\"\n accountIds={tgAccountIds}\n channelConfig={tg}\n active={open}\n ch={ch}\n language={language}\n onPairedChange={setPairedCredentialCount}\n />\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromDm}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"123456789, 987654321\"\n value={joinAllowFrom(tg.allowFrom)}\n onChange={(e) => updateTelegram({ allowFrom: parseIdList(e.target.value) })}\n />\n <FieldHint>{ch.allowFromDmDesc}</FieldHint>\n </div>\n\n <ChannelAgentRoutingBlock\n accountIds={telegramRoutingAccountIds(tg)}\n routes={form.channelAgentRoutes.telegram}\n defaultAgentId={form.defaultAgentId}\n agentItems={chatAgents?.items ?? []}\n disabled={saving}\n onChange={(acc, aid) => updateChannelAgentRoute('telegram', acc, aid)}\n ch={ch}\n />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"-ml-2 h-auto justify-start px-2 py-1 text-sm text-fg-muted hover:text-fg\"\n onClick={() => setTgAdvanced((a) => !a)}\n >\n <ChevronDown className={cn('mr-1 size-4 transition-transform', tgAdvanced && 'rotate-180')} />\n {tgAdvanced ? ch.advancedHide : ch.advancedShow}\n </Button>\n\n {tgAdvanced ? (\n <TelegramAdvanced\n tg={tg}\n updateTelegram={updateTelegram}\n ch={ch}\n groupOpts={groupOpts}\n replyOpts={replyOpts}\n streamOpts={streamOpts}\n tgAccountsDraft={tgAccountsDraft}\n setTgAccountsDraft={setTgAccountsDraft}\n tgAccountsError={tgAccountsError}\n onTgAccountsBlur={onTgAccountsBlur}\n />\n ) : null}\n </div>\n </ChannelSettingsShell>\n );\n}\n","import type { ManageableChannelId } from './channels-routes';\n\nexport type BuiltinChannelCatalogEntry = {\n id: ManageableChannelId;\n titleKey: 'telegramTitle' | 'weixinTitle' | 'feishuTitle';\n subtitleKey: 'telegramSubtitle' | 'weixinSubtitle' | 'feishuSubtitle';\n};\n\n/** Static built-in channel metadata (i18n keys). Dynamic catalog merges API `/api/channels/meta`. */\nexport const BUILTIN_CHANNEL_CATALOG: readonly BuiltinChannelCatalogEntry[] = [\n {\n id: 'telegram',\n titleKey: 'telegramTitle',\n subtitleKey: 'telegramSubtitle',\n },\n {\n id: 'weixin',\n titleKey: 'weixinTitle',\n subtitleKey: 'weixinSubtitle',\n },\n {\n id: 'feishu',\n titleKey: 'feishuTitle',\n subtitleKey: 'feishuSubtitle',\n },\n] as const;\n","import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport type ChannelHubMetaRow = {\n id: string;\n label: string;\n description: string;\n manageable: boolean;\n order: number;\n};\n\nexport function channelsMetaSwrKey(): string {\n return apiUrl('/api/channels/meta');\n}\n\nexport async function fetchChannelsMeta(): Promise<ChannelHubMetaRow[]> {\n const data = await fetchJson<{ ok?: boolean; payload?: { channels?: ChannelHubMetaRow[] } }>(\n channelsMetaSwrKey(),\n );\n return data.payload?.channels ?? [];\n}\n","import { useMemo } from 'react';\nimport useSWR from 'swr';\n\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { BUILTIN_CHANNEL_CATALOG, type BuiltinChannelCatalogEntry } from './channel-catalog';\nimport { channelsMetaSwrKey, fetchChannelsMeta, type ChannelHubMetaRow } from './channels-meta-api';\n\nconst BUILTIN_CHANNEL_BY_ID = new Map(\n BUILTIN_CHANNEL_CATALOG.map((entry) => [entry.id, entry] as const),\n);\nconst BUILTIN_CHANNEL_ORDER_BY_ID = new Map(\n BUILTIN_CHANNEL_CATALOG.map((entry, index) => [entry.id, index] as const),\n);\n\nexport type ChannelCatalogEntry = {\n id: string;\n title: string;\n subtitle: string;\n manageable: boolean;\n order: number;\n};\n\nfunction resolveBuiltinCopy(\n entry: BuiltinChannelCatalogEntry,\n ch: ChannelsSettingsMessages,\n): { title: string; subtitle: string } {\n return {\n title: ch[entry.titleKey],\n subtitle: ch[entry.subtitleKey],\n };\n}\n\nfunction mergeChannelCatalog(\n metaRows: ChannelHubMetaRow[] | undefined,\n ch: ChannelsSettingsMessages,\n): ChannelCatalogEntry[] {\n const byId = new Map<string, ChannelCatalogEntry>();\n\n for (const row of metaRows ?? []) {\n const builtin = BUILTIN_CHANNEL_BY_ID.get(row.id as BuiltinChannelCatalogEntry['id']);\n const copy = builtin\n ? resolveBuiltinCopy(builtin, ch)\n : { title: row.label, subtitle: row.description || ch.hubExtensionSubtitle };\n byId.set(row.id, {\n id: row.id,\n title: copy.title,\n subtitle: copy.subtitle,\n manageable: row.manageable,\n order: row.order,\n });\n }\n\n if (byId.size === 0) {\n return BUILTIN_CHANNEL_CATALOG.map((entry, index) => {\n const copy = resolveBuiltinCopy(entry, ch);\n return {\n id: entry.id,\n title: copy.title,\n subtitle: copy.subtitle,\n manageable: true,\n order: index,\n };\n });\n }\n\n for (const entry of BUILTIN_CHANNEL_CATALOG) {\n if (byId.has(entry.id)) continue;\n const copy = resolveBuiltinCopy(entry, ch);\n byId.set(entry.id, {\n id: entry.id,\n title: copy.title,\n subtitle: copy.subtitle,\n manageable: true,\n order: BUILTIN_CHANNEL_ORDER_BY_ID.get(entry.id) ?? 0,\n });\n }\n\n return Array.from(byId.values()).sort((a, b) => {\n if (a.order !== b.order) return a.order - b.order;\n return a.id.localeCompare(b.id);\n });\n}\n\nexport function useChannelCatalog(hasToken: boolean, ch: ChannelsSettingsMessages) {\n const { data, error, isLoading, mutate } = useSWR(\n hasToken ? channelsMetaSwrKey() : null,\n fetchChannelsMeta,\n { revalidateOnFocus: false },\n );\n\n const entries = useMemo(() => mergeChannelCatalog(data, ch), [data, ch]);\n\n return { entries, isLoading, error, mutate };\n}\n","import type { ChannelStatus } from '@/features/cron/cron-api';\nimport {\n feishuRoutingAccountIds,\n telegramRoutingAccountIds,\n weixinRoutingAccountIds,\n} from '@/features/settings/channel-bindings-merge';\nimport type { ChannelPairingSummaryPayload, ChannelsSettingsState } from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { isManageableChannelId, type ManageableChannelId } from './channels-routes';\nimport { channelUsesPairingPolicy, hubPairingPendingCount } from './pairing-policy';\nimport { isFeishuConfigured, isTelegramConfigured, isWeixinConfigured } from './utils';\n\nexport type ChannelHubId = ManageableChannelId;\n\nexport type ChannelHubStatus = 'not_configured' | 'disabled' | 'running' | 'offline';\n\nexport type ChannelHubPrimaryAction = 'setup' | 'manage' | 'fix' | 'pairing';\n\nexport type ChannelHubCardVm = {\n id: string;\n manageable: boolean;\n configured: boolean;\n enabled: boolean;\n connected: boolean;\n status: ChannelHubStatus;\n summaryLines: string[];\n pendingPairing: number;\n primaryAction: ChannelHubPrimaryAction;\n};\n\nexport function resolveChannelConnected(statuses: ChannelStatus[], id: string): boolean {\n return statuses.find((s) => s.name === id)?.connected ?? false;\n}\n\nfunction readChannelEnabled(statuses: ChannelStatus[], id: string): boolean {\n return statuses.find((s) => s.name === id)?.enabled ?? false;\n}\n\nfunction isExtensionChannelConfigured(config: unknown, id: string): boolean {\n const channels =\n config && typeof config === 'object'\n ? (config as { channels?: unknown }).channels\n : undefined;\n const section =\n channels && typeof channels === 'object' && !Array.isArray(channels)\n ? (channels as Record<string, unknown>)[id]\n : undefined;\n if (!section || typeof section !== 'object') return false;\n return Object.keys(section).length > 0;\n}\n\nfunction resolveChannelHubStatus(configured: boolean, enabled: boolean, connected: boolean): ChannelHubStatus {\n if (!configured) return 'not_configured';\n if (!enabled) return 'disabled';\n if (connected) return 'running';\n return 'offline';\n}\n\nfunction resolvePrimaryAction(\n status: ChannelHubStatus,\n pendingPairing: number,\n manageable: boolean,\n): ChannelHubPrimaryAction {\n if (!manageable) return 'manage';\n if (status === 'not_configured') return 'setup';\n if (pendingPairing > 0) return 'pairing';\n if (status === 'offline') return 'fix';\n return 'manage';\n}\n\nfunction dmPolicyLabel(ch: ChannelsSettingsMessages, policy: ChannelsSettingsState['telegram']['dmPolicy']): string {\n return ch.policy.dm[policy];\n}\n\nfunction accountCountLine(ch: ChannelsSettingsMessages, count: number): string {\n return ch.hubSummaryAccountCount.replace('{{count}}', String(count));\n}\n\nfunction buildTelegramSummaryLines(ch: ChannelsSettingsMessages, form: ChannelsSettingsState): string[] {\n const tg = form.telegram;\n const lines = [ch.hubSummaryDm.replace('{{policy}}', dmPolicyLabel(ch, tg.dmPolicy))];\n const count = telegramRoutingAccountIds(tg).length;\n if (count > 0) lines.push(accountCountLine(ch, count));\n return lines;\n}\n\nfunction buildWeixinSummaryLines(ch: ChannelsSettingsMessages, form: ChannelsSettingsState): string[] {\n const wx = form.weixin;\n const lines = [ch.hubSummaryDm.replace('{{policy}}', dmPolicyLabel(ch, wx.dmPolicy))];\n lines.push(ch.hubSummaryStream.replace('{{mode}}', ch.policy.stream[wx.streamMode]));\n const count = weixinRoutingAccountIds(wx).length;\n if (count > 0) lines.push(accountCountLine(ch, count));\n return lines;\n}\n\nfunction buildFeishuSummaryLines(ch: ChannelsSettingsMessages, form: ChannelsSettingsState): string[] {\n const fs = form.feishu;\n const mode = fs.connectionMode === 'webhook' ? ch.hubConnectionWebhook : ch.hubConnectionWebsocket;\n const lines = [ch.hubSummaryConnection.replace('{{mode}}', mode)];\n const count = feishuRoutingAccountIds(fs).length;\n if (count > 0) lines.push(accountCountLine(ch, count));\n return lines;\n}\n\nfunction pairingSlice(\n id: ManageableChannelId,\n summary: ChannelPairingSummaryPayload,\n): ChannelPairingSummaryPayload['telegram'] {\n return summary[id];\n}\n\nexport function buildManageableChannelHubCardVm(params: {\n id: ManageableChannelId;\n form: ChannelsSettingsState;\n connected: boolean;\n pairingSummary: ChannelPairingSummaryPayload;\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm {\n const { id, form, connected, pairingSummary, ch } = params;\n const tg = form.telegram;\n const wx = form.weixin;\n const fs = form.feishu;\n\n const configured =\n id === 'telegram'\n ? isTelegramConfigured(tg)\n : id === 'weixin'\n ? isWeixinConfigured(wx)\n : isFeishuConfigured(fs);\n\n const enabled = id === 'telegram' ? tg.enabled : id === 'weixin' ? wx.enabled : fs.enabled;\n const channelConfig = id === 'telegram' ? tg : id === 'weixin' ? wx : fs;\n const usesPairing = channelUsesPairingPolicy(id, channelConfig);\n const pendingPairing = hubPairingPendingCount({\n configured,\n channelEnabled: enabled,\n usesPairing,\n summaryPending: pairingSlice(id, pairingSummary).pending,\n });\n\n const status = resolveChannelHubStatus(configured, enabled, connected);\n const summaryLines = configured\n ? id === 'telegram'\n ? buildTelegramSummaryLines(ch, form)\n : id === 'weixin'\n ? buildWeixinSummaryLines(ch, form)\n : buildFeishuSummaryLines(ch, form)\n : [];\n\n return {\n id,\n manageable: true,\n configured,\n enabled,\n connected,\n status,\n summaryLines,\n pendingPairing,\n primaryAction: resolvePrimaryAction(status, pendingPairing, true),\n };\n}\n\nexport function buildExtensionChannelHubCardVm(params: {\n id: string;\n config: unknown;\n statuses: ChannelStatus[];\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm {\n const { id, config, statuses, ch } = params;\n const configured = isExtensionChannelConfigured(config, id);\n const enabled = readChannelEnabled(statuses, id);\n const connected = resolveChannelConnected(statuses, id);\n const status = resolveChannelHubStatus(configured, enabled, connected);\n\n return {\n id,\n manageable: false,\n configured,\n enabled,\n connected,\n status,\n summaryLines: configured ? [ch.hubExtensionConfiguredHint] : [],\n pendingPairing: 0,\n primaryAction: 'manage',\n };\n}\n\nfunction buildChannelHubCardForCatalogId(params: {\n id: string;\n form: ChannelsSettingsState;\n config: unknown;\n statuses: ChannelStatus[];\n pairingSummary: ChannelPairingSummaryPayload;\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm {\n if (isManageableChannelId(params.id)) {\n return buildManageableChannelHubCardVm({\n id: params.id,\n form: params.form,\n connected: resolveChannelConnected(params.statuses, params.id),\n pairingSummary: params.pairingSummary,\n ch: params.ch,\n });\n }\n return buildExtensionChannelHubCardVm({\n id: params.id,\n config: params.config,\n statuses: params.statuses,\n ch: params.ch,\n });\n}\n\nexport function buildChannelHubCardsForCatalog(params: {\n catalogIds: string[];\n form: ChannelsSettingsState;\n config: unknown;\n statuses: ChannelStatus[];\n pairingSummary: ChannelPairingSummaryPayload;\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm[] {\n return params.catalogIds.map((id) =>\n buildChannelHubCardForCatalogId({\n id,\n form: params.form,\n config: params.config,\n statuses: params.statuses,\n pairingSummary: params.pairingSummary,\n ch: params.ch,\n }),\n );\n}\n","import { useEffect } from 'react';\n\nimport type { ChannelStatus } from '@/features/cron/cron-api';\n\nexport const CHANNEL_STATUS_SSE_EVENT = 'channels-status';\n\nexport type ChannelStatusSsePayload = {\n channels?: ChannelStatus[];\n};\n\nexport function parseChannelStatusSseDetail(detail: unknown): ChannelStatus[] | null {\n if (!detail || typeof detail !== 'object') return null;\n const channels = (detail as ChannelStatusSsePayload).channels;\n if (!Array.isArray(channels)) return null;\n return channels;\n}\n\n/** Subscribe to gateway `channels.status` SSE (dispatched as `channels-status` on window). */\nexport function subscribeChannelStatusSse(onEvent: (detail: unknown) => void): () => void {\n const handler = (e: Event) => onEvent((e as CustomEvent).detail);\n window.addEventListener(CHANNEL_STATUS_SSE_EVENT, handler);\n return () => window.removeEventListener(CHANNEL_STATUS_SSE_EVENT, handler);\n}\n\nexport function useChannelStatusSse(onEvent: (detail: unknown) => void, enabled = true): void {\n useEffect(() => {\n if (!enabled) return;\n return subscribeChannelStatusSse(onEvent);\n }, [enabled, onEvent]);\n}\n","import useSWR from 'swr';\nimport { useCallback } from 'react';\n\nimport {\n fetchChannelPairingSummary,\n type ChannelPairingSummaryPayload,\n} from '@/features/settings/channels-config-api';\n\nimport {\n CHANNEL_PAIRING_SUMMARY_SWR_KEY,\n useChannelPairingSseRefresh,\n} from './use-channel-pairing-sse';\n\nconst EMPTY_SUMMARY: ChannelPairingSummaryPayload = {\n telegram: { pending: 0, stale: 0, atCapacity: false },\n feishu: { pending: 0, stale: 0, atCapacity: false },\n weixin: { pending: 0, stale: 0, atCapacity: false },\n};\n\nexport function useChannelPairingSummary(enabled: boolean) {\n const { data, mutate, isLoading, error } = useSWR(\n enabled ? CHANNEL_PAIRING_SUMMARY_SWR_KEY : null,\n fetchChannelPairingSummary,\n { revalidateOnFocus: true },\n );\n\n const refresh = useCallback(() => {\n void mutate();\n }, [mutate]);\n\n useChannelPairingSseRefresh(refresh, enabled);\n\n return {\n summary: data ?? EMPTY_SUMMARY,\n isLoading,\n error,\n refresh,\n };\n}\n","import useSWR from 'swr';\nimport { useCallback, useMemo } from 'react';\n\nimport type { ChannelsSettingsState } from '@/features/settings/channels-config-api';\nimport { channelsStatusSwrKey, fetchChannelsStatusSwr } from '@/features/settings/channels-status-swr';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport {\n buildChannelHubCardsForCatalog,\n type ChannelHubCardVm,\n} from './channel-hub-view-model';\nimport { parseChannelStatusSseDetail, useChannelStatusSse } from './use-channel-status-sse';\nimport { useChannelPairingSummary } from './use-channel-pairing-summary';\nimport { useChannelCatalog } from './use-channel-catalog';\n\nconst STATUS_POLL_MS = 30_000;\n\nexport function useChannelsHubData(params: {\n hasToken: boolean;\n form: ChannelsSettingsState | null;\n ch: ChannelsSettingsMessages;\n}): {\n cards: ChannelHubCardVm[];\n refreshAll: () => void;\n} {\n const { hasToken, form, ch } = params;\n\n const { data: cfgData, mutate: mutateConfig } = useGatewayConfigSwr(hasToken);\n const { entries: catalogEntries, mutate: mutateCatalog } = useChannelCatalog(hasToken, ch);\n\n const { data: statuses = [], mutate: mutateStatus } = useSWR(\n hasToken ? channelsStatusSwrKey() : null,\n fetchChannelsStatusSwr,\n { revalidateOnFocus: true, refreshInterval: STATUS_POLL_MS },\n );\n\n const applyStatusFromSse = useCallback(\n (detail: unknown) => {\n const next = parseChannelStatusSseDetail(detail);\n if (next) {\n void mutateStatus(next, { revalidate: false });\n return;\n }\n void mutateStatus();\n },\n [mutateStatus],\n );\n\n useChannelStatusSse(applyStatusFromSse, hasToken);\n\n const { summary: pairingSummary, refresh: refreshPairing } = useChannelPairingSummary(hasToken);\n\n const catalogIds = useMemo(() => catalogEntries.map((e) => e.id), [catalogEntries]);\n const configRoot = cfgData?.payload?.config;\n\n const cards = useMemo(() => {\n if (!form || catalogIds.length === 0) return [];\n return buildChannelHubCardsForCatalog({\n catalogIds,\n form,\n config: configRoot,\n statuses,\n pairingSummary,\n ch,\n });\n }, [form, catalogIds, configRoot, statuses, pairingSummary, ch]);\n\n const refreshAll = useCallback(() => {\n void mutateStatus();\n void mutateCatalog();\n void mutateConfig();\n refreshPairing();\n }, [mutateCatalog, mutateConfig, mutateStatus, refreshPairing]);\n\n return { cards, refreshAll };\n}\n","import { useCallback, useMemo, useReducer, useRef, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { fetchChatAgents } from '@/features/chat/agent-selection/chat-agents-api';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport {\n normalizeChannelsFromConfig,\n patchChannelsSettings,\n type ChannelsSettingsState,\n type DmPolicy,\n type GroupPolicy,\n type ReplyToMode,\n type StreamMode,\n} from '@/features/settings/channels-config-api';\nimport { messages } from '@/i18n/messages';\nimport { copyTextToClipboard } from '@/lib/copy-to-clipboard';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nimport { telegramDefaultBotToken } from './utils';\n\ntype ChannelsPanelFormState = {\n form: ChannelsSettingsState | null;\n baseline: ChannelsSettingsState | null;\n tgAccountsDraft: string;\n tgAccountsError: string;\n wxAccountsDraft: string;\n wxAccountsError: string;\n feishuAccountsDraft: string;\n feishuAccountsError: string;\n};\n\nconst emptyPanelFormState: ChannelsPanelFormState = {\n form: null,\n baseline: null,\n tgAccountsDraft: '',\n tgAccountsError: '',\n wxAccountsDraft: '',\n wxAccountsError: '',\n feishuAccountsDraft: '',\n feishuAccountsError: '',\n};\n\nfunction accountsDraftsFrom(state: ChannelsSettingsState): Pick<\n ChannelsPanelFormState,\n | 'tgAccountsDraft'\n | 'tgAccountsError'\n | 'wxAccountsDraft'\n | 'wxAccountsError'\n | 'feishuAccountsDraft'\n | 'feishuAccountsError'\n> {\n return {\n tgAccountsDraft: JSON.stringify(state.telegram.accounts ?? {}, null, 2),\n tgAccountsError: '',\n wxAccountsDraft: JSON.stringify(state.weixin.accounts ?? {}, null, 2),\n wxAccountsError: '',\n feishuAccountsDraft: JSON.stringify(state.feishu?.accounts ?? {}, null, 2),\n feishuAccountsError: '',\n };\n}\n\ntype PanelFormAction =\n | { type: 'reset' }\n | { type: 'load'; payload: ChannelsSettingsState }\n | { type: 'commitSaved'; payload: ChannelsSettingsState }\n | { type: 'discard' }\n | { type: 'updateTelegram'; patch: Partial<ChannelsSettingsState['telegram']> }\n | { type: 'updateWeixin'; patch: Partial<ChannelsSettingsState['weixin']> }\n | { type: 'updateFeishu'; patch: Partial<ChannelsSettingsState['feishu']> }\n | {\n type: 'updateChannelAgentRoute';\n channel: 'telegram' | 'weixin' | 'feishu';\n accountId: string;\n agentId: string;\n }\n | { type: 'setTgAccountsDraft'; value: string }\n | { type: 'setWxAccountsDraft'; value: string }\n | { type: 'setFeishuAccountsDraft'; value: string }\n | { type: 'setTgAccountsError'; value: string }\n | { type: 'setWxAccountsError'; value: string }\n | { type: 'setFeishuAccountsError'; value: string }\n | { type: 'applyTgAccounts'; accounts: ChannelsSettingsState['telegram']['accounts'] }\n | { type: 'applyWxAccounts'; accounts: ChannelsSettingsState['weixin']['accounts'] }\n | { type: 'applyFeishuAccounts'; accounts: ChannelsSettingsState['feishu']['accounts'] }\n | { type: 'restoreForm'; payload: ChannelsSettingsState };\n\nfunction panelFormReducer(\n state: ChannelsPanelFormState,\n action: PanelFormAction,\n): ChannelsPanelFormState {\n switch (action.type) {\n case 'reset':\n return emptyPanelFormState;\n case 'load': {\n const snapshot = structuredClone(action.payload);\n return {\n form: snapshot,\n baseline: structuredClone(snapshot),\n ...accountsDraftsFrom(snapshot),\n };\n }\n case 'commitSaved': {\n const snapshot = structuredClone(action.payload);\n return {\n form: snapshot,\n baseline: structuredClone(snapshot),\n ...accountsDraftsFrom(snapshot),\n };\n }\n case 'discard': {\n if (!state.baseline) return state;\n const restored = structuredClone(state.baseline);\n return {\n form: restored,\n baseline: state.baseline,\n ...accountsDraftsFrom(restored),\n };\n }\n case 'updateTelegram':\n return state.form\n ? {\n ...state,\n form: { ...state.form, telegram: { ...state.form.telegram, ...action.patch } },\n }\n : state;\n case 'updateWeixin':\n return state.form\n ? {\n ...state,\n form: { ...state.form, weixin: { ...state.form.weixin, ...action.patch } },\n }\n : state;\n case 'updateFeishu':\n return state.form\n ? {\n ...state,\n form: { ...state.form, feishu: { ...state.form.feishu, ...action.patch } },\n }\n : state;\n case 'updateChannelAgentRoute': {\n if (!state.form) return state;\n const k =\n action.channel === 'telegram'\n ? 'telegram'\n : action.channel === 'weixin'\n ? 'weixin'\n : 'feishu';\n return {\n ...state,\n form: {\n ...state.form,\n channelAgentRoutes: {\n ...state.form.channelAgentRoutes,\n [k]: {\n ...state.form.channelAgentRoutes[k],\n [action.accountId]: action.agentId.trim().toLowerCase(),\n },\n },\n },\n };\n }\n case 'setTgAccountsDraft':\n return { ...state, tgAccountsDraft: action.value };\n case 'setWxAccountsDraft':\n return { ...state, wxAccountsDraft: action.value };\n case 'setFeishuAccountsDraft':\n return { ...state, feishuAccountsDraft: action.value };\n case 'setTgAccountsError':\n return { ...state, tgAccountsError: action.value };\n case 'setWxAccountsError':\n return { ...state, wxAccountsError: action.value };\n case 'setFeishuAccountsError':\n return { ...state, feishuAccountsError: action.value };\n case 'applyTgAccounts':\n return state.form\n ? {\n ...state,\n form: { ...state.form, telegram: { ...state.form.telegram, accounts: action.accounts } },\n tgAccountsError: '',\n }\n : state;\n case 'applyWxAccounts':\n return state.form\n ? {\n ...state,\n form: { ...state.form, weixin: { ...state.form.weixin, accounts: action.accounts } },\n wxAccountsError: '',\n }\n : state;\n case 'applyFeishuAccounts':\n return state.form\n ? {\n ...state,\n form: { ...state.form, feishu: { ...state.form.feishu, accounts: action.accounts } },\n feishuAccountsError: '',\n }\n : state;\n case 'restoreForm':\n return { ...state, form: structuredClone(action.payload) };\n }\n}\n\nexport function useChannelsSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const ch = m.channelsSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const dirtyRef = useRef(false);\n const [panelForm, dispatchPanelForm] = useReducer(panelFormReducer, emptyPanelFormState);\n const [syncSource, setSyncSource] = useState({\n hasToken,\n parsed: null as ChannelsSettingsState | null,\n });\n\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveOk, setSaveOk] = useState(false);\n\n const [weixinSuccessBanner, setWeixinSuccessBanner] = useState<string | null>(null);\n const [feishuSetupSuccessBanner, setFeishuSetupSuccessBanner] = useState<string | null>(null);\n const [tgAdvanced, setTgAdvanced] = useState(false);\n const [showToken, setShowToken] = useState(false);\n const [showFeishuSecret, setShowFeishuSecret] = useState(false);\n const [showFeishuWebhookSecrets, setShowFeishuWebhookSecrets] = useState(false);\n const [copied, setCopied] = useState(false);\n const [feishuCopied, setFeishuCopied] = useState(false);\n const [feishuWebhookCopied, setFeishuWebhookCopied] = useState(false);\n\n const { data: chatAgents } = useSWR(hasToken ? 'gateway-chat-agents-ch' : null, fetchChatAgents, {\n revalidateOnFocus: false,\n });\n\n const { data: cfgData, error: swrError, isLoading, mutate } = useGatewayConfigSwr(hasToken);\n\n const parsed = useMemo(\n () =>\n cfgData?.payload?.config !== undefined\n ? normalizeChannelsFromConfig(cfgData.payload.config)\n : null,\n [cfgData],\n );\n\n if (hasToken !== syncSource.hasToken || parsed !== syncSource.parsed) {\n setSyncSource({ hasToken, parsed });\n if (!hasToken) {\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'reset' });\n setSaveOk(false);\n } else if (parsed !== null && !dirtyRef.current) {\n dispatchPanelForm({ type: 'load', payload: parsed });\n setSaveOk(false);\n }\n }\n\n const {\n form,\n baseline,\n tgAccountsDraft,\n tgAccountsError,\n wxAccountsDraft,\n wxAccountsError,\n feishuAccountsDraft,\n feishuAccountsError,\n } = panelForm;\n\n const dirty = useMemo(() => {\n if (!form || !baseline) return false;\n return JSON.stringify(form) !== JSON.stringify(baseline);\n }, [form, baseline]);\n\n const loading = Boolean(hasToken && isLoading && cfgData === undefined && !swrError);\n const fetchError =\n swrError instanceof Error ? swrError.message : swrError ? String(swrError) : null;\n\n const updateChannelAgentRoute = useCallback(\n (channel: 'telegram' | 'weixin' | 'feishu', accountId: string, agentId: string) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateChannelAgentRoute', channel, accountId, agentId });\n },\n [],\n );\n\n const updateTelegram = useCallback((patch: Partial<ChannelsSettingsState['telegram']>) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateTelegram', patch });\n }, []);\n\n const updateWeixin = useCallback((patch: Partial<ChannelsSettingsState['weixin']>) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateWeixin', patch });\n }, []);\n\n const updateFeishu = useCallback((patch: Partial<ChannelsSettingsState['feishu']>) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateFeishu', patch });\n }, []);\n\n const save = useCallback(async (): Promise<boolean> => {\n if (!form || saving) return false;\n setSaving(true);\n setError(null);\n setSaveOk(false);\n try {\n const next = await patchChannelsSettings(form);\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'commitSaved', payload: next });\n setSaveOk(true);\n window.setTimeout(() => setSaveOk(false), 2500);\n return true;\n } catch (e) {\n setError(e instanceof Error ? e.message : ch.saveError);\n return false;\n } finally {\n setSaving(false);\n }\n }, [form, saving, ch.saveError]);\n\n const discard = useCallback(() => {\n if (!baseline) return;\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'discard' });\n setError(null);\n setSaveOk(false);\n }, [baseline]);\n\n const toggleChannelEnabled = useCallback(\n async (which: 'weixin' | 'telegram' | 'feishu', enabled: boolean) => {\n if (!form || saving) return;\n const prev = form;\n const next: ChannelsSettingsState =\n which === 'weixin'\n ? { ...form, weixin: { ...form.weixin, enabled } }\n : which === 'telegram'\n ? { ...form, telegram: { ...form.telegram, enabled } }\n : { ...form, feishu: { ...form.feishu, enabled } };\n dirtyRef.current = true;\n if (which === 'weixin') {\n dispatchPanelForm({ type: 'updateWeixin', patch: { enabled } });\n } else if (which === 'telegram') {\n dispatchPanelForm({ type: 'updateTelegram', patch: { enabled } });\n } else {\n dispatchPanelForm({ type: 'updateFeishu', patch: { enabled } });\n }\n setSaving(true);\n setError(null);\n try {\n const synced = await patchChannelsSettings(next);\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'commitSaved', payload: synced });\n } catch (e) {\n setError(e instanceof Error ? e.message : ch.saveError);\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'restoreForm', payload: prev });\n } finally {\n setSaving(false);\n }\n },\n [form, saving, ch.saveError],\n );\n\n const copyToken = useCallback(async () => {\n const t = form ? telegramDefaultBotToken(form.telegram) : '';\n if (!t) return;\n const ok = await copyTextToClipboard(t);\n if (!ok) return;\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n }, [form]);\n\n const handleFeishuQrSetupSuccess = useCallback(\n (result: { appId: string; domain: string; openId?: string }) => {\n updateFeishu({\n appId: result.appId,\n domain: result.domain,\n enabled: true,\n });\n void mutate();\n setFeishuSetupSuccessBanner(ch.feishuQrSetupSuccess);\n window.setTimeout(() => setFeishuSetupSuccessBanner(null), 4000);\n },\n [updateFeishu, mutate, ch.feishuQrSetupSuccess],\n );\n\n const copyFeishuSecret = useCallback(async () => {\n const t = form?.feishu?.appSecret;\n if (!t) return;\n const ok = await copyTextToClipboard(t);\n if (!ok) return;\n setFeishuCopied(true);\n window.setTimeout(() => setFeishuCopied(false), 2000);\n }, [form]);\n\n const copyFeishuWebhookConfig = useCallback(async () => {\n const fs = form?.feishu;\n if (!fs) return;\n const payload = {\n connectionMode: fs.connectionMode,\n verificationToken: fs.verificationToken || '',\n encryptKey: fs.encryptKey || '',\n webhookHost: fs.webhookHost || '',\n webhookPort: fs.webhookPort || 0,\n webhookPath: fs.webhookPath || '',\n };\n const ok = await copyTextToClipboard(JSON.stringify(payload, null, 2));\n if (!ok) return;\n setFeishuWebhookCopied(true);\n window.setTimeout(() => setFeishuWebhookCopied(false), 2000);\n }, [form]);\n\n const setTgAccountsDraft = useCallback((value: string) => {\n dispatchPanelForm({ type: 'setTgAccountsDraft', value });\n }, []);\n\n const setWxAccountsDraft = useCallback((value: string) => {\n dispatchPanelForm({ type: 'setWxAccountsDraft', value });\n }, []);\n\n const setFeishuAccountsDraft = useCallback((value: string) => {\n dispatchPanelForm({ type: 'setFeishuAccountsDraft', value });\n }, []);\n\n const onTgAccountsBlur = useCallback(() => {\n if (!form) return;\n const raw = tgAccountsDraft.trim();\n if (!raw) {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'applyTgAccounts', accounts: {} });\n return;\n }\n try {\n const parsedJson = JSON.parse(raw) as unknown;\n if (typeof parsedJson !== 'object' || parsedJson === null || Array.isArray(parsedJson)) {\n throw new Error(ch.jsonObjectAccounts);\n }\n dirtyRef.current = true;\n dispatchPanelForm({\n type: 'applyTgAccounts',\n accounts: parsedJson as ChannelsSettingsState['telegram']['accounts'],\n });\n } catch (err) {\n dispatchPanelForm({\n type: 'setTgAccountsError',\n value: err instanceof Error ? err.message : ch.jsonInvalid,\n });\n }\n }, [form, tgAccountsDraft, ch.jsonObjectAccounts, ch.jsonInvalid]);\n\n const onWxAccountsBlur = useCallback(() => {\n if (!form) return;\n const raw = wxAccountsDraft.trim();\n if (!raw) {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'applyWxAccounts', accounts: {} });\n return;\n }\n try {\n const parsedJson = JSON.parse(raw) as unknown;\n if (typeof parsedJson !== 'object' || parsedJson === null || Array.isArray(parsedJson)) {\n throw new Error(ch.jsonObjectAccounts);\n }\n dirtyRef.current = true;\n dispatchPanelForm({\n type: 'applyWxAccounts',\n accounts: parsedJson as ChannelsSettingsState['weixin']['accounts'],\n });\n } catch (err) {\n dispatchPanelForm({\n type: 'setWxAccountsError',\n value: err instanceof Error ? err.message : ch.jsonInvalid,\n });\n }\n }, [form, wxAccountsDraft, ch.jsonObjectAccounts, ch.jsonInvalid]);\n\n const onFeishuAccountsBlur = useCallback(() => {\n if (!form) return;\n const raw = feishuAccountsDraft.trim();\n if (!raw) {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'applyFeishuAccounts', accounts: {} });\n return;\n }\n try {\n const parsedJson = JSON.parse(raw) as unknown;\n if (typeof parsedJson !== 'object' || parsedJson === null || Array.isArray(parsedJson)) {\n throw new Error(ch.jsonObjectAccounts);\n }\n dirtyRef.current = true;\n dispatchPanelForm({\n type: 'applyFeishuAccounts',\n accounts: parsedJson as ChannelsSettingsState['feishu']['accounts'],\n });\n } catch (err) {\n dispatchPanelForm({\n type: 'setFeishuAccountsError',\n value: err instanceof Error ? err.message : ch.jsonInvalid,\n });\n }\n }, [form, feishuAccountsDraft, ch.jsonObjectAccounts, ch.jsonInvalid]);\n\n const dmOpts = useMemo(\n () =>\n (['pairing', 'allowlist', 'open', 'disabled'] as DmPolicy[]).map((value) => ({\n value,\n label: ch.policy.dm[value],\n })),\n [ch.policy.dm],\n );\n\n const groupOpts = useMemo(\n () =>\n (['open', 'disabled', 'allowlist'] as GroupPolicy[]).map((value) => ({\n value,\n label: ch.policy.group[value],\n })),\n [ch.policy.group],\n );\n\n const replyOpts = useMemo(\n () =>\n (['off', 'first', 'all'] as ReplyToMode[]).map((value) => ({\n value,\n label: ch.policy.reply[value],\n })),\n [ch.policy.reply],\n );\n\n const streamOpts = useMemo(\n () =>\n (['off', 'partial', 'block'] as StreamMode[]).map((value) => ({\n value,\n label: ch.policy.stream[value],\n })),\n [ch.policy.stream],\n );\n\n return {\n language,\n m,\n ch,\n hasToken,\n loading,\n fetchError,\n mutate,\n form,\n baseline,\n dirty,\n saving,\n error,\n saveOk,\n weixinSuccessBanner,\n setWeixinSuccessBanner,\n feishuSetupSuccessBanner,\n tgAdvanced,\n setTgAdvanced,\n showToken,\n setShowToken,\n showFeishuSecret,\n setShowFeishuSecret,\n showFeishuWebhookSecrets,\n setShowFeishuWebhookSecrets,\n copied,\n feishuCopied,\n feishuWebhookCopied,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n feishuAccountsDraft,\n setFeishuAccountsDraft,\n feishuAccountsError,\n chatAgents,\n updateChannelAgentRoute,\n updateTelegram,\n updateWeixin,\n updateFeishu,\n save,\n discard,\n toggleChannelEnabled,\n copyToken,\n handleFeishuQrSetupSuccess,\n copyFeishuSecret,\n copyFeishuWebhookConfig,\n onTgAccountsBlur,\n onWxAccountsBlur,\n onFeishuAccountsBlur,\n dmOpts,\n groupOpts,\n replyOpts,\n streamOpts,\n };\n}\n","import { ExternalLink } from 'lucide-react';\nimport QRCode from 'qrcode';\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport {\n fetchWeixinGatewayQrLoginStart,\n fetchWeixinGatewayQrLoginStatus,\n} from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { useAsyncResource } from '@/lib/use-async-resource';\n\nimport { ChannelsSettingsDialogFooter } from './channels-settings-dialog-footer';\nimport { ChannelSettingsShell, type ChannelSettingsPresentation } from './channel-settings-shell';\n\nconst QR_IMAGE_OPTIONS = {\n width: 208,\n margin: 2,\n errorCorrectionLevel: 'M' as const,\n color: { dark: '#000000ff', light: '#ffffffff' },\n};\n\ntype QrStartData = { sessionKey: string | null; qrcodeUrl: string | null };\n\nconst emptyQrStart: QrStartData = { sessionKey: null, qrcodeUrl: null };\n\nfunction WeixinQrLoginSession({\n ch,\n onLoginSuccess,\n onOpenChange,\n closeOnLoginSuccess,\n moreSettings,\n}: {\n ch: ChannelsSettingsMessages;\n onLoginSuccess: () => void | Promise<void>;\n onOpenChange: (open: boolean) => void;\n closeOnLoginSuccess: boolean;\n moreSettings?: ReactNode;\n}) {\n const [generation, setGeneration] = useState(0);\n const [hint, setHint] = useState<string | null>(null);\n const [pollError, setPollError] = useState<string | null>(null);\n\n const onLoginSuccessRef = useRef(onLoginSuccess);\n const onOpenChangeRef = useRef(onOpenChange);\n onLoginSuccessRef.current = onLoginSuccess;\n onOpenChangeRef.current = onOpenChange;\n\n const start = useAsyncResource(\n () =>\n fetchWeixinGatewayQrLoginStart().then((r) => ({\n sessionKey: r.sessionKey,\n qrcodeUrl: r.qrcodeUrl,\n })),\n [generation],\n { initial: emptyQrStart, errorData: emptyQrStart },\n );\n\n const sessionKey = start.data.sessionKey;\n const qrcodeUrl = start.data.qrcodeUrl;\n const busy = start.loading;\n const startError =\n start.error instanceof Error\n ? start.error.message\n : start.error\n ? String(start.error)\n : null;\n const error = pollError ?? startError;\n\n const restart = useCallback(() => {\n setPollError(null);\n setHint(null);\n setGeneration((g) => g + 1);\n }, []);\n\n useEffect(() => {\n if (!sessionKey) return;\n let cancelled = false;\n let intervalId: number | undefined;\n\n const poll = async () => {\n try {\n const st = await fetchWeixinGatewayQrLoginStatus(sessionKey);\n if (cancelled) return;\n if (st.phase === 'polling') {\n start.setData((prev) => ({ ...prev, qrcodeUrl: st.qrcodeUrl }));\n setHint(st.qrStatus === 'scaned' ? ch.weixinQrLoginScanned : null);\n return;\n }\n if (st.phase === 'done') {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n intervalId = undefined;\n }\n start.setData(emptyQrStart);\n if (st.ok) {\n if (closeOnLoginSuccess) onOpenChangeRef.current(false);\n await onLoginSuccessRef.current();\n } else {\n setPollError(st.message);\n }\n return;\n }\n if (st.phase === 'unknown') {\n setHint(null);\n }\n } catch (e) {\n if (!cancelled) {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n setPollError(e instanceof Error ? e.message : 'Request failed');\n start.setData(emptyQrStart);\n }\n }\n };\n\n intervalId = window.setInterval(() => void poll(), 2000);\n void poll();\n return () => {\n cancelled = true;\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n };\n }, [sessionKey, ch.weixinQrLoginScanned, closeOnLoginSuccess, start.setData]);\n\n const qrImage = useAsyncResource(\n () => QRCode.toDataURL(qrcodeUrl!, QR_IMAGE_OPTIONS),\n [qrcodeUrl],\n { enabled: Boolean(qrcodeUrl), initial: null as string | null, errorData: null },\n );\n\n const qrDataUrl = qrImage.data;\n const qrGenFailed = qrImage.error !== null && !qrImage.loading;\n\n const showQr = Boolean(qrcodeUrl && sessionKey);\n const qrFrameLoading = !error && !showQr;\n\n return (\n <>\n <div className=\"text-center\">\n <p className=\"text-base font-semibold tracking-tight text-fg\">{ch.weixinQrModalTitle}</p>\n <p className=\"mt-1.5 text-sm text-fg-muted\">{ch.weixinQrModalSubtitle}</p>\n </div>\n\n <div className=\"mt-6 flex min-h-[17.5rem] flex-col items-center justify-center gap-3\">\n {error ? <p className=\"text-center text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n\n {!error && (showQr || qrFrameLoading) ? (\n <div className=\"flex w-full flex-col items-center gap-3\">\n <p\n className={cn(\n 'min-h-[1.25rem] text-center text-sm',\n hint && !qrFrameLoading ? 'text-accent' : 'text-fg-muted',\n )}\n >\n {qrFrameLoading ? ch.weixinQrLoginBusy : hint ?? '\\u00a0'}\n </p>\n <div\n className={cn(\n 'relative flex size-52 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-edge-subtle bg-white p-3 dark:border-edge',\n qrFrameLoading && 'bg-surface-muted/40 dark:bg-surface-base',\n )}\n >\n {qrFrameLoading ? (\n <div\n className=\"absolute inset-3 animate-pulse rounded-md bg-surface-muted dark:bg-surface-hover\"\n aria-hidden\n />\n ) : null}\n {showQr && qrcodeUrl && !error && qrDataUrl && !qrGenFailed ? (\n <img src={qrDataUrl} alt=\"\" className=\"relative z-[1] size-full object-contain\" />\n ) : null}\n {showQr && qrcodeUrl && !error && !qrDataUrl && !qrGenFailed && !qrFrameLoading ? (\n <p className=\"relative z-[1] px-2 text-center text-sm text-fg-muted\">{ch.weixinQrEncoding}</p>\n ) : null}\n {showQr && qrcodeUrl && !error && qrGenFailed ? (\n <div className=\"relative z-[1] flex size-full flex-col items-center justify-center gap-2 px-1\">\n <p className=\"text-center text-xs text-fg-muted\">{ch.weixinQrImageError}</p>\n <a\n href={qrcodeUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1 text-xs text-accent underline-offset-2 hover:underline\"\n >\n <ExternalLink className=\"size-3 shrink-0\" />\n {ch.weixinQrOpenLink}\n </a>\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n\n <div className=\"mt-6\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-11 w-full rounded-full border-0 bg-fg text-surface-panel hover:opacity-90 dark:bg-fg dark:text-surface-panel\"\n disabled={busy}\n onClick={restart}\n >\n {busy ? ch.weixinQrLoginBusy : ch.weixinQrRegenerate}\n </Button>\n </div>\n\n {moreSettings ? (\n <div className=\"mt-6 border-t border-edge-subtle pt-4 dark:border-edge-subtle\">{moreSettings}</div>\n ) : null}\n </>\n );\n}\n\nexport function WeixinQrLoginDialog({\n open,\n onOpenChange,\n ch,\n onLoginSuccess,\n moreSettings,\n settingsDirty = false,\n settingsSaving = false,\n onSettingsDiscard,\n onSettingsSave,\n presentation = 'modal',\n closeOnLoginSuccess = true,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n presentation?: ChannelSettingsPresentation;\n closeOnLoginSuccess?: boolean;\n ch: ChannelsSettingsMessages;\n onLoginSuccess: () => void | Promise<void>;\n moreSettings?: ReactNode;\n settingsDirty?: boolean;\n settingsSaving?: boolean;\n onSettingsDiscard?: () => void;\n onSettingsSave?: () => Promise<boolean>;\n}) {\n return (\n <ChannelSettingsShell\n presentation={presentation}\n open={open}\n onOpenChange={onOpenChange}\n title={ch.weixinTitle}\n description={ch.weixinSubtitle}\n srTitle={ch.weixinQrModalTitle}\n srDescription={ch.weixinQrModalSubtitle}\n closeAriaLabel={ch.weixinQrModalCloseAria}\n wide\n footer={\n moreSettings && onSettingsDiscard && onSettingsSave ? (\n <ChannelsSettingsDialogFooter\n ch={ch}\n dirty={settingsDirty}\n saving={settingsSaving}\n showCancel={false}\n onCancel={() => onOpenChange(false)}\n onDiscard={onSettingsDiscard}\n onSave={onSettingsSave}\n />\n ) : undefined\n }\n >\n {open ? (\n <WeixinQrLoginSession\n key=\"active\"\n ch={ch}\n onLoginSuccess={onLoginSuccess}\n onOpenChange={onOpenChange}\n closeOnLoginSuccess={closeOnLoginSuccess}\n moreSettings={moreSettings}\n />\n ) : null}\n </ChannelSettingsShell>\n );\n}\n","import type { ChannelsSettingsState, StreamMode } from '@/features/settings/channels-config-api';\nimport { weixinRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport { cn } from '@/lib/cn';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { ChannelAgentRoutingBlock } from './channel-agent-routing-block';\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { channelsInputClassName } from './utils';\n\nexport function WeixinAdvanced({\n wx,\n updateWeixin,\n ch,\n streamOpts,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n onWxAccountsBlur,\n channelAgentRoutesWx,\n defaultAgentId,\n agentItems,\n onAgentRouteChange,\n routingDisabled,\n}: {\n wx: ChannelsSettingsState['weixin'];\n updateWeixin: (p: Partial<ChannelsSettingsState['weixin']>) => void;\n ch: ChannelsSettingsMessages;\n streamOpts: { value: StreamMode; label: string }[];\n wxAccountsDraft: string;\n setWxAccountsDraft: (s: string) => void;\n wxAccountsError: string;\n onWxAccountsBlur: () => void;\n channelAgentRoutesWx: Record<string, string>;\n defaultAgentId: string;\n agentItems: { id: string; name?: string }[];\n onAgentRouteChange: (accountId: string, agentId: string) => void;\n routingDisabled: boolean;\n}) {\n const inputClassName = channelsInputClassName;\n return (\n <div className=\"space-y-4 border-t border-edge-subtle pt-4 dark:border-edge\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.weixinAllowFrom}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"wxid_..., openid_...\"\n value={wx.allowFrom.join(', ')}\n onChange={(e) =>\n updateWeixin({\n allowFrom: e.target.value.split(/[,\\n]/).flatMap((s) => {\n const v = s.trim();\n return v ? [v] : [];\n }),\n })\n }\n />\n <FieldHint>{ch.weixinAllowFromDesc}</FieldHint>\n </div>\n <SelectField\n label={ch.streamMode}\n value={wx.streamMode}\n onChange={(v) => updateWeixin({ streamMode: v })}\n options={streamOpts}\n />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.historyLimit}</FieldLabel>\n <input\n type=\"number\"\n min={10}\n max={200}\n className={inputClassName()}\n value={wx.historyLimit}\n onChange={(e) => updateWeixin({ historyLimit: parseInt(e.target.value, 10) || 50 })}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.textChunkLimit}</FieldLabel>\n <input\n type=\"number\"\n min={1000}\n max={10000}\n step={100}\n className={inputClassName()}\n value={wx.textChunkLimit}\n onChange={(e) => updateWeixin({ textChunkLimit: parseInt(e.target.value, 10) || 4000 })}\n />\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.weixinRouteTag}</FieldLabel>\n <input\n className={inputClassName()}\n value={wx.routeTag}\n onChange={(e) => updateWeixin({ routeTag: e.target.value })}\n placeholder={ch.routeTagPlaceholder}\n />\n <FieldHint>{ch.weixinRouteTagDesc}</FieldHint>\n </div>\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={wx.debug}\n onChange={(e) => updateWeixin({ debug: e.target.checked })}\n />\n {ch.weixinDebug}\n </label>\n <FieldHint>{ch.weixinDebugDesc}</FieldHint>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.weixinAccountsJson}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[140px] resize-y font-mono text-xs')}\n spellCheck={false}\n value={wxAccountsDraft}\n onChange={(e) => setWxAccountsDraft(e.target.value)}\n onBlur={onWxAccountsBlur}\n placeholder='{ \"personal\": { \"name\": \"...\", \"cdnBaseUrl\": \"...\", \"enabled\": true } }'\n />\n {wxAccountsError ? (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{wxAccountsError}</p>\n ) : (\n <FieldHint>{ch.weixinAccountsJsonDesc}</FieldHint>\n )}\n </div>\n\n <ChannelAgentRoutingBlock\n accountIds={weixinRoutingAccountIds(wx)}\n routes={channelAgentRoutesWx}\n defaultAgentId={defaultAgentId}\n agentItems={agentItems}\n disabled={routingDisabled}\n onChange={onAgentRouteChange}\n ch={ch}\n />\n </div>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\n\nimport type { ChatAgentsPayload } from '@/features/chat/agent-selection/chat-agents-api';\nimport type { ChannelsSettingsState, DmPolicy, StreamMode } from '@/features/settings/channels-config-api';\nimport { weixinRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { ChannelPairingSection } from './channel-pairing-section';\nimport { SelectField } from './field-primitives';\nimport { scrollToChannelPairingSection } from './pairing-scroll';\nimport { WeixinAdvanced } from './weixin-advanced';\n\nexport function WeixinMoreSettingsSection({\n ch,\n wx,\n updateWeixin,\n dmOpts,\n streamOpts,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n onWxAccountsBlur,\n form,\n chatAgents,\n onAgentRouteChange,\n saving,\n language,\n dialogOpen,\n pairingFocus = false,\n}: {\n ch: ChannelsSettingsMessages;\n wx: ChannelsSettingsState['weixin'];\n updateWeixin: (patch: Partial<ChannelsSettingsState['weixin']>) => void;\n dmOpts: { value: DmPolicy; label: string }[];\n streamOpts: { value: StreamMode; label: string }[];\n wxAccountsDraft: string;\n setWxAccountsDraft: (v: string) => void;\n wxAccountsError: string;\n onWxAccountsBlur: () => void;\n form: ChannelsSettingsState;\n chatAgents: ChatAgentsPayload | undefined;\n onAgentRouteChange: (accountId: string, agentId: string) => void;\n saving: boolean;\n language: string;\n dialogOpen: boolean;\n pairingFocus?: boolean;\n}) {\n const wxAccountIds = weixinRoutingAccountIds(wx);\n const resolvedWxAccounts = wxAccountIds.length > 0 ? wxAccountIds : ['default'];\n const detailsRef = useRef<HTMLDetailsElement>(null);\n\n useEffect(() => {\n if (!pairingFocus) return;\n const details = detailsRef.current;\n if (details) details.open = true;\n const timer = window.setTimeout(() => scrollToChannelPairingSection('weixin'), 80);\n return () => window.clearTimeout(timer);\n }, [pairingFocus]);\n\n return (\n <details\n ref={detailsRef}\n className=\"group rounded-xl border border-edge-subtle bg-surface-base open:pb-3 dark:border-edge\"\n >\n <summary className=\"cursor-pointer list-none rounded-xl px-3 py-2.5 text-sm font-medium text-fg transition-colors hover:bg-surface-hover group-open:rounded-b-none [&::-webkit-details-marker]:hidden\">\n <span className=\"inline-flex items-center gap-2\">\n <ChevronDown className=\"size-4 shrink-0 text-fg-muted transition-transform group-open:rotate-180\" />\n {ch.advancedShow}\n </span>\n </summary>\n <div className=\"space-y-4 border-t border-edge-subtle px-3 pb-3 pt-3 dark:border-edge-subtle\">\n <p className=\"text-xs leading-relaxed text-fg-muted\">{ch.weixinAdvancedHint}</p>\n <label className=\"flex cursor-pointer items-start gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox mt-0.5\"\n checked={wx.enabled}\n onChange={(e) => updateWeixin({ enabled: e.target.checked })}\n />\n <span>{ch.enableWeixinAria}</span>\n </label>\n <SelectField label={ch.dmPolicy} value={wx.dmPolicy} onChange={(v) => updateWeixin({ dmPolicy: v })} options={dmOpts} />\n <ChannelPairingSection\n channel=\"weixin\"\n accountIds={resolvedWxAccounts}\n channelConfig={wx}\n active={dialogOpen}\n ch={ch}\n language={language}\n />\n <div className=\"[&>div]:border-0 [&>div]:pt-0\">\n <WeixinAdvanced\n wx={wx}\n updateWeixin={updateWeixin}\n ch={ch}\n streamOpts={streamOpts}\n wxAccountsDraft={wxAccountsDraft}\n setWxAccountsDraft={setWxAccountsDraft}\n wxAccountsError={wxAccountsError}\n onWxAccountsBlur={onWxAccountsBlur}\n channelAgentRoutesWx={form.channelAgentRoutes.weixin}\n defaultAgentId={form.defaultAgentId}\n agentItems={chatAgents?.items ?? []}\n onAgentRouteChange={onAgentRouteChange}\n routingDisabled={saving}\n />\n </div>\n </div>\n </details>\n );\n}\n","import { ExternalLink } from 'lucide-react';\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';\nimport { useNavigate, useParams, useSearchParams } from 'react-router-dom';\n\nimport { Button } from '@/components/ui/button';\nimport { docsGuidePageUrl } from '@/navigation';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { usePageHeaderStore } from '@/stores/page-header-store';\n\nimport { ChannelsHubGrid, type OpenChannelOptions } from './channels-hub-grid';\nimport { ChannelsHubGridSkeleton } from './channels-hub-card-skeleton';\nimport {\n CHANNELS_HUB_PATH,\n channelDetailPath,\n isManageableChannelId,\n normalizeChannelRouteId,\n} from './channels-routes';\nimport { ExtensionChannelDetailPanel } from './extension-channel-detail-panel';\nimport { ChannelsPageHeaderActions } from './channels-page-header-actions';\nimport { FeishuMoreSettingsSection } from './feishu-more-settings-section';\nimport { FeishuQrSetupDialog } from './feishu-qr-setup-dialog';\nimport { TelegramChannelSettingsDialog } from './telegram-channel-settings-dialog';\nimport { useChannelCatalog } from './use-channel-catalog';\nimport { useChannelsHubData } from './use-channels-hub-data';\nimport { useChannelsSettingsPanel } from './use-channels-settings-panel';\nimport { WeixinQrLoginDialog } from './weixin-qr-login-dialog';\nimport { WeixinMoreSettingsSection } from './weixin-more-settings-section';\n\nexport function ChannelsSettingsPanel() {\n const navigate = useNavigate();\n const { channelId: routeChannelId } = useParams<{ channelId?: string }>();\n const [searchParams] = useSearchParams();\n\n const ctx = useChannelsSettingsPanel();\n const {\n language,\n m,\n ch,\n hasToken,\n loading,\n fetchError,\n mutate,\n form,\n baseline,\n dirty,\n saving,\n error,\n saveOk,\n weixinSuccessBanner,\n setWeixinSuccessBanner,\n feishuSetupSuccessBanner,\n tgAdvanced,\n setTgAdvanced,\n showToken,\n setShowToken,\n showFeishuSecret,\n setShowFeishuSecret,\n showFeishuWebhookSecrets,\n setShowFeishuWebhookSecrets,\n copied,\n feishuCopied,\n feishuWebhookCopied,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n feishuAccountsDraft,\n setFeishuAccountsDraft,\n feishuAccountsError,\n chatAgents,\n updateChannelAgentRoute,\n updateTelegram,\n updateWeixin,\n updateFeishu,\n save,\n discard,\n toggleChannelEnabled,\n copyToken,\n handleFeishuQrSetupSuccess,\n copyFeishuSecret,\n copyFeishuWebhookConfig,\n onTgAccountsBlur,\n onWxAccountsBlur,\n onFeishuAccountsBlur,\n dmOpts,\n groupOpts,\n replyOpts,\n streamOpts,\n } = ctx;\n\n const [refreshing, setRefreshing] = useState(false);\n\n const { entries: catalogEntries } = useChannelCatalog(hasToken, ch);\n const catalogById = useMemo(() => new Map(catalogEntries.map((e) => [e.id, e])), [catalogEntries]);\n\n const activeChannelId = normalizeChannelRouteId(routeChannelId);\n const scrollToPairing = searchParams.get('pairing') === '1';\n const detailOpen = Boolean(activeChannelId && catalogById.has(activeChannelId));\n\n const { cards, refreshAll } = useChannelsHubData({\n hasToken,\n form,\n ch,\n });\n\n const activeEntry = activeChannelId ? catalogById.get(activeChannelId) : undefined;\n const activeCard = activeChannelId ? cards.find((c) => c.id === activeChannelId) : undefined;\n\n useEffect(() => {\n if (!activeChannelId || catalogEntries.length === 0) return;\n if (!catalogById.has(activeChannelId)) {\n navigate(CHANNELS_HUB_PATH, { replace: true });\n }\n }, [activeChannelId, catalogById, catalogEntries.length, navigate]);\n\n const openChannel = useCallback(\n (id: string, opts?: OpenChannelOptions) => {\n navigate(channelDetailPath(id, { pairing: opts?.scrollToPairing }));\n },\n [navigate],\n );\n\n const closeChannel = useCallback(() => {\n navigate(CHANNELS_HUB_PATH);\n }, [navigate]);\n\n const handleWeixinOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!nextOpen) closeChannel();\n },\n [closeChannel],\n );\n\n const handleWeixinLoginSuccess = useCallback(async () => {\n await mutate();\n setWeixinSuccessBanner(ch.weixinQrLoginSuccess);\n window.setTimeout(() => setWeixinSuccessBanner(null), 4000);\n }, [ch.weixinQrLoginSuccess, mutate, setWeixinSuccessBanner]);\n\n const handleRefresh = useCallback(async () => {\n setRefreshing(true);\n try {\n refreshAll();\n await mutate();\n } finally {\n setRefreshing(false);\n }\n }, [mutate, refreshAll]);\n\n if (!hasToken) {\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{m.settingsSections.channels}</h1>\n <p className=\"text-sm text-fg-muted\">{ch.needToken}</p>\n </div>\n </>\n );\n }\n\n if (loading) {\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <div className=\"space-y-2\">\n <div className=\"h-7 w-40 animate-pulse rounded-md bg-surface-hover motion-reduce:animate-none dark:bg-surface-active/50\" />\n <div className=\"h-4 w-full max-w-md animate-pulse rounded-md bg-surface-hover motion-reduce:animate-none dark:bg-surface-active/50\" />\n </div>\n <ChannelsHubGridSkeleton />\n <p className=\"text-sm text-fg-muted\">{ch.loading}</p>\n </div>\n </>\n );\n }\n\n if (!form) {\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{error ?? fetchError ?? ch.loadError}</p>\n <Button type=\"button\" variant=\"secondary\" onClick={() => void mutate()}>\n {ch.retry}\n </Button>\n </div>\n </>\n );\n }\n\n const wx = form.weixin;\n const pairingFocusWeixin = scrollToPairing && activeChannelId === 'weixin';\n const pairingFocusFeishu = scrollToPairing && activeChannelId === 'feishu';\n\n const weixinMoreSettings = (\n <WeixinMoreSettingsSection\n ch={ch}\n wx={wx}\n updateWeixin={updateWeixin}\n dmOpts={dmOpts}\n streamOpts={streamOpts}\n wxAccountsDraft={wxAccountsDraft}\n setWxAccountsDraft={setWxAccountsDraft}\n wxAccountsError={wxAccountsError}\n onWxAccountsBlur={onWxAccountsBlur}\n form={form}\n chatAgents={chatAgents}\n onAgentRouteChange={(acc, aid) => updateChannelAgentRoute('weixin', acc, aid)}\n saving={saving}\n language={language}\n dialogOpen={detailOpen && activeChannelId === 'weixin'}\n pairingFocus={pairingFocusWeixin}\n />\n );\n\n const feishuMoreSettings = (\n <FeishuMoreSettingsSection\n ch={ch}\n form={form}\n baseline={baseline}\n showFeishuSecret={showFeishuSecret}\n setShowFeishuSecret={setShowFeishuSecret}\n showFeishuWebhookSecrets={showFeishuWebhookSecrets}\n setShowFeishuWebhookSecrets={setShowFeishuWebhookSecrets}\n feishuCopied={feishuCopied}\n feishuWebhookCopied={feishuWebhookCopied}\n copyFeishuSecret={copyFeishuSecret}\n copyFeishuWebhookConfig={copyFeishuWebhookConfig}\n updateFeishu={updateFeishu}\n updateChannelAgentRoute={updateChannelAgentRoute}\n feishuAccountsDraft={feishuAccountsDraft}\n setFeishuAccountsDraft={setFeishuAccountsDraft}\n feishuAccountsError={feishuAccountsError}\n onFeishuAccountsBlur={onFeishuAccountsBlur}\n dmOpts={dmOpts}\n groupOpts={groupOpts}\n chatAgents={chatAgents}\n saving={saving}\n language={language}\n dialogOpen={detailOpen && activeChannelId === 'feishu'}\n pairingFocus={pairingFocusFeishu}\n />\n );\n\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-1\">\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{m.settingsSections.channels}</h1>\n <p className=\"text-sm text-fg-muted\">{ch.subtitle}</p>\n <a\n href={docsGuidePageUrl(language, 'channels')}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n >\n {ch.docsLink}\n <ExternalLink className=\"size-3.5\" />\n </a>\n </header>\n\n {error ? <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n {weixinSuccessBanner ? <p className=\"text-xs text-accent\">{weixinSuccessBanner}</p> : null}\n {feishuSetupSuccessBanner ? (\n <div className=\"rounded-xl border border-success/30 bg-success-soft px-4 py-3 text-sm text-success\">\n {feishuSetupSuccessBanner}\n </div>\n ) : null}\n\n {refreshing ? (\n <ChannelsHubGridSkeleton count={Math.max(catalogEntries.length, 3)} />\n ) : (\n <ChannelsHubGrid\n catalog={catalogEntries}\n cards={cards}\n ch={ch}\n saving={saving}\n onOpenChannel={openChannel}\n onToggleChannel={(id, enabled) => {\n if (isManageableChannelId(id)) void toggleChannelEnabled(id, enabled);\n }}\n />\n )}\n\n {activeChannelId === 'weixin' ? (\n <WeixinQrLoginDialog\n open={detailOpen}\n onOpenChange={handleWeixinOpenChange}\n ch={ch}\n onLoginSuccess={handleWeixinLoginSuccess}\n moreSettings={weixinMoreSettings}\n settingsDirty={dirty}\n settingsSaving={saving}\n onSettingsDiscard={discard}\n onSettingsSave={save}\n />\n ) : null}\n\n {activeChannelId === 'telegram' ? (\n <TelegramChannelSettingsDialog\n open={detailOpen}\n onOpenChange={(open) => {\n if (!open) closeChannel();\n }}\n ch={ch}\n form={form}\n baseline={baseline}\n tgAdvanced={tgAdvanced}\n setTgAdvanced={setTgAdvanced}\n showToken={showToken}\n setShowToken={setShowToken}\n copied={copied}\n copyToken={copyToken}\n updateTelegram={updateTelegram}\n updateChannelAgentRoute={updateChannelAgentRoute}\n tgAccountsDraft={tgAccountsDraft}\n setTgAccountsDraft={setTgAccountsDraft}\n tgAccountsError={tgAccountsError}\n onTgAccountsBlur={onTgAccountsBlur}\n dmOpts={dmOpts}\n groupOpts={groupOpts}\n replyOpts={replyOpts}\n streamOpts={streamOpts}\n chatAgents={chatAgents}\n saving={saving}\n dirty={dirty}\n save={save}\n discard={discard}\n language={language}\n scrollToPairingOnOpen={scrollToPairing}\n closeOnSave={false}\n />\n ) : null}\n\n {activeChannelId === 'feishu' ? (\n <FeishuQrSetupDialog\n open={detailOpen}\n onOpenChange={(open) => {\n if (!open) closeChannel();\n }}\n ch={ch}\n onSetupSuccess={handleFeishuQrSetupSuccess}\n moreSettings={feishuMoreSettings}\n settingsDirty={dirty}\n settingsSaving={saving}\n onSettingsDiscard={discard}\n onSettingsSave={save}\n />\n ) : null}\n\n {activeEntry && activeCard && !activeEntry.manageable ? (\n <ExtensionChannelDetailPanel\n open={detailOpen}\n onOpenChange={(open) => {\n if (!open) closeChannel();\n }}\n entry={activeEntry}\n vm={activeCard}\n ch={ch}\n language={language}\n />\n ) : null}\n </div>\n </>\n );\n}\n\nfunction ChannelsPageHeaderRegistration({\n hasToken,\n ch,\n refreshing,\n saveOk,\n onRefresh,\n}: {\n hasToken: boolean;\n ch: ChannelsSettingsMessages;\n refreshing: boolean;\n saveOk: boolean;\n onRefresh: () => void | Promise<void>;\n}) {\n const setPageHeader = usePageHeaderStore((s) => s.setPageHeader);\n const clearPageHeader = usePageHeaderStore((s) => s.clearPageHeader);\n\n const channelsHeaderEnd = useMemo(\n () => (\n <ChannelsPageHeaderActions\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={onRefresh}\n />\n ),\n [ch, onRefresh, refreshing, saveOk],\n );\n\n useLayoutEffect(() => {\n if (!hasToken) {\n clearPageHeader();\n return () => clearPageHeader();\n }\n setPageHeader({\n startExtra: null,\n main: null,\n end: channelsHeaderEnd,\n });\n return () => clearPageHeader();\n }, [channelsHeaderEnd, clearPageHeader, hasToken, setPageHeader]);\n\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"channels-settings-Bt1sprhC.js","names":["SessionChannelIcon","Button","ChannelsSettingsMessages","cn","interaction","ChannelHubCardVm","ChannelHubPrimaryAction","ChannelHubStatus","statusPillClass","status","statusLabel","ch","hubStatusRunning","hubStatusOffline","hubStatusDisabled","hubStatusNotConfigured","primaryActionLabel","action","hubSetupButton","hubFixButton","hubPairingButton","hubManageButton","ChannelHubCardProps","channelId","title","subtitle","vm","toggleDisabled","onOpen","onReviewPairing","onToggle","next","Promise","ChannelHubCard","t0","$","_c","showToggle","configured","manageable","t1","Symbol","for","t2","t3","t4","t5","t6","t7","t8","t9","t10","pendingPairing","press","e","stopPropagation","hubPairingPendingBadge","replace","String","t11","t12","t13","enabled","enableChannelAria","e_0","t14","t15","t16","summaryLines","length","map","_temp","t17","t18","primaryAction","t19","t20","t21","line","ChannelHubCard","ChannelHubCardVm","ChannelCatalogEntry","ChannelsSettingsMessages","OpenChannelOptions","scrollToPairing","ChannelsHubGrid","props","$","_c","catalog","cards","ch","saving","onOpenChannel","onToggleChannel","t0","Map","map","_temp","cardById","t1","t2","entry","vm","get","id","openPairing","title","subtitle","manageable","next","c","cn","skelBar","ChannelHubCardSkeleton","$","_c","t0","Symbol","for","t1","t2","t3","ChannelsHubGridSkeleton","count","undefined","Array","from","length","_temp","_","i","Dialog","X","ReactNode","Button","cn","ghostIconButton","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","ChannelSettingsPresentation","channelSettingsShellContentClass","presentation","wide","ChannelSettingsShell","t0","$","_c","open","onOpenChange","title","description","srTitle","srDescription","closeAriaLabel","children","footer","t1","headerExtra","undefined","isDrawer","t2","Symbol","for","t3","t4","t5","t6","t7","t8","t9","t10","_temp","t11","e","preventDefault","ExternalLink","Button","ChannelsSettingsMessages","StoredLanguage","docsGuidePageUrl","ChannelSettingsShell","ChannelCatalogEntry","ChannelHubStatus","ExtensionChannelDetailPanel","t0","$","_c","open","onOpenChange","entry","vm","ch","language","statusLabel","status","hubStatusRunning","hubStatusOffline","hubStatusDisabled","hubStatusNotConfigured","t1","title","t2","subtitle","t3","modalCancel","t4","t5","t6","t7","hubExtensionManageHint","t8","hubExtensionStatusLabel","t9","t10","t11","hubExtensionEnabledLabel","t12","enabled","hubExtensionYes","hubExtensionNo","t13","t14","t15","hubExtensionConnectedLabel","t16","connected","t17","t18","t19","t20","t21","Symbol","for","t22","hubViewDocs","t23","t24","RefreshCw","memo","Button","ChannelsSettingsMessages","cn","ChannelsPageHeaderActions","t0","$","_c","ch","refreshing","saveOk","onRefresh","t1","saved","t2","refresh","t3","t4","t5","t6","t7","t8","agentListDisplayName","nativeSelectMaxWidthClass","cn","messages","ChannelsSettingsMessages","useLocaleStore","FieldHint","FieldLabel","channelsInputClassName","ChannelAgentRoutingBlock","t0","$","_c","accountIds","routes","defaultAgentId","agentItems","disabled","onChange","ch","language","_temp","t1","t2","t3","t4","t5","Symbol","for","bb0","agentsMessages","agentsSettings","length","opts","id","t6","agentRoutingTitle","t7","agentRoutingHint","map","acc","agentRoutingAccountLabel","agentRoutingAgentLabel","toLowerCase","e","target","value","ag","s","feishuRoutingAccountIds","telegramRoutingAccountIds","weixinRoutingAccountIds","DmPolicy","FeishuConfig","TelegramConfig","WeixinConfig","PairingPolicyChannelId","defaultChannelDmPolicy","channel","resolveAccountDmPolicy","topDmPolicy","account","dmPolicy","listPairingAccountIds","config","ids","length","isPairingAccountEnabled","enabled","resolveAccountDmPolicyForConfig","accountId","acc","accounts","channelUsesPairingPolicy","accountIds","some","id","hubPairingPendingCount","params","configured","channelEnabled","usesPairing","summaryPending","useCallback","Dispatch","SetStateAction","approveChannelPairingBySender","approveChannelPairingRequest","PairingChannelId","PairingFeedback","kind","text","useChannelPairingApprove","params","channel","accountId","messages","pairingApproved","pairingInvalid","mutate","Promise","setCodeBySender","Record","setBusySender","setFeedback","finishApprove","senderId","run","result","prev","next","replace","e","msg","Error","message","includes","approveByCode","code","trimmed","trim","toUpperCase","quickApprove","useEffect","CHANNEL_PAIRING_SSE_EVENTS","const","CHANNEL_PAIRING_SUMMARY_SWR_KEY","subscribeChannelPairingSse","onRefresh","handler","name","window","addEventListener","removeEventListener","useChannelPairingSseRefresh","t0","$","_c","enabled","undefined","t1","t2","PairingChannelId","channelPairingSectionDomId","channel","scrollToChannelPairingSection","requestAnimationFrame","document","getElementById","scrollIntoView","behavior","block","RefreshCw","X","useCallback","useMemo","useReducer","useRef","useState","SetStateAction","useSWR","Button","dismissChannelPairingPending","fetchChannelPairingState","revokeChannelPairingPaired","PairingChannelId","FeishuConfig","TelegramConfig","WeixinConfig","ChannelsSettingsMessages","cn","FieldHint","FieldLabel","channelUsesPairingPolicy","resolveAccountDmPolicyForConfig","useChannelPairingApprove","useChannelPairingSseRefresh","channelsInputClassName","channelPairingSectionDomId","formatRelativeExpiry","iso","locale","ms","Date","parse","now","Number","isFinite","absMin","Math","max","round","abs","startsWith","hours","pairingSwrKey","channel","accountId","PairingUiState","codeBySender","Record","busySender","dismissingId","revokingId","feedback","kind","text","emptyPairingUiState","PairingUiAction","type","updater","prev","value","senderId","pairingUiReducer","state","action","next","ChannelPairingSection","accountIds","channelConfig","active","ch","language","onPairedChange","pairedCredentialCount","inputClassName","resolvedAccountIds","ids","filter","Boolean","length","sectionUsesPairing","resolveAccountDmPolicy","setAccountId","prevResolvedAccountIds","setPrevResolvedAccountIds","includes","ui","dispatchUi","accountDmPolicy","accountPairingActive","onPairedChangeRef","current","swrKey","data","error","isLoading","mutate","revalidateOnFocus","onSuccess","result","paired","fromCredentials","refresh","pairedCred","setCodeBySender","setBusySender","setFeedback","approveByCode","quickApprove","messages","pairingApproved","pairingInvalid","dismiss","pairingDismissed","replace","e","msg","Error","message","pairingDismissError","revoke","pairingRevoked","pairingRevokeError","pairingTitle","pairingAccountNotPairing","pairingAccountLabel","target","map","id","pending","pairedConfig","fromConfig","pairingSubtitle","pairingRefresh","pairingSetupHint","pairingLoadError","pairingPendingTitle","pairingQuickApproveHint","pairingPendingEmpty","item","code","busy","dismissing","isStale","pairingStaleItem","pairingExpiresHint","expiresAt","codeLast4","pairingCodeHint","pairingApproving","pairingQuickApprove","pairingCodePlaceholder","toUpperCase","key","trim","pairingApprove","pairingDismissing","pairingDismiss","pairedTitle","pairedFromConfig","join","pairedEmpty","pairedFromCredentials","pairingRevokeAria","Check","ChevronDown","Copy","Eye","EyeOff","useEffect","useRef","Button","ChatAgentsPayload","feishuRoutingAccountIds","ChannelsSettingsState","DmPolicy","GroupPolicy","ChannelsSettingsMessages","cn","ChannelAgentRoutingBlock","ChannelPairingSection","FieldHint","FieldLabel","SelectField","scrollToChannelPairingSection","channelsInputClassName","joinAllowFrom","parseIdList","FeishuMoreSettingsSection","t0","$","_c","ch","form","baseline","showFeishuSecret","setShowFeishuSecret","showFeishuWebhookSecrets","setShowFeishuWebhookSecrets","feishuCopied","feishuWebhookCopied","copyFeishuSecret","copyFeishuWebhookConfig","updateFeishu","updateChannelAgentRoute","feishuAccountsDraft","setFeishuAccountsDraft","feishuAccountsError","onFeishuAccountsBlur","dmOpts","groupOpts","chatAgents","saving","language","dialogOpen","pairingFocus","t1","undefined","fs","feishu","t2","feishuAccountIds","t3","length","resolvedFeishuAccounts","feishuBaselineSecret","appSecret","t4","Boolean","String","trim","feishuSecretDisplayLocked","detailsRef","t5","t6","details","current","open","timer","window","setTimeout","_temp","clearTimeout","t7","Symbol","for","t8","advancedShow","t9","feishuAdvancedHint","t10","e","enabled","target","checked","t11","t12","enableFeishuAria","t13","t14","v","dmPolicy","t15","t16","t17","t18","feishuAppId","t19","t20","e_0","appId","value","t21","t22","feishuAppIdDesc","t23","t24","t25","feishuAppSecret","t26","t27","t28","repeat","Math","max","t29","e_1","t30","t31","copied","copy","t32","_temp2","t33","t34","hide","show","t35","t36","t37","feishuAppSecretDesc","t38","t39","feishuDomain","t40","t41","domain","t42","e_2","t43","t44","t45","t46","t47","connectionMode","t48","t49","e_3","t50","t51","t52","t53","connectionModeDesc","t54","t55","t56","encryptKey","encryptKeyDesc","verificationToken","verificationTokenDesc","webhookHost","webhookPath","webhookPathDesc","webhookPort","webhookTitle","_temp3","e_4","e_5","e_6","e_7","Number","e_8","t57","renderMode","t58","t59","e_9","t60","t61","t62","t63","t64","t65","reactionNotifications","t66","t67","e_10","t68","t69","t70","t71","t72","t73","t74","e_11","streaming","t75","t76","enableStreaming","t77","groupPolicy","t78","t79","t80","e_12","t81","map","_temp4","t82","t83","t84","e_13","requireMention","t85","t86","t87","allowFromDm","t88","t89","allowFrom","t90","e_14","t91","t92","allowFromDmDesc","t93","t94","allowFromGroups","t95","t96","groupAllowFrom","t97","e_15","t98","t99","allowFromGroupsDesc","t100","t101","historyLimit","t102","t103","t104","e_16","t105","t106","t107","textChunkLimit","t108","t109","t110","e_17","t111","t112","t113","t114","feishuToolsTitle","t115","feishuToolDoc","t116","feishuToolWiki","t117","feishuToolDrive","t118","feishuToolPerm","t119","feishuToolBitable","t120","feishuToolScopes","t121","t122","const","t123","tools","t124","key","label","e_18","feishuToolsDesc","t125","t126","feishuActionsTitle","t127","actions","reactions","t128","e_19","t129","t130","feishuActionReactions","t131","t132","t133","items","t134","acc","aid","t135","channelAgentRoutes","defaultAgentId","t136","multiAccountJson","t137","t138","e_20","t139","t140","multiAccountJsonDesc","t141","t142","t143","t144","opt","s_0","s","Button","ChannelsSettingsMessages","ChannelsSettingsDialogFooter","t0","$","_c","ch","dirty","saving","onCancel","onDiscard","onSave","showCancel","t1","undefined","t2","unsavedHint","t3","modalCancel","t4","t5","discard","t6","t7","t8","save","t9","t10","t11","ExternalLink","QRCode","useCallback","useEffect","useRef","useState","ReactNode","Button","fetchFeishuSetupStart","fetchFeishuSetupStatus","ChannelsSettingsMessages","cn","interaction","useAsyncResource","ChannelsSettingsDialogFooter","ChannelSettingsShell","ChannelSettingsPresentation","FeishuDomain","QR_IMAGE_OPTIONS","width","margin","errorCorrectionLevel","const","color","dark","light","QrStartData","sessionKey","qrUrl","emptyQrStart","FeishuQrSetupSession","ch","onSetupSuccess","onOpenChange","closeOnSetupSuccess","moreSettings","result","appId","domain","openId","open","setDomain","generation","setGeneration","pollError","setPollError","onSetupSuccessRef","onOpenChangeRef","current","start","then","initial","errorData","data","busy","loading","startError","error","Error","message","String","startScan","d","g","cancelled","intervalId","poll","status","phase","undefined","window","clearInterval","setData","ok","e","setInterval","qrImage","toDataURL","enabled","Boolean","qrDataUrl","qrGenFailed","showQr","qrFrameLoading","feishuQrModalTitle","feishuQrModalSubtitle","feishuQrStarting","feishuQrScanHint","feishuQrEncoding","feishuQrImageError","feishuQrOpenLink","feishuRegionSwitchAria","press","feishuRegionChina","feishuRegionInternational","feishuQrRegenerate","FeishuQrSetupDialog","t0","$","_c","settingsDirty","t1","settingsSaving","t2","onSettingsDiscard","onSettingsSave","presentation","t3","t4","t5","t6","t7","feishuQrCloseAria","feishuSubtitle","feishuTitle","ChannelsSettingsMessages","cn","ChannelPairingSetupSteps","t0","$","_c","ch","usesPairing","tokenReady","pairingComplete","step1Done","step2Done","step1Current","step2Current","t1","t2","t3","t4","telegramSetupStepToken","t5","t6","t7","t8","t9","telegramSetupStepPairing","t10","t11","StepDot","done","current","index","String","ChannelsSettingsState","GroupPolicy","ReplyToMode","StreamMode","cn","ChannelsSettingsMessages","FieldHint","FieldLabel","SelectField","channelsInputClassName","joinAllowFrom","parseIdList","TelegramAdvanced","t0","$","_c","tg","updateTelegram","ch","groupOpts","replyOpts","streamOpts","tgAccountsDraft","setTgAccountsDraft","tgAccountsError","onTgAccountsBlur","t1","apiRoot","t2","Symbol","for","t3","e","target","value","t4","t5","t6","proxy","t7","t8","e_0","t9","t10","t11","v","groupPolicy","t12","t13","v_0","replyToMode","t14","t15","v_1","streamMode","t16","t17","allowFromGroups","t18","t19","groupAllowFrom","t20","e_1","t21","t22","t23","historyLimit","t24","t25","e_2","parseInt","t26","t27","t28","textChunkLimit","t29","t30","e_3","t31","t32","t33","t34","e_4","debug","checked","t35","t36","telegramDebug","t37","multiAccountJson","t38","t39","e_5","t40","t41","multiAccountJsonDesc","t42","t43","useEffect","useState","Check","ChevronDown","Copy","Eye","EyeOff","Button","ChatAgentsPayload","telegramRoutingAccountIds","emptyTelegramAccount","ChannelsSettingsState","DmPolicy","GroupPolicy","ReplyToMode","StreamMode","ChannelsSettingsMessages","cn","ChannelAgentRoutingBlock","ChannelPairingSection","ChannelPairingSetupSteps","channelUsesPairingPolicy","FieldHint","FieldLabel","SelectField","TelegramAdvanced","ChannelsSettingsDialogFooter","ChannelSettingsShell","ChannelSettingsPresentation","scrollToChannelPairingSection","channelsInputClassName","joinAllowFrom","parseIdList","telegramDefaultBotToken","TelegramChannelSettingsDialog","t0","$","_c","open","onOpenChange","presentation","t1","ch","form","baseline","tgAdvanced","setTgAdvanced","showToken","setShowToken","copied","copyToken","updateTelegram","updateChannelAgentRoute","tgAccountsDraft","setTgAccountsDraft","tgAccountsError","onTgAccountsBlur","dmOpts","groupOpts","replyOpts","streamOpts","chatAgents","saving","dirty","save","discard","language","scrollToPairingOnOpen","t2","closeOnSave","t3","undefined","tg","telegram","t4","tgBaselineToken","tgToken","telegramTokenDisplayLocked","Boolean","String","trim","pairedCredentialCount","setPairedCredentialCount","tokenReady","enabled","t5","tgAccountIds","t6","t7","timer","window","setTimeout","_temp","clearTimeout","t8","telegramTitle","t9","telegramSubtitle","t10","t11","t12","modalCancel","t13","t14","t15","ok","t16","t17","e","target","checked","t18","t19","enableTelegramAria","t20","t21","Symbol","for","t22","telegramToken","t23","t24","t25","repeat","Math","max","length","t26","accounts","e_0","prev","default","accountId","botToken","value","t27","t28","copy","t29","_temp2","t30","t31","hide","show","t32","t33","t34","telegramTokenDesc","t35","t36","t37","t38","t39","v","dmPolicy","t40","t41","t42","allowFromDm","t43","t44","allowFrom","t45","e_1","t46","t47","allowFromDmDesc","t48","t49","t50","items","t51","acc","aid","t52","channelAgentRoutes","defaultAgentId","t53","_temp3","t54","t55","t56","t57","advancedHide","advancedShow","t58","t59","t60","t61","a","s","ManageableChannelId","BuiltinChannelCatalogEntry","id","titleKey","subtitleKey","BUILTIN_CHANNEL_CATALOG","const","fetchJson","apiUrl","ChannelHubMetaRow","id","label","description","manageable","order","channelsMetaSwrKey","fetchChannelsMeta","Promise","data","ok","payload","channels","useMemo","useSWR","ChannelsSettingsMessages","BUILTIN_CHANNEL_CATALOG","BuiltinChannelCatalogEntry","channelsMetaSwrKey","fetchChannelsMeta","ChannelHubMetaRow","BUILTIN_CHANNEL_BY_ID","Map","map","entry","id","const","BUILTIN_CHANNEL_ORDER_BY_ID","index","ChannelCatalogEntry","title","subtitle","manageable","order","resolveBuiltinCopy","ch","titleKey","subtitleKey","mergeChannelCatalog","metaRows","byId","row","builtin","get","copy","label","description","hubExtensionSubtitle","set","size","has","Array","from","values","sort","a","b","localeCompare","useChannelCatalog","hasToken","$","_c","t0","t1","Symbol","for","revalidateOnFocus","data","error","isLoading","mutate","t2","entries","t3","ChannelStatus","feishuRoutingAccountIds","telegramRoutingAccountIds","weixinRoutingAccountIds","ChannelPairingSummaryPayload","ChannelsSettingsState","ChannelsSettingsMessages","isManageableChannelId","ManageableChannelId","channelUsesPairingPolicy","hubPairingPendingCount","isFeishuConfigured","isTelegramConfigured","isWeixinConfigured","ChannelHubId","ChannelHubStatus","ChannelHubPrimaryAction","ChannelHubCardVm","id","manageable","configured","enabled","connected","status","summaryLines","pendingPairing","primaryAction","resolveChannelConnected","statuses","find","s","name","readChannelEnabled","isExtensionChannelConfigured","config","channels","undefined","section","Array","isArray","Record","Object","keys","length","resolveChannelHubStatus","resolvePrimaryAction","dmPolicyLabel","ch","policy","dm","accountCountLine","count","hubSummaryAccountCount","replace","String","buildTelegramSummaryLines","form","tg","telegram","lines","hubSummaryDm","dmPolicy","push","buildWeixinSummaryLines","wx","weixin","hubSummaryStream","stream","streamMode","buildFeishuSummaryLines","fs","feishu","mode","connectionMode","hubConnectionWebhook","hubConnectionWebsocket","hubSummaryConnection","pairingSlice","summary","buildManageableChannelHubCardVm","params","pairingSummary","channelConfig","usesPairing","channelEnabled","summaryPending","pending","buildExtensionChannelHubCardVm","hubExtensionConfiguredHint","buildChannelHubCardForCatalogId","buildChannelHubCardsForCatalog","catalogIds","map","useEffect","ChannelStatus","CHANNEL_STATUS_SSE_EVENT","ChannelStatusSsePayload","channels","parseChannelStatusSseDetail","detail","Array","isArray","subscribeChannelStatusSse","onEvent","handler","e","Event","CustomEvent","window","addEventListener","removeEventListener","useChannelStatusSse","t0","$","_c","enabled","undefined","t1","t2","useSWR","useCallback","fetchChannelPairingSummary","ChannelPairingSummaryPayload","CHANNEL_PAIRING_SUMMARY_SWR_KEY","useChannelPairingSseRefresh","EMPTY_SUMMARY","telegram","pending","stale","atCapacity","feishu","weixin","useChannelPairingSummary","enabled","$","_c","t0","Symbol","for","revalidateOnFocus","data","mutate","isLoading","error","t1","refresh","t2","t3","summary","useSWR","useCallback","useMemo","ChannelsSettingsState","channelsStatusSwrKey","fetchChannelsStatusSwr","useGatewayConfigSwr","ChannelsSettingsMessages","buildChannelHubCardsForCatalog","ChannelHubCardVm","parseChannelStatusSseDetail","useChannelStatusSse","useChannelPairingSummary","useChannelCatalog","STATUS_POLL_MS","useChannelsHubData","params","$","_c","hasToken","form","ch","data","cfgData","mutate","mutateConfig","entries","catalogEntries","mutateCatalog","t0","t1","Symbol","for","revalidateOnFocus","refreshInterval","t2","mutateStatus","t3","undefined","statuses","t4","detail","next","revalidate","applyStatusFromSse","summary","pairingSummary","refresh","refreshPairing","t5","map","_temp","catalogIds","configRoot","payload","config","t6","bb0","length","t7","cards","refreshAll","t8","e","id","useCallback","useMemo","useReducer","useRef","useState","useSWR","fetchChatAgents","useGatewayConfigSwr","normalizeChannelsFromConfig","patchChannelsSettings","ChannelsSettingsState","DmPolicy","GroupPolicy","ReplyToMode","StreamMode","messages","copyTextToClipboard","useGatewayStore","useLocaleStore","telegramDefaultBotToken","ChannelsPanelFormState","form","baseline","tgAccountsDraft","tgAccountsError","wxAccountsDraft","wxAccountsError","feishuAccountsDraft","feishuAccountsError","emptyPanelFormState","accountsDraftsFrom","state","Pick","JSON","stringify","telegram","accounts","weixin","feishu","PanelFormAction","type","payload","patch","Partial","channel","accountId","agentId","value","panelFormReducer","action","snapshot","structuredClone","restored","k","channelAgentRoutes","trim","toLowerCase","useChannelsSettingsPanel","language","s","m","ch","channelsSettings","token","st","hasToken","Boolean","dirtyRef","panelForm","dispatchPanelForm","syncSource","setSyncSource","parsed","saving","setSaving","error","setError","saveOk","setSaveOk","weixinSuccessBanner","setWeixinSuccessBanner","feishuSetupSuccessBanner","setFeishuSetupSuccessBanner","tgAdvanced","setTgAdvanced","showToken","setShowToken","showFeishuSecret","setShowFeishuSecret","showFeishuWebhookSecrets","setShowFeishuWebhookSecrets","copied","setCopied","feishuCopied","setFeishuCopied","feishuWebhookCopied","setFeishuWebhookCopied","data","chatAgents","revalidateOnFocus","cfgData","swrError","isLoading","mutate","config","undefined","current","dirty","loading","fetchError","Error","message","String","updateChannelAgentRoute","updateTelegram","updateWeixin","updateFeishu","save","Promise","next","window","setTimeout","e","saveError","discard","toggleChannelEnabled","which","enabled","prev","synced","copyToken","t","ok","handleFeishuQrSetupSuccess","result","appId","domain","openId","feishuQrSetupSuccess","copyFeishuSecret","appSecret","copyFeishuWebhookConfig","fs","connectionMode","verificationToken","encryptKey","webhookHost","webhookPort","webhookPath","setTgAccountsDraft","setWxAccountsDraft","setFeishuAccountsDraft","onTgAccountsBlur","raw","parsedJson","parse","Array","isArray","jsonObjectAccounts","err","jsonInvalid","onWxAccountsBlur","onFeishuAccountsBlur","dmOpts","map","label","policy","dm","groupOpts","group","replyOpts","reply","streamOpts","stream","ExternalLink","QRCode","useCallback","useEffect","useRef","useState","ReactNode","Button","fetchWeixinGatewayQrLoginStart","fetchWeixinGatewayQrLoginStatus","ChannelsSettingsMessages","cn","useAsyncResource","ChannelsSettingsDialogFooter","ChannelSettingsShell","ChannelSettingsPresentation","QR_IMAGE_OPTIONS","width","margin","errorCorrectionLevel","const","color","dark","light","QrStartData","sessionKey","qrcodeUrl","emptyQrStart","WeixinQrLoginSession","ch","onLoginSuccess","onOpenChange","closeOnLoginSuccess","moreSettings","Promise","open","generation","setGeneration","hint","setHint","pollError","setPollError","onLoginSuccessRef","onOpenChangeRef","current","start","then","r","initial","errorData","data","busy","loading","startError","error","Error","message","String","restart","g","cancelled","intervalId","poll","st","phase","setData","prev","qrStatus","weixinQrLoginScanned","undefined","window","clearInterval","ok","e","setInterval","qrImage","toDataURL","enabled","Boolean","qrDataUrl","qrGenFailed","showQr","qrFrameLoading","weixinQrModalTitle","weixinQrModalSubtitle","weixinQrLoginBusy","weixinQrEncoding","weixinQrImageError","weixinQrOpenLink","weixinQrRegenerate","WeixinQrLoginDialog","t0","$","_c","settingsDirty","t1","settingsSaving","t2","onSettingsDiscard","onSettingsSave","presentation","t3","t4","t5","t6","t7","weixinQrModalCloseAria","weixinSubtitle","weixinTitle","ChannelsSettingsState","StreamMode","weixinRoutingAccountIds","cn","ChannelsSettingsMessages","ChannelAgentRoutingBlock","FieldHint","FieldLabel","SelectField","channelsInputClassName","WeixinAdvanced","t0","$","_c","wx","updateWeixin","ch","streamOpts","wxAccountsDraft","setWxAccountsDraft","wxAccountsError","onWxAccountsBlur","channelAgentRoutesWx","defaultAgentId","agentItems","onAgentRouteChange","routingDisabled","t1","weixinAllowFrom","t2","Symbol","for","t3","allowFrom","join","t4","e","target","value","split","flatMap","_temp","t5","t6","weixinAllowFromDesc","t7","t8","v_0","streamMode","v","t9","t10","historyLimit","t11","t12","e_0","parseInt","t13","t14","t15","textChunkLimit","t16","t17","e_1","t18","t19","t20","t21","weixinRouteTag","t22","t23","e_2","routeTag","t24","routeTagPlaceholder","t25","weixinRouteTagDesc","t26","t27","e_3","debug","checked","t28","t29","weixinDebug","t30","weixinDebugDesc","t31","weixinAccountsJson","t32","t33","e_4","t34","t35","weixinAccountsJsonDesc","t36","t37","t38","t39","s","trim","ChevronDown","useEffect","useRef","ChatAgentsPayload","ChannelsSettingsState","DmPolicy","StreamMode","weixinRoutingAccountIds","ChannelsSettingsMessages","ChannelPairingSection","SelectField","scrollToChannelPairingSection","WeixinAdvanced","WeixinMoreSettingsSection","t0","$","_c","ch","wx","updateWeixin","dmOpts","streamOpts","wxAccountsDraft","setWxAccountsDraft","wxAccountsError","onWxAccountsBlur","form","chatAgents","onAgentRouteChange","saving","language","dialogOpen","pairingFocus","t1","undefined","t2","wxAccountIds","t3","length","resolvedWxAccounts","detailsRef","t4","t5","details","current","open","timer","window","setTimeout","_temp","clearTimeout","t6","Symbol","for","t7","advancedShow","t8","weixinAdvancedHint","t9","e","enabled","target","checked","t10","t11","enableWeixinAria","t12","t13","v","dmPolicy","t14","t15","t16","items","t17","channelAgentRoutes","weixin","defaultAgentId","t18","t19","ExternalLink","useCallback","useEffect","useLayoutEffect","useMemo","useState","useNavigate","useParams","useSearchParams","Button","docsGuidePageUrl","ChannelsSettingsMessages","usePageHeaderStore","ChannelsHubGrid","OpenChannelOptions","ChannelsHubGridSkeleton","CHANNELS_HUB_PATH","channelDetailPath","isManageableChannelId","normalizeChannelRouteId","ExtensionChannelDetailPanel","ChannelsPageHeaderActions","FeishuMoreSettingsSection","FeishuQrSetupDialog","TelegramChannelSettingsDialog","useChannelCatalog","useChannelsHubData","useChannelsSettingsPanel","WeixinQrLoginDialog","WeixinMoreSettingsSection","ChannelsSettingsPanel","navigate","channelId","routeChannelId","searchParams","ctx","language","m","ch","hasToken","loading","fetchError","mutate","form","baseline","dirty","saving","error","saveOk","weixinSuccessBanner","setWeixinSuccessBanner","feishuSetupSuccessBanner","tgAdvanced","setTgAdvanced","showToken","setShowToken","showFeishuSecret","setShowFeishuSecret","showFeishuWebhookSecrets","setShowFeishuWebhookSecrets","copied","feishuCopied","feishuWebhookCopied","tgAccountsDraft","setTgAccountsDraft","tgAccountsError","wxAccountsDraft","setWxAccountsDraft","wxAccountsError","feishuAccountsDraft","setFeishuAccountsDraft","feishuAccountsError","chatAgents","updateChannelAgentRoute","updateTelegram","updateWeixin","updateFeishu","save","discard","toggleChannelEnabled","copyToken","handleFeishuQrSetupSuccess","copyFeishuSecret","copyFeishuWebhookConfig","onTgAccountsBlur","onWxAccountsBlur","onFeishuAccountsBlur","dmOpts","groupOpts","replyOpts","streamOpts","refreshing","setRefreshing","entries","catalogEntries","catalogById","Map","map","e","id","activeChannelId","scrollToPairing","get","detailOpen","Boolean","has","cards","refreshAll","activeEntry","undefined","activeCard","find","c","length","replace","openChannel","opts","pairing","closeChannel","handleWeixinOpenChange","nextOpen","handleWeixinLoginSuccess","weixinQrLoginSuccess","window","setTimeout","handleRefresh","settingsSections","channels","needToken","loadError","retry","wx","weixin","pairingFocusWeixin","pairingFocusFeishu","weixinMoreSettings","acc","aid","feishuMoreSettings","subtitle","docsLink","Math","max","enabled","open","manageable","ChannelsPageHeaderRegistration","t0","$","_c","onRefresh","setPageHeader","_temp","clearPageHeader","_temp2","t1","channelsHeaderEnd","t2","t3","startExtra","main","end","s_0","s"],"sources":["../../../../../web/src/features/settings/channels/channel-hub-card.tsx","../../../../../web/src/features/settings/channels/channels-hub-grid.tsx","../../../../../web/src/features/settings/channels/channels-hub-card-skeleton.tsx","../../../../../web/src/features/settings/channels/channel-settings-shell.tsx","../../../../../web/src/features/settings/channels/extension-channel-detail-panel.tsx","../../../../../web/src/features/settings/channels/channels-page-header-actions.tsx","../../../../../web/src/features/settings/channels/channel-agent-routing-block.tsx","../../../../../web/src/features/settings/channels/pairing-policy.ts","../../../../../web/src/features/settings/channels/use-channel-pairing-approve.ts","../../../../../web/src/features/settings/channels/use-channel-pairing-sse.ts","../../../../../web/src/features/settings/channels/pairing-scroll.ts","../../../../../web/src/features/settings/channels/channel-pairing-section.tsx","../../../../../web/src/features/settings/channels/feishu-more-settings-section.tsx","../../../../../web/src/features/settings/channels/channels-settings-dialog-footer.tsx","../../../../../web/src/features/settings/channels/feishu-qr-setup-dialog.tsx","../../../../../web/src/features/settings/channels/channel-pairing-setup-steps.tsx","../../../../../web/src/features/settings/channels/telegram-advanced.tsx","../../../../../web/src/features/settings/channels/telegram-channel-settings-dialog.tsx","../../../../../web/src/features/settings/channels/channel-catalog.ts","../../../../../web/src/features/settings/channels/channels-meta-api.ts","../../../../../web/src/features/settings/channels/use-channel-catalog.ts","../../../../../web/src/features/settings/channels/channel-hub-view-model.ts","../../../../../web/src/features/settings/channels/use-channel-status-sse.ts","../../../../../web/src/features/settings/channels/use-channel-pairing-summary.ts","../../../../../web/src/features/settings/channels/use-channels-hub-data.ts","../../../../../web/src/features/settings/channels/use-channels-settings-panel.ts","../../../../../web/src/features/settings/channels/weixin-qr-login-dialog.tsx","../../../../../web/src/features/settings/channels/weixin-advanced.tsx","../../../../../web/src/features/settings/channels/weixin-more-settings-section.tsx","../../../../../web/src/features/settings/channels/channels-settings-panel.tsx"],"sourcesContent":["import { SessionChannelIcon } from '@/components/shell/session-channel-icon';\nimport { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { interaction } from '@/lib/interaction';\n\nimport type { ChannelHubCardVm, ChannelHubPrimaryAction, ChannelHubStatus } from './channel-hub-view-model';\n\nfunction statusPillClass(status: ChannelHubStatus): string {\n switch (status) {\n case 'running':\n return 'bg-success-soft text-success';\n case 'offline':\n return 'bg-amber-100 text-amber-900 dark:bg-amber-950/60 dark:text-amber-200';\n case 'disabled':\n return 'bg-surface-hover text-fg-muted';\n default:\n return 'bg-surface-hover text-fg-muted';\n }\n}\n\nfunction statusLabel(ch: ChannelsSettingsMessages, status: ChannelHubStatus): string {\n switch (status) {\n case 'running':\n return ch.hubStatusRunning;\n case 'offline':\n return ch.hubStatusOffline;\n case 'disabled':\n return ch.hubStatusDisabled;\n default:\n return ch.hubStatusNotConfigured;\n }\n}\n\nfunction primaryActionLabel(ch: ChannelsSettingsMessages, action: ChannelHubPrimaryAction): string {\n switch (action) {\n case 'setup':\n return ch.hubSetupButton;\n case 'fix':\n return ch.hubFixButton;\n case 'pairing':\n return ch.hubPairingButton;\n default:\n return ch.hubManageButton;\n }\n}\n\nexport type ChannelHubCardProps = {\n channelId: string;\n title: string;\n subtitle: string;\n vm: ChannelHubCardVm;\n toggleDisabled: boolean;\n onOpen: () => void;\n onReviewPairing: () => void;\n onToggle: (next: boolean) => void | Promise<void>;\n ch: ChannelsSettingsMessages;\n};\n\nexport function ChannelHubCard({\n channelId,\n title,\n subtitle,\n vm,\n toggleDisabled,\n onOpen,\n onReviewPairing,\n onToggle,\n ch,\n}: ChannelHubCardProps) {\n const showToggle = vm.configured && vm.manageable;\n\n return (\n <article\n className={cn(\n 'flex h-full min-h-0 flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-panel p-4 shadow-sm transition-colors',\n 'hover:border-edge',\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div\n className={cn(\n 'flex size-11 shrink-0 items-center justify-center rounded-xl ring-1 ring-edge-subtle/40',\n vm.status === 'running' ? 'bg-accent-soft' : 'bg-surface-base',\n )}\n aria-hidden\n >\n <SessionChannelIcon sourceChannel={channelId} className=\"size-5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"text-sm font-semibold text-fg\">{title}</h2>\n <div className=\"mt-1 flex flex-wrap items-center gap-1.5\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium',\n statusPillClass(vm.status),\n )}\n >\n {statusLabel(ch, vm.status)}\n </span>\n {vm.pendingPairing > 0 ? (\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-900 dark:bg-amber-950/60 dark:text-amber-200',\n interaction.press,\n )}\n onClick={(e) => {\n e.stopPropagation();\n onReviewPairing();\n }}\n >\n {ch.hubPairingPendingBadge.replace('{{count}}', String(vm.pendingPairing))}\n </button>\n ) : null}\n </div>\n </div>\n {showToggle ? (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={vm.enabled}\n aria-label={`${title} — ${ch.enableChannelAria}`}\n disabled={toggleDisabled}\n className={cn(\n 'inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors',\n interaction.press,\n vm.enabled ? 'justify-end bg-accent' : 'justify-start bg-surface-hover',\n toggleDisabled && 'cursor-not-allowed opacity-50',\n )}\n onClick={(e) => {\n e.stopPropagation();\n void onToggle(!vm.enabled);\n }}\n >\n <span className=\"size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55\" />\n </button>\n ) : null}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <p className=\"line-clamp-2 text-xs leading-relaxed text-fg-muted\">{subtitle}</p>\n {vm.summaryLines.length > 0 ? (\n <ul className=\"mt-1.5 space-y-0.5\">\n {vm.summaryLines.map((line) => (\n <li key={line} className=\"text-xs text-fg-muted\">\n {line}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n\n <div className=\"mt-auto\">\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"w-full\"\n onClick={() => {\n if (vm.manageable && (vm.primaryAction === 'pairing' || vm.pendingPairing > 0)) {\n onReviewPairing();\n return;\n }\n onOpen();\n }}\n >\n {primaryActionLabel(ch, vm.primaryAction)}\n </Button>\n </div>\n </article>\n );\n}\n","import { ChannelHubCard } from './channel-hub-card';\nimport type { ChannelHubCardVm } from './channel-hub-view-model';\nimport type { ChannelCatalogEntry } from './use-channel-catalog';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nexport type OpenChannelOptions = {\n scrollToPairing?: boolean;\n};\n\nexport function ChannelsHubGrid(props: {\n catalog: ChannelCatalogEntry[];\n cards: ChannelHubCardVm[];\n ch: ChannelsSettingsMessages;\n saving: boolean;\n onOpenChannel: (id: string, opts?: OpenChannelOptions) => void;\n onToggleChannel: (id: string, enabled: boolean) => void | Promise<void>;\n}) {\n const { catalog, cards, ch, saving, onOpenChannel, onToggleChannel } = props;\n\n const cardById = new Map(cards.map((c) => [c.id, c]));\n\n return (\n <ul\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-[repeat(auto-fill,minmax(280px,1fr))]\"\n role=\"list\"\n >\n {catalog.map((entry) => {\n const vm = cardById.get(entry.id);\n if (!vm) return null;\n const openPairing = () => onOpenChannel(entry.id, { scrollToPairing: true });\n return (\n <li key={entry.id} className=\"h-full min-h-0\">\n <ChannelHubCard\n channelId={entry.id}\n title={entry.title}\n subtitle={entry.subtitle}\n vm={vm}\n toggleDisabled={saving || !vm.manageable}\n onOpen={() => onOpenChannel(entry.id)}\n onReviewPairing={openPairing}\n onToggle={(next) => onToggleChannel(entry.id, next)}\n ch={ch}\n />\n </li>\n );\n })}\n </ul>\n );\n}\n","import { cn } from '@/lib/cn';\n\nconst skelBar =\n 'animate-pulse motion-reduce:animate-none rounded-md bg-surface-hover dark:bg-surface-active/50';\n\n/** Matches `ChannelHubCard` layout (icon + status + summary + CTA row). */\nfunction ChannelHubCardSkeleton() {\n return (\n <div\n className=\"flex h-full min-h-[13.5rem] flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-panel p-4 shadow-sm dark:border-edge-subtle\"\n aria-hidden\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn('size-11 shrink-0 rounded-xl', skelBar)} />\n <div className=\"min-w-0 flex-1 space-y-2\">\n <div className={cn('h-4 w-2/5', skelBar)} />\n <div className={cn('h-5 w-16 rounded-full', skelBar)} />\n </div>\n <div className={cn('h-6 w-10 shrink-0 rounded-full', skelBar)} />\n </div>\n <div className=\"space-y-2\">\n <div className={cn('h-3 w-full', skelBar)} />\n <div className={cn('h-3 w-[88%]', skelBar)} />\n </div>\n <div className=\"mt-auto\">\n <div className={cn('h-10 w-full rounded-lg', skelBar)} />\n </div>\n </div>\n );\n}\n\nexport function ChannelsHubGridSkeleton({ count = 3 }: { count?: number }) {\n return (\n <ul className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\" role=\"list\" aria-busy>\n {Array.from({ length: count }, (_, i) => (\n <li key={i} className=\"h-full min-h-0\">\n <ChannelHubCardSkeleton />\n </li>\n ))}\n </ul>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { ghostIconButton } from '@/lib/interaction';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\nexport type ChannelSettingsPresentation = 'modal' | 'drawer';\n\nfunction channelSettingsShellContentClass(\n presentation: ChannelSettingsPresentation,\n wide = false,\n): string {\n if (presentation === 'drawer') {\n return cn(\n 'xopc-drawer-right fixed right-0 top-0 flex size-full flex-col overflow-hidden border-l border-edge bg-surface-panel shadow-popover outline-none dark:border-edge',\n wide ? 'max-w-[36rem]' : 'max-w-xl',\n SETTINGS_SHELL_CONTENT_Z,\n );\n }\n return cn(\n 'fixed left-1/2 top-1/2 flex max-h-[min(90vh,52rem)] w-[min(calc(100%-2rem),32rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden',\n wide && 'max-h-[min(90vh,48rem)] w-[min(calc(100%-2rem),36rem)]',\n SETTINGS_SHELL_CONTENT_Z,\n 'rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none dark:border-edge',\n );\n}\n\nexport function ChannelSettingsShell({\n presentation,\n open,\n onOpenChange,\n title,\n description,\n srTitle,\n srDescription,\n closeAriaLabel,\n children,\n footer,\n wide = false,\n headerExtra,\n}: {\n presentation: ChannelSettingsPresentation;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n srTitle?: string;\n srDescription?: string;\n closeAriaLabel: string;\n children: ReactNode;\n footer?: ReactNode;\n wide?: boolean;\n headerExtra?: ReactNode;\n}) {\n const isDrawer = presentation === 'drawer';\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn(\n 'xopc-dialog-overlay fixed inset-0 bg-scrim backdrop-blur-[1px]',\n SETTINGS_SHELL_OVERLAY_Z,\n )}\n />\n <Dialog.Content\n className={channelSettingsShellContentClass(presentation, wide)}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {srTitle ? <Dialog.Title className=\"sr-only\">{srTitle}</Dialog.Title> : null}\n {srDescription ? <Dialog.Description className=\"sr-only\">{srDescription}</Dialog.Description> : null}\n\n {isDrawer ? (\n <div className=\"flex shrink-0 items-start justify-between gap-3 border-b border-edge px-4 py-3\">\n <div className=\"min-w-0 flex-1\">\n {title ? <div className=\"text-base font-semibold text-fg\">{title}</div> : null}\n {description ? <p className=\"mt-1 text-sm text-fg-muted\">{description}</p> : null}\n </div>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={closeAriaLabel}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n ) : (\n <>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n className={cn(\n ghostIconButton,\n 'absolute right-3 top-3 z-20 p-1.5 hover:bg-surface-hover',\n )}\n aria-label={closeAriaLabel}\n >\n <X className=\"size-4\" />\n </button>\n </Dialog.Close>\n {headerExtra}\n </>\n )}\n\n <div className={cn('min-h-0 flex-1 overflow-y-auto', isDrawer ? 'px-4 py-4' : 'p-6')}>{children}</div>\n {footer}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { ExternalLink } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { docsGuidePageUrl } from '@/navigation';\n\nimport { ChannelSettingsShell } from './channel-settings-shell';\nimport type { ChannelCatalogEntry } from './use-channel-catalog';\nimport type { ChannelHubStatus } from './channel-hub-view-model';\n\nexport function ExtensionChannelDetailPanel({\n open,\n onOpenChange,\n entry,\n vm,\n ch,\n language,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n entry: ChannelCatalogEntry;\n vm: { enabled: boolean; connected: boolean; status: ChannelHubStatus };\n ch: ChannelsSettingsMessages;\n language: StoredLanguage;\n}) {\n const statusLabel =\n vm.status === 'running'\n ? ch.hubStatusRunning\n : vm.status === 'offline'\n ? ch.hubStatusOffline\n : vm.status === 'disabled'\n ? ch.hubStatusDisabled\n : ch.hubStatusNotConfigured;\n\n return (\n <ChannelSettingsShell\n presentation=\"modal\"\n open={open}\n onOpenChange={onOpenChange}\n srTitle={entry.title}\n srDescription={entry.subtitle}\n closeAriaLabel={ch.modalCancel}\n headerExtra={\n <div className=\"border-b border-edge-subtle px-6 pb-4 pt-6 dark:border-edge-subtle\">\n <h2 className=\"text-lg font-semibold tracking-tight text-fg\">{entry.title}</h2>\n <p className=\"mt-1 text-sm text-fg-muted\">{entry.subtitle}</p>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <p className=\"text-sm text-fg-muted\">{ch.hubExtensionManageHint}</p>\n <dl className=\"grid gap-3 text-sm\">\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-fg-subtle\">{ch.hubExtensionStatusLabel}</dt>\n <dd className=\"mt-1 text-fg\">{statusLabel}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-fg-subtle\">{ch.hubExtensionEnabledLabel}</dt>\n <dd className=\"mt-1 text-fg\">{vm.enabled ? ch.hubExtensionYes : ch.hubExtensionNo}</dd>\n </div>\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-fg-subtle\">{ch.hubExtensionConnectedLabel}</dt>\n <dd className=\"mt-1 text-fg\">{vm.connected ? ch.hubExtensionYes : ch.hubExtensionNo}</dd>\n </div>\n </dl>\n <Button type=\"button\" variant=\"secondary\" asChild>\n <a href={docsGuidePageUrl(language, 'channels')} target=\"_blank\" rel=\"noreferrer\">\n {ch.hubViewDocs}\n <ExternalLink className=\"ml-2 size-3.5\" />\n </a>\n </Button>\n </div>\n </ChannelSettingsShell>\n );\n}\n","import { RefreshCw } from 'lucide-react';\nimport { memo } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nexport const ChannelsPageHeaderActions = memo(function ChannelsPageHeaderActions({\n ch,\n refreshing,\n saveOk,\n onRefresh,\n}: {\n ch: ChannelsSettingsMessages;\n refreshing: boolean;\n saveOk: boolean;\n onRefresh: () => void;\n}) {\n return (\n <div className=\"flex min-w-0 shrink-0 items-center justify-end gap-2\">\n {saveOk ? <span className=\"text-sm text-fg-muted\">{ch.saved}</span> : null}\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 p-0\"\n disabled={refreshing}\n title={ch.refresh}\n aria-label={ch.refresh}\n onClick={onRefresh}\n >\n <RefreshCw className={cn('size-4', refreshing && 'animate-spin')} aria-hidden />\n </Button>\n </div>\n );\n});\n","import { agentListDisplayName } from '@/features/settings/agents/agent-display-names';\nimport { nativeSelectMaxWidthClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages, type ChannelsSettingsMessages } from '@/i18n/messages';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nimport { FieldHint, FieldLabel } from './field-primitives';\nimport { channelsInputClassName } from './utils';\n\nexport function ChannelAgentRoutingBlock({\n accountIds,\n routes,\n defaultAgentId,\n agentItems,\n disabled,\n onChange,\n ch,\n}: {\n accountIds: string[];\n routes: Record<string, string>;\n defaultAgentId: string;\n agentItems: { id: string; name?: string }[];\n disabled?: boolean;\n onChange: (accountId: string, agentId: string) => void;\n ch: ChannelsSettingsMessages;\n}) {\n const language = useLocaleStore((s) => s.language);\n const agentsMessages = messages(language).agentsSettings;\n if (accountIds.length === 0) return null;\n const opts = agentItems.length > 0 ? agentItems : [{ id: defaultAgentId }];\n return (\n <div className=\"space-y-3 border-t border-edge-subtle pt-4 dark:border-edge\">\n <div>\n <FieldLabel>{ch.agentRoutingTitle}</FieldLabel>\n <FieldHint>{ch.agentRoutingHint}</FieldHint>\n </div>\n <div className=\"space-y-2\">\n {accountIds.map((acc) => (\n <div\n key={acc}\n className=\"grid grid-cols-1 items-start gap-2 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2.5 sm:grid-cols-2 sm:items-center dark:border-edge\"\n >\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-fg-muted\">{ch.agentRoutingAccountLabel}</p>\n <p className=\"mt-0.5 truncate font-mono text-sm text-fg\" title={acc}>\n {acc}\n </p>\n </div>\n <div className=\"min-w-0\">\n <label className=\"sr-only\" htmlFor={`agent-route-${acc}`}>\n {ch.agentRoutingAgentLabel}\n </label>\n <select\n id={`agent-route-${acc}`}\n className={cn(channelsInputClassName(), nativeSelectMaxWidthClass)}\n disabled={disabled}\n value={(routes[acc] ?? defaultAgentId).toLowerCase()}\n onChange={(e) => onChange(acc, e.target.value)}\n >\n {opts.map((ag) => (\n <option key={ag.id} value={ag.id}>\n {`${agentListDisplayName(ag, agentsMessages)} (${ag.id})`}\n </option>\n ))}\n </select>\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import {\n feishuRoutingAccountIds,\n telegramRoutingAccountIds,\n weixinRoutingAccountIds,\n} from '@/features/settings/channel-bindings-merge';\nimport type {\n DmPolicy,\n FeishuConfig,\n TelegramConfig,\n WeixinConfig,\n} from '@/features/settings/channels-settings.types';\n\nexport type PairingPolicyChannelId = 'telegram' | 'feishu' | 'weixin';\n\nfunction defaultChannelDmPolicy(channel: PairingPolicyChannelId): DmPolicy {\n return channel === 'telegram' ? 'pairing' : 'open';\n}\n\nexport function resolveAccountDmPolicy(\n channel: PairingPolicyChannelId,\n topDmPolicy: DmPolicy | undefined,\n account?: { dmPolicy?: DmPolicy },\n): DmPolicy {\n if (account?.dmPolicy) return account.dmPolicy;\n return topDmPolicy ?? defaultChannelDmPolicy(channel);\n}\n\nfunction listPairingAccountIds(\n channel: PairingPolicyChannelId,\n config: TelegramConfig | WeixinConfig | FeishuConfig,\n): string[] {\n if (channel === 'telegram') {\n const ids = telegramRoutingAccountIds(config);\n return ids.length > 0 ? ids : ['default'];\n }\n if (channel === 'weixin') {\n const ids = weixinRoutingAccountIds(config);\n return ids.length > 0 ? ids : ['default'];\n }\n const ids = feishuRoutingAccountIds(config);\n return ids.length > 0 ? ids : ['default'];\n}\n\nfunction isPairingAccountEnabled(account?: { enabled?: boolean }): boolean {\n return account?.enabled !== false;\n}\n\nexport function resolveAccountDmPolicyForConfig(\n channel: PairingPolicyChannelId,\n config: TelegramConfig | WeixinConfig | FeishuConfig,\n accountId: string,\n): DmPolicy {\n const acc = config.accounts?.[accountId];\n return resolveAccountDmPolicy(channel, config.dmPolicy, acc);\n}\n\n/** True when any enabled account uses pairing (matches gateway pairing-service). */\nexport function channelUsesPairingPolicy(\n channel: PairingPolicyChannelId,\n config: TelegramConfig | WeixinConfig | FeishuConfig,\n): boolean {\n const accountIds = listPairingAccountIds(channel, config);\n return accountIds.some((id) => {\n const acc = config.accounts?.[id];\n if (!isPairingAccountEnabled(acc)) return false;\n return resolveAccountDmPolicyForConfig(channel, config, id) === 'pairing';\n });\n}\n\n/** Hub badge: channel configured, enabled, pairing policy active. */\nexport function hubPairingPendingCount(params: {\n configured: boolean;\n channelEnabled: boolean;\n usesPairing: boolean;\n summaryPending: number;\n}): number {\n if (!params.configured || !params.channelEnabled || !params.usesPairing) return 0;\n return params.summaryPending;\n}\n","import { useCallback, type Dispatch, type SetStateAction } from 'react';\n\nimport {\n approveChannelPairingBySender,\n approveChannelPairingRequest,\n type PairingChannelId,\n} from '@/features/settings/channels-config-api';\n\nexport type PairingFeedback = { kind: 'ok' | 'err'; text: string } | null;\n\nexport function useChannelPairingApprove(params: {\n channel: PairingChannelId;\n accountId: string;\n messages: { pairingApproved: string; pairingInvalid: string };\n mutate: () => Promise<unknown>;\n setCodeBySender: Dispatch<SetStateAction<Record<string, string>>>;\n setBusySender: Dispatch<SetStateAction<string | null>>;\n setFeedback: Dispatch<SetStateAction<PairingFeedback>>;\n}) {\n const { channel, accountId, messages, mutate, setCodeBySender, setBusySender, setFeedback } = params;\n\n const finishApprove = useCallback(\n async (senderId: string, run: () => Promise<{ senderId: string }>) => {\n setBusySender(senderId);\n setFeedback(null);\n try {\n const result = await run();\n setCodeBySender((prev) => {\n const next = { ...prev };\n delete next[senderId];\n return next;\n });\n setFeedback({\n kind: 'ok',\n text: messages.pairingApproved.replace('{{id}}', result.senderId),\n });\n await mutate();\n } catch (e) {\n const msg = e instanceof Error ? e.message : messages.pairingInvalid;\n setFeedback({ kind: 'err', text: msg.includes('PAIRING') ? messages.pairingInvalid : msg });\n } finally {\n setBusySender(null);\n }\n },\n [messages.pairingApproved, messages.pairingInvalid, mutate, setBusySender, setCodeBySender, setFeedback],\n );\n\n const approveByCode = useCallback(\n (senderId: string, code: string) => {\n const trimmed = code.trim().toUpperCase();\n if (!trimmed) return;\n void finishApprove(senderId, () =>\n approveChannelPairingRequest({ channel, accountId, code: trimmed }),\n );\n },\n [accountId, channel, finishApprove],\n );\n\n const quickApprove = useCallback(\n (senderId: string) => {\n void finishApprove(senderId, () =>\n approveChannelPairingBySender({ channel, accountId, senderId }),\n );\n },\n [accountId, channel, finishApprove],\n );\n\n return { approveByCode, quickApprove };\n}\n","import { useEffect } from 'react';\n\nexport const CHANNEL_PAIRING_SSE_EVENTS = [\n 'channels-pairing-requested',\n 'channels-pairing-refreshed',\n 'channels-pairing-approved',\n 'channels-pairing-revoked',\n 'channels-pairing-dismissed',\n] as const;\n\nexport const CHANNEL_PAIRING_SUMMARY_SWR_KEY = 'channel-pairing-summary';\n\n/** Subscribe to gateway pairing SSE window events; returns unsubscribe. */\nexport function subscribeChannelPairingSse(onRefresh: () => void): () => void {\n const handler = () => onRefresh();\n for (const name of CHANNEL_PAIRING_SSE_EVENTS) {\n window.addEventListener(name, handler);\n }\n return () => {\n for (const name of CHANNEL_PAIRING_SSE_EVENTS) {\n window.removeEventListener(name, handler);\n }\n };\n}\n\n/** Revalidate pairing SWR keys when gateway broadcasts pairing SSE events. */\nexport function useChannelPairingSseRefresh(onRefresh: () => void, enabled = true): void {\n useEffect(() => {\n if (!enabled) return;\n return subscribeChannelPairingSse(onRefresh);\n }, [enabled, onRefresh]);\n}\n","import type { PairingChannelId } from '@/features/settings/channels-config-api';\n\nexport function channelPairingSectionDomId(channel: PairingChannelId): string {\n return `channel-pairing-${channel}`;\n}\n\nexport function scrollToChannelPairingSection(channel: PairingChannelId): void {\n requestAnimationFrame(() => {\n document.getElementById(channelPairingSectionDomId(channel))?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n });\n });\n}\n","import { RefreshCw, X } from 'lucide-react';\nimport { useCallback, useMemo, useReducer, useRef, useState, type SetStateAction } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport {\n dismissChannelPairingPending,\n fetchChannelPairingState,\n revokeChannelPairingPaired,\n type PairingChannelId,\n} from '@/features/settings/channels-config-api';\nimport type {\n FeishuConfig,\n TelegramConfig,\n WeixinConfig,\n} from '@/features/settings/channels-settings.types';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { FieldHint, FieldLabel } from './field-primitives';\nimport { channelUsesPairingPolicy, resolveAccountDmPolicyForConfig } from './pairing-policy';\nimport { useChannelPairingApprove } from './use-channel-pairing-approve';\nimport { useChannelPairingSseRefresh } from './use-channel-pairing-sse';\nimport { channelsInputClassName } from './utils';\nimport { channelPairingSectionDomId } from './pairing-scroll';\n\nfunction formatRelativeExpiry(iso: string, locale: string): string {\n const ms = Date.parse(iso) - Date.now();\n if (!Number.isFinite(ms)) return iso;\n const absMin = Math.max(1, Math.round(Math.abs(ms) / 60_000));\n if (ms <= 0) {\n return locale.startsWith('zh') ? '已过期' : 'expired';\n }\n if (absMin < 60) {\n return locale.startsWith('zh') ? `${absMin} 分钟后` : `in ${absMin} min`;\n }\n const hours = Math.round(absMin / 60);\n return locale.startsWith('zh') ? `${hours} 小时后` : `in ${hours} h`;\n}\n\nfunction pairingSwrKey(channel: PairingChannelId, accountId: string): string {\n return `channel-pairing-${channel}-${accountId}`;\n}\n\ntype PairingUiState = {\n codeBySender: Record<string, string>;\n busySender: string | null;\n dismissingId: string | null;\n revokingId: string | null;\n feedback: { kind: 'ok' | 'err'; text: string } | null;\n};\n\nconst emptyPairingUiState: PairingUiState = {\n codeBySender: {},\n busySender: null,\n dismissingId: null,\n revokingId: null,\n feedback: null,\n};\n\ntype PairingUiAction =\n | { type: 'setCodeBySender'; updater: (prev: Record<string, string>) => Record<string, string> }\n | { type: 'setBusySender'; value: string | null }\n | { type: 'setDismissingId'; value: string | null }\n | { type: 'setRevokingId'; value: string | null }\n | { type: 'setFeedback'; value: PairingUiState['feedback'] }\n | { type: 'clearSenderCode'; senderId: string };\n\nfunction pairingUiReducer(state: PairingUiState, action: PairingUiAction): PairingUiState {\n switch (action.type) {\n case 'setCodeBySender':\n return { ...state, codeBySender: action.updater(state.codeBySender) };\n case 'setBusySender':\n return { ...state, busySender: action.value };\n case 'setDismissingId':\n return { ...state, dismissingId: action.value };\n case 'setRevokingId':\n return { ...state, revokingId: action.value };\n case 'setFeedback':\n return { ...state, feedback: action.value };\n case 'clearSenderCode': {\n const next = { ...state.codeBySender };\n delete next[action.senderId];\n return { ...state, codeBySender: next };\n }\n }\n}\n\nexport function ChannelPairingSection({\n channel,\n accountIds,\n channelConfig,\n active,\n ch,\n language,\n onPairedChange,\n}: {\n channel: PairingChannelId;\n accountIds?: string[];\n channelConfig: TelegramConfig | WeixinConfig | FeishuConfig;\n active: boolean;\n ch: ChannelsSettingsMessages;\n language: string;\n onPairedChange?: (pairedCredentialCount: number) => void;\n}) {\n const inputClassName = channelsInputClassName;\n const resolvedAccountIds = useMemo(() => {\n const ids = (accountIds ?? ['default']).filter(Boolean);\n return ids.length > 0 ? ids : ['default'];\n }, [accountIds]);\n const sectionUsesPairing = useMemo(\n () => channelUsesPairingPolicy(channel, channelConfig),\n [channel, channelConfig],\n );\n const resolveAccountDmPolicy = useCallback(\n (accountId: string) => resolveAccountDmPolicyForConfig(channel, channelConfig, accountId),\n [channel, channelConfig],\n );\n\n const [accountId, setAccountId] = useState(resolvedAccountIds[0] ?? 'default');\n const [prevResolvedAccountIds, setPrevResolvedAccountIds] = useState(resolvedAccountIds);\n if (resolvedAccountIds !== prevResolvedAccountIds) {\n setPrevResolvedAccountIds(resolvedAccountIds);\n if (!resolvedAccountIds.includes(accountId)) {\n setAccountId(resolvedAccountIds[0] ?? 'default');\n }\n }\n\n const [ui, dispatchUi] = useReducer(pairingUiReducer, emptyPairingUiState);\n const { codeBySender, busySender, dismissingId, revokingId, feedback } = ui;\n\n const accountDmPolicy = resolveAccountDmPolicy(accountId);\n const accountPairingActive = accountDmPolicy === 'pairing';\n\n const onPairedChangeRef = useRef(onPairedChange);\n onPairedChangeRef.current = onPairedChange;\n\n const swrKey = active && sectionUsesPairing && accountPairingActive ? pairingSwrKey(channel, accountId) : null;\n const { data, error, isLoading, mutate } = useSWR(\n swrKey,\n () => fetchChannelPairingState(channel, accountId),\n {\n revalidateOnFocus: true,\n onSuccess: (result) => {\n onPairedChangeRef.current?.(result.paired.fromCredentials.length);\n },\n },\n );\n\n const refresh = useCallback(() => {\n void mutate();\n }, [mutate]);\n\n useChannelPairingSseRefresh(refresh, active && sectionUsesPairing && accountPairingActive);\n\n const pairedCred = data?.paired.fromCredentials ?? [];\n\n const setCodeBySender = useCallback(\n (updater: SetStateAction<Record<string, string>>) => {\n dispatchUi({\n type: 'setCodeBySender',\n updater: typeof updater === 'function' ? updater : () => updater,\n });\n },\n [],\n );\n\n const setBusySender = useCallback((value: SetStateAction<string | null>) => {\n dispatchUi({\n type: 'setBusySender',\n value: typeof value === 'function' ? value(ui.busySender) : value,\n });\n }, [ui.busySender]);\n\n const setFeedback = useCallback((value: SetStateAction<PairingUiState['feedback']>) => {\n dispatchUi({\n type: 'setFeedback',\n value: typeof value === 'function' ? value(ui.feedback) : value,\n });\n }, [ui.feedback]);\n\n const { approveByCode, quickApprove } = useChannelPairingApprove({\n channel,\n accountId,\n messages: { pairingApproved: ch.pairingApproved, pairingInvalid: ch.pairingInvalid },\n mutate,\n setCodeBySender,\n setBusySender,\n setFeedback,\n });\n\n const dismiss = useCallback(\n async (senderId: string) => {\n dispatchUi({ type: 'setDismissingId', value: senderId });\n dispatchUi({ type: 'setFeedback', value: null });\n try {\n await dismissChannelPairingPending({ channel, accountId, senderId });\n dispatchUi({ type: 'clearSenderCode', senderId });\n dispatchUi({\n type: 'setFeedback',\n value: {\n kind: 'ok',\n text: ch.pairingDismissed.replace('{{id}}', senderId),\n },\n });\n await mutate();\n } catch (e) {\n const msg = e instanceof Error ? e.message : ch.pairingDismissError;\n dispatchUi({ type: 'setFeedback', value: { kind: 'err', text: msg } });\n } finally {\n dispatchUi({ type: 'setDismissingId', value: null });\n }\n },\n [accountId, channel, ch.pairingDismissed, ch.pairingDismissError, mutate],\n );\n\n const revoke = useCallback(\n async (senderId: string) => {\n dispatchUi({ type: 'setRevokingId', value: senderId });\n dispatchUi({ type: 'setFeedback', value: null });\n try {\n await revokeChannelPairingPaired({ channel, accountId, senderId });\n dispatchUi({\n type: 'setFeedback',\n value: {\n kind: 'ok',\n text: ch.pairingRevoked.replace('{{id}}', senderId),\n },\n });\n await mutate();\n } catch (e) {\n const msg = e instanceof Error ? e.message : ch.pairingRevokeError;\n dispatchUi({ type: 'setFeedback', value: { kind: 'err', text: msg } });\n } finally {\n dispatchUi({ type: 'setRevokingId', value: null });\n }\n },\n [accountId, channel, ch.pairingRevoked, ch.pairingRevokeError, mutate],\n );\n\n if (!sectionUsesPairing) return null;\n\n if (!accountPairingActive) {\n return (\n <div\n id={channelPairingSectionDomId(channel)}\n className=\"space-y-2 rounded-xl border border-edge-subtle bg-surface-base/50 p-4 dark:border-edge\"\n >\n <h3 className=\"text-sm font-medium text-fg\">{ch.pairingTitle}</h3>\n <p className=\"text-xs text-fg-muted\">{ch.pairingAccountNotPairing.replace('{{account}}', accountId)}</p>\n {resolvedAccountIds.length > 1 ? (\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.pairingAccountLabel}</FieldLabel>\n <select\n className={inputClassName()}\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n >\n {resolvedAccountIds.map((id) => (\n <option key={id} value={id}>\n {id}\n </option>\n ))}\n </select>\n </div>\n ) : null}\n </div>\n );\n }\n\n const pending = data?.pending ?? [];\n const pairedConfig = data?.paired.fromConfig ?? [];\n\n return (\n <div\n id={channelPairingSectionDomId(channel)}\n className=\"space-y-3 rounded-xl border border-edge-subtle bg-surface-base/50 p-4 dark:border-edge\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <h3 className=\"text-sm font-medium text-fg\">{ch.pairingTitle}</h3>\n <p className=\"mt-1 text-xs text-fg-muted\">{ch.pairingSubtitle}</p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-8 shrink-0 p-0\"\n aria-label={ch.pairingRefresh}\n disabled={isLoading}\n onClick={() => void mutate()}\n >\n <RefreshCw className={cn('size-4 text-fg-muted', isLoading && 'animate-spin')} />\n </Button>\n </div>\n\n {resolvedAccountIds.length > 1 ? (\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.pairingAccountLabel}</FieldLabel>\n <select\n className={inputClassName()}\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n >\n {resolvedAccountIds.map((id) => (\n <option key={id} value={id}>\n {id}\n </option>\n ))}\n </select>\n </div>\n ) : null}\n\n <FieldHint>{ch.pairingSetupHint}</FieldHint>\n\n {error ? <p className=\"text-xs text-red-600 dark:text-red-400\">{ch.pairingLoadError}</p> : null}\n {feedback ? (\n <p\n className={cn(\n 'text-xs',\n feedback.kind === 'ok' ? 'text-success' : 'text-red-600 dark:text-red-400',\n )}\n >\n {feedback.text}\n </p>\n ) : null}\n\n <div className=\"space-y-2\">\n <FieldLabel>{ch.pairingPendingTitle}</FieldLabel>\n {pending.length > 0 ? <FieldHint>{ch.pairingQuickApproveHint}</FieldHint> : null}\n {pending.length === 0 ? (\n <p className=\"text-xs text-fg-muted\">{ch.pairingPendingEmpty}</p>\n ) : (\n <ul className=\"space-y-2\">\n {pending.map((item) => {\n const code = codeBySender[item.senderId] ?? '';\n const busy = busySender === item.senderId;\n const dismissing = dismissingId === item.senderId;\n return (\n <li\n key={item.senderId}\n className={cn(\n 'rounded-lg border bg-surface-panel p-3 dark:border-edge',\n item.isStale\n ? 'border-amber-300/50 dark:border-amber-800/50'\n : 'border-edge',\n )}\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n <span className=\"font-mono text-xs text-fg\">{item.senderId}</span>\n <span className=\"text-[11px] text-fg-muted\">\n {item.isStale ? (\n <span className=\"text-amber-800 dark:text-amber-200\">{ch.pairingStaleItem}</span>\n ) : null}\n {item.isStale ? ' · ' : null}\n {ch.pairingExpiresHint.replace(\n '{{time}}',\n formatRelativeExpiry(item.expiresAt, language),\n )}\n </span>\n </div>\n {item.codeLast4 ? (\n <p className=\"mt-1 text-[11px] text-fg-muted\">\n {ch.pairingCodeHint.replace('{{suffix}}', item.codeLast4)}\n </p>\n ) : null}\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"shrink-0 text-xs\"\n disabled={busy || dismissing}\n onClick={() => void quickApprove(item.senderId)}\n >\n {busy ? ch.pairingApproving : ch.pairingQuickApprove}\n </Button>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs uppercase')}\n value={code}\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={8}\n placeholder={ch.pairingCodePlaceholder}\n onChange={(e) =>\n setCodeBySender((prev) => ({\n ...prev,\n [item.senderId]: e.target.value.toUpperCase(),\n }))\n }\n onKeyDown={(e) => {\n if (e.key === 'Enter') approveByCode(item.senderId, code);\n }}\n />\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"shrink-0 text-xs\"\n disabled={busy || dismissing || !code.trim()}\n onClick={() => approveByCode(item.senderId, code)}\n >\n {busy ? ch.pairingApproving : ch.pairingApprove}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"shrink-0 text-xs text-fg-muted hover:text-danger\"\n disabled={busy || dismissing}\n onClick={() => void dismiss(item.senderId)}\n >\n {dismissing ? ch.pairingDismissing : ch.pairingDismiss}\n </Button>\n </div>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n\n <div className=\"space-y-2 border-t border-edge-subtle pt-3 dark:border-edge-subtle\">\n <FieldLabel>{ch.pairedTitle}</FieldLabel>\n <div className=\"grid gap-3 text-xs sm:grid-cols-2\">\n <div>\n <p className=\"text-fg-muted\">{ch.pairedFromConfig}</p>\n <p className=\"mt-0.5 font-mono text-fg\">\n {pairedConfig.length ? pairedConfig.join(', ') : ch.pairedEmpty}\n </p>\n </div>\n <div>\n <p className=\"text-fg-muted\">{ch.pairedFromCredentials}</p>\n {pairedCred.length === 0 ? (\n <p className=\"mt-0.5 font-mono text-fg\">{ch.pairedEmpty}</p>\n ) : (\n <ul className=\"mt-1 space-y-1\">\n {pairedCred.map((id) => (\n <li key={id} className=\"flex items-center justify-between gap-2\">\n <span className=\"font-mono text-fg\">{id}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-7 shrink-0 p-0 text-fg-muted hover:text-danger\"\n aria-label={ch.pairingRevokeAria.replace('{{id}}', id)}\n disabled={revokingId === id}\n onClick={() => void revoke(id)}\n >\n <X className=\"size-3.5\" />\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Check, ChevronDown, Copy, Eye, EyeOff } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChatAgentsPayload } from '@/features/chat/agent-selection/chat-agents-api';\nimport { feishuRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport type { ChannelsSettingsState, DmPolicy, GroupPolicy } from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { ChannelAgentRoutingBlock } from './channel-agent-routing-block';\nimport { ChannelPairingSection } from './channel-pairing-section';\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { scrollToChannelPairingSection } from './pairing-scroll';\nimport { channelsInputClassName, joinAllowFrom, parseIdList } from './utils';\n\nexport function FeishuMoreSettingsSection({\n ch,\n form,\n baseline,\n showFeishuSecret,\n setShowFeishuSecret,\n showFeishuWebhookSecrets,\n setShowFeishuWebhookSecrets,\n feishuCopied,\n feishuWebhookCopied,\n copyFeishuSecret,\n copyFeishuWebhookConfig,\n updateFeishu,\n updateChannelAgentRoute,\n feishuAccountsDraft,\n setFeishuAccountsDraft,\n feishuAccountsError,\n onFeishuAccountsBlur,\n dmOpts,\n groupOpts,\n chatAgents,\n saving,\n language,\n dialogOpen,\n pairingFocus = false,\n}: {\n ch: ChannelsSettingsMessages;\n form: ChannelsSettingsState;\n baseline: ChannelsSettingsState | null;\n showFeishuSecret: boolean;\n setShowFeishuSecret: (v: boolean | ((b: boolean) => boolean)) => void;\n showFeishuWebhookSecrets: boolean;\n setShowFeishuWebhookSecrets: (v: boolean | ((b: boolean) => boolean)) => void;\n feishuCopied: boolean;\n feishuWebhookCopied: boolean;\n copyFeishuSecret: () => Promise<void>;\n copyFeishuWebhookConfig: () => Promise<void>;\n updateFeishu: (patch: Partial<ChannelsSettingsState['feishu']>) => void;\n updateChannelAgentRoute: (\n channel: 'telegram' | 'weixin' | 'feishu',\n accountId: string,\n agentId: string,\n ) => void;\n feishuAccountsDraft: string;\n setFeishuAccountsDraft: (v: string) => void;\n feishuAccountsError: string;\n onFeishuAccountsBlur: () => void;\n dmOpts: { value: DmPolicy; label: string }[];\n groupOpts: { value: GroupPolicy; label: string }[];\n chatAgents: ChatAgentsPayload | undefined;\n saving: boolean;\n language: string;\n dialogOpen: boolean;\n pairingFocus?: boolean;\n}) {\n const inputClassName = channelsInputClassName;\n const fs = form.feishu;\n const feishuAccountIds = feishuRoutingAccountIds(fs);\n const resolvedFeishuAccounts = feishuAccountIds.length > 0 ? feishuAccountIds : ['default'];\n const feishuBaselineSecret = baseline?.feishu?.appSecret ?? '';\n const feishuSecretDisplayLocked =\n !showFeishuSecret &&\n Boolean(String(feishuBaselineSecret).trim()) &&\n fs.appSecret === feishuBaselineSecret;\n\n const detailsRef = useRef<HTMLDetailsElement>(null);\n\n useEffect(() => {\n if (!pairingFocus) return;\n const details = detailsRef.current;\n if (details) details.open = true;\n const timer = window.setTimeout(() => scrollToChannelPairingSection('feishu'), 80);\n return () => window.clearTimeout(timer);\n }, [pairingFocus]);\n\n return (\n <details\n ref={detailsRef}\n className=\"group rounded-xl border border-edge-subtle bg-surface-base open:pb-3 dark:border-edge\"\n >\n <summary className=\"cursor-pointer list-none rounded-xl px-3 py-2.5 text-sm font-medium text-fg transition-colors hover:bg-surface-hover group-open:rounded-b-none [&::-webkit-details-marker]:hidden\">\n <span className=\"inline-flex items-center gap-2\">\n <ChevronDown className=\"size-4 shrink-0 text-fg-muted transition-transform group-open:rotate-180\" />\n {ch.advancedShow}\n </span>\n </summary>\n <div className=\"space-y-4 border-t border-edge-subtle px-3 pb-3 pt-3 dark:border-edge-subtle\">\n <p className=\"text-xs leading-relaxed text-fg-muted\">{ch.feishuAdvancedHint}</p>\n <label className=\"flex cursor-pointer items-start gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox mt-0.5\"\n checked={fs.enabled}\n onChange={(e) => updateFeishu({ enabled: e.target.checked })}\n />\n <span>{ch.enableFeishuAria}</span>\n </label>\n\n <SelectField\n label={ch.dmPolicy}\n value={fs.dmPolicy}\n onChange={(v) => updateFeishu({ dmPolicy: v })}\n options={dmOpts}\n />\n <ChannelPairingSection\n channel=\"feishu\"\n accountIds={resolvedFeishuAccounts}\n channelConfig={fs}\n active={dialogOpen}\n ch={ch}\n language={language}\n />\n\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>\n {ch.feishuAppId}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n value={fs.appId}\n onChange={(e) => updateFeishu({ appId: e.target.value })}\n placeholder=\"cli_xxx\"\n />\n <FieldHint>{ch.feishuAppIdDesc}</FieldHint>\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>\n {ch.feishuAppSecret}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </FieldLabel>\n <div className=\"flex flex-wrap gap-2\">\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showFeishuSecret ? 'text' : 'password'}\n autoComplete=\"off\"\n readOnly={feishuSecretDisplayLocked}\n value={\n feishuSecretDisplayLocked\n ? '*'.repeat(Math.max(1, fs.appSecret.length))\n : fs.appSecret\n }\n onChange={(e) => {\n if (feishuSecretDisplayLocked) return;\n updateFeishu({ appSecret: e.target.value });\n }}\n placeholder=\"••••••••\"\n />\n {fs.appSecret ? (\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => void copyFeishuSecret()}\n >\n {feishuCopied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {feishuCopied ? ch.copied : ch.copy}\n </Button>\n ) : null}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => setShowFeishuSecret((s) => !s)}\n >\n {showFeishuSecret ? <EyeOff className=\"size-3.5\" /> : <Eye className=\"size-3.5\" />}\n {showFeishuSecret ? ch.hide : ch.show}\n </Button>\n </div>\n <FieldHint>{ch.feishuAppSecretDesc}</FieldHint>\n </div>\n\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.feishuDomain}</FieldLabel>\n <select\n className={inputClassName()}\n value={String(fs.domain || 'feishu')}\n onChange={(e) => updateFeishu({ domain: e.target.value })}\n >\n <option value=\"feishu\">feishu</option>\n <option value=\"lark\">lark</option>\n </select>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.connectionMode}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.connectionMode}\n onChange={(e) =>\n updateFeishu({ connectionMode: e.target.value as ChannelsSettingsState['feishu']['connectionMode'] })\n }\n >\n <option value=\"websocket\">websocket</option>\n <option value=\"webhook\">webhook</option>\n </select>\n <FieldHint>{ch.connectionModeDesc}</FieldHint>\n </div>\n </div>\n\n {fs.connectionMode === 'webhook' ? (\n <div className=\"rounded-xl border border-edge-subtle bg-surface px-4 py-3 dark:border-edge-subtle\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-medium text-fg\">{ch.webhookTitle}</div>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => setShowFeishuWebhookSecrets((s) => !s)}\n >\n {showFeishuWebhookSecrets ? <EyeOff className=\"size-3.5\" /> : <Eye className=\"size-3.5\" />}\n {showFeishuWebhookSecrets ? ch.hide : ch.show}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => void copyFeishuWebhookConfig()}\n >\n {feishuWebhookCopied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {feishuWebhookCopied ? ch.copied : ch.copy}\n </Button>\n </div>\n </div>\n\n <div className=\"mt-3 grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.verificationToken}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showFeishuWebhookSecrets ? 'text' : 'password'}\n autoComplete=\"off\"\n value={fs.verificationToken ?? ''}\n onChange={(e) => updateFeishu({ verificationToken: e.target.value })}\n />\n <FieldHint>{ch.verificationTokenDesc}</FieldHint>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.encryptKey}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showFeishuWebhookSecrets ? 'text' : 'password'}\n autoComplete=\"off\"\n value={fs.encryptKey ?? ''}\n onChange={(e) => updateFeishu({ encryptKey: e.target.value })}\n />\n <FieldHint>{ch.encryptKeyDesc}</FieldHint>\n </div>\n </div>\n\n <div className=\"mt-3 grid gap-3 sm:grid-cols-3\">\n <div className=\"flex flex-col gap-1.5 sm:col-span-2\">\n <FieldLabel>{ch.webhookHost}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n value={fs.webhookHost ?? ''}\n onChange={(e) => updateFeishu({ webhookHost: e.target.value })}\n placeholder=\"127.0.0.1\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.webhookPort}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type=\"number\"\n inputMode=\"numeric\"\n value={String(fs.webhookPort ?? '')}\n onChange={(e) =>\n updateFeishu({ webhookPort: Number(e.target.value || '0') || 0 })\n }\n placeholder=\"3000\"\n />\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-col gap-1.5\">\n <FieldLabel>{ch.webhookPath}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n value={fs.webhookPath ?? ''}\n onChange={(e) => updateFeishu({ webhookPath: e.target.value })}\n placeholder=\"/feishu/events\"\n />\n <FieldHint>{ch.webhookPathDesc}</FieldHint>\n </div>\n </div>\n ) : null}\n\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.renderMode}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.renderMode}\n onChange={(e) =>\n updateFeishu({ renderMode: e.target.value as ChannelsSettingsState['feishu']['renderMode'] })\n }\n >\n <option value=\"auto\">auto</option>\n <option value=\"raw\">raw</option>\n <option value=\"card\">card</option>\n </select>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.reactionNotifications}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.reactionNotifications}\n onChange={(e) =>\n updateFeishu({\n reactionNotifications: e.target\n .value as ChannelsSettingsState['feishu']['reactionNotifications'],\n })\n }\n >\n <option value=\"off\">off</option>\n <option value=\"own\">own</option>\n <option value=\"all\">all</option>\n </select>\n </div>\n </div>\n\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={fs.streaming}\n onChange={(e) => updateFeishu({ streaming: e.target.checked })}\n />\n {ch.enableStreaming}\n </label>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.groupPolicy}</FieldLabel>\n <select\n className={inputClassName()}\n value={fs.groupPolicy}\n onChange={(e) =>\n updateFeishu({ groupPolicy: e.target.value as ChannelsSettingsState['feishu']['groupPolicy'] })\n }\n >\n {groupOpts.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={fs.requireMention}\n onChange={(e) => updateFeishu({ requireMention: e.target.checked })}\n />\n {ch.requireMention}\n </label>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromDm}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"ou_xxx, on_xxx\"\n value={joinAllowFrom(fs.allowFrom)}\n onChange={(e) => updateFeishu({ allowFrom: parseIdList(e.target.value) })}\n />\n <FieldHint>{ch.allowFromDmDesc}</FieldHint>\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromGroups}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"oc_xxx, oc_yyy\"\n value={joinAllowFrom(fs.groupAllowFrom)}\n onChange={(e) => updateFeishu({ groupAllowFrom: parseIdList(e.target.value) })}\n />\n <FieldHint>{ch.allowFromGroupsDesc}</FieldHint>\n </div>\n\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.historyLimit}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type=\"number\"\n inputMode=\"numeric\"\n value={String(fs.historyLimit)}\n onChange={(e) => updateFeishu({ historyLimit: Number(e.target.value || '0') || 0 })}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.textChunkLimit}</FieldLabel>\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type=\"number\"\n inputMode=\"numeric\"\n value={String(fs.textChunkLimit)}\n onChange={(e) => updateFeishu({ textChunkLimit: Number(e.target.value || '0') || 0 })}\n />\n </div>\n </div>\n\n <div className=\"rounded-xl border border-edge-subtle bg-surface px-4 py-3 dark:border-edge-subtle\">\n <div className=\"text-sm font-medium text-fg\">{ch.feishuToolsTitle}</div>\n <div className=\"mt-2 grid gap-2 sm:grid-cols-2\">\n {(\n [\n ['doc', ch.feishuToolDoc],\n ['wiki', ch.feishuToolWiki],\n ['drive', ch.feishuToolDrive],\n ['perm', ch.feishuToolPerm],\n ['bitable', ch.feishuToolBitable],\n ['scopes', ch.feishuToolScopes],\n ] as const\n ).map(([key, label]) => (\n <label key={key} className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={Boolean(fs.tools?.[key])}\n onChange={(e) =>\n updateFeishu({\n tools: { ...fs.tools, [key]: e.target.checked },\n })\n }\n />\n {label}\n </label>\n ))}\n </div>\n <div className=\"mt-2\">\n <FieldHint>{ch.feishuToolsDesc}</FieldHint>\n </div>\n </div>\n\n <div className=\"rounded-xl border border-edge-subtle bg-surface px-4 py-3 dark:border-edge-subtle\">\n <div className=\"text-sm font-medium text-fg\">{ch.feishuActionsTitle}</div>\n <label className=\"mt-2 flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={Boolean(fs.actions?.reactions)}\n onChange={(e) =>\n updateFeishu({\n actions: { ...fs.actions, reactions: e.target.checked },\n })\n }\n />\n {ch.feishuActionReactions}\n </label>\n </div>\n\n <ChannelAgentRoutingBlock\n accountIds={feishuRoutingAccountIds(fs)}\n routes={form.channelAgentRoutes.feishu}\n defaultAgentId={form.defaultAgentId}\n agentItems={chatAgents?.items ?? []}\n disabled={saving}\n onChange={(acc, aid) => updateChannelAgentRoute('feishu', acc, aid)}\n ch={ch}\n />\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.multiAccountJson}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[140px] resize-y font-mono text-xs')}\n spellCheck={false}\n value={feishuAccountsDraft}\n onChange={(e) => setFeishuAccountsDraft(e.target.value)}\n onBlur={onFeishuAccountsBlur}\n placeholder='{ \"default\": { \"appId\": \"...\", \"appSecret\": \"...\", \"enabled\": true } }'\n />\n {feishuAccountsError ? (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{feishuAccountsError}</p>\n ) : (\n <FieldHint>{ch.multiAccountJsonDesc}</FieldHint>\n )}\n </div>\n </div>\n </div>\n </details>\n );\n}\n","import { Button } from '@/components/ui/button';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nexport function ChannelsSettingsDialogFooter({\n ch,\n dirty,\n saving,\n onCancel,\n onDiscard,\n onSave,\n showCancel = true,\n}: {\n ch: ChannelsSettingsMessages;\n dirty: boolean;\n saving: boolean;\n onCancel: () => void;\n onDiscard: () => void;\n onSave: () => void | Promise<void | boolean>;\n showCancel?: boolean;\n}) {\n return (\n <div className=\"sticky bottom-0 shrink-0 border-t border-edge-subtle bg-surface-panel px-6 py-4 dark:border-edge-subtle\">\n {dirty ? (\n <p className=\"mb-3 text-xs text-amber-800 dark:text-amber-200\">{ch.unsavedHint}</p>\n ) : null}\n <div className=\"flex flex-wrap justify-end gap-2\">\n {showCancel ? (\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel}>\n {ch.modalCancel}\n </Button>\n ) : null}\n <Button type=\"button\" variant=\"secondary\" disabled={!dirty || saving} onClick={onDiscard}>\n {ch.discard}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={!dirty || saving} onClick={() => void onSave()}>\n {saving ? ch.saving : ch.save}\n </Button>\n </div>\n </div>\n );\n}\n","import { ExternalLink } from 'lucide-react';\nimport QRCode from 'qrcode';\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport {\n fetchFeishuSetupStart,\n fetchFeishuSetupStatus,\n} from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { interaction } from '@/lib/interaction';\nimport { useAsyncResource } from '@/lib/use-async-resource';\n\nimport { ChannelsSettingsDialogFooter } from './channels-settings-dialog-footer';\nimport { ChannelSettingsShell, type ChannelSettingsPresentation } from './channel-settings-shell';\n\ntype FeishuDomain = 'feishu' | 'lark';\n\nconst QR_IMAGE_OPTIONS = {\n width: 208,\n margin: 2,\n errorCorrectionLevel: 'M' as const,\n color: { dark: '#000000ff', light: '#ffffffff' },\n};\n\ntype QrStartData = { sessionKey: string | null; qrUrl: string | null };\n\nconst emptyQrStart: QrStartData = { sessionKey: null, qrUrl: null };\n\nfunction FeishuQrSetupSession({\n ch,\n onSetupSuccess,\n onOpenChange,\n closeOnSetupSuccess,\n moreSettings,\n}: {\n ch: ChannelsSettingsMessages;\n onSetupSuccess: (result: { appId: string; domain: string; openId?: string }) => void;\n onOpenChange: (open: boolean) => void;\n closeOnSetupSuccess: boolean;\n moreSettings?: ReactNode;\n}) {\n const [domain, setDomain] = useState<FeishuDomain>('feishu');\n const [generation, setGeneration] = useState(0);\n const [pollError, setPollError] = useState<string | null>(null);\n\n const onSetupSuccessRef = useRef(onSetupSuccess);\n const onOpenChangeRef = useRef(onOpenChange);\n onSetupSuccessRef.current = onSetupSuccess;\n onOpenChangeRef.current = onOpenChange;\n\n const start = useAsyncResource(\n () =>\n fetchFeishuSetupStart({ domain }).then((result) => ({\n sessionKey: result.sessionKey,\n qrUrl: result.qrUrl,\n })),\n [generation, domain],\n { initial: emptyQrStart, errorData: emptyQrStart },\n );\n\n const sessionKey = start.data.sessionKey;\n const qrUrl = start.data.qrUrl;\n const busy = start.loading;\n const startError =\n start.error instanceof Error\n ? start.error.message\n : start.error\n ? String(start.error)\n : null;\n const error = pollError ?? startError;\n\n const startScan = useCallback((d: FeishuDomain) => {\n setPollError(null);\n setDomain(d);\n setGeneration((g) => g + 1);\n }, []);\n\n useEffect(() => {\n if (!sessionKey) return;\n let cancelled = false;\n let intervalId: number | undefined;\n\n const poll = async () => {\n try {\n const status = await fetchFeishuSetupStatus(sessionKey);\n if (cancelled) return;\n\n if (status.phase === 'polling') return;\n\n if (status.phase === 'done') {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n intervalId = undefined;\n }\n start.setData(emptyQrStart);\n if (status.ok) {\n if (closeOnSetupSuccess) onOpenChangeRef.current(false);\n onSetupSuccessRef.current({\n appId: status.appId,\n domain: status.domain,\n openId: status.openId,\n });\n } else {\n setPollError(status.message);\n }\n return;\n }\n\n if (status.phase === 'unknown') {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n setPollError(status.message);\n start.setData(emptyQrStart);\n }\n } catch (e) {\n if (!cancelled) {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n setPollError(e instanceof Error ? e.message : 'Request failed');\n start.setData(emptyQrStart);\n }\n }\n };\n\n intervalId = window.setInterval(() => void poll(), 3000);\n void poll();\n return () => {\n cancelled = true;\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n };\n }, [sessionKey, closeOnSetupSuccess, start.setData]);\n\n const qrImage = useAsyncResource(\n () => QRCode.toDataURL(qrUrl!, QR_IMAGE_OPTIONS),\n [qrUrl],\n { enabled: Boolean(qrUrl), initial: null as string | null, errorData: null },\n );\n\n const qrDataUrl = qrImage.data;\n const qrGenFailed = qrImage.error !== null && !qrImage.loading;\n\n const showQr = Boolean(qrUrl && sessionKey);\n const qrFrameLoading = !error && !showQr;\n\n return (\n <>\n <div className=\"text-center\">\n <p className=\"text-base font-semibold tracking-tight text-fg\">{ch.feishuQrModalTitle}</p>\n <p className=\"mt-1.5 text-sm text-fg-muted\">{ch.feishuQrModalSubtitle}</p>\n </div>\n\n <div className=\"mt-6 flex min-h-[17.5rem] flex-col items-center justify-center gap-3\">\n {error ? (\n <p className=\"text-center text-sm text-red-600 dark:text-red-400\">{error}</p>\n ) : null}\n\n {!error && (showQr || qrFrameLoading) ? (\n <div className=\"flex w-full flex-col items-center gap-3\">\n <p className=\"text-sm text-fg-muted\">\n {qrFrameLoading ? ch.feishuQrStarting : ch.feishuQrScanHint}\n </p>\n <div\n className={cn(\n 'relative flex size-52 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-edge-subtle bg-white p-3 dark:border-edge',\n qrFrameLoading && 'bg-surface-muted/40 dark:bg-surface-base',\n )}\n >\n {qrFrameLoading ? (\n <div\n className=\"absolute inset-3 animate-pulse rounded-md bg-surface-muted dark:bg-surface-hover\"\n aria-hidden\n />\n ) : null}\n {showQr && qrUrl && !error && qrDataUrl && !qrGenFailed ? (\n <img src={qrDataUrl} alt=\"\" className=\"relative z-[1] size-full object-contain\" />\n ) : null}\n {showQr && qrUrl && !error && !qrDataUrl && !qrGenFailed && !qrFrameLoading ? (\n <p className=\"relative z-[1] px-2 text-center text-sm text-fg-muted\">{ch.feishuQrEncoding}</p>\n ) : null}\n {showQr && qrUrl && !error && qrGenFailed ? (\n <div className=\"relative z-[1] flex size-full flex-col items-center justify-center gap-2 px-1\">\n <p className=\"text-center text-xs text-fg-muted\">{ch.feishuQrImageError}</p>\n <a\n href={qrUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1 text-xs text-accent underline-offset-2 hover:underline\"\n >\n <ExternalLink className=\"size-3 shrink-0\" />\n {ch.feishuQrOpenLink}\n </a>\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n\n <div\n className=\"mx-auto mt-4 flex w-full max-w-[20rem] justify-center px-1\"\n role=\"group\"\n aria-label={ch.feishuRegionSwitchAria}\n >\n <div className=\"inline-flex w-full rounded-full border border-edge bg-surface-muted/60 p-1 dark:border-edge dark:bg-surface-base\">\n <button\n type=\"button\"\n disabled={busy}\n className={cn(\n 'min-w-0 flex-1 rounded-full px-3 py-2 text-center text-sm font-medium transition-colors',\n interaction.press,\n domain === 'feishu'\n ? 'bg-surface-panel text-fg shadow-sm dark:bg-surface-panel'\n : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => startScan('feishu')}\n >\n {ch.feishuRegionChina}\n </button>\n <button\n type=\"button\"\n disabled={busy}\n className={cn(\n 'min-w-0 flex-1 rounded-full px-3 py-2 text-center text-sm font-medium transition-colors',\n interaction.press,\n domain === 'lark'\n ? 'bg-surface-panel text-fg shadow-sm dark:bg-surface-panel'\n : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => startScan('lark')}\n >\n {ch.feishuRegionInternational}\n </button>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-11 w-full rounded-full border-0 bg-fg text-surface-panel hover:opacity-90 dark:bg-fg dark:text-surface-panel\"\n disabled={busy}\n onClick={() => startScan(domain)}\n >\n {busy ? ch.feishuQrStarting : ch.feishuQrRegenerate}\n </Button>\n </div>\n\n {moreSettings ? (\n <div className=\"mt-6 border-t border-edge-subtle pt-4 dark:border-edge-subtle\">{moreSettings}</div>\n ) : null}\n </>\n );\n}\n\nexport function FeishuQrSetupDialog({\n open,\n onOpenChange,\n ch,\n onSetupSuccess,\n moreSettings,\n settingsDirty = false,\n settingsSaving = false,\n onSettingsDiscard,\n onSettingsSave,\n presentation = 'modal',\n closeOnSetupSuccess = true,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n presentation?: ChannelSettingsPresentation;\n closeOnSetupSuccess?: boolean;\n ch: ChannelsSettingsMessages;\n onSetupSuccess: (result: { appId: string; domain: string; openId?: string }) => void;\n moreSettings?: ReactNode;\n settingsDirty?: boolean;\n settingsSaving?: boolean;\n onSettingsDiscard?: () => void;\n onSettingsSave?: () => Promise<boolean>;\n}) {\n return (\n <ChannelSettingsShell\n presentation={presentation}\n open={open}\n onOpenChange={onOpenChange}\n title={ch.feishuTitle}\n description={ch.feishuSubtitle}\n srTitle={ch.feishuQrModalTitle}\n srDescription={ch.feishuQrModalSubtitle}\n closeAriaLabel={ch.feishuQrCloseAria}\n wide\n footer={\n moreSettings && onSettingsDiscard && onSettingsSave ? (\n <ChannelsSettingsDialogFooter\n ch={ch}\n dirty={settingsDirty}\n saving={settingsSaving}\n showCancel={false}\n onCancel={() => onOpenChange(false)}\n onDiscard={onSettingsDiscard}\n onSave={onSettingsSave}\n />\n ) : undefined\n }\n >\n {open ? (\n <FeishuQrSetupSession\n key=\"active\"\n ch={ch}\n onSetupSuccess={onSetupSuccess}\n onOpenChange={onOpenChange}\n closeOnSetupSuccess={closeOnSetupSuccess}\n moreSettings={moreSettings}\n />\n ) : null}\n </ChannelSettingsShell>\n );\n}\n","import type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nexport function ChannelPairingSetupSteps({\n ch,\n usesPairing,\n tokenReady,\n pairingComplete,\n}: {\n ch: ChannelsSettingsMessages;\n usesPairing: boolean;\n tokenReady: boolean;\n pairingComplete: boolean;\n}) {\n if (!usesPairing) return null;\n\n const step1Done = tokenReady;\n const step2Done = pairingComplete;\n const step1Current = !step1Done;\n const step2Current = step1Done && !step2Done;\n\n return (\n <ol className=\"space-y-2 rounded-xl border border-accent/25 bg-accent-soft/20 px-4 py-3 text-xs\">\n <li className=\"flex items-start gap-2\">\n <StepDot done={step1Done} current={step1Current} index={1} />\n <span className={cn('text-fg', step1Done && 'text-fg-muted')}>{ch.telegramSetupStepToken}</span>\n </li>\n <li className=\"flex items-start gap-2\">\n <StepDot done={step2Done} current={step2Current} index={2} />\n <span className={cn('text-fg', step2Done && 'text-fg-muted')}>{ch.telegramSetupStepPairing}</span>\n </li>\n </ol>\n );\n}\n\nfunction StepDot({ done, current, index }: { done: boolean; current: boolean; index: number }) {\n return (\n <span\n className={cn(\n 'mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border text-[10px] font-semibold',\n done && 'border-success bg-success text-white',\n !done && current && 'border-accent bg-accent text-white',\n !done && !current && 'border-edge text-fg-muted',\n )}\n aria-hidden\n >\n {done ? '✓' : String(index)}\n </span>\n );\n}\n","import type {\n ChannelsSettingsState,\n GroupPolicy,\n ReplyToMode,\n StreamMode,\n} from '@/features/settings/channels-config-api';\nimport { cn } from '@/lib/cn';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { channelsInputClassName, joinAllowFrom, parseIdList } from './utils';\n\nexport function TelegramAdvanced({\n tg,\n updateTelegram,\n ch,\n groupOpts,\n replyOpts,\n streamOpts,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n onTgAccountsBlur,\n}: {\n tg: ChannelsSettingsState['telegram'];\n updateTelegram: (p: Partial<ChannelsSettingsState['telegram']>) => void;\n ch: ChannelsSettingsMessages;\n groupOpts: { value: GroupPolicy; label: string }[];\n replyOpts: { value: ReplyToMode; label: string }[];\n streamOpts: { value: StreamMode; label: string }[];\n tgAccountsDraft: string;\n setTgAccountsDraft: (s: string) => void;\n tgAccountsError: string;\n onTgAccountsBlur: () => void;\n}) {\n const inputClassName = channelsInputClassName;\n return (\n <div className=\"space-y-4 border-t border-edge-subtle pt-4 dark:border-edge\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.apiRoot}</FieldLabel>\n <input\n className={inputClassName()}\n value={tg.apiRoot}\n onChange={(e) => updateTelegram({ apiRoot: e.target.value })}\n placeholder=\"https://api.telegram.org\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.proxy}</FieldLabel>\n <input\n className={inputClassName()}\n value={tg.proxy}\n onChange={(e) => updateTelegram({ proxy: e.target.value })}\n placeholder=\"http://proxy.example.com:8080\"\n />\n </div>\n <SelectField\n label={ch.groupPolicy}\n value={tg.groupPolicy}\n onChange={(v) => updateTelegram({ groupPolicy: v })}\n options={groupOpts}\n />\n <SelectField\n label={ch.replyToMode}\n value={tg.replyToMode}\n onChange={(v) => updateTelegram({ replyToMode: v })}\n options={replyOpts}\n />\n <SelectField\n label={ch.streamMode}\n value={tg.streamMode}\n onChange={(v) => updateTelegram({ streamMode: v })}\n options={streamOpts}\n />\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromGroups}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"-1001234567890\"\n value={joinAllowFrom(tg.groupAllowFrom)}\n onChange={(e) => updateTelegram({ groupAllowFrom: parseIdList(e.target.value) })}\n />\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.historyLimit}</FieldLabel>\n <input\n type=\"number\"\n min={10}\n max={200}\n className={inputClassName()}\n value={tg.historyLimit}\n onChange={(e) => updateTelegram({ historyLimit: parseInt(e.target.value, 10) || 50 })}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.textChunkLimit}</FieldLabel>\n <input\n type=\"number\"\n min={1000}\n max={10000}\n step={100}\n className={inputClassName()}\n value={tg.textChunkLimit}\n onChange={(e) => updateTelegram({ textChunkLimit: parseInt(e.target.value, 10) || 4000 })}\n />\n </div>\n </div>\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={tg.debug}\n onChange={(e) => updateTelegram({ debug: e.target.checked })}\n />\n {ch.telegramDebug}\n </label>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.multiAccountJson}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[140px] resize-y font-mono text-xs')}\n spellCheck={false}\n value={tgAccountsDraft}\n onChange={(e) => setTgAccountsDraft(e.target.value)}\n onBlur={onTgAccountsBlur}\n placeholder='{ \"personal\": { \"accountId\": \"personal\", \"botToken\": \"...\", ... } }'\n />\n {tgAccountsError ? (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{tgAccountsError}</p>\n ) : (\n <FieldHint>{ch.multiAccountJsonDesc}</FieldHint>\n )}\n </div>\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { Check, ChevronDown, Copy, Eye, EyeOff } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { ChatAgentsPayload } from '@/features/chat/agent-selection/chat-agents-api';\nimport { telegramRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport {\n emptyTelegramAccount,\n type ChannelsSettingsState,\n type DmPolicy,\n type GroupPolicy,\n type ReplyToMode,\n type StreamMode,\n} from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\nimport { ChannelAgentRoutingBlock } from './channel-agent-routing-block';\nimport { ChannelPairingSection } from './channel-pairing-section';\nimport { ChannelPairingSetupSteps } from './channel-pairing-setup-steps';\nimport { channelUsesPairingPolicy } from './pairing-policy';\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { TelegramAdvanced } from './telegram-advanced';\nimport { ChannelsSettingsDialogFooter } from './channels-settings-dialog-footer';\nimport { ChannelSettingsShell, type ChannelSettingsPresentation } from './channel-settings-shell';\nimport { scrollToChannelPairingSection } from './pairing-scroll';\nimport { channelsInputClassName, joinAllowFrom, parseIdList, telegramDefaultBotToken } from './utils';\n\nexport function TelegramChannelSettingsDialog({\n open,\n onOpenChange,\n presentation = 'modal',\n ch,\n form,\n baseline,\n tgAdvanced,\n setTgAdvanced,\n showToken,\n setShowToken,\n copied,\n copyToken,\n updateTelegram,\n updateChannelAgentRoute,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n onTgAccountsBlur,\n dmOpts,\n groupOpts,\n replyOpts,\n streamOpts,\n chatAgents,\n saving,\n dirty,\n save,\n discard,\n language,\n scrollToPairingOnOpen = false,\n closeOnSave = true,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n presentation?: ChannelSettingsPresentation;\n ch: ChannelsSettingsMessages;\n form: ChannelsSettingsState;\n baseline: ChannelsSettingsState | null;\n tgAdvanced: boolean;\n setTgAdvanced: (v: boolean | ((b: boolean) => boolean)) => void;\n showToken: boolean;\n setShowToken: (v: boolean | ((b: boolean) => boolean)) => void;\n copied: boolean;\n copyToken: () => Promise<void>;\n updateTelegram: (patch: Partial<ChannelsSettingsState['telegram']>) => void;\n updateChannelAgentRoute: (channel: 'telegram', accountId: string, agentId: string) => void;\n tgAccountsDraft: string;\n setTgAccountsDraft: (s: string) => void;\n tgAccountsError: string;\n onTgAccountsBlur: () => void;\n dmOpts: { value: DmPolicy; label: string }[];\n groupOpts: { value: GroupPolicy; label: string }[];\n replyOpts: { value: ReplyToMode; label: string }[];\n streamOpts: { value: StreamMode; label: string }[];\n chatAgents: ChatAgentsPayload | undefined;\n saving: boolean;\n dirty: boolean;\n save: () => Promise<boolean>;\n discard: () => void;\n language: string;\n scrollToPairingOnOpen?: boolean;\n closeOnSave?: boolean;\n}) {\n const inputClassName = channelsInputClassName;\n const tg = form.telegram;\n const tgBaselineToken = baseline ? telegramDefaultBotToken(baseline.telegram) : '';\n const tgToken = telegramDefaultBotToken(tg);\n const telegramTokenDisplayLocked =\n !showToken && Boolean(String(tgBaselineToken).trim()) && tgToken === tgBaselineToken;\n const [pairedCredentialCount, setPairedCredentialCount] = useState(0);\n const tokenReady = Boolean(tgToken.trim()) && tg.enabled;\n const tgAccountIds = telegramRoutingAccountIds(tg);\n\n useEffect(() => {\n if (!open || !scrollToPairingOnOpen) return;\n const timer = window.setTimeout(() => scrollToChannelPairingSection('telegram'), 80);\n return () => window.clearTimeout(timer);\n }, [open, scrollToPairingOnOpen]);\n\n return (\n <ChannelSettingsShell\n presentation={presentation}\n open={open}\n onOpenChange={onOpenChange}\n title={ch.telegramTitle}\n description={ch.telegramSubtitle}\n srTitle={ch.telegramTitle}\n srDescription={ch.telegramSubtitle}\n closeAriaLabel={ch.modalCancel}\n wide\n headerExtra={\n presentation === 'modal' ? (\n <div className=\"border-b border-edge-subtle px-6 pb-4 pt-6 dark:border-edge-subtle\">\n <h2 className=\"text-lg font-semibold tracking-tight text-fg\">{ch.telegramTitle}</h2>\n <p className=\"mt-1 text-sm text-fg-muted\">{ch.telegramSubtitle}</p>\n </div>\n ) : undefined\n }\n footer={\n <ChannelsSettingsDialogFooter\n ch={ch}\n dirty={dirty}\n saving={saving}\n onCancel={() => onOpenChange(false)}\n onDiscard={discard}\n onSave={async () => {\n const ok = await save();\n if (ok && closeOnSave) onOpenChange(false);\n }}\n />\n }\n >\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={tg.enabled}\n onChange={(e) => updateTelegram({ enabled: e.target.checked })}\n />\n <span>{ch.enableTelegramAria}</span>\n </label>\n\n <div className=\"mt-6 space-y-4\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>\n {ch.telegramToken}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </FieldLabel>\n <div className=\"flex flex-wrap gap-2\">\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={showToken ? 'text' : 'password'}\n autoComplete=\"off\"\n readOnly={telegramTokenDisplayLocked}\n value={\n telegramTokenDisplayLocked\n ? '*'.repeat(Math.max(1, tgBaselineToken.length))\n : tgToken\n }\n onChange={(e) => {\n if (telegramTokenDisplayLocked) return;\n const prev = tg.accounts?.default ?? emptyTelegramAccount('default');\n updateTelegram({\n accounts: {\n ...tg.accounts,\n default: { ...prev, accountId: 'default', botToken: e.target.value },\n },\n });\n }}\n placeholder=\"123456789:ABCdefGHIjklMNOpqrsTUVwxyz\"\n />\n {tgToken ? (\n <Button type=\"button\" variant=\"secondary\" className=\"px-2 py-1 text-xs\" onClick={() => void copyToken()}>\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {copied ? ch.copied : ch.copy}\n </Button>\n ) : null}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => setShowToken((s) => !s)}\n >\n {showToken ? <EyeOff className=\"size-3.5\" /> : <Eye className=\"size-3.5\" />}\n {showToken ? ch.hide : ch.show}\n </Button>\n </div>\n <FieldHint>{ch.telegramTokenDesc}</FieldHint>\n </div>\n\n <ChannelPairingSetupSteps\n ch={ch}\n usesPairing={channelUsesPairingPolicy('telegram', tg)}\n tokenReady={tokenReady}\n pairingComplete={pairedCredentialCount > 0}\n />\n\n <SelectField\n label={ch.dmPolicy}\n value={tg.dmPolicy}\n onChange={(v) => updateTelegram({ dmPolicy: v })}\n options={dmOpts}\n />\n\n <ChannelPairingSection\n channel=\"telegram\"\n accountIds={tgAccountIds}\n channelConfig={tg}\n active={open}\n ch={ch}\n language={language}\n onPairedChange={setPairedCredentialCount}\n />\n\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.allowFromDm}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"123456789, 987654321\"\n value={joinAllowFrom(tg.allowFrom)}\n onChange={(e) => updateTelegram({ allowFrom: parseIdList(e.target.value) })}\n />\n <FieldHint>{ch.allowFromDmDesc}</FieldHint>\n </div>\n\n <ChannelAgentRoutingBlock\n accountIds={telegramRoutingAccountIds(tg)}\n routes={form.channelAgentRoutes.telegram}\n defaultAgentId={form.defaultAgentId}\n agentItems={chatAgents?.items ?? []}\n disabled={saving}\n onChange={(acc, aid) => updateChannelAgentRoute('telegram', acc, aid)}\n ch={ch}\n />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"-ml-2 h-auto justify-start px-2 py-1 text-sm text-fg-muted hover:text-fg\"\n onClick={() => setTgAdvanced((a) => !a)}\n >\n <ChevronDown className={cn('mr-1 size-4 transition-transform', tgAdvanced && 'rotate-180')} />\n {tgAdvanced ? ch.advancedHide : ch.advancedShow}\n </Button>\n\n {tgAdvanced ? (\n <TelegramAdvanced\n tg={tg}\n updateTelegram={updateTelegram}\n ch={ch}\n groupOpts={groupOpts}\n replyOpts={replyOpts}\n streamOpts={streamOpts}\n tgAccountsDraft={tgAccountsDraft}\n setTgAccountsDraft={setTgAccountsDraft}\n tgAccountsError={tgAccountsError}\n onTgAccountsBlur={onTgAccountsBlur}\n />\n ) : null}\n </div>\n </ChannelSettingsShell>\n );\n}\n","import type { ManageableChannelId } from './channels-routes';\n\nexport type BuiltinChannelCatalogEntry = {\n id: ManageableChannelId;\n titleKey: 'telegramTitle' | 'weixinTitle' | 'feishuTitle';\n subtitleKey: 'telegramSubtitle' | 'weixinSubtitle' | 'feishuSubtitle';\n};\n\n/** Static built-in channel metadata (i18n keys). Dynamic catalog merges API `/api/channels/meta`. */\nexport const BUILTIN_CHANNEL_CATALOG: readonly BuiltinChannelCatalogEntry[] = [\n {\n id: 'telegram',\n titleKey: 'telegramTitle',\n subtitleKey: 'telegramSubtitle',\n },\n {\n id: 'weixin',\n titleKey: 'weixinTitle',\n subtitleKey: 'weixinSubtitle',\n },\n {\n id: 'feishu',\n titleKey: 'feishuTitle',\n subtitleKey: 'feishuSubtitle',\n },\n] as const;\n","import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport type ChannelHubMetaRow = {\n id: string;\n label: string;\n description: string;\n manageable: boolean;\n order: number;\n};\n\nexport function channelsMetaSwrKey(): string {\n return apiUrl('/api/channels/meta');\n}\n\nexport async function fetchChannelsMeta(): Promise<ChannelHubMetaRow[]> {\n const data = await fetchJson<{ ok?: boolean; payload?: { channels?: ChannelHubMetaRow[] } }>(\n channelsMetaSwrKey(),\n );\n return data.payload?.channels ?? [];\n}\n","import { useMemo } from 'react';\nimport useSWR from 'swr';\n\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { BUILTIN_CHANNEL_CATALOG, type BuiltinChannelCatalogEntry } from './channel-catalog';\nimport { channelsMetaSwrKey, fetchChannelsMeta, type ChannelHubMetaRow } from './channels-meta-api';\n\nconst BUILTIN_CHANNEL_BY_ID = new Map(\n BUILTIN_CHANNEL_CATALOG.map((entry) => [entry.id, entry] as const),\n);\nconst BUILTIN_CHANNEL_ORDER_BY_ID = new Map(\n BUILTIN_CHANNEL_CATALOG.map((entry, index) => [entry.id, index] as const),\n);\n\nexport type ChannelCatalogEntry = {\n id: string;\n title: string;\n subtitle: string;\n manageable: boolean;\n order: number;\n};\n\nfunction resolveBuiltinCopy(\n entry: BuiltinChannelCatalogEntry,\n ch: ChannelsSettingsMessages,\n): { title: string; subtitle: string } {\n return {\n title: ch[entry.titleKey],\n subtitle: ch[entry.subtitleKey],\n };\n}\n\nfunction mergeChannelCatalog(\n metaRows: ChannelHubMetaRow[] | undefined,\n ch: ChannelsSettingsMessages,\n): ChannelCatalogEntry[] {\n const byId = new Map<string, ChannelCatalogEntry>();\n\n for (const row of metaRows ?? []) {\n const builtin = BUILTIN_CHANNEL_BY_ID.get(row.id as BuiltinChannelCatalogEntry['id']);\n const copy = builtin\n ? resolveBuiltinCopy(builtin, ch)\n : { title: row.label, subtitle: row.description || ch.hubExtensionSubtitle };\n byId.set(row.id, {\n id: row.id,\n title: copy.title,\n subtitle: copy.subtitle,\n manageable: row.manageable,\n order: row.order,\n });\n }\n\n if (byId.size === 0) {\n return BUILTIN_CHANNEL_CATALOG.map((entry, index) => {\n const copy = resolveBuiltinCopy(entry, ch);\n return {\n id: entry.id,\n title: copy.title,\n subtitle: copy.subtitle,\n manageable: true,\n order: index,\n };\n });\n }\n\n for (const entry of BUILTIN_CHANNEL_CATALOG) {\n if (byId.has(entry.id)) continue;\n const copy = resolveBuiltinCopy(entry, ch);\n byId.set(entry.id, {\n id: entry.id,\n title: copy.title,\n subtitle: copy.subtitle,\n manageable: true,\n order: BUILTIN_CHANNEL_ORDER_BY_ID.get(entry.id) ?? 0,\n });\n }\n\n return Array.from(byId.values()).sort((a, b) => {\n if (a.order !== b.order) return a.order - b.order;\n return a.id.localeCompare(b.id);\n });\n}\n\nexport function useChannelCatalog(hasToken: boolean, ch: ChannelsSettingsMessages) {\n const { data, error, isLoading, mutate } = useSWR(\n hasToken ? channelsMetaSwrKey() : null,\n fetchChannelsMeta,\n { revalidateOnFocus: false },\n );\n\n const entries = useMemo(() => mergeChannelCatalog(data, ch), [data, ch]);\n\n return { entries, isLoading, error, mutate };\n}\n","import type { ChannelStatus } from '@/features/cron/cron-api';\nimport {\n feishuRoutingAccountIds,\n telegramRoutingAccountIds,\n weixinRoutingAccountIds,\n} from '@/features/settings/channel-bindings-merge';\nimport type { ChannelPairingSummaryPayload, ChannelsSettingsState } from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { isManageableChannelId, type ManageableChannelId } from './channels-routes';\nimport { channelUsesPairingPolicy, hubPairingPendingCount } from './pairing-policy';\nimport { isFeishuConfigured, isTelegramConfigured, isWeixinConfigured } from './utils';\n\nexport type ChannelHubId = ManageableChannelId;\n\nexport type ChannelHubStatus = 'not_configured' | 'disabled' | 'running' | 'offline';\n\nexport type ChannelHubPrimaryAction = 'setup' | 'manage' | 'fix' | 'pairing';\n\nexport type ChannelHubCardVm = {\n id: string;\n manageable: boolean;\n configured: boolean;\n enabled: boolean;\n connected: boolean;\n status: ChannelHubStatus;\n summaryLines: string[];\n pendingPairing: number;\n primaryAction: ChannelHubPrimaryAction;\n};\n\nexport function resolveChannelConnected(statuses: ChannelStatus[], id: string): boolean {\n return statuses.find((s) => s.name === id)?.connected ?? false;\n}\n\nfunction readChannelEnabled(statuses: ChannelStatus[], id: string): boolean {\n return statuses.find((s) => s.name === id)?.enabled ?? false;\n}\n\nfunction isExtensionChannelConfigured(config: unknown, id: string): boolean {\n const channels =\n config && typeof config === 'object'\n ? (config as { channels?: unknown }).channels\n : undefined;\n const section =\n channels && typeof channels === 'object' && !Array.isArray(channels)\n ? (channels as Record<string, unknown>)[id]\n : undefined;\n if (!section || typeof section !== 'object') return false;\n return Object.keys(section).length > 0;\n}\n\nfunction resolveChannelHubStatus(configured: boolean, enabled: boolean, connected: boolean): ChannelHubStatus {\n if (!configured) return 'not_configured';\n if (!enabled) return 'disabled';\n if (connected) return 'running';\n return 'offline';\n}\n\nfunction resolvePrimaryAction(\n status: ChannelHubStatus,\n pendingPairing: number,\n manageable: boolean,\n): ChannelHubPrimaryAction {\n if (!manageable) return 'manage';\n if (status === 'not_configured') return 'setup';\n if (pendingPairing > 0) return 'pairing';\n if (status === 'offline') return 'fix';\n return 'manage';\n}\n\nfunction dmPolicyLabel(ch: ChannelsSettingsMessages, policy: ChannelsSettingsState['telegram']['dmPolicy']): string {\n return ch.policy.dm[policy];\n}\n\nfunction accountCountLine(ch: ChannelsSettingsMessages, count: number): string {\n return ch.hubSummaryAccountCount.replace('{{count}}', String(count));\n}\n\nfunction buildTelegramSummaryLines(ch: ChannelsSettingsMessages, form: ChannelsSettingsState): string[] {\n const tg = form.telegram;\n const lines = [ch.hubSummaryDm.replace('{{policy}}', dmPolicyLabel(ch, tg.dmPolicy))];\n const count = telegramRoutingAccountIds(tg).length;\n if (count > 0) lines.push(accountCountLine(ch, count));\n return lines;\n}\n\nfunction buildWeixinSummaryLines(ch: ChannelsSettingsMessages, form: ChannelsSettingsState): string[] {\n const wx = form.weixin;\n const lines = [ch.hubSummaryDm.replace('{{policy}}', dmPolicyLabel(ch, wx.dmPolicy))];\n lines.push(ch.hubSummaryStream.replace('{{mode}}', ch.policy.stream[wx.streamMode]));\n const count = weixinRoutingAccountIds(wx).length;\n if (count > 0) lines.push(accountCountLine(ch, count));\n return lines;\n}\n\nfunction buildFeishuSummaryLines(ch: ChannelsSettingsMessages, form: ChannelsSettingsState): string[] {\n const fs = form.feishu;\n const mode = fs.connectionMode === 'webhook' ? ch.hubConnectionWebhook : ch.hubConnectionWebsocket;\n const lines = [ch.hubSummaryConnection.replace('{{mode}}', mode)];\n const count = feishuRoutingAccountIds(fs).length;\n if (count > 0) lines.push(accountCountLine(ch, count));\n return lines;\n}\n\nfunction pairingSlice(\n id: ManageableChannelId,\n summary: ChannelPairingSummaryPayload,\n): ChannelPairingSummaryPayload['telegram'] {\n return summary[id];\n}\n\nexport function buildManageableChannelHubCardVm(params: {\n id: ManageableChannelId;\n form: ChannelsSettingsState;\n connected: boolean;\n pairingSummary: ChannelPairingSummaryPayload;\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm {\n const { id, form, connected, pairingSummary, ch } = params;\n const tg = form.telegram;\n const wx = form.weixin;\n const fs = form.feishu;\n\n const configured =\n id === 'telegram'\n ? isTelegramConfigured(tg)\n : id === 'weixin'\n ? isWeixinConfigured(wx)\n : isFeishuConfigured(fs);\n\n const enabled = id === 'telegram' ? tg.enabled : id === 'weixin' ? wx.enabled : fs.enabled;\n const channelConfig = id === 'telegram' ? tg : id === 'weixin' ? wx : fs;\n const usesPairing = channelUsesPairingPolicy(id, channelConfig);\n const pendingPairing = hubPairingPendingCount({\n configured,\n channelEnabled: enabled,\n usesPairing,\n summaryPending: pairingSlice(id, pairingSummary).pending,\n });\n\n const status = resolveChannelHubStatus(configured, enabled, connected);\n const summaryLines = configured\n ? id === 'telegram'\n ? buildTelegramSummaryLines(ch, form)\n : id === 'weixin'\n ? buildWeixinSummaryLines(ch, form)\n : buildFeishuSummaryLines(ch, form)\n : [];\n\n return {\n id,\n manageable: true,\n configured,\n enabled,\n connected,\n status,\n summaryLines,\n pendingPairing,\n primaryAction: resolvePrimaryAction(status, pendingPairing, true),\n };\n}\n\nexport function buildExtensionChannelHubCardVm(params: {\n id: string;\n config: unknown;\n statuses: ChannelStatus[];\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm {\n const { id, config, statuses, ch } = params;\n const configured = isExtensionChannelConfigured(config, id);\n const enabled = readChannelEnabled(statuses, id);\n const connected = resolveChannelConnected(statuses, id);\n const status = resolveChannelHubStatus(configured, enabled, connected);\n\n return {\n id,\n manageable: false,\n configured,\n enabled,\n connected,\n status,\n summaryLines: configured ? [ch.hubExtensionConfiguredHint] : [],\n pendingPairing: 0,\n primaryAction: 'manage',\n };\n}\n\nfunction buildChannelHubCardForCatalogId(params: {\n id: string;\n form: ChannelsSettingsState;\n config: unknown;\n statuses: ChannelStatus[];\n pairingSummary: ChannelPairingSummaryPayload;\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm {\n if (isManageableChannelId(params.id)) {\n return buildManageableChannelHubCardVm({\n id: params.id,\n form: params.form,\n connected: resolveChannelConnected(params.statuses, params.id),\n pairingSummary: params.pairingSummary,\n ch: params.ch,\n });\n }\n return buildExtensionChannelHubCardVm({\n id: params.id,\n config: params.config,\n statuses: params.statuses,\n ch: params.ch,\n });\n}\n\nexport function buildChannelHubCardsForCatalog(params: {\n catalogIds: string[];\n form: ChannelsSettingsState;\n config: unknown;\n statuses: ChannelStatus[];\n pairingSummary: ChannelPairingSummaryPayload;\n ch: ChannelsSettingsMessages;\n}): ChannelHubCardVm[] {\n return params.catalogIds.map((id) =>\n buildChannelHubCardForCatalogId({\n id,\n form: params.form,\n config: params.config,\n statuses: params.statuses,\n pairingSummary: params.pairingSummary,\n ch: params.ch,\n }),\n );\n}\n","import { useEffect } from 'react';\n\nimport type { ChannelStatus } from '@/features/cron/cron-api';\n\nexport const CHANNEL_STATUS_SSE_EVENT = 'channels-status';\n\nexport type ChannelStatusSsePayload = {\n channels?: ChannelStatus[];\n};\n\nexport function parseChannelStatusSseDetail(detail: unknown): ChannelStatus[] | null {\n if (!detail || typeof detail !== 'object') return null;\n const channels = (detail as ChannelStatusSsePayload).channels;\n if (!Array.isArray(channels)) return null;\n return channels;\n}\n\n/** Subscribe to gateway `channels.status` SSE (dispatched as `channels-status` on window). */\nexport function subscribeChannelStatusSse(onEvent: (detail: unknown) => void): () => void {\n const handler = (e: Event) => onEvent((e as CustomEvent).detail);\n window.addEventListener(CHANNEL_STATUS_SSE_EVENT, handler);\n return () => window.removeEventListener(CHANNEL_STATUS_SSE_EVENT, handler);\n}\n\nexport function useChannelStatusSse(onEvent: (detail: unknown) => void, enabled = true): void {\n useEffect(() => {\n if (!enabled) return;\n return subscribeChannelStatusSse(onEvent);\n }, [enabled, onEvent]);\n}\n","import useSWR from 'swr';\nimport { useCallback } from 'react';\n\nimport {\n fetchChannelPairingSummary,\n type ChannelPairingSummaryPayload,\n} from '@/features/settings/channels-config-api';\n\nimport {\n CHANNEL_PAIRING_SUMMARY_SWR_KEY,\n useChannelPairingSseRefresh,\n} from './use-channel-pairing-sse';\n\nconst EMPTY_SUMMARY: ChannelPairingSummaryPayload = {\n telegram: { pending: 0, stale: 0, atCapacity: false },\n feishu: { pending: 0, stale: 0, atCapacity: false },\n weixin: { pending: 0, stale: 0, atCapacity: false },\n};\n\nexport function useChannelPairingSummary(enabled: boolean) {\n const { data, mutate, isLoading, error } = useSWR(\n enabled ? CHANNEL_PAIRING_SUMMARY_SWR_KEY : null,\n fetchChannelPairingSummary,\n { revalidateOnFocus: true },\n );\n\n const refresh = useCallback(() => {\n void mutate();\n }, [mutate]);\n\n useChannelPairingSseRefresh(refresh, enabled);\n\n return {\n summary: data ?? EMPTY_SUMMARY,\n isLoading,\n error,\n refresh,\n };\n}\n","import useSWR from 'swr';\nimport { useCallback, useMemo } from 'react';\n\nimport type { ChannelsSettingsState } from '@/features/settings/channels-config-api';\nimport { channelsStatusSwrKey, fetchChannelsStatusSwr } from '@/features/settings/channels-status-swr';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport {\n buildChannelHubCardsForCatalog,\n type ChannelHubCardVm,\n} from './channel-hub-view-model';\nimport { parseChannelStatusSseDetail, useChannelStatusSse } from './use-channel-status-sse';\nimport { useChannelPairingSummary } from './use-channel-pairing-summary';\nimport { useChannelCatalog } from './use-channel-catalog';\n\nconst STATUS_POLL_MS = 30_000;\n\nexport function useChannelsHubData(params: {\n hasToken: boolean;\n form: ChannelsSettingsState | null;\n ch: ChannelsSettingsMessages;\n}): {\n cards: ChannelHubCardVm[];\n refreshAll: () => void;\n} {\n const { hasToken, form, ch } = params;\n\n const { data: cfgData, mutate: mutateConfig } = useGatewayConfigSwr(hasToken);\n const { entries: catalogEntries, mutate: mutateCatalog } = useChannelCatalog(hasToken, ch);\n\n const { data: statuses = [], mutate: mutateStatus } = useSWR(\n hasToken ? channelsStatusSwrKey() : null,\n fetchChannelsStatusSwr,\n { revalidateOnFocus: true, refreshInterval: STATUS_POLL_MS },\n );\n\n const applyStatusFromSse = useCallback(\n (detail: unknown) => {\n const next = parseChannelStatusSseDetail(detail);\n if (next) {\n void mutateStatus(next, { revalidate: false });\n return;\n }\n void mutateStatus();\n },\n [mutateStatus],\n );\n\n useChannelStatusSse(applyStatusFromSse, hasToken);\n\n const { summary: pairingSummary, refresh: refreshPairing } = useChannelPairingSummary(hasToken);\n\n const catalogIds = useMemo(() => catalogEntries.map((e) => e.id), [catalogEntries]);\n const configRoot = cfgData?.payload?.config;\n\n const cards = useMemo(() => {\n if (!form || catalogIds.length === 0) return [];\n return buildChannelHubCardsForCatalog({\n catalogIds,\n form,\n config: configRoot,\n statuses,\n pairingSummary,\n ch,\n });\n }, [form, catalogIds, configRoot, statuses, pairingSummary, ch]);\n\n const refreshAll = useCallback(() => {\n void mutateStatus();\n void mutateCatalog();\n void mutateConfig();\n refreshPairing();\n }, [mutateCatalog, mutateConfig, mutateStatus, refreshPairing]);\n\n return { cards, refreshAll };\n}\n","import { useCallback, useMemo, useReducer, useRef, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { fetchChatAgents } from '@/features/chat/agent-selection/chat-agents-api';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport {\n normalizeChannelsFromConfig,\n patchChannelsSettings,\n type ChannelsSettingsState,\n type DmPolicy,\n type GroupPolicy,\n type ReplyToMode,\n type StreamMode,\n} from '@/features/settings/channels-config-api';\nimport { messages } from '@/i18n/messages';\nimport { copyTextToClipboard } from '@/lib/copy-to-clipboard';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nimport { telegramDefaultBotToken } from './utils';\n\ntype ChannelsPanelFormState = {\n form: ChannelsSettingsState | null;\n baseline: ChannelsSettingsState | null;\n tgAccountsDraft: string;\n tgAccountsError: string;\n wxAccountsDraft: string;\n wxAccountsError: string;\n feishuAccountsDraft: string;\n feishuAccountsError: string;\n};\n\nconst emptyPanelFormState: ChannelsPanelFormState = {\n form: null,\n baseline: null,\n tgAccountsDraft: '',\n tgAccountsError: '',\n wxAccountsDraft: '',\n wxAccountsError: '',\n feishuAccountsDraft: '',\n feishuAccountsError: '',\n};\n\nfunction accountsDraftsFrom(state: ChannelsSettingsState): Pick<\n ChannelsPanelFormState,\n | 'tgAccountsDraft'\n | 'tgAccountsError'\n | 'wxAccountsDraft'\n | 'wxAccountsError'\n | 'feishuAccountsDraft'\n | 'feishuAccountsError'\n> {\n return {\n tgAccountsDraft: JSON.stringify(state.telegram.accounts ?? {}, null, 2),\n tgAccountsError: '',\n wxAccountsDraft: JSON.stringify(state.weixin.accounts ?? {}, null, 2),\n wxAccountsError: '',\n feishuAccountsDraft: JSON.stringify(state.feishu?.accounts ?? {}, null, 2),\n feishuAccountsError: '',\n };\n}\n\ntype PanelFormAction =\n | { type: 'reset' }\n | { type: 'load'; payload: ChannelsSettingsState }\n | { type: 'commitSaved'; payload: ChannelsSettingsState }\n | { type: 'discard' }\n | { type: 'updateTelegram'; patch: Partial<ChannelsSettingsState['telegram']> }\n | { type: 'updateWeixin'; patch: Partial<ChannelsSettingsState['weixin']> }\n | { type: 'updateFeishu'; patch: Partial<ChannelsSettingsState['feishu']> }\n | {\n type: 'updateChannelAgentRoute';\n channel: 'telegram' | 'weixin' | 'feishu';\n accountId: string;\n agentId: string;\n }\n | { type: 'setTgAccountsDraft'; value: string }\n | { type: 'setWxAccountsDraft'; value: string }\n | { type: 'setFeishuAccountsDraft'; value: string }\n | { type: 'setTgAccountsError'; value: string }\n | { type: 'setWxAccountsError'; value: string }\n | { type: 'setFeishuAccountsError'; value: string }\n | { type: 'applyTgAccounts'; accounts: ChannelsSettingsState['telegram']['accounts'] }\n | { type: 'applyWxAccounts'; accounts: ChannelsSettingsState['weixin']['accounts'] }\n | { type: 'applyFeishuAccounts'; accounts: ChannelsSettingsState['feishu']['accounts'] }\n | { type: 'restoreForm'; payload: ChannelsSettingsState };\n\nfunction panelFormReducer(\n state: ChannelsPanelFormState,\n action: PanelFormAction,\n): ChannelsPanelFormState {\n switch (action.type) {\n case 'reset':\n return emptyPanelFormState;\n case 'load': {\n const snapshot = structuredClone(action.payload);\n return {\n form: snapshot,\n baseline: structuredClone(snapshot),\n ...accountsDraftsFrom(snapshot),\n };\n }\n case 'commitSaved': {\n const snapshot = structuredClone(action.payload);\n return {\n form: snapshot,\n baseline: structuredClone(snapshot),\n ...accountsDraftsFrom(snapshot),\n };\n }\n case 'discard': {\n if (!state.baseline) return state;\n const restored = structuredClone(state.baseline);\n return {\n form: restored,\n baseline: state.baseline,\n ...accountsDraftsFrom(restored),\n };\n }\n case 'updateTelegram':\n return state.form\n ? {\n ...state,\n form: { ...state.form, telegram: { ...state.form.telegram, ...action.patch } },\n }\n : state;\n case 'updateWeixin':\n return state.form\n ? {\n ...state,\n form: { ...state.form, weixin: { ...state.form.weixin, ...action.patch } },\n }\n : state;\n case 'updateFeishu':\n return state.form\n ? {\n ...state,\n form: { ...state.form, feishu: { ...state.form.feishu, ...action.patch } },\n }\n : state;\n case 'updateChannelAgentRoute': {\n if (!state.form) return state;\n const k =\n action.channel === 'telegram'\n ? 'telegram'\n : action.channel === 'weixin'\n ? 'weixin'\n : 'feishu';\n return {\n ...state,\n form: {\n ...state.form,\n channelAgentRoutes: {\n ...state.form.channelAgentRoutes,\n [k]: {\n ...state.form.channelAgentRoutes[k],\n [action.accountId]: action.agentId.trim().toLowerCase(),\n },\n },\n },\n };\n }\n case 'setTgAccountsDraft':\n return { ...state, tgAccountsDraft: action.value };\n case 'setWxAccountsDraft':\n return { ...state, wxAccountsDraft: action.value };\n case 'setFeishuAccountsDraft':\n return { ...state, feishuAccountsDraft: action.value };\n case 'setTgAccountsError':\n return { ...state, tgAccountsError: action.value };\n case 'setWxAccountsError':\n return { ...state, wxAccountsError: action.value };\n case 'setFeishuAccountsError':\n return { ...state, feishuAccountsError: action.value };\n case 'applyTgAccounts':\n return state.form\n ? {\n ...state,\n form: { ...state.form, telegram: { ...state.form.telegram, accounts: action.accounts } },\n tgAccountsError: '',\n }\n : state;\n case 'applyWxAccounts':\n return state.form\n ? {\n ...state,\n form: { ...state.form, weixin: { ...state.form.weixin, accounts: action.accounts } },\n wxAccountsError: '',\n }\n : state;\n case 'applyFeishuAccounts':\n return state.form\n ? {\n ...state,\n form: { ...state.form, feishu: { ...state.form.feishu, accounts: action.accounts } },\n feishuAccountsError: '',\n }\n : state;\n case 'restoreForm':\n return { ...state, form: structuredClone(action.payload) };\n }\n}\n\nexport function useChannelsSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const ch = m.channelsSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const dirtyRef = useRef(false);\n const [panelForm, dispatchPanelForm] = useReducer(panelFormReducer, emptyPanelFormState);\n const [syncSource, setSyncSource] = useState({\n hasToken,\n parsed: null as ChannelsSettingsState | null,\n });\n\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveOk, setSaveOk] = useState(false);\n\n const [weixinSuccessBanner, setWeixinSuccessBanner] = useState<string | null>(null);\n const [feishuSetupSuccessBanner, setFeishuSetupSuccessBanner] = useState<string | null>(null);\n const [tgAdvanced, setTgAdvanced] = useState(false);\n const [showToken, setShowToken] = useState(false);\n const [showFeishuSecret, setShowFeishuSecret] = useState(false);\n const [showFeishuWebhookSecrets, setShowFeishuWebhookSecrets] = useState(false);\n const [copied, setCopied] = useState(false);\n const [feishuCopied, setFeishuCopied] = useState(false);\n const [feishuWebhookCopied, setFeishuWebhookCopied] = useState(false);\n\n const { data: chatAgents } = useSWR(hasToken ? 'gateway-chat-agents-ch' : null, fetchChatAgents, {\n revalidateOnFocus: false,\n });\n\n const { data: cfgData, error: swrError, isLoading, mutate } = useGatewayConfigSwr(hasToken);\n\n const parsed = useMemo(\n () =>\n cfgData?.payload?.config !== undefined\n ? normalizeChannelsFromConfig(cfgData.payload.config)\n : null,\n [cfgData],\n );\n\n if (hasToken !== syncSource.hasToken || parsed !== syncSource.parsed) {\n setSyncSource({ hasToken, parsed });\n if (!hasToken) {\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'reset' });\n setSaveOk(false);\n } else if (parsed !== null && !dirtyRef.current) {\n dispatchPanelForm({ type: 'load', payload: parsed });\n setSaveOk(false);\n }\n }\n\n const {\n form,\n baseline,\n tgAccountsDraft,\n tgAccountsError,\n wxAccountsDraft,\n wxAccountsError,\n feishuAccountsDraft,\n feishuAccountsError,\n } = panelForm;\n\n const dirty = useMemo(() => {\n if (!form || !baseline) return false;\n return JSON.stringify(form) !== JSON.stringify(baseline);\n }, [form, baseline]);\n\n const loading = Boolean(hasToken && isLoading && cfgData === undefined && !swrError);\n const fetchError =\n swrError instanceof Error ? swrError.message : swrError ? String(swrError) : null;\n\n const updateChannelAgentRoute = useCallback(\n (channel: 'telegram' | 'weixin' | 'feishu', accountId: string, agentId: string) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateChannelAgentRoute', channel, accountId, agentId });\n },\n [],\n );\n\n const updateTelegram = useCallback((patch: Partial<ChannelsSettingsState['telegram']>) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateTelegram', patch });\n }, []);\n\n const updateWeixin = useCallback((patch: Partial<ChannelsSettingsState['weixin']>) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateWeixin', patch });\n }, []);\n\n const updateFeishu = useCallback((patch: Partial<ChannelsSettingsState['feishu']>) => {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'updateFeishu', patch });\n }, []);\n\n const save = useCallback(async (): Promise<boolean> => {\n if (!form || saving) return false;\n setSaving(true);\n setError(null);\n setSaveOk(false);\n try {\n const next = await patchChannelsSettings(form);\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'commitSaved', payload: next });\n setSaveOk(true);\n window.setTimeout(() => setSaveOk(false), 2500);\n return true;\n } catch (e) {\n setError(e instanceof Error ? e.message : ch.saveError);\n return false;\n } finally {\n setSaving(false);\n }\n }, [form, saving, ch.saveError]);\n\n const discard = useCallback(() => {\n if (!baseline) return;\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'discard' });\n setError(null);\n setSaveOk(false);\n }, [baseline]);\n\n const toggleChannelEnabled = useCallback(\n async (which: 'weixin' | 'telegram' | 'feishu', enabled: boolean) => {\n if (!form || saving) return;\n const prev = form;\n const next: ChannelsSettingsState =\n which === 'weixin'\n ? { ...form, weixin: { ...form.weixin, enabled } }\n : which === 'telegram'\n ? { ...form, telegram: { ...form.telegram, enabled } }\n : { ...form, feishu: { ...form.feishu, enabled } };\n dirtyRef.current = true;\n if (which === 'weixin') {\n dispatchPanelForm({ type: 'updateWeixin', patch: { enabled } });\n } else if (which === 'telegram') {\n dispatchPanelForm({ type: 'updateTelegram', patch: { enabled } });\n } else {\n dispatchPanelForm({ type: 'updateFeishu', patch: { enabled } });\n }\n setSaving(true);\n setError(null);\n try {\n const synced = await patchChannelsSettings(next);\n dirtyRef.current = false;\n dispatchPanelForm({ type: 'commitSaved', payload: synced });\n } catch (e) {\n setError(e instanceof Error ? e.message : ch.saveError);\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'restoreForm', payload: prev });\n } finally {\n setSaving(false);\n }\n },\n [form, saving, ch.saveError],\n );\n\n const copyToken = useCallback(async () => {\n const t = form ? telegramDefaultBotToken(form.telegram) : '';\n if (!t) return;\n const ok = await copyTextToClipboard(t);\n if (!ok) return;\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n }, [form]);\n\n const handleFeishuQrSetupSuccess = useCallback(\n (result: { appId: string; domain: string; openId?: string }) => {\n updateFeishu({\n appId: result.appId,\n domain: result.domain,\n enabled: true,\n });\n void mutate();\n setFeishuSetupSuccessBanner(ch.feishuQrSetupSuccess);\n window.setTimeout(() => setFeishuSetupSuccessBanner(null), 4000);\n },\n [updateFeishu, mutate, ch.feishuQrSetupSuccess],\n );\n\n const copyFeishuSecret = useCallback(async () => {\n const t = form?.feishu?.appSecret;\n if (!t) return;\n const ok = await copyTextToClipboard(t);\n if (!ok) return;\n setFeishuCopied(true);\n window.setTimeout(() => setFeishuCopied(false), 2000);\n }, [form]);\n\n const copyFeishuWebhookConfig = useCallback(async () => {\n const fs = form?.feishu;\n if (!fs) return;\n const payload = {\n connectionMode: fs.connectionMode,\n verificationToken: fs.verificationToken || '',\n encryptKey: fs.encryptKey || '',\n webhookHost: fs.webhookHost || '',\n webhookPort: fs.webhookPort || 0,\n webhookPath: fs.webhookPath || '',\n };\n const ok = await copyTextToClipboard(JSON.stringify(payload, null, 2));\n if (!ok) return;\n setFeishuWebhookCopied(true);\n window.setTimeout(() => setFeishuWebhookCopied(false), 2000);\n }, [form]);\n\n const setTgAccountsDraft = useCallback((value: string) => {\n dispatchPanelForm({ type: 'setTgAccountsDraft', value });\n }, []);\n\n const setWxAccountsDraft = useCallback((value: string) => {\n dispatchPanelForm({ type: 'setWxAccountsDraft', value });\n }, []);\n\n const setFeishuAccountsDraft = useCallback((value: string) => {\n dispatchPanelForm({ type: 'setFeishuAccountsDraft', value });\n }, []);\n\n const onTgAccountsBlur = useCallback(() => {\n if (!form) return;\n const raw = tgAccountsDraft.trim();\n if (!raw) {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'applyTgAccounts', accounts: {} });\n return;\n }\n try {\n const parsedJson = JSON.parse(raw) as unknown;\n if (typeof parsedJson !== 'object' || parsedJson === null || Array.isArray(parsedJson)) {\n throw new Error(ch.jsonObjectAccounts);\n }\n dirtyRef.current = true;\n dispatchPanelForm({\n type: 'applyTgAccounts',\n accounts: parsedJson as ChannelsSettingsState['telegram']['accounts'],\n });\n } catch (err) {\n dispatchPanelForm({\n type: 'setTgAccountsError',\n value: err instanceof Error ? err.message : ch.jsonInvalid,\n });\n }\n }, [form, tgAccountsDraft, ch.jsonObjectAccounts, ch.jsonInvalid]);\n\n const onWxAccountsBlur = useCallback(() => {\n if (!form) return;\n const raw = wxAccountsDraft.trim();\n if (!raw) {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'applyWxAccounts', accounts: {} });\n return;\n }\n try {\n const parsedJson = JSON.parse(raw) as unknown;\n if (typeof parsedJson !== 'object' || parsedJson === null || Array.isArray(parsedJson)) {\n throw new Error(ch.jsonObjectAccounts);\n }\n dirtyRef.current = true;\n dispatchPanelForm({\n type: 'applyWxAccounts',\n accounts: parsedJson as ChannelsSettingsState['weixin']['accounts'],\n });\n } catch (err) {\n dispatchPanelForm({\n type: 'setWxAccountsError',\n value: err instanceof Error ? err.message : ch.jsonInvalid,\n });\n }\n }, [form, wxAccountsDraft, ch.jsonObjectAccounts, ch.jsonInvalid]);\n\n const onFeishuAccountsBlur = useCallback(() => {\n if (!form) return;\n const raw = feishuAccountsDraft.trim();\n if (!raw) {\n dirtyRef.current = true;\n dispatchPanelForm({ type: 'applyFeishuAccounts', accounts: {} });\n return;\n }\n try {\n const parsedJson = JSON.parse(raw) as unknown;\n if (typeof parsedJson !== 'object' || parsedJson === null || Array.isArray(parsedJson)) {\n throw new Error(ch.jsonObjectAccounts);\n }\n dirtyRef.current = true;\n dispatchPanelForm({\n type: 'applyFeishuAccounts',\n accounts: parsedJson as ChannelsSettingsState['feishu']['accounts'],\n });\n } catch (err) {\n dispatchPanelForm({\n type: 'setFeishuAccountsError',\n value: err instanceof Error ? err.message : ch.jsonInvalid,\n });\n }\n }, [form, feishuAccountsDraft, ch.jsonObjectAccounts, ch.jsonInvalid]);\n\n const dmOpts = useMemo(\n () =>\n (['pairing', 'allowlist', 'open', 'disabled'] as DmPolicy[]).map((value) => ({\n value,\n label: ch.policy.dm[value],\n })),\n [ch.policy.dm],\n );\n\n const groupOpts = useMemo(\n () =>\n (['open', 'disabled', 'allowlist'] as GroupPolicy[]).map((value) => ({\n value,\n label: ch.policy.group[value],\n })),\n [ch.policy.group],\n );\n\n const replyOpts = useMemo(\n () =>\n (['off', 'first', 'all'] as ReplyToMode[]).map((value) => ({\n value,\n label: ch.policy.reply[value],\n })),\n [ch.policy.reply],\n );\n\n const streamOpts = useMemo(\n () =>\n (['off', 'partial', 'block'] as StreamMode[]).map((value) => ({\n value,\n label: ch.policy.stream[value],\n })),\n [ch.policy.stream],\n );\n\n return {\n language,\n m,\n ch,\n hasToken,\n loading,\n fetchError,\n mutate,\n form,\n baseline,\n dirty,\n saving,\n error,\n saveOk,\n weixinSuccessBanner,\n setWeixinSuccessBanner,\n feishuSetupSuccessBanner,\n tgAdvanced,\n setTgAdvanced,\n showToken,\n setShowToken,\n showFeishuSecret,\n setShowFeishuSecret,\n showFeishuWebhookSecrets,\n setShowFeishuWebhookSecrets,\n copied,\n feishuCopied,\n feishuWebhookCopied,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n feishuAccountsDraft,\n setFeishuAccountsDraft,\n feishuAccountsError,\n chatAgents,\n updateChannelAgentRoute,\n updateTelegram,\n updateWeixin,\n updateFeishu,\n save,\n discard,\n toggleChannelEnabled,\n copyToken,\n handleFeishuQrSetupSuccess,\n copyFeishuSecret,\n copyFeishuWebhookConfig,\n onTgAccountsBlur,\n onWxAccountsBlur,\n onFeishuAccountsBlur,\n dmOpts,\n groupOpts,\n replyOpts,\n streamOpts,\n };\n}\n","import { ExternalLink } from 'lucide-react';\nimport QRCode from 'qrcode';\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport {\n fetchWeixinGatewayQrLoginStart,\n fetchWeixinGatewayQrLoginStatus,\n} from '@/features/settings/channels-config-api';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { useAsyncResource } from '@/lib/use-async-resource';\n\nimport { ChannelsSettingsDialogFooter } from './channels-settings-dialog-footer';\nimport { ChannelSettingsShell, type ChannelSettingsPresentation } from './channel-settings-shell';\n\nconst QR_IMAGE_OPTIONS = {\n width: 208,\n margin: 2,\n errorCorrectionLevel: 'M' as const,\n color: { dark: '#000000ff', light: '#ffffffff' },\n};\n\ntype QrStartData = { sessionKey: string | null; qrcodeUrl: string | null };\n\nconst emptyQrStart: QrStartData = { sessionKey: null, qrcodeUrl: null };\n\nfunction WeixinQrLoginSession({\n ch,\n onLoginSuccess,\n onOpenChange,\n closeOnLoginSuccess,\n moreSettings,\n}: {\n ch: ChannelsSettingsMessages;\n onLoginSuccess: () => void | Promise<void>;\n onOpenChange: (open: boolean) => void;\n closeOnLoginSuccess: boolean;\n moreSettings?: ReactNode;\n}) {\n const [generation, setGeneration] = useState(0);\n const [hint, setHint] = useState<string | null>(null);\n const [pollError, setPollError] = useState<string | null>(null);\n\n const onLoginSuccessRef = useRef(onLoginSuccess);\n const onOpenChangeRef = useRef(onOpenChange);\n onLoginSuccessRef.current = onLoginSuccess;\n onOpenChangeRef.current = onOpenChange;\n\n const start = useAsyncResource(\n () =>\n fetchWeixinGatewayQrLoginStart().then((r) => ({\n sessionKey: r.sessionKey,\n qrcodeUrl: r.qrcodeUrl,\n })),\n [generation],\n { initial: emptyQrStart, errorData: emptyQrStart },\n );\n\n const sessionKey = start.data.sessionKey;\n const qrcodeUrl = start.data.qrcodeUrl;\n const busy = start.loading;\n const startError =\n start.error instanceof Error\n ? start.error.message\n : start.error\n ? String(start.error)\n : null;\n const error = pollError ?? startError;\n\n const restart = useCallback(() => {\n setPollError(null);\n setHint(null);\n setGeneration((g) => g + 1);\n }, []);\n\n useEffect(() => {\n if (!sessionKey) return;\n let cancelled = false;\n let intervalId: number | undefined;\n\n const poll = async () => {\n try {\n const st = await fetchWeixinGatewayQrLoginStatus(sessionKey);\n if (cancelled) return;\n if (st.phase === 'polling') {\n start.setData((prev) => ({ ...prev, qrcodeUrl: st.qrcodeUrl }));\n setHint(st.qrStatus === 'scaned' ? ch.weixinQrLoginScanned : null);\n return;\n }\n if (st.phase === 'done') {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n intervalId = undefined;\n }\n start.setData(emptyQrStart);\n if (st.ok) {\n if (closeOnLoginSuccess) onOpenChangeRef.current(false);\n await onLoginSuccessRef.current();\n } else {\n setPollError(st.message);\n }\n return;\n }\n if (st.phase === 'unknown') {\n setHint(null);\n }\n } catch (e) {\n if (!cancelled) {\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n setPollError(e instanceof Error ? e.message : 'Request failed');\n start.setData(emptyQrStart);\n }\n }\n };\n\n intervalId = window.setInterval(() => void poll(), 2000);\n void poll();\n return () => {\n cancelled = true;\n if (intervalId !== undefined) {\n window.clearInterval(intervalId);\n }\n };\n }, [sessionKey, ch.weixinQrLoginScanned, closeOnLoginSuccess, start.setData]);\n\n const qrImage = useAsyncResource(\n () => QRCode.toDataURL(qrcodeUrl!, QR_IMAGE_OPTIONS),\n [qrcodeUrl],\n { enabled: Boolean(qrcodeUrl), initial: null as string | null, errorData: null },\n );\n\n const qrDataUrl = qrImage.data;\n const qrGenFailed = qrImage.error !== null && !qrImage.loading;\n\n const showQr = Boolean(qrcodeUrl && sessionKey);\n const qrFrameLoading = !error && !showQr;\n\n return (\n <>\n <div className=\"text-center\">\n <p className=\"text-base font-semibold tracking-tight text-fg\">{ch.weixinQrModalTitle}</p>\n <p className=\"mt-1.5 text-sm text-fg-muted\">{ch.weixinQrModalSubtitle}</p>\n </div>\n\n <div className=\"mt-6 flex min-h-[17.5rem] flex-col items-center justify-center gap-3\">\n {error ? <p className=\"text-center text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n\n {!error && (showQr || qrFrameLoading) ? (\n <div className=\"flex w-full flex-col items-center gap-3\">\n <p\n className={cn(\n 'min-h-[1.25rem] text-center text-sm',\n hint && !qrFrameLoading ? 'text-accent' : 'text-fg-muted',\n )}\n >\n {qrFrameLoading ? ch.weixinQrLoginBusy : hint ?? '\\u00a0'}\n </p>\n <div\n className={cn(\n 'relative flex size-52 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-edge-subtle bg-white p-3 dark:border-edge',\n qrFrameLoading && 'bg-surface-muted/40 dark:bg-surface-base',\n )}\n >\n {qrFrameLoading ? (\n <div\n className=\"absolute inset-3 animate-pulse rounded-md bg-surface-muted dark:bg-surface-hover\"\n aria-hidden\n />\n ) : null}\n {showQr && qrcodeUrl && !error && qrDataUrl && !qrGenFailed ? (\n <img src={qrDataUrl} alt=\"\" className=\"relative z-[1] size-full object-contain\" />\n ) : null}\n {showQr && qrcodeUrl && !error && !qrDataUrl && !qrGenFailed && !qrFrameLoading ? (\n <p className=\"relative z-[1] px-2 text-center text-sm text-fg-muted\">{ch.weixinQrEncoding}</p>\n ) : null}\n {showQr && qrcodeUrl && !error && qrGenFailed ? (\n <div className=\"relative z-[1] flex size-full flex-col items-center justify-center gap-2 px-1\">\n <p className=\"text-center text-xs text-fg-muted\">{ch.weixinQrImageError}</p>\n <a\n href={qrcodeUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1 text-xs text-accent underline-offset-2 hover:underline\"\n >\n <ExternalLink className=\"size-3 shrink-0\" />\n {ch.weixinQrOpenLink}\n </a>\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n\n <div className=\"mt-6\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-11 w-full rounded-full border-0 bg-fg text-surface-panel hover:opacity-90 dark:bg-fg dark:text-surface-panel\"\n disabled={busy}\n onClick={restart}\n >\n {busy ? ch.weixinQrLoginBusy : ch.weixinQrRegenerate}\n </Button>\n </div>\n\n {moreSettings ? (\n <div className=\"mt-6 border-t border-edge-subtle pt-4 dark:border-edge-subtle\">{moreSettings}</div>\n ) : null}\n </>\n );\n}\n\nexport function WeixinQrLoginDialog({\n open,\n onOpenChange,\n ch,\n onLoginSuccess,\n moreSettings,\n settingsDirty = false,\n settingsSaving = false,\n onSettingsDiscard,\n onSettingsSave,\n presentation = 'modal',\n closeOnLoginSuccess = true,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n presentation?: ChannelSettingsPresentation;\n closeOnLoginSuccess?: boolean;\n ch: ChannelsSettingsMessages;\n onLoginSuccess: () => void | Promise<void>;\n moreSettings?: ReactNode;\n settingsDirty?: boolean;\n settingsSaving?: boolean;\n onSettingsDiscard?: () => void;\n onSettingsSave?: () => Promise<boolean>;\n}) {\n return (\n <ChannelSettingsShell\n presentation={presentation}\n open={open}\n onOpenChange={onOpenChange}\n title={ch.weixinTitle}\n description={ch.weixinSubtitle}\n srTitle={ch.weixinQrModalTitle}\n srDescription={ch.weixinQrModalSubtitle}\n closeAriaLabel={ch.weixinQrModalCloseAria}\n wide\n footer={\n moreSettings && onSettingsDiscard && onSettingsSave ? (\n <ChannelsSettingsDialogFooter\n ch={ch}\n dirty={settingsDirty}\n saving={settingsSaving}\n showCancel={false}\n onCancel={() => onOpenChange(false)}\n onDiscard={onSettingsDiscard}\n onSave={onSettingsSave}\n />\n ) : undefined\n }\n >\n {open ? (\n <WeixinQrLoginSession\n key=\"active\"\n ch={ch}\n onLoginSuccess={onLoginSuccess}\n onOpenChange={onOpenChange}\n closeOnLoginSuccess={closeOnLoginSuccess}\n moreSettings={moreSettings}\n />\n ) : null}\n </ChannelSettingsShell>\n );\n}\n","import type { ChannelsSettingsState, StreamMode } from '@/features/settings/channels-config-api';\nimport { weixinRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport { cn } from '@/lib/cn';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { ChannelAgentRoutingBlock } from './channel-agent-routing-block';\nimport { FieldHint, FieldLabel, SelectField } from './field-primitives';\nimport { channelsInputClassName } from './utils';\n\nexport function WeixinAdvanced({\n wx,\n updateWeixin,\n ch,\n streamOpts,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n onWxAccountsBlur,\n channelAgentRoutesWx,\n defaultAgentId,\n agentItems,\n onAgentRouteChange,\n routingDisabled,\n}: {\n wx: ChannelsSettingsState['weixin'];\n updateWeixin: (p: Partial<ChannelsSettingsState['weixin']>) => void;\n ch: ChannelsSettingsMessages;\n streamOpts: { value: StreamMode; label: string }[];\n wxAccountsDraft: string;\n setWxAccountsDraft: (s: string) => void;\n wxAccountsError: string;\n onWxAccountsBlur: () => void;\n channelAgentRoutesWx: Record<string, string>;\n defaultAgentId: string;\n agentItems: { id: string; name?: string }[];\n onAgentRouteChange: (accountId: string, agentId: string) => void;\n routingDisabled: boolean;\n}) {\n const inputClassName = channelsInputClassName;\n return (\n <div className=\"space-y-4 border-t border-edge-subtle pt-4 dark:border-edge\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.weixinAllowFrom}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[2.75rem] resize-y font-mono text-xs')}\n rows={2}\n placeholder=\"wxid_..., openid_...\"\n value={wx.allowFrom.join(', ')}\n onChange={(e) =>\n updateWeixin({\n allowFrom: e.target.value.split(/[,\\n]/).flatMap((s) => {\n const v = s.trim();\n return v ? [v] : [];\n }),\n })\n }\n />\n <FieldHint>{ch.weixinAllowFromDesc}</FieldHint>\n </div>\n <SelectField\n label={ch.streamMode}\n value={wx.streamMode}\n onChange={(v) => updateWeixin({ streamMode: v })}\n options={streamOpts}\n />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.historyLimit}</FieldLabel>\n <input\n type=\"number\"\n min={10}\n max={200}\n className={inputClassName()}\n value={wx.historyLimit}\n onChange={(e) => updateWeixin({ historyLimit: parseInt(e.target.value, 10) || 50 })}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.textChunkLimit}</FieldLabel>\n <input\n type=\"number\"\n min={1000}\n max={10000}\n step={100}\n className={inputClassName()}\n value={wx.textChunkLimit}\n onChange={(e) => updateWeixin({ textChunkLimit: parseInt(e.target.value, 10) || 4000 })}\n />\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.weixinRouteTag}</FieldLabel>\n <input\n className={inputClassName()}\n value={wx.routeTag}\n onChange={(e) => updateWeixin({ routeTag: e.target.value })}\n placeholder={ch.routeTagPlaceholder}\n />\n <FieldHint>{ch.weixinRouteTagDesc}</FieldHint>\n </div>\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={wx.debug}\n onChange={(e) => updateWeixin({ debug: e.target.checked })}\n />\n {ch.weixinDebug}\n </label>\n <FieldHint>{ch.weixinDebugDesc}</FieldHint>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{ch.weixinAccountsJson}</FieldLabel>\n <textarea\n className={cn(inputClassName(), 'min-h-[140px] resize-y font-mono text-xs')}\n spellCheck={false}\n value={wxAccountsDraft}\n onChange={(e) => setWxAccountsDraft(e.target.value)}\n onBlur={onWxAccountsBlur}\n placeholder='{ \"personal\": { \"name\": \"...\", \"cdnBaseUrl\": \"...\", \"enabled\": true } }'\n />\n {wxAccountsError ? (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{wxAccountsError}</p>\n ) : (\n <FieldHint>{ch.weixinAccountsJsonDesc}</FieldHint>\n )}\n </div>\n\n <ChannelAgentRoutingBlock\n accountIds={weixinRoutingAccountIds(wx)}\n routes={channelAgentRoutesWx}\n defaultAgentId={defaultAgentId}\n agentItems={agentItems}\n disabled={routingDisabled}\n onChange={onAgentRouteChange}\n ch={ch}\n />\n </div>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\n\nimport type { ChatAgentsPayload } from '@/features/chat/agent-selection/chat-agents-api';\nimport type { ChannelsSettingsState, DmPolicy, StreamMode } from '@/features/settings/channels-config-api';\nimport { weixinRoutingAccountIds } from '@/features/settings/channel-bindings-merge';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\n\nimport { ChannelPairingSection } from './channel-pairing-section';\nimport { SelectField } from './field-primitives';\nimport { scrollToChannelPairingSection } from './pairing-scroll';\nimport { WeixinAdvanced } from './weixin-advanced';\n\nexport function WeixinMoreSettingsSection({\n ch,\n wx,\n updateWeixin,\n dmOpts,\n streamOpts,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n onWxAccountsBlur,\n form,\n chatAgents,\n onAgentRouteChange,\n saving,\n language,\n dialogOpen,\n pairingFocus = false,\n}: {\n ch: ChannelsSettingsMessages;\n wx: ChannelsSettingsState['weixin'];\n updateWeixin: (patch: Partial<ChannelsSettingsState['weixin']>) => void;\n dmOpts: { value: DmPolicy; label: string }[];\n streamOpts: { value: StreamMode; label: string }[];\n wxAccountsDraft: string;\n setWxAccountsDraft: (v: string) => void;\n wxAccountsError: string;\n onWxAccountsBlur: () => void;\n form: ChannelsSettingsState;\n chatAgents: ChatAgentsPayload | undefined;\n onAgentRouteChange: (accountId: string, agentId: string) => void;\n saving: boolean;\n language: string;\n dialogOpen: boolean;\n pairingFocus?: boolean;\n}) {\n const wxAccountIds = weixinRoutingAccountIds(wx);\n const resolvedWxAccounts = wxAccountIds.length > 0 ? wxAccountIds : ['default'];\n const detailsRef = useRef<HTMLDetailsElement>(null);\n\n useEffect(() => {\n if (!pairingFocus) return;\n const details = detailsRef.current;\n if (details) details.open = true;\n const timer = window.setTimeout(() => scrollToChannelPairingSection('weixin'), 80);\n return () => window.clearTimeout(timer);\n }, [pairingFocus]);\n\n return (\n <details\n ref={detailsRef}\n className=\"group rounded-xl border border-edge-subtle bg-surface-base open:pb-3 dark:border-edge\"\n >\n <summary className=\"cursor-pointer list-none rounded-xl px-3 py-2.5 text-sm font-medium text-fg transition-colors hover:bg-surface-hover group-open:rounded-b-none [&::-webkit-details-marker]:hidden\">\n <span className=\"inline-flex items-center gap-2\">\n <ChevronDown className=\"size-4 shrink-0 text-fg-muted transition-transform group-open:rotate-180\" />\n {ch.advancedShow}\n </span>\n </summary>\n <div className=\"space-y-4 border-t border-edge-subtle px-3 pb-3 pt-3 dark:border-edge-subtle\">\n <p className=\"text-xs leading-relaxed text-fg-muted\">{ch.weixinAdvancedHint}</p>\n <label className=\"flex cursor-pointer items-start gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox mt-0.5\"\n checked={wx.enabled}\n onChange={(e) => updateWeixin({ enabled: e.target.checked })}\n />\n <span>{ch.enableWeixinAria}</span>\n </label>\n <SelectField label={ch.dmPolicy} value={wx.dmPolicy} onChange={(v) => updateWeixin({ dmPolicy: v })} options={dmOpts} />\n <ChannelPairingSection\n channel=\"weixin\"\n accountIds={resolvedWxAccounts}\n channelConfig={wx}\n active={dialogOpen}\n ch={ch}\n language={language}\n />\n <div className=\"[&>div]:border-0 [&>div]:pt-0\">\n <WeixinAdvanced\n wx={wx}\n updateWeixin={updateWeixin}\n ch={ch}\n streamOpts={streamOpts}\n wxAccountsDraft={wxAccountsDraft}\n setWxAccountsDraft={setWxAccountsDraft}\n wxAccountsError={wxAccountsError}\n onWxAccountsBlur={onWxAccountsBlur}\n channelAgentRoutesWx={form.channelAgentRoutes.weixin}\n defaultAgentId={form.defaultAgentId}\n agentItems={chatAgents?.items ?? []}\n onAgentRouteChange={onAgentRouteChange}\n routingDisabled={saving}\n />\n </div>\n </div>\n </details>\n );\n}\n","import { ExternalLink } from 'lucide-react';\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';\nimport { useNavigate, useParams, useSearchParams } from 'react-router-dom';\n\nimport { Button } from '@/components/ui/button';\nimport { docsGuidePageUrl } from '@/navigation';\nimport type { ChannelsSettingsMessages } from '@/i18n/messages';\nimport { usePageHeaderStore } from '@/stores/page-header-store';\n\nimport { ChannelsHubGrid, type OpenChannelOptions } from './channels-hub-grid';\nimport { ChannelsHubGridSkeleton } from './channels-hub-card-skeleton';\nimport {\n CHANNELS_HUB_PATH,\n channelDetailPath,\n isManageableChannelId,\n normalizeChannelRouteId,\n} from './channels-routes';\nimport { ExtensionChannelDetailPanel } from './extension-channel-detail-panel';\nimport { ChannelsPageHeaderActions } from './channels-page-header-actions';\nimport { FeishuMoreSettingsSection } from './feishu-more-settings-section';\nimport { FeishuQrSetupDialog } from './feishu-qr-setup-dialog';\nimport { TelegramChannelSettingsDialog } from './telegram-channel-settings-dialog';\nimport { useChannelCatalog } from './use-channel-catalog';\nimport { useChannelsHubData } from './use-channels-hub-data';\nimport { useChannelsSettingsPanel } from './use-channels-settings-panel';\nimport { WeixinQrLoginDialog } from './weixin-qr-login-dialog';\nimport { WeixinMoreSettingsSection } from './weixin-more-settings-section';\n\nexport function ChannelsSettingsPanel() {\n const navigate = useNavigate();\n const { channelId: routeChannelId } = useParams<{ channelId?: string }>();\n const [searchParams] = useSearchParams();\n\n const ctx = useChannelsSettingsPanel();\n const {\n language,\n m,\n ch,\n hasToken,\n loading,\n fetchError,\n mutate,\n form,\n baseline,\n dirty,\n saving,\n error,\n saveOk,\n weixinSuccessBanner,\n setWeixinSuccessBanner,\n feishuSetupSuccessBanner,\n tgAdvanced,\n setTgAdvanced,\n showToken,\n setShowToken,\n showFeishuSecret,\n setShowFeishuSecret,\n showFeishuWebhookSecrets,\n setShowFeishuWebhookSecrets,\n copied,\n feishuCopied,\n feishuWebhookCopied,\n tgAccountsDraft,\n setTgAccountsDraft,\n tgAccountsError,\n wxAccountsDraft,\n setWxAccountsDraft,\n wxAccountsError,\n feishuAccountsDraft,\n setFeishuAccountsDraft,\n feishuAccountsError,\n chatAgents,\n updateChannelAgentRoute,\n updateTelegram,\n updateWeixin,\n updateFeishu,\n save,\n discard,\n toggleChannelEnabled,\n copyToken,\n handleFeishuQrSetupSuccess,\n copyFeishuSecret,\n copyFeishuWebhookConfig,\n onTgAccountsBlur,\n onWxAccountsBlur,\n onFeishuAccountsBlur,\n dmOpts,\n groupOpts,\n replyOpts,\n streamOpts,\n } = ctx;\n\n const [refreshing, setRefreshing] = useState(false);\n\n const { entries: catalogEntries } = useChannelCatalog(hasToken, ch);\n const catalogById = useMemo(() => new Map(catalogEntries.map((e) => [e.id, e])), [catalogEntries]);\n\n const activeChannelId = normalizeChannelRouteId(routeChannelId);\n const scrollToPairing = searchParams.get('pairing') === '1';\n const detailOpen = Boolean(activeChannelId && catalogById.has(activeChannelId));\n\n const { cards, refreshAll } = useChannelsHubData({\n hasToken,\n form,\n ch,\n });\n\n const activeEntry = activeChannelId ? catalogById.get(activeChannelId) : undefined;\n const activeCard = activeChannelId ? cards.find((c) => c.id === activeChannelId) : undefined;\n\n useEffect(() => {\n if (!activeChannelId || catalogEntries.length === 0) return;\n if (!catalogById.has(activeChannelId)) {\n navigate(CHANNELS_HUB_PATH, { replace: true });\n }\n }, [activeChannelId, catalogById, catalogEntries.length, navigate]);\n\n const openChannel = useCallback(\n (id: string, opts?: OpenChannelOptions) => {\n navigate(channelDetailPath(id, { pairing: opts?.scrollToPairing }));\n },\n [navigate],\n );\n\n const closeChannel = useCallback(() => {\n navigate(CHANNELS_HUB_PATH);\n }, [navigate]);\n\n const handleWeixinOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!nextOpen) closeChannel();\n },\n [closeChannel],\n );\n\n const handleWeixinLoginSuccess = useCallback(async () => {\n await mutate();\n setWeixinSuccessBanner(ch.weixinQrLoginSuccess);\n window.setTimeout(() => setWeixinSuccessBanner(null), 4000);\n }, [ch.weixinQrLoginSuccess, mutate, setWeixinSuccessBanner]);\n\n const handleRefresh = useCallback(async () => {\n setRefreshing(true);\n try {\n refreshAll();\n await mutate();\n } finally {\n setRefreshing(false);\n }\n }, [mutate, refreshAll]);\n\n if (!hasToken) {\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{m.settingsSections.channels}</h1>\n <p className=\"text-sm text-fg-muted\">{ch.needToken}</p>\n </div>\n </>\n );\n }\n\n if (loading) {\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <div className=\"space-y-2\">\n <div className=\"h-7 w-40 animate-pulse rounded-md bg-surface-hover motion-reduce:animate-none dark:bg-surface-active/50\" />\n <div className=\"h-4 w-full max-w-md animate-pulse rounded-md bg-surface-hover motion-reduce:animate-none dark:bg-surface-active/50\" />\n </div>\n <ChannelsHubGridSkeleton />\n <p className=\"text-sm text-fg-muted\">{ch.loading}</p>\n </div>\n </>\n );\n }\n\n if (!form) {\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{error ?? fetchError ?? ch.loadError}</p>\n <Button type=\"button\" variant=\"secondary\" onClick={() => void mutate()}>\n {ch.retry}\n </Button>\n </div>\n </>\n );\n }\n\n const wx = form.weixin;\n const pairingFocusWeixin = scrollToPairing && activeChannelId === 'weixin';\n const pairingFocusFeishu = scrollToPairing && activeChannelId === 'feishu';\n\n const weixinMoreSettings = (\n <WeixinMoreSettingsSection\n ch={ch}\n wx={wx}\n updateWeixin={updateWeixin}\n dmOpts={dmOpts}\n streamOpts={streamOpts}\n wxAccountsDraft={wxAccountsDraft}\n setWxAccountsDraft={setWxAccountsDraft}\n wxAccountsError={wxAccountsError}\n onWxAccountsBlur={onWxAccountsBlur}\n form={form}\n chatAgents={chatAgents}\n onAgentRouteChange={(acc, aid) => updateChannelAgentRoute('weixin', acc, aid)}\n saving={saving}\n language={language}\n dialogOpen={detailOpen && activeChannelId === 'weixin'}\n pairingFocus={pairingFocusWeixin}\n />\n );\n\n const feishuMoreSettings = (\n <FeishuMoreSettingsSection\n ch={ch}\n form={form}\n baseline={baseline}\n showFeishuSecret={showFeishuSecret}\n setShowFeishuSecret={setShowFeishuSecret}\n showFeishuWebhookSecrets={showFeishuWebhookSecrets}\n setShowFeishuWebhookSecrets={setShowFeishuWebhookSecrets}\n feishuCopied={feishuCopied}\n feishuWebhookCopied={feishuWebhookCopied}\n copyFeishuSecret={copyFeishuSecret}\n copyFeishuWebhookConfig={copyFeishuWebhookConfig}\n updateFeishu={updateFeishu}\n updateChannelAgentRoute={updateChannelAgentRoute}\n feishuAccountsDraft={feishuAccountsDraft}\n setFeishuAccountsDraft={setFeishuAccountsDraft}\n feishuAccountsError={feishuAccountsError}\n onFeishuAccountsBlur={onFeishuAccountsBlur}\n dmOpts={dmOpts}\n groupOpts={groupOpts}\n chatAgents={chatAgents}\n saving={saving}\n language={language}\n dialogOpen={detailOpen && activeChannelId === 'feishu'}\n pairingFocus={pairingFocusFeishu}\n />\n );\n\n return (\n <>\n <ChannelsPageHeaderRegistration\n hasToken={hasToken}\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={handleRefresh}\n />\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-1\">\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{m.settingsSections.channels}</h1>\n <p className=\"text-sm text-fg-muted\">{ch.subtitle}</p>\n <a\n href={docsGuidePageUrl(language, 'channels')}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n >\n {ch.docsLink}\n <ExternalLink className=\"size-3.5\" />\n </a>\n </header>\n\n {error ? <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n {weixinSuccessBanner ? <p className=\"text-xs text-accent\">{weixinSuccessBanner}</p> : null}\n {feishuSetupSuccessBanner ? (\n <div className=\"rounded-xl border border-success/30 bg-success-soft px-4 py-3 text-sm text-success\">\n {feishuSetupSuccessBanner}\n </div>\n ) : null}\n\n {refreshing ? (\n <ChannelsHubGridSkeleton count={Math.max(catalogEntries.length, 3)} />\n ) : (\n <ChannelsHubGrid\n catalog={catalogEntries}\n cards={cards}\n ch={ch}\n saving={saving}\n onOpenChannel={openChannel}\n onToggleChannel={(id, enabled) => {\n if (isManageableChannelId(id)) void toggleChannelEnabled(id, enabled);\n }}\n />\n )}\n\n {activeChannelId === 'weixin' ? (\n <WeixinQrLoginDialog\n open={detailOpen}\n onOpenChange={handleWeixinOpenChange}\n ch={ch}\n onLoginSuccess={handleWeixinLoginSuccess}\n moreSettings={weixinMoreSettings}\n settingsDirty={dirty}\n settingsSaving={saving}\n onSettingsDiscard={discard}\n onSettingsSave={save}\n />\n ) : null}\n\n {activeChannelId === 'telegram' ? (\n <TelegramChannelSettingsDialog\n open={detailOpen}\n onOpenChange={(open) => {\n if (!open) closeChannel();\n }}\n ch={ch}\n form={form}\n baseline={baseline}\n tgAdvanced={tgAdvanced}\n setTgAdvanced={setTgAdvanced}\n showToken={showToken}\n setShowToken={setShowToken}\n copied={copied}\n copyToken={copyToken}\n updateTelegram={updateTelegram}\n updateChannelAgentRoute={updateChannelAgentRoute}\n tgAccountsDraft={tgAccountsDraft}\n setTgAccountsDraft={setTgAccountsDraft}\n tgAccountsError={tgAccountsError}\n onTgAccountsBlur={onTgAccountsBlur}\n dmOpts={dmOpts}\n groupOpts={groupOpts}\n replyOpts={replyOpts}\n streamOpts={streamOpts}\n chatAgents={chatAgents}\n saving={saving}\n dirty={dirty}\n save={save}\n discard={discard}\n language={language}\n scrollToPairingOnOpen={scrollToPairing}\n closeOnSave={false}\n />\n ) : null}\n\n {activeChannelId === 'feishu' ? (\n <FeishuQrSetupDialog\n open={detailOpen}\n onOpenChange={(open) => {\n if (!open) closeChannel();\n }}\n ch={ch}\n onSetupSuccess={handleFeishuQrSetupSuccess}\n moreSettings={feishuMoreSettings}\n settingsDirty={dirty}\n settingsSaving={saving}\n onSettingsDiscard={discard}\n onSettingsSave={save}\n />\n ) : null}\n\n {activeEntry && activeCard && !activeEntry.manageable ? (\n <ExtensionChannelDetailPanel\n open={detailOpen}\n onOpenChange={(open) => {\n if (!open) closeChannel();\n }}\n entry={activeEntry}\n vm={activeCard}\n ch={ch}\n language={language}\n />\n ) : null}\n </div>\n </>\n );\n}\n\nfunction ChannelsPageHeaderRegistration({\n hasToken,\n ch,\n refreshing,\n saveOk,\n onRefresh,\n}: {\n hasToken: boolean;\n ch: ChannelsSettingsMessages;\n refreshing: boolean;\n saveOk: boolean;\n onRefresh: () => void | Promise<void>;\n}) {\n const setPageHeader = usePageHeaderStore((s) => s.setPageHeader);\n const clearPageHeader = usePageHeaderStore((s) => s.clearPageHeader);\n\n const channelsHeaderEnd = useMemo(\n () => (\n <ChannelsPageHeaderActions\n ch={ch}\n refreshing={refreshing}\n saveOk={saveOk}\n onRefresh={onRefresh}\n />\n ),\n [ch, onRefresh, refreshing, saveOk],\n );\n\n useLayoutEffect(() => {\n if (!hasToken) {\n clearPageHeader();\n return () => clearPageHeader();\n }\n setPageHeader({\n startExtra: null,\n main: null,\n end: channelsHeaderEnd,\n });\n return () => clearPageHeader();\n }, [channelsHeaderEnd, clearPageHeader, hasToken, setPageHeader]);\n\n return null;\n}\n"],"mappings":"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"}