@lasting-beauty/chat-hub 0.1.0-beta.1
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 +74 -0
- package/README.md +170 -0
- package/bin/chat-hub.mjs +1794 -0
- package/cli/data-lifecycle.mjs +203 -0
- package/cli/deploy.mjs +569 -0
- package/cli/external-verification.mjs +219 -0
- package/cli/ip-certificate.mjs +331 -0
- package/cli/platform.mjs +173 -0
- package/cli/runtime.mjs +115 -0
- package/cli/server-maintenance.mjs +207 -0
- package/cli/server-verification.mjs +562 -0
- package/cli/windows-data-migration.mjs +145 -0
- package/dist/assets/AiSummaryPage-BUT43KuZ.js +1 -0
- package/dist/assets/index-BNCcoLmC.js +312 -0
- package/dist/assets/index-cxklu1ib.css +1 -0
- package/dist/index.html +14 -0
- package/dist/server/index.js +14796 -0
- package/package.json +118 -0
- package/scripts/install-platform-clis.mjs +163 -0
- package/skills/chat-hub-setup/scripts/gateway.mjs +360 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as t,D as n,E as r,F as i,M as a,N as o,O as s,P as c,S as l,T as u,_ as d,a as f,b as p,c as m,d as h,f as g,g as ee,h as _,i as v,j as y,k as te,l as ne,m as re,n as ie,o as ae,p as oe,r as se,s as ce,t as le,u as ue,v as b,w as de,x as fe,y as x}from"./index-BNCcoLmC.js";var S={name:`circle-check`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 9-5.5 5.5L8 12`,key:`xofnsj`}]],aliases:[`check-circle-2`]};S.node;var C=_(S),w={name:`loader-circle`,size:24,node:[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]],aliases:[`loader-2`]};w.node;var pe=_(w),T={name:`pencil`,size:24,node:[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]};T.node;var me=_(T),E={name:`rotate-ccw-clock`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]],aliases:[`history`]};E.node;var he=_(E),D={name:`save`,size:24,node:[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]};D.node;var ge=_(D),_e={name:`triangle-alert`,size:24,node:[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`alert-triangle`]};_e.node;var ve=_(_e),O={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};O.node;var ye=_(O),k=i(c(),1),A=ae();function be(t){let{message:n}=a.useApp(),{loadPage:i}=t,c=(0,k.useCallback)((e,t)=>i(e.page,t),[i]),l=ee(c,{page:1},t.active&&t.open),[u,d]=(0,k.useState)(!1),[f,p]=(0,k.useState)(),[m,h]=(0,k.useState)(!1),g=(0,k.useRef)(0),_=(0,k.useRef)(0),v=(0,k.useRef)(null);(0,k.useEffect)(()=>()=>{g.current+=1},[]),(0,k.useLayoutEffect)(()=>{t.open&&v.current&&(v.current.scrollTop=_.current)},[t.open,l.data]);function y(){g.current+=1,d(!1),p(void 0),t.onClose()}async function te(e){let n=++g.current;d(!0),p(void 0);try{let r=await t.loadReport(e);n===g.current&&(t.onOpen(r),y())}catch(e){n===g.current&&p(e instanceof Error?e.message:`报告读取失败`)}finally{n===g.current&&d(!1)}}async function ne(e){h(!0),p(void 0);try{e?await t.deleteReport?.(e):await t.deleteAll?.(),t.onDeleted(e),n.success(e?`历史报告已删除`:`历史报告已清空`),l.reload(!e)}catch(e){p(e instanceof Error?e.message:`删除报告失败`)}finally{h(!1)}}return(0,A.jsxs)(s,{title:`历史总结报告`,open:t.active&&t.open,onClose:y,size:420,styles:{wrapper:{width:`min(420px, 100vw)`,maxWidth:`100vw`}},destroyOnHidden:!0,children:[(0,A.jsxs)(`div`,{className:`summary-history-toolbar`,children:[(0,A.jsx)(`span`,{children:`报告默认保留 90 天`}),(0,A.jsx)(e,{disabled:u||m||l.loading,onClick:()=>{_.current=0,l.reload(!0)},children:`刷新`}),t.deleteAll&&l.data?.total?(0,A.jsx)(de,{title:`清空全部历史报告?`,description:`总结方案和来源信息不会被删除。`,onConfirm:()=>ne(),okText:`清空`,cancelText:`取消`,children:(0,A.jsx)(e,{danger:!0,disabled:m||u,children:`清空`})}):null]}),f?(0,A.jsx)(o,{type:`error`,showIcon:!0,title:f,description:`可重新选择报告或重试操作。`}):null,u?(0,A.jsx)(r,{"aria-label":`正在读取报告`}):null,(0,A.jsxs)(`div`,{className:`summary-history-list`,ref:v,style:{maxHeight:`65vh`,overflowY:`auto`},onScroll:e=>{_.current=e.currentTarget.scrollTop},children:[l.data?.entries.map(n=>(0,A.jsxs)(`article`,{children:[(0,A.jsxs)(`button`,{disabled:u||m||l.loading,onClick:()=>void te(n.id),children:[(0,A.jsx)(`strong`,{children:n.profileName??`临时总结`}),(0,A.jsxs)(`span`,{children:[n.reportKind===`daily_brief`?n.dailyBriefKind===`evening`?`晚间简报`:`早间简报`:`按需总结`,` `,`· `,new Date(n.generatedAt).toLocaleString(`zh-CN`)]}),(0,A.jsxs)(`small`,{children:[n.recordCount,` 条记录 ·`,` `,n.historical?`旧规则历史结果`:n.status===`partial`?`部分覆盖`:`完整生成`]})]}),t.deleteReport?(0,A.jsx)(de,{title:`删除这份历史报告?`,onConfirm:()=>ne(n.id),okText:`删除`,cancelText:`取消`,children:(0,A.jsx)(e,{type:`text`,danger:!0,disabled:m||u,"aria-label":`删除历史报告`,icon:(0,A.jsx)(ce,{size:14})})}):null]},n.id)),!l.loading&&!l.error&&l.data?.total===0?(0,A.jsx)(`p`,{className:`summary-history-empty`,children:`还没有历史报告`}):null]}),(0,A.jsx)(ie,{page:l.data?.page??1,total:l.data?.total,hasMore:l.data?.hasMore??!1,loading:l.loading||m||u,error:l.error,onRetry:()=>l.reload(),onPageChange:e=>{_.current=0,l.go(e)}})]})}var xe=[{value:`overview`,label:`整体概览`},{value:`important`,label:`重要事项`},{value:`changes`,label:`关键变化`},{value:`attention`,label:`关注动态`},{value:`reply`,label:`待回复`},{value:`action`,label:`待行动`},{value:`decision`,label:`待决策`},{value:`meetings`,label:`会议安排`},{value:`risks`,label:`风险(可选)`},{value:`confirm`,label:`待确认(可选)`},{value:`projects`,label:`项目进展(可选)`}],Se=[`overview`,`important`,`reply`,`action`,`decision`,`meetings`],Ce=`需要先确认向当前模型供应商发送所选业务内容`,we=[{value:`today`,label:`今天`},{value:`yesterday`,label:`昨天`},{value:`two_days`,label:`今天和昨天`},{value:`this_week`,label:`本周`},{value:`last_7_days`,label:`最近 7 个自然日`},{value:`custom`,label:`自定义时间`}],j={"lark:mail":{state:`unsupported`,message:`当前演示账号没有可用邮箱`},"lark:minutes":{state:`partial`,message:`妙记仅演示索引与摘要状态`},"lark:task":{state:`unverified`,message:`查询为空,等待非空样本验证`},"lark:approval":{state:`unverified`,message:`查询为空,等待非空样本验证`},"lark:calendar":{state:`partial`,message:`仅展示已验证的日程片段`},"dingtalk:mail":{state:`partial`,message:`目前只有未读主题和发件人摘要`},"dingtalk:minutes":{state:`partial`,message:`演示数据包含听记内容;真实模式按逐字稿完整性显示`},"dingtalk:task":{state:`unverified`,message:`查询为空,等待非空样本验证`},"dingtalk:approval":{state:`unauthorized`,message:`当前账号尚未取得审批权限`},"dingtalk:calendar":{state:`unverified`,message:`查询为空,等待非空样本验证`}},Te=[{id:`daily-review`,name:`每日工作回顾`,description:`今天 · 重要事项与待处理`,config:{scope:{sources:[],timeRange:{kind:`preset`,preset:`today`}},sections:Se,prompt:`重点关注需要我回复、确认,以及可能阻塞后续工作的事情。`,detailLevel:`standard`}},{id:`project-focus`,name:`项目进展检查`,description:`本周 · 进展、风险与决定`,config:{scope:{sources:[],timeRange:{kind:`preset`,preset:`this_week`}},sections:[...Se,`risks`,`projects`],prompt:`按项目归纳进展,单独指出需求变化、延期风险和等待我决定的内容。`,detailLevel:`detailed`}}];function M({mode:t,active:r=!0,sourceCounts:i,connections:c,records:l,workItems:f,api:h,onGenerateDailyBrief:ee,onSync:_,onOpenSettings:ie,onOpenRecord:ae}){let{message:b,modal:fe}=a.useApp(),S=t===`demo`&&!h,C=(0,k.useMemo)(()=>Ae(t,c,l,S).map(e=>({...e,recordCount:i?.find(t=>t.platform===e.platform&&t.sourceType===e.sourceType)?.count??e.recordCount})),[c,t,l,i,S]),[w,T]=(0,k.useState)(()=>new Set(C.filter(e=>e.state===`ready`||e.state===`partial`).map(({key:e})=>e))),[E,D]=(0,k.useState)(`temporary`),[_e,O]=(0,k.useState)([]),[j,M]=(0,k.useState)(`today`),[Oe,Ne]=(0,k.useState)(Be()),[N,He]=(0,k.useState)(Be()),[P,Ue]=(0,k.useState)(Se),[F,We]=(0,k.useState)(`重点关注需要我回复、确认,以及可能阻塞后续工作的事情。`),[Ge,Ke]=(0,k.useState)(`standard`),[qe,Je]=(0,k.useState)(!0),[I,Ye]=(0,k.useState)([]),[L,Xe]=(0,k.useState)(!!h),[Ze,Qe]=(0,k.useState)(),[$e,et]=(0,k.useState)(),[R,tt]=(0,k.useState)(!1),[nt,rt]=(0,k.useState)(),[it,at]=(0,k.useState)(!1),[z,B]=(0,k.useState)(),[V,H]=(0,k.useState)(),[ot,st]=(0,k.useState)([]),[ct,lt]=(0,k.useState)(!1),[ut,dt]=(0,k.useState)(!0),[U,ft]=(0,k.useState)({reports:[],hasMore:!1}),[pt,mt]=(0,k.useState)(!1),[ht,W]=(0,k.useState)(!1),[G,K]=(0,k.useState)(),[gt,_t]=(0,k.useState)(!1),[vt,yt]=(0,k.useState)(!1),bt=(0,k.useRef)(void 0),xt=(0,k.useRef)(void 0),St=(0,k.useRef)(!1),Ct=Ve(`(max-width: 760px)`),q=(0,k.useMemo)(()=>({scope:{sources:C.filter(e=>w.has(e.key)).map(({platform:e,sourceType:t})=>({platform:e,sourceType:t})),timeRange:j===`custom`?{kind:`custom`,startDate:Oe,endDate:N}:{kind:`preset`,preset:j}},sections:P,prompt:F,detailLevel:Ge,useAttentionPreference:qe,tableMaterials:I}),[N,Oe,Ge,F,P,w,C,j,qe,I]),J=(0,k.useCallback)(e=>{T(new Set(e.scope.sources.map(e=>`${e.platform}:${e.sourceType}`))),e.scope.timeRange.kind===`custom`?(M(`custom`),Ne(e.scope.timeRange.startDate),He(e.scope.timeRange.endDate)):M(e.scope.timeRange.preset),Ue(e.sections),We(e.prompt),Ke(e.detailLevel),Je(e.useAttentionPreference??!0),Ye(e.tableMaterials??[])},[]),Y=(0,k.useCallback)(e=>{if(!h)return;bt.current?.abort();let t=new AbortController;bt.current=t,B(e),H(void 0),h.waitForJob(e.id,B,t.signal).then(async e=>{let t=e.result&&typeof e.result.reportId==`string`?e.result.reportId:void 0;if(!t)throw Error(`总结任务完成但没有返回报告编号`);let[n,r]=await Promise.all([h.loadReport(t),h.browseReports?Promise.resolve({reports:[],hasMore:!1}):h.listReports()]);H(n),ft(r),b.success(n.status===`partial`?`总结已生成,部分范围存在缺口`:`总结已生成`)}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||b.error(e instanceof Error?e.message:`总结任务失败`)})},[h,b]);(0,k.useEffect)(()=>()=>{bt.current?.abort(),xt.current&&window.clearTimeout(xt.current)},[]),(0,k.useEffect)(()=>{if(!h)return;let e=!0;return h.loadWorkspace().then(n=>{e&&(O(n.profiles),ft(n.reportPage),H(n.latestReport??n.reportPage.reports.find(e=>!ke(e,l,t))),n.draft&&J(n.draft),St.current=!0,n.latestJob&&(n.latestJob.state===`queued`||n.latestJob.state===`running`?Y(n.latestJob):B(n.latestJob)))}).catch(t=>{e&&Qe(t instanceof Error?t.message:`无法加载总结工作区`)}).finally(()=>{e&&Xe(!1)}),()=>{e=!1}},[h,J,t,l,Y]),(0,k.useEffect)(()=>{if(!h?.listVersions||!V)return;let e=!0;return h.listVersions(V.id).then(t=>{e&&st(t)}).catch(()=>{e&&st([V])}),()=>{e=!1}},[h,V]),(0,k.useEffect)(()=>{if(!h||!St.current||!q.scope.sources.length&&!q.tableMaterials?.length)return;let e=window.setTimeout(()=>{h.saveDraft(q).then(e=>{rt(e.updatedAt),at(!1)}).catch(()=>at(!0))},700);return()=>window.clearTimeout(e)},[h,q]),(0,k.useEffect)(()=>{if(!h||!q.scope.sources.length&&!q.tableMaterials?.length)return;let e=!0,t=window.setTimeout(()=>{tt(!0),h.preflight(q).then(t=>{e&&et(t)}).catch(t=>{e&&(et(void 0),Qe(t instanceof Error?t.message:`总结预检失败`))}).finally(()=>{e&&tt(!1)})},300);return()=>{e=!1,window.clearTimeout(t)}},[h,q]);let wt=(0,k.useMemo)(()=>l.filter(e=>w.has(`${e.platform}:${e.sourceType}`)),[l,w]),Tt=(0,k.useMemo)(()=>Me(q,wt,f),[q,wt,f]),X=S?ut?Tt:void 0:V,Et=X?ke(X,l,t):!1,Dt=!!(q.scope.sources.length||q.tableMaterials?.length),Z=Dt?$e:void 0,Q=vt||ct||z?.state===`queued`||z?.state===`running`,$=_e.find(e=>e.id===E);function Ot(e){let t=C.filter(e=>e.state===`ready`||e.state===`partial`).map(({platform:e,sourceType:t})=>({platform:e,sourceType:t}));J({...e.config,scope:{...e.config.scope,sources:t}}),D(e.id)}function kt(e){D(e?.id??`temporary`),e&&J(e)}async function At(e=!1,t){if(S){if(!w.size&&!I.length){b.warning(`至少选择一个可用来源或一项表格资料`);return}lt(!0),dt(!1),W(!1),xt.current=window.setTimeout(()=>{lt(!1),dt(!0),b.success(`演示总结已生成,未调用真实模型`)},1100);return}if(!h)return;let n=t??{...q,profileId:$?.id};try{if(e){if(!_)throw Error(`当前模式没有可用的来源同步入口`);yt(!0),await _(),b.success(`来源同步完成,正在按新的数据截止时间生成`)}let t=await h.preflight(n),r=t.blockers.filter(e=>e!==Ce);if(r.length)throw Error(r.join(`;`));if(t.requiresExternalConsent){if(!await Pe(fe,t))return;await h.confirmConsent(t.model.consentKey??t.model.provider),t=await h.preflight(n)}if(et(t),!t.canGenerate)throw Error(t.blockers.join(`;`));let i=await h.startRun(n);W(!1),Y(i)}catch(e){b.error(e instanceof Error?e.message:`无法开始总结`)}finally{yt(!1)}}async function jt(){if(h&&z?.state===`failed`)try{let e=await h.retryJob(z.id);b.info(`失败任务已重新加入队列,将复用已完成的准备结果`),Y(e)}catch(e){b.error(e instanceof Error?e.message:`无法重试总结任务`)}}async function Mt(e){if(e.reportKind!==`daily_brief`){await At(!1,Fe(e));return}if(!e.dailyBriefKind||!ee){b.error(`当前页面没有可用的每日简报生成入口`);return}try{let t=await ee(e.dailyBriefKind);t?.status===`ready`&&(H(t.report),st([t.report]))}catch(e){b.error(e instanceof Error?e.message:`每日简报生成失败`)}}async function Nt(e){if(!h?.startRevision||!X)throw Error(`当前没有可用于二次总结的报告`);let t=await h.startRevision(X.id,e);b.info(`已冻结沿用原输入快照,正在生成新版本`),Y(t)}async function Pt(){if(S||!h){b.info(`演示模式不会保存总结方案`);return}if(!$){K({mode:`create`,name:``});return}_t(!0);try{let e=await h.updateProfile($.id,q);O(t=>t.map(t=>t.id===e.id?e:t)),b.success(`总结方案已更新`)}catch(e){b.error(e instanceof Error?e.message:`保存总结方案失败`)}finally{_t(!1)}}async function Ft(){if(h&&G?.name.trim()){_t(!0);try{if(G.mode===`create`){let e=await h.createProfile(G.name,q);O(t=>[e,...t]),D(e.id)}else if($){let e=await h.updateProfile($.id,{name:G.name});O(t=>t.map(t=>t.id===e.id?e:t))}K(void 0),b.success(G.mode===`create`?`总结方案已保存`:`总结方案已重命名`)}catch(e){b.error(e instanceof Error?e.message:`保存总结方案失败`)}finally{_t(!1)}}}async function It(){if(h&&$)try{let e=await h.copyProfile($.id);O(t=>[e,...t]),D(e.id),J(e),b.success(`已复制总结方案`)}catch(e){b.error(e instanceof Error?e.message:`复制总结方案失败`)}}async function Lt(){if(h&&$)try{await h.deleteProfile($.id),O(e=>e.filter(e=>e.id!==$.id)),D(`temporary`),b.success(`总结方案已删除`)}catch(e){b.error(e instanceof Error?e.message:`删除总结方案失败`)}}let Rt=(0,k.useCallback)(async(e,n)=>h?.browseReports?h.browseReports(e,n):d(U.reports.map(e=>({id:e.id,profileName:e.profileName,generatedAt:e.generatedAt,reportKind:e.reportKind,dailyBriefKind:e.dailyBriefKind,status:e.status,recordCount:e.coverage.reduce((e,t)=>e+t.recordCount,0),historical:ke(e,l,t)})),e),[h,U.reports,l,t]),zt=(0,k.useCallback)(async e=>{if(h)return h.loadReport(e);let t=U.reports.find(t=>t.id===e);if(!t)throw Error(`报告已不存在`);return t},[h,U.reports]),Bt=Z?.recordCount??wt.length,Vt=Z?.coverage.filter(e=>e.state!==`ready`).length??C.filter(e=>w.has(e.key)&&e.state!==`ready`).length,Ht=$?.name??Te.find(e=>e.id===E)?.name??`临时总结`,Ut=we.find(e=>e.value===j)?.label??`自定义时间`,Wt=t!==`synthetic`&&!!Z?.blockers.some(e=>e.startsWith(`尚未配置模型`)),Gt=Ie(Z),Kt=S?{label:`界面演示`,className:`ready`}:L||R||!Z?{label:`正在检查`,className:`checking`}:Z.canGenerate?{label:`可生成总结`,className:`ready`}:Z.requiresExternalConsent&&!Gt?{label:`确认后可生成`,className:`checking`}:{label:Wt?`模型未配置`:`暂不可生成`,className:`blocked`},qt=(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`section`,{className:`summary-profile-strip panel`,"aria-label":`总结方案`,children:[(0,A.jsxs)(`div`,{className:`summary-profile-label`,children:[(0,A.jsx)(he,{size:16}),(0,A.jsx)(`span`,{children:`总结方案`})]}),(0,A.jsxs)(`div`,{className:`summary-profile-options`,children:[S?Te.map(e=>(0,A.jsxs)(`button`,{className:E===e.id?`active`:``,onClick:()=>Ot(e),children:[(0,A.jsx)(`span`,{children:e.name}),(0,A.jsx)(`small`,{children:e.description})]},e.id)):_e.map(e=>(0,A.jsxs)(`button`,{className:E===e.id?`active`:``,onClick:()=>kt(e),children:[(0,A.jsx)(`span`,{children:e.name}),(0,A.jsx)(`small`,{children:Le(e)})]},e.id)),(0,A.jsxs)(`button`,{className:E===`temporary`?`active`:``,onClick:()=>S?D(`temporary`):kt(),children:[(0,A.jsx)(`span`,{children:`临时总结`}),(0,A.jsx)(`small`,{children:!S&&nt?it?`草稿保存失败,将在下次修改时重试`:`草稿保存于 ${ze(nt)}`:`自动保存草稿`})]})]})]}),!S&&$?(0,A.jsxs)(`div`,{className:`summary-profile-actions`,"aria-label":`当前方案操作`,children:[(0,A.jsx)(e,{type:`text`,size:`small`,icon:(0,A.jsx)(me,{size:13}),onClick:()=>K({mode:`rename`,name:$.name}),children:`重命名`}),(0,A.jsx)(e,{type:`text`,size:`small`,icon:(0,A.jsx)(oe,{size:13}),onClick:()=>void It(),children:`复制`}),(0,A.jsx)(de,{title:`删除这个总结方案?`,description:`历史报告不会被删除。`,okText:`删除`,cancelText:`取消`,onConfirm:()=>void Lt(),children:(0,A.jsx)(e,{type:`text`,danger:!0,size:`small`,icon:(0,A.jsx)(ce,{size:13}),children:`删除`})})]}):null]}),Jt=(0,A.jsxs)(`section`,{className:`summary-config panel`,"aria-busy":L||R,children:[(0,A.jsxs)(`div`,{className:`summary-config-intro`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{className:`summary-step`,children:`总结设置`}),(0,A.jsx)(`h2`,{children:`这次要总结什么?`})]}),(0,A.jsx)(`span`,{children:R?`正在预检…`:`${Bt} 条已保存记录`})]}),(0,A.jsxs)(`div`,{className:`summary-field summary-source-field`,children:[(0,A.jsx)(`label`,{children:`信息来源`}),(0,A.jsx)(`div`,{className:`summary-source-grid`,children:C.map(e=>{let t=[`unauthorized`,`unsupported`,`unverified`].includes(e.state);return(0,A.jsx)(te,{checked:w.has(e.key),disabled:t,onChange:t=>{T(n=>{let r=new Set(n);return t.target.checked?r.add(e.key):r.delete(e.key),r})},children:(0,A.jsxs)(`span`,{className:`summary-source-choice`,children:[(0,A.jsxs)(`span`,{children:[x[e.platform],` ·`,` `,p(e.platform,e.sourceType)]}),(0,A.jsxs)(`small`,{className:`source-state ${e.state}`,children:[je(e),` · `,e.recordCount,` 条`]})]})},e.key)})}),(0,A.jsx)(`span`,{className:`summary-source-help`,children:`已就绪和部分可用来源默认勾选;覆盖缺口会写入报告,不会被当作完整数据。`})]}),(0,A.jsxs)(`div`,{className:`summary-field-row`,children:[(0,A.jsxs)(`div`,{className:`summary-field`,children:[(0,A.jsx)(`label`,{htmlFor:`summary-time-range`,children:`时间范围`}),(0,A.jsx)(y,{id:`summary-time-range`,value:j,options:we,onChange:M})]}),(0,A.jsxs)(`div`,{className:`summary-freshness`,children:[(0,A.jsx)(re,{size:15}),(0,A.jsx)(`span`,{children:Re(Z)}),(0,A.jsx)(`button`,{disabled:!_||Q,onClick:()=>{_&&_().then(()=>b.success(`来源同步完成,可以重新预检`)).catch(e=>b.error(e instanceof Error?e.message:`来源同步失败`))},children:`先同步`})]})]}),j===`custom`?(0,A.jsxs)(`div`,{className:`summary-custom-dates`,children:[(0,A.jsx)(n,{type:`date`,"aria-label":`开始日期`,value:Oe,onChange:e=>Ne(e.target.value)}),(0,A.jsx)(`span`,{children:`至`}),(0,A.jsx)(n,{type:`date`,"aria-label":`结束日期`,value:N,onChange:e=>He(e.target.value)})]}):null,(0,A.jsxs)(`div`,{className:`summary-field summary-sections-field`,children:[(0,A.jsx)(`label`,{children:`输出内容`}),(0,A.jsx)(te.Group,{value:P,onChange:e=>Ue(e),children:(0,A.jsx)(`div`,{className:`summary-section-grid`,children:xe.map(e=>(0,A.jsx)(te,{value:e.value,children:e.label},e.value))})})]}),(0,A.jsxs)(`div`,{className:`summary-field-row summary-detail-row`,children:[(0,A.jsxs)(`div`,{className:`summary-field`,children:[(0,A.jsx)(`label`,{htmlFor:`summary-detail-level`,children:`报告详略`}),(0,A.jsx)(y,{id:`summary-detail-level`,value:Ge,onChange:Ke,options:[{value:`concise`,label:`简洁`},{value:`standard`,label:`标准`},{value:`detailed`,label:`详细`}]})]}),(0,A.jsxs)(`span`,{className:`summary-token-estimate`,children:[`预计 `,Z?.estimatedTokens.toLocaleString(`zh-CN`)??`—`,` Tokens`]})]}),(0,A.jsx)(le,{mode:t,usePreference:qe,materials:I,preflight:Z,loadCatalog:h?.listTableMaterials,previewMaterial:h?.previewTableMaterial,discoverMaterials:h?.discoverTableMaterials,verifyDiscoveredMaterial:h?.verifyDiscoveredTableMaterial,onUsePreferenceChange:Je,onMaterialsChange:Ye,onOpenSettings:ie}),(0,A.jsxs)(`div`,{className:`summary-field summary-prompt-field`,children:[(0,A.jsxs)(`div`,{className:`summary-prompt-label`,children:[(0,A.jsx)(`label`,{htmlFor:`summary-prompt`,children:`补充提示词`}),(0,A.jsxs)(`span`,{children:[F.length,` / 2000`]})]}),(0,A.jsx)(n.TextArea,{id:`summary-prompt`,value:F,maxLength:2e3,rows:4,onChange:e=>We(e.target.value),placeholder:`例如:重点关注客户催办、我明确承诺的事情,以及需要今天决定的问题。`}),(0,A.jsx)(`p`,{children:`提示词只调整关注重点,不会扩大数据范围或覆盖事实约束。`})]}),Wt?(0,A.jsxs)(`div`,{className:`summary-model-callout`,role:`status`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(m,{size:17}),(0,A.jsxs)(`span`,{children:[(0,A.jsx)(`strong`,{children:`还不能生成 AI 总结`}),(0,A.jsx)(`small`,{children:`请先配置真实模型和访问密钥;本地规则不会冒充 AI。`})]})]}),ie?(0,A.jsx)(e,{onClick:ie,children:`配置模型`}):null]}):null,Z?.blockers.length||Z?.warnings.length?(0,A.jsxs)(`div`,{className:`summary-preflight-messages`,children:[Z.blockers.map(e=>(0,A.jsxs)(`div`,{className:`blocked`,children:[(0,A.jsx)(ye,{size:13}),(0,A.jsx)(`span`,{children:e})]},e)),Z.warnings.map(e=>(0,A.jsxs)(`div`,{children:[(0,A.jsx)(ve,{size:13}),(0,A.jsx)(`span`,{children:e})]},e))]}):null,(0,A.jsxs)(`div`,{className:`summary-run-bar`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(g,{size:15}),(0,A.jsxs)(`span`,{children:[`基于 `,Bt,` 条当前记录`,Vt?`,其中 ${Vt} 个存在覆盖缺口`:`,覆盖状态正常`]})]}),(0,A.jsxs)(`div`,{className:`summary-run-actions`,children:[z&&(z.state===`queued`||z.state===`running`)&&h?(0,A.jsx)(e,{danger:!0,icon:(0,A.jsx)(ye,{size:15}),onClick:()=>void h.cancelJob(z.id).then(e=>{bt.current?.abort(),B(e),b.info(`已请求取消总结任务`)}).catch(e=>b.error(e instanceof Error?e.message:`取消任务失败`)),children:`取消`}):null,(0,A.jsx)(e,{icon:(0,A.jsx)(ue,{size:15}),loading:vt,disabled:!_||Q||L||R||Gt||!w.size||!P.length,onClick:()=>void At(!0),children:`同步后生成`}),(0,A.jsx)(e,{type:`primary`,icon:Q?(0,A.jsx)(pe,{className:`summary-spin`,size:16}):(0,A.jsx)(m,{size:16}),loading:Q,disabled:L||R||Gt||!Dt||!P.length,onClick:()=>void At(),children:`基于当前数据生成`})]})]})]});return(0,A.jsxs)(A.Fragment,{children:[r?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`div`,{className:`summary-page-heading`,children:(0,A.jsx)(se,{eyebrow:`按需总结 · 可追溯报告`,title:`从分散信息里,收好今天的重点。`,description:`确定时间和关注重点,然后生成一份可回看的总结。`,action:(0,A.jsxs)(`div`,{className:`summary-heading-actions`,children:[S?null:(0,A.jsx)(e,{icon:(0,A.jsx)(he,{size:15}),onClick:()=>mt(!0),children:`历史报告`}),Ct?null:(0,A.jsx)(e,{icon:(0,A.jsx)(ge,{size:15}),loading:gt,onClick:()=>void Pt(),children:`保存当前方案`})]})})}),Ze?(0,A.jsx)(o,{className:`summary-preview-alert`,type:`error`,showIcon:!0,closable:!0,message:`总结工作区暂不可用`,description:Ze,onClose:()=>Qe(void 0)}):null,Ct?(0,A.jsxs)(`section`,{className:`summary-mobile-settings panel`,"aria-label":`当前总结设置`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{className:`summary-step`,children:`当前设置`}),(0,A.jsx)(`h2`,{children:Ht}),(0,A.jsxs)(`p`,{children:[Ut,` · `,Bt,` 条记录`]})]}),(0,A.jsxs)(`div`,{className:`summary-mobile-settings-actions`,children:[(0,A.jsx)(`span`,{className:Kt.className,children:Kt.label}),(0,A.jsx)(e,{icon:(0,A.jsx)(ne,{size:15}),onClick:()=>W(!0),children:`调整设置`})]})]}):qt,(0,A.jsxs)(`div`,{className:`summary-workspace`,children:[Ct?null:Jt,(0,A.jsx)(`section`,{className:`summary-report panel`,"aria-live":`polite`,children:Q?(0,A.jsx)(Ee,{job:z}):(z?.state===`failed`||z?.state===`cancelled`)&&h?(0,A.jsxs)(`div`,{className:`summary-empty-report summary-failed-report`,children:[(0,A.jsx)(ve,{size:22}),(0,A.jsx)(`h2`,{children:z.state===`failed`?`上次总结没有生成报告`:`总结任务已取消`}),(0,A.jsx)(`p`,{children:z.error?.message??(z.state===`failed`?`任务执行失败,可以重新尝试。`:`已经提交给模型的分块可能仍会产生费用,其余分块不会继续提交。`)}),z.state===`failed`?(0,A.jsx)(e,{type:`primary`,icon:(0,A.jsx)(ue,{size:15}),onClick:()=>void jt(),children:`重试失败任务`}):null]}):X?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(v,{report:X,versions:ot,onSelect:H,onCreateRevision:h?.startRevision?Nt:void 0,onGenerateLatest:()=>void Mt(X)}),(0,A.jsx)(De,{report:X,historical:Et,mode:t,onOpenRecord:ae})]}):(0,A.jsxs)(`div`,{className:`summary-empty-report`,children:[(0,A.jsx)(m,{size:22}),(0,A.jsx)(`h2`,{children:`总结结果会显示在这里`}),(0,A.jsx)(`p`,{children:`选择至少一个可用来源或一项表格资料,然后基于当前数据生成。`})]})})]}),Ct?(0,A.jsx)(s,{className:`summary-settings-drawer`,title:`总结设置`,placement:`right`,open:ht,onClose:()=>W(!1),size:`100%`,styles:{body:{padding:16,background:`#f7f8fa`}},extra:(0,A.jsx)(e,{type:`primary`,icon:(0,A.jsx)(ge,{size:14}),loading:gt,onClick:()=>void Pt(),children:`保存方案`}),children:(0,A.jsxs)(`div`,{className:`summary-settings-drawer-content`,children:[qt,Jt]})}):null,(0,A.jsx)(u,{open:!!G,title:G?.mode===`rename`?`重命名总结方案`:`保存为总结方案`,okText:`保存`,cancelText:`取消`,confirmLoading:gt,okButtonProps:{disabled:!G?.name.trim()},onCancel:()=>K(void 0),onOk:()=>void Ft(),children:(0,A.jsx)(n,{autoFocus:!0,maxLength:80,value:G?.name??``,placeholder:`例如:每日工作回顾`,onChange:e=>K(t=>t&&{...t,name:e.target.value}),onPressEnter:()=>void Ft()})})]}):null,(0,A.jsx)(be,{open:pt,active:r,loadPage:Rt,loadReport:zt,deleteReport:h?.deleteReport,deleteAll:h?.deleteAllReports,onOpen:H,onDeleted:e=>{(!e||V?.id===e)&&H(void 0)},onClose:()=>mt(!1)})]})}function Ee({job:e}){let t=e?.progress,n=t?.total?Math.max(8,Math.round(t.completed/t.total*100)):18;return(0,A.jsxs)(`div`,{className:`summary-running-state`,children:[(0,A.jsx)(`div`,{className:`summary-running-mark`,children:(0,A.jsx)(pe,{className:`summary-spin`,size:22})}),(0,A.jsx)(`h2`,{children:`正在整理这次的信息`}),(0,A.jsx)(`p`,{children:t?.message??`任务已进入后台队列`}),(0,A.jsx)(`div`,{className:`summary-progress-track`,children:(0,A.jsx)(`span`,{style:{width:`${n}%`}})}),(0,A.jsx)(`small`,{children:`离开页面不会取消任务,再次进入可以继续查看进度。`})]})}function De({report:n,historical:r,mode:i,onOpenRecord:a}){let o=n.coverage.reduce((e,t)=>e+t.recordCount,0),s=n.tableCoverage?.reduce((e,t)=>e+t.recordCount,0)??0;return(0,A.jsxs)(`div`,{className:`summary-report-sheet`,children:[(0,A.jsxs)(`header`,{className:`summary-report-header`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{children:Oe(n)}),(0,A.jsx)(`h2`,{children:n.profileName??`本次总结`}),(0,A.jsxs)(`p`,{children:[`数据截止 `,N(n.dataAsOf),` · `,o,` 条来源记录`,n.tableCoverage?.length?` · ${s} 行表格资料`:``,` ·`,` `,n.status===`partial`?`部分覆盖`:`已选范围完整`]})]}),(0,A.jsx)(t,{className:`summary-demo-tag`,children:i===`synthetic`?`模拟总结 · 未调用外部模型`:n.model.provider===`demo`?`界面演示结果`:n.model.strategy===`local_rules`?`本地规则 · 非 AI`:n.model.model})]}),r?(0,A.jsxs)(`div`,{className:`summary-coverage-warning`,children:[(0,A.jsx)(ve,{size:16}),(0,A.jsx)(`span`,{children:`这是旧规则生成的历史结果,仅供回看,不代表当前 AI 总结;新的系统通知与时间过滤不会改写这份历史报告。`})]}):null,n.status===`partial`?(0,A.jsxs)(`div`,{className:`summary-coverage-warning`,children:[(0,A.jsx)(ve,{size:16}),(0,A.jsx)(`span`,{children:`部分来源未完整处理,结论仅覆盖报告中列出的已处理数据。`})]}):(0,A.jsxs)(`div`,{className:`summary-coverage-ok`,children:[(0,A.jsx)(C,{size:16}),(0,A.jsx)(`span`,{children:`所选来源均已纳入本次报告`})]}),n.tableCoverage?.length?(0,A.jsx)(`div`,{className:`summary-table-coverage`,"aria-label":`表格快照覆盖`,children:n.tableCoverage.map(e=>(0,A.jsxs)(`span`,{children:[(0,A.jsx)(f,{platform:e.platform,small:!0}),`表格快照:`,e.state===`ready`?`${e.recordCount} 行`:e.message??e.state,e.dataAsOf?` · 截止 ${N(e.dataAsOf)}`:``]},e.selectionId))}):null,n.sections.map(r=>(0,A.jsxs)(`section`,{className:`summary-report-section ${r.section===`overview`?`summary-overview`:``} ${r.section===`special_focus`?`summary-special-focus-result`:``}`,children:[(0,A.jsxs)(`div`,{className:`summary-report-section-heading`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`span`,{className:`summary-report-kicker`,children:r.title}),r.section===`overview`?null:(0,A.jsx)(`h3`,{children:r.summary})]}),r.items.length?(0,A.jsxs)(`span`,{children:[r.items.length,` 项`]}):null]}),r.section===`overview`?(0,A.jsx)(`p`,{children:r.summary}):null,r.items.length?(0,A.jsx)(`div`,{className:`summary-priority-list`,children:r.items.map((i,o)=>(0,A.jsxs)(`article`,{children:[(0,A.jsx)(`span`,{className:`summary-priority-index`,children:o+1}),(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`div`,{className:`summary-priority-title`,children:[(0,A.jsx)(`h4`,{children:i.title}),i.actionType?(0,A.jsx)(t,{children:b[i.actionType]}):null]}),(0,A.jsx)(`p`,{children:i.description}),(0,A.jsxs)(`details`,{className:`summary-evidence-details`,children:[(0,A.jsxs)(`summary`,{children:[`查看 `,i.evidence.length,` 条来源依据`]}),(0,A.jsx)(`div`,{className:`summary-evidence-list`,children:i.evidence.map((t,r)=>{if(t.kind===`table`){let i=n.tableMaterials?.find(e=>e.id===t.tableMaterialId),a=t.fieldIds.map(e=>i?.fields.find(t=>t.id===e)?.name??e);return(0,A.jsxs)(`div`,{className:`summary-evidence-card`,children:[(0,A.jsxs)(`div`,{className:`summary-evidence-row`,children:[(0,A.jsx)(f,{platform:t.platform,small:!0}),(0,A.jsxs)(`span`,{children:[x[t.platform],` ·`,` `,i?.baseName??`表格`,` ·`,` `,i?.tableName??`记录`,` · 字段 `,a.join(`、`)]}),i?.sourceUrl?(0,A.jsx)(e,{type:`link`,href:i.sourceUrl,target:`_blank`,rel:`noreferrer`,children:`打开表格`}):null]}),(0,A.jsx)(`blockquote`,{children:t.excerpt})]},`${t.tableSnapshotId}:${t.tableRecordId}:${r}`)}return(0,A.jsxs)(`div`,{className:`summary-evidence-card`,children:[(0,A.jsxs)(`div`,{className:`summary-evidence-row`,children:[(0,A.jsx)(f,{platform:t.platform,small:!0}),(0,A.jsxs)(`span`,{children:[x[t.platform],` ·`,` `,p(t.platform,t.sourceType),` `,`· `,N(t.occurredAt)]}),(0,A.jsx)(e,{type:`link`,onClick:()=>a({id:t.sourceRecordId}),children:`打开来源`})]}),(0,A.jsx)(`blockquote`,{children:t.excerpt})]},`${t.sourceRecordId}:${r}`)})})]})]})]},`${r.section}:${i.title}:${o}`))}):null]},r.section)),(0,A.jsxs)(`footer`,{className:`summary-report-footer`,children:[(0,A.jsx)(h,{size:14}),(0,A.jsxs)(`span`,{children:[`报告保留范围、提示词、模型和数据截止时间;重新生成不会覆盖这份结果。有效期至`,` `,N(n.expiresAt),`。`]})]})]})}function Oe(e){return e.reportKind===`daily_brief`?e.dailyBriefKind===`evening`?`晚间简报`:`早间简报`:`按需总结`}function ke(e,t,n=`live`){if(e.historical!==void 0)return e.historical;if(n!==`synthetic`&&e.model.strategy===`local_rules`&&e.model.provider!==`demo`)return!0;let r=new Set(t.filter(e=>e.attentionClass===`system_notification`||e.occurredAtState===`unknown`).map(e=>e.id));return e.sourceRecordIds.some(e=>r.has(e))}function Ae(e,t,n,r=e===`demo`){return fe.flatMap(e=>{let i=t.find(t=>t.platform===e);return l.map(t=>{let a=`${e}:${t}`,o=i?.capabilities.find(e=>e.sourceType===t),s=r?j[a]:void 0;return{key:a,platform:e,sourceType:t,state:s?.state??o?.state??`unverified`,message:s?.message??o?.message,recordCount:n.filter(n=>n.platform===e&&n.sourceType===t).length}})})}function je(e){switch(e.state){case`ready`:return`已就绪`;case`partial`:return`部分可用`;case`failed`:return`同步失败,使用已保存数据`;case`unauthorized`:return`未授权`;case`unsupported`:return`暂不支持`;default:return`尚未验证`}}function Me(e,t,n){let r=new Map(t.map(e=>[e.id,e])),i=n.filter(e=>e.status===`pending`&&r.has(e.sourceRecordId)).slice(0,3).flatMap(e=>{let t=r.get(e.sourceRecordId);return t?[{title:e.title,description:e.description,actionType:e.actionType,evidence:[Ne(t)]}]:[]}),a=new Date().toISOString();return{id:`00000000-0000-4000-8000-000000000001`,jobId:`00000000-0000-4000-8000-000000000002`,profileName:`演示总结`,reportKind:`on_demand`,trigger:`manual`,status:`succeeded`,scope:e.scope,sectionsRequested:e.sections,prompt:e.prompt,detailLevel:e.detailLevel,sourceRecordIds:[...new Set(t.map(e=>e.id))],dataAsOf:a,rangeStart:new Date(Date.now()-864e5).toISOString(),rangeEnd:a,generatedAt:a,expiresAt:new Date(Date.now()+7776e6).toISOString(),model:{strategy:`local_rules`,provider:`demo`,model:`界面演示结果`,promptVersion:`demo_v1`},coverage:e.scope.sources.map(e=>({...e,state:`ready`,recordCount:t.filter(t=>t.platform===e.platform&&t.sourceType===e.sourceType).length})),sections:e.sections.map(e=>({section:e,title:xe.find(t=>t.value===e)?.label??e,summary:e===`overview`?`演示范围中共有 ${t.length} 条记录。今天的信息主要集中在上线确认、合作方案反馈和后续资源安排。`:i.length?`在演示数据中整理出 ${i.length} 项相关内容。`:`在已处理数据中未发现相关内容。`,items:e===`overview`||e===`important`?i:[]}))}}function Ne(e){return{sourceRecordId:e.id,platform:e.platform,sourceType:e.sourceType,occurredAt:e.occurredAt,excerpt:e.body.slice(0,320)}}function Pe(e,t){return new Promise(n=>{let r=t.coverage.map(e=>`${x[e.platform]}${p(e.platform,e.sourceType)}`).join(`、`),i=t.tableCoverage??[],a=i.reduce((e,t)=>e+t.fieldCount,0),o=i.reduce((e,t)=>e+t.sensitiveFieldCount,0),s=[r,i.length?`表格分析资料 ${i.length} 个范围(${t.tableRecordCount??0} 行、${a} 个字段)`:``].filter(Boolean).join(`、`),c=t.warnings.length?t.warnings.join(`;`):`无已知覆盖缺口`;e.confirm({title:`确认向模型供应商发送业务内容`,content:(0,A.jsxs)(`div`,{className:`summary-consent-details`,children:[(0,A.jsxs)(`p`,{children:[`供应商:`,t.model.provider]}),(0,A.jsxs)(`p`,{children:[`模型:`,t.model.model]}),(0,A.jsxs)(`p`,{children:[`数据类型:`,s||`当前预检范围`]}),i.length?(0,A.jsxs)(`p`,{children:[`表格字段:`,a,` 个`,o?`,其中 ${o} 个标记为敏感`:`,无敏感字段`]}):null,(0,A.jsxs)(`p`,{children:[`预计记录:`,t.recordCount,` 条`]}),(0,A.jsxs)(`p`,{children:[`数据截止:`,N(t.asOf)]}),(0,A.jsxs)(`p`,{children:[`覆盖缺口:`,c]}),(0,A.jsx)(`p`,{children:`系统不会发送未勾选来源、未选择的表格字段或 API Key,也不会自动切换到其他供应商。`})]}),okText:`确认并继续`,cancelText:`暂不发送`,onOk:()=>n(!0),onCancel:()=>n(!1)})})}function Fe(e){return{scope:e.scope,sections:e.sectionsRequested,prompt:e.profilePrompt??e.prompt,detailLevel:e.detailLevel,useAttentionPreference:e.useAttentionPreference,tableMaterials:e.tableMaterials,profileId:e.profileId}}function Ie(e){return!e||e.canGenerate?!1:!e.requiresExternalConsent||e.blockers.some(e=>e!==Ce)}function Le(e){let t=e.scope.timeRange;return(t.kind===`preset`?we.find(e=>e.value===t.preset)?.label:`自定义时间`)??`已配置`}function Re(e){if(!e)return`等待范围预检`;let t=e.coverage.flatMap(e=>e.lastSuccessfulSyncAt?[e.lastSuccessfulSyncAt]:[]).sort().at(-1);return t?`最近同步 ${N(t)}`:`数据截止 ${ze(e.asOf)}`}function ze(e){return new Date(e).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`})}function N(e){return new Date(e).toLocaleString(`zh-CN`,{month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function Be(){let e=new Date;return new Date(e.getTime()-e.getTimezoneOffset()*6e4).toISOString().slice(0,10)}function Ve(e){let[t,n]=(0,k.useState)(()=>typeof window>`u`?!1:window.matchMedia(e).matches);return(0,k.useEffect)(()=>{let t=window.matchMedia(e),r=()=>n(t.matches);return r(),t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}export{M as AiSummaryPage};
|