chainlesschain 0.156.4 → 0.156.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/package.json +3 -2
  2. package/scripts/postinstall.mjs +14 -0
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/ActionButton-Dme4LGax.js +1 -0
  5. package/src/assets/web-panel/assets/{Analytics-DQ135mAd.js → Analytics-B3-5BjRm.js} +2 -2
  6. package/src/assets/web-panel/assets/AppLayout-DvVLRyPs.js +1 -0
  7. package/src/assets/web-panel/assets/AppLayout-nff99EgA.css +1 -0
  8. package/src/assets/web-panel/assets/Backup-Cih5dXcD.js +1 -0
  9. package/src/assets/web-panel/assets/BaseInput-wLmjCc9u.js +1 -0
  10. package/src/assets/web-panel/assets/Chat-CRfTuSl8.js +2 -0
  11. package/src/assets/web-panel/assets/Chat-DmX5bWvL.css +1 -0
  12. package/src/assets/web-panel/assets/Checkbox-BfbEUJDW.js +1 -0
  13. package/src/assets/web-panel/assets/Col-HJI40OzO.js +1 -0
  14. package/src/assets/web-panel/assets/Compact-ADVAwcbQ.js +1 -0
  15. package/src/assets/web-panel/assets/Cowork-BLRUoSoO.js +6 -0
  16. package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +1 -0
  17. package/src/assets/web-panel/assets/{Cron-3P0eVLTV.js → Cron-DcNB5TYu.js} +2 -2
  18. package/src/assets/web-panel/assets/{Dashboard-DVNslD3Z.js → Dashboard-p_Wuj0Un.js} +2 -2
  19. package/src/assets/web-panel/assets/Dropdown-CrXGzreQ.js +1 -0
  20. package/src/assets/web-panel/assets/FormItemContext-B97Dibo2.js +1 -0
  21. package/src/assets/web-panel/assets/Git-90CPsOOr.js +2 -0
  22. package/src/assets/web-panel/assets/KeyCode-D63Tfrq7.js +1 -0
  23. package/src/assets/web-panel/assets/Keyframes-C7fCrnlS.js +1 -0
  24. package/src/assets/web-panel/assets/Logs-0SXs6Eyx.js +2 -0
  25. package/src/assets/web-panel/assets/{McpTools-CsGIijNe.js → McpTools-VVSCkpV2.js} +3 -3
  26. package/src/assets/web-panel/assets/Memory-B_3zNQNB.js +2 -0
  27. package/src/assets/web-panel/assets/Notes-DNQz9UXh.js +2 -0
  28. package/src/assets/web-panel/assets/{Organization-Bny6yOPV.js → Organization-CgXUnp-W.js} +4 -4
  29. package/src/assets/web-panel/assets/Overflow-BVsn6SM5.js +1 -0
  30. package/src/assets/web-panel/assets/OverrideContext-7M2Kv4Ru.js +1 -0
  31. package/src/assets/web-panel/assets/P2P-DGPIG-9j.js +2 -0
  32. package/src/assets/web-panel/assets/Permissions-DIFqcnjU.js +4 -0
  33. package/src/assets/web-panel/assets/Portal-CFB5Y97t.js +1 -0
  34. package/src/assets/web-panel/assets/Projects-Bzn-dJ59.js +2 -0
  35. package/src/assets/web-panel/assets/Providers-mscN7CK5.js +2 -0
  36. package/src/assets/web-panel/assets/ResizeObserver.es-D6qJbdzf.js +1 -0
  37. package/src/assets/web-panel/assets/Row-BFUWxIkx.js +1 -0
  38. package/src/assets/web-panel/assets/RssFeed-Dpa4h-q_.js +3 -0
  39. package/src/assets/web-panel/assets/Security-DR6HKo_S.js +4 -0
  40. package/src/assets/web-panel/assets/Services-CDh7r75R.js +2 -0
  41. package/src/assets/web-panel/assets/Skeleton-VNikEgM4.js +8 -0
  42. package/src/assets/web-panel/assets/Skills-Dk9Cp1NG.js +1 -0
  43. package/src/assets/web-panel/assets/Tasks-CfHL1NrP.js +1 -0
  44. package/src/assets/web-panel/assets/Templates-Ny_4GO6a.js +1 -0
  45. package/src/assets/web-panel/assets/Trigger-C7MTh_xj.js +1 -0
  46. package/src/assets/web-panel/assets/VideoEditing-BNRFHgJ9.js +1 -0
  47. package/src/assets/web-panel/assets/{Wallet-CsRgnjJY.js → Wallet-BUfg4IAx.js} +4 -4
  48. package/src/assets/web-panel/assets/WebAuthn-Cia89OyQ.js +5 -0
  49. package/src/assets/web-panel/assets/WorkflowEditor-C1OsMtqv.js +1 -0
  50. package/src/assets/web-panel/assets/_arrayIncludes-B8uzE354.js +1 -0
  51. package/src/assets/web-panel/assets/_getTag-CWA3v-Ds.js +1 -0
  52. package/src/assets/web-panel/assets/chat-B2uGA8wN.js +1 -0
  53. package/src/assets/web-panel/assets/collapseMotion-DnZigkzG.js +3 -0
  54. package/src/assets/web-panel/assets/colors-C_wDMX2Q.js +1 -0
  55. package/src/assets/web-panel/assets/compact-item-C1ikzEN-.js +1 -0
  56. package/src/assets/web-panel/assets/createContext-XExBTk9v.js +1 -0
  57. package/src/assets/web-panel/assets/debounce-Q0BOJsYd.js +1 -0
  58. package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +1 -0
  59. package/src/assets/web-panel/assets/favicon-FSU2gSy6.ico +0 -0
  60. package/src/assets/web-panel/assets/firstNotUndefined-CLFzEa0p.js +1 -0
  61. package/src/assets/web-panel/assets/hasIn-mXvd_Kdq.js +1 -0
  62. package/src/assets/web-panel/assets/icons-CpgFsfkd.js +57 -0
  63. package/src/assets/web-panel/assets/index-1ZqkTPt2.js +1 -0
  64. package/src/assets/web-panel/assets/index-B-TI0cZ2.js +1 -0
  65. package/src/assets/web-panel/assets/index-B6P9mWuk.js +1 -0
  66. package/src/assets/web-panel/assets/index-BBOVB9YK.js +12 -0
  67. package/src/assets/web-panel/assets/index-BFFb9yPd.js +1 -0
  68. package/src/assets/web-panel/assets/index-BL27IhbN.js +1 -0
  69. package/src/assets/web-panel/assets/index-BOqmUcij.js +21 -0
  70. package/src/assets/web-panel/assets/index-BfncNR8d.js +1 -0
  71. package/src/assets/web-panel/assets/index-BirLVqrC.js +1 -0
  72. package/src/assets/web-panel/assets/index-C53dnYiq.js +55 -0
  73. package/src/assets/web-panel/assets/index-C5Zv4fBx.js +1 -0
  74. package/src/assets/web-panel/assets/index-CMYADk0v.js +1 -0
  75. package/src/assets/web-panel/assets/index-CTle6zcb.js +2 -0
  76. package/src/assets/web-panel/assets/index-CbpKJ2W0.js +1 -0
  77. package/src/assets/web-panel/assets/index-CttcpCq_.js +12 -0
  78. package/src/assets/web-panel/assets/index-CxwU-EjS.js +1 -0
  79. package/src/assets/web-panel/assets/index-D1eekAaa.js +13 -0
  80. package/src/assets/web-panel/assets/index-D6Hyy0Bc.js +3 -0
  81. package/src/assets/web-panel/assets/index-D9tzxSFs.js +1 -0
  82. package/src/assets/web-panel/assets/index-DJkIheU6.js +3 -0
  83. package/src/assets/web-panel/assets/index-DMcLOtIo.js +1 -0
  84. package/src/assets/web-panel/assets/index-DQgS_8Fd.js +1 -0
  85. package/src/assets/web-panel/assets/index-DYLE4bnY.js +1 -0
  86. package/src/assets/web-panel/assets/index-DZjQgmBq.js +1 -0
  87. package/src/assets/web-panel/assets/index-D_oSE2Nk.js +21 -0
  88. package/src/assets/web-panel/assets/index-DaMG8ksh.js +36 -0
  89. package/src/assets/web-panel/assets/index-Du7KGlCP.js +19 -0
  90. package/src/assets/web-panel/assets/index-DwMlStra.js +14 -0
  91. package/src/assets/web-panel/assets/index-Dz6RDRcu.js +7 -0
  92. package/src/assets/web-panel/assets/index-LpE6Six-.js +13 -0
  93. package/src/assets/web-panel/assets/index-U4Zd5IK6.js +8 -0
  94. package/src/assets/web-panel/assets/index-a0qENb5U.js +1 -0
  95. package/src/assets/web-panel/assets/index-f4W8Sok0.js +1 -0
  96. package/src/assets/web-panel/assets/index-fLUJs2Sr.js +3 -0
  97. package/src/assets/web-panel/assets/index-jg5cpQg9.js +31 -0
  98. package/src/assets/web-panel/assets/index-kLUQdSDJ.js +10 -0
  99. package/src/assets/web-panel/assets/index-lPIeHtHE.js +7 -0
  100. package/src/assets/web-panel/assets/index-qtDQSqTG.js +6 -0
  101. package/src/assets/web-panel/assets/index-v4Oi0d0l.js +12 -0
  102. package/src/assets/web-panel/assets/initDefaultProps-DOj2K4bh.js +1 -0
  103. package/src/assets/web-panel/assets/injectionKey-BXVc-oGP.js +1 -0
  104. package/src/assets/web-panel/assets/isMobile--2fOlCHx.js +1 -0
  105. package/src/assets/web-panel/assets/isNumeric-DjvBa-1E.js +1 -0
  106. package/src/assets/web-panel/assets/isPlainObject-DSTnI585.js +1 -0
  107. package/src/assets/web-panel/assets/isSymbol-CsP9Ob42.js +1 -0
  108. package/src/assets/web-panel/assets/isVisible-C7tPsqfj.js +1 -0
  109. package/src/assets/web-panel/assets/logo-DBCYUiWP.png +0 -0
  110. package/src/assets/web-panel/assets/markdown-vYH_ziAO.js +1 -0
  111. package/src/assets/web-panel/assets/markdown-xjUYbPSW.js +50 -0
  112. package/src/assets/web-panel/assets/motion-joGf7r-l.js +11 -0
  113. package/src/assets/web-panel/assets/move-Cwb6tumJ.js +4 -0
  114. package/src/assets/web-panel/assets/omit-CPycjJ8C.js +1 -0
  115. package/src/assets/web-panel/assets/pickAttrs-CnibXC3T.js +18 -0
  116. package/src/assets/web-panel/assets/placementArrow-DWcIO1y4.js +1 -0
  117. package/src/assets/web-panel/assets/raf-Deuc0E8-.js +1 -0
  118. package/src/assets/web-panel/assets/responsiveObserve-C5giLhLf.js +1 -0
  119. package/src/assets/web-panel/assets/slide-zwgmm7vM.js +4 -0
  120. package/src/assets/web-panel/assets/statusUtils-CK8tJSHq.js +1 -0
  121. package/src/assets/web-panel/assets/styleChecker-BzLSEXyu.js +1 -0
  122. package/src/assets/web-panel/assets/transition-D4AbuDdO.js +1 -0
  123. package/src/assets/web-panel/assets/useConfigInject-ImjEZhXr.js +2 -0
  124. package/src/assets/web-panel/assets/useFlexGapSupport-Cd-PoTMl.js +1 -0
  125. package/src/assets/web-panel/assets/useMergedState-CXfbNKuO.js +1 -0
  126. package/src/assets/web-panel/assets/useRefs-DwsdQTxa.js +1 -0
  127. package/src/assets/web-panel/assets/useState-DRbnp348.js +1 -0
  128. package/src/assets/web-panel/assets/vendor-C5RM7MZO.js +1 -0
  129. package/src/assets/web-panel/assets/vnode-DAWimP6X.js +1 -0
  130. package/src/assets/web-panel/assets/warning-Pq00owYb.js +1 -0
  131. package/src/assets/web-panel/assets/ws-D-sl0vsW.js +1 -0
  132. package/src/assets/web-panel/assets/zoom-u6SXbmzZ.js +4 -0
  133. package/src/assets/web-panel/index.html +4 -4
  134. package/src/assets/web-panel/assets/AppLayout-BudVJQjq.js +0 -1
  135. package/src/assets/web-panel/assets/AppLayout-CZQuPcF0.css +0 -1
  136. package/src/assets/web-panel/assets/Backup-DbVRG5vE.js +0 -1
  137. package/src/assets/web-panel/assets/Chat-DfR76jyX.css +0 -1
  138. package/src/assets/web-panel/assets/Chat-wVhrFK9C.js +0 -1
  139. package/src/assets/web-panel/assets/Cowork-CXuhlHew.css +0 -1
  140. package/src/assets/web-panel/assets/Cowork-lOC25IW2.js +0 -7
  141. package/src/assets/web-panel/assets/Git-CrDCcBig.js +0 -2
  142. package/src/assets/web-panel/assets/Logs-BfTE8urP.js +0 -2
  143. package/src/assets/web-panel/assets/Memory-BXX_yMKJ.js +0 -2
  144. package/src/assets/web-panel/assets/Notes-DU6Vf2cL.js +0 -2
  145. package/src/assets/web-panel/assets/P2P-BxFZ1Bit.js +0 -2
  146. package/src/assets/web-panel/assets/Permissions-B1j3Mtms.js +0 -4
  147. package/src/assets/web-panel/assets/Projects-D-CGscDu.js +0 -2
  148. package/src/assets/web-panel/assets/Providers-r6NaBYMf.js +0 -2
  149. package/src/assets/web-panel/assets/RssFeed-D7b68C5q.js +0 -3
  150. package/src/assets/web-panel/assets/Security-MJfKv0EJ.js +0 -4
  151. package/src/assets/web-panel/assets/Services-Yb_Q1V3d.js +0 -2
  152. package/src/assets/web-panel/assets/Skills-DLTHcH5T.js +0 -1
  153. package/src/assets/web-panel/assets/Tasks-CqycpPjS.js +0 -1
  154. package/src/assets/web-panel/assets/Templates-y01u2Zis.js +0 -1
  155. package/src/assets/web-panel/assets/VideoEditing-B_nPKw6B.js +0 -1
  156. package/src/assets/web-panel/assets/WebAuthn-DWoR5ADp.js +0 -5
  157. package/src/assets/web-panel/assets/WorkflowEditor-DBJhFPMN.js +0 -1
  158. package/src/assets/web-panel/assets/antd-Dh2t0vGq.js +0 -474
  159. package/src/assets/web-panel/assets/chat-BYmuDvol.js +0 -1
  160. package/src/assets/web-panel/assets/index-CI_aB8Px.js +0 -2
  161. package/src/assets/web-panel/assets/markdown-CBnGGMzE.js +0 -55
  162. package/src/assets/web-panel/assets/vendor-CN0Iv_qZ.js +0 -1
  163. package/src/assets/web-panel/assets/ws-Dma34ig_.js +0 -1
  164. /package/src/assets/web-panel/assets/{github-dark-Dfs9RUU9.css → markdown-Dfs9RUU9.css} +0 -0
@@ -1 +0,0 @@
1
- import{w as Q,o as R,a3 as n,a1 as s,k as i,u as r,a5 as u,Z as d,F as S,a7 as z,G as c,a4 as y,W as T,a9 as V,A as q,c as x,X as f,f as $,Y as o,a2 as A,n as J}from"./vendor-CN0Iv_qZ.js";import{m as H,H as M}from"./markdown-CBnGGMzE.js";/* empty css */import{u as K}from"./chat-BYmuDvol.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as P,G as U,M as W,r as X,v as Y}from"./antd-Dh2t0vGq.js";import"./ws-Dma34ig_.js";const Z={style:{display:"flex",height:"calc(100vh - 56px - 48px)",gap:"16px"}},ee={style:{width:"240px","flex-shrink":"0",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},te={key:0,style:{padding:"6px 12px 4px","font-size":"11px",color:"#1677ff",background:"rgba(22,119,255,.07)","border-bottom":"1px solid rgba(22,119,255,.15)",display:"flex","align-items":"center",gap:"4px"}},se=["title"],oe={key:1,style:{padding:"6px 12px 4px","font-size":"11px",color:"#722ed1",background:"rgba(114,46,209,.07)","border-bottom":"1px solid rgba(114,46,209,.15)",display:"flex","align-items":"center",gap:"4px"}},ne={style:{padding:"10px 12px","border-bottom":"1px solid var(--border-color)",display:"flex",gap:"8px"}},ae={style:{flex:"1","overflow-y":"auto",padding:"8px"}},le=["onClick"],ie={class:"session-icon"},re={class:"session-info"},de={class:"session-title"},pe={class:"session-meta"},ue={key:0,style:{"text-align":"center",color:"var(--text-muted)",padding:"24px 0","font-size":"13px"}},ce={style:{flex:"1",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},ve={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},xe={style:{"margin-top":"24px",display:"flex",gap:"12px"}},ge={key:0,class:"tool-msg"},ye={style:{margin:"0","font-size":"11px",color:"#aaa","white-space":"pre-wrap"}},fe={key:0,style:{"margin-top":"8px","padding-top":"8px","border-top":"1px solid var(--border-color)"}},_e={style:{margin:"0","font-size":"11px",color:"#52c41a","white-space":"pre-wrap"}},me={key:1,class:"user-msg"},be={class:"bubble user"},he={key:2,class:"assistant-msg"},ke=["innerHTML"],we={key:0,class:"assistant-msg"},Ce=["innerHTML"],Se={key:1,class:"question-card"},ze={class:"question-text"},Me={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},Oe={key:2,style:{padding:"16px","border-top":"1px solid var(--border-color)"}},Ie={style:{display:"flex",gap:"8px","align-items":"flex-end"}},Le={__name:"Chat",setup(Ne){const k=window.__CC_CONFIG__||{},j=x(()=>k.mode==="project");H.setOptions({highlight:(a,e)=>e&&M.getLanguage(e)?M.highlight(a,{language:e}).value:M.highlightAuto(a).value,breaks:!0});const l=K(),_=$(null),g=$(""),p=x(()=>l.currentSessionId),O=x(()=>p.value?l.getMessages(p.value):[]),w=x(()=>{const a=l.streaming[p.value];return a?.active?a.content:null}),m=x(()=>l.pendingQuestion[p.value]),b=x(()=>l.isLoading);function I(a){try{return H(a||"")}catch{return a||""}}async function h(a){await l.createSession(a)}async function L(){if(!g.value.trim()||b.value||!p.value)return;const a=g.value;g.value="",await l.sendMessage(p.value,a)}function N(a){l.answerQuestion(p.value,a)}return Q([O,w],()=>{J(()=>{_.value&&(_.value.scrollTop=_.value.scrollHeight)})},{deep:!0}),R(()=>{l.loadSessions()}),(a,e)=>{const v=f("a-button"),E=f("a-collapse-panel"),F=f("a-collapse"),B=f("a-input-search"),G=f("a-textarea");return o(),n("div",Z,[s("div",ee,[j.value?(o(),n("div",te,[i(r(P)),s("span",{style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:r(k).projectRoot},u(r(k).projectName||"项目"),9,se)])):(o(),n("div",oe,[i(r(U)),e[5]||(e[5]=s("span",null,"全局会话",-1))])),s("div",ne,[i(v,{type:"primary",size:"small",style:{flex:"1"},onClick:e[0]||(e[0]=t=>h("chat"))},{icon:d(()=>[i(r(W))]),default:d(()=>[e[6]||(e[6]=c(" Chat ",-1))]),_:1}),i(v,{size:"small",style:{flex:"1"},onClick:e[1]||(e[1]=t=>h("agent"))},{icon:d(()=>[i(r(X))]),default:d(()=>[e[7]||(e[7]=c(" Agent ",-1))]),_:1})]),s("div",ae,[(o(!0),n(S,null,z(r(l).sessions,t=>(o(),n("div",{key:t.id,class:A(["session-item",{active:t.id===r(l).currentSessionId}]),onClick:C=>r(l).switchSession(t.id)},[s("span",ie,u(t.type==="agent"?"🤖":"💬"),1),s("div",re,[s("div",de,u(t.title||"新对话"),1),s("div",pe,u(t.messageCount||0)+" 条消息",1)])],10,le))),128)),r(l).sessions.length?y("",!0):(o(),n("div",ue,[...e[8]||(e[8]=[c(" 点击上方按钮",-1),s("br",null,null,-1),c("开始新对话 ",-1)])]))])]),s("div",ce,[p.value?(o(),n("div",{key:1,style:{flex:"1","overflow-y":"auto",padding:"20px"},ref_key:"messagesEl",ref:_},[(o(!0),n(S,null,z(O.value,(t,C)=>(o(),n("div",{key:C,class:A(["message-row",t.role])},[t.role==="tool"?(o(),n("div",ge,[i(F,{ghost:"",size:"small"},{default:d(()=>[i(E,{header:`🔧 ${t.tool} ${t.status==="running"?"(执行中...)":"✓"}`,style:{border:"1px solid var(--border-color)","border-radius":"6px",background:"var(--bg-card)"}},{default:d(()=>[s("pre",ye,u(JSON.stringify(t.input,null,2)),1),t.result?(o(),n("div",fe,[s("pre",_e,u(typeof t.result=="string"?t.result:JSON.stringify(t.result,null,2)),1)])):y("",!0)]),_:2},1032,["header"])]),_:2},1024)])):t.role==="user"?(o(),n("div",me,[s("div",be,u(t.content),1)])):(o(),n("div",he,[e[14]||(e[14]=s("div",{class:"avatar"},"AI",-1)),s("div",{class:"bubble assistant",innerHTML:I(t.content)},null,8,ke)]))],2))),128)),w.value?(o(),n("div",we,[e[15]||(e[15]=s("div",{class:"avatar"},"AI",-1)),s("div",{class:"bubble assistant streaming",innerHTML:I(w.value)},null,8,Ce)])):y("",!0),m.value?(o(),n("div",Se,[s("div",ze,u(m.value.question),1),m.value.choices?.length?(o(),n("div",Me,[(o(!0),n(S,null,z(m.value.choices,t=>(o(),T(v,{key:t,size:"small",onClick:C=>N(t)},{default:d(()=>[c(u(t),1)]),_:2},1032,["onClick"]))),128))])):(o(),T(B,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:N}))])):y("",!0)],512)):(o(),n("div",ve,[e[11]||(e[11]=s("div",{style:{"font-size":"48px","margin-bottom":"16px"}},"💬",-1)),e[12]||(e[12]=s("div",{style:{"font-size":"16px","margin-bottom":"8px",color:"#777"}},"开始 AI 对话",-1)),e[13]||(e[13]=s("div",{style:{"font-size":"13px",color:"var(--text-muted)"}},"选择左侧会话或创建新对话",-1)),s("div",xe,[i(v,{type:"primary",onClick:e[2]||(e[2]=t=>h("chat"))},{default:d(()=>[...e[9]||(e[9]=[c("新建 Chat",-1)])]),_:1}),i(v,{style:{},onClick:e[3]||(e[3]=t=>h("agent"))},{default:d(()=>[...e[10]||(e[10]=[c("新建 Agent",-1)])]),_:1})])])),p.value?(o(),n("div",Oe,[s("div",Ie,[i(G,{value:g.value,"onUpdate:value":e[4]||(e[4]=t=>g.value=t),placeholder:b.value?"等待响应中...":"输入消息,Shift+Enter 换行,Enter 发送","auto-size":{minRows:1,maxRows:6},disabled:b.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)",color:"var(--text-primary)",resize:"none",flex:"1"},onKeydown:V(q(L,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),i(v,{type:"primary",loading:b.value,onClick:L,style:{height:"40px"}},{icon:d(()=>[i(r(Y))]),_:1},8,["loading"])])])):y("",!0)])])}}},Be=D(Le,[["__scopeId","data-v-8392b2d7"]]);export{Be as default};
@@ -1 +0,0 @@
1
- .cowork-root[data-v-68912dc6]{display:flex;height:calc(100vh - 104px);gap:16px}.template-panel[data-v-68912dc6]{width:280px;flex-shrink:0;background:var(--bg-card);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;overflow:hidden}.template-header[data-v-68912dc6]{padding:16px 16px 8px;display:flex;align-items:center;gap:8px;font-size:16px;font-weight:600;color:var(--text-primary)}.header-icon[data-v-68912dc6]{font-size:18px;color:#1677ff}.template-hint[data-v-68912dc6]{padding:0 16px 12px;font-size:12px;color:var(--text-muted);border-bottom:1px solid var(--border-color)}.template-list[data-v-68912dc6]{flex:1;overflow-y:auto;padding:8px}.template-card[data-v-68912dc6]{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:8px;cursor:pointer;transition:all .15s;margin-bottom:4px;border:1px solid transparent}.template-card[data-v-68912dc6]:hover{background:var(--bg-card-hover)}.template-card.active[data-v-68912dc6]{background:#1677ff14;border-color:#1677ff4d}.template-card.free .card-icon[data-v-68912dc6]{color:#faad14}.card-icon[data-v-68912dc6]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#1677ff;background:#1677ff14;border-radius:8px;flex-shrink:0;margin-top:2px}.card-name[data-v-68912dc6]{font-size:13px;font-weight:500;color:var(--text-primary)}.card-desc[data-v-68912dc6]{font-size:11px;color:var(--text-muted);margin-top:2px;line-height:1.4}.file-zone[data-v-68912dc6]{padding:12px;border-top:1px solid var(--border-color);text-align:center;transition:background .2s}.file-zone.dragging[data-v-68912dc6]{background:#1677ff14}.drop-icon[data-v-68912dc6]{font-size:20px;color:var(--text-muted)}.drop-text[data-v-68912dc6]{font-size:11px;color:var(--text-muted);margin:4px 0 8px}.file-list[data-v-68912dc6]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px;justify-content:center}.file-tag[data-v-68912dc6]{max-width:140px;overflow:hidden;text-overflow:ellipsis;font-size:11px}.path-input[data-v-68912dc6]{font-size:11px}.exec-panel[data-v-68912dc6]{flex:1;background:var(--bg-card);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;overflow:hidden}.empty-state[data-v-68912dc6],.ready-state[data-v-68912dc6]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 24px}.empty-icon[data-v-68912dc6]{font-size:48px;color:#1677ff40;margin-bottom:16px}.empty-title[data-v-68912dc6]{font-size:16px;color:var(--text-primary);margin-bottom:6px}.empty-sub[data-v-68912dc6]{font-size:13px;color:var(--text-muted);margin-bottom:24px}.ready-header[data-v-68912dc6]{display:flex;align-items:center;gap:10px;margin-bottom:20px}.ready-icon[data-v-68912dc6]{font-size:28px;color:#1677ff}.ready-name[data-v-68912dc6]{font-size:18px;font-weight:600;color:var(--text-primary)}.parallel-toggle[data-v-68912dc6]{display:flex;align-items:center;gap:8px;margin-bottom:16px;padding:8px 14px;background:var(--bg-card-hover);border-radius:8px;border:1px solid var(--border-color)}.parallel-label[data-v-68912dc6]{font-size:13px;color:var(--text-primary)}.agent-count[data-v-68912dc6]{width:60px}.parallel-hint[data-v-68912dc6]{font-size:12px;color:var(--text-muted)}.ready-examples[data-v-68912dc6]{text-align:center}.example-label[data-v-68912dc6]{font-size:13px;color:var(--text-muted);margin-bottom:12px}.example-grid[data-v-68912dc6]{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:500px}.example-chip[data-v-68912dc6]{padding:6px 14px;border-radius:16px;font-size:12px;color:var(--text-primary);background:var(--bg-card-hover);border:1px solid var(--border-color);cursor:pointer;transition:all .15s}.example-chip[data-v-68912dc6]:hover{border-color:#1677ff;background:#1677ff14;color:#1677ff}.messages-area[data-v-68912dc6]{flex:1;overflow-y:auto;padding:20px}.message-row[data-v-68912dc6]{margin-bottom:16px}.user-msg[data-v-68912dc6]{display:flex;justify-content:flex-end}.assistant-msg[data-v-68912dc6]{display:flex;gap:10px;align-items:flex-start}.avatar[data-v-68912dc6]{width:32px;height:32px;border-radius:50%;background:#1677ff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--text-primary);flex-shrink:0}.bubble[data-v-68912dc6]{padding:10px 14px;border-radius:12px;max-width:80%;line-height:1.6;font-size:14px}.bubble.user[data-v-68912dc6]{background:#1677ff;color:var(--text-primary);border-bottom-right-radius:4px}.bubble.assistant[data-v-68912dc6]{background:var(--bg-card-hover);color:var(--text-primary);border-bottom-left-radius:4px}.bubble.streaming[data-v-68912dc6]:after{content:"○";animation:blink-68912dc6 .7s step-start infinite;color:#1677ff}@keyframes blink-68912dc6{50%{opacity:0}}.tool-msg[data-v-68912dc6]{margin:8px 0}.tool-collapse[data-v-68912dc6]{border:1px solid var(--border-color);border-radius:6px;background:var(--bg-card)}.tool-input[data-v-68912dc6]{margin:0;font-size:11px;color:#aaa;white-space:pre-wrap}.tool-result-box[data-v-68912dc6]{margin-top:8px;padding-top:8px;border-top:1px solid var(--border-color)}.tool-result[data-v-68912dc6]{margin:0;font-size:11px;color:#52c41a;white-space:pre-wrap}.question-card[data-v-68912dc6]{background:var(--bg-card-hover);border:1px solid #1677ff40;border-radius:10px;padding:14px 16px;margin-top:8px}.question-text[data-v-68912dc6]{color:#aaa;font-size:13px}.question-choices[data-v-68912dc6]{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.debate-panel[data-v-68912dc6]{border-top:1px solid var(--border-color);padding:12px 16px;background:var(--bg-card-hover)}.debate-verdict[data-v-68912dc6]{display:flex;align-items:center;gap:12px;margin-bottom:8px;font-size:13px}.consensus[data-v-68912dc6]{color:var(--text-muted);font-size:12px}.review-collapse[data-v-68912dc6]{border-bottom:1px solid var(--border-color)}.review-body[data-v-68912dc6]{font-size:12px;line-height:1.6;color:var(--text-primary);padding:4px 0}.task-stats[data-v-68912dc6]{display:flex;gap:6px;padding:6px 16px;border-top:1px solid var(--border-color);justify-content:flex-end}.input-area[data-v-68912dc6]{padding:12px 16px 16px;border-top:1px solid var(--border-color)}.input-context[data-v-68912dc6]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.context-tag[data-v-68912dc6]{font-size:11px}.context-tag.file[data-v-68912dc6]{background:var(--bg-card-hover)}.input-row[data-v-68912dc6]{display:flex;gap:8px;align-items:flex-end}.msg-input[data-v-68912dc6]{flex:1;background:var(--bg-card-hover);border-color:var(--border-color);color:var(--text-primary);resize:none}.send-btn[data-v-68912dc6]{height:40px}[data-v-68912dc6] .bubble.assistant pre{background:var(--bg-base);border-radius:6px;padding:12px;overflow-x:auto;font-size:12px}[data-v-68912dc6] .bubble.assistant code:not(pre code){background:var(--bg-card-hover);padding:1px 5px;border-radius:3px;font-size:12px;color:#f0a500}[data-v-68912dc6] .bubble.assistant p{margin:0 0 8px}[data-v-68912dc6] .bubble.assistant p:last-child{margin:0}.history-section[data-v-68912dc6]{margin-top:12px;border-top:1px solid var(--border-color);padding-top:8px}.history-header[data-v-68912dc6]{display:flex;align-items:center;gap:6px;font-size:12px;color:#888;cursor:pointer;padding:4px 0}.history-header[data-v-68912dc6]:hover{color:#1677ff}.history-list[data-v-68912dc6]{max-height:200px;overflow-y:auto}.history-item[data-v-68912dc6]{padding:6px 8px;border-radius:6px;margin-bottom:4px;background:var(--bg-card-hover);cursor:default}.history-item.failed[data-v-68912dc6]{border-left:2px solid #ff4d4f}.history-item.completed[data-v-68912dc6]{border-left:2px solid #52c41a}.history-summary[data-v-68912dc6]{font-size:12px;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-meta[data-v-68912dc6]{display:flex;justify-content:space-between;font-size:10px;color:#888;margin-top:2px}
@@ -1,7 +0,0 @@
1
- import{V as Tn,w as an,f as w,c as We,o as En,a3 as h,a1 as d,k as D,u as a,F as oe,a7 as ie,a2 as Ne,A as dt,a5 as A,a4 as N,G as U,W as $,a6 as pt,Z as k,a9 as An,X as le,Y as u,n as Vt}from"./vendor-CN0Iv_qZ.js";import{m as Xt,H as ft}from"./markdown-CBnGGMzE.js";/* empty css */import{u as mt}from"./ws-Dma34ig_.js";import{u as _e}from"./chat-BYmuDvol.js";import{_ as vn}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as Pe,T as yn,w as jt,H as Sn,S as bn,p as On,G as Rn,s as wn,k as Cn,x as Dn,y as kn,n as Ln,z as Mn,b as In,t as xn,v as Nn}from"./antd-Dh2t0vGq.js";const{entries:on,setPrototypeOf:qt,isFrozen:Pn,getPrototypeOf:Fn,getOwnPropertyDescriptor:Un}=Object;let{freeze:z,seal:q,create:Be}=Object,{apply:vt,construct:yt}=typeof Reflect<"u"&&Reflect;z||(z=function(t){return t});q||(q=function(t){return t});vt||(vt=function(t,c){for(var r=arguments.length,T=new Array(r>2?r-2:0),E=2;E<r;E++)T[E-2]=arguments[E];return t.apply(c,T)});yt||(yt=function(t){for(var c=arguments.length,r=new Array(c>1?c-1:0),T=1;T<c;T++)r[T-1]=arguments[T];return new t(...r)});const Fe=G(Array.prototype.forEach),Hn=G(Array.prototype.lastIndexOf),Kt=G(Array.prototype.pop),Ue=G(Array.prototype.push),zn=G(Array.prototype.splice),Ze=G(String.prototype.toLowerCase),_t=G(String.prototype.toString),gt=G(String.prototype.match),Oe=G(String.prototype.replace),Gn=G(String.prototype.indexOf),Bn=G(String.prototype.trim),Q=G(Object.prototype.hasOwnProperty),H=G(RegExp.prototype.test),He=Wn(TypeError);function G(f){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var c=arguments.length,r=new Array(c>1?c-1:0),T=1;T<c;T++)r[T-1]=arguments[T];return vt(f,t,r)}}function Wn(f){return function(){for(var t=arguments.length,c=new Array(t),r=0;r<t;r++)c[r]=arguments[r];return yt(f,c)}}function _(f,t){let c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ze;qt&&qt(f,null);let r=t.length;for(;r--;){let T=t[r];if(typeof T=="string"){const E=c(T);E!==T&&(Pn(t)||(t[r]=E),T=E)}f[T]=!0}return f}function Yn(f){for(let t=0;t<f.length;t++)Q(f,t)||(f[t]=null);return f}function ne(f){const t=Be(null);for(const[c,r]of on(f))Q(f,c)&&(Array.isArray(r)?t[c]=Yn(r):r&&typeof r=="object"&&r.constructor===Object?t[c]=ne(r):t[c]=r);return t}function ze(f,t){for(;f!==null;){const r=Un(f,t);if(r){if(r.get)return G(r.get);if(typeof r.value=="function")return G(r.value)}f=Fn(f)}function c(){return null}return c}const Qt=z(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),ht=z(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Tt=z(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),$n=z(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Et=z(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Vn=z(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Zt=z(["#text"]),Jt=z(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),At=z(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),en=z(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Qe=z(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Xn=q(/\{\{[\w\W]*|[\w\W]*\}\}/gm),jn=q(/<%[\w\W]*|[\w\W]*%>/gm),qn=q(/\$\{[\w\W]*/gm),Kn=q(/^data-[\-\w.\u00B7-\uFFFF]+$/),Qn=q(/^aria-[\-\w]+$/),ln=q(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Zn=q(/^(?:\w+script|data):/i),Jn=q(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),rn=q(/^html$/i),es=q(/^[a-z][.\w]*(-[.\w]+)+$/i);var tn=Object.freeze({__proto__:null,ARIA_ATTR:Qn,ATTR_WHITESPACE:Jn,CUSTOM_ELEMENT:es,DATA_ATTR:Kn,DOCTYPE_NAME:rn,ERB_EXPR:jn,IS_ALLOWED_URI:ln,IS_SCRIPT_OR_DATA:Zn,MUSTACHE_EXPR:Xn,TMPLIT_EXPR:qn});const Ge={element:1,text:3,progressingInstruction:7,comment:8,document:9},ts=function(){return typeof window>"u"?null:window},ns=function(t,c){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let r=null;const T="data-tt-policy-suffix";c&&c.hasAttribute(T)&&(r=c.getAttribute(T));const E="dompurify"+(r?"#"+r:"");try{return t.createPolicy(E,{createHTML(F){return F},createScriptURL(F){return F}})}catch{return console.warn("TrustedTypes policy "+E+" could not be created."),null}},nn=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function cn(){let f=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ts();const t=l=>cn(l);if(t.version="3.4.0",t.removed=[],!f||!f.document||f.document.nodeType!==Ge.document||!f.Element)return t.isSupported=!1,t;let{document:c}=f;const r=c,T=r.currentScript,{DocumentFragment:E,HTMLTemplateElement:F,Node:y,Element:W,NodeFilter:V,NamedNodeMap:ge=f.NamedNodeMap||f.MozNamedAttrMap,HTMLFormElement:he,DOMParser:ue,trustedTypes:X}=f,j=W.prototype,Te=ze(j,"cloneNode"),Ee=ze(j,"remove"),Re=ze(j,"nextSibling"),de=ze(j,"childNodes"),se=ze(j,"parentNode");if(typeof F=="function"){const l=c.createElement("template");l.content&&l.content.ownerDocument&&(c=l.content.ownerDocument)}let p,i="";const{implementation:b,createNodeIterator:we,createDocumentFragment:Ce,getElementsByTagName:De}=c,{importNode:Ae}=r;let O=nn();t.isSupported=typeof on=="function"&&typeof se=="function"&&b&&b.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:Z,ERB_EXPR:m,TMPLIT_EXPR:g,DATA_ATTR:s,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:J,ATTR_WHITESPACE:ke,CUSTOM_ELEMENT:un}=tn;let{IS_ALLOWED_URI:St}=tn,L=null;const bt=_({},[...Qt,...ht,...Tt,...Et,...Zt]);let I=null;const Ot=_({},[...Jt,...At,...en,...Qe]);let S=Object.seal(Be(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Le=null,Ye=null;const re=Object.seal(Be(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Rt=!0,Je=!0,wt=!1,Ct=!0,pe=!1,Me=!0,fe=!1,et=!1,tt=!1,ve=!1,$e=!1,Ve=!1,Dt=!0,kt=!1;const dn="user-content-";let nt=!0,Ie=!1,ye={},ee=null;const st=_({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Lt=null;const Mt=_({},["audio","video","img","source","image","track"]);let at=null;const It=_({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Xe="http://www.w3.org/1998/Math/MathML",je="http://www.w3.org/2000/svg",te="http://www.w3.org/1999/xhtml";let Se=te,ot=!1,it=null;const pn=_({},[Xe,je,te],_t);let qe=_({},["mi","mo","mn","ms","mtext"]),Ke=_({},["annotation-xml"]);const fn=_({},["title","style","font","a","script"]);let xe=null;const mn=["application/xhtml+xml","text/html"],_n="text/html";let C=null,be=null;const gn=c.createElement("form"),xt=function(e){return e instanceof RegExp||e instanceof Function},lt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(be&&be===e)){if((!e||typeof e!="object")&&(e={}),e=ne(e),xe=mn.indexOf(e.PARSER_MEDIA_TYPE)===-1?_n:e.PARSER_MEDIA_TYPE,C=xe==="application/xhtml+xml"?_t:Ze,L=Q(e,"ALLOWED_TAGS")?_({},e.ALLOWED_TAGS,C):bt,I=Q(e,"ALLOWED_ATTR")?_({},e.ALLOWED_ATTR,C):Ot,it=Q(e,"ALLOWED_NAMESPACES")?_({},e.ALLOWED_NAMESPACES,_t):pn,at=Q(e,"ADD_URI_SAFE_ATTR")?_(ne(It),e.ADD_URI_SAFE_ATTR,C):It,Lt=Q(e,"ADD_DATA_URI_TAGS")?_(ne(Mt),e.ADD_DATA_URI_TAGS,C):Mt,ee=Q(e,"FORBID_CONTENTS")?_({},e.FORBID_CONTENTS,C):st,Le=Q(e,"FORBID_TAGS")?_({},e.FORBID_TAGS,C):ne({}),Ye=Q(e,"FORBID_ATTR")?_({},e.FORBID_ATTR,C):ne({}),ye=Q(e,"USE_PROFILES")?e.USE_PROFILES:!1,Rt=e.ALLOW_ARIA_ATTR!==!1,Je=e.ALLOW_DATA_ATTR!==!1,wt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ct=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,pe=e.SAFE_FOR_TEMPLATES||!1,Me=e.SAFE_FOR_XML!==!1,fe=e.WHOLE_DOCUMENT||!1,ve=e.RETURN_DOM||!1,$e=e.RETURN_DOM_FRAGMENT||!1,Ve=e.RETURN_TRUSTED_TYPE||!1,tt=e.FORCE_BODY||!1,Dt=e.SANITIZE_DOM!==!1,kt=e.SANITIZE_NAMED_PROPS||!1,nt=e.KEEP_CONTENT!==!1,Ie=e.IN_PLACE||!1,St=e.ALLOWED_URI_REGEXP||ln,Se=e.NAMESPACE||te,qe=e.MATHML_TEXT_INTEGRATION_POINTS||qe,Ke=e.HTML_INTEGRATION_POINTS||Ke,S=e.CUSTOM_ELEMENT_HANDLING||Be(null),e.CUSTOM_ELEMENT_HANDLING&&xt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(S.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&xt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(S.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(S.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),pe&&(Je=!1),$e&&(ve=!0),ye&&(L=_({},Zt),I=Be(null),ye.html===!0&&(_(L,Qt),_(I,Jt)),ye.svg===!0&&(_(L,ht),_(I,At),_(I,Qe)),ye.svgFilters===!0&&(_(L,Tt),_(I,At),_(I,Qe)),ye.mathMl===!0&&(_(L,Et),_(I,en),_(I,Qe))),re.tagCheck=null,re.attributeCheck=null,e.ADD_TAGS&&(typeof e.ADD_TAGS=="function"?re.tagCheck=e.ADD_TAGS:(L===bt&&(L=ne(L)),_(L,e.ADD_TAGS,C))),e.ADD_ATTR&&(typeof e.ADD_ATTR=="function"?re.attributeCheck=e.ADD_ATTR:(I===Ot&&(I=ne(I)),_(I,e.ADD_ATTR,C))),e.ADD_URI_SAFE_ATTR&&_(at,e.ADD_URI_SAFE_ATTR,C),e.FORBID_CONTENTS&&(ee===st&&(ee=ne(ee)),_(ee,e.FORBID_CONTENTS,C)),e.ADD_FORBID_CONTENTS&&(ee===st&&(ee=ne(ee)),_(ee,e.ADD_FORBID_CONTENTS,C)),nt&&(L["#text"]=!0),fe&&_(L,["html","head","body"]),L.table&&(_(L,["tbody"]),delete Le.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw He('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw He('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');p=e.TRUSTED_TYPES_POLICY,i=p.createHTML("")}else p===void 0&&(p=ns(X,T)),p!==null&&typeof i=="string"&&(i=p.createHTML(""));z&&z(e),be=e}},Nt=_({},[...ht,...Tt,...$n]),Pt=_({},[...Et,...Vn]),hn=function(e){let n=se(e);(!n||!n.tagName)&&(n={namespaceURI:Se,tagName:"template"});const o=Ze(e.tagName),v=Ze(n.tagName);return it[e.namespaceURI]?e.namespaceURI===je?n.namespaceURI===te?o==="svg":n.namespaceURI===Xe?o==="svg"&&(v==="annotation-xml"||qe[v]):!!Nt[o]:e.namespaceURI===Xe?n.namespaceURI===te?o==="math":n.namespaceURI===je?o==="math"&&Ke[v]:!!Pt[o]:e.namespaceURI===te?n.namespaceURI===je&&!Ke[v]||n.namespaceURI===Xe&&!qe[v]?!1:!Pt[o]&&(fn[o]||!Nt[o]):!!(xe==="application/xhtml+xml"&&it[e.namespaceURI]):!1},K=function(e){Ue(t.removed,{element:e});try{se(e).removeChild(e)}catch{Ee(e)}},me=function(e,n){try{Ue(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{Ue(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e==="is")if(ve||$e)try{K(n)}catch{}else try{n.setAttribute(e,"")}catch{}},Ft=function(e){let n=null,o=null;if(tt)e="<remove></remove>"+e;else{const R=gt(e,/^[\r\n\t ]+/);o=R&&R[0]}xe==="application/xhtml+xml"&&Se===te&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");const v=p?p.createHTML(e):e;if(Se===te)try{n=new ue().parseFromString(v,xe)}catch{}if(!n||!n.documentElement){n=b.createDocument(Se,"template",null);try{n.documentElement.innerHTML=ot?i:v}catch{}}const P=n.body||n.documentElement;return e&&o&&P.insertBefore(c.createTextNode(o),P.childNodes[0]||null),Se===te?De.call(n,fe?"html":"body")[0]:fe?n.documentElement:P},Ut=function(e){return we.call(e.ownerDocument||e,e,V.SHOW_ELEMENT|V.SHOW_COMMENT|V.SHOW_TEXT|V.SHOW_PROCESSING_INSTRUCTION|V.SHOW_CDATA_SECTION,null)},rt=function(e){return e instanceof he&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof ge)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},ct=function(e){return typeof y=="function"&&e instanceof y};function ae(l,e,n){Fe(l,o=>{o.call(t,e,n,be)})}const Ht=function(e){let n=null;if(ae(O.beforeSanitizeElements,e,null),rt(e))return K(e),!0;const o=C(e.nodeName);if(ae(O.uponSanitizeElement,e,{tagName:o,allowedTags:L}),Me&&e.hasChildNodes()&&!ct(e.firstElementChild)&&H(/<[/\w!]/g,e.innerHTML)&&H(/<[/\w!]/g,e.textContent)||Me&&e.namespaceURI===te&&o==="style"&&ct(e.firstElementChild)||e.nodeType===Ge.progressingInstruction||Me&&e.nodeType===Ge.comment&&H(/<[/\w]/g,e.data))return K(e),!0;if(Le[o]||!(re.tagCheck instanceof Function&&re.tagCheck(o))&&!L[o]){if(!Le[o]&&Gt(o)&&(S.tagNameCheck instanceof RegExp&&H(S.tagNameCheck,o)||S.tagNameCheck instanceof Function&&S.tagNameCheck(o)))return!1;if(nt&&!ee[o]){const v=se(e)||e.parentNode,P=de(e)||e.childNodes;if(P&&v){const R=P.length;for(let B=R-1;B>=0;--B){const Y=Te(P[B],!0);Y.__removalCount=(e.__removalCount||0)+1,v.insertBefore(Y,Re(e))}}}return K(e),!0}return e instanceof W&&!hn(e)||(o==="noscript"||o==="noembed"||o==="noframes")&&H(/<\/no(script|embed|frames)/i,e.innerHTML)?(K(e),!0):(pe&&e.nodeType===Ge.text&&(n=e.textContent,Fe([Z,m,g],v=>{n=Oe(n,v," ")}),e.textContent!==n&&(Ue(t.removed,{element:e.cloneNode()}),e.textContent=n)),ae(O.afterSanitizeElements,e,null),!1)},zt=function(e,n,o){if(Ye[n]||Dt&&(n==="id"||n==="name")&&(o in c||o in gn))return!1;if(!(Je&&!Ye[n]&&H(s,n))){if(!(Rt&&H(M,n))){if(!(re.attributeCheck instanceof Function&&re.attributeCheck(n,e))){if(!I[n]||Ye[n]){if(!(Gt(e)&&(S.tagNameCheck instanceof RegExp&&H(S.tagNameCheck,e)||S.tagNameCheck instanceof Function&&S.tagNameCheck(e))&&(S.attributeNameCheck instanceof RegExp&&H(S.attributeNameCheck,n)||S.attributeNameCheck instanceof Function&&S.attributeNameCheck(n,e))||n==="is"&&S.allowCustomizedBuiltInElements&&(S.tagNameCheck instanceof RegExp&&H(S.tagNameCheck,o)||S.tagNameCheck instanceof Function&&S.tagNameCheck(o))))return!1}else if(!at[n]){if(!H(St,Oe(o,ke,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&e!=="script"&&Gn(o,"data:")===0&&Lt[e])){if(!(wt&&!H(J,Oe(o,ke,"")))){if(o)return!1}}}}}}}return!0},Gt=function(e){return e!=="annotation-xml"&&gt(e,un)},Bt=function(e){ae(O.beforeSanitizeAttributes,e,null);const{attributes:n}=e;if(!n||rt(e))return;const o={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:I,forceKeepAttr:void 0};let v=n.length;for(;v--;){const P=n[v],{name:R,namespaceURI:B,value:Y}=P,ce=C(R),ut=Y;let x=R==="value"?ut:Bn(ut);if(o.attrName=ce,o.attrValue=x,o.keepAttr=!0,o.forceKeepAttr=void 0,ae(O.uponSanitizeAttribute,e,o),x=o.attrValue,kt&&(ce==="id"||ce==="name")&&(me(R,e),x=dn+x),Me&&H(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,x)){me(R,e);continue}if(ce==="attributename"&&gt(x,"href")){me(R,e);continue}if(o.forceKeepAttr)continue;if(!o.keepAttr){me(R,e);continue}if(!Ct&&H(/\/>/i,x)){me(R,e);continue}pe&&Fe([Z,m,g],$t=>{x=Oe(x,$t," ")});const Yt=C(e.nodeName);if(!zt(Yt,ce,x)){me(R,e);continue}if(p&&typeof X=="object"&&typeof X.getAttributeType=="function"&&!B)switch(X.getAttributeType(Yt,ce)){case"TrustedHTML":{x=p.createHTML(x);break}case"TrustedScriptURL":{x=p.createScriptURL(x);break}}if(x!==ut)try{B?e.setAttributeNS(B,R,x):e.setAttribute(R,x),rt(e)?K(e):Kt(t.removed)}catch{me(R,e)}}ae(O.afterSanitizeAttributes,e,null)},Wt=function(e){let n=null;const o=Ut(e);for(ae(O.beforeSanitizeShadowDOM,e,null);n=o.nextNode();)ae(O.uponSanitizeShadowNode,n,null),Ht(n),Bt(n),n.content instanceof E&&Wt(n.content);ae(O.afterSanitizeShadowDOM,e,null)};return t.sanitize=function(l){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,o=null,v=null,P=null;if(ot=!l,ot&&(l="<!-->"),typeof l!="string"&&!ct(l))if(typeof l.toString=="function"){if(l=l.toString(),typeof l!="string")throw He("dirty is not a string, aborting")}else throw He("toString is not a function");if(!t.isSupported)return l;if(et||lt(e),t.removed=[],typeof l=="string"&&(Ie=!1),Ie){if(l.nodeName){const Y=C(l.nodeName);if(!L[Y]||Le[Y])throw He("root node is forbidden and cannot be sanitized in-place")}}else if(l instanceof y)n=Ft("<!---->"),o=n.ownerDocument.importNode(l,!0),o.nodeType===Ge.element&&o.nodeName==="BODY"||o.nodeName==="HTML"?n=o:n.appendChild(o);else{if(!ve&&!pe&&!fe&&l.indexOf("<")===-1)return p&&Ve?p.createHTML(l):l;if(n=Ft(l),!n)return ve?null:Ve?i:""}n&&tt&&K(n.firstChild);const R=Ut(Ie?l:n);for(;v=R.nextNode();)Ht(v),Bt(v),v.content instanceof E&&Wt(v.content);if(Ie)return l;if(ve){if(pe){n.normalize();let Y=n.innerHTML;Fe([Z,m,g],ce=>{Y=Oe(Y,ce," ")}),n.innerHTML=Y}if($e)for(P=Ce.call(n.ownerDocument);n.firstChild;)P.appendChild(n.firstChild);else P=n;return(I.shadowroot||I.shadowrootmode)&&(P=Ae.call(r,P,!0)),P}let B=fe?n.outerHTML:n.innerHTML;return fe&&L["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&H(rn,n.ownerDocument.doctype.name)&&(B="<!DOCTYPE "+n.ownerDocument.doctype.name+`>
2
- `+B),pe&&Fe([Z,m,g],Y=>{B=Oe(B,Y," ")}),p&&Ve?p.createHTML(B):B},t.setConfig=function(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};lt(l),et=!0},t.clearConfig=function(){be=null,et=!1},t.isValidAttribute=function(l,e,n){be||lt({});const o=C(l),v=C(e);return zt(o,v,n)},t.addHook=function(l,e){typeof e=="function"&&Ue(O[l],e)},t.removeHook=function(l,e){if(e!==void 0){const n=Hn(O[l],e);return n===-1?void 0:zn(O[l],n,1)[0]}return Kt(O[l])},t.removeHooks=function(l){O[l]=[]},t.removeAllHooks=function(){O=nn()},t}var sn=cn();const ss=[{id:"doc-convert",name:"文档格式转换",icon:"FileTextOutlined",category:"document",description:"Word、Markdown、HTML、PDF 之间的格式互转",examples:["把 report.docx 转成 PDF","合并多个 Markdown 为一个文档"],acceptsFiles:!0},{id:"media-process",name:"音视频处理",icon:"PlayCircleOutlined",category:"media",description:"视频压缩、音频提取、格式转换、剪辑",examples:["提取 MP4 的音频","压缩视频到 50MB 以内"],acceptsFiles:!0},{id:"data-analysis",name:"数据分析",icon:"BarChartOutlined",category:"data",description:"CSV/Excel 分析、统计、可视化图表",examples:["分析 sales.csv 的月度趋势"],acceptsFiles:!0},{id:"web-research",name:"信息检索与调研",icon:"SearchOutlined",category:"research",description:"网页抓取、API 调用、多源信息汇总",examples:["调研 AI Agent 框架对比"],acceptsFiles:!1},{id:"image-process",name:"图片处理",icon:"PictureOutlined",category:"media",description:"批量压缩、格式转换、加水印、OCR",examples:["批量压缩到 500KB"],acceptsFiles:!0},{id:"code-helper",name:"代码辅助",icon:"CodeOutlined",category:"development",description:"生成脚本、调试代码、自动化任务",examples:["写一个批量重命名脚本"],acceptsFiles:!0},{id:"system-admin",name:"系统运维",icon:"DesktopOutlined",category:"system",description:"磁盘分析、进程管理、日志分析",examples:["查看磁盘使用情况"],acceptsFiles:!1},{id:"file-organize",name:"文件整理",icon:"FolderOpenOutlined",category:"file",description:"批量重命名、分类整理、查找重复",examples:["按文件类型分类整理"],acceptsFiles:!1},{id:"network-tools",name:"网络工具",icon:"GlobalOutlined",category:"network",description:"API 调试、网页抓取、网络诊断",examples:["测试 API 接口"],acceptsFiles:!1},{id:"learning-assist",name:"学习辅助",icon:"ReadOutlined",category:"learning",description:"文档翻译、内容总结、论文分析",examples:["翻译 PDF 摘要"],acceptsFiles:!0}],as=Tn("cowork",()=>{const f=w(ss),t=w(null),c=w([]),r=w(!1),T=w([]),E=w([]),F=w(null),y=w(null),W=w(null),V=w([]),ge=w(!1),he=w(3),ue=w(!1),X=w([]),j=_e();an(()=>j.isLoading,m=>{!m&&y.value&&(r.value=!1)});function Te(m){t.value=m,Ee()}function Ee(){T.value=[],E.value=[],F.value=null,r.value=!1,y.value=null,W.value=null}function Re(m){c.value.includes(m)||c.value.push(m)}function de(m){c.value=c.value.filter(g=>g!==m)}async function se(){const m=mt();try{await m.waitConnected(5e3);const g=await m.sendRaw({type:"cowork-templates"},1e4);g?.templates?.length&&(f.value=g.templates)}catch{}}async function p(){const m=mt();try{await m.waitConnected(5e3);const g=await m.sendRaw({type:"cowork-history",limit:50},1e4);g?.entries&&(V.value=g.entries)}catch{}}async function i(m){W.value={mode:"session",message:m},r.value=!0;const g=t.value;let s="";g&&(s=`## 当前任务类型: ${g.name}
3
- ${g.description||""}`);let M=m;c.value.length&&(M+=`
4
-
5
- [用户提供的文件: ${c.value.join(", ")}]`),E.value.push({role:"user",content:m,timestamp:Date.now()});const J={systemPromptExtension:s};g?.shellPolicyOverrides&&(J.shellPolicyOverrides=g.shellPolicyOverrides);const ke=await j.createSession("agent",J);y.value=ke,await j.sendMessage(ke,M)}async function b(m){W.value={mode:"direct",message:m};const g=mt();r.value=!0,E.value.push({role:"user",content:m,timestamp:Date.now()});try{await g.waitConnected(8e3);const s={type:"cowork-task",templateId:t.value?.id||null,userMessage:m,files:c.value};ge.value&&(s.parallel=!0,s.agents=he.value);const M=t.value;(ue.value||M?.mode==="debate")&&(s.mode="debate",X.value.length&&(s.perspectives=X.value));const J=await g.sendRaw(s,3e5);E.value.push({role:"assistant",content:J.summary||"(No output)",timestamp:Date.now(),toolsUsed:J.toolsUsed||[],iterationCount:J.iterationCount||0}),F.value=J}catch(s){E.value.push({role:"assistant",content:`Error: ${s.message}`,timestamp:Date.now()})}finally{r.value=!1}}const we=We(()=>y.value?_e().getMessages(y.value):[]),Ce=We(()=>{if(!y.value)return null;const g=_e().streaming[y.value];return g?.active?g.content:null}),De=We(()=>y.value&&_e().pendingQuestion[y.value]||null);function Ae(m){if(!y.value)return;_e().answerQuestion(y.value,m)}async function O(){if(!W.value)return;const{mode:m,message:g}=W.value;m==="direct"?await b(g):await i(g)}async function Z(m){if(!y.value)return;const g=_e();E.value.push({role:"user",content:m,timestamp:Date.now()});let s=m;c.value.length&&(s+=`
6
-
7
- [用户提供的文件: ${c.value.join(", ")}]`),await g.sendMessage(y.value,s)}return{selectedTemplate:t,files:c,isRunning:r,steps:T,messages:E,result:F,agentSessionId:y,currentAgentMessages:we,currentStreaming:Ce,currentQuestion:De,selectTemplate:Te,reset:Ee,addFile:Re,removeFile:de,execute:i,executeDirectWs:b,sendFollowUp:Z,answerQuestion:Ae,loadTemplates:se,templates:f,lastRequest:W,retry:O,history:V,loadHistory:p,parallelMode:ge,parallelAgents:he,debateMode:ue,debatePerspectives:X}}),os={class:"cowork-root"},is={class:"template-panel"},ls={class:"template-header"},rs={class:"template-list"},cs=["onClick"],us={class:"card-icon"},ds={class:"card-body"},ps={class:"card-name"},fs={class:"card-desc"},ms={class:"card-icon"},_s={class:"drop-text"},gs={key:0,class:"file-list"},hs={key:1,class:"history-section"},Ts={key:0,class:"history-list"},Es={class:"history-summary"},As={class:"history-meta"},vs={class:"exec-panel"},ys={key:0,class:"empty-state"},Ss={class:"empty-icon"},bs={class:"example-grid"},Os=["onClick"],Rs={key:1,class:"ready-state"},ws={class:"ready-header"},Cs={class:"ready-name"},Ds={key:0,class:"parallel-toggle"},ks={key:1,class:"parallel-hint"},Ls={class:"ready-examples"},Ms=["onClick"],Is={key:0,class:"tool-msg"},xs={class:"tool-input"},Ns={key:0,class:"tool-result-box"},Ps={class:"tool-result"},Fs={key:1,class:"user-msg"},Us={class:"bubble user"},Hs={key:2,class:"assistant-msg"},zs=["innerHTML"],Gs={key:0,class:"assistant-msg"},Bs=["innerHTML"],Ws={key:1,class:"question-card"},Ys={class:"question-text"},$s={key:0,class:"question-choices"},Vs={key:3,class:"debate-panel"},Xs={class:"debate-verdict"},js={class:"consensus"},qs=["innerHTML"],Ks={key:4,class:"task-stats"},Qs={class:"input-area"},Zs={key:0,class:"input-context"},Js={class:"input-row"},ea={__name:"Cowork",setup(f){Xt.setOptions({highlight:(p,i)=>i&&ft.getLanguage(i)?ft.highlight(p,{language:i}).value:ft.highlightAuto(p).value,breaks:!0});const t=as(),c=_e(),r=w(""),T=w(null),E=w(!1),F=w(""),y=w(!1),W=w(!1),V={FileTextOutlined:In,PlayCircleOutlined:Mn,BarChartOutlined:Ln,SearchOutlined:kn,PictureOutlined:Dn,CodeOutlined:Cn,DesktopOutlined:wn,FolderOpenOutlined:jt,GlobalOutlined:Rn,ReadOutlined:On,SafetyCertificateOutlined:bn},ge=["把 report.docx 转成 PDF","压缩视频到 50MB","分析 CSV 生成图表","查询今天的汇率","批量压缩图片","写一个自动化脚本"],he=We(()=>c.isLoading?"等待响应中...":t.selectedTemplate?t.selectedTemplate.examples?.[0]||"描述你的需求...":"描述你想完成的任务,Agent 会帮你搞定"),ue=We(()=>t.currentAgentMessages);function X(p){try{return sn.sanitize(Xt(p||""))}catch{return sn.sanitize(p||"")}}function j(p){return p==="APPROVE"?"green":p==="REJECT"?"red":p==="ERROR"?"default":"orange"}function Te(p){return p.split(/[\\/]/).pop()||p}function Ee(p){E.value=!1;const i=p.dataTransfer?.files;if(i)for(const b of i)t.addFile(b.path||b.name)}function Re(){const p=F.value.trim();p&&(t.addFile(p),F.value="")}async function de(){const p=r.value.trim();!p||c.isLoading||(r.value="",t.agentSessionId?await t.sendFollowUp(p):await t.execute(p))}function se(p){r.value=p,Vt(()=>de())}return an([ue,()=>t.currentStreaming],()=>{Vt(()=>{T.value&&(T.value.scrollTop=T.value.scrollHeight)})},{deep:!0}),En(()=>{c.loadSessions(),t.loadTemplates(),t.loadHistory()}),(p,i)=>{const b=le("a-tag"),we=le("a-input"),Ce=le("a-switch"),De=le("a-input-number"),Ae=le("a-collapse-panel"),O=le("a-collapse"),Z=le("a-button"),m=le("a-input-search"),g=le("a-textarea");return u(),h("div",os,[d("div",is,[d("div",ls,[D(a(Pe),{class:"header-icon"}),i[9]||(i[9]=d("span",{class:"header-title"},"日常协作",-1))]),i[11]||(i[11]=d("div",{class:"template-hint"},"选择任务类型,或直接输入需求",-1)),d("div",rs,[(u(!0),h(oe,null,ie(a(t).templates,s=>(u(),h("div",{key:s.id,class:Ne(["template-card",{active:a(t).selectedTemplate?.id===s.id}]),onClick:M=>a(t).selectTemplate(s)},[d("div",us,[(u(),$(pt(V[s.icon]||a(Pe))))]),d("div",ds,[d("div",ps,A(s.name),1),d("div",fs,A(s.description),1)])],10,cs))),128)),d("div",{class:Ne(["template-card free",{active:a(t).selectedTemplate===null&&y.value}]),onClick:i[0]||(i[0]=s=>{a(t).selectTemplate(null),y.value=!0})},[d("div",ms,[D(a(yn))]),i[10]||(i[10]=d("div",{class:"card-body"},[d("div",{class:"card-name"},"自由提问"),d("div",{class:"card-desc"},"任意任务,Agent 自主完成")],-1))],2)]),a(t).selectedTemplate?.acceptsFiles!==!1?(u(),h("div",{key:0,class:Ne(["file-zone",{dragging:E.value}]),onDragover:i[2]||(i[2]=dt(s=>E.value=!0,["prevent"])),onDragleave:i[3]||(i[3]=s=>E.value=!1),onDrop:dt(Ee,["prevent"])},[D(a(jt),{class:"drop-icon"}),d("div",_s,A(E.value?"松开以添加文件":"拖拽文件到此处"),1),a(t).files.length?(u(),h("div",gs,[(u(!0),h(oe,null,ie(a(t).files,s=>(u(),$(b,{key:s,closable:"",onClose:M=>a(t).removeFile(s),class:"file-tag"},{default:k(()=>[U(A(Te(s)),1)]),_:2},1032,["onClose"]))),128))])):N("",!0),D(we,{value:F.value,"onUpdate:value":i[1]||(i[1]=s=>F.value=s),placeholder:"或输入文件路径,按 Enter 添加",size:"small",class:"path-input",onPressEnter:Re},null,8,["value"])],34)):N("",!0),a(t).history.length?(u(),h("div",hs,[d("div",{class:"history-header",onClick:i[4]||(i[4]=s=>W.value=!W.value)},[D(a(Sn)),U(" 历史记录 ("+A(a(t).history.length)+") ",1)]),W.value?(u(),h("div",Ts,[(u(!0),h(oe,null,ie(a(t).history.slice().reverse().slice(0,20),(s,M)=>(u(),h("div",{key:M,class:Ne(["history-item",s.status])},[d("div",Es,A(s.userMessage),1),d("div",As,[d("span",null,A(s.templateName||"自由模式"),1),d("span",null,A(s.status),1)])],2))),128))])):N("",!0)])):N("",!0)]),d("div",vs,[!a(t).agentSessionId&&!a(t).selectedTemplate?(u(),h("div",ys,[d("div",Ss,[D(a(Pe))]),i[12]||(i[12]=d("div",{class:"empty-title"},"选择一个任务模板开始",-1)),i[13]||(i[13]=d("div",{class:"empty-sub"},"或选择「自由提问」处理任何问题",-1)),d("div",bs,[(u(),h(oe,null,ie(ge,s=>d("div",{key:s,class:"example-chip",onClick:M=>se(s)},A(s),9,Os)),64))])])):a(t).selectedTemplate&&!a(t).agentSessionId?(u(),h("div",Rs,[d("div",ws,[(u(),$(pt(V[a(t).selectedTemplate.icon]||a(Pe)),{class:"ready-icon"})),d("span",Cs,A(a(t).selectedTemplate.name),1)]),a(t).selectedTemplate.parallelStrategy&&a(t).selectedTemplate.parallelStrategy!=="none"?(u(),h("div",Ds,[D(Ce,{checked:a(t).parallelMode,"onUpdate:checked":i[5]||(i[5]=s=>a(t).parallelMode=s),size:"small"},null,8,["checked"]),i[14]||(i[14]=d("span",{class:"parallel-label"},"多 Agent 并行",-1)),a(t).parallelMode?(u(),$(De,{key:0,value:a(t).parallelAgents,"onUpdate:value":i[6]||(i[6]=s=>a(t).parallelAgents=s),min:2,max:10,size:"small",class:"agent-count"},null,8,["value"])):N("",!0),a(t).parallelMode?(u(),h("span",ks,"个 Agent")):N("",!0)])):N("",!0),d("div",Ls,[i[15]||(i[15]=d("div",{class:"example-label"},"试试这些:",-1)),(u(!0),h(oe,null,ie(a(t).selectedTemplate.examples,s=>(u(),h("div",{key:s,class:"example-chip",onClick:M=>se(s)},A(s),9,Ms))),128))])])):(u(),h("div",{key:2,class:"messages-area",ref_key:"messagesEl",ref:T},[(u(!0),h(oe,null,ie(ue.value,(s,M)=>(u(),h("div",{key:M,class:Ne(["message-row",s.role])},[s.role==="tool"?(u(),h("div",Is,[D(O,{ghost:"",size:"small"},{default:k(()=>[D(Ae,{class:"tool-collapse"},{header:k(()=>[D(a(xn)),U(" "+A(s.tool)+" "+A(s.status==="running"?"(执行中...)":"✓"),1)]),default:k(()=>[d("pre",xs,A(JSON.stringify(s.input,null,2)),1),s.result?(u(),h("div",Ns,[d("pre",Ps,A(typeof s.result=="string"?s.result:JSON.stringify(s.result,null,2)),1)])):N("",!0)]),_:2},1024)]),_:2},1024)])):s.role==="user"?(u(),h("div",Fs,[d("div",Us,A(s.content),1)])):(u(),h("div",Hs,[i[17]||(i[17]=d("div",{class:"avatar"},"AI",-1)),d("div",{class:"bubble assistant",innerHTML:X(s.content)},null,8,zs),s.content?.startsWith("Error:")&&!a(t).isRunning&&a(t).lastRequest?(u(),$(Z,{key:0,size:"small",type:"link",onClick:i[7]||(i[7]=J=>a(t).retry())},{default:k(()=>[...i[16]||(i[16]=[U(" 重试 ",-1)])]),_:1})):N("",!0)]))],2))),128)),a(t).currentStreaming?(u(),h("div",Gs,[i[18]||(i[18]=d("div",{class:"avatar"},"AI",-1)),d("div",{class:"bubble assistant streaming",innerHTML:X(a(t).currentStreaming)},null,8,Bs)])):N("",!0),a(t).currentQuestion?(u(),h("div",Ws,[d("div",Ys,A(a(t).currentQuestion.question),1),a(t).currentQuestion.choices?.length?(u(),h("div",$s,[(u(!0),h(oe,null,ie(a(t).currentQuestion.choices,s=>(u(),$(Z,{key:s,size:"small",onClick:M=>a(t).answerQuestion(s)},{default:k(()=>[U(A(s),1)]),_:2},1032,["onClick"]))),128))])):(u(),$(m,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:a(t).answerQuestion},null,8,["onSearch"]))])):N("",!0)],512)),a(t).result?.mode==="debate"&&!a(t).isRunning?(u(),h("div",Vs,[d("div",Xs,[D(b,{color:j(a(t).result.verdict)},{default:k(()=>[U(A(a(t).result.verdict),1)]),_:1},8,["color"]),d("span",js,"共识 "+A(a(t).result.consensusScore||0)+"/100",1)]),D(O,{ghost:"",size:"small"},{default:k(()=>[(u(!0),h(oe,null,ie(a(t).result.reviews||[],(s,M)=>(u(),$(Ae,{key:M,class:"review-collapse"},{header:k(()=>[D(b,{color:j(s.verdict)},{default:k(()=>[U(A(s.verdict),1)]),_:2},1032,["color"]),U(" "+A(s.role),1)]),default:k(()=>[d("div",{class:"review-body",innerHTML:X(s.review)},null,8,qs)]),_:2},1024))),128))]),_:1})])):N("",!0),a(t).result&&!a(t).isRunning?(u(),h("div",Ks,[a(t).result.mode==="debate"?(u(),$(b,{key:0,color:"magenta"},{default:k(()=>[...i[19]||(i[19]=[U("debate",-1)])]),_:1})):N("",!0),a(t).result.parallel?(u(),$(b,{key:1,color:"purple"},{default:k(()=>[U(A(a(t).result.subtaskCount||0)+" subtasks",1)]),_:1})):N("",!0),D(b,{color:"geekblue"},{default:k(()=>[U(A(a(t).result.iterationCount||0)+" iterations",1)]),_:1}),D(b,{color:"cyan"},{default:k(()=>[U("~"+A((a(t).result.tokenCount||0).toLocaleString())+" tokens",1)]),_:1}),a(t).result.toolsUsed?.length?(u(),$(b,{key:2,color:"green"},{default:k(()=>[U(A(a(t).result.toolsUsed.length)+" tools",1)]),_:1})):N("",!0)])):N("",!0),d("div",Qs,[a(t).selectedTemplate?(u(),h("div",Zs,[D(b,{color:"blue",class:"context-tag"},{default:k(()=>[(u(),$(pt(V[a(t).selectedTemplate.icon]||a(Pe)))),U(" "+A(a(t).selectedTemplate.name),1)]),_:1}),(u(!0),h(oe,null,ie(a(t).files,s=>(u(),$(b,{key:s,class:"context-tag file"},{default:k(()=>[U(A(Te(s)),1)]),_:2},1024))),128))])):N("",!0),d("div",Js,[D(g,{value:r.value,"onUpdate:value":i[8]||(i[8]=s=>r.value=s),placeholder:he.value,"auto-size":{minRows:1,maxRows:6},disabled:a(c).isLoading,class:"msg-input",onKeydown:An(dt(de,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),D(Z,{type:"primary",loading:a(c).isLoading,class:"send-btn",onClick:de},{icon:k(()=>[D(a(Nn))]),_:1},8,["loading"])])])])])}}},ra=vn(ea,[["__scopeId","data-v-68912dc6"]]);export{ra as default};
@@ -1,2 +0,0 @@
1
- import{u as ee}from"./ws-Dma34ig_.js";import{_ as te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as ae,Z as oe,f as P,_ as T,$ as le,N as v}from"./antd-Dh2t0vGq.js";import{a3 as W,a1 as s,k as a,Z as t,f as l,X as u,Y as p,G as i,u as g,W as m,a5 as V,a4 as b}from"./vendor-CN0Iv_qZ.js";const se={key:0,style:{"margin-bottom":"16px"}},ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-primary)","font-family":"'Cascadia Code', 'Fira Code', Consolas, monospace","font-size":"13px","line-height":"1.7",margin:"0"}},re={style:{display:"flex",gap:"12px","align-items":"flex-end","flex-wrap":"wrap"}},ie={style:{flex:"1","min-width":"200px"}},ue={style:{"min-width":"140px"}},de={style:{display:"flex",gap:"12px","align-items":"flex-end","flex-wrap":"wrap"}},pe={style:{flex:"1","min-width":"200px"}},ce={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-primary)","font-family":"'Cascadia Code', 'Fira Code', Consolas, monospace","font-size":"13px","line-height":"1.7",margin:"0"}},ve={__name:"Git",setup(me){const G=ee(),D=l("git"),L=l(!1),w=l(""),h=l(""),C=l(0),B=l(!1),x=l(""),O=l(!1),E=l(!1),M=l(""),$=l("markdown"),z=l(!1),S=l("./site"),A=l(!1),c=l(""),_=l(!1),k=l("");function Z(o){const e=o.split(`
2
- `);let n="",r=0;for(const f of e){const y=f.match(/On branch\s+(.+)/)||f.match(/分支\s+(.+)/);y&&(n=y[1].trim());const U=f.trim();/^(M|A|D|R|C|U|\?\?|MM|AM|AD)\s/.test(U)&&r++,/^(modified|new file|deleted|renamed):/i.test(U)&&r++}return{branch:n,changed:r}}async function F(){L.value=!0;try{const{output:o}=await G.execute("git status",15e3);w.value=o;const e=Z(o);h.value=e.branch,C.value=e.changed}catch(o){v.error("获取 Git 状态失败: "+o.message),w.value=""}finally{L.value=!1}}function j(){E.value=!0}async function q(){E.value=!1,B.value=!0,x.value="";try{const{output:o}=await G.execute("git auto-commit",3e4);x.value=o,O.value=!o.includes("✖")&&!o.toLowerCase().includes("error"),O.value&&v.success("自动提交完成"),await F()}catch(o){x.value="提交失败: "+o.message,O.value=!1,v.error("自动提交失败")}finally{B.value=!1}}async function X(){const o=M.value.trim();if(!o){v.warning("请输入文件路径");return}z.value=!0,c.value="",k.value="";try{const e=`import ${$.value} ${o}`,{output:n}=await G.execute(e,6e4);k.value=n;const r=n.includes("✖")||n.toLowerCase().includes("error");_.value=!r,c.value=r?"导入过程中可能存在问题,请查看输出":"导入完成",r||v.success("导入成功")}catch(e){c.value="导入失败: "+e.message,_.value=!1,v.error("导入失败")}finally{z.value=!1}}async function Y(){const o=S.value.trim();if(!o){v.warning("请输入输出路径");return}A.value=!0,c.value="",k.value="";try{const e=`export site -o ${o}`,{output:n}=await G.execute(e,6e4);k.value=n;const r=n.includes("✖")||n.toLowerCase().includes("error");_.value=!r,c.value=r?"导出过程中可能存在问题,请查看输出":"导出完成",r||v.success("导出成功")}catch(e){c.value="导出失败: "+e.message,_.value=!1,v.error("导出失败")}finally{A.value=!1}}return(o,e)=>{const n=u("a-button"),r=u("a-space"),f=u("a-tag"),y=u("a-card"),U=u("a-empty"),R=u("a-alert"),I=u("a-tab-pane"),K=u("a-input"),N=u("a-select-option"),H=u("a-select"),J=u("a-tabs"),Q=u("a-modal");return p(),W("div",null,[e[21]||(e[21]=s("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[s("div",null,[s("h2",{class:"page-title"},"Git 与数据"),s("p",{class:"page-sub"},"版本控制 / 导入导出")])],-1)),a(J,{activeKey:D.value,"onUpdate:activeKey":e[5]||(e[5]=d=>D.value=d),type:"card"},{default:t(()=>[a(I,{key:"git"},{tab:t(()=>[a(g(P)),e[7]||(e[7]=i(" Git 仓库 ",-1))]),default:t(()=>[a(r,{style:{"margin-bottom":"16px"}},{default:t(()=>[a(n,{type:"primary",loading:L.value,onClick:F},{icon:t(()=>[a(g(ae))]),default:t(()=>[e[8]||(e[8]=i(" 刷新状态 ",-1))]),_:1},8,["loading"]),a(n,{loading:B.value,onClick:j},{icon:t(()=>[a(g(oe))]),default:t(()=>[e[9]||(e[9]=i(" 自动提交 ",-1))]),_:1},8,["loading"])]),_:1}),h.value||C.value>0?(p(),W("div",se,[a(r,null,{default:t(()=>[h.value?(p(),m(f,{key:0,color:"blue"},{default:t(()=>[a(g(P)),i(" "+V(h.value),1)]),_:1})):b("",!0),C.value>0?(p(),m(f,{key:1,color:"orange"},{default:t(()=>[i(V(C.value)+" 个文件变更",1)]),_:1})):w.value&&C.value===0?(p(),m(f,{key:2,color:"green"},{default:t(()=>[...e[10]||(e[10]=[i("工作区干净",-1)])]),_:1})):b("",!0)]),_:1})])):b("",!0),w.value?(p(),m(y,{key:1,bordered:!1,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)"}},{default:t(()=>[s("pre",ne,V(w.value),1)]),_:1})):L.value?b("",!0):(p(),m(U,{key:2,description:"点击刷新状态查看 Git 信息",style:{padding:"60px 0"}})),x.value?(p(),m(R,{key:3,message:O.value?"提交成功":"提交结果",description:x.value,type:O.value?"success":"info","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=d=>x.value="")},null,8,["message","description","type"])):b("",!0)]),_:1}),a(I,{key:"io"},{tab:t(()=>[a(g(T)),e[11]||(e[11]=i(" 导入导出 ",-1))]),default:t(()=>[a(y,{title:"导入数据",bordered:!1,style:{background:"var(--bg-card)",border:"1px solid var(--border-color)","margin-bottom":"16px"}},{default:t(()=>[s("div",re,[s("div",ie,[e[12]||(e[12]=s("label",{style:{display:"block","margin-bottom":"6px",color:"var(--text-secondary)","font-size":"13px"}},"文件路径",-1)),a(K,{value:M.value,"onUpdate:value":e[1]||(e[1]=d=>M.value=d),placeholder:"输入文件或目录路径,如 ./docs","allow-clear":""},null,8,["value"])]),s("div",ue,[e[16]||(e[16]=s("label",{style:{display:"block","margin-bottom":"6px",color:"var(--text-secondary)","font-size":"13px"}},"格式",-1)),a(H,{value:$.value,"onUpdate:value":e[2]||(e[2]=d=>$.value=d),style:{width:"140px"}},{default:t(()=>[a(N,{value:"markdown"},{default:t(()=>[...e[13]||(e[13]=[i("Markdown",-1)])]),_:1}),a(N,{value:"pdf"},{default:t(()=>[...e[14]||(e[14]=[i("PDF",-1)])]),_:1}),a(N,{value:"evernote"},{default:t(()=>[...e[15]||(e[15]=[i("Evernote",-1)])]),_:1})]),_:1},8,["value"])]),a(n,{type:"primary",loading:z.value,disabled:!M.value.trim(),onClick:X},{icon:t(()=>[a(g(T))]),default:t(()=>[e[17]||(e[17]=i(" 导入 ",-1))]),_:1},8,["loading","disabled"])])]),_:1}),a(y,{title:"导出站点",bordered:!1,style:{background:"var(--bg-card)",border:"1px solid var(--border-color)","margin-bottom":"16px"}},{default:t(()=>[s("div",de,[s("div",pe,[e[18]||(e[18]=s("label",{style:{display:"block","margin-bottom":"6px",color:"var(--text-secondary)","font-size":"13px"}},"输出路径",-1)),a(K,{value:S.value,"onUpdate:value":e[3]||(e[3]=d=>S.value=d),placeholder:"输出目录,如 ./site","allow-clear":""},null,8,["value"])]),a(n,{type:"primary",loading:A.value,disabled:!S.value.trim(),onClick:Y},{icon:t(()=>[a(g(le))]),default:t(()=>[e[19]||(e[19]=i(" 导出为静态站点 ",-1))]),_:1},8,["loading","disabled"])])]),_:1}),c.value?(p(),m(R,{key:0,message:_.value?"操作成功":"操作结果",description:c.value,type:_.value?"success":"info","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[4]||(e[4]=d=>c.value="")},null,8,["message","description","type"])):b("",!0),k.value?(p(),m(y,{key:1,title:"命令输出",bordered:!1,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","margin-top":"16px"}},{default:t(()=>[s("pre",ce,V(k.value),1)]),_:1})):b("",!0)]),_:1})]),_:1},8,["activeKey"]),a(Q,{open:E.value,"onUpdate:open":e[6]||(e[6]=d=>E.value=d),title:"确认自动提交","ok-text":"确认提交","cancel-text":"取消","confirm-loading":B.value,onOk:q},{default:t(()=>[...e[20]||(e[20]=[s("p",{style:{color:"var(--text-secondary)"}},[i(" 将执行 "),s("code",null,"git auto-commit"),i(" 自动提交当前所有变更。请确认工作区文件已准备就绪。 ")],-1)])]),_:1},8,["open","confirm-loading"])])}}},xe=te(ve,[["__scopeId","data-v-1f28d00c"]]);export{xe as default};
@@ -1,2 +0,0 @@
1
- import{u as O}from"./ws-Dma34ig_.js";import{_ as U}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as z}from"./antd-Dh2t0vGq.js";import{w as A,o as D,a3 as i,a1 as o,k as a,Z as d,W as F,a4 as R,a5 as h,F as j,a7 as G,n as w,X as l,f as r,c as C,Y as u,G as b,u as I,a2 as Q}from"./vendor-CN0Iv_qZ.js";const X={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Y={style:{display:"flex",gap:"10px",margin:"12px 0"}},Z={key:0,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},J={key:1,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},P={key:2},ee=["innerHTML"],te={__name:"Logs",setup(ae){const L=O(),k=r("status"),v=r(!1),g=r(""),m=r(""),c=r(""),_=r(!0),n=r(null),T={status:"status",doctor:"doctor","skill-sources":"skill sources","llm-providers":"llm providers"},f=C(()=>m.value.split(`
2
- `)),p=C(()=>{if(!c.value)return f.value;const e=c.value.toLowerCase();return f.value.filter(t=>t.toLowerCase().includes(e))});function M(e){return e.includes("✖")||e.includes("error")||e.includes("Error")||e.includes("failed")?"line-error":e.includes("✔")||e.includes("✓")||e.includes("success")||e.includes("running")?"line-success":e.includes("warn")||e.includes("Warn")||e.includes("○")?"line-warn":e.startsWith(" ")||e.startsWith(" ")?"line-indent":""}function B(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function H(e){if(!c.value)return e;const t=c.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(`(${t})`,"gi"),"<mark>$1</mark>")}async function x(){v.value=!0,g.value="",m.value="";const e=T[k.value]||"status";try{const{output:t}=await L.execute(e,3e4);m.value=t,_.value&&(await w(),n.value&&(n.value.scrollTop=n.value.scrollHeight))}catch(t){g.value=`执行失败: ${t.message}`,m.value=g.value}finally{v.value=!1}}return A(p,async()=>{_.value&&(await w(),n.value&&(n.value.scrollTop=n.value.scrollHeight))}),D(x),(e,t)=>{const N=l("a-checkbox"),S=l("a-button"),W=l("a-space"),y=l("a-tab-pane"),$=l("a-tabs"),V=l("a-input-search"),q=l("a-tag"),E=l("a-spin");return u(),i("div",null,[o("div",X,[t[5]||(t[5]=o("div",null,[o("h2",{class:"page-title"},"日志查看"),o("p",{class:"page-sub"},"系统运行日志与诊断输出")],-1)),a(W,null,{default:d(()=>[a(N,{checked:_.value,"onUpdate:checked":t[0]||(t[0]=s=>_.value=s)},{default:d(()=>[...t[3]||(t[3]=[b("自动滚动",-1)])]),_:1},8,["checked"]),a(S,{type:"primary",ghost:"",loading:v.value,onClick:x},{icon:d(()=>[a(I(z))]),default:d(()=>[t[4]||(t[4]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),a($,{activeKey:k.value,"onUpdate:activeKey":t[1]||(t[1]=s=>k.value=s),onChange:x,style:{"margin-bottom":"0"}},{default:d(()=>[a(y,{key:"status",tab:"系统状态"}),a(y,{key:"doctor",tab:"环境诊断"}),a(y,{key:"skill-sources",tab:"技能来源"}),a(y,{key:"llm-providers",tab:"LLM 提供商"})]),_:1},8,["activeKey"]),o("div",Y,[a(V,{value:c.value,"onUpdate:value":t[2]||(t[2]=s=>c.value=s),placeholder:"搜索日志内容...","allow-clear":"",style:{flex:"1"}},null,8,["value"]),p.value.length!==f.value.length?(u(),F(q,{key:0,color:"blue"},{default:d(()=>[b(h(p.value.length)+" / "+h(f.value.length)+" 行 ",1)]),_:1})):R("",!0)]),o("div",{ref_key:"logContainer",ref:n,class:"log-box"},[v.value?(u(),i("div",Z,[a(E,{size:"large"}),t[6]||(t[6]=o("div",{style:{"margin-top":"10px"}},"加载中...",-1))])):p.value.length?(u(),i("div",P,[(u(!0),i(j,null,G(p.value,(s,K)=>(u(),i("div",{key:K,class:Q(["log-line",M(s)]),innerHTML:H(B(s))},null,10,ee))),128))])):(u(),i("div",J,h(g.value||"暂无日志内容,点击刷新加载"),1))],512)])}}},re=U(te,[["__scopeId","data-v-b316ead3"]]);export{re as default};
@@ -1,2 +0,0 @@
1
- import{u as H}from"./ws-Dma34ig_.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{O as K,q as ee,T as te,h as oe,Q as ae,U as le,N as k}from"./antd-Dh2t0vGq.js";import{o as ne,a3 as v,a1 as r,k as t,Z as o,X as n,f as u,Y as f,G as p,u as h,a4 as I,F as re,a7 as se,a5 as B}from"./vendor-CN0Iv_qZ.js";const ie={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ue={style:{display:"flex","align-items":"center",gap:"12px"}},ce={key:0,style:{"text-align":"center",padding:"30px"}},de={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},pe={key:2,class:"memory-list"},me={style:{display:"flex","justify-content":"space-between","align-items":"flex-start","margin-bottom":"4px"}},ve={style:{display:"flex",gap:"8px","align-items":"center"}},fe={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ye={style:{color:"var(--text-muted)","font-size":"11px"}},ge={style:{color:"#ccc","font-size":"13px","line-height":"1.6"}},_e={__name:"Memory",setup(xe){const w=H(),T=u(!1),y=u(!1),S=u(!1),$=u(!1),C=u(!1),g=u({shortTerm:0,longTerm:0,core:0}),_=u([]),s=u("short-term"),z=u(""),c=u({content:"",importance:.5});function V(a){return{"short-term":"purple","long-term":"blue",core:"green"}[a]||"default"}function W(a){return{"short-term":"短期","long-term":"长期",core:"核心"}[a]||a}async function O(){T.value=!0;try{const{output:a}=await w.execute("hmemory stats",15e3);q(a)}catch(a){console.error("hmemory stats failed:",a)}finally{T.value=!1,await M()}}function q(a){const e=a.match(/short.?term[^\d]*(\d+)/i),d=a.match(/long.?term[^\d]*(\d+)/i),x=a.match(/core[^\d]*(\d+)/i);e&&(g.value.shortTerm=parseInt(e[1])),d&&(g.value.longTerm=parseInt(d[1])),x&&(g.value.core=parseInt(x[1]))}async function M(){y.value=!0;try{const a=s.value==="short-term"?"recent":s.value==="long-term"?"important":"core",{output:e}=await w.execute(`hmemory recall "${a}" --limit 20`,15e3);_.value=L(e)}catch{_.value=[]}finally{y.value=!1}}async function R(){if(!z.value.trim()){await M();return}y.value=!0;try{const{output:a}=await w.execute(`hmemory recall "${z.value}"`,15e3);_.value=L(a)}catch{_.value=[]}finally{y.value=!1}}function L(a){const e=[],d=a.split(`
2
- `);for(const x of d){const i=x.trim();if(!i||i.startsWith("─")||i.startsWith("Recall"))continue;const m=i.match(/^[-●•\d.]+\s+(.+)/);if(m){const b=m[1].trim();b.length>5&&e.push({id:e.length,content:b,layer:s.value,importance:"",time:""})}else i.length>10&&!i.includes(":")&&e.length<30&&e.push({id:e.length,content:i,layer:s.value,importance:"",time:""})}return e.slice(0,20)}async function j(){if(!c.value.content.trim()){k.warning("请输入记忆内容");return}$.value=!0;try{const a=`hmemory store "${c.value.content.replace(/"/g,'\\"')}" --importance ${c.value.importance}`,{output:e}=await w.execute(a,15e3);e.toLowerCase().includes("stored")||e.includes("✔")?(k.success("记忆已存储"),C.value=!1,c.value={content:"",importance:.5},await O()):(k.warning(e.slice(0,100)||"存储完成"),C.value=!1)}catch(a){k.error("存储失败: "+a.message)}finally{$.value=!1}}async function F(){S.value=!0;try{const{output:a}=await w.execute("hmemory consolidate",2e4);k.success("记忆巩固完成"),await O()}catch(a){k.error("巩固失败: "+a.message)}finally{S.value=!1}}return ne(O),(a,e)=>{const d=n("a-button"),x=n("a-space"),i=n("a-statistic"),m=n("a-card"),b=n("a-col"),Q=n("a-row"),U=n("a-radio-button"),D=n("a-radio-group"),E=n("a-input-search"),G=n("a-spin"),be=n("BrainOutlined"),P=n("a-tag"),X=n("a-textarea"),N=n("a-form-item"),Y=n("a-slider"),Z=n("a-form"),A=n("a-modal");return f(),v("div",null,[r("div",ie,[e[11]||(e[11]=r("div",null,[r("h2",{class:"page-title"},"记忆文件"),r("p",{class:"page-sub"},"分层记忆系统 — 短期 / 长期 / 核心记忆")],-1)),t(x,null,{default:o(()=>[t(d,{onClick:e[0]||(e[0]=l=>C.value=!0),type:"primary"},{icon:o(()=>[t(h(K))]),default:o(()=>[e[9]||(e[9]=p(" 存储记忆 ",-1))]),_:1}),t(d,{ghost:"",loading:T.value,onClick:O},{icon:o(()=>[t(h(ee))]),default:o(()=>[e[10]||(e[10]=p(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t(Q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(b,{xs:24,sm:8},{default:o(()=>[t(m,{style:{background:"rgba(114,46,209,.1)","border-color":"rgba(114,46,209,.35)",cursor:"pointer"},hoverable:"",onClick:e[1]||(e[1]=l=>s.value="short-term")},{default:o(()=>[t(i,{title:"短期记忆",value:g.value.shortTerm||0,"value-style":"color: #c084fc; font-size: 20px;"},{prefix:o(()=>[t(h(te))]),_:1},8,["value"]),e[12]||(e[12]=r("div",{style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},"最近会话内容",-1))]),_:1})]),_:1}),t(b,{xs:24,sm:8},{default:o(()=>[t(m,{style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.3)",cursor:"pointer"},hoverable:"",onClick:e[2]||(e[2]=l=>s.value="long-term")},{default:o(()=>[t(i,{title:"长期记忆",value:g.value.longTerm||0,"value-style":"color: #91caff; font-size: 20px;"},{prefix:o(()=>[t(h(oe))]),_:1},8,["value"]),e[13]||(e[13]=r("div",{style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},"巩固后的重要信息",-1))]),_:1})]),_:1}),t(b,{xs:24,sm:8},{default:o(()=>[t(m,{style:{background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)",cursor:"pointer"},hoverable:"",onClick:e[3]||(e[3]=l=>s.value="core")},{default:o(()=>[t(i,{title:"核心记忆",value:g.value.core||0,"value-style":"color: #69db7c; font-size: 20px;"},{prefix:o(()=>[t(h(ae))]),_:1},8,["value"]),e[14]||(e[14]=r("div",{style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},"高重要性长期保留",-1))]),_:1})]),_:1})]),_:1}),t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[r("div",ue,[e[18]||(e[18]=r("span",null,"记忆内容",-1)),t(D,{value:s.value,"onUpdate:value":e[4]||(e[4]=l=>s.value=l),"button-style":"solid",size:"small",onChange:M},{default:o(()=>[t(U,{value:"short-term"},{default:o(()=>[...e[15]||(e[15]=[p("短期",-1)])]),_:1}),t(U,{value:"long-term"},{default:o(()=>[...e[16]||(e[16]=[p("长期",-1)])]),_:1}),t(U,{value:"core"},{default:o(()=>[...e[17]||(e[17]=[p("核心",-1)])]),_:1})]),_:1},8,["value"])])]),extra:o(()=>[t(E,{value:z.value,"onUpdate:value":e[5]||(e[5]=l=>z.value=l),placeholder:"语义搜索记忆...","allow-clear":"",size:"small",style:{width:"220px"},loading:y.value,onSearch:R},null,8,["value","loading"])]),default:o(()=>[y.value?(f(),v("div",ce,[t(G)])):_.value.length?(f(),v("div",pe,[(f(!0),v(re,null,se(_.value,l=>(f(),v("div",{key:l.id,class:"memory-item"},[r("div",me,[r("div",ve,[t(P,{color:V(l.layer||s.value),style:{"font-size":"10px"}},{default:o(()=>[p(B(W(l.layer||s.value)),1)]),_:2},1032,["color"]),l.importance?(f(),v("span",fe," 重要度 "+B(l.importance),1)):I("",!0)]),r("span",ye,B(l.time),1)]),r("div",ge,B(l.content),1)]))),128))])):(f(),v("div",de,[I("",!0),e[19]||(e[19]=p(' 暂无记忆内容,点击"存储记忆"添加 ',-1))]))]),_:1}),t(d,{loading:S.value,onClick:F,style:{background:"var(--bg-card-hover)","border-color":"var(--text-muted)",width:"100%"}},{icon:o(()=>[t(h(le))]),default:o(()=>[e[20]||(e[20]=p(" 巩固记忆(短期 → 长期晋升) ",-1))]),_:1},8,["loading"]),t(A,{open:C.value,"onUpdate:open":e[8]||(e[8]=l=>C.value=l),title:"存储新记忆","confirm-loading":$.value,onOk:j},{default:o(()=>[t(Z,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[t(N,{label:"内容",required:""},{default:o(()=>[t(X,{value:c.value.content,"onUpdate:value":e[6]||(e[6]=l=>c.value.content=l),rows:4,placeholder:"要存储的记忆内容..."},null,8,["value"])]),_:1}),t(N,{label:"重要度"},{default:o(()=>[t(Y,{value:c.value.importance,"onUpdate:value":e[7]||(e[7]=l=>c.value.importance=l),min:0,max:1,step:.1,marks:{0:"低",.5:"中",1:"高"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},Oe=J(_e,[["__scopeId","data-v-ebb07e22"]]);export{Oe as default};
@@ -1,2 +0,0 @@
1
- import{u as J}from"./ws-Dma34ig_.js";import{_ as K}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{O as ee,q as te,b as ae,N as C}from"./antd-Dh2t0vGq.js";import{o as le,a3 as v,a1 as p,a5 as d,k as l,Z as o,W as x,a4 as _,f as s,X as c,c as oe,Y as i,G as m,u as I,F as A,a7 as D}from"./vendor-CN0Iv_qZ.js";const ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={class:"page-sub"},ie={style:{"margin-bottom":"16px",display:"flex",gap:"10px"}},ue={key:0,style:{"text-align":"center",padding:"60px"}},re={key:0,style:{color:"#e0e0e0","font-weight":"500"}},ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},de={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},ve={style:{"margin-bottom":"10px"}},me={style:{"white-space":"pre-wrap",color:"#ccc","font-family":"inherit","line-height":"1.7",background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}},fe={__name:"Notes",setup(ge){const $=J(),h=s(!1),S=s(!1),z=s(!1),U=s(""),W=s([]),w=s([]),k=s(!1),f=s(""),b=s(!1),O=s(!1),g=s(null),n=s({title:"",content:"",tags:""}),E=oe(()=>k.value?w.value:W.value),G=[{title:"标题",dataIndex:"title",key:"title",width:"30%"},{title:"预览",key:"content",ellipsis:!0},{title:"标签",key:"tags",width:"20%"},{title:"操作",key:"actions",width:"80px"}];async function V(){h.value=!0,U.value="";try{const{output:a}=await $.execute("note list",2e4);W.value=M(a)}catch(a){U.value=`加载失败: ${a.message}`}finally{h.value=!1}}function M(a){const e=[],y=a.split(`
2
- `);for(const T of y){const u=T.trim();if(!u||u.startsWith("─")||u.startsWith("Note")||u.match(/^\d+ note/i))continue;const r=u.match(/^(\d+)\.\s+(.+?)(?:\s+\[([^\]]+)\])?\s*(?:-\s*(.*))?$/);r?e.push({key:r[1],id:r[1],title:r[2].trim(),tags:r[3]?r[3].split(",").map(F=>F.trim()):[],preview:(r[4]||"").trim().slice(0,100),content:""}):u.length>2&&!u.startsWith("✖")&&!u.startsWith("[")&&e.push({key:e.length,id:String(e.length),title:u,tags:[],preview:"",content:""})}return e}async function P(){if(!f.value.trim()){B();return}S.value=!0,k.value=!0;try{const{output:a}=await $.execute(`note search "${f.value}"`,15e3);w.value=M(a)}catch{w.value=[]}finally{S.value=!1}}function B(){f.value="",k.value=!1,w.value=[]}async function Q(){if(!n.value.title.trim()){C.warning("请输入标题");return}z.value=!0;try{let a=`note add "${n.value.title}"`;n.value.content&&(a+=` -c "${n.value.content.replace(/"/g,'\\"')}"`),n.value.tags&&(a+=` -t "${n.value.tags}"`);const{output:e}=await $.execute(a,15e3);e.includes("✖")||e.toLowerCase().includes("error")?C.error("添加失败: "+e.slice(0,100)):(C.success("笔记已添加"),b.value=!1,n.value={title:"",content:"",tags:""},await V())}catch(a){C.error("添加失败: "+a.message)}finally{z.value=!1}}function X(a){g.value=a,O.value=!0}return le(V),(a,e)=>{const y=c("a-button"),T=c("a-space"),u=c("a-input-search"),r=c("a-tag"),F=c("a-spin"),Y=c("a-table"),R=c("a-input"),L=c("a-form-item"),Z=c("a-textarea"),H=c("a-form"),j=c("a-modal");return i(),v("div",null,[p("div",ne,[p("div",null,[e[7]||(e[7]=p("h2",{class:"page-title"},"笔记管理",-1)),p("p",se,"个人知识库 · "+d(W.value.length)+" 条笔记",1)]),l(T,null,{default:o(()=>[l(y,{onClick:e[0]||(e[0]=t=>b.value=!0),type:"primary"},{icon:o(()=>[l(I(ee))]),default:o(()=>[e[8]||(e[8]=m(" 新建笔记 ",-1))]),_:1}),l(y,{ghost:"",loading:h.value,onClick:V},{icon:o(()=>[l(I(te))]),default:o(()=>[e[9]||(e[9]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),p("div",ie,[l(u,{value:f.value,"onUpdate:value":e[1]||(e[1]=t=>f.value=t),placeholder:"搜索笔记...","allow-clear":"",style:{"max-width":"400px"},loading:S.value,onSearch:P,onClear:B},null,8,["value","loading"]),k.value?(i(),x(r,{key:0,color:"blue",closable:"",onClose:B},{default:o(()=>[m(" 搜索: "+d(f.value),1)]),_:1})):_("",!0)]),h.value?(i(),v("div",ue,[l(F,{size:"large"})])):(i(),x(Y,{key:1,columns:G,"data-source":E.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"note-row"},{bodyCell:o(({column:t,record:N})=>[t.key==="title"?(i(),v("span",re,d(N.title),1)):_("",!0),t.key==="tags"?(i(!0),v(A,{key:1},D(N.tags,q=>(i(),x(r,{key:q,color:"blue",style:{"font-size":"10px",margin:"1px"}},{default:o(()=>[m(d(q),1)]),_:2},1024))),128)):_("",!0),t.key==="content"?(i(),v("span",ce,d(N.preview),1)):_("",!0),t.key==="actions"?(i(),x(y,{key:3,size:"small",type:"link",onClick:q=>X(N)},{default:o(()=>[...e[10]||(e[10]=[m("查看",-1)])]),_:1},8,["onClick"])):_("",!0)]),emptyText:o(()=>[p("div",pe,[l(I(ae),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),m(" "+d(U.value||'暂无笔记,点击"新建笔记"添加'),1)])]),_:1},8,["data-source","pagination"])),l(j,{open:b.value,"onUpdate:open":e[5]||(e[5]=t=>b.value=t),title:"新建笔记","confirm-loading":z.value,onOk:Q},{default:o(()=>[l(H,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[l(L,{label:"标题",required:""},{default:o(()=>[l(R,{value:n.value.title,"onUpdate:value":e[2]||(e[2]=t=>n.value.title=t),placeholder:"笔记标题"},null,8,["value"])]),_:1}),l(L,{label:"内容"},{default:o(()=>[l(Z,{value:n.value.content,"onUpdate:value":e[3]||(e[3]=t=>n.value.content=t),rows:5,placeholder:"笔记内容..."},null,8,["value"])]),_:1}),l(L,{label:"标签"},{default:o(()=>[l(R,{value:n.value.tags,"onUpdate:value":e[4]||(e[4]=t=>n.value.tags=t),placeholder:"用逗号分隔,如: work,ideas"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),l(j,{open:O.value,"onUpdate:open":e[6]||(e[6]=t=>O.value=t),title:g.value?.title,footer:null,width:"700px"},{default:o(()=>[g.value?(i(),v("div",de,[p("div",ve,[(i(!0),v(A,null,D(g.value.tags,t=>(i(),x(r,{key:t,color:"blue"},{default:o(()=>[m(d(t),1)]),_:2},1024))),128))]),p("pre",me,d(g.value.content||g.value.preview),1)])):_("",!0)]),_:1},8,["open","title"])])}}},we=K(fe,[["__scopeId","data-v-4630ece9"]]);export{we as default};
@@ -1,2 +0,0 @@
1
- import{u as ve}from"./ws-Dma34ig_.js";import{_ as pe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as fe,Y as ye,v as ee,O as me,U as M}from"./antd-Dh2t0vGq.js";import{o as ge,a3 as d,a1 as u,k as t,Z as o,f as n,X as r,Y as s,G as p,u as c,W as w,a5 as v,a4 as f,F as te,a7 as be}from"./vendor-CN0Iv_qZ.js";const _e={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xe={key:0,style:{"text-align":"center",padding:"30px"}},ke={key:2,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},we={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Pe={key:0,style:{"text-align":"center",padding:"30px"}},he={key:0,style:{"margin-top":"16px"}},Se={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},ze={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},$e={key:0,style:{"margin-top":"12px"}},Ce={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},Oe={key:0,style:{"margin-top":"12px"}},Me={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},Le={__name:"P2P",setup(Ne){const _=ve(),L=n(!1),N=n(""),P=n([]),ae=[{title:"设备名称",key:"name"},{title:"Peer ID",key:"id"},{title:"状态",key:"status"},{title:"操作",key:"action",width:100}];async function G(){L.value=!0,N.value="";try{const{output:a}=await _.execute("p2p peers",15e3);P.value=oe(a)}catch(a){N.value=`加载失败: ${a.message}`}finally{L.value=!1}}function oe(a){if(!a||a.includes("No peers")||a.includes("no peers"))return[];const e=a.split(`
2
- `).filter(m=>m.trim()),i=[];for(const m of e){const b=m.match(/^\s*(\S+)\s+(.+?)\s+(connected|online|offline|disconnected)\s*$/i);if(b){i.push({id:b[1],name:b[2].trim(),connected:/connected|online/i.test(b[3])});continue}const k=m.match(/^\s*((?:12D3|Qm)\S{10,})\s*(.*)$/);if(k){const C=k[2].trim();i.push({id:k[1],name:C||k[1].slice(0,12),connected:/connected|online/i.test(C)})}}return i}const B=n(!1),D=n(!1),U=n(""),h=n("");async function Q(){if(U.value.trim()){D.value=!0,h.value="";try{const{output:a}=await _.execute(`p2p pair "${U.value.trim()}"`,3e4);h.value=a,await G()}catch(a){h.value=`配对失败: ${a.message}`}finally{D.value=!1}}}const E=n(!1),V=n(!1),S=n(void 0),z=n(""),x=n("");function le(a){S.value=a.id,z.value="",x.value="",E.value=!0}async function X(){if(!(!S.value||!z.value.trim())){V.value=!0,x.value="";try{const{output:a}=await _.execute(`p2p send ${S.value} "${z.value.trim()}"`,15e3);x.value=a||"消息已发送"}catch(a){x.value=`发送失败: ${a.message}`}finally{V.value=!1}}}const I=n(!1),T=n(""),$=n(!1),R=n("未知"),F=n(0),Z=n(""),y=n(""),W=n(!1),Y=n(!1);async function j(){I.value=!0,T.value="";try{const{output:a}=await _.execute("sync status",15e3);ne(a)}catch(a){T.value=`加载失败: ${a.message}`}finally{I.value=!1}}function ne(a){if(!a){R.value="未知";return}$.value=/synced|online|up.to.date/i.test(a),R.value=$.value?"已同步":"未同步";const e=a.match(/pending[:\s]+(\d+)/i);F.value=e?parseInt(e[1]):0;const i=a.match(/last[:\s]+(.+)/i);i&&(Z.value=i[1].trim())}async function se(){W.value=!0,y.value="";try{const{output:a}=await _.execute("sync push",3e4);y.value=a||"推送完成",await j()}catch(a){y.value=`推送失败: ${a.message}`}finally{W.value=!1}}async function re(){Y.value=!0,y.value="";try{const{output:a}=await _.execute("sync pull",3e4);y.value=a||"拉取完成",await j()}catch(a){y.value=`拉取失败: ${a.message}`}finally{Y.value=!1}}async function H(){await Promise.all([G(),j()])}return ge(H),(a,e)=>{const i=r("a-button"),m=r("a-space"),b=r("a-spin"),k=r("a-empty"),C=r("a-tag"),ie=r("a-table"),O=r("a-card"),q=r("a-statistic"),A=r("a-col"),ue=r("a-row"),J=r("a-input"),K=r("a-modal"),de=r("a-select-option"),ce=r("a-select");return s(),d("div",null,[u("div",_e,[e[8]||(e[8]=u("div",null,[u("h2",{class:"page-title"},"P2P 网络"),u("p",{class:"page-sub"},"设备管理与数据同步")],-1)),t(i,{type:"primary",ghost:"",loading:L.value,onClick:H},{icon:o(()=>[t(c(fe))]),default:o(()=>[e[7]||(e[7]=p(" 刷新 ",-1))]),_:1},8,["loading"])]),t(O,{title:"P2P 设备",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[t(m,null,{default:o(()=>[t(i,{size:"small",onClick:e[0]||(e[0]=l=>B.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[t(c(me))]),default:o(()=>[e[9]||(e[9]=p(" 配对设备 ",-1))]),_:1}),t(i,{size:"small",onClick:e[1]||(e[1]=l=>E.value=!0),disabled:P.value.length===0,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[t(c(ee))]),default:o(()=>[e[10]||(e[10]=p(" 发送消息 ",-1))]),_:1},8,["disabled"])]),_:1})]),default:o(()=>[L.value?(s(),d("div",xe,[t(b)])):P.value.length===0?(s(),w(k,{key:1,description:"暂无已连接设备"})):(s(),w(ie,{key:2,columns:ae,"data-source":P.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:o(({column:l,record:g})=>[l.key==="status"?(s(),w(C,{key:0,color:g.connected?"green":"default"},{default:o(()=>[p(v(g.connected?"在线":"离线"),1)]),_:2},1032,["color"])):f("",!0),l.key==="name"?(s(),w(m,{key:1},{default:o(()=>[t(c(ye),{style:{color:"var(--text-muted)"}}),u("span",null,v(g.name||g.id),1)]),_:2},1024)):f("",!0),l.key==="id"?(s(),d("span",ke,v(g.id.length>16?g.id.slice(0,16)+"...":g.id),1)):f("",!0),l.key==="action"?(s(),w(i,{key:3,size:"small",type:"link",onClick:Ue=>le(g)},{default:o(()=>[t(c(ee)),e[11]||(e[11]=p(" 发送 ",-1))]),_:1},8,["onClick"])):f("",!0)]),_:1},8,["data-source"])),N.value?(s(),d("div",we,v(N.value),1)):f("",!0)]),_:1}),t(O,{title:"同步状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[t(C,{color:$.value?"green":"default"},{default:o(()=>[p(v($.value?"已同步":"未同步"),1)]),_:1},8,["color"])]),default:o(()=>[I.value?(s(),d("div",Pe,[t(b)])):(s(),d(te,{key:1},[t(ue,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(A,{xs:24,sm:8},{default:o(()=>[t(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(q,{title:"同步状态",value:R.value,"value-style":{color:$.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[t(c(M))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:24,sm:8},{default:o(()=>[t(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(q,{title:"待推送",value:F.value,"value-style":{color:F.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:o(()=>[t(c(M))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:24,sm:8},{default:o(()=>[t(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(q,{title:"最近同步",value:Z.value||"无","value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:o(()=>[t(c(M))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),t(m,null,{default:o(()=>[t(i,{loading:W.value,onClick:se,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[t(c(M))]),default:o(()=>[e[12]||(e[12]=p(" 推送变更 ",-1))]),_:1},8,["loading"]),t(i,{loading:Y.value,onClick:re,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[t(c(M))]),default:o(()=>[e[13]||(e[13]=p(" 拉取变更 ",-1))]),_:1},8,["loading"])]),_:1}),y.value?(s(),d("div",he,[e[14]||(e[14]=u("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"操作结果",-1)),u("pre",Se,v(y.value),1)])):f("",!0)],64)),T.value?(s(),d("div",ze,v(T.value),1)):f("",!0)]),_:1}),t(K,{open:B.value,"onUpdate:open":e[3]||(e[3]=l=>B.value=l),title:"配对新设备","confirm-loading":D.value,onOk:Q,"ok-text":"配对","cancel-text":"取消"},{default:o(()=>[e[15]||(e[15]=u("div",{style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},"请输入要配对的设备名称",-1)),t(J,{value:U.value,"onUpdate:value":e[2]||(e[2]=l=>U.value=l),placeholder:"设备名称,例如: My Phone",onPressEnter:Q},null,8,["value"]),h.value?(s(),d("div",$e,[u("pre",Ce,v(h.value),1)])):f("",!0)]),_:1},8,["open","confirm-loading"]),t(K,{open:E.value,"onUpdate:open":e[6]||(e[6]=l=>E.value=l),title:"发送消息","confirm-loading":V.value,onOk:X,"ok-text":"发送","cancel-text":"取消"},{default:o(()=>[e[16]||(e[16]=u("div",{style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},"选择目标设备",-1)),t(ce,{value:S.value,"onUpdate:value":e[4]||(e[4]=l=>S.value=l),style:{width:"100%","margin-bottom":"16px"},placeholder:"选择设备"},{default:o(()=>[(s(!0),d(te,null,be(P.value,l=>(s(),w(de,{key:l.id,value:l.id},{default:o(()=>[p(v(l.name||l.id),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),e[17]||(e[17]=u("div",{style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},"消息内容",-1)),t(J,{value:z.value,"onUpdate:value":e[5]||(e[5]=l=>z.value=l),placeholder:"输入消息内容",onPressEnter:X},null,8,["value"]),x.value?(s(),d("div",Oe,[u("pre",Me,v(x.value),1)])):f("",!0)]),_:1},8,["open","confirm-loading"])])}}},Ve=pe(Le,[["__scopeId","data-v-f56a4f0e"]]);export{Ve as default};
@@ -1,4 +0,0 @@
1
- import{u as ue}from"./ws-Dma34ig_.js";import{_ as ce}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{N as J,q as de,L as pe,E as K,X as me}from"./antd-Dh2t0vGq.js";import{o as fe,a3 as d,a1 as j,k as l,Z as s,f as v,X as u,Y as i,G as h,u as I,W as b,a5 as _,a4 as g,F as L,a7 as B}from"./vendor-CN0Iv_qZ.js";const ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ve={key:0,style:{"text-align":"center",padding:"60px"}},_e={key:0,style:{color:"#e0e0e0","font-weight":"500"}},ge={key:1,style:{color:"var(--text-secondary)"}},he={key:0,style:{"margin-top":"16px"}},ke={key:0,style:{"text-align":"center",padding:"60px"}},xe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},be={key:1,style:{color:"#e0e0e0"}},we={key:2,style:{color:"var(--text-secondary)"}},Ce={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ie={__name:"Permissions",setup(Re){const R=ue(),O=v("roles"),W=v(!1);async function q(){W.value=!0;try{O.value==="roles"?await E():O.value==="audit"&&await V()}finally{W.value=!1}}function X(t){t==="roles"&&S.value.length===0&&E(),t==="audit"&&A.value.length===0&&V()}const z=v(!1),S=v([]),Y=[{title:"角色名",key:"name",dataIndex:"name",width:"160px"},{title:"描述",key:"description",dataIndex:"description",width:"240px"},{title:"权限",key:"permissions",dataIndex:"permissions"},{title:"用户数",key:"userCount",dataIndex:"userCount",width:"100px"}];async function E(){z.value=!0;try{const{output:t}=await R.execute("auth roles --json",15e3);S.value=U(t,Z)}catch(t){J.error("加载角色列表失败: "+t.message)}finally{z.value=!1}}function Z(t){const e=[],o=t.split(`
2
- `);for(const p of o){const n=p.trim();if(!n||n.startsWith("─")||n.match(/^Role/i))continue;const r=n.split(/\s*[|│]\s*/);r.length>=2?e.push({key:e.length,name:r[0]||"-",description:r[1]||"",permissions:r[2]?r[2].split(/[,;\s]+/).filter(Boolean):[],userCount:r[3]&&parseInt(r[3],10)||0}):n.length>2&&e.push({key:e.length,name:n.slice(0,60),description:"",permissions:[],userCount:0})}return e}const C=v(""),w=v(""),P=v(!1),k=v(null),H=["note:read","note:write","admin:*","skill:execute"];async function Q(){if(!(!C.value.trim()||!w.value.trim())){P.value=!0,k.value=null;try{const t=`auth check ${C.value.trim()} "${w.value.trim()}"`,{output:e}=await R.execute(t,15e3),o=e.toLowerCase(),p=o.includes("allow")||o.includes("granted")||o.includes("true")||o.includes("yes"),n=o.includes("denied")||o.includes("reject")||o.includes("false")||o.includes("no permission");k.value={allowed:p&&!n,detail:e.trim()||(p?"用户拥有该权限":"用户没有该权限")}}catch(t){k.value={allowed:!1,detail:"检查失败: "+t.message}}finally{P.value=!1}}}const $=v(!1),A=v([]),M=v([]),ee=[{title:"时间",key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function te(t){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(t||"").toLowerCase()]||"default"}async function V(){$.value=!0;try{const[t,e]=await Promise.all([R.execute("audit log --json",15e3),R.execute("audit stats --json",15e3)]);A.value=U(t.output,ae),M.value=se(e.output)}catch(t){J.error("加载审计日志失败: "+t.message)}finally{$.value=!1}}function ae(t){const e=[],o=t.split(`
3
- `);for(const p of o){const n=p.trim();if(!n||n.startsWith("─")||n.startsWith("Audit")||n.startsWith("Recent"))continue;const r=n.split(/\s*[|│]\s*/);if(r.length>=3){e.push({key:e.length,timestamp:r[0]||"-",event:r[1]||"-",user:r[2]||"-",level:r[3]||"info",detail:r.slice(4).join(" ")||""});continue}const y=n.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(y){const m=y[2],f=m.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);e.push({key:e.length,timestamp:y[1],event:m.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:f?f[1].toLowerCase():"info",detail:""})}else n.length>3&&!n.match(/^\d+ event/i)&&e.push({key:e.length,timestamp:"-",event:n.slice(0,80),user:"-",level:"info",detail:""})}return e}function se(t){const e=F(t);if(e&&typeof e=="object"&&!Array.isArray(e)){const y=["#1677ff","#52c41a","#faad14","#ff4d4f"];return Object.entries(e).slice(0,4).map(([m,f],x)=>({label:m,value:typeof f=="number"?f:String(f),color:y[x%y.length]}))}const o=[],p=t.split(`
4
- `),n=["#1677ff","#52c41a","#faad14","#ff4d4f"];let r=0;for(const y of p){const m=y.trim();if(!m||m.startsWith("─")||m.startsWith("Audit"))continue;const f=m.match(/^(.+?)\s*[:=]\s*(.+)$/);if(f){const x=f[1].trim(),N=f[2].trim(),T=N.match(/^(\d+)/);o.push({label:x,value:T?parseInt(T[1],10):N,color:n[r%n.length]}),r++}}return o.length===0&&o.push({label:"总事件数",value:A.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),o}function F(t){try{const e=t.indexOf("[")!==-1?t.indexOf("["):t.indexOf("{");if(e===-1)return null;const o=t.lastIndexOf("]")!==-1?t.lastIndexOf("]")+1:t.lastIndexOf("}")+1;return JSON.parse(t.slice(e,o))}catch{return null}}function U(t,e){const o=F(t);return Array.isArray(o)?o.map((p,n)=>({key:n,...p})):e(t)}return fe(()=>{E()}),(t,e)=>{const o=u("a-button"),p=u("a-spin"),n=u("a-tag"),r=u("a-empty"),y=u("a-table"),m=u("a-tab-pane"),f=u("a-input"),x=u("a-form-item"),N=u("a-space"),T=u("a-form"),ne=u("a-alert"),D=u("a-card"),le=u("a-statistic"),oe=u("a-col"),ie=u("a-row"),re=u("a-tabs");return i(),d("div",null,[j("div",ye,[e[4]||(e[4]=j("div",null,[j("h2",{class:"page-title"},"权限管理"),j("p",{class:"page-sub"},"角色 / 权限检查 / 审计")],-1)),l(o,{type:"primary",ghost:"",loading:W.value,onClick:q},{icon:s(()=>[l(I(de))]),default:s(()=>[e[3]||(e[3]=h(" 刷新 ",-1))]),_:1},8,["loading"])]),l(re,{activeKey:O.value,"onUpdate:activeKey":e[2]||(e[2]=a=>O.value=a),type:"card",onChange:X},{default:s(()=>[l(m,{key:"roles"},{tab:s(()=>[l(I(pe)),e[5]||(e[5]=h(" 角色列表 ",-1))]),default:s(()=>[z.value?(i(),d("div",ve,[l(p,{size:"large"})])):(i(),b(y,{key:1,columns:Y,"data-source":S.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:s(({column:a,record:c})=>[a.key==="name"?(i(),d("span",_e,_(c.name),1)):g("",!0),a.key==="description"?(i(),d("span",ge,_(c.description),1)):g("",!0),a.key==="permissions"?(i(),d(L,{key:2},[(i(!0),d(L,null,B((c.permissions||[]).slice(0,5),G=>(i(),b(n,{key:G,color:"blue",style:{"margin-bottom":"2px"}},{default:s(()=>[h(_(G),1)]),_:2},1024))),128)),(c.permissions||[]).length>5?(i(),b(n,{key:0,color:"default"},{default:s(()=>[h(" +"+_(c.permissions.length-5),1)]),_:2},1024)):g("",!0)],64)):g("",!0),a.key==="userCount"?(i(),b(n,{key:3,color:c.userCount>0?"green":"default"},{default:s(()=>[h(_(c.userCount??0),1)]),_:2},1032,["color"])):g("",!0)]),emptyText:s(()=>[l(r,{description:"暂无角色数据"})]),_:1},8,["data-source","pagination"]))]),_:1}),l(m,{key:"check"},{tab:s(()=>[l(I(K)),e[6]||(e[6]=h(" 权限检查 ",-1))]),default:s(()=>[l(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","max-width":"640px"}},{default:s(()=>[l(T,{"label-col":{span:5},"wrapper-col":{span:19}},{default:s(()=>[l(x,{label:"用户 ID",required:""},{default:s(()=>[l(f,{value:C.value,"onUpdate:value":e[0]||(e[0]=a=>C.value=a),placeholder:"输入用户 ID"},null,8,["value"])]),_:1}),l(x,{label:"权限",required:""},{default:s(()=>[l(f,{value:w.value,"onUpdate:value":e[1]||(e[1]=a=>w.value=a),placeholder:"note:read"},null,8,["value"])]),_:1}),l(x,{"wrapper-col":{offset:5,span:19}},{default:s(()=>[l(N,{wrap:""},{default:s(()=>[l(o,{type:"primary",loading:P.value,disabled:!C.value.trim()||!w.value.trim(),onClick:Q},{icon:s(()=>[l(I(K))]),default:s(()=>[e[7]||(e[7]=h(" 检查权限 ",-1))]),_:1},8,["loading","disabled"]),(i(),d(L,null,B(H,a=>l(o,{key:a,size:"small",onClick:c=>w.value=a},{default:s(()=>[h(_(a),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1})]),_:1}),k.value!==null?(i(),d("div",he,[l(ne,{message:k.value.allowed?"权限允许":"权限拒绝",description:k.value.detail,type:k.value.allowed?"success":"error","show-icon":""},null,8,["message","description","type"])])):g("",!0)]),_:1})]),_:1}),l(m,{key:"audit"},{tab:s(()=>[l(I(me)),e[8]||(e[8]=h(" 审计日志 ",-1))]),default:s(()=>[l(ie,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[(i(!0),d(L,null,B(M.value,a=>(i(),b(oe,{xs:12,sm:6,key:a.label},{default:s(()=>[l(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:s(()=>[l(le,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),$.value?(i(),d("div",ke,[l(p,{size:"large"})])):(i(),b(y,{key:1,columns:ee,"data-source":A.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:s(({column:a,record:c})=>[a.key==="timestamp"?(i(),d("span",xe,_(c.timestamp),1)):g("",!0),a.key==="event"?(i(),d("span",be,_(c.event),1)):g("",!0),a.key==="user"?(i(),d("span",we,_(c.user),1)):g("",!0),a.key==="level"?(i(),b(n,{key:3,color:te(c.level)},{default:s(()=>[h(_(c.level),1)]),_:2},1032,["color"])):g("",!0),a.key==="detail"?(i(),d("span",Ce,_(c.detail),1)):g("",!0)]),emptyText:s(()=>[l(r,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},je=ce(Ie,[["__scopeId","data-v-71782e36"]]);export{je as default};
@@ -1,2 +0,0 @@
1
- import{u as Y}from"./ws-Dma34ig_.js";import{_ as Z}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as H,E as R,R as C,P as j,J as I}from"./antd-Dh2t0vGq.js";import{o as K,a3 as u,a1 as n,k as e,Z as t,W as h,a4 as _,f as g,X as d,r as Q,Y as r,G as k,u as y,a5 as p,F as N,a7 as V,a2 as U,a6 as ee}from"./vendor-CN0Iv_qZ.js";const te={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},oe={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={style:{"font-family":"monospace",color:"#ccc"}},re={style:{display:"flex","align-items":"flex-start",gap:"10px"}},ne={style:{flex:"1","min-width":"0"}},ie={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},ce={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},de={key:0,style:{"margin-top":"8px","text-align":"right"}},ue={style:{"margin-top":"16px",display:"flex","align-items":"center",gap:"12px"}},pe={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},me={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},ve={key:0,style:{"text-align":"center",padding:"30px"}},fe={key:1},ge={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"400px","overflow-y":"auto","white-space":"pre-wrap"}},_e={__name:"Projects",setup(ye){const w=Y(),D=g(!1),S=g(!1),z=g(!1),v=g(""),x=g(""),f=g(null),L=g(!1),M=g([]),s=Q({running:!1,edition:"",llmProvider:"",llmModel:"",setupDone:!1,setupDate:""}),O=[{name:"code-project",description:"代码项目模板 — 代码审查、重构、单元测试生成",icon:j},{name:"medical-triage",description:"医疗分诊模板 — 症状分析、分诊建议、病历管理",icon:I},{name:"agriculture-expert",description:"农业专家模板 — 作物管理、病虫害识别、农事建议",icon:C},{name:"general-assistant",description:"通用助手模板 — 日常问答、文档处理、任务管理",icon:R},{name:"ai-media-creator",description:"AI 媒体创作模板 — 图文生成、视频脚本、内容编辑",icon:C},{name:"ai-doc-creator",description:"AI 文档创作模板 — 文档生成、格式转换、文档编辑",icon:j}];function E(a){s.running=a.includes("Desktop app running")||a.includes("Running");const o=a.match(/Edition:\s+(\S+)/i);o&&(s.edition=o[1]);const i=a.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(i)s.llmProvider=i[1],s.llmModel=i[2];else{const l=a.match(/LLM:\s+(\S+)/i);l&&(s.llmProvider=l[1])}s.setupDone=a.includes("Setup completed");const m=a.match(/Setup completed \(([^)]+)\)/i);if(m)try{s.setupDate=new Date(m[1]).toLocaleDateString("zh-CN")}catch{s.setupDate=""}}function A(a){const o=[],i=a.split(`
2
- `);for(const m of i){const l=m.match(/^\s*(\S+)\s*[=:]\s*(.+)$/);l&&o.push({key:l[1].trim(),value:l[2].trim()})}M.value=o,L.value=o.length>0}async function P(){D.value=!0;try{const[a,o]=await Promise.all([w.execute("status",15e3),w.execute("config list",15e3)]);E(a.output),A(o.output)}catch(a){console.error("refresh failed:",a)}finally{D.value=!1}}async function F(){if(v.value){S.value=!0,f.value=null;try{const a=`init --template ${v.value} --yes`,{output:o,exitCode:i}=await w.execute(a,3e4);f.value={success:i===0,output:o},i===0&&await P()}catch(a){f.value={success:!1,output:`初始化失败: ${a.message}`}}finally{S.value=!1}}}async function T(){z.value=!0,x.value="";try{const{output:a}=await w.execute("doctor",3e4);x.value=a}catch(a){x.value=`诊断失败: ${a.message}`}finally{z.value=!1}}return K(P),(a,o)=>{const i=d("a-button"),m=d("a-statistic"),l=d("a-card"),b=d("a-col"),$=d("a-row"),W=d("a-descriptions-item"),q=d("a-descriptions"),B=d("a-tag"),G=d("a-alert"),J=d("a-spin"),X=d("a-empty");return r(),u("div",null,[n("div",te,[o[2]||(o[2]=n("div",null,[n("h2",{class:"page-title"},"项目管理"),n("p",{class:"page-sub"},"初始化 / 状态 / 诊断")],-1)),e(i,{type:"primary",ghost:"",loading:D.value,onClick:P},{icon:t(()=>[e(y(H))]),default:t(()=>[o[1]||(o[1]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),e($,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(b,{xs:24,sm:12,lg:6},{default:t(()=>[e(l,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(m,{title:"系统状态",value:s.running?"运行中":"未运行","value-style":{color:s.running?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(y(R))]),_:1},8,["value","value-style"]),s.edition?(r(),u("div",oe," 版本: "+p(s.edition),1)):_("",!0)]),_:1})]),_:1}),e(b,{xs:24,sm:12,lg:6},{default:t(()=>[e(l,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(m,{title:"LLM 提供商",value:s.llmProvider||"未配置","value-style":{color:s.llmProvider?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(y(C))]),_:1},8,["value","value-style"]),s.llmModel?(r(),u("div",ae,p(s.llmModel),1)):_("",!0)]),_:1})]),_:1}),e(b,{xs:24,sm:12,lg:6},{default:t(()=>[e(l,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(m,{title:"初始化",value:s.setupDone?"已完成":"未完成","value-style":{color:s.setupDone?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(y(R))]),_:1},8,["value","value-style"]),s.setupDate?(r(),u("div",se,p(s.setupDate),1)):_("",!0)]),_:1})]),_:1}),e(b,{xs:24,sm:12,lg:6},{default:t(()=>[e(l,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(m,{title:"项目配置",value:L.value?"已加载":"未加载","value-style":{color:L.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(y(j))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),M.value.length?(r(),h(l,{key:0,title:"项目配置",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[e(q,{column:{xs:1,sm:2,lg:3},bordered:"",size:"small"},{default:t(()=>[(r(!0),u(N,null,V(M.value,c=>(r(),h(W,{key:c.key,label:c.key},{default:t(()=>[n("span",le,p(c.value),1)]),_:2},1032,["label"]))),128))]),_:1})]),_:1})):_("",!0),e(l,{title:"项目初始化",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(B,{color:"blue"},{default:t(()=>[k(p(O.length)+" 个模板",1)]),_:1})]),default:t(()=>[e($,{gutter:[16,16]},{default:t(()=>[(r(),u(N,null,V(O,c=>e(b,{key:c.name,xs:24,sm:12,lg:8},{default:t(()=>[e(l,{size:"small",hoverable:"",class:U(["template-card",{"template-selected":v.value===c.name}]),style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"pointer"},onClick:xe=>v.value=c.name},{default:t(()=>[n("div",re,[(r(),h(ee(c.icon),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}})),n("div",ne,[n("div",ie,p(c.name),1),n("div",ce,p(c.description),1)])]),v.value===c.name?(r(),u("div",de,[e(B,{color:"green"},{default:t(()=>[...o[3]||(o[3]=[k("已选择",-1)])]),_:1})])):_("",!0)]),_:2},1032,["class","onClick"])]),_:2},1024)),64))]),_:1}),n("div",ue,[e(i,{type:"primary",loading:S.value,disabled:!v.value,onClick:F},{icon:t(()=>[e(y(C))]),default:t(()=>[o[4]||(o[4]=k(" 初始化 ",-1))]),_:1},8,["loading","disabled"]),v.value?(r(),u("span",pe," 模板: "+p(v.value),1)):_("",!0)]),f.value?(r(),h(G,{key:0,message:f.value.success?"初始化成功":"初始化失败",type:f.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:o[0]||(o[0]=c=>f.value=null)},{description:t(()=>[n("pre",me,p(f.value.output),1)]),_:1},8,["message","type"])):_("",!0)]),_:1}),e(l,{title:"环境诊断",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:t(()=>[e(i,{loading:z.value,onClick:T,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(y(I))]),default:t(()=>[o[5]||(o[5]=k(" 运行诊断 ",-1))]),_:1},8,["loading"])]),default:t(()=>[z.value?(r(),u("div",ve,[e(J),o[6]||(o[6]=n("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"正在诊断环境...",-1))])):x.value?(r(),u("div",fe,[n("pre",ge,p(x.value),1)])):(r(),h(X,{key:2,description:"点击「运行诊断」检查环境状态"}))]),_:1})])}}},ze=Z(_e,[["__scopeId","data-v-c64ad08b"]]);export{ze as default};
@@ -1,2 +0,0 @@
1
- import{V as Z,f as T,o as H,a3 as N,a1 as n,k as s,Z as l,u as g,W as K,a4 as B,F as Q,a7 as ee,X as u,r as te,Y as y,G as x,a5 as M,a2 as oe}from"./vendor-CN0Iv_qZ.js";import{u as A}from"./ws-Dma34ig_.js";import{a as ae,b as se}from"./parsers-DftYMnlk.js";import{_ as le}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{N as _,q as G}from"./antd-Dh2t0vGq.js";const re=Z("providers",()=>{const I=T(!1),i=T(null),m=T([]),P=T([]),c=T(null);async function t(){const v=A();I.value=!0;try{const{output:k}=await v.execute("llm providers",15e3);m.value=ae(k);const b=m.value.find(C=>C.active);b&&(c.value=b.name);const{output:w}=await v.execute("llm models",15e3);P.value=se(w)}catch(k){console.error("Failed to load providers:",k)}finally{I.value=!1}}async function d(v){await A().execute(`llm switch ${v}`,1e4),m.value.forEach(b=>b.active=b.name===v),c.value=v}async function F(v){const k=A();i.value=v;try{const{output:b,exitCode:w}=await k.execute("llm test",3e4),C=m.value.find(O=>O.name===v);return C&&(C.status=w===0?"ok":"error"),w===0}catch{const b=m.value.find(w=>w.name===v);return b&&(b.status="error"),!1}finally{i.value=null}}return{loading:I,testing:i,providers:m,localModels:P,activeProvider:c,loadProviders:t,switchProvider:d,testProvider:F}}),ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ie={key:1,style:{"text-align":"center",padding:"60px"}},de={key:2},ue={class:"providers-grid"},ce={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},pe={style:{"font-size":"24px"}},me={style:{flex:"1"}},ve={style:{color:"#e0e0e0","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ge={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},ye={key:0,style:{"margin-top":"24px"}},be={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},xe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},_e={class:"config-grid"},ke={style:{display:"flex","align-items":"center",gap:"12px"}},we={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},he={__name:"Providers",setup(I){const i=re(),m=A(),P=T(!1),c=T(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let d={};const F=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],v={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},k=F.map(a=>({value:a,label:v[a]||a}));async function b(a){try{await i.switchProvider(a),_.success(`已切换到 ${a}`)}catch(e){_.error(`切换失败: ${e.message}`)}}async function w(a){await i.testProvider(a)?_.success(`${a} 连接正常`):_.warning(`${a} 连接失败,请检查配置`)}function C(a){const e={};if(!a)return e;try{const U=JSON.parse(a.trim()),p=U.llm||U;return p.provider&&(e.provider=p.provider),p.model&&(e.model=p.model),p.apiKey&&(e.apiKey=p.apiKey),p.baseUrl&&(e.baseUrl=p.baseUrl),p.temperature!==void 0&&(e.temperature=Number(p.temperature)),p.maxTokens!==void 0&&(e.maxTokens=Number(p.maxTokens)),e}catch{}const r=a.split(`
2
- `);for(const U of r){const z=U.trim().match(/^(?:llm\.)?(\w+)\s*[=:]\s*(.+)$/i);if(!z)continue;const[,S,j]=z,f=j.trim(),h=S.toLowerCase();if(h==="provider"&&f)e.provider=f;else if(h==="model"&&f)e.model=f;else if(h==="apikey"&&f)f.includes("***")||(e.apiKey=f);else if(h==="baseurl")e.baseUrl=f;else if(h==="temperature"){const $=parseFloat(f);isNaN($)||(e.temperature=$)}else if(h==="maxtokens"){const $=parseInt(f,10);isNaN($)||(e.maxTokens=$)}}return e}async function O(){P.value=!0;try{const{output:a}=await m.execute("config list",15e3),e=C(a);e.provider&&(t.provider=e.provider),e.model&&(t.model=e.model),e.apiKey&&(t.apiKey=e.apiKey),e.baseUrl&&(t.baseUrl=e.baseUrl),e.temperature!==void 0&&(t.temperature=e.temperature),e.maxTokens!==void 0&&(t.maxTokens=e.maxTokens),d={...t},_.success("配置已加载")}catch(a){_.error(`加载配置失败: ${a.message}`)}finally{P.value=!1}}async function D(){c.value=!0;const a=[],e=[];try{if(t.provider&&t.provider!==d.provider)try{await m.execute(`config set llm.provider ${t.provider}`,1e4),e.push("provider")}catch(r){a.push(`provider: ${r.message}`)}if(t.model&&t.model!==d.model)try{await m.execute(`config set llm.model ${t.model}`,1e4),e.push("model")}catch(r){a.push(`model: ${r.message}`)}if(t.apiKey&&t.apiKey!==d.apiKey)try{await m.execute(`config set llm.apiKey ${t.apiKey}`,1e4),e.push("apiKey")}catch(r){a.push(`apiKey: ${r.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==d.baseUrl)try{await m.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),e.push("baseUrl")}catch(r){a.push(`baseUrl: ${r.message}`)}if(t.temperature!==d.temperature)try{await m.execute(`config set llm.temperature ${t.temperature}`,1e4),e.push("temperature")}catch(r){a.push(`temperature: ${r.message}`)}if(t.maxTokens!==d.maxTokens)try{await m.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),e.push("maxTokens")}catch(r){a.push(`maxTokens: ${r.message}`)}a.length>0?_.warning(`部分配置保存失败: ${a.join("; ")}`):e.length>0?(_.success(`已保存 ${e.length} 项配置`),d={...t},e.includes("provider")&&i.loadProviders()):_.info("没有检测到配置变更")}catch(r){_.error(`保存配置失败: ${r.message}`)}finally{c.value=!1}}function E(){t.provider=d.provider||void 0,t.model=d.model||"",t.apiKey=d.apiKey||"",t.baseUrl=d.baseUrl||"",t.temperature=d.temperature??.7,t.maxTokens=d.maxTokens??4096}return H(()=>{i.loadProviders(),O()}),(a,e)=>{const r=u("a-button"),U=u("a-alert"),p=u("a-spin"),z=u("a-tag"),S=u("a-badge"),j=u("a-card"),f=u("a-list-item"),h=u("a-list"),$=u("a-divider"),R=u("a-select"),L=u("a-form-item"),V=u("a-input"),W=u("a-input-password"),J=u("a-slider"),q=u("a-input-number"),X=u("a-form");return y(),N("div",null,[n("div",ne,[e[9]||(e[9]=n("div",null,[n("h2",{class:"page-title"},"LLM 配置"),n("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),s(r,{type:"primary",ghost:"",loading:g(i).loading,onClick:e[0]||(e[0]=o=>g(i).loadProviders())},{icon:l(()=>[s(g(G))]),default:l(()=>[e[8]||(e[8]=x(" 刷新 ",-1))]),_:1},8,["loading"])]),g(i).activeProvider?(y(),K(U,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[n("span",null,[e[10]||(e[10]=x("当前激活:",-1)),n("strong",null,M(g(i).activeProvider),1)])]),_:1})):B("",!0),g(i).loading?(y(),N("div",ie,[s(p,{size:"large"}),e[11]||(e[11]=n("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(y(),N("div",de,[n("div",ue,[(y(!0),N(Q,null,ee(g(i).providers,o=>(y(),K(j,{key:o.name,class:oe(["provider-card",{active:o.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[n("div",ce,[n("span",pe,M(o.icon),1),n("div",me,[n("div",ve,M(o.label),1),n("div",fe,M(o.name),1)]),n("div",null,[o.active?(y(),K(z,{key:0,color:"green"},{default:l(()=>[...e[12]||(e[12]=[x("活跃",-1)])]),_:1})):o.status==="ok"?(y(),K(S,{key:1,status:"success",text:""})):o.status==="error"?(y(),K(S,{key:2,status:"error",text:""})):B("",!0)])]),n("div",ge,[s(r,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:g(i).testing===o.name,onClick:Y=>w(o.name)},{default:l(()=>[...e[13]||(e[13]=[x(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),o.active?(y(),K(z,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...e[15]||(e[15]=[x("当前",-1)])]),_:1})):(y(),K(r,{key:0,size:"small",type:"primary",ghost:"",onClick:Y=>b(o.name)},{default:l(()=>[...e[14]||(e[14]=[x(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),g(i).localModels.length?(y(),N("div",ye,[e[16]||(e[16]=n("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),s(h,{"data-source":g(i).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:o})=>[s(f,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[s(z,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[x(M(o.size||"local"),1)]),_:2},1024)]),default:l(()=>[n("span",be,M(o.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):B("",!0),s($,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),n("div",xe,[e[18]||(e[18]=n("h3",{class:"section-title"},"LLM 参数设置",-1)),s(r,{size:"small",loading:P.value,onClick:O,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[s(g(G))]),default:l(()=>[e[17]||(e[17]=x(" 加载配置 ",-1))]),_:1},8,["loading"])]),s(j,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[s(X,{model:t,layout:"vertical",class:"config-form"},{default:l(()=>[n("div",_e,[s(L,{label:"Provider(提供商)"},{default:l(()=>[s(R,{value:t.provider,"onUpdate:value":e[1]||(e[1]=o=>t.provider=o),placeholder:"选择 LLM 提供商",options:g(k),style:{width:"100%"},disabled:c.value},null,8,["value","options","disabled"])]),_:1}),s(L,{label:"Model(模型名称)"},{default:l(()=>[s(V,{value:t.model,"onUpdate:value":e[2]||(e[2]=o=>t.model=o),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"API Key"},{default:l(()=>[s(W,{value:t.apiKey,"onUpdate:value":e[3]||(e[3]=o=>t.apiKey=o),placeholder:"输入 API Key",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"Base URL"},{default:l(()=>[s(V,{value:t.baseUrl,"onUpdate:value":e[4]||(e[4]=o=>t.baseUrl=o),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"Temperature(温度)"},{default:l(()=>[n("div",ke,[s(J,{value:t.temperature,"onUpdate:value":e[5]||(e[5]=o=>t.temperature=o),min:0,max:2,step:.1,style:{flex:"1"},disabled:c.value},null,8,["value","disabled"]),s(q,{value:t.temperature,"onUpdate:value":e[6]||(e[6]=o=>t.temperature=o),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:c.value},null,8,["value","disabled"])])]),_:1}),s(L,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[s(q,{value:t.maxTokens,"onUpdate:value":e[7]||(e[7]=o=>t.maxTokens=o),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:c.value},null,8,["value","disabled"])]),_:1})]),n("div",we,[s(r,{onClick:E,disabled:c.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...e[19]||(e[19]=[x(" 重置 ",-1)])]),_:1},8,["disabled"]),s(r,{type:"primary",loading:c.value,onClick:D},{default:l(()=>[...e[20]||(e[20]=[x(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})]))])}}},Ce=le(he,[["__scopeId","data-v-38d68389"]]);export{Ce as default};
@@ -1,3 +0,0 @@
1
- import{o as ce,a3 as p,a1 as m,k as l,Z as s,W as x,u as _,G as y,X as d,f as g,Y as r,F,a7 as W,a5 as v,a4 as k,A as pe,c as me}from"./vendor-CN0Iv_qZ.js";import{u as ye}from"./ws-Dma34ig_.js";import{_ as fe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as D,N as c,O as ve,q as M,a8 as J,a5 as _e}from"./antd-Dh2t0vGq.js";const ge={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xe={key:0,style:{"text-align":"center",padding:"60px"}},ke={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},he={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},we={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},be={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},Ae={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},Ce={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},Fe={key:3,style:{"text-align":"center",padding:"60px"}},ze=["href"],Se={key:1,style:{color:"#e0e0e0","font-weight":"500"}},Re={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ue={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},$e={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},Ne={key:0,style:{"margin-bottom":"8px"}},Te=["innerHTML"],Le={key:2,style:{color:"var(--text-muted)"}},Oe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},je={__name:"RssFeed",setup(We){const h=ye(),N=g(!1),z=g(!1),T=g(!1),L=g(!1),w=g([]),A=g([]),S=g(""),R=g(!1),U=g(""),O=g([]),K=me(()=>{const t=w.value.length,e=A.value.length,n=A.value.filter(u=>!u.read).length,o=w.value.filter(u=>u.lastUpdated).sort((u,$)=>new Date($.lastUpdated)-new Date(u.lastUpdated))[0],i=o?j(o.lastUpdated):"-";return[{label:"订阅源数",value:t,color:"#1677ff"},{label:"文章总数",value:e,color:"#52c41a"},{label:"未读文章",value:n,color:"#faad14"},{label:"最近刷新",value:i,color:"#13c2c2"}]}),P=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function j(t){if(!t)return"-";try{const e=new Date(t);return isNaN(e.getTime())?t:e.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}function I(t){try{const e=t.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(e)return JSON.parse(e[1])}catch{}return null}async function C(){N.value=!0;try{const{output:t}=await h.execute("rss list --json",2e4),e=I(t);Array.isArray(e)?w.value=e.map((n,o)=>({key:n.id||n.url||o,id:n.id||String(o),title:n.title||n.name||"",url:n.url||n.feedUrl||"",itemCount:n.itemCount??n.articleCount??n.count??0,lastUpdated:n.lastUpdated||n.updatedAt||n.lastRefresh||""})):w.value=G(t)}catch(t){c.error("加载订阅源失败: "+t.message)}finally{N.value=!1}}function G(t){const e=[],n=t.split(`
2
- `);for(const o of n){const i=o.trim();if(!i||i.startsWith("─")||i.match(/^\d+ feed/i)||i.startsWith("RSS")||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u?e.push({key:u[1],id:u[1],title:u[2].trim(),url:(u[3]||"").trim(),itemCount:0,lastUpdated:""}):i.length>5&&e.push({key:String(e.length),id:String(e.length),title:i.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return e}async function b(){z.value=!0,O.value=[];try{let t="rss articles --limit 30 --json";S.value&&(t=`rss articles --feed ${S.value} --limit 30 --json`);const{output:e}=await h.execute(t,2e4),n=I(e);Array.isArray(n)?A.value=n.map((o,i)=>({key:o.id||String(i),id:o.id||String(i),title:o.title||"无标题",link:o.link||o.url||"",source:o.source||o.feedTitle||o.feedName||"",publishedAt:o.publishedAt||o.pubDate||o.date||"",read:!!o.read,summary:o.summary||o.description||"",content:o.content||""})):A.value=X(e)}catch(t){c.error("加载文章失败: "+t.message)}finally{z.value=!1}}function X(t){const e=[],n=t.split(`
3
- `);for(const o of n){const i=o.trim();if(!i||i.startsWith("─")||i.match(/^\d+ article/i)||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u&&e.push({key:u[1],id:u[1],title:u[2].trim(),link:"",source:(u[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return e}async function Y(){const t=U.value.trim();if(!t){c.warning("请输入订阅源地址");return}L.value=!0;try{const{output:e}=await h.execute(`rss add "${t}"`,3e4);e.includes("error")||e.includes("失败")||e.includes("Error")?c.error("添加失败: "+e.slice(0,120)):(c.success("订阅源已添加"),R.value=!1,U.value="",await C(),await b())}catch(e){c.error("添加失败: "+e.message)}finally{L.value=!1}}async function Z(t){try{c.loading({content:`正在刷新 ${t.title||t.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${t.id}`,3e4),c.success({content:"刷新完成",key:"refreshFeed"}),await C(),await b()}catch(e){c.error({content:"刷新失败: "+e.message,key:"refreshFeed"})}}async function Q(t){try{c.loading({content:`正在删除 ${t.title||t.id}...`,key:"removeFeed"});const{output:e}=await h.execute(`rss remove ${t.id}`,2e4);e.includes("error")||e.includes("失败")?c.error({content:"删除失败: "+e.slice(0,120),key:"removeFeed"}):(c.success({content:"已删除订阅源",key:"removeFeed"}),await C(),await b())}catch(e){c.error({content:"删除失败: "+e.message,key:"removeFeed"})}}async function ee(){T.value=!0;try{c.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),c.success({content:"全部刷新完成",key:"refreshAll"}),await C(),await b()}catch(t){c.error({content:"刷新失败: "+t.message,key:"refreshAll"})}finally{T.value=!1}}async function te(t){try{await h.execute(`rss mark-read ${t.id}`,1e4),t.read=!0,c.success("已标记已读")}catch(e){c.error("操作失败: "+e.message)}}function ae(t,e){O.value=t?[e.key]:[]}return ce(async()=>{await C(),await b()}),(t,e)=>{const n=d("a-button"),o=d("a-space"),i=d("a-statistic"),u=d("a-card"),$=d("a-col"),B=d("a-row"),E=d("a-spin"),V=d("a-menu-item"),se=d("a-menu"),le=d("a-dropdown"),q=d("a-select-option"),ne=d("a-select"),H=d("a-tag"),oe=d("a-table"),re=d("a-input"),ie=d("a-form-item"),ue=d("a-form"),de=d("a-modal");return r(),p("div",null,[m("div",ge,[e[6]||(e[6]=m("div",null,[m("h2",{class:"page-title"},"RSS 订阅"),m("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),l(o,null,{default:s(()=>[l(n,{type:"primary",onClick:e[0]||(e[0]=a=>R.value=!0)},{icon:s(()=>[l(_(ve))]),default:s(()=>[e[4]||(e[4]=y(" 添加订阅 ",-1))]),_:1}),l(n,{ghost:"",loading:T.value,onClick:ee},{icon:s(()=>[l(_(M))]),default:s(()=>[e[5]||(e[5]=y(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),l(B,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[(r(!0),p(F,null,W(K.value,a=>(r(),x($,{xs:12,sm:6,key:a.label},{default:s(()=>[l(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:s(()=>[l(i,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),e[16]||(e[16]=m("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),N.value?(r(),p("div",xe,[l(E,{size:"large"})])):w.value.length>0?(r(),x(B,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:s(()=>[(r(!0),p(F,null,W(w.value,a=>(r(),x($,{xs:24,sm:12,md:8,lg:6,key:a.id||a.url},{default:s(()=>[l(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:s(()=>[m("div",ke,[l(_(D),{style:{color:"#1677ff","flex-shrink":"0"}}),m("span",he,v(a.title||"未命名订阅"),1)])]),extra:s(()=>[l(le,null,{overlay:s(()=>[l(se,null,{default:s(()=>[l(V,{onClick:f=>Z(a)},{default:s(()=>[l(_(M)),e[8]||(e[8]=y(" 刷新 ",-1))]),_:1},8,["onClick"]),l(V,{onClick:f=>Q(a),danger:""},{default:s(()=>[l(_(_e)),e[9]||(e[9]=y(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:s(()=>[l(n,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:s(()=>[...e[7]||(e[7]=[y("...",-1)])]),_:1})]),_:2},1024)]),default:s(()=>[m("p",we,[l(_(J)),y(" "+v(a.url||"-"),1)]),m("div",be,[m("span",null,v(a.itemCount??"-")+" 篇文章",1),m("span",null,v(j(a.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),p("div",Ae,[l(_(D),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[10]||(e[10]=y(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),m("div",Ce,[e[12]||(e[12]=m("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),l(o,null,{default:s(()=>[l(ne,{value:S.value,"onUpdate:value":e[1]||(e[1]=a=>S.value=a),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:b},{default:s(()=>[l(q,{value:""},{default:s(()=>[...e[11]||(e[11]=[y("全部订阅",-1)])]),_:1}),(r(!0),p(F,null,W(w.value,a=>(r(),x(q,{key:a.id,value:a.id},{default:s(()=>[y(v(a.title||a.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),l(n,{loading:z.value,onClick:b},{icon:s(()=>[l(_(M))]),_:1},8,["loading"])]),_:1})]),z.value?(r(),p("div",Fe,[l(E,{size:"large"})])):(r(),x(oe,{key:4,columns:P,"data-source":A.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:O.value,onExpand:ae}},{bodyCell:s(({column:a,record:f})=>[a.key==="title"?(r(),p(F,{key:0},[f.link?(r(),p("a",{key:0,href:f.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[l(_(J),{style:{"margin-right":"4px"}}),y(v(f.title),1)],8,ze)):(r(),p("span",Se,v(f.title),1))],64)):k("",!0),a.key==="source"?(r(),x(H,{key:1,color:"blue",style:{"font-size":"10px"}},{default:s(()=>[y(v(f.source||"-"),1)]),_:2},1024)):k("",!0),a.key==="publishedAt"?(r(),p("span",Re,v(j(f.publishedAt)),1)):k("",!0),a.key==="status"?(r(),x(H,{key:3,color:f.read?"default":"green"},{default:s(()=>[y(v(f.read?"已读":"未读"),1)]),_:2},1032,["color"])):k("",!0),a.key==="actions"?(r(),p(F,{key:4},[f.read?(r(),p("span",Ue,"--")):(r(),x(n,{key:0,size:"small",type:"link",onClick:pe(De=>te(f),["stop"])},{default:s(()=>[...e[13]||(e[13]=[y(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):k("",!0)]),expandedRowRender:s(({record:a})=>[m("div",$e,[a.summary?(r(),p("div",Ne,[e[14]||(e[14]=m("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),y(v(a.summary),1)])):k("",!0),a.content?(r(),p("div",{key:1,innerHTML:a.content,style:{color:"var(--text-secondary)"}},null,8,Te)):k("",!0),!a.summary&&!a.content?(r(),p("div",Le,"暂无内容预览")):k("",!0)])]),emptyText:s(()=>[m("div",Oe,[l(_(D),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[15]||(e[15]=y(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),l(de,{open:R.value,"onUpdate:open":e[3]||(e[3]=a=>R.value=a),title:"添加订阅源","confirm-loading":L.value,onOk:Y,"ok-text":"添加","cancel-text":"取消"},{default:s(()=>[l(ue,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:s(()=>[l(ie,{label:"URL",required:""},{default:s(()=>[l(re,{value:U.value,"onUpdate:value":e[2]||(e[2]=a=>U.value=a),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},Ve=fe(je,[["__scopeId","data-v-66093b20"]]);export{Ve as default};
@@ -1,4 +0,0 @@
1
- import{u as fe}from"./ws-Dma34ig_.js";import{_ as ve}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{N as x,q as ye,O as me,K as ge,S as _e,L as X,X as be}from"./antd-Dh2t0vGq.js";import{o as xe,a3 as p,a1 as I,k as t,Z as a,f as i,X as u,Y as n,G as f,u as D,W as z,a5 as c,a4 as y,F as ke,a7 as he}from"./vendor-CN0Iv_qZ.js";const we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={key:0,style:{"text-align":"center",padding:"60px"}},De={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Re={key:0,style:{"margin-top":"12px"}},ze={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Le={key:0,style:{"margin-top":"8px"}},Ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Te={key:0,style:{"margin-top":"8px"}},We={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ae={key:0,style:{"text-align":"center",padding:"60px"}},Oe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Se={key:1,style:{color:"#e0e0e0"}},Me={key:2,style:{color:"var(--text-secondary)"}},$e={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ee={__name:"Security",setup(Ke){const C=fe(),W=i("did"),M=i(!1);async function J(){M.value=!0;try{W.value==="did"?await O():W.value==="audit"&&await Z()}finally{M.value=!1}}function Q(l){l==="did"&&U.value.length===0&&O(),l==="audit"&&S.value.length===0&&Z()}const $=i(!1),E=i(!1),K=i(!1),U=i([]),V=i(!1),A=i(""),L=i(""),ee=[{title:"DID",key:"did",dataIndex:"did",ellipsis:!0},{title:"方法",key:"method",dataIndex:"method",width:"100px"},{title:"创建时间",key:"created",dataIndex:"created",width:"180px"},{title:"状态",key:"status",width:"80px"}];async function O(){$.value=!0;try{const{output:l}=await C.execute("did list",15e3);U.value=te(l)}catch(l){x.error("加载 DID 列表失败: "+l.message)}finally{$.value=!1}}function te(l){const e=[],m=l.split(`
2
- `);for(const w of m){const o=w.trim();if(!o||o.startsWith("─")||o.startsWith("DID")||o.match(/^\d+ identit/i))continue;const r=o.match(/(did:\w+:\w+)/);if(r){const d=r[1],g=d.split(":")[1]||"key",b=/default|默认|\*/.test(o),_=o.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);e.push({key:d,did:d,method:g,created:_?_[1]:"-",isDefault:b})}}return e}async function ae(){E.value=!0;try{const{output:l}=await C.execute("did create",2e4);l.includes("error")||l.includes("失败")?x.error("创建失败: "+l.slice(0,120)):(x.success("DID 身份已创建"),await O())}catch(l){x.error("创建失败: "+l.message)}finally{E.value=!1}}async function le(){if(!A.value.trim()){x.warning("请输入消息");return}K.value=!0,L.value="";try{const{output:l}=await C.execute(`did sign "${A.value.replace(/"/g,'\\"')}"`,15e3);L.value=l,!l.includes("error")&&!l.includes("失败")&&x.success("签名成功")}catch(l){L.value="签名失败: "+l.message}finally{K.value=!1}}const N=i(""),T=i(""),B=i(!1),F=i(!1),k=i(null),h=i(null);async function se(){if(N.value.trim()){B.value=!0,k.value=null;try{const{output:l,exitCode:e}=await C.execute(`encrypt file "${N.value.trim()}"`,3e4);k.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"加密完成"},k.value.success&&x.success("文件加密成功")}catch(l){k.value={success:!1,output:"加密失败: "+l.message}}finally{B.value=!1}}}async function oe(){if(T.value.trim()){F.value=!0,h.value=null;try{const{output:l,exitCode:e}=await C.execute(`decrypt file "${T.value.trim()}"`,3e4);h.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"解密完成"},h.value.success&&x.success("文件解密成功")}catch(l){h.value={success:!1,output:"解密失败: "+l.message}}finally{F.value=!1}}}const P=i(!1),S=i([]),Y=i([]),ne=[{title:"时间",key:"time",dataIndex:"time",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function ie(l){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(l||"").toLowerCase()]||"default"}async function Z(){P.value=!0;try{const[l,e]=await Promise.all([C.execute("audit log",15e3),C.execute("audit stats",15e3)]);S.value=re(l.output),Y.value=ue(e.output)}catch(l){x.error("加载审计日志失败: "+l.message)}finally{P.value=!1}}function re(l){const e=[],m=l.split(`
3
- `);for(const w of m){const o=w.trim();if(!o||o.startsWith("─")||o.startsWith("Audit")||o.startsWith("Recent"))continue;const r=o.split(/\s*[|│]\s*/);if(r.length>=3){e.push({key:e.length,time:r[0]||"-",event:r[1]||"-",user:r[2]||"-",level:r[3]||"info",detail:r.slice(4).join(" ")||""});continue}const d=o.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(d){const g=d[2],b=g.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);e.push({key:e.length,time:d[1],event:g.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:b?b[1].toLowerCase():"info",detail:""})}else o.length>3&&!o.match(/^\d+ event/i)&&e.push({key:e.length,time:"-",event:o.slice(0,80),user:"-",level:"info",detail:""})}return e}function ue(l){const e=[],m=l.split(`
4
- `),w=["#1677ff","#52c41a","#faad14","#ff4d4f"];let o=0;for(const r of m){const d=r.trim();if(!d||d.startsWith("─")||d.startsWith("Audit"))continue;const g=d.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(g){const b=g[1].trim(),_=g[2].trim(),R=_.match(/^(\d+)/);e.push({label:b,value:R?parseInt(R[1],10):_,color:w[o%w.length]}),o++}}return e.length===0&&e.push({label:"总事件数",value:S.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),e}return xe(()=>{O()}),(l,e)=>{const m=u("a-button"),w=u("a-space"),o=u("a-spin"),r=u("a-tag"),d=u("a-empty"),g=u("a-table"),b=u("a-input"),_=u("a-form-item"),R=u("a-form"),de=u("a-modal"),G=u("a-tab-pane"),j=u("a-card"),q=u("a-col"),H=u("a-row"),ce=u("a-statistic"),pe=u("a-tabs");return n(),p("div",null,[I("div",we,[e[7]||(e[7]=I("div",null,[I("h2",{class:"page-title"},"安全中心"),I("p",{class:"page-sub"},"DID 身份 / 加密 / 审计")],-1)),t(m,{type:"primary",ghost:"",loading:M.value,onClick:J},{icon:a(()=>[t(D(ye))]),default:a(()=>[e[6]||(e[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),t(pe,{activeKey:W.value,"onUpdate:activeKey":e[5]||(e[5]=s=>W.value=s),onChange:Q},{default:a(()=>[t(G,{key:"did"},{tab:a(()=>[t(D(_e)),e[8]||(e[8]=f(" DID 身份 ",-1))]),default:a(()=>[t(w,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(m,{type:"primary",loading:E.value,onClick:ae},{icon:a(()=>[t(D(me))]),default:a(()=>[e[9]||(e[9]=f(" 创建身份 ",-1))]),_:1},8,["loading"]),t(m,{onClick:e[0]||(e[0]=s=>V.value=!0)},{icon:a(()=>[t(D(ge))]),default:a(()=>[e[10]||(e[10]=f(" 签名消息 ",-1))]),_:1})]),_:1}),$.value?(n(),p("div",Ie,[t(o,{size:"large"})])):(n(),z(g,{key:1,columns:ee,"data-source":U.value,pagination:{pageSize:20,showTotal:s=>`共 ${s} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:s,record:v})=>[s.key==="did"?(n(),p("span",De,c(v.did),1)):y("",!0),s.key==="method"?(n(),z(r,{key:1,color:"blue"},{default:a(()=>[f(c(v.method),1)]),_:2},1024)):y("",!0),s.key==="created"?(n(),p("span",Ce,c(v.created),1)):y("",!0),s.key==="status"?(n(),z(r,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[f(c(v.isDefault?"默认":"可用"),1)]),_:2},1032,["color"])):y("",!0)]),emptyText:a(()=>[t(d,{description:"暂无 DID 身份,点击「创建身份」添加"})]),_:1},8,["data-source","pagination"])),t(de,{open:V.value,"onUpdate:open":e[2]||(e[2]=s=>V.value=s),title:"DID 签名","confirm-loading":K.value,onOk:le,"ok-text":"签名","cancel-text":"取消"},{default:a(()=>[t(R,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(_,{label:"消息",required:""},{default:a(()=>[t(b,{value:A.value,"onUpdate:value":e[1]||(e[1]=s=>A.value=s),placeholder:"请输入要签名的消息"},null,8,["value"])]),_:1})]),_:1}),L.value?(n(),p("div",Re,[e[11]||(e[11]=I("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"签名结果:",-1)),I("pre",ze,c(L.value),1)])):y("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),t(G,{key:"encrypt"},{tab:a(()=>[t(D(X)),e[12]||(e[12]=f(" 文件加密 ",-1))]),default:a(()=>[t(H,{gutter:[24,24]},{default:a(()=>[t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"加密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:N.value,"onUpdate:value":e[3]||(e[3]=s=>N.value=s),placeholder:"输入文件路径,如 /path/to/file.txt"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(m,{type:"primary",loading:B.value,disabled:!N.value.trim(),onClick:se},{icon:a(()=>[t(D(X))]),default:a(()=>[e[13]||(e[13]=f(" 加密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),k.value?(n(),p("div",Le,[t(r,{color:k.value.success?"green":"red"},{default:a(()=>[f(c(k.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Ne,c(k.value.output),1)])):y("",!0)]),_:1})]),_:1}),t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"解密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:T.value,"onUpdate:value":e[4]||(e[4]=s=>T.value=s),placeholder:"输入加密文件路径,如 /path/to/file.txt.enc"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(m,{type:"primary",loading:F.value,disabled:!T.value.trim(),onClick:oe},{icon:a(()=>[t(D(X))]),default:a(()=>[e[14]||(e[14]=f(" 解密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),h.value?(n(),p("div",Te,[t(r,{color:h.value.success?"green":"red"},{default:a(()=>[f(c(h.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",We,c(h.value.output),1)])):y("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),t(G,{key:"audit"},{tab:a(()=>[t(D(be)),e[15]||(e[15]=f(" 审计日志 ",-1))]),default:a(()=>[t(H,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(n(!0),p(ke,null,he(Y.value,s=>(n(),z(q,{xs:12,sm:6,key:s.label},{default:a(()=>[t(j,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ce,{title:s.label,value:s.value,"value-style":{color:s.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),P.value?(n(),p("div",Ae,[t(o,{size:"large"})])):(n(),z(g,{key:1,columns:ne,"data-source":S.value,pagination:{pageSize:20,showTotal:s=>`共 ${s} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:s,record:v})=>[s.key==="time"?(n(),p("span",Oe,c(v.time),1)):y("",!0),s.key==="event"?(n(),p("span",Se,c(v.event),1)):y("",!0),s.key==="user"?(n(),p("span",Me,c(v.user),1)):y("",!0),s.key==="level"?(n(),z(r,{key:3,color:ie(v.level)},{default:a(()=>[f(c(v.level),1)]),_:2},1032,["color"])):y("",!0),s.key==="detail"?(n(),p("span",$e,c(v.detail),1)):y("",!0)]),emptyText:a(()=>[t(d,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Pe=ve(Ee,[["__scopeId","data-v-d730836a"]]);export{Pe as default};
@@ -1,2 +0,0 @@
1
- import{u as J}from"./ws-Dma34ig_.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as X,s as Y,d as R,r as Z,E as K,J as Q,b as U}from"./antd-Dh2t0vGq.js";import{o as ee,a3 as d,a1 as m,k as e,Z as t,f as r,X as n,Y as l,G as y,u as c,a5 as u,a4 as g,W as V,c as te}from"./vendor-CN0Iv_qZ.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=J(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),W=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),N=r([]),I=te(()=>S.status==="connected"),E=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function $(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);W.value=o,F(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function F(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const s=o.match(/LLM:\s+(\S+)/i);s&&(k.value=s[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
2
- `).filter(s=>s.match(/[○●]\s+\w+:\s+\d+/));N.value=i.map(s=>{const f=s.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function G(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),s=n("a-col"),f=n("a-row"),T=n("a-tag"),j=n("a-spin"),q=n("a-badge"),A=n("a-table"),H=n("a-space");return l(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(X))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(s,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(Y))]),_:1},8,["value","value-style"]),D.value?(l(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(s,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(R))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(s,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(Z))]),_:1},8,["value","value-style"]),L.value?(l(),d("div",se,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(s,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),h.value?(l(),d("div",le,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(T,{color:I.value?"green":"red"},{default:t(()=>[y(" WS "+u(I.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(l(),d("div",ne,[e(j)])):(l(),V(A,{key:1,columns:E,"data-source":N.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(l(),V(q,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(l(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(l(),d("div",ie,u(w.value),1)):(l(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:G,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Q))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(U))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(R))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(l(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=P(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
@@ -1 +0,0 @@
1
- import{V,f as v,c as h,o as $,a3 as m,a1 as i,a5 as y,u as s,k as r,Z as d,F as C,a7 as L,X as p,$ as j,Y as u,G as g,W as M}from"./vendor-CN0Iv_qZ.js";import{u as A}from"./ws-Dma34ig_.js";import{p as F}from"./parsers-DftYMnlk.js";import{u as N}from"./chat-BYmuDvol.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as E,q as R,z as T}from"./antd-Dh2t0vGq.js";const U=V("skills",()=>{const _=v(!1),e=v([]),c=v(""),f=v("all"),x=h(()=>{const n=new Set(["all"]);return e.value.forEach(l=>{l.category&&n.add(l.category),l.executionMode&&n.add(l.executionMode)}),[...n]}),k=h(()=>{let n=e.value;if(f.value!=="all"&&(n=n.filter(l=>l.category===f.value||l.executionMode===f.value)),c.value){const l=c.value.toLowerCase();n=n.filter(o=>o.name?.toLowerCase().includes(l)||o.description?.toLowerCase().includes(l)||o.title?.toLowerCase().includes(l))}return n});async function b(){const n=A();_.value=!0;try{const{output:l}=await n.execute("skill list",2e4),o=F(l);e.value=o}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:e,searchQuery:c,selectedCategory:f,categories:x,filteredSkills:k,loadSkills:b}}),W={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},D={class:"page-sub"},G={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},P={key:0,style:{"text-align":"center",padding:"60px"}},X={key:1,class:"skills-grid"},Y={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},Z={style:{flex:"1","min-width":"0"}},H={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},J={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},K={style:{"margin-left":"12px","flex-shrink":"0"}},ee={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},te={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const e=U(),c=N(),f=j(),x=h(()=>e.categories.filter(o=>o!=="all").slice(0,6));function k(o){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[o]||o}function b(o){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[o]||o||"未知"}function n(o){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[o]||"default"}async function l(o){await c.createSession("agent"),f.push("/chat"),setTimeout(()=>{c.currentSessionId&&c.sendMessage(c.currentSessionId,`/skill run ${o}`)},300)}return $(()=>{e.allSkills.length||e.loadSkills()}),(o,t)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),q=p("a-radio-group"),I=p("a-spin"),B=p("a-tag"),O=p("a-card");return u(),m("div",null,[i("div",W,[i("div",null,[t[3]||(t[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",D,y(s(e).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:s(e).loading,onClick:t[0]||(t[0]=a=>s(e).loadSkills())},{icon:d(()=>[r(s(R))]),default:d(()=>[t[4]||(t[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",G,[r(z,{value:s(e).searchQuery,"onUpdate:value":t[1]||(t[1]=a=>s(e).searchQuery=a),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(q,{value:s(e).selectedCategory,"onUpdate:value":t[2]||(t[2]=a=>s(e).selectedCategory=a),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...t[5]||(t[5]=[g("全部",-1)])]),_:1}),(u(!0),m(C,null,L(x.value,a=>(u(),M(w,{key:a,value:a},{default:d(()=>[g(y(k(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),s(e).loading?(u(),m("div",P,[r(I,{size:"large"}),t[6]||(t[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):s(e).filteredSkills.length?(u(),m("div",X,[(u(!0),m(C,null,L(s(e).filteredSkills,a=>(u(),M(O,{key:a.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",Y,[i("div",Z,[i("div",H,y(a.name),1),i("div",J,y(a.description||"暂无描述"),1)]),i("div",K,[r(B,{color:n(a.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(a.executionMode)),1)]),_:2},1032,["color"])])]),i("div",ee,[r(S,{size:"small",type:"primary",ghost:"",onClick:le=>l(a.name)},{icon:d(()=>[r(s(T))]),default:d(()=>[t[7]||(t[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(u(),m("div",te,[r(s(E),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(s(e).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},ce=Q(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{ce as default};
@@ -1 +0,0 @@
1
- import{V as F,f as $,c as V,o as I,b as P,a3 as d,a1 as f,k as l,Z as o,u as s,W as T,a4 as b,X as _,Y as r,G as g,a5 as u,F as A,a7 as R}from"./vendor-CN0Iv_qZ.js";import{u as B}from"./ws-Dma34ig_.js";import{_ as E}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as L}from"./antd-Dh2t0vGq.js";const U=F("tasks",()=>{const v=$([]),t=$(!1);let w=null,k=null;const S=V(()=>v.value.filter(e=>e.status==="running")),N=V(()=>v.value.filter(e=>e.status==="pending")),i=V(()=>v.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function a(){const e=B();t.value=!0;try{const p=await e.sendRaw({type:"tasks-list"});p&&Array.isArray(p.tasks)&&(v.value=p.tasks)}catch{}finally{t.value=!1}}async function x(e){const p=B();try{await p.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await a()}}const C=$(null);function z(e=5e3){y(),a(),w=setInterval(a,e),m()}function y(){w&&(clearInterval(w),w=null),k&&(k(),k=null)}function m(){const e=B();if(k)return;const p=n=>{n.type==="task:notification"&&n.payload?.task&&(C.value=n.payload.task,a(),setTimeout(()=>{C.value=null},8e3))};k=e.onRuntimeEvent(p)}function h(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function D(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:v,loading:t,running:S,pending:N,completed:i,lastNotification:C,fetchTasks:a,stopTask:x,startPolling:z,stopPolling:y,formatDuration:h,getStatusColor:D}}),W={class:"page-header"},q={key:0,class:"error-text"},G={key:1},M={class:"task-header"},O={class:"task-desc"},X={class:"task-id"},Y={class:"task-meta"},Z=["title"],j={key:0,class:"error-text"},H={key:1,class:"success-text"},J={key:2,class:"muted-text"},K={__name:"Tasks",setup(v){const t=U(),w=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function k(i){return i.status==="running"&&i.startedAt?t.formatDuration(Date.now()-i.startedAt):i.completedAt&&i.startedAt?t.formatDuration(i.completedAt-i.startedAt):"-"}function S(i){return i?new Date(i).toLocaleString():"-"}function N(i,a){return i?i.length>a?`${i.slice(0,a)}...`:i:""}return I(()=>t.startPolling(5e3)),P(()=>t.stopPolling()),(i,a)=>{const x=_("a-button"),C=_("a-space"),z=_("a-alert"),y=_("a-statistic"),m=_("a-card"),h=_("a-col"),D=_("a-row"),e=_("a-tag"),p=_("a-table");return r(),d("div",null,[f("div",W,[a[3]||(a[3]=f("div",null,[f("h2",{class:"page-title"},"后台任务"),f("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),l(C,null,{default:o(()=>[l(x,{ghost:"",loading:s(t).loading,onClick:a[0]||(a[0]=n=>s(t).fetchTasks())},{icon:o(()=>[l(s(L))]),default:o(()=>[a[2]||(a[2]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(t).lastNotification?(r(),T(z,{key:0,type:s(t).lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:a[1]||(a[1]=n=>s(t).lastNotification=null)},{message:o(()=>[g(" 任务"+u(s(t).lastNotification.status==="completed"?"完成":"结束")+": "+u(s(t).lastNotification.description||s(t).lastNotification.id.slice(0,16)),1)]),description:o(()=>[s(t).lastNotification.error?(r(),d("span",q,u(s(t).lastNotification.error),1)):s(t).lastNotification.result?(r(),d("span",G,u(N(String(s(t).lastNotification.result),120)),1)):b("",!0)]),_:1},8,["type"])):b("",!0),l(D,{gutter:[16,16],class:"stats-row"},{default:o(()=>[l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"全部任务",value:s(t).tasks.length},null,8,["value"])]),_:1})]),_:1}),l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"运行中",value:s(t).running.length},null,8,["value"])]),_:1})]),_:1}),l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"等待中",value:s(t).pending.length},null,8,["value"])]),_:1})]),_:1}),l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"已完成",value:s(t).completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),s(t).running.length>0?(r(),T(m,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:o(()=>[(r(!0),d(A,null,R(s(t).running,n=>(r(),d("div",{key:n.id,class:"task-item running"},[f("div",M,[l(e,{color:s(t).getStatusColor(n.status)},{default:o(()=>[g(u(n.status.toUpperCase()),1)]),_:2},1032,["color"]),f("span",O,u(n.description),1),f("span",X,u(n.id.slice(0,16)),1)]),f("div",Y,[f("span",null,"类型: "+u(n.type||"-"),1),f("span",null,"已运行: "+u(s(t).formatDuration(Date.now()-n.startedAt)),1),l(x,{size:"small",danger:"",onClick:c=>s(t).stopTask(n.id)},{default:o(()=>[...a[4]||(a[4]=[g("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):b("",!0),l(m,{class:"panel-card"},{default:o(()=>[l(p,{columns:w,"data-source":s(t).tasks,pagination:{pageSize:15,size:"small"},loading:s(t).loading,"row-key":"id",size:"small"},{bodyCell:o(({column:n,record:c})=>[n.key==="status"?(r(),T(e,{key:0,color:s(t).getStatusColor(c.status)},{default:o(()=>[g(u(c.status),1)]),_:2},1032,["color"])):n.key==="description"?(r(),d("span",{key:1,title:c.command},u(c.description),9,Z)):n.key==="duration"?(r(),d(A,{key:2},[g(u(k(c)),1)],64)):n.key==="createdAt"?(r(),d(A,{key:3},[g(u(S(c.createdAt)),1)],64)):n.key==="result"?(r(),d(A,{key:4},[c.error?(r(),d("span",j,u(N(c.error,60)),1)):c.result?(r(),d("span",H,u(N(String(c.result),60)),1)):(r(),d("span",J,"-"))],64)):n.key==="action"?(r(),d(A,{key:5},[c.status==="running"?(r(),T(x,{key:0,size:"small",danger:"",onClick:Q=>s(t).stopTask(c.id)},{default:o(()=>[...a[5]||(a[5]=[g(" 停止 ",-1)])]),_:1},8,["onClick"])):b("",!0)],64)):b("",!0)]),_:1},8,["data-source","loading"])]),_:1})])}}},nt=E(K,[["__scopeId","data-v-c8e3e605"]]);export{nt as default};
@@ -1 +0,0 @@
1
- import{o as fe,a3 as x,a1 as n,k as t,Z as o,f as c,X as l,r as ye,$ as ge,Y as u,F as A,a7 as R,u as p,a5 as d,G as i,W as y,a4 as U}from"./vendor-CN0Iv_qZ.js";import{u as _e}from"./ws-Dma34ig_.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as M,z as G,c as be,n as W,O as ke,b as Y,a6 as we,a5 as Ce,N as h}from"./antd-Dh2t0vGq.js";const ze={style:{display:"flex","align-items":"flex-start",gap:"10px"}},he={style:{flex:"1","min-width":"0"}},Oe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Pe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},$e={style:{"margin-top":"12px","text-align":"right"}},Te={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Ie={key:0,style:{"text-align":"center",padding:"40px"}},Be={style:{display:"flex","align-items":"flex-start",gap:"10px"}},je={style:{flex:"1","min-width":"0"}},Ne={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Se={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ae={key:0,style:{"margin-top":"4px"}},Re={style:{"margin-top":"12px","text-align":"right"}},Ue={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},De={style:{"margin-bottom":"16px"}},Fe={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},Ke={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Le={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Ve={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},X="cc_prompt_templates",qe={__name:"Templates",setup(Ee){const O=_e(),Z=ge(),D=c("project"),P=c(""),v=c(null),b=c(!1),$=c(""),H=[{name:"code-project",description:"代码项目 — 代码审查、重构、单元测试"},{name:"data-science",description:"数据科学 — ML/数据分析、可视化"},{name:"devops",description:"DevOps — 基础设施、部署、监控"},{name:"medical-triage",description:"医疗分诊 — 症状分析、分诊建议"},{name:"agriculture-expert",description:"农业专家 — 作物管理、病虫害"},{name:"general-assistant",description:"通用助手 — 日常问答、任务管理"},{name:"ai-media-creator",description:"AI 媒体创作 — 图文生成、视频脚本"},{name:"ai-doc-creator",description:"AI 文档创作 — 文档生成、格式转换"},{name:"empty",description:"空白模板 — 最小项目结构"}];function Q(s){$.value=s,b.value=!0}async function ee(){b.value=!1;const s=$.value;if(s){P.value=s,v.value=null;try{const e=`init --template ${s} --yes`,{output:m,exitCode:_}=await O.execute(e,3e4);v.value={success:_===0,output:m}}catch(e){v.value={success:!1,output:`初始化失败: ${e.message}`}}finally{P.value=""}}}const T=c(!1),k=c([]),I=c(""),f=c(null);async function te(){T.value=!0;try{const{output:s}=await O.execute("bi templates --json",15e3),e=JSON.parse(s);k.value=Array.isArray(e)?e:e.templates||[]}catch{k.value=[]}finally{T.value=!1}}async function oe(s){I.value=s,f.value=null;try{const e=`bi dashboard create --template ${s} --json`,{output:m,exitCode:_}=await O.execute(e,3e4);f.value={success:_===0,output:m}}catch(e){f.value={success:!1,output:`创建失败: ${e.message}`}}finally{I.value=""}}const g=c([]),w=c(!1),r=ye({name:"",category:"general",content:""});function ae(){try{const s=localStorage.getItem(X);g.value=s?JSON.parse(s):[]}catch{g.value=[]}}function F(){localStorage.setItem(X,JSON.stringify(g.value))}function ne(){!r.name||!r.content||(g.value.push({name:r.name,category:r.category,content:r.content}),F(),K(),h.success("模板已保存"))}function K(){w.value=!1,r.name="",r.category="general",r.content=""}function se(s){g.value.splice(s,1),F(),h.success("模板已删除")}function le(s){navigator.clipboard.writeText(s.content).then(()=>{h.success("已复制到剪贴板")}).catch(()=>{h.error("复制失败")})}function ie(s){Z.push({path:"/chat",query:{prompt:s.content}})}function re(s){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[s]||"default"}return fe(()=>{ae(),te()}),(s,e)=>{const m=l("a-button"),_=l("a-card"),B=l("a-col"),j=l("a-row"),L=l("a-alert"),N=l("a-tab-pane"),ue=l("a-spin"),V=l("a-empty"),q=l("a-tag"),pe=l("a-tabs"),E=l("a-modal"),ce=l("a-input"),S=l("a-form-item"),C=l("a-select-option"),de=l("a-select"),me=l("a-textarea"),ve=l("a-form");return u(),x("div",null,[e[27]||(e[27]=n("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[n("div",null,[n("h2",{class:"page-title"},"模板中心"),n("p",{class:"page-sub"},"项目模板 / BI 模板 / Prompt 模板")])],-1)),t(pe,{activeKey:D.value,"onUpdate:activeKey":e[3]||(e[3]=a=>D.value=a),type:"card"},{default:o(()=>[t(N,{key:"project"},{tab:o(()=>[t(p(be)),e[10]||(e[10]=i(" 项目模板 ",-1))]),default:o(()=>[t(j,{gutter:[16,16]},{default:o(()=>[(u(),x(A,null,R(H,a=>t(B,{key:a.name,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",ze,[t(p(M),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),n("div",he,[n("div",Oe,d(a.name),1),n("div",Pe,d(a.description),1)])]),n("div",$e,[t(m,{type:"primary",size:"small",loading:P.value===a.name,onClick:z=>Q(a.name)},{icon:o(()=>[t(p(G))]),default:o(()=>[e[11]||(e[11]=i(" 初始化 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024)),64))]),_:1}),v.value?(u(),y(L,{key:0,message:v.value.success?"初始化成功":"初始化失败",type:v.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=a=>v.value=null)},{description:o(()=>[n("pre",Te,d(v.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(N,{key:"bi"},{tab:o(()=>[t(p(W)),e[12]||(e[12]=i(" BI 模板 ",-1))]),default:o(()=>[T.value?(u(),x("div",Ie,[t(ue),e[13]||(e[13]=n("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"加载 BI 模板...",-1))])):k.value.length?(u(),y(j,{key:2,gutter:[16,16]},{default:o(()=>[(u(!0),x(A,null,R(k.value,a=>(u(),y(B,{key:a.id,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Be,[t(p(W),{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),n("div",je,[n("div",Ne,d(a.name),1),n("div",Se,d(a.description||"暂无描述"),1),a.id?(u(),x("div",Ae,[t(q,{size:"small",color:"purple"},{default:o(()=>[i(d(a.id),1)]),_:2},1024)])):U("",!0)])]),n("div",Re,[t(m,{type:"primary",size:"small",loading:I.value===a.id,onClick:z=>oe(a.id)},{icon:o(()=>[t(p(G))]),default:o(()=>[e[14]||(e[14]=i(" 创建仪表板 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(u(),y(V,{key:1,description:"暂无 BI 模板"})),f.value?(u(),y(L,{key:3,message:f.value.success?"仪表板创建成功":"创建失败",type:f.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[1]||(e[1]=a=>f.value=null)},{description:o(()=>[n("pre",Ue,d(f.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(N,{key:"prompts"},{tab:o(()=>[t(p(Y)),e[15]||(e[15]=i(" Prompt 模板 ",-1))]),default:o(()=>[n("div",De,[t(m,{type:"primary",onClick:e[2]||(e[2]=a=>w.value=!0)},{icon:o(()=>[t(p(ke))]),default:o(()=>[e[16]||(e[16]=i(" 新建模板 ",-1))]),_:1})]),g.value.length?(u(),y(j,{key:1,gutter:[16,16]},{default:o(()=>[(u(!0),x(A,null,R(g.value,(a,z)=>(u(),y(B,{key:z,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Fe,[t(p(Y),{style:{"font-size":"18px",color:"#52c41a"}}),n("span",Ke,d(a.name),1),t(q,{color:re(a.category),size:"small"},{default:o(()=>[i(d(a.category),1)]),_:2},1032,["color"])]),n("div",Le,d(a.content.length>120?a.content.slice(0,120)+"...":a.content),1),n("div",Ve,[t(m,{size:"small",onClick:J=>ie(a)},{icon:o(()=>[t(p(M))]),default:o(()=>[e[17]||(e[17]=i(" 使用 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",onClick:J=>le(a)},{icon:o(()=>[t(p(we))]),default:o(()=>[e[18]||(e[18]=i(" 复制 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",danger:"",onClick:J=>se(z)},{icon:o(()=>[t(p(Ce))]),default:o(()=>[e[19]||(e[19]=i(" 删除 ",-1))]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(u(),y(V,{key:0,description:"暂无 Prompt 模板,点击上方按钮创建"}))]),_:1})]),_:1},8,["activeKey"]),t(E,{open:b.value,"onUpdate:open":e[4]||(e[4]=a=>b.value=a),title:"确认初始化",onOk:ee,onCancel:e[5]||(e[5]=a=>b.value=!1),"ok-text":"确认","cancel-text":"取消"},{default:o(()=>[n("p",null,[e[20]||(e[20]=i("确定要使用模板 ",-1)),n("strong",null,d($.value),1),e[21]||(e[21]=i(" 初始化项目吗?",-1))]),e[22]||(e[22]=n("p",{style:{color:"var(--text-muted)","font-size":"12px"}},"这将在当前工作目录创建项目结构。",-1))]),_:1},8,["open"]),t(E,{open:w.value,"onUpdate:open":e[9]||(e[9]=a=>w.value=a),title:"新建 Prompt 模板",onOk:ne,onCancel:K,"ok-text":"保存","cancel-text":"取消","ok-button-props":{disabled:!r.name||!r.content}},{default:o(()=>[t(ve,{layout:"vertical"},{default:o(()=>[t(S,{label:"模板名称",required:""},{default:o(()=>[t(ce,{value:r.name,"onUpdate:value":e[6]||(e[6]=a=>r.name=a),placeholder:"输入模板名称"},null,8,["value"])]),_:1}),t(S,{label:"分类"},{default:o(()=>[t(de,{value:r.category,"onUpdate:value":e[7]||(e[7]=a=>r.category=a),style:{width:"100%"}},{default:o(()=>[t(C,{value:"general"},{default:o(()=>[...e[23]||(e[23]=[i("general",-1)])]),_:1}),t(C,{value:"code"},{default:o(()=>[...e[24]||(e[24]=[i("code",-1)])]),_:1}),t(C,{value:"writing"},{default:o(()=>[...e[25]||(e[25]=[i("writing",-1)])]),_:1}),t(C,{value:"analysis"},{default:o(()=>[...e[26]||(e[26]=[i("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(S,{label:"模板内容",required:""},{default:o(()=>[t(me,{value:r.content,"onUpdate:value":e[8]||(e[8]=a=>r.content=a),rows:6,placeholder:"输入 Prompt 模板内容"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","ok-button-props"])])}}},Ye=xe(qe,[["__scopeId","data-v-22e50acf"]]);export{Ye as default};