chainlesschain 0.157.9 → 0.158.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/bin/chainlesschain.js +0 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-C4XQxptM.js → AIOps-9QEKGr43.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-CvKbykKA.js → ActionButton-BQElVBgD.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-DFMAWKUR.js → Analytics-DbZbFR_a.js} +1 -1
  7. package/src/assets/web-panel/assets/{AppLayout-BkNdtTbn.js → AppLayout-BbfBwVfE.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-Bw7KSJD_.js → Audit-DzddAZVx.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-CvAa9Hm_.js → BaseInput-60t9IMEz.js} +1 -1
  10. package/src/assets/web-panel/assets/{Checkbox-YsCNWg9S.js → Checkbox-Ba1Rf2Ea.js} +1 -1
  11. package/src/assets/web-panel/assets/{Codegen-DDiVk21N.js → Codegen-WiYmL3oB.js} +1 -1
  12. package/src/assets/web-panel/assets/{Col-Dpb7Eik4.js → Col-D2zhpSqE.js} +1 -1
  13. package/src/assets/web-panel/assets/{Community-Bglv8oIv.js → Community-DgqmUGwT.js} +1 -1
  14. package/src/assets/web-panel/assets/{Compact-DC8UsEAe.js → Compact-D_dbJDbi.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compliance-DzVghx7L.js → Compliance-BVcVb-e2.js} +1 -1
  16. package/src/assets/web-panel/assets/{Cron-I81HiCa1.js → Cron-Cs5QaKTP.js} +1 -1
  17. package/src/assets/web-panel/assets/{Crosschain-48CdkgQf.js → Crosschain-pjWfIM8s.js} +1 -1
  18. package/src/assets/web-panel/assets/{DID-CVYxjLQn.js → DID-DQtsjz3X.js} +1 -1
  19. package/src/assets/web-panel/assets/{Dropdown-DBfZJHBI.js → Dropdown-BM_ljd87.js} +1 -1
  20. package/src/assets/web-panel/assets/{Federation-BT-pF1wN.js → Federation-CId-3zn6.js} +1 -1
  21. package/src/assets/web-panel/assets/{FormItemContext-B-sn9E_W.js → FormItemContext-CnzbixSE.js} +1 -1
  22. package/src/assets/web-panel/assets/{Git-DTh2i-Qk.js → Git-B38QeOPF.js} +1 -1
  23. package/src/assets/web-panel/assets/{Governance-D788Lws6.js → Governance-DrGkAjd1.js} +1 -1
  24. package/src/assets/web-panel/assets/{Inference-CnFa6Se9.js → Inference-BjkHB4sD.js} +1 -1
  25. package/src/assets/web-panel/assets/{KnowledgeGraph-DHaMxawn.js → KnowledgeGraph-Trs1XJFK.js} +1 -1
  26. package/src/assets/web-panel/assets/{Marketplace-BdOCF2RA.js → Marketplace-BnpOoITi.js} +1 -1
  27. package/src/assets/web-panel/assets/{Memory-Vl_lYCs2.js → Memory-BHXHpldt.js} +1 -1
  28. package/src/assets/web-panel/assets/NLProgramming-B3BALajs.js +1 -0
  29. package/src/assets/web-panel/assets/{Notes-BvC5_V2H.js → Notes-u6lLTv0t.js} +1 -1
  30. package/src/assets/web-panel/assets/{Organization-Cxhhw4aD.js → Organization-CQ1X722j.js} +1 -1
  31. package/src/assets/web-panel/assets/{Overflow-L_28D41_.js → Overflow-DHKu8e8g.js} +1 -1
  32. package/src/assets/web-panel/assets/{Permissions-ByLhEAbz.js → Permissions-B2XrAUBW.js} +1 -1
  33. package/src/assets/web-panel/assets/{Pipeline-CnZJNdgt.js → Pipeline-C0K9-DnR.js} +1 -1
  34. package/src/assets/web-panel/assets/{Privacy-BJIajCGG.js → Privacy-BKPoZngH.js} +1 -1
  35. package/src/assets/web-panel/assets/{ProjectSettings-N0r_mtec.js → ProjectSettings-C34C7hFt.js} +1 -1
  36. package/src/assets/web-panel/assets/{Providers-B2A35VhD.js → Providers-BFiMVWaM.js} +1 -1
  37. package/src/assets/web-panel/assets/{Recommend-DYb61WNp.js → Recommend-BmUhysGC.js} +1 -1
  38. package/src/assets/web-panel/assets/{Reputation-C9BfnI0z.js → Reputation-BlfSvJww.js} +1 -1
  39. package/src/assets/web-panel/assets/{Row-CpPHVi7H.js → Row-Dl74576S.js} +1 -1
  40. package/src/assets/web-panel/assets/{RssFeed-CbqJDErh.js → RssFeed-9_MkDUxZ.js} +1 -1
  41. package/src/assets/web-panel/assets/{Search-C0gd765-.js → Search-CSRY_TYa.js} +1 -1
  42. package/src/assets/web-panel/assets/{Security-DsYWAhpE.js → Security-DfDoKfkl.js} +1 -1
  43. package/src/assets/web-panel/assets/{Skeleton-TzxE-JJt.js → Skeleton-6CF_3QUY.js} +1 -1
  44. package/src/assets/web-panel/assets/Skills-DowQcRe1.js +1 -0
  45. package/src/assets/web-panel/assets/{Sla-mftEtvGn.js → Sla-B93c8j92.js} +1 -1
  46. package/src/assets/web-panel/assets/{Templates-DgonVRQJ.js → Templates-DJ_hvs5c.js} +1 -1
  47. package/src/assets/web-panel/assets/{Tenant-BB-LLJMZ.js → Tenant-BXS8s6vl.js} +1 -1
  48. package/src/assets/web-panel/assets/{Tokens-DHOkHNur.js → Tokens-CvmTVU7E.js} +1 -1
  49. package/src/assets/web-panel/assets/{Trigger-BV4JPD3z.js → Trigger-BenSsaoN.js} +1 -1
  50. package/src/assets/web-panel/assets/{Trust-BpC4gDis.js → Trust-HMz40LfZ.js} +1 -1
  51. package/src/assets/web-panel/assets/{VideoEditing-CeDFfKrq.js → VideoEditing-DEhH42sI.js} +1 -1
  52. package/src/assets/web-panel/assets/{Wallet-CcNCVaor.js → Wallet-AGwfOdTM.js} +1 -1
  53. package/src/assets/web-panel/assets/{WebAuthn-BbIPA6Ca.js → WebAuthn-DK5tKWul.js} +1 -1
  54. package/src/assets/web-panel/assets/{WorkflowEditor-DxkitXpf.js → WorkflowEditor-vlujdL6I.js} +1 -1
  55. package/src/assets/web-panel/assets/{colors-2MPUdPu2.js → colors-BiB5aDao.js} +1 -1
  56. package/src/assets/web-panel/assets/{compact-item-B4vcKR0x.js → compact-item-CHderV9n.js} +1 -1
  57. package/src/assets/web-panel/assets/{createContext-Div8Cl0F.js → createContext-DMZ-5dy2.js} +1 -1
  58. package/src/assets/web-panel/assets/{hasIn-9c9xldOR.js → hasIn-BKDBYP3s.js} +1 -1
  59. package/src/assets/web-panel/assets/{index-BuVNDnn8.js → index-7fxCGMoL.js} +1 -1
  60. package/src/assets/web-panel/assets/{index-ZW72ov7W.js → index-7pqZqPD2.js} +1 -1
  61. package/src/assets/web-panel/assets/{index-CIE6ht2b.js → index-A4RpHMOa.js} +1 -1
  62. package/src/assets/web-panel/assets/{index-dV8k_pMc.js → index-AIdelwOe.js} +1 -1
  63. package/src/assets/web-panel/assets/index-B5oebI6W.js +1 -0
  64. package/src/assets/web-panel/assets/{index-COJ-mQYg.js → index-B7fivpG2.js} +1 -1
  65. package/src/assets/web-panel/assets/{index-BntG0RJO.js → index-BBWUR4u4.js} +1 -1
  66. package/src/assets/web-panel/assets/{index-BCfVA9mJ.js → index-BBk2e7vJ.js} +1 -1
  67. package/src/assets/web-panel/assets/{index-BfoYep3e.js → index-BRRFK-im.js} +1 -1
  68. package/src/assets/web-panel/assets/{index-CVYrm1az.js → index-BVOI707f.js} +1 -1
  69. package/src/assets/web-panel/assets/{index-C1GXp5YD.js → index-BadelvSE.js} +1 -1
  70. package/src/assets/web-panel/assets/{index-BbqCdQXU.js → index-BfKFNptm.js} +1 -1
  71. package/src/assets/web-panel/assets/{index-OhUZFfxQ.js → index-BgDX-tzO.js} +1 -1
  72. package/src/assets/web-panel/assets/{index-B58J4NxK.js → index-BjSojphX.js} +1 -1
  73. package/src/assets/web-panel/assets/{index-DJAPu9VF.js → index-BlXskar6.js} +1 -1
  74. package/src/assets/web-panel/assets/{index-B65KFSc3.js → index-BryAkWUJ.js} +1 -1
  75. package/src/assets/web-panel/assets/{index-D0GALIQZ.js → index-C1p_dZw0.js} +1 -1
  76. package/src/assets/web-panel/assets/{index-CtM3tjRj.js → index-CBYNsy51.js} +1 -1
  77. package/src/assets/web-panel/assets/{index-IzAqu_OK.js → index-CEpcKl17.js} +1 -1
  78. package/src/assets/web-panel/assets/{index--tOLU2ID.js → index-CUT3Nmzx.js} +1 -1
  79. package/src/assets/web-panel/assets/{index-Ca3iTiXs.js → index-CbpCY2ch.js} +1 -1
  80. package/src/assets/web-panel/assets/{index-DgWftysw.js → index-D3PGpBPm.js} +1 -1
  81. package/src/assets/web-panel/assets/{index-C-CTCrAH.js → index-D3lD9wgX.js} +1 -1
  82. package/src/assets/web-panel/assets/index-D5Beu9ZA.js +1 -0
  83. package/src/assets/web-panel/assets/{index-CIWKlZ1X.js → index-DRRzH4Ge.js} +1 -1
  84. package/src/assets/web-panel/assets/{index-BcnQrVVZ.js → index-DRcTAUJA.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-COdKVelL.js → index-DZ8MjPLC.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-ZZ_4A9um.js → index-DfcXDy2A.js} +3 -3
  87. package/src/assets/web-panel/assets/{index-B4hcllQg.js → index-DtDFSCfE.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-D1JeOKve.js → index-DvI8Xtzv.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-D-0g6tCK.js → index-DvfAkHw8.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-D--EKCHy.js → index-DyXslU_B.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-Dk3ZySO2.js → index-MoLxDrkb.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-DogHNcyC.js → index-Ncxqj2UN.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-DdHPswKn.js → index-YgC7QI1N.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-3KbT-bG7.js → index-_sntSncx.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BjGOthNv.js → index-uujjC_4g.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DIe3dY84.js → index-yMt4C1Gh.js} +1 -1
  97. package/src/assets/web-panel/assets/{initDefaultProps--L8bzddm.js → initDefaultProps-B2vQoQga.js} +1 -1
  98. package/src/assets/web-panel/assets/{motion-BR7NF0vx.js → motion-D2eluOJu.js} +1 -1
  99. package/src/assets/web-panel/assets/{move-BpyQMRtF.js → move-CgcvSoZ7.js} +1 -1
  100. package/src/assets/web-panel/assets/{omit-RkKN6uqw.js → omit-DvLh7wH1.js} +1 -1
  101. package/src/assets/web-panel/assets/{pickAttrs-Bk8_mKGY.js → pickAttrs-BsseBclw.js} +1 -1
  102. package/src/assets/web-panel/assets/{placementArrow-CBAaXBxj.js → placementArrow-XLLtr9qD.js} +1 -1
  103. package/src/assets/web-panel/assets/{responsiveObserve-BzrPInK7.js → responsiveObserve-ByCb5zZK.js} +1 -1
  104. package/src/assets/web-panel/assets/{slide-CXFBsLyp.js → slide-CeP5JCiZ.js} +1 -1
  105. package/src/assets/web-panel/assets/{statusUtils-6TeOuUzQ.js → statusUtils-DMVoo96t.js} +1 -1
  106. package/src/assets/web-panel/assets/{styleChecker-CQt4HHRm.js → styleChecker-Cz5mJgc8.js} +1 -1
  107. package/src/assets/web-panel/assets/{transition-CGYDOK3N.js → transition-DSe9CgZe.js} +1 -1
  108. package/src/assets/web-panel/assets/{useConfigInject-BKqJUQaF.js → useConfigInject-DCcT0grw.js} +1 -1
  109. package/src/assets/web-panel/assets/{useFlexGapSupport--RuYYIc6.js → useFlexGapSupport-BZkoDuF3.js} +1 -1
  110. package/src/assets/web-panel/assets/{vnode-I9keNa_U.js → vnode-Dexy2NN9.js} +1 -1
  111. package/src/assets/web-panel/assets/{zoom-BNV3xYvt.js → zoom-CDfM_sRk.js} +1 -1
  112. package/src/assets/web-panel/index.html +1 -1
  113. package/src/commands/nlprog.js +25 -15
  114. package/src/gateways/ws/ws-server.js +12 -1
  115. package/src/lib/web-ui-server.js +33 -0
  116. package/src/assets/web-panel/assets/NLProgramming-CgD2H0Pc.js +0 -1
  117. package/src/assets/web-panel/assets/Skills-DfaRaffm.js +0 -1
  118. package/src/assets/web-panel/assets/index-BzBaZFuT.js +0 -1
  119. package/src/assets/web-panel/assets/index-CDoxJ9Cl.js +0 -1
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.157.9",
3
+ "version": "0.158.0",
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
- 65ea92ae5745782d55ac77d9dd693b571ddfcecf2873345d0df78b9d57bc4a91
1
+ 613ec5f51ef3c3e00e460b85a8d89c5a4b6ae284044f2f3301ef027b2fa0629e
@@ -1 +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-BbqCdQXU.js";import{Y as We,ac as Ye,A as se,R as ie,aI as re,aP as Ze,aB as Xe,aa as et}from"./icons-ukMaZ3tx.js";import tt from"./index-D0GALIQZ.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 Y}from"./vendor-BVetwVfk.js";import"./index-ZZ_4A9um.js";import"./useConfigInject-BKqJUQaF.js";import"./transition-CGYDOK3N.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";import"./KeyCode-D63Tfrq7.js";import"./omit-RkKN6uqw.js";import"./pickAttrs-Bk8_mKGY.js";import"./initDefaultProps--L8bzddm.js";import"./motion-BR7NF0vx.js";import"./raf-Deuc0E8-.js";import"./index-DIe3dY84.js";import"./index-C-CTCrAH.js";import"./isVisible-C7tPsqfj.js";import"./useState-DoAhV80c.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-B4vcKR0x.js";import"./createContext-Div8Cl0F.js";import"./Compact-DC8UsEAe.js";import"./_getTag-CWA3v-Ds.js";import"./styleChecker-CQt4HHRm.js";import"./zoom-BNV3xYvt.js";import"./ActionButton-CvKbykKA.js";import"./vnode-I9keNa_U.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 I=!1;return g===!0||g===1||g==="1"?I=!0:g===!1||g===0||g==="0"?I=!1:I=!!g,{key:i,id:i,name:String(l.name||""),triggerCondition:l.triggerCondition??l.trigger_condition??"",steps:l.steps||"",enabled:I,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"}},Pt={style:{color:"#1677ff"}},At={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"}},It={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},Ot={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),I=w(!1),ce=w([]),pe=w([]),Z=w([]),P=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),X=w(!1),z=Y({severity:"P3",metric:"",description:""}),x=Y({name:"",triggerJson:"",stepsJson:""}),O=Y({metric:"",values:""}),A=Y({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(()=>P.value.incidents.byStatus.open+P.value.incidents.byStatus.acknowledged),Pe=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 Ae(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,X.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),Z.value=dt(d.output),P.value=yt(f.output)}catch(o){y.error("加载 AIOps 数据失败: "+(o?.message||o))}finally{i.value=!1}}async function Ie(){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 Oe(){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=O.metric.trim();if(!o){y.warning("请填写指标名");return}const e=O.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(!A.metric||A.value==null){y.warning("请选择指标并填写测试值");return}I.value=!0,S.value=null;try{const o=`ops detect "${A.metric.replace(/"/g,'\\"')}" ${A.value} --algorithm ${A.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{I.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(){O.metric="",O.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(_(Ze)),e[23]||(e[23]=p(" 异常检测",-1))]),_:1})]),_:1})]),default:a(()=>[t(d,{type:"primary"},{icon:a(()=>[t(_(Ye))]),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:P.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:P.value.incidents.byStatus.open+P.value.incidents.byStatus.acknowledged,"value-style":{color:he.value>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(_(Xe))]),_: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:P.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:P.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:P.value.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(_(re))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),P.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(P.value.incidents.bySeverity[n]||0),1)]),_:2},1032,["color"]))),128)),h("span",ft," 平均解决时间: "+c(je(P.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":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==="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:Ae(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":Z.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",Pt,c(u.mean),1),h("span",At,"σ "+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:Ie,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:Oe,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:O.metric,"onUpdate:value":e[11]||(e[11]=n=>O.metric=n),placeholder:"cpu_usage"},null,8,["value"])]),_:1}),t($,{label:"样本值",required:""},{default:a(()=>[t(G,{value:O.values,"onUpdate:value":e[12]||(e[12]=n=>O.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:X.value,"onUpdate:open":e[17]||(e[17]=n=>X.value=n),title:"异常检测","confirm-loading":I.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:A.metric,"onUpdate:value":e[14]||(e[14]=n=>A.metric=n),"show-search":"",placeholder:"选择已建立基线的指标"},{default:a(()=>[(r(!0),v(j,null,B(Z.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:A.value,"onUpdate:value":e[15]||(e[15]=n=>A.value=n),style:{width:"100%"}},null,8,["value"])]),_:1}),t($,{label:"算法"},{default:a(()=>[t(ae,{value:A.algorithm,"onUpdate:value":e[16]||(e[16]=n=>A.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",It," 原因: "+c($e(S.value.reason)),1)):m("",!0),S.value.baseline?(r(),v("div",Ot,[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};
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-BfKFNptm.js";import{Y as We,ac as Ye,A as se,R as ie,aI as re,aP as Ze,aB as Xe,aa as et}from"./icons-ukMaZ3tx.js";import tt from"./index-C1p_dZw0.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 Y}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";import"./KeyCode-D63Tfrq7.js";import"./omit-DvLh7wH1.js";import"./pickAttrs-BsseBclw.js";import"./initDefaultProps-B2vQoQga.js";import"./motion-D2eluOJu.js";import"./raf-Deuc0E8-.js";import"./index-yMt4C1Gh.js";import"./index-D3lD9wgX.js";import"./isVisible-C7tPsqfj.js";import"./useState-DoAhV80c.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-CHderV9n.js";import"./createContext-DMZ-5dy2.js";import"./Compact-D_dbJDbi.js";import"./_getTag-CWA3v-Ds.js";import"./styleChecker-Cz5mJgc8.js";import"./zoom-CDfM_sRk.js";import"./ActionButton-BQElVBgD.js";import"./vnode-Dexy2NN9.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 I=!1;return g===!0||g===1||g==="1"?I=!0:g===!1||g===0||g==="0"?I=!1:I=!!g,{key:i,id:i,name:String(l.name||""),triggerCondition:l.triggerCondition??l.trigger_condition??"",steps:l.steps||"",enabled:I,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"}},Pt={style:{color:"#1677ff"}},At={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"}},It={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},Ot={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),I=w(!1),ce=w([]),pe=w([]),Z=w([]),P=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),X=w(!1),z=Y({severity:"P3",metric:"",description:""}),x=Y({name:"",triggerJson:"",stepsJson:""}),O=Y({metric:"",values:""}),A=Y({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(()=>P.value.incidents.byStatus.open+P.value.incidents.byStatus.acknowledged),Pe=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 Ae(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,X.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),Z.value=dt(d.output),P.value=yt(f.output)}catch(o){y.error("加载 AIOps 数据失败: "+(o?.message||o))}finally{i.value=!1}}async function Ie(){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 Oe(){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=O.metric.trim();if(!o){y.warning("请填写指标名");return}const e=O.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(!A.metric||A.value==null){y.warning("请选择指标并填写测试值");return}I.value=!0,S.value=null;try{const o=`ops detect "${A.metric.replace(/"/g,'\\"')}" ${A.value} --algorithm ${A.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{I.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(){O.metric="",O.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(_(Ze)),e[23]||(e[23]=p(" 异常检测",-1))]),_:1})]),_:1})]),default:a(()=>[t(d,{type:"primary"},{icon:a(()=>[t(_(Ye))]),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:P.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:P.value.incidents.byStatus.open+P.value.incidents.byStatus.acknowledged,"value-style":{color:he.value>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(_(Xe))]),_: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:P.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:P.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:P.value.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(_(re))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),P.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(P.value.incidents.bySeverity[n]||0),1)]),_:2},1032,["color"]))),128)),h("span",ft," 平均解决时间: "+c(je(P.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":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==="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:Ae(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":Z.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",Pt,c(u.mean),1),h("span",At,"σ "+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:Ie,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:Oe,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:O.metric,"onUpdate:value":e[11]||(e[11]=n=>O.metric=n),placeholder:"cpu_usage"},null,8,["value"])]),_:1}),t($,{label:"样本值",required:""},{default:a(()=>[t(G,{value:O.values,"onUpdate:value":e[12]||(e[12]=n=>O.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:X.value,"onUpdate:open":e[17]||(e[17]=n=>X.value=n),title:"异常检测","confirm-loading":I.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:A.metric,"onUpdate:value":e[14]||(e[14]=n=>A.metric=n),"show-search":"",placeholder:"选择已建立基线的指标"},{default:a(()=>[(r(!0),v(j,null,B(Z.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:A.value,"onUpdate:value":e[15]||(e[15]=n=>A.value=n),style:{width:"100%"}},null,8,["value"])]),_:1}),t($,{label:"算法"},{default:a(()=>[t(ae,{value:A.algorithm,"onUpdate:value":e[16]||(e[16]=n=>A.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",It," 原因: "+c($e(S.value.reason)),1)):m("",!0),S.value.baseline?(r(),v("div",Ot,[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};
@@ -1 +1 @@
1
- import{y as C,_ as i}from"./useConfigInject-BKqJUQaF.js";import{B as b,c as y}from"./index-DIe3dY84.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-ZZ_4A9um.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-DCcT0grw.js";import{B as b,c as y}from"./index-yMt4C1Gh.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-DfcXDy2A.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-Bv7YH0VB.js";import{_ as ye}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Y as X,y as Z,m as ee,an as me,ao as xe,ap as te}from"./icons-ukMaZ3tx.js";import{a as C}from"./index-BbqCdQXU.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-ZZ_4A9um.js";import"./useConfigInject-BKqJUQaF.js";import"./transition-CGYDOK3N.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(`
1
+ import{u as fe}from"./ws-Bv7YH0VB.js";import{_ as ye}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Y as X,y as Z,m as ee,an as me,ao as xe,ap as te}from"./icons-ukMaZ3tx.js";import{a as C}from"./index-BfKFNptm.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-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.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 Y(){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 K(){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 Q(){await Promise.all([W(),ce(),Y(),F(),K()])}return ge(R,()=>{W()}),_e(Q),(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:Q},{icon:s(()=>[o(T(X))]),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:Y},{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:K,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(T(X))]),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})])}}},Ye=ye(De,[["__scopeId","data-v-bfaf911e"]]);export{Ye as default};
@@ -1 +1 @@
1
- import{r as D,w as ze,l as Je,m as g,x as t,q as u,B as He,C as Ye,v as a,c as e,D as i,E as S,u as n,F as y,G as B,H as A,I as v,J as l,K as qe,L as $e,j as m}from"./vendor-BVetwVfk.js";import{u as Qe}from"./ws-Bv7YH0VB.js";import{u as Xe,T as Ze}from"./index-ZZ_4A9um.js";import{_ as he}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as O,G as N,D as j,M as E,R as F,C as G,A as M,N as V,a as W,b as z,c as J,d as H,B as Y,e as K,f as q,S as $,h as Q,i as X,j as Z,k as h,l as ee,P as te,m as oe,n as ne,o as L,p as se,I as le,L as ie,W as ae,q as de,r as ue,s as re,E as ye,t as pe,u as ke,v as ce,w as me,x as fe,y as _e,z as ge,U as ve,H as Oe,J as be,K as we,V as et,O as Ce,Q as Se,X as tt}from"./icons-ukMaZ3tx.js";const ot=["src"],nt={key:0,class:"logo-text"},st={key:0,class:"mode-banner project"},lt={class:"banner-info"},it={class:"banner-name"},at={key:1,class:"mode-banner global"},dt=["title"],ut={key:0,class:"footer-text"},rt={class:"header-left"},yt={class:"header-right"},pt={class:"theme-switcher"},kt=["data-theme-key","onClick"],ct={class:"version-tag"},Ae="cc.web-panel.sidebar.openKeys",mt={__name:"AppLayout",setup(ft){const je=He(),Ke=Ye(),b=Qe(),T=Xe(),r=D(!1),f=window.__CC_CONFIG__||{},c=m(()=>f.mode==="project"),Le="v5.0.3.1",Te=new URL(""+new URL("logo-DBCYUiWP.png",import.meta.url).href,import.meta.url).href,xe=m(()=>T.current),Be=m(()=>T.config.vars["--menu-mode"]),R=m(()=>{const d=Ke.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[d]||d]}),I=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function Ne(){try{const d=localStorage.getItem(Ae);if(d){const o=JSON.parse(d);if(Array.isArray(o))return o.filter(s=>I.includes(s))}}catch{}return[...I]}const x=D(Ne());ze(x,d=>{try{localStorage.setItem(Ae,JSON.stringify(d))}catch{}},{deep:!0});const w=m(()=>b.status),Re=m(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[b.status]||"default"),Ie=m(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[b.status]||"未知");function Ue(d){T.setTheme(d)}function Pe({key:d}){je.push({mcp:"/mcp"}[d]||`/${d}`)}return Je(()=>b.connect()),(d,o)=>{const s=u("a-menu-item"),p=u("a-sub-menu"),_=u("a-menu-divider"),De=u("a-menu"),Ee=u("a-badge"),Fe=u("a-layout-sider"),U=u("a-tooltip"),Ge=u("a-tag"),Me=u("a-layout-header"),Ve=u("router-view"),We=u("a-layout-content"),P=u("a-layout");return a(),g(P,{class:"app-root"},{default:t(()=>[e(Fe,{collapsed:r.value,"onUpdate:collapsed":o[2]||(o[2]=k=>r.value=k),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[i("div",{class:S(["logo",{collapsed:r.value}])},[i("img",{src:n(Te),alt:"ChainlessChain",class:"logo-icon"},null,8,ot),r.value?B("",!0):(a(),y("span",nt,"ChainlessChain"))],2),r.value?(a(),y("div",{key:1,class:"mode-icon-sm",title:c.value?n(f).projectName:"全局模式"},[c.value?(a(),g(n(O),{key:0,style:{color:"#1677ff"}})):(a(),g(n(N),{key:1,style:{color:"#722ed1"}}))],8,dt)):(a(),y(A,{key:0},[c.value?(a(),y("div",st,[e(n(O),{class:"banner-icon"}),i("div",lt,[i("div",it,v(n(f).projectName||"项目"),1),o[3]||(o[3]=i("div",{class:"banner-sub"},"项目级面板",-1))])])):(a(),y("div",at,[e(n(N),{class:"banner-icon"}),o[4]||(o[4]=i("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(De,{selectedKeys:R.value,"onUpdate:selectedKeys":o[0]||(o[0]=k=>R.value=k),openKeys:x.value,"onUpdate:openKeys":o[1]||(o[1]=k=>x.value=k),theme:Be.value,mode:"inline","inline-collapsed":r.value,class:"side-menu",onClick:Pe},{default:t(()=>[r.value?(a(),y(A,{key:1},[e(s,{key:"dashboard"},{icon:t(()=>[e(n(j))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(E))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(F))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(G))]),_:1}),e(s,{key:"aiops"},{icon:t(()=>[e(n(M))]),_:1}),e(s,{key:"tokens"},{icon:t(()=>[e(n(V))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(W))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"skills"},{icon:t(()=>[e(n(z))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(J))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(H))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(O))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(Y))]),_:1}),e(s,{key:"codegen"},{icon:t(()=>[e(n(K))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"notes"},{icon:t(()=>[e(n(q))]),_:1}),e(s,{key:"search"},{icon:t(()=>[e(n($))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(Q))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(X))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(Z))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n(h))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(ee))]),_:1}),e(s,{key:"pipeline"},{icon:t(()=>[e(n(te))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(oe))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"security"},{icon:t(()=>[e(n(ne))]),_:1}),e(s,{key:"trust"},{icon:t(()=>[e(n(L))]),_:1}),e(s,{key:"audit"},{icon:t(()=>[e(n(se))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(le))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ie))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(ae))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(de))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(K))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(ue))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(re))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(L))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(ye))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(pe))]),_:1}),e(s,{key:"federation"},{icon:t(()=>[e(n(ke))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"wallet"},{icon:t(()=>[e(n(ce))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(me))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(fe))]),_:1}),e(s,{key:"sla"},{icon:t(()=>[e(n(j))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(_e))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(ge))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"community"},{icon:t(()=>[e(n(ve))]),_:1}),e(s,{key:"governance"},{icon:t(()=>[e(n(Oe))]),_:1}),e(s,{key:"reputation"},{icon:t(()=>[e(n(be))]),_:1}),e(s,{key:"recommend"},{icon:t(()=>[e(n(we))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"rssfeed"},{icon:t(()=>[e(n(Ce))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(Se))]),_:1})],64)):(a(),y(A,{key:0},[e(p,{key:"g-overview"},{title:t(()=>[...o[5]||(o[5]=[i("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(s,{key:"dashboard"},{icon:t(()=>[e(n(j))]),default:t(()=>[o[6]||(o[6]=l("仪表板",-1))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(E))]),default:t(()=>[o[7]||(o[7]=l("AI 对话",-1))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(F))]),default:t(()=>[o[8]||(o[8]=l("日常协作",-1))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(G))]),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:"tokens"},{icon:t(()=>[e(n(V))]),default:t(()=>[o[11]||(o[11]=l("Token 用量",-1))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(W))]),default:t(()=>[o[12]||(o[12]=l("日志查看",-1))]),_:1})]),_:1}),e(p,{key:"g-config"},{title:t(()=>[...o[13]||(o[13]=[i("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(s,{key:"skills"},{icon:t(()=>[e(n(z))]),default:t(()=>[o[14]||(o[14]=l("技能管理",-1))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(J))]),default:t(()=>[o[15]||(o[15]=l("LLM 配置",-1))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(H))]),default:t(()=>[o[16]||(o[16]=l("MCP 工具",-1))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(O))]),default:t(()=>[o[17]||(o[17]=l("项目存储",-1))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(Y))]),default:t(()=>[o[18]||(o[18]=l("自然语言编程",-1))]),_:1}),e(s,{key:"codegen"},{icon:t(()=>[e(n(K))]),default:t(()=>[o[19]||(o[19]=l("代码生成",-1))]),_:1})]),_:1}),e(p,{key:"g-data"},{title:t(()=>[...o[20]||(o[20]=[i("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(s,{key:"notes"},{icon:t(()=>[e(n(q))]),default:t(()=>[o[21]||(o[21]=l("笔记管理",-1))]),_:1}),e(s,{key:"search"},{icon:t(()=>[e(n($))]),default:t(()=>[o[22]||(o[22]=l("RAG 搜索",-1))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(Q))]),default:t(()=>[o[23]||(o[23]=l("记忆文件",-1))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(X))]),default:t(()=>[o[24]||(o[24]=l("知识图谱",-1))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(Z))]),default:t(()=>[o[25]||(o[25]=l("技能市场",-1))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n(h))]),default:t(()=>[o[26]||(o[26]=l("定时任务",-1))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(ee))]),default:t(()=>[o[27]||(o[27]=l("工作流编辑",-1))]),_:1}),e(s,{key:"pipeline"},{icon:t(()=>[e(n(te))]),default:t(()=>[o[28]||(o[28]=l("开发流水线",-1))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(oe))]),default:t(()=>[o[29]||(o[29]=l("后台任务",-1))]),_:1})]),_:1}),e(p,{key:"g-advanced"},{title:t(()=>[...o[30]||(o[30]=[i("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(s,{key:"security"},{icon:t(()=>[e(n(ne))]),default:t(()=>[o[31]||(o[31]=l("安全中心",-1))]),_:1}),e(s,{key:"trust"},{icon:t(()=>[e(n(L))]),default:t(()=>[o[32]||(o[32]=l("信任与安全",-1))]),_:1}),e(s,{key:"audit"},{icon:t(()=>[e(n(se))]),default:t(()=>[o[33]||(o[33]=l("审计日志",-1))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(le))]),default:t(()=>[o[34]||(o[34]=l("DID 身份",-1))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ie))]),default:t(()=>[o[35]||(o[35]=l("权限管理",-1))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(ae))]),default:t(()=>[o[36]||(o[36]=l("P2P 网络",-1))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(de))]),default:t(()=>[o[37]||(o[37]=l("备份同步",-1))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(K))]),default:t(()=>[o[38]||(o[38]=l("Git 与数据",-1))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(ue))]),default:t(()=>[o[39]||(o[39]=l("项目管理",-1))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(re))]),default:t(()=>[o[40]||(o[40]=l("跨链桥",-1))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(L))]),default:t(()=>[o[41]||(o[41]=l("合规与情报",-1))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(ye))]),default:t(()=>[o[42]||(o[42]=l("隐私计算",-1))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(pe))]),default:t(()=>[o[43]||(o[43]=l("推理网络",-1))]),_:1}),e(s,{key:"federation"},{icon:t(()=>[e(n(ke))]),default:t(()=>[o[44]||(o[44]=l("联邦强化",-1))]),_:1})]),_:1}),e(p,{key:"g-enterprise"},{title:t(()=>[...o[45]||(o[45]=[i("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(s,{key:"wallet"},{icon:t(()=>[e(n(ce))]),default:t(()=>[o[46]||(o[46]=l("钱包管理",-1))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(me))]),default:t(()=>[o[47]||(o[47]=l("组织管理",-1))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(fe))]),default:t(()=>[o[48]||(o[48]=l("多租户 SaaS",-1))]),_:1}),e(s,{key:"sla"},{icon:t(()=>[e(n(j))]),default:t(()=>[o[49]||(o[49]=l("SLA 管理",-1))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(_e))]),default:t(()=>[o[50]||(o[50]=l("使用分析",-1))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(ge))]),default:t(()=>[o[51]||(o[51]=l("模板中心",-1))]),_:1})]),_:1}),e(p,{key:"g-social"},{title:t(()=>[...o[52]||(o[52]=[i("span",{class:"group-label"},"社 交",-1)])]),default:t(()=>[e(s,{key:"community"},{icon:t(()=>[e(n(ve))]),default:t(()=>[o[53]||(o[53]=l("社区",-1))]),_:1}),e(s,{key:"governance"},{icon:t(()=>[e(n(Oe))]),default:t(()=>[o[54]||(o[54]=l("社区治理",-1))]),_:1}),e(s,{key:"reputation"},{icon:t(()=>[e(n(be))]),default:t(()=>[o[55]||(o[55]=l("声誉优化",-1))]),_:1}),e(s,{key:"recommend"},{icon:t(()=>[e(n(we))]),default:t(()=>[o[56]||(o[56]=l("智能推荐",-1))]),_:1})]),_:1}),e(p,{key:"g-media"},{title:t(()=>[...o[57]||(o[57]=[i("span",{class:"group-label"},"媒 体",-1)])]),default:t(()=>[e(s,{key:"video"},{icon:t(()=>[e(n(et))]),default:t(()=>[o[58]||(o[58]=l("视频剪辑",-1))]),_:1})]),_:1}),e(p,{key:"g-extension"},{title:t(()=>[...o[59]||(o[59]=[i("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(s,{key:"rssfeed"},{icon:t(()=>[e(n(Ce))]),default:t(()=>[o[60]||(o[60]=l("RSS 订阅",-1))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(Se))]),default:t(()=>[o[61]||(o[61]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),i("div",{class:S(["sidebar-footer",{collapsed:r.value}])},[e(Ee,{status:Re.value},null,8,["status"]),r.value?B("",!0):(a(),y("span",ut,v(Ie.value),1))],2)]),_:1},8,["collapsed"]),e(P,{class:"main-area"},{default:t(()=>[e(Me,{class:"app-header"},{default:t(()=>[i("div",rt,[i("div",{class:S(["scope-tag",c.value?"project":"global"])},[(a(),g(qe(c.value?n(O):n(N)))),i("span",null,v(c.value?n(f).projectName||"项目":"全局模式"),1),c.value&&n(f).projectRoot?(a(),g(U,{key:0,title:n(f).projectRoot},{default:t(()=>[e(n(tt),{class:"info-icon"})]),_:1},8,["title"])):B("",!0)],2)]),i("div",yt,[i("div",pt,[(a(!0),y(A,null,$e(n(Ze),(k,C)=>(a(),g(U,{key:C,title:k.label},{default:t(()=>[i("button",{class:S(["theme-btn",{active:xe.value===C}]),"data-theme-key":C,onClick:_t=>Ue(C)},v(k.icon),11,kt)]),_:2},1032,["title"]))),128))]),i("span",ct,v(n(Le)),1),e(Ge,{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(We,{class:"page-content"},{default:t(()=>[e(Ve)]),_:1})]),_:1})]),_:1})}}},Ct=he(mt,[["__scopeId","data-v-e0966d68"]]);export{Ct as default};
1
+ import{r as D,w as ze,l as Je,m as g,x as t,q as u,B as He,C as Ye,v as a,c as e,D as i,E as S,u as n,F as y,G as B,H as A,I as v,J as l,K as qe,L as $e,j as m}from"./vendor-BVetwVfk.js";import{u as Qe}from"./ws-Bv7YH0VB.js";import{u as Xe,T as Ze}from"./index-DfcXDy2A.js";import{_ as he}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as O,G as N,D as j,M as E,R as F,C as G,A as M,N as V,a as W,b as z,c as J,d as H,B as Y,e as K,f as q,S as $,h as Q,i as X,j as Z,k as h,l as ee,P as te,m as oe,n as ne,o as L,p as se,I as le,L as ie,W as ae,q as de,r as ue,s as re,E as ye,t as pe,u as ke,v as ce,w as me,x as fe,y as _e,z as ge,U as ve,H as Oe,J as be,K as we,V as et,O as Ce,Q as Se,X as tt}from"./icons-ukMaZ3tx.js";const ot=["src"],nt={key:0,class:"logo-text"},st={key:0,class:"mode-banner project"},lt={class:"banner-info"},it={class:"banner-name"},at={key:1,class:"mode-banner global"},dt=["title"],ut={key:0,class:"footer-text"},rt={class:"header-left"},yt={class:"header-right"},pt={class:"theme-switcher"},kt=["data-theme-key","onClick"],ct={class:"version-tag"},Ae="cc.web-panel.sidebar.openKeys",mt={__name:"AppLayout",setup(ft){const je=He(),Ke=Ye(),b=Qe(),T=Xe(),r=D(!1),f=window.__CC_CONFIG__||{},c=m(()=>f.mode==="project"),Le="v5.0.3.1",Te=new URL(""+new URL("logo-DBCYUiWP.png",import.meta.url).href,import.meta.url).href,xe=m(()=>T.current),Be=m(()=>T.config.vars["--menu-mode"]),R=m(()=>{const d=Ke.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[d]||d]}),I=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function Ne(){try{const d=localStorage.getItem(Ae);if(d){const o=JSON.parse(d);if(Array.isArray(o))return o.filter(s=>I.includes(s))}}catch{}return[...I]}const x=D(Ne());ze(x,d=>{try{localStorage.setItem(Ae,JSON.stringify(d))}catch{}},{deep:!0});const w=m(()=>b.status),Re=m(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[b.status]||"default"),Ie=m(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[b.status]||"未知");function Ue(d){T.setTheme(d)}function Pe({key:d}){je.push({mcp:"/mcp"}[d]||`/${d}`)}return Je(()=>b.connect()),(d,o)=>{const s=u("a-menu-item"),p=u("a-sub-menu"),_=u("a-menu-divider"),De=u("a-menu"),Ee=u("a-badge"),Fe=u("a-layout-sider"),U=u("a-tooltip"),Ge=u("a-tag"),Me=u("a-layout-header"),Ve=u("router-view"),We=u("a-layout-content"),P=u("a-layout");return a(),g(P,{class:"app-root"},{default:t(()=>[e(Fe,{collapsed:r.value,"onUpdate:collapsed":o[2]||(o[2]=k=>r.value=k),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[i("div",{class:S(["logo",{collapsed:r.value}])},[i("img",{src:n(Te),alt:"ChainlessChain",class:"logo-icon"},null,8,ot),r.value?B("",!0):(a(),y("span",nt,"ChainlessChain"))],2),r.value?(a(),y("div",{key:1,class:"mode-icon-sm",title:c.value?n(f).projectName:"全局模式"},[c.value?(a(),g(n(O),{key:0,style:{color:"#1677ff"}})):(a(),g(n(N),{key:1,style:{color:"#722ed1"}}))],8,dt)):(a(),y(A,{key:0},[c.value?(a(),y("div",st,[e(n(O),{class:"banner-icon"}),i("div",lt,[i("div",it,v(n(f).projectName||"项目"),1),o[3]||(o[3]=i("div",{class:"banner-sub"},"项目级面板",-1))])])):(a(),y("div",at,[e(n(N),{class:"banner-icon"}),o[4]||(o[4]=i("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(De,{selectedKeys:R.value,"onUpdate:selectedKeys":o[0]||(o[0]=k=>R.value=k),openKeys:x.value,"onUpdate:openKeys":o[1]||(o[1]=k=>x.value=k),theme:Be.value,mode:"inline","inline-collapsed":r.value,class:"side-menu",onClick:Pe},{default:t(()=>[r.value?(a(),y(A,{key:1},[e(s,{key:"dashboard"},{icon:t(()=>[e(n(j))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(E))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(F))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(G))]),_:1}),e(s,{key:"aiops"},{icon:t(()=>[e(n(M))]),_:1}),e(s,{key:"tokens"},{icon:t(()=>[e(n(V))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(W))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"skills"},{icon:t(()=>[e(n(z))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(J))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(H))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(O))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(Y))]),_:1}),e(s,{key:"codegen"},{icon:t(()=>[e(n(K))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"notes"},{icon:t(()=>[e(n(q))]),_:1}),e(s,{key:"search"},{icon:t(()=>[e(n($))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(Q))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(X))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(Z))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n(h))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(ee))]),_:1}),e(s,{key:"pipeline"},{icon:t(()=>[e(n(te))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(oe))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"security"},{icon:t(()=>[e(n(ne))]),_:1}),e(s,{key:"trust"},{icon:t(()=>[e(n(L))]),_:1}),e(s,{key:"audit"},{icon:t(()=>[e(n(se))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(le))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ie))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(ae))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(de))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(K))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(ue))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(re))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(L))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(ye))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(pe))]),_:1}),e(s,{key:"federation"},{icon:t(()=>[e(n(ke))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"wallet"},{icon:t(()=>[e(n(ce))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(me))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(fe))]),_:1}),e(s,{key:"sla"},{icon:t(()=>[e(n(j))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(_e))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(ge))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"community"},{icon:t(()=>[e(n(ve))]),_:1}),e(s,{key:"governance"},{icon:t(()=>[e(n(Oe))]),_:1}),e(s,{key:"reputation"},{icon:t(()=>[e(n(be))]),_:1}),e(s,{key:"recommend"},{icon:t(()=>[e(n(we))]),_:1}),e(_,{class:"divider-sm"}),e(s,{key:"rssfeed"},{icon:t(()=>[e(n(Ce))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(Se))]),_:1})],64)):(a(),y(A,{key:0},[e(p,{key:"g-overview"},{title:t(()=>[...o[5]||(o[5]=[i("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(s,{key:"dashboard"},{icon:t(()=>[e(n(j))]),default:t(()=>[o[6]||(o[6]=l("仪表板",-1))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(E))]),default:t(()=>[o[7]||(o[7]=l("AI 对话",-1))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(F))]),default:t(()=>[o[8]||(o[8]=l("日常协作",-1))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(G))]),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:"tokens"},{icon:t(()=>[e(n(V))]),default:t(()=>[o[11]||(o[11]=l("Token 用量",-1))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(W))]),default:t(()=>[o[12]||(o[12]=l("日志查看",-1))]),_:1})]),_:1}),e(p,{key:"g-config"},{title:t(()=>[...o[13]||(o[13]=[i("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(s,{key:"skills"},{icon:t(()=>[e(n(z))]),default:t(()=>[o[14]||(o[14]=l("技能管理",-1))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(J))]),default:t(()=>[o[15]||(o[15]=l("LLM 配置",-1))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(H))]),default:t(()=>[o[16]||(o[16]=l("MCP 工具",-1))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(O))]),default:t(()=>[o[17]||(o[17]=l("项目存储",-1))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(Y))]),default:t(()=>[o[18]||(o[18]=l("自然语言编程",-1))]),_:1}),e(s,{key:"codegen"},{icon:t(()=>[e(n(K))]),default:t(()=>[o[19]||(o[19]=l("代码生成",-1))]),_:1})]),_:1}),e(p,{key:"g-data"},{title:t(()=>[...o[20]||(o[20]=[i("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(s,{key:"notes"},{icon:t(()=>[e(n(q))]),default:t(()=>[o[21]||(o[21]=l("笔记管理",-1))]),_:1}),e(s,{key:"search"},{icon:t(()=>[e(n($))]),default:t(()=>[o[22]||(o[22]=l("RAG 搜索",-1))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(Q))]),default:t(()=>[o[23]||(o[23]=l("记忆文件",-1))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(X))]),default:t(()=>[o[24]||(o[24]=l("知识图谱",-1))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(Z))]),default:t(()=>[o[25]||(o[25]=l("技能市场",-1))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n(h))]),default:t(()=>[o[26]||(o[26]=l("定时任务",-1))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(ee))]),default:t(()=>[o[27]||(o[27]=l("工作流编辑",-1))]),_:1}),e(s,{key:"pipeline"},{icon:t(()=>[e(n(te))]),default:t(()=>[o[28]||(o[28]=l("开发流水线",-1))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(oe))]),default:t(()=>[o[29]||(o[29]=l("后台任务",-1))]),_:1})]),_:1}),e(p,{key:"g-advanced"},{title:t(()=>[...o[30]||(o[30]=[i("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(s,{key:"security"},{icon:t(()=>[e(n(ne))]),default:t(()=>[o[31]||(o[31]=l("安全中心",-1))]),_:1}),e(s,{key:"trust"},{icon:t(()=>[e(n(L))]),default:t(()=>[o[32]||(o[32]=l("信任与安全",-1))]),_:1}),e(s,{key:"audit"},{icon:t(()=>[e(n(se))]),default:t(()=>[o[33]||(o[33]=l("审计日志",-1))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(le))]),default:t(()=>[o[34]||(o[34]=l("DID 身份",-1))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ie))]),default:t(()=>[o[35]||(o[35]=l("权限管理",-1))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(ae))]),default:t(()=>[o[36]||(o[36]=l("P2P 网络",-1))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(de))]),default:t(()=>[o[37]||(o[37]=l("备份同步",-1))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(K))]),default:t(()=>[o[38]||(o[38]=l("Git 与数据",-1))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(ue))]),default:t(()=>[o[39]||(o[39]=l("项目管理",-1))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(re))]),default:t(()=>[o[40]||(o[40]=l("跨链桥",-1))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(L))]),default:t(()=>[o[41]||(o[41]=l("合规与情报",-1))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(ye))]),default:t(()=>[o[42]||(o[42]=l("隐私计算",-1))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(pe))]),default:t(()=>[o[43]||(o[43]=l("推理网络",-1))]),_:1}),e(s,{key:"federation"},{icon:t(()=>[e(n(ke))]),default:t(()=>[o[44]||(o[44]=l("联邦强化",-1))]),_:1})]),_:1}),e(p,{key:"g-enterprise"},{title:t(()=>[...o[45]||(o[45]=[i("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(s,{key:"wallet"},{icon:t(()=>[e(n(ce))]),default:t(()=>[o[46]||(o[46]=l("钱包管理",-1))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(me))]),default:t(()=>[o[47]||(o[47]=l("组织管理",-1))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(fe))]),default:t(()=>[o[48]||(o[48]=l("多租户 SaaS",-1))]),_:1}),e(s,{key:"sla"},{icon:t(()=>[e(n(j))]),default:t(()=>[o[49]||(o[49]=l("SLA 管理",-1))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(_e))]),default:t(()=>[o[50]||(o[50]=l("使用分析",-1))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(ge))]),default:t(()=>[o[51]||(o[51]=l("模板中心",-1))]),_:1})]),_:1}),e(p,{key:"g-social"},{title:t(()=>[...o[52]||(o[52]=[i("span",{class:"group-label"},"社 交",-1)])]),default:t(()=>[e(s,{key:"community"},{icon:t(()=>[e(n(ve))]),default:t(()=>[o[53]||(o[53]=l("社区",-1))]),_:1}),e(s,{key:"governance"},{icon:t(()=>[e(n(Oe))]),default:t(()=>[o[54]||(o[54]=l("社区治理",-1))]),_:1}),e(s,{key:"reputation"},{icon:t(()=>[e(n(be))]),default:t(()=>[o[55]||(o[55]=l("声誉优化",-1))]),_:1}),e(s,{key:"recommend"},{icon:t(()=>[e(n(we))]),default:t(()=>[o[56]||(o[56]=l("智能推荐",-1))]),_:1})]),_:1}),e(p,{key:"g-media"},{title:t(()=>[...o[57]||(o[57]=[i("span",{class:"group-label"},"媒 体",-1)])]),default:t(()=>[e(s,{key:"video"},{icon:t(()=>[e(n(et))]),default:t(()=>[o[58]||(o[58]=l("视频剪辑",-1))]),_:1})]),_:1}),e(p,{key:"g-extension"},{title:t(()=>[...o[59]||(o[59]=[i("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(s,{key:"rssfeed"},{icon:t(()=>[e(n(Ce))]),default:t(()=>[o[60]||(o[60]=l("RSS 订阅",-1))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(Se))]),default:t(()=>[o[61]||(o[61]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),i("div",{class:S(["sidebar-footer",{collapsed:r.value}])},[e(Ee,{status:Re.value},null,8,["status"]),r.value?B("",!0):(a(),y("span",ut,v(Ie.value),1))],2)]),_:1},8,["collapsed"]),e(P,{class:"main-area"},{default:t(()=>[e(Me,{class:"app-header"},{default:t(()=>[i("div",rt,[i("div",{class:S(["scope-tag",c.value?"project":"global"])},[(a(),g(qe(c.value?n(O):n(N)))),i("span",null,v(c.value?n(f).projectName||"项目":"全局模式"),1),c.value&&n(f).projectRoot?(a(),g(U,{key:0,title:n(f).projectRoot},{default:t(()=>[e(n(tt),{class:"info-icon"})]),_:1},8,["title"])):B("",!0)],2)]),i("div",yt,[i("div",pt,[(a(!0),y(A,null,$e(n(Ze),(k,C)=>(a(),g(U,{key:C,title:k.label},{default:t(()=>[i("button",{class:S(["theme-btn",{active:xe.value===C}]),"data-theme-key":C,onClick:_t=>Ue(C)},v(k.icon),11,kt)]),_:2},1032,["title"]))),128))]),i("span",ct,v(n(Le)),1),e(Ge,{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(We,{class:"page-content"},{default:t(()=>[e(Ve)]),_:1})]),_:1})]),_:1})}}},Ct=he(mt,[["__scopeId","data-v-e0966d68"]]);export{Ct as default};
@@ -1 +1 @@
1
- import{u as ze}from"./ws-Bv7YH0VB.js";import{s as ie}from"./community-parser-CO25nZFt.js";import{_ as Ae}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as E}from"./index-BbqCdQXU.js";import{Y as Ce,aC as Re,p as se,aw as Oe,aD as De,A as we,aa as Ne}from"./icons-ukMaZ3tx.js";import{l as Ee,F as f,D as _,c as t,x as e,m as h,G as b,q as v,r as L,v as r,J as y,u as g,H as C,L as j,N as je,I as c,j as Y}from"./vendor-BVetwVfk.js";import"./index-ZZ_4A9um.js";import"./useConfigInject-BKqJUQaF.js";import"./transition-CGYDOK3N.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function ue(s){const n=ie(s);if(!n)return null;try{return JSON.parse(n)}catch{}const i=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const B=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),H=Object.freeze(["low","medium","high","critical"]);function G(s,n=0){return typeof s=="number"&&Number.isFinite(s)?s:n}function re(s){if(!s)return{noDb:!1,error:""};const n=ie(s),i=/Database not available/i.test(n);return{noDb:i,error:i?"Database not available":""}}function Ie(s,n=0){if(!s||typeof s!="object")return null;const i=s.id||"";if(!i)return null;let p=s.details;if(typeof p=="string"&&p)try{p=JSON.parse(p)}catch{}const u=typeof s.success=="boolean"?s.success:s.success===1||s.success==="1"||s.success===!0;return{key:i,id:i,eventType:String(s.event_type??s.eventType??"").toLowerCase(),operation:String(s.operation||""),actor:s.actor??"",target:s.target??"",details:p??null,riskLevel:String(s.risk_level??s.riskLevel??"low").toLowerCase(),ipAddress:s.ip_address??s.ipAddress??"",userAgent:s.user_agent??s.userAgent??"",success:u,errorMessage:s.error_message??s.errorMessage??"",createdAt:s.created_at??s.createdAt??"",_idx:n}}function Ue(s){const n=ue(s);return Array.isArray(n)?n.map(Ie).filter(Boolean):[]}const Fe={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function Je(s){const n=JSON.parse(JSON.stringify(Fe));for(const p of B)n.byEventType[p]=0;for(const p of H)n.byRiskLevel[p]=0;const i=ue(s);if(!i||typeof i!="object"||Array.isArray(i))return n;if(n.total=G(i.total,0),n.failures=G(i.failures,0),n.highRisk=G(i.highRisk,0),i.byEventType&&typeof i.byEventType=="object")for(const[p,u]of Object.entries(i.byEventType))typeof u=="number"&&Number.isFinite(u)&&(n.byEventType[p]=u);if(i.byRiskLevel&&typeof i.byRiskLevel=="object")for(const[p,u]of Object.entries(i.byRiskLevel))typeof u=="number"&&Number.isFinite(u)&&(n.byRiskLevel[p]=u);return n}function ne(s){if(s==null||s==="")return"—";const n=String(s),i=n.includes(" ")&&!n.includes("T")?n.replace(" ","T")+"Z":n,p=new Date(i);return isNaN(p.getTime())?n:p.toLocaleString("zh-CN",{hour12:!1})}const Me={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Be={class:"type-name"},Ve={class:"type-count"},$e={class:"filter-bar"},Ke={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Pe={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},We={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},qe={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Ye={key:1,style:{color:"var(--text-muted)"}},Ge={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},He={key:1,style:{color:"var(--text-muted)"}},Ze={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Qe={key:0,style:{"padding-top":"8px"}},Xe={style:{"font-family":"monospace","font-size":"12px"}},et={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},tt={style:{"font-family":"monospace"}},ot={key:0,style:{"font-family":"monospace","font-size":"12px"}},at={key:1,style:{color:"var(--text-muted)"}},lt={key:0,style:{"font-family":"monospace","font-size":"12px"}},st={key:1,style:{color:"var(--text-muted)"}},rt={style:{"font-family":"monospace","font-size":"12px"}},nt={style:{"font-family":"monospace","font-size":"11px"}},it={style:{color:"#ff4d4f"}},ut={class:"details-pre"},ct={__name:"Audit",setup(s){const n=ze(),i=L(!1),p=L([]),u=L({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),V=L({noDb:!1,error:""}),Z=L("events"),I=L(""),O=L(""),D=L(""),w=L(""),U=L(!1),$=L(!1),d=L(null),ce=[{title:"时间",key:"createdAt",width:"160px"},{title:"类型",key:"eventType",width:"110px"},{title:"操作",key:"operation"},{title:"角色",key:"actor",width:"140px"},{title:"目标",key:"target",width:"180px"},{title:"风险",key:"riskLevel",width:"90px"},{title:"状态",key:"success",width:"80px"},{title:"操作",key:"action",width:"80px"}],K=Y(()=>u.value.total?(u.value.total-u.value.failures)/u.value.total*100:100),de=Y(()=>!!(O.value||D.value||w.value||U.value)),fe=Y(()=>{let o=p.value;if(D.value&&(o=o.filter(l=>l.eventType===D.value)),w.value&&(o=o.filter(l=>l.riskLevel===w.value)),U.value&&(o=o.filter(l=>!l.success)),O.value){const l=O.value.toLowerCase();o=o.filter(k=>(k.operation||"").toLowerCase().includes(l)||(k.actor||"").toLowerCase().includes(l)||(k.target||"").toLowerCase().includes(l))}return o});function P(o){return{auth:"认证",permission:"权限",data:"数据",system:"系统",file:"文件",did:"DID",crypto:"加密",api:"API"}[o]||o}function F(o){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[o]||"default"}function Q(o){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[o]||"#888"}function J(o){return{low:"低",medium:"中",high:"高",critical:"关键"}[o]||o}function W(o){return{low:"default",medium:"gold",high:"orange",critical:"red"}[o]||"default"}function pe(o){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[o]||"#888"}function X(o,l){return l?Math.round(o/l*100):0}function ve(o,l){return o?o.length<=l?o:o.slice(0,l)+"…":""}function ye(o){if(typeof o=="string")return o;try{return JSON.stringify(o,null,2)}catch{return String(o)}}let ee=null;function _e(){clearTimeout(ee),ee=setTimeout(()=>{O.value=I.value.trim()},300)}function me(){O.value=I.value.trim()}async function te(){i.value=!0,V.value={noDb:!1,error:""};try{const[o,l]=await Promise.all([n.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),n.execute("audit stats --json",8e3).catch(()=>({output:""}))]),k=[o,l].map(T=>re(T.output)).find(T=>T.noDb);k&&(V.value=k),p.value=Ue(o.output),u.value=Je(l.output)}catch(o){E.error("加载审计日志失败: "+(o?.message||o))}finally{i.value=!1}}function be(o){d.value=o,$.value=!0}async function ge(){try{const{output:o}=await n.execute("audit export -f json -n 10000",2e4);if(re(o).noDb){E.error("需要先 cc init 初始化项目");return}if(!o.trim().startsWith("[")){E.error("导出失败: "+o.slice(0,120));return}const k=new Blob([o.trim()],{type:"application/json"}),T=URL.createObjectURL(k),R=document.createElement("a");R.href=T,R.download=`audit-${new Date().toISOString().slice(0,10)}.json`,document.body.appendChild(R),R.click(),document.body.removeChild(R),URL.revokeObjectURL(T),E.success("已导出到下载文件夹")}catch(o){E.error("导出失败: "+(o?.message||o))}}return Ee(te),(o,l)=>{const k=v("a-button"),T=v("a-space"),R=v("a-alert"),N=v("a-statistic"),z=v("a-card"),A=v("a-col"),q=v("a-row"),S=v("a-tag"),ke=v("a-input-search"),M=v("a-radio-button"),oe=v("a-radio-group"),xe=v("a-checkbox"),he=v("a-table"),ae=v("a-tab-pane"),le=v("a-progress"),Le=v("a-tabs"),x=v("a-descriptions-item"),Se=v("a-descriptions"),Te=v("a-modal");return r(),f("div",null,[_("div",Me,[l[8]||(l[8]=_("div",null,[_("h2",{class:"page-title"},"审计日志"),_("p",{class:"page-sub"},"安全事件追踪 · 风险评估 · 合规导出")],-1)),t(T,null,{default:e(()=>[t(k,{loading:i.value,onClick:te},{icon:e(()=>[t(g(Ce))]),default:e(()=>[l[6]||(l[6]=y(" 刷新 ",-1))]),_:1},8,["loading"]),t(k,{onClick:ge},{icon:e(()=>[t(g(Re))]),default:e(()=>[l[7]||(l[7]=y(" 导出 JSON ",-1))]),_:1})]),_:1})]),V.value.noDb?(r(),h(R,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc audit ...` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):b("",!0),t(q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:e(()=>[t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"事件总数",value:u.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:e(()=>[t(g(se))]),_:1},8,["value"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"失败次数",value:u.value.failures,"value-style":{color:u.value.failures>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[t(g(Oe))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"高风险",value:u.value.highRisk,"value-style":{color:u.value.highRisk>0?"#fa8c16":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[t(g(De))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"关键事件",value:u.value.byRiskLevel.critical||0,"value-style":{color:(u.value.byRiskLevel.critical||0)>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:e(()=>[t(g(we))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:24,sm:8,lg:4},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"成功率",value:K.value,suffix:"%",precision:1,"value-style":{color:K.value>=95?"#52c41a":K.value>=80?"#faad14":"#ff4d4f",fontSize:"20px"}},{prefix:e(()=>[t(g(Ne))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),t(z,{title:"事件类型",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:e(()=>[t(q,{gutter:[12,12]},{default:e(()=>[(r(!0),f(C,null,j(g(B),a=>(r(),h(A,{key:a,xs:12,sm:8,lg:3},{default:e(()=>[_("div",{class:"type-pill",style:je({borderLeftColor:Q(a)})},[t(S,{color:F(a),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[y(c(a),1)]),_:2},1032,["color"]),_("div",Be,c(P(a)),1),_("div",Ve,c(u.value.byEventType[a]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1}),t(Le,{activeKey:Z.value,"onUpdate:activeKey":l[4]||(l[4]=a=>Z.value=a),class:"audit-tabs"},{default:e(()=>[t(ae,{key:"events",tab:"事件流"},{default:e(()=>[_("div",$e,[t(ke,{value:I.value,"onUpdate:value":l[0]||(l[0]=a=>I.value=a),placeholder:"搜索操作 / 角色 / 目标...","allow-clear":"",style:{"max-width":"280px"},onSearch:me,onInput:_e},null,8,["value"]),t(oe,{value:D.value,"onUpdate:value":l[1]||(l[1]=a=>D.value=a),size:"small","button-style":"solid"},{default:e(()=>[t(M,{value:""},{default:e(()=>[...l[9]||(l[9]=[y("全部类型",-1)])]),_:1}),(r(!0),f(C,null,j(g(B),a=>(r(),h(M,{key:a,value:a},{default:e(()=>[y(c(P(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(oe,{value:w.value,"onUpdate:value":l[2]||(l[2]=a=>w.value=a),size:"small"},{default:e(()=>[t(M,{value:""},{default:e(()=>[...l[10]||(l[10]=[y("全部风险",-1)])]),_:1}),(r(!0),f(C,null,j(g(H),a=>(r(),h(M,{key:a,value:a},{default:e(()=>[y(c(J(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(xe,{checked:U.value,"onUpdate:checked":l[3]||(l[3]=a=>U.value=a)},{default:e(()=>[...l[11]||(l[11]=[y("仅失败",-1)])]),_:1},8,["checked"])]),t(he,{columns:ce,"data-source":fe.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:a,record:m})=>[a.key==="createdAt"?(r(),f("span",Ke,c(g(ne)(m.createdAt)),1)):b("",!0),a.key==="eventType"?(r(),h(S,{key:1,color:F(m.eventType),style:{"font-family":"monospace"}},{default:e(()=>[y(c(m.eventType),1)]),_:2},1032,["color"])):b("",!0),a.key==="operation"?(r(),f(C,{key:2},[_("span",Pe,c(m.operation),1),m.errorMessage?(r(),f("div",We,c(m.errorMessage),1)):b("",!0)],64)):b("",!0),a.key==="actor"?(r(),f(C,{key:3},[m.actor?(r(),f("span",qe,c(m.actor),1)):(r(),f("span",Ye,"—"))],64)):b("",!0),a.key==="target"?(r(),f(C,{key:4},[m.target?(r(),f("span",Ge,c(ve(m.target,32)),1)):(r(),f("span",He,"—"))],64)):b("",!0),a.key==="riskLevel"?(r(),h(S,{key:5,color:W(m.riskLevel)},{default:e(()=>[y(c(J(m.riskLevel)),1)]),_:2},1032,["color"])):b("",!0),a.key==="success"?(r(),h(S,{key:6,color:m.success?"green":"red"},{default:e(()=>[y(c(m.success?"OK":"FAIL"),1)]),_:2},1032,["color"])):b("",!0),a.key==="action"?(r(),h(k,{key:7,size:"small",type:"link",onClick:dt=>be(m)},{default:e(()=>[...l[12]||(l[12]=[y("详情",-1)])]),_:1},8,["onClick"])):b("",!0)]),emptyText:e(()=>[_("div",Ze,[t(g(se),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+c(de.value?"没有符合条件的事件":"暂无审计事件"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),t(ae,{key:"breakdown",tab:"分布统计"},{default:e(()=>[t(q,{gutter:[16,16]},{default:e(()=>[t(A,{xs:24,lg:12},{default:e(()=>[t(z,{title:"按事件类型",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(r(!0),f(C,null,j(g(B),a=>(r(),f("div",{key:a,class:"bd-row"},[t(S,{color:F(a),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[y(c(a),1)]),_:2},1032,["color"]),t(le,{percent:X(u.value.byEventType[a]||0,u.value.total),"stroke-color":Q(a),format:()=>`${u.value.byEventType[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1}),t(A,{xs:24,lg:12},{default:e(()=>[t(z,{title:"按风险等级",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(r(!0),f(C,null,j(g(H),a=>(r(),f("div",{key:a,class:"bd-row"},[t(S,{color:W(a),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[y(c(J(a)),1)]),_:2},1032,["color"]),t(le,{percent:X(u.value.byRiskLevel[a]||0,u.value.total),"stroke-color":pe(a),format:()=>`${u.value.byRiskLevel[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),t(Te,{open:$.value,"onUpdate:open":l[5]||(l[5]=a=>$.value=a),title:`事件详情:${d.value?.id?.slice(0,8)||""}`,width:720,footer:null},{default:e(()=>[d.value?(r(),f("div",Qe,[t(Se,{column:2,size:"small",bordered:""},{default:e(()=>[t(x,{label:"ID",span:2},{default:e(()=>[_("span",Xe,c(d.value.id),1)]),_:1}),t(x,{label:"事件类型"},{default:e(()=>[t(S,{color:F(d.value.eventType),style:{"font-family":"monospace"}},{default:e(()=>[y(c(d.value.eventType),1)]),_:1},8,["color"]),_("span",et,c(P(d.value.eventType)),1)]),_:1}),t(x,{label:"风险等级"},{default:e(()=>[t(S,{color:W(d.value.riskLevel)},{default:e(()=>[y(c(J(d.value.riskLevel)),1)]),_:1},8,["color"])]),_:1}),t(x,{label:"操作",span:2},{default:e(()=>[_("span",tt,c(d.value.operation),1)]),_:1}),t(x,{label:"状态"},{default:e(()=>[t(S,{color:d.value.success?"green":"red"},{default:e(()=>[y(c(d.value.success?"成功":"失败"),1)]),_:1},8,["color"])]),_:1}),t(x,{label:"时间"},{default:e(()=>[y(c(g(ne)(d.value.createdAt)),1)]),_:1}),t(x,{label:"角色"},{default:e(()=>[d.value.actor?(r(),f("span",ot,c(d.value.actor),1)):(r(),f("span",at,"—"))]),_:1}),t(x,{label:"目标"},{default:e(()=>[d.value.target?(r(),f("span",lt,c(d.value.target),1)):(r(),f("span",st,"—"))]),_:1}),d.value.ipAddress?(r(),h(x,{key:0,label:"IP"},{default:e(()=>[_("span",rt,c(d.value.ipAddress),1)]),_:1})):b("",!0),d.value.userAgent?(r(),h(x,{key:1,label:"User-Agent"},{default:e(()=>[_("span",nt,c(d.value.userAgent),1)]),_:1})):b("",!0),d.value.errorMessage?(r(),h(x,{key:2,label:"错误信息",span:2},{default:e(()=>[_("span",it,c(d.value.errorMessage),1)]),_:1})):b("",!0),d.value.details?(r(),h(x,{key:3,label:"详细信息",span:2},{default:e(()=>[_("pre",ut,c(ye(d.value.details)),1)]),_:1})):b("",!0)]),_:1})])):b("",!0)]),_:1},8,["open","title"])])}}},St=Ae(ct,[["__scopeId","data-v-345c408a"]]);export{St as default};
1
+ import{u as ze}from"./ws-Bv7YH0VB.js";import{s as ie}from"./community-parser-CO25nZFt.js";import{_ as Ae}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as E}from"./index-BfKFNptm.js";import{Y as Ce,aC as Re,p as se,aw as Oe,aD as De,A as we,aa as Ne}from"./icons-ukMaZ3tx.js";import{l as Ee,F as f,D as _,c as t,x as e,m as h,G as b,q as v,r as L,v as r,J as y,u as g,H as C,L as j,N as je,I as c,j as Y}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function ue(s){const n=ie(s);if(!n)return null;try{return JSON.parse(n)}catch{}const i=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const B=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),H=Object.freeze(["low","medium","high","critical"]);function G(s,n=0){return typeof s=="number"&&Number.isFinite(s)?s:n}function re(s){if(!s)return{noDb:!1,error:""};const n=ie(s),i=/Database not available/i.test(n);return{noDb:i,error:i?"Database not available":""}}function Ie(s,n=0){if(!s||typeof s!="object")return null;const i=s.id||"";if(!i)return null;let p=s.details;if(typeof p=="string"&&p)try{p=JSON.parse(p)}catch{}const u=typeof s.success=="boolean"?s.success:s.success===1||s.success==="1"||s.success===!0;return{key:i,id:i,eventType:String(s.event_type??s.eventType??"").toLowerCase(),operation:String(s.operation||""),actor:s.actor??"",target:s.target??"",details:p??null,riskLevel:String(s.risk_level??s.riskLevel??"low").toLowerCase(),ipAddress:s.ip_address??s.ipAddress??"",userAgent:s.user_agent??s.userAgent??"",success:u,errorMessage:s.error_message??s.errorMessage??"",createdAt:s.created_at??s.createdAt??"",_idx:n}}function Ue(s){const n=ue(s);return Array.isArray(n)?n.map(Ie).filter(Boolean):[]}const Fe={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function Je(s){const n=JSON.parse(JSON.stringify(Fe));for(const p of B)n.byEventType[p]=0;for(const p of H)n.byRiskLevel[p]=0;const i=ue(s);if(!i||typeof i!="object"||Array.isArray(i))return n;if(n.total=G(i.total,0),n.failures=G(i.failures,0),n.highRisk=G(i.highRisk,0),i.byEventType&&typeof i.byEventType=="object")for(const[p,u]of Object.entries(i.byEventType))typeof u=="number"&&Number.isFinite(u)&&(n.byEventType[p]=u);if(i.byRiskLevel&&typeof i.byRiskLevel=="object")for(const[p,u]of Object.entries(i.byRiskLevel))typeof u=="number"&&Number.isFinite(u)&&(n.byRiskLevel[p]=u);return n}function ne(s){if(s==null||s==="")return"—";const n=String(s),i=n.includes(" ")&&!n.includes("T")?n.replace(" ","T")+"Z":n,p=new Date(i);return isNaN(p.getTime())?n:p.toLocaleString("zh-CN",{hour12:!1})}const Me={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Be={class:"type-name"},Ve={class:"type-count"},$e={class:"filter-bar"},Ke={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Pe={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},We={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},qe={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Ye={key:1,style:{color:"var(--text-muted)"}},Ge={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},He={key:1,style:{color:"var(--text-muted)"}},Ze={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Qe={key:0,style:{"padding-top":"8px"}},Xe={style:{"font-family":"monospace","font-size":"12px"}},et={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},tt={style:{"font-family":"monospace"}},ot={key:0,style:{"font-family":"monospace","font-size":"12px"}},at={key:1,style:{color:"var(--text-muted)"}},lt={key:0,style:{"font-family":"monospace","font-size":"12px"}},st={key:1,style:{color:"var(--text-muted)"}},rt={style:{"font-family":"monospace","font-size":"12px"}},nt={style:{"font-family":"monospace","font-size":"11px"}},it={style:{color:"#ff4d4f"}},ut={class:"details-pre"},ct={__name:"Audit",setup(s){const n=ze(),i=L(!1),p=L([]),u=L({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),V=L({noDb:!1,error:""}),Z=L("events"),I=L(""),O=L(""),D=L(""),w=L(""),U=L(!1),$=L(!1),d=L(null),ce=[{title:"时间",key:"createdAt",width:"160px"},{title:"类型",key:"eventType",width:"110px"},{title:"操作",key:"operation"},{title:"角色",key:"actor",width:"140px"},{title:"目标",key:"target",width:"180px"},{title:"风险",key:"riskLevel",width:"90px"},{title:"状态",key:"success",width:"80px"},{title:"操作",key:"action",width:"80px"}],K=Y(()=>u.value.total?(u.value.total-u.value.failures)/u.value.total*100:100),de=Y(()=>!!(O.value||D.value||w.value||U.value)),fe=Y(()=>{let o=p.value;if(D.value&&(o=o.filter(l=>l.eventType===D.value)),w.value&&(o=o.filter(l=>l.riskLevel===w.value)),U.value&&(o=o.filter(l=>!l.success)),O.value){const l=O.value.toLowerCase();o=o.filter(k=>(k.operation||"").toLowerCase().includes(l)||(k.actor||"").toLowerCase().includes(l)||(k.target||"").toLowerCase().includes(l))}return o});function P(o){return{auth:"认证",permission:"权限",data:"数据",system:"系统",file:"文件",did:"DID",crypto:"加密",api:"API"}[o]||o}function F(o){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[o]||"default"}function Q(o){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[o]||"#888"}function J(o){return{low:"低",medium:"中",high:"高",critical:"关键"}[o]||o}function W(o){return{low:"default",medium:"gold",high:"orange",critical:"red"}[o]||"default"}function pe(o){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[o]||"#888"}function X(o,l){return l?Math.round(o/l*100):0}function ve(o,l){return o?o.length<=l?o:o.slice(0,l)+"…":""}function ye(o){if(typeof o=="string")return o;try{return JSON.stringify(o,null,2)}catch{return String(o)}}let ee=null;function _e(){clearTimeout(ee),ee=setTimeout(()=>{O.value=I.value.trim()},300)}function me(){O.value=I.value.trim()}async function te(){i.value=!0,V.value={noDb:!1,error:""};try{const[o,l]=await Promise.all([n.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),n.execute("audit stats --json",8e3).catch(()=>({output:""}))]),k=[o,l].map(T=>re(T.output)).find(T=>T.noDb);k&&(V.value=k),p.value=Ue(o.output),u.value=Je(l.output)}catch(o){E.error("加载审计日志失败: "+(o?.message||o))}finally{i.value=!1}}function be(o){d.value=o,$.value=!0}async function ge(){try{const{output:o}=await n.execute("audit export -f json -n 10000",2e4);if(re(o).noDb){E.error("需要先 cc init 初始化项目");return}if(!o.trim().startsWith("[")){E.error("导出失败: "+o.slice(0,120));return}const k=new Blob([o.trim()],{type:"application/json"}),T=URL.createObjectURL(k),R=document.createElement("a");R.href=T,R.download=`audit-${new Date().toISOString().slice(0,10)}.json`,document.body.appendChild(R),R.click(),document.body.removeChild(R),URL.revokeObjectURL(T),E.success("已导出到下载文件夹")}catch(o){E.error("导出失败: "+(o?.message||o))}}return Ee(te),(o,l)=>{const k=v("a-button"),T=v("a-space"),R=v("a-alert"),N=v("a-statistic"),z=v("a-card"),A=v("a-col"),q=v("a-row"),S=v("a-tag"),ke=v("a-input-search"),M=v("a-radio-button"),oe=v("a-radio-group"),xe=v("a-checkbox"),he=v("a-table"),ae=v("a-tab-pane"),le=v("a-progress"),Le=v("a-tabs"),x=v("a-descriptions-item"),Se=v("a-descriptions"),Te=v("a-modal");return r(),f("div",null,[_("div",Me,[l[8]||(l[8]=_("div",null,[_("h2",{class:"page-title"},"审计日志"),_("p",{class:"page-sub"},"安全事件追踪 · 风险评估 · 合规导出")],-1)),t(T,null,{default:e(()=>[t(k,{loading:i.value,onClick:te},{icon:e(()=>[t(g(Ce))]),default:e(()=>[l[6]||(l[6]=y(" 刷新 ",-1))]),_:1},8,["loading"]),t(k,{onClick:ge},{icon:e(()=>[t(g(Re))]),default:e(()=>[l[7]||(l[7]=y(" 导出 JSON ",-1))]),_:1})]),_:1})]),V.value.noDb?(r(),h(R,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc audit ...` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):b("",!0),t(q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:e(()=>[t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"事件总数",value:u.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:e(()=>[t(g(se))]),_:1},8,["value"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"失败次数",value:u.value.failures,"value-style":{color:u.value.failures>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[t(g(Oe))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"高风险",value:u.value.highRisk,"value-style":{color:u.value.highRisk>0?"#fa8c16":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[t(g(De))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"关键事件",value:u.value.byRiskLevel.critical||0,"value-style":{color:(u.value.byRiskLevel.critical||0)>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:e(()=>[t(g(we))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:24,sm:8,lg:4},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(N,{title:"成功率",value:K.value,suffix:"%",precision:1,"value-style":{color:K.value>=95?"#52c41a":K.value>=80?"#faad14":"#ff4d4f",fontSize:"20px"}},{prefix:e(()=>[t(g(Ne))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),t(z,{title:"事件类型",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:e(()=>[t(q,{gutter:[12,12]},{default:e(()=>[(r(!0),f(C,null,j(g(B),a=>(r(),h(A,{key:a,xs:12,sm:8,lg:3},{default:e(()=>[_("div",{class:"type-pill",style:je({borderLeftColor:Q(a)})},[t(S,{color:F(a),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[y(c(a),1)]),_:2},1032,["color"]),_("div",Be,c(P(a)),1),_("div",Ve,c(u.value.byEventType[a]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1}),t(Le,{activeKey:Z.value,"onUpdate:activeKey":l[4]||(l[4]=a=>Z.value=a),class:"audit-tabs"},{default:e(()=>[t(ae,{key:"events",tab:"事件流"},{default:e(()=>[_("div",$e,[t(ke,{value:I.value,"onUpdate:value":l[0]||(l[0]=a=>I.value=a),placeholder:"搜索操作 / 角色 / 目标...","allow-clear":"",style:{"max-width":"280px"},onSearch:me,onInput:_e},null,8,["value"]),t(oe,{value:D.value,"onUpdate:value":l[1]||(l[1]=a=>D.value=a),size:"small","button-style":"solid"},{default:e(()=>[t(M,{value:""},{default:e(()=>[...l[9]||(l[9]=[y("全部类型",-1)])]),_:1}),(r(!0),f(C,null,j(g(B),a=>(r(),h(M,{key:a,value:a},{default:e(()=>[y(c(P(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(oe,{value:w.value,"onUpdate:value":l[2]||(l[2]=a=>w.value=a),size:"small"},{default:e(()=>[t(M,{value:""},{default:e(()=>[...l[10]||(l[10]=[y("全部风险",-1)])]),_:1}),(r(!0),f(C,null,j(g(H),a=>(r(),h(M,{key:a,value:a},{default:e(()=>[y(c(J(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(xe,{checked:U.value,"onUpdate:checked":l[3]||(l[3]=a=>U.value=a)},{default:e(()=>[...l[11]||(l[11]=[y("仅失败",-1)])]),_:1},8,["checked"])]),t(he,{columns:ce,"data-source":fe.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:a,record:m})=>[a.key==="createdAt"?(r(),f("span",Ke,c(g(ne)(m.createdAt)),1)):b("",!0),a.key==="eventType"?(r(),h(S,{key:1,color:F(m.eventType),style:{"font-family":"monospace"}},{default:e(()=>[y(c(m.eventType),1)]),_:2},1032,["color"])):b("",!0),a.key==="operation"?(r(),f(C,{key:2},[_("span",Pe,c(m.operation),1),m.errorMessage?(r(),f("div",We,c(m.errorMessage),1)):b("",!0)],64)):b("",!0),a.key==="actor"?(r(),f(C,{key:3},[m.actor?(r(),f("span",qe,c(m.actor),1)):(r(),f("span",Ye,"—"))],64)):b("",!0),a.key==="target"?(r(),f(C,{key:4},[m.target?(r(),f("span",Ge,c(ve(m.target,32)),1)):(r(),f("span",He,"—"))],64)):b("",!0),a.key==="riskLevel"?(r(),h(S,{key:5,color:W(m.riskLevel)},{default:e(()=>[y(c(J(m.riskLevel)),1)]),_:2},1032,["color"])):b("",!0),a.key==="success"?(r(),h(S,{key:6,color:m.success?"green":"red"},{default:e(()=>[y(c(m.success?"OK":"FAIL"),1)]),_:2},1032,["color"])):b("",!0),a.key==="action"?(r(),h(k,{key:7,size:"small",type:"link",onClick:dt=>be(m)},{default:e(()=>[...l[12]||(l[12]=[y("详情",-1)])]),_:1},8,["onClick"])):b("",!0)]),emptyText:e(()=>[_("div",Ze,[t(g(se),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+c(de.value?"没有符合条件的事件":"暂无审计事件"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),t(ae,{key:"breakdown",tab:"分布统计"},{default:e(()=>[t(q,{gutter:[16,16]},{default:e(()=>[t(A,{xs:24,lg:12},{default:e(()=>[t(z,{title:"按事件类型",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(r(!0),f(C,null,j(g(B),a=>(r(),f("div",{key:a,class:"bd-row"},[t(S,{color:F(a),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[y(c(a),1)]),_:2},1032,["color"]),t(le,{percent:X(u.value.byEventType[a]||0,u.value.total),"stroke-color":Q(a),format:()=>`${u.value.byEventType[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1}),t(A,{xs:24,lg:12},{default:e(()=>[t(z,{title:"按风险等级",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(r(!0),f(C,null,j(g(H),a=>(r(),f("div",{key:a,class:"bd-row"},[t(S,{color:W(a),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[y(c(J(a)),1)]),_:2},1032,["color"]),t(le,{percent:X(u.value.byRiskLevel[a]||0,u.value.total),"stroke-color":pe(a),format:()=>`${u.value.byRiskLevel[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),t(Te,{open:$.value,"onUpdate:open":l[5]||(l[5]=a=>$.value=a),title:`事件详情:${d.value?.id?.slice(0,8)||""}`,width:720,footer:null},{default:e(()=>[d.value?(r(),f("div",Qe,[t(Se,{column:2,size:"small",bordered:""},{default:e(()=>[t(x,{label:"ID",span:2},{default:e(()=>[_("span",Xe,c(d.value.id),1)]),_:1}),t(x,{label:"事件类型"},{default:e(()=>[t(S,{color:F(d.value.eventType),style:{"font-family":"monospace"}},{default:e(()=>[y(c(d.value.eventType),1)]),_:1},8,["color"]),_("span",et,c(P(d.value.eventType)),1)]),_:1}),t(x,{label:"风险等级"},{default:e(()=>[t(S,{color:W(d.value.riskLevel)},{default:e(()=>[y(c(J(d.value.riskLevel)),1)]),_:1},8,["color"])]),_:1}),t(x,{label:"操作",span:2},{default:e(()=>[_("span",tt,c(d.value.operation),1)]),_:1}),t(x,{label:"状态"},{default:e(()=>[t(S,{color:d.value.success?"green":"red"},{default:e(()=>[y(c(d.value.success?"成功":"失败"),1)]),_:1},8,["color"])]),_:1}),t(x,{label:"时间"},{default:e(()=>[y(c(g(ne)(d.value.createdAt)),1)]),_:1}),t(x,{label:"角色"},{default:e(()=>[d.value.actor?(r(),f("span",ot,c(d.value.actor),1)):(r(),f("span",at,"—"))]),_:1}),t(x,{label:"目标"},{default:e(()=>[d.value.target?(r(),f("span",lt,c(d.value.target),1)):(r(),f("span",st,"—"))]),_:1}),d.value.ipAddress?(r(),h(x,{key:0,label:"IP"},{default:e(()=>[_("span",rt,c(d.value.ipAddress),1)]),_:1})):b("",!0),d.value.userAgent?(r(),h(x,{key:1,label:"User-Agent"},{default:e(()=>[_("span",nt,c(d.value.userAgent),1)]),_:1})):b("",!0),d.value.errorMessage?(r(),h(x,{key:2,label:"错误信息",span:2},{default:e(()=>[_("span",it,c(d.value.errorMessage),1)]),_:1})):b("",!0),d.value.details?(r(),h(x,{key:3,label:"详细信息",span:2},{default:e(()=>[_("pre",ut,c(ye(d.value.details)),1)]),_:1})):b("",!0)]),_:1})])):b("",!0)]),_:1},8,["open","title"])])}}},St=Ae(ct,[["__scopeId","data-v-345c408a"]]);export{St as default};
@@ -1 +1 @@
1
- import{_ as f}from"./useConfigInject-BKqJUQaF.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
+ import{_ as f}from"./useConfigInject-DCcT0grw.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 +1 @@
1
- import{c as E,_ as V}from"./useConfigInject-BKqJUQaF.js";import{_ as o}from"./index-ZZ_4A9um.js";import{P as W}from"./index-U4Zd5IK6.js";import{i as F}from"./initDefaultProps--L8bzddm.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
+ import{c as E,_ as V}from"./useConfigInject-DCcT0grw.js";import{_ as o}from"./index-DfcXDy2A.js";import{P as W}from"./index-U4Zd5IK6.js";import{i as F}from"./initDefaultProps-B2vQoQga.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};