chainlesschain 0.157.4 → 0.157.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 (151) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/AIOps-BT4aiWvN.js +1 -0
  4. package/src/assets/web-panel/assets/AIOps-Bfzpnnlg.css +1 -0
  5. package/src/assets/web-panel/assets/{ActionButton-CwL5V4rk.js → ActionButton-DAsV0-Ys.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-BlsG3Nvq.js → Analytics-DD0zl4Pt.js} +1 -1
  7. package/src/assets/web-panel/assets/AppLayout-C39vcA-h.js +1 -0
  8. package/src/assets/web-panel/assets/AppLayout-CQShwOhr.css +1 -0
  9. package/src/assets/web-panel/assets/Backup-YA2dxmc0.js +1 -0
  10. package/src/assets/web-panel/assets/{BaseInput-nL30Uqw9.js → BaseInput-DEsW823u.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-CArgL-BR.js → Chat-DWPvh1tj.js} +2 -2
  12. package/src/assets/web-panel/assets/{Checkbox-C2UDDSs8.js → Checkbox-Clf5-xld.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-B7ocl9Ww.js → Col-CH1hrzXT.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-BRYhwndT.js → Community-roZ8U4aT.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-Dya_aHuV.js → Compact-BgdvLc3A.js} +1 -1
  16. package/src/assets/web-panel/assets/Compliance-CKxw6vIq.css +1 -0
  17. package/src/assets/web-panel/assets/Compliance-CufbqW0y.js +1 -0
  18. package/src/assets/web-panel/assets/{Cowork-Jz5Q55Gv.js → Cowork-C_IaxH0e.js} +4 -4
  19. package/src/assets/web-panel/assets/{Cron-DbD6XGF3.js → Cron-DhL_2kgD.js} +1 -1
  20. package/src/assets/web-panel/assets/Crosschain-DJOk256v.js +1 -0
  21. package/src/assets/web-panel/assets/{DID-BxckhNcy.js → DID-C-NGafCc.js} +1 -1
  22. package/src/assets/web-panel/assets/{Dashboard-C8vWq_IC.js → Dashboard-BehZEEGb.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dropdown-Bjndts_O.js → Dropdown-Di1XKsKH.js} +1 -1
  24. package/src/assets/web-panel/assets/{FormItemContext-bOF0FL5N.js → FormItemContext-BiLL758Z.js} +1 -1
  25. package/src/assets/web-panel/assets/{Git-BtH4vugY.js → Git-CK7BDDon.js} +1 -1
  26. package/src/assets/web-panel/assets/Inference-BKfMNDPb.js +1 -0
  27. package/src/assets/web-panel/assets/Inference-EFFc7eNZ.css +1 -0
  28. package/src/assets/web-panel/assets/{KnowledgeGraph-CauuWTCg.js → KnowledgeGraph-CnMK_681.js} +1 -1
  29. package/src/assets/web-panel/assets/{Logs-DCfoGLWg.js → Logs-OZ_SDJhi.js} +1 -1
  30. package/src/assets/web-panel/assets/Marketplace-s1GETxG1.js +1 -0
  31. package/src/assets/web-panel/assets/{McpTools-vh8oeQ_N.js → McpTools-I_suskam.js} +2 -2
  32. package/src/assets/web-panel/assets/{Memory-B-BtLRWD.js → Memory-Xg-8FUwL.js} +2 -2
  33. package/src/assets/web-panel/assets/NLProgramming-CuTxb54H.js +1 -0
  34. package/src/assets/web-panel/assets/NLProgramming-jURs-f-a.css +1 -0
  35. package/src/assets/web-panel/assets/{Notes-D-V-KW8L.js → Notes-D3HPrdzx.js} +1 -1
  36. package/src/assets/web-panel/assets/{Organization-DE_QjJF0.js → Organization-BPk2hqkU.js} +1 -1
  37. package/src/assets/web-panel/assets/{Overflow-CvGooyM4.js → Overflow-DglXWvmc.js} +1 -1
  38. package/src/assets/web-panel/assets/{OverrideContext-D01nzvZl.js → OverrideContext-DEW2m7K6.js} +1 -1
  39. package/src/assets/web-panel/assets/{P2P-bmQWjcTu.js → P2P-9506J4Fa.js} +2 -2
  40. package/src/assets/web-panel/assets/{Permissions-C0kqPJfm.js → Permissions-D1ZT_iLb.js} +3 -3
  41. package/src/assets/web-panel/assets/Pipeline-DyqCLFVr.css +1 -0
  42. package/src/assets/web-panel/assets/Pipeline-s2l8q5TK.js +1 -0
  43. package/src/assets/web-panel/assets/{Portal-CARXcQZJ.js → Portal-CHsntPCQ.js} +1 -1
  44. package/src/assets/web-panel/assets/Privacy-B_cAicd1.css +1 -0
  45. package/src/assets/web-panel/assets/Privacy-Cj1MuXI1.js +1 -0
  46. package/src/assets/web-panel/assets/{ProjectSettings-DRqY-cna.js → ProjectSettings-Ck1WnkO5.js} +1 -1
  47. package/src/assets/web-panel/assets/{Projects-C9N8_IbI.js → Projects-1kgHPHWk.js} +2 -2
  48. package/src/assets/web-panel/assets/{Providers-D_UuBLoY.js → Providers-DnE4yu5E.js} +2 -2
  49. package/src/assets/web-panel/assets/{Row-B_nOQOCt.js → Row-B0eZSULe.js} +1 -1
  50. package/src/assets/web-panel/assets/{RssFeed-C7pFhGvD.js → RssFeed-CKCkUq-C.js} +1 -1
  51. package/src/assets/web-panel/assets/{Security-C81wAGw7.js → Security-DIVXGpQK.js} +4 -4
  52. package/src/assets/web-panel/assets/Services-DhJEUDnu.js +2 -0
  53. package/src/assets/web-panel/assets/{Skeleton-pzCg9Pnc.js → Skeleton-ecuW2YBG.js} +1 -1
  54. package/src/assets/web-panel/assets/Skills-DeBN8_s8.js +1 -0
  55. package/src/assets/web-panel/assets/{Tasks-BobOO2E9.js → Tasks-R-1xMJ9F.js} +1 -1
  56. package/src/assets/web-panel/assets/Templates-DHHfXjDu.js +1 -0
  57. package/src/assets/web-panel/assets/Tenant-BJr-h-_0.css +1 -0
  58. package/src/assets/web-panel/assets/Tenant-CC0KuURy.js +1 -0
  59. package/src/assets/web-panel/assets/{Trigger-Bvwds95J.js → Trigger-D9s00Sgd.js} +1 -1
  60. package/src/assets/web-panel/assets/{VideoEditing-DF_v4mGP.js → VideoEditing-DcDab4pD.js} +1 -1
  61. package/src/assets/web-panel/assets/{Wallet-By5UwKVh.js → Wallet-DQl4w6NV.js} +4 -4
  62. package/src/assets/web-panel/assets/{WebAuthn-BwVVXAv2.js → WebAuthn-Hr3U_uGz.js} +2 -2
  63. package/src/assets/web-panel/assets/WorkflowEditor-BC8eATB5.js +1 -0
  64. package/src/assets/web-panel/assets/{chat-DK35BNpC.js → chat-CVn-r3oV.js} +1 -1
  65. package/src/assets/web-panel/assets/{collapseMotion-D_K_bBA2.js → collapseMotion-D3P4mRvK.js} +1 -1
  66. package/src/assets/web-panel/assets/{colors-umO_4d2G.js → colors-CCC3A9ZL.js} +1 -1
  67. package/src/assets/web-panel/assets/{compact-item-DQizAYSA.js → compact-item-BmWW5F8V.js} +1 -1
  68. package/src/assets/web-panel/assets/{createContext-B4cgNOPl.js → createContext-B2b9CRr1.js} +1 -1
  69. package/src/assets/web-panel/assets/{hasIn-BlpjKJek.js → hasIn-BRo_JT_S.js} +1 -1
  70. package/src/assets/web-panel/assets/icons-DbKJDD5_.js +57 -0
  71. package/src/assets/web-panel/assets/{index-CbEcq7vH.js → index-1U9E0b34.js} +1 -1
  72. package/src/assets/web-panel/assets/{index-ZPIbAiEU.js → index-2Yn7789f.js} +1 -1
  73. package/src/assets/web-panel/assets/{index-lUKzY82L.js → index-2kaOH6lv.js} +2 -2
  74. package/src/assets/web-panel/assets/index-6h7y54EK.js +1 -0
  75. package/src/assets/web-panel/assets/{index-Bpn272aB.js → index-B7kbey_Y.js} +1 -1
  76. package/src/assets/web-panel/assets/index-BLYcQWYW.js +36 -0
  77. package/src/assets/web-panel/assets/{index-C-ri0NGO.js → index-BafG-FrC.js} +1 -1
  78. package/src/assets/web-panel/assets/{index-DXYL4L2w.js → index-Bd2qQOOl.js} +3 -3
  79. package/src/assets/web-panel/assets/{index-0Kan5LKq.js → index-BiCTVNS6.js} +2 -2
  80. package/src/assets/web-panel/assets/{index-mHBrdFck.js → index-BiNBF-Y_.js} +4 -4
  81. package/src/assets/web-panel/assets/{index-BBXgHH-n.js → index-Bkjna3jQ.js} +1 -1
  82. package/src/assets/web-panel/assets/index-Bxy0lJmt.js +1 -0
  83. package/src/assets/web-panel/assets/{index-CUBfNblp.js → index-BynNl5nX.js} +2 -2
  84. package/src/assets/web-panel/assets/{index-BzatTiIv.js → index-CAv1O9z-.js} +1 -1
  85. package/src/assets/web-panel/assets/index-CEwU1s8_.js +12 -0
  86. package/src/assets/web-panel/assets/{index-Bxa12jHB.js → index-CG3GraND.js} +1 -1
  87. package/src/assets/web-panel/assets/{index-DtPNcQ4n.js → index-CNBAfkwP.js} +1 -1
  88. package/src/assets/web-panel/assets/index-CNtb4sCH.js +55 -0
  89. package/src/assets/web-panel/assets/{index-DF_WAwo2.js → index-CSF19Udr.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-8iWNplHD.js → index-CV88wBE4.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-Ho9akU7U.js → index-CWIWWW-z.js} +2 -2
  92. package/src/assets/web-panel/assets/{index-C-24swjx.js → index-Crg53xLr.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-CHFoDNQ0.js → index-CtUuEt-Q.js} +3 -3
  94. package/src/assets/web-panel/assets/{index-CUqnZufL.js → index-Cx1K1h3R.js} +3 -3
  95. package/src/assets/web-panel/assets/{index-BjshxRqs.js → index-CzondF_H.js} +3 -3
  96. package/src/assets/web-panel/assets/index-D6LoUbxl.js +1 -0
  97. package/src/assets/web-panel/assets/{index-CmnzbK4b.js → index-DG8Argyk.js} +1 -1
  98. package/src/assets/web-panel/assets/index-DIHZW5eL.js +1 -0
  99. package/src/assets/web-panel/assets/{index-g91q-v6w.js → index-DcLgLWwU.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BrLgYcYw.js → index-DktiurCg.js} +2 -2
  101. package/src/assets/web-panel/assets/{index-BFCm-ez3.js → index-GXgIXqCa.js} +2 -2
  102. package/src/assets/web-panel/assets/{index-Cqykb9ZW.js → index-NIIkheoM.js} +2 -2
  103. package/src/assets/web-panel/assets/{index-oC0OINzs.js → index-bcMcPEIb.js} +2 -2
  104. package/src/assets/web-panel/assets/index-pX3VTY9A.js +1 -0
  105. package/src/assets/web-panel/assets/{index-BWQQnruX.js → index-vldy_vgJ.js} +3 -3
  106. package/src/assets/web-panel/assets/index-xMCJBS-g.js +3 -0
  107. package/src/assets/web-panel/assets/index-ytX4yyzs.js +1 -0
  108. package/src/assets/web-panel/assets/{index-BxkDaXvc.js → index-zd2QMXg3.js} +2 -2
  109. package/src/assets/web-panel/assets/{initDefaultProps-D7cer4hW.js → initDefaultProps-DbZ1HRc7.js} +1 -1
  110. package/src/assets/web-panel/assets/{motion-CnElQ3Xy.js → motion-KRtHWi9E.js} +1 -1
  111. package/src/assets/web-panel/assets/{move-dvqokDN1.js → move-B-zOsK6x.js} +1 -1
  112. package/src/assets/web-panel/assets/{omit-DYHi-pbs.js → omit-DNrV7ppz.js} +1 -1
  113. package/src/assets/web-panel/assets/{pickAttrs-DUC9etdU.js → pickAttrs-B-AcyBpj.js} +1 -1
  114. package/src/assets/web-panel/assets/{placementArrow-CZyEeX_l.js → placementArrow-Bu6BH9hd.js} +1 -1
  115. package/src/assets/web-panel/assets/{responsiveObserve-CAycKNvy.js → responsiveObserve-BMFIMTDs.js} +1 -1
  116. package/src/assets/web-panel/assets/{slide-BAObbkl7.js → slide-xFVMoPwP.js} +1 -1
  117. package/src/assets/web-panel/assets/{statusUtils-Bu8BSzrG.js → statusUtils-HggAwxhx.js} +1 -1
  118. package/src/assets/web-panel/assets/{styleChecker-CnYmg0_G.js → styleChecker-CG5OjpVk.js} +1 -1
  119. package/src/assets/web-panel/assets/{transition-8JSy_yCb.js → transition-C4Iby8cT.js} +1 -1
  120. package/src/assets/web-panel/assets/{useConfigInject-CypxEK_1.js → useConfigInject-BlTQDaaH.js} +2 -2
  121. package/src/assets/web-panel/assets/useFlexGapSupport-B4LJA5eG.js +1 -0
  122. package/src/assets/web-panel/assets/{useMergedState-BUoJnBiL.js → useMergedState-DbHXwBgv.js} +1 -1
  123. package/src/assets/web-panel/assets/{useRefs-XiBYSxE0.js → useRefs-DRyTVik7.js} +1 -1
  124. package/src/assets/web-panel/assets/{useState-E1W-GoWe.js → useState-DoAhV80c.js} +1 -1
  125. package/src/assets/web-panel/assets/{vendor-xFZ6Jlpw.js → vendor-BVetwVfk.js} +1 -1
  126. package/src/assets/web-panel/assets/{vnode-BE-GtqXI.js → vnode-BToqLQaO.js} +1 -1
  127. package/src/assets/web-panel/assets/{ws-Dg01CdRG.js → ws-Bv7YH0VB.js} +1 -1
  128. package/src/assets/web-panel/assets/{zoom-5CInnogB.js → zoom-Cdr5kiga.js} +1 -1
  129. package/src/assets/web-panel/index.html +3 -3
  130. package/src/commands/db.js +1 -3
  131. package/src/assets/web-panel/assets/AppLayout-CDW-fEBB.css +0 -1
  132. package/src/assets/web-panel/assets/AppLayout-bQJ6NJkS.js +0 -1
  133. package/src/assets/web-panel/assets/Backup-CKjf2R2f.js +0 -1
  134. package/src/assets/web-panel/assets/Crosschain-Dtu8IMai.js +0 -1
  135. package/src/assets/web-panel/assets/Marketplace-BNv5w-8n.js +0 -1
  136. package/src/assets/web-panel/assets/Services-CXO09HRi.js +0 -2
  137. package/src/assets/web-panel/assets/Skills-0AKMVnae.js +0 -1
  138. package/src/assets/web-panel/assets/Templates-CDjBR3fZ.js +0 -1
  139. package/src/assets/web-panel/assets/WorkflowEditor-5U7bQ2W8.js +0 -1
  140. package/src/assets/web-panel/assets/icons-C0xSkzug.js +0 -57
  141. package/src/assets/web-panel/assets/index-BLSfu07o.js +0 -12
  142. package/src/assets/web-panel/assets/index-BqEMjyrg.js +0 -1
  143. package/src/assets/web-panel/assets/index-C1kMaz6E.js +0 -1
  144. package/src/assets/web-panel/assets/index-Cf_9fnbE.js +0 -3
  145. package/src/assets/web-panel/assets/index-CqwDvOkw.js +0 -1
  146. package/src/assets/web-panel/assets/index-DKyOq7hH.js +0 -36
  147. package/src/assets/web-panel/assets/index-DbN_ZPnl.js +0 -1
  148. package/src/assets/web-panel/assets/index-LUf68SrL.js +0 -1
  149. package/src/assets/web-panel/assets/index-ug3GpVu7.js +0 -55
  150. package/src/assets/web-panel/assets/index-uzrAZgzY.js +0 -1
  151. package/src/assets/web-panel/assets/useFlexGapSupport-Ckda3t4R.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.157.4",
3
+ "version": "0.157.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
- 96a83954496d08741b4492f43149a5a32e91e37575af57793c1608cff1ae0324
1
+ 554df0b543bccd3435a42eb3bebbbe442fe28e5d37f865d75967815a8e1c0778
@@ -0,0 +1 @@
1
+ import{u as Qe}from"./ws-Bv7YH0VB.js";import{s as Ge}from"./community-parser-CO25nZFt.js";import{_ as He}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as y}from"./index-CtUuEt-Q.js";import{y as We,a5 as Ze,A as se,R as ie,aA as re,aB as Xe,au as Ye,a3 as et}from"./icons-DbKJDD5_.js";import tt from"./index-Cx1K1h3R.js";import{l as at,F as v,D as h,c as t,x as a,m as C,G as m,q as b,r as w,v as r,J as p,u as _,H as j,L as B,I as c,j as Se,h as ot,a as Z}from"./vendor-BVetwVfk.js";import"./index-BLYcQWYW.js";import"./useConfigInject-BlTQDaaH.js";import"./transition-C4Iby8cT.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";import"./KeyCode-D63Tfrq7.js";import"./omit-DNrV7ppz.js";import"./pickAttrs-B-AcyBpj.js";import"./initDefaultProps-DbZ1HRc7.js";import"./motion-KRtHWi9E.js";import"./raf-Deuc0E8-.js";import"./index-ytX4yyzs.js";import"./index-D6LoUbxl.js";import"./isVisible-C7tPsqfj.js";import"./useState-DoAhV80c.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-BmWW5F8V.js";import"./createContext-B2b9CRr1.js";import"./Compact-BgdvLc3A.js";import"./_getTag-CWA3v-Ds.js";import"./styleChecker-CG5OjpVk.js";import"./zoom-Cdr5kiga.js";import"./ActionButton-DAsV0-Ys.js";import"./vnode-BToqLQaO.js";function E(l){const s=Ge(l);if(!s)return null;try{return JSON.parse(s)}catch{}const i=s.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const ue=Object.freeze(["P0","P1","P2","P3"]),nt=Object.freeze(["open","acknowledged","resolved","closed"]);function k(l,s=0){return typeof l=="number"&&Number.isFinite(l)?l:s}function lt(l,s=0){if(!l||typeof l!="object")return null;const i=l.id||"";return i?{key:i,id:i,anomalyMetric:l.anomalyMetric??l.anomaly_metric??"",severity:String(l.severity||"P3"),status:String(l.status||"open").toLowerCase(),description:String(l.description||""),anomalyData:l.anomalyData??l.anomaly_data??null,remediationId:l.remediationId??l.remediation_id??null,postmortem:l.postmortem||"",acknowledgedAt:l.acknowledgedAt??l.acknowledged_at??null,resolvedAt:l.resolvedAt??l.resolved_at??null,createdAt:l.createdAt??l.created_at??null,_idx:s}:null}function st(l){const s=E(l);return Array.isArray(s)?s.map(lt).filter(Boolean):[]}function it(l,s=0){if(!l||typeof l!="object")return null;const i=l.id||"";if(!i)return null;const g=l.enabled;let O=!1;return g===!0||g===1||g==="1"?O=!0:g===!1||g===0||g==="0"?O=!1:O=!!g,{key:i,id:i,name:String(l.name||""),triggerCondition:l.triggerCondition??l.trigger_condition??"",steps:l.steps||"",enabled:O,successCount:k(l.successCount??l.success_count,0),failureCount:k(l.failureCount??l.failure_count,0),createdAt:l.createdAt??l.created_at??null,_idx:s}}function rt(l){const s=E(l);return Array.isArray(s)?s.map(it).filter(Boolean):[]}function ut(l,s=0){if(!l||typeof l!="object")return null;const i=l.metricName??l.metric_name??"";return i?{key:i,metricName:i,mean:k(l.mean,0),stdDev:k(l.stdDev??l.std_dev,0),q1:k(l.q1,0),q3:k(l.q3,0),sampleCount:k(l.sampleCount??l.sample_count,0),updatedAt:l.updatedAt??l.updated_at??null,_idx:s}:null}function dt(l){const s=E(l);return Array.isArray(s)?s.map(ut).filter(Boolean):[]}function ct(l){const s=E(l);return!s||typeof s!="object"||Array.isArray(s)?null:{anomaly:!!s.anomaly,reason:s.reason||null,metricName:s.metricName??s.metric_name??"",value:k(s.value,0),algorithm:String(s.algorithm||""),score:k(s.score,0),threshold:k(s.threshold,0),baseline:s.baseline?{mean:k(s.baseline.mean,0),stdDev:k(s.baseline.stdDev??s.baseline.std_dev,0),q1:k(s.baseline.q1,0),q3:k(s.baseline.q3,0)}:null,incidentId:s.incidentId??s.incident_id??null,severity:s.severity||null}}const pt={incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}};function yt(l){const s=JSON.parse(JSON.stringify(pt)),i=E(l);if(!i||typeof i!="object"||Array.isArray(i))return s;if(i.incidents&&typeof i.incidents=="object"){if(s.incidents.total=k(i.incidents.total,0),s.incidents.avgResolveMs=k(i.incidents.avgResolveMs??i.incidents.avg_resolve_ms,0),i.incidents.bySeverity&&typeof i.incidents.bySeverity=="object")for(const g of Object.keys(s.incidents.bySeverity))s.incidents.bySeverity[g]=k(i.incidents.bySeverity[g],0);if(i.incidents.byStatus&&typeof i.incidents.byStatus=="object")for(const g of Object.keys(s.incidents.byStatus))s.incidents.byStatus[g]=k(i.incidents.byStatus[g],0)}return i.playbooks&&typeof i.playbooks=="object"&&(s.playbooks.total=k(i.playbooks.total,0),s.playbooks.enabled=k(i.playbooks.enabled,0),s.playbooks.totalSuccess=k(i.playbooks.totalSuccess??i.playbooks.total_success,0),s.playbooks.totalFailure=k(i.playbooks.totalFailure??i.playbooks.total_failure,0)),i.baselines&&typeof i.baselines=="object"&&(s.baselines.total=k(i.baselines.total,0),Array.isArray(i.baselines.metrics)&&(s.baselines.metrics=[...i.baselines.metrics])),s}function de(l){if(l==null||l==="")return"—";const s=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(s.getTime())?String(l):s.toLocaleString("zh-CN",{hour12:!1})}const mt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ft={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},vt={class:"filter-bar"},bt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},gt={key:1,style:{color:"var(--text-muted)"}},kt={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},_t={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},xt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},St={style:{color:"var(--text-primary)","font-weight":"500"}},Ct={key:0,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},wt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},zt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ht={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},At={style:{color:"#1677ff"}},Pt={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},$t={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},jt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ot={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},It={key:1,style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Rt={key:2,style:{"margin-top":"8px"}},Jt={__name:"AIOps",setup(l){const s=Qe(),i=w(!1),g=w(!1),O=w(!1),ce=w([]),pe=w([]),X=w([]),A=w({incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}}),L=w("incidents"),T=w(""),D=w(""),V=w(!1),K=w(!1),Q=w(!1),Y=w(!1),z=Z({severity:"P3",metric:"",description:""}),x=Z({name:"",triggerJson:"",stepsJson:""}),I=Z({metric:"",values:""}),P=Z({metric:"",value:null,algorithm:"z_score"}),S=w(null),Ce=[{title:"严重度",key:"severity",width:"90px"},{title:"指标",key:"metric",width:"160px"},{title:"描述",key:"description"},{title:"状态",key:"status",width:"100px"},{title:"创建时间",key:"createdAt",width:"160px"},{title:"操作",key:"action",width:"220px"}],we=[{title:"名称",key:"name"},{title:"启用",key:"enabled",width:"80px"},{title:"执行统计",key:"stats",width:"180px"},{title:"创建时间",key:"createdAt",width:"160px"},{title:"操作",key:"action",width:"160px"}],ze=[{title:"指标",key:"metric"},{title:"均值 / σ",key:"mean",width:"180px"},{title:"四分位",key:"iqr",width:"180px"},{title:"样本数",key:"sampleCount",width:"90px"},{title:"更新时间",key:"updatedAt",width:"160px"}],he=Se(()=>A.value.incidents.byStatus.open+A.value.incidents.byStatus.acknowledged),Ae=Se(()=>{let o=ce.value;return T.value&&(o=o.filter(e=>e.severity===T.value)),D.value&&(o=o.filter(e=>e.status===D.value)),o});function ye(o){return{open:"待处理",acknowledged:"已确认",resolved:"已解决",closed:"已关闭"}[o]||o}function Pe(o){return{open:"red",acknowledged:"orange",resolved:"cyan",closed:"default"}[o]||"default"}function ee(o){return{P0:"red",P1:"volcano",P2:"orange",P3:"gold"}[o]||"default"}function $e(o){return{no_baseline:'该指标尚无基线,请先"更新基线"',zero_stddev:"基线方差为零(样本完全相同)",missing_metric_name:"缺少指标名",missing_value:"缺少测试值",unknown_algorithm:"未知算法"}[o]||o}function me(o,e){return o?o.length>e?o.slice(0,e)+"...":o:""}function je(o){return!o||o<=0?"—":o<1e3?`${o}ms`:o<6e4?`${(o/1e3).toFixed(1)}s`:o<36e5?`${(o/6e4).toFixed(1)}min`:`${(o/36e5).toFixed(1)}h`}function Ne({key:o}){o==="incident"?V.value=!0:o==="playbook"?K.value=!0:o==="baseline"?Q.value=!0:o==="detect"&&(S.value=null,Y.value=!0)}async function N(){i.value=!0;try{const[o,e,d,f]=await Promise.all([s.execute("ops incidents --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops playbooks --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops baselines --json",1e4).catch(()=>({output:""})),s.execute("ops stats --json",8e3).catch(()=>({output:""}))]);ce.value=st(o.output),pe.value=rt(e.output),X.value=dt(d.output),A.value=yt(f.output)}catch(o){y.error("加载 AIOps 数据失败: "+(o?.message||o))}finally{i.value=!1}}async function Oe(){if(!z.description.trim()){y.warning("请填写事件描述");return}g.value=!0;try{const o=[`ops incident-create --severity ${z.severity}`];z.metric.trim()&&o.push(`--metric "${z.metric.trim().replace(/"/g,'\\"')}"`),o.push(`--description "${z.description.trim().replace(/"/g,'\\"')}"`),o.push("--json");const{output:e}=await s.execute(o.join(" "),1e4);if(/error|失败/i.test(e)&&!/"incidentId"/.test(e)){y.error("创建失败: "+e.slice(0,120));return}y.success("事件已创建"),V.value=!1,ve(),await N()}catch(o){y.error("创建失败: "+(o?.message||o))}finally{g.value=!1}}async function Ie(){if(!x.name.trim()){y.warning("请填写 Playbook 名称");return}for(const[o,e]of[[x.triggerJson,"触发条件"],[x.stepsJson,"步骤"]])if(o.trim())try{JSON.parse(o)}catch{y.warning(`${e} JSON 格式错误`);return}g.value=!0;try{const o=[`ops playbook-create --name "${x.name.trim().replace(/"/g,'\\"')}"`];x.triggerJson.trim()&&o.push(`--trigger '${x.triggerJson.trim().replace(/'/g,"'\\''")}'`),x.stepsJson.trim()&&o.push(`--steps '${x.stepsJson.trim().replace(/'/g,"'\\''")}'`),o.push("--json");const{output:e}=await s.execute(o.join(" "),1e4);if(/error|失败/i.test(e)&&!/"playbookId"/.test(e)){y.error("创建失败: "+e.slice(0,120));return}y.success("Playbook 已创建"),K.value=!1,be(),L.value="playbooks",await N()}catch(o){y.error("创建失败: "+(o?.message||o))}finally{g.value=!1}}async function Re(){const o=I.metric.trim();if(!o){y.warning("请填写指标名");return}const e=I.values.split(/[\s,]+/).map(d=>d.trim()).filter(Boolean).map(d=>Number(d));if(e.length===0||e.some(d=>!Number.isFinite(d))){y.warning("请输入至少一个有效数值(逗号或空白分隔)");return}g.value=!0;try{const d=`ops baseline-update "${o.replace(/"/g,'\\"')}" --values ${e.join(",")} --json`,{output:f}=await s.execute(d,1e4);if(/error|失败/i.test(f)&&!/"updated"/.test(f)){y.error("更新失败: "+f.slice(0,120));return}y.success(`基线已更新(n=${e.length})`),Q.value=!1,ge(),L.value="baselines",await N()}catch(d){y.error("更新失败: "+(d?.message||d))}finally{g.value=!1}}async function Je(){if(!P.metric||P.value==null){y.warning("请选择指标并填写测试值");return}O.value=!0,S.value=null;try{const o=`ops detect "${P.metric.replace(/"/g,'\\"')}" ${P.value} --algorithm ${P.algorithm} --json`,{output:e}=await s.execute(o,8e3),d=ct(e);if(!d){y.error("检测失败: "+e.slice(0,120));return}S.value=d,d.anomaly&&(y.warning(`检测到异常 (${d.severity||"P3"})`),N())}catch(o){y.error("检测失败: "+(o?.message||o))}finally{O.value=!1}}async function Fe(o){await te(o,"incident-ack","事件已确认")}async function qe(o){await te(o,"incident-resolve","事件已解决")}async function Ue(o){await te(o,"incident-close","事件已关闭")}async function te(o,e,d){try{const{output:f}=await s.execute(`ops ${e} ${o.id} --json`,8e3);if(/error|失败|invalid/i.test(f)&&!/"acknowledged"|"resolved"|"closed"/.test(f)){y.error("转换失败: "+f.slice(0,120));return}y.success(d),await N()}catch(f){y.error("转换失败: "+(f?.message||f))}}async function Te(o){try{const{output:e}=await s.execute(`ops postmortem ${o.id}`,12e3);tt.info({title:`事件 ${o.id.slice(0,8)} 复盘`,width:720,content:()=>ot("pre",{style:"white-space: pre-wrap; max-height: 60vh; overflow: auto; font-size: 12px; padding: 8px; background: rgba(0,0,0,.04); border-radius: 4px;"},e||"(无内容)")})}catch(e){y.error("生成复盘失败: "+(e?.message||e))}}async function De(o,e){const d=e?"on":"off";try{const{output:f}=await s.execute(`ops playbook-toggle ${o.id} ${d} --json`,8e3);if(/error|失败/i.test(f)&&!/"enabled"/.test(f)){y.error("切换失败: "+f.slice(0,120));return}y.success(e?"Playbook 已启用":"Playbook 已禁用"),await N()}catch(f){y.error("切换失败: "+(f?.message||f))}}async function fe(o,e){try{const{output:d}=await s.execute(`ops playbook-record ${o.id} ${e} --json`,8e3);if(/error|失败/i.test(d)&&!/"recorded"/.test(d)){y.error("记录失败: "+d.slice(0,120));return}y.success(e==="success"?"已记录成功执行":"已记录失败执行"),await N()}catch(d){y.error("记录失败: "+(d?.message||d))}}function ve(){z.severity="P3",z.metric="",z.description=""}function be(){x.name="",x.triggerJson="",x.stepsJson=""}function ge(){I.metric="",I.values=""}return at(N),(o,e)=>{const d=b("a-button"),f=b("a-menu-item"),Me=b("a-menu"),Be=b("a-dropdown"),ke=b("a-space"),q=b("a-statistic"),R=b("a-card"),M=b("a-col"),Ee=b("a-row"),J=b("a-tag"),U=b("a-radio-button"),ae=b("a-radio-group"),oe=b("a-table"),ne=b("a-tab-pane"),Le=b("a-switch"),Ve=b("a-tabs"),_e=b("a-select-option"),xe=b("a-select"),$=b("a-form-item"),le=b("a-input"),G=b("a-textarea"),H=b("a-form"),W=b("a-modal"),Ke=b("a-input-number");return r(),v("div",null,[h("div",mt,[e[24]||(e[24]=h("div",null,[h("h2",{class:"page-title"},"AIOps 自治运维"),h("p",{class:"page-sub"},"异常检测 · 事件管理 · 自动化 Playbook")],-1)),t(ke,null,{default:a(()=>[t(d,{loading:i.value,onClick:N},{icon:a(()=>[t(_(We))]),default:a(()=>[e[18]||(e[18]=p(" 刷新 ",-1))]),_:1},8,["loading"]),t(Be,{trigger:["click"]},{overlay:a(()=>[t(Me,{onClick:Ne},{default:a(()=>[t(f,{key:"incident"},{default:a(()=>[t(_(se)),e[20]||(e[20]=p(" 创建事件",-1))]),_:1}),t(f,{key:"playbook"},{default:a(()=>[t(_(ie)),e[21]||(e[21]=p(" 创建 Playbook",-1))]),_:1}),t(f,{key:"baseline"},{default:a(()=>[t(_(re)),e[22]||(e[22]=p(" 更新基线",-1))]),_:1}),t(f,{key:"detect"},{default:a(()=>[t(_(Xe)),e[23]||(e[23]=p(" 异常检测",-1))]),_:1})]),_:1})]),default:a(()=>[t(d,{type:"primary"},{icon:a(()=>[t(_(Ze))]),default:a(()=>[e[19]||(e[19]=p(" 新建 ▼ ",-1))]),_:1})]),_:1})]),_:1})]),t(Ee,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(M,{xs:12,sm:8,lg:5},{default:a(()=>[t(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(q,{title:"事件总数",value:A.value.incidents.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(_(se))]),_:1},8,["value"])]),_:1})]),_:1}),t(M,{xs:12,sm:8,lg:5},{default:a(()=>[t(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(q,{title:"待处理",value:A.value.incidents.byStatus.open+A.value.incidents.byStatus.acknowledged,"value-style":{color:he.value>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(_(Ye))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(M,{xs:12,sm:8,lg:5},{default:a(()=>[t(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(q,{title:"Playbook",value:A.value.playbooks.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[t(_(ie))]),_:1},8,["value"])]),_:1})]),_:1}),t(M,{xs:12,sm:8,lg:5},{default:a(()=>[t(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(q,{title:"启用 Playbook",value:A.value.playbooks.enabled,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(_(et))]),_:1},8,["value"])]),_:1})]),_:1}),t(M,{xs:24,sm:8,lg:4},{default:a(()=>[t(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(q,{title:"基线指标",value:A.value.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(_(re))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),A.value.incidents.total>0?(r(),C(R,{key:0,title:"严重度分布",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[t(ke,{size:[12,8],wrap:""},{default:a(()=>[(r(!0),v(j,null,B(_(ue),n=>(r(),C(J,{key:n,color:ee(n),style:{"font-size":"13px",padding:"2px 10px"}},{default:a(()=>[p(c(n)+": "+c(A.value.incidents.bySeverity[n]||0),1)]),_:2},1032,["color"]))),128)),h("span",ft," 平均解决时间: "+c(je(A.value.incidents.avgResolveMs)),1)]),_:1})]),_:1})):m("",!0),t(Ve,{activeKey:L.value,"onUpdate:activeKey":e[2]||(e[2]=n=>L.value=n),class:"aiops-tabs"},{default:a(()=>[t(ne,{key:"incidents",tab:"事件"},{default:a(()=>[h("div",vt,[t(ae,{value:T.value,"onUpdate:value":e[0]||(e[0]=n=>T.value=n),size:"small","button-style":"solid"},{default:a(()=>[t(U,{value:""},{default:a(()=>[...e[25]||(e[25]=[p("全部",-1)])]),_:1}),(r(!0),v(j,null,B(_(ue),n=>(r(),C(U,{key:n,value:n},{default:a(()=>[p(c(n),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(ae,{value:D.value,"onUpdate:value":e[1]||(e[1]=n=>D.value=n),size:"small"},{default:a(()=>[t(U,{value:""},{default:a(()=>[...e[26]||(e[26]=[p("全部状态",-1)])]),_:1}),(r(!0),v(j,null,B(_(nt),n=>(r(),C(U,{key:n,value:n},{default:a(()=>[p(c(ye(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),t(oe,{columns:Ce,"data-source":Ae.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="severity"?(r(),C(J,{key:0,color:ee(u.severity),style:{"font-weight":"600"}},{default:a(()=>[p(c(u.severity),1)]),_:2},1032,["color"])):m("",!0),n.key==="metric"?(r(),v(j,{key:1},[u.anomalyMetric?(r(),v("span",bt,c(u.anomalyMetric),1)):(r(),v("span",gt,"—"))],64)):m("",!0),n.key==="description"?(r(),v("span",kt,c(me(u.description,80)||"—"),1)):m("",!0),n.key==="status"?(r(),C(J,{key:3,color:Pe(u.status)},{default:a(()=>[p(c(ye(u.status)),1)]),_:2},1032,["color"])):m("",!0),n.key==="createdAt"?(r(),v("span",_t,c(_(de)(u.createdAt)),1)):m("",!0),n.key==="action"?(r(),v(j,{key:5},[u.status==="open"?(r(),C(d,{key:0,size:"small",type:"link",onClick:F=>Fe(u)},{default:a(()=>[...e[27]||(e[27]=[p("确认",-1)])]),_:1},8,["onClick"])):m("",!0),u.status==="open"||u.status==="acknowledged"?(r(),C(d,{key:1,size:"small",type:"link",onClick:F=>qe(u)},{default:a(()=>[...e[28]||(e[28]=[p("解决",-1)])]),_:1},8,["onClick"])):m("",!0),u.status==="resolved"?(r(),C(d,{key:2,size:"small",type:"link",onClick:F=>Ue(u)},{default:a(()=>[...e[29]||(e[29]=[p("关闭",-1)])]),_:1},8,["onClick"])):m("",!0),u.status==="resolved"||u.status==="closed"?(r(),C(d,{key:3,size:"small",type:"link",onClick:F=>Te(u)},{default:a(()=>[...e[30]||(e[30]=[p("复盘",-1)])]),_:1},8,["onClick"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[h("div",xt,[t(_(se),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(T.value||D.value?"没有符合条件的事件":'暂无事件,可点"新建 → 创建事件"或运行"异常检测"自动触发'),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),t(ne,{key:"playbooks",tab:"Playbook"},{default:a(()=>[t(oe,{columns:we,"data-source":pe.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="name"?(r(),v(j,{key:0},[h("span",St,c(u.name),1),u.triggerCondition?(r(),v("div",Ct,c(me(u.triggerCondition,80)),1)):m("",!0)],64)):m("",!0),n.key==="enabled"?(r(),C(Le,{key:1,checked:u.enabled,size:"small",onChange:F=>De(u,F)},null,8,["checked","onChange"])):m("",!0),n.key==="stats"?(r(),v(j,{key:2},[t(J,{color:"green",style:{"font-size":"11px"}},{default:a(()=>[p("成功 "+c(u.successCount),1)]),_:2},1024),u.failureCount>0?(r(),C(J,{key:0,color:"red",style:{"font-size":"11px","margin-left":"4px"}},{default:a(()=>[p(" 失败 "+c(u.failureCount),1)]),_:2},1024)):m("",!0)],64)):m("",!0),n.key==="createdAt"?(r(),v("span",wt,c(_(de)(u.createdAt)),1)):m("",!0),n.key==="action"?(r(),v(j,{key:4},[t(d,{size:"small",type:"link",onClick:F=>fe(u,"success")},{default:a(()=>[...e[31]||(e[31]=[p("+ 成功",-1)])]),_:1},8,["onClick"]),t(d,{size:"small",type:"link",danger:"",onClick:F=>fe(u,"failure")},{default:a(()=>[...e[32]||(e[32]=[p("+ 失败",-1)])]),_:1},8,["onClick"])],64)):m("",!0)]),emptyText:a(()=>[h("div",zt,[t(_(ie),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),e[33]||(e[33]=p(' 暂无 Playbook,点"新建 → 创建 Playbook"创建第一个 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),t(ne,{key:"baselines",tab:"基线"},{default:a(()=>[t(oe,{columns:ze,"data-source":X.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="metric"?(r(),v("span",ht,c(u.metricName),1)):m("",!0),n.key==="mean"?(r(),v(j,{key:1},[h("span",At,c(u.mean),1),h("span",Pt,"σ "+c(u.stdDev),1)],64)):m("",!0),n.key==="iqr"?(r(),v("span",$t," Q1 "+c(u.q1)+" / Q3 "+c(u.q3),1)):m("",!0),n.key==="sampleCount"?(r(),C(J,{key:3,color:"blue",style:{"font-size":"11px"}},{default:a(()=>[p(c(u.sampleCount),1)]),_:2},1024)):m("",!0),n.key==="updatedAt"?(r(),v("span",jt,c(_(de)(u.updatedAt)),1)):m("",!0)]),emptyText:a(()=>[h("div",Nt,[t(_(re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),e[34]||(e[34]=p(' 暂无基线,点"新建 → 更新基线"喂入指标样本 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),t(W,{open:V.value,"onUpdate:open":e[6]||(e[6]=n=>V.value=n),title:"创建事件","confirm-loading":g.value,width:520,"ok-text":"创建","cancel-text":"取消",onOk:Oe,onCancel:ve},{default:a(()=>[t(H,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[t($,{label:"严重度"},{default:a(()=>[t(xe,{value:z.severity,"onUpdate:value":e[3]||(e[3]=n=>z.severity=n)},{default:a(()=>[(r(!0),v(j,null,B(_(ue),n=>(r(),C(_e,{key:n,value:n},{default:a(()=>[p(c(n),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),t($,{label:"指标"},{default:a(()=>[t(le,{value:z.metric,"onUpdate:value":e[4]||(e[4]=n=>z.metric=n),placeholder:"例如: cpu_usage(可选)"},null,8,["value"])]),_:1}),t($,{label:"描述",required:""},{default:a(()=>[t(G,{value:z.description,"onUpdate:value":e[5]||(e[5]=n=>z.description=n),"auto-size":{minRows:3,maxRows:6}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(W,{open:K.value,"onUpdate:open":e[10]||(e[10]=n=>K.value=n),title:"创建 Playbook","confirm-loading":g.value,width:540,"ok-text":"创建","cancel-text":"取消",onOk:Ie,onCancel:be},{default:a(()=>[t(H,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[t($,{label:"名称",required:""},{default:a(()=>[t(le,{value:x.name,"onUpdate:value":e[7]||(e[7]=n=>x.name=n),placeholder:"restart-pod"},null,8,["value"])]),_:1}),t($,{label:"触发条件 (JSON)"},{default:a(()=>[t(G,{value:x.triggerJson,"onUpdate:value":e[8]||(e[8]=n=>x.triggerJson=n),placeholder:'{"metric":"cpu","threshold":90}',"auto-size":{minRows:2,maxRows:4}},null,8,["value"])]),_:1}),t($,{label:"步骤 (JSON)"},{default:a(()=>[t(G,{value:x.stepsJson,"onUpdate:value":e[9]||(e[9]=n=>x.stepsJson=n),placeholder:'[{"action":"restart","target":"pod-1"}]',"auto-size":{minRows:3,maxRows:6}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(W,{open:Q.value,"onUpdate:open":e[13]||(e[13]=n=>Q.value=n),title:"更新基线","confirm-loading":g.value,width:500,"ok-text":"更新","cancel-text":"取消",onOk:Re,onCancel:ge},{default:a(()=>[t(H,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[t($,{label:"指标名",required:""},{default:a(()=>[t(le,{value:I.metric,"onUpdate:value":e[11]||(e[11]=n=>I.metric=n),placeholder:"cpu_usage"},null,8,["value"])]),_:1}),t($,{label:"样本值",required:""},{default:a(()=>[t(G,{value:I.values,"onUpdate:value":e[12]||(e[12]=n=>I.values=n),placeholder:"逗号分隔的数值,例如: 45.2, 47.1, 50.8, 49.3","auto-size":{minRows:3,maxRows:8}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(W,{open:Y.value,"onUpdate:open":e[17]||(e[17]=n=>Y.value=n),title:"异常检测","confirm-loading":O.value,width:500,"ok-text":"检测","cancel-text":"关闭",onOk:Je},{default:a(()=>[t(H,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[t($,{label:"指标名",required:""},{default:a(()=>[t(xe,{value:P.metric,"onUpdate:value":e[14]||(e[14]=n=>P.metric=n),"show-search":"",placeholder:"选择已建立基线的指标"},{default:a(()=>[(r(!0),v(j,null,B(X.value,n=>(r(),C(_e,{key:n.metricName,value:n.metricName},{default:a(()=>[p(c(n.metricName)+"(n="+c(n.sampleCount)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),t($,{label:"测试值",required:""},{default:a(()=>[t(Ke,{value:P.value,"onUpdate:value":e[15]||(e[15]=n=>P.value=n),style:{width:"100%"}},null,8,["value"])]),_:1}),t($,{label:"算法"},{default:a(()=>[t(ae,{value:P.algorithm,"onUpdate:value":e[16]||(e[16]=n=>P.algorithm=n)},{default:a(()=>[t(U,{value:"z_score"},{default:a(()=>[...e[35]||(e[35]=[p("Z-Score (3σ)",-1)])]),_:1}),t(U,{value:"iqr"},{default:a(()=>[...e[36]||(e[36]=[p("IQR (1.5×)",-1)])]),_:1})]),_:1},8,["value"])]),_:1})]),_:1}),S.value?(r(),C(R,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:a(()=>[t(q,{title:"检测结果",value:S.value.anomaly?"异常":"正常","value-style":{color:S.value.anomaly?"#ff4d4f":"#52c41a"}},null,8,["value","value-style"]),S.value.reason&&!S.value.anomaly?(r(),v("div",Ot," 原因: "+c($e(S.value.reason)),1)):m("",!0),S.value.baseline?(r(),v("div",It,[h("div",null,"得分: "+c(S.value.score)+" (阈值 "+c(S.value.threshold)+")",1),h("div",null,"基线: 均值 "+c(S.value.baseline.mean)+", σ "+c(S.value.baseline.stdDev),1)])):m("",!0),S.value.incidentId?(r(),v("div",Rt,[t(J,{color:ee(S.value.severity)},{default:a(()=>[p("已自动创建 "+c(S.value.severity)+" 事件",1)]),_:1},8,["color"])])):m("",!0)]),_:1})):m("",!0)]),_:1},8,["open","confirm-loading"])])}}},fa=He(Jt,[["__scopeId","data-v-4713e815"]]);export{fa as default};
@@ -0,0 +1 @@
1
+ .page-title[data-v-4713e815]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-4713e815]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.aiops-tabs[data-v-4713e815] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-4713e815]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
@@ -1 +1 @@
1
- import{y as C,_ as i}from"./useConfigInject-CypxEK_1.js";import{B as b,c as y}from"./index-DbN_ZPnl.js";import{o as m,s as r,d as O,l as P,c as R}from"./vendor-xFZ6Jlpw.js";import{o as x}from"./index-DKyOq7hH.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=C(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)},h=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))))},p=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}h(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return R(b,i(i(i({},y(e)),{},{onClick:p,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{E as A};
1
+ import{y as C,_ as i}from"./useConfigInject-BlTQDaaH.js";import{B as b,c as y}from"./index-ytX4yyzs.js";import{o as m,s as r,d as O,l as P,c as R}from"./vendor-BVetwVfk.js";import{o as x}from"./index-BLYcQWYW.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=C(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)},h=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))))},p=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}h(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return R(b,i(i(i({},y(e)),{},{onClick:p,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{E as A};
@@ -1,3 +1,3 @@
1
- import{u as fe}from"./ws-Dg01CdRG.js";import{_ as ye}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{t as Y,p as Z,i as ee,ac as me,ad as xe,ae as te}from"./icons-C0xSkzug.js";import{a as C}from"./index-CHFoDNQ0.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-xFZ6Jlpw.js";import"./index-DKyOq7hH.js";import"./useConfigInject-CypxEK_1.js";import"./transition-8JSy_yCb.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CARXcQZJ.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(`
1
+ import{u as fe}from"./ws-Bv7YH0VB.js";import{_ as ye}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{y as Y,u as Z,k as ee,ah as me,ai as xe,aj as te}from"./icons-DbKJDD5_.js";import{a as C}from"./index-CtUuEt-Q.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-BVetwVfk.js";import"./index-BLYcQWYW.js";import"./useConfigInject-BlTQDaaH.js";import"./transition-C4Iby8cT.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.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
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{r as N,w as De,l as Ee,m as g,x as t,q as u,B as Me,C as Ve,v as i,c as e,D as a,E as S,u as n,F as p,G as A,H as j,I as v,J as l,K as Fe,L as Ge,j as m}from"./vendor-BVetwVfk.js";import{u as We}from"./ws-Bv7YH0VB.js";import{u as ze,T as Je}from"./index-BLYcQWYW.js";import{_ as Ye}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as O,G as B,D as P,M as U,R as D,C as E,A as M,a as V,b as F,c as G,d as W,B as z,e as J,f as Y,S as q,h as H,i as $,j as Q,k as X,l as Z,I as h,L as ee,W as te,m as oe,n as ne,P as se,o as le,p as ae,E as ie,q as de,r as ue,s as re,t as pe,u as ye,v as ce,U as ke,V as qe,w as me,K as fe,x as He}from"./icons-DbKJDD5_.js";const $e=["src"],Qe={key:0,class:"logo-text"},Xe={key:0,class:"mode-banner project"},Ze={class:"banner-info"},he={class:"banner-name"},et={key:1,class:"mode-banner global"},tt=["title"],ot={key:0,class:"footer-text"},nt={class:"header-left"},st={class:"header-right"},lt={class:"theme-switcher"},at=["data-theme-key","onClick"],it={class:"version-tag"},_e="cc.web-panel.sidebar.openKeys",dt={__name:"AppLayout",setup(ut){const ge=Me(),ve=Ve(),b=We(),K=ze(),r=N(!1),f=window.__CC_CONFIG__||{},k=m(()=>f.mode==="project"),Oe="v5.0.3.1",be=new URL(""+new URL("logo-DBCYUiWP.png",import.meta.url).href,import.meta.url).href,we=m(()=>K.current),Ce=m(()=>K.config.vars["--menu-mode"]),L=m(()=>{const d=ve.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[d]||d]}),R=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function Se(){try{const d=localStorage.getItem(_e);if(d){const o=JSON.parse(d);if(Array.isArray(o))return o.filter(s=>R.includes(s))}}catch{}return[...R]}const x=N(Se());De(x,d=>{try{localStorage.setItem(_e,JSON.stringify(d))}catch{}},{deep:!0});const w=m(()=>b.status),je=m(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[b.status]||"default"),Ke=m(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[b.status]||"未知");function xe(d){K.setTheme(d)}function Ae({key:d}){ge.push({mcp:"/mcp"}[d]||`/${d}`)}return Ee(()=>b.connect()),(d,o)=>{const s=u("a-menu-item"),y=u("a-sub-menu"),Be=u("PartitionOutlined"),_=u("a-menu-divider"),Le=u("a-menu"),Re=u("a-badge"),Te=u("a-layout-sider"),T=u("a-tooltip"),Ie=u("a-tag"),Ne=u("a-layout-header"),Pe=u("router-view"),Ue=u("a-layout-content"),I=u("a-layout");return i(),g(I,{class:"app-root"},{default:t(()=>[e(Te,{collapsed:r.value,"onUpdate:collapsed":o[2]||(o[2]=c=>r.value=c),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:S(["logo",{collapsed:r.value}])},[a("img",{src:n(be),alt:"ChainlessChain",class:"logo-icon"},null,8,$e),r.value?A("",!0):(i(),p("span",Qe,"ChainlessChain"))],2),r.value?(i(),p("div",{key:1,class:"mode-icon-sm",title:k.value?n(f).projectName:"全局模式"},[k.value?(i(),g(n(O),{key:0,style:{color:"#1677ff"}})):(i(),g(n(B),{key:1,style:{color:"#722ed1"}}))],8,tt)):(i(),p(j,{key:0},[k.value?(i(),p("div",Xe,[e(n(O),{class:"banner-icon"}),a("div",Ze,[a("div",he,v(n(f).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(i(),p("div",et,[e(n(B),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(Le,{selectedKeys:L.value,"onUpdate:selectedKeys":o[0]||(o[0]=c=>L.value=c),openKeys:x.value,"onUpdate:openKeys":o[1]||(o[1]=c=>x.value=c),theme:Ce.value,mode:"inline","inline-collapsed":r.value,class:"side-menu",onClick:Ae},{default:t(()=>[r.value?(i(),p(j,{key:1},[e(s,{key:"dashboard"},{icon:t(()=>[e(n(P))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(U))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(D))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(E))]),_:1}),e(s,{key:"aiops"},{icon:t(()=>[e(n(M))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(V))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"skills"},{icon:t(()=>[e(n(F))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(G))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(W))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(O))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(z))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"notes"},{icon:t(()=>[e(n(J))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(Y))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(q))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(H))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n($))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(Q))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(X))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"security"},{icon:t(()=>[e(n(Z))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(h))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ee))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(te))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(oe))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(ne))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(se))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(le))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(ae))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(ie))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(de))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"wallet"},{icon:t(()=>[e(n(ue))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(re))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(pe))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(ye))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(ce))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"community"},{icon:t(()=>[e(n(ke))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"rssfeed"},{icon:t(()=>[e(n(me))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(fe))]),_:1})],64)):(i(),p(j,{key:0},[e(y,{key:"g-overview"},{title:t(()=>[...o[5]||(o[5]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(s,{key:"dashboard"},{icon:t(()=>[e(n(P))]),default:t(()=>[o[6]||(o[6]=l("仪表板",-1))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(U))]),default:t(()=>[o[7]||(o[7]=l("AI 对话",-1))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(D))]),default:t(()=>[o[8]||(o[8]=l("日常协作",-1))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(E))]),default:t(()=>[o[9]||(o[9]=l("服务管理",-1))]),_:1}),e(s,{key:"aiops"},{icon:t(()=>[e(n(M))]),default:t(()=>[o[10]||(o[10]=l("AIOps",-1))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(V))]),default:t(()=>[o[11]||(o[11]=l("日志查看",-1))]),_:1})]),_:1}),e(y,{key:"g-config"},{title:t(()=>[...o[12]||(o[12]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(s,{key:"skills"},{icon:t(()=>[e(n(F))]),default:t(()=>[o[13]||(o[13]=l("技能管理",-1))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(G))]),default:t(()=>[o[14]||(o[14]=l("LLM 配置",-1))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(W))]),default:t(()=>[o[15]||(o[15]=l("MCP 工具",-1))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(O))]),default:t(()=>[o[16]||(o[16]=l("项目存储",-1))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(z))]),default:t(()=>[o[17]||(o[17]=l("自然语言编程",-1))]),_:1})]),_:1}),e(y,{key:"g-data"},{title:t(()=>[...o[18]||(o[18]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(s,{key:"notes"},{icon:t(()=>[e(n(J))]),default:t(()=>[o[19]||(o[19]=l("笔记管理",-1))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(Y))]),default:t(()=>[o[20]||(o[20]=l("记忆文件",-1))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(q))]),default:t(()=>[o[21]||(o[21]=l("知识图谱",-1))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(H))]),default:t(()=>[o[22]||(o[22]=l("技能市场",-1))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n($))]),default:t(()=>[o[23]||(o[23]=l("定时任务",-1))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(Q))]),default:t(()=>[o[24]||(o[24]=l("工作流编辑",-1))]),_:1}),e(s,{key:"pipeline"},{icon:t(()=>[e(Be)]),default:t(()=>[o[25]||(o[25]=l("开发流水线",-1))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(X))]),default:t(()=>[o[26]||(o[26]=l("后台任务",-1))]),_:1})]),_:1}),e(y,{key:"g-advanced"},{title:t(()=>[...o[27]||(o[27]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(s,{key:"security"},{icon:t(()=>[e(n(Z))]),default:t(()=>[o[28]||(o[28]=l("安全中心",-1))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(h))]),default:t(()=>[o[29]||(o[29]=l("DID 身份",-1))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ee))]),default:t(()=>[o[30]||(o[30]=l("权限管理",-1))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(te))]),default:t(()=>[o[31]||(o[31]=l("P2P 网络",-1))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(oe))]),default:t(()=>[o[32]||(o[32]=l("备份同步",-1))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(ne))]),default:t(()=>[o[33]||(o[33]=l("Git 与数据",-1))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(se))]),default:t(()=>[o[34]||(o[34]=l("项目管理",-1))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(le))]),default:t(()=>[o[35]||(o[35]=l("跨链桥",-1))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(ae))]),default:t(()=>[o[36]||(o[36]=l("合规与情报",-1))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(ie))]),default:t(()=>[o[37]||(o[37]=l("隐私计算",-1))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(de))]),default:t(()=>[o[38]||(o[38]=l("推理网络",-1))]),_:1})]),_:1}),e(y,{key:"g-enterprise"},{title:t(()=>[...o[39]||(o[39]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(s,{key:"wallet"},{icon:t(()=>[e(n(ue))]),default:t(()=>[o[40]||(o[40]=l("钱包管理",-1))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(re))]),default:t(()=>[o[41]||(o[41]=l("组织管理",-1))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(pe))]),default:t(()=>[o[42]||(o[42]=l("多租户 SaaS",-1))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(ye))]),default:t(()=>[o[43]||(o[43]=l("使用分析",-1))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(ce))]),default:t(()=>[o[44]||(o[44]=l("模板中心",-1))]),_:1})]),_:1}),e(y,{key:"g-social"},{title:t(()=>[...o[45]||(o[45]=[a("span",{class:"group-label"},"社 交",-1)])]),default:t(()=>[e(s,{key:"community"},{icon:t(()=>[e(n(ke))]),default:t(()=>[o[46]||(o[46]=l("社区",-1))]),_:1})]),_:1}),e(y,{key:"g-media"},{title:t(()=>[...o[47]||(o[47]=[a("span",{class:"group-label"},"媒 体",-1)])]),default:t(()=>[e(s,{key:"video"},{icon:t(()=>[e(n(qe))]),default:t(()=>[o[48]||(o[48]=l("视频剪辑",-1))]),_:1})]),_:1}),e(y,{key:"g-extension"},{title:t(()=>[...o[49]||(o[49]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(s,{key:"rssfeed"},{icon:t(()=>[e(n(me))]),default:t(()=>[o[50]||(o[50]=l("RSS 订阅",-1))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(fe))]),default:t(()=>[o[51]||(o[51]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),a("div",{class:S(["sidebar-footer",{collapsed:r.value}])},[e(Re,{status:je.value},null,8,["status"]),r.value?A("",!0):(i(),p("span",ot,v(Ke.value),1))],2)]),_:1},8,["collapsed"]),e(I,{class:"main-area"},{default:t(()=>[e(Ne,{class:"app-header"},{default:t(()=>[a("div",nt,[a("div",{class:S(["scope-tag",k.value?"project":"global"])},[(i(),g(Fe(k.value?n(O):n(B)))),a("span",null,v(k.value?n(f).projectName||"项目":"全局模式"),1),k.value&&n(f).projectRoot?(i(),g(T,{key:0,title:n(f).projectRoot},{default:t(()=>[e(n(He),{class:"info-icon"})]),_:1},8,["title"])):A("",!0)],2)]),a("div",st,[a("div",lt,[(i(!0),p(j,null,Ge(n(Je),(c,C)=>(i(),g(T,{key:C,title:c.label},{default:t(()=>[a("button",{class:S(["theme-btn",{active:we.value===C}]),"data-theme-key":C,onClick:rt=>xe(C)},v(c.icon),11,at)]),_:2},1032,["title"]))),128))]),a("span",it,v(n(Oe)),1),e(Ie,{color:w.value==="connected"?"green":w.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(v(w.value==="connected"?"已连接":w.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(Ue,{class:"page-content"},{default:t(()=>[e(Pe)]),_:1})]),_:1})]),_:1})}}},ft=Ye(dt,[["__scopeId","data-v-6026adf6"]]);export{ft as default};
@@ -0,0 +1 @@
1
+ .app-root[data-v-6026adf6]{height:100vh;background:var(--bg-base);overflow:hidden}.sidebar[data-v-6026adf6]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s;height:100vh}[data-v-6026adf6] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden;height:100%}.main-area[data-v-6026adf6]{background:var(--bg-base);height:100vh;display:flex;flex-direction:column}.logo[data-v-6026adf6]{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-6026adf6]{padding:0;justify-content:center}.logo-icon[data-v-6026adf6]{width:24px;height:24px;flex-shrink:0;object-fit:contain}.logo-text[data-v-6026adf6]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-6026adf6]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-6026adf6]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-6026adf6]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-6026adf6]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-6026adf6]{color:#722ed1}.banner-info[data-v-6026adf6]{flex:1;min-width:0}.banner-name[data-v-6026adf6]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-6026adf6]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-6026adf6]{color:#c084fc}.mode-icon-sm[data-v-6026adf6]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-6026adf6]{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-6026adf6]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-6026adf6] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-6026adf6] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-6026adf6]{margin:4px 0!important}.sidebar-footer[data-v-6026adf6]{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-6026adf6]{justify-content:center;padding:8px 0}.footer-text[data-v-6026adf6]{color:var(--text-secondary);font-size:11px}.app-header[data-v-6026adf6]{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-6026adf6],.header-right[data-v-6026adf6]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-6026adf6]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-6026adf6]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-6026adf6]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-6026adf6]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-6026adf6]{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-6026adf6]{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-6026adf6]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-6026adf6]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-6026adf6]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-6026adf6]{margin:0!important;font-size:11px}.page-content[data-v-6026adf6]{padding:24px;overflow:auto;background:var(--bg-base);flex:1;min-height:0}
@@ -0,0 +1 @@
1
+ import{u as Me}from"./ws-Bv7YH0VB.js";import{_ as Ne}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{y as je,a5 as me,m as re,a7 as N,al as U,aj as Le}from"./icons-DbKJDD5_.js";import{l as Te,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-BVetwVfk.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"}},Qe={key:0},Xe={key:1,style:{"margin-top":"12px"}},Ye={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),j=n(""),I=n(!1),L=n("未知"),T=n(0),W=n(""),x=n(""),Q=n(!1),X=n(!1),S=n([]),he=[{title:"文件路径",key:"path"},{title:"冲突类型",key:"type",width:120}];async function Y(){q.value=!0,j.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,L.value=I.value?"已同步":"未同步",T.value=e.pending??e.pendingChanges??0,W.value=e.lastSync||e.lastSyncTime||""):we(t)}catch(t){j.value=`加载同步状态失败: ${t.message}`}finally{q.value=!1}}function we(t){if(!t){L.value="未知";return}I.value=/synced|online|up.to.date/i.test(t),L.value=I.value?"已同步":"未同步";const e=t.match(/pending[:\s]+(\d+)/i);T.value=e?parseInt(e[1]):0;const c=t.match(/last[:\s]+(.+)/i);c&&(W.value=c[1].trim())}async function ze(){Q.value=!0,x.value="";try{const{output:t}=await g.execute("sync push",3e4);x.value=t||"推送完成",await Y()}catch(t){x.value=`推送失败: ${t.message}`}finally{Q.value=!1}}async function Se(){X.value=!0,x.value="";try{const{output:t}=await g.execute("sync pull",3e4);x.value=t||"拉取完成",await Y()}catch(t){x.value=`拉取失败: ${t.message}`}finally{X.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(),Y(),Ce(),Pe(),ae()])}finally{J.value=!1}}return Te(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(je))]),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",Qe,[e[14]||(e[14]=p("strong",null,"创建时间:",-1)),f(" "+u(k.value.createdAt),1)])):r("",!0)])):r("",!0),z.value?(l(),s("div",Xe,[p("pre",Ye,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:L.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:T.value,"value-style":{color:T.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:Q.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:X.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)),j.value?(l(),s("div",ot,u(j.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(Le)),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};
@@ -1 +1 @@
1
- import{_ as f}from"./useConfigInject-CypxEK_1.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-xFZ6Jlpw.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};
1
+ import{_ as f}from"./useConfigInject-BlTQDaaH.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-BVetwVfk.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};
@@ -1,2 +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 J,l as G,c as d,x as v,H as T,L as z,J as g,O as Q,P as V,q as M,r as B,a as K,n as P}from"./vendor-xFZ6Jlpw.js";import{u as U}from"./chat-DK35BNpC.js";import{_ as N}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{y as W,z as X,f as Y,E as Z,H as ee,F as te,G as oe,M as ne,u as se,J as ae}from"./icons-C0xSkzug.js";import{r as le}from"./markdown-vYH_ziAO.js";import"./ws-Dg01CdRG.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:f}){const h=r,l=f;function y(){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:y},[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"],fe={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(r){const f=r,h=m(()=>le(f.content||""));return(l,y)=>(t(),a("div",{class:"markdown-content",innerHTML:h.value},null,8,xe))}},F=N(fe,[["__scopeId","data-v-693ca57e"]]),ye={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"}},ze={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},Me={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"},Ee={key:0,class:"tool-detail__result"},Re={class:"tool-detail__pre tool-detail__pre--result"},Be={key:1,class:"user-msg"},Fe={class:"bubble user"},qe={key:2,class:"assistant-msg"},Ae={key:0,class:"assistant-msg"},De={key:1,class:"question-card"},He={class:"question-text"},Je={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},Ge={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 f=window.__CC_CONFIG__||{},h=m(()=>f.mode==="project"),l=U(),y=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 q(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 E(){if(!k.value.trim()||S.value||!c.value)return;const n=k.value;k.value="",await l.sendMessage(c.value,n)}function R(n){l.answerQuestion(c.value,n)}return J([L,I],()=>{P(()=>{y.value&&(y.value.scrollTop=y.value.scrollHeight)})},{deep:!0}),G(()=>{l.loadSessions()}),(n,e)=>{const p=M("a-button"),C=M("a-input-search"),H=M("a-textarea");return t(),a("div",ye,[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(f).projectRoot},u(i(f).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,z(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:y},[(t(!0),a(T,null,z(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=>q(_)},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",Ee,[s("pre",Re,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",Fe,u(o.content),1)])):(t(),a("div",qe,[e[14]||(e[14]=s("div",{class:"avatar"},"AI",-1)),d(F,{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(F,{class:"bubble assistant streaming",content:I.value},null,8,["content"])])):x("",!0),$.value?(t(),a("div",De,[s("div",He,u($.value.question),1),$.value.choices?.length?(t(),a("div",Je,[(t(!0),a(T,null,z($.value.choices,o=>(t(),b(p,{key:o,size:"small",onClick:_=>R(o)},{default:v(()=>[g(u(o),1)]),_:2},1032,["onClick"]))),128))])):(t(),b(C,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:R}))])):x("",!0)],512)):(t(),a("div",ze,[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",Me,[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",Ge,[s("div",Qe,[d(H,{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(E,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),d(p,{type:"primary",loading:S.value,onClick:E,style:{height:"40px"}},{icon:v(()=>[d(i(ae))]),_:1},8,["loading"])])])):x("",!0)])])}}},tt=N(Ve,[["__scopeId","data-v-868f97d8"]]);export{tt as default};
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 G,l as H,c as d,x as v,H as T,L as z,J as g,O as J,P as V,q as M,r as E,a as K,n as P}from"./vendor-BVetwVfk.js";import{u as U}from"./chat-CVn-r3oV.js";import{_ as N}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{O as X,Q as Y,i as Z,X as W,Y as ee,F as te,G as oe,M as ne,z as se,Z as ae}from"./icons-DbKJDD5_.js";import{r as le}from"./markdown-vYH_ziAO.js";import"./ws-Bv7YH0VB.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:f}){const h=r,l=f;function y(){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:y},[s("span",re,[r.item.status==="done"?(t(),b(i(X),{key:0})):r.item.status==="running"?(t(),b(i(Y),{key:1})):(t(),b(i(Z),{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(W),{key:0})):(t(),b(i(ee),{key:1}))])):x("",!0)],10,ie))}},ve=N(pe,[["__scopeId","data-v-cf5a0925"]]),xe=["innerHTML"],fe={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(r){const f=r,h=m(()=>le(f.content||""));return(l,y)=>(t(),a("div",{class:"markdown-content",innerHTML:h.value},null,8,xe))}},F=N(fe,[["__scopeId","data-v-693ca57e"]]),ye={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"}},ze={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},Me={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"},Be={class:"tool-detail__pre tool-detail__pre--result"},Ee={key:1,class:"user-msg"},Fe={class:"bubble user"},qe={key:2,class:"assistant-msg"},Ae={key:0,class:"assistant-msg"},De={key:1,class:"question-card"},Qe={class:"question-text"},Ge={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},He={key:2,style:{padding:"16px","border-top":"1px solid var(--border-color)"}},Je={style:{display:"flex",gap:"8px","align-items":"flex-end"}},Ve={__name:"Chat",setup(r){const f=window.__CC_CONFIG__||{},h=m(()=>f.mode==="project"),l=U(),y=E(null),k=E(""),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 q(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 B(n){l.answerQuestion(c.value,n)}return G([L,I],()=>{P(()=>{y.value&&(y.value.scrollTop=y.value.scrollHeight)})},{deep:!0}),H(()=>{l.loadSessions()}),(n,e)=>{const p=M("a-button"),C=M("a-input-search"),Q=M("a-textarea");return t(),a("div",ye,[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(f).projectRoot},u(i(f).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,z(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:y},[(t(!0),a(T,null,z(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=>q(_)},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",Be,u(typeof o.result=="string"?o.result:JSON.stringify(o.result,null,2)),1)])):x("",!0)])):x("",!0)])):o.role==="user"?(t(),a("div",Ee,[s("div",Fe,u(o.content),1)])):(t(),a("div",qe,[e[14]||(e[14]=s("div",{class:"avatar"},"AI",-1)),d(F,{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(F,{class:"bubble assistant streaming",content:I.value},null,8,["content"])])):x("",!0),$.value?(t(),a("div",De,[s("div",Qe,u($.value.question),1),$.value.choices?.length?(t(),a("div",Ge,[(t(!0),a(T,null,z($.value.choices,o=>(t(),b(p,{key:o,size:"small",onClick:_=>B(o)},{default:v(()=>[g(u(o),1)]),_:2},1032,["onClick"]))),128))])):(t(),b(C,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:B}))])):x("",!0)],512)):(t(),a("div",ze,[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",Me,[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",He,[s("div",Je,[d(Q,{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:J(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};
@@ -1 +1 @@
1
- import{c as E,_ as V}from"./useConfigInject-CypxEK_1.js";import{_ as o}from"./index-DKyOq7hH.js";import{P as W}from"./index-U4Zd5IK6.js";import{i as F}from"./initDefaultProps-D7cer4hW.js";import{d as I,r as f,w as M,c as h}from"./vendor-xFZ6Jlpw.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};
1
+ import{c as E,_ as V}from"./useConfigInject-BlTQDaaH.js";import{_ as o}from"./index-BLYcQWYW.js";import{P as W}from"./index-U4Zd5IK6.js";import{i as F}from"./initDefaultProps-DbZ1HRc7.js";import{d as I,r as f,w as M,c as h}from"./vendor-BVetwVfk.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};
@@ -1 +1 @@
1
- import{u as O,_ as m,c as _}from"./useConfigInject-CypxEK_1.js";import{_ as $}from"./index-DKyOq7hH.js";import{u as w,a as G}from"./index-Bpn272aB.js";import{d as I,c as R,j as g}from"./vendor-xFZ6Jlpw.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};
1
+ import{u as O,_ as m,c as _}from"./useConfigInject-BlTQDaaH.js";import{_ as $}from"./index-BLYcQWYW.js";import{u as w,a as G}from"./index-B7kbey_Y.js";import{d as I,c as R,j as g}from"./vendor-BVetwVfk.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};
@@ -1 +1 @@
1
- import{u as bt}from"./ws-Dg01CdRG.js";import{S as wt,p as ht,a as Ct,b as zt,c as St}from"./community-parser-CO25nZFt.js";import{_ as $t}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as c}from"./index-CHFoDNQ0.js";import{t as It,ai as At,aa as Ft,o as X,aj as Y,a as Z,M as Rt,ak as Tt,al as Ut}from"./icons-C0xSkzug.js";import{r as _,l as Nt,F as d,D as m,c as e,x as a,q as u,v as l,J as p,u as f,H as I,L as Ot,m as A,N as Dt,I as v,G as k,j as tt,a as et}from"./vendor-xFZ6Jlpw.js";import"./index-DKyOq7hH.js";import"./useConfigInject-CypxEK_1.js";import"./transition-8JSy_yCb.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CARXcQZJ.js";import"./index-U4Zd5IK6.js";const jt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qt={key:0,style:{"text-align":"center",padding:"60px"}},Lt={key:1,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},Pt={key:2,class:"post-feed"},Bt={class:"post-head"},Mt={class:"post-meta"},Vt={class:"post-author"},Et={class:"post-time"},Kt={class:"post-body"},Ht={style:{color:"var(--text-primary)","font-weight":"500"}},Gt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Jt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={key:0,style:{color:"var(--text-primary)","font-weight":"500"}},Qt={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Xt={key:1,style:{color:"var(--text-muted)"}},Yt={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Zt={key:1,style:{color:"var(--text-muted)"}},te={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ee={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ae={__name:"Community",setup(oe){const g=bt(),z=_(!1),N=_(!1),O=_(!1),D=_(""),C=_({...wt}),j=_([]),q=_([]),F=_([]),L=_("posts"),R=_(!1),T=_(!1),b=et({author:"",content:""}),i=et({name:"",did:"",email:"",notes:""}),at=[{title:"姓名",key:"name",dataIndex:"name",width:"160px"},{title:"DID",key:"did",dataIndex:"did"},{title:"邮箱",key:"email",dataIndex:"email",width:"200px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"160px"},{title:"操作",key:"action",width:"180px"}],ot=[{title:"联系人",key:"contact"},{title:"状态",key:"status",width:"120px"},{title:"建立时间",key:"createdAt",dataIndex:"createdAt",width:"160px"},{title:"操作",key:"action",width:"100px"}],nt=tt(()=>q.value.map(o=>{const t=j.value.find(s=>s.id===o.contactId);return{...o,contactName:t?t.name:""}})),st=tt(()=>new Set(q.value.map(o=>o.contactId)));function lt(o){return st.value.has(o)}function it(o){const t=["#1677ff","#52c41a","#722ed1","#faad14","#ff4d4f","#13c2c2","#eb2f96"];let s=0;for(let x=0;x<o.length;x++)s=s*31+o.charCodeAt(x)>>>0;return t[s%t.length]}function rt(o){return o?o.length>28?o.slice(0,16)+"..."+o.slice(-8):o:""}function B(o){if(!o)return"—";if(typeof o!="string")return String(o);const t=new Date(o);return isNaN(t.getTime())?o:t.toLocaleString("zh-CN",{hour12:!1})}function ct(o){return{accepted:"green",pending:"orange",blocked:"red"}[o]||"default"}function ut(o){return{accepted:"已接受",pending:"待处理",blocked:"已屏蔽"}[o]||o}async function w(){z.value=!0;try{const[o,t,s,x]=await Promise.all([g.execute("social stats --json",1e4).catch(()=>({output:""})),g.execute("social contact list --json",1e4).catch(()=>({output:""})),g.execute("social friend list --json",1e4).catch(()=>({output:""})),g.execute("social post list --json",1e4).catch(()=>({output:""}))]);C.value=ht(o.output),j.value=Ct(t.output),q.value=zt(s.output),F.value=St(x.output).sort((y,h)=>(h.createdAt||"").localeCompare(y.createdAt||""))}catch(o){c.error("加载社区数据失败: "+(o?.message||o))}finally{z.value=!1}}async function dt(){const o=b.content.trim();if(!o){c.warning("请输入帖子内容");return}N.value=!0;try{const t=o.replace(/"/g,'\\"'),s=b.author.trim(),x=s?`social post publish "${t}" --author "${s.replace(/"/g,'\\"')}"`:`social post publish "${t}"`,{output:y}=await g.execute(x,15e3);if(/error|失败/i.test(y)&&!/"id"/.test(y)){c.error("发布失败: "+y.slice(0,120));return}c.success("帖子已发布"),R.value=!1,M(),await w()}catch(t){c.error("发布失败: "+(t?.message||t))}finally{N.value=!1}}async function pt(){const o=i.name.trim();if(!o){c.warning("请输入联系人姓名");return}O.value=!0;try{const t=[`social contact add "${o.replace(/"/g,'\\"')}"`];i.did.trim()&&t.push(`--did "${i.did.trim().replace(/"/g,'\\"')}"`),i.email.trim()&&t.push(`--email "${i.email.trim().replace(/"/g,'\\"')}"`),i.notes.trim()&&t.push(`--notes "${i.notes.trim().replace(/"/g,'\\"')}"`);const{output:s}=await g.execute(t.join(" "),15e3);if(/error|失败/i.test(s)&&!/"id"/.test(s)){c.error("添加失败: "+s.slice(0,120));return}c.success("联系人已添加"),T.value=!1,V(),await w()}catch(t){c.error("添加失败: "+(t?.message||t))}finally{O.value=!1}}async function mt(o){try{const{output:t}=await g.execute(`social contact delete ${o.id}`,1e4);if(/error|失败/i.test(t)){c.error("删除失败: "+t.slice(0,120));return}c.success("联系人已删除"),await w()}catch(t){c.error("删除失败: "+(t?.message||t))}}async function ft(o){D.value=o.id;try{const{output:t}=await g.execute(`social friend add ${o.id}`,1e4);if(/error|失败/i.test(t)&&!/"id"/.test(t)){c.error("好友请求失败: "+t.slice(0,120));return}c.success("好友请求已发送"),await w(),L.value="friends"}catch(t){c.error("好友请求失败: "+(t?.message||t))}finally{D.value=""}}async function vt(o){try{const{output:t}=await g.execute(`social friend remove ${o.contactId}`,1e4);if(/error|失败/i.test(t)){c.error("移除失败: "+t.slice(0,120));return}c.success("已移除好友"),await w()}catch(t){c.error("移除失败: "+(t?.message||t))}}async function yt(o){try{await g.execute(`social post like ${o.id}`,1e4),o.likes++,w()}catch(t){c.error("点赞失败: "+(t?.message||t))}}function M(){b.author="",b.content=""}function V(){i.name="",i.did="",i.email="",i.notes=""}return Nt(w),(o,t)=>{const s=u("a-button"),x=u("a-space"),y=u("a-statistic"),h=u("a-card"),$=u("a-col"),_t=u("a-row"),gt=u("a-spin"),xt=u("a-avatar"),P=u("a-tab-pane"),E=u("a-tag"),K=u("a-popconfirm"),H=u("a-table"),kt=u("a-tabs"),U=u("a-input"),S=u("a-form-item"),G=u("a-textarea"),J=u("a-form"),W=u("a-modal");return l(),d("div",null,[m("div",jt,[t[14]||(t[14]=m("div",null,[m("h2",{class:"page-title"},"社区"),m("p",{class:"page-sub"},"联系人 · 好友 · 帖子(去中心化社交平台)")],-1)),e(x,null,{default:a(()=>[e(s,{loading:z.value,onClick:w},{icon:a(()=>[e(f(It))]),default:a(()=>[t[11]||(t[11]=p(" 刷新 ",-1))]),_:1},8,["loading"]),e(s,{type:"primary",onClick:t[0]||(t[0]=n=>R.value=!0)},{icon:a(()=>[e(f(At))]),default:a(()=>[t[12]||(t[12]=p(" 发布帖子 ",-1))]),_:1}),e(s,{onClick:t[1]||(t[1]=n=>T.value=!0)},{icon:a(()=>[e(f(Ft))]),default:a(()=>[t[13]||(t[13]=p(" 添加联系人 ",-1))]),_:1})]),_:1})]),e(_t,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"联系人",value:C.value.contacts,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[e(f(X))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"好友",value:C.value.friends,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[e(f(Y))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"帖子",value:C.value.posts,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[e(f(Z))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"消息",value:C.value.messages,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[e(f(Rt))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:24,sm:8,lg:4},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"待处理请求",value:C.value.pendingRequests,"value-style":{color:C.value.pendingRequests>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:a(()=>[e(f(Tt))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),e(kt,{activeKey:L.value,"onUpdate:activeKey":t[2]||(t[2]=n=>L.value=n),class:"community-tabs"},{default:a(()=>[e(P,{key:"posts",tab:"帖子"},{default:a(()=>[z.value&&!F.value.length?(l(),d("div",qt,[e(gt,{size:"large"})])):F.value.length?(l(),d("div",Pt,[(l(!0),d(I,null,Ot(F.value,n=>(l(),A(h,{key:n.key,class:"post-card","body-style":{padding:"16px"}},{default:a(()=>[m("div",Bt,[e(xt,{style:Dt({backgroundColor:it(n.author)})},{default:a(()=>[p(v(n.author.slice(0,1).toUpperCase()),1)]),_:2},1032,["style"]),m("div",Mt,[m("div",Vt,v(n.author),1),m("div",Et,v(B(n.createdAt)),1)]),e(s,{size:"small",type:"text",onClick:r=>yt(n)},{icon:a(()=>[e(f(Ut))]),default:a(()=>[p(" "+v(n.likes),1)]),_:2},1032,["onClick"])]),m("div",Kt,v(n.content),1)]),_:2},1024))),128))])):(l(),d("div",Lt,[e(f(Z),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),t[15]||(t[15]=p(' 暂无帖子,点击"发布帖子"创建第一条 ',-1))]))]),_:1}),e(P,{key:"friends",tab:"好友"},{default:a(()=>[e(H,{columns:ot,"data-source":nt.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:z.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:r})=>[n.key==="contact"?(l(),d(I,{key:0},[m("span",Ht,v(r.contactName||r.contactId),1),r.contactName?(l(),d("div",Gt,v(r.contactId),1)):k("",!0)],64)):k("",!0),n.key==="status"?(l(),A(E,{key:1,color:ct(r.status)},{default:a(()=>[p(v(ut(r.status)),1)]),_:2},1032,["color"])):k("",!0),n.key==="action"?(l(),A(K,{key:2,title:"移除该好友?","ok-text":"移除","cancel-text":"取消",onConfirm:Q=>vt(r)},{default:a(()=>[e(s,{size:"small",type:"link",danger:""},{default:a(()=>[...t[16]||(t[16]=[p("移除",-1)])]),_:1})]),_:1},8,["onConfirm"])):k("",!0)]),emptyText:a(()=>[m("div",Jt,[e(f(Y),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),t[17]||(t[17]=p(' 暂无好友。在"联系人"标签页给联系人发送好友请求。 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(P,{key:"contacts",tab:"联系人"},{default:a(()=>[e(H,{columns:at,"data-source":j.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:z.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:r})=>[n.key==="name"?(l(),d("span",Wt,v(r.name),1)):k("",!0),n.key==="did"?(l(),d(I,{key:1},[r.did?(l(),d("span",Qt,v(rt(r.did)),1)):(l(),d("span",Xt,"—"))],64)):k("",!0),n.key==="email"?(l(),d(I,{key:2},[r.email?(l(),d("span",Yt,v(r.email),1)):(l(),d("span",Zt,"—"))],64)):k("",!0),n.key==="createdAt"?(l(),d("span",te,v(B(r.createdAt)),1)):k("",!0),n.key==="action"?(l(),d(I,{key:4},[lt(r.id)?(l(),A(E,{key:1,color:"green",style:{"font-size":"11px"}},{default:a(()=>[...t[19]||(t[19]=[p("已是好友",-1)])]),_:1})):(l(),A(s,{key:0,size:"small",type:"link",loading:D.value===r.id,onClick:Q=>ft(r)},{default:a(()=>[...t[18]||(t[18]=[p(" 添加好友 ",-1)])]),_:1},8,["loading","onClick"])),e(K,{title:"删除该联系人?","ok-text":"删除","cancel-text":"取消",onConfirm:Q=>mt(r)},{default:a(()=>[e(s,{size:"small",type:"link",danger:"",style:{"margin-left":"4px"}},{default:a(()=>[...t[20]||(t[20]=[p("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])],64)):k("",!0)]),emptyText:a(()=>[m("div",ee,[e(f(X),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),t[21]||(t[21]=p(' 暂无联系人,点击"添加联系人"创建 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),e(W,{open:R.value,"onUpdate:open":t[5]||(t[5]=n=>R.value=n),title:"发布帖子","confirm-loading":N.value,"ok-text":"发布","cancel-text":"取消",onOk:dt,onCancel:M},{default:a(()=>[e(J,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[e(S,{label:"作者"},{default:a(()=>[e(U,{value:b.author,"onUpdate:value":t[3]||(t[3]=n=>b.author=n),placeholder:"可选,留空则使用 cli-user"},null,8,["value"])]),_:1}),e(S,{label:"内容",required:""},{default:a(()=>[e(G,{value:b.content,"onUpdate:value":t[4]||(t[4]=n=>b.content=n),placeholder:"说点什么...","auto-size":{minRows:4,maxRows:10},maxlength:2e3,"show-count":""},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),e(W,{open:T.value,"onUpdate:open":t[10]||(t[10]=n=>T.value=n),title:"添加联系人","confirm-loading":O.value,"ok-text":"添加","cancel-text":"取消",onOk:pt,onCancel:V},{default:a(()=>[e(J,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[e(S,{label:"姓名",required:""},{default:a(()=>[e(U,{value:i.name,"onUpdate:value":t[6]||(t[6]=n=>i.name=n),placeholder:"联系人显示名称"},null,8,["value"])]),_:1}),e(S,{label:"DID"},{default:a(()=>[e(U,{value:i.did,"onUpdate:value":t[7]||(t[7]=n=>i.did=n),placeholder:"did:key:... (可选)"},null,8,["value"])]),_:1}),e(S,{label:"邮箱"},{default:a(()=>[e(U,{value:i.email,"onUpdate:value":t[8]||(t[8]=n=>i.email=n),placeholder:"可选"},null,8,["value"])]),_:1}),e(S,{label:"备注"},{default:a(()=>[e(G,{value:i.notes,"onUpdate:value":t[9]||(t[9]=n=>i.notes=n),"auto-size":{minRows:2,maxRows:4}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},ye=$t(ae,[["__scopeId","data-v-b46c1c9f"]]);export{ye as default};
1
+ import{u as bt}from"./ws-Bv7YH0VB.js";import{S as wt,p as ht,a as Ct,b as zt,c as St}from"./community-parser-CO25nZFt.js";import{_ as $t}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as c}from"./index-CtUuEt-Q.js";import{y as It,am as At,af as Ft,s as X,an as Y,a as Z,M as Rt,ao as Tt,ap as Ut}from"./icons-DbKJDD5_.js";import{r as _,l as Nt,F as d,D as m,c as e,x as a,q as u,v as l,J as p,u as f,H as I,L as Ot,m as A,N as Dt,I as v,G as k,j as tt,a as et}from"./vendor-BVetwVfk.js";import"./index-BLYcQWYW.js";import"./useConfigInject-BlTQDaaH.js";import"./transition-C4Iby8cT.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";const jt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qt={key:0,style:{"text-align":"center",padding:"60px"}},Lt={key:1,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},Pt={key:2,class:"post-feed"},Bt={class:"post-head"},Mt={class:"post-meta"},Vt={class:"post-author"},Et={class:"post-time"},Kt={class:"post-body"},Ht={style:{color:"var(--text-primary)","font-weight":"500"}},Gt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Jt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={key:0,style:{color:"var(--text-primary)","font-weight":"500"}},Qt={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Xt={key:1,style:{color:"var(--text-muted)"}},Yt={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Zt={key:1,style:{color:"var(--text-muted)"}},te={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ee={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ae={__name:"Community",setup(oe){const g=bt(),z=_(!1),N=_(!1),O=_(!1),D=_(""),C=_({...wt}),j=_([]),q=_([]),F=_([]),L=_("posts"),R=_(!1),T=_(!1),b=et({author:"",content:""}),i=et({name:"",did:"",email:"",notes:""}),at=[{title:"姓名",key:"name",dataIndex:"name",width:"160px"},{title:"DID",key:"did",dataIndex:"did"},{title:"邮箱",key:"email",dataIndex:"email",width:"200px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"160px"},{title:"操作",key:"action",width:"180px"}],ot=[{title:"联系人",key:"contact"},{title:"状态",key:"status",width:"120px"},{title:"建立时间",key:"createdAt",dataIndex:"createdAt",width:"160px"},{title:"操作",key:"action",width:"100px"}],nt=tt(()=>q.value.map(o=>{const t=j.value.find(s=>s.id===o.contactId);return{...o,contactName:t?t.name:""}})),st=tt(()=>new Set(q.value.map(o=>o.contactId)));function lt(o){return st.value.has(o)}function it(o){const t=["#1677ff","#52c41a","#722ed1","#faad14","#ff4d4f","#13c2c2","#eb2f96"];let s=0;for(let x=0;x<o.length;x++)s=s*31+o.charCodeAt(x)>>>0;return t[s%t.length]}function rt(o){return o?o.length>28?o.slice(0,16)+"..."+o.slice(-8):o:""}function B(o){if(!o)return"—";if(typeof o!="string")return String(o);const t=new Date(o);return isNaN(t.getTime())?o:t.toLocaleString("zh-CN",{hour12:!1})}function ct(o){return{accepted:"green",pending:"orange",blocked:"red"}[o]||"default"}function ut(o){return{accepted:"已接受",pending:"待处理",blocked:"已屏蔽"}[o]||o}async function w(){z.value=!0;try{const[o,t,s,x]=await Promise.all([g.execute("social stats --json",1e4).catch(()=>({output:""})),g.execute("social contact list --json",1e4).catch(()=>({output:""})),g.execute("social friend list --json",1e4).catch(()=>({output:""})),g.execute("social post list --json",1e4).catch(()=>({output:""}))]);C.value=ht(o.output),j.value=Ct(t.output),q.value=zt(s.output),F.value=St(x.output).sort((y,h)=>(h.createdAt||"").localeCompare(y.createdAt||""))}catch(o){c.error("加载社区数据失败: "+(o?.message||o))}finally{z.value=!1}}async function dt(){const o=b.content.trim();if(!o){c.warning("请输入帖子内容");return}N.value=!0;try{const t=o.replace(/"/g,'\\"'),s=b.author.trim(),x=s?`social post publish "${t}" --author "${s.replace(/"/g,'\\"')}"`:`social post publish "${t}"`,{output:y}=await g.execute(x,15e3);if(/error|失败/i.test(y)&&!/"id"/.test(y)){c.error("发布失败: "+y.slice(0,120));return}c.success("帖子已发布"),R.value=!1,M(),await w()}catch(t){c.error("发布失败: "+(t?.message||t))}finally{N.value=!1}}async function pt(){const o=i.name.trim();if(!o){c.warning("请输入联系人姓名");return}O.value=!0;try{const t=[`social contact add "${o.replace(/"/g,'\\"')}"`];i.did.trim()&&t.push(`--did "${i.did.trim().replace(/"/g,'\\"')}"`),i.email.trim()&&t.push(`--email "${i.email.trim().replace(/"/g,'\\"')}"`),i.notes.trim()&&t.push(`--notes "${i.notes.trim().replace(/"/g,'\\"')}"`);const{output:s}=await g.execute(t.join(" "),15e3);if(/error|失败/i.test(s)&&!/"id"/.test(s)){c.error("添加失败: "+s.slice(0,120));return}c.success("联系人已添加"),T.value=!1,V(),await w()}catch(t){c.error("添加失败: "+(t?.message||t))}finally{O.value=!1}}async function mt(o){try{const{output:t}=await g.execute(`social contact delete ${o.id}`,1e4);if(/error|失败/i.test(t)){c.error("删除失败: "+t.slice(0,120));return}c.success("联系人已删除"),await w()}catch(t){c.error("删除失败: "+(t?.message||t))}}async function ft(o){D.value=o.id;try{const{output:t}=await g.execute(`social friend add ${o.id}`,1e4);if(/error|失败/i.test(t)&&!/"id"/.test(t)){c.error("好友请求失败: "+t.slice(0,120));return}c.success("好友请求已发送"),await w(),L.value="friends"}catch(t){c.error("好友请求失败: "+(t?.message||t))}finally{D.value=""}}async function vt(o){try{const{output:t}=await g.execute(`social friend remove ${o.contactId}`,1e4);if(/error|失败/i.test(t)){c.error("移除失败: "+t.slice(0,120));return}c.success("已移除好友"),await w()}catch(t){c.error("移除失败: "+(t?.message||t))}}async function yt(o){try{await g.execute(`social post like ${o.id}`,1e4),o.likes++,w()}catch(t){c.error("点赞失败: "+(t?.message||t))}}function M(){b.author="",b.content=""}function V(){i.name="",i.did="",i.email="",i.notes=""}return Nt(w),(o,t)=>{const s=u("a-button"),x=u("a-space"),y=u("a-statistic"),h=u("a-card"),$=u("a-col"),_t=u("a-row"),gt=u("a-spin"),xt=u("a-avatar"),P=u("a-tab-pane"),E=u("a-tag"),K=u("a-popconfirm"),H=u("a-table"),kt=u("a-tabs"),U=u("a-input"),S=u("a-form-item"),G=u("a-textarea"),J=u("a-form"),W=u("a-modal");return l(),d("div",null,[m("div",jt,[t[14]||(t[14]=m("div",null,[m("h2",{class:"page-title"},"社区"),m("p",{class:"page-sub"},"联系人 · 好友 · 帖子(去中心化社交平台)")],-1)),e(x,null,{default:a(()=>[e(s,{loading:z.value,onClick:w},{icon:a(()=>[e(f(It))]),default:a(()=>[t[11]||(t[11]=p(" 刷新 ",-1))]),_:1},8,["loading"]),e(s,{type:"primary",onClick:t[0]||(t[0]=n=>R.value=!0)},{icon:a(()=>[e(f(At))]),default:a(()=>[t[12]||(t[12]=p(" 发布帖子 ",-1))]),_:1}),e(s,{onClick:t[1]||(t[1]=n=>T.value=!0)},{icon:a(()=>[e(f(Ft))]),default:a(()=>[t[13]||(t[13]=p(" 添加联系人 ",-1))]),_:1})]),_:1})]),e(_t,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"联系人",value:C.value.contacts,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[e(f(X))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"好友",value:C.value.friends,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[e(f(Y))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"帖子",value:C.value.posts,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[e(f(Z))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"消息",value:C.value.messages,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[e(f(Rt))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:24,sm:8,lg:4},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"待处理请求",value:C.value.pendingRequests,"value-style":{color:C.value.pendingRequests>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:a(()=>[e(f(Tt))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),e(kt,{activeKey:L.value,"onUpdate:activeKey":t[2]||(t[2]=n=>L.value=n),class:"community-tabs"},{default:a(()=>[e(P,{key:"posts",tab:"帖子"},{default:a(()=>[z.value&&!F.value.length?(l(),d("div",qt,[e(gt,{size:"large"})])):F.value.length?(l(),d("div",Pt,[(l(!0),d(I,null,Ot(F.value,n=>(l(),A(h,{key:n.key,class:"post-card","body-style":{padding:"16px"}},{default:a(()=>[m("div",Bt,[e(xt,{style:Dt({backgroundColor:it(n.author)})},{default:a(()=>[p(v(n.author.slice(0,1).toUpperCase()),1)]),_:2},1032,["style"]),m("div",Mt,[m("div",Vt,v(n.author),1),m("div",Et,v(B(n.createdAt)),1)]),e(s,{size:"small",type:"text",onClick:r=>yt(n)},{icon:a(()=>[e(f(Ut))]),default:a(()=>[p(" "+v(n.likes),1)]),_:2},1032,["onClick"])]),m("div",Kt,v(n.content),1)]),_:2},1024))),128))])):(l(),d("div",Lt,[e(f(Z),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),t[15]||(t[15]=p(' 暂无帖子,点击"发布帖子"创建第一条 ',-1))]))]),_:1}),e(P,{key:"friends",tab:"好友"},{default:a(()=>[e(H,{columns:ot,"data-source":nt.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:z.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:r})=>[n.key==="contact"?(l(),d(I,{key:0},[m("span",Ht,v(r.contactName||r.contactId),1),r.contactName?(l(),d("div",Gt,v(r.contactId),1)):k("",!0)],64)):k("",!0),n.key==="status"?(l(),A(E,{key:1,color:ct(r.status)},{default:a(()=>[p(v(ut(r.status)),1)]),_:2},1032,["color"])):k("",!0),n.key==="action"?(l(),A(K,{key:2,title:"移除该好友?","ok-text":"移除","cancel-text":"取消",onConfirm:Q=>vt(r)},{default:a(()=>[e(s,{size:"small",type:"link",danger:""},{default:a(()=>[...t[16]||(t[16]=[p("移除",-1)])]),_:1})]),_:1},8,["onConfirm"])):k("",!0)]),emptyText:a(()=>[m("div",Jt,[e(f(Y),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),t[17]||(t[17]=p(' 暂无好友。在"联系人"标签页给联系人发送好友请求。 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(P,{key:"contacts",tab:"联系人"},{default:a(()=>[e(H,{columns:at,"data-source":j.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:z.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:r})=>[n.key==="name"?(l(),d("span",Wt,v(r.name),1)):k("",!0),n.key==="did"?(l(),d(I,{key:1},[r.did?(l(),d("span",Qt,v(rt(r.did)),1)):(l(),d("span",Xt,"—"))],64)):k("",!0),n.key==="email"?(l(),d(I,{key:2},[r.email?(l(),d("span",Yt,v(r.email),1)):(l(),d("span",Zt,"—"))],64)):k("",!0),n.key==="createdAt"?(l(),d("span",te,v(B(r.createdAt)),1)):k("",!0),n.key==="action"?(l(),d(I,{key:4},[lt(r.id)?(l(),A(E,{key:1,color:"green",style:{"font-size":"11px"}},{default:a(()=>[...t[19]||(t[19]=[p("已是好友",-1)])]),_:1})):(l(),A(s,{key:0,size:"small",type:"link",loading:D.value===r.id,onClick:Q=>ft(r)},{default:a(()=>[...t[18]||(t[18]=[p(" 添加好友 ",-1)])]),_:1},8,["loading","onClick"])),e(K,{title:"删除该联系人?","ok-text":"删除","cancel-text":"取消",onConfirm:Q=>mt(r)},{default:a(()=>[e(s,{size:"small",type:"link",danger:"",style:{"margin-left":"4px"}},{default:a(()=>[...t[20]||(t[20]=[p("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])],64)):k("",!0)]),emptyText:a(()=>[m("div",ee,[e(f(X),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),t[21]||(t[21]=p(' 暂无联系人,点击"添加联系人"创建 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),e(W,{open:R.value,"onUpdate:open":t[5]||(t[5]=n=>R.value=n),title:"发布帖子","confirm-loading":N.value,"ok-text":"发布","cancel-text":"取消",onOk:dt,onCancel:M},{default:a(()=>[e(J,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[e(S,{label:"作者"},{default:a(()=>[e(U,{value:b.author,"onUpdate:value":t[3]||(t[3]=n=>b.author=n),placeholder:"可选,留空则使用 cli-user"},null,8,["value"])]),_:1}),e(S,{label:"内容",required:""},{default:a(()=>[e(G,{value:b.content,"onUpdate:value":t[4]||(t[4]=n=>b.content=n),placeholder:"说点什么...","auto-size":{minRows:4,maxRows:10},maxlength:2e3,"show-count":""},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),e(W,{open:T.value,"onUpdate:open":t[10]||(t[10]=n=>T.value=n),title:"添加联系人","confirm-loading":O.value,"ok-text":"添加","cancel-text":"取消",onOk:pt,onCancel:V},{default:a(()=>[e(J,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[e(S,{label:"姓名",required:""},{default:a(()=>[e(U,{value:i.name,"onUpdate:value":t[6]||(t[6]=n=>i.name=n),placeholder:"联系人显示名称"},null,8,["value"])]),_:1}),e(S,{label:"DID"},{default:a(()=>[e(U,{value:i.did,"onUpdate:value":t[7]||(t[7]=n=>i.did=n),placeholder:"did:key:... (可选)"},null,8,["value"])]),_:1}),e(S,{label:"邮箱"},{default:a(()=>[e(U,{value:i.email,"onUpdate:value":t[8]||(t[8]=n=>i.email=n),placeholder:"可选"},null,8,["value"])]),_:1}),e(S,{label:"备注"},{default:a(()=>[e(G,{value:i.notes,"onUpdate:value":t[9]||(t[9]=n=>i.notes=n),"auto-size":{minRows:2,maxRows:4}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},ye=$t(ae,[["__scopeId","data-v-b46c1c9f"]]);export{ye as default};
@@ -1 +1 @@
1
- import{g as j,u as k,t as D,_ as I,c as x}from"./useConfigInject-CypxEK_1.js";import{c as _}from"./createContext-B4cgNOPl.js";import{t as v,n as S}from"./index-DKyOq7hH.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-xFZ6Jlpw.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};
1
+ import{g as j,c as x,u as k,t as D,_ as I}from"./useConfigInject-BlTQDaaH.js";import{c as _}from"./createContext-B2b9CRr1.js";import{n as S,t as v}from"./index-BLYcQWYW.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-BVetwVfk.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 @@
1
+ .page-title[data-v-379a0162]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-379a0162]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.compliance-tabs[data-v-379a0162] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-379a0162]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
@@ -0,0 +1 @@
1
+ import{u as we}from"./ws-Bv7YH0VB.js";import{s as $e}from"./community-parser-CO25nZFt.js";import{_ as Ee}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as v}from"./index-CtUuEt-Q.js";import{y as qe,a5 as Me,aC as De,ai as Pe,aB as Je,m as Ve,l as de,v as Ke,aD as pe,aE as We,A as Xe}from"./icons-DbKJDD5_.js";import{l as Ye,F as c,D as _,c as o,x as a,m as x,G as y,q as d,r as b,v as s,J as m,u as g,H as O,L as q,I as p,N as ye,j as V,a as oe}from"./vendor-BVetwVfk.js";import"./index-BLYcQWYW.js";import"./useConfigInject-BlTQDaaH.js";import"./transition-C4Iby8cT.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function M(t){const r=$e(t);if(!r)return null;try{return JSON.parse(r)}catch{}const i=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const Ge=Object.freeze(["file-md5","file-sha1","file-sha256","file-sha512","ipv4","ipv6","domain","url","email"]);function A(t,r=0){return typeof t=="number"&&Number.isFinite(t)?t:r}function fe(t,r=0){if(!t||typeof t!="object")return null;const i=t.id||"";if(!i)return null;const U=Array.isArray(t.labels)?t.labels:[];return{key:i,id:i,type:String(t.type||""),value:String(t.value||""),labels:U,confidence:t.confidence!=null?A(t.confidence,null):null,sourceId:t.sourceId??t.source_id??null,sourceName:t.sourceName??t.source_name??null,validFrom:t.validFrom??t.valid_from??null,validUntil:t.validUntil??t.valid_until??null,firstSeenAt:t.firstSeenAt??t.first_seen_at??null,lastSeenAt:t.lastSeenAt??t.last_seen_at??null,_idx:r}}function He(t){const r=M(t);return Array.isArray(r)?r.map(fe).filter(Boolean):[]}function Qe(t){const r=M(t);return!r||typeof r!="object"||Array.isArray(r)?null:{matched:!!r.matched,type:String(r.type||"unknown"),indicator:r.indicator?fe(r.indicator):null}}function Ze(t){const r={total:0,byType:{}},i=M(t);if(!i||typeof i!="object"||Array.isArray(i))return r;if(r.total=A(i.total,0),i.byType&&typeof i.byType=="object")for(const[U,j]of Object.entries(i.byType))typeof j=="number"&&Number.isFinite(j)&&(r.byType[U]=j);return r}function et(t,r=0){if(!t||typeof t!="object")return null;const i=t.entity||"";return i?{key:i,entity:i,eventCount:A(t.eventCount??t.event_count,0),failureRate:A(t.failureRate??t.failure_rate,0),uniqueResources:A(t.uniqueResources??t.unique_resources,0),uniqueActions:A(t.uniqueActions??t.unique_actions,0),burstiness:A(t.burstiness,0),riskScore:A(t.riskScore??t.risk_score,0),_idx:r}:null}function tt(t){const r=M(t);return Array.isArray(r)?r.map(et).filter(Boolean):[]}function ot(t,r=0){return!t||typeof t!="object"?null:{key:r,score:A(t.score,0),reasons:Array.isArray(t.reasons)?t.reasons:[],event:t.event&&typeof t.event=="object"?t.event:null,_idx:r}}function at(t){const r=M(t);return Array.isArray(r)?r.map(ot).filter(Boolean):[]}function ae(t){if(!t)return{noAuditLog:!1,error:""};const r=/no such table:\s*audit_log/i.test(t),i=t.match(/Failed:\s*(.+?)(?:\r?\n|$)/i);return{noAuditLog:r,error:i?i[1].trim():""}}function nt(t){if(t==null||t==="")return"—";const r=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(r.getTime())?String(t):r.toLocaleString("zh-CN",{hour12:!1})}const lt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},rt={class:"filter-bar"},st={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px","word-break":"break-all"}},it={key:0,style:{color:"var(--text-muted)"}},ut={key:1,style:{color:"var(--text-muted)"}},ct={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},dt={key:1,style:{color:"var(--text-muted)"}},pt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},yt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={style:{color:"var(--text-primary)",margin:"16px 0 8px","font-size":"14px"}},mt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},vt={key:2,style:{color:"var(--text-secondary)"}},_t={key:5,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},bt={style:{padding:"30px",color:"var(--text-muted)","text-align":"center"}},gt={key:2,style:{color:"var(--text-primary)",margin:"24px 0 8px","font-size":"14px"}},xt={style:{flex:"1"}},kt={style:{display:"flex",gap:"8px","align-items":"center"}},ht={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},zt={key:1,style:{color:"var(--text-secondary)","font-size":"11px"}},At={key:0,style:{"margin-top":"4px"}},St={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-secondary)"}},Ct={key:0,style:{"margin-top":"12px","font-size":"12px"}},Tt={style:{color:"var(--text-secondary)"}},Ot={style:{color:"var(--text-secondary)"}},Ut={key:0,style:{"margin-top":"4px"}},jt={__name:"Compliance",setup(t){const r=we(),i=b(!1),U=b(!1),j=b(!1),K=b(!1),W=b([]),F=b({total:0,byType:{}}),L=b([]),I=b([]),S=b({noAuditLog:!1,error:""}),D=b("threat"),P=b(""),X=b(!1),w=b(!1),$=b(!1),Y=oe({observable:""}),k=b(null),C=oe({entity:"",days:30}),h=oe({entity:"",threshold:.7,days:1}),me=[{title:"类型",key:"type",width:"120px"},{title:"值",key:"value"},{title:"标签",key:"labels",width:"160px"},{title:"置信度",key:"confidence",width:"90px"},{title:"来源",key:"source",width:"160px"},{title:"最近见到",key:"lastSeen",width:"160px"},{title:"操作",key:"action",width:"90px"}],ve=[{title:"实体",key:"entity",width:"180px"},{title:"风险分",key:"riskScore"},{title:"事件数",key:"eventCount",width:"90px"},{title:"失败率",key:"failureRate",width:"90px"},{title:"资源数",key:"uniqueResources",width:"90px"},{title:"突发度",key:"burstiness",width:"90px"}],_e=V(()=>P.value?W.value.filter(l=>l.type===P.value):W.value),be=V(()=>Object.keys(F.value.byType).length),ge=V(()=>Object.entries(F.value.byType).sort((l,e)=>e[1]-l[1])),ne=V(()=>L.value.filter(l=>l.riskScore>=70).length),xe={ipv4:"blue",ipv6:"cyan",domain:"purple",url:"magenta",email:"gold","file-md5":"orange","file-sha1":"orange","file-sha256":"red","file-sha512":"red",unknown:"default"};function G(l){return xe[l]||"default"}function ke(l){return l>=80?"#ff4d4f":l>=50?"#faad14":"#52c41a"}function le(l){return l>=70?"#ff4d4f":l>=40?"#faad14":"#52c41a"}function he(l,e){return l?l.length>e?l.slice(0,e)+"...":l:""}function ze({key:l}){l==="match"?(k.value=null,X.value=!0):l==="ueba-build"?w.value=!0:l==="ueba-analyze"&&($.value=!0)}async function J(){i.value=!0;try{const[l,e,f]=await Promise.all([r.execute("compliance threat-intel list --limit 200 --json",1e4).catch(()=>({output:""})),r.execute("compliance threat-intel stats --json",8e3).catch(()=>({output:""})),r.execute("compliance ueba top --top-k 20 --json",1e4).catch(()=>({output:""}))]);W.value=He(l.output),F.value=Ze(e.output),S.value=ae(f.output),L.value=S.value.noAuditLog?[]:tt(f.output)}catch(l){v.error("加载合规数据失败: "+(l?.message||l))}finally{i.value=!1}}async function Ae(){const l=Y.observable.trim();if(!l){v.warning("请输入要匹配的可观测值");return}U.value=!0,k.value=null;try{const e=`compliance threat-intel match "${l.replace(/"/g,'\\"')}" --json`,{output:f}=await r.execute(e,8e3),z=Qe(f);if(!z){v.error("匹配失败: "+f.slice(0,120));return}k.value=z,z.matched?v.warning(`命中威胁指标 (${z.type})`):z.type==="unknown"?v.info("无法识别该可观测值类型"):v.success(`未命中(已识别为 ${z.type})`)}catch(e){v.error("匹配失败: "+(e?.message||e))}finally{U.value=!1}}async function Se(l){try{const e=`compliance threat-intel remove ${l.type} "${l.value.replace(/"/g,'\\"')}" --json`,{output:f}=await r.execute(e,8e3);if(/error|失败/i.test(f)&&!/"removed"/.test(f)){v.error("删除失败: "+f.slice(0,120));return}v.success("指标已删除"),await J()}catch(e){v.error("删除失败: "+(e?.message||e))}}async function Ce(){j.value=!0;try{const l=["compliance ueba baseline"];C.entity.trim()&&l.push(`--entity "${C.entity.trim().replace(/"/g,'\\"')}"`),C.days!=null&&l.push(`--days ${C.days}`),l.push("--json");const{output:e}=await r.execute(l.join(" "),3e4),f=ae(e);if(f.noAuditLog){S.value=f,v.warning("audit_log 表为空,无法构建基线"),w.value=!1;return}if(f.error){v.error("构建失败: "+f.error);return}v.success("基线已构建"),w.value=!1,D.value="ueba",await J()}catch(l){v.error("构建失败: "+(l?.message||l))}finally{j.value=!1}}async function Te(){K.value=!0;try{const l=["compliance ueba analyze"];h.entity.trim()&&l.push(`--entity "${h.entity.trim().replace(/"/g,'\\"')}"`),h.threshold!=null&&l.push(`--threshold ${h.threshold}`),h.days!=null&&l.push(`--days ${h.days}`),l.push("--json");const{output:e}=await r.execute(l.join(" "),3e4),f=ae(e);if(f.noAuditLog){S.value=f,v.warning("audit_log 表为空,无可分析事件"),$.value=!1;return}if(f.error&&!e.includes("[")){v.error("分析失败: "+f.error);return}I.value=at(e),v.success(`分析完成,发现 ${I.value.length} 个异常`),$.value=!1,D.value="ueba"}catch(l){v.error("分析失败: "+(l?.message||l))}finally{K.value=!1}}return Ye(J),(l,e)=>{const f=d("a-button"),z=d("a-menu-item"),Oe=d("a-menu"),Ue=d("a-dropdown"),re=d("a-space"),R=d("a-statistic"),N=d("a-card"),E=d("a-col"),je=d("a-row"),T=d("a-tag"),se=d("a-radio-button"),Ie=d("a-radio-group"),Ne=d("a-popconfirm"),ie=d("a-table"),ue=d("a-tab-pane"),ce=d("a-alert"),Re=d("a-progress"),Be=d("a-list-item"),Fe=d("a-list"),Le=d("a-tabs"),H=d("a-input"),B=d("a-form-item"),Q=d("a-form"),Z=d("a-modal"),ee=d("a-input-number");return s(),c("div",null,[_("div",lt,[e[18]||(e[18]=_("div",null,[_("h2",{class:"page-title"},"合规与威胁情报"),_("p",{class:"page-sub"},"威胁指标 (IoC) · 用户行为分析 (UEBA)")],-1)),o(re,null,{default:a(()=>[o(f,{loading:i.value,onClick:J},{icon:a(()=>[o(g(qe))]),default:a(()=>[e[11]||(e[11]=m(" 刷新 ",-1))]),_:1},8,["loading"]),o(Ue,{trigger:["click"]},{overlay:a(()=>[o(Oe,{onClick:ze},{default:a(()=>[o(z,{key:"match"},{default:a(()=>[o(g(De)),e[13]||(e[13]=m(" 匹配指标",-1))]),_:1}),o(z,{key:"ueba-build"},{default:a(()=>[o(g(Pe)),e[14]||(e[14]=m(" 构建基线",-1))]),_:1}),o(z,{key:"ueba-analyze"},{default:a(()=>[o(g(Je)),e[15]||(e[15]=m(" 行为分析",-1))]),_:1}),o(z,{key:"import",disabled:""},{default:a(()=>[o(g(Ve)),e[16]||(e[16]=m(" 导入 STIX bundle ",-1)),e[17]||(e[17]=_("span",{style:{color:"var(--text-muted)","font-size":"11px","margin-left":"6px"}},"(CLI 端)",-1))]),_:1})]),_:1})]),default:a(()=>[o(f,{type:"primary"},{icon:a(()=>[o(g(Me))]),default:a(()=>[e[12]||(e[12]=m(" 操作 ▼ ",-1))]),_:1})]),_:1})]),_:1})]),o(je,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(E,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"IoC 总数",value:F.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[o(g(de))]),_:1},8,["value"])]),_:1})]),_:1}),o(E,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"IoC 类型",value:be.value,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[o(g(Ke))]),_:1},8,["value"])]),_:1})]),_:1}),o(E,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"风险实体",value:L.value.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[o(g(pe))]),_:1},8,["value"])]),_:1})]),_:1}),o(E,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"高风险 (≥70)",value:ne.value,"value-style":{color:ne.value>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:a(()=>[o(g(We))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),o(E,{xs:24,sm:8,lg:4},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"近期异常",value:I.value.length,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[o(g(Xe))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),F.value.total>0?(s(),x(N,{key:0,title:"IoC 类型分布",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[o(re,{size:[12,8],wrap:""},{default:a(()=>[(s(!0),c(O,null,q(ge.value,([n,u])=>(s(),x(T,{key:n,color:G(n)},{default:a(()=>[m(p(n)+": "+p(u),1)]),_:2},1032,["color"]))),128))]),_:1})]),_:1})):y("",!0),o(Le,{activeKey:D.value,"onUpdate:activeKey":e[1]||(e[1]=n=>D.value=n),class:"compliance-tabs"},{default:a(()=>[o(ue,{key:"threat",tab:"威胁情报"},{default:a(()=>[_("div",rt,[o(Ie,{value:P.value,"onUpdate:value":e[0]||(e[0]=n=>P.value=n),size:"small"},{default:a(()=>[o(se,{value:""},{default:a(()=>[...e[19]||(e[19]=[m("全部",-1)])]),_:1}),(s(!0),c(O,null,q(g(Ge),n=>(s(),x(se,{key:n,value:n},{default:a(()=>[m(p(n),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ie,{columns:me,"data-source":_e.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="type"?(s(),x(T,{key:0,color:G(u.type),style:{"font-family":"monospace"}},{default:a(()=>[m(p(u.type),1)]),_:2},1032,["color"])):y("",!0),n.key==="value"?(s(),c("span",st,p(he(u.value,64)),1)):y("",!0),n.key==="labels"?(s(),c(O,{key:2},[(s(!0),c(O,null,q(u.labels,te=>(s(),x(T,{key:te,color:"orange",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[m(p(te),1)]),_:2},1024))),128)),u.labels.length?y("",!0):(s(),c("span",it,"—"))],64)):y("",!0),n.key==="confidence"?(s(),c(O,{key:3},[u.confidence!=null?(s(),c("span",{key:0,style:ye({color:ke(u.confidence),fontWeight:500})},p(u.confidence),5)):(s(),c("span",ut,"—"))],64)):y("",!0),n.key==="source"?(s(),c(O,{key:4},[u.sourceName?(s(),c("span",ct,p(u.sourceName),1)):(s(),c("span",dt,"—"))],64)):y("",!0),n.key==="lastSeen"?(s(),c("span",pt,p(g(nt)(u.lastSeenAt)),1)):y("",!0),n.key==="action"?(s(),x(Ne,{key:6,title:"删除该指标?","ok-text":"删除","cancel-text":"取消",onConfirm:te=>Se(u)},{default:a(()=>[o(f,{size:"small",type:"link",danger:""},{default:a(()=>[...e[20]||(e[20]=[m("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])):y("",!0)]),emptyText:a(()=>[_("div",yt,[o(g(de),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),e[21]||(e[21]=m(" 暂无威胁指标。需通过 CLI 导入 STIX bundle: ",-1)),e[22]||(e[22]=_("code",{style:{"font-size":"11px"}},"cc compliance threat-intel import <file.json>",-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ue,{key:"ueba",tab:"行为分析 (UEBA)"},{default:a(()=>[S.value.noAuditLog?(s(),x(ce,{key:0,type:"info","show-icon":"",message:"尚无审计日志",description:"UEBA 基于 audit_log 表的审计事件。先在桌面端或 CLI 触发一些受审计的操作(如 cc auth login / cc note add),再回来运行「构建基线」。",style:{"margin-bottom":"16px"}})):S.value.error?(s(),x(ce,{key:1,type:"error","show-icon":"",message:`UEBA 错误:${S.value.error}`,style:{"margin-bottom":"16px"}},null,8,["message"])):y("",!0),_("h3",ft,"高风险实体 (Top "+p(L.value.length)+")",1),o(ie,{columns:ve,"data-source":L.value,pagination:!1,size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="entity"?(s(),c("span",mt,p(u.entity),1)):y("",!0),n.key==="riskScore"?(s(),x(Re,{key:1,percent:Math.min(u.riskScore,100),"stroke-color":le(u.riskScore),size:"small",format:()=>u.riskScore.toFixed(1)},null,8,["percent","stroke-color","format"])):y("",!0),n.key==="eventCount"?(s(),c("span",vt,p(u.eventCount),1)):y("",!0),n.key==="failureRate"?(s(),c("span",{key:3,style:ye({color:u.failureRate>.3?"#ff4d4f":"var(--text-secondary)",fontFamily:"monospace"})},p((u.failureRate*100).toFixed(1))+"% ",5)):y("",!0),n.key==="uniqueResources"?(s(),x(T,{key:4,color:"cyan",style:{"font-size":"11px"}},{default:a(()=>[m(p(u.uniqueResources),1)]),_:2},1024)):y("",!0),n.key==="burstiness"?(s(),c("span",_t,p((u.burstiness*100).toFixed(0))+"% ",1)):y("",!0)]),emptyText:a(()=>[_("div",bt,[o(g(pe),{style:{"font-size":"32px","margin-bottom":"8px",display:"block"}}),m(" "+p(S.value.noAuditLog?"审计日志为空,无可分析实体":"暂无风险实体"),1)])]),_:1},8,["data-source","loading"]),I.value.length?(s(),c("h3",gt," 近期异常 ("+p(I.value.length)+") ",1)):y("",!0),I.value.length?(s(),x(Fe,{key:3,size:"small","data-source":I.value,locale:{emptyText:"无异常"}},{renderItem:a(({item:n})=>[o(Be,{style:{background:"var(--bg-card)",padding:"10px 16px"}},{default:a(()=>[_("div",xt,[_("div",kt,[o(T,{color:le(n.score*100)},{default:a(()=>[m("score "+p(n.score.toFixed(2)),1)]),_:2},1032,["color"]),n.event?.entity?(s(),c("span",ht,p(n.event.entity),1)):y("",!0),n.event?.action?(s(),c("span",zt," → "+p(n.event.action),1)):y("",!0)]),n.reasons.length?(s(),c("div",At,[(s(!0),c(O,null,q(n.reasons,u=>(s(),x(T,{key:u,color:"volcano",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[m(p(u),1)]),_:2},1024))),128))])):y("",!0)])]),_:2},1024)]),_:1},8,["data-source"])):y("",!0)]),_:1})]),_:1},8,["activeKey"]),o(Z,{open:X.value,"onUpdate:open":e[3]||(e[3]=n=>X.value=n),title:"匹配威胁指标","confirm-loading":U.value,width:500,"ok-text":"匹配","cancel-text":"关闭",onOk:Ae},{default:a(()=>[o(Q,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(B,{label:"可观测值",required:""},{default:a(()=>[o(H,{value:Y.observable,"onUpdate:value":e[2]||(e[2]=n=>Y.observable=n),placeholder:"IP / 域名 / URL / 邮箱 / 文件哈希","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),k.value?(s(),x(N,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:a(()=>[o(R,{title:"匹配结果",value:k.value.matched?"命中":"未命中","value-style":{color:k.value.matched?"#ff4d4f":"#52c41a"}},null,8,["value","value-style"]),_("div",St,[e[23]||(e[23]=m(" 检测类型: ",-1)),o(T,{color:G(k.value.type)},{default:a(()=>[m(p(k.value.type),1)]),_:1},8,["color"])]),k.value.indicator?(s(),c("div",Ct,[_("div",Tt,"来源: "+p(k.value.indicator.sourceName||"—"),1),_("div",Ot,"置信度: "+p(k.value.indicator.confidence??"—"),1),k.value.indicator.labels.length?(s(),c("div",Ut,[(s(!0),c(O,null,q(k.value.indicator.labels,n=>(s(),x(T,{key:n,color:"orange",style:{"font-size":"10px"}},{default:a(()=>[m(p(n),1)]),_:2},1024))),128))])):y("",!0)])):y("",!0)]),_:1})):y("",!0)]),_:1},8,["open","confirm-loading"]),o(Z,{open:w.value,"onUpdate:open":e[6]||(e[6]=n=>w.value=n),title:"构建 UEBA 基线","confirm-loading":j.value,width:480,"ok-text":"构建","cancel-text":"取消",onOk:Ce},{default:a(()=>[o(Q,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:a(()=>[o(B,{label:"实体(可选)"},{default:a(()=>[o(H,{value:C.entity,"onUpdate:value":e[4]||(e[4]=n=>C.entity=n),placeholder:"留空则全量"},null,8,["value"])]),_:1}),o(B,{label:"天数"},{default:a(()=>[o(ee,{value:C.days,"onUpdate:value":e[5]||(e[5]=n=>C.days=n),min:1,max:365,placeholder:"例如 30",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),e[24]||(e[24]=_("p",{style:{color:"var(--text-secondary)","font-size":"12px",margin:"0"}}," 从 audit_log 读取最近 N 天的事件,按实体计算事件计数 / 失败率 / 资源覆盖等基线指标。 ",-1))]),_:1},8,["open","confirm-loading"]),o(Z,{open:$.value,"onUpdate:open":e[10]||(e[10]=n=>$.value=n),title:"运行行为分析","confirm-loading":K.value,width:480,"ok-text":"分析","cancel-text":"取消",onOk:Te},{default:a(()=>[o(Q,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:a(()=>[o(B,{label:"实体(可选)"},{default:a(()=>[o(H,{value:h.entity,"onUpdate:value":e[7]||(e[7]=n=>h.entity=n),placeholder:"留空则全量"},null,8,["value"])]),_:1}),o(B,{label:"阈值"},{default:a(()=>[o(ee,{value:h.threshold,"onUpdate:value":e[8]||(e[8]=n=>h.threshold=n),min:0,max:1,step:.05,style:{width:"100%"}},null,8,["value"])]),_:1}),o(B,{label:"天数"},{default:a(()=>[o(ee,{value:h.days,"onUpdate:value":e[9]||(e[9]=n=>h.days=n),min:1,max:30,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),e[25]||(e[25]=_("p",{style:{color:"var(--text-secondary)","font-size":"12px",margin:"0"}}," 将最近 N 天事件与已存基线对比;分数 ≥ 阈值的事件作为异常输出。 ",-1))]),_:1},8,["open","confirm-loading"])])}}},Pt=Ee(jt,[["__scopeId","data-v-379a0162"]]);export{Pt as default};