@hualinge/relay-web 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/assets/AgentsPage-2u2kFBCH.js +68 -0
- package/dist/assets/AgentsPage-2u2kFBCH.js.map +1 -0
- package/dist/assets/AgentsPage-BGbbVmeL.css +1 -0
- package/dist/assets/Alert-D88Fk6to.js +2 -0
- package/dist/assets/Alert-D88Fk6to.js.map +1 -0
- package/dist/assets/AppModal-BYZTSuch.js +2 -0
- package/dist/assets/AppModal-BYZTSuch.js.map +1 -0
- package/dist/assets/CenteredLoadingState-DHor-9vF.js +2 -0
- package/dist/assets/CenteredLoadingState-DHor-9vF.js.map +1 -0
- package/dist/assets/ChannelsPage-CbI0kqkd.js +2 -0
- package/dist/assets/ChannelsPage-CbI0kqkd.js.map +1 -0
- package/dist/assets/EmptyDataState-6mNx2Xhl.js +2 -0
- package/dist/assets/EmptyDataState-6mNx2Xhl.js.map +1 -0
- package/dist/assets/HelpPrompt-BPzDcC8F.js +2 -0
- package/dist/assets/HelpPrompt-BPzDcC8F.js.map +1 -0
- package/dist/assets/HomePage-t78sDDUj.js +2 -0
- package/dist/assets/HomePage-t78sDDUj.js.map +1 -0
- package/dist/assets/InspirationPage-BTqLpcHY.js +3 -0
- package/dist/assets/InspirationPage-BTqLpcHY.js.map +1 -0
- package/dist/assets/ModelsPage-YF0gpUxy.js +2 -0
- package/dist/assets/ModelsPage-YF0gpUxy.js.map +1 -0
- package/dist/assets/NameInitialIcon-DP-6_HQY.js +7 -0
- package/dist/assets/NameInitialIcon-DP-6_HQY.js.map +1 -0
- package/dist/assets/NoSearchResultsState-BiiYdZ_Z.js +2 -0
- package/dist/assets/NoSearchResultsState-BiiYdZ_Z.js.map +1 -0
- package/dist/assets/OverflowTooltip-CE5PjAb-.js +2 -0
- package/dist/assets/OverflowTooltip-CE5PjAb-.js.map +1 -0
- package/dist/assets/PasswordField-DmzjtnCg.js +2 -0
- package/dist/assets/PasswordField-DmzjtnCg.js.map +1 -0
- package/dist/assets/RefreshButton-BzYzeo5A.js +2 -0
- package/dist/assets/RefreshButton-BzYzeo5A.js.map +1 -0
- package/dist/assets/RightContentHeader-DoNDQ9Lo.js +3 -0
- package/dist/assets/RightContentHeader-DoNDQ9Lo.js.map +1 -0
- package/dist/assets/SchedulePage-CfW6lZVI.js +2 -0
- package/dist/assets/SchedulePage-CfW6lZVI.js.map +1 -0
- package/dist/assets/SearchInput-tux8xXH1.js +2 -0
- package/dist/assets/SearchInput-tux8xXH1.js.map +1 -0
- package/dist/assets/SkillAvatar-DwGvsY4f.js +2 -0
- package/dist/assets/SkillAvatar-DwGvsY4f.js.map +1 -0
- package/dist/assets/SkillsPage-ppqwKMvj.js +2 -0
- package/dist/assets/SkillsPage-ppqwKMvj.js.map +1 -0
- package/dist/assets/SkillsTab-c_As1DIr.css +1 -0
- package/dist/assets/SkillsTab-kY7MNdxy.js +2 -0
- package/dist/assets/SkillsTab-kY7MNdxy.js.map +1 -0
- package/dist/assets/Tab-FE0F2EQP.js +2 -0
- package/dist/assets/Tab-FE0F2EQP.js.map +1 -0
- package/dist/assets/ThreadPage-B0jElW5R.js +53 -0
- package/dist/assets/ThreadPage-B0jElW5R.js.map +1 -0
- package/dist/assets/UploadSkillModal-DHZL12vm.js +8 -0
- package/dist/assets/UploadSkillModal-DHZL12vm.js.map +1 -0
- package/dist/assets/XlsxDocumentPreview-BY-ht09K.js +5 -0
- package/dist/assets/XlsxDocumentPreview-BY-ht09K.js.map +1 -0
- package/dist/assets/_commonjs-dynamic-modules-TDtrdbi3.js +2 -0
- package/dist/assets/_commonjs-dynamic-modules-TDtrdbi3.js.map +1 -0
- package/dist/assets/chat-input-options-CpkOtPgQ.js +2 -0
- package/dist/assets/chat-input-options-CpkOtPgQ.js.map +1 -0
- package/dist/assets/docx-preview-zfB-orwa.js +28 -0
- package/dist/assets/docx-preview-zfB-orwa.js.map +1 -0
- package/dist/assets/exceljs.min-BY7KKJsM.js +58 -0
- package/dist/assets/exceljs.min-BY7KKJsM.js.map +1 -0
- package/dist/assets/helpers-CCilgpNy.js +2 -0
- package/dist/assets/helpers-CCilgpNy.js.map +1 -0
- package/dist/assets/hub-agent-editor.client-2DmCRGuY.js +2 -0
- package/dist/assets/hub-agent-editor.client-2DmCRGuY.js.map +1 -0
- package/dist/assets/hub-agent-editor.payload-D4sgJRSH.js +4 -0
- package/dist/assets/hub-agent-editor.payload-D4sgJRSH.js.map +1 -0
- package/dist/assets/hub-tag-editor-BBdd-aHK.js +2 -0
- package/dist/assets/hub-tag-editor-BBdd-aHK.js.map +1 -0
- package/dist/assets/index-Bed0I5IL.css +1 -0
- package/dist/assets/index-Bxf2_cvh.js +2 -0
- package/dist/assets/index-Bxf2_cvh.js.map +1 -0
- package/dist/assets/index-Cb4fQgom.js +103 -0
- package/dist/assets/index-Cb4fQgom.js.map +1 -0
- package/dist/assets/index-DQ2vVjmV.js +30 -0
- package/dist/assets/index-DQ2vVjmV.js.map +1 -0
- package/dist/assets/index-UBJEdbMO.js +2 -0
- package/dist/assets/index-UBJEdbMO.js.map +1 -0
- package/dist/assets/jszip.min-DPdj3o0t.js +13 -0
- package/dist/assets/jszip.min-DPdj3o0t.js.map +1 -0
- package/dist/assets/quick-actions-DzZE-zyP.js +2 -0
- package/dist/assets/quick-actions-DzZE-zyP.js.map +1 -0
- package/dist/assets/skill-options-cache-D1BJGTCU.js +2 -0
- package/dist/assets/skill-options-cache-D1BJGTCU.js.map +1 -0
- package/dist/assets/status-helpers-BILdm2MI.js +2 -0
- package/dist/assets/status-helpers-BILdm2MI.js.map +1 -0
- package/dist/assets/thread-title-Cerb2mHa.js +2 -0
- package/dist/assets/thread-title-Cerb2mHa.js.map +1 -0
- package/dist/assets/thread-utils-Ct3yp4R3.js +2 -0
- package/dist/assets/thread-utils-Ct3yp4R3.js.map +1 -0
- package/dist/assets/useAgentData-D-k9cXfg.js +2 -0
- package/dist/assets/useAgentData-D-k9cXfg.js.map +1 -0
- package/dist/assets/useEscapeKey-CEQ6-8GR.js +2 -0
- package/dist/assets/useEscapeKey-CEQ6-8GR.js.map +1 -0
- package/dist/assets/useExpertCatalog-BZdw1CYs.js +2 -0
- package/dist/assets/useExpertCatalog-BZdw1CYs.js.map +1 -0
- package/dist/assets/usePromptBlocks-5sz8Qh51.js +2 -0
- package/dist/assets/usePromptBlocks-5sz8Qh51.js.map +1 -0
- package/dist/assets/useSocket-YigidotN.css +1 -0
- package/dist/assets/useSocket-y3-zWhVL.js +11 -0
- package/dist/assets/useSocket-y3-zWhVL.js.map +1 -0
- package/dist/assets/utils--_pbLpCq.js +2 -0
- package/dist/assets/utils--_pbLpCq.js.map +1 -0
- package/dist/assets/vad-web-C_R267y1.js +2 -0
- package/dist/assets/vad-web-C_R267y1.js.map +1 -0
- package/dist/avatars/agent-avatar-1.png +0 -0
- package/dist/avatars/agent-avatar-2.png +0 -0
- package/dist/avatars/agent-avatar-3.png +0 -0
- package/dist/avatars/agent-avatar-4.png +0 -0
- package/dist/avatars/agent-avatar-5.png +0 -0
- package/dist/avatars/agent-avatar-6.png +0 -0
- package/dist/avatars/agent-avatar-7.png +0 -0
- package/dist/avatars/agent-avatar-8.png +0 -0
- package/dist/avatars/agent-avatar-9.png +0 -0
- package/dist/avatars/agentteams.png +0 -0
- package/dist/avatars/antig-opus.png +0 -0
- package/dist/avatars/antigravity.png +0 -0
- package/dist/avatars/assistant.svg +17 -0
- package/dist/avatars/codex-kawaii.png +0 -0
- package/dist/avatars/codex.png +0 -0
- package/dist/avatars/codex_box.png +0 -0
- package/dist/avatars/codex_iquid.png +0 -0
- package/dist/avatars/dare.png +0 -0
- package/dist/avatars/gemini-kawaii.png +0 -0
- package/dist/avatars/gemini.png +0 -0
- package/dist/avatars/gemini25.png +0 -0
- package/dist/avatars/gpt52.png +0 -0
- package/dist/avatars/jiuwenclaw.png +0 -0
- package/dist/avatars/office.svg +17 -0
- package/dist/avatars/opencode.png +0 -0
- package/dist/avatars/opus-45.png +0 -0
- package/dist/avatars/opus-kawaii.png +0 -0
- package/dist/avatars/opus.png +0 -0
- package/dist/avatars/sonnet.png +0 -0
- package/dist/favicon.ico +0 -0
- package/dist/icons/arrow-left.svg +3 -0
- package/dist/icons/arrow-right.svg +3 -0
- package/dist/icons/attach.svg +9 -0
- package/dist/icons/chart/dislike.svg +3 -0
- package/dist/icons/chart/disliked.svg +3 -0
- package/dist/icons/chart/folder.svg +15 -0
- package/dist/icons/chart/home-loading.webp +0 -0
- package/dist/icons/chart/like.svg +3 -0
- package/dist/icons/chart/liked.svg +5 -0
- package/dist/icons/chart/loading.svg +26 -0
- package/dist/icons/chart/success.svg +7 -0
- package/dist/icons/check-line.svg +3 -0
- package/dist/icons/chevron-left.svg +3 -0
- package/dist/icons/chevron-right.svg +3 -0
- package/dist/icons/collapse.svg +14 -0
- package/dist/icons/common-delete.svg +4 -0
- package/dist/icons/common-folder.svg +4 -0
- package/dist/icons/copy.svg +4 -0
- package/dist/icons/cross-line.svg +4 -0
- package/dist/icons/data-analysis.svg +7 -0
- package/dist/icons/data-visualization.svg +10 -0
- package/dist/icons/deep-research.svg +4 -0
- package/dist/icons/document-processing.svg +5 -0
- package/dist/icons/edit.svg +4 -0
- package/dist/icons/expand.svg +6 -0
- package/dist/icons/expert-debate.svg +4 -0
- package/dist/icons/eye.svg +4 -0
- package/dist/icons/favicon.svg +7 -0
- package/dist/icons/file-docx.svg +60 -0
- package/dist/icons/file-folder.svg +4 -0
- package/dist/icons/file-gitignore.svg +35 -0
- package/dist/icons/file-html.svg +6 -0
- package/dist/icons/file-ini.svg +63 -0
- package/dist/icons/file-json.svg +4 -0
- package/dist/icons/file-md.svg +68 -0
- package/dist/icons/file-py.svg +4 -0
- package/dist/icons/file-sh.svg +7 -0
- package/dist/icons/file-txt.svg +37 -0
- package/dist/icons/file-zip.svg +21 -0
- package/dist/icons/file.svg +4 -0
- package/dist/icons/files-csv.svg +14 -0
- package/dist/icons/files-docx.svg +10 -0
- package/dist/icons/files-pdf.svg +14 -0
- package/dist/icons/files-ppt.svg +14 -0
- package/dist/icons/files-txt.svg +16 -0
- package/dist/icons/files-xlsx.svg +14 -0
- package/dist/icons/financial-services.svg +8 -0
- package/dist/icons/flie-html.svg +60 -0
- package/dist/icons/guided-mode.svg +9 -0
- package/dist/icons/icon-192x192.png +0 -0
- package/dist/icons/icon-512x512.png +0 -0
- package/dist/icons/icon-arrow-down.svg +4 -0
- package/dist/icons/icon-arrow-up.svg +4 -0
- package/dist/icons/icon-clear-all.svg +3 -0
- package/dist/icons/icon-close.svg +4 -0
- package/dist/icons/icon-code.svg +38 -0
- package/dist/icons/icon-drag-file.svg +26 -0
- package/dist/icons/icon-help.svg +4 -0
- package/dist/icons/icon-md.svg +53 -0
- package/dist/icons/icon-refresh.svg +4 -0
- package/dist/icons/icon-toggle.svg +6 -0
- package/dist/icons/icon-top.svg +7 -0
- package/dist/icons/icon-upload.svg +5 -0
- package/dist/icons/information.svg +6 -0
- package/dist/icons/inspiration/icon-excel.svg +14 -0
- package/dist/icons/inspiration/icon-inspiration.svg +5 -0
- package/dist/icons/inspiration/icon-markdown.svg +12 -0
- package/dist/icons/inspiration/icon-word.svg +10 -0
- package/dist/icons/link.svg +6 -0
- package/dist/icons/lock.svg +4 -0
- package/dist/icons/menu/agents.svg +39 -0
- package/dist/icons/menu/channels.svg +4 -0
- package/dist/icons/menu/icon-inspiration.svg +5 -0
- package/dist/icons/menu/models.svg +4 -0
- package/dist/icons/menu/new-chat.svg +59 -0
- package/dist/icons/menu/schedule.svg +4 -0
- package/dist/icons/menu/skills.svg +4 -0
- package/dist/icons/message-error.svg +6 -0
- package/dist/icons/message-prompt.svg +9 -0
- package/dist/icons/message-success.svg +6 -0
- package/dist/icons/message-warn.svg +8 -0
- package/dist/icons/more-trigger.svg +4 -0
- package/dist/icons/nss/1.svg +14 -0
- package/dist/icons/nss/2.svg +14 -0
- package/dist/icons/nss/3.svg +14 -0
- package/dist/icons/outline.svg +6 -0
- package/dist/icons/query_the_optical_power_border.svg +99 -0
- package/dist/icons/schedule.svg +4 -0
- package/dist/icons/settings-feedback/feedback-bug.svg +20 -0
- package/dist/icons/settings-feedback/feedback-file.svg +4 -0
- package/dist/icons/settings-feedback/feedback-idea.svg +14 -0
- package/dist/icons/settings-feedback/settings-gear.svg +4 -0
- package/dist/icons/settings-feedback/settings-link.svg +4 -0
- package/dist/icons/settings-feedback/settings-memory.svg +7 -0
- package/dist/icons/settings-feedback/settings-privacy.svg +37 -0
- package/dist/icons/settings-feedback/settings-search.svg +2 -0
- package/dist/icons/slides.svg +4 -0
- package/dist/icons/status/info-error.svg +9 -0
- package/dist/icons/style-template.svg +11 -0
- package/dist/icons/tool-error.svg +4 -0
- package/dist/icons/userprofile/help.svg +5 -0
- package/dist/icons/userprofile/keep-awake.svg +4 -0
- package/dist/icons/userprofile/question.svg +4 -0
- package/dist/icons/userprofile/security.svg +7 -0
- package/dist/icons/userprofile/style-template.svg +11 -0
- package/dist/icons/userprofile/theme.svg +14 -0
- package/dist/icons/userprofile/usage.svg +4 -0
- package/dist/icons/userprofile/version.svg +85 -0
- package/dist/icons/video-generation.svg +4 -0
- package/dist/images/OfficeClaw.svg +21 -0
- package/dist/images/add.svg +4 -0
- package/dist/images/agent-management-icons/agent-check.svg +23 -0
- package/dist/images/agent-management-icons/agent-close.svg +4 -0
- package/dist/images/agent-management-icons/agent-collab.svg +4 -0
- package/dist/images/agent-management-icons/agent-delete.svg +18 -0
- package/dist/images/agent-management-icons/agent-edit.svg +18 -0
- package/dist/images/agent-management-icons/agent-more.svg +4 -0
- package/dist/images/agent-management-icons/agent-persona.svg +4 -0
- package/dist/images/agent-management-icons/agent-random-avatar.svg +39 -0
- package/dist/images/agent-management-icons/agent-refresh.svg +4 -0
- package/dist/images/agent-management-icons/agent-skills.svg +4 -0
- package/dist/images/agent-management-icons/agent-template.svg +12 -0
- package/dist/images/agent-management-icons/anchor-current.svg +5 -0
- package/dist/images/agent-management-icons/anchor-other.svg +4 -0
- package/dist/images/chat-empty-agent.svg +12 -0
- package/dist/images/chat-empty-im.svg +14 -0
- package/dist/images/connectors/dingtalk.png +0 -0
- package/dist/images/connectors/dingtalk.svg +18 -0
- package/dist/images/connectors/feishu.png +0 -0
- package/dist/images/connectors/feishu.svg +12 -0
- package/dist/images/connectors/imessage.png +0 -0
- package/dist/images/connectors/wecom-agent.png +0 -0
- package/dist/images/connectors/wecom-bot.png +0 -0
- package/dist/images/connectors/weixin.png +0 -0
- package/dist/images/connectors/weixin.svg +19 -0
- package/dist/images/connectors/xiaoyi.png +0 -0
- package/dist/images/connectors/xiaoyi.svg +12 -0
- package/dist/images/create-agent-random-avatar.svg +39 -0
- package/dist/images/deepseek.svg +1 -0
- package/dist/images/default-ppt-template.png +0 -0
- package/dist/images/file-browser-tree/code.svg +60 -0
- package/dist/images/file-browser-tree/gitignore.svg +35 -0
- package/dist/images/file-browser-tree/image.svg +12 -0
- package/dist/images/file-browser-tree/markdown.svg +68 -0
- package/dist/images/file-browser-tree/pdf.svg +4 -0
- package/dist/images/file-browser-tree/ppt.svg +4 -0
- package/dist/images/file-browser-tree/public-file.svg +37 -0
- package/dist/images/file-browser-tree/word.svg +60 -0
- package/dist/images/file-browser-tree/xlsx.svg +4 -0
- package/dist/images/html-preview-toolbar/copy.svg +4 -0
- package/dist/images/html-preview-toolbar/open-external.svg +4 -0
- package/dist/images/html-preview-toolbar/refresh.svg +4 -0
- package/dist/images/information.svg +4 -0
- package/dist/images/inspiration/blue-bg.png +0 -0
- package/dist/images/inspiration/doc-example.png +0 -0
- package/dist/images/inspiration/excel-example.png +0 -0
- package/dist/images/inspiration/green-bg.png +0 -0
- package/dist/images/inspiration/markdown-example.png +0 -0
- package/dist/images/inspiration/orange-bg.png +0 -0
- package/dist/images/inspiration/purple-bg.png +0 -0
- package/dist/images/inspiration/task-bg.png +0 -0
- package/dist/images/inspiration-bg.png +0 -0
- package/dist/images/inspiration-products/default.svg +11 -0
- package/dist/images/invitation-background-4x.png +0 -0
- package/dist/images/kimi.svg +1 -0
- package/dist/images/link-blue.svg +4 -0
- package/dist/images/link.svg +4 -0
- package/dist/images/lobster.svg +118 -0
- package/dist/images/login1.svg +93 -0
- package/dist/images/login2.svg +80 -0
- package/dist/images/login3.svg +44 -0
- package/dist/images/login4.svg +18 -0
- package/dist/images/mode-default-icon.svg +22 -0
- package/dist/images/no-data.svg +26 -0
- package/dist/images/no-search-results.svg +25 -0
- package/dist/images/ppt-preview/placeholder-main.webp +0 -0
- package/dist/images/ppt-preview/placeholder-thumb.webp +0 -0
- package/dist/images/ppt-template/dark-tech.png +0 -0
- package/dist/images/ppt-template/huawei.png +0 -0
- package/dist/images/ppt-template/light-tech.png +0 -0
- package/dist/images/ppt-template/paper-humanities.png +0 -0
- package/dist/images/ppt-template/template-default.png +0 -0
- package/dist/images/ppt-template/template-error.png +0 -0
- package/dist/images/ppt-template/template-generate-bg.svg +9639 -0
- package/dist/images/qwen.svg +1 -0
- package/dist/images/task-list/empty-state.svg +4 -0
- package/dist/images/task-list.svg +1 -0
- package/dist/images/vendor.svg +4 -0
- package/dist/images/version-bg.svg +85 -0
- package/dist/images/version.svg +9 -0
- package/dist/images/zhipu.svg +1 -0
- package/dist/index.html +74 -0
- package/dist/loading-point-style.webp +0 -0
- package/dist/loading-small.webp +0 -0
- package/dist/manifest.json +25 -0
- package/package.json +126 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{j as o,t as cn,c as ee,r as c,a as ln,M as we,I as lt,B as pt,u as mt,b as Ws,d as Vs,s as dn,F as Ks,G as ze,H as Qs}from"./index-Cb4fQgom.js";import{b as Gs,m as Xs,h as Kr,a as Js,e as Zs,u as Ys,i as Qr,g as Da}from"./useAgentData-D-k9cXfg.js";import{b as Ra,a as eo,d as to,c as no,e as ro}from"./chat-input-options-CpkOtPgQ.js";import{a as le,O as de,d as Gr,A as ao}from"./OverflowTooltip-CE5PjAb-.js";import{S as Kn,I as so,M as vr,Q as ye,a as Te,c as Qn,d as Gn,e as oo,f as io,E as co,g as lo,n as an,h as br,A as uo,i as fo,j as ho,U as po,F as mo,k as go,m as xo,l as vo,o as bo,p as yr,r as Pa,b as Xr,q as Ma,s as yo,t as wo,u as Io,T as ko,v as Jr,w as So}from"./helpers-CCilgpNy.js";import{Q as sn}from"./quick-actions-DzZE-zyP.js";import{g as To,f as Eo,s as Co,S as Zr,n as No}from"./skill-options-cache-D1BJGTCU.js";import{f as jo,l as _o,u as La}from"./index-UBJEdbMO.js";import{g as Ao}from"./usePromptBlocks-5sz8Qh51.js";import{T as Do}from"./Tab-FE0F2EQP.js";import{S as Ro}from"./SearchInput-tux8xXH1.js";const Xn="ModelArts.81011",Jn="ModelArts.81101",Yt="APIG.0308",Yr="Input text May contain sensitive information",Po="当前请求较多,模型暂时限流,请稍后重试。",Mo="当前模型额度或账单余额不足,暂时无法处理请求。请检查账户配额/余额后再试。",Lo="这次输入内容超出模型上下文长度限制。请精简内容或新开会话后重试。",$o="模型服务鉴权失败(如 API Key 无效、过期或权限不足)。请检查凭据配置后重试。",Oo="模型服务当前繁忙或暂不可用,请稍后重试。",Fo=`您好,截至目前您今日的免费模型使用额度已用尽。
|
|
2
|
+
如需继续使用服务,可选择[购买](https://console.huaweicloud.com/modelarts/?region=cn-southwest-2#/model-studio/deployment)华为云MaaS模型服务进行接入;或于次日再次访问,系统将为您重置免费额度。`,qo="响应中断了,可能因为电脑休眠或网络不稳定。请稍后重试。",Bo=["openAI API async stream error","[181001]","async stream error"];function Qe(e){return e.replace(/['']/g,"'").replace(/[""]/g,'"')}function ea(e){return/\b429\b/.test(e)||/too many requests/i.test(e)||/rate[\s_-]*limit(ed|ing)?/i.test(e)||/toomanyrequests/i.test(e)||/限流|请求过于频繁|请求较多/.test(e)}function $a(e){var r;if(typeof e=="string"){const a=Qe(e);return a.includes(Xn)&&a.toLowerCase().includes(Yr.toLowerCase())}if(e.errorCode===Xn)return!0;const t=(r=e.error)==null?void 0:r.trim();if(!t)return!1;const n=Qe(t);return n.includes(Xn)&&n.toLowerCase().includes(Yr.toLowerCase())}function Oa(e){var r;if(typeof e=="string"){const a=Qe(e);return on(a)?!1:a.includes(Jn)||ea(a)}if(e.errorCode===Yt)return!1;if(e.errorCode===Jn)return!0;const t=(r=e.error)==null?void 0:r.trim();if(!t)return!1;const n=Qe(t);return on(n)?!1:n.includes(Jn)||ea(n)}function on(e){var r;if(typeof e=="string")return Qe(e).includes(Yt);if(e.errorCode===Yt)return!0;const t=(r=e.error)==null?void 0:r.trim();return t?Qe(t).includes(Yt):!1}function Uo(e){return/响应超时|timed out|timeout/i.test(e)}function zo(e){return/CLI\s*异常退出|abnormal exit|exited unexpectedly|subprocess exited/i.test(e)}function Ho(e){return/connection failed|connection closed unexpectedly|WebSocket connection closed/i.test(e)}function Wo(e){return Bo.some(t=>e.includes(t))}function Vo(e){return/max iterations reached|max_iterations_reached/i.test(e)}function Ko(e){return/insufficient[\s_-]*quota|quota[\s_-]*exceeded|insufficient[\s_-]*credit/i.test(e)||/billing[\s_-]*(hard|soft)?[\s_-]*limit/i.test(e)||/额度不足|配额不足|余额不足|账单额度不足/.test(e)}function Qo(e){return/context length|context window|maximum context length|max(?:imum)? tokens?/i.test(e)||/prompt (is )?too long|too many tokens/i.test(e)||/上下文(长度)?超限|超出.*(上下文|token).*限制/.test(e)}function Go(e){return/\b(401|403)\b/.test(e)||/unauthorized|forbidden|authentication failed|invalid api[\s_-]*key|access denied|permission denied/i.test(e)||/未授权|鉴权失败|权限不足|密钥无效|token无效/.test(e)}function Xo(e){return/\b(503|529)\b/.test(e)||/service unavailable|server overloaded|model overloaded|temporarily unavailable|upstream overload/i.test(e)||/服务繁忙|服务不可用|模型繁忙|系统繁忙|过载/.test(e)}const Fa=[{pattern:/WebSocket URL is not configured/i,message:"当前智能体缺少 WebSocket 地址配置,暂时无法启动。请先配置对应智能体的连接地址后再重试。"},{pattern:/provider profile is not configured|bound provider profile/i,message:"当前智能体未绑定可用的 provider profile,暂时无法处理请求。请先检查并绑定正确的 provider profile。"},{pattern:/requires a default model profile|default model profile|model profile is missing/i,message:"当前智能体缺少默认 model profile 配置,暂时无法处理请求。请先为对应 provider profile 配置默认模型。"},{pattern:/model profile ".+" not found or missing apiKey|missing apiKey|API key/i,message:"当前智能体的模型配置缺少 API Key 或模型档案不存在,暂时无法处理请求。请检查对应 model profile 的 API Key 配置。"}];function Jo(e){return Fa.some(({pattern:t})=>t.test(e))||/not configured|sidecar exited|CLI path/i.test(e)}function Zo(e){const t=Fa.find(({pattern:n})=>n.test(e));return t?t.message:`当前智能体配置存在问题,暂时无法处理这次请求。请检查配置后重试。原始错误:${e}`}function qa(){return Po}function Ba(){return Fo}function Yo(e,t){var s;let n=((s=e.error)==null?void 0:s.trim())||"Unknown error";const r=1e3;n.length>r&&(n=n.slice(0,r)+"... (truncated)");let a;return on(e)?a=Ba():Ko(n)?a=Mo:Oa(e)?a=qa():$a(e)?a="检测到输入内容触发了敏感词校验。请重新打开一个新会话后再试。":Qo(n)?a=Lo:Go(n)?a=$o:Xo(n)?a=Oo:Uo(n)?a="这次响应超时了,我先结束本次尝试。请稍后直接重试。":zo(n)?a="这次响应中断了,我没能稳定完成处理。请重试一次;如果连续出现,请稍后再试。":Jo(n)?a=Zo(n):Ho(n)?a="当前智能体连接不稳定,暂时无法完成这次处理。请稍后重试;如果持续出现,说明后端服务可能需要检查。":Wo(n)?a=qo:Vo(n)?a="已达到本次对话允许的最大思考轮数,任务未在限定的轮数内完成。":a="这次处理没有顺利完成。我先结束本次尝试,请稍后重试。",a}const ta=/\{\{(file):([^:}]+)(?::([^:}]+))?(?::\[([^\]]+)\])?\}\}|\{\{([^:}]+)\}\}/g;let Ua=0;function na(){return`ph_${Ua++}`}function ra(e){var s;Ua=0;const t=[],n=[];let r=0,a;for(ta.lastIndex=0;(a=ta.exec(e))!==null;){const l=a.index;if(l>r&&t.push({type:"fixed",content:e.slice(r,l)}),a[1]==="file"){const[,,h,d,g]=a,f=na();n.push(f);const i=g?g.split(",").map(p=>p.trim()):[];t.push({type:"placeholder",placeholder:{id:f,type:"file",defaultText:h,fileType:d||"document",formats:i}})}else if(a[5]){const h=a[5],d=na();n.push(d),t.push({type:"placeholder",placeholder:{id:d,type:"text",defaultText:h}})}r=l+a[0].length}return r<e.length?t.push({type:"fixed",content:e.slice(r)}):((s=t[t.length-1])==null?void 0:s.type)==="placeholder"&&t.push({type:"fixed",content:""}),{blocks:t,placeholderIds:n}}const ei=[{id:"agents",title:"智能体配置",description:"设置智能体人设,让 OfficeClaw 更了解你。",imageSrc:"/images/chat-empty-agent.svg",imageAlt:"智能体配置"},{id:"channels",title:"一键接入渠道",description:"一键接入飞书、微信、钉钉、小艺渠道,无缝推进办公流程。",imageSrc:"/images/chat-empty-im.svg",imageAlt:"一键接入渠道"}];function bu({onAgentsClick:e,onChannelsClick:t,fillAvailableHeight:n=!1}){const r=n?"chat-layout-rail":"chat-layout-rail min-h-full py-10",a=n?"mx-auto flex w-full items-center justify-center":"mx-auto flex min-h-[calc(100vh-21rem)] w-full items-center justify-center",s=l=>{if(l==="agents"){e==null||e();return}t==null||t()};return o.jsx("section",{className:r,"data-testid":"chat-empty-state",children:o.jsx("div",{className:a,children:o.jsxs("div",{className:"w-full text-center",children:[o.jsxs("div",{className:"mx-auto max-w-2xl",children:[o.jsx("h2",{className:"mx-auto flex w-fit flex-wrap items-center justify-center gap-2 text-[34px] font-semibold leading-tight tracking-[-0.03em] text-[var(--text-primary)] sm:text-[36px]",children:o.jsx("img",{"data-testid":"chat-empty-officeclaw-logo",src:"/images/OfficeClaw.svg",alt:"OfficeClaw",className:"h-[60px] w-auto shrink-0"})}),o.jsx("p",{className:"mx-auto mt-[8px] max-w-xl text-[16px] font-normal leading-[30px] text-[var(--text-secondary)]",children:"AI深度赋能全场景办公,专家团协作决策,安全高效更懂你"})]}),o.jsx("div",{className:"mx-auto mt-10 grid w-full grid-cols-1 gap-6 min-[1280px]:grid-cols-2","data-testid":"chat-empty-card-grid",children:ei.map(l=>o.jsx("button",{type:"button",onClick:()=>s(l.id),className:"rounded-[16px] border border-[var(--card-border)] bg-[var(--card-bg)] px-6 py-6 text-left transition-[transform,border-color,background-color,box-shadow] duration-200 hover:-translate-y-0.5 hover:border-[var(--card-hover-border)] hover:bg-[var(--card-hover-bg)] hover:shadow-[var(--card-hover-shadow)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--text-accent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--surface-panel)]","data-testid":`chat-empty-card-${l.id}`,children:o.jsxs("div",{className:"flex items-start gap-4",children:[o.jsx("div",{className:"flex h-14 w-14 shrink-0 items-center justify-center rounded-2xl bg-[var(--surface-panel)]",children:o.jsx("img",{src:l.imageSrc,alt:l.imageAlt,className:"h-14 w-14 object-contain"})}),o.jsxs("div",{className:"min-w-0",children:[o.jsx("h3",{className:"text-base font-semibold text-[var(--text-primary)]",children:l.title}),o.jsx("p",{className:"mt-2 text-sm leading-6 text-[var(--text-label-secondary)]",children:l.description})]})]})},l.id))})]})})})}const yu=544,ti=/\s/,Zn="[[skill:",Yn="]]",er="[[quick_action:",tr="]]";function Ee(e){return e.replace(/[\s\u200B-\u200D\u2060\uFEFF]/g,"").length===0}function ni(e,t,n){return{type:"skill",text:e,token:t,iconUrl:n}}function ri(e,t,n){return{type:"quick_action",text:e,icon:n,token:t}}function un(e,t,n,r={}){if(!e)return[{type:"text",text:""}];const a=r.allowTerminalMention??!1,s=new Map(t.map(m=>[m.name.trim(),m])),l=new Map(n.map(m=>[m.label,m.icon])),h=Gs(),d=Object.keys(h).sort((m,v)=>v.length-m.length),g=[];let f="",i=0;const p=()=>{f&&(g.push({type:"text",text:f}),f="")};for(;i<e.length;){if(e.startsWith(Zn,i)){const v=e.indexOf(Yn,i+Zn.length);if(v>i){const k=e.slice(i,v+Yn.length),b=e.slice(i+Zn.length,v).trim();if(b){const j=s.get(b);p(),g.push(ni(b,k,j==null?void 0:j.iconUrl)),i=v+Yn.length;continue}}}if(e.startsWith(er,i)){const v=e.indexOf(tr,i+er.length);if(v>i){const k=e.slice(i,v+tr.length),b=e.slice(i+er.length,v);p(),g.push(ri(b,k,l.get(b))),i=v+tr.length;continue}}const m=i>0?e[i-1]:" ";if(e[i]==="@"&&/\s/.test(m)){let v=null;for(const k of d){if(!k)continue;const b=`@${k}`,j=e.slice(i,i+b.length);if(j.toLowerCase()!==b.toLowerCase())continue;const y=e[i+b.length];if(y){if(!ti.test(y))continue}else if(!a)continue;v={text:j,len:b.length};break}if(v){p(),g.push({type:"mention",text:v.text}),i+=v.len;continue}}f+=e[i]??"",i+=1}return p(),g}function ae(e){if(e.nodeType===Node.TEXT_NODE)return(e.textContent??"").replace(/\u00A0/g," ");if(e.nodeType!==Node.ELEMENT_NODE)return"";const t=e;if(t.dataset.tokenType==="skill"||t.dataset.tokenType==="quick-action")return t.dataset.tokenValue??"";let n="";for(const r of Array.from(t.childNodes))n+=ae(r);return n}function fn(e){if(e.nodeType===Node.TEXT_NODE)return`t:${(e.textContent??"").replace(/\u00A0/g," ")}`;if(e.nodeType!==Node.ELEMENT_NODE)return"";const t=e;if(t.dataset.tokenType==="skill")return`s:${t.dataset.tokenValue??""}`;if(t.dataset.tokenType==="quick-action")return`q:${t.dataset.tokenValue??""}`;if(t.dataset.tokenType==="mention")return`m:${t.textContent??""}`;let n="";for(const r of Array.from(t.childNodes))n+=fn(r);return n}function ai(e,t){if(t.type==="text"){e.appendChild(document.createTextNode(t.text));return}if(t.type==="mention"){const s=document.createElement("span");s.setAttribute("data-token-type","mention"),s.className="text-[var(--text-accent)]",s.textContent=t.text,e.appendChild(s);return}if(t.type==="quick_action"){const s=document.createElement("span");if(s.setAttribute("data-token-type","quick-action"),s.setAttribute("data-token-value",t.token),s.setAttribute("contenteditable","false"),s.className="group/quick-action inline-flex max-w-full cursor-pointer items-center gap-1 rounded-full border text-[14px] font-normal leading-[22px] text-[var(--text-primary)] align-middle",s.style.padding="2px 8px",s.style.marginBottom="2px",s.style.borderColor="var(--border-accent)",s.style.backgroundColor="var(--accent-soft)",s.style.cursor="pointer",t.icon){const d=si(t.icon,"h-4 w-4 text-[var(--mask-icon)] group-hover/quick-action:hidden");s.appendChild(d)}else{const d=document.createElement("span");d.setAttribute("aria-hidden","true"),d.className="h-2 w-2 rounded-full bg-[var(--text-accent)] group-hover/quick-action:hidden",s.appendChild(d)}const l=document.createElement("span");l.setAttribute("data-remove-quick-action","1"),l.setAttribute("aria-hidden","true"),l.className="hidden h-4 w-4 shrink-0 cursor-pointer items-center justify-center rounded-full text-[var(--text-muted)] group-hover/quick-action:inline-flex hover:text-[var(--text-accent)]",l.style.fontSize="18px",l.style.lineHeight="18px",l.style.marginBottom="2px",l.textContent="×",s.appendChild(l);const h=document.createElement("span");h.textContent=t.text,s.appendChild(h),e.appendChild(s);return}const n=document.createElement("span");n.setAttribute("data-token-type","skill"),n.setAttribute("data-token-value",t.token),n.setAttribute("contenteditable","false"),n.className="inline-flex max-w-full translate-y-[-1px] items-center gap-1 text-[var(--text-accent)] text-[16px] leading-5 align-middle";const r=document.createElement("span");r.setAttribute("aria-hidden","true"),r.className="inline-block h-4 w-4 shrink-0",r.style.backgroundColor="currentColor",r.style.maskImage="url('/icons/menu/skills.svg')",r.style.maskRepeat="no-repeat",r.style.maskPosition="center",r.style.maskSize="contain",r.style.webkitMaskImage="url('/icons/menu/skills.svg')",r.style.webkitMaskRepeat="no-repeat",r.style.webkitMaskPosition="center",r.style.webkitMaskSize="contain",n.appendChild(r);const a=document.createElement("span");a.className="truncate",a.textContent=t.text,n.appendChild(a),e.appendChild(n)}function si(e,t){const n=document.createElement("span");return n.setAttribute("aria-hidden","true"),n.className=["shrink-0 bg-current",t].filter(Boolean).join(" "),n.style.setProperty("-webkit-mask",`url("${e}") center / contain no-repeat`),n.style.setProperty("mask",`url("${e}") center / contain no-repeat`),n}function hn(e,t){const n=document.createDocumentFragment();for(const r of t)ai(n,r);e.replaceChildren(n)}const oe=cn((e,t)=>({textValues:{},fileValues:{},workspacePath:null,setTextValue:(n,r)=>{e(a=>({textValues:{...a.textValues,[n]:r}}))},getTextValue:n=>t().textValues[n]??"",setFileValue:(n,r)=>{e(a=>({fileValues:{...a.fileValues,[n]:r}}))},getFileValue:n=>t().fileValues[n]??null,setWorkspacePath:n=>{const r=(n==null?void 0:n.trim())||null;e(a=>{const s=Object.entries(a.fileValues);if(s.length===0)return{workspacePath:r};const l=Object.fromEntries(s.map(([h,d])=>[h,{...d,path:Ra(r??"",d.name)}]));return{workspacePath:r,fileValues:l}})},removeFileValue:n=>{e(r=>{const a={...r.fileValues};return delete a[n],{fileValues:a}})},clearPlaceholder:n=>{e(r=>{const a={...r.textValues},s={...r.fileValues};return delete a[n],delete s[n],{textValues:a,fileValues:s}})},clearAll:()=>{e({textValues:{},fileValues:{},workspacePath:null})}}));function oi(e,t){const n=e&&!e.endsWith(`
|
|
3
|
+
`)?`
|
|
4
|
+
`:"";return`${e}${n}${t}`}function ii(e){return Ee(e)?"":e}function ci(e){const t=oe.getState().fileValues;let n="";const r=[];for(const a of Array.from(e.childNodes)){if(a instanceof Text){n+=ae(a);continue}if(a instanceof HTMLElement&&a.dataset.placeholderControl==="true"&&a.dataset.placeholderType==="file"){const s=a.dataset.placeholderId??"",l=t[s];n+=(l==null?void 0:l.path)??a.getAttribute("data-placeholder")??a.textContent??"",l!=null&&l.file&&r.push(l.file);continue}if(a instanceof HTMLElement&&a.dataset.placeholderControl==="true"&&a.dataset.placeholderType==="text"){const s=a.dataset.placeholderId??"",l=oe.getState().textValues[s];n+=l&&l.length>0?l:a.getAttribute("data-placeholder")??"";continue}n+=ae(a)}return{text:n,files:r}}function nr(e){const t=oe.getState().textValues,n=oe.getState().fileValues;let r="";for(const a of e.blocks)if(a.type==="fixed")r+=a.content;else if(a.type==="placeholder"){const s=a.placeholder;if(s.type==="text"){const l=t[s.id];r+=l??s.defaultText}else if(s.type==="file"){const l=n[s.id];r+=(l==null?void 0:l.name)??s.defaultText}}return r}function li(e,t){return t?{placeholderIds:e.placeholderIds,blocks:e.blocks.map((n,r)=>{if(n.type!=="fixed")return n;const a=t.querySelector(`[data-block-index="${r}"]`);return a?{...n,content:ae(a)}:n})}:e}function di({input:e,setInput:t,textareaRef:n}){var L;const r=ee(x=>x.pendingChatInsert),a=ee(x=>x.setPendingChatInsert),[s,l]=c.useState(null),[,h]=c.useState(0),d=c.useRef(!1),g=c.useRef(r),f=c.useRef(null),i=c.useCallback(x=>{f.current=x,l($=>$??x.placeholderIds[0]??null),h($=>$+1)},[]);c.useEffect(()=>{g.current=r},[r]);const p=((L=r==null?void 0:r.inspirationData)==null?void 0:L.prompt)??(r==null?void 0:r.text),m=(r==null?void 0:r.text)??p,v=!!(e!=null&&e.includes("{{")),k=!!(p!=null&&p.includes("{{"))||v;c.useEffect(()=>{if(f.current||!v)return;const x=ra(e);x.placeholderIds.length!==0&&i(x)},[i,e,v]),c.useEffect(()=>{if(p&&k&&!d.current){const x=v||!m?e:oi(e,m),$=ra(x);i($),d.current=!0,a(null)}},[i,e,v,m,p,k,a]),c.useEffect(()=>{const x=f.current;x&&x.placeholderIds.length>0&&l(x.placeholderIds[0])},[]);const b=!!f.current;c.useEffect(()=>{var A;if(!f.current||!Ee(e))return;const x=(A=n.current)==null?void 0:A.getElement();if(x!=null&&x.querySelector('[data-placeholder-control="true"]'))return;const $=x?Array.from(x.childNodes).map(F=>ae(F)).join(""):e;Ee($)&&(f.current=null,d.current=!1,l(null),oe.getState().clearAll(),t(""),h(F=>F+1))},[e,t,n]);const j=c.useCallback(x=>{l(x)},[]),y=c.useCallback(x=>{l(x)},[]),C=c.useCallback(()=>{},[]),D=c.useCallback(x=>{const $=f.current;if(!$)return;const A=$.placeholderIds.indexOf(x);A<$.placeholderIds.length-1&&l($.placeholderIds[A+1])},[]),E=c.useCallback(()=>{const x=f.current;x&&t(nr(x))},[t]),S=c.useCallback(()=>{f.current=null,d.current=!1,l(null),h(x=>x+1)},[]),N=c.useCallback(x=>{var B;s===x&&l(null);const $=f.current;if(!$)return;const A=li($,((B=n.current)==null?void 0:B.getElement())??null),F=A.blocks.findIndex(q=>q.type==="placeholder"&&q.placeholder.id===x);if(F<0)return;const w=A.blocks.filter((q,M)=>M!==F),R=A.placeholderIds.filter(q=>q!==x),O={blocks:w,placeholderIds:R};if(oe.getState().clearPlaceholder(x),R.length===0){const q=ii(nr(O));f.current=null,d.current=!1,l(null),oe.getState().clearAll(),t(q);return}f.current=O,t(nr(O))},[s,t,n]),P=c.useCallback(()=>{var A;const x=f.current,$=(A=n.current)==null?void 0:A.getElement();return!x||!$?{text:e,files:[]}:ci($)},[e,n]);return{isTemplate:b,parsed:f.current,activePlaceholderId:s,setActivePlaceholder:j,handlePlaceholderFocus:y,handlePlaceholderBlur:C,handlePlaceholderDelete:N,handlePlaceholderTabNext:D,buildSendContent:P,syncInputFromTemplate:E,resetTemplate:S}}const rr=/(?:^|\s)([.~/][\w/._-]*|packages\/[\w/._-]*)$/,ui=200;function fi(e){const[t,n]=c.useState([]),[r,a]=c.useState(!1),[s,l]=c.useState(0),h=c.useRef(null),d=c.useRef(null),g=c.useRef(""),f=ee(k=>k.currentProjectPath),i=c.useCallback(k=>{const b=k.match(rr);return b?b[1]:null},[]),p=c.useRef(!1),m=c.useCallback(()=>{a(!1),p.current=!1,n([]),l(0)},[]),v=c.useCallback(k=>{const b=e.match(rr);if(!b)return e;const j=e.slice(0,b.index+(b[0].startsWith(" ")?1:0)),y=(k.isDirectory,k.name),C=b[1],D=C.lastIndexOf("/"),E=D>=0?C.slice(0,D+1):"",S=j+E+y,N=S.match(rr);return N&&(g.current=N[1]),m(),S},[e,m]);return c.useEffect(()=>{var b,j;const k=i(e);if(!k){(b=d.current)==null||b.abort(),h.current&&(clearTimeout(h.current),h.current=null),p.current&&m();return}if(k!==g.current)return g.current=k,h.current&&clearTimeout(h.current),(j=d.current)==null||j.abort(),h.current=setTimeout(async()=>{const y=new AbortController;d.current=y;try{const C=f&&f!=="default"?`&cwd=${encodeURIComponent(f)}`:"",D=await le(`/api/projects/complete?prefix=${encodeURIComponent(k)}&limit=10${C}`);if(y.signal.aborted)return;if(!D.ok){m();return}const E=await D.json();if(y.signal.aborted)return;const S=E.entries??[];n(S),a(S.length>0),p.current=S.length>0,l(0)}catch{y.signal.aborted||m()}},ui),()=>{h.current&&clearTimeout(h.current)}},[e,f,i,m]),c.useEffect(()=>()=>{var k;(k=d.current)==null||k.abort(),h.current&&clearTimeout(h.current)},[]),{entries:t,isOpen:r,selectedIdx:s,setSelectedIdx:l,selectEntry:v,close:m,detectPath:i}}const ft="office-claw-input-history",ht="cat-cafe-input-history",hi=500;function aa(){if(typeof window>"u")return[];try{let e=localStorage.getItem(ft);if(e||(e=localStorage.getItem(ht)),!e)return[];const t=JSON.parse(e);if(!Array.isArray(t))return[];const n=t.filter(r=>typeof r=="string");if(localStorage.getItem(ft)===null&&localStorage.getItem(ht)!==null&&n.length)try{localStorage.setItem(ft,JSON.stringify(n)),localStorage.removeItem(ht)}catch{}return n}catch{return[]}}function pi(e){if(!(typeof window>"u"))try{localStorage.setItem(ft,JSON.stringify(e));try{localStorage.removeItem(ht)}catch{}}catch{}}const gt=cn((e,t)=>({entries:aa(),addEntry:n=>{const r=n.trim();r&&e(a=>{const s=a.entries.filter(h=>h!==r),l=[r,...s].slice(0,hi);return pi(l),{entries:l}})},findMatch:n=>{if(!n)return null;const r=n.toLowerCase(),{entries:a}=t();for(const s of a)if(s.toLowerCase().startsWith(r)&&s.toLowerCase()!==r)return s;return null},search:n=>{if(!n)return[];const r=n.toLowerCase();return t().entries.filter(a=>a.toLowerCase().includes(r))},loadFromStorage:()=>{e({entries:aa()})},clearHistory:()=>{if(typeof window<"u")try{localStorage.removeItem(ft),localStorage.removeItem(ht)}catch{}e({entries:[]})}}));function mi(e){const{threadId:t}=e,[n,r]=c.useState([]),[a,s]=c.useState(!1);return c.useEffect(()=>{if(!t){r([]);return}let l=!1;s(!0);async function h(){try{const d=await le(`/api/threads/${t}/experts`);if(!d.ok)throw new Error("Failed to fetch invited experts");const g=await d.json();l||r(g.invitedExperts??[])}catch(d){console.error("Failed to fetch invited experts:",d),l||r([])}finally{l||s(!1)}}return h(),()=>{l=!0}},[t]),{invitedExperts:n,isLoading:a}}function gi({isVisible:e,host:t}){return!e||!t?null:ln.createPortal(o.jsx("div",{className:"pointer-events-none absolute inset-0 z-[2147483648]",style:{background:"var(--chat-drag-upload-bg, rgba(255, 255, 255, 0.8))",backdropFilter:"blur(15px)",WebkitBackdropFilter:"blur(15px)"},children:o.jsx("div",{className:"absolute inset-[48px] flex items-center justify-center rounded-[40px] border border-dashed",style:{borderColor:"var(--chat-drag-upload-border, rgba(128, 128, 128, 1))"},children:o.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 px-6 text-center text-[var(--text-primary)]",children:[o.jsx("img",{src:"/icons/icon-drag-file.svg",alt:"","aria-hidden":"true",className:"h-20 w-20 select-none",draggable:!1}),o.jsx("p",{className:"text-[16px] font-bold leading-[19px]",children:"将附件拖放到此处完成上传"}),o.jsx("p",{className:"text-[14px] font-normal leading-[20px] text-[var(--text-secondary)]",children:"总计最多上传5个附件(每个100MB以内)"}),o.jsx("p",{className:"text-[14px] font-normal leading-[20px] text-[var(--text-secondary)]",children:"支持格式:doc、docx、pdf、txt、xls、xlsx、csv、ppt、pptx"})]})})}),t)}function xi({input:e,textareaRef:t,skillInsertAnchorRef:n,closeMenus:r,routerPush:a}){const s=c.useCallback(h=>{h.preventDefault();const d=t.current,g=(d==null?void 0:d.getSelectionStart())??e.length,f=(d==null?void 0:d.getSelectionEnd())??e.length;n.current={start:g,end:f}},[e,t,n]),l=c.useCallback(()=>{r(),a("/skills")},[r,a]);return{onSkillMouseDown:s,onOpenSkillManager:l}}function vi({filteredSkillOptions:e,selectedIdx:t,setSelectedIdx:n,onInsertSkill:r,onClose:a,onSkillFilterChange:s}){const l=c.useCallback(d=>{s(d),n(0)},[s,n]),h=c.useCallback(d=>{if(e.length===0){d.key==="Escape"&&(d.preventDefault(),a());return}if(d.key==="ArrowDown"){d.preventDefault(),n(g=>(g+1)%e.length);return}if(d.key==="ArrowUp"){d.preventDefault(),n(g=>(g-1+e.length)%e.length);return}if(d.key==="Enter"){d.preventDefault();const g=e[t];g&&r(g.name);return}d.key==="Escape"&&(d.preventDefault(),a())},[e,a,r,t,n]);return{handleSkillFilterChange:l,handleSkillFilterKeyDown:h}}const bi="ui-overlay-card absolute bottom-full left-0 mb-2 z-[200] flex w-[240px] flex-col overflow-visible rounded-xl p-2 shadow-[var(--overlay-shadow)]",yi="relative flex h-[32px] w-full items-center gap-2 rounded-[6px] px-2 py-[7px] text-left text-[12px] font-normal text-[var(--overlay-text)] transition-colors";function wi(e){const t=e.trim();if(!t)return"?";const[n]=Array.from(t);return/[a-z]/i.test(n)?n.toUpperCase():n}function sa({name:e,iconUrl:t}){return t?o.jsx("img",{src:t,alt:"","aria-hidden":"true",className:"h-4 w-4 shrink-0 rounded-sm object-cover"}):o.jsx("span",{className:"inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-sm bg-[var(--surface-card-muted)] text-[10px] font-semibold text-[var(--text-label-secondary)]",children:wi(e)})}function Ii({menuRef:e,skillFilter:t,onSkillFilterChange:n,filteredSkillOptions:r,skillOptionsLoading:a,selectedIdx:s,setSelectedIdx:l,skillOptionRefs:h,onInsertSkill:d,onClose:g,onOpenSkillManager:f}){const{handleSkillFilterChange:i,handleSkillFilterKeyDown:p}=vi({filteredSkillOptions:r,selectedIdx:s,setSelectedIdx:l,onInsertSkill:d,onClose:g,onSkillFilterChange:n});return o.jsxs("div",{ref:e,className:bi,children:[o.jsx("div",{className:"px-1 pt-0 pb-2",children:o.jsxs("div",{className:"relative",children:[o.jsxs("svg",{className:"pointer-events-none absolute left-0 top-1/2 h-5 w-5 -translate-y-1/2 text-[var(--text-label-secondary)]",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[o.jsx("circle",{cx:"11",cy:"11",r:"7"}),o.jsx("path",{d:"M20 20l-3.5-3.5"})]}),o.jsx("input",{value:t,onChange:m=>i(m.target.value),onKeyDown:p,placeholder:"请输入关键字搜索",className:"ui-input ui-input-underline w-full py-1 pl-6 pr-0 text-sm"})]})}),o.jsxs("div",{className:"-mr-1 max-h-[260px] overflow-x-visible overflow-y-auto pr-1 [scrollbar-gutter:auto]",children:[a&&Array.from({length:5}).map((m,v)=>o.jsxs("div",{className:"flex h-[24px] w-full items-center gap-2 rounded-[6px] p-2",style:{animationDelay:`${v*70}ms`},children:[o.jsx("div",{className:"h-4 w-4 shrink-0 rounded-sm bg-[var(--surface-card-muted)] animate-pulse"}),o.jsx("div",{className:"h-3 w-[120px] rounded bg-[var(--surface-card-muted)] animate-pulse"})]},`skill-loading-${v}`)),!a&&r.map((m,v)=>{var k;return o.jsx("button",{type:"button",ref:b=>{h.current[v]=b},className:`${yi} ${v===s?"bg-[var(--overlay-item-hover-bg)]":"hover:bg-[var(--overlay-item-hover-bg)]"}`,onMouseDown:b=>{b.preventDefault(),d(m.name)},onMouseEnter:()=>{l(v)},children:(k=m.description)!=null&&k.trim()?o.jsx(de,{content:m.description.trim(),forceShow:!0,placement:"right",className:"flex min-w-0 w-full items-center gap-2",gap:8,children:o.jsxs("span",{className:"flex min-w-0 w-full items-center gap-2",children:[o.jsx(sa,{name:m.name,iconUrl:m.iconUrl}),o.jsx("span",{className:"truncate",children:m.name})]})}):o.jsxs("span",{className:"flex min-w-0 w-full items-center gap-2",children:[o.jsx(sa,{name:m.name,iconUrl:m.iconUrl}),o.jsx("span",{className:"truncate",children:m.name})]})},m.name)}),!a&&r.length===0&&o.jsx("div",{className:"px-2 py-2 text-xs text-[var(--text-label-secondary)]",children:"无匹配技能"})]}),o.jsx("div",{className:"p-2",children:o.jsx("div",{className:"h-px w-full bg-[var(--panel-divider)]"})}),o.jsx("button",{type:"button",className:"ui-button-default mx-2 inline-flex h-[24px] min-w-0 items-center justify-center px-3 text-[12px]",onMouseDown:m=>{m.preventDefault(),f()},children:"管理技能"})]})}function ki({className:e}){return o.jsxs("svg",{className:e,viewBox:"0 0 16 16","aria-hidden":"true",fill:"none",children:[o.jsx("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"1"}),o.jsx("path",{d:"M5.03389 10.0209C4.95343 10.1842 5.0206 10.3819 5.18391 10.4623C5.25705 10.4984 5.34095 10.506 5.4194 10.4838L7.95473 9.76606L10.581 10.4881C10.7565 10.5364 10.9379 10.4332 10.9862 10.2577C11.008 10.1786 10.9994 10.0943 10.9623 10.0211L8.25303 4.68058C8.17066 4.51822 7.97226 4.45337 7.80989 4.53574C7.74628 4.56801 7.69485 4.62004 7.66333 4.68403L5.03389 10.0209Z",stroke:"currentColor",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"})]})}function Si({skillBtnRef:e,styleTemplateBtnRef:t,onSkillMouseDown:n,onSkillClick:r,selectedQuickAction:a,guidedModeEnabled:s,onToggleGuidedMode:l,hasPptSkillInInput:h,selectedTemplate:d,onStyleTemplateClick:g,onClearSelectedTemplate:f,showSkillMenu:i,menuRef:p,skillFilter:m,onSkillFilterChange:v,filteredSkillOptions:k,skillOptionsLoading:b,selectedIdx:j,setSelectedIdx:y,skillOptionRefs:C,onInsertSkill:D,onCloseMenus:E,onOpenSkillManager:S}){return o.jsxs("div",{className:"relative inline-flex items-center gap-[8px]",children:[o.jsxs("button",{ref:e,type:"button",onMouseDown:n,onClick:r,className:Kn,children:[o.jsx(we,{src:"/icons/menu/skills.svg",className:"h-4 w-4 text-[var(--mask-icon)]"}),"技能"]}),(a==null?void 0:a.label)==="幻灯片"&&o.jsx(de,{content:"开启引导模式后,将在生成前主动追问并确认细节,确保内容精准贴合需求。",forceShow:!0,className:"inline-flex",children:o.jsxs("button",{type:"button",onClick:l,className:Kn,style:s?{color:"var(--accent-pill-text)",backgroundColor:"var(--accent-pill-bg)",borderColor:"var(--accent-pill-text)"}:void 0,children:[o.jsx(ki,{className:"h-4 w-4 shrink-0"}),"引导模式"]})}),((a==null?void 0:a.label)==="幻灯片"||h)&&o.jsx(o.Fragment,{children:d?o.jsx(de,{content:d.name,className:"inline-flex",children:o.jsxs("span",{className:"inline-flex max-w-[200px] items-center gap-1 rounded-full border border-[#1476ff] bg-[#f0f7ff] px-3 py-[7px] text-xs text-[#1476ff] transition-colors hover:bg-[#e0f0ff] cursor-pointer","data-testid":"chat-input-selected-template-pill",onClick:g,children:[o.jsx("span",{role:"button",className:"inline-flex h-4 w-4 items-center justify-center rounded-full hover:bg-[#dbeaff]","aria-label":"删除已选模板",onClick:N=>{N.stopPropagation(),f()},children:o.jsx(we,{name:"close",className:"h-3 w-3"})}),o.jsx("span",{className:"truncate",children:d.name})]})}):o.jsxs("button",{ref:t,type:"button",onClick:g,className:Kn,"data-testid":"chat-input-style-template-trigger",children:[o.jsx(we,{src:"/icons/userprofile/style-template.svg",className:"h-4 w-4 text-[var(--mask-icon)]"}),"风格模板"]})}),i&&o.jsx(Ii,{menuRef:p,skillFilter:m,onSkillFilterChange:v,filteredSkillOptions:k,skillOptionsLoading:b,selectedIdx:j,setSelectedIdx:y,skillOptionRefs:C,onInsertSkill:D,onClose:E,onOpenSkillManager:S})]})}function Ti({input:e,textareaRef:t,skillInsertAnchorRef:n,closeMenus:r,routerPush:a,...s}){const{onSkillMouseDown:l,onOpenSkillManager:h}=xi({input:e,textareaRef:t,skillInsertAnchorRef:n,closeMenus:r,routerPush:a});return o.jsx(Si,{...s,onSkillMouseDown:l,onOpenSkillManager:h})}const en="office-claw-voice-settings",tn="cat-cafe-voice-settings",Ke={customTerms:[],customPrompt:null,language:"zh"},Ei=new Set(["zh","en",""]);function Ci(e){return typeof e=="object"&&e!==null&&typeof e.from=="string"&&typeof e.to=="string"}function Ni(e){if(typeof e!="object"||e===null)return Ke;const t=e,n=Array.isArray(t.customTerms)?t.customTerms.filter(Ci):[],r=typeof t.customPrompt=="string"?t.customPrompt:null,a=Ei.has(t.language)?t.language:"zh";return{customTerms:n,customPrompt:r,language:a}}function oa(){if(typeof window>"u")return Ke;try{let e=window.localStorage.getItem(en);if(e||(e=window.localStorage.getItem(tn)),!e)return Ke;const t=Ni(JSON.parse(e));if(window.localStorage.getItem(en)===null&&window.localStorage.getItem(tn)!==null)try{window.localStorage.setItem(en,JSON.stringify(t)),window.localStorage.removeItem(tn)}catch{}return t}catch{return Ke}}function He(e){if(!(typeof window>"u"))try{window.localStorage.setItem(en,JSON.stringify(e));try{window.localStorage.removeItem(tn)}catch{}}catch{}}const ji=cn(e=>({settings:oa(),addTerm:(t,n)=>e(r=>{const a={...r.settings,customTerms:[...r.settings.customTerms,{from:t,to:n}]};return He(a),{settings:a}}),removeTerm:t=>e(n=>{const r={...n.settings,customTerms:n.settings.customTerms.filter((a,s)=>s!==t)};return He(r),{settings:r}}),updateTerm:(t,n,r)=>e(a=>{if(t<0||t>=a.settings.customTerms.length)return a;const s=[...a.settings.customTerms];s[t]={from:n,to:r};const l={...a.settings,customTerms:s};return He(l),{settings:l}}),setCustomPrompt:t=>e(n=>{const r={...n.settings,customPrompt:t};return He(r),{settings:r}}),setLanguage:t=>e(n=>{const r={...n.settings,language:t};return He(r),{settings:r}}),loadSettings:()=>{e({settings:oa()})},resetAll:()=>{He(Ke),e({settings:Ke})}})),ia="office-claw-desktop-message";function ca(){var t,n,r;if(typeof window>"u")return null;const e=window;return((t=e.chrome)==null?void 0:t.webview)??((r=(n=e.webkit)==null?void 0:n.messageHandlers)==null?void 0:r.officeClawDesktop)??null}function la(e){return!e||typeof e!="object"?null:e}function _i(){const e=ji(P=>P.settings),t=e.language,n=c.useMemo(()=>Xs(e.customTerms),[e.customTerms]),[r,a]=c.useState("idle"),[s,l]=c.useState(""),[h,d]=c.useState(""),[g,f]=c.useState(null),[i,p]=c.useState(0),m=c.useRef(null),v=c.useRef(null),k=c.useRef(null),b=c.useRef(null),j=c.useRef(0),y=c.useRef(0),C=c.useRef(n),D=c.useCallback(()=>{b.current&&(clearInterval(b.current),b.current=null)},[]),E=c.useCallback(()=>{var x;if(typeof window>"u")return;const L=(x=window.chrome)==null?void 0:x.webview;L!=null&&L.removeEventListener&&v.current&&L.removeEventListener("message",v.current),k.current&&window.removeEventListener(ia,k.current),v.current=null,k.current=null},[]),S=c.useCallback(async()=>{var R,O,B;f(null),l(""),d(""),p(0),y.current+=1,C.current=n;const P=ca();if(!P){f("当前为浏览器模式,无法使用桌面端原生语音转写"),a("idle");return}E();const L=`voice-${Date.now()}-${y.current}`;m.current=L;const x=y.current,$=q=>{var M;if(!(!q||x!==y.current)&&(M=q.type)!=null&&M.startsWith("voice.transcription.")&&!(q.sessionId&&q.sessionId!==m.current)){if(q.type==="voice.transcription.partial"){d(Kr(q.text??"",C.current));return}if(q.type==="voice.transcription.final"){l(Kr(q.text??"",C.current)),d(""),a("idle"),D(),E();return}q.type==="voice.transcription.error"&&(f(q.error||"原生语音转写失败"),a("idle"),D(),E())}},A=q=>{$(la(q.data))},F=q=>{const M=q.detail;$(la(M))};v.current=A,k.current=F,(B=(O=(R=window.chrome)==null?void 0:R.webview)==null?void 0:O.addEventListener)==null||B.call(O,"message",A),window.addEventListener(ia,F),P.postMessage(JSON.stringify({type:"voice.transcription.start",sessionId:L,language:t==="en"?"en-US":t==="zh"?"zh-CN":""})),j.current=Date.now(),a("recording"),b.current=setInterval(()=>{p(Math.floor((Date.now()-j.current)/1e3))},1e3)},[D,E,t,n]),N=c.useCallback(()=>{const P=ca();P&&r==="recording"&&(P.postMessage(JSON.stringify({type:"voice.transcription.stop",sessionId:m.current})),D(),a("idle"))},[D,r]);return c.useEffect(()=>()=>{D(),E()},[D,E]),c.useEffect(()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("office-claw:voice-state",{detail:{state:r}}))},[r]),{state:r,transcript:s,partialTranscript:h,error:g,duration:i,startRecording:S,stopRecording:N}}function Ai({className:e="w-5 h-5"}){return o.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",className:`animate-spin ${e}`,stroke:"currentColor",strokeWidth:"2",children:[o.jsx("path",{d:"M18 12L21 9M21 15L18 12"}),o.jsx("path",{d:"M3 12H18"}),o.jsx("path",{d:"M3 12L6 8M6 16L3 12"}),o.jsx("path",{d:"M10 8V16"}),o.jsx("path",{d:"M14 8V16"})]})}function Di({className:e="w-5 h-5"}){return o.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",width:"32.000000",height:"32.000000",fill:"none",children:[o.jsxs("defs",{children:[o.jsx("clipPath",{id:"clipPath_1",children:o.jsx("rect",{width:"32.000000",height:"32.000000",x:"0.000000",y:"0.000000",rx:"8.000000",fill:"rgb(255,255,255)"})}),o.jsxs("linearGradient",{id:"paint_linear_0",x1:"13",x2:"20.0000038",y1:"21.1280823",y2:"7.00000095",gradientUnits:"userSpaceOnUse",children:[o.jsx("stop",{stopColor:"rgb(226,128,255)",offset:"0",stopOpacity:"1"}),o.jsx("stop",{stopColor:"rgb(102,134,255)",offset:"0.517614722",stopOpacity:"1"}),o.jsx("stop",{stopColor:"rgb(77,221,255)",offset:"1",stopOpacity:"1"})]})]}),o.jsx("rect",{id:"语音按钮",width:"32.000000",height:"32.000000",x:"0.000000",y:"0.000000",rx:"8.000000"}),o.jsxs("g",{id:"编组 19",children:[o.jsx("rect",{id:"矩形",width:"32.000000",height:"32.000000",x:"0.000000",y:"0.000000",rx:"8.000000",fill:"rgb(0,0,0)",fillOpacity:"0"}),o.jsx("rect",{id:"矩形",width:"31.000000",height:"31.000000",x:"0.500000",y:"0.500000",rx:"7.500000",stroke:"rgb(151,151,151)",strokeOpacity:"0",strokeWidth:"1"}),o.jsx("rect",{id:"矩形",width:"24.000000",height:"24.000000",x:"4.000000",y:"4.000000",fill:"rgb(216,216,216)",fillOpacity:"0"}),o.jsx("rect",{id:"矩形",width:"23.000000",height:"23.000000",x:"4.500000",y:"4.500000",stroke:"rgb(151,151,151)",strokeOpacity:"0",strokeWidth:"1"}),o.jsxs("g",{id:"编组 18",children:[o.jsx("rect",{id:"矩形",width:"7.000000",height:"11.000000",x:"13.000000",y:"7.000000",rx:"3.500000",fill:"url(#paint_linear_0)",fillOpacity:"0"}),o.jsx("rect",{id:"矩形",width:"7.000000",height:"11.000000",x:"13.000000",y:"7.000000",rx:"3.500000",stroke:"rgb(128,128,128)",strokeLinejoin:"round",strokeWidth:"1.20000005"}),o.jsx("path",{id:"路径",d:"M9 14C9 18.4183 12.3579 22 16.5 22C20.6421 22 24 18.4183 24 14",fill:"rgb(216,216,216)",fillOpacity:"0",fillRule:"evenodd"}),o.jsx("path",{id:"路径",d:"M9 14C9 18.4183 12.3579 22 16.5 22C20.6421 22 24 18.4183 24 14",fillRule:"evenodd",stroke:"rgb(128,128,128)",strokeLinecap:"round",strokeWidth:"1.20000005"}),o.jsx("path",{id:"路径 2",d:"M0 0L2.78809 0",stroke:"rgb(128,128,128)",strokeLinecap:"round",strokeWidth:"1.20000005",transform:"matrix(0,1,-1,0,16.5,22.5811)"})]})]})]})}function Ri({className:e}){return o.jsxs("svg",{className:e,viewBox:"0 0 20 20","aria-hidden":"true",children:[o.jsxs("g",{children:[o.jsx("path",{d:"M10 1.5A8.5 8.5 0 0 1 18.5 10",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round"}),o.jsx("path",{d:"M18.5 10A8.5 8.5 0 1 1 10 1.5",fill:"none",stroke:"currentColor",strokeOpacity:"0.24",strokeWidth:"1.8",strokeLinecap:"round"}),o.jsx("animateTransform",{attributeName:"transform",type:"rotate",from:"0 10 10",to:"360 10 10",dur:"1s",repeatCount:"indefinite"})]}),o.jsx("rect",{x:"6.3",y:"6.3",width:"7.4",height:"7.4",rx:"1.5",fill:"currentColor"})]})}function ar({className:e="w-5 h-5"}){return o.jsxs("svg",{viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg",width:"32.000000",height:"32.000000",fill:"none",children:[o.jsx("rect",{id:"发送按钮",width:"32.000000",height:"32.000000",x:"0.000000",y:"0.000000"}),o.jsx("rect",{id:"Rectangle",width:"32.000000",height:"32.000000",x:"0.000000",y:"0.000000",rx:"16.000000",fill:"currentColor"}),o.jsx("rect",{id:"Rectangle",width:"31.000000",height:"31.000000",x:"0.500000",y:"0.500000",rx:"15.500000",stroke:"rgb(0,0,0)",strokeOpacity:"0",strokeWidth:"1"}),o.jsxs("g",{id:"编组 2",children:[o.jsx("rect",{id:"矩形",width:"20.000000",height:"20.000000",x:"6.000000",y:"6.000000",fill:"rgb(216,216,216)",fillOpacity:"0"}),o.jsx("rect",{id:"矩形",width:"19.000000",height:"19.000000",x:"6.500000",y:"6.500000",stroke:"rgb(151,151,151)",strokeOpacity:"0",strokeWidth:"1"}),o.jsxs("g",{id:"编组",children:[o.jsx("path",{id:"Fill 1",d:"M23.4524 7.7341L7.10455 15.5113C6.74775 15.681 6.74268 16.1869 7.09622 16.3636L11.169 18.3998C11.3653 18.4981 11.6011 18.47 11.7691 18.3289L20.9288 10.6295C21.0811 10.5014 21.2814 10.7159 21.1432 10.8591L13.2495 19.0414C13.0854 19.2117 13.006 19.4465 13.0331 19.6815L13.522 23.9124C13.5692 24.321 14.0787 24.4798 14.3498 24.1705L16.3212 21.9191C16.4448 21.7782 16.4169 21.5609 16.2622 21.4554L14.6302 20.3428C14.5321 20.2757 14.6204 20.1255 14.7265 20.1787L16.8956 21.2631L19.447 22.5386C19.7084 22.6693 20.0245 22.5348 20.1115 22.256L24.3965 8.55372C24.5742 7.9856 23.99 7.47826 23.4524 7.7341Z",fill:"rgb(255,255,255)",fillRule:"evenodd"}),o.jsx("path",{id:"形状结合",d:"M13.0195 19.5098C13.0169 19.5355 13.0156 19.5615 13.0156 19.5875C13.0156 19.6177 13.0174 19.648 13.0209 19.6783L13.5097 23.9092C13.557 24.3178 14.0665 24.4766 14.3375 24.1673L16.3089 21.9159C16.3611 21.8564 16.3863 21.7832 16.3863 21.7106C16.3863 21.6113 16.3393 21.5131 16.2499 21.4522L14.6179 20.3396C14.5976 20.3257 14.5853 20.3083 14.5795 20.2898L13.0195 19.5098Z",opacity:"0.0500000007",fill:"rgb(0,0,0)",fillOpacity:"0",fillRule:"evenodd"})]})]})]})}function Pi({className:e="w-5 h-5"}){return o.jsx("svg",{className:e,viewBox:"0 0 1024 1024",children:o.jsx("path",{d:"M365.014704 657.815846H657.084939V365.74561H365.014704V657.815846z m584.140471-146.035118c0-240.906781-197.125482-438.105353-438.105353-438.105353-240.979872 0-438.105353 197.198572-438.105354 438.105353 0 240.979872 197.125482 438.178444 438.105354 438.178444 240.979872 0 438.105353-197.198572 438.105353-438.178444zM511.634547 0.730906c281.399001 0 511.634547 230.235546 511.634547 511.634547s-230.235546 511.634547-511.634547 511.634547-511.634547-230.235546-511.634547-511.634547 230.235546-511.634547 511.634547-511.634547z","p-id":"12240"})})}function Mi({onTranscript:e,onSend:t,onQueueSend:n,onStop:r,disabled:a,sendDisabled:s,hideIdleMic:l,hasActiveInvocation:h,hasText:d,queueLimitReached:g,showQueueTooltip:f}){const i=_i(),[p,m]=c.useState(null),v=!!(a||s);c.useEffect(()=>{i.transcript&&e(i.transcript)},[i.transcript,e]),c.useEffect(()=>{if(!i.error)return;m(i.error);const E=window.setTimeout(()=>{m(null)},5e3);return()=>window.clearTimeout(E)},[i.error]);const{state:k,startRecording:b,stopRecording:j}=i;c.useEffect(()=>{const E=N=>{N.altKey&&N.code==="KeyV"&&(N.preventDefault(),k==="recording"?j():k==="idle"&&!a&&b())},S=()=>{k==="recording"?j():k==="idle"&&!a&&b()};return document.addEventListener("keydown",E),window.addEventListener("toggle-voice-recording",S),()=>{document.removeEventListener("keydown",E),window.removeEventListener("toggle-voice-recording",S)}},[k,b,j,a]);const y=!!(h&&n),C=!l&&i.state==="idle",D=g?"待执行任务已达到 20 条上限,请等待完成或减少后重试":"加入待执行任务";return i.state==="recording"?o.jsxs("div",{className:"relative flex w-full items-center",children:[p&&o.jsx("div",{className:"absolute bottom-full right-0 mb-2 w-[240px] max-w-[70vw] break-words rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-xs leading-5 text-red-600 shadow-sm",children:p}),o.jsxs("div",{className:"relative h-10 w-full overflow-hidden rounded-xl flex items-center justify-center",children:[o.jsx("img",{src:"/icons/chart/home-loading.webp",alt:"loading",className:"h-full w-[auto] object-cover"}),o.jsx("button",{onClick:i.stopRecording,className:"absolute right-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-xl transition-opacity hover:opacity-90",title:"停止录音","aria-label":"停止录音",children:o.jsx(Pi,{className:"h-6 w-6"})})]})]}):o.jsxs("div",{className:"relative flex shrink-0 items-center justify-end",children:[p&&o.jsx("div",{className:"absolute bottom-full right-0 mb-2 w-[240px] max-w-[70vw] break-words rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-xs leading-5 text-red-600 shadow-sm",children:p}),C&&o.jsx("button",{onClick:i.startRecording,disabled:a,className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-xl text-gray-400 transition-colors hover:bg-white hover:text-cocreator-primary disabled:cursor-not-allowed disabled:opacity-40","aria-label":"开始语音输入 (Alt+V)",title:"语音输入 (Alt+V)",children:o.jsx(Di,{className:"w-5 h-5"})}),i.state==="transcribing"?o.jsx("button",{disabled:!0,className:"inline-flex h-8 w-8 shrink-0 cursor-wait items-center justify-center rounded-xl bg-gray-300 text-white",title:"转写中","aria-label":"转写中",children:o.jsx(Ai,{className:"w-5 h-5"})}):y?d?f?o.jsx(de,{content:D,forceShow:!0,className:"ml-2 inline-flex",children:o.jsx("button",{onClick:n,disabled:v,className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-[20px] text-white transition-colors disabled:cursor-not-allowed disabled:opacity-40 chat-input-send-message","aria-label":"加入待执行任务",children:o.jsx(ar,{className:"w-5 h-5"})})}):o.jsx("button",{onClick:n,disabled:v,className:"ml-2 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-[20px] text-white transition-colors disabled:cursor-not-allowed disabled:opacity-40 chat-input-send-message","aria-label":"加入待执行任务",children:o.jsx(ar,{className:"w-5 h-5"})}):r?o.jsxs("button",{onClick:()=>r(),className:"ml-2 inline-flex shrink-0 items-center gap-2 rounded-full px-3 py-1.5 text-[12px] font-medium transition-colors hover:bg-blue-50 chat-input-stop-generation","aria-label":"停止回答",title:"停止回答",children:[o.jsx(Ri,{className:"h-5 w-5 shrink-0"}),o.jsx("span",{children:"停止回答"})]}):null:d?o.jsx("button",{onClick:t,disabled:v,className:"ml-2 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-[20px] text-white transition-colors disabled:cursor-not-allowed disabled:opacity-40 chat-input-send-message","aria-label":"发送消息",children:o.jsx(ar,{className:"w-5 h-5"})}):null]})}function Li({fileInputRef:e,workspaceMenuItems:t,selectedIdx:n,setSelectedIdx:r,setWorkspaceFilter:a,closeMenus:s,selectWorkspaceMenuItem:l}){const h=c.useCallback(()=>{var f;(f=e.current)==null||f.click()},[e]),d=c.useCallback(f=>{a(f),r(0)},[a,r]),g=c.useCallback(f=>{if(t.length===0){f.key==="Escape"&&(f.preventDefault(),s());return}if(f.key==="ArrowDown"){f.preventDefault(),r(i=>(i+1)%t.length);return}if(f.key==="ArrowUp"){f.preventDefault(),r(i=>(i-1+t.length)%t.length);return}if(f.key==="Enter"){f.preventDefault();const i=t[n];i&&l(i);return}f.key==="Escape"&&(f.preventDefault(),s())},[s,l,n,r,t]);return{handleAttachClick:h,handleWorkspaceFilterChange:d,handleWorkspaceSearchKeyDown:g}}function $i({fileInputRef:e,setWorkspaceFilter:t,closeMenus:n,folderSelectionEnabled:r,selectedFolderTitle:a,folderButtonLabel:s,shouldShowFolderTooltip:l,folderBtnRef:h,menuRef:d,workspaceSearchInputRef:g,workspaceFilter:f,showWorkspaceMenu:i,workspaceMenuItems:p,selectedIdx:m,setSelectedIdx:v,workspaceOptionRefs:k,isFolderButtonDisabled:b,queueAwareDisabled:j,sendTemporarilyDisabled:y,imagesCount:C,hasActiveInvocation:D,inputTrimmed:E,queueSendDisabled:S,queueCount:N,onWorkspaceClick:P,onWorkspaceSelect:L,onTranscript:x,onSend:$,onStop:A,onQueueSend:F}){const[w,R]=c.useState(!1);c.useEffect(()=>{if(typeof window>"u")return;const M=u=>{var _;R(((_=u.detail)==null?void 0:_.state)==="recording")};return window.addEventListener("office-claw:voice-state",M),()=>{window.removeEventListener("office-claw:voice-state",M)}},[]);const{handleAttachClick:O,handleWorkspaceFilterChange:B,handleWorkspaceSearchKeyDown:q}=Li({fileInputRef:e,workspaceMenuItems:p,selectedIdx:m,setSelectedIdx:v,setWorkspaceFilter:t,closeMenus:n,selectWorkspaceMenuItem:L});return o.jsxs("div",{className:w?"absolute inset-x-0 bottom-0 z-30 flex w-full justify-center":"flex items-center",children:[!w&&r&&o.jsxs("div",{className:"relative mr-2 flex items-center",children:[o.jsx(de,{content:(a==null?void 0:a.trim())||s,forceShow:l,copyable:l,className:"flex items-center",children:o.jsxs("button",{ref:h,type:"button","data-testid":"folder-select-button",onClick:P,disabled:b,className:"ui-button-default inline-flex h-8 min-w-0 max-w-[160px] items-center gap-1 rounded-[16px] px-3 text-xs shadow-none",children:[o.jsx(we,{src:"/icons/chart/folder.svg",testId:"folder-select-icon",className:"h-6 w-6 shrink-0 text-[var(--mask-icon)]"}),o.jsx("span",{className:"truncate",children:s}),o.jsx(we,{src:"/icons/chevron-right.svg",className:"h-3.5 w-3.5 shrink-0 rotate-90 text-[var(--text-label-secondary)]"})]})}),i&&o.jsxs("div",{ref:d,"data-testid":"workspace-select-menu",className:"ui-overlay-card absolute bottom-full left-0 mb-2 z-[200] flex w-[200px] max-h-[302px] flex-col overflow-hidden rounded-xl border border-[var(--overlay-border)] px-2 py-2 shadow-[var(--overlay-shadow)]",children:[o.jsx("div",{className:"px-1 pt-0 pb-2",children:o.jsxs("div",{className:"relative",children:[o.jsxs("svg",{className:"pointer-events-none absolute left-0 top-1/2 h-5 w-5 -translate-y-1/2 text-[var(--text-label-secondary)]",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[o.jsx("circle",{cx:"11",cy:"11",r:"7"}),o.jsx("path",{d:"M20 20l-3.5-3.5"})]}),o.jsx("input",{ref:g,"data-testid":"workspace-select-search",value:f,onChange:M=>B(M.target.value),onKeyDown:q,placeholder:"请输入关键字搜索",className:"ui-input ui-input-underline w-full py-1 pl-6 pr-0 text-[12px]"})]})}),o.jsxs("div",{className:"-mr-1 min-h-0 flex-1 overflow-y-auto pr-1 [scrollbar-gutter:auto]",children:[p.map((M,u)=>{var V;const I=M.kind==="empty"?"从空文件夹开始":M.kind==="open"?"打开新文件夹":M.option.name,_=M.kind==="workspace"?((V=M.option.title)==null?void 0:V.trim())||M.option.path:null,W=_||I;return o.jsx("button",{type:"button","data-testid":M.kind==="empty"?"workspace-menu-item-empty":M.kind==="open"?"workspace-menu-item-open":`workspace-menu-item-${u}`,ref:Z=>{k.current[u]=Z},className:`flex h-12 w-full items-center rounded-[6px] px-2 py-[6px] text-left text-[12px] font-normal text-[var(--overlay-text)] transition-colors ${u===m?"bg-[var(--overlay-item-hover-bg)]":"hover:bg-[var(--overlay-item-hover-bg)]"}`,onMouseEnter:()=>v(u),onMouseDown:Z=>{Z.preventDefault(),L(M)},children:o.jsx(de,{content:W,forceShow:M.kind==="workspace",copyable:M.kind==="workspace",className:"min-w-0 flex-1",children:o.jsxs("span",{className:"block min-w-0",children:[o.jsx("span",{className:"block truncate",children:I}),_&&o.jsx("span",{className:"block truncate text-[10px] text-[var(--text-label-secondary)]",children:_})]})})},M.kind==="workspace"?`${M.option.path}:${M.option.name}`:M.kind)}),p.length===2&&o.jsx("div",{className:"px-2 py-2 text-xs text-[var(--text-label-secondary)]",children:"无匹配工作空间"})]})]})]}),!w&&o.jsx(de,{content:"选择附件",forceShow:!0,className:"inline-flex",children:o.jsx("button",{type:"button","data-testid":"attach-file-button",onClick:O,disabled:j||y||C>=vr,className:so,"aria-label":"上传附件",children:o.jsx(we,{name:"attach",className:"h-8 w-8 text-[var(--mask-icon)]"})})}),o.jsx(Mi,{onTranscript:x,onSend:$,onStop:A,onQueueSend:F,disabled:j,sendDisabled:y||S,hasActiveInvocation:D,hasText:E,queueLimitReached:S,showQueueTooltip:N>0})]})}function Oi({agentOptions:e,selectedIdx:t,onSelectIdx:n,onInsertMention:r,onCloseMentionMenu:a,onMentionFilterChange:s}){const l=c.useCallback(d=>{s(d),n(0)},[s,n]),h=c.useCallback(d=>{if(e.length===0){d.key==="Escape"&&(d.preventDefault(),a());return}if(d.key==="ArrowDown"){d.preventDefault(),n((t+1)%e.length);return}if(d.key==="ArrowUp"){d.preventDefault(),n((t-1+e.length)%e.length);return}if(d.key==="Enter"||d.key==="Tab"){d.preventDefault();const g=e[t];g&&r(g);return}d.key==="Escape"&&(d.preventDefault(),a())},[e,a,r,n,t]);return{handleMentionFilterChange:l,handleMentionFilterKeyDown:h}}function Fi(e){return e?(e.replace(/^@/,"").trim().slice(0,1)||"?").toUpperCase():"?"}function qi(e){var r;const t=((r=e.avatar)==null?void 0:r.trim())??"";return/^(https?:\/\/|\/|data:image)/.test(t)?o.jsx("img",{src:t,alt:e.label,className:"w-[18px] h-[18px] rounded-full shrink-0 object-cover",onError:a=>{a.target.style.display="none"}}):o.jsx("span",{"aria-hidden":"true",className:"inline-flex h-[18px] w-[18px] shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white",style:{backgroundColor:e.color||"#7AAEFF"},children:t||Fi(e.label)})}function Bi({agentOptions:e,showMentions:t,mentionFilter:n,onMentionFilterChange:r,onCloseMentionMenu:a,selectedIdx:s,onSelectIdx:l,onInsertMention:h,menuRef:d,mentionMenuStyle:g}){const{handleMentionFilterChange:f,handleMentionFilterKeyDown:i}=Oi({agentOptions:e,selectedIdx:s,onSelectIdx:l,onInsertMention:h,onCloseMentionMenu:a,onMentionFilterChange:r}),p=c.useRef(null),[m,v]=c.useState(!1),k=c.useCallback(b=>{b&&typeof b.scrollIntoView=="function"&&b.scrollIntoView({block:"nearest"})},[]);return c.useEffect(()=>{const b=p.current;if(!b){v(!1);return}const j=()=>v(b.scrollHeight>b.clientHeight+b.scrollTop+4);return j(),b.addEventListener("scroll",j),()=>b.removeEventListener("scroll",j)},[]),o.jsx(o.Fragment,{children:t&&o.jsxs("div",{ref:d,className:"fixed bg-white rounded-xl shadow-lg overflow-hidden w-[200px] z-20 flex flex-col p-2",style:g,children:[o.jsx("div",{className:"px-1 pt-0 pb-2",children:o.jsxs("div",{className:"relative",children:[o.jsxs("svg",{className:"pointer-events-none absolute left-0 top-1/2 h-5 w-5 -translate-y-1/2 text-gray-400",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[o.jsx("circle",{cx:"11",cy:"11",r:"7"}),o.jsx("path",{d:"M20 20l-3.5-3.5"})]}),o.jsx("input",{value:n,onChange:b=>f(b.target.value),onKeyDown:i,placeholder:"请输入关键字搜索",className:"ui-input ui-input-underline w-full py-1 pl-6 pr-0 text-[12px]"})]})}),o.jsx("div",{ref:p,className:"max-h-[220px] overflow-y-auto flex-1 border-0",children:e.map((b,j)=>o.jsxs("button",{ref:j===s?k:void 0,className:`w-full h-[34px] text-left p-2 rounded-[6px] flex items-center gap-2 transition-colors ${j===s?"bg-[rgba(245,245,245,1)]":"hover:bg-[rgba(245,245,245,1)]"}`,onMouseEnter:()=>l(j),onMouseDown:y=>{y.preventDefault(),h(b)},title:b.label,children:[qi(b),o.jsx("div",{className:"min-w-0 flex-1 truncate text-[12px] leading-[18px] font-normal text-[#191919]",children:b.label})]},b.id))}),m&&o.jsx("div",{className:"px-4 py-1 text-[10px] text-gray-400 text-center bg-gradient-to-t from-white shrink-0",children:"↓ 还有更多智能体"}),e.length===0&&o.jsx("div",{className:"px-4 py-2.5 text-xs text-gray-400",children:"无匹配智能体"})]})})}const da=[...sn].sort((e,t)=>t.label.length-e.label.length);function Ui(e,t,n){const r=t>0?e[t-1]:" ",a=t+n<e.length?e[t+n]:" ";return/\s/.test(r)&&/\s/.test(a)}function zi(e){const t=[],n=Js(),r=Zs(),a=new Set((To()??[]).map(i=>i.name.trim().toLowerCase()).filter(Boolean));n.lastIndex=0;let s;for(;(s=n.exec(e))!==null;){const i=(s[1]??"").toLowerCase(),p=r[i]??s[0];if(!p)continue;const m=s[0]??"";t.push({kind:"mention",label:p,start:s.index,end:s.index+m.length})}const l=/(使用\s+)([^\n,。!?,.!?]{1,60}?)(\s+技能)/g;let h;for(;(h=l.exec(e))!==null;){const i=(h[2]??"").trim();if(!i||a.size>0&&!a.has(i.toLowerCase()))continue;const p=h[0]??"";t.push({kind:"skill",label:i,start:h.index,end:h.index+p.length})}const d=new Map;for(const i of da){const p=i.label;if(!p)continue;let m=0;for(;m<e.length;){const v=e.indexOf(p,m);if(v<0)break;m=v+1,Ui(e,v,p.length)&&(d.has(v)||d.set(v,{kind:"quick",label:p,icon:i.icon,start:v,end:v+p.length}))}}t.push(...d.values());let g=0;for(;g<e.length;){const i=e.indexOf(ye,g);if(i<0)break;const p=e.indexOf(Te,i+ye.length);if(p>i){const m=e.slice(i+ye.length,p),v=da.find(k=>k.label===m);t.push({kind:"quick",label:m,icon:v==null?void 0:v.icon,start:i,end:p+Te.length}),g=p+Te.length}else g=i+1}let f=0;for(;f<e.length;){const i=e.indexOf(Qn,f);if(i<0)break;const p=e.indexOf(Gn,i+Qn.length);if(p>i){const m=e.slice(i+Qn.length,p).trim();t.push({kind:"skill",label:m,start:i,end:p+Gn.length}),f=p+Gn.length}else f=i+1}return t.sort((i,p)=>i.start-p.start)}function Hi(e){const t=zi(e);if(t.length===0)return[{kind:"text",text:e}];const n=[];let r=0;for(const a of t)a.start<r||(a.start>r&&n.push({kind:"text",text:e.slice(r,a.start)}),n.push(a),r=a.end);return r<e.length&&n.push({kind:"text",text:e.slice(r)}),n}async function Wi(e){const t=await jo(e);if(!t.type.startsWith("image/"))throw new Error(`not an image: ${t.type}`);await navigator.clipboard.write([new ClipboardItem({[t.type]:t})])}function Vi({url:e}){const[t,n]=c.useState(!1),r=c.useCallback(async a=>{a.stopPropagation();try{await Wi(e)}catch{try{await navigator.clipboard.writeText(e)}catch{return}}n(!0),setTimeout(()=>n(!1),2e3)},[e]);return o.jsx("button",{type:"button",onClick:r,className:"absolute top-2 right-2 bg-black/60 hover:bg-black/80 text-white rounded-md px-2 py-1 text-xs opacity-0 group-hover:opacity-100 transition-opacity",title:t?"Copied!":"Copy image",children:t?"Copied!":"Copy"})}function Ki({url:e,alt:t,caption:n,onClose:r}){return c.useEffect(()=>{const a=s=>{s.key==="Escape"&&r()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[r]),typeof document>"u"?null:ln.createPortal(o.jsx("div",{role:"dialog","aria-modal":"true","aria-label":t||"Image preview",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 backdrop-blur-sm",onClick:r,children:o.jsxs("div",{className:"relative group max-w-[90vw] max-h-[90vh] flex flex-col items-center",onClick:a=>a.stopPropagation(),children:[o.jsx("button",{type:"button",onClick:r,className:"absolute -top-3 -right-3 bg-black/70 hover:bg-black/90 text-white rounded-full w-8 h-8 flex items-center justify-center text-lg z-10",title:"Close",children:"×"}),o.jsx("img",{src:e,alt:t,className:"max-w-full max-h-[85vh] object-contain rounded-lg"}),n&&o.jsx("p",{className:"mt-2 text-sm text-white/80",children:n}),o.jsx(Vi,{url:e})]})}),document.body)}function za(e){var n;const t=((n=e.split(".").pop())==null?void 0:n.toLowerCase())??"";return t==="pdf"?"/icons/files-pdf.svg":t==="doc"||t==="docx"?"/icons/files-docx.svg":t==="xls"||t==="xlsx"||t==="xlsm"||t==="xlsb"?"/icons/files-xlsx.svg":t==="ppt"||t==="pptx"?"/icons/files-ppt.svg":t==="md"?"/icons/file-md.svg":t==="csv"?"/icons/files-csv.svg":"/icons/files-txt.svg"}function Qi({files:e,onRemove:t}){var d,g;const[n,r]=c.useState(null),a=f=>{if(f<1024)return`${f} B`;const i=f/1024;if(i<1024)return`${i.toFixed(1)} KB`;const p=i/1024;return p<1024?`${p.toFixed(1)} MB`:`${(p/1024).toFixed(1)} GB`},s=f=>{const i=f.split(".");return i.length<=1?"UNKNOWN":i[i.length-1].toUpperCase()},l=f=>{const i=f.lastIndexOf(".");return i<=0?f:f.slice(0,i)},h=c.useMemo(()=>e.map(f=>URL.createObjectURL(f)),[e]);return c.useEffect(()=>()=>{for(const f of h)URL.revokeObjectURL(f)},[h]),e.length===0?null:o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"mx-3 mb-0 border-b border-gray-100 pb-3 pt-2",children:o.jsx("div",{className:"w-full max-h-[160px] overflow-y-auto overflow-x-hidden px-2 pt-3",children:o.jsx("div",{className:"grid w-full min-w-0 grid-cols-3 gap-2 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5",children:e.map((f,i)=>o.jsxs("div",{className:"group relative inline-flex h-[56px] gap-[10px] rounded-lg border border-gray-200 pl-2 py-2 hover:border-[rgb(240,240,240)] hover:shadow-[0_4px_16px_0_rgba(0,0,0,0.08)]",style:{paddingRight:12},title:l(f.name),children:[f.type.startsWith("image/")?o.jsx("img",{src:h[i],alt:l(f.name),className:"h-10 w-10 cursor-pointer rounded-lg object-cover transition-opacity hover:opacity-90",onClick:()=>r(i)}):o.jsx("img",{src:za(f.name),alt:"","aria-hidden":"true",className:"h-10 w-10 rounded-lg"}),o.jsxs("div",{className:`min-w-0 flex-1 ${f.type.startsWith("image/")?"cursor-pointer":""}`,onClick:()=>{f.type.startsWith("image/")&&r(i)},children:[o.jsx("div",{className:"truncate overflow-hidden text-ellipsis",style:{color:"#191919",fontSize:12,fontWeight:400,lineHeight:"18px"},children:l(f.name)}),o.jsxs("div",{className:"mt-1 text-[12px]",style:{color:"#808080",fontWeight:400,lineHeight:"18px"},children:[o.jsx("span",{children:s(f.name)}),o.jsx("span",{className:"ml-3",children:a(f.size)})]})]}),o.jsx("button",{onClick:()=>t(i),className:"absolute -right-2 -top-2 z-10 hidden h-4 w-4 items-center justify-center rounded-full bg-[#c2c2c2] pb-1 text-xs text-white group-hover:flex",style:{boxShadow:"0 0 0 1px rgba(255,255,255,0.8)"},title:`移除 ${l(f.name)}`,"aria-label":`Remove ${l(f.name)}`,children:"x"})]},`${l(f.name)}-${i}`))})})}),n!==null&&h[n]&&((d=e[n])==null?void 0:d.type.startsWith("image/"))&&o.jsx(Ki,{url:h[n],alt:((g=e[n])==null?void 0:g.name)??"preview",onClose:()=>r(null)})]})}function Gi(e){return o.jsxs("svg",{viewBox:"0 0 16 16",fill:"currentColor","aria-hidden":"true",...e,children:[o.jsx("rect",{fill:"none"}),o.jsx("path",{fillRule:"evenodd",clipRule:"evenodd",fill:"currentColor",d:"M5.48 14.29c.19-.08.35-.19.49-.33l7.69-7.69c.13-.13.25-.27.34-.42.08-.13.15-.27.21-.41s.1-.29.13-.44a2.074 2.074 0 0 0 0-1c-.03-.15-.07-.3-.13-.44s-.13-.28-.21-.41c-.09-.15-.21-.29-.34-.42-.13-.13-.27-.24-.42-.34-.13-.08-.26-.15-.4-.21-.15-.05-.29-.1-.44-.13-.17-.03-.33-.05-.5-.05-.18 0-.34.02-.51.05-.15.03-.29.08-.44.13-.14.06-.27.13-.4.21-.15.1-.29.21-.42.34l-7.69 7.69c-.15.15-.25.31-.33.49-.08.18-.11.38-.11.58v2.21c0 .1.01.19.05.27.03.08.08.16.15.22.07.07.14.12.23.16.08.03.17.05.27.05h2.21c.2 0 .39-.04.57-.11zm7.48-8.73-1.13 1.13-2.12-2.13 1.12-1.12c.09-.08.18-.15.27-.21.07-.05.15-.09.23-.12.08-.03.17-.06.25-.08a1.733 1.733 0 0 1 .63 0c.08.02.17.05.25.08.08.03.16.07.23.12.09.06.18.13.27.21.08.08.15.17.21.27.04.07.08.15.12.23.03.08.05.16.07.25.02.1.04.2.04.31s-.02.21-.04.31c-.02.09-.04.17-.07.25-.08.19-.19.36-.33.5zm-7.7 7.69 5.86-5.86L9 5.27l-5.86 5.86c-.1.1-.14.22-.14.36v1.91h1.91c.14 0 .26-.05.35-.15zm2.75.63c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5s-.22.5-.5.5h-5c-.28 0-.5-.22-.5-.5z"})]})}function Xi(e){return o.jsx("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",...e,children:o.jsx("path",{d:"M16.77 5.15c.28 0 .5.23.5.5 0 .28-.22.5-.5.5H7.23a.5.5 0 0 1 0-1h9.54ZM10.86 7.93l-4.8 5.17a.69.69 0 0 0-.19.48l.01.08a.7.7 0 0 0 .7.63h2.27v3.02a1.56 1.56 0 0 0 1.56 1.56h3.18a1.56 1.56 0 0 0 1.56-1.56l-.01-3.02 2.28.01a.7.7 0 0 0 .48-.19.7.7 0 0 0 .04-.99l-4.8-5.17a1.4 1.4 0 0 0-1.99 0Zm1.52.65 4.38 4.71h-2.11a.5.5 0 0 0-.5.5v3.52a.56.56 0 0 1-.56.56h-3.18a.56.56 0 0 1-.56-.56v-3.52a.5.5 0 0 0-.5-.5h-2.11l4.35-4.68a.4.4 0 0 1 .59-.03ZM8.01 13.87a.5.5 0 0 1 .5-.5h5a.5.5 0 1 1 0 1h-5a.5.5 0 0 1-.5-.5Z",fill:"currentColor"})})}function Ji(e){return o.jsx("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",...e,children:o.jsx("path",{d:"M12.55 5.29c.25 0 .5.25.5.5v7.34a1.84 1.84 0 0 1-1.84 1.84H4.46a1.84 1.84 0 0 1-1.84-1.84V5.79c0-.25.25-.5.5-.5.25 0 .5.25.5.5v7.34c0 .42.33.84.83.84h6.76c.42 0 .84-.33.84-.84V5.79c0-.25.25-.5.5-.5ZM6.29 6.79c.25 0 .5.25.5.5v4.59c0 .17-.08.25-.17.33-.08.09-.25.17-.33.17-.34 0-.5-.25-.5-.5V7.29c0-.25.25-.5.5-.5Zm3.09 0c.25 0 .5.25.5.5v4.59c0 .25-.25.5-.5.5s-.5-.25-.5-.5V7.29c0-.25.25-.5.5-.5Zm0-5.75c.59 0 1.09.33 1.25.83l.5 1.75h3c.25 0 .5.25.5.5 0 .25-.25.5-.5.5H1.87c-.25 0-.5-.25-.5-.5 0-.25.25-.5.5-.5h2.92l.67-1.75c.17-.5.67-.83 1.17-.83h2.75Zm0 .92H6.71c-.17 0-.33.08-.33.17l-.5 1.42h4.25l-.42-1.42c-.08-.08-.17-.17-.33-.17Z",fill:"currentColor"})})}const Ht=248,Zi=10,sr=8;function Yi(e,t){return e.kind==="text"?o.jsx("span",{className:"text-[12px] leading-[16px] font-normal text-[var(--text-primary)]",children:e.text},t):e.kind==="mention"?o.jsx("span",{className:"text-[12px] leading-[16px] font-medium text-[rgb(20,118,255)]",children:e.label},t):e.kind==="skill"?o.jsxs("span",{className:"inline-flex items-center gap-1 align-middle text-[var(--text-accent)]",children:[o.jsx("span",{"aria-hidden":"true",className:"inline-block h-[14px] w-[14px] shrink-0",style:{backgroundColor:"currentColor",maskImage:"url('/icons/menu/skills.svg')",maskRepeat:"no-repeat",maskPosition:"center",maskSize:"contain",WebkitMaskImage:"url('/icons/menu/skills.svg')",WebkitMaskRepeat:"no-repeat",WebkitMaskPosition:"center",WebkitMaskSize:"contain"}}),o.jsx("span",{className:"text-[12px] leading-[16px]",children:e.label})]},t):o.jsxs("span",{className:"inline-flex items-center h-6 gap-1 rounded-full border border-[rgba(20,118,255,0.7)] bg-[var(--accent-soft)] px-2 py-1 align-middle text-[12px] leading-none text-[var(--text-primary)]",children:[e.icon?o.jsx("img",{src:e.icon,alt:"","aria-hidden":"true",className:"h-4 w-4 shrink-0"}):o.jsx("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full bg-[var(--text-accent)]","aria-hidden":"true"}),o.jsx("span",{className:"max-w-[120px] truncate",children:e.label})]},t)}function ua(e,t,n){return Math.max(t,Math.min(e,n))}function ec({queuedEntries:e,attachmentNamesByEntryId:t,queueCount:n,queueExpanded:r,queueBusy:a,queueHighlightedEntryId:s,listRef:l,onToggleExpanded:h,onClear:d,onPinToTop:g,onEdit:f,onDelete:i}){const[p,m]=c.useState(!1),[v,k]=c.useState(null),b=c.useRef(null),j=c.useRef(null);return c.useLayoutEffect(()=>{if(!p)return;const y=()=>{const C=b.current,D=j.current;if(!C)return;const E=C.getBoundingClientRect(),S=(D==null?void 0:D.getBoundingClientRect().height)??124,N=window.innerWidth-Ht-sr,P=E.right-Ht,L=ua(P,sr,N),x=E.top-S-Zi,$=Math.max(sr,x),A=E.left+E.width/2,F=ua(A-L,14,Ht-14);k({top:$,left:L,arrowLeft:F})};return y(),window.addEventListener("resize",y),window.addEventListener("scroll",y,!0),()=>{window.removeEventListener("resize",y),window.removeEventListener("scroll",y,!0)}},[p]),c.useEffect(()=>{if(!p)return;const y=D=>{var S,N;const E=D.target;E instanceof Node&&((S=b.current)!=null&&S.contains(E)||(N=j.current)!=null&&N.contains(E)||m(!1))},C=D=>{D.key==="Escape"&&m(!1)};return window.addEventListener("mousedown",y),window.addEventListener("keydown",C),()=>{window.removeEventListener("mousedown",y),window.removeEventListener("keydown",C)}},[p]),n===0?null:o.jsxs("div",{className:`w-full min-w-0 max-w-full overflow-hidden rounded-t-[24px] rounded-b-none border chat-input-shell bg-[var(--surface-panel)] transition-[padding,border-color] duration-200 ${r?"pb-5":"pb-4"}`,children:[o.jsxs("div",{className:"flex min-h-[44px] items-center justify-between px-[18px] py-[13px]",children:[o.jsxs("button",{type:"button",onClick:h,className:"inline-flex min-w-0 items-center gap-1 rounded-[10px] text-[14px] leading-[22px] font-normal text-[var(--text-primary)] transition-colors","aria-expanded":r,"aria-label":"展开或收起待执行任务",children:[o.jsxs("span",{children:["待执行任务(",n,")"]}),o.jsx("svg",{className:`h-4 w-4 shrink-0 text-[var(--text-label-secondary)] transition-transform duration-200 ${r?"rotate-180":""}`,viewBox:"0 0 20 20",fill:"currentColor",children:o.jsx("path",{fillRule:"evenodd",d:"M5.23 7.21a.75.75 0 011.06.02L10 11.167l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.51a.75.75 0 01-1.08 0l-4.25-4.51a.75.75 0 01.02-1.06z",clipRule:"evenodd"})})]}),o.jsx("div",{ref:b,children:p?o.jsx(lt,{label:"一键清空队列",size:"sm",disabled:a||n===0,onClick:()=>m(!1),icon:o.jsx("img",{src:"/icons/icon-clear-all.svg",alt:"一键清空"})}):o.jsx(de,{content:"一键清空",forceShow:!0,className:"inline-flex",children:o.jsx(lt,{label:"一键清空队列",size:"sm",disabled:a||n===0,onClick:()=>m(!0),icon:o.jsx("img",{src:"/icons/icon-clear-all.svg",alt:"一键清空"})})})})]}),p&&ln.createPortal(o.jsx("div",{ref:j,className:"fixed z-[320] w-[248px]",style:v?{top:`${v.top}px`,left:`${v.left}px`}:{top:"-9999px",left:"-9999px"},children:o.jsxs("div",{className:"relative overflow-tooltip rounded-lg bg-[var(--tooltip-surface)] p-4 text-[var(--tooltip-text)] shadow-[var(--tooltip-shadow)]",children:[o.jsxs("div",{className:"flex items-start gap-3",children:[o.jsx("img",{src:"/icons/message-warn.svg",alt:"","aria-hidden":"true",className:"mt-0.5 h-4 w-4 flex-shrink-0"}),o.jsx("p",{className:"text-[12px] leading-5",children:"确认要一键清空所有执行任务吗?"})]}),o.jsxs("div",{className:"mt-4 flex items-center justify-end gap-2",children:[o.jsx(pt,{variant:"default",className:"!py-[3px] !px-[20px] !min-w-[62px] !h-[24px]",onClick:()=>m(!1),children:"取消"}),o.jsx(pt,{className:"!py-[3px] !px-[20px] !min-w-[62px] !h-[24px]",disabled:a,onClick:()=>{m(!1),d()},children:"确定"})]}),o.jsx("span",{"aria-hidden":"true",className:"absolute top-full h-0 w-0 -translate-x-1/2 border-x-[6px] border-t-[6px] border-x-transparent border-t-[var(--tooltip-surface)]",style:{left:`${(v==null?void 0:v.arrowLeft)??Ht-20}px`}})]})}),document.body),r&&o.jsx("div",{className:"border-t border-[var(--border-default)]/70 pt-1 px-[10px] pb-[10px]",children:o.jsx("div",{ref:l,className:"max-h-[188px] overflow-y-auto",children:e.map((y,C)=>{const D=Hi(y.content),E=t[y.id]??y.attachmentNames??[],S=E.length>0?`${y.content} ${E.join(" ")}`:y.content;return o.jsxs("div",{className:`group/queue-row h-[34px] relative mt-1 first:mt-0 flex min-h-[34px] min-w-0 items-center rounded-[8px] p-2 transition-[background-color,box-shadow,transform,opacity] duration-200 ${s===y.id?"bg-[rgba(20,118,255,0.08)] shadow-[0_0_0_1px_rgba(20,118,255,0.16)]":"hover:bg-[var(--chat-queue-row-hover-bg)]"}`,children:[o.jsxs("svg",{viewBox:"0 0 24 24",className:"mr-2 h-4 w-4 text-[var(--text-label-secondary)]",fill:"none",children:[o.jsx("rect",{id:"time",width:"24.000000",height:"24.000000",x:"0.000000",y:"0.000000"}),o.jsx("path",{id:"path",d:"M12 1.5C6.15 1.5 1.5 6.15 1.5 12C1.5 17.85 6.15 22.5 12 22.5C17.85 22.5 22.5 17.85 22.5 12C22.5 6.15 17.85 1.5 12 1.5ZM12 21C7.05 21 3 16.95 3 12C3 7.05 7.05 3 12 3C16.95 3 21 7.05 21 12C21 16.95 16.95 21 12 21ZM15 12.6C15 13.2 14.7 13.5 14.25 13.5L11.55 13.5C10.95 13.5 10.5 13.05 10.5 12.45L10.5 8.25C10.5 7.8 10.8 7.5 11.25 7.5C11.7 7.5 12 7.8 12 8.25L12 12L14.25 12C14.55 12 14.85 12.3 15 12.6Z",fill:"currentColor",fillRule:"nonzero"})]}),o.jsx(de,{content:S,className:"mr-3 min-w-0 max-w-full flex-1 overflow-hidden",children:o.jsxs("div",{className:"block w-full min-w-0 overflow-hidden text-ellipsis whitespace-nowrap",children:[D.map((N,P)=>Yi(N,`${y.id}-${P}`)),E.map((N,P)=>o.jsxs("span",{className:"ml-2 inline-flex items-center gap-1 align-middle text-[12px] leading-[16px] font-normal text-[var(--text-primary)]",children:[o.jsx("img",{src:za(N),alt:"","aria-hidden":"true",className:"h-4 w-4 shrink-0"}),o.jsx("span",{children:N})]},`${y.id}-attachment-${P}`))]})}),o.jsxs("div",{className:"flex w-[102px] shrink-0 items-center justify-end gap-1",children:[C>0?o.jsx(de,{content:"置顶",forceShow:!0,className:"inline-flex",children:o.jsx(lt,{label:"置顶",size:"sm",disabled:a,onClick:()=>g(y.id),className:`opacity-0 pointer-events-none group-hover/queue-row:pointer-events-auto group-hover/queue-row:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100 hover:bg-[var(--chat-queue-action-hover-bg)] focus-visible:bg-[var(--chat-queue-action-hover-bg)] ${s===y.id?"text-[var(--text-accent)]":""}`,icon:o.jsx(Xi,{className:"h-4 w-4"})})}):o.jsx("span",{className:"inline-flex h-6 w-6 shrink-0","aria-hidden":"true"}),o.jsx(de,{content:"编辑",forceShow:!0,className:"inline-flex",children:o.jsx(lt,{label:"编辑",size:"sm",disabled:a,onClick:()=>f(y.id),className:"opacity-0 pointer-events-none group-hover/queue-row:pointer-events-auto group-hover/queue-row:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100 hover:bg-[var(--chat-queue-action-hover-bg)] focus-visible:bg-[var(--chat-queue-action-hover-bg)]",icon:o.jsx(Gi,{className:"h-4 w-4"})})}),o.jsx(de,{content:"删除",forceShow:!0,className:"inline-flex",children:o.jsx(lt,{label:"删除",size:"sm",disabled:a,onClick:()=>i(y.id),className:"opacity-0 pointer-events-none group-hover/queue-row:pointer-events-auto group-hover/queue-row:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100 hover:bg-[var(--chat-queue-action-hover-bg)] focus-visible:bg-[var(--chat-queue-action-hover-bg)]",icon:o.jsx(Ji,{className:"h-4 w-4"})})})]})]},y.id)})})})]})}function tc({onSelect:e,onClose:t}){const[n,r]=c.useState(""),[a,s]=c.useState(0),l=c.useRef(null),h=gt(f=>f.search),d=n?h(n):gt.getState().entries.slice(0,20);c.useEffect(()=>{var f;(f=l.current)==null||f.focus()},[]),c.useEffect(()=>{s(0)},[]);const g=c.useCallback(f=>{if(f.key==="Escape"){f.preventDefault(),t();return}if(f.key==="ArrowDown"){f.preventDefault(),s(i=>Math.min(i+1,d.length-1));return}if(f.key==="ArrowUp"){f.preventDefault(),s(i=>Math.max(i-1,0));return}f.key==="Enter"&&d.length>0&&!f.nativeEvent.isComposing&&(f.preventDefault(),e(d[a]))},[d,a,e,t]);return o.jsxs("div",{"data-testid":"history-search",className:"absolute bottom-full left-0 right-0 z-20 mb-1 mx-4 overflow-hidden rounded-xl border border-[var(--modal-border)] bg-[var(--modal-surface)] shadow-[var(--modal-shadow)]",children:[o.jsxs("div",{className:"flex items-center gap-2 border-b border-[var(--modal-divider)] px-3 py-2",children:[o.jsx("span",{className:"text-xs font-mono text-[var(--modal-text-subtle)]",children:"Ctrl+R"}),o.jsx("input",{ref:l,value:n,onChange:f=>r(f.target.value),onKeyDown:g,placeholder:"Search history...",className:"ui-input ui-input-plain flex-1 text-sm"}),o.jsx("button",{onClick:t,className:"text-xs text-[var(--modal-text-subtle)] transition-colors hover:text-[var(--modal-text)]",children:"Esc"})]}),o.jsxs("div",{className:"max-h-48 overflow-y-auto",children:[d.length===0&&o.jsx("div",{className:"px-3 py-2 text-xs text-[var(--modal-empty-text)]",children:"No matches"}),d.map((f,i)=>o.jsx("button",{className:`w-full text-left px-3 py-1.5 text-sm truncate transition-colors ${i===a?"bg-[var(--modal-muted-surface)] text-[var(--modal-text)]":"text-[var(--modal-text-muted)] hover:bg-[var(--modal-muted-surface)]"}`,onMouseEnter:()=>s(i),onMouseDown:p=>{p.preventDefault(),e(f)},children:f},`${i}-${f}`))]}),o.jsx("div",{className:"border-t border-[var(--modal-divider)] px-3 py-1 text-[10px] text-[var(--modal-text-subtle)]",children:"↑↓ 选择 · Enter 确认 · Esc 关闭"})]})}function nc({entries:e,selectedIdx:t,onSelectIdx:n,onSelect:r}){return e.length===0?null:o.jsxs("div",{"data-testid":"path-completion-menu",className:"absolute bottom-full left-4 mb-2 bg-white rounded-xl shadow-lg border border-gray-200 overflow-hidden w-80 z-10 max-h-64 flex flex-col",children:[o.jsx("div",{className:"overflow-y-auto flex-1",children:e.map((a,s)=>o.jsxs("button",{className:`w-full text-left px-3 py-2 flex items-center gap-2 transition-colors text-sm ${s===t?"bg-gray-50":"hover:bg-gray-50"}`,onMouseEnter:()=>n(s),onMouseDown:l=>{l.preventDefault(),r(a)},children:[o.jsx("span",{className:"text-base w-5 text-center shrink-0",children:a.isDirectory?"📁":"📄"}),o.jsx("span",{className:"truncate font-mono text-xs text-gray-700",children:a.name})]},a.path))}),o.jsx("div",{className:"px-3 py-1 text-[10px] text-gray-400 border-t border-gray-100 shrink-0",children:"Tab/Enter 选择 · Esc 关闭"})]})}function rc({expanded:e}){return o.jsx("svg",{"aria-hidden":"true",className:"h-3 w-3",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e?o.jsx("path",{d:"M6 9l6 6 6-6"}):o.jsx("path",{d:"M18 15l-6-6-6 6"})})}function ac(e){const t=e.content.match(/^((?:@[^@\s,,]+)+)([,,]?)(.*)$/);if(!t)return o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"font-medium text-[var(--text-accent)]",children:["@",e.agentName]}),",",e.content]});const n=t[1].match(/@[^@\s,,]+/g)??[],r=t[2]||",",a=t[3];return o.jsxs(o.Fragment,{children:[n.map((s,l)=>o.jsxs("span",{children:[l>0?" ":"",o.jsx("span",{className:"font-medium text-[var(--text-accent)]",children:s})]},`${e.agentId}-${s}-${l}`)),a?`${r}${a}`:null]})}function sc({showQuickPrompts:e,quickActionsExpanded:t,quickActionsOverflowing:n,visibleQuickActions:r,selectedQuickAction:a,queueAwareDisabled:s,quickActionsContainerRef:l,quickActionsRowRef:h,onQuickAction:d,onQuickPrompt:g,onExpertCardClick:f,onToggleExpanded:i}){return o.jsxs(o.Fragment,{children:[!e&&o.jsxs("div",{ref:l,className:`relative mb-2 flex gap-2 ${t?"items-end":"items-start"}`,children:[o.jsx("div",{ref:h,className:`flex min-w-0 flex-1 items-center gap-2 ${t?"flex-wrap overflow-visible":"flex-nowrap overflow-hidden"} ${n&&!t?"chat-input-quick-actions-fade":""}`,"data-testid":"chat-input-quick-actions-row",children:r.map(p=>o.jsxs("button",{type:"button","data-quick-action-button":"true",onClick:()=>d(p),disabled:s,className:oo,children:[o.jsx(we,{src:p.icon,className:"h-4 w-4 text-[var(--mask-icon)]"}),o.jsx("span",{children:p.label})]},p.label))}),n&&o.jsx("button",{type:"button","aria-label":t?"收起快捷操作":"展开快捷操作",className:`${io} ${t?"self-end":"mt-[7px] self-start"}`,onClick:i,children:o.jsx(rc,{expanded:t})})]}),e&&a&&o.jsx("div",{className:"mb-2 grid gap-2",style:{gridTemplateColumns:a.expertCards?"repeat(3, minmax(0, 1fr))":`repeat(${a.prompts.length}, minmax(0, 1fr))`},children:a.expertCards?a.expertCards.map(p=>o.jsx("button",{type:"button",onClick:()=>f(p),className:co,children:o.jsx("p",{className:"line-clamp-4 text-[13px] leading-[20px] text-[var(--text-secondary)]",children:ac(p)})},p.agentId)):a.prompts.map(p=>o.jsx("button",{type:"button",onClick:()=>g(p),className:lo,children:p},p))})]})}function Ha(e){return e.getAttribute("contenteditable")==="true"}function oc(e,t){return Array.from(e.querySelectorAll('[data-placeholder-control="true"]')).find(n=>n.dataset.placeholderId===t)??null}function wr(e,t){return Array.from(e.querySelectorAll("[data-block-index]")).find(n=>Number(n.dataset.blockIndex)===t)??null}function ic(e,t,n,r){const a=wr(e,t),s=window.getSelection();if(!a||!s)return!1;a.focus(),r();const l=document.createRange();return l.selectNodeContents(a),l.collapse(n==="start"),s.removeAllRanges(),s.addRange(l),!0}function Ir(e,t,n,r){const a=oc(e,t);if(!a)return!1;if(a.focus(),a instanceof HTMLInputElement){const s=n==="start"?0:a.value.length;a.setSelectionRange(s,s)}else Ha(a)&&fc(a,n);return r(t),!0}function nn(e,t,n){const r=window.getSelection();if(!r)return!1;e.focus(),n();const a=document.createRange();return a.selectNodeContents(e),a.collapse(t==="start"),r.removeAllRanges(),r.addRange(a),!0}function kr(e,t,n,r,a,s){const l=t.blocks[n];return l?l.type==="fixed"?ic(e,n,r,s):Ir(e,l.placeholder.id,r,a):nn(e,r,s)}function or(e,t,n,r,a,s){const l=r==="left"?n-1:n+1;return kr(e,t,l,r==="left"?"end":"start",a,s)}function ir(e,t){return e.blocks.findIndex(n=>n.type==="placeholder"&&n.placeholder.id===t)}function cc(e,t){const n=e.blocks[t+1];return t===e.blocks.length-2&&(n==null?void 0:n.type)==="fixed"&&n.content.length===0}function fa(e,t){const n=t.startContainer,r=n instanceof Element?n:n.parentElement,a=r==null?void 0:r.closest("[data-block-index]");if(!a||!e.contains(a))return null;const s=Number(a.dataset.blockIndex);return Number.isFinite(s)?s:null}function Wa(e,t){if(!t.contains(e.startContainer))return null;const n=document.createRange();return n.selectNodeContents(t),n.setEnd(e.startContainer,e.startOffset),n.toString().length}function Va(e,t,n){var a;const r=Wa(e,t);return r===null?!1:n==="start"?r===0:r===((a=t.textContent)==null?void 0:a.length)}function ha(e,t,n){return Va(e,t,n)}function lc(e){const t=document.activeElement;return!(t instanceof HTMLElement)||!e.contains(t)?null:t.dataset.placeholderControl==="true"?t:null}function dc(e,t){const n=e.selectionStart??0,r=e.selectionEnd??n;return n!==r?!1:t==="left"?n===0:r===e.value.length}function uc(e,t){const n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);let r=n.nextNode(),a=null;for(;r;){if(r.data.length>0&&(a=r,t==="start"))return a;r=n.nextNode()}return a}function fc(e,t){const n=window.getSelection();if(!n)return!1;const r=document.createRange(),a=uc(e,t);return a?r.setStart(a,t==="start"?0:a.data.length):(r.selectNodeContents(e),r.collapse(t==="start")),r.collapse(!0),n.removeAllRanges(),n.addRange(r),!0}function hc(e,t){const n=window.getSelection();if(!n||n.rangeCount===0)return!1;const r=n.getRangeAt(0);return r.collapsed?Va(r,e,t==="left"?"start":"end"):!1}function pa(e,t){return e instanceof HTMLInputElement?dc(e,t):Ha(e)?hc(e,t):!0}function pc({containerRef:e,parsed:t,onFocus:n,onBlur:r,onDelete:a}){c.useEffect(()=>{const s=e.current;if(!s)return;const l=h=>{const d=lc(s),g=window.getSelection(),f=g!=null&&g.rangeCount?g.getRangeAt(0):null;if(h.key==="Backspace"&&f&&f.collapsed){const k=fa(s,f),b=k!==null?wr(s,k):null;if(b&&ha(f,b,"start")&&k!==null){const j=k-1;if(j>=0){const y=t.blocks[j];if((y==null?void 0:y.type)==="placeholder"){h.preventDefault(),a==null||a(y.placeholder.id);const C=j-1,D=t.blocks[C];(D==null?void 0:D.type)==="fixed"?kr(s,t,C,"end",n,r):(D==null?void 0:D.type)==="placeholder"?Ir(s,D.placeholder.id,"end",n):nn(s,"end",r);return}}}if(k!==null)return;if(d){const j=d.dataset.placeholderId;if(!j)return;const y=ir(t,j);if(y<0)return;const C=t.blocks[y];if((C==null?void 0:C.type)!=="placeholder")return;if(Wa(f,d)===0){h.preventDefault(),a==null||a(j);const E=y-1;if(E>=0){const S=t.blocks[E];(S==null?void 0:S.type)==="fixed"?kr(s,t,E,"end",n,r):(S==null?void 0:S.type)==="placeholder"?Ir(s,S.placeholder.id,"end",n):nn(s,"end",r)}else nn(s,"start",r);return}}return}if(h.key==="End"){if(h.shiftKey||h.altKey||h.ctrlKey||h.metaKey||!d||!pa(d,"right"))return;const k=d.dataset.placeholderId;if(!k)return;const b=ir(t,k);if(b<0||!cc(t,b))return;h.preventDefault(),or(s,t,b,"right",n,r);return}if(h.key!=="ArrowLeft"&&h.key!=="ArrowRight"||h.shiftKey||h.altKey||h.ctrlKey||h.metaKey)return;const i=h.key==="ArrowLeft"?"left":"right";if(d){const k=d.dataset.placeholderId;if(!k||!pa(d,i))return;const b=ir(t,k);if(b<0)return;h.preventDefault(),or(s,t,b,i,n,r);return}if(!f||!f.collapsed)return;const p=fa(s,f);if(p===null)return;const m=wr(s,p);!m||!ha(f,m,i==="left"?"start":"end")||(h.preventDefault(),or(s,t,p,i,n,r))};return s.addEventListener("keydown",l),()=>s.removeEventListener("keydown",l)},[e,r,n,a,t])}async function mc(){try{const e=await le("/api/projects/cwd");if(!e.ok)return null;const t=await e.json().catch(()=>null),n=typeof(t==null?void 0:t.workspacePath)=="string"?t.workspacePath.trim():"";return eo(n)||null}catch{return null}}function gc(){const e=oe(l=>l.setFileValue),t=oe(l=>l.removeFileValue),n=oe(l=>l.setWorkspacePath),r=oe(l=>l.workspacePath),a=c.useCallback(async(l,h)=>{const d=(r==null?void 0:r.trim())||await mc();d&&n(d);const g=Ra(d??"",h.name);return e(l,{path:g,name:h.name,file:h}),{path:g,name:h.name}},[e,n,r]),s=c.useCallback(l=>{t(l)},[t]);return{uploadFile:a,deleteFile:s}}function xc({placeholder:e,isActive:t,onFocus:n,onBlur:r,onDelete:a,onTabNext:s}){const l=oe(j=>j.fileValues[e.id]??null),{uploadFile:h,deleteFile:d}=gc(),[g,f]=c.useState(!1),i=l!==null,p=c.useCallback(j=>{j.stopPropagation(),i&&d(e.id)},[i,e.id,d]),m=c.useCallback(()=>{if(i)return;const j=document.createElement("input");j.type="file",j.accept=e.formats.length>0?`.${e.formats.join(",.")}`:"*/*",j.onchange=async y=>{var D;const C=(D=y.target.files)==null?void 0:D[0];C&&await h(e.id,C)},j.click()},[i,e.id,e.formats,h]),v=c.useCallback(j=>{if(j.key==="Tab"){j.preventDefault(),s();return}},[s]),k=c.useCallback(()=>{n()},[n]),b=c.useCallback(()=>{r()},[r]);return o.jsxs("span",{className:"inline-flex items-center gap-[2px] rounded-[6px] px-[4px] py-[1px] cursor-pointer whitespace-pre-wrap break-words [overflow-wrap:anywhere]",style:{backgroundColor:"rgba(20, 118, 255, 0.08)",color:i?"rgba(20, 118, 255, 1)":"rgba(20, 118, 255, 0.4)"},onClick:m,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),onKeyDown:v,onFocus:k,onBlur:b,tabIndex:0,"data-placeholder-id":e.id,"data-placeholder-control":"true","data-placeholder-type":"file",role:"button","aria-label":i?`已上传: ${l.name}`:e.defaultText,children:[o.jsx("span",{"aria-hidden":"true",className:"inline-flex items-center justify-center w-[16px] h-[16px] flex-shrink-0",onClick:p,children:i&&g?o.jsx("img",{src:"/icons/common-delete.svg",alt:"",className:"w-[16px] h-[16px]"}):i?o.jsx("img",{src:Ao(l.name),alt:"",className:"w-[16px] h-[16px]"}):o.jsx("img",{src:"/icons/icon-upload.svg",alt:"",className:"w-[16px] h-[16px]"})}),o.jsx("span",{className:"inline-block",style:{wordBreak:"break-word"},children:i?l.name:e.defaultText})]})}function vc({placeholder:e,isActive:t,skillOptions:n,quickActionOptions:r,onFocus:a,onBlur:s,onDelete:l,onTabNext:h}){const d=c.useRef(null),g=c.useRef(!1),f=oe(S=>S.textValues[e.id]??""),i=oe(S=>S.setTextValue),p=c.useMemo(()=>un(f,n,r,{allowTerminalMention:!0}),[r,n,f]),m=c.useMemo(()=>p.some(S=>S.type!=="text"),[p]),v=c.useMemo(()=>p.map(S=>S.type==="text"?`t:${S.text}`:S.type==="mention"?`m:${S.text}`:S.type==="skill"?`s:${S.token}`:`q:${S.token}`).join(""),[p]);c.useLayoutEffect(()=>{const S=d.current;if(!S||g.current)return;const N=Array.from(S.childNodes).map(F=>ae(F)).join(""),P=Array.from(S.childNodes).map(F=>fn(F)).join("");if(N===f&&P===v)return;const L=window.getSelection(),$=document.activeElement===S&&L&&L.rangeCount>0?bc(S,L.getRangeAt(0)):null;hn(S,m?p:[{type:"text",text:f}]),$&&yc(S,$.start,$.end)},[m,p,v,f]),c.useLayoutEffect(()=>{const S=d.current;if(t&&S&&document.activeElement!==S){S.focus();const N=window.getSelection();if(!N)return;const P=document.createRange();P.selectNodeContents(S),P.collapse(!1),N.removeAllRanges(),N.addRange(P)}},[t]);const k=c.useCallback(S=>{if(g.current)return;const N=Array.from(S.currentTarget.childNodes).map(P=>ae(P)).join("");i(e.id,N)},[e.id,i]),b=c.useCallback(()=>{g.current=!0},[]),j=c.useCallback(S=>{g.current=!1;const N=Array.from(S.currentTarget.childNodes).map(P=>ae(P)).join("");i(e.id,N)},[e.id,i]),y=c.useCallback(S=>{if(S.key==="Tab"){S.preventDefault(),h();return}if(S.key==="Backspace"&&f.length===0){S.preventDefault(),l();return}},[f.length,l,h]),C=c.useCallback(()=>{a()},[a]),D=c.useCallback(()=>{s()},[s]),E=f.length===0;return o.jsx("span",{ref:d,contentEditable:!0,suppressContentEditableWarning:!0,className:"prompt-placeholder-text inline rounded-[6px] px-[4px] py-[1px] align-baseline outline-none whitespace-pre-wrap break-words [overflow-wrap:anywhere]",style:{backgroundColor:"rgba(20, 118, 255, 0.08)",color:E?"rgba(20, 118, 255, 0.4)":"rgba(20, 118, 255, 1)"},onInput:k,onCompositionStart:b,onCompositionEnd:j,onKeyDown:y,onFocus:C,onBlur:D,"data-placeholder":e.defaultText,"data-placeholder-empty":E?"true":"false","data-placeholder-id":e.id,"data-placeholder-control":"true","data-placeholder-type":"text"})}function bc(e,t){if(!e.contains(t.startContainer)||!e.contains(t.endContainer))return null;const n=document.createRange();n.selectNodeContents(e),n.setEnd(t.startContainer,t.startOffset);const r=document.createRange();return r.selectNodeContents(e),r.setEnd(t.endContainer,t.endOffset),{start:ma(n),end:ma(r)}}function ma(e){const t=e.cloneContents();let n="";for(const r of Array.from(t.childNodes))n+=ae(r);return n.length}function yc(e,t,n){const r=[];let a=0;const s=i=>{if(i.nodeType===Node.TEXT_NODE){const m=i.textContent??"";r.push({node:i,start:a,end:a+m.length}),a+=m.length;return}if(i.nodeType!==Node.ELEMENT_NODE)return;const p=i;if(p.dataset.tokenType==="skill"||p.dataset.tokenType==="quick-action"){const m=p.dataset.tokenValue??"";r.push({node:i,start:a,end:a+m.length}),a+=m.length;return}for(const m of Array.from(i.childNodes))s(m)};s(e);const l=i=>{for(const p of r)if(i<=p.end){if(p.node.nodeType===Node.TEXT_NODE)return{node:p.node,offset:Math.max(0,Math.min((p.node.textContent??"").length,i-p.start))};const m=p.node.parentNode;if(m){const v=Array.prototype.indexOf.call(m.childNodes,p.node);return i-p.start<=0?{node:m,offset:v}:{node:m,offset:v+1}}}return{node:e,offset:e.childNodes.length}},h=window.getSelection();if(!h)return;const d=document.createRange(),g=l(t),f=l(n);d.setStart(g.node,g.offset),d.setEnd(f.node,f.offset),h.removeAllRanges(),h.addRange(d)}function wc(e){e.stopPropagation();const t=window.getSelection();if(!t)return;let n=null;if(typeof document.caretRangeFromPoint=="function")n=document.caretRangeFromPoint(e.clientX,e.clientY);else if(document.caretPositionFromPoint){const r=document.caretPositionFromPoint(e.clientX,e.clientY);r&&(n=document.createRange(),n.setStart(r.offsetNode,r.offset))}n||(n=document.createRange(),n.selectNodeContents(e.currentTarget),n.collapse((e.currentTarget.textContent??"").length===0)),t.removeAllRanges(),t.addRange(n)}function Ic({blockIndex:e,content:t,skillOptions:n,quickActionOptions:r,isTerminalCaretTarget:a=!1}){const s=c.useRef(null),l=c.useMemo(()=>un(t,n,r,{allowTerminalMention:!0}),[t,r,n]),h=c.useMemo(()=>l.map(d=>d.type==="text"?`t:${d.text}`:d.type==="mention"?`m:${d.text}`:d.type==="skill"?`s:${d.token}`:`q:${d.token}`).join(""),[l]);return c.useLayoutEffect(()=>{const d=s.current;if(!d)return;const g=Array.from(d.childNodes).map(i=>ae(i)).join(""),f=Array.from(d.childNodes).map(i=>fn(i)).join("");g===t&&f===h||hn(d,l)},[t,l,h]),o.jsx("span",{ref:s,contentEditable:!0,suppressContentEditableWarning:!0,className:a?"inline-block min-w-[1px] align-baseline outline-none focus:outline-none":"outline-none focus:outline-none","data-block-index":e,onClick:wc})}const kc=c.forwardRef(function({parsed:t,activePlaceholderId:n,onFocus:r,onBlur:a,onDelete:s,onTabNext:l,onInput:h,onKeyDown:d,onPaste:g,onScroll:f,skillOptions:i=[],quickActionOptions:p=[],className:m,style:v},k){const b=c.useRef(null);c.useImperativeHandle(k,()=>b.current);const j=c.useCallback(E=>r(E),[r]),y=c.useCallback(()=>a(),[a]),C=c.useCallback(E=>s(E),[s]),D=c.useCallback(E=>l(E),[l]);return pc({containerRef:b,parsed:t,onFocus:r,onBlur:a,onDelete:C}),o.jsx("div",{ref:b,className:m?`${m} outline-none`:"outline-none",style:v,tabIndex:0,role:"textbox","aria-multiline":"true",onInput:h,onKeyDown:E=>{E.defaultPrevented||d==null||d(E)},onPaste:g,onScroll:f,children:t.blocks.map((E,S)=>{if(E.type==="fixed")return o.jsx(Ic,{blockIndex:S,content:E.content,skillOptions:i,quickActionOptions:p,isTerminalCaretTarget:S===t.blocks.length-1&&E.content.length===0},`fixed-${S}`);if(E.type==="placeholder"){const N=E.placeholder,P=N.id===n;if(N.type==="text")return o.jsx(vc,{placeholder:N,isActive:P,skillOptions:i,quickActionOptions:p,onFocus:()=>j(N.id),onBlur:y,onDelete:()=>C(N.id),onTabNext:()=>D(N.id)},N.id);if(N.type==="file")return o.jsx(xc,{placeholder:N,isActive:P,onFocus:()=>j(N.id),onBlur:y,onDelete:()=>C(N.id),onTabNext:()=>D(N.id)},N.id)}return null})})}),ga=100,Sc=1e3;function Sr(e){return Array.from(e.childNodes).map(t=>ae(t)).join("")}function Tc(e){const t=[];let n=0;for(const r of Array.from(e.childNodes)){const a=ae(r);if(r instanceof HTMLElement){const s=r.dataset.blockIndex!==void 0,l=r.dataset.placeholderControl==="true"&&r.dataset.placeholderType==="text";t.push({element:r,start:n,end:n+a.length,editable:s||l})}n+=a.length}return t}function Ec(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n+=1;let r=e.length,a=t.length;for(;r>n&&a>n&&e[r-1]===t[a-1];)r-=1,a-=1;return{start:n,end:r,inserted:t.slice(n,a)}}function Cc(e,t,n){const r=document.activeElement,a=r instanceof HTMLElement?e.find(s=>s.element===r||s.element.contains(r)):null;if(a!=null&&a.editable&&t>=a.start&&n<=a.end)return a;if(t===n){const s=e.find(l=>l.editable&&l.element.dataset.placeholderControl==="true"&&l.element.dataset.placeholderType==="text"&&t===l.start);if(s)return s}return e.find(s=>s.editable?t===n?t>=s.start&&t<=s.end:t>=s.start&&n<=s.end:!1)??null}function Nc(e){const t=document.activeElement;if(t instanceof HTMLElement){const n=e.find(r=>r.element===t||r.element.contains(t));if(n!=null&&n.editable&&n.element.dataset.placeholderControl==="true"&&n.element.dataset.placeholderType==="text")return n}return e.find(n=>n.editable&&n.element.dataset.placeholderControl==="true"&&n.element.dataset.placeholderType==="text")??null}function xa(e,t){const n=typeof InputEvent=="function"?new InputEvent("input",{bubbles:!0,inputType:"insertReplacementText",data:t}):new Event("input",{bubbles:!0});e.dispatchEvent(n)}function va(e,t,n,r){hn(e,un(t,n,r,{allowTerminalMention:!0}))}function jc(e,t,n,r,a,s){const l=Sr(e);if(l===t)return Pe(e,n,r),!0;const h=Ec(l,t),d=Tc(e),g=Cc(d,h.start,h.end);if(!g){const v=Nc(d);if(!v)return!1;va(v.element,t,a,s);const k=Math.max(0,Math.min(t.length,n)),b=Math.max(k,Math.min(t.length,r));return Pe(e,v.start+k,v.start+b),xa(v.element,t),!0}const f=ae(g.element),i=Math.max(0,h.start-g.start),p=Math.max(i,h.end-g.start),m=`${f.slice(0,i)}${h.inserted}${f.slice(p)}`;return va(g.element,m,a,s),Pe(e,n,r),xa(g.element,h.inserted),!0}function Ka(e){const t=[];let n=0;const r=a=>{if(a.nodeType===Node.TEXT_NODE){const l=a.textContent??"";t.push({node:a,start:n,end:n+l.length}),n+=l.length;return}if(a.nodeType!==Node.ELEMENT_NODE)return;const s=a;if(s.dataset.tokenType==="skill"||s.dataset.tokenType==="quick-action"){const l=s.dataset.tokenValue??"";t.push({node:s,start:n,end:n+l.length}),n+=l.length;return}for(const l of Array.from(a.childNodes))r(l)};return r(e),t}function se(e,t){const n=window.getSelection();if(!n||n.rangeCount===0)return 0;const r=n.getRangeAt(0),a=document.createRange();a.selectNodeContents(e),a.setEnd(t?r.endContainer:r.startContainer,t?r.endOffset:r.startOffset);const s=a.cloneContents();let l="";for(const h of Array.from(s.childNodes))l+=ae(h);return l.length}function Pe(e,t,n){const r=Ka(e),a=g=>{for(const f of r)if(g<=f.end){if(f.node.nodeType===Node.TEXT_NODE)return{node:f.node,offset:Math.max(0,Math.min((f.node.textContent??"").length,g-f.start))};const i=f.node.parentNode;if(i){const p=Array.prototype.indexOf.call(i.childNodes,f.node);return g-f.start<=0?{node:i,offset:p}:{node:i,offset:p+1}}}return{node:e,offset:e.childNodes.length}},s=a(t),l=a(n),h=document.createRange();h.setStart(s.node,s.offset),h.setEnd(l.node,l.offset);const d=window.getSelection();d&&(d.removeAllRanges(),d.addRange(h))}function Ae(e,t,n,r){if(Ee(e))return{value:"",start:0,end:0};if(!r||r<=0||e.length<=r)return{value:e,start:t,end:n};const a=e.slice(0,r);return{value:a,start:Math.min(t,a.length),end:Math.min(n,a.length)}}function cr(e,t,n,r){t.length===0?e.replaceChildren():e.replaceChildren(document.createTextNode(t)),Pe(e,n,r)}function _c(e,t){const n=Ka(e);for(const r of n)if(t<=r.end){if(r.node.nodeType===Node.TEXT_NODE){const s=(r.node.textContent??"").length;return{node:r.node,offset:Math.max(0,Math.min(s,t-r.start))}}const a=r.node.parentNode;if(a){const s=Array.prototype.indexOf.call(a.childNodes,r.node);return t-r.start<=0?{node:a,offset:s}:{node:a,offset:s+1}}}return{node:e,offset:e.childNodes.length}}function Ac(e,t){try{const n=_c(e,t),r=document.createRange();r.setStart(n.node,n.offset),r.setEnd(n.node,n.offset);const a=r.getBoundingClientRect();if(a.width!==0||a.height!==0)return a;const s=e.getBoundingClientRect();return s.width>0||s.height>0?s:null}catch{return null}}function Dc(e){return e.key.length===1?!0:e.key==="Enter"}function lr(e){return{...e}}function Rc(e,t){return e.value===t.value&&e.start===t.start&&e.end===t.end}function Pc(e){return e==="insertText"||e==="deleteContentBackward"||e==="deleteContentForward"?e:null}const Mc=c.forwardRef(function({value:t,onValueChange:n,mentionDataVersion:r=0,onCompositionStateChange:a,onInput:s,onKeyDown:l,onPaste:h,onScroll:d,placeholder:g,className:f,style:i,disabled:p,maxLength:m,skillOptions:v=[],quickActionOptions:k=[],promptBlocks:b=null},j){const y=c.useRef(null),C=b!==null,D=c.useRef(!1),E=c.useRef(null),S=c.useRef(!1),N=c.useRef({value:t,start:0,end:0}),P=c.useRef([]),L=c.useRef([]),x=c.useRef(!1),$=c.useRef(null),A=c.useRef(C),F=c.useRef({action:null,timestamp:0}),[w,R]=c.useState(()=>Ee(t)),O=c.useMemo(()=>un(t,v,k,{allowTerminalMention:!0}),[t,v,k,r]),B=c.useMemo(()=>`${r}::`+O.map(T=>T.type==="text"?`t:${T.text}`:T.type==="mention"?`m:${T.text}`:T.type==="skill"?`s:${T.token}`:T.type==="quick_action"?`q:${T.token}`:"").join(""),[O,r]);c.useImperativeHandle(j,()=>({focus:()=>{var T;return(T=y.current)==null?void 0:T.focus()},getSelectionStart:()=>{const T=y.current;return T?se(T,!1):0},getSelectionEnd:()=>{const T=y.current;return T?se(T,!0):0},setSelectionRange:(T,z)=>{const H=y.current;H&&Pe(H,T,z)},getElement:()=>y.current,getClientRectAtOffset:T=>{const z=y.current;return z?Ac(z,T):null},applyProgrammaticChange:(T,z,H)=>{if(C){const Q=y.current;if(!Q)return;const Y=Ae(T,z,H,m);jc(Q,Y.value,Y.start,Y.end,v,k);return}const G=Ae(T,z,H,m);I(G,"insertReplacementText")}}));const q=()=>{F.current={action:null,timestamp:0}},M=(T,z)=>{const H=lr(z),G=T.current[T.current.length-1];G&&Rc(G,H)||(T.current.push(H),T.current.length>ga&&T.current.splice(0,T.current.length-ga))},u=T=>{const z=y.current,H=lr(T);N.current=H,E.current={start:H.start,end:H.end},x.current=!0,R(Ee(H.value)),z&&cr(z,H.value,H.start,H.end),n(H.value,H.start,H.end),s==null||s()},I=(T,z="")=>{const H=lr(T),G=N.current;if(G.value!==H.value){const Y=Pc(z),ne=Date.now();Y!==null&&F.current.action===Y&&ne-F.current.timestamp<=Sc||M(P,G),L.current=[],F.current={action:Y,timestamp:ne}}else q();N.current=H,E.current={start:H.start,end:H.end},x.current=!0,R(Ee(H.value)),n(H.value,H.start,H.end),s==null||s()},_=()=>{const T=P.current.pop();T&&(M(L,N.current),q(),u(T))},W=()=>{const T=L.current.pop();T&&(M(P,N.current),q(),u(T))},V=T=>{$.current=T,requestAnimationFrame(()=>{$.current===T&&($.current=null)})};c.useLayoutEffect(()=>{if(C)return;const T=y.current;if(!T||D.current)return;const z=Array.from(T.childNodes).map(ge=>ae(ge)).join(""),H=Array.from(T.childNodes).map(ge=>fn(ge)).join("");if(z===t&&H===B)return;const G=document.activeElement===T,Q=G?E.current:null,Y=G?(Q==null?void 0:Q.start)??se(T,!1):0,ne=G?(Q==null?void 0:Q.end)??se(T,!0):0;Q&&(E.current=null);const te=T.scrollTop,ce=T.clientHeight,ue=T.scrollHeight,Ie=te+ce>=ue-2;if(hn(T,O),G){const ge=Math.min(Y,t.length),xe=Math.min(ne,t.length);Pe(T,ge,xe),S.current?(S.current=!1,T.scrollTop=T.scrollHeight):Ie?T.scrollTop=T.scrollHeight:T.scrollTop=te}},[C,O,B,t]),c.useLayoutEffect(()=>{const T=A.current;if(A.current=C,!T||C)return;const z=y.current;z&&(z.focus(),Pe(z,t.length,t.length))},[C,t]),c.useEffect(()=>{if(C){R(!1);return}D.current||R(Ee(t))},[C,t]),c.useEffect(()=>{if(C)return;if(x.current){x.current=!1;return}const T=N.current;T.value!==t&&(N.current={value:t,start:Math.min(T.start,t.length),end:Math.min(T.end,t.length)},P.current=[],L.current=[],q())},[C,t]),c.useLayoutEffect(()=>{if(!C)return;const T=y.current;if(!T)return;const z=Sr(T),H=se(T,!1),G=se(T,!0),Q=Ae(z,H,G,m);N.current=Q,t!==Q.value&&(E.current={start:Q.start,end:Q.end},n(Q.value,Q.start,Q.end))},[C,m,n,t]);const Z=T=>T?T instanceof HTMLElement?T:T instanceof Text?T.parentElement:null:null,K=()=>{const T=y.current;if(!T)return;const z=Sr(T),H=se(T,!1),G=se(T,!0),Q=Ae(z,H,G,m);N.current=Q,E.current={start:Q.start,end:Q.end},n(Q.value,Q.start,Q.end),s==null||s()};return o.jsxs("div",{className:"relative",children:[!C&&w&&g&&o.jsx("div",{className:"pointer-events-none absolute left-[18px] top-4 text-[16px] text-[var(--text-field-placeholder)]",children:g}),C&&b?o.jsx(kc,{ref:y,...b,className:f,style:i,skillOptions:v,quickActionOptions:k,onInput:K,onKeyDown:l,onPaste:h,onScroll:d}):o.jsx("div",{ref:y,contentEditable:!p,suppressContentEditableWarning:!0,className:f,style:i,role:"textbox","aria-multiline":"true",onMouseDown:T=>{const z=Z(T.target),H=z==null?void 0:z.closest('[data-remove-quick-action="1"]');if(!H)return;const G=H.closest('[data-token-type="quick-action"]'),Q=(G==null?void 0:G.dataset.tokenValue)??"";if(!Q)return;T.preventDefault();const Y=t.indexOf(Q);if(Y<0)return;const te=`${t.slice(0,Y)}${t.slice(Y+Q.length)}`.replace(/\s{2,}/g," ").trimStart(),ce=Math.min(Y,te.length);I({value:te,start:ce,end:ce},"deleteContentBackward")},onMouseDownCapture:T=>{const z=Z(T.target);!z||!z.closest('[data-token-type="skill"]')||T.preventDefault()},onInput:T=>{const H=T.nativeEvent.inputType??"";if($.current===H){$.current=null;return}if(H==="historyUndo"){_();return}if(H==="historyRedo"){W();return}const G=y.current;if(!G)return;if(D.current){s==null||s();return}const Q=Array.from(G.childNodes).map(ce=>ae(ce)).join(""),Y=se(G,!1),ne=se(G,!0),te=Ae(Q,Y,ne,m);E.current={start:te.start,end:te.end},te.value!==Q&&cr(T.currentTarget,te.value,te.start,te.end),I(te,H)},onBeforeInput:T=>{const z=y.current,H=T.nativeEvent,G=H.inputType??"";if(G==="historyUndo"){T.preventDefault(),V("historyUndo"),_();return}if(G==="historyRedo"){T.preventDefault(),V("historyRedo"),W();return}if(!z||!m||m<=0||D.current||G.includes("Composition")||!G.startsWith("insert"))return;const Q=Array.from(z.childNodes).map(Ie=>ae(Ie)).join(""),Y=se(z,!1),ne=se(z,!0),te=Math.max(0,ne-Y),ce=H.data!=null?H.data.length:1;Q.length-te+ce>m&&T.preventDefault()},onCompositionStart:()=>{D.current=!0,R(!1),a==null||a(!0)},onCompositionEnd:()=>{D.current=!1,a==null||a(!1);const T=y.current;if(!T)return;const z=Array.from(T.childNodes).map(Y=>ae(Y)).join(""),H=se(T,!1),G=se(T,!0),Q=Ae(z,H,G,m);Q.value!==z&&cr(T,Q.value,Q.start,Q.end),I(Q,"insertCompositionText")},onKeyDown:T=>{const z=(T.ctrlKey||T.metaKey)&&!T.altKey&&!T.shiftKey&&T.key.toLowerCase()==="z",H=(T.ctrlKey||T.metaKey)&&!T.altKey&&(T.shiftKey&&T.key.toLowerCase()==="z"||!T.shiftKey&&T.key.toLowerCase()==="y");if(z){T.preventDefault(),_();return}if(H){T.preventDefault(),W();return}const G=y.current;if(G&&m&&m>0&&!D.current&&!(T.ctrlKey||T.metaKey||T.altKey)&&Dc(T)){const Y=Array.from(G.childNodes).map(ue=>ae(ue)).join(""),ne=se(G,!1);!(se(G,!0)>ne)&&Y.length>=m&&T.preventDefault()}l==null||l(T)},onPaste:T=>{var ce;if(h==null||h(T),T.defaultPrevented)return;T.preventDefault();const z=y.current;if(!z)return;const H=(((ce=T.clipboardData)==null?void 0:ce.getData("text/plain"))??"").replace(/\r\n?/g,`
|
|
5
|
+
`),G=se(z,!1),Q=se(z,!0),Y=`${t.slice(0,G)}${H}${t.slice(Q)}`,ne=G+H.length,te=Ae(Y,ne,ne,m);S.current=H.length>0,I(te,"insertFromPaste"),H.length>0&&requestAnimationFrame(()=>{const ue=y.current;ue&&(ue.scrollTop=ue.scrollHeight)})},onScroll:d})]})});function Lc({trigger:e,options:t,align:n="right",menuClassName:r,menuWidth:a,menuItemClassName:s}){var N,P,L;const[l,h]=c.useState(!1),[d,g]=c.useState(-1),[f,i]=c.useState(null),p=c.useRef(null),m=c.useRef(null),v=c.useRef(null),k=c.useRef([]),b=t.filter(x=>x.type!=="divider"&&!x.disabled);c.useEffect(()=>{const x=$=>{l&&p.current&&!p.current.contains($.target)&&v.current&&!v.current.contains($.target)&&(h(!1),g(-1),i(null))};return l&&document.addEventListener("mousedown",x),()=>{document.removeEventListener("mousedown",x)}},[l]);const j=(x,$)=>{if(!x.disabled){if(x.children&&x.children.length>0){i(f===$?null:$);return}x.onClick(),h(!1),g(-1)}},y=x=>{var $;if(!l){(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),h(!0),g(0));return}switch(x.key){case"Escape":h(!1),g(-1),i(null);break;case"ArrowDown":x.preventDefault(),g(A=>A<b.length-1?A+1:0);break;case"ArrowUp":x.preventDefault(),g(A=>A>0?A-1:b.length-1);break;case"Enter":case" ":if(x.preventDefault(),d>=0&&d<b.length){const A=b[d];A.children&&A.children.length>0?i(f===d?null:d):(A.onClick(),h(!1),g(-1))}break;case"ArrowRight":f!==null&&(($=b[f])!=null&&$.children);break;case"ArrowLeft":f!==null&&i(null);break}},C=()=>{if(!v.current)return{top:0,left:0};const x=v.current.getBoundingClientRect();return{top:x.top,left:x.right}},D=o.jsx("div",{ref:m,onClick:x=>{x.stopPropagation(),h(!l)},onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),x.stopPropagation(),h(!l))},role:"button",tabIndex:0,"aria-haspopup":"true","aria-expanded":l,children:e}),E=(x,$)=>{if(x.type==="divider")return o.jsx("div",{role:"separator",style:{height:"1px",backgroundColor:"rgba(0,0,0,0.08)",marginTop:"4px",marginBottom:"4px"}},$);const A=x.disabled,F=b[d]===x,w=x.children&&x.children.length>0,R=f===$,O=s?"":`w-full text-left text-sm transition-colors text-[#191919] ${F?"bg-[rgba(245,245,245,1)]":"hover:bg-[rgba(245,245,245,1)]"}`;return o.jsxs("div",{style:{position:"relative"},children:[o.jsxs("button",{ref:B=>{k.current[$]=B},type:"button",role:"menuitem","data-testid":x.testId,disabled:A,onClick:()=>j(x,$),onMouseEnter:()=>{w&&i($)},title:x.label,"aria-haspopup":w?"true":void 0,"aria-expanded":w?R:void 0,className:s??O,style:s?{opacity:A?.4:1,cursor:A?"not-allowed":"pointer"}:{height:"32px",paddingLeft:"16px",paddingRight:w?"8px":"16px",maxWidth:"200px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",opacity:A?.4:1,cursor:A?"not-allowed":"pointer",display:"flex",alignItems:"center",gap:"8px"},children:[x.icon&&o.jsx("span",{style:{display:"flex",alignItems:"center"},children:x.icon}),o.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis"},children:x.label}),w&&o.jsx("span",{style:{fontSize:"10px"},children:"▶"})]}),w&&R&&o.jsx("div",{role:"menu",className:"fixed z-[9999] rounded-lg bg-[var(--surface-card)] overflow-hidden",style:{top:C().top+$*32,left:C().left,boxShadow:"0px 2px 12px rgba(0,0,0,0.16)",paddingTop:"8px",paddingBottom:"8px",minWidth:"180px"},children:x.children.map((B,q)=>E(B,$*1e3+q))})]},$)},S=l?o.jsx("div",{ref:v,role:"menu",onMouseDown:x=>{x.stopPropagation()},onClick:x=>{x.stopPropagation()},className:`fixed z-[9999] rounded-lg bg-[var(--surface-card)] overflow-hidden ${r??""}`,style:{top:((N=m.current)==null?void 0:N.getBoundingClientRect().bottom)??0,boxShadow:"0px 2px 12px rgba(0,0,0,0.16)",paddingTop:"8px",paddingBottom:"8px",...n==="right"?{right:window.innerWidth-(((P=m.current)==null?void 0:P.getBoundingClientRect().right)??0)}:{left:((L=m.current)==null?void 0:L.getBoundingClientRect().left)??0},...a?{width:a}:{}},children:t.map((x,$)=>E(x,$))}):null;return o.jsxs("div",{ref:p,className:"relative inline-block",onKeyDown:y,children:[D,l&&ln.createPortal(S,document.body)]})}function $c({open:e,title:t,message:n,inputValue:r,inputPlaceholder:a,confirmLabel:s="确认",cancelLabel:l="取消",confirmDisabled:h=!1,modalTestId:d,onConfirm:g,onCancel:f,onInputChange:i}){const p=c.useRef(null),[m,v]=c.useState(r);if(c.useEffect(()=>{e&&(v(r),setTimeout(()=>{var b,j;(b=p.current)==null||b.focus(),(j=p.current)==null||j.select()},50))},[e]),c.useEffect(()=>{if(!e)return;const b=j=>{j.key==="Escape"&&f()};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[e,f]),!e)return null;const k=()=>{g(m)};return o.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-[var(--overlay-backdrop-medium)]",children:o.jsx("div",{className:"w-[400px] rounded-[8px] border border-[var(--modal-border)] bg-[var(--modal-surface)] p-6 shadow-[var(--modal-shadow)]","data-testid":d,children:o.jsxs("div",{className:"flex flex-col gap-4",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsx("h3",{className:"text-[16px] font-bold text-[var(--modal-title-text)]",children:t}),o.jsx("button",{type:"button",onClick:f,"aria-label":"close",className:"flex h-6 w-6 items-center justify-center rounded text-[var(--text-label-secondary)] transition-colors hover:text-[var(--text-primary)]",style:{transform:"translate(4px, -4px)"},children:o.jsx("svg",{className:"h-4 w-4",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:o.jsx("path",{d:"M18 6L6 18M6 6l12 12"})})})]}),n&&o.jsx("p",{className:"text-sm text-[var(--modal-text-muted)]",children:n}),o.jsx("input",{ref:p,type:"text",value:m,onChange:b=>{v(b.target.value),i==null||i(b.target.value)},onKeyDown:b=>{b.key==="Enter"&&!h&&k()},placeholder:a,className:"ui-input w-full rounded-lg px-3 py-2 text-sm"}),o.jsxs("div",{className:"flex items-center justify-end gap-2",children:[o.jsx(pt,{onClick:f,color:"default",children:l}),o.jsx(pt,{onClick:k,color:"major",disabled:h,children:s})]})]})})})}const Oc="_container_1wioq_15",Fc="_tabSection_1wioq_31",qc="_tabRow_1wioq_35",Bc="_searchSection_1wioq_41",Uc="_cardGrid_1wioq_46",zc="_grid_1wioq_63",Hc="_closeBtn_1wioq_71",Wc="_card_1wioq_46",Vc="_cardSelected_1wioq_116",Kc="_cardDisabled_1wioq_120",Qc="_previewContainer_1wioq_125",Gc="_previewImage_1wioq_136",Xc="_cardTitleArea_1wioq_142",Jc="_cardName_1wioq_153",Zc="_cardNameTooltip_1wioq_161",Yc="_moreMenuBtn_1wioq_167",el="_cardAction_1wioq_179",tl="_uploadCard_1wioq_210",nl="_uploadCardDragOver_1wioq_229",rl="_uploadCardDisabled_1wioq_235",al="_uploadContent_1wioq_244",sl="_uploadIcon_1wioq_254",ol="_uploadText_1wioq_260",il="_uploadHint_1wioq_266",cl="_uploadCardFull_1wioq_273",ll="_loadingCard_1wioq_286",dl="_loadingLabel_1wioq_303",ul="_failedCard_1wioq_308",fl="_failedTitleArea_1wioq_319",hl="_failedNameArea_1wioq_326",pl="_failedNameTooltip_1wioq_335",ml="_failedInfoIcon_1wioq_349",gl="_failedName_1wioq_326",xl="_failedDeleteBtn_1wioq_367",vl="_failedDeleteIcon_1wioq_380",bl="_emptyState_1wioq_388",X={container:Oc,tabSection:Fc,tabRow:qc,searchSection:Bc,cardGrid:Uc,grid:zc,closeBtn:Hc,card:Wc,cardSelected:Vc,cardDisabled:Kc,previewContainer:Qc,previewImage:Gc,cardTitleArea:Xc,cardName:Jc,cardNameTooltip:Zc,moreMenuBtn:Yc,cardAction:el,uploadCard:tl,uploadCardDragOver:nl,uploadCardDisabled:rl,uploadContent:al,uploadIcon:sl,uploadText:ol,uploadHint:il,uploadCardFull:cl,loadingCard:ll,loadingLabel:dl,failedCard:ul,failedTitleArea:fl,failedNameArea:hl,failedNameTooltip:pl,failedInfoIcon:ml,failedName:gl,failedDeleteBtn:xl,failedDeleteIcon:vl,emptyState:bl},yl=[".pptx"],ba="仅支持 .pptx 格式文件",wl="仅支持上传 100MB 以下的 PPT",pn=30,Il=`上传文件名长度不能超过 ${pn} 个字符(不含 .pptx 后缀)`;function ya(e){return{id:e.templateId,name:e.name,thumbnailUrl:e.previewImageUrl??"",source:e.source==="builtin"?"preset":"my",status:e.status==="ready"?"ready":e.status==="failed"?"failed":"parsing"}}function wa(e){const t=e.name.toLowerCase();return yl.some(n=>t.endsWith(n))}function kl(){return o.jsxs("svg",{className:X.uploadIcon,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[o.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),o.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function Sl({template:e,onMakeSame:t,onRename:n,onDelete:r,isSelected:a}){const s=e.status==="parsing",l=()=>e.source!=="my"||!n||!r?null:o.jsx(Lc,{trigger:o.jsx("button",{type:"button",className:`p-1 rounded hover:bg-[var(--surface-hover)] transition-colors ${X.moreMenuBtn}`,"data-testid":`template-card-menu-trigger-${e.id}`,children:o.jsx("img",{src:"/icons/more-trigger.svg",alt:"更多",className:"h-4 w-4"})}),options:[{label:"重命名",onClick:()=>n(e)},{label:"删除",onClick:()=>r(e),danger:!0}],align:"right",containerClassName:"flex-shrink-0"});return o.jsxs("div",{role:"presentation","aria-disabled":s,className:[X.card,s?X.cardDisabled:"",a?X.cardSelected:""].filter(Boolean).join(" "),"data-testid":`template-card-${e.id}`,children:[o.jsx("div",{className:X.previewContainer,children:e.thumbnailUrl?o.jsx("img",{src:e.thumbnailUrl,alt:e.name,className:X.previewImage,draggable:!1}):o.jsx("img",{src:"/images/ppt-template/template-default.png",alt:e.name,className:X.previewImage,draggable:!1})}),o.jsxs("div",{className:X.cardTitleArea,children:[o.jsx(de,{content:e.name,className:X.cardNameTooltip,children:o.jsx("div",{className:X.cardName,children:e.name})}),l()]}),!s&&o.jsx("div",{className:X.cardAction,children:o.jsx(pt,{variant:"major",onClick:h=>{h.stopPropagation(),t(e)},children:"做同款"})})]})}const Tl=c.memo(Sl);function dr({isDragOver:e,isUploading:t,isGenerating:n,onFileSelect:r,isFull:a}){const s=c.useRef(null),[l,h]=c.useState(!1),d=mt(b=>b.addToast),g=e||l,f=b=>{b.preventDefault(),b.stopPropagation(),t||h(!0)},i=b=>{b.preventDefault(),b.stopPropagation(),h(!1)},p=b=>{if(b.preventDefault(),b.stopPropagation(),h(!1),t||n)return;const j=b.dataTransfer.files;if(j.length===0)return;const y=j[0];if(!wa(y)){d({type:"error",title:"上传失败",message:ba,duration:4e3});return}r(y)},m=()=>{var b;t||n||(b=s.current)==null||b.click()},v=b=>{const j=b.target.files;if(!j||j.length===0)return;const y=j[0];if(!wa(y)){d({type:"error",title:"上传失败",message:ba,duration:4e3});return}r(y),b.target.value=""},k=t||n;return o.jsxs("div",{role:"button",tabIndex:0,"aria-label":"上传 PPT 模板","aria-disabled":k,onClick:m,onDragOver:f,onDragLeave:i,onDrop:p,onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),m())},className:[X.uploadCard,g?X.uploadCardDragOver:"",k?X.uploadCardDisabled:"",a?X.uploadCardFull:""].filter(Boolean).join(" "),"data-testid":"upload-card","data-is-full":a?"true":"false","data-drag-over":g,children:[o.jsx("input",{ref:s,type:"file",accept:".pptx",onChange:v,className:"hidden","aria-hidden":"true",tabIndex:-1}),o.jsxs("div",{className:X.uploadContent,children:[o.jsx(kl,{}),o.jsx("span",{className:X.uploadText,children:"导入模版"}),o.jsx("span",{className:X.uploadHint,children:"拖拽或点击上传 .pptx 文件,大小不超过 100MB"})]})]})}function El({name:e}){return o.jsx("div",{className:X.loadingCard,"aria-label":"模版生成中","data-testid":`loading-card-${e}`,children:o.jsx("span",{className:X.loadingLabel,children:"模版生成中..."})})}function Cl({name:e,onDelete:t}){return o.jsxs("div",{className:[X.loadingCard,X.failedCard].join(" "),"aria-label":"模版生成失败","data-testid":`failed-card-${e}`,children:[o.jsx("div",{className:X.previewContainer,children:o.jsx("img",{src:"/images/ppt-template/template-error.png",alt:e,className:X.previewImage,draggable:!1})}),o.jsxs("div",{className:X.failedTitleArea,children:[o.jsxs("div",{className:X.failedNameArea,children:[o.jsx(de,{content:e,forceShow:!0,className:X.failedNameTooltip,children:o.jsx("span",{className:X.failedName,children:e})}),o.jsx(de,{content:"模版生成失败,请删除后重新上传",forceShow:!0,className:X.failedInfoIcon,children:o.jsx("img",{src:"/icons/status/info-error.svg",alt:"错误",width:16,height:16})})]}),o.jsx("span",{className:X.failedDeleteBtn,onClick:t,"data-testid":`failed-card-delete-${e}`,role:"button",tabIndex:0,onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&t()},children:o.jsx(we,{name:"delete",className:X.failedDeleteIcon})})]})]})}const Nl=[{value:"preset",label:"平台推荐"},{value:"my",label:"我的模板"}];function jl({selectedTemplateId:e,onSelectChange:t,showCloseButton:n=!1,onClose:r}){const[a,s]=c.useState("preset"),[l,h]=c.useState([]),[d,g]=c.useState([]),[f,i]=c.useState(""),[p,m]=c.useState(!1),[v,k]=c.useState([]),[b,j]=c.useState(null),[y,C]=c.useState(""),D=c.useRef(new Set),E=mt(M=>M.addToast),S=Ws(),N=c.useCallback(async()=>{const M=await le("/api/ppt-templates");if(!M.ok)throw new Error(`模板列表加载失败: HTTP ${M.status}`);const I=((await M.json()).templates??[]).map(ya),_=I.filter(V=>V.source==="my"&&V.status==="failed"),W=new Set(_.map(V=>V.id));for(const V of _)D.current.has(V.id)||E({type:"error",title:"模板生成失败",message:`模板“${V.name}”生成失败,请重新上传或删除该模板`,duration:4e3});return D.current=W,h(I.filter(V=>V.source==="preset")),g(I.filter(V=>V.source==="my")),k(I.filter(V=>V.source==="my"&&V.status==="parsing").map(V=>V.id)),I},[E]),P=c.useCallback(M=>{s(M),i("")},[]),L=c.useCallback(M=>{i(M)},[]),x=c.useCallback(()=>{i("")},[]),$=c.useMemo(()=>f?d.filter(M=>M.name.toLowerCase().includes(f.toLowerCase())):d,[f,d]),A=a==="preset"?l:$,F=c.useCallback(M=>{M.status==="ready"&&t(M)},[t]),w=c.useCallback(async M=>{j(M),C(M.name)},[]),R=c.useCallback(async M=>{if(!b)return;const u=Tr(M);if(!u||u===b.name){j(null);return}if(!Dl(u)){E({type:"error",title:"重命名失败",message:Rl(),duration:4e3});return}try{const I=await le(`/api/ppt-templates/${encodeURIComponent(b.id)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u})});if(!I.ok){const _=await I.json().catch(()=>null);throw new Error((_==null?void 0:_.error)??`HTTP ${I.status}`)}await N(),E({type:"success",title:"重命名成功",message:`模板已重命名为"${u}"`,duration:2500})}catch(I){E({type:"error",title:"重命名失败",message:I instanceof Error?I.message:"模板重命名失败",duration:4e3})}finally{j(null)}},[E,N,b]),O=c.useCallback(async M=>{if(await S({title:"确认删除模版",message:`确定要删除模板”${M.name}”吗?删除后,该模版将不可恢复`,confirmLabel:"删除"}))try{const I=await le(`/api/ppt-templates/${encodeURIComponent(M.id)}`,{method:"DELETE"});if(!I.ok){const _=await I.json().catch(()=>null);throw new Error((_==null?void 0:_.error)??`HTTP ${I.status}`)}e===M.id&&t(null),await N(),E({type:"success",title:"删除成功",message:`模板”${M.name}”已删除`,duration:2500})}catch(I){E({type:"error",title:"删除失败",message:I instanceof Error?I.message:"模板删除失败",duration:4e3})}},[E,S,t,N,e]),B=c.useCallback(async M=>{if(M.size>_l){E({type:"error",title:"上传失败",message:wl,duration:4e3});return}const u=M.name.replace(/\.(ppt|pptx)$/i,"").trim();if(u.length>pn){E({type:"error",title:"上传失败",message:Il,duration:4e3});return}const I=Tr(u),_=`uploading-${Date.now()}`,W={id:_,name:I,thumbnailUrl:"",source:"my",status:"parsing"};m(!0),g(V=>[W,...V]);try{const V=new FormData;V.append("file",M),V.append("name",W.name);const Z=await le("/api/ppt-templates/upload",{method:"POST",body:V}),K=await Z.json().catch(()=>null);if(!Z.ok||!(K!=null&&K.template))throw new Error((K==null?void 0:K.error)??`HTTP ${Z.status}`);const T=K.template;g(z=>[ya(T),...z.filter(H=>H.id!==_)]),k(z=>T.status==="ready"?z:Array.from(new Set([...z,T.templateId]))),E({type:"success",title:"上传成功",message:"模板已开始生成",duration:2500})}catch(V){g(T=>T.filter(z=>z.id!==_));const Z=await N().catch(()=>null);(Z==null?void 0:Z.some(T=>T.source==="my"&&T.status==="failed"&&T.name===W.name))||E({type:"error",title:"上传失败",message:V instanceof Error?V.message:"模板上传失败",duration:4e3})}finally{m(!1)}},[E,N]);c.useEffect(()=>{N().catch(M=>{E({type:"error",title:"加载失败",message:M instanceof Error?M.message:"模板列表加载失败",duration:4e3})})},[E,N]),c.useEffect(()=>{if(v.length===0)return;const M=window.setInterval(()=>{N().catch(()=>{})},2e3);return()=>{window.clearInterval(M)}},[v,N]);const q=()=>a==="my"&&d.length===0&&!f?o.jsx("div",{className:X.grid,children:o.jsx(dr,{isDragOver:!1,isUploading:p,isGenerating:v.length>0,onFileSelect:B,isFull:!0})}):A.length===0?o.jsxs("div",{className:X.grid,children:[a==="my"&&o.jsx(dr,{isDragOver:!1,isUploading:p,isGenerating:v.length>0,onFileSelect:B}),o.jsx("div",{className:X.emptyState,children:a==="preset"?"暂无论置模板":"未找到匹配的模板"})]}):o.jsxs("div",{className:X.grid,children:[a==="my"&&o.jsx(dr,{isDragOver:!1,isUploading:p,isGenerating:v.length>0,onFileSelect:B}),A.map(M=>M.status==="parsing"?o.jsx(El,{name:M.name},M.id):M.status==="failed"?o.jsx(Cl,{name:M.name,onDelete:()=>void O(M)},M.id):o.jsx(Tl,{template:M,onMakeSame:F,onRename:w,onDelete:O,isSelected:e===M.id},M.id))]});return o.jsxs("div",{className:X.container,"data-testid":"template-picker",children:[o.jsxs("div",{className:X.tabRow,children:[o.jsx("div",{className:X.tabSection,children:o.jsx(Do,{items:Nl,value:a,onChange:P,activeBorderColor:"var(--tab-active-color)",activeTextColor:"var(--tab-active-color)"})}),n&&o.jsx("button",{type:"button","aria-label":"关闭",onClick:r,className:X.closeBtn,children:o.jsx(we,{name:"close",className:"h-4 w-4"})})]}),a==="my"&&d.length>3&&o.jsx("div",{className:X.searchSection,children:o.jsx(Ro,{value:f,onChange:L,onClear:x,placeholder:"搜索我的模板...",wrapperClassName:"w-full"})}),o.jsx("div",{className:X.cardGrid,children:q()}),o.jsx($c,{open:b!==null,title:"编辑模版名称",inputValue:y,inputPlaceholder:"请输入新的模板名称",confirmLabel:"确认",cancelLabel:"取消",onConfirm:R,onCancel:()=>j(null),onInputChange:C,confirmDisabled:!y.trim()||y.trim()===(b==null?void 0:b.name)})]})}const _l=100*1024*1024,Al=/^[A-Za-z0-9\u4e00-\u9fa5_-]+(?:[ ]+[A-Za-z0-9\u4e00-\u9fa5_-]+)*$/;function Tr(e){return e.trim().replace(/\s+/g," ")}function Dl(e){const t=Tr(e);return t.length>0&&t.length<=pn&&Al.test(t)}function Rl(){return`模板名称仅支持汉字、字母、数字、中划线、下划线和空格,且长度不超过 ${pn} 个字符`}function Pl({hasActiveInvocation:e,activeMenu:t,pathCompletion:n,setInput:r,textareaRef:a,mentionDataVersion:s,filteredAgentOptions:l,showMentions:h,mentionFilter:d,onMentionSearchChange:g,closeMenus:f,setMentionStart:i,setMentionEnd:p,clearMentionFilter:m,selectedIdx:v,setSelectedIdx:k,insertMention:b,menuRef:j,mentionMenuStyle:y,imageLifecycleStatus:C,uploadError:D,fileInputRef:E,handleFileSelect:S,showQuickPrompts:N,quickActionsExpanded:P,quickActionsOverflowing:L,visibleQuickActions:x,selectedQuickAction:$,queueAwareDisabled:A,quickActionsContainerRef:F,quickActionsRowRef:w,handleQuickAction:R,handleQuickPrompt:O,handleExpertCardClick:B,setQuickActionsExpanded:q,queueCount:M,queuedEntries:u,queueAttachmentNamesByEntryId:I,queueExpanded:_,queueBusy:W,queueHighlightedEntryId:V,queueListRef:Z,setQueueExpanded:K,handleQueueClear:T,handleQueuePinToTop:z,handleQueueDelete:H,handleQueueEdit:G,showStyleTemplatePopover:Q,styleTemplatePopoverRef:Y,selectedTemplate:ne,onTemplateSelectChange:te,onTemplatePopoverClose:ce,images:ue,handleRemoveImage:Ie,isDraggingFiles:ge,input:xe,handleChange:mn,setIsComposing:$e,resizeTextarea:Oe,handleKeyDown:vt,handlePaste:Ge,handleDragEnter:bt,handleDragOver:yt,handleDragLeave:wt,handleDrop:gn,skillOptionsData:Xe,quickActionOptions:ke,ghostSuggestion:Je,isComposing:It,skillInsertAnchorRef:kt,routerPush:St,skillBtnRef:Fe,styleTemplateBtnRef:xn,handleSkillClick:Tt,guidedModeEnabled:Et,onToggleGuidedMode:vn,hasPptSkillInInput:Ze,handleStyleTemplateClick:Ye,onClearSelectedTemplate:Ct,showSkillMenu:bn,skillFilter:yn,onSkillSearchChange:Ne,filteredSkillOptions:et,skillOptionsLoading:wn,skillOptionRefs:fe,insertSkill:qe,setWorkspaceFilter:Nt,folderSelectionEnabled:jt,selectedFolderTitle:_t,folderButtonLabel:At,shouldShowFolderTooltip:Dt,folderBtnRef:In,workspaceSearchInputRef:Be,workspaceFilter:kn,showWorkspaceMenu:Rt,workspaceMenuItems:Pt,workspaceOptionRefs:Mt,isFolderButtonDisabled:tt,sendTemporarilyDisabled:Lt,queueSendDisabled:nt,handleWorkspaceClick:$t,handleWorkspaceMenuSelect:Sn,handleTranscript:Tn,handleSend:En,onStop:Cn,handleQueueSend:Nn,dragOverlayHost:jn,showHistorySearch:_n,handleHistorySelect:An,setShowHistorySearch:Dn,isTemplate:Rn,parsed:Ot,activePlaceholderId:Pn,handlePlaceholderFocus:Ft,handlePlaceholderBlur:Mn,handlePlaceholderDelete:qt,handlePlaceholderTabNext:Ln}){const[je,$n]=c.useState(!1);c.useEffect(()=>{if(typeof window>"u")return;const he=st=>{var it;$n(((it=st.detail)==null?void 0:it.state)==="recording")};return window.addEventListener("office-claw:voice-state",he),()=>{window.removeEventListener("office-claw:voice-state",he)}},[]);const rt=an(br(xe)),at=Je?an(br(Je)):"",On=at.startsWith(rt)?at.slice(rt.length):at,Fn=/\[\[quick_action:[^[\]]+\]\]/.test(xe);return o.jsxs("div",{className:"relative safe-area-bottom bg-transparent",children:[o.jsx("div",{"aria-hidden":"true",className:"chat-layout-rail-glow pointer-events-none absolute bottom-0 left-1/2 z-0 h-[100px] -translate-x-1/2 opacity-[0.25] blur-[50px]",style:{borderRadius:"490px",background:"var(--chat-input-accent-glow)"}}),e&&o.jsxs("div",{className:"chat-layout-rail hidden items-center gap-2 pt-2",children:[o.jsx("span",{className:"inline-block w-2 h-2 rounded-full bg-[var(--chat-input-queue-accent)] animate-pulse"}),o.jsx("span",{className:"text-xs font-medium text-[var(--chat-input-queue-accent)]",children:"正在回复中..."}),o.jsx("span",{className:"hidden text-xs text-[var(--text-label-secondary)]",children:"继续输入,消息会排队"})]}),n.isOpen&&!t&&o.jsx(nc,{entries:n.entries,selectedIdx:n.selectedIdx,onSelectIdx:n.setSelectedIdx,onSelect:he=>{const st=n.selectEntry(he);r(st),setTimeout(()=>{var ot;return(ot=a.current)==null?void 0:ot.focus()},0)}}),o.jsx(Bi,{agentOptions:l,showMentions:h,mentionFilter:d,onMentionFilterChange:g,onCloseMentionMenu:()=>{f(),i(-1),p(-1),m()},selectedIdx:v,onSelectIdx:k,onInsertMention:b,menuRef:j,mentionMenuStyle:y}),C==="preparing"&&o.jsx("div",{className:"chat-layout-rail pt-2 text-xs text-[var(--text-muted)]",role:"status",children:"文件处理中,完成后可发送"}),C==="uploading"&&o.jsx("div",{className:"chat-layout-rail pt-2 text-xs text-[var(--state-info-text)]",role:"status",children:"文件上传中,请稍候..."}),C==="failed"&&D&&o.jsxs("div",{className:"chat-layout-rail pt-2 text-xs text-[var(--state-error-text)]",role:"alert",children:["文件发送失败:",D]}),o.jsx("input",{ref:E,type:"file",accept:uo,multiple:!0,className:"hidden",onChange:S}),o.jsx("div",{className:"chat-layout-rail relative z-10 pt-2",children:o.jsx("div",{className:"flex gap-2 items-end",children:o.jsxs("div",{className:"group min-w-0 flex-1",children:[o.jsx(sc,{showQuickPrompts:N,quickActionsExpanded:P,quickActionsOverflowing:L,visibleQuickActions:x,selectedQuickAction:$,queueAwareDisabled:A,quickActionsContainerRef:F,quickActionsRowRef:w,onQuickAction:R,onQuickPrompt:O,onExpertCardClick:B,onToggleExpanded:()=>q(he=>!he)}),M>0&&o.jsx(ec,{queuedEntries:u,attachmentNamesByEntryId:I,queueCount:M,queueExpanded:_,queueBusy:W,queueHighlightedEntryId:V,listRef:Z,onToggleExpanded:()=>K(he=>!he),onClear:()=>void T(),onPinToTop:he=>void z(he),onDelete:he=>void H(he),onEdit:G}),o.jsxs("div",{className:`relative ${M>0?"-mt-5 z-10":""}`,children:[Q&&o.jsx("div",{ref:Y,className:"absolute bottom-full left-0 right-0 z-[260] mb-[8px] rounded-[16px] overflow-tooltip overflow-hidden","data-testid":"chat-input-style-template-popover",children:o.jsx(jl,{selectedTemplateId:ne==null?void 0:ne.id,onSelectChange:te,showCloseButton:!0,onClose:ce})}),o.jsxs("div",{"data-chat-input-dropzone":"true",className:`relative min-h-[114px] w-full min-w-0 overflow-visible rounded-[24px] border chat-input-shell bg-[var(--chat-input-bg)] ${ge?"border-[var(--text-accent)]":""}`,onDragEnter:bt,onDragOver:yt,onDragLeave:wt,onDrop:gn,children:[o.jsx(Qi,{files:ue,onRemove:Ie}),o.jsxs("div",{className:"relative overflow-hidden rounded-t-[24px]",children:[o.jsx(Mc,{ref:a,value:xe,onValueChange:mn,mentionDataVersion:s,onCompositionStateChange:$e,maxLength:fo,onInput:Oe,onKeyDown:vt,onPaste:Ge,placeholder:e?"继续输入内容,将任务加入待执行队列":"描述你想研究的主题或@助手协助工作",className:"chat-input-textarea block min-h-[70px] w-full bg-transparent px-[18px] py-4 text-[16px] leading-[24px] text-[var(--text-primary)] whitespace-pre-wrap break-words [overflow-wrap:anywhere] placeholder:text-[var(--text-field-placeholder)] focus:outline-none",disabled:!1,skillOptions:Xe,quickActionOptions:ke,promptBlocks:Rn&&Ot?{parsed:Ot,activePlaceholderId:Pn,onFocus:Ft,onBlur:Mn,onDelete:qt,onTabNext:Ln}:null}),Je&&!It&&!n.isOpen&&!h&&!Fn&&!/(^|\s)@/.test(xe)&&o.jsxs("div",{"data-testid":"ghost-suggestion",className:"pointer-events-none absolute inset-0 w-full overflow-hidden whitespace-pre-wrap break-words [overflow-wrap:anywhere] rounded-t-[24px] px-[18px] py-4 text-[16px] leading-[24px]","aria-hidden":"true",children:[o.jsx("span",{className:"select-none opacity-0",children:rt}),o.jsx("span",{className:"text-[var(--text-field-placeholder)]",children:On})]})]}),o.jsx("div",{className:"px-[10px] pb-[10px]",children:o.jsxs("div",{className:`flex items-center gap-2 ${je?"justify-end":"justify-between"}`,children:[!je&&o.jsx(Ti,{input:xe,textareaRef:a,skillInsertAnchorRef:kt,closeMenus:f,routerPush:St,skillBtnRef:Fe,styleTemplateBtnRef:xn,onSkillClick:Tt,selectedQuickAction:$,guidedModeEnabled:Et,onToggleGuidedMode:vn,hasPptSkillInInput:Ze,selectedTemplate:ne,onStyleTemplateClick:Ye,onClearSelectedTemplate:Ct,showSkillMenu:bn,menuRef:j,skillFilter:yn,onSkillFilterChange:Ne,filteredSkillOptions:et,skillOptionsLoading:wn,selectedIdx:v,setSelectedIdx:k,skillOptionRefs:fe,onInsertSkill:qe,onCloseMenus:f}),o.jsx($i,{fileInputRef:E,setWorkspaceFilter:Nt,closeMenus:f,folderSelectionEnabled:jt,selectedFolderTitle:_t,folderButtonLabel:At,shouldShowFolderTooltip:Dt,folderBtnRef:In,menuRef:j,workspaceSearchInputRef:Be,workspaceFilter:kn,showWorkspaceMenu:Rt,workspaceMenuItems:Pt,selectedIdx:v,setSelectedIdx:k,workspaceOptionRefs:Mt,isFolderButtonDisabled:tt,queueAwareDisabled:A,sendTemporarilyDisabled:Lt,imagesCount:ue.length,hasActiveInvocation:e,inputTrimmed:!!xe.trim(),queueSendDisabled:nt,queueCount:M,onWorkspaceClick:$t,onWorkspaceSelect:Sn,onTranscript:Tn,onSend:En,onStop:Cn,onQueueSend:Nn})]})})]}),o.jsx("p",{className:"mt-2 mb-4 text-center text-[12px] font-normal leading-[20px] text-[var(--text-disabled)]",children:"内容由AI生成,仅供参考"})]})]})})}),_n&&o.jsx(tc,{onSelect:An,onClose:()=>Dn(!1)}),o.jsx(gi,{isVisible:ge,host:jn})]})}function Ml(e,t){return t}function Ll(e){return e==="preparing"||e==="uploading"}function $l(e,t){const[n,r]=c.useState([]),[a,s]=c.useState(!1),l=c.useRef([]),h=c.useRef(0),d=c.useRef(null);c.useEffect(()=>{l.current=n},[n]);const g=c.useCallback(y=>{const C=[];let D=!1,E=!1,S=!1;for(const N of y){if(!ho(N)){D=!0;continue}const P=N.type.startsWith("image/"),L=P?vo:bo;if(N.size>L){P?S=!0:E=!0;continue}C.push(N)}if(D&&e({type:"error",title:"上传失败",message:po,duration:2600}),E&&e({type:"error",title:"上传失败",message:mo,duration:2600}),S&&e({type:"error",title:"上传失败",message:go,duration:2600}),C.length>0){const N=xo(l.current,C,vr);r(N.files),N.dropped>0&&e({type:"error",title:"附件数量已达上限",message:`最多支持选择 ${vr} 个附件`,duration:2600})}return C.length>0},[e]),f=c.useCallback(y=>{const C=y.target.files;C&&(g(Array.from(C)),y.target.value="")},[g]),i=c.useCallback(y=>{var N;const C=(N=y.clipboardData)==null?void 0:N.items;if(!C||Array.from(C).some(P=>P.kind==="string"&&(P.type==="text/plain"||P.type==="text/html")))return;const E=[];for(let P=0;P<C.length;P++){if(C[P].kind!=="file")continue;const L=C[P].getAsFile();L&&E.push(L)}if(E.length===0)return;g(E)&&y.preventDefault()},[g]),p=c.useCallback(y=>{r(C=>C.filter((D,E)=>E!==y))},[]),m=c.useCallback(y=>{var D;if(!y)return!1;if((((D=y.files)==null?void 0:D.length)??0)>0)return!0;const C=Array.from(y.types??[]);return C.includes("Files")||C.includes("application/x-moz-file")||C.includes("public.file-url")},[]),v=c.useCallback(y=>{m(y.dataTransfer)&&(y.preventDefault(),h.current+=1,s(!0))},[m]),k=c.useCallback(y=>{m(y.dataTransfer)&&(y.preventDefault(),y.dataTransfer.dropEffect="copy",s(!0))},[m]),b=c.useCallback(y=>{m(y.dataTransfer)&&(y.preventDefault(),h.current=Math.max(0,h.current-1),h.current===0&&s(!1))},[m]),j=c.useCallback(y=>{var D;if(!m(y.dataTransfer))return;y.preventDefault(),h.current=0,s(!1);const C=Array.from(((D=y.dataTransfer)==null?void 0:D.files)??[]);C.length!==0&&g(C)},[m,g]);return c.useEffect(()=>{const y=t;if(!y)return;const C=()=>{d.current&&(clearTimeout(d.current),d.current=null)},D=()=>{C(),h.current=0,s(!1)},E=()=>{C(),d.current=setTimeout(()=>{h.current=0,s(!1),d.current=null},80)},S=A=>{const F=A.target;return F instanceof Node&&y.contains(F)},N=A=>{const F=A.target;return!(!(F instanceof Node)||!y.contains(F)||F instanceof Element&&F.closest('[data-chat-input-dropzone="true"]'))},P=A=>{m(A.dataTransfer)&&S(A)&&(A.preventDefault(),C(),h.current+=1,s(!0))},L=A=>{if(m(A.dataTransfer)){if(!S(A)){E();return}A.preventDefault(),C(),A.dataTransfer&&(A.dataTransfer.dropEffect="copy"),s(!0)}},x=A=>{m(A.dataTransfer)&&S(A)&&(A.preventDefault(),h.current=Math.max(0,h.current-1),h.current===0&&E())},$=A=>{var w;if(!m(A.dataTransfer))return;if(!N(A)){D();return}A.preventDefault(),D();const F=Array.from(((w=A.dataTransfer)==null?void 0:w.files)??[]);F.length!==0&&g(F)};return document.addEventListener("dragenter",P,!0),document.addEventListener("dragover",L,!0),document.addEventListener("dragleave",x,!0),document.addEventListener("drop",$,!0),()=>{document.removeEventListener("dragenter",P,!0),document.removeEventListener("dragover",L,!0),document.removeEventListener("dragleave",x,!0),document.removeEventListener("drop",$,!0),D()}},[t,m,g]),{images:n,setImages:r,imagesRef:l,isDraggingFiles:a,handleFileSelect:f,handlePaste:i,handleRemoveImage:p,handleDragEnter:v,handleDragOver:k,handleDragLeave:b,handleDrop:j}}function Ol({setInput:e,setShowMentions:t,setShowSkillMenu:n,setMentionStart:r,setMentionEnd:a,setMentionFilterValue:s,clearMentionFilter:l,clearSkillFilter:h,closeMenus:d,setSelectedIdx:g,skillInsertAnchorRef:f}){return{handleChange:c.useCallback((p,m,v)=>{const k=yr(p);e(k);const b=Math.min(m,k.length),j=Math.min(v,k.length);f.current={start:b,end:j};const y=to(k,b);(y==null?void 0:y.type)==="mention"?(t(!0),n(!1),r(y.start),a(b),s(y.filter),g(0)):(d(),r(-1),a(-1),l(),h())},[l,h,d,e,a,s,r,g,t,n,f])}}function Fl(e){return e.ctrlKey&&e.key==="r"}function ql(e){return e.ctrlKey&&e.key==="Enter"}function Bl({input:e,hasActiveInvocation:t,activeMenu:n,activeOptionsCount:r,selectedIdx:a,setSelectedIdx:s,filteredAgentOptions:l,filteredSkillOptions:h,workspaceMenuItems:d,textareaRef:g,setInput:f,closeMenus:i,clearMentionFilter:p,clearSkillFilter:m,setMentionStart:v,setMentionEnd:k,insertMention:b,insertSkill:j,handleWorkspaceMenuSelect:y,handleSend:C,handleQueueSend:D,setGhostSuggestion:E,ghostRef:S,setShowHistorySearch:N,pathCompletion:P}){const L=c.useCallback(()=>{i(),v(-1),k(-1),p(),m()},[p,m,i,k,v]),x=c.useCallback(w=>{if(!n)return!1;if(r===0)return(w.key==="Enter"&&!w.shiftKey||w.key==="Tab"||w.key==="Escape")&&w.preventDefault(),L(),!0;if(w.key==="ArrowDown")return w.preventDefault(),s(R=>(R+1)%r),!0;if(w.key==="ArrowUp")return w.preventDefault(),s(R=>(R-1+r)%r),!0;if(w.key==="Enter"||w.key==="Tab"){if(w.preventDefault(),n==="mention"){const O=l[a];return O?(b(O),!0):(i(),!0)}if(n==="skill"){const O=h[a];return O?(j(O.name),!0):(i(),!0)}const R=d[a];return R?(y(R),!0):(i(),!0)}return w.key==="Escape"?(w.preventDefault(),i(),v(-1),k(-1),!0):!1},[n,r,L,i,l,h,y,b,j,a,k,v,s,d]),$=c.useCallback(w=>{if(!P.isOpen)return!1;if(w.key==="ArrowDown")return w.preventDefault(),P.setSelectedIdx((P.selectedIdx+1)%P.entries.length),!0;if(w.key==="ArrowUp")return w.preventDefault(),P.setSelectedIdx((P.selectedIdx-1+P.entries.length)%P.entries.length),!0;if(w.key==="Tab"||w.key==="Enter"){w.preventDefault();const R=P.entries[P.selectedIdx];if(R){const O=P.selectEntry(R),B=g.current;B?B.applyProgrammaticChange(O,O.length,O.length):f(O)}return!0}return w.key==="Escape"?(w.preventDefault(),P.close(),!0):!1},[P,f,g]),A=c.useCallback(w=>{if(w.key!=="Tab"&&w.key!=="ArrowRight")return!1;const R=g.current,O=e,B=(R==null?void 0:R.getSelectionStart())??O.length,q=(R==null?void 0:R.getSelectionEnd())??O.length,M=B===q&&B===O.length;if(w.key==="ArrowRight"&&!M)return!1;const u=gt.getState().findMatch(O);if(!u)return!1;const I=Pa(u,[]);w.preventDefault();const _=g.current;return _?_.applyProgrammaticChange(I,I.length,I.length):f(I),S.current=null,E(null),!0},[S,e,E,f,g]);return{handleKeyDown:c.useCallback(w=>{if(!w.nativeEvent.isComposing){if(Fl(w)){w.preventDefault(),L(),N(!0);return}if(ql(w)){w.preventDefault();const R=g.current,O=(R==null?void 0:R.getSelectionStart())??e.length,B=(R==null?void 0:R.getSelectionEnd())??e.length,q=`${e.slice(0,O)}
|
|
6
|
+
${e.slice(B)}`;f(q),i(),P.close(),setTimeout(()=>{var M,u;(M=g.current)==null||M.focus(),(u=g.current)==null||u.setSelectionRange(O+1,O+1)},0);return}x(w)||$(w)||A(w)||w.key==="Enter"&&!w.shiftKey&&(w.preventDefault(),t?D():C())}},[L,i,A,x,$,D,C,t,e,P,f,N,g])}}function Ul(){const[e,t]=c.useState(!1),[n,r]=c.useState(!1),[a,s]=c.useState(!1),[l,h]=c.useState(!1),[d,g]=c.useState(0),f=c.useCallback(()=>{t(!1),r(!1),s(!1),h(!1)},[]),i=c.useCallback(v=>{t(!1),r(k=>{const b=!k;return b&&(v==null||v()),b}),s(!1),h(!1),g(0)},[]),p=c.useCallback(()=>{t(!1),r(!1),h(!1),s(v=>!v),g(0)},[]),m=c.useCallback(()=>{t(!1),r(!1),s(!1),h(v=>!v)},[]);return{showMentions:e,setShowMentions:t,showSkillMenu:n,setShowSkillMenu:r,showWorkspaceMenu:a,setShowWorkspaceMenu:s,showStyleTemplatePopover:l,setShowStyleTemplatePopover:h,selectedIdx:d,setSelectedIdx:g,closeMenus:f,toggleSkillMenu:i,toggleWorkspaceMenu:p,toggleStyleTemplatePopover:m}}function zl(e,t){const n=t.map(r=>`@${r}`).join("");return n&&e.startsWith(n)?e.slice(n.length).replace(/^[,,]\s*/,"").trimStart():e.replace(/^(?:@[^@\s,,]+)+[,,]?\s*/,"").trimStart()}function rn(e){return`${ye}${e}${Te}`}function Hl(e){let t=e;for(const n of sn){const r=rn(n.label);t=t.split(r).join(n.label)}return t}function Wl({input:e,agents:t,queueAwareDisabled:n,textareaRef:r,applyProgrammaticInput:a,onQuickActionSelected:s,onExpertCardClicked:l,onMentionRefsChanged:h,onMentionRefsCleared:d}){const[g,f]=c.useState(null),[i,p]=c.useState(!1),[m,v]=c.useState(!1),[k,b]=c.useState(!1),[j,y]=c.useState(!1),C=c.useRef(null),D=c.useRef(null),E=c.useRef(!1),S=c.useMemo(()=>sn.filter(w=>w.show!==!1),[]),N=c.useCallback(w=>{const O=`${rn(w.label)} `;a(O,O.length),v(!1),p(!0),E.current=!1,d==null||d(),s==null||s(),setTimeout(()=>{const B=r.current;B&&(B.focus(),B.setSelectionRange(O.length,O.length))},0)},[a,d,s,r]),P=c.useCallback(w=>{const R=e.indexOf(ye),O=R>=0?e.indexOf(Te,R+ye.length):-1;let B=e,q=e.length;if(R>=0&&O>R){const M=O+Te.length,u=e.slice(0,M),I=e.slice(M).replace(/^\s+/,""),_=I.length>0?" ":"";B=`${u} ${w}${_}${I}`,q=B.length}else{const M=r.current,u=(M==null?void 0:M.getSelectionStart())??e.length,I=(M==null?void 0:M.getSelectionEnd())??e.length,_=e.slice(0,u),W=e.slice(I),V=_.endsWith(" ")||_.length===0?"":" ",Z=W.startsWith(" ")||W.length===0?"":" ";B=`${_}${V}${w}${Z}${W}`,q=B.length}a(B,q),v(!1),p(!1),d==null||d(),setTimeout(()=>{const M=r.current;M&&(M.focus(),M.setSelectionRange(q,q))},0)},[a,e,d,r]),L=c.useCallback(w=>{var Z;const R=((Z=w.mentionTargetIds)==null?void 0:Z.map(K=>t.find(T=>T.id===K)).filter(K=>!!K))??[],O=R.map(Xr).filter(K=>!!K).join(" "),B=R.map(K=>{const T=Xr(K);return T?{catId:K.id,mention:T}:null}).filter(K=>K!==null),q=R.map(K=>K.displayName.trim()).filter(Boolean),M=O?zl(w.content,q):w.content,u=O?`${O} ${M}`.trim():`@${w.agentName} ${w.content}`,I=e.indexOf(ye),_=I>=0?e.indexOf(Te,I+ye.length):-1;let W=e,V=0;if(I>=0&&_>I){const K=_+Te.length,T=e.slice(0,K),z=e.slice(K).replace(/^\s+/,""),H=z.length>0?" ":"";W=`${T} ${u}${H}${z}`,V=(T+" "+u).length}else{const K=r.current,T=(K==null?void 0:K.getSelectionStart())??e.length,z=(K==null?void 0:K.getSelectionEnd())??e.length,H=e.slice(0,T),G=e.slice(z),Q=H.endsWith(" ")||H.length===0?"":" ",Y=G.startsWith(" ")||G.length===0?"":" ";W=`${H}${Q}${u}${Y}${G}`,V=(H+Q+u).length}a(W,V),E.current=!0,p(!1),B.length>0?h==null||h(B):d==null||d(),l==null||l(),setTimeout(()=>{const K=r.current;K&&(K.focus(),K.setSelectionRange(V,V))},0)},[a,t,e,l,h,d,r]),x=c.useCallback(()=>{const w=D.current,R=C.current;if(!w){y(!1);return}const O=Array.from(w.querySelectorAll('[data-quick-action-button="true"]')),B=Number.parseFloat(window.getComputedStyle(w).columnGap||"0")||0,M=O.reduce((I,_)=>I+_.getBoundingClientRect().width,0)+Math.max(0,O.length-1)*B,u=(R==null?void 0:R.clientWidth)||w.clientWidth;y(M>u+1)},[]);c.useLayoutEffect(()=>{x();const w=D.current,R=C.current;if(!w||typeof ResizeObserver>"u")return;const O=new ResizeObserver(()=>x());return O.observe(w),R&&O.observe(R),()=>O.disconnect()},[x,S]),c.useEffect(()=>{let w=null;const R=()=>{w!==null&&cancelAnimationFrame(w),w=requestAnimationFrame(()=>{w=null,x()})};return window.addEventListener("resize",R),()=>{window.removeEventListener("resize",R),w!==null&&cancelAnimationFrame(w)}},[x]),c.useEffect(()=>{j||b(!1)},[j]),c.useEffect(()=>{i&&b(!1)},[i]),c.useEffect(()=>{const w=S.find(R=>e.includes(rn(R.label)))??null;f(w)},[e,S]),c.useEffect(()=>{if(g){if(g.expertCards&&g.expertCards.length>0){p(!E.current),m&&v(!1);return}const w=g.prompts.some(R=>e.includes(R));p(!w),m&&v(!1);return}m||p(!1)},[e,m,g]);const $=c.useCallback(()=>{v(!1),p(!0),E.current=!1},[]),A=c.useCallback(()=>{f(null),v(!1),p(!1),b(!1),E.current=!1,d==null||d()},[d]),F=c.useMemo(()=>sn.map(w=>({label:w.label,icon:w.icon,token:rn(w.label)})),[]);return{selectedQuickAction:g,showQuickPrompts:i,quickActionsExpanded:k,quickActionsOverflowing:j,visibleQuickActions:S,quickActionOptions:F,quickActionsContainerRef:C,quickActionsRowRef:D,setQuickActionsExpanded:b,handleQuickAction:N,handleQuickPrompt:P,handleExpertCardClick:L,onExternalQuickActionInsert:$,resetQuickActions:A,queueAwareDisabled:n}}function Vl({input:e,images:t,mentionOptions:n,queueAwareDisabled:r,sendTemporarilyDisabled:a,guidedModeEnabled:s,selectedQuickActionLabel:l,hasPptSkillInInput:h,selectedTemplate:d,queueSendDisabled:g,mentionRefs:f,onSend:i,addHistoryEntry:p,setInput:m,setImages:v,setShowMentions:k,setShowSkillMenu:b,setShowWorkspaceMenu:j,setSelectedTemplate:y,setQueueExpanded:C,clearMentionRefs:D,setGhostSuggestion:E,ghostRef:S,resetQuickActions:N,resolveQueueSendOptions:P}){const L=c.useCallback(A=>{if(a)return!1;const F=e.trim(),w=Ma(an(Hl(F)),n);if(w&&!r){p(F);const R={...s?{interactiveAsk:!0}:{},...(l==="幻灯片"||h)&&d?{pptTemplateId:d.id}:{},...f.length>0?{mentionRefs:f}:{},...A==="queue"?P==null?void 0:P():{}};return i(w,t.length>0?t:void 0,void 0,A,Object.keys(R).length>0?R:void 0),m(""),S.current=null,E(null),v([]),k(!1),b(!1),j(!1),y(null),D(),N(),!0}return!1},[p,n,S,s,h,f,t,e,i,r,N,l,d,a,E,v,m,y,k,b,j,D,P]),x=c.useCallback(()=>L(void 0),[L]),$=c.useCallback(()=>g?!1:(C(!0),L("queue")),[L,g,C]);return{handleSend:x,handleQueueSend:$}}function Kl({showStyleTemplatePopover:e,styleTemplatePopoverRef:t,styleTemplateBtnRef:n,setShowStyleTemplatePopover:r,selectedQuickActionLabel:a,setSelectedTemplate:s}){c.useEffect(()=>{if(!e)return;const d=g=>{var i;const f=g.target;f.isConnected&&t.current&&!t.current.contains(f)&&!((i=n.current)!=null&&i.contains(f))&&r(!1)};return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[r,e,n,t]),c.useEffect(()=>{a!=="幻灯片"&&(r(!1),s(null))},[a,s,r]);const l=c.useCallback(d=>{s(d?{id:d.id,name:d.name}:null),d&&r(!1)},[s,r]),h=c.useCallback(()=>{r(!1)},[r]);return{onTemplateSelectChange:l,onTemplatePopoverClose:h}}function Ql({closeMenusBase:e,clearSearchFilters:t,setWorkspaceFilter:n}){return{closeMenus:c.useCallback(()=>{e(),t(),n("")},[t,e,n])}}function Gl(e){const{threadId:t,input:n,threadDrafts:r}=e;c.useLayoutEffect(()=>{t&&(n?r.set(t,n):r.delete(t))},[n,r,t])}function Xl({input:e,findHistoryMatch:t,ghostRef:n,setGhostSuggestion:r}){c.useEffect(()=>{const a=e.trim()?t(e):null;n.current=a,r(a)},[t,n,e,r])}function Jl({showMentions:e,input:t,mentionFilter:n,updateMentionMenuPosition:r}){c.useLayoutEffect(()=>{r()},[t,n,e,r]),c.useEffect(()=>{if(!e)return;const a=()=>r();return window.addEventListener("resize",a),window.addEventListener("scroll",a,!0),()=>{window.removeEventListener("resize",a),window.removeEventListener("scroll",a,!0)}},[e,r])}function Zl({showMentions:e,mentionStart:t,mentionEnd:n,input:r,textareaRef:a,menuRef:s,skillInsertAnchorRef:l,setInput:h,setShowMentions:d,setShowSkillMenu:g,setMentionStart:f,setMentionEnd:i,setMentionMenuStyle:p,clearMentionFilter:m,clearSkillFilter:v,onMentionRefInserted:k}){const b=c.useCallback(()=>{var O;if(!e)return;const C=a.current,D=C==null?void 0:C.getElement();if(!D)return;const E=t>=0?t:(C==null?void 0:C.getSelectionStart())??0,S=(C==null?void 0:C.getClientRectAtOffset(E))??D.getBoundingClientRect(),N=200,P=Math.max(120,((O=s.current)==null?void 0:O.offsetHeight)??220),L=8,x=S.left,$=S.top-P-8,A=window.innerWidth-N-L,F=window.innerHeight-P-L,w=Math.min(Math.max(x,L),Math.max(L,A)),R=Math.min(Math.max($,L),Math.max(L,F));p({left:w,top:R})},[t,s,p,e,a]),j=c.useCallback(C=>{var O;const D=((O=a.current)==null?void 0:O.getSelectionStart())??r.length,E=t>=0?t:D,S=n>=E?n:D,N=r.slice(0,E),P=r.slice(S),L=C.insert.trim(),x=N.length>0&&!/\s$/.test(N)?" ":"",$=" ",A=P.replace(/^\s+/,""),F=`${N}${x}${L}${$}${A}`,w=(N+x+L+$).length,R=a.current;R?R.applyProgrammaticChange(F,w,w):h(F),L&&(k==null||k({catId:C.id,mention:L})),d(!1),f(-1),i(-1),m(),setTimeout(()=>{const B=a.current;if(!B)return;const q=(N+x+L+$).length;B.focus(),B.setSelectionRange(q,q)},0)},[m,r,n,t,h,i,k,f,d,a]),y=c.useCallback(C=>{const D=a.current,E=l.current,S=(E==null?void 0:E.start)??(D==null?void 0:D.getSelectionStart())??r.length,N=(E==null?void 0:E.end)??(D==null?void 0:D.getSelectionEnd())??r.length,P=r.slice(0,S),L=r.slice(N),x=P.endsWith(" ")?"":" ",$=" ",A=L.replace(/^\s+/,""),F=yo(C),w=`${P}${x}${F}${$}${A}`,R=(P+x+F+$).length,O=a.current;O?O.applyProgrammaticChange(w,R,R):h(w),g(!1),v(),setTimeout(()=>{const B=a.current;if(!B)return;const q=(P+x+F+$).length;l.current={start:q,end:q},B.focus(),B.setSelectionRange(q,q)},0)},[v,r,h,g,l,a]);return{updateMentionMenuPosition:b,insertMention:j,insertSkill:y}}function Yl({showMentions:e,showSkillMenu:t,showWorkspaceMenu:n,filteredAgentOptionsLength:r,filteredSkillOptionsLength:a,workspaceMenuItems:s,selectedIdx:l,setSelectedIdx:h,skillOptionRefs:d,workspaceOptionRefs:g,folderSelectionEnabled:f,setShowWorkspaceMenu:i}){const p=c.useMemo(()=>e?"mention":t?"skill":n?"workspace":null,[e,t,n]),m=c.useMemo(()=>p==="mention"?r:p==="skill"?a:s.length,[p,r,a,s.length]);return c.useEffect(()=>{e&&h(v=>Math.min(v,Math.max(0,r-1)))},[r,h,e]),c.useEffect(()=>{t&&h(v=>Math.min(v,Math.max(0,a-1)))},[a,h,t]),c.useEffect(()=>{!f&&n&&i(!1)},[f,i,n]),c.useEffect(()=>{n&&h(v=>Math.min(v,Math.max(0,s.length-1)))},[h,n,s.length]),c.useEffect(()=>{if(!t)return;const v=d.current[l];v&&v.scrollIntoView({block:"nearest"})},[l,t,d]),c.useEffect(()=>{if(!n)return;const v=g.current[l];v&&v.scrollIntoView({block:"nearest"})},[l,n,g]),{activeMenu:p,activeOptionsCount:m}}function ed({agentOptions:e,skillOptions:t,setSelectedIdx:n}){const[r,a]=c.useState(""),[s,l]=c.useState(""),h=c.useMemo(()=>{if(!r)return e;const k=r.toLowerCase();return e.filter(b=>b.label.toLowerCase().includes(k)||b.insert.toLowerCase().includes(k)||b.id.toLowerCase().includes(k))},[e,r]),d=c.useMemo(()=>{const k=s.trim().toLowerCase();return k?t.filter(b=>b.name.toLowerCase().includes(k)):t},[s,t]),g=c.useCallback(k=>{a(k)},[]),f=c.useCallback(k=>{a(k),n(0)},[n]),i=c.useCallback(k=>{l(k),n(0)},[n]),p=c.useCallback(()=>a(""),[]),m=c.useCallback(()=>l(""),[]),v=c.useCallback(()=>{a(""),l("")},[]);return{mentionFilter:r,skillFilter:s,filteredAgentOptions:h,filteredSkillOptions:d,setMentionFilterValue:g,onMentionSearchChange:f,onSkillSearchChange:i,clearMentionFilter:p,clearSkillFilter:m,clearSearchFilters:v}}function td({pendingChatInsert:e,setPendingChatInsert:t,threadId:n,quickActionTokenPrefix:r,consumedRef:a,textareaRef:s,setInput:l,onExternalQuickActionInsert:h,onExternalMentionInsert:d,onMentionRefsChanged:g,onMentionRefsCleared:f}){const i=p=>{const m=p.match(/^(.*?)(\s*)@\s*$/);return m?`${m[1]??""}${m[2]??""}`:p};c.useEffect(()=>{var y,C,D;if(!e||e.threadId!==n||a.current===e)return;a.current=e;const p=e.text.includes(r)&&!e.inspirationData,m=e.replaceTrailingMentionTrigger===!0,v=e.replaceAll===!0,k=!!((y=e.inspirationData)!=null&&y.prompt.includes("{{"));if(p){l(e.text),f==null||f(),h(),t(null),setTimeout(()=>{const E=s.current;E&&(E.focus(),E.setSelectionRange(e.text.length,e.text.length))},0);return}const b=e.text.match(/^@(\S+)/);if(!!b){const E=b[1]??"";l(S=>{const N=m?i(S):S,P=N&&!N.endsWith(`
|
|
7
|
+
`)?`
|
|
8
|
+
`:"";return N+P+e.text}),(C=e.mentionRefs)!=null&&C.length?g==null||g(e.mentionRefs):f==null||f(),t(null),setTimeout(()=>{const S=s.current;S&&(S.focus(),e.suppressMentionMenu||d(E,0))},0)}else l(v?e.text:E=>{const S=m?i(E):E,N=S&&!S.endsWith(`
|
|
9
|
+
`)?`
|
|
10
|
+
`:"";return S+N+e.text}),(D=e.mentionRefs)!=null&&D.length?g==null||g(e.mentionRefs):f==null||f(),k||t(null),setTimeout(()=>{const E=s.current;E&&E.focus()},0)},[a,h,d,g,f,e,r,l,t,s,n])}const De=new Map,nd="relay-claw-chat-input-cache",rd=2,Ce="queue-edit-drafts",me="queue-edit-pending",ad=600*1e3,sd=30*1e3;function Er(e,t){return`${e}::${t}`}function od(){var t;if((t=globalThis.crypto)!=null&&t.randomUUID)return globalThis.crypto.randomUUID();const e=n=>Array.from({length:n},()=>Math.floor(Math.random()*16).toString(16)).join("");return[e(8),e(4),`4${e(3)}`,`${["8","9","a","b"][Math.floor(Math.random()*4)]}${e(3)}`,e(12)].join("-")}let Wt=null;function Le(){return typeof window>"u"||!("indexedDB"in window)?Promise.resolve(null):Wt||(Wt=new Promise(e=>{try{const t=window.indexedDB.open(nd,rd);t.onupgradeneeded=()=>{const n=t.result;n.objectStoreNames.contains(Ce)||n.createObjectStore(Ce,{keyPath:"id"}),n.objectStoreNames.contains(me)||n.createObjectStore(me,{keyPath:"id"})},t.onsuccess=()=>e(t.result),t.onerror=()=>e(null),t.onblocked=()=>e(null)}catch{e(null)}}),Wt)}async function Ia(e,t,n){const r=await Le();r&&await new Promise(a=>{try{const s=r.transaction(Ce,"readwrite");s.objectStore(Ce).put({id:Er(e,t),input:n.input,images:n.images,updatedAt:Date.now()}),s.oncomplete=()=>a(),s.onerror=()=>a(),s.onabort=()=>a()}catch{a()}})}async function id(e,t){const n=await Le();return n?new Promise(r=>{try{const s=n.transaction(Ce,"readonly").objectStore(Ce).get(Er(e,t));s.onsuccess=()=>{const l=s.result;if(!l){r(null);return}r({input:l.input,images:Array.isArray(l.images)?l.images:[]})},s.onerror=()=>r(null)}catch{r(null)}}):null}async function ur(e,t){const n=await Le();n&&await new Promise(r=>{try{const a=n.transaction(Ce,"readwrite");a.objectStore(Ce).delete(Er(e,t)),a.oncomplete=()=>r(),a.onerror=()=>r(),a.onabort=()=>r()}catch{r()}})}async function cd(e){const t=await Le();t&&await new Promise(n=>{try{const r=t.transaction(me,"readwrite");r.objectStore(me).put(e),r.oncomplete=()=>n(),r.onerror=()=>n(),r.onabort=()=>n()}catch{n()}})}async function ld(e){const t=await Le();return t?new Promise(n=>{try{const a=t.transaction(me,"readonly").objectStore(me).getAll();a.onsuccess=()=>{const s=a.result??[],l=Date.now();n(s.filter(h=>h.threadId===e&&typeof h.draftId=="string"&&h.draftId.length>0&&l-h.updatedAt<=ad))},a.onerror=()=>n([])}catch{n([])}}):[]}async function fr(e){const t=await Le();t&&await new Promise(n=>{try{const r=t.transaction(me,"readwrite");r.objectStore(me).delete(e),r.oncomplete=()=>n(),r.onerror=()=>n(),r.onabort=()=>n()}catch{n()}})}async function ka(e){const t=await Le();t&&await new Promise(n=>{try{const a=t.transaction(me,"readonly").objectStore(me).getAll();a.onsuccess=()=>{const l=(a.result??[]).filter(g=>g.threadId===e).map(g=>g.id);if(l.length===0){n();return}const h=t.transaction(me,"readwrite"),d=h.objectStore(me);for(const g of l)d.delete(g);h.oncomplete=()=>n(),h.onerror=()=>n(),h.onabort=()=>n()},a.onerror=()=>n()}catch{n()}})}function dd({activeQueueThreadId:e,queuedEntries:t,input:n,images:r,skillNames:a,setInput:s,setImages:l,setQueueExpanded:h,textareaRef:d,handleQueueExtractForEdit:g,handleQueueMoveToIndex:f,handleQueueDelete:i,handleQueueClear:p}){const m=c.useRef(null),v=c.useRef(t.map(L=>L.id)),k=c.useRef(new Map),b=c.useRef(void 0),[j,y]=c.useState(null);c.useEffect(()=>{if(!e||t.length===0)return;let L=!1;return(async()=>{const x=Date.now(),$=await ld(e);if(L)return;const A=new Map($.map(w=>[w.draftId,w])),F=new Set;for(const w of t){if(!w.clientDraftId||De.has(w.id))continue;const R=k.current.get(w.clientDraftId),O=A.get(w.clientDraftId),B=R??(O?{input:O.input,images:O.images}:null);B&&(De.set(w.id,B),Ia(e,w.id,B),O&&(fr(O.id),F.add(O.id)),k.current.delete(w.clientDraftId))}for(const w of $)F.has(w.id)||x-w.updatedAt>sd&&(fr(w.id),k.current.delete(w.draftId))})(),()=>{L=!0}},[e,t]),c.useEffect(()=>{const L=v.current,x=t.map(q=>q.id);if(!j){v.current=x;return}const $=new Set(L),A=t.filter(q=>!$.has(q.id)),F=A[A.length-1];if(!F){v.current=x;return}const w=j.previousEntryId?t.findIndex(q=>q.id===j.previousEntryId):-1,R=j.nextEntryId?t.findIndex(q=>q.id===j.nextEntryId):-1;let B=t.length-1;w>=0&&R>=0?B=w<R?w+1:R:w>=0?B=w+1:R>=0&&(B=R),f(F.id,B),y(null),v.current=x},[f,j,t]);const C=c.useCallback(async L=>{var q,M;const x=t.findIndex(u=>u.id===L);if(x<0)return;const $=((q=t[x-1])==null?void 0:q.id)??null,A=((M=t[x+1])==null?void 0:M.id)??null,F=await g(L);if(!F)return;m.current={previousEntryId:$,nextEntryId:A};const w=De.get(L)??null,R=!w&&e?await id(e,L):null,O=w??R;De.delete(L),e&&ur(e,L);const B=(O==null?void 0:O.input)??Pa(F.content,a);s(B),l((O==null?void 0:O.images)??[]),h(!0),setTimeout(()=>{var _,W,V;if(!((_=d.current)==null?void 0:_.getElement()))return;(W=d.current)==null||W.focus();const I=B.length;(V=d.current)==null||V.setSelectionRange(I,I)},0)},[e,g,t,l,s,h,a,d]),D=c.useCallback(L=>{const x=m.current,$={input:n,images:[...r]},A=od(),F=()=>{k.current.delete(A),fr(A)};k.current.set(A,$),e&&cd({id:A,threadId:e,draftId:A,input:$.input,images:$.images,updatedAt:Date.now()}),b.current={clientDraftId:A,onQueueResult:R=>{if(!e){F();return}if(R.status==="queued"&&R.entryId){const O=k.current.get(A);O&&(De.set(R.entryId,O),Ia(e,R.entryId,O)),F();return}F()}};const w=L();w&&x&&(y(x),m.current=null),w||(b.current=void 0,F())},[e,r,n]),E=c.useCallback(async L=>{De.delete(L),k.current.clear(),e&&ur(e,L),e&&ka(e),await i(L)},[e,i]),S=c.useCallback(async()=>{k.current.clear();for(const L of t)De.delete(L.id),e&&ur(e,L.id);e&&ka(e),await p()},[e,p,t]),N=c.useCallback(()=>{const L=b.current;return b.current=void 0,L},[]),P=c.useCallback(()=>{m.current=null,y(null)},[]);return{handleQueueEdit:C,handleQueueSend:D,handleQueueDeleteSafe:E,handleQueueClearSafe:S,resolveQueueSendOptions:N,resetQueueEditState:P}}function ud({threadId:e,hasActiveInvocation:t,addToast:n}){const r=ee(F=>F.setQueue),a=ee(F=>F.currentThreadId),s=e??a,l=ee(c.useCallback(F=>{var w;return!s||s===F.currentThreadId?F.queue:((w=F.threadStates[s])==null?void 0:w.queue)??[]},[s])),h=ee(c.useCallback(F=>{var w;return!s||s===F.currentThreadId?F.messages:((w=F.threadStates[s])==null?void 0:w.messages)??[]},[s])),d=c.useMemo(()=>l.filter(F=>F.status==="queued"),[l]),g=c.useMemo(()=>{var R;const F=new Map(h.map(O=>[O.id,O])),w={};for(const O of d){if(O.attachmentNames&&O.attachmentNames.length>0){w[O.id]=[...O.attachmentNames];continue}const B=[O.messageId,...O.mergedMessageIds].filter(Boolean);if(B.length===0)continue;const q=[];for(const M of B){const u=F.get(M),I=((R=u==null?void 0:u.contentBlocks)==null?void 0:R.filter(_=>_.type==="file").map(_=>_.fileName).filter(Boolean))??[];q.push(...I)}q.length>0&&(w[O.id]=q)}return w},[h,d]),f=d.length,[i,p]=c.useState(!1),[m,v]=c.useState(!1),[k,b]=c.useState(null),j=c.useRef(null),y=c.useRef(null),C=c.useRef(f),D=c.useRef(i);c.useEffect(()=>{t&&f>0&&p(!0)},[t,f]),c.useEffect(()=>{const F=f>C.current,w=i&&!D.current;if(i&&(F||w)){const R=y.current;R&&requestAnimationFrame(()=>{R.scrollTop=R.scrollHeight})}C.current=f,D.current=i},[f,i]),c.useEffect(()=>()=>{j.current!==null&&window.clearTimeout(j.current)},[]);const E=c.useCallback(F=>{b(F),j.current!==null&&window.clearTimeout(j.current),j.current=window.setTimeout(()=>{b(null),j.current=null},900)},[]),S=c.useCallback(async F=>{if(!s)throw new Error("队列线程不存在");const w=await le(`/api/threads/${s}/queue/${F}/steer`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:"promote"})});if(!w.ok){const R=await w.json().catch(()=>null);throw new Error((R==null?void 0:R.error)??"置顶失败")}},[s]),N=c.useCallback((F,w)=>{if(F===w)return;const R=[...d],[O]=R.splice(F,1);if(!O)return;R.splice(w,0,O);const B=new Map(R.map((M,u)=>[M.id,u])),q=[...l].sort((M,u)=>{const I=B.get(M.id),_=B.get(u.id);return I==null&&_==null?0:I==null?1:_==null?-1:I-_});r(s,q)},[s,l,d,r]),P=c.useCallback(async F=>{if(!s)return;const w=l;r(s,w.filter(R=>R.id!==F));try{if(!(await le(`/api/threads/${s}/queue/${F}`,{method:"DELETE"})).ok)throw new Error("删除失败")}catch{r(s,w),n({type:"error",title:"删除失败",message:"队列消息删除失败,请重试",duration:2400})}},[s,n,l,r]),L=c.useCallback(async F=>{if(!s)return null;const w=d.find(O=>O.id===F);if(!w||w.status!=="queued")return null;const R=l;r(s,R.filter(O=>O.id!==F));try{if(!(await le(`/api/threads/${s}/queue/${F}`,{method:"DELETE"})).ok)throw new Error("删除失败");return w}catch{return r(s,R),n({type:"error",title:"编辑失败",message:"队列消息提取失败,请重试",duration:2400}),null}},[s,n,l,d,r]),x=c.useCallback(async()=>{if(!s||d.length===0)return;const F=l;r(s,l.filter(w=>w.status!=="queued"));try{if(!(await le(`/api/threads/${s}/queue`,{method:"DELETE"})).ok)throw new Error("清空失败")}catch{r(s,F),n({type:"error",title:"清空失败",message:"队列清空失败,请重试",duration:2400})}},[s,n,l,d.length,r]),$=c.useCallback(async F=>{if(!s)return;const w=d.findIndex(O=>O.id===F);if(w<=0)return;const R=l;N(w,0),v(!0);try{await S(F),E(F)}catch(O){r(s,R),n({type:"error",title:"置顶失败",message:O instanceof Error?O.message:"队列置顶失败,请重试",duration:2400})}finally{v(!1)}},[s,n,N,E,S,l,d,r]),A=c.useCallback(async(F,w)=>{if(!s)return;const R=d.findIndex(M=>M.id===F);if(R<0)return;const O=Math.max(0,d.length-1),B=Math.max(0,Math.min(w,O));if(R===B)return;const q=l;N(R,B),v(!0);try{const M=B<R?"up":"down",u=Math.abs(B-R);for(let I=0;I<u;I+=1){const _=await le(`/api/threads/${s}/queue/${F}/move`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({direction:M})});if(!_.ok){const W=await _.json().catch(()=>null);throw new Error((W==null?void 0:W.error)??"重排失败")}}}catch(M){r(s,q),n({type:"error",title:"重排失败",message:M instanceof Error?M.message:"队列重排失败,请重试",duration:2400})}finally{v(!1)}},[s,n,N,l,d,r]);return{activeQueueThreadId:s,queue:l,queuedEntries:d,queueAttachmentNamesByEntryId:g,queueCount:f,queueExpanded:i,setQueueExpanded:p,queueBusy:m,queueHighlightedEntryId:k,queueListRef:y,handleQueueDelete:P,handleQueueExtractForEdit:L,handleQueueClear:x,handleQueuePinToTop:$,handleQueueMoveToIndex:A}}function fd(){const[e,t]=c.useState([]),[n,r]=c.useState(!1),a=c.useRef(0),s=c.useRef(!0),l=c.useCallback((h=!1)=>{const d=++a.current;r(!0),Eo(h?{force:!0}:void 0).then(g=>{!s.current||a.current!==d||(t(g),Co(g))}).finally(()=>{!s.current||a.current!==d||r(!1)})},[]);return c.useEffect(()=>(s.current=!0,l(),()=>{s.current=!1,a.current+=1}),[l]),c.useEffect(()=>{const h=()=>l(!0);return window.addEventListener(Zr,h),()=>window.removeEventListener(Zr,h)},[l]),{skillOptions:e,skillOptionsLoading:n,loadSkillOptions:l}}function hd(e){const[t,n]=c.useState(!1),[r,a]=c.useState(null),s=c.useMemo(()=>/\[\[skill:[^\]]*ppt[^\]]*\]\]/i.test(e),[e]),l=c.useCallback(()=>{n(d=>!d)},[]),h=c.useCallback(()=>{a(null)},[]);return{guidedModeEnabled:t,setGuidedModeEnabled:n,hasPptSkillInInput:s,selectedTemplate:r,setSelectedTemplate:a,onToggleGuidedMode:l,onClearSelectedTemplate:h}}function pd({workspaceOptions:e,onSelectEmptyWorkspace:t,onSelectExistingWorkspace:n,onOpenFolderPicker:r}){const[a,s]=c.useState(""),l=c.useMemo(()=>{const g=a.trim().toLowerCase();return g?e.filter(f=>{var p;const i=((p=f.title)==null?void 0:p.trim())??"";return f.name.toLowerCase().includes(g)||f.path.toLowerCase().includes(g)||i.toLowerCase().includes(g)}):e},[a,e]),h=c.useMemo(()=>[{kind:"empty"},{kind:"open"},...l.map(g=>({kind:"workspace",option:g}))],[l]),d=c.useCallback(g=>{g.kind==="empty"?t==null||t():g.kind==="open"?r==null||r():n==null||n(g.option.path)},[r,t,n]);return{workspaceFilter:a,setWorkspaceFilter:s,workspaceMenuItems:h,selectWorkspaceMenuItem:d}}const Sa=new Map;function wu({threadId:e,onSend:t,onStop:n,disabled:r,hasActiveInvocation:a,uploadStatus:s="idle",uploadError:l=null,folderSelectionEnabled:h=!1,selectedFolderName:d=null,selectedFolderTitle:g=null,activeWorkspacePath:f=null,workspaceOptions:i=[],onSelectEmptyWorkspace:p,onSelectExistingWorkspace:m,onOpenFolderPicker:v,dragDropScopeRef:k}){const b=Vs(),{agents:j}=Ys(),{invitedExperts:y}=mi({threadId:e??null}),[C,D]=c.useState(0);c.useEffect(()=>(Qr(y),D(U=>U+1),()=>{Qr([])}),[y]);const E=c.useMemo(()=>y.map(U=>no(U)),[y]),S=c.useMemo(()=>ro(j,E),[j,E]),N=ee(U=>U.replaceThreadTargetAgents),[P,L]=c.useState(()=>e?Sa.get(e)??"":""),[x,$]=c.useState([]),A=c.useCallback(U=>{if(typeof U=="function"){L(J=>yr(U(J)));return}L(yr(U))},[]),F=c.useCallback(U=>{$(J=>[...J,U])},[]),w=c.useCallback(U=>{$(U)},[]),R=c.useCallback(()=>{$([])},[]),[O,B]=c.useState(-1),[q,M]=c.useState(-1),[u,I]=c.useState({}),_=!1,[W,V]=c.useState(!1),[Z,K]=c.useState(null),[T,z]=c.useState(null),[H,G]=c.useState(null),Q=c.useRef(null),[Y,ne]=c.useState(!1),{guidedModeEnabled:te,setGuidedModeEnabled:ce,hasPptSkillInInput:ue,selectedTemplate:Ie,setSelectedTemplate:ge,onToggleGuidedMode:xe,onClearSelectedTemplate:mn}=hd(P),{showMentions:$e,setShowMentions:Oe,showSkillMenu:vt,setShowSkillMenu:Ge,showWorkspaceMenu:bt,setShowWorkspaceMenu:yt,showStyleTemplatePopover:wt,setShowStyleTemplatePopover:gn,selectedIdx:Xe,setSelectedIdx:ke,closeMenus:Je,toggleSkillMenu:It,toggleWorkspaceMenu:kt,toggleStyleTemplatePopover:St}=Ul(),{skillOptions:Fe,skillOptionsLoading:xn,loadSkillOptions:Tt}=fd(),{mentionFilter:Et,skillFilter:vn,filteredAgentOptions:Ze,filteredSkillOptions:Ye,setMentionFilterValue:Ct,onMentionSearchChange:bn,onSkillSearchChange:yn,clearMentionFilter:Ne,clearSkillFilter:et,clearSearchFilters:wn}=ed({agentOptions:S,skillOptions:Fe,setSelectedIdx:ke}),fe=c.useRef(null),qe=c.useRef(null),Nt=c.useRef(null),jt=c.useRef(null),_t=c.useRef(null),At=c.useRef([]),Dt=c.useRef([]),In=c.useRef(null),Be=c.useRef(null),kn=c.useRef(null),Rt=c.useRef(null),Pt=Ml(_,s),Mt=Ll(Pt),tt=!!(r&&!a),Lt=mt(U=>U.addToast),{images:nt,setImages:$t,isDraggingFiles:Sn,handleFileSelect:Tn,handlePaste:En,handleRemoveImage:Cn,handleDragEnter:Nn,handleDragOver:jn,handleDragLeave:_n,handleDrop:An}=$l(Lt,H),Dn=(d==null?void 0:d.trim())||"选择文件夹",Rn=r||!h,Ot=!!(g!=null&&g.trim()),{activeQueueThreadId:Pn,queuedEntries:Ft,queueAttachmentNamesByEntryId:Mn,queueCount:qt,queueExpanded:Ln,setQueueExpanded:je,queueBusy:$n,queueHighlightedEntryId:rt,queueListRef:at,handleQueueDelete:On,handleQueueExtractForEdit:Fn,handleQueueClear:he,handleQueuePinToTop:st,handleQueueMoveToIndex:ot}=ud({threadId:e,hasActiveInvocation:a,addToast:Lt}),it=!!(a&&qt>=So),Bt=ee(U=>U.pendingChatInsert),qn=ee(U=>U.setPendingChatInsert),[Bn,jr]=c.useState(()=>{var J;const U=Bt;return!U||U.threadId!==e?null:((J=U.inspirationData)==null?void 0:J.workspacePath)??null}),ss=c.useRef(null),_r=c.useRef(e);c.useEffect(()=>{var ie,pe;const U=Bt;if(!U||U.threadId!==e)return;const J=(pe=(ie=U.inspirationData)==null?void 0:ie.workspacePath)==null?void 0:pe.trim();J&&jr(J)},[Bt,e]);const Ut=(f==null?void 0:f.trim())||(Bn==null?void 0:Bn.trim())||null,os=c.useCallback(U=>{A(J=>{const ie=J&&!J.endsWith(" ")?" ":"";return J+ie+U})},[]),is=c.useCallback((U,J)=>{const ie=fe.current;if(ie){ie.applyProgrammaticChange(U,J,J);return}A(U)},[]),{selectedQuickAction:_e,showQuickPrompts:cs,quickActionsExpanded:ls,quickActionsOverflowing:ds,visibleQuickActions:us,quickActionOptions:fs,quickActionsContainerRef:hs,quickActionsRowRef:ps,setQuickActionsExpanded:ms,handleQuickAction:gs,handleQuickPrompt:xs,handleExpertCardClick:vs,onExternalQuickActionInsert:bs,resetQuickActions:ys}=Wl({input:P,agents:j,queueAwareDisabled:tt,textareaRef:fe,applyProgrammaticInput:is,onMentionRefsChanged:w,onMentionRefsCleared:R,onQuickActionSelected:()=>{je(!1),ce(!1)}}),{workspaceFilter:ws,setWorkspaceFilter:Ar,workspaceMenuItems:Un,selectWorkspaceMenuItem:Dr}=pd({workspaceOptions:i,onSelectEmptyWorkspace:p,onSelectExistingWorkspace:m,onOpenFolderPicker:v}),{activeMenu:Ue,activeOptionsCount:Is}=Yl({showMentions:$e,showSkillMenu:vt,showWorkspaceMenu:bt,filteredAgentOptionsLength:Ze.length,filteredSkillOptionsLength:Ye.length,workspaceMenuItems:Un,selectedIdx:Xe,setSelectedIdx:ke,skillOptionRefs:At,workspaceOptionRefs:Dt,folderSelectionEnabled:h,setShowWorkspaceMenu:yt}),ks=gt(U=>U.addEntry),Ss=gt(U=>U.findMatch),Rr=fi(P),Ts=c.useMemo(()=>Fe.map(U=>U.name),[Fe]),{handleQueueEdit:Es,handleQueueSend:Pr,handleQueueDeleteSafe:Cs,handleQueueClearSafe:Ns,resolveQueueSendOptions:js,resetQueueEditState:Mr}=dd({activeQueueThreadId:Pn,queuedEntries:Ft,input:P,images:nt,skillNames:Ts,setInput:A,setImages:$t,setQueueExpanded:je,textareaRef:fe,handleQueueExtractForEdit:Fn,handleQueueMoveToIndex:ot,handleQueueDelete:On,handleQueueClear:he}),{isTemplate:zn,parsed:Hn,activePlaceholderId:_s,handlePlaceholderFocus:As,handlePlaceholderBlur:Ds,handlePlaceholderDelete:Rs,handlePlaceholderTabNext:Ps,buildSendContent:Lr,resetTemplate:$r}=di({input:P,setInput:A,textareaRef:fe}),{handleSend:Or,handleQueueSend:Fr}=Vl({input:P,images:nt,mentionOptions:S,queueAwareDisabled:tt,sendTemporarilyDisabled:Mt,guidedModeEnabled:te,selectedQuickActionLabel:_e==null?void 0:_e.label,hasPptSkillInInput:ue,selectedTemplate:Ie,queueSendDisabled:it,mentionRefs:x,onSend:t,addHistoryEntry:ks,setInput:A,setImages:$t,setShowMentions:Oe,setShowSkillMenu:Ge,setShowWorkspaceMenu:yt,setSelectedTemplate:ge,setQueueExpanded:je,clearMentionRefs:R,setGhostSuggestion:K,ghostRef:Q,resetQuickActions:ys,resolveQueueSendOptions:js}),qr=c.useCallback(()=>Pr(Fr),[Fr,Pr]);c.useEffect(()=>{$(U=>wo(P,U))},[P,x]);const Br=c.useCallback(()=>{var J;if(zn&&Hn){const{text:ie,files:pe}=Lr(),zt=Ut||((J=oe.getState().workspacePath)==null?void 0:J.trim())||null,ct=Ma(an(br(ie.trim())),S).replace(/[^\S\r\n]{2,}/g," ").trim();return ct?(t(ct,pe.length>0?pe:void 0,void 0,void 0,zt?{workspacePathForNewThread:zt}:void 0),$r(),oe.getState().clearAll(),A(""),qn(null),jr(null),!0):!1}const U=Or();return U&&Mr(),U},[zn,Hn,S,Lr,t,Or,Mr,$r,qn,Ut]),{closeMenus:ve}=Ql({closeMenusBase:Je,clearSearchFilters:wn,setWorkspaceFilter:Ar}),Ur=c.useCallback(U=>{Dr(U),ve()},[ve,Dr]),{updateMentionMenuPosition:Ms,insertMention:zr,insertSkill:Hr}=Zl({showMentions:$e,mentionStart:O,mentionEnd:q,input:P,textareaRef:fe,menuRef:qe,skillInsertAnchorRef:Be,setInput:A,setShowMentions:Oe,setShowSkillMenu:Ge,setMentionStart:B,setMentionEnd:M,setMentionMenuStyle:I,clearMentionFilter:Ne,clearSkillFilter:et,onMentionRefInserted:F}),{handleChange:Ls}=Ol({setInput:A,setShowMentions:Oe,setShowSkillMenu:Ge,setMentionStart:B,setMentionEnd:M,setMentionFilterValue:Ct,clearMentionFilter:Ne,clearSkillFilter:et,closeMenus:ve,setSelectedIdx:ke,skillInsertAnchorRef:Be});c.useEffect(()=>{if(!e)return;const U=Io(P,x,S);N(e,U)},[P,S,x,N,e]);const $s=c.useCallback(U=>{A(U),R(),ne(!1),Q.current=null,K(null),ve(),Ne(),setTimeout(()=>{var J;return(J=fe.current)==null?void 0:J.focus()},0)},[R,ve]),{handleKeyDown:Os}=Bl({input:P,hasActiveInvocation:a,activeMenu:Ue,activeOptionsCount:Is,selectedIdx:Xe,setSelectedIdx:ke,filteredAgentOptions:Ze,filteredSkillOptions:Ye,workspaceMenuItems:Un,textareaRef:fe,setInput:A,closeMenus:ve,clearMentionFilter:Ne,clearSkillFilter:et,setMentionStart:B,setMentionEnd:M,insertMention:zr,insertSkill:Hr,handleWorkspaceMenuSelect:Ur,handleSend:Br,handleQueueSend:qr,setGhostSuggestion:K,ghostRef:Q,setShowHistorySearch:ne,pathCompletion:Rr}),Wn=c.useCallback(()=>{var Vr;const U=(Vr=fe.current)==null?void 0:Vr.getElement();if(!U)return;const J=U.scrollTop,ie=U.clientHeight,pe=U.scrollHeight,zt=J+ie>=pe-2;U.style.height="auto";const ct=U.scrollHeight,Hs=Math.max(ko,Math.min(ct,Jr)),Vn=ct>Jr?"auto":"hidden",Wr=`${Hs}px`;U.style.height!==Wr&&(U.style.height=Wr),U.style.overflowY!==Vn&&(U.style.overflowY=Vn),Vn==="auto"?zt?U.scrollTop=U.scrollHeight:U.scrollTop=J:U.scrollTop=0},[]);c.useLayoutEffect(()=>{Wn()},[P,Wn]),Jl({showMentions:$e,input:P,mentionFilter:Et,updateMentionMenuPosition:Ms});const Fs=c.useCallback(()=>{const U=fe.current,J=(U==null?void 0:U.getSelectionStart())??P.length,ie=(U==null?void 0:U.getSelectionEnd())??P.length;Be.current={start:J,end:ie},It(()=>Tt(!0)),setTimeout(()=>{var pe;return(pe=fe.current)==null?void 0:pe.focus()},0)},[P,Tt,It]),qs=c.useCallback(()=>{kt()},[kt]),Bs=c.useCallback(()=>{St()},[St]),{onTemplateSelectChange:Us,onTemplatePopoverClose:zs}=Kl({showStyleTemplatePopover:wt,styleTemplatePopoverRef:Rt,styleTemplateBtnRef:jt,setShowStyleTemplatePopover:gn,selectedQuickActionLabel:_e==null?void 0:_e.label,setSelectedTemplate:ge});return td({pendingChatInsert:Bt,setPendingChatInsert:qn,threadId:e,quickActionTokenPrefix:ye,consumedRef:ss,textareaRef:fe,setInput:A,onExternalQuickActionInsert:bs,onExternalMentionInsert:(U,J)=>{Oe(!0),B(J),M(J+U.length+1),Ct(U),ke(0)},onMentionRefsChanged:w,onMentionRefsCleared:R}),Gl({threadId:e,input:P,threadDrafts:Sa}),c.useLayoutEffect(()=>{_r.current!==e&&(R(),_r.current=e)},[R,e]),Xl({input:P,findHistoryMatch:Ss,ghostRef:Q,setGhostSuggestion:K}),c.useEffect(()=>{if(!Ue)return;const U=J=>{const ie=J.target;if(!ie.isConnected)return;const pe=Ue==="skill"?Nt.current:Ue==="workspace"?_t.current:null;qe.current&&!qe.current.contains(ie)&&!(pe!=null&&pe.contains(ie))&&ve()};return document.addEventListener("mousedown",U),()=>document.removeEventListener("mousedown",U)},[Ue,ve]),c.useEffect(()=>{const U=(k==null?void 0:k.current)??null;if(U){G(U),z(U);return}const J=typeof document<"u"?document.querySelector('[data-chat-drop-scope="true"]'):null;G(J),z(J)},[k,e]),c.useEffect(()=>{e==="__new__"&&oe.getState().clearAll()},[e]),c.useEffect(()=>{oe.getState().setWorkspacePath(Ut)},[Ut]),o.jsx(Pl,{hasActiveInvocation:a,activeMenu:Ue,pathCompletion:Rr,setInput:A,textareaRef:fe,mentionDataVersion:C,filteredAgentOptions:Ze,showMentions:$e,mentionFilter:Et,onMentionSearchChange:bn,closeMenus:ve,setMentionStart:B,setMentionEnd:M,clearMentionFilter:Ne,selectedIdx:Xe,setSelectedIdx:ke,insertMention:zr,menuRef:qe,mentionMenuStyle:u,imageLifecycleStatus:Pt,uploadError:l,fileInputRef:kn,handleFileSelect:Tn,showQuickPrompts:cs,quickActionsExpanded:ls,quickActionsOverflowing:ds,visibleQuickActions:us,selectedQuickAction:_e,queueAwareDisabled:tt,quickActionsContainerRef:hs,quickActionsRowRef:ps,handleQuickAction:gs,handleQuickPrompt:xs,handleExpertCardClick:vs,setQuickActionsExpanded:ms,queueCount:qt,queuedEntries:Ft,queueAttachmentNamesByEntryId:Mn,queueExpanded:Ln,queueBusy:$n,queueHighlightedEntryId:rt,queueListRef:at,setQueueExpanded:je,handleQueueClear:Ns,handleQueuePinToTop:st,handleQueueDelete:Cs,handleQueueEdit:Es,showStyleTemplatePopover:wt,styleTemplatePopoverRef:Rt,selectedTemplate:Ie,onTemplateSelectChange:Us,onTemplatePopoverClose:zs,images:nt,handleRemoveImage:Cn,isDraggingFiles:Sn,input:P,handleChange:Ls,setIsComposing:V,resizeTextarea:Wn,handleKeyDown:Os,handlePaste:En,handleDragEnter:Nn,handleDragOver:jn,handleDragLeave:_n,handleDrop:An,skillOptionsData:Fe,quickActionOptions:fs,ghostSuggestion:Z,isComposing:W,skillInsertAnchorRef:Be,routerPush:b,skillBtnRef:Nt,styleTemplateBtnRef:jt,handleSkillClick:Fs,guidedModeEnabled:te,onToggleGuidedMode:xe,hasPptSkillInInput:ue,handleStyleTemplateClick:Bs,onClearSelectedTemplate:mn,showSkillMenu:vt,skillFilter:vn,onSkillSearchChange:yn,filteredSkillOptions:Ye,skillOptionsLoading:xn,skillOptionRefs:At,insertSkill:Hr,setWorkspaceFilter:Ar,folderSelectionEnabled:h,selectedFolderTitle:g,folderButtonLabel:Dn,shouldShowFolderTooltip:Ot,folderBtnRef:_t,workspaceSearchInputRef:In,workspaceFilter:ws,showWorkspaceMenu:bt,workspaceMenuItems:Un,workspaceOptionRefs:Dt,isFolderButtonDisabled:Rn,sendTemporarilyDisabled:Mt,queueSendDisabled:it,handleWorkspaceClick:qs,handleWorkspaceMenuSelect:Ur,handleTranscript:os,handleSend:Br,onStop:n,handleQueueSend:qr,dragOverlayHost:T,showHistorySearch:Y,handleHistorySelect:$s,setShowHistorySearch:ne,isTemplate:zn,parsed:Hn,activePlaceholderId:_s,handlePlaceholderFocus:As,handlePlaceholderBlur:Ds,handlePlaceholderDelete:Rs,handlePlaceholderTabNext:Ps})}function md(){var t,n,r;if(typeof window>"u")return null;const e=window;return((t=e.chrome)==null?void 0:t.webview)??((r=(n=e.webkit)==null?void 0:n.messageHandlers)==null?void 0:r.officeClawDesktop)??null}const dt=new Set,Vt=new Set,hr=new Map;function gd(e){if(typeof window>"u"||(window.focus(),!e))return;const t=`/thread/${encodeURIComponent(e)}`;window.location.pathname!==t&&(window.history.pushState(null,"",t),window.dispatchEvent(typeof PopStateEvent=="function"?new PopStateEvent("popstate"):new Event("popstate")))}function Qa(){typeof window>"u"||!("Notification"in window)||Notification.permission==="default"&&Notification.requestPermission()}function Ga(e){return typeof window>"u"||!("Notification"in window)?null:Notification.permission!=="granted"?(Qa(),null):Xa(e)}function Xa(e){const t=new Notification(e.title,{body:e.body,icon:"/favicon.ico"});return t.onclick=()=>{gd(e.threadId),t.close()},t}function Ja(e){const t=md();if(!t)return!1;const n=JSON.stringify({type:"desktop.notification",title:e.title,body:e.body,notificationType:e.type??"info",threadId:e.threadId??null});return t.postMessage(n),!0}function xd(e,t){if(typeof document>"u"||typeof window>"u"||!document.hidden||hr.has(e))return;const n=document.title,r=`🔐 ${t} 等你批准!`;let a=!0;const s=()=>{document.title=a?r:n,a=!a},l=window.setInterval(s,1e3);s();const h=()=>{document.hidden||d()},d=()=>{window.clearInterval(l),hr.delete(e),document.removeEventListener("visibilitychange",h),document.title=n};hr.set(e,d),document.addEventListener("visibilitychange",h)}function vd(e){var t;return!e||e==="智能体"?"智能体":((t=Da().find(n=>n.id===e))==null?void 0:t.displayName)??e}function bd(e){Qa(),Ga(e),Ja(e)}function yd(e){if(!e.requestId||dt.has(e.requestId)||Vt.has(e.requestId))return;const t=vd(e.catId),n={title:`${t} 需要权限`,body:`${e.reason}`,type:"info",threadId:e.threadId};if(xd(e.requestId,t),Ja(n)){dt.add(e.requestId);return}if(typeof document<"u"&&document.hidden){if(typeof window>"u"||!("Notification"in window))return;if(Notification.permission==="granted"){Ga(n)&&dt.add(e.requestId);return}if(Notification.permission!=="default")return;Vt.add(e.requestId),Notification.requestPermission().then(r=>{Vt.delete(e.requestId),!(r!=="granted"||dt.has(e.requestId))&&(Xa(n),dt.add(e.requestId))}).catch(()=>{Vt.delete(e.requestId)})}}const wd="office-claw:thread-live-refresh";function Kt(e,t="all",n){typeof window>"u"||!e||window.dispatchEvent(new CustomEvent(wd,{detail:{threadId:e,scope:t,reason:n}}))}function Iu(e){return Oa(e)}function ku(){return qa()}function Su(e){return on(e)}function Tu(){return Ba()}function Id(e){return $a(e)}function kd(){return{title:"检测到敏感词",message:"当前对话触发了敏感词校验,请重新打开一个新会话后再试。"}}const Sd={error_max_turns:"超出 turn 限制",error_max_budget_usd:"预算用尽",error_during_execution:"运行时错误",error_max_structured_output_retries:"结构化输出重试超限"};function Td(e){return Yo(e)}function Ed(e){if(!e)return null;try{const t=JSON.parse(e);return typeof t.errorSubtype!="string"?null:Sd[t.errorSubtype]??null}catch{return null}}function pr(e){var a,s;if(Id(e))return kd();const t=Ed(e.content),n=Td(e),r=((a=e.agentDisplayName)==null?void 0:a.trim())||((s=e.agentId)==null?void 0:s.trim());return{title:r?`${r} 出错`:"智能体出错",message:t?`${n} (${t})`:n}}function Cd(e){var t;return e.origin==="callback"&&e.agentId==="system"&&((t=e.source)==null?void 0:t.connector)==="scheduler"}function Za(e){return typeof e=="object"&&e!==null}function We(e){return e===null?null:typeof e=="string"?e:void 0}function Re(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Nd(e){const t=e.lastIndexOf("/");if(!(t<=0))return e.slice(0,t)}function jd(e){const t=e.match(/page-(\d+)\.pptx\.html$/i);if(t)return Number(t[1])}function Ta(e){if(!Za(e))return null;const t=typeof e.htmlPath=="string"?e.htmlPath:void 0,n=Re(e.pageNumber)??(t?jd(t):void 0),r=typeof e.slideId=="string"?e.slideId:n!==void 0?`slide-${n}`:void 0;return!t||n===void 0||!r?null:{slideId:r,pageNumber:n,htmlPath:t,...We(e.title)!==void 0?{title:We(e.title)}:{},...e.blockCount===null||Re(e.blockCount)!==void 0?{blockCount:Re(e.blockCount)??null}:{},...e.updatedAt===null||Re(e.updatedAt)!==void 0?{updatedAt:Re(e.updatedAt)??null}:{},...We(e.url)!==void 0?{url:We(e.url)}:{},...We(e.sha256)!==void 0?{sha256:We(e.sha256)}:{}}}function Ya(e){return e==="generating"||e==="editable"||e==="exporting"||e==="error"?e:null}function _d(e){const t=Za(e.session)?e.session:e,n=Array.isArray(t.slides)&&t.slides.length>0?t.slides.map(Ta).filter(s=>s!==null):[];if(n.length===0){const s=Ta(t);s&&n.push(s)}const r=(typeof t.pagesDir=="string"?t.pagesDir:void 0)??(n[0]?Nd(n[0].htmlPath):null);if(!r)return null;const a=Ya(t.status);return{pagesDir:r,...typeof t.deckTitle=="string"?{deckTitle:t.deckTitle}:{},...Re(t.expectedSlideCount)!==void 0?{expectedSlideCount:Re(t.expectedSlideCount)}:{},...a?{status:a}:{},slides:n}}function es(e){const t=e.trim().replace(/^[{]\s*/,"").replace(/\s*[}]$/,"").trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")||t.startsWith("`")&&t.endsWith("`")?t.slice(1,-1):t}function Qt(e,t){const n=new RegExp(String.raw`(?:^|[,{]\s*)${t}\s*:\s*("[^"]*"|'[^']*'|`+"`[^`]*`"+String.raw`|[^,}]+)`,"i"),r=e.match(n);return r!=null&&r[1]?es(r[1]):void 0}function Ad(e,t){const n=new RegExp(String.raw`\b${t}\s*:\s*(.+)$`,"is"),r=e.match(n);return r!=null&&r[1]?es(r[1]):void 0}function Dd(e){try{const n=JSON.parse(e);if(n&&typeof n=="object")return n}catch{}const t=Qt(e,"type");if(!t)return null;if(t==="thinking"){const n=Ad(e,"text");if(!n)return null;const r=Qt(e,"agentId"),a=Qt(e,"mergeStrategy");return{type:t,...r?{agentId:r}:{},...a?{mergeStrategy:a}:{},text:n}}if(t==="processing_status"){const n=Qt(e,"status");return n?{type:t,status:n}:null}return null}function Gt(e,t){const n=`${e.threadId}::${e.agentId}`,r=t.store.getThreadState(e.threadId).messages;for(let a=r.length-1;a>=0;a--){const s=r[a];if(s.type==="assistant"&&s.agentId===e.agentId&&s.isStreaming)return t.bgStreamRefs.set(n,{id:s.id,threadId:e.threadId,agentId:e.agentId}),e.metadata&&t.store.setThreadMessageMetadata(e.threadId,s.id,e.metadata),s.id}}function Rd(e,t,n){var l,h,d,g,f;let r=e.content??"",a="info",s=!1;try{const i=Dd(r);if(!i)throw new Error("not parseable system_info");if((i==null?void 0:i.type)==="ppt_studio_page"){const p=_d(i);p&&(n.store.upsertPptStudioSlides(e.threadId,p),s=!0)}else if((i==null?void 0:i.type)==="ppt_studio_export"){const p=Ya(i.status);p&&(n.store.setPptStudioStatus(e.threadId,p),s=!0)}else if((i==null?void 0:i.type)==="invocation_created"){const p=i.agentId??e.agentId,m=typeof i.invocationId=="string"?i.invocationId:void 0,v=`${e.threadId}::${p}`;if(n.finalizedBgRefs.delete(v),p&&m){n.store.setThreadLoading(e.threadId,!0),n.store.addThreadActiveInvocation(e.threadId,m,p,"execute"),n.store.updateThreadAgentStatus(e.threadId,p,"streaming"),n.store.setThreadAgentInvocation(e.threadId,p,{invocationId:m,startedAt:Date.now(),taskProgress:{tasks:[],lastUpdate:Date.now(),snapshotStatus:"running",lastInvocationId:m}});const k=(t==null?void 0:t.id)??Gt(e,n);k&&n.store.setThreadMessageStreamInvocation(e.threadId,k,m),s=!0}}else if((i==null?void 0:i.type)==="invocation_metrics"){if(i.kind==="session_started")n.store.setThreadAgentInvocation(e.threadId,e.agentId,{sessionId:i.sessionId,invocationId:i.invocationId,startedAt:Date.now(),taskProgress:{tasks:[],lastUpdate:0},...i.sessionSeq!==void 0?{sessionSeq:i.sessionSeq,sessionSealed:!1}:{}});else if(i.kind==="invocation_complete"){const p=typeof i.invocationId=="string"?i.invocationId:void 0,m=typeof i.durationMs=="number"&&Number.isFinite(i.durationMs)?i.durationMs:void 0;if(n.store.setThreadAgentInvocation(e.threadId,e.agentId,{...m!==void 0?{durationMs:m}:{},sessionId:i.sessionId}),m!==void 0&&m>=0&&p){const k=n.store.getThreadState(e.threadId).messages.find(b=>{var j,y;return b.type==="assistant"&&b.agentId===e.agentId&&((y=(j=b.extra)==null?void 0:j.stream)==null?void 0:y.invocationId)===p});k&&n.store.setThreadMessageStreamExecutionDuration(e.threadId,k.id,m)}}s=!0}else if((i==null?void 0:i.type)==="invocation_usage")n.store.setThreadAgentInvocation(e.threadId,e.agentId,{usage:i.usage}),t!=null&&t.id&&n.store.setThreadMessageUsage(e.threadId,t.id,i.usage),s=!0;else if((i==null?void 0:i.type)==="context_health"){const p=i.agentId??e.agentId;n.store.setThreadAgentInvocation(e.threadId,p,{contextHealth:i.health}),s=!0}else if((i==null?void 0:i.type)==="rate_limit"){const p=i.agentId??e.agentId;n.store.setThreadAgentInvocation(e.threadId,p,{rateLimit:{...typeof i.utilization=="number"?{utilization:i.utilization}:{},...typeof i.resetsAt=="string"?{resetsAt:i.resetsAt}:{}}}),s=!0}else if((i==null?void 0:i.type)==="compact_boundary"){const p=i.agentId??e.agentId;n.store.setThreadAgentInvocation(e.threadId,p,{compactBoundary:{...typeof i.preTokens=="number"?{preTokens:i.preTokens}:{}}}),s=!0}else if((i==null?void 0:i.type)==="task_progress"){const p=i.agentId??e.agentId,m=typeof i.invocationId=="string"?i.invocationId:(l=n.store.getThreadState(e.threadId).agentInvocations[p])==null?void 0:l.invocationId,v=i.tasks??[];n.store.setThreadAgentInvocation(e.threadId,p,{taskProgress:{tasks:v,lastUpdate:Date.now(),snapshotStatus:"running",...m?{lastInvocationId:m}:{}}}),s=!0}else if((i==null?void 0:i.type)==="web_search"){const p=typeof i.count=="number"?i.count:1;let m=t==null?void 0:t.id;if(m||(m=Gt(e,n)),!m){const v=`${e.threadId}::${e.agentId}`;m=`bg-web-${Date.now()}-${e.agentId}-${n.nextBgSeq()}`;const k=(h=n.store.getThreadState(e.threadId).agentInvocations[e.agentId])==null?void 0:h.invocationId;n.bgStreamRefs.set(v,{id:m,threadId:e.threadId,agentId:e.agentId}),n.store.addMessageToThread(e.threadId,{id:m,type:"assistant",agentId:e.agentId,content:"",...e.metadata?{metadata:e.metadata}:{},...k?{extra:{stream:{invocationId:k}}}:{},timestamp:e.timestamp,isStreaming:!0,origin:"stream"})}n.store.appendToolEventToThread(e.threadId,m,{id:`bg-web-search-${e.timestamp}-${n.nextBgSeq()}`,type:"tool_use",label:`${e.agentId} → web_search${p>1?` x${p}`:""}`,timestamp:e.timestamp}),s=!0}else if((i==null?void 0:i.type)==="rich_block"){let p;if(i.messageId){const m=n.store.getThreadState(e.threadId).messages.find(v=>v.id===i.messageId);m&&(p=m.id)}if(!p){const m=n.store.getThreadState(e.threadId).messages;for(let v=m.length-1;v>=0;v--){const k=m[v];if(!(k.type!=="assistant"||k.agentId!==e.agentId)){if(k.origin==="stream"&&k.isStreaming)break;if(k.origin==="callback"){p=k.id;break}}}}if(p||(p=(t==null?void 0:t.id)??Gt(e,n)),!p){const m=`${e.threadId}::${e.agentId}`;p=`bg-rich-${Date.now()}-${e.agentId}-${n.nextBgSeq()}`;const v=(d=n.store.getThreadState(e.threadId).agentInvocations[e.agentId])==null?void 0:d.invocationId;n.bgStreamRefs.set(m,{id:p,threadId:e.threadId,agentId:e.agentId}),n.store.addMessageToThread(e.threadId,{id:p,type:"assistant",agentId:e.agentId,content:"",...e.metadata?{metadata:e.metadata}:{},...v?{extra:{stream:{invocationId:v}}}:{},timestamp:e.timestamp,isStreaming:!0,origin:"stream"})}i.block&&n.store.appendRichBlockToThread(e.threadId,p,i.block),s=!0}else if((i==null?void 0:i.type)==="liveness_warning"){const p=i.level;n.store.updateThreadAgentStatus(e.threadId,e.agentId,p),n.store.setThreadAgentInvocation(e.threadId,e.agentId,{livenessWarning:{level:p,state:i.state,silenceDurationMs:i.silenceDurationMs,cpuTimeMs:typeof i.cpuTimeMs=="number"?i.cpuTimeMs:void 0,processAlive:i.processAlive,receivedAt:Date.now()}}),s=!0}else if((i==null?void 0:i.type)==="timeout_diagnostics")s=!0;else if((i==null?void 0:i.type)==="warning"){const p=typeof i.message=="string"?i.message:"";r=p?`⚠️ ${p}`:"⚠️ Warning",a="warning"}else if((i==null?void 0:i.type)==="processing_status")i.status!=="idle"&&n.store.updateThreadAgentStatus(e.threadId,e.agentId,"streaming"),s=!0;else if((i==null?void 0:i.type)==="strategy_allow_compress"||(i==null?void 0:i.type)==="resume_failure_stats")s=!0;else if((i==null?void 0:i.type)==="session_seal_requested"){if(i.agentId){n.store.setThreadAgentInvocation(e.threadId,i.agentId,{sessionSeq:i.sessionSeq,sessionSealed:!0});const p=(g=i.healthSnapshot)!=null&&g.fillRatio?Math.round(i.healthSnapshot.fillRatio*100):"?";r=`${i.agentId} 的会话 #${i.sessionSeq} 已封存(上下文 ${p}%),下次调用将自动创建新会话`}}else if((i==null?void 0:i.type)==="a2a_followup_available"){const p=i.mentions;Array.isArray(p)&&p.length>0&&(r=p.map(m=>`${m.mentionedBy} @了 ${m.agentId}`).join("、"),a="a2a_followup")}else if((i==null?void 0:i.type)==="mode_switch_proposal")r=`${i.proposedBy??"智能体"} 提议切换到 ${i.proposedMode} 模式。`;else if((i==null?void 0:i.type)==="silent_completion")r=(typeof i.detail=="string"?i.detail:"")||`${e.agentId} completed without a text response.`;else if((i==null?void 0:i.type)==="invocation_preempted")r="This response was superseded by a newer request.";else if((i==null?void 0:i.type)==="thinking"){const p=i.text??"";if(p){let m=t==null?void 0:t.id;if(m||(m=Gt(e,n)),!m){const v=`${e.threadId}::${e.agentId}`;m=`bg-think-${Date.now()}-${e.agentId}-${n.nextBgSeq()}`;const k=(f=n.store.getThreadState(e.threadId).agentInvocations[e.agentId])==null?void 0:f.invocationId;n.bgStreamRefs.set(v,{id:m,threadId:e.threadId,agentId:e.agentId}),n.store.addMessageToThread(e.threadId,{id:m,type:"assistant",agentId:e.agentId,content:"",...e.metadata?{metadata:e.metadata}:{},...k?{extra:{stream:{invocationId:k}}}:{},timestamp:e.timestamp,isStreaming:!0,origin:"stream"})}n.store.setThreadMessageThinking(e.threadId,m,p)}s=!0}}catch{}return{consumed:s,content:r,variant:a}}const Pd={streaming:"streaming",thinking:"pending",done:"done"};function Md(e){return`${e.threadId}::${e.agentId}`}function Xt(e){var t;return((t=Da().find(n=>n.id===e))==null?void 0:t.displayName)??e}function Se(e,t){var r,a;const n={...(r=e.extra)!=null&&r.crossPost?{crossPost:e.extra.crossPost}:{},...(a=e.extra)!=null&&a.errorFallback?{errorFallback:e.extra.errorFallback}:{},...t?{stream:{invocationId:t}}:{}};return Object.keys(n).length>0?n:void 0}function Ea(e,t){var r,a;const n=((r=e.extra)==null?void 0:r.errorFallback)??((a=t==null?void 0:t.extra)==null?void 0:a.errorFallback);return n!=null&&n.rawError?{rawError:n.rawError}:null}function ts(e,t){if(!e)return;const n=Object.entries(e);for(let r=n.length-1;r>=0;r--){const[a,s]=n[r];if(s.agentId===t)return a}}function Ld(e){return e.threadId?e.type==="done"?!0:e.type==="error"?e.isFinal===!0:!!(e.type==="text"&&e.isFinal):!1}function xt(e,t){var r;const n=t.store.getThreadState(e.threadId);return((r=n.agentInvocations[e.agentId])==null?void 0:r.invocationId)??ts(n.activeInvocations,e.agentId)}function $d(e,t){!Ld(e)||!e.threadId||t.delete(`${e.threadId}::${e.agentId}`)}function Ca(e,t,n){const r=n.bgStreamRefs.get(e);if(r)return n.store.setThreadMessageStreaming(t.threadId,r.id,!1),n.finalizedBgRefs.set(e,r.id),n.bgStreamRefs.delete(e),r}function mr(e,t){t.backgroundErrorToastsShown.add(e)}function Od(e,t){return t.backgroundErrorToastsShown.has(e)}function Fd(e,t){return e.length<=t?e:`${e.slice(0,t)}...`}function Na(e,t){try{return Fd(JSON.stringify(e),t)}catch{return"[unserializable input]"}}function qd(e,t){if(t!=null){if(e==="send_file_to_user")try{return JSON.stringify(t)}catch{return Na(t,200)}return Na(t,200)}}function Bd(e,t,n,r="info"){t.store.addMessageToThread(e.threadId,{id:`bg-sys-${e.timestamp}-${e.agentId}-${t.nextBgSeq()}`,type:"system",variant:r,agentId:e.agentId,content:n,timestamp:e.timestamp})}function ns(e,t,n){var a,s;const r=n.store.getThreadState(e.threadId).messages;for(let l=r.length-1;l>=0;l--){const h=r[l];if(h.type==="assistant"&&h.agentId===e.agentId&&h.isStreaming)return n.bgStreamRefs.set(t,{id:h.id,threadId:e.threadId,agentId:e.agentId}),dn({event:"bubble_lifecycle",threadId:e.threadId,timestamp:e.timestamp,action:"recover",reason:"background_ref_lost",agentId:e.agentId,messageId:h.id,invocationId:(s=(a=h.extra)==null?void 0:a.stream)==null?void 0:s.invocationId,origin:"stream"}),h.id}}function Ud(e,t){var l,h,d,g;const n=e.invocationId??xt(e,t),r=t.store.getThreadState(e.threadId).messages;if(n)for(let f=r.length-1;f>=0;f-=1){const i=r[f];if((i==null?void 0:i.type)==="assistant"&&i.agentId===e.agentId&&i.origin==="stream"&&((h=(l=i.extra)==null?void 0:l.stream)==null?void 0:h.invocationId)===n)return{id:i.id,invocationId:n}}for(let f=r.length-1;f>=0;f-=1){const i=r[f];if((i==null?void 0:i.type)==="assistant"&&i.agentId===e.agentId&&i.origin==="stream"&&i.isStreaming&&!((g=(d=i.extra)==null?void 0:d.stream)!=null&&g.invocationId))return{id:i.id,invocationId:n??null}}const a=`${e.threadId}::${e.agentId}`,s=t.finalizedBgRefs.get(a);if(s){const f=r.find(i=>i.id===s&&i.type==="assistant"&&i.agentId===e.agentId&&i.origin==="stream");if(f)return{id:f.id,invocationId:n??null}}return null}function zd(e,t,n){const r=n.replacedInvocations.get(t);if(!r)return!1;const a=e.invocationId??xt(e,n);return a&&a!==r?(n.replacedInvocations.delete(t),!1):(dn({event:"bubble_lifecycle",threadId:e.threadId,timestamp:e.timestamp,action:"drop",reason:"late_stream_after_callback_replace",agentId:e.agentId,invocationId:r,origin:"stream"}),!0)}function ja(e,t,n,r){if(n!=null&&n.id)return e.metadata&&r.store.setThreadMessageMetadata(e.threadId,n.id,e.metadata),n.id;const a=ns(e,t,r);if(a)return e.metadata&&r.store.setThreadMessageMetadata(e.threadId,a,e.metadata),a;const s=`bg-tool-${e.timestamp}-${e.agentId}-${r.nextBgSeq()}`,l=xt(e,r);return r.bgStreamRefs.set(t,{id:s,threadId:e.threadId,agentId:e.agentId}),r.store.addMessageToThread(e.threadId,{id:s,type:"assistant",agentId:e.agentId,content:"",...e.metadata?{metadata:e.metadata}:{},...l?{extra:{stream:{invocationId:l}}}:{},timestamp:e.timestamp,isStreaming:!0,origin:"stream"}),s}function Jt(e,t){const n=t.store.getThreadState(e.threadId);n.isLoading||t.store.setThreadLoading(e.threadId,!0),e.invocationId?t.store.addThreadActiveInvocation(e.threadId,e.invocationId,e.agentId,"execute"):n.hasActiveInvocation||t.store.setThreadHasActiveInvocation(e.threadId,!0)}function Zt(e,t){if(t.store.setThreadLoading(e.threadId,!1),t.store.setThreadAgentInvocation(e.threadId,e.agentId,{invocationId:void 0}),e.invocationId)t.store.removeThreadActiveInvocation(e.threadId,e.invocationId);else{const n=t.store.getThreadState(e.threadId),r=ts(n.activeInvocations,e.agentId);r?t.store.removeThreadActiveInvocation(e.threadId,r):t.store.setThreadHasActiveInvocation(e.threadId,!1)}}function Hd(e,t){var a,s,l,h,d,g,f,i,p,m,v,k,b,j,y;if(Cd(e))return;const n=Md(e),r=t.bgStreamRefs.get(n);if(e.type==="text"&&e.content){const C=e.origin==="callback";C||Jt(e,t);let D;if(e.origin==="callback"){const S=Ud(e,t);if(S){const N=e.messageId??S.id;N!==S.id&&t.store.replaceThreadMessageId(e.threadId,S.id,N),t.store.patchThreadMessage(e.threadId,N,{content:e.content,origin:"callback",isStreaming:!1,...e.metadata?{metadata:e.metadata}:{},...Se(e,S.invocationId)?{extra:Se(e,S.invocationId)}:{},...e.mentionsUser?{mentionsUser:!0}:{},...e.replyTo?{replyTo:e.replyTo}:{},...e.replyPreview?{replyPreview:e.replyPreview}:{}}),t.bgStreamRefs.delete(n),t.finalizedBgRefs.delete(n),S.invocationId&&t.replacedInvocations.set(n,S.invocationId),D=N}else{const N=e.messageId??`bg-cb-${e.timestamp}-${e.agentId}-${t.nextBgSeq()}`,P=e.invocationId??xt(e,t);t.store.addMessageToThread(e.threadId,{id:N,type:"assistant",agentId:e.agentId,content:e.content,...e.metadata?{metadata:e.metadata}:{},...Se(e,P)?{extra:Se(e,P)}:{},...e.mentionsUser?{mentionsUser:!0}:{},...e.replyTo?{replyTo:e.replyTo}:{},...e.replyPreview?{replyPreview:e.replyPreview}:{},timestamp:e.timestamp,origin:"callback"}),P&&t.replacedInvocations.set(n,P),D=N}}else{if(zd(e,n,t))return;let S=r==null?void 0:r.id;if(S||(S=ns(e,n,t)),S){const N=Ea(e);t.store.batchStreamChunkUpdate({threadId:e.threadId,messageId:S,agentId:e.agentId,content:e.content,metadata:e.metadata,streaming:!e.isFinal,nextAgentStatus:N?"error":e.isFinal?"done":"streaming"}),(e.replyTo||e.replyPreview||N)&&t.store.patchThreadMessage(e.threadId,S,{...Se(e)?{extra:Se(e)}:{},...e.replyTo?{replyTo:e.replyTo}:{},...e.replyPreview?{replyPreview:e.replyPreview}:{}}),e.isFinal&&t.bgStreamRefs.delete(n)}else{S=`bg-${e.timestamp}-${e.agentId}-${t.nextBgSeq()}`;const N=xt(e,t);t.bgStreamRefs.set(n,{id:S,threadId:e.threadId,agentId:e.agentId}),t.store.addMessageToThread(e.threadId,{id:S,type:"assistant",agentId:e.agentId,content:e.content,...e.metadata?{metadata:e.metadata}:{},...Se(e,N)?{extra:Se(e,N)}:{},...e.replyTo?{replyTo:e.replyTo}:{},...e.replyPreview?{replyPreview:e.replyPreview}:{},timestamp:e.timestamp,isStreaming:!e.isFinal,origin:"stream"}),t.store.updateThreadAgentStatus(e.threadId,e.agentId,(a=e.extra)!=null&&a.errorFallback?"error":e.isFinal?"done":"streaming"),e.isFinal&&t.bgStreamRefs.delete(n)}D=S}const E=Ea(e);if(C&&e.isFinal&&t.store.updateThreadAgentStatus(e.threadId,e.agentId,E?"error":"done"),e.isFinal){(s=t.clearDoneTimeout)==null||s.call(t,e.threadId);const S=D?t.store.getThreadState(e.threadId).messages.find(A=>A.id===D):void 0,N=(S==null?void 0:S.content)??e.content,P=Xt(e.agentId);Zt(e,t);const L=E?"error":"success",x=E?`${P} 出错`:`${P} 完成`,$=N.slice(0,80)+(N.length>80?"...":"");if((l=t.notifyTaskComplete)==null||l.call(t,x,$,L,e.threadId),E){const A=pr({agentId:e.agentId,agentDisplayName:P,error:E.rawError,errorCode:e.errorCode});t.addToast({type:"error",title:A.title,message:N||A.message,threadId:e.threadId,threadTitle:((h=t.getThreadTitle)==null?void 0:h.call(t,e.threadId))??void 0,duration:8e3}),mr(n,t);return}t.addToast({type:"success",title:`${P} 完成`,message:N.slice(0,80)+(N.length>80?"...":""),threadId:e.threadId,threadTitle:((d=t.getThreadTitle)==null?void 0:d.call(t,e.threadId))??void 0,duration:5e3})}return}if(e.type==="error"){if(console.warn("[useSocket-background] Received raw error event in background:",{agentId:e.agentId,threadId:e.threadId}),Jt(e,t),Ca(n,e,t),dn({event:"agent_message",threadId:e.threadId,timestamp:e.timestamp,agentId:e.agentId,invocationId:e.invocationId,reason:e.error??"Unknown error",action:"error_fallback_background_degradation",origin:e.origin}),t.store.updateThreadAgentStatus(e.threadId,e.agentId,"error"),e.isFinal){(g=t.clearDoneTimeout)==null||g.call(t,e.threadId),Zt(e,t);const D=Xt(e.agentId);(f=t.notifyTaskComplete)==null||f.call(t,`${D} 出错`,e.error??"Unknown error","error",e.threadId)}const C=pr({...e,agentDisplayName:Xt(e.agentId)});t.addToast({type:"error",title:C.title,message:C.message,threadId:e.threadId,threadTitle:((i=t.getThreadTitle)==null?void 0:i.call(t,e.threadId))??void 0,duration:8e3}),mr(n,t);return}if(e.type==="done"){Ca(n,e,t);const C=t.store.getThreadState(e.threadId).agentStatuses[e.agentId],D=t.store.getThreadState(e.threadId).messages.filter(N=>N.type==="assistant"&&N.agentId===e.agentId).at(-1),E=(p=D==null?void 0:D.extra)==null?void 0:p.errorFallback,S=Xt(e.agentId);if(String(C)==="error"||E){if(t.store.updateThreadAgentStatus(e.threadId,e.agentId,"error"),(m=t.notifyTaskComplete)==null||m.call(t,`${S} 出错`,(D==null?void 0:D.content)??"Unknown error","error",e.threadId),String(C)!=="error"&&E&&!Od(n,t)){const N=pr({agentId:e.agentId,agentDisplayName:S,error:E.rawError,errorCode:e.errorCode});t.addToast({type:"error",title:N.title,message:(D==null?void 0:D.content)||N.message,threadId:e.threadId,threadTitle:((v=t.getThreadTitle)==null?void 0:v.call(t,e.threadId))??void 0,duration:8e3}),mr(n,t)}t.backgroundErrorToastsShown.delete(n),e.isFinal&&((k=t.clearDoneTimeout)==null||k.call(t,e.threadId),Zt(e,t));return}String(C)!=="error"&&(t.store.updateThreadAgentStatus(e.threadId,e.agentId,"done"),(b=t.notifyTaskComplete)==null||b.call(t,`${S} 完成`,`${S} 已完成处理`,"success",e.threadId),t.addToast({type:"success",title:`${S} 完成`,message:`${S} 已完成处理`,threadId:e.threadId,threadTitle:((j=t.getThreadTitle)==null?void 0:j.call(t,e.threadId))??void 0,duration:5e3})),t.backgroundErrorToastsShown.delete(n),e.isFinal&&((y=t.clearDoneTimeout)==null||y.call(t,e.threadId),Zt(e,t));return}if(e.type==="status"){const C=Pd[e.content??""]??"streaming";t.store.updateThreadAgentStatus(e.threadId,e.agentId,C);return}if(e.type==="tool_use"){Jt(e,t);const C=e.toolName??"unknown",D=qd(C,e.toolInput),E=ja(e,n,r,t);t.store.appendToolEventToThread(e.threadId,E,{id:e.toolCallId??`bg-tool-use-${e.timestamp}-${t.nextBgSeq()}`,type:"tool_use",label:`${e.agentId} → ${C}`,...D?{detail:D}:{},...e.toolCallId?{toolCallId:e.toolCallId}:{},timestamp:e.timestamp}),t.store.setThreadMessageStreaming(e.threadId,E,!0),t.store.updateThreadAgentStatus(e.threadId,e.agentId,"streaming");return}if(e.type==="tool_result"){Jt(e,t);const C=ja(e,n,r,t);t.store.appendToolEventToThread(e.threadId,C,{id:e.toolCallId??`bg-tool-result-${e.timestamp}-${t.nextBgSeq()}`,type:"tool_result",label:`${e.agentId} ← result`,detail:e.content??"",...e.toolCallId?{toolCallId:e.toolCallId}:{},timestamp:e.timestamp}),t.store.setThreadMessageStreaming(e.threadId,C,!0),t.store.updateThreadAgentStatus(e.threadId,e.agentId,"streaming");return}if(e.type==="system_info"){if(!e.content)return;const C=Rd(e,r,t);C.consumed||Bd(e,t,C.content,C.variant)}}function rs(e){return`office-claw:ws:joined-rooms:v1:${e.trim()||"anonymous"}`}function as(e){return`cat-cafe:ws:joined-rooms:v1:${e.trim()||"anonymous"}`}function Wd(e){return typeof e=="string"&&e.startsWith("thread:")}function Vd(e){if(typeof window>"u")return new Set;const t=rs(e),n=as(e);let r=window.sessionStorage.getItem(t);if(r||(r=window.sessionStorage.getItem(n)),!r)return new Set;try{const a=JSON.parse(r);if(!Array.isArray(a))return new Set;const s=new Set(a.filter(Wd));if(window.sessionStorage.getItem(t)===null&&window.sessionStorage.getItem(n)!==null)try{window.sessionStorage.setItem(t,JSON.stringify([...s])),window.sessionStorage.removeItem(n)}catch{}return s}catch(a){console.warn("[ws] Failed to parse persisted rooms, resetting cache",{error:a});try{window.sessionStorage.removeItem(t),window.sessionStorage.removeItem(n)}catch{}return new Set}}function Kd(e,t){if(typeof window>"u")return;const n=rs(e),r=as(e);try{window.sessionStorage.setItem(n,JSON.stringify([...t]));try{window.sessionStorage.removeItem(r)}catch{}}catch{}}let gr=null;function be(){if(gr)return gr;const e=document.createElement("audio");return e.id="voice-stream-audio",e.style.display="none",e.preload="auto",document.body.appendChild(e),gr=e,e}class Qd{constructor(t){this.queue=[],this.blobUrls=[],this.state="idle",this.activeInvocationId=null,this.streamDone=!1,this.firstChunkPlayed=!1,this.batchItemIndex=0,this.batchMode=!1,this.batchId=0,this.callbacks=t}handleStreamStart(t){this.activeInvocationId&&this.activeInvocationId!==t.invocationId&&this.interrupt(),this.activeInvocationId=t.invocationId,this.streamDone=!1,this.firstChunkPlayed=!1,this.batchMode=!1}handleChunk(t){if(t.invocationId!==this.activeInvocationId)return;const n=t.format==="mp3"?"audio/mpeg":"audio/wav",r=atob(t.audioBase64),a=new Uint8Array(r.length);for(let h=0;h<r.length;h++)a[h]=r.charCodeAt(h);const s=new Blob([a],{type:n}),l=URL.createObjectURL(s);this.blobUrls.push(l),!this.firstChunkPlayed&&this.state!=="paused"?(this.firstChunkPlayed=!0,this.playUrl(l)):this.state==="idle"?this.playUrl(l):(this.queue.push(l),be().ended&&this.state==="playing"&&this.playNext())}handleStreamEnd(t){if(t.invocationId!==this.activeInvocationId)return;if(this.streamDone=!0,t.totalChunks===-1){this.interrupt();return}const n=be();this.queue.length===0&&(!this.firstChunkPlayed||n.ended)&&this.setState("idle")}async enqueueUrl(t,n=fetch){const r=this.batchId;let a;try{a=await n(t)}catch(d){console.error("[PlaybackManager] enqueueUrl fetch rejected:",d);return}if(this.batchId!==r)return;if(!a.ok){console.error(`[PlaybackManager] enqueueUrl fetch failed: ${a.status}`);return}let s;try{s=await a.blob()}catch(d){console.error("[PlaybackManager] enqueueUrl blob() rejected:",d);return}if(this.batchId!==r)return;const l=URL.createObjectURL(s);this.blobUrls.push(l);const h=be();this.state==="idle"||this.state==="playing"&&h.ended?this.playUrl(l):this.queue.push(l)}async startBatch(t,n=fetch){this.interrupt(),this.batchId++;const r=this.batchId;this.batchMode=!0,this.batchItemIndex=0,this.streamDone=!1;for(const s of t){if(this.batchId!==r)return;await this.enqueueUrl(s,n)}if(this.batchId!==r)return;this.streamDone=!0;const a=be();this.queue.length===0&&a.ended&&this.state==="playing"&&this.setState("idle")}isBatchActive(){return this.batchMode&&this.state!=="idle"}onItemEnd(t){const n=this.callbacks.onItemEnd;return this.callbacks.onItemEnd=r=>{n==null||n(r),t(r)},()=>{this.callbacks.onItemEnd=n}}onStateIdle(t){const n=this.callbacks.onStateChange;return this.callbacks.onStateChange=r=>{n(r),r==="idle"&&t()},()=>{this.callbacks.onStateChange=n}}markDone(){this.streamDone=!0}pause(){if(this.state!=="playing")return;be().pause(),this.setState("paused")}resume(){if(this.state!=="paused")return;const t=be();t.src?(t.play().catch(()=>this.setState("idle")),this.setState("playing")):this.queue.length>0?this.playNext():this.setState("idle")}skip(){const t=be();t.pause(),t.removeAttribute("src"),t.onended=null,this.queue.length>0?this.playNext():this.streamDone?this.setState("idle"):this.setState("idle")}interrupt(){this.batchId++;const t=be();t.pause(),t.removeAttribute("src"),t.onended=null,t.onerror=null,this.queue=[],this.cleanupBlobUrls(),this.activeInvocationId=null,this.streamDone=!1,this.firstChunkPlayed=!1,this.batchMode=!1,this.batchItemIndex=0,this.setState("idle")}destroy(){this.interrupt()}getState(){return this.state}getActiveInvocationId(){return this.activeInvocationId}playUrl(t){const n=be();n.src=t,n.onended=()=>{var r,a;this.batchMode&&((a=(r=this.callbacks).onItemEnd)==null||a.call(r,this.batchItemIndex),this.batchItemIndex++),this.playNext()},n.onerror=()=>{console.error("[PlaybackManager] Audio playback error"),this.batchMode&&this.batchItemIndex++,this.playNext()},this.setState("playing"),n.play().catch(()=>{console.error("[PlaybackManager] play() rejected"),this.setState("idle")})}playNext(){const t=this.queue.shift();t?this.playUrl(t):this.streamDone&&(this.batchMode&&(this.batchMode=!1,this.batchItemIndex=0),this.setState("idle"))}setState(t){this.state!==t&&(this.state=t,this.callbacks.onStateChange(t))}cleanupBlobUrls(){for(const t of this.blobUrls)URL.revokeObjectURL(t);this.blobUrls=[]}}function _a(e,t){le(`/api/threads/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({voiceMode:t})}).catch(()=>{})}let Aa=0;const xr=new Map,Me=cn((e,t)=>({session:null,start:(n,r,a)=>{Aa++,e({session:{sessionId:`vs-${Date.now()}-${Aa}`,boundThreadId:n,activeCatId:r,voiceMode:!0,autoplayUnlocked:a,playbackState:"idle",playedBlockIds:new Set,liveStreamActive:!1,liveStreamedInvocationIds:new Set}}),_a(n,!0)},stop:()=>{const{session:n}=t();e({session:null}),n!=null&&n.boundThreadId&&_a(n.boundThreadId,!1)},confirmAutoplayUnlocked:()=>{const{session:n}=t();n&&e({session:{...n,autoplayUnlocked:!0}})},setPlaybackState:n=>{const{session:r}=t();r&&e({session:{...r,playbackState:n}})},markPlayed:n=>{const{session:r}=t();if(!r)return;const a=new Set(r.playedBlockIds);a.add(n),e({session:{...r,playedBlockIds:a}})},hasPlayed:n=>{const{session:r}=t();return(r==null?void 0:r.playedBlockIds.has(n))??!1},setLiveStreamActive:(n,r)=>{const{session:a}=t();if(!a)return;const s=new Set(a.liveStreamedInvocationIds);n&&r&&s.add(r),e({session:{...a,liveStreamActive:n,liveStreamedInvocationIds:s}})},isLiveStreamedInvocation:n=>{const{session:r}=t();return(r==null?void 0:r.liveStreamedInvocationIds.has(n))??!1},registerStopCallback:(n,r)=>(xr.set(n,r),()=>{xr.delete(n)}),stopAllAudio:()=>{for(const n of xr.values())n()}}));let re=null;function Cr(){return re||(re=new Qd({onStateChange:e=>{const t=Me.getState();e==="idle"?t.setPlaybackState("idle"):e==="playing"?t.setPlaybackState("playing"):e==="paused"&&t.setPlaybackState("paused")}}),Me.getState().registerStopCallback("playback-manager",()=>{re==null||re.interrupt()}),re)}function Nr(e){const{session:t}=Me.getState();return!(!(t!=null&&t.voiceMode)||t.boundThreadId!==e.threadId||t.activeCatId!==e.agentId)}function Gd(e){Nr(e)&&(Me.getState().setLiveStreamActive(!0,e.invocationId),Cr().handleStreamStart(e))}function Xd(e){if(!Nr(e))return;Cr().handleChunk(e),Me.getState().confirmAutoplayUnlocked()}function Jd(e){Nr(e)&&(Cr().handleStreamEnd(e),Me.getState().setLiveStreamActive(!1))}function Eu(){const e=Me(a=>a.session);c.useEffect(()=>(e!=null&&e.voiceMode||re==null||re.interrupt(),()=>{re==null||re.destroy(),re=null}),[e==null?void 0:e.voiceMode]);const t=c.useCallback(()=>re==null?void 0:re.pause(),[]),n=c.useCallback(()=>re==null?void 0:re.resume(),[]),r=c.useCallback(()=>re==null?void 0:re.skip(),[]);return{pause:t,resume:n,skip:r}}const Zd=new Set(["weixin","xiaoyi","feishu","dingtalk"]);function Yd(e){return typeof e=="string"&&Zd.has(e)}function Ve(e){return typeof e=="string"?e:null}function eu(e){const t=Ve(e.requestId),n=Ve(e.threadId);!t||!n||(La.getState().registerPending(n,t),yd({requestId:t,threadId:n,catId:Ve(e.agentId)??Ve(e.catId)??"智能体",action:Ve(e.action)??"工具调用",reason:Ve(e.reason)??"需要你的审批"}))}const tu=500,nu=25,ru=80,au=1200,su=700,ou=2e3;let ut=0;function iu(e){var s;const t=++ut,n=ee.getState(),r=new Set;e&&r.add(e);for(const[l,h]of Object.entries(n.threadStates??{}))l!==e&&(h.hasActiveInvocation||(s=h.messages)!=null&&s.some(d=>d.type==="assistant"&&d.isStreaming))&&r.add(l);const a=[...r];a.length!==0&&setTimeout(async()=>{if(t===ut)for(const l of a){if(t!==ut)return;try{const h=await le(`/api/threads/${l}/queue`);if(t!==ut)return;if(!h.ok)continue;const d=await h.json();if(t!==ut)return;const g=ee.getState(),f=d.activeInvocations&&d.activeInvocations.length>0?d.activeInvocations:null,i=g.currentThreadId===l;if(f){g.clearThreadActiveInvocation(l),g.replaceThreadTargetAgents(l,f);for(const p of f){g.updateThreadAgentStatus(l,p,"streaming");const m=`hydrated-${l}-${p}`;i?g.addActiveInvocation(m,p,"execute"):g.addThreadActiveInvocation(l,m,p,"execute")}console.log("[ws] Reconnect reconciliation: re-hydrated active slots from server",{threadId:l,agentIds:f}),d.queue!==void 0&&(g.setQueue(l,d.queue),d.paused!==void 0&&g.setQueuePaused(l,d.paused,d.pauseReason));continue}if(i){const p=g.messages.some(m=>m.type==="assistant"&&m.isStreaming);g.hasActiveInvocation?(g.clearAllActiveInvocations(),g.setLoading(!1),g.setIntentMode(null),g.clearAgentStatuses(),console.log("[ws] Reconnect reconciliation: cleared stale active-thread invocation state",{threadId:l})):p&&(g.clearAgentStatuses(),console.log("[ws] Reconnect reconciliation: finalized stuck stream bubbles (server idle)",{threadId:l}));for(const m of g.messages)m.type==="assistant"&&m.isStreaming&&g.setStreaming(m.id,!1);d.queue!==void 0&&(g.setQueue(l,d.queue),d.paused!==void 0&&g.setQueuePaused(l,d.paused,d.pauseReason))}else{const p=g.getThreadState(l),m=p.messages.some(v=>v.type==="assistant"&&v.isStreaming);p.hasActiveInvocation?(g.clearThreadActiveInvocation(l),g.setThreadLoading(l,!1),console.log("[ws] Reconnect reconciliation: cleared stale background-thread invocation state",{threadId:l})):m&&console.log("[ws] Reconnect reconciliation: finalized stuck background stream bubbles (server idle)",{threadId:l});for(const v of p.messages)v.type==="assistant"&&v.isStreaming&&g.setThreadMessageStreaming(l,v.id,!1)}}catch{}}},ou)}function Cu(e,t,n=[]){const r=c.useRef(null),a=c.useRef(new Set),s=c.useRef(new Map),l=c.useRef(new Map),h=c.useRef(new Set),d=c.useRef(new Map),g=c.useRef(0),f=c.useRef(Gr()),i=c.useRef(t),p=c.useRef(new Map),m=c.useRef(new Map),v=c.useRef(new Map),k=c.useRef(new Map),b=c.useRef(new Set),j=c.useRef(e);j.current=e;const y=c.useCallback(()=>{Kd(f.current,a.current)},[]),C=c.useMemo(()=>{const L=new Set,x=[];for(const $ of n){if(typeof $!="string")continue;const A=$.trim();!A||L.has(A)||(L.add(A),x.push(A))}return x},[n]);i.current=t,c.useEffect(()=>{f.current=Gr(),a.current=Vd(f.current),i.current&&a.current.add(`thread:${i.current}`),y(),Ks(),Qs();const L=u=>{if(!ze())return;const I=ee.getState(),_=u.threadId,W=_?I.getThreadState(_):null;dn({...u,timestamp:u.timestamp??Date.now(),routeThreadId:u.routeThreadId??i.current,storeThreadId:u.storeThreadId??I.currentThreadId,queuePaused:u.queuePaused??(W==null?void 0:W.queuePaused),hasActiveInvocation:u.hasActiveInvocation??(W==null?void 0:W.hasActiveInvocation)})},x=_o(ao,{transports:["websocket","polling"],auth:{userId:f.current}}),$=()=>{var I;const u=x.io.engine;return((I=u==null?void 0:u.transport)==null?void 0:I.name)??"unknown"},A=()=>{const u=x.io.engine,I=u==null?void 0:u.transport;if(!I||I.name!=="websocket"||!I.ws)return;const _=I.ws;_.__catCafeCloseLoggerAttached||(_.__catCafeCloseLoggerAttached=!0,_.addEventListener("close",W=>{console.warn("[ws] Native close",{code:W.code,reason:W.reason,wasClean:W.wasClean})}))};x.on("connect",()=>{console.log("[ws] Connected",{socketId:x.id,transport:$(),threadId:i.current??null,rooms:[...a.current]}),A();const u=[];for(const _ of a.current)x.emit("join_room",_),u.push(_);const I=i.current;if(I){const _=`thread:${I}`;a.current.has(_)||(x.emit("join_room",_),a.current.add(_),u.push(_))}y(),console.log("[ws] Rejoined rooms",{count:u.length,rooms:u}),L({event:"connect",threadId:I??void 0,action:$()}),L({event:"rejoin_rooms",threadId:I??void 0,queueLength:u.length}),I&&Kt(I,"messages","socket-reconnect"),iu(I??null)});const F=(u,I)=>{var V,Z;const _=i.current??ee.getState().currentThreadId,W=Date.now();if(L({event:I.type==="done"?"done":"agent_message",action:u,threadId:void 0,isFinal:I.isFinal===!0}),_){const K=p.current.get(_)??0;W-K>=au&&(p.current.set(_,W),Kt(_,"messages",u),(Z=(V=ee.getState()).requestStreamCatchUp)==null||Z.call(V,_))}console.warn("[ws] Dropping agent_message without threadId to prevent cross-thread contamination",{type:I.type,agentId:I.agentId,invocationId:I.invocationId,refreshThreadId:_??null,reason:u})},w=(u,I)=>{const _=v.current.get(u);if(!_||_.length===0)return;const W=k.current.get(u);W&&(clearTimeout(W),k.current.delete(u)),v.current.delete(u);for(const V of _)R({...V,threadId:I},V,!0)},R=(u,I,_=!1)=>{u.threadId&&u.invocationId&&(m.current.set(u.invocationId,u.threadId),w(u.invocationId,u.threadId));const W=i.current,V=ee.getState().currentThreadId,Z=!!(u.threadId&&W&&V&&u.threadId===W&&u.threadId===V);if(L({event:u.type==="done"?"done":"agent_message",threadId:u.threadId,action:_||u.threadId!==I.threadId?"recover_missing_thread_id":u.type,isFinal:u.isFinal===!0}),!u.threadId){if(u.invocationId){const K=u.invocationId,T=v.current.get(K);if(T)T.push(u);else{v.current.set(K,[u]);const z=setTimeout(()=>{const H=v.current.get(K);if(v.current.delete(K),k.current.delete(K),!(!H||H.length===0))for(const G of H)F("drop_missing_thread_id_timeout",G)},su);k.current.set(K,z)}L({event:u.type==="done"?"done":"agent_message",action:"buffer_missing_thread_id",threadId:void 0,isFinal:u.isFinal===!0});return}F("drop_missing_thread_id",u);return}if(Z){if(j.current.onMessage(u),$d(u,s.current),u.isFinal&&u.invocationId){m.current.delete(u.invocationId);const K=k.current.get(u.invocationId);K&&(clearTimeout(K),k.current.delete(u.invocationId)),v.current.delete(u.invocationId)}return}if(Hd(u,{store:ee.getState(),bgStreamRefs:s.current,finalizedBgRefs:d.current,replacedInvocations:l.current,backgroundErrorToastsShown:h.current,nextBgSeq:()=>g.current++,addToast:K=>mt.getState().addToast(K),getThreadTitle:K=>{var T;return(T=ee.getState().threads.find(z=>z.id===K))==null?void 0:T.title},clearDoneTimeout:j.current.clearDoneTimeout,notifyTaskComplete:(K,T,z,H)=>bd({title:K,body:T,type:z,threadId:H})}),u.isFinal&&u.invocationId){m.current.delete(u.invocationId);const K=k.current.get(u.invocationId);K&&(clearTimeout(K),k.current.delete(u.invocationId)),v.current.delete(u.invocationId)}};x.on("agent_message",u=>{let I=u.threadId;!I&&u.invocationId&&(I=m.current.get(u.invocationId));const _=I&&I!==u.threadId?{...u,threadId:I}:u;R(_,u)}),x.on("thread_updated",u=>{var I,_;(_=(I=j.current).onThreadUpdated)==null||_.call(I,u)}),x.on("thread_created",u=>{var I,_;(_=(I=j.current).onThreadCreated)==null||_.call(I,u)}),x.on("skill_options_changed",()=>{No()}),x.on("intent_mode",u=>{var V,Z,K,T;const I=i.current,_=ee.getState().currentThreadId;if(L({event:"intent_mode",threadId:u.threadId,mode:u.mode}),u.threadId&&u.invocationId&&(m.current.set(u.invocationId,u.threadId),w(u.invocationId,u.threadId)),!!(u.threadId&&I&&_&&u.threadId===I&&u.threadId===_)){if((Z=(V=j.current).onIntentMode)==null||Z.call(V,u),u.invocationId){const z=((K=u.targetAgents)==null?void 0:K[0])??"unknown";ee.getState().addActiveInvocation(u.invocationId,z,u.mode)}return}if(u.threadId){const z=ee.getState();if(z.setThreadLoading(u.threadId,!0),u.invocationId){const H=((T=u.targetAgents)==null?void 0:T[0])??"unknown";z.addThreadActiveInvocation(u.threadId,u.invocationId,H,u.mode)}else z.setThreadHasActiveInvocation(u.threadId,!0);z.setThreadIntentMode(u.threadId,u.mode),z.setThreadTargetAgents(u.threadId,u.targetAgents??[])}}),x.on("task_created",u=>{var I,_;(_=(I=j.current).onTaskCreated)==null||_.call(I,u)}),x.on("task_updated",u=>{var I,_;(_=(I=j.current).onTaskUpdated)==null||_.call(I,u)}),x.on("heartbeat",u=>{var I,_;(_=(I=j.current).onHeartbeat)==null||_.call(I,u)}),x.on("message_deleted",u=>{var I,_;(_=(I=j.current).onMessageDeleted)==null||_.call(I,u)}),x.on("message_hard_deleted",u=>{var I,_;(_=(I=j.current).onMessageDeleted)==null||_.call(I,u)}),x.on("message_restored",u=>{var I,_;(_=(I=j.current).onMessageRestored)==null||_.call(I,u)}),x.on("thread_branched",u=>{var I,_;(_=(I=j.current).onThreadBranched)==null||_.call(I,u)}),x.on("authorization:request",u=>{var _,W;eu(u);const I=i.current;u.threadId&&I&&u.threadId!==I||(W=(_=j.current).onAuthorizationRequest)==null||W.call(_,u)}),x.on("authorization:response",u=>{var _,W;const I=typeof u.requestId=="string"?u.requestId:null;I&&La.getState().resolvePending(I),(W=(_=j.current).onAuthorizationResponse)==null||W.call(_,u)}),x.on("ask_user_question:request",u=>{var _,W;const I=i.current;u.threadId&&I&&u.threadId!==I||(W=(_=j.current).onAskUserQuestionRequest)==null||W.call(_,u)}),x.on("ask_user_question:response",u=>{var I,_;(_=(I=j.current).onAskUserQuestionResponse)==null||_.call(I,u)});const O=u=>Array.isArray(u)?u:[],B=u=>O(u).map(I=>{if(!I||typeof I!="object")return"unknown";const _=I.status;return typeof _=="string"?_:"unknown"});x.on("queue_updated",u=>{const I=ee.getState();I.setQueue(u.threadId,u.queue);const _=O(u.queue);if(u.action==="processing"&&I.setThreadHasActiveInvocation(u.threadId,!0),(u.action==="processing"||u.action==="cleared")&&I.setQueuePaused(u.threadId,!1),u.action==="completed"&&(_.some(V=>!V||typeof V!="object"?!1:V.status==="processing")||Kt(u.threadId,"panels","queue_completed")),ze()){const W=I.getThreadState(u.threadId);L({event:"queue_updated",threadId:u.threadId,action:u.action,queueLength:_.length,queueStatuses:B(u.queue),hasActiveInvocation:u.action==="processing"?!0:W==null?void 0:W.hasActiveInvocation,queuePaused:u.action==="processing"||u.action==="cleared"?!1:W==null?void 0:W.queuePaused})}}),x.on("messages_delivered",u=>{ee.getState().markMessagesDelivered(u.threadId,u.messageIds,u.deliveredAt,u.messages)}),x.on("queue_paused",u=>{const I=ee.getState();I.setQueue(u.threadId,u.queue),I.setQueuePaused(u.threadId,!0,u.reason),ze()&&L({event:"queue_paused",threadId:u.threadId,reason:u.reason,queueLength:O(u.queue).length,queueStatuses:B(u.queue)}),O(u.queue).some(V=>!V||typeof V!="object"?!1:V.status==="queued")&&(b.current.has(u.threadId)||(b.current.add(u.threadId),(async()=>{try{if(!(await le(`/api/threads/${u.threadId}/queue/next`,{method:"POST"})).ok){ze()&&L({event:"queue_paused",threadId:u.threadId,action:"auto_continue_failed",reason:u.reason});return}ze()&&L({event:"queue_paused",threadId:u.threadId,action:"auto_continue_next",reason:u.reason})}catch{ze()&&L({event:"queue_paused",threadId:u.threadId,action:"auto_continue_error",reason:u.reason})}finally{b.current.delete(u.threadId)}})()))}),x.on("queue_full_warning",u=>{const I=ee.getState();I.setQueue(u.threadId,u.queue),I.setQueueFull(u.threadId,u.source),mt.getState().addToast({type:"info",title:"队列已满",message:"消息队列已达上限,请管理队列后再发送",threadId:u.threadId,duration:5e3})}),x.on("connector_message",u=>{var W,V;if(!(u!=null&&u.threadId)||!((W=u==null?void 0:u.message)!=null&&W.id))return;const I=ee.getState(),_=Yd((V=u.message.source)==null?void 0:V.connector);I.addMessageToThread(u.threadId,{id:u.message.id,type:_?"user":"connector",content:u.message.content??"",...u.message.source?{source:u.message.source}:{},...u.message.extra?{extra:u.message.extra}:{},timestamp:u.message.timestamp??Date.now()})}),x.on("game:state_update",u=>{var I,_;(_=(I=j.current).onGameStateUpdate)==null||_.call(I,u)}),x.on("game:narrative",u=>{var I;!(u!=null&&u.threadId)||!((I=u==null?void 0:u.message)!=null&&I.id)||ee.getState().addMessageToThread(u.threadId,{id:u.message.id,type:"system",content:u.message.content,timestamp:u.message.timestamp})}),x.on("game:thread_created",u=>{var I,_;(_=(I=j.current).onGameThreadCreated)==null||_.call(I,u)}),x.on("voice_stream_start",Gd),x.on("voice_chunk",Xd),x.on("voice_stream_end",Jd),x.on("connect_error",u=>{console.error("[ws] connect_error",{message:u.message,name:u.name,transport:$(),description:u.description??null,context:u.context??null})}),x.on("disconnect",(...u)=>{const[I,_]=u;console.warn("[ws] Disconnected",{reason:typeof I=="string"?I:String(I),transport:$(),details:_??null}),L({event:"disconnect",threadId:i.current,reason:typeof I=="string"?I:String(I)})});const q=x.io.engine;q==null||q.on("upgrade",()=>{A(),console.log("[ws] Transport upgraded",{transport:$()})}),q==null||q.on("close",(...u)=>{const[I]=u;console.warn("[ws] Engine close",{reason:typeof I=="string"?I:String(I),transport:$()}),L({event:"engine_close",threadId:i.current,reason:typeof I=="string"?I:String(I)})}),r.current=x;const M=()=>{if(document.visibilityState==="visible"){const u=i.current||ee.getState().currentThreadId;u&&(console.log("[ws] Page became visible, refreshing thread:",u),Kt(u,"messages","visibility-change"))}};return document.addEventListener("visibilitychange",M),()=>{document.removeEventListener("visibilitychange",M),x.disconnect(),a.current.clear();for(const u of k.current.values())clearTimeout(u);k.current.clear(),v.current.clear()}},[y]);const D=c.useCallback(L=>{const x=r.current;if(!x)return;const $=`thread:${L}`;a.current.has($)||(x.emit("join_room",$),a.current.add($),y())},[y]),E=c.useCallback(async(L,x=tu)=>{const $=`thread:${L}`;a.current.add($),y();const A=Date.now()+Math.max(x,0);let F=r.current;for(;(!F||!F.connected)&&Date.now()<A;){const R=A-Date.now();await new Promise(O=>setTimeout(O,Math.min(nu,R))),F=r.current}if(!F)return"socket_unavailable";if(!F.connected)return F.emit("join_room",$),"timed_out";F.emit("join_room",$);const w=A-Date.now();return w>0&&await new Promise(R=>setTimeout(R,Math.min(ru,w))),F.connected?"joined":"timed_out"},[y]),S=c.useCallback(L=>{const x=r.current;if(!x)return;const $=`thread:${L}`;a.current.has($)&&(x.emit("leave_room",$),a.current.delete($),y())},[y]),N=c.useCallback(L=>{const x=r.current;if(!x)return;const $=new Set(L.map(A=>`thread:${A}`));for(const A of a.current)$.has(A)||(x.emit("leave_room",A),a.current.delete(A));for(const A of $)a.current.has(A)||(x.emit("join_room",A),a.current.add(A));y()},[y]);c.useEffect(()=>{t&&D(t);for(const L of C)D(L)},[t,C,D]);const P=c.useCallback(L=>{var x;(x=r.current)==null||x.emit("cancel_invocation",{threadId:L})},[]);return{socketRef:r,joinRoom:D,awaitThreadRoom:E,leaveRoom:S,syncRooms:N,cancelInvocation:P}}export{bu as C,Lc as D,Ki as L,yu as M,wd as T,wu as a,Vi as b,_d as c,Ya as d,Iu as e,ku as f,pr as g,Su as h,Cd as i,Tu as j,Me as k,ji as l,Eu as m,bd as n,Dd as p,Kt as r,Cu as u};
|
|
11
|
+
//# sourceMappingURL=useSocket-y3-zWhVL.js.map
|