chainlesschain 0.156.5 → 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/bin/chainlesschain.js +0 -0
  2. package/package.json +1 -1
  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
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.156.5",
3
+ "version": "0.156.6",
4
4
  "description": "CLI for ChainlessChain - install, configure, and manage your personal AI management system",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- 62d51feda6103d847d9c24b2a81ef16db28c896bc0393a00a9d9d8bdebd9f3ab
1
+ 9810566a7f30e4e0125f7fb123344af26a68d497fcd90da28d6c2866b07657a9
@@ -0,0 +1 @@
1
+ import{C as p,_ as i}from"./useConfigInject-ImjEZhXr.js";import{B as b,c as y}from"./index-BfncNR8d.js";import{o as m,s as r,d as O,l as P,c as R}from"./vendor-C5RM7MZO.js";import{o as x}from"./index-DaMG8ksh.js";const A=()=>{const n=r(!1);return m(()=>{n.value=!0}),n},D={type:{type:String},actionFn:Function,close:Function,autofocus:Boolean,prefixCls:String,buttonProps:x(),emitEvent:Boolean,quitOnNullishReturnValue:Boolean};function d(n){return!!(n&&n.then)}const E=O({compatConfig:{MODE:3},name:"ActionButton",props:D,setup(n,g){let{slots:B}=g;const l=r(!1),c=r(),a=r(!1);let f;const v=A();P(()=>{n.autofocus&&(f=setTimeout(()=>{var e,t;return(t=(e=p(c.value))===null||e===void 0?void 0:e.focus)===null||t===void 0?void 0:t.call(e)}))}),m(()=>{clearTimeout(f)});const u=function(){for(var e,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];(e=n.close)===null||e===void 0||e.call(n,...o)},C=e=>{d(e)&&(a.value=!0,e.then(function(){v.value||(a.value=!1),u(...arguments),l.value=!1},t=>(v.value||(a.value=!1),l.value=!1,Promise.reject(t))))},h=e=>{const{actionFn:t}=n;if(l.value)return;if(l.value=!0,!t){u();return}let o;if(n.emitEvent){if(o=t(e),n.quitOnNullishReturnValue&&!d(o)){l.value=!1,u(e);return}}else if(t.length)o=t(n.close),l.value=!1;else if(o=t(),!o){u();return}C(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return R(b,i(i(i({},y(e)),{},{onClick:h,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{E as A};
@@ -1,3 +1,3 @@
1
- import{u as fe}from"./ws-Dma34ig_.js";import{_ as ye}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as K,n as Q,T as ee,a3 as me,a4 as xe,a5 as te,N as C}from"./antd-Dh2t0vGq.js";import{w as ge,o as _e,a3 as p,a1 as z,k as o,Z as s,f as y,X as m,r as E,Y as n,G as d,u as T,W as I,a5 as x,a4 as g,F as Te}from"./vendor-CN0Iv_qZ.js";const be={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},he={style:{display:"flex","align-items":"center",gap:"12px"}},we={key:0,style:{"text-align":"center",padding:"60px"}},Se={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"#faad14"}},Ie={key:3,style:{color:"var(--text-secondary)"}},ze={key:0,style:{"text-align":"center",padding:"60px"}},Re={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Oe={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},je={key:3,style:{color:"#faad14"}},Me={key:4,style:{color:"var(--text-secondary)"}},Ne={key:0,style:{"text-align":"center",padding:"40px"}},Ue={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Be={key:0,style:{"text-align":"center",padding:"40px"}},De={__name:"Analytics",setup(Le){const w=fe(),R=y("all"),U=y(!1),B=y(!1),D=y(!1),L=y(!1),A=y(!1),$=y(!1),F=y(20),v=E({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),O=y([]),j=y([]),f=E({entries:0,hits:0,tokensSaved:0,expired:0}),M=y(!1),b=E({totalCalls:0,inputTokens:0,outputTokens:0,totalTokens:0}),G=y([]),oe=[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:"调用次数",key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"110px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"110px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:"Total",key:"totalTokens",dataIndex:"totalTokens",width:"110px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)}],se=[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px",sorter:(e,t)=>(e.provider||"").localeCompare(t.provider||"")},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0,sorter:(e,t)=>(e.model||"").localeCompare(t.model||"")},{title:"调用次数",key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:"Input Tokens",key:"inputTokens",dataIndex:"inputTokens",width:"120px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:"Output Tokens",key:"outputTokens",dataIndex:"outputTokens",width:"130px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:"Total Tokens",key:"totalTokens",dataIndex:"totalTokens",width:"120px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)},{title:"费用 (USD)",key:"cost",dataIndex:"cost",width:"110px",sorter:(e,t)=>(e.cost||0)-(t.cost||0)},{title:"平均响应",key:"avgResponseTime",dataIndex:"avgResponseTime",width:"110px",sorter:(e,t)=>(e.avgResponseTime||0)-(t.avgResponseTime||0)}],ae=[{title:"时间",key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"Provider",key:"provider",dataIndex:"provider",width:"110px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"90px"},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"90px"},{title:"费用",key:"cost",dataIndex:"cost",width:"100px"},{title:"响应时间",key:"responseTime",dataIndex:"responseTime",width:"100px"}];function h(e){return(e||"").replace(/,/g,"")}function S(e){try{const t=(e||"").trim(),a=t.search(/[{[]/);return a>=0?JSON.parse(t.slice(a)):null}catch{return null}}function le(e){const t=(e||"").split(`
1
+ import{u as fe}from"./ws-D-sl0vsW.js";import{_ as ye}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as Y,m as Z,h as ee,a5 as me,a6 as xe,a7 as te}from"./icons-CpgFsfkd.js";import{a as C}from"./index-DwMlStra.js";import{w as ge,l as _e,F as p,D as z,c as o,x as s,r as y,q as m,a as E,v as n,J as d,u as T,m as I,I as x,G as g,H as Te}from"./vendor-C5RM7MZO.js";import"./index-DaMG8ksh.js";import"./useConfigInject-ImjEZhXr.js";import"./transition-D4AbuDdO.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CFB5Y97t.js";import"./index-U4Zd5IK6.js";const be={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},he={style:{display:"flex","align-items":"center",gap:"12px"}},we={key:0,style:{"text-align":"center",padding:"60px"}},Se={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"#faad14"}},Ie={key:3,style:{color:"var(--text-secondary)"}},ze={key:0,style:{"text-align":"center",padding:"60px"}},Re={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Oe={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},je={key:3,style:{color:"#faad14"}},Me={key:4,style:{color:"var(--text-secondary)"}},Ue={key:0,style:{"text-align":"center",padding:"40px"}},Ne={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Be={key:0,style:{"text-align":"center",padding:"40px"}},De={__name:"Analytics",setup(Le){const w=fe(),R=y("all"),N=y(!1),B=y(!1),D=y(!1),L=y(!1),A=y(!1),J=y(!1),$=y(20),v=E({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),O=y([]),j=y([]),f=E({entries:0,hits:0,tokensSaved:0,expired:0}),M=y(!1),b=E({totalCalls:0,inputTokens:0,outputTokens:0,totalTokens:0}),G=y([]),oe=[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:"调用次数",key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"110px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"110px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:"Total",key:"totalTokens",dataIndex:"totalTokens",width:"110px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)}],se=[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px",sorter:(e,t)=>(e.provider||"").localeCompare(t.provider||"")},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0,sorter:(e,t)=>(e.model||"").localeCompare(t.model||"")},{title:"调用次数",key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:"Input Tokens",key:"inputTokens",dataIndex:"inputTokens",width:"120px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:"Output Tokens",key:"outputTokens",dataIndex:"outputTokens",width:"130px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:"Total Tokens",key:"totalTokens",dataIndex:"totalTokens",width:"120px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)},{title:"费用 (USD)",key:"cost",dataIndex:"cost",width:"110px",sorter:(e,t)=>(e.cost||0)-(t.cost||0)},{title:"平均响应",key:"avgResponseTime",dataIndex:"avgResponseTime",width:"110px",sorter:(e,t)=>(e.avgResponseTime||0)-(t.avgResponseTime||0)}],ae=[{title:"时间",key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"Provider",key:"provider",dataIndex:"provider",width:"110px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"90px"},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"90px"},{title:"费用",key:"cost",dataIndex:"cost",width:"100px"},{title:"响应时间",key:"responseTime",dataIndex:"responseTime",width:"100px"}];function h(e){return(e||"").replace(/,/g,"")}function S(e){try{const t=(e||"").trim(),a=t.search(/[{[]/);return a>=0?JSON.parse(t.slice(a)):null}catch{return null}}function le(e){const t=(e||"").split(`
2
2
  `);for(const a of t){const r=a.trim(),_=r.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);_&&(v.totalCalls=parseInt(h(_[1]),10)||0);const i=r.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);i&&(v.totalTokens=parseInt(h(i[1]),10)||0);const c=r.match(/cost\s*[::]\s*\$?([\d,.]+)/i);c&&(v.totalCost=parseFloat(h(c[1]))||0);const u=r.match(/(?:avg|average)\s*(?:response\s*)?time\s*[::]\s*([\d,.]+)/i);u&&(v.avgResponseTime=parseFloat(h(u[1]))||0)}}function ne(e){v.totalCalls=e.totalCalls??e.total_calls??e.calls??0,v.totalTokens=e.totalTokens??e.total_tokens??e.tokens??0,v.totalCost=e.totalCost??e.total_cost??e.cost??0,v.avgResponseTime=e.avgResponseTime??e.avg_response_time??e.avgTime??0}function re(e){return(Array.isArray(e)?e:e.breakdown||e.providers||e.rows||[]).map((a,r)=>({key:r,provider:a.provider||"-",model:a.model||"-",calls:a.calls||a.count||0,inputTokens:a.inputTokens??a.input_tokens??0,outputTokens:a.outputTokens??a.output_tokens??0,totalTokens:a.totalTokens??a.total_tokens??(a.inputTokens??0)+(a.outputTokens??0),cost:a.cost??a.total_cost??0,avgResponseTime:a.avgResponseTime??a.avg_response_time??0}))}function ie(e){return(Array.isArray(e)?e:e.recent||e.records||e.rows||[]).map((a,r)=>({key:r,timestamp:a.timestamp||a.time||a.created_at||"-",provider:a.provider||"-",model:a.model||"-",inputTokens:a.inputTokens??a.input_tokens??0,outputTokens:a.outputTokens??a.output_tokens??0,cost:a.cost??0,responseTime:a.responseTime??a.response_time??0}))}function ue(e){f.entries=e.entries??e.count??e.size??0,f.hits=e.hits??e.cacheHits??e.cache_hits??0,f.tokensSaved=e.tokensSaved??e.tokens_saved??0,f.expired=e.expired??e.expiredCount??e.expired_count??0}function de(e){const t=(e||"").split(`
3
- `);for(const a of t){const r=a.trim(),_=r.match(/entries?\s*[::]\s*([\d,]+)/i);_&&(f.entries=parseInt(h(_[1]),10)||0);const i=r.match(/hits?\s*[::]\s*([\d,]+)/i);i&&(f.hits=parseInt(h(i[1]),10)||0);const c=r.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);c&&(f.tokensSaved=parseInt(h(c[1]),10)||0);const u=r.match(/expired?\s*[::]\s*([\d,]+)/i);u&&(f.expired=parseInt(h(u[1]),10)||0)}}async function H(){U.value=!0;try{const{output:e}=await w.execute(`tokens show --period ${R.value} --json`,15e3),t=S(e);t?ne(t):le(e)}catch(e){console.error("loadSummary failed:",e)}finally{U.value=!1}}async function ce(){B.value=!0;try{const{output:e}=await w.execute("tokens breakdown --json",15e3),t=S(e);t?O.value=re(t):O.value=[]}catch(e){console.error("loadBreakdown failed:",e),O.value=[]}finally{B.value=!1}}async function X(){D.value=!0;try{const{output:e}=await w.execute(`tokens recent --limit ${F.value} --json`,15e3),t=S(e);t?j.value=ie(t):j.value=[]}catch(e){console.error("loadRecent failed:",e),j.value=[]}finally{D.value=!1}}async function J(){L.value=!0;try{const{output:e}=await w.execute("tokens cache --json",15e3),t=S(e);t?ue(t):de(e)}catch(e){console.error("loadCache failed:",e)}finally{L.value=!1}}async function pe(){A.value=!0;try{const{output:e}=await w.execute("tokens cache --clear --json",15e3),t=S(e);t&&t.error?C.error("清理缓存失败: "+t.error):(C.success("缓存已清理"),await J())}catch(e){C.error("清理缓存失败: "+e.message)}finally{A.value=!1}}async function ke(){$.value=!0;try{const{output:e}=await w.execute("tokens cache --cleanup --json",15e3),t=S(e);t&&t.error?C.error("清理过期失败: "+t.error):(C.success("过期缓存已清理"),await J())}catch(e){C.error("清理过期失败: "+e.message)}finally{$.value=!1}}async function Y(){M.value=!0;try{const e=await w.sendRaw({type:"usage.global",limit:1e3},15e3);if(e.ok&&e.usage){const t=e.usage.total||{};b.totalCalls=t.calls??0,b.inputTokens=t.inputTokens??t.input_tokens??0,b.outputTokens=t.outputTokens??t.output_tokens??0,b.totalTokens=t.totalTokens??t.total_tokens??0,G.value=(e.usage.byModel||[]).map((a,r)=>({key:r,provider:a.provider||"-",model:a.model||"-",calls:a.calls??0,inputTokens:a.inputTokens??a.input_tokens??0,outputTokens:a.outputTokens??a.output_tokens??0,totalTokens:a.totalTokens??a.total_tokens??0}))}}catch(e){console.warn("loadSessionUsage failed (route may not be available):",e.message)}finally{M.value=!1}}async function Z(){await Promise.all([H(),ce(),X(),J(),Y()])}return ge(R,()=>{H()}),_e(Z),(e,t)=>{const a=m("a-radio-button"),r=m("a-radio-group"),_=m("a-button"),i=m("a-statistic"),c=m("a-card"),u=m("a-col"),P=m("a-row"),N=m("a-spin"),V=m("a-tag"),W=m("a-empty"),q=m("a-table"),ve=m("a-space");return n(),p("div",null,[z("div",be,[t[7]||(t[7]=z("div",null,[z("h2",{class:"page-title"},"使用分析"),z("p",{class:"page-sub"},"Token 用量 / 成本 / 缓存")],-1)),z("div",he,[o(r,{value:R.value,"onUpdate:value":t[0]||(t[0]=l=>R.value=l),"button-style":"solid",size:"small"},{default:s(()=>[o(a,{value:"today"},{default:s(()=>[...t[2]||(t[2]=[d("今天",-1)])]),_:1}),o(a,{value:"week"},{default:s(()=>[...t[3]||(t[3]=[d("本周",-1)])]),_:1}),o(a,{value:"month"},{default:s(()=>[...t[4]||(t[4]=[d("本月",-1)])]),_:1}),o(a,{value:"all"},{default:s(()=>[...t[5]||(t[5]=[d("全部",-1)])]),_:1})]),_:1},8,["value"]),o(_,{type:"primary",ghost:"",loading:U.value,onClick:Z},{icon:s(()=>[o(T(K))]),default:s(()=>[t[6]||(t[6]=d(" 刷新 ",-1))]),_:1},8,["loading"])])]),o(P,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"总调用次数",value:v.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[o(T(Q))]),suffix:s(()=>[...t[8]||(t[8]=[d("次",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"总 Token 数",value:v.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:s(()=>[o(T(ee))]),_:1},8,["value"])]),_:1})]),_:1}),o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"总费用",value:v.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:s(()=>[o(T(me))]),suffix:s(()=>[...t[9]||(t[9]=[d("USD",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"平均响应时间",value:v.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:s(()=>[o(T(ee))]),suffix:s(()=>[...t[10]||(t[10]=[d("ms",-1)])]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(c,{title:"Provider 分布",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:s(()=>[B.value?(n(),p("div",we,[o(N,{size:"large"})])):(n(),I(q,{key:1,columns:se,"data-source":O.value,pagination:{pageSize:20,showTotal:l=>`共 ${l} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:l,record:k})=>[l.key==="provider"?(n(),I(V,{key:0,color:"blue"},{default:s(()=>[d(x(k.provider),1)]),_:2},1024)):g("",!0),l.key==="model"?(n(),p("span",Se,x(k.model),1)):g("",!0),l.key==="cost"?(n(),p("span",Ce,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),l.key==="avgResponseTime"?(n(),p("span",Ie,x(k.avgResponseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(W,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(c,{title:"最近调用记录",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:s(()=>[o(r,{value:F.value,"onUpdate:value":t[1]||(t[1]=l=>F.value=l),size:"small",onChange:X},{default:s(()=>[o(a,{value:10},{default:s(()=>[...t[11]||(t[11]=[d("10",-1)])]),_:1}),o(a,{value:20},{default:s(()=>[...t[12]||(t[12]=[d("20",-1)])]),_:1}),o(a,{value:50},{default:s(()=>[...t[13]||(t[13]=[d("50",-1)])]),_:1})]),_:1},8,["value"])]),default:s(()=>[D.value?(n(),p("div",ze,[o(N,{size:"large"})])):(n(),I(q,{key:1,columns:ae,"data-source":j.value,pagination:{pageSize:20,showTotal:l=>`共 ${l} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:l,record:k})=>[l.key==="timestamp"?(n(),p("span",Re,x(k.timestamp),1)):g("",!0),l.key==="provider"?(n(),I(V,{key:1,color:"blue"},{default:s(()=>[d(x(k.provider),1)]),_:2},1024)):g("",!0),l.key==="model"?(n(),p("span",Oe,x(k.model),1)):g("",!0),l.key==="cost"?(n(),p("span",je,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),l.key==="responseTime"?(n(),p("span",Me,x(k.responseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(W,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(c,{title:"Session Token Usage",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:s(()=>[o(_,{size:"small",loading:M.value,onClick:Y,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(T(K))]),default:s(()=>[t[14]||(t[14]=d(" 刷新 ",-1))]),_:1},8,["loading"])]),default:s(()=>[M.value?(n(),p("div",Ne,[o(N)])):(n(),p(Te,{key:1},[o(P,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:s(()=>[o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Session 调用总次数",value:b.totalCalls,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:s(()=>[o(T(Q))]),_:1},8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Input Tokens",value:b.inputTokens,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Output Tokens",value:b.outputTokens,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Total Tokens",value:b.totalTokens,"value-style":{color:"#722ed1",fontSize:"18px"}},null,8,["value"])]),_:1})]),_:1}),o(q,{columns:oe,"data-source":G.value,pagination:!1,size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:l,record:k})=>[l.key==="provider"?(n(),I(V,{key:0,color:"blue"},{default:s(()=>[d(x(k.provider),1)]),_:2},1024)):g("",!0),l.key==="model"?(n(),p("span",Ue,x(k.model),1)):g("",!0)]),emptyText:s(()=>[o(W,{description:"暂无 Session 用量数据 — 使用 cc chat 后刷新"})]),_:1},8,["data-source"])],64))]),_:1}),o(c,{title:"缓存状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:s(()=>[o(ve,null,{default:s(()=>[o(_,{size:"small",loading:$.value,onClick:ke,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(T(te))]),default:s(()=>[t[15]||(t[15]=d(" 清理过期 ",-1))]),_:1},8,["loading"]),o(_,{size:"small",danger:"",loading:A.value,onClick:pe,style:{"border-color":"var(--border-color)"}},{icon:s(()=>[o(T(te))]),default:s(()=>[t[16]||(t[16]=d(" 清理缓存 ",-1))]),_:1},8,["loading"])]),_:1})]),default:s(()=>[L.value?(n(),p("div",Be,[o(N)])):(n(),I(P,{key:1,gutter:[16,16]},{default:s(()=>[o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"缓存条目",value:f.entries,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:s(()=>[o(T(xe))]),_:1},8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"命中次数",value:f.hits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"节省 Token",value:f.tokensSaved,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"已过期",value:f.expired,"value-style":{color:"#ff4d4f",fontSize:"18px"}},null,8,["value"])]),_:1})]),_:1}))]),_:1})])}}},Pe=ye(De,[["__scopeId","data-v-bfaf911e"]]);export{Pe as default};
3
+ `);for(const a of t){const r=a.trim(),_=r.match(/entries?\s*[::]\s*([\d,]+)/i);_&&(f.entries=parseInt(h(_[1]),10)||0);const i=r.match(/hits?\s*[::]\s*([\d,]+)/i);i&&(f.hits=parseInt(h(i[1]),10)||0);const c=r.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);c&&(f.tokensSaved=parseInt(h(c[1]),10)||0);const u=r.match(/expired?\s*[::]\s*([\d,]+)/i);u&&(f.expired=parseInt(h(u[1]),10)||0)}}async function W(){N.value=!0;try{const{output:e}=await w.execute(`tokens show --period ${R.value} --json`,15e3),t=S(e);t?ne(t):le(e)}catch(e){console.error("loadSummary failed:",e)}finally{N.value=!1}}async function ce(){B.value=!0;try{const{output:e}=await w.execute("tokens breakdown --json",15e3),t=S(e);t?O.value=re(t):O.value=[]}catch(e){console.error("loadBreakdown failed:",e),O.value=[]}finally{B.value=!1}}async function K(){D.value=!0;try{const{output:e}=await w.execute(`tokens recent --limit ${$.value} --json`,15e3),t=S(e);t?j.value=ie(t):j.value=[]}catch(e){console.error("loadRecent failed:",e),j.value=[]}finally{D.value=!1}}async function F(){L.value=!0;try{const{output:e}=await w.execute("tokens cache --json",15e3),t=S(e);t?ue(t):de(e)}catch(e){console.error("loadCache failed:",e)}finally{L.value=!1}}async function pe(){A.value=!0;try{const{output:e}=await w.execute("tokens cache --clear --json",15e3),t=S(e);t&&t.error?C.error("清理缓存失败: "+t.error):(C.success("缓存已清理"),await F())}catch(e){C.error("清理缓存失败: "+e.message)}finally{A.value=!1}}async function ke(){J.value=!0;try{const{output:e}=await w.execute("tokens cache --cleanup --json",15e3),t=S(e);t&&t.error?C.error("清理过期失败: "+t.error):(C.success("过期缓存已清理"),await F())}catch(e){C.error("清理过期失败: "+e.message)}finally{J.value=!1}}async function Q(){M.value=!0;try{const e=await w.sendRaw({type:"usage.global",limit:1e3},15e3);if(e.ok&&e.usage){const t=e.usage.total||{};b.totalCalls=t.calls??0,b.inputTokens=t.inputTokens??t.input_tokens??0,b.outputTokens=t.outputTokens??t.output_tokens??0,b.totalTokens=t.totalTokens??t.total_tokens??0,G.value=(e.usage.byModel||[]).map((a,r)=>({key:r,provider:a.provider||"-",model:a.model||"-",calls:a.calls??0,inputTokens:a.inputTokens??a.input_tokens??0,outputTokens:a.outputTokens??a.output_tokens??0,totalTokens:a.totalTokens??a.total_tokens??0}))}}catch(e){console.warn("loadSessionUsage failed (route may not be available):",e.message)}finally{M.value=!1}}async function X(){await Promise.all([W(),ce(),K(),F(),Q()])}return ge(R,()=>{W()}),_e(X),(e,t)=>{const a=m("a-radio-button"),r=m("a-radio-group"),_=m("a-button"),i=m("a-statistic"),c=m("a-card"),u=m("a-col"),P=m("a-row"),U=m("a-spin"),V=m("a-tag"),H=m("a-empty"),q=m("a-table"),ve=m("a-space");return n(),p("div",null,[z("div",be,[t[7]||(t[7]=z("div",null,[z("h2",{class:"page-title"},"使用分析"),z("p",{class:"page-sub"},"Token 用量 / 成本 / 缓存")],-1)),z("div",he,[o(r,{value:R.value,"onUpdate:value":t[0]||(t[0]=l=>R.value=l),"button-style":"solid",size:"small"},{default:s(()=>[o(a,{value:"today"},{default:s(()=>[...t[2]||(t[2]=[d("今天",-1)])]),_:1}),o(a,{value:"week"},{default:s(()=>[...t[3]||(t[3]=[d("本周",-1)])]),_:1}),o(a,{value:"month"},{default:s(()=>[...t[4]||(t[4]=[d("本月",-1)])]),_:1}),o(a,{value:"all"},{default:s(()=>[...t[5]||(t[5]=[d("全部",-1)])]),_:1})]),_:1},8,["value"]),o(_,{type:"primary",ghost:"",loading:N.value,onClick:X},{icon:s(()=>[o(T(Y))]),default:s(()=>[t[6]||(t[6]=d(" 刷新 ",-1))]),_:1},8,["loading"])])]),o(P,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"总调用次数",value:v.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[o(T(Z))]),suffix:s(()=>[...t[8]||(t[8]=[d("次",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"总 Token 数",value:v.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:s(()=>[o(T(ee))]),_:1},8,["value"])]),_:1})]),_:1}),o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"总费用",value:v.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:s(()=>[o(T(me))]),suffix:s(()=>[...t[9]||(t[9]=[d("USD",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(u,{xs:24,sm:12,lg:6},{default:s(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(i,{title:"平均响应时间",value:v.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:s(()=>[o(T(ee))]),suffix:s(()=>[...t[10]||(t[10]=[d("ms",-1)])]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(c,{title:"Provider 分布",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:s(()=>[B.value?(n(),p("div",we,[o(U,{size:"large"})])):(n(),I(q,{key:1,columns:se,"data-source":O.value,pagination:{pageSize:20,showTotal:l=>`共 ${l} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:l,record:k})=>[l.key==="provider"?(n(),I(V,{key:0,color:"blue"},{default:s(()=>[d(x(k.provider),1)]),_:2},1024)):g("",!0),l.key==="model"?(n(),p("span",Se,x(k.model),1)):g("",!0),l.key==="cost"?(n(),p("span",Ce,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),l.key==="avgResponseTime"?(n(),p("span",Ie,x(k.avgResponseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(H,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(c,{title:"最近调用记录",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:s(()=>[o(r,{value:$.value,"onUpdate:value":t[1]||(t[1]=l=>$.value=l),size:"small",onChange:K},{default:s(()=>[o(a,{value:10},{default:s(()=>[...t[11]||(t[11]=[d("10",-1)])]),_:1}),o(a,{value:20},{default:s(()=>[...t[12]||(t[12]=[d("20",-1)])]),_:1}),o(a,{value:50},{default:s(()=>[...t[13]||(t[13]=[d("50",-1)])]),_:1})]),_:1},8,["value"])]),default:s(()=>[D.value?(n(),p("div",ze,[o(U,{size:"large"})])):(n(),I(q,{key:1,columns:ae,"data-source":j.value,pagination:{pageSize:20,showTotal:l=>`共 ${l} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:l,record:k})=>[l.key==="timestamp"?(n(),p("span",Re,x(k.timestamp),1)):g("",!0),l.key==="provider"?(n(),I(V,{key:1,color:"blue"},{default:s(()=>[d(x(k.provider),1)]),_:2},1024)):g("",!0),l.key==="model"?(n(),p("span",Oe,x(k.model),1)):g("",!0),l.key==="cost"?(n(),p("span",je,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),l.key==="responseTime"?(n(),p("span",Me,x(k.responseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(H,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(c,{title:"Session Token Usage",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:s(()=>[o(_,{size:"small",loading:M.value,onClick:Q,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(T(Y))]),default:s(()=>[t[14]||(t[14]=d(" 刷新 ",-1))]),_:1},8,["loading"])]),default:s(()=>[M.value?(n(),p("div",Ue,[o(U)])):(n(),p(Te,{key:1},[o(P,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:s(()=>[o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Session 调用总次数",value:b.totalCalls,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:s(()=>[o(T(Z))]),_:1},8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Input Tokens",value:b.inputTokens,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Output Tokens",value:b.outputTokens,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"Total Tokens",value:b.totalTokens,"value-style":{color:"#722ed1",fontSize:"18px"}},null,8,["value"])]),_:1})]),_:1}),o(q,{columns:oe,"data-source":G.value,pagination:!1,size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:l,record:k})=>[l.key==="provider"?(n(),I(V,{key:0,color:"blue"},{default:s(()=>[d(x(k.provider),1)]),_:2},1024)):g("",!0),l.key==="model"?(n(),p("span",Ne,x(k.model),1)):g("",!0)]),emptyText:s(()=>[o(H,{description:"暂无 Session 用量数据 — 使用 cc chat 后刷新"})]),_:1},8,["data-source"])],64))]),_:1}),o(c,{title:"缓存状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:s(()=>[o(ve,null,{default:s(()=>[o(_,{size:"small",loading:J.value,onClick:ke,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(T(te))]),default:s(()=>[t[15]||(t[15]=d(" 清理过期 ",-1))]),_:1},8,["loading"]),o(_,{size:"small",danger:"",loading:A.value,onClick:pe,style:{"border-color":"var(--border-color)"}},{icon:s(()=>[o(T(te))]),default:s(()=>[t[16]||(t[16]=d(" 清理缓存 ",-1))]),_:1},8,["loading"])]),_:1})]),default:s(()=>[L.value?(n(),p("div",Be,[o(U)])):(n(),I(P,{key:1,gutter:[16,16]},{default:s(()=>[o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"缓存条目",value:f.entries,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:s(()=>[o(T(xe))]),_:1},8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"命中次数",value:f.hits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"节省 Token",value:f.tokensSaved,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["value"])]),_:1}),o(u,{xs:12,sm:6},{default:s(()=>[o(i,{title:"已过期",value:f.expired,"value-style":{color:"#ff4d4f",fontSize:"18px"}},null,8,["value"])]),_:1})]),_:1}))]),_:1})])}}},Ke=ye(De,[["__scopeId","data-v-bfaf911e"]]);export{Ke as default};
@@ -0,0 +1 @@
1
+ import{l as be,m as f,x as t,q as u,B as Ce,C as Oe,v as i,c as e,D as a,E as w,u as s,F as r,G as T,H as j,I as v,J as l,K as we,L as je,r as Se,j as y}from"./vendor-C5RM7MZO.js";import{u as Te}from"./ws-D-sl0vsW.js";import{u as Be,T as Re}from"./index-DaMG8ksh.js";import{_ as Le}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as B,G as R,D as P,M as A,R as D,C as I,a as K,A as M,b as U,c as V,B as F,d as E,e as G,f as W,h as z,S as H,L as $,W as q,i as J,j as Y,P as Q,k as X,l as Z,m as h,n as ee,V as xe,o as te,K as oe,I as Ne}from"./icons-CpgFsfkd.js";const Pe=["src"],Ae={key:0,class:"logo-text"},De={key:0,class:"mode-banner project"},Ie={class:"banner-info"},Ke={class:"banner-name"},Me={key:1,class:"mode-banner global"},Ue=["title"],Ve={key:0,class:"footer-text"},Fe={class:"header-left"},Ee={class:"header-right"},Ge={class:"theme-switcher"},We=["data-theme-key","onClick"],ze={class:"version-tag"},He={__name:"AppLayout",setup($e){const se=Ce(),ne=Oe(),b=Te(),S=Be(),d=Se(!1),k=window.__CC_CONFIG__||{},p=y(()=>k.mode==="project"),le="v5.0.2.49",ae=new URL(""+new URL("logo-DBCYUiWP.png",import.meta.url).href,import.meta.url).href,ie=y(()=>S.current),ue=y(()=>S.config.vars["--menu-mode"]),L=y(()=>{const c=ne.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[c]||c]}),C=y(()=>b.status),de=y(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[b.status]||"default"),re=y(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[b.status]||"未知");function ce(c){S.setTheme(c)}function pe({key:c}){se.push({mcp:"/mcp"}[c]||`/${c}`)}return be(()=>b.connect()),(c,o)=>{const n=u("a-menu-item"),m=u("a-menu-item-group"),g=u("a-menu-divider"),me=u("a-menu"),ye=u("a-badge"),ke=u("a-layout-sider"),x=u("a-tooltip"),_e=u("a-tag"),fe=u("a-layout-header"),ve=u("router-view"),ge=u("a-layout-content"),N=u("a-layout");return i(),f(N,{class:"app-root"},{default:t(()=>[e(ke,{collapsed:d.value,"onUpdate:collapsed":o[1]||(o[1]=_=>d.value=_),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:w(["logo",{collapsed:d.value}])},[a("img",{src:s(ae),alt:"ChainlessChain",class:"logo-icon"},null,8,Pe),d.value?T("",!0):(i(),r("span",Ae,"ChainlessChain"))],2),d.value?(i(),r("div",{key:1,class:"mode-icon-sm",title:p.value?s(k).projectName:"全局模式"},[p.value?(i(),f(s(B),{key:0,style:{color:"#1677ff"}})):(i(),f(s(R),{key:1,style:{color:"#722ed1"}}))],8,Ue)):(i(),r(j,{key:0},[p.value?(i(),r("div",De,[e(s(B),{class:"banner-icon"}),a("div",Ie,[a("div",Ke,v(s(k).projectName||"项目"),1),o[2]||(o[2]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(i(),r("div",Me,[e(s(R),{class:"banner-icon"}),o[3]||(o[3]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(me,{selectedKeys:L.value,"onUpdate:selectedKeys":o[0]||(o[0]=_=>L.value=_),theme:ue.value,mode:"inline","inline-collapsed":d.value,class:"side-menu",onClick:pe},{default:t(()=>[d.value?(i(),r(j,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(P))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(A))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(I))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(K))]),_:1}),e(g,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(M))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(U))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(V))]),_:1}),e(g,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(E))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"workflow"},{icon:t(()=>[e(s(W))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(z))]),_:1}),e(g,{class:"divider-sm"}),e(n,{key:"security"},{icon:t(()=>[e(s(H))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(q))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(J))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Q))]),_:1}),e(g,{class:"divider-sm"}),e(n,{key:"wallet"},{icon:t(()=>[e(s(X))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(Z))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(h))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(ee))]),_:1}),e(g,{class:"divider-sm"}),e(n,{key:"rssfeed"},{icon:t(()=>[e(s(te))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(oe))]),_:1})],64)):(i(),r(j,{key:0},[e(m,null,{title:t(()=>[...o[4]||(o[4]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(P))]),default:t(()=>[o[5]||(o[5]=l("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(A))]),default:t(()=>[o[6]||(o[6]=l("AI 对话",-1))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[7]||(o[7]=l("日常协作",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[8]||(o[8]=l("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[9]||(o[9]=l("日志查看",-1))]),_:1})]),_:1}),e(m,null,{title:t(()=>[...o[10]||(o[10]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(M))]),default:t(()=>[o[11]||(o[11]=l("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(U))]),default:t(()=>[o[12]||(o[12]=l("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[13]||(o[13]=l("MCP 工具",-1))]),_:1})]),_:1}),e(m,null,{title:t(()=>[...o[14]||(o[14]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[15]||(o[15]=l("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[16]||(o[16]=l("记忆文件",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[17]||(o[17]=l("定时任务",-1))]),_:1}),e(n,{key:"workflow"},{icon:t(()=>[e(s(W))]),default:t(()=>[o[18]||(o[18]=l("工作流编辑",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(z))]),default:t(()=>[o[19]||(o[19]=l("后台任务",-1))]),_:1})]),_:1}),e(m,null,{title:t(()=>[...o[20]||(o[20]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(n,{key:"security"},{icon:t(()=>[e(s(H))]),default:t(()=>[o[21]||(o[21]=l("安全中心",-1))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),default:t(()=>[o[22]||(o[22]=l("权限管理",-1))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(q))]),default:t(()=>[o[23]||(o[23]=l("P2P 网络",-1))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(J))]),default:t(()=>[o[24]||(o[24]=l("备份同步",-1))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),default:t(()=>[o[25]||(o[25]=l("Git 与数据",-1))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Q))]),default:t(()=>[o[26]||(o[26]=l("项目管理",-1))]),_:1})]),_:1}),e(m,null,{title:t(()=>[...o[27]||(o[27]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(n,{key:"wallet"},{icon:t(()=>[e(s(X))]),default:t(()=>[o[28]||(o[28]=l("钱包管理",-1))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(Z))]),default:t(()=>[o[29]||(o[29]=l("组织管理",-1))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(h))]),default:t(()=>[o[30]||(o[30]=l("使用分析",-1))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(ee))]),default:t(()=>[o[31]||(o[31]=l("模板中心",-1))]),_:1})]),_:1}),e(m,null,{title:t(()=>[...o[32]||(o[32]=[a("span",{class:"group-label"},"媒 体",-1)])]),default:t(()=>[e(n,{key:"video"},{icon:t(()=>[e(s(xe))]),default:t(()=>[o[33]||(o[33]=l("视频剪辑",-1))]),_:1})]),_:1}),e(m,null,{title:t(()=>[...o[34]||(o[34]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(n,{key:"rssfeed"},{icon:t(()=>[e(s(te))]),default:t(()=>[o[35]||(o[35]=l("RSS 订阅",-1))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(oe))]),default:t(()=>[o[36]||(o[36]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:w(["sidebar-footer",{collapsed:d.value}])},[e(ye,{status:de.value},null,8,["status"]),d.value?T("",!0):(i(),r("span",Ve,v(re.value),1))],2)]),_:1},8,["collapsed"]),e(N,{class:"main-area"},{default:t(()=>[e(fe,{class:"app-header"},{default:t(()=>[a("div",Fe,[a("div",{class:w(["scope-tag",p.value?"project":"global"])},[(i(),f(we(p.value?s(B):s(R)))),a("span",null,v(p.value?s(k).projectName||"项目":"全局模式"),1),p.value&&s(k).projectRoot?(i(),f(x,{key:0,title:s(k).projectRoot},{default:t(()=>[e(s(Ne),{class:"info-icon"})]),_:1},8,["title"])):T("",!0)],2)]),a("div",Ee,[a("div",Ge,[(i(!0),r(j,null,je(s(Re),(_,O)=>(i(),f(x,{key:O,title:_.label},{default:t(()=>[a("button",{class:w(["theme-btn",{active:ie.value===O}]),"data-theme-key":O,onClick:qe=>ce(O)},v(_.icon),11,We)]),_:2},1032,["title"]))),128))]),a("span",ze,v(s(le)),1),e(_e,{color:C.value==="connected"?"green":C.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(v(C.value==="connected"?"已连接":C.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(ge,{class:"page-content"},{default:t(()=>[e(ve)]),_:1})]),_:1})]),_:1})}}},he=Le(He,[["__scopeId","data-v-bef6910d"]]);export{he as default};
@@ -0,0 +1 @@
1
+ .app-root[data-v-bef6910d]{min-height:100vh;background:var(--bg-base)}.sidebar[data-v-bef6910d]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s}[data-v-bef6910d] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden}.main-area[data-v-bef6910d]{background:var(--bg-base)}.logo[data-v-bef6910d]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-bef6910d]{padding:0;justify-content:center}.logo-icon[data-v-bef6910d]{width:24px;height:24px;flex-shrink:0;object-fit:contain}.logo-text[data-v-bef6910d]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-bef6910d]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-bef6910d]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-bef6910d]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-bef6910d]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-bef6910d]{color:#722ed1}.banner-info[data-v-bef6910d]{flex:1;min-width:0}.banner-name[data-v-bef6910d]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-bef6910d]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-bef6910d]{color:#c084fc}.mode-icon-sm[data-v-bef6910d]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-bef6910d]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important;flex:1;overflow-y:auto;overflow-x:hidden}.group-label[data-v-bef6910d]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-bef6910d] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-bef6910d] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-bef6910d]{margin:4px 0!important}.sidebar-footer[data-v-bef6910d]{flex-shrink:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-bef6910d]{justify-content:center;padding:8px 0}.footer-text[data-v-bef6910d]{color:var(--text-secondary);font-size:11px}.app-header[data-v-bef6910d]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-bef6910d],.header-right[data-v-bef6910d]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-bef6910d]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-bef6910d]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-bef6910d]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-bef6910d]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-bef6910d]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-bef6910d]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-bef6910d]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-bef6910d]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-bef6910d]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-bef6910d]{margin:0!important;font-size:11px}.page-content[data-v-bef6910d]{padding:24px;overflow:auto;background:var(--bg-base);min-height:calc(100vh - 50px)}
@@ -0,0 +1 @@
1
+ import{u as Me}from"./ws-D-sl0vsW.js";import{_ as Ne}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as Le,U as me,i as re,Y as N,a9 as U,a7 as Te}from"./icons-CpgFsfkd.js";import{l as je,F as s,D as p,c as a,x as o,r as n,q as y,v as l,J as f,u as v,m as b,G as r,I as u,H as De}from"./vendor-C5RM7MZO.js";const Re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ee={key:0,style:{"text-align":"center",padding:"30px"}},Ue={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Je={key:1},Ke={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={key:3,style:{"margin-top":"16px"}},Ge={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"}},He={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},qe={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},We={style:{"font-family":"monospace"}},Ye={key:0},Qe={key:1,style:{"margin-top":"12px"}},Xe={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"}},Ze={key:0,style:{"text-align":"center",padding:"30px"}},et={key:0,style:{"margin-bottom":"16px"}},tt={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"}},at={key:0,style:{"font-family":"monospace","font-size":"12px"}},ot={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},lt={key:0,style:{"text-align":"center",padding:"30px"}},nt={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},st={key:0,style:{"text-align":"center",padding:"30px"}},rt={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},it={key:1},ut={key:2},ct={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},dt={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},pt={key:0,style:{"margin-top":"12px"}},vt={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"}},yt={__name:"Backup",setup(ft){const g=Me(),ie=n("backup"),J=n(!1),K=n(!1),V=n(!1),B=n(""),w=n([]),_=n(""),be=[{title:"备份 ID",key:"id"},{title:"大小",key:"size",width:120},{title:"创建时间",key:"createdAt"},{title:"操作",key:"action",width:100}];async function ue(){K.value=!0,B.value="";try{const{output:t}=await g.execute("backup list --json",15e3),e=M(t);Array.isArray(e)?w.value=e:e&&Array.isArray(e.backups)?w.value=e.backups:(w.value=[],t&&t.trim()&&(_.value=t))}catch(t){B.value=`加载备份列表失败: ${t.message}`}finally{K.value=!1}}async function xe(){V.value=!0,_.value="",B.value="";try{const{output:t}=await g.execute("backup create --json",3e4);_.value=t||"备份已创建",await ue()}catch(t){_.value=`创建备份失败: ${t.message}`}finally{V.value=!1}}const G=n(!1),H=n(!1),k=n(null),z=n("");function _e(t){k.value=t,z.value="",G.value=!0}async function ke(){if(k.value){H.value=!0,z.value="";try{const{output:t}=await g.execute(`backup restore ${k.value.id}`,6e4);z.value=t||"恢复完成"}catch(t){z.value=`恢复失败: ${t.message}`}finally{H.value=!1}}}const q=n(!1),L=n(""),I=n(!1),T=n("未知"),j=n(0),W=n(""),x=n(""),Y=n(!1),Q=n(!1),S=n([]),he=[{title:"文件路径",key:"path"},{title:"冲突类型",key:"type",width:120}];async function X(){q.value=!0,L.value="";try{const{output:t}=await g.execute("sync status --json",15e3),e=M(t);e?(I.value=e.online||e.synced||e.status==="online"||!1,T.value=I.value?"已同步":"未同步",j.value=e.pending??e.pendingChanges??0,W.value=e.lastSync||e.lastSyncTime||""):we(t)}catch(t){L.value=`加载同步状态失败: ${t.message}`}finally{q.value=!1}}function we(t){if(!t){T.value="未知";return}I.value=/synced|online|up.to.date/i.test(t),T.value=I.value?"已同步":"未同步";const e=t.match(/pending[:\s]+(\d+)/i);j.value=e?parseInt(e[1]):0;const c=t.match(/last[:\s]+(.+)/i);c&&(W.value=c[1].trim())}async function ze(){Y.value=!0,x.value="";try{const{output:t}=await g.execute("sync push",3e4);x.value=t||"推送完成",await X()}catch(t){x.value=`推送失败: ${t.message}`}finally{Y.value=!1}}async function Se(){Q.value=!0,x.value="";try{const{output:t}=await g.execute("sync pull",3e4);x.value=t||"拉取完成",await X()}catch(t){x.value=`拉取失败: ${t.message}`}finally{Q.value=!1}}async function Ce(){try{const{output:t}=await g.execute("sync conflicts --json",15e3),e=M(t);Array.isArray(e)?S.value=e:e&&Array.isArray(e.conflicts)?S.value=e.conflicts:S.value=[]}catch{S.value=[]}}const Z=n(!1),D=n(""),C=n(!1),ee=n(""),te=n(!1),O=n(""),A=n([]),Ae=[{title:"CID",key:"cid"},{title:"名称",key:"name"},{title:"大小",key:"size",width:120},{title:"固定时间",key:"pinnedAt"},{title:"操作",key:"action",width:120}];async function Pe(){Z.value=!0,D.value="";try{const{output:t}=await g.execute("ipfs status --json",15e3),e=M(t);if(e)C.value=e.online||e.status==="online"||e.connected||!1,ee.value=e.peerId||e.id||"";else{C.value=t?/online|connected|running/i.test(t):!1;const c=t?t.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;ee.value=c?c[1]:""}}catch(t){D.value=`加载 IPFS 状态失败: ${t.message}`}finally{Z.value=!1}}async function ae(){te.value=!0,O.value="";try{const{output:t}=await g.execute("ipfs pins --json",15e3),e=M(t);Array.isArray(e)?A.value=e:e&&Array.isArray(e.pins)?A.value=e.pins:A.value=[]}catch(t){O.value=`加载固定列表失败: ${t.message}`}finally{te.value=!1}}const oe=n(!1),le=n(!1),R=n(""),F=n("");async function ce(){if(R.value.trim()){le.value=!0,F.value="";try{const{output:t}=await g.execute(`ipfs pin "${R.value.trim()}"`,3e4);F.value=t||"固定成功",await ae()}catch(t){F.value=`固定失败: ${t.message}`}finally{le.value=!1}}}async function $e(t){try{await g.execute(`ipfs unpin ${t.cid}`,15e3),await ae()}catch(e){O.value=`取消固定失败: ${e.message}`}}function M(t){if(!t||!t.trim())return null;try{return JSON.parse(t.trim())}catch{const c=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(c)try{return JSON.parse(c[0])}catch{}return null}}function de(t){if(t==null||isNaN(t))return"-";const e=Number(t);if(e===0)return"0 B";const c=["B","KB","MB","GB","TB"],h=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,h)).toFixed(h>0?1:0)+" "+c[h]}async function pe(){J.value=!0;try{await Promise.all([ue(),X(),Ce(),Pe(),ae()])}finally{J.value=!1}}return je(pe),(t,e)=>{const c=y("a-button"),h=y("a-space"),E=y("a-spin"),ve=y("a-empty"),ne=y("a-table"),m=y("a-card"),ye=y("a-modal"),se=y("a-tab-pane"),P=y("a-statistic"),$=y("a-col"),fe=y("a-row"),ge=y("a-tag"),Be=y("a-popconfirm"),Ie=y("a-input"),Oe=y("a-tabs");return l(),s("div",null,[p("div",Re,[e[6]||(e[6]=p("div",null,[p("h2",{class:"page-title"},"备份与同步"),p("p",{class:"page-sub"},"备份管理 / 数据同步 / IPFS")],-1)),a(c,{type:"primary",ghost:"",loading:J.value,onClick:pe},{icon:o(()=>[a(v(Le))]),default:o(()=>[e[5]||(e[5]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),a(Oe,{activeKey:ie.value,"onUpdate:activeKey":e[4]||(e[4]=i=>ie.value=i),type:"card"},{default:o(()=>[a(se,{key:"backup"},{tab:o(()=>[a(v(re)),e[7]||(e[7]=f(" 备份管理",-1))]),default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:o(()=>[a(h,null,{default:o(()=>[a(v(re)),e[8]||(e[8]=p("span",null,"备份操作",-1))]),_:1})]),extra:o(()=>[a(c,{type:"primary",loading:V.value,onClick:xe},{icon:o(()=>[a(v(me))]),default:o(()=>[e[9]||(e[9]=f(" 创建备份 ",-1))]),_:1},8,["loading"])]),default:o(()=>[K.value?(l(),s("div",Ee,[a(E)])):w.value.length===0&&!_.value?(l(),b(ve,{key:1,description:"暂无备份记录"})):r("",!0),w.value.length>0?(l(),b(ne,{key:2,columns:be,"data-source":w.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:o(({column:i,record:d})=>[i.key==="id"?(l(),s("span",Ue,u(d.id.length>20?d.id.slice(0,20)+"...":d.id),1)):r("",!0),i.key==="size"?(l(),s("span",Je,u(de(d.size)),1)):r("",!0),i.key==="createdAt"?(l(),s("span",Ke,u(d.createdAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(c,{key:3,size:"small",type:"link",onClick:Fe=>_e(d)},{default:o(()=>[...e[10]||(e[10]=[f(" 恢复 ",-1)])]),_:1},8,["onClick"])):r("",!0)]),_:1},8,["data-source"])):r("",!0),_.value?(l(),s("div",Ve,[e[11]||(e[11]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"最近操作结果",-1)),p("pre",Ge,u(_.value),1)])):r("",!0),B.value?(l(),s("div",He,u(B.value),1)):r("",!0)]),_:1}),a(ye,{open:G.value,"onUpdate:open":e[0]||(e[0]=i=>G.value=i),title:"确认恢复备份","ok-text":"确认恢复","cancel-text":"取消","confirm-loading":H.value,onOk:ke,"ok-type":"danger"},{default:o(()=>[e[15]||(e[15]=p("p",{style:{color:"var(--text-secondary)"}}," 确定要恢复以下备份吗?此操作将覆盖当前数据。 ",-1)),k.value?(l(),s("div",qe,[p("div",null,[e[12]||(e[12]=p("strong",null,"备份 ID:",-1)),e[13]||(e[13]=f()),p("span",We,u(k.value.id),1)]),k.value.createdAt?(l(),s("div",Ye,[e[14]||(e[14]=p("strong",null,"创建时间:",-1)),f(" "+u(k.value.createdAt),1)])):r("",!0)])):r("",!0),z.value?(l(),s("div",Qe,[p("pre",Xe,u(z.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),a(se,{key:"sync"},{tab:o(()=>[a(v(N)),e[16]||(e[16]=f(" 数据同步",-1))]),default:o(()=>[q.value?(l(),s("div",Ze,[a(E)])):(l(),s(De,{key:1},[a(fe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"同步状态",value:T.value,"value-style":{color:I.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"待同步变更",value:j.value,"value-style":{color:j.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"最近同步",value:W.value||"无","value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),a(h,{style:{"margin-bottom":"16px"}},{default:o(()=>[a(c,{loading:Y.value,onClick:ze,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(re))]),default:o(()=>[e[17]||(e[17]=f(" 推送 ",-1))]),_:1},8,["loading"]),a(c,{loading:Q.value,onClick:Se,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(N))]),default:o(()=>[e[18]||(e[18]=f(" 拉取 ",-1))]),_:1},8,["loading"])]),_:1}),x.value?(l(),s("div",et,[e[19]||(e[19]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"操作结果",-1)),p("pre",tt,u(x.value),1)])):r("",!0),S.value.length>0?(l(),b(m,{key:1,title:"冲突列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(ne,{columns:he,"data-source":S.value,pagination:!1,size:"small","row-key":"path"},{bodyCell:o(({column:i,record:d})=>[i.key==="path"?(l(),s("span",at,u(d.path),1)):r("",!0),i.key==="type"?(l(),b(ge,{key:1,color:"red"},{default:o(()=>[f(u(d.type||"冲突"),1)]),_:2},1024)):r("",!0)]),_:1},8,["data-source"])]),_:1})):r("",!0)],64)),L.value?(l(),s("div",ot,u(L.value),1)):r("",!0)]),_:1}),a(se,{key:"ipfs"},{tab:o(()=>[a(v(U)),e[20]||(e[20]=f(" IPFS 存储",-1))]),default:o(()=>[a(m,{title:"IPFS 状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(ge,{color:C.value?"green":"default"},{default:o(()=>[f(u(C.value?"在线":"离线"),1)]),_:1},8,["color"])]),default:o(()=>[Z.value?(l(),s("div",lt,[a(E)])):(l(),b(fe,{key:1,gutter:[16,16]},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"节点状态",value:C.value?"已连接":"未连接","value-style":{color:C.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"已固定文件",value:A.value.length,"value-style":{fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"Peer ID",value:ee.value||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1})),D.value?(l(),s("div",nt,u(D.value),1)):r("",!0)]),_:1}),a(m,{title:"固定文件列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(c,{size:"small",onClick:e[1]||(e[1]=i=>oe.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(me))]),default:o(()=>[e[21]||(e[21]=f(" 固定文件 ",-1))]),_:1})]),default:o(()=>[te.value?(l(),s("div",st,[a(E)])):A.value.length===0?(l(),b(ve,{key:1,description:"暂无固定文件"})):(l(),b(ne,{key:2,columns:Ae,"data-source":A.value,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:o(({column:i,record:d})=>[i.key==="cid"?(l(),s("span",rt,u(d.cid.length>24?d.cid.slice(0,24)+"...":d.cid),1)):r("",!0),i.key==="name"?(l(),s("span",it,u(d.name||"-"),1)):r("",!0),i.key==="size"?(l(),s("span",ut,u(de(d.size)),1)):r("",!0),i.key==="pinnedAt"?(l(),s("span",ct,u(d.pinnedAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(Be,{key:4,title:"确定取消固定?","ok-text":"确定","cancel-text":"取消",onConfirm:Fe=>$e(d)},{default:o(()=>[a(c,{size:"small",type:"link",danger:""},{default:o(()=>[a(v(Te)),e[22]||(e[22]=f(" 取消固定 ",-1))]),_:1})]),_:1},8,["onConfirm"])):r("",!0)]),_:1},8,["data-source"])),O.value?(l(),s("div",dt,u(O.value),1)):r("",!0)]),_:1}),a(ye,{open:oe.value,"onUpdate:open":e[3]||(e[3]=i=>oe.value=i),title:"固定文件到 IPFS","confirm-loading":le.value,onOk:ce,"ok-text":"固定","cancel-text":"取消"},{default:o(()=>[e[23]||(e[23]=p("div",{style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},"请输入要固定的文件路径",-1)),a(Ie,{value:R.value,"onUpdate:value":e[2]||(e[2]=i=>R.value=i),placeholder:"文件路径,例如: /path/to/file.txt",onPressEnter:ce},null,8,["value"]),F.value?(l(),s("div",pt,[p("pre",vt,u(F.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1})]),_:1},8,["activeKey"])])}}},_t=Ne(yt,[["__scopeId","data-v-3d5d81e6"]]);export{_t as default};
@@ -0,0 +1 @@
1
+ import{_ as f}from"./useConfigInject-ImjEZhXr.js";import{P as s}from"./index-U4Zd5IK6.js";import{d as w,c as O,s as h,w as k,j as b,r as S}from"./vendor-C5RM7MZO.js";var z=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const K=w({compatConfig:{MODE:3},props:{disabled:s.looseBool,type:s.string,value:s.any,tag:{type:String,default:"input"},size:s.string,onChange:Function,onInput:Function,onBlur:Function,onFocus:Function,onKeydown:Function,onCompositionstart:Function,onCompositionend:Function,onKeyup:Function,onPaste:Function,onMousedown:Function},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{expose:o}=u;const t=h(null);return o({focus:()=>{t.value&&t.value.focus()},blur:()=>{t.value&&t.value.blur()},input:t,setSelectionRange:(l,c,d)=>{var v;(v=t.value)===null||v===void 0||v.setSelectionRange(l,c,d)},select:()=>{var l;(l=t.value)===null||l===void 0||l.select()},getSelectionStart:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionStart},getSelectionEnd:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionEnd},getScrollTop:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.scrollTop}}),()=>{const{tag:l,value:c}=n,d=z(n,["tag","value"]);return O(l,f(f({},d),{},{ref:t,value:c}),null)}}});function A(n){const u=n.getBoundingClientRect(),o=document.documentElement;return{left:u.left+(window.scrollX||o.scrollLeft)-(o.clientLeft||document.body.clientLeft||0),top:u.top+(window.scrollY||o.scrollTop)-(o.clientTop||document.body.clientTop||0)}}function M(n){return Object.keys(n).reduce((u,o)=>{const t=n[o];return typeof t>"u"||t===null||(u+=`${o}: ${n[o]};`),u},"")}var L=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const H=w({compatConfig:{MODE:3},inheritAttrs:!1,props:{disabled:s.looseBool,type:s.string,value:s.any,lazy:s.bool.def(!0),tag:{type:String,default:"input"},size:s.string,style:s.oneOfType([String,Object]),class:s.string},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{emit:o,attrs:t,expose:r}=u;const a=h(null),y=S(),i=S(!1);k([()=>n.value,i],()=>{i.value||(y.value=n.value)},{immediate:!0});const l=e=>{o("change",e)},c=e=>{i.value=!0,e.target.composing=!0,o("compositionstart",e)},d=e=>{i.value=!1,e.target.composing=!1,o("compositionend",e);const p=document.createEvent("HTMLEvents");p.initEvent("input",!0,!0),e.target.dispatchEvent(p),l(e)},v=e=>{if(i.value&&n.lazy){y.value=e.target.value;return}o("input",e)},_=e=>{o("blur",e)},C=e=>{o("focus",e)},E=()=>{a.value&&a.value.focus()},j=()=>{a.value&&a.value.blur()},F=e=>{o("keydown",e)},P=e=>{o("keyup",e)},T=(e,p,g)=>{var m;(m=a.value)===null||m===void 0||m.setSelectionRange(e,p,g)},B=()=>{var e;(e=a.value)===null||e===void 0||e.select()};r({focus:E,blur:j,input:b(()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.input}),setSelectionRange:T,select:B,getSelectionStart:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionStart()},getSelectionEnd:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionEnd()},getScrollTop:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getScrollTop()}});const R=e=>{o("mousedown",e)},x=e=>{o("paste",e)},I=b(()=>n.style&&typeof n.style!="string"?M(n.style):n.style);return()=>{const{style:e,lazy:p}=n,g=L(n,["style","lazy"]);return O(K,f(f(f({},g),t),{},{style:I.value,onInput:v,onChange:l,onBlur:_,onFocus:C,ref:a,value:y.value,onCompositionstart:c,onCompositionend:d,onKeyup:P,onKeydown:F,onPaste:x,onMousedown:R}),null)}}});export{H as B,A as g};
@@ -0,0 +1,2 @@
1
+ import{v as t,F as a,D as s,m as b,u as i,I as u,G as x,E as j,j as m,w as H,l as J,c as d,x as v,H as T,L as M,J as g,O as Q,P as V,q as z,r as B,a as K,n as P}from"./vendor-C5RM7MZO.js";import{u as U}from"./chat-B2uGA8wN.js";import{_ as N}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{u as W,v as X,e as Y,w as Z,x as ee,F as te,G as oe,M as ne,q as se,y as ae}from"./icons-CpgFsfkd.js";import{r as le}from"./markdown-vYH_ziAO.js";import"./ws-D-sl0vsW.js";import"./markdown-xjUYbPSW.js";const ie=["data-testid"],re={class:"cb-action__icon"},de={class:"cb-action__label"},ce={key:0,class:"cb-action__detail"},ue={key:1,class:"cb-action__caret"},pe={__name:"ToolInvocationCard",props:{item:{type:Object,required:!0},expandable:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:["toggle"],setup(r,{emit:y}){const h=r,l=y;function f(){h.expandable&&l("toggle")}return(k,c)=>(t(),a("div",{class:j(["cb-action",[`cb-action--${r.item.status}`,{"cb-action--expandable":r.expandable,"cb-action--open":r.expanded}]]),"data-testid":`tool-card-${r.item.id}`,onClick:f},[s("span",re,[r.item.status==="done"?(t(),b(i(W),{key:0})):r.item.status==="running"?(t(),b(i(X),{key:1})):(t(),b(i(Y),{key:2}))]),s("span",de,u(r.item.label),1),r.item.detail?(t(),a("span",ce,u(r.item.detail),1)):x("",!0),r.expandable?(t(),a("span",ue,[r.expanded?(t(),b(i(Z),{key:0})):(t(),b(i(ee),{key:1}))])):x("",!0)],10,ie))}},ve=N(pe,[["__scopeId","data-v-cf5a0925"]]),xe=["innerHTML"],ye={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(r){const y=r,h=m(()=>le(y.content||""));return(l,f)=>(t(),a("div",{class:"markdown-content",innerHTML:h.value},null,8,xe))}},E=N(ye,[["__scopeId","data-v-693ca57e"]]),fe={style:{display:"flex",height:"calc(100vh - 56px - 48px)",gap:"16px"}},_e={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"}},ge={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"}},me=["title"],be={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"}},ke={style:{padding:"10px 12px","border-bottom":"1px solid var(--border-color)",display:"flex",gap:"8px"}},he={style:{flex:"1","overflow-y":"auto",padding:"8px"}},we=["onClick"],Ce={class:"session-icon"},$e={class:"session-info"},Se={class:"session-title"},Oe={class:"session-meta"},Ie={key:0,style:{"text-align":"center",color:"var(--text-muted)",padding:"24px 0","font-size":"13px"}},Te={style:{flex:"1",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},Me={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},ze={style:{"margin-top":"24px",display:"flex",gap:"12px"}},je={key:0,class:"tool-msg"},Ne={key:0,class:"tool-detail"},Le={class:"tool-detail__pre tool-detail__pre--input"},Re={key:0,class:"tool-detail__result"},qe={class:"tool-detail__pre tool-detail__pre--result"},Be={key:1,class:"user-msg"},Ee={class:"bubble user"},Fe={key:2,class:"assistant-msg"},Ae={key:0,class:"assistant-msg"},De={key:1,class:"question-card"},Ge={class:"question-text"},He={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},Je={key:2,style:{padding:"16px","border-top":"1px solid var(--border-color)"}},Qe={style:{display:"flex",gap:"8px","align-items":"flex-end"}},Ve={__name:"Chat",setup(r){const y=window.__CC_CONFIG__||{},h=m(()=>y.mode==="project"),l=U(),f=B(null),k=B(""),c=m(()=>l.currentSessionId),L=m(()=>c.value?l.getMessages(c.value):[]),I=m(()=>{const n=l.streaming[c.value];return n?.active?n.content:null}),$=m(()=>l.pendingQuestion[c.value]),S=m(()=>l.getIsLoading(c.value)),w=K(new Set);function F(n){w.has(n)?w.delete(n):w.add(n)}function A(n,e){return{id:`tool-${e}`,label:n.tool||"unknown",detail:D(n),status:n.status==="done"?"done":"running"}}function D(n){if(n.status==="running"){const C=n.input&&typeof n.input=="object"?Object.keys(n.input):[];return C.length?`参数 ${C.length} · ${C[0]}…`:"执行中"}if(n.result==null)return"完成";const p=(typeof n.result=="string"?n.result:JSON.stringify(n.result)).split(`
2
+ `)[0]||"";return p.length>48?`${p.slice(0,48)}…`:p||"完成"}async function O(n){await l.createSession(n)}async function R(){if(!k.value.trim()||S.value||!c.value)return;const n=k.value;k.value="",await l.sendMessage(c.value,n)}function q(n){l.answerQuestion(c.value,n)}return H([L,I],()=>{P(()=>{f.value&&(f.value.scrollTop=f.value.scrollHeight)})},{deep:!0}),J(()=>{l.loadSessions()}),(n,e)=>{const p=z("a-button"),C=z("a-input-search"),G=z("a-textarea");return t(),a("div",fe,[s("div",_e,[h.value?(t(),a("div",ge,[d(i(te)),s("span",{style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:i(y).projectRoot},u(i(y).projectName||"项目"),9,me)])):(t(),a("div",be,[d(i(oe)),e[5]||(e[5]=s("span",null,"全局会话",-1))])),s("div",ke,[d(p,{type:"primary",size:"small",style:{flex:"1"},onClick:e[0]||(e[0]=o=>O("chat"))},{icon:v(()=>[d(i(ne))]),default:v(()=>[e[6]||(e[6]=g(" Chat ",-1))]),_:1}),d(p,{size:"small",style:{flex:"1"},onClick:e[1]||(e[1]=o=>O("agent"))},{icon:v(()=>[d(i(se))]),default:v(()=>[e[7]||(e[7]=g(" Agent ",-1))]),_:1})]),s("div",he,[(t(!0),a(T,null,M(i(l).sessions,o=>(t(),a("div",{key:o.id,class:j(["session-item",{active:o.id===i(l).currentSessionId}]),onClick:_=>i(l).switchSession(o.id)},[s("span",Ce,u(o.type==="agent"?"🤖":"💬"),1),s("div",$e,[s("div",Se,u(o.title||"新对话"),1),s("div",Oe,u(o.messageCount||0)+" 条消息",1)])],10,we))),128)),i(l).sessions.length?x("",!0):(t(),a("div",Ie,[...e[8]||(e[8]=[g(" 点击上方按钮",-1),s("br",null,null,-1),g("开始新对话 ",-1)])]))])]),s("div",Te,[c.value?(t(),a("div",{key:1,style:{flex:"1","overflow-y":"auto",padding:"20px"},ref_key:"messagesEl",ref:f},[(t(!0),a(T,null,M(L.value,(o,_)=>(t(),a("div",{key:_,class:j(["message-row",o.role])},[o.role==="tool"?(t(),a("div",je,[d(ve,{item:A(o,_),expandable:"",expanded:w.has(_),onToggle:Ke=>F(_)},null,8,["item","expanded","onToggle"]),w.has(_)?(t(),a("div",Ne,[s("pre",Le,u(JSON.stringify(o.input,null,2)),1),o.result?(t(),a("div",Re,[s("pre",qe,u(typeof o.result=="string"?o.result:JSON.stringify(o.result,null,2)),1)])):x("",!0)])):x("",!0)])):o.role==="user"?(t(),a("div",Be,[s("div",Ee,u(o.content),1)])):(t(),a("div",Fe,[e[14]||(e[14]=s("div",{class:"avatar"},"AI",-1)),d(E,{class:"bubble assistant",content:o.content},null,8,["content"])]))],2))),128)),I.value?(t(),a("div",Ae,[e[15]||(e[15]=s("div",{class:"avatar"},"AI",-1)),d(E,{class:"bubble assistant streaming",content:I.value},null,8,["content"])])):x("",!0),$.value?(t(),a("div",De,[s("div",Ge,u($.value.question),1),$.value.choices?.length?(t(),a("div",He,[(t(!0),a(T,null,M($.value.choices,o=>(t(),b(p,{key:o,size:"small",onClick:_=>q(o)},{default:v(()=>[g(u(o),1)]),_:2},1032,["onClick"]))),128))])):(t(),b(C,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:q}))])):x("",!0)],512)):(t(),a("div",Me,[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",ze,[d(p,{type:"primary",onClick:e[2]||(e[2]=o=>O("chat"))},{default:v(()=>[...e[9]||(e[9]=[g("新建 Chat",-1)])]),_:1}),d(p,{style:{},onClick:e[3]||(e[3]=o=>O("agent"))},{default:v(()=>[...e[10]||(e[10]=[g("新建 Agent",-1)])]),_:1})])])),c.value?(t(),a("div",Je,[s("div",Qe,[d(G,{value:k.value,"onUpdate:value":e[4]||(e[4]=o=>k.value=o),placeholder:S.value?"等待响应中...":"输入消息,Shift+Enter 换行,Enter 发送","auto-size":{minRows:1,maxRows:6},disabled:S.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)",color:"var(--text-primary)",resize:"none",flex:"1"},onKeydown:Q(V(R,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),d(p,{type:"primary",loading:S.value,onClick:R,style:{height:"40px"}},{icon:v(()=>[d(i(ae))]),_:1},8,["loading"])])])):x("",!0)])])}}},tt=N(Ve,[["__scopeId","data-v-868f97d8"]]);export{tt as default};
@@ -0,0 +1 @@
1
+ .cb-action[data-v-cf5a0925]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;background:var(--bg-card-hover);border:1px solid var(--border-color);color:var(--text-secondary);-webkit-user-select:none;user-select:none}.cb-action--expandable[data-v-cf5a0925]{cursor:pointer;transition:border-color .15s ease}.cb-action--expandable[data-v-cf5a0925]:hover{border-color:#1677ff40}.cb-action--open[data-v-cf5a0925]{border-color:#1677ff60}.cb-action__icon[data-v-cf5a0925]{display:inline-flex;align-items:center;justify-content:center;color:#52c41a;font-size:14px}.cb-action--running .cb-action__icon[data-v-cf5a0925]{color:#1677ff}.cb-action--pending .cb-action__icon[data-v-cf5a0925]{color:var(--text-muted)}.cb-action__label[data-v-cf5a0925]{font-weight:600;color:var(--text-primary);font-size:13px}.cb-action__detail[data-v-cf5a0925]{margin-left:auto;font-size:12px;color:var(--text-secondary);max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cb-action__caret[data-v-cf5a0925]{margin-left:6px;color:var(--text-muted);font-size:10px}.cb-action--open .cb-action__caret[data-v-cf5a0925]{color:#1677ff}.markdown-content[data-v-693ca57e] pre{background:var(--bg-base);border-radius:6px;padding:12px;overflow-x:auto;font-size:12px}.markdown-content[data-v-693ca57e] code:not(pre code){background:var(--bg-card-hover);padding:1px 5px;border-radius:3px;font-size:12px;color:#f0a500}.markdown-content[data-v-693ca57e] p{margin:0 0 8px}.markdown-content[data-v-693ca57e] p:last-child{margin:0}.markdown-content[data-v-693ca57e] table{border-collapse:collapse;width:100%;font-size:13px}.markdown-content[data-v-693ca57e] th,.markdown-content[data-v-693ca57e] td{border:1px solid #333;padding:6px 12px}.markdown-content[data-v-693ca57e] th{background:var(--bg-card-hover)}.session-item[data-v-868f97d8]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;cursor:pointer;transition:background .15s;margin-bottom:4px}.session-item[data-v-868f97d8]:hover{background:var(--bg-card-hover)}.session-item.active[data-v-868f97d8]{background:#1677ff20;border:1px solid #1677ff40}.session-icon[data-v-868f97d8]{font-size:16px}.session-info[data-v-868f97d8]{flex:1;min-width:0}.session-title[data-v-868f97d8]{color:#ccc;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-meta[data-v-868f97d8]{color:var(--text-muted);font-size:11px;margin-top:2px}.message-row[data-v-868f97d8]{margin-bottom:16px}.user-msg[data-v-868f97d8]{display:flex;justify-content:flex-end}.assistant-msg[data-v-868f97d8]{display:flex;gap:10px;align-items:flex-start}.avatar[data-v-868f97d8]{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-868f97d8]{padding:10px 14px;border-radius:12px;max-width:80%;line-height:1.6;font-size:14px}.bubble.user[data-v-868f97d8]{background:#1677ff;color:var(--text-primary);border-bottom-right-radius:4px}.bubble.assistant[data-v-868f97d8]{background:var(--bg-card-hover);color:var(--text-primary);border-bottom-left-radius:4px}.bubble.streaming[data-v-868f97d8]:after{content:"▋";animation:blink-868f97d8 .7s step-start infinite;color:#1677ff}@keyframes blink-868f97d8{50%{opacity:0}}.tool-msg[data-v-868f97d8]{margin:8px 0}.tool-detail[data-v-868f97d8]{margin-top:6px;padding:10px 12px;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-base)}.tool-detail__result[data-v-868f97d8]{margin-top:8px;padding-top:8px;border-top:1px solid var(--border-color)}.tool-detail__pre[data-v-868f97d8]{margin:0;font-size:11px;white-space:pre-wrap;word-break:break-all}.tool-detail__pre--input[data-v-868f97d8]{color:#aaa}.tool-detail__pre--result[data-v-868f97d8]{color:#52c41a}.question-card[data-v-868f97d8]{background:var(--bg-card-hover);border:1px solid #1677ff40;border-radius:10px;padding:14px 16px;margin-top:8px}.question-text[data-v-868f97d8]{color:#aaa;font-size:13px}[data-v-868f97d8] .bubble.assistant pre{background:var(--bg-base);border-radius:6px;padding:12px;overflow-x:auto;font-size:12px}[data-v-868f97d8] .bubble.assistant code:not(pre code){background:var(--bg-card-hover);padding:1px 5px;border-radius:3px;font-size:12px;color:#f0a500}[data-v-868f97d8] .bubble.assistant p{margin:0 0 8px}[data-v-868f97d8] .bubble.assistant p:last-child{margin:0}
@@ -0,0 +1 @@
1
+ import{c as E,_ as V}from"./useConfigInject-ImjEZhXr.js";import{_ as o}from"./index-DaMG8ksh.js";import{P as W}from"./index-U4Zd5IK6.js";import{i as F}from"./initDefaultProps-DOj2K4bh.js";import{d as I,r as f,w as M,c as h}from"./vendor-C5RM7MZO.js";var R=function(t,l){var c={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&l.indexOf(n)<0&&(c[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a<n.length;a++)l.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(t,n[a])&&(c[n[a]]=t[n[a]]);return c};const T={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:W.any,required:Boolean},Q=I({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:F(T,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup(t,l){let{attrs:c,emit:n,expose:a}=l;const d=f(t.checked===void 0?t.defaultChecked:t.checked),s=f();M(()=>t.checked,()=>{d.value=t.checked}),a({focus(){var e;(e=s.value)===null||e===void 0||e.focus()},blur(){var e;(e=s.value)===null||e===void 0||e.blur()}});const i=f(),m=e=>{if(t.disabled)return;t.checked===void 0&&(d.value=e.target.checked),e.shiftKey=i.value;const u={target:o(o({},t),{checked:e.target.checked}),stopPropagation(){e.stopPropagation()},preventDefault(){e.preventDefault()},nativeEvent:e};t.checked!==void 0&&(s.value.checked=!!t.checked),n("change",u),i.value=!1},y=e=>{n("click",e),i.value=e.shiftKey};return()=>{const{prefixCls:e,name:u,id:k,type:g,disabled:b,readonly:x,tabindex:C,autofocus:O,value:P,required:S}=t,_=R(t,["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"]),{class:j,onFocus:B,onBlur:w,onKeydown:K,onKeypress:N,onKeyup:D}=c,p=o(o({},_),c),$=Object.keys(p).reduce((v,r)=>((r.startsWith("data-")||r.startsWith("aria-")||r==="role")&&(v[r]=p[r]),v),{}),q=E(e,j,{[`${e}-checked`]:d.value,[`${e}-disabled`]:b}),A=o(o({name:u,id:k,type:g,readonly:x,disabled:b,tabindex:C,class:`${e}-input`,checked:!!d.value,autofocus:O,value:P},$),{onChange:m,onClick:y,onFocus:B,onBlur:w,onKeydown:K,onKeypress:N,onKeyup:D,required:S});return h("span",{class:q},[h("input",V({ref:s},A),null),h("span",{class:`${e}-inner`},null)])}}});export{Q as V};
@@ -0,0 +1 @@
1
+ import{u as O,_ as m,c as _}from"./useConfigInject-ImjEZhXr.js";import{_ as $}from"./index-DaMG8ksh.js";import{u as w,a as G}from"./index-BFFb9yPd.js";import{d as I,c as R,j as g}from"./vendor-C5RM7MZO.js";function A(r){return typeof r=="number"?`${r} ${r} auto`:/^\d+(\.\d+)?(px|em|rem|%)$/.test(r)?`0 0 ${r}`:r}const E=()=>({span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}),F=["xs","sm","md","lg","xl","xxl"],D=I({compatConfig:{MODE:3},name:"ACol",inheritAttrs:!1,props:E(),setup(r,b){let{slots:p,attrs:d}=b;const{gutter:S,supportFlexGap:h,wrap:x}=w(),{prefixCls:f,direction:y}=O("col",r),[N,v]=G(f),j=g(()=>{const{span:n,order:u,offset:s,push:o,pull:c}=r,t=f.value;let i={};return F.forEach(l=>{let e={};const a=r[l];typeof a=="number"?e.span=a:typeof a=="object"&&(e=a||{}),i=$($({},i),{[`${t}-${l}-${e.span}`]:e.span!==void 0,[`${t}-${l}-order-${e.order}`]:e.order||e.order===0,[`${t}-${l}-offset-${e.offset}`]:e.offset||e.offset===0,[`${t}-${l}-push-${e.push}`]:e.push||e.push===0,[`${t}-${l}-pull-${e.pull}`]:e.pull||e.pull===0,[`${t}-rtl`]:y.value==="rtl"})}),_(t,{[`${t}-${n}`]:n!==void 0,[`${t}-order-${u}`]:u,[`${t}-offset-${s}`]:s,[`${t}-push-${o}`]:o,[`${t}-pull-${c}`]:c},i,d.class,v.value)}),C=g(()=>{const{flex:n}=r,u=S.value,s={};if(u&&u[0]>0){const o=`${u[0]/2}px`;s.paddingLeft=o,s.paddingRight=o}if(u&&u[1]>0&&!h.value){const o=`${u[1]/2}px`;s.paddingTop=o,s.paddingBottom=o}return n&&(s.flex=A(n),x.value===!1&&!s.minWidth&&(s.minWidth=0)),s});return()=>{var n;return N(R("div",m(m({},d),{},{class:j.value,style:[C.value,d.style]}),[(n=p.default)===null||n===void 0?void 0:n.call(p)]))}}});export{D as C};
@@ -0,0 +1 @@
1
+ import{g as j,u as k,b as D,_ as I,c as x}from"./useConfigInject-ImjEZhXr.js";import{c as _}from"./createContext-XExBTk9v.js";import{t as v,n as S}from"./index-DaMG8ksh.js";import{P as y}from"./index-U4Zd5IK6.js";import{i as A,a as N,b as O,c as T,d as L,g as w,e as F,f as B}from"./_getTag-CWA3v-Ds.js";import{j as i,d as g,c as b}from"./vendor-C5RM7MZO.js";const E=t=>{const{componentCls:o}=t;return{[o]:{display:"inline-flex","&-block":{display:"flex",width:"100%"},"&-vertical":{flexDirection:"column"}}}},H=t=>{const{componentCls:o}=t;return{[o]:{display:"inline-flex","&-rtl":{direction:"rtl"},"&-vertical":{flexDirection:"column"},"&-align":{flexDirection:"column","&-center":{alignItems:"center"},"&-start":{alignItems:"flex-start"},"&-end":{alignItems:"flex-end"},"&-baseline":{alignItems:"baseline"}},[`${o}-item`]:{"&:empty":{display:"none"}}}}},K=j("Space",t=>[H(t),E(t)]);var M="[object Map]",R="[object Set]",V=Object.prototype,q=V.hasOwnProperty;function h(t){if(t==null)return!0;if(A(t)&&(N(t)||typeof t=="string"||typeof t.splice=="function"||O(t)||T(t)||L(t)))return!t.length;var o=w(t);if(o==M||o==R)return!t.size;if(F(t))return!B(t).length;for(var e in t)if(q.call(t,e))return!1;return!0}const G=()=>({compactSize:String,compactDirection:y.oneOf(v("horizontal","vertical")).def("horizontal"),isFirstItem:S(),isLastItem:S()}),s=_(null),et=(t,o)=>{const e=s.useInject(),a=i(()=>{if(!e||h(e))return"";const{compactDirection:r,isFirstItem:l,isLastItem:n}=e,c=r==="vertical"?"-vertical-":"-";return x({[`${t.value}-compact${c}item`]:!0,[`${t.value}-compact${c}first-item`]:l,[`${t.value}-compact${c}last-item`]:n,[`${t.value}-compact${c}item-rtl`]:o.value==="rtl"})});return{compactSize:i(()=>e?.compactSize),compactDirection:i(()=>e?.compactDirection),compactItemClassnames:a}},ot=g({name:"NoCompactStyle",setup(t,o){let{slots:e}=o;return s.useProvide(null),()=>{var a;return(a=e.default)===null||a===void 0?void 0:a.call(e)}}}),J=()=>({prefixCls:String,size:{type:String},direction:y.oneOf(v("horizontal","vertical")).def("horizontal"),align:y.oneOf(v("start","end","center","baseline")),block:{type:Boolean,default:void 0}}),Q=g({name:"CompactItem",props:G(),setup(t,o){let{slots:e}=o;return s.useProvide(t),()=>{var a;return(a=e.default)===null||a===void 0?void 0:a.call(e)}}}),at=g({name:"ASpaceCompact",inheritAttrs:!1,props:J(),setup(t,o){let{attrs:e,slots:a}=o;const{prefixCls:r,direction:l}=k("space-compact",t),n=s.useInject(),[c,$]=K(r),z=i(()=>x(r.value,$.value,{[`${r.value}-rtl`]:l.value==="rtl",[`${r.value}-block`]:t.block,[`${r.value}-vertical`]:t.direction==="vertical"}));return()=>{var m;const p=D(((m=a.default)===null||m===void 0?void 0:m.call(a))||[]);return p.length===0?null:c(b("div",I(I({},e),{},{class:[z.value,e.class]}),[p.map((u,d)=>{var f;const P=u&&u.key||`${r.value}-item-${d}`,C=!n||h(n);return b(Q,{key:P,compactSize:(f=t.size)!==null&&f!==void 0?f:"middle",compactDirection:t.direction,isFirstItem:d===0&&(C||n?.isFirstItem),isLastItem:d===p.length-1&&(C||n?.isLastItem)},{default:()=>[u]})})]))}}});export{at as C,ot as N,K as a,et as u};
@@ -0,0 +1,6 @@
1
+ import{k as oe,w as ne,r as d,j as z,l as ie,F as i,D as n,c as p,u as s,H as x,L as b,E as $,P as Y,I as r,G as _,J as g,m as k,K as Z,x as v,O as re,q as C,v as a,n as ae}from"./vendor-C5RM7MZO.js";import{u as ee}from"./ws-D-sl0vsW.js";import{u as F}from"./chat-B2uGA8wN.js";import{r as te}from"./markdown-vYH_ziAO.js";import{_ as ce}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as H,h as ue,z as le,H as de,S as pe,o as ve,G as me,r as _e,j as ye,E as fe,J as ge,m as he,N as ke,a as we,s as Se,y as xe}from"./icons-CpgFsfkd.js";import"./markdown-xjUYbPSW.js";const be=[{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}],Ce=oe("cowork",()=>{const K=d(be),t=d(null),y=d([]),w=d(!1),O=d([]),h=d([]),T=d(null),m=d(null),S=d(null),P=d([]),U=d(!1),Q=d(3),A=d(!1),D=d([]),R=F();ne(()=>R.isLoading,o=>{!o&&m.value&&(w.value=!1)});function j(o){t.value=o,q()}function q(){O.value=[],h.value=[],T.value=null,w.value=!1,m.value=null,S.value=null}function E(o){y.value.includes(o)||y.value.push(o)}function B(o){y.value=y.value.filter(e=>e!==o)}async function u(){const o=ee();try{await o.waitConnected(5e3);const e=await o.sendRaw({type:"cowork-templates"},1e4);e?.templates?.length&&(K.value=e.templates)}catch{}}async function l(){const o=ee();try{await o.waitConnected(5e3);const e=await o.sendRaw({type:"cowork-history",limit:50},1e4);e?.entries&&(P.value=e.entries)}catch{}}async function f(o){S.value={mode:"session",message:o},w.value=!0;const e=t.value;let c="";e&&(c=`## 当前任务类型: ${e.name}
2
+ ${e.description||""}`);let I=o;y.value.length&&(I+=`
3
+
4
+ [用户提供的文件: ${y.value.join(", ")}]`),h.value.push({role:"user",content:o,timestamp:Date.now()});const M={systemPromptExtension:c};e?.shellPolicyOverrides&&(M.shellPolicyOverrides=e.shellPolicyOverrides);const se=await R.createSession("agent",M);m.value=se,await R.sendMessage(se,I)}async function N(o){S.value={mode:"direct",message:o};const e=ee();w.value=!0,h.value.push({role:"user",content:o,timestamp:Date.now()});try{await e.waitConnected(8e3);const c={type:"cowork-task",templateId:t.value?.id||null,userMessage:o,files:y.value};U.value&&(c.parallel=!0,c.agents=Q.value);const I=t.value;(A.value||I?.mode==="debate")&&(c.mode="debate",D.value.length&&(c.perspectives=D.value));const M=await e.sendRaw(c,3e5);h.value.push({role:"assistant",content:M.summary||"(No output)",timestamp:Date.now(),toolsUsed:M.toolsUsed||[],iterationCount:M.iterationCount||0}),T.value=M}catch(c){h.value.push({role:"assistant",content:`Error: ${c.message}`,timestamp:Date.now()})}finally{w.value=!1}}const G=z(()=>m.value?F().getMessages(m.value):[]),W=z(()=>{if(!m.value)return null;const e=F().streaming[m.value];return e?.active?e.content:null}),V=z(()=>m.value&&F().pendingQuestion[m.value]||null);function J(o){if(!m.value)return;F().answerQuestion(m.value,o)}async function L(){if(!S.value)return;const{mode:o,message:e}=S.value;o==="direct"?await N(e):await f(e)}async function X(o){if(!m.value)return;const e=F();h.value.push({role:"user",content:o,timestamp:Date.now()});let c=o;y.value.length&&(c+=`
5
+
6
+ [用户提供的文件: ${y.value.join(", ")}]`),await e.sendMessage(m.value,c)}return{selectedTemplate:t,files:y,isRunning:w,steps:O,messages:h,result:T,agentSessionId:m,currentAgentMessages:G,currentStreaming:W,currentQuestion:V,selectTemplate:j,reset:q,addFile:E,removeFile:B,execute:f,executeDirectWs:N,sendFollowUp:X,answerQuestion:J,loadTemplates:u,templates:K,lastRequest:S,retry:L,history:P,loadHistory:l,parallelMode:U,parallelAgents:Q,debateMode:A,debatePerspectives:D}}),Te={class:"cowork-root"},Oe={class:"template-panel"},Me={class:"template-header"},Fe={class:"template-list"},Pe=["onClick"],De={class:"card-icon"},Re={class:"card-body"},Ae={class:"card-name"},Ee={class:"card-desc"},Le={class:"card-icon"},Ie={class:"drop-text"},$e={key:0,class:"file-list"},He={key:1,class:"history-section"},ze={key:0,class:"history-list"},Ue={class:"history-summary"},Qe={class:"history-meta"},qe={class:"exec-panel"},Be={key:0,class:"empty-state"},Ne={class:"empty-icon"},Ve={class:"example-grid"},Je=["onClick"],Ke={key:1,class:"ready-state"},je={class:"ready-header"},Ge={class:"ready-name"},We={key:0,class:"parallel-toggle"},Xe={key:1,class:"parallel-hint"},Ye={class:"ready-examples"},Ze=["onClick"],et={key:0,class:"tool-msg"},tt={class:"tool-input"},st={key:0,class:"tool-result-box"},at={class:"tool-result"},lt={key:1,class:"user-msg"},nt={class:"bubble user"},ot={key:2,class:"assistant-msg"},it=["innerHTML"],rt={key:0,class:"assistant-msg"},ct=["innerHTML"],ut={key:1,class:"question-card"},dt={class:"question-text"},pt={key:0,class:"question-choices"},vt={key:3,class:"debate-panel"},mt={class:"debate-verdict"},_t={class:"consensus"},yt=["innerHTML"],ft={key:4,class:"task-stats"},gt={class:"input-area"},ht={key:0,class:"input-context"},kt={class:"input-row"},wt={__name:"Cowork",setup(K){const t=Ce(),y=F(),w=d(""),O=d(null),h=d(!1),T=d(""),m=d(!1),S=d(!1),P={FileTextOutlined:we,PlayCircleOutlined:ke,BarChartOutlined:he,SearchOutlined:ge,PictureOutlined:fe,CodeOutlined:ye,DesktopOutlined:_e,FolderOpenOutlined:le,GlobalOutlined:me,ReadOutlined:ve,SafetyCertificateOutlined:pe},U=["把 report.docx 转成 PDF","压缩视频到 50MB","分析 CSV 生成图表","查询今天的汇率","批量压缩图片","写一个自动化脚本"],Q=z(()=>y.isLoading?"等待响应中...":t.selectedTemplate?t.selectedTemplate.examples?.[0]||"描述你的需求...":"描述你想完成的任务,Agent 会帮你搞定"),A=z(()=>t.currentAgentMessages);function D(u){return u==="APPROVE"?"green":u==="REJECT"?"red":u==="ERROR"?"default":"orange"}function R(u){return u.split(/[\\/]/).pop()||u}function j(u){h.value=!1;const l=u.dataTransfer?.files;if(l)for(const f of l)t.addFile(f.path||f.name)}function q(){const u=T.value.trim();u&&(t.addFile(u),T.value="")}async function E(){const u=w.value.trim();!u||y.isLoading||(w.value="",t.agentSessionId?await t.sendFollowUp(u):await t.execute(u))}function B(u){w.value=u,ae(()=>E())}return ne([A,()=>t.currentStreaming],()=>{ae(()=>{O.value&&(O.value.scrollTop=O.value.scrollHeight)})},{deep:!0}),ie(()=>{y.loadSessions(),t.loadTemplates(),t.loadHistory()}),(u,l)=>{const f=C("a-tag"),N=C("a-input"),G=C("a-switch"),W=C("a-input-number"),V=C("a-collapse-panel"),J=C("a-collapse"),L=C("a-button"),X=C("a-input-search"),o=C("a-textarea");return a(),i("div",Te,[n("div",Oe,[n("div",Me,[p(s(H),{class:"header-icon"}),l[9]||(l[9]=n("span",{class:"header-title"},"日常协作",-1))]),l[11]||(l[11]=n("div",{class:"template-hint"},"选择任务类型,或直接输入需求",-1)),n("div",Fe,[(a(!0),i(x,null,b(s(t).templates,e=>(a(),i("div",{key:e.id,class:$(["template-card",{active:s(t).selectedTemplate?.id===e.id}]),onClick:c=>s(t).selectTemplate(e)},[n("div",De,[(a(),k(Z(P[e.icon]||s(H))))]),n("div",Re,[n("div",Ae,r(e.name),1),n("div",Ee,r(e.description),1)])],10,Pe))),128)),n("div",{class:$(["template-card free",{active:s(t).selectedTemplate===null&&m.value}]),onClick:l[0]||(l[0]=e=>{s(t).selectTemplate(null),m.value=!0})},[n("div",Le,[p(s(ue))]),l[10]||(l[10]=n("div",{class:"card-body"},[n("div",{class:"card-name"},"自由提问"),n("div",{class:"card-desc"},"任意任务,Agent 自主完成")],-1))],2)]),s(t).selectedTemplate?.acceptsFiles!==!1?(a(),i("div",{key:0,class:$(["file-zone",{dragging:h.value}]),onDragover:l[2]||(l[2]=Y(e=>h.value=!0,["prevent"])),onDragleave:l[3]||(l[3]=e=>h.value=!1),onDrop:Y(j,["prevent"])},[p(s(le),{class:"drop-icon"}),n("div",Ie,r(h.value?"松开以添加文件":"拖拽文件到此处"),1),s(t).files.length?(a(),i("div",$e,[(a(!0),i(x,null,b(s(t).files,e=>(a(),k(f,{key:e,closable:"",onClose:c=>s(t).removeFile(e),class:"file-tag"},{default:v(()=>[g(r(R(e)),1)]),_:2},1032,["onClose"]))),128))])):_("",!0),p(N,{value:T.value,"onUpdate:value":l[1]||(l[1]=e=>T.value=e),placeholder:"或输入文件路径,按 Enter 添加",size:"small",class:"path-input",onPressEnter:q},null,8,["value"])],34)):_("",!0),s(t).history.length?(a(),i("div",He,[n("div",{class:"history-header",onClick:l[4]||(l[4]=e=>S.value=!S.value)},[p(s(de)),g(" 历史记录 ("+r(s(t).history.length)+") ",1)]),S.value?(a(),i("div",ze,[(a(!0),i(x,null,b(s(t).history.slice().reverse().slice(0,20),(e,c)=>(a(),i("div",{key:c,class:$(["history-item",e.status])},[n("div",Ue,r(e.userMessage),1),n("div",Qe,[n("span",null,r(e.templateName||"自由模式"),1),n("span",null,r(e.status),1)])],2))),128))])):_("",!0)])):_("",!0)]),n("div",qe,[!s(t).agentSessionId&&!s(t).selectedTemplate?(a(),i("div",Be,[n("div",Ne,[p(s(H))]),l[12]||(l[12]=n("div",{class:"empty-title"},"选择一个任务模板开始",-1)),l[13]||(l[13]=n("div",{class:"empty-sub"},"或选择「自由提问」处理任何问题",-1)),n("div",Ve,[(a(),i(x,null,b(U,e=>n("div",{key:e,class:"example-chip",onClick:c=>B(e)},r(e),9,Je)),64))])])):s(t).selectedTemplate&&!s(t).agentSessionId?(a(),i("div",Ke,[n("div",je,[(a(),k(Z(P[s(t).selectedTemplate.icon]||s(H)),{class:"ready-icon"})),n("span",Ge,r(s(t).selectedTemplate.name),1)]),s(t).selectedTemplate.parallelStrategy&&s(t).selectedTemplate.parallelStrategy!=="none"?(a(),i("div",We,[p(G,{checked:s(t).parallelMode,"onUpdate:checked":l[5]||(l[5]=e=>s(t).parallelMode=e),size:"small"},null,8,["checked"]),l[14]||(l[14]=n("span",{class:"parallel-label"},"多 Agent 并行",-1)),s(t).parallelMode?(a(),k(W,{key:0,value:s(t).parallelAgents,"onUpdate:value":l[6]||(l[6]=e=>s(t).parallelAgents=e),min:2,max:10,size:"small",class:"agent-count"},null,8,["value"])):_("",!0),s(t).parallelMode?(a(),i("span",Xe,"个 Agent")):_("",!0)])):_("",!0),n("div",Ye,[l[15]||(l[15]=n("div",{class:"example-label"},"试试这些:",-1)),(a(!0),i(x,null,b(s(t).selectedTemplate.examples,e=>(a(),i("div",{key:e,class:"example-chip",onClick:c=>B(e)},r(e),9,Ze))),128))])])):(a(),i("div",{key:2,class:"messages-area",ref_key:"messagesEl",ref:O},[(a(!0),i(x,null,b(A.value,(e,c)=>(a(),i("div",{key:c,class:$(["message-row",e.role])},[e.role==="tool"?(a(),i("div",et,[p(J,{ghost:"",size:"small"},{default:v(()=>[p(V,{class:"tool-collapse"},{header:v(()=>[p(s(Se)),g(" "+r(e.tool)+" "+r(e.status==="running"?"(执行中...)":"✓"),1)]),default:v(()=>[n("pre",tt,r(JSON.stringify(e.input,null,2)),1),e.result?(a(),i("div",st,[n("pre",at,r(typeof e.result=="string"?e.result:JSON.stringify(e.result,null,2)),1)])):_("",!0)]),_:2},1024)]),_:2},1024)])):e.role==="user"?(a(),i("div",lt,[n("div",nt,r(e.content),1)])):(a(),i("div",ot,[l[17]||(l[17]=n("div",{class:"avatar"},"AI",-1)),n("div",{class:"bubble assistant",innerHTML:s(te)(e.content)},null,8,it),e.content?.startsWith("Error:")&&!s(t).isRunning&&s(t).lastRequest?(a(),k(L,{key:0,size:"small",type:"link",onClick:l[7]||(l[7]=I=>s(t).retry())},{default:v(()=>[...l[16]||(l[16]=[g(" 重试 ",-1)])]),_:1})):_("",!0)]))],2))),128)),s(t).currentStreaming?(a(),i("div",rt,[l[18]||(l[18]=n("div",{class:"avatar"},"AI",-1)),n("div",{class:"bubble assistant streaming",innerHTML:s(te)(s(t).currentStreaming)},null,8,ct)])):_("",!0),s(t).currentQuestion?(a(),i("div",ut,[n("div",dt,r(s(t).currentQuestion.question),1),s(t).currentQuestion.choices?.length?(a(),i("div",pt,[(a(!0),i(x,null,b(s(t).currentQuestion.choices,e=>(a(),k(L,{key:e,size:"small",onClick:c=>s(t).answerQuestion(e)},{default:v(()=>[g(r(e),1)]),_:2},1032,["onClick"]))),128))])):(a(),k(X,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:s(t).answerQuestion},null,8,["onSearch"]))])):_("",!0)],512)),s(t).result?.mode==="debate"&&!s(t).isRunning?(a(),i("div",vt,[n("div",mt,[p(f,{color:D(s(t).result.verdict)},{default:v(()=>[g(r(s(t).result.verdict),1)]),_:1},8,["color"]),n("span",_t,"共识 "+r(s(t).result.consensusScore||0)+"/100",1)]),p(J,{ghost:"",size:"small"},{default:v(()=>[(a(!0),i(x,null,b(s(t).result.reviews||[],(e,c)=>(a(),k(V,{key:c,class:"review-collapse"},{header:v(()=>[p(f,{color:D(e.verdict)},{default:v(()=>[g(r(e.verdict),1)]),_:2},1032,["color"]),g(" "+r(e.role),1)]),default:v(()=>[n("div",{class:"review-body",innerHTML:s(te)(e.review)},null,8,yt)]),_:2},1024))),128))]),_:1})])):_("",!0),s(t).result&&!s(t).isRunning?(a(),i("div",ft,[s(t).result.mode==="debate"?(a(),k(f,{key:0,color:"magenta"},{default:v(()=>[...l[19]||(l[19]=[g("debate",-1)])]),_:1})):_("",!0),s(t).result.parallel?(a(),k(f,{key:1,color:"purple"},{default:v(()=>[g(r(s(t).result.subtaskCount||0)+" subtasks",1)]),_:1})):_("",!0),p(f,{color:"geekblue"},{default:v(()=>[g(r(s(t).result.iterationCount||0)+" iterations",1)]),_:1}),p(f,{color:"cyan"},{default:v(()=>[g("~"+r((s(t).result.tokenCount||0).toLocaleString())+" tokens",1)]),_:1}),s(t).result.toolsUsed?.length?(a(),k(f,{key:2,color:"green"},{default:v(()=>[g(r(s(t).result.toolsUsed.length)+" tools",1)]),_:1})):_("",!0)])):_("",!0),n("div",gt,[s(t).selectedTemplate?(a(),i("div",ht,[p(f,{color:"blue",class:"context-tag"},{default:v(()=>[(a(),k(Z(P[s(t).selectedTemplate.icon]||s(H)))),g(" "+r(s(t).selectedTemplate.name),1)]),_:1}),(a(!0),i(x,null,b(s(t).files,e=>(a(),k(f,{key:e,class:"context-tag file"},{default:v(()=>[g(r(R(e)),1)]),_:2},1024))),128))])):_("",!0),n("div",kt,[p(o,{value:w.value,"onUpdate:value":l[8]||(l[8]=e=>w.value=e),placeholder:Q.value,"auto-size":{minRows:1,maxRows:6},disabled:s(y).isLoading,class:"msg-input",onKeydown:re(Y(E,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),p(L,{type:"primary",loading:s(y).isLoading,class:"send-btn",onClick:E},{icon:v(()=>[p(s(xe))]),_:1},8,["loading"])])])])])}}},Ft=ce(wt,[["__scopeId","data-v-3ed36674"]]);export{Ft as default};
@@ -0,0 +1 @@
1
+ .cowork-root[data-v-3ed36674]{display:flex;height:calc(100vh - 104px);gap:16px}.template-panel[data-v-3ed36674]{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-3ed36674]{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-3ed36674]{font-size:18px;color:#1677ff}.template-hint[data-v-3ed36674]{padding:0 16px 12px;font-size:12px;color:var(--text-muted);border-bottom:1px solid var(--border-color)}.template-list[data-v-3ed36674]{flex:1;overflow-y:auto;padding:8px}.template-card[data-v-3ed36674]{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-3ed36674]:hover{background:var(--bg-card-hover)}.template-card.active[data-v-3ed36674]{background:#1677ff14;border-color:#1677ff4d}.template-card.free .card-icon[data-v-3ed36674]{color:#faad14}.card-icon[data-v-3ed36674]{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-3ed36674]{font-size:13px;font-weight:500;color:var(--text-primary)}.card-desc[data-v-3ed36674]{font-size:11px;color:var(--text-muted);margin-top:2px;line-height:1.4}.file-zone[data-v-3ed36674]{padding:12px;border-top:1px solid var(--border-color);text-align:center;transition:background .2s}.file-zone.dragging[data-v-3ed36674]{background:#1677ff14}.drop-icon[data-v-3ed36674]{font-size:20px;color:var(--text-muted)}.drop-text[data-v-3ed36674]{font-size:11px;color:var(--text-muted);margin:4px 0 8px}.file-list[data-v-3ed36674]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px;justify-content:center}.file-tag[data-v-3ed36674]{max-width:140px;overflow:hidden;text-overflow:ellipsis;font-size:11px}.path-input[data-v-3ed36674]{font-size:11px}.exec-panel[data-v-3ed36674]{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-3ed36674],.ready-state[data-v-3ed36674]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 24px}.empty-icon[data-v-3ed36674]{font-size:48px;color:#1677ff40;margin-bottom:16px}.empty-title[data-v-3ed36674]{font-size:16px;color:var(--text-primary);margin-bottom:6px}.empty-sub[data-v-3ed36674]{font-size:13px;color:var(--text-muted);margin-bottom:24px}.ready-header[data-v-3ed36674]{display:flex;align-items:center;gap:10px;margin-bottom:20px}.ready-icon[data-v-3ed36674]{font-size:28px;color:#1677ff}.ready-name[data-v-3ed36674]{font-size:18px;font-weight:600;color:var(--text-primary)}.parallel-toggle[data-v-3ed36674]{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-3ed36674]{font-size:13px;color:var(--text-primary)}.agent-count[data-v-3ed36674]{width:60px}.parallel-hint[data-v-3ed36674]{font-size:12px;color:var(--text-muted)}.ready-examples[data-v-3ed36674]{text-align:center}.example-label[data-v-3ed36674]{font-size:13px;color:var(--text-muted);margin-bottom:12px}.example-grid[data-v-3ed36674]{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:500px}.example-chip[data-v-3ed36674]{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-3ed36674]:hover{border-color:#1677ff;background:#1677ff14;color:#1677ff}.messages-area[data-v-3ed36674]{flex:1;overflow-y:auto;padding:20px}.message-row[data-v-3ed36674]{margin-bottom:16px}.user-msg[data-v-3ed36674]{display:flex;justify-content:flex-end}.assistant-msg[data-v-3ed36674]{display:flex;gap:10px;align-items:flex-start}.avatar[data-v-3ed36674]{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-3ed36674]{padding:10px 14px;border-radius:12px;max-width:80%;line-height:1.6;font-size:14px}.bubble.user[data-v-3ed36674]{background:#1677ff;color:var(--text-primary);border-bottom-right-radius:4px}.bubble.assistant[data-v-3ed36674]{background:var(--bg-card-hover);color:var(--text-primary);border-bottom-left-radius:4px}.bubble.streaming[data-v-3ed36674]:after{content:"○";animation:blink-3ed36674 .7s step-start infinite;color:#1677ff}@keyframes blink-3ed36674{50%{opacity:0}}.tool-msg[data-v-3ed36674]{margin:8px 0}.tool-collapse[data-v-3ed36674]{border:1px solid var(--border-color);border-radius:6px;background:var(--bg-card)}.tool-input[data-v-3ed36674]{margin:0;font-size:11px;color:#aaa;white-space:pre-wrap}.tool-result-box[data-v-3ed36674]{margin-top:8px;padding-top:8px;border-top:1px solid var(--border-color)}.tool-result[data-v-3ed36674]{margin:0;font-size:11px;color:#52c41a;white-space:pre-wrap}.question-card[data-v-3ed36674]{background:var(--bg-card-hover);border:1px solid #1677ff40;border-radius:10px;padding:14px 16px;margin-top:8px}.question-text[data-v-3ed36674]{color:#aaa;font-size:13px}.question-choices[data-v-3ed36674]{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.debate-panel[data-v-3ed36674]{border-top:1px solid var(--border-color);padding:12px 16px;background:var(--bg-card-hover)}.debate-verdict[data-v-3ed36674]{display:flex;align-items:center;gap:12px;margin-bottom:8px;font-size:13px}.consensus[data-v-3ed36674]{color:var(--text-muted);font-size:12px}.review-collapse[data-v-3ed36674]{border-bottom:1px solid var(--border-color)}.review-body[data-v-3ed36674]{font-size:12px;line-height:1.6;color:var(--text-primary);padding:4px 0}.task-stats[data-v-3ed36674]{display:flex;gap:6px;padding:6px 16px;border-top:1px solid var(--border-color);justify-content:flex-end}.input-area[data-v-3ed36674]{padding:12px 16px 16px;border-top:1px solid var(--border-color)}.input-context[data-v-3ed36674]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.context-tag[data-v-3ed36674]{font-size:11px}.context-tag.file[data-v-3ed36674]{background:var(--bg-card-hover)}.input-row[data-v-3ed36674]{display:flex;gap:8px;align-items:flex-end}.msg-input[data-v-3ed36674]{flex:1;background:var(--bg-card-hover);border-color:var(--border-color);color:var(--text-primary);resize:none}.send-btn[data-v-3ed36674]{height:40px}[data-v-3ed36674] .bubble.assistant pre{background:var(--bg-base);border-radius:6px;padding:12px;overflow-x:auto;font-size:12px}[data-v-3ed36674] .bubble.assistant code:not(pre code){background:var(--bg-card-hover);padding:1px 5px;border-radius:3px;font-size:12px;color:#f0a500}[data-v-3ed36674] .bubble.assistant p{margin:0 0 8px}[data-v-3ed36674] .bubble.assistant p:last-child{margin:0}.history-section[data-v-3ed36674]{margin-top:12px;border-top:1px solid var(--border-color);padding-top:8px}.history-header[data-v-3ed36674]{display:flex;align-items:center;gap:6px;font-size:12px;color:#888;cursor:pointer;padding:4px 0}.history-header[data-v-3ed36674]:hover{color:#1677ff}.history-list[data-v-3ed36674]{max-height:200px;overflow-y:auto}.history-item[data-v-3ed36674]{padding:6px 8px;border-radius:6px;margin-bottom:4px;background:var(--bg-card-hover);cursor:default}.history-item.failed[data-v-3ed36674]{border-left:2px solid #ff4d4f}.history-item.completed[data-v-3ed36674]{border-left:2px solid #52c41a}.history-summary[data-v-3ed36674]{font-size:12px;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-meta[data-v-3ed36674]{display:flex;justify-content:space-between;font-size:10px;color:#888;margin-top:2px}
@@ -1,2 +1,2 @@
1
- import{u as Q}from"./ws-Dma34ig_.js";import{O as ee,q as ae,h as te,N as d}from"./antd-Dh2t0vGq.js";import{o as le,a3 as b,a1 as m,k as a,Z as t,X as s,f as x,Y as p,G as f,u as N,F as L,a7 as ne,a5 as w,W as O,a4 as z,c as V}from"./vendor-CN0Iv_qZ.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={key:0,style:{"text-align":"center",padding:"40px"}},re={style:{color:"#e0e0e0","font-weight":"500"}},ue={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ie={key:1,style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px",color:"#91caff","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},fe={__name:"Cron",setup(de){const y=Q(),C=x(!1),$=x(!1),_=x(!1),v=x([]),W=V(()=>v.value.filter(l=>l.enabled).length),S=V(()=>v.value.filter(l=>!l.enabled).length),q=[{label:"每5分钟",cron:"*/5 * * * *"},{label:"每15分钟",cron:"*/15 * * * *"},{label:"每小时",cron:"0 * * * *"},{label:"每天9点",cron:"0 9 * * *"},{label:"每天18点",cron:"0 18 * * *"},{label:"每周一9点",cron:"0 9 * * 1"},{label:"每月1号",cron:"0 9 1 * *"}],o=x({name:"",cron:"",payload:"",description:"",enabled:!0}),A=[{title:"任务名称",key:"name",width:"25%"},{title:"Cron",key:"cron",width:"20%"},{title:"状态",key:"status",width:"15%"},{title:"操作",key:"actions",width:"20%"}];async function T(){C.value=!0;try{const{output:l}=await y.execute('skill run cron-scheduler "list all scheduled tasks"',2e4);v.value=F(l)}catch{v.value=[]}finally{C.value=!1}}function F(l){const e=[],c=l.split(`
2
- `);for(const k of c){const u=k.trim();if(!u||u.startsWith("─"))continue;const i=u.match(/^([^\t|]+?)[\t|]+([*\d/,\-?LW#\s]+)[\t|]+/);i&&e.push({key:e.length,name:i[1].trim(),cron:i[2].trim(),enabled:!u.toLowerCase().includes("pause")&&!u.toLowerCase().includes("disabled"),description:"",running:!1})}return e}function P(l){o.value.cron=l.cron,_.value=!0}async function j(){if(!o.value.name||!o.value.cron){d.warning("请填写任务名称和 Cron 表达式");return}$.value=!0;try{const l=`skill run cron-scheduler "add task: ${o.value.name}, schedule: ${o.value.cron}, payload: ${o.value.payload||"ping"}"`,{output:e}=await y.execute(l,2e4);d.success("任务已创建"),_.value=!1,o.value={name:"",cron:"",payload:"",description:"",enabled:!0},await T()}catch(l){d.error("创建失败: "+l.message)}finally{$.value=!1}}async function D(l){l.running=!0;try{const{output:e}=await y.execute(`skill run cron-scheduler "run task: ${l.name}"`,3e4);d.success(`任务 ${l.name} 已触发`)}catch(e){d.error("触发失败: "+e.message)}finally{l.running=!1}}async function E(l){const e=l.enabled?"pause":"enable";try{await y.execute(`skill run cron-scheduler "${e} task: ${l.name}"`,1e4),l.enabled=!l.enabled,d.success(`任务已${l.enabled?"启用":"暂停"}`)}catch{d.error("操作失败")}}async function G(l){try{await y.execute(`skill run cron-scheduler "delete task: ${l.name}"`,1e4),v.value=v.value.filter(e=>e.key!==l.key),d.success("任务已删除")}catch{d.error("删除失败")}}return le(T),(l,e)=>{const c=s("a-button"),k=s("a-space"),u=s("a-statistic"),i=s("a-card"),h=s("a-col"),I=s("a-row"),M=s("a-spin"),R=s("a-badge"),X=s("a-popconfirm"),Y=s("a-table"),U=s("a-input"),g=s("a-form-item"),Z=s("a-textarea"),H=s("a-switch"),J=s("a-form"),K=s("a-modal");return p(),b("div",null,[m("div",oe,[e[9]||(e[9]=m("div",null,[m("h2",{class:"page-title"},"定时任务"),m("p",{class:"page-sub"},"定时任务调度管理")],-1)),a(k,null,{default:t(()=>[a(c,{onClick:e[0]||(e[0]=n=>_.value=!0),type:"primary"},{icon:t(()=>[a(N(ee))]),default:t(()=>[e[7]||(e[7]=f(" 新建任务 ",-1))]),_:1}),a(c,{ghost:"",loading:C.value,onClick:T},{icon:t(()=>[a(N(ae))]),default:t(()=>[e[8]||(e[8]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),a(I,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"全部任务",value:v.value.length,"value-style":"color: #ccc; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"启用中",value:W.value,"value-style":"color: #52c41a; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"已暂停",value:S.value,"value-style":"color: #faad14; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"预设方案",value:q.length,"value-style":"color: #1677ff; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1})]),_:1}),a(i,{title:"快速添加预设",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},size:"small"},{default:t(()=>[a(k,{wrap:""},{default:t(()=>[(p(),b(L,null,ne(q,n=>a(c,{key:n.label,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)","font-size":"12px"},onClick:r=>P(n)},{default:t(()=>[f(w(n.label),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1}),a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[C.value?(p(),b("div",se,[a(M,{size:"large"})])):(p(),O(Y,{key:1,columns:A,"data-source":v.value,pagination:{pageSize:15},size:"small"},{bodyCell:t(({column:n,record:r})=>[n.key==="name"?(p(),b(L,{key:0},[m("div",re,w(r.name),1),r.description?(p(),b("div",ue,w(r.description),1)):z("",!0)],64)):z("",!0),n.key==="cron"?(p(),b("code",ie,w(r.cron),1)):z("",!0),n.key==="status"?(p(),O(R,{key:2,status:r.enabled?"success":"warning",text:r.enabled?"运行中":"已暂停"},null,8,["status","text"])):z("",!0),n.key==="actions"?(p(),O(k,{key:3,size:"small"},{default:t(()=>[a(c,{size:"small",type:"link",loading:r.running,onClick:B=>D(r)},{default:t(()=>[...e[10]||(e[10]=[f("运行",-1)])]),_:1},8,["loading","onClick"]),a(c,{size:"small",type:"link",onClick:B=>E(r)},{default:t(()=>[f(w(r.enabled?"暂停":"启用"),1)]),_:2},1032,["onClick"]),a(X,{title:"确认删除此任务?",onConfirm:B=>G(r)},{default:t(()=>[a(c,{size:"small",type:"link",danger:""},{default:t(()=>[...e[11]||(e[11]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):z("",!0)]),emptyText:t(()=>[m("div",ce,[a(N(te),{style:{"font-size":"36px","margin-bottom":"12px",display:"block"}}),e[12]||(e[12]=f(" 暂无定时任务 ",-1))])]),_:1},8,["data-source"]))]),_:1}),a(K,{open:_.value,"onUpdate:open":e[6]||(e[6]=n=>_.value=n),title:"新建定时任务","confirm-loading":$.value,onOk:j,width:"520px"},{default:t(()=>[a(J,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:t(()=>[a(g,{label:"任务名称",required:""},{default:t(()=>[a(U,{value:o.value.name,"onUpdate:value":e[1]||(e[1]=n=>o.value.name=n),placeholder:"任务名称"},null,8,["value"])]),_:1}),a(g,{label:"Cron 表达式",required:""},{default:t(()=>[a(U,{value:o.value.cron,"onUpdate:value":e[2]||(e[2]=n=>o.value.cron=n),placeholder:"如: 0 9 * * * (每天9点)"},null,8,["value"]),e[13]||(e[13]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},"格式: 分 时 日 月 周",-1))]),_:1}),a(g,{label:"任务内容",required:""},{default:t(()=>[a(Z,{value:o.value.payload,"onUpdate:value":e[3]||(e[3]=n=>o.value.payload=n),rows:3,placeholder:"要执行的 AI 任务描述..."},null,8,["value"])]),_:1}),a(g,{label:"描述"},{default:t(()=>[a(U,{value:o.value.description,"onUpdate:value":e[4]||(e[4]=n=>o.value.description=n),placeholder:"可选描述"},null,8,["value"])]),_:1}),a(g,{label:"立即启用"},{default:t(()=>[a(H,{checked:o.value.enabled,"onUpdate:checked":e[5]||(e[5]=n=>o.value.enabled=n)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}};export{fe as default};
1
+ import{u as Z}from"./ws-D-sl0vsW.js";import{U as ee,p as ae,e as te}from"./icons-CpgFsfkd.js";import{a as d}from"./index-DwMlStra.js";import{l as le,F as b,D as v,c as a,x as t,q as s,r as x,v as p,J as f,u as L,H as O,L as ne,I as w,m as q,G as z,j as V}from"./vendor-C5RM7MZO.js";import"./index-DaMG8ksh.js";import"./useConfigInject-ImjEZhXr.js";import"./transition-D4AbuDdO.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CFB5Y97t.js";import"./index-U4Zd5IK6.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={key:0,style:{"text-align":"center",padding:"40px"}},re={style:{color:"#e0e0e0","font-weight":"500"}},ue={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ie={key:1,style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px",color:"#91caff","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},we={__name:"Cron",setup(de){const y=Z(),C=x(!1),$=x(!1),_=x(!1),m=x([]),S=V(()=>m.value.filter(l=>l.enabled).length),W=V(()=>m.value.filter(l=>!l.enabled).length),B=[{label:"每5分钟",cron:"*/5 * * * *"},{label:"每15分钟",cron:"*/15 * * * *"},{label:"每小时",cron:"0 * * * *"},{label:"每天9点",cron:"0 9 * * *"},{label:"每天18点",cron:"0 18 * * *"},{label:"每周一9点",cron:"0 9 * * 1"},{label:"每月1号",cron:"0 9 1 * *"}],o=x({name:"",cron:"",payload:"",description:"",enabled:!0}),j=[{title:"任务名称",key:"name",width:"25%"},{title:"Cron",key:"cron",width:"20%"},{title:"状态",key:"status",width:"15%"},{title:"操作",key:"actions",width:"20%"}];async function T(){C.value=!0;try{const{output:l}=await y.execute('skill run cron-scheduler "list all scheduled tasks"',2e4);m.value=A(l)}catch{m.value=[]}finally{C.value=!1}}function A(l){const e=[],c=l.split(`
2
+ `);for(const k of c){const u=k.trim();if(!u||u.startsWith("─"))continue;const i=u.match(/^([^\t|]+?)[\t|]+([*\d/,\-?LW#\s]+)[\t|]+/);i&&e.push({key:e.length,name:i[1].trim(),cron:i[2].trim(),enabled:!u.toLowerCase().includes("pause")&&!u.toLowerCase().includes("disabled"),description:"",running:!1})}return e}function D(l){o.value.cron=l.cron,_.value=!0}async function F(){if(!o.value.name||!o.value.cron){d.warning("请填写任务名称和 Cron 表达式");return}$.value=!0;try{const l=`skill run cron-scheduler "add task: ${o.value.name}, schedule: ${o.value.cron}, payload: ${o.value.payload||"ping"}"`,{output:e}=await y.execute(l,2e4);d.success("任务已创建"),_.value=!1,o.value={name:"",cron:"",payload:"",description:"",enabled:!0},await T()}catch(l){d.error("创建失败: "+l.message)}finally{$.value=!1}}async function I(l){l.running=!0;try{const{output:e}=await y.execute(`skill run cron-scheduler "run task: ${l.name}"`,3e4);d.success(`任务 ${l.name} 已触发`)}catch(e){d.error("触发失败: "+e.message)}finally{l.running=!1}}async function P(l){const e=l.enabled?"pause":"enable";try{await y.execute(`skill run cron-scheduler "${e} task: ${l.name}"`,1e4),l.enabled=!l.enabled,d.success(`任务已${l.enabled?"启用":"暂停"}`)}catch{d.error("操作失败")}}async function E(l){try{await y.execute(`skill run cron-scheduler "delete task: ${l.name}"`,1e4),m.value=m.value.filter(e=>e.key!==l.key),d.success("任务已删除")}catch{d.error("删除失败")}}return le(T),(l,e)=>{const c=s("a-button"),k=s("a-space"),u=s("a-statistic"),i=s("a-card"),h=s("a-col"),G=s("a-row"),H=s("a-spin"),J=s("a-badge"),M=s("a-popconfirm"),R=s("a-table"),U=s("a-input"),g=s("a-form-item"),K=s("a-textarea"),Q=s("a-switch"),X=s("a-form"),Y=s("a-modal");return p(),b("div",null,[v("div",oe,[e[9]||(e[9]=v("div",null,[v("h2",{class:"page-title"},"定时任务"),v("p",{class:"page-sub"},"定时任务调度管理")],-1)),a(k,null,{default:t(()=>[a(c,{onClick:e[0]||(e[0]=n=>_.value=!0),type:"primary"},{icon:t(()=>[a(L(ee))]),default:t(()=>[e[7]||(e[7]=f(" 新建任务 ",-1))]),_:1}),a(c,{ghost:"",loading:C.value,onClick:T},{icon:t(()=>[a(L(ae))]),default:t(()=>[e[8]||(e[8]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),a(G,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"全部任务",value:m.value.length,"value-style":"color: #ccc; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"启用中",value:S.value,"value-style":"color: #52c41a; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"已暂停",value:W.value,"value-style":"color: #faad14; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"预设方案",value:B.length,"value-style":"color: #1677ff; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1})]),_:1}),a(i,{title:"快速添加预设",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},size:"small"},{default:t(()=>[a(k,{wrap:""},{default:t(()=>[(p(),b(O,null,ne(B,n=>a(c,{key:n.label,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)","font-size":"12px"},onClick:r=>D(n)},{default:t(()=>[f(w(n.label),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1}),a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[C.value?(p(),b("div",se,[a(H,{size:"large"})])):(p(),q(R,{key:1,columns:j,"data-source":m.value,pagination:{pageSize:15},size:"small"},{bodyCell:t(({column:n,record:r})=>[n.key==="name"?(p(),b(O,{key:0},[v("div",re,w(r.name),1),r.description?(p(),b("div",ue,w(r.description),1)):z("",!0)],64)):z("",!0),n.key==="cron"?(p(),b("code",ie,w(r.cron),1)):z("",!0),n.key==="status"?(p(),q(J,{key:2,status:r.enabled?"success":"warning",text:r.enabled?"运行中":"已暂停"},null,8,["status","text"])):z("",!0),n.key==="actions"?(p(),q(k,{key:3,size:"small"},{default:t(()=>[a(c,{size:"small",type:"link",loading:r.running,onClick:N=>I(r)},{default:t(()=>[...e[10]||(e[10]=[f("运行",-1)])]),_:1},8,["loading","onClick"]),a(c,{size:"small",type:"link",onClick:N=>P(r)},{default:t(()=>[f(w(r.enabled?"暂停":"启用"),1)]),_:2},1032,["onClick"]),a(M,{title:"确认删除此任务?",onConfirm:N=>E(r)},{default:t(()=>[a(c,{size:"small",type:"link",danger:""},{default:t(()=>[...e[11]||(e[11]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):z("",!0)]),emptyText:t(()=>[v("div",ce,[a(L(te),{style:{"font-size":"36px","margin-bottom":"12px",display:"block"}}),e[12]||(e[12]=f(" 暂无定时任务 ",-1))])]),_:1},8,["data-source"]))]),_:1}),a(Y,{open:_.value,"onUpdate:open":e[6]||(e[6]=n=>_.value=n),title:"新建定时任务","confirm-loading":$.value,onOk:F,width:"520px"},{default:t(()=>[a(X,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:t(()=>[a(g,{label:"任务名称",required:""},{default:t(()=>[a(U,{value:o.value.name,"onUpdate:value":e[1]||(e[1]=n=>o.value.name=n),placeholder:"任务名称"},null,8,["value"])]),_:1}),a(g,{label:"Cron 表达式",required:""},{default:t(()=>[a(U,{value:o.value.cron,"onUpdate:value":e[2]||(e[2]=n=>o.value.cron=n),placeholder:"如: 0 9 * * * (每天9点)"},null,8,["value"]),e[13]||(e[13]=v("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},"格式: 分 时 日 月 周",-1))]),_:1}),a(g,{label:"任务内容",required:""},{default:t(()=>[a(K,{value:o.value.payload,"onUpdate:value":e[3]||(e[3]=n=>o.value.payload=n),rows:3,placeholder:"要执行的 AI 任务描述..."},null,8,["value"])]),_:1}),a(g,{label:"描述"},{default:t(()=>[a(U,{value:o.value.description,"onUpdate:value":e[4]||(e[4]=n=>o.value.description=n),placeholder:"可选描述"},null,8,["value"])]),_:1}),a(g,{label:"立即启用"},{default:t(()=>[a(Q,{checked:o.value.enabled,"onUpdate:checked":e[5]||(e[5]=n=>o.value.enabled=n)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}};export{we as default};
@@ -1,3 +1,3 @@
1
- import{V as le,f as O,o as oe,b as ae,a3 as p,a1 as l,a5 as o,u as r,k as t,Z as s,W as I,a4 as q,c as S,X as x,$ as ne,Y as i,G as m,a8 as X,F as P,a7 as j}from"./vendor-CN0Iv_qZ.js";import{u as B}from"./ws-Dma34ig_.js";import{u as re}from"./chat-BYmuDvol.js";import{_ as ie}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as ue,F as de,r as Y,c as Z,M as J,s as ve,t as ce,b as K,u as pe,d as me}from"./antd-Dh2t0vGq.js";function fe(){return{samples:0,compressedSamples:0,hitRate:0,totalSavedTokens:0,averageSavedTokens:0,totalOriginalTokens:0,totalCompressedTokens:0,netSavingsRate:0,variantDistribution:{},strategyDistribution:[],providerDistribution:[],modelDistribution:[]}}const ye=le("dashboard",()=>{const V=O(!1),E=O(!1),d=O({wsStatus:"disconnected",activeLlm:null,activeModel:null,skillCount:0,sessionCount:0,providerCount:0,appRunning:!1,setupDone:!1,edition:"",mcpCount:null,noteCount:null}),F=O(""),y=O(fe()),v=O({windowPreset:"all",provider:"",model:""});let _=null;function N(n=B()){_||(_=n.onRuntimeEvent(c=>{c.type==="compression:summary"?M(c.payload?.summary||{}):c.type==="session:start"?d.value.sessionCount=(d.value.sessionCount||0)+1:c.type==="session:end"&&(d.value.sessionCount=Math.max(0,(d.value.sessionCount||0)-1))}))}function A(){_&&(_(),_=null)}function M(n){y.value={...y.value,...n||{}}}function U(n){return n==="1h"?3600*1e3:n==="24h"?1440*60*1e3:n==="7d"?10080*60*1e3:null}function R(n){d.value.appRunning=n.includes("Desktop app running"),d.value.setupDone=n.includes("Setup completed");const c=n.match(/Edition:\s+(\S+)/i);c&&(d.value.edition=c[1]);const g=n.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(g)d.value.activeLlm=g[1],d.value.activeModel=g[2];else{const k=n.match(/LLM:\s+(\S+)/i);k&&(d.value.activeLlm=k[1])}}async function f(){const n=B();N(n),E.value=!0;const c={type:"compression-stats",windowMs:U(v.value.windowPreset)};v.value.provider&&(c.provider=v.value.provider),v.value.model&&(c.model=v.value.model);try{const g=await n.sendRaw(c,1e4);M(g.summary||{})}catch{}finally{E.value=!1}}async function b(){const n=B();N(n),V.value=!0,d.value.wsStatus=n.status,F.value="";try{const[c,g]=await Promise.allSettled([n.execute("status",15e3),n.listSessions()]);if(c.status==="fulfilled"){const k=c.value.output;F.value=k.split(`
1
+ import{k as le,r as O,l as oe,M as ae,F as p,D as l,I as o,u as r,c as t,x as s,m as I,G as q,j as S,q as x,B as ne,v as i,J as m,N as J,H as P,L as j}from"./vendor-C5RM7MZO.js";import{u as W}from"./ws-D-sl0vsW.js";import{u as re}from"./chat-B2uGA8wN.js";import{_ as ie}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as ue,F as de,q as K,A as Q,M as X,r as ve,s as ce,a as Y,t as pe,b as me}from"./icons-CpgFsfkd.js";function fe(){return{samples:0,compressedSamples:0,hitRate:0,totalSavedTokens:0,averageSavedTokens:0,totalOriginalTokens:0,totalCompressedTokens:0,netSavingsRate:0,variantDistribution:{},strategyDistribution:[],providerDistribution:[],modelDistribution:[]}}const ye=le("dashboard",()=>{const B=O(!1),E=O(!1),d=O({wsStatus:"disconnected",activeLlm:null,activeModel:null,skillCount:0,sessionCount:0,providerCount:0,appRunning:!1,setupDone:!1,edition:"",mcpCount:null,noteCount:null}),F=O(""),y=O(fe()),v=O({windowPreset:"all",provider:"",model:""});let _=null;function N(n=W()){_||(_=n.onRuntimeEvent(c=>{c.type==="compression:summary"?M(c.payload?.summary||{}):c.type==="session:start"?d.value.sessionCount=(d.value.sessionCount||0)+1:c.type==="session:end"&&(d.value.sessionCount=Math.max(0,(d.value.sessionCount||0)-1))}))}function A(){_&&(_(),_=null)}function M(n){y.value={...y.value,...n||{}}}function U(n){return n==="1h"?3600*1e3:n==="24h"?1440*60*1e3:n==="7d"?10080*60*1e3:null}function R(n){d.value.appRunning=n.includes("Desktop app running"),d.value.setupDone=n.includes("Setup completed");const c=n.match(/Edition:\s+(\S+)/i);c&&(d.value.edition=c[1]);const b=n.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(b)d.value.activeLlm=b[1],d.value.activeModel=b[2];else{const k=n.match(/LLM:\s+(\S+)/i);k&&(d.value.activeLlm=k[1])}}async function f(){const n=W();N(n),E.value=!0;const c={type:"compression-stats",windowMs:U(v.value.windowPreset)};v.value.provider&&(c.provider=v.value.provider),v.value.model&&(c.model=v.value.model);try{const b=await n.sendRaw(c,1e4);M(b.summary||{})}catch{}finally{E.value=!1}}async function g(){const n=W();N(n),B.value=!0,d.value.wsStatus=n.status,F.value="";try{const[c,b]=await Promise.allSettled([n.execute("status",15e3),n.listSessions()]);if(c.status==="fulfilled"){const k=c.value.output;F.value=k.split(`
2
2
  `).slice(0,20).join(`
3
- `),R(k)}g.status==="fulfilled"&&(d.value.sessionCount=g.value.length),Promise.allSettled([n.execute("skill sources",15e3),n.execute("llm providers",15e3)]).then(([k,$])=>{if(k.status==="fulfilled"){const z=k.value.output.match(/(\d+)\s*(?:skills|技能)/i);z&&(d.value.skillCount=parseInt(z[1],10))}if($.status==="fulfilled"){const W=$.value.output.match(/active[:\s]+(\S+)/i);W&&!d.value.activeLlm&&(d.value.activeLlm=W[1])}}),n.execute("mcp servers",1e4).then(({output:k})=>{const $=(k.match(/^[a-z]/gm)||[]).length;d.value.mcpCount=$}).catch(()=>{d.value.mcpCount=0}),await f()}catch{}finally{V.value=!1}}return{loading:V,compressionLoading:E,stats:d,statusLog:F,compression:y,telemetryFilters:v,ensureRuntimeSubscription:N,stopRuntimeSubscription:A,refresh:b,refreshCompression:f,applyCompressionSummary:M,toWindowMs:U}}),_e={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"20px"}},be={class:"page-sub"},ge={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},ke={style:{color:"#91caff","font-weight":"600"}},we={style:{color:"#4a6fa5","font-size":"11px","font-family":"monospace"}},Ce={class:"stat-header"},xe={class:"stat-sub"},Se={class:"stat-header"},he={class:"stat-value",style:{color:"#91caff","font-size":"15px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Re={class:"stat-sub",style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},$e={class:"stat-header"},ze={class:"stat-value",style:{color:"#1677ff"}},De={class:"stat-header"},Le={class:"stat-value",style:{color:"#c084fc"}},Me={class:"stat-header"},Te={class:"stat-sub"},Oe={class:"stat-header"},Pe={class:"stat-value",style:{color:"#13c2c2"}},je={class:"stat-header"},Ee={class:"stat-value",style:{color:"#faad14"}},Fe={class:"status-log"},Ne={class:"telemetry-filter"},Ae={class:"telemetry-filter"},Ie={class:"telemetry-filter"},Ve={class:"telemetry-card"},Ue={class:"telemetry-value"},We={class:"telemetry-sub"},Be={class:"telemetry-card"},Ge={class:"telemetry-value"},He={class:"telemetry-sub"},qe={class:"telemetry-card"},Xe={class:"telemetry-value"},Ye={class:"telemetry-sub"},Ze={class:"telemetry-section"},Je={key:0,class:"telemetry-empty"},Ke={key:1,class:"telemetry-list"},Qe={class:"telemetry-section"},et={key:0,class:"telemetry-empty"},tt={key:1,class:"telemetry-list"},st={class:"telemetry-section"},lt={key:0,class:"telemetry-empty"},ot={key:1,class:"telemetry-list"},at={class:"telemetry-section"},nt={key:0,class:"telemetry-empty"},rt={key:1,class:"telemetry-list"},it={style:{color:"#91caff"}},ut={style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},dt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},vt={style:{color:"var(--text-muted)"}},ct={__name:"Dashboard",setup(V){const E=ne(),d=B(),F=re(),y=ye(),v=window.__CC_CONFIG__||{},_=S(()=>v.mode==="project"),N="v5.0.2.43",A=S(()=>d.status),M=S(()=>y.loading),U=S(()=>y.statusLog),R=S(()=>y.telemetryFilters),f=S(()=>y.compression),b=S(()=>y.stats),n=S(()=>Object.entries(f.value.variantDistribution||{})),c=S(()=>f.value.providerDistribution||[]),g=S(()=>f.value.modelDistribution||[]);async function k(){await y.refresh()}async function $(){await y.refreshCompression()}function z(w){return`${((w||0)*100).toFixed(1)}%`}async function W(){await F.createSession("agent"),E.push("/chat")}return oe(()=>{y.ensureRuntimeSubscription(d),setTimeout(k,300)}),ae(()=>{y.stopRuntimeSubscription()}),(w,e)=>{const D=x("a-button"),G=x("a-tag"),C=x("a-card"),Q=x("a-badge"),u=x("a-col"),h=x("a-row"),ee=x("a-space"),L=x("a-select-option"),H=x("a-select"),T=x("a-descriptions-item"),te=x("a-descriptions");return i(),p("div",null,[l("div",_e,[l("div",null,[e[13]||(e[13]=l("h2",{class:"page-title"},"仪表板",-1)),l("p",be,o(_.value?`项目「${r(v).projectName||"未命名"}」运行概览`:"ChainlessChain 全局运行概览"),1)]),t(D,{type:"primary",ghost:"",loading:M.value,onClick:k},{icon:s(()=>[t(r(ue))]),default:s(()=>[e[14]||(e[14]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),_.value?(i(),I(C,{key:0,style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.25)","margin-bottom":"16px"},size:"small"},{default:s(()=>[l("div",ge,[t(r(de),{style:{color:"#1677ff","font-size":"18px"}}),l("div",null,[l("div",ke,o(r(v).projectName||"项目"),1),l("div",we,o(r(v).projectRoot),1)]),t(G,{color:"blue",style:{"margin-left":"auto"}},{default:s(()=>[...e[15]||(e[15]=[m("项目面板",-1)])]),_:1})])]),_:1})):q("",!0),t(h,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:s(()=>[t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card gateway-card",size:"small"},{default:s(()=>[l("div",Ce,[e[16]||(e[16]=l("span",{class:"stat-label"},"WebSocket Gateway",-1)),t(Q,{status:A.value==="connected"?"success":"error"},null,8,["status"])]),l("div",{class:"stat-value",style:X({color:A.value==="connected"?"#52c41a":"#888"})},o(A.value==="connected"?"运行中":"未连接"),5),l("div",xe,"端口 "+o(r(v).wsPort||18800)+" · "+o(r(v).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small"},{default:s(()=>[l("div",Se,[e[17]||(e[17]=l("span",{class:"stat-label"},"当前 LLM",-1)),t(r(Y),{style:{color:"#1677ff"}})]),l("div",he,o(b.value.activeLlm||"未配置"),1),l("div",Re,o(b.value.activeModel||"—"),1)]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[0]||(e[0]=a=>w.$router.push("/skills"))},{default:s(()=>[l("div",$e,[e[18]||(e[18]=l("span",{class:"stat-label"},"可用技能",-1)),t(r(Z),{style:{color:"#1677ff"}})]),l("div",ze,o(b.value.skillCount||"—"),1),e[19]||(e[19]=l("div",{class:"stat-sub"},"点击管理技能",-1))]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[1]||(e[1]=a=>w.$router.push("/chat"))},{default:s(()=>[l("div",De,[e[20]||(e[20]=l("span",{class:"stat-label"},"AI 会话",-1)),t(r(J),{style:{color:"#722ed1"}})]),l("div",Le,o(b.value.sessionCount),1),e[21]||(e[21]=l("div",{class:"stat-sub"},"点击进入对话",-1))]),_:1})]),_:1})]),_:1}),t(h,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:s(()=>[t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small"},{default:s(()=>[l("div",Me,[e[22]||(e[22]=l("span",{class:"stat-label"},"应用状态",-1)),t(r(ve),{style:X({color:b.value.appRunning?"#52c41a":"#888"})},null,8,["style"])]),l("div",{class:"stat-value",style:X({color:b.value.appRunning?"#52c41a":"#888",fontSize:"15px"})},o(b.value.appRunning?"运行中":b.value.setupDone?"已初始化":"未启动"),5),l("div",Te,o(b.value.edition||"Community")+" Edition",1)]),_:1})]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[2]||(e[2]=a=>w.$router.push("/mcp"))},{default:s(()=>[l("div",Oe,[e[23]||(e[23]=l("span",{class:"stat-label"},"MCP 工具",-1)),t(r(ce),{style:{color:"#13c2c2"}})]),l("div",Pe,o(b.value.mcpCount??"—"),1),e[24]||(e[24]=l("div",{class:"stat-sub"},"已挂载扩展",-1))]),_:1})]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[3]||(e[3]=a=>w.$router.push("/notes"))},{default:s(()=>[l("div",je,[e[25]||(e[25]=l("span",{class:"stat-label"},"知识库笔记",-1)),t(r(K),{style:{color:"#faad14"}})]),l("div",Ee,o(b.value.noteCount??"—"),1),e[26]||(e[26]=l("div",{class:"stat-sub"},"点击管理笔记",-1))]),_:1})]),_:1})]),_:1}),t(h,{gutter:[16,16]},{default:s(()=>[t(u,{xs:24,lg:10},{default:s(()=>[t(C,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)",height:"100%"}},{default:s(()=>[t(ee,{direction:"vertical",style:{width:"100%"},size:"middle"},{default:s(()=>[t(D,{type:"primary",block:"",onClick:e[4]||(e[4]=a=>w.$router.push("/chat"))},{icon:s(()=>[t(r(J))]),default:s(()=>[m(" "+o(_.value?"进入项目 Chat":"新建 AI 对话"),1)]),_:1}),t(D,{block:"",onClick:W,style:{background:"rgba(114,46,209,.12)","border-color":"#722ed1",color:"#722ed1"}},{icon:s(()=>[t(r(Y))]),default:s(()=>[e[27]||(e[27]=m(" 启动 Agent 模式 ",-1))]),_:1}),t(h,{gutter:8},{default:s(()=>[t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[5]||(e[5]=a=>w.$router.push("/services")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(pe))]),default:s(()=>[e[28]||(e[28]=m(" 服务管理 ",-1))]),_:1})]),_:1}),t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[6]||(e[6]=a=>w.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(K))]),default:s(()=>[e[29]||(e[29]=m(" 查看日志 ",-1))]),_:1})]),_:1})]),_:1}),t(h,{gutter:8},{default:s(()=>[t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[7]||(e[7]=a=>w.$router.push("/skills")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(Z))]),default:s(()=>[e[30]||(e[30]=m(" 技能管理 ",-1))]),_:1})]),_:1}),t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[8]||(e[8]=a=>w.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(me))]),default:s(()=>[e[31]||(e[31]=m(" LLM 配置 ",-1))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),t(u,{xs:24,lg:14},{default:s(()=>[t(C,{title:"最近状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},loading:M.value},{extra:s(()=>[t(D,{type:"link",size:"small",onClick:e[9]||(e[9]=a=>w.$router.push("/logs"))},{default:s(()=>[...e[32]||(e[32]=[m("查看更多",-1)])]),_:1})]),default:s(()=>[l("pre",Fe,o(U.value||"点击刷新加载系统状态..."),1)]),_:1},8,["loading"])]),_:1})]),_:1}),t(C,{title:"压缩策略观测",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"},loading:M.value},{default:s(()=>[t(h,{gutter:[12,12],style:{"margin-bottom":"12px"}},{default:s(()=>[t(u,{xs:24,md:8},{default:s(()=>[l("div",Ne,[e[37]||(e[37]=l("div",{class:"telemetry-filter-label"},"时间窗口",-1)),t(H,{value:R.value.windowPreset,"onUpdate:value":e[10]||(e[10]=a=>R.value.windowPreset=a),style:{width:"100%"},onChange:$},{default:s(()=>[t(L,{value:"all"},{default:s(()=>[...e[33]||(e[33]=[m("全部样本",-1)])]),_:1}),t(L,{value:"1h"},{default:s(()=>[...e[34]||(e[34]=[m("近 1 小时",-1)])]),_:1}),t(L,{value:"24h"},{default:s(()=>[...e[35]||(e[35]=[m("近 24 小时",-1)])]),_:1}),t(L,{value:"7d"},{default:s(()=>[...e[36]||(e[36]=[m("近 7 天",-1)])]),_:1})]),_:1},8,["value"])])]),_:1}),t(u,{xs:24,md:8},{default:s(()=>[l("div",Ae,[e[39]||(e[39]=l("div",{class:"telemetry-filter-label"},"Provider 切片",-1)),t(H,{value:R.value.provider,"onUpdate:value":e[11]||(e[11]=a=>R.value.provider=a),style:{width:"100%"},onChange:$},{default:s(()=>[t(L,{value:""},{default:s(()=>[...e[38]||(e[38]=[m("全部 Provider",-1)])]),_:1}),(i(!0),p(P,null,j(c.value,a=>(i(),I(L,{key:a.key,value:a.key},{default:s(()=>[m(o(a.key),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),t(u,{xs:24,md:8},{default:s(()=>[l("div",Ie,[e[41]||(e[41]=l("div",{class:"telemetry-filter-label"},"Model 切片",-1)),t(H,{value:R.value.model,"onUpdate:value":e[12]||(e[12]=a=>R.value.model=a),style:{width:"100%"},onChange:$},{default:s(()=>[t(L,{value:""},{default:s(()=>[...e[40]||(e[40]=[m("全部 Model",-1)])]),_:1}),(i(!0),p(P,null,j(g.value,a=>(i(),I(L,{key:a.key,value:a.key},{default:s(()=>[m(o(a.key),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1})]),_:1}),t(h,{gutter:[12,12]},{default:s(()=>[t(u,{xs:24,sm:8},{default:s(()=>[l("div",Ve,[e[42]||(e[42]=l("div",{class:"telemetry-label"},"压缩命中率",-1)),l("div",Ue,o(z(f.value.hitRate)),1),l("div",We,o(f.value.compressedSamples)+" / "+o(f.value.samples)+" 次压缩产生了有效节省 ",1)])]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[l("div",Be,[e[43]||(e[43]=l("div",{class:"telemetry-label"},"累计节省 Token",-1)),l("div",Ge,o(f.value.totalSavedTokens),1),l("div",He,"平均每次 "+o(f.value.averageSavedTokens)+" Token",1)])]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[l("div",qe,[e[44]||(e[44]=l("div",{class:"telemetry-label"},"净节省率",-1)),l("div",Xe,o(z(f.value.netSavingsRate)),1),l("div",Ye," 原始 "+o(f.value.totalOriginalTokens)+" -> 压缩后 "+o(f.value.totalCompressedTokens),1)])]),_:1})]),_:1}),t(h,{gutter:[16,16],style:{"margin-top":"12px"}},{default:s(()=>[t(u,{xs:24,lg:12},{default:s(()=>[l("div",Ze,[e[45]||(e[45]=l("div",{class:"telemetry-section-title"},"策略命中分布",-1)),f.value.strategyDistribution.length===0?(i(),p("div",Je,"暂无压缩样本")):(i(),p("div",Ke,[(i(!0),p(P,null,j(f.value.strategyDistribution.slice(0,6),a=>(i(),p("div",{key:a.strategy,class:"telemetry-row"},[l("span",null,o(a.strategy),1),l("span",null,o(a.hits)+" 次 · "+o(z(a.hitRate)),1)]))),128))]))])]),_:1}),t(u,{xs:24,lg:12},{default:s(()=>[l("div",Qe,[e[46]||(e[46]=l("div",{class:"telemetry-section-title"},"变体分布",-1)),n.value.length===0?(i(),p("div",et,"暂无变体数据")):(i(),p("div",tt,[(i(!0),p(P,null,j(n.value,([a,se])=>(i(),p("div",{key:a,class:"telemetry-row"},[l("span",null,o(a),1),l("span",null,o(se)+" 次",1)]))),128))]))])]),_:1})]),_:1}),t(h,{gutter:[16,16],style:{"margin-top":"12px"}},{default:s(()=>[t(u,{xs:24,lg:12},{default:s(()=>[l("div",st,[e[47]||(e[47]=l("div",{class:"telemetry-section-title"},"Provider 切片",-1)),c.value.length===0?(i(),p("div",lt,"暂无 Provider 数据")):(i(),p("div",ot,[(i(!0),p(P,null,j(c.value.slice(0,6),a=>(i(),p("div",{key:a.key,class:"telemetry-row"},[l("span",null,o(a.key),1),l("span",null,o(a.samples)+" 次 · "+o(z(a.hitRate)),1)]))),128))]))])]),_:1}),t(u,{xs:24,lg:12},{default:s(()=>[l("div",at,[e[48]||(e[48]=l("div",{class:"telemetry-section-title"},"Model 切片",-1)),g.value.length===0?(i(),p("div",nt,"暂无 Model 数据")):(i(),p("div",rt,[(i(!0),p(P,null,j(g.value.slice(0,6),a=>(i(),p("div",{key:a.key,class:"telemetry-row"},[l("span",null,o(a.key),1),l("span",null,o(a.samples)+" 次 · "+o(a.savedTokens)+" saved",1)]))),128))]))])]),_:1})]),_:1})]),_:1},8,["loading"]),t(C,{title:"运行信息",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:s(()=>[t(te,{column:{xs:1,sm:2,lg:3},size:"small"},{default:s(()=>[t(T,{label:"面板模式"},{default:s(()=>[t(G,{color:_.value?"blue":"purple"},{default:s(()=>[m(o(_.value?"项目级":"全局"),1)]),_:1},8,["color"])]),_:1}),_.value?(i(),I(T,{key:0,label:"项目名称"},{default:s(()=>[l("span",it,o(r(v).projectName||"—"),1)]),_:1})):q("",!0),_.value?(i(),I(T,{key:1,label:"项目路径"},{default:s(()=>[l("span",ut,o(r(v).projectRoot),1)]),_:1})):q("",!0),t(T,{label:"WebSocket"},{default:s(()=>[l("span",dt," ws://"+o(r(v).wsHost||"127.0.0.1")+":"+o(r(v).wsPort||18800),1)]),_:1}),t(T,{label:"认证"},{default:s(()=>[t(G,{color:r(v).wsToken?"green":"default",style:{"font-size":"11px"}},{default:s(()=>[m(o(r(v).wsToken?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),t(T,{label:"版本"},{default:s(()=>[l("span",vt,o(r(N)),1)]),_:1})]),_:1})]),_:1})])}}},bt=ie(ct,[["__scopeId","data-v-ab1b4e86"]]);export{bt as default};
3
+ `),R(k)}b.status==="fulfilled"&&(d.value.sessionCount=b.value.length),Promise.allSettled([n.execute("skill sources",15e3),n.execute("llm providers",15e3)]).then(([k,$])=>{if(k.status==="fulfilled"){const z=k.value.output.match(/(\d+)\s*(?:skills|技能)/i);z&&(d.value.skillCount=parseInt(z[1],10))}if($.status==="fulfilled"){const V=$.value.output.match(/active[:\s]+(\S+)/i);V&&!d.value.activeLlm&&(d.value.activeLlm=V[1])}}),n.execute("mcp servers",1e4).then(({output:k})=>{const $=(k.match(/^[a-z]/gm)||[]).length;d.value.mcpCount=$}).catch(()=>{d.value.mcpCount=0}),await f()}catch{}finally{B.value=!1}}return{loading:B,compressionLoading:E,stats:d,statusLog:F,compression:y,telemetryFilters:v,ensureRuntimeSubscription:N,stopRuntimeSubscription:A,refresh:g,refreshCompression:f,applyCompressionSummary:M,toWindowMs:U}}),_e={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"20px"}},ge={class:"page-sub"},be={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},ke={style:{color:"#91caff","font-weight":"600"}},we={style:{color:"#4a6fa5","font-size":"11px","font-family":"monospace"}},Ce={class:"stat-header"},xe={class:"stat-sub"},Se={class:"stat-header"},he={class:"stat-value",style:{color:"#91caff","font-size":"15px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Re={class:"stat-sub",style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},$e={class:"stat-header"},ze={class:"stat-value",style:{color:"#1677ff"}},De={class:"stat-header"},Le={class:"stat-value",style:{color:"#c084fc"}},Me={class:"stat-header"},Te={class:"stat-sub"},Oe={class:"stat-header"},Pe={class:"stat-value",style:{color:"#13c2c2"}},je={class:"stat-header"},Ee={class:"stat-value",style:{color:"#faad14"}},Fe={class:"status-log"},Ne={class:"telemetry-filter"},Ae={class:"telemetry-filter"},Ie={class:"telemetry-filter"},Be={class:"telemetry-card"},Ue={class:"telemetry-value"},Ve={class:"telemetry-sub"},We={class:"telemetry-card"},Ge={class:"telemetry-value"},He={class:"telemetry-sub"},qe={class:"telemetry-card"},Je={class:"telemetry-value"},Ke={class:"telemetry-sub"},Qe={class:"telemetry-section"},Xe={key:0,class:"telemetry-empty"},Ye={key:1,class:"telemetry-list"},Ze={class:"telemetry-section"},et={key:0,class:"telemetry-empty"},tt={key:1,class:"telemetry-list"},st={class:"telemetry-section"},lt={key:0,class:"telemetry-empty"},ot={key:1,class:"telemetry-list"},at={class:"telemetry-section"},nt={key:0,class:"telemetry-empty"},rt={key:1,class:"telemetry-list"},it={style:{color:"#91caff"}},ut={style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},dt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},vt={style:{color:"var(--text-muted)"}},ct={__name:"Dashboard",setup(B){const E=ne(),d=W(),F=re(),y=ye(),v=window.__CC_CONFIG__||{},_=S(()=>v.mode==="project"),N="v5.0.2.49",A=S(()=>d.status),M=S(()=>y.loading),U=S(()=>y.statusLog),R=S(()=>y.telemetryFilters),f=S(()=>y.compression),g=S(()=>y.stats),n=S(()=>Object.entries(f.value.variantDistribution||{})),c=S(()=>f.value.providerDistribution||[]),b=S(()=>f.value.modelDistribution||[]);async function k(){await y.refresh()}async function $(){await y.refreshCompression()}function z(w){return`${((w||0)*100).toFixed(1)}%`}async function V(){await F.createSession("agent"),E.push("/chat")}return oe(()=>{y.ensureRuntimeSubscription(d),setTimeout(k,300)}),ae(()=>{y.stopRuntimeSubscription()}),(w,e)=>{const D=x("a-button"),G=x("a-tag"),C=x("a-card"),Z=x("a-badge"),u=x("a-col"),h=x("a-row"),ee=x("a-space"),L=x("a-select-option"),H=x("a-select"),T=x("a-descriptions-item"),te=x("a-descriptions");return i(),p("div",null,[l("div",_e,[l("div",null,[e[13]||(e[13]=l("h2",{class:"page-title"},"仪表板",-1)),l("p",ge,o(_.value?`项目「${r(v).projectName||"未命名"}」运行概览`:"ChainlessChain 全局运行概览"),1)]),t(D,{type:"primary",ghost:"",loading:M.value,onClick:k},{icon:s(()=>[t(r(ue))]),default:s(()=>[e[14]||(e[14]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),_.value?(i(),I(C,{key:0,style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.25)","margin-bottom":"16px"},size:"small"},{default:s(()=>[l("div",be,[t(r(de),{style:{color:"#1677ff","font-size":"18px"}}),l("div",null,[l("div",ke,o(r(v).projectName||"项目"),1),l("div",we,o(r(v).projectRoot),1)]),t(G,{color:"blue",style:{"margin-left":"auto"}},{default:s(()=>[...e[15]||(e[15]=[m("项目面板",-1)])]),_:1})])]),_:1})):q("",!0),t(h,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:s(()=>[t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card gateway-card",size:"small"},{default:s(()=>[l("div",Ce,[e[16]||(e[16]=l("span",{class:"stat-label"},"WebSocket Gateway",-1)),t(Z,{status:A.value==="connected"?"success":"error"},null,8,["status"])]),l("div",{class:"stat-value",style:J({color:A.value==="connected"?"#52c41a":"#888"})},o(A.value==="connected"?"运行中":"未连接"),5),l("div",xe,"端口 "+o(r(v).wsPort||18800)+" · "+o(r(v).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small"},{default:s(()=>[l("div",Se,[e[17]||(e[17]=l("span",{class:"stat-label"},"当前 LLM",-1)),t(r(K),{style:{color:"#1677ff"}})]),l("div",he,o(g.value.activeLlm||"未配置"),1),l("div",Re,o(g.value.activeModel||"—"),1)]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[0]||(e[0]=a=>w.$router.push("/skills"))},{default:s(()=>[l("div",$e,[e[18]||(e[18]=l("span",{class:"stat-label"},"可用技能",-1)),t(r(Q),{style:{color:"#1677ff"}})]),l("div",ze,o(g.value.skillCount||"—"),1),e[19]||(e[19]=l("div",{class:"stat-sub"},"点击管理技能",-1))]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[1]||(e[1]=a=>w.$router.push("/chat"))},{default:s(()=>[l("div",De,[e[20]||(e[20]=l("span",{class:"stat-label"},"AI 会话",-1)),t(r(X),{style:{color:"#722ed1"}})]),l("div",Le,o(g.value.sessionCount),1),e[21]||(e[21]=l("div",{class:"stat-sub"},"点击进入对话",-1))]),_:1})]),_:1})]),_:1}),t(h,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:s(()=>[t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small"},{default:s(()=>[l("div",Me,[e[22]||(e[22]=l("span",{class:"stat-label"},"应用状态",-1)),t(r(ve),{style:J({color:g.value.appRunning?"#52c41a":"#888"})},null,8,["style"])]),l("div",{class:"stat-value",style:J({color:g.value.appRunning?"#52c41a":"#888",fontSize:"15px"})},o(g.value.appRunning?"运行中":g.value.setupDone?"已初始化":"未启动"),5),l("div",Te,o(g.value.edition||"Community")+" Edition",1)]),_:1})]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[2]||(e[2]=a=>w.$router.push("/mcp"))},{default:s(()=>[l("div",Oe,[e[23]||(e[23]=l("span",{class:"stat-label"},"MCP 工具",-1)),t(r(ce),{style:{color:"#13c2c2"}})]),l("div",Pe,o(g.value.mcpCount??"—"),1),e[24]||(e[24]=l("div",{class:"stat-sub"},"已挂载扩展",-1))]),_:1})]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[3]||(e[3]=a=>w.$router.push("/notes"))},{default:s(()=>[l("div",je,[e[25]||(e[25]=l("span",{class:"stat-label"},"知识库笔记",-1)),t(r(Y),{style:{color:"#faad14"}})]),l("div",Ee,o(g.value.noteCount??"—"),1),e[26]||(e[26]=l("div",{class:"stat-sub"},"点击管理笔记",-1))]),_:1})]),_:1})]),_:1}),t(h,{gutter:[16,16]},{default:s(()=>[t(u,{xs:24,lg:10},{default:s(()=>[t(C,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)",height:"100%"}},{default:s(()=>[t(ee,{direction:"vertical",style:{width:"100%"},size:"middle"},{default:s(()=>[t(D,{type:"primary",block:"",onClick:e[4]||(e[4]=a=>w.$router.push("/chat"))},{icon:s(()=>[t(r(X))]),default:s(()=>[m(" "+o(_.value?"进入项目 Chat":"新建 AI 对话"),1)]),_:1}),t(D,{block:"",onClick:V,style:{background:"rgba(114,46,209,.12)","border-color":"#722ed1",color:"#722ed1"}},{icon:s(()=>[t(r(K))]),default:s(()=>[e[27]||(e[27]=m(" 启动 Agent 模式 ",-1))]),_:1}),t(h,{gutter:8},{default:s(()=>[t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[5]||(e[5]=a=>w.$router.push("/services")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(pe))]),default:s(()=>[e[28]||(e[28]=m(" 服务管理 ",-1))]),_:1})]),_:1}),t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[6]||(e[6]=a=>w.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(Y))]),default:s(()=>[e[29]||(e[29]=m(" 查看日志 ",-1))]),_:1})]),_:1})]),_:1}),t(h,{gutter:8},{default:s(()=>[t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[7]||(e[7]=a=>w.$router.push("/skills")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(Q))]),default:s(()=>[e[30]||(e[30]=m(" 技能管理 ",-1))]),_:1})]),_:1}),t(u,{span:12},{default:s(()=>[t(D,{block:"",onClick:e[8]||(e[8]=a=>w.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(me))]),default:s(()=>[e[31]||(e[31]=m(" LLM 配置 ",-1))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),t(u,{xs:24,lg:14},{default:s(()=>[t(C,{title:"最近状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},loading:M.value},{extra:s(()=>[t(D,{type:"link",size:"small",onClick:e[9]||(e[9]=a=>w.$router.push("/logs"))},{default:s(()=>[...e[32]||(e[32]=[m("查看更多",-1)])]),_:1})]),default:s(()=>[l("pre",Fe,o(U.value||"点击刷新加载系统状态..."),1)]),_:1},8,["loading"])]),_:1})]),_:1}),t(C,{title:"压缩策略观测",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"},loading:M.value},{default:s(()=>[t(h,{gutter:[12,12],style:{"margin-bottom":"12px"}},{default:s(()=>[t(u,{xs:24,md:8},{default:s(()=>[l("div",Ne,[e[37]||(e[37]=l("div",{class:"telemetry-filter-label"},"时间窗口",-1)),t(H,{value:R.value.windowPreset,"onUpdate:value":e[10]||(e[10]=a=>R.value.windowPreset=a),style:{width:"100%"},onChange:$},{default:s(()=>[t(L,{value:"all"},{default:s(()=>[...e[33]||(e[33]=[m("全部样本",-1)])]),_:1}),t(L,{value:"1h"},{default:s(()=>[...e[34]||(e[34]=[m("近 1 小时",-1)])]),_:1}),t(L,{value:"24h"},{default:s(()=>[...e[35]||(e[35]=[m("近 24 小时",-1)])]),_:1}),t(L,{value:"7d"},{default:s(()=>[...e[36]||(e[36]=[m("近 7 天",-1)])]),_:1})]),_:1},8,["value"])])]),_:1}),t(u,{xs:24,md:8},{default:s(()=>[l("div",Ae,[e[39]||(e[39]=l("div",{class:"telemetry-filter-label"},"Provider 切片",-1)),t(H,{value:R.value.provider,"onUpdate:value":e[11]||(e[11]=a=>R.value.provider=a),style:{width:"100%"},onChange:$},{default:s(()=>[t(L,{value:""},{default:s(()=>[...e[38]||(e[38]=[m("全部 Provider",-1)])]),_:1}),(i(!0),p(P,null,j(c.value,a=>(i(),I(L,{key:a.key,value:a.key},{default:s(()=>[m(o(a.key),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),t(u,{xs:24,md:8},{default:s(()=>[l("div",Ie,[e[41]||(e[41]=l("div",{class:"telemetry-filter-label"},"Model 切片",-1)),t(H,{value:R.value.model,"onUpdate:value":e[12]||(e[12]=a=>R.value.model=a),style:{width:"100%"},onChange:$},{default:s(()=>[t(L,{value:""},{default:s(()=>[...e[40]||(e[40]=[m("全部 Model",-1)])]),_:1}),(i(!0),p(P,null,j(b.value,a=>(i(),I(L,{key:a.key,value:a.key},{default:s(()=>[m(o(a.key),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1})]),_:1}),t(h,{gutter:[12,12]},{default:s(()=>[t(u,{xs:24,sm:8},{default:s(()=>[l("div",Be,[e[42]||(e[42]=l("div",{class:"telemetry-label"},"压缩命中率",-1)),l("div",Ue,o(z(f.value.hitRate)),1),l("div",Ve,o(f.value.compressedSamples)+" / "+o(f.value.samples)+" 次压缩产生了有效节省 ",1)])]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[l("div",We,[e[43]||(e[43]=l("div",{class:"telemetry-label"},"累计节省 Token",-1)),l("div",Ge,o(f.value.totalSavedTokens),1),l("div",He,"平均每次 "+o(f.value.averageSavedTokens)+" Token",1)])]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[l("div",qe,[e[44]||(e[44]=l("div",{class:"telemetry-label"},"净节省率",-1)),l("div",Je,o(z(f.value.netSavingsRate)),1),l("div",Ke," 原始 "+o(f.value.totalOriginalTokens)+" -> 压缩后 "+o(f.value.totalCompressedTokens),1)])]),_:1})]),_:1}),t(h,{gutter:[16,16],style:{"margin-top":"12px"}},{default:s(()=>[t(u,{xs:24,lg:12},{default:s(()=>[l("div",Qe,[e[45]||(e[45]=l("div",{class:"telemetry-section-title"},"策略命中分布",-1)),f.value.strategyDistribution.length===0?(i(),p("div",Xe,"暂无压缩样本")):(i(),p("div",Ye,[(i(!0),p(P,null,j(f.value.strategyDistribution.slice(0,6),a=>(i(),p("div",{key:a.strategy,class:"telemetry-row"},[l("span",null,o(a.strategy),1),l("span",null,o(a.hits)+" 次 · "+o(z(a.hitRate)),1)]))),128))]))])]),_:1}),t(u,{xs:24,lg:12},{default:s(()=>[l("div",Ze,[e[46]||(e[46]=l("div",{class:"telemetry-section-title"},"变体分布",-1)),n.value.length===0?(i(),p("div",et,"暂无变体数据")):(i(),p("div",tt,[(i(!0),p(P,null,j(n.value,([a,se])=>(i(),p("div",{key:a,class:"telemetry-row"},[l("span",null,o(a),1),l("span",null,o(se)+" 次",1)]))),128))]))])]),_:1})]),_:1}),t(h,{gutter:[16,16],style:{"margin-top":"12px"}},{default:s(()=>[t(u,{xs:24,lg:12},{default:s(()=>[l("div",st,[e[47]||(e[47]=l("div",{class:"telemetry-section-title"},"Provider 切片",-1)),c.value.length===0?(i(),p("div",lt,"暂无 Provider 数据")):(i(),p("div",ot,[(i(!0),p(P,null,j(c.value.slice(0,6),a=>(i(),p("div",{key:a.key,class:"telemetry-row"},[l("span",null,o(a.key),1),l("span",null,o(a.samples)+" 次 · "+o(z(a.hitRate)),1)]))),128))]))])]),_:1}),t(u,{xs:24,lg:12},{default:s(()=>[l("div",at,[e[48]||(e[48]=l("div",{class:"telemetry-section-title"},"Model 切片",-1)),b.value.length===0?(i(),p("div",nt,"暂无 Model 数据")):(i(),p("div",rt,[(i(!0),p(P,null,j(b.value.slice(0,6),a=>(i(),p("div",{key:a.key,class:"telemetry-row"},[l("span",null,o(a.key),1),l("span",null,o(a.samples)+" 次 · "+o(a.savedTokens)+" saved",1)]))),128))]))])]),_:1})]),_:1})]),_:1},8,["loading"]),t(C,{title:"运行信息",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:s(()=>[t(te,{column:{xs:1,sm:2,lg:3},size:"small"},{default:s(()=>[t(T,{label:"面板模式"},{default:s(()=>[t(G,{color:_.value?"blue":"purple"},{default:s(()=>[m(o(_.value?"项目级":"全局"),1)]),_:1},8,["color"])]),_:1}),_.value?(i(),I(T,{key:0,label:"项目名称"},{default:s(()=>[l("span",it,o(r(v).projectName||"—"),1)]),_:1})):q("",!0),_.value?(i(),I(T,{key:1,label:"项目路径"},{default:s(()=>[l("span",ut,o(r(v).projectRoot),1)]),_:1})):q("",!0),t(T,{label:"WebSocket"},{default:s(()=>[l("span",dt," ws://"+o(r(v).wsHost||"127.0.0.1")+":"+o(r(v).wsPort||18800),1)]),_:1}),t(T,{label:"认证"},{default:s(()=>[t(G,{color:r(v).wsToken?"green":"default",style:{"font-size":"11px"}},{default:s(()=>[m(o(r(v).wsToken?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),t(T,{label:"版本"},{default:s(()=>[l("span",vt,o(r(N)),1)]),_:1})]),_:1})]),_:1})])}}},gt=ie(ct,[["__scopeId","data-v-ab1b4e86"]]);export{gt as default};
@@ -0,0 +1 @@
1
+ import{_ as m,c as V,H as B}from"./useConfigInject-ImjEZhXr.js";import{P as n}from"./index-U4Zd5IK6.js";import{T as D}from"./Trigger-C7MTh_xj.js";import{c as g}from"./vnode-DAWimP6X.js";import{d as M,r as v,w as L,c as d,H as W,j as y}from"./vendor-C5RM7MZO.js";const l={adjustX:1,adjustY:1},s=[0,0],$={topLeft:{points:["bl","tl"],overflow:l,offset:[0,-4],targetOffset:s},topCenter:{points:["bc","tc"],overflow:l,offset:[0,-4],targetOffset:s},topRight:{points:["br","tr"],overflow:l,offset:[0,-4],targetOffset:s},bottomLeft:{points:["tl","bl"],overflow:l,offset:[0,4],targetOffset:s},bottomCenter:{points:["tc","bc"],overflow:l,offset:[0,4],targetOffset:s},bottomRight:{points:["tr","br"],overflow:l,offset:[0,4],targetOffset:s}};var F=function(e,c){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&c.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(e);a<o.length;a++)c.indexOf(o[a])<0&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};const Y=M({compatConfig:{MODE:3},props:{minOverlayWidthMatchTrigger:{type:Boolean,default:void 0},arrow:{type:Boolean,default:!1},prefixCls:n.string.def("rc-dropdown"),transitionName:String,overlayClassName:n.string.def(""),openClassName:String,animation:n.any,align:n.object,overlayStyle:{type:Object,default:void 0},placement:n.string.def("bottomLeft"),overlay:n.any,trigger:n.oneOfType([n.string,n.arrayOf(n.string)]).def("hover"),alignPoint:{type:Boolean,default:void 0},showAction:n.array,hideAction:n.array,getPopupContainer:Function,visible:{type:Boolean,default:void 0},defaultVisible:{type:Boolean,default:!1},mouseEnterDelay:n.number.def(.15),mouseLeaveDelay:n.number.def(.1)},emits:["visibleChange","overlayClick"],setup(e,c){let{slots:r,emit:o,expose:a}=c;const f=v(!!e.visible);L(()=>e.visible,t=>{t!==void 0&&(f.value=t)});const p=v();a({triggerRef:p});const b=t=>{e.visible===void 0&&(f.value=!1),o("overlayClick",t)},h=t=>{e.visible===void 0&&(f.value=t),o("visibleChange",t)},C=()=>{var t;const i=(t=r.overlay)===null||t===void 0?void 0:t.call(r),u={prefixCls:`${e.prefixCls}-menu`,onClick:b};return d(W,{key:B},[e.arrow&&d("div",{class:`${e.prefixCls}-arrow`},null),g(i,u,!1)])},w=y(()=>{const{minOverlayWidthMatchTrigger:t=!e.alignPoint}=e;return t}),O=()=>{var t;const i=(t=r.default)===null||t===void 0?void 0:t.call(r);return f.value&&i?g(i[0],{class:e.openClassName||`${e.prefixCls}-open`},!1):i},P=y(()=>!e.hideAction&&e.trigger.indexOf("contextmenu")!==-1?["click"]:e.hideAction);return()=>{const{prefixCls:t,arrow:i,showAction:u,overlayStyle:x,trigger:A,placement:N,align:j,getPopupContainer:S,transitionName:T,animation:_,overlayClassName:k}=e,E=F(e,["prefixCls","arrow","showAction","overlayStyle","trigger","placement","align","getPopupContainer","transitionName","animation","overlayClassName"]);return d(D,m(m({},E),{},{prefixCls:t,ref:p,popupClassName:V(k,{[`${t}-show-arrow`]:i}),popupStyle:x,builtinPlacements:$,action:A,showAction:u,hideAction:P.value||[],popupPlacement:N,popupAlign:j,popupTransitionName:T,popupAnimation:_,popupVisible:f.value,stretch:w.value?"minWidth":"",onPopupVisibleChange:h,getPopupContainer:S}),{popup:C,default:O})}}});export{Y as D};
@@ -0,0 +1 @@
1
+ import{c as I}from"./createContext-XExBTk9v.js";import{d as i,i as u,o as p,w as C,g as f,j as c,r as x,p as a}from"./vendor-C5RM7MZO.js";const r=Symbol("ContextProps"),s=Symbol("InternalContextProps"),S=function(n){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:c(()=>!0);const e=x(new Map),t=(m,v)=>{e.value.set(m,v),e.value=new Map(e.value)},F=m=>{e.value.delete(m),e.value=new Map(e.value)};C([o,e],()=>{}),a(r,n),a(s,{addFormItemField:t,removeFormItemField:F})},l={id:c(()=>{}),onFieldBlur:()=>{},onFieldChange:()=>{},clearValidate:()=>{}},d={addFormItemField:()=>{},removeFormItemField:()=>{}},b=()=>{const n=u(s,d),o=Symbol("FormItemFieldKey"),e=f();return n.addFormItemField(o,e.type),p(()=>{n.removeFormItemField(o)}),a(s,d),a(r,l),u(r,l)},K=i({compatConfig:{MODE:3},name:"AFormItemRest",setup(n,o){let{slots:e}=o;return a(s,d),a(r,l),()=>{var t;return(t=e.default)===null||t===void 0?void 0:t.call(e)}}}),g=I({}),M=i({name:"NoFormStatus",setup(n,o){let{slots:e}=o;return g.useProvide({}),()=>{var t;return(t=e.default)===null||t===void 0?void 0:t.call(e)}}});export{g as F,M as N,S as a,K as b,b as u};