chainlesschain 0.162.73 → 0.162.75

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 (153) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-DTI_-iZ_.js → AIOps-DJUU8WvI.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-CtpbGicW.js → ActionButton-C6bVplO1.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-C1HwMd7E.js → Analytics-CQXP2eL2.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-Db953rqB.js → AppLayout-BfYsbHhy.js} +4 -4
  6. package/src/assets/web-panel/assets/{Audit-CuIi9Vup.js → Audit-BoMi6sRy.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-DwR7Wlve.js → Backup-C07DW-3o.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-B5wNMp7S.js → BaseInput-DgNRlTo5.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-DivalHgk.js → Chat-Cs1Jg5oy.js} +6 -6
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BwPSr02C.js → ChatBubbleRenderer-C3PWOZ28.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-CJrXPCJH.js → Checkbox-Cv8qpJWs.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-BieZvOkC.js → Codegen-BCdfbfdU.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-BzvPsQgb.js → Col-C7cZVjiL.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-CWcAMlpQ.js → Community-CB0j52Qd.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-Bj_BLBpw.js → Compact-CGtb9LAr.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-DKvo0WAi.js → Compliance-BP3iIG7c.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-DRajk8JO.js → Cowork-DqbX395P.js} +2 -2
  18. package/src/assets/web-panel/assets/{Cron-DPz9MoUo.js → Cron-BxUZH07-.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-BpSuvmns.js → Crosschain-C6_LPwOR.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-Co98G00H.js → DID-Bl6zsc8O.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-8TSG0W7f.js → Dashboard-BJLn_45P.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-CKViu7w3.js → Dropdown-B7ytL81D.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-BqfdADvJ.js → EmailListRenderer-BVoav_18.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-aWu1imGZ.js → FamilyGuardDashboard-B7BE_tkg.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-w4YpT8EN.js → Federation-C2tuu7O4.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-CAk4CXid.js → FormItemContext-NOaMYwbp.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-MoJw4J2L.js → GenericCardRenderer-dXFinwMY.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-HNU_a9Jz.js → Git-CuLmmSlq.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-BkIXWYUS.js → Governance-DLc1WWGy.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-CnquB88h.js → Inference-CLMaoN2j.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-PGSMF-uq.js → KnowledgeGraph-DO8lKHzz.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-DCc-nYzu.js → Logs-BrCmcuHR.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-CyGX8XEt.js → Marketplace-BZmZqxPQ.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-DBkZ5yUL.js → McpTools-CKYJMQy1.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-DmYLRCwo.js → Memory-1KHFaqPs.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-CszJjeNc.js → MobileBridge-D3nY1rzE.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileProjects-DWgtDsta.js → MobileProjects-DqSxF7YU.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-Bmt_Pmg4.js → Mtc-DiiuoH8K.js} +4 -4
  39. package/src/assets/web-panel/assets/{MtcAudit-BmG0ys0l.js → MtcAudit-Dt0BIwwI.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-DNd5iMmD.js → Multisig-DID4etkl.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-yxbNl09B.js → NLProgramming-Dbzc2IbX.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-CQ0qAzI4.js → Notes-t80a_wVU.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-CIzkE4ao.js → NotificationSettings-Dhxz-2B6.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-e1VMUxTi.js → OrderTableRenderer-T7oZTAfb.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-BNBIlf_R.js → Organization-brLOwxtI.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-C5GzzJTq.js → Overflow-C94nEwTC.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-DjL2jIED.js → P2P-VNRwXOu4.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-C2EYDmpW.js → PdhVaultBrowser-yAbmIPRN.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-BVGCXxDp.js → Permissions-BmA_iqxo.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-B1xBro16.js → PersonalDataHub-omJGQYzw.js} +3 -3
  51. package/src/assets/web-panel/assets/{Pipeline-DIYWiDnt.js → Pipeline-CKhLghrk.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy--Qx3QdO1.js → Privacy-Y4UuxKHw.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-DYOEcV04.js → ProjectInit-Hb0W44iD.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-BcOx5-KS.js → ProjectSettings-NaPqUZ6t.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-CO69txk4.js → Projects-A29s_fb2.js} +1 -1
  56. package/src/assets/web-panel/assets/Providers-CI1majBj.js +1 -0
  57. package/src/assets/web-panel/assets/{QuickAsk-Cukpq-4s.js → QuickAsk-CcHlPUZP.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-DJB5wUfM.js → Recommend-DP1rYqr-.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-B9t0-nT0.js → Reputation-BqsI6-UZ.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-4cniRgxC.js → Row-iV2FOwpi.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-Y4db_T9t.js → RssFeed-CvO7z8MN.js} +3 -3
  62. package/src/assets/web-panel/assets/Search-yWIk7ytv.js +1 -0
  63. package/src/assets/web-panel/assets/{Security-C67A6kED.js → Security-DD2AD8EJ.js} +3 -3
  64. package/src/assets/web-panel/assets/{Services-BocBjvaa.js → Services-BQ0kJ-wF.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-C9jI-iOy.js → Skeleton-DETjE588.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-2baFHKOW.js → Skills-sg86ecRw.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-CnowXeRb.js → Sla-jXlt49Xh.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-DWGBkmUt.js → SpeechSettings-BUZ8jGij.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-B89qwCgX.js → SyncSettings-Ce_4y0Ip.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-C1_WvNc0.js → Tasks-BpQ_ouLr.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-P8dBhbxa.js → Templates-CBkFzzKm.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-DHo0pxrm.js → Tenant-CoojCC4a.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-CciQj5tl.js +3 -0
  74. package/src/assets/web-panel/assets/TimelineRenderer-ConHmR1s.js +1 -0
  75. package/src/assets/web-panel/assets/{Tokens-DnJxqOPM.js → Tokens-ukg1Hetd.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-C-FLgMzr.js → Trigger-DZ9DiRzv.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-CIT_RVqA.js → Trust-DAZbvW48.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-Cg9VS6y6.js → UkeySign-CI2MThO7.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-BzoxE8mA.js → VideoEditing-BtzPXaRk.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-ZkmCII8R.js → Wallet-CJyO1eQG.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-CptQdp3u.js → WebAuthn-D2yA_cm8.js} +4 -4
  82. package/src/assets/web-panel/assets/{WorkflowEditor-Vkz28khO.js → WorkflowEditor-BvT7smpx.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-DXdmvvEA.js → chat-D1EuH4Tl.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-De7FCj5l.js → colors-T6gyzKhq.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-DnT3XzME.js → compact-item-DBKZWMLn.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-ECZfCCqd.js → createContext-D8NYtDF8.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-IsPiTCwI.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-Uodg6pAt.js → hasIn-vwKV2jlA.js} +1 -1
  89. package/src/assets/web-panel/assets/index-1hfqqDqJ.js +1 -0
  90. package/src/assets/web-panel/assets/{index-cHnmjGqB.js → index-3s7kIKmJ.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-Db33l8Ix.js → index-B8CcqiuD.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-BUMNJRCl.js → index-BN4iuVKZ.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-C01WM7Pk.js → index-BP_jtWYR.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-FU8Zo5cp.js → index-Bd2W0NSo.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-C6JgjkY7.js → index-BhO_tBEX.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DBsl2SuZ.js → index-BnffAgC1.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-Blo85ZKd.js → index-C1aaFHEB.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CwXP0KcT.js → index-C3HmTRSt.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-1dWvOqru.js → index-CBwHUt_E.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-C9_Cnvha.js → index-CEktB_gi.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-JVwNC4yP.js → index-CMmN6eZk.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Dkvf5upf.js → index-CYxJfKHa.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CLzPxAp4.js → index-CbzC1LHp.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CaDZ-LMg.js → index-CdpZGhR1.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DPcpxSQt.js → index-CtoL3nSv.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-COTabJQd.js → index-D1QvN10I.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DOIeo8Qs.js → index-D8wdCbsO.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-Dd9Bx3tJ.js → index-DAWoCpXx.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BtJ8BHU0.js → index-DF_jZQYr.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Dy0AT-uc.js → index-DKUzD00x.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-LwNszM-5.js → index-DKWXJDaY.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CCguvASR.js → index-DTRszQzz.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CPjI3AGE.js → index-DXx3D8ym.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CcLDjTgI.js → index-Db3G7VVf.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-JqSxr1A7.js → index-DrAHEY62.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-D2YOclGO.js → index-DsKvea83.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Bg1RsfAJ.js → index-GerFRbNP.js} +3 -3
  118. package/src/assets/web-panel/assets/{index-CffZBdA1.js → index-H7FLY7FN.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DCvmjxu9.js → index-JZh3rgHr.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Dbfj4QL5.js → index-KUYuuOSX.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DGwgEqwl.js → index-MHAo_s1c.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CMuqxCVw.js → index-RzhzeMPz.js} +1 -1
  123. package/src/assets/web-panel/assets/index-SAuQhElM.js +1 -0
  124. package/src/assets/web-panel/assets/{index-CbbfcGeJ.js → index-Yya88LfS.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BC8SOuGi.js → index-i9k3EBxJ.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-KV6dXwKC.js → index-opI_2u40.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-C4KhsGXo.js → index-vC4cgPxI.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-B3H1sf95.js → initDefaultProps-CQkuQdrR.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-DreYO5eb.js → motion-BW81HBiB.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-B0OVU04M.js → move-BUUC5tqm.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-PcEEXHLZ.js → omit-DQEUifWO.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-DH6-hDkF.js → pickAttrs-DEd4S7IW.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-DFamUSEw.js → placementArrow-D43ynI1f.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-DT1grAyh.js → responsiveObserve-mcWZsRxA.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-41lCsY6d.js → slide-B35mOkBv.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-FzJ7j2T7.js → statusUtils-CyFiHqUK.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-D0Zvn50h.js → styleChecker-T50Ab9kU.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-BTxsJE5n.js → useFlexGapSupport-DVCtHY30.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-DRVttEr3.js → useFs-D1HQ4VSZ.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-BSe7NVv0.js → usePersonalDataHub-CxNZv1af.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-D8O7tUXh.js → vnode-BmbMAcor.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-CMQc1RZ4.js → zoom-DMWLfxrH.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/commands/init.js +4 -6
  145. package/src/lib/downloader.js +10 -12
  146. package/src/lib/sync-engine-cli.js +6 -4
  147. package/src/assets/web-panel/assets/Providers-Bj8pCgzo.js +0 -1
  148. package/src/assets/web-panel/assets/Search-DggZDzlc.js +0 -1
  149. package/src/assets/web-panel/assets/Terminal-Dr-HvjH-.js +0 -3
  150. package/src/assets/web-panel/assets/TimelineRenderer-DM7dOaUR.js +0 -1
  151. package/src/assets/web-panel/assets/devWarning-gaA8VqZf.js +0 -1
  152. package/src/assets/web-panel/assets/index-DTpmiTGK.js +0 -1
  153. package/src/assets/web-panel/assets/index-DwpvMYUU.js +0 -1
@@ -1 +1 @@
1
- import{I as v,J as p,U as g,R as s,c as o,K as n,V as y,S as _,o as it,a as H,b as X,r as h,P as d,Q as m,F as C,Z as w}from"./vendor-BvqAck49.js";import{_ as Nt,u as ut,b as dt,d as b}from"./index-Bg1RsfAJ.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a8 as jt,aY as Mt,ac as Et,b4 as Bt,n as Dt,as as Qt,R as Kt}from"./icons-DP3uiYxy.js";function J(e){const l=Ut(e);if(!l)return null;try{return JSON.parse(l)}catch{}const u=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!u)return null;try{return JSON.parse(u[0])}catch{return null}}const Vt=Object.freeze(["free","starter","pro","enterprise"]),Wt=Object.freeze(["active","suspended","deleted"]),Jt=Object.freeze(["api_calls","storage_bytes","ai_requests"]);function z(e,l=0){return typeof e=="number"&&Number.isFinite(e)?e:l}function Yt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";if(!u)return null;const t=e.quotas&&typeof e.quotas=="object"?{...e.quotas}:{};return{key:u,id:u,name:String(e.name||u),monthlyFee:e.monthlyFee==null?null:z(e.monthlyFee,null),quotas:t,features:Array.isArray(e.features)?e.features.filter(D=>typeof D=="string"):[],_idx:l}}function ct(e){const l=J(e);return Array.isArray(l)?l.map(Yt).filter(Boolean):[]}function Gt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||u),unit:String(e.unit||""),_idx:l}:null}function mt(e){const l=J(e);return Array.isArray(l)?l.map(Gt).filter(Boolean):[]}function Zt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||""),slug:String(e.slug||""),config:e.config??null,status:String(e.status||"active").toLowerCase(),plan:String(e.plan||"free").toLowerCase(),dbPath:e.dbPath||null,ownerId:e.ownerId||"",createdAt:e.createdAt??null,updatedAt:e.updatedAt??null,deletedAt:e.deletedAt??null,_idx:l}:null}function ft(e){const l=J(e);return Array.isArray(l)?l.map(Zt).filter(Boolean):[]}function Ht(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,tenantId:String(e.tenantId||""),plan:String(e.plan||"free").toLowerCase(),status:String(e.status||"active").toLowerCase(),startedAt:e.startedAt??null,expiresAt:e.expiresAt??null,cancelledAt:e.cancelledAt??null,paymentMethod:e.paymentMethod||null,amount:e.amount==null?null:z(e.amount,null),createdAt:e.createdAt??null,_idx:l}:null}function pt(e){const l=J(e);return Array.isArray(l)?l.map(Ht).filter(Boolean):[]}function bt(e){const l=J(e);return!l||typeof l!="object"||Array.isArray(l)?null:{tenantId:String(l.tenantId||""),plan:String(l.plan||"free").toLowerCase(),metric:String(l.metric||""),period:String(l.period||""),limit:l.limit==null?null:z(l.limit,null),used:z(l.used,0),remaining:l.remaining==null?null:z(l.remaining,null),unlimited:!!l.unlimited,exceeded:!!l.exceeded}}const Xt={tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}};function yt(e){const l=JSON.parse(JSON.stringify(Xt)),u=J(e);if(!u||typeof u!="object"||Array.isArray(u))return l;if(l.tenantCount=z(u.tenantCount,0),l.subscriptionCount=z(u.subscriptionCount,0),l.activeSubscriptions=z(u.activeSubscriptions,0),l.usageRecordCount=z(u.usageRecordCount,0),u.byStatus&&typeof u.byStatus=="object")for(const t of Object.keys(l.byStatus))l.byStatus[t]=z(u.byStatus[t],0);if(u.byPlan&&typeof u.byPlan=="object")for(const t of Object.keys(l.byPlan))l.byPlan[t]=z(u.byPlan[t],0);if(u.totalUsage&&typeof u.totalUsage=="object")for(const t of Object.keys(l.totalUsage))l.totalUsage[t]=z(u.totalUsage[t],0);return l}function $t(e){if(e==null||e==="")return"—";const l=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(l.getTime())?String(e):l.toLocaleString("zh-CN",{hour12:!1})}function nt(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"—":e===0?"0":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(2)} GB`}function gt(e=new Date){const l=e.getFullYear(),u=String(e.getMonth()+1).padStart(2,"0");return`${l}-${u}`}const te={__name:"Tenant",setup(e,{expose:l}){l();const u=ut(),{t}=dt(),D=h(!1),$=h(!1),x=h(!1),j=h(!1),Q=h(!1),M=h([]),K=h([]),O=h([]),R=h([]),P=h({tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}}),Y=h("tenants"),A=h(""),I=h(""),E=h(!1),V=h(!1),G=h(!1),B=h(!1),T=H({name:"",slug:"",plan:"free",owner:""}),k=H({tenantId:"",plan:"pro",amount:null,duration:720*60*60*1e3}),F=h(""),q=H({tenantId:null,metric:"api_calls",period:""}),S=H({tenantId:null,metric:"api_calls",value:1,period:""}),N=h(null),W=X(()=>[{title:t("tenant.tenantCols.name"),key:"name"},{title:t("tenant.tenantCols.plan"),key:"plan",width:"110px"},{title:t("tenant.tenantCols.status"),key:"status",width:"100px"},{title:t("tenant.tenantCols.owner"),key:"owner",width:"160px"},{title:t("tenant.tenantCols.createdAt"),key:"createdAt",width:"160px"},{title:t("tenant.tenantCols.action"),key:"action",width:"280px"}]),tt=X(()=>[{title:t("tenant.subscriptionCols.tenant"),key:"tenant"},{title:t("tenant.subscriptionCols.plan"),key:"plan",width:"110px"},{title:t("tenant.subscriptionCols.amount"),key:"amount",width:"100px"},{title:t("tenant.subscriptionCols.status"),key:"status",width:"110px"},{title:t("tenant.subscriptionCols.startedAt"),key:"startedAt",width:"160px"},{title:t("tenant.subscriptionCols.expiresAt"),key:"expiresAt",width:"160px"},{title:t("tenant.subscriptionCols.action"),key:"action",width:"120px"}]),et=X(()=>{let r=M.value;return A.value&&(r=r.filter(i=>i.plan===A.value)),I.value&&(r=r.filter(i=>i.status===I.value)),r}),a=X(()=>K.value.filter(r=>r.status==="active"&&typeof r.amount=="number").reduce((r,i)=>r+i.amount,0));function c(r){const i=`tenant.planLabels.${r}`,f=t(i);return f===i?r:f}function L(r){return{free:"default",starter:"blue",pro:"purple",enterprise:"gold"}[r]||"default"}function vt(r){const i=`tenant.tenantStatusLabels.${r}`,f=t(i);return f===i?r:f}function _t(r){return{active:"green",suspended:"orange",deleted:"default"}[r]||"default"}function kt(r){const i=`tenant.subStatusLabels.${r}`,f=t(i);return f===i?r:f}function St(r){return{active:"green",cancelled:"default",expired:"red",past_due:"orange"}[r]||"default"}function ht(r){const i=M.value.find(f=>f.id===r);return i?i.name:t("tenant.deletedTenant")}function Ct(r,i){return r==null?"—":i==="storage_bytes"?nt(r):String(r)}function Ft(r,i){return r==null?t("tenant.planCard.unlimited"):i==="storage_bytes"?nt(r):r.toLocaleString()}function qt({key:r}){r==="tenant"?E.value=!0:r==="quota"?(N.value=null,G.value=!0):r==="record"&&(B.value=!0)}async function U(){D.value=!0;try{const[r,i,f,Z,Pt]=await Promise.all([u.execute("tenant list --json",1e4).catch(()=>({output:""})),u.execute("tenant subscriptions --json",1e4).catch(()=>({output:""})),u.execute("tenant plans --json",8e3).catch(()=>({output:""})),u.execute("tenant metrics --json",8e3).catch(()=>({output:""})),u.execute("tenant stats --json",8e3).catch(()=>({output:""}))]);M.value=ft(r.output),K.value=pt(i.output),O.value=ct(f.output),R.value=mt(Z.output),P.value=yt(Pt.output)}catch(r){b.error(t("tenant.msg.loadFailed")+": "+(r?.message||r))}finally{D.value=!1}}async function wt(){const r=T.name.trim(),i=T.slug.trim();if(!r||!i){b.warning(t("tenant.msg.createFieldsEmpty"));return}if(!/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(i)){b.warning(t("tenant.msg.slugInvalid"));return}$.value=!0;try{const f=[`tenant create "${r.replace(/"/g,'\\"')}" "${i.replace(/"/g,'\\"')}"`];f.push(`--plan ${T.plan}`),T.owner.trim()&&f.push(`--owner "${T.owner.trim().replace(/"/g,'\\"')}"`),f.push("--json");const{output:Z}=await u.execute(f.join(" "),1e4);if(/error|Error|失败/i.test(Z)&&!/"id"/.test(Z)){b.error(t("tenant.msg.createFailed")+": "+Z.slice(0,120));return}b.success(t("tenant.msg.createSuccess")),E.value=!1,lt(),await U()}catch(f){b.error(t("tenant.msg.createFailed")+": "+(f?.message||f))}finally{$.value=!1}}function xt(r){k.tenantId=r.id,k.plan=r.plan==="free"?"starter":r.plan,k.amount=null,k.duration=720*60*60*1e3,F.value=r.name,V.value=!0}async function At(){x.value=!0;try{const r=[`tenant subscribe ${k.tenantId}`];r.push(`--plan ${k.plan}`),k.amount!=null&&r.push(`--amount ${k.amount}`),k.duration&&r.push(`--duration-ms ${k.duration}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),1e4);if(/error|Error|失败/i.test(i)&&!/"id"/.test(i)){b.error(t("tenant.msg.subscribeFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.subscribeSuccess")),V.value=!1,ot(),Y.value="subscriptions",await U()}catch(r){b.error(t("tenant.msg.subscribeFailed")+": "+(r?.message||r))}finally{x.value=!1}}async function Tt(r,i){if(i!==r.plan)try{const{output:f}=await u.execute(`tenant configure ${r.id} --plan ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.planChangeFailed")+": "+f.slice(0,120));return}b.success(t("tenant.msg.planChangeSuccess",{plan:c(i)})),await U()}catch(f){b.error(t("tenant.msg.planChangeFailed")+": "+(f?.message||f))}}async function Lt(r,i){try{const{output:f}=await u.execute(`tenant configure ${r.id} --status ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.statusChangeFailed")+": "+f.slice(0,120));return}b.success(t(i==="active"?"tenant.msg.activated":"tenant.msg.suspended")),await U()}catch(f){b.error(t("tenant.msg.statusChangeFailed")+": "+(f?.message||f))}}async function zt(r){try{const{output:i}=await u.execute(`tenant delete ${r.id} --json`,8e3);if(/error|Error/i.test(i)&&!/deleted|removed/.test(i)){b.error(t("tenant.msg.deleteFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.deleteSuccess")),await U()}catch(i){b.error(t("tenant.msg.deleteFailed")+": "+(i?.message||i))}}async function Rt(r){try{const{output:i}=await u.execute(`tenant cancel ${r.tenantId}`,8e3);if(/error|Error/i.test(i)&&!/cancelled|cancel/i.test(i)){b.error(t("tenant.msg.cancelFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.cancelSuccess")),await U()}catch(i){b.error(t("tenant.msg.cancelFailed")+": "+(i?.message||i))}}async function It(){if(!q.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}j.value=!0,N.value=null;try{const r=[`tenant check-quota ${q.tenantId} ${q.metric}`];q.period.trim()&&r.push(`--period ${q.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3),f=bt(i);if(!f){b.error(t("tenant.msg.checkFailed")+": "+i.slice(0,120));return}N.value=f,f.exceeded&&b.warning(t("tenant.msg.exceededWarning"))}catch(r){b.error(t("tenant.msg.checkFailed")+": "+(r?.message||r))}finally{j.value=!1}}async function Ot(){if(!S.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}if(S.value==null||S.value<0){b.warning(t("tenant.msg.valueInvalid"));return}Q.value=!0;try{const r=[`tenant record ${S.tenantId} ${S.metric} ${S.value}`];S.period.trim()&&r.push(`--period ${S.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3);if(/error|Error/i.test(i)&&!/"id"|"tenant"/.test(i)){b.error(t("tenant.msg.recordFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.recordSuccess")),B.value=!1,rt(),await U()}catch(r){b.error(t("tenant.msg.recordFailed")+": "+(r?.message||r))}finally{Q.value=!1}}function lt(){T.name="",T.slug="",T.plan="free",T.owner=""}function ot(){k.tenantId="",k.plan="pro",k.amount=null,k.duration=720*60*60*1e3,F.value=""}function rt(){S.tenantId=null,S.metric="api_calls",S.value=1,S.period=""}function at(r){r.period||(r.period=gt())}at(q),at(S),it(U);const st={ws:u,t,loading:D,creating:$,subscribing:x,checking:j,recording:Q,tenants:M,subscriptions:K,plans:O,metrics:R,stats:P,activeTab:Y,planFilter:A,statusFilter:I,showCreateModal:E,showSubscribeModal:V,showQuotaModal:G,showRecordModal:B,createForm:T,subscribeForm:k,subscribeTargetName:F,quotaForm:q,recordForm:S,quotaResult:N,tenantColumns:W,subscriptionColumns:tt,filteredTenants:et,estimatedMrr:a,planLabel:c,planColor:L,tenantStatusLabel:vt,tenantStatusColor:_t,subStatusLabel:kt,subStatusColor:St,tenantName:ht,formatMetricValue:Ct,formatQuota:Ft,handleNewClick:qt,loadAll:U,createTenant:wt,openSubscribe:xt,subscribeTenant:At,changePlan:Tt,setStatus:Lt,deleteTenant:zt,cancelSubscription:Rt,checkQuota:It,recordUsage:Ot,resetCreateForm:lt,resetSubscribeForm:ot,resetRecordForm:rt,ensurePeriodDefault:at,ref:h,computed:X,onMounted:it,reactive:H,get ReloadOutlined(){return Kt},get PlusOutlined(){return Qt},get BankOutlined(){return Dt},get CreditCardOutlined(){return Bt},get DashboardOutlined(){return Et},get LineChartOutlined(){return Mt},get ApiOutlined(){return jt},get message(){return b},get useI18n(){return dt},get useWsStore(){return ut},get parsePlans(){return ct},get parseMetrics(){return mt},get parseTenants(){return ft},get parseSubscriptions(){return pt},get parseQuotaResult(){return bt},get parseStats(){return yt},get formatTenantTime(){return $t},get formatBytes(){return nt},get currentPeriod(){return gt},get PLAN_IDS(){return Vt},get TENANT_STATUSES(){return Wt},get KNOWN_METRICS(){return Jt}};return Object.defineProperty(st,"__isScriptSetup",{enumerable:!1,value:!0}),st}},ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={class:"page-title"},ne={class:"page-sub"},le={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},oe={class:"filter-bar"},re={style:{color:"var(--text-primary)","font-weight":"500"}},se={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},ie={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},ue={key:1,style:{color:"var(--text-muted)"}},de={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},me={style:{color:"var(--text-primary)","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},pe={key:0,style:{color:"#722ed1","font-weight":"500"}},be={key:1,style:{color:"var(--text-muted)"}},ye={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ve={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},_e={class:"plan-fee"},ke={key:0},Se={class:"plan-fee-unit"},he={key:1,style:{color:"#722ed1"}},Ce={class:"plan-section"},Fe={class:"plan-section-title"},qe={class:"plan-quota-label"},we={class:"plan-quota-value"},xe={class:"plan-section"},Ae={class:"plan-section-title"},Te={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Le={style:{"font-family":"monospace",color:"var(--text-primary)"}},ze={key:0},Re={style:{"font-family":"monospace"}},Ie={key:1,style:{"margin-top":"8px"}};function Oe(e,l,u,t,D,$){const x=v("a-button"),j=v("a-menu-item"),Q=v("a-menu"),M=v("a-dropdown"),K=v("a-space"),O=v("a-statistic"),R=v("a-card"),P=v("a-col"),Y=v("a-row"),A=v("a-tag"),I=v("a-radio-button"),E=v("a-radio-group"),V=v("a-popconfirm"),G=v("a-table"),B=v("a-tab-pane"),T=v("a-tabs"),k=v("a-input"),F=v("a-form-item"),q=v("a-select-option"),S=v("a-select"),N=v("a-form"),W=v("a-modal"),tt=v("a-input-number"),et=v("a-progress");return d(),p("div",null,[g("div",ee,[g("div",null,[g("h2",ae,s(e.$t("tenant.title")),1),g("p",ne,s(e.$t("tenant.subtitle")),1)]),o(K,null,{default:n(()=>[o(x,{loading:t.loading,onClick:t.loadAll},{icon:n(()=>[o(t.ReloadOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.refresh")),1)]),_:1},8,["loading"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:t.handleNewClick},{default:n(()=>[o(j,{key:"tenant"},{default:n(()=>[o(t.BankOutlined),m(" "+s(e.$t("tenant.actions.tenant")),1)]),_:1}),o(j,{key:"quota"},{default:n(()=>[o(t.DashboardOutlined),m(" "+s(e.$t("tenant.actions.quota")),1)]),_:1}),o(j,{key:"record"},{default:n(()=>[o(t.LineChartOutlined),m(" "+s(e.$t("tenant.actions.record")),1)]),_:1})]),_:1})]),default:n(()=>[o(x,{type:"primary"},{icon:n(()=>[o(t.PlusOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),y(" Stat cards "),o(Y,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.total"),value:t.stats.tenantCount,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(t.BankOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.active"),value:t.stats.activeSubscriptions,"value-style":{color:t.stats.activeSubscriptions>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:n(()=>[o(t.CreditCardOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.mrr"),value:t.estimatedMrr,precision:0,prefix:"¥","value-style":{color:"#722ed1",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.apiCalls"),value:t.stats.totalUsage.api_calls,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(t.ApiOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:24,sm:8,lg:4},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.storage"),value:t.formatBytes(t.stats.totalUsage.storage_bytes),"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Plan distribution "),t.stats.tenantCount>0?(d(),_(R,{key:0,title:e.$t("tenant.plansCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[o(K,{size:[12,8],wrap:""},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(A,{key:a,color:t.planColor(a)},{default:n(()=>[m(s(t.planLabel(a))+": "+s(t.stats.byPlan[a]||0),1)]),_:2},1032,["color"]))),128)),g("span",le,s(e.$t("tenant.summarySuffix",{active:t.stats.byStatus.active,suspended:t.stats.byStatus.suspended,deleted:t.stats.byStatus.deleted})),1)]),_:1})]),_:1},8,["title"])):y("v-if",!0),y(" Tabs "),o(T,{activeKey:t.activeTab,"onUpdate:activeKey":l[2]||(l[2]=a=>t.activeTab=a),class:"tenant-tabs"},{default:n(()=>[y(" ── Tenants tab ───────────────────────────────────────────── "),o(B,{key:"tenants",tab:e.$t("tenant.tabs.tenants")},{default:n(()=>[g("div",oe,[o(E,{value:t.planFilter,"onUpdate:value":l[0]||(l[0]=a=>t.planFilter=a),size:"small"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allPlans")),1)]),_:1}),(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(E,{value:t.statusFilter,"onUpdate:value":l[1]||(l[1]=a=>t.statusFilter=a),size:"small","button-style":"solid"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allStatuses")),1)]),_:1}),(d(!0),p(C,null,w(t.TENANT_STATUSES,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.tenantStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(G,{columns:t.tenantColumns,"data-source":t.filteredTenants,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="name"?(d(),p(C,{key:0},[g("span",re,s(c.name),1),g("div",se,s(c.slug),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="status"?(d(),_(A,{key:2,color:t.tenantStatusColor(c.status)},{default:n(()=>[m(s(t.tenantStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="owner"?(d(),p(C,{key:3},[c.ownerId?(d(),p("span",ie,s(c.ownerId),1)):(d(),p("span",ue,"—"))],64)):y("v-if",!0),a.key==="createdAt"?(d(),p("span",de,s(t.formatTenantTime(c.createdAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:5},[o(x,{size:"small",type:"link",onClick:L=>t.openSubscribe(c)},{default:n(()=>[m(s(e.$t("tenant.table.actionSubscribe")),1)]),_:1},8,["onClick"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:L=>t.changePlan(c,L.key)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,L=>(d(),_(j,{key:L,disabled:L===c.plan},{default:n(()=>[m(s(t.planLabel(L)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:n(()=>[o(x,{size:"small",type:"link"},{default:n(()=>[m(s(e.$t("tenant.table.actionPlanDropdown")),1)]),_:1})]),_:2},1024),c.status==="active"?(d(),_(x,{key:0,size:"small",type:"link",onClick:L=>t.setStatus(c,"suspended")},{default:n(()=>[m(s(e.$t("tenant.table.actionSuspend")),1)]),_:1},8,["onClick"])):c.status==="suspended"?(d(),_(x,{key:1,size:"small",type:"link",onClick:L=>t.setStatus(c,"active")},{default:n(()=>[m(s(e.$t("tenant.table.actionActivate")),1)]),_:1},8,["onClick"])):y("v-if",!0),c.status!=="deleted"?(d(),_(V,{key:2,title:e.$t("tenant.deleteConfirm.title"),"ok-text":e.$t("tenant.deleteConfirm.ok"),"cancel-text":e.$t("tenant.deleteConfirm.cancel"),onConfirm:L=>t.deleteTenant(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.deleteConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ce,[o(t.BankOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(t.planFilter||t.statusFilter?e.$t("tenant.table.emptyTenantsFiltered"):e.$t("tenant.table.emptyTenants")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Subscriptions tab ─────────────────────────────────────── "),o(B,{key:"subscriptions",tab:e.$t("tenant.tabs.subscriptions")},{default:n(()=>[o(G,{columns:t.subscriptionColumns,"data-source":t.subscriptions,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="tenant"?(d(),p(C,{key:0},[g("span",me,s(t.tenantName(c.tenantId)),1),g("div",fe,s(c.tenantId.slice(0,8)),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="amount"?(d(),p(C,{key:2},[c.amount!=null?(d(),p("span",pe,"¥"+s(c.amount),1)):(d(),p("span",be,"—"))],64)):y("v-if",!0),a.key==="status"?(d(),_(A,{key:3,color:t.subStatusColor(c.status)},{default:n(()=>[m(s(t.subStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="startedAt"?(d(),p("span",ye,s(t.formatTenantTime(c.startedAt)),1)):y("v-if",!0),a.key==="expiresAt"?(d(),p("span",ge,s(t.formatTenantTime(c.expiresAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:6},[c.status==="active"?(d(),_(V,{key:0,title:e.$t("tenant.cancelConfirm.title"),"ok-text":e.$t("tenant.cancelConfirm.ok"),"cancel-text":e.$t("tenant.cancelConfirm.cancel"),onConfirm:L=>t.cancelSubscription(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.cancelConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ve,[o(t.CreditCardOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(e.$t("tenant.table.emptySubscriptions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Plans catalogue tab ──────────────────────────────────── "),o(B,{key:"plans",tab:e.$t("tenant.tabs.plans")},{default:n(()=>[o(Y,{gutter:[16,16]},{default:n(()=>[(d(!0),p(C,null,w(t.plans,a=>(d(),_(P,{key:a.id,xs:24,sm:12,lg:6},{default:n(()=>[o(R,{title:a.name,size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[o(A,{color:t.planColor(a.id)},{default:n(()=>[m(s(a.id),1)]),_:2},1032,["color"])]),default:n(()=>[g("div",_e,[a.monthlyFee!=null?(d(),p("span",ke,[m("¥"+s(a.monthlyFee)+" ",1),g("span",Se,s(e.$t("tenant.planCard.monthlySuffix")),1)])):(d(),p("span",he,s(e.$t("tenant.planCard.contactSales")),1))]),g("div",Ce,[g("div",Fe,s(e.$t("tenant.planCard.quotas")),1),(d(!0),p(C,null,w(t.metrics,c=>(d(),p("div",{key:c.id,class:"plan-quota-row"},[g("span",qe,s(c.name),1),g("span",we,s(t.formatQuota(a.quotas?.[c.id],c.id)),1)]))),128))]),g("div",xe,[g("div",Ae,s(e.$t("tenant.planCard.features")),1),(d(!0),p(C,null,w(a.features,c=>(d(),_(A,{key:c,style:{"font-size":"10px",margin:"1px"}},{default:n(()=>[m(s(c),1)]),_:2},1024))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),y(" ── Create tenant modal ──────────────────────────────────── "),o(W,{open:t.showCreateModal,"onUpdate:open":l[7]||(l[7]=a=>t.showCreateModal=a),title:e.$t("tenant.create_modal.title"),"confirm-loading":t.creating,width:520,"ok-text":e.$t("tenant.create_modal.ok"),"cancel-text":e.$t("tenant.create_modal.cancel"),onOk:t.createTenant,onCancel:t.resetCreateForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.create_modal.nameLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.name,"onUpdate:value":l[3]||(l[3]=a=>t.createForm.name=a),placeholder:e.$t("tenant.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.slugLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.slug,"onUpdate:value":l[4]||(l[4]=a=>t.createForm.slug=a),placeholder:e.$t("tenant.create_modal.slugPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.planLabel")},{default:n(()=>[o(S,{value:t.createForm.plan,"onUpdate:value":l[5]||(l[5]=a=>t.createForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.ownerLabel")},{default:n(()=>[o(k,{value:t.createForm.owner,"onUpdate:value":l[6]||(l[6]=a=>t.createForm.owner=a),placeholder:e.$t("tenant.create_modal.ownerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Subscribe modal ──────────────────────────────────────── "),o(W,{open:t.showSubscribeModal,"onUpdate:open":l[11]||(l[11]=a=>t.showSubscribeModal=a),title:e.$t("tenant.subscribe_modal.title",{name:t.subscribeTargetName}),"confirm-loading":t.subscribing,width:500,"ok-text":e.$t("tenant.subscribe_modal.ok"),"cancel-text":e.$t("tenant.subscribe_modal.cancel"),onOk:t.subscribeTenant,onCancel:t.resetSubscribeForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.subscribe_modal.planLabel"),required:""},{default:n(()=>[o(S,{value:t.subscribeForm.plan,"onUpdate:value":l[8]||(l[8]=a=>t.subscribeForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.amountLabel")},{default:n(()=>[o(tt,{value:t.subscribeForm.amount,"onUpdate:value":l[9]||(l[9]=a=>t.subscribeForm.amount=a),min:0,placeholder:e.$t("tenant.subscribe_modal.amountPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.durationLabel")},{default:n(()=>[o(E,{value:t.subscribeForm.duration,"onUpdate:value":l[10]||(l[10]=a=>t.subscribeForm.duration=a)},{default:n(()=>[o(I,{value:720*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration30")),1)]),_:1}),o(I,{value:2160*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration90")),1)]),_:1}),o(I,{value:365*24*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration365")),1)]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Quota check modal ────────────────────────────────────── "),o(W,{open:t.showQuotaModal,"onUpdate:open":l[15]||(l[15]=a=>t.showQuotaModal=a),title:e.$t("tenant.quota_modal.title"),"confirm-loading":t.checking,width:500,"ok-text":e.$t("tenant.quota_modal.ok"),"cancel-text":e.$t("tenant.quota_modal.cancel"),onOk:t.checkQuota},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.quota_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.tenantId,"onUpdate:value":l[12]||(l[12]=a=>t.quotaForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.quota_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.metric,"onUpdate:value":l[13]||(l[13]=a=>t.quotaForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.periodLabel")},{default:n(()=>[o(k,{value:t.quotaForm.period,"onUpdate:value":l[14]||(l[14]=a=>t.quotaForm.period=a),placeholder:e.$t("tenant.quota_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.quotaResult?(d(),_(R,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:n(()=>[o(O,{title:e.$t("tenant.quota_modal.resultTitle"),value:t.quotaResult.unlimited?e.$t("tenant.quota_modal.unlimited"):t.quotaResult.exceeded?e.$t("tenant.quota_modal.exceeded"):e.$t("tenant.quota_modal.ok_state"),"value-style":{color:t.quotaResult.exceeded?"#ff4d4f":t.quotaResult.unlimited?"#722ed1":"#52c41a"}},null,8,["title","value","value-style"]),g("div",Te,[g("div",null,[m(s(e.$t("tenant.quota_modal.planLine"))+" ",1),o(A,{color:t.planColor(t.quotaResult.plan)},{default:n(()=>[m(s(t.planLabel(t.quotaResult.plan)),1)]),_:1},8,["color"])]),g("div",null,s(e.$t("tenant.quota_modal.periodLine",{period:t.quotaResult.period})),1),g("div",null,[m(s(e.$t("tenant.quota_modal.usedLine"))+" ",1),g("span",Le,s(t.formatMetricValue(t.quotaResult.used,t.quotaResult.metric)),1)]),t.quotaResult.unlimited?y("v-if",!0):(d(),p("div",ze,[m(s(e.$t("tenant.quota_modal.limitLine"))+" ",1),g("span",Re,s(t.formatMetricValue(t.quotaResult.limit,t.quotaResult.metric)),1)])),!t.quotaResult.unlimited&&t.quotaResult.limit>0?(d(),p("div",Ie,[o(et,{percent:Math.min(100,Math.round(100*t.quotaResult.used/t.quotaResult.limit)),size:"small",status:t.quotaResult.exceeded?"exception":"active"},null,8,["percent","status"])])):y("v-if",!0)])]),_:1})):y("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Record usage modal ───────────────────────────────────── "),o(W,{open:t.showRecordModal,"onUpdate:open":l[20]||(l[20]=a=>t.showRecordModal=a),title:e.$t("tenant.record_modal.title"),"confirm-loading":t.recording,width:500,"ok-text":e.$t("tenant.record_modal.ok"),"cancel-text":e.$t("tenant.record_modal.cancel"),onOk:t.recordUsage,onCancel:t.resetRecordForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.record_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.tenantId,"onUpdate:value":l[16]||(l[16]=a=>t.recordForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.record_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.metric,"onUpdate:value":l[17]||(l[17]=a=>t.recordForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.valueLabel"),required:""},{default:n(()=>[o(tt,{value:t.recordForm.value,"onUpdate:value":l[18]||(l[18]=a=>t.recordForm.value=a),min:0,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.periodLabel")},{default:n(()=>[o(k,{value:t.recordForm.period,"onUpdate:value":l[19]||(l[19]=a=>t.recordForm.period=a),placeholder:e.$t("tenant.record_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Me=Nt(te,[["render",Oe],["__scopeId","data-v-c93a3192"],["__file","/tmp/cc-web-panel-wjpwq8/repo/packages/web-panel/src/views/Tenant.vue"]]);export{Me as default};
1
+ import{I as v,J as p,U as g,R as s,c as o,K as n,V as y,S as _,o as it,a as H,b as X,r as h,P as d,Q as m,F as C,Z as w}from"./vendor-BvqAck49.js";import{_ as Nt,u as ut,b as dt,d as b}from"./index-GerFRbNP.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a8 as jt,aY as Mt,ac as Et,b4 as Bt,n as Dt,as as Qt,R as Kt}from"./icons-DP3uiYxy.js";function J(e){const l=Ut(e);if(!l)return null;try{return JSON.parse(l)}catch{}const u=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!u)return null;try{return JSON.parse(u[0])}catch{return null}}const Vt=Object.freeze(["free","starter","pro","enterprise"]),Wt=Object.freeze(["active","suspended","deleted"]),Jt=Object.freeze(["api_calls","storage_bytes","ai_requests"]);function z(e,l=0){return typeof e=="number"&&Number.isFinite(e)?e:l}function Gt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";if(!u)return null;const t=e.quotas&&typeof e.quotas=="object"?{...e.quotas}:{};return{key:u,id:u,name:String(e.name||u),monthlyFee:e.monthlyFee==null?null:z(e.monthlyFee,null),quotas:t,features:Array.isArray(e.features)?e.features.filter(D=>typeof D=="string"):[],_idx:l}}function ct(e){const l=J(e);return Array.isArray(l)?l.map(Gt).filter(Boolean):[]}function Yt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||u),unit:String(e.unit||""),_idx:l}:null}function mt(e){const l=J(e);return Array.isArray(l)?l.map(Yt).filter(Boolean):[]}function Zt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||""),slug:String(e.slug||""),config:e.config??null,status:String(e.status||"active").toLowerCase(),plan:String(e.plan||"free").toLowerCase(),dbPath:e.dbPath||null,ownerId:e.ownerId||"",createdAt:e.createdAt??null,updatedAt:e.updatedAt??null,deletedAt:e.deletedAt??null,_idx:l}:null}function ft(e){const l=J(e);return Array.isArray(l)?l.map(Zt).filter(Boolean):[]}function Ht(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,tenantId:String(e.tenantId||""),plan:String(e.plan||"free").toLowerCase(),status:String(e.status||"active").toLowerCase(),startedAt:e.startedAt??null,expiresAt:e.expiresAt??null,cancelledAt:e.cancelledAt??null,paymentMethod:e.paymentMethod||null,amount:e.amount==null?null:z(e.amount,null),createdAt:e.createdAt??null,_idx:l}:null}function pt(e){const l=J(e);return Array.isArray(l)?l.map(Ht).filter(Boolean):[]}function bt(e){const l=J(e);return!l||typeof l!="object"||Array.isArray(l)?null:{tenantId:String(l.tenantId||""),plan:String(l.plan||"free").toLowerCase(),metric:String(l.metric||""),period:String(l.period||""),limit:l.limit==null?null:z(l.limit,null),used:z(l.used,0),remaining:l.remaining==null?null:z(l.remaining,null),unlimited:!!l.unlimited,exceeded:!!l.exceeded}}const Xt={tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}};function yt(e){const l=JSON.parse(JSON.stringify(Xt)),u=J(e);if(!u||typeof u!="object"||Array.isArray(u))return l;if(l.tenantCount=z(u.tenantCount,0),l.subscriptionCount=z(u.subscriptionCount,0),l.activeSubscriptions=z(u.activeSubscriptions,0),l.usageRecordCount=z(u.usageRecordCount,0),u.byStatus&&typeof u.byStatus=="object")for(const t of Object.keys(l.byStatus))l.byStatus[t]=z(u.byStatus[t],0);if(u.byPlan&&typeof u.byPlan=="object")for(const t of Object.keys(l.byPlan))l.byPlan[t]=z(u.byPlan[t],0);if(u.totalUsage&&typeof u.totalUsage=="object")for(const t of Object.keys(l.totalUsage))l.totalUsage[t]=z(u.totalUsage[t],0);return l}function $t(e){if(e==null||e==="")return"—";const l=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(l.getTime())?String(e):l.toLocaleString("zh-CN",{hour12:!1})}function nt(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"—":e===0?"0":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(2)} GB`}function gt(e=new Date){const l=e.getFullYear(),u=String(e.getMonth()+1).padStart(2,"0");return`${l}-${u}`}const te={__name:"Tenant",setup(e,{expose:l}){l();const u=ut(),{t}=dt(),D=h(!1),$=h(!1),x=h(!1),j=h(!1),Q=h(!1),M=h([]),K=h([]),O=h([]),R=h([]),P=h({tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}}),G=h("tenants"),A=h(""),I=h(""),E=h(!1),V=h(!1),Y=h(!1),B=h(!1),T=H({name:"",slug:"",plan:"free",owner:""}),k=H({tenantId:"",plan:"pro",amount:null,duration:720*60*60*1e3}),F=h(""),q=H({tenantId:null,metric:"api_calls",period:""}),S=H({tenantId:null,metric:"api_calls",value:1,period:""}),N=h(null),W=X(()=>[{title:t("tenant.tenantCols.name"),key:"name"},{title:t("tenant.tenantCols.plan"),key:"plan",width:"110px"},{title:t("tenant.tenantCols.status"),key:"status",width:"100px"},{title:t("tenant.tenantCols.owner"),key:"owner",width:"160px"},{title:t("tenant.tenantCols.createdAt"),key:"createdAt",width:"160px"},{title:t("tenant.tenantCols.action"),key:"action",width:"280px"}]),tt=X(()=>[{title:t("tenant.subscriptionCols.tenant"),key:"tenant"},{title:t("tenant.subscriptionCols.plan"),key:"plan",width:"110px"},{title:t("tenant.subscriptionCols.amount"),key:"amount",width:"100px"},{title:t("tenant.subscriptionCols.status"),key:"status",width:"110px"},{title:t("tenant.subscriptionCols.startedAt"),key:"startedAt",width:"160px"},{title:t("tenant.subscriptionCols.expiresAt"),key:"expiresAt",width:"160px"},{title:t("tenant.subscriptionCols.action"),key:"action",width:"120px"}]),et=X(()=>{let r=M.value;return A.value&&(r=r.filter(i=>i.plan===A.value)),I.value&&(r=r.filter(i=>i.status===I.value)),r}),a=X(()=>K.value.filter(r=>r.status==="active"&&typeof r.amount=="number").reduce((r,i)=>r+i.amount,0));function c(r){const i=`tenant.planLabels.${r}`,f=t(i);return f===i?r:f}function L(r){return{free:"default",starter:"blue",pro:"purple",enterprise:"gold"}[r]||"default"}function vt(r){const i=`tenant.tenantStatusLabels.${r}`,f=t(i);return f===i?r:f}function _t(r){return{active:"green",suspended:"orange",deleted:"default"}[r]||"default"}function kt(r){const i=`tenant.subStatusLabels.${r}`,f=t(i);return f===i?r:f}function St(r){return{active:"green",cancelled:"default",expired:"red",past_due:"orange"}[r]||"default"}function ht(r){const i=M.value.find(f=>f.id===r);return i?i.name:t("tenant.deletedTenant")}function Ct(r,i){return r==null?"—":i==="storage_bytes"?nt(r):String(r)}function Ft(r,i){return r==null?t("tenant.planCard.unlimited"):i==="storage_bytes"?nt(r):r.toLocaleString()}function qt({key:r}){r==="tenant"?E.value=!0:r==="quota"?(N.value=null,Y.value=!0):r==="record"&&(B.value=!0)}async function U(){D.value=!0;try{const[r,i,f,Z,Pt]=await Promise.all([u.execute("tenant list --json",1e4).catch(()=>({output:""})),u.execute("tenant subscriptions --json",1e4).catch(()=>({output:""})),u.execute("tenant plans --json",8e3).catch(()=>({output:""})),u.execute("tenant metrics --json",8e3).catch(()=>({output:""})),u.execute("tenant stats --json",8e3).catch(()=>({output:""}))]);M.value=ft(r.output),K.value=pt(i.output),O.value=ct(f.output),R.value=mt(Z.output),P.value=yt(Pt.output)}catch(r){b.error(t("tenant.msg.loadFailed")+": "+(r?.message||r))}finally{D.value=!1}}async function wt(){const r=T.name.trim(),i=T.slug.trim();if(!r||!i){b.warning(t("tenant.msg.createFieldsEmpty"));return}if(!/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(i)){b.warning(t("tenant.msg.slugInvalid"));return}$.value=!0;try{const f=[`tenant create "${r.replace(/"/g,'\\"')}" "${i.replace(/"/g,'\\"')}"`];f.push(`--plan ${T.plan}`),T.owner.trim()&&f.push(`--owner "${T.owner.trim().replace(/"/g,'\\"')}"`),f.push("--json");const{output:Z}=await u.execute(f.join(" "),1e4);if(/error|Error|失败/i.test(Z)&&!/"id"/.test(Z)){b.error(t("tenant.msg.createFailed")+": "+Z.slice(0,120));return}b.success(t("tenant.msg.createSuccess")),E.value=!1,lt(),await U()}catch(f){b.error(t("tenant.msg.createFailed")+": "+(f?.message||f))}finally{$.value=!1}}function xt(r){k.tenantId=r.id,k.plan=r.plan==="free"?"starter":r.plan,k.amount=null,k.duration=720*60*60*1e3,F.value=r.name,V.value=!0}async function At(){x.value=!0;try{const r=[`tenant subscribe ${k.tenantId}`];r.push(`--plan ${k.plan}`),k.amount!=null&&r.push(`--amount ${k.amount}`),k.duration&&r.push(`--duration-ms ${k.duration}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),1e4);if(/error|Error|失败/i.test(i)&&!/"id"/.test(i)){b.error(t("tenant.msg.subscribeFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.subscribeSuccess")),V.value=!1,ot(),G.value="subscriptions",await U()}catch(r){b.error(t("tenant.msg.subscribeFailed")+": "+(r?.message||r))}finally{x.value=!1}}async function Tt(r,i){if(i!==r.plan)try{const{output:f}=await u.execute(`tenant configure ${r.id} --plan ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.planChangeFailed")+": "+f.slice(0,120));return}b.success(t("tenant.msg.planChangeSuccess",{plan:c(i)})),await U()}catch(f){b.error(t("tenant.msg.planChangeFailed")+": "+(f?.message||f))}}async function Lt(r,i){try{const{output:f}=await u.execute(`tenant configure ${r.id} --status ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.statusChangeFailed")+": "+f.slice(0,120));return}b.success(t(i==="active"?"tenant.msg.activated":"tenant.msg.suspended")),await U()}catch(f){b.error(t("tenant.msg.statusChangeFailed")+": "+(f?.message||f))}}async function zt(r){try{const{output:i}=await u.execute(`tenant delete ${r.id} --json`,8e3);if(/error|Error/i.test(i)&&!/deleted|removed/.test(i)){b.error(t("tenant.msg.deleteFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.deleteSuccess")),await U()}catch(i){b.error(t("tenant.msg.deleteFailed")+": "+(i?.message||i))}}async function Rt(r){try{const{output:i}=await u.execute(`tenant cancel ${r.tenantId}`,8e3);if(/error|Error/i.test(i)&&!/cancelled|cancel/i.test(i)){b.error(t("tenant.msg.cancelFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.cancelSuccess")),await U()}catch(i){b.error(t("tenant.msg.cancelFailed")+": "+(i?.message||i))}}async function It(){if(!q.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}j.value=!0,N.value=null;try{const r=[`tenant check-quota ${q.tenantId} ${q.metric}`];q.period.trim()&&r.push(`--period ${q.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3),f=bt(i);if(!f){b.error(t("tenant.msg.checkFailed")+": "+i.slice(0,120));return}N.value=f,f.exceeded&&b.warning(t("tenant.msg.exceededWarning"))}catch(r){b.error(t("tenant.msg.checkFailed")+": "+(r?.message||r))}finally{j.value=!1}}async function Ot(){if(!S.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}if(S.value==null||S.value<0){b.warning(t("tenant.msg.valueInvalid"));return}Q.value=!0;try{const r=[`tenant record ${S.tenantId} ${S.metric} ${S.value}`];S.period.trim()&&r.push(`--period ${S.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3);if(/error|Error/i.test(i)&&!/"id"|"tenant"/.test(i)){b.error(t("tenant.msg.recordFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.recordSuccess")),B.value=!1,rt(),await U()}catch(r){b.error(t("tenant.msg.recordFailed")+": "+(r?.message||r))}finally{Q.value=!1}}function lt(){T.name="",T.slug="",T.plan="free",T.owner=""}function ot(){k.tenantId="",k.plan="pro",k.amount=null,k.duration=720*60*60*1e3,F.value=""}function rt(){S.tenantId=null,S.metric="api_calls",S.value=1,S.period=""}function at(r){r.period||(r.period=gt())}at(q),at(S),it(U);const st={ws:u,t,loading:D,creating:$,subscribing:x,checking:j,recording:Q,tenants:M,subscriptions:K,plans:O,metrics:R,stats:P,activeTab:G,planFilter:A,statusFilter:I,showCreateModal:E,showSubscribeModal:V,showQuotaModal:Y,showRecordModal:B,createForm:T,subscribeForm:k,subscribeTargetName:F,quotaForm:q,recordForm:S,quotaResult:N,tenantColumns:W,subscriptionColumns:tt,filteredTenants:et,estimatedMrr:a,planLabel:c,planColor:L,tenantStatusLabel:vt,tenantStatusColor:_t,subStatusLabel:kt,subStatusColor:St,tenantName:ht,formatMetricValue:Ct,formatQuota:Ft,handleNewClick:qt,loadAll:U,createTenant:wt,openSubscribe:xt,subscribeTenant:At,changePlan:Tt,setStatus:Lt,deleteTenant:zt,cancelSubscription:Rt,checkQuota:It,recordUsage:Ot,resetCreateForm:lt,resetSubscribeForm:ot,resetRecordForm:rt,ensurePeriodDefault:at,ref:h,computed:X,onMounted:it,reactive:H,get ReloadOutlined(){return Kt},get PlusOutlined(){return Qt},get BankOutlined(){return Dt},get CreditCardOutlined(){return Bt},get DashboardOutlined(){return Et},get LineChartOutlined(){return Mt},get ApiOutlined(){return jt},get message(){return b},get useI18n(){return dt},get useWsStore(){return ut},get parsePlans(){return ct},get parseMetrics(){return mt},get parseTenants(){return ft},get parseSubscriptions(){return pt},get parseQuotaResult(){return bt},get parseStats(){return yt},get formatTenantTime(){return $t},get formatBytes(){return nt},get currentPeriod(){return gt},get PLAN_IDS(){return Vt},get TENANT_STATUSES(){return Wt},get KNOWN_METRICS(){return Jt}};return Object.defineProperty(st,"__isScriptSetup",{enumerable:!1,value:!0}),st}},ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={class:"page-title"},ne={class:"page-sub"},le={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},oe={class:"filter-bar"},re={style:{color:"var(--text-primary)","font-weight":"500"}},se={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},ie={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},ue={key:1,style:{color:"var(--text-muted)"}},de={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},me={style:{color:"var(--text-primary)","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},pe={key:0,style:{color:"#722ed1","font-weight":"500"}},be={key:1,style:{color:"var(--text-muted)"}},ye={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ve={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},_e={class:"plan-fee"},ke={key:0},Se={class:"plan-fee-unit"},he={key:1,style:{color:"#722ed1"}},Ce={class:"plan-section"},Fe={class:"plan-section-title"},qe={class:"plan-quota-label"},we={class:"plan-quota-value"},xe={class:"plan-section"},Ae={class:"plan-section-title"},Te={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Le={style:{"font-family":"monospace",color:"var(--text-primary)"}},ze={key:0},Re={style:{"font-family":"monospace"}},Ie={key:1,style:{"margin-top":"8px"}};function Oe(e,l,u,t,D,$){const x=v("a-button"),j=v("a-menu-item"),Q=v("a-menu"),M=v("a-dropdown"),K=v("a-space"),O=v("a-statistic"),R=v("a-card"),P=v("a-col"),G=v("a-row"),A=v("a-tag"),I=v("a-radio-button"),E=v("a-radio-group"),V=v("a-popconfirm"),Y=v("a-table"),B=v("a-tab-pane"),T=v("a-tabs"),k=v("a-input"),F=v("a-form-item"),q=v("a-select-option"),S=v("a-select"),N=v("a-form"),W=v("a-modal"),tt=v("a-input-number"),et=v("a-progress");return d(),p("div",null,[g("div",ee,[g("div",null,[g("h2",ae,s(e.$t("tenant.title")),1),g("p",ne,s(e.$t("tenant.subtitle")),1)]),o(K,null,{default:n(()=>[o(x,{loading:t.loading,onClick:t.loadAll},{icon:n(()=>[o(t.ReloadOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.refresh")),1)]),_:1},8,["loading"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:t.handleNewClick},{default:n(()=>[o(j,{key:"tenant"},{default:n(()=>[o(t.BankOutlined),m(" "+s(e.$t("tenant.actions.tenant")),1)]),_:1}),o(j,{key:"quota"},{default:n(()=>[o(t.DashboardOutlined),m(" "+s(e.$t("tenant.actions.quota")),1)]),_:1}),o(j,{key:"record"},{default:n(()=>[o(t.LineChartOutlined),m(" "+s(e.$t("tenant.actions.record")),1)]),_:1})]),_:1})]),default:n(()=>[o(x,{type:"primary"},{icon:n(()=>[o(t.PlusOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),y(" Stat cards "),o(G,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.total"),value:t.stats.tenantCount,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(t.BankOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.active"),value:t.stats.activeSubscriptions,"value-style":{color:t.stats.activeSubscriptions>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:n(()=>[o(t.CreditCardOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.mrr"),value:t.estimatedMrr,precision:0,prefix:"¥","value-style":{color:"#722ed1",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.apiCalls"),value:t.stats.totalUsage.api_calls,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(t.ApiOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:24,sm:8,lg:4},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.storage"),value:t.formatBytes(t.stats.totalUsage.storage_bytes),"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Plan distribution "),t.stats.tenantCount>0?(d(),_(R,{key:0,title:e.$t("tenant.plansCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[o(K,{size:[12,8],wrap:""},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(A,{key:a,color:t.planColor(a)},{default:n(()=>[m(s(t.planLabel(a))+": "+s(t.stats.byPlan[a]||0),1)]),_:2},1032,["color"]))),128)),g("span",le,s(e.$t("tenant.summarySuffix",{active:t.stats.byStatus.active,suspended:t.stats.byStatus.suspended,deleted:t.stats.byStatus.deleted})),1)]),_:1})]),_:1},8,["title"])):y("v-if",!0),y(" Tabs "),o(T,{activeKey:t.activeTab,"onUpdate:activeKey":l[2]||(l[2]=a=>t.activeTab=a),class:"tenant-tabs"},{default:n(()=>[y(" ── Tenants tab ───────────────────────────────────────────── "),o(B,{key:"tenants",tab:e.$t("tenant.tabs.tenants")},{default:n(()=>[g("div",oe,[o(E,{value:t.planFilter,"onUpdate:value":l[0]||(l[0]=a=>t.planFilter=a),size:"small"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allPlans")),1)]),_:1}),(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(E,{value:t.statusFilter,"onUpdate:value":l[1]||(l[1]=a=>t.statusFilter=a),size:"small","button-style":"solid"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allStatuses")),1)]),_:1}),(d(!0),p(C,null,w(t.TENANT_STATUSES,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.tenantStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(Y,{columns:t.tenantColumns,"data-source":t.filteredTenants,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="name"?(d(),p(C,{key:0},[g("span",re,s(c.name),1),g("div",se,s(c.slug),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="status"?(d(),_(A,{key:2,color:t.tenantStatusColor(c.status)},{default:n(()=>[m(s(t.tenantStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="owner"?(d(),p(C,{key:3},[c.ownerId?(d(),p("span",ie,s(c.ownerId),1)):(d(),p("span",ue,"—"))],64)):y("v-if",!0),a.key==="createdAt"?(d(),p("span",de,s(t.formatTenantTime(c.createdAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:5},[o(x,{size:"small",type:"link",onClick:L=>t.openSubscribe(c)},{default:n(()=>[m(s(e.$t("tenant.table.actionSubscribe")),1)]),_:1},8,["onClick"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:L=>t.changePlan(c,L.key)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,L=>(d(),_(j,{key:L,disabled:L===c.plan},{default:n(()=>[m(s(t.planLabel(L)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:n(()=>[o(x,{size:"small",type:"link"},{default:n(()=>[m(s(e.$t("tenant.table.actionPlanDropdown")),1)]),_:1})]),_:2},1024),c.status==="active"?(d(),_(x,{key:0,size:"small",type:"link",onClick:L=>t.setStatus(c,"suspended")},{default:n(()=>[m(s(e.$t("tenant.table.actionSuspend")),1)]),_:1},8,["onClick"])):c.status==="suspended"?(d(),_(x,{key:1,size:"small",type:"link",onClick:L=>t.setStatus(c,"active")},{default:n(()=>[m(s(e.$t("tenant.table.actionActivate")),1)]),_:1},8,["onClick"])):y("v-if",!0),c.status!=="deleted"?(d(),_(V,{key:2,title:e.$t("tenant.deleteConfirm.title"),"ok-text":e.$t("tenant.deleteConfirm.ok"),"cancel-text":e.$t("tenant.deleteConfirm.cancel"),onConfirm:L=>t.deleteTenant(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.deleteConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ce,[o(t.BankOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(t.planFilter||t.statusFilter?e.$t("tenant.table.emptyTenantsFiltered"):e.$t("tenant.table.emptyTenants")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Subscriptions tab ─────────────────────────────────────── "),o(B,{key:"subscriptions",tab:e.$t("tenant.tabs.subscriptions")},{default:n(()=>[o(Y,{columns:t.subscriptionColumns,"data-source":t.subscriptions,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="tenant"?(d(),p(C,{key:0},[g("span",me,s(t.tenantName(c.tenantId)),1),g("div",fe,s(c.tenantId.slice(0,8)),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="amount"?(d(),p(C,{key:2},[c.amount!=null?(d(),p("span",pe,"¥"+s(c.amount),1)):(d(),p("span",be,"—"))],64)):y("v-if",!0),a.key==="status"?(d(),_(A,{key:3,color:t.subStatusColor(c.status)},{default:n(()=>[m(s(t.subStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="startedAt"?(d(),p("span",ye,s(t.formatTenantTime(c.startedAt)),1)):y("v-if",!0),a.key==="expiresAt"?(d(),p("span",ge,s(t.formatTenantTime(c.expiresAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:6},[c.status==="active"?(d(),_(V,{key:0,title:e.$t("tenant.cancelConfirm.title"),"ok-text":e.$t("tenant.cancelConfirm.ok"),"cancel-text":e.$t("tenant.cancelConfirm.cancel"),onConfirm:L=>t.cancelSubscription(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.cancelConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ve,[o(t.CreditCardOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(e.$t("tenant.table.emptySubscriptions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Plans catalogue tab ──────────────────────────────────── "),o(B,{key:"plans",tab:e.$t("tenant.tabs.plans")},{default:n(()=>[o(G,{gutter:[16,16]},{default:n(()=>[(d(!0),p(C,null,w(t.plans,a=>(d(),_(P,{key:a.id,xs:24,sm:12,lg:6},{default:n(()=>[o(R,{title:a.name,size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[o(A,{color:t.planColor(a.id)},{default:n(()=>[m(s(a.id),1)]),_:2},1032,["color"])]),default:n(()=>[g("div",_e,[a.monthlyFee!=null?(d(),p("span",ke,[m("¥"+s(a.monthlyFee)+" ",1),g("span",Se,s(e.$t("tenant.planCard.monthlySuffix")),1)])):(d(),p("span",he,s(e.$t("tenant.planCard.contactSales")),1))]),g("div",Ce,[g("div",Fe,s(e.$t("tenant.planCard.quotas")),1),(d(!0),p(C,null,w(t.metrics,c=>(d(),p("div",{key:c.id,class:"plan-quota-row"},[g("span",qe,s(c.name),1),g("span",we,s(t.formatQuota(a.quotas?.[c.id],c.id)),1)]))),128))]),g("div",xe,[g("div",Ae,s(e.$t("tenant.planCard.features")),1),(d(!0),p(C,null,w(a.features,c=>(d(),_(A,{key:c,style:{"font-size":"10px",margin:"1px"}},{default:n(()=>[m(s(c),1)]),_:2},1024))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),y(" ── Create tenant modal ──────────────────────────────────── "),o(W,{open:t.showCreateModal,"onUpdate:open":l[7]||(l[7]=a=>t.showCreateModal=a),title:e.$t("tenant.create_modal.title"),"confirm-loading":t.creating,width:520,"ok-text":e.$t("tenant.create_modal.ok"),"cancel-text":e.$t("tenant.create_modal.cancel"),onOk:t.createTenant,onCancel:t.resetCreateForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.create_modal.nameLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.name,"onUpdate:value":l[3]||(l[3]=a=>t.createForm.name=a),placeholder:e.$t("tenant.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.slugLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.slug,"onUpdate:value":l[4]||(l[4]=a=>t.createForm.slug=a),placeholder:e.$t("tenant.create_modal.slugPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.planLabel")},{default:n(()=>[o(S,{value:t.createForm.plan,"onUpdate:value":l[5]||(l[5]=a=>t.createForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.ownerLabel")},{default:n(()=>[o(k,{value:t.createForm.owner,"onUpdate:value":l[6]||(l[6]=a=>t.createForm.owner=a),placeholder:e.$t("tenant.create_modal.ownerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Subscribe modal ──────────────────────────────────────── "),o(W,{open:t.showSubscribeModal,"onUpdate:open":l[11]||(l[11]=a=>t.showSubscribeModal=a),title:e.$t("tenant.subscribe_modal.title",{name:t.subscribeTargetName}),"confirm-loading":t.subscribing,width:500,"ok-text":e.$t("tenant.subscribe_modal.ok"),"cancel-text":e.$t("tenant.subscribe_modal.cancel"),onOk:t.subscribeTenant,onCancel:t.resetSubscribeForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.subscribe_modal.planLabel"),required:""},{default:n(()=>[o(S,{value:t.subscribeForm.plan,"onUpdate:value":l[8]||(l[8]=a=>t.subscribeForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.amountLabel")},{default:n(()=>[o(tt,{value:t.subscribeForm.amount,"onUpdate:value":l[9]||(l[9]=a=>t.subscribeForm.amount=a),min:0,placeholder:e.$t("tenant.subscribe_modal.amountPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.durationLabel")},{default:n(()=>[o(E,{value:t.subscribeForm.duration,"onUpdate:value":l[10]||(l[10]=a=>t.subscribeForm.duration=a)},{default:n(()=>[o(I,{value:720*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration30")),1)]),_:1}),o(I,{value:2160*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration90")),1)]),_:1}),o(I,{value:365*24*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration365")),1)]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Quota check modal ────────────────────────────────────── "),o(W,{open:t.showQuotaModal,"onUpdate:open":l[15]||(l[15]=a=>t.showQuotaModal=a),title:e.$t("tenant.quota_modal.title"),"confirm-loading":t.checking,width:500,"ok-text":e.$t("tenant.quota_modal.ok"),"cancel-text":e.$t("tenant.quota_modal.cancel"),onOk:t.checkQuota},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.quota_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.tenantId,"onUpdate:value":l[12]||(l[12]=a=>t.quotaForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.quota_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.metric,"onUpdate:value":l[13]||(l[13]=a=>t.quotaForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.periodLabel")},{default:n(()=>[o(k,{value:t.quotaForm.period,"onUpdate:value":l[14]||(l[14]=a=>t.quotaForm.period=a),placeholder:e.$t("tenant.quota_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.quotaResult?(d(),_(R,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:n(()=>[o(O,{title:e.$t("tenant.quota_modal.resultTitle"),value:t.quotaResult.unlimited?e.$t("tenant.quota_modal.unlimited"):t.quotaResult.exceeded?e.$t("tenant.quota_modal.exceeded"):e.$t("tenant.quota_modal.ok_state"),"value-style":{color:t.quotaResult.exceeded?"#ff4d4f":t.quotaResult.unlimited?"#722ed1":"#52c41a"}},null,8,["title","value","value-style"]),g("div",Te,[g("div",null,[m(s(e.$t("tenant.quota_modal.planLine"))+" ",1),o(A,{color:t.planColor(t.quotaResult.plan)},{default:n(()=>[m(s(t.planLabel(t.quotaResult.plan)),1)]),_:1},8,["color"])]),g("div",null,s(e.$t("tenant.quota_modal.periodLine",{period:t.quotaResult.period})),1),g("div",null,[m(s(e.$t("tenant.quota_modal.usedLine"))+" ",1),g("span",Le,s(t.formatMetricValue(t.quotaResult.used,t.quotaResult.metric)),1)]),t.quotaResult.unlimited?y("v-if",!0):(d(),p("div",ze,[m(s(e.$t("tenant.quota_modal.limitLine"))+" ",1),g("span",Re,s(t.formatMetricValue(t.quotaResult.limit,t.quotaResult.metric)),1)])),!t.quotaResult.unlimited&&t.quotaResult.limit>0?(d(),p("div",Ie,[o(et,{percent:Math.min(100,Math.round(100*t.quotaResult.used/t.quotaResult.limit)),size:"small",status:t.quotaResult.exceeded?"exception":"active"},null,8,["percent","status"])])):y("v-if",!0)])]),_:1})):y("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Record usage modal ───────────────────────────────────── "),o(W,{open:t.showRecordModal,"onUpdate:open":l[20]||(l[20]=a=>t.showRecordModal=a),title:e.$t("tenant.record_modal.title"),"confirm-loading":t.recording,width:500,"ok-text":e.$t("tenant.record_modal.ok"),"cancel-text":e.$t("tenant.record_modal.cancel"),onOk:t.recordUsage,onCancel:t.resetRecordForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.record_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.tenantId,"onUpdate:value":l[16]||(l[16]=a=>t.recordForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.record_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.metric,"onUpdate:value":l[17]||(l[17]=a=>t.recordForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.valueLabel"),required:""},{default:n(()=>[o(tt,{value:t.recordForm.value,"onUpdate:value":l[18]||(l[18]=a=>t.recordForm.value=a),min:0,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.periodLabel")},{default:n(()=>[o(k,{value:t.recordForm.period,"onUpdate:value":l[19]||(l[19]=a=>t.recordForm.period=a),placeholder:e.$t("tenant.record_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Me=Nt(te,[["render",Oe],["__scopeId","data-v-c93a3192"],["__file","/tmp/cc-web-panel-SkGS8t/repo/packages/web-panel/src/views/Tenant.vue"]]);export{Me as default};
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./xterm-BZcWGsqw.js","./markdown-CsiA8-E5.js","./markdown-Dfs9RUU9.css","./addon-fit-CK6X9sAG.js","./xterm-DFuMZ0ql.css"])))=>i.map(i=>d[i]);
2
+ import{u as fe,_ as me,d as V,e as U}from"./index-GerFRbNP.js";import{I as z,J as x,U as _,Q as D,S as K,K as T,V as R,c as A,F as Q,Z as Y,R as E,o as Z,f as H,w as $,n as q,b as ee,r as S,P as y,_ as ve,a2 as we,a3 as he,a4 as _e}from"./vendor-BvqAck49.js";import{R as ye,b as pe,as as ge}from"./icons-DP3uiYxy.js";const k=new Map,C=new Map,N=new Set,F=new Set;let te=!1;function xe(c){te||(te=!0,c.onMessage(o=>{if(!(!o||typeof o.type!="string")){if(o.type==="terminal.stdout"){const{sessionId:s,data:e,seq:i}=o.payload||{};if(!s)return;let w;try{const d=atob(e||""),f=new Uint8Array(d.length);for(let n=0;n<d.length;n++)f[n]=d.charCodeAt(n);w=new TextDecoder("utf-8").decode(f)}catch{w=""}const u={sessionId:s,data:w,seq:i};k.get(s)?.forEach(d=>d(u)),N.forEach(d=>d(u))}else if(o.type==="terminal.exit"){const{sessionId:s,exitCode:e,signal:i}=o.payload||{};if(!s)return;const w={sessionId:s,exitCode:e,signal:i};C.get(s)?.forEach(u=>u(w)),F.forEach(u=>u(w))}}}))}function ne(c){const o=new TextEncoder().encode(c);let s="";for(let e=0;e<o.length;e++)s+=String.fromCharCode(o[e]);return btoa(s)}function ae(c){const o=atob(c||""),s=new Uint8Array(o.length);for(let e=0;e<o.length;e++)s[e]=o.charCodeAt(e);return new TextDecoder("utf-8").decode(s)}function oe(){const c=fe();xe(c);async function o(n={}){const a=await c.sendRaw({type:"terminal.create",payload:{shell:n.shell,cwd:n.cwd,env:n.env,cols:n.cols,rows:n.rows}});if(a.ok===!1)throw new Error(a.error||"terminal_create_failed");return a.result??a}async function s(){const n=await c.sendRaw({type:"terminal.list",payload:{}});if(n.ok===!1)throw new Error(n.error||"terminal_list_failed");const a=n.result??n;return Array.isArray(a.sessions)?a.sessions:[]}async function e(n,a){const r=await c.sendRaw({type:"terminal.stdin",payload:{sessionId:n,data:ne(String(a))}});if(r.ok===!1)throw new Error(r.error||"terminal_stdin_failed");return r.result??r}async function i(n,a,r){const h=await c.sendRaw({type:"terminal.resize",payload:{sessionId:n,cols:a,rows:r}});if(h.ok===!1)throw new Error(h.error||"terminal_resize_failed");return h.result??h}async function w(n){const a=await c.sendRaw({type:"terminal.close",payload:{sessionId:n}});if(a.ok===!1)throw new Error(a.error||"terminal_close_failed");return a.result??a}async function u(n,a=0){const r=await c.sendRaw({type:"terminal.history",payload:{sessionId:n,fromSeq:a}});if(r.ok===!1)throw new Error(r.error||"terminal_history_failed");const h=r.result??r;return{truncated:!!h.truncated,chunks:(h.chunks||[]).map(L=>({seq:L.seq,data:ae(L.data)}))}}function d(n,a){return n?(k.has(n)||k.set(n,new Set),k.get(n).add(a),()=>{k.get(n)?.delete(a),k.get(n)?.size===0&&k.delete(n)}):(N.add(a),()=>N.delete(a))}function f(n,a){return n?(C.has(n)||C.set(n,new Set),C.get(n).add(a),()=>{C.get(n)?.delete(a),C.get(n)?.size===0&&C.delete(n)}):(F.add(a),()=>F.delete(a))}return{create:o,list:s,stdin:e,resize:i,close:w,history:u,onStdout:d,onExit:f,_internal:{stdoutSubs:k,exitSubs:C,toBase64Utf8:ne,fromBase64Utf8:ae}}}const Se={__name:"Terminal",setup(c,{expose:o}){o();const s=oe(),e=S([]),i=S(null),w=S("pwsh"),u=S(!1),d=S(!1),f=S(""),n=S(""),a=S([]),r=[{value:"pwsh",label:"PowerShell"},{value:"cmd",label:"CMD"},{value:"bash",label:"Bash"},{value:"wsl",label:"WSL"}],h=ee(()=>e.value.find(t=>t.id===i.value));function L(t){return t?t.slice(0,8):""}let O=null,M=null;async function I(){if(O)return{xtermMod:O,fitAddonMod:M};try{O=await U(()=>import("./xterm-BZcWGsqw.js").then(t=>t.x),__vite__mapDeps([0,1,2]),import.meta.url),M=await U(()=>import("./addon-fit-CK6X9sAG.js").then(t=>t.a),__vite__mapDeps([3,1,2]),import.meta.url),await U(()=>Promise.resolve({}),__vite__mapDeps([4]),import.meta.url)}catch(t){throw n.value="xterm 资源加载失败:"+(t?.message||"未知错误"),t}return{xtermMod:O,fitAddonMod:M}}async function B(t){await q();const{xtermMod:l,fitAddonMod:p}=await I(),b=a.value.find(v=>v?.dataset?.sessionId===t.id);if(!b)return;const m=new l.Terminal({cursorBlink:!0,fontFamily:'Consolas, "Courier New", monospace',fontSize:13,theme:{background:"#1e1e1e",foreground:"#d4d4d4"},convertEol:!1}),P=new p.FitAddon;m.loadAddon(P),m.open(b);try{P.fit()}catch{}t.xterm=m,t.fitAddon=P;const ie=m.onData(v=>{s.stdin(t.id,v).catch(g=>{String(g?.message||"").includes("dangerous_keyword_blocked")?V.warning("该命令被桌面端拦截(高危关键字)"):V.error("stdin 失败: "+(g?.message||g))})}),ce=s.onStdout(t.id,({data:v,seq:g})=>{t.lastSeq=g,m.write(v)}),de=s.onExit(t.id,({exitCode:v,signal:g})=>{t.alive=!1,t.exitCode=v,t.signal=g,m.writeln(`\r
3
+ \x1B[33m[session exited, code=${v}, signal=${g??"-"}]\x1B[0m`)});t.offs=()=>{try{ie.dispose?.()}catch{}ce(),de()};try{const{chunks:v,truncated:g}=await s.history(t.id,0);g&&m.writeln("\x1B[2m[history truncated — earlier output was evicted]\x1B[0m");for(const J of v)m.write(J.data),t.lastSeq=J.seq}catch(v){m.writeln(`\x1B[31m[history fetch failed: ${v?.message||v}]\x1B[0m`)}const G=new ResizeObserver(()=>{try{P.fit(),s.resize(t.id,m.cols,m.rows).catch(()=>{})}catch{}});G.observe(b);const ue=t.offs;t.offs=()=>{try{G.disconnect()}catch{}ue()}}async function re(){u.value=!0,f.value="";try{const t=await s.create({shell:w.value,cols:80,rows:24}),l={id:t.sessionId,shell:t.shell,cwd:"",alive:!0,lastSeq:0,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(l),i.value=l.id,await B(l)}catch(t){f.value=t?.message||String(t)}finally{u.value=!1}}async function se(t){try{await s.close(t)}catch(l){f.value=l?.message||String(l)}setTimeout(()=>W(t),500)}function W(t){const l=e.value.findIndex(b=>b.id===t);if(l===-1)return;const p=e.value[l];try{p.offs?.()}catch{}try{p.xterm?.dispose?.()}catch{}e.value.splice(l,1),i.value===t&&(i.value=e.value[0]?.id||null)}function le(t){i.value=t,q(()=>{const l=e.value.find(p=>p.id===t);try{l?.fitAddon?.fit()}catch{}})}async function X(){d.value=!0,f.value="";try{const t=await s.list();for(const l of t){const p=e.value.find(m=>m.id===l.id);if(p){p.alive=l.alive,p.lastSeq=l.lastSeq;continue}const b={id:l.id,shell:l.shell,cwd:l.cwd,alive:l.alive,lastSeq:l.lastSeq,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(b),await B(b)}!i.value&&e.value.length>0&&(i.value=e.value[0].id)}catch(t){f.value=t?.message||String(t)}finally{d.value=!1}}Z(async()=>{await X()}),H(()=>{for(const t of e.value){try{t.offs?.()}catch{}try{t.xterm?.dispose?.()}catch{}}}),$(i,()=>{q(()=>{const t=h.value;try{t?.fitAddon?.fit()}catch{}})});const j={term:s,sessions:e,activeId:i,newShell:w,creating:u,loadingList:d,error:f,warning:n,xtermContainers:a,shellOptions:r,active:h,shortId:L,get xtermMod(){return O},set xtermMod(t){O=t},get fitAddonMod(){return M},set fitAddonMod(t){M=t},loadXterm:I,mountXterm:B,onCreate:re,onClose:se,removeSession:W,activate:le,refreshList:X,ref:S,computed:ee,onMounted:Z,onBeforeUnmount:H,nextTick:q,watch:$,get message(){return V},get PlusOutlined(){return ge},get CloseOutlined(){return pe},get ReloadOutlined(){return ye},get useTerminal(){return oe}};return Object.defineProperty(j,"__isScriptSetup",{enumerable:!1,value:!0}),j}},be={class:"terminal-page"},ke={class:"terminal-header"},Ce={class:"page-sub"},Ae={class:"terminal-body"},Ee={class:"session-tabs"},Oe=["onClick"],Te={class:"session-shell"},Re={class:"session-id"},Me={key:0,class:"session-empty"},ze={class:"xterm-host"},Le=["data-session-id"],Pe={key:0,class:"xterm-placeholder"},De={key:1,class:"terminal-footer"},qe={key:0,class:"footer-exit"};function Be(c,o,s,e,i,w){const u=z("a-tag"),d=z("a-select"),f=z("a-button"),n=z("a-space"),a=z("a-alert");return y(),x("div",be,[_("div",ke,[_("div",null,[o[3]||(o[3]=_("h2",{class:"page-title"},"远程终端",-1)),_("p",Ce,[o[2]||(o[2]=D(" 桌面端托管的 PTY 会话;Android 端可远程操控同一通道 ",-1)),e.warning?(y(),K(u,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:T(()=>[D(E(e.warning),1)]),_:1})):R("v-if",!0)])]),A(n,null,{default:T(()=>[A(d,{value:e.newShell,"onUpdate:value":o[0]||(o[0]=r=>e.newShell=r),style:{width:"130px"},size:"small",options:e.shellOptions},null,8,["value"]),A(f,{type:"primary",size:"small",loading:e.creating,onClick:e.onCreate},{icon:T(()=>[A(e.PlusOutlined)]),default:T(()=>[o[4]||(o[4]=D(" 新会话 ",-1))]),_:1},8,["loading"]),A(f,{size:"small",loading:e.loadingList,onClick:e.refreshList},{icon:T(()=>[A(e.ReloadOutlined)]),default:T(()=>[o[5]||(o[5]=D(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),e.error?(y(),K(a,{key:0,message:e.error,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"12px"},onClose:o[1]||(o[1]=r=>e.error="")},null,8,["message"])):R("v-if",!0),_("div",Ae,[_("div",Ee,[(y(!0),x(Q,null,Y(e.sessions,r=>(y(),x("div",{key:r.id,class:ve(["session-tab",{active:r.id===e.activeId,dead:!r.alive}]),onClick:h=>e.activate(r.id)},[_("span",Te,E(r.shell),1),_("span",Re,E(e.shortId(r.id)),1),A(e.CloseOutlined,{class:"session-close",onClick:we(h=>e.onClose(r.id),["stop"])},null,8,["onClick"])],10,Oe))),128)),e.sessions.length===0?(y(),x("div",Me,' 点击 "新会话" 创建第一个终端 ')):R("v-if",!0)]),_("div",ze,[(y(!0),x(Q,null,Y(e.sessions,r=>he((y(),x("div",{key:r.id,ref_for:!0,ref:"xtermContainers","data-session-id":r.id,class:"xterm-container"},null,8,Le)),[[_e,r.id===e.activeId]])),128)),e.sessions.length===0?(y(),x("div",Pe,[...o[6]||(o[6]=[_("span",null,"无活跃会话",-1)])])):R("v-if",!0)])]),e.active?(y(),x("div",De,[_("span",null,E(e.active.shell)+" · "+E(e.active.cwd||"(默认 cwd)")+" · seq "+E(e.active.lastSeq),1),e.active.alive?R("v-if",!0):(y(),x("span",qe,"已退出 (code="+E(e.active.exitCode??"-")+")",1))])):R("v-if",!0)])}const Fe=me(Se,[["render",Be],["__scopeId","data-v-65366a29"],["__file","/tmp/cc-web-panel-SkGS8t/repo/packages/web-panel/src/views/Terminal.vue"]]);export{Fe as default};
@@ -0,0 +1 @@
1
+ import{I as y,P as n,J as i,U as l,S as h,R as o,c,K as d,Q as u,V as g,b as a}from"./vendor-BvqAck49.js";import{_ as b}from"./index-GerFRbNP.js";import{aD as O,aH as D}from"./icons-DP3uiYxy.js";const C={__name:"TimelineRenderer",props:{event:{type:Object,required:!0}},setup(v,{expose:_}){_();const r=v,e=a(()=>r.event.content||{}),p=a(()=>{const t=r.event.source.adapter||"";return t.startsWith("travel-12306")||t.startsWith("travel-ctrip")}),m=a(()=>e.value.from&&e.value.to?`${e.value.from} → ${e.value.to}`:e.value.origin&&e.value.destination?`${e.value.origin} → ${e.value.destination}`:null),s=a(()=>r.event.place||e.value.placeName||e.value.poi),N=a(()=>e.value.trainNo),k=a(()=>e.value.flightNo),S=a(()=>e.value.title||e.value.text||e.value.description||"—"),T=a(()=>{const t=[];return e.value.departureTime&&t.push(`出发 ${e.value.departureTime}`),e.value.arrivalTime&&t.push(`到达 ${e.value.arrivalTime}`),e.value.duration&&t.push(`${e.value.duration}`),e.value.distance&&t.push(`${e.value.distance}`),t.length?t.join(" · "):null}),x=a(()=>{if(!r.event.occurredAt)return"";const t=new Date(r.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),f={props:r,c:e,isTravel:p,route:m,placeName:s,trainNo:N,flightNo:k,fallbackText:S,extraDetail:T,formattedTime:x,computed:a,get CarOutlined(){return D},get EnvironmentOutlined(){return O}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}},V={class:"timeline-event"},w={class:"dot"},B={class:"card"},E={class:"head"},R={class:"time"},j={class:"primary"},A={key:0},H={key:1},I={key:2},M={key:0,class:"trip-no"},P={key:1,class:"extra"};function W(v,_,r,e,p,m){const s=y("a-tag");return n(),i("div",V,[l("div",w,[e.isTravel?(n(),h(e.CarOutlined,{key:0})):(n(),h(e.EnvironmentOutlined,{key:1}))]),l("div",B,[l("div",E,[l("span",R,o(e.formattedTime),1),c(s,{color:"cyan"},{default:d(()=>[u(o(r.event.source.adapter),1)]),_:1}),c(s,null,{default:d(()=>[u(o(r.event.subtype),1)]),_:1})]),l("div",j,[e.route?(n(),i("span",A,o(e.route),1)):e.placeName?(n(),i("span",H,"📍 "+o(e.placeName),1)):(n(),i("span",I,o(e.fallbackText),1))]),e.trainNo||e.flightNo?(n(),i("div",M,[c(s,{color:"blue"},{default:d(()=>[u(o(e.trainNo||e.flightNo),1)]),_:1})])):g("v-if",!0),e.extraDetail?(n(),i("div",P,o(e.extraDetail),1)):g("v-if",!0)])])}const J=b(C,[["render",W],["__scopeId","data-v-18400280"],["__file","/tmp/cc-web-panel-SkGS8t/repo/packages/web-panel/src/components/pdh/renderers/TimelineRenderer.vue"]]);export{J as default};
@@ -1 +1 @@
1
- import{I as _,J as p,U as m,R as c,c as n,K as r,V as k,S as U,o as q,b as H,r as T,P as f,Q as h,F as B,Z as K}from"./vendor-BvqAck49.js";import{_ as _t,b as X,u as $,d as C}from"./index-Bg1RsfAJ.js";import{s as st}from"./community-parser-CO25nZFt.js";import{aQ as gt,D as vt,a0 as xt,N as ht,a8 as Tt,R as St}from"./icons-DP3uiYxy.js";function N(e){const a=st(e);if(!a)return null;try{return JSON.parse(a)}catch{}const o=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!o)return null;try{return JSON.parse(o[0])}catch{return null}}const Ct=Object.freeze(["today","week","month","all"]),rt=Object.freeze(["planning","active","suspended","archived"]),lt=Object.freeze(["pending","recorded","billed","rejected","refunded"]);function d(e,a=0){return typeof e=="number"&&Number.isFinite(e)?e:a}function D(e){if(!e)return{noDb:!1,error:""};const a=st(e),o=/Database not available/i.test(a);return{noDb:o,error:o?"Database not available":""}}const Q={totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0};function tt(e){const a={...Q};return!e||typeof e!="object"||Array.isArray(e)||(a.totalCalls=d(e.total_calls??e.totalCalls,0),a.totalInputTokens=d(e.total_input_tokens??e.totalInputTokens,0),a.totalOutputTokens=d(e.total_output_tokens??e.totalOutputTokens,0),a.totalTokens=d(e.total_tokens??e.totalTokens,0),a.totalCostUsd=d(e.total_cost_usd??e.totalCostUsd,0),a.avgResponseTimeMs=d(e.avg_response_time_ms??e.avgResponseTimeMs,0)),a}function Y(e){const a=N(e);return!a||typeof a!="object"||Array.isArray(a)?{stats:{...Q},today:{...Q}}:{stats:tt(a.stats),today:tt(a.today)}}function Ot(e,a=0){if(!e||typeof e!="object")return null;const o=e.provider||"",t=e.model||"";return!o&&!t?null:{key:`${o}/${t}/${a}`,provider:String(o),model:String(t),calls:d(e.calls,0),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),_idx:a}}function et(e){const a=N(e);return Array.isArray(a)?a.map(Ot).filter(Boolean):[]}function Bt(e,a=0){if(!e||typeof e!="object")return null;const o=e.id||"";return o?{key:o,id:o,provider:String(e.provider||""),model:String(e.model||""),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),responseTimeMs:d(e.response_time_ms??e.responseTimeMs,0),endpoint:String(e.endpoint||""),createdAt:e.created_at??e.createdAt??"",_idx:a}:null}function ot(e){const a=N(e);return Array.isArray(a)?a.map(Bt).filter(Boolean):[]}const Rt={totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0};function at(e){const a={...Rt},o=N(e);return!o||typeof o!="object"||Array.isArray(o)||(a.totalEntries=d(o.total_entries??o.totalEntries,0),a.totalHits=d(o.total_hits??o.totalHits,0),a.totalTokensSaved=d(o.total_tokens_saved??o.totalTokensSaved,0),a.expiredEntries=d(o.expired_entries??o.expiredEntries,0)),a}const Et={totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}};function nt(e){const a=JSON.parse(JSON.stringify(Et));for(const t of rt)a.budgetsByStatus[t]=0;for(const t of lt)a.recordsByStatus[t]=0;const o=N(e);if(!o||typeof o!="object"||Array.isArray(o))return a;if(a.totalBudgetsV2=d(o.totalBudgetsV2,0),a.totalRecordsV2=d(o.totalRecordsV2,0),a.maxActiveBudgetsPerOwner=d(o.maxActiveBudgetsPerOwner,0),a.maxPendingRecordsPerBudget=d(o.maxPendingRecordsPerBudget,0),a.budgetIdleMs=d(o.budgetIdleMs,0),a.recordStuckMs=d(o.recordStuckMs,0),o.budgetsByStatus&&typeof o.budgetsByStatus=="object")for(const[t,v]of Object.entries(o.budgetsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.budgetsByStatus[t]=v);if(o.recordsByStatus&&typeof o.recordsByStatus=="object")for(const[t,v]of Object.entries(o.recordsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.recordsByStatus[t]=v);return a}function wt(e){if(e==null||e==="")return"—";const a=String(e),o=a.includes(" ")&&!a.includes("T")?a.replace(" ","T")+"Z":a,t=typeof e=="number"?new Date(e):new Date(o);return isNaN(t.getTime())?a:t.toLocaleString("zh-CN",{hour12:!1})}function zt(e){return typeof e!="number"||!Number.isFinite(e)?"$0":"$"+(Math.abs(e)<1?e.toFixed(4):e.toFixed(2))}const At={__name:"Tokens",setup(e,{expose:a}){a();const{t:o}=X(),t=$(),v=T(!1),I=T("all"),O=T({stats:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0},today:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0}}),R=T([]),V=T([]),M=T({totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0}),P=T({totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}}),b=T({noDb:!1,error:""}),x=T("breakdown"),g=H(()=>[{title:o("tokens.breakdownColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.breakdownColumns.model"),key:"model"},{title:o("tokens.breakdownColumns.calls"),key:"calls",width:"90px"},{title:o("tokens.breakdownColumns.totalTokens"),key:"totalTokens",width:"180px"},{title:o("tokens.breakdownColumns.costUsd"),key:"costUsd",width:"180px"},{title:o("tokens.breakdownColumns.avgCost"),key:"avgCost",width:"110px"}]),w=H(()=>[{title:o("tokens.recentColumns.createdAt"),key:"createdAt",width:"160px"},{title:o("tokens.recentColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.recentColumns.model"),key:"model",width:"180px"},{title:o("tokens.recentColumns.tokens"),key:"tokens",width:"160px"},{title:o("tokens.recentColumns.costUsd"),key:"costUsd",width:"110px"},{title:o("tokens.recentColumns.responseTimeMs"),key:"responseTimeMs",width:"100px"},{title:o("tokens.recentColumns.endpoint"),key:"endpoint"}]),S=H(()=>R.value.reduce((s,u)=>s+u.costUsd,0));function z(s){const u=`tokens.period.${s}`,y=o(u);return y===u?s:y}function j(s){const u=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let y=0;for(let E=0;E<(s||"").length;E++)y=y*31+s.charCodeAt(E)>>>0;return u[y%u.length]}function A(s){return s<=500?"#52c41a":s<=1500?"#1677ff":s<=3e3?"#faad14":"#ff4d4f"}function F(s){return s<=500?"green":s<=1500?"blue":s<=3e3?"gold":"red"}function G(s){return typeof s!="number"||!Number.isFinite(s)?"0":s.toLocaleString("en-US")}function l(s){return!S.value||s<=0?0:Math.min(100,Math.round(s/S.value*100))}function i(s,u){return u?Math.round(s/u*100):0}function ct(s){const u=`tokens.budgetStatus.${s}`,y=o(u);return y===u?s:y}function it(s){return{planning:"default",active:"green",suspended:"orange",archived:"default"}[s]||"default"}function dt(s){return{planning:"#888",active:"#52c41a",suspended:"#faad14",archived:"#666"}[s]||"#888"}function ut(s){const u=`tokens.recordStatus.${s}`,y=o(u);return y===u?s:y}function ft(s){return{pending:"default",recorded:"blue",billed:"green",rejected:"red",refunded:"orange"}[s]||"default"}function kt(s){return{pending:"#888",recorded:"#1677ff",billed:"#52c41a",rejected:"#ff4d4f",refunded:"#faad14"}[s]||"#888"}async function L(){v.value=!0,b.value={noDb:!1,error:""};try{const[s,u,y,E,yt]=await Promise.all([t.execute(`tokens show --period ${I.value} --json`,8e3).catch(()=>({output:""})),t.execute("tokens breakdown --json",8e3).catch(()=>({output:""})),t.execute("tokens recent -n 100 --json",1e4).catch(()=>({output:""})),t.execute("tokens cache --json",6e3).catch(()=>({output:""})),t.execute("tokens stats-v2",6e3).catch(()=>({output:""}))]),Z=[s,u,y,E].map(J=>D(J.output)).find(J=>J.noDb);Z&&(b.value=Z),O.value=Y(s.output),R.value=et(u.output),V.value=ot(y.output),M.value=at(E.output),P.value=nt(yt.output)}catch(s){C.error(o("tokens.messages.loadFailed",{err:s?.message||s}))}finally{v.value=!1}}async function mt(){try{const{output:s}=await t.execute(`tokens show --period ${I.value} --json`,8e3),u=D(s);if(u.noDb){b.value=u;return}O.value=Y(s)}catch(s){C.error(o("tokens.messages.loadShowFailed",{err:s?.message||s}))}}async function pt(){try{const{output:s}=await t.execute("tokens cache --cleanup",8e3);if(D(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.cleanupOk")),await L()}catch(s){C.error(o("tokens.messages.cleanupFailed",{err:s?.message||s}))}}async function bt(){try{const{output:s}=await t.execute("tokens cache --clear",8e3);if(D(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.clearOk")),await L()}catch(s){C.error(o("tokens.messages.clearFailed",{err:s?.message||s}))}}q(L);const W={t:o,ws:t,loading:v,period:I,show:O,breakdown:R,recent:V,cache:M,statsV2:P,errorState:b,activeTab:x,breakdownColumns:g,recentColumns:w,totalCost:S,periodLabel:z,providerColor:j,respColor:A,respTagColor:F,formatNumber:G,costPct:l,pctOfTotal:i,budgetStatusLabel:ct,budgetStatusColor:it,budgetBarColor:dt,recordStatusLabel:ut,recordStatusColor:ft,recordBarColor:kt,loadAll:L,loadShow:mt,cleanupExpired:pt,clearAllCache:bt,ref:T,computed:H,onMounted:q,get useI18n(){return X},get ReloadOutlined(){return St},get ApiOutlined(){return Tt},get NumberOutlined(){return ht},get ClockCircleOutlined(){return xt},get DatabaseOutlined(){return vt},get DeleteOutlined(){return gt},get message(){return C},get useWsStore(){return $},get parseShowResult(){return Y},get parseBreakdown(){return et},get parseRecent(){return ot},get parseCacheStats(){return at},get parseStatsV2(){return nt},get detectTokensError(){return D},get formatTokensTime(){return wt},get formatCost(){return zt},get PERIOD_OPTIONS(){return Ct},get BUDGET_MATURITIES_V2(){return rt},get USAGE_RECORD_LIFECYCLES_V2(){return lt}};return Object.defineProperty(W,"__isScriptSetup",{enumerable:!1,value:!0}),W}},Ut={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Dt={class:"page-title"},Nt={class:"page-sub"},It={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Vt={style:{color:"var(--text-secondary)","font-size":"12px"}},Mt={class:"stat-sub"},Pt={class:"stat-sub"},jt={class:"stat-sub"},Ft={class:"stat-sub"},Lt={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Ht={key:2,style:{color:"var(--text-secondary)"}},Gt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Jt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},Yt={key:5,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},Qt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Zt={key:2,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},qt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Xt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},$t={key:4,style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},te={key:0,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},ee={key:1,style:{color:"var(--text-muted)"}},oe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ae={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}},ne={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}};function se(e,a,o,t,v,I){const O=_("a-button"),R=_("a-space"),V=_("a-alert"),M=_("a-radio-button"),P=_("a-radio-group"),b=_("a-card"),x=_("a-statistic"),g=_("a-col"),w=_("a-row"),S=_("a-tag"),z=_("a-progress"),j=_("a-table"),A=_("a-tab-pane"),F=_("a-popconfirm"),G=_("a-tabs");return f(),p("div",null,[m("div",Ut,[m("div",null,[m("h2",Dt,c(t.t("tokens.title")),1),m("p",Nt,c(t.t("tokens.subtitle")),1)]),n(R,null,{default:r(()=>[n(O,{loading:t.loading,onClick:t.loadAll},{icon:r(()=>[n(t.ReloadOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.refresh")),1)]),_:1},8,["loading"])]),_:1})]),k(" noDb banner "),t.errorState.noDb?(f(),U(V,{key:0,type:"info","show-icon":"",message:t.t("tokens.noDb.message"),description:t.t("tokens.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):k("v-if",!0),k(" Period selector "),n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[m("div",It,[m("span",Vt,c(t.t("tokens.periodLabel")),1),n(P,{value:t.period,"onUpdate:value":a[0]||(a[0]=l=>t.period=l),size:"small","button-style":"solid",onChange:t.loadShow},{default:r(()=>[(f(!0),p(B,null,K(t.PERIOD_OPTIONS,l=>(f(),U(M,{key:l,value:l},{default:r(()=>[h(c(t.periodLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),k(" Stat cards "),n(w,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.calls"),value:t.show.stats.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(t.ApiOutlined)]),_:1},8,["title","value"]),m("div",Mt,c(t.t("tokens.stats.callsToday",{count:t.show.today.totalCalls})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalTokens"),value:t.show.stats.totalTokens,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(t.NumberOutlined)]),_:1},8,["title","value"]),m("div",Pt,c(t.t("tokens.stats.tokensInOut",{inputs:t.formatNumber(t.show.stats.totalInputTokens),outputs:t.formatNumber(t.show.stats.totalOutputTokens)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalCost"),value:t.show.stats.totalCostUsd,precision:t.show.stats.totalCostUsd<1?4:2,prefix:"$","value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value","precision"]),m("div",jt,c(t.t("tokens.stats.costToday",{amount:t.formatCost(t.show.today.totalCostUsd)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.avgResponse"),value:t.show.stats.avgResponseTimeMs,suffix:"ms",precision:0,"value-style":{color:t.respColor(t.show.stats.avgResponseTimeMs),fontSize:"20px"}},{prefix:r(()=>[n(t.ClockCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(g,{xs:24,sm:8,lg:4},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.cacheHits"),value:t.cache.totalHits,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(t.DatabaseOutlined)]),_:1},8,["title","value"]),m("div",Ft,c(t.t("tokens.stats.cacheTokensSaved",{count:t.formatNumber(t.cache.totalTokensSaved)})),1)]),_:1})]),_:1})]),_:1}),k(" Tabs "),n(G,{activeKey:t.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>t.activeTab=l),class:"tokens-tabs"},{default:r(()=>[k(" ── Breakdown tab ────────────────────────────────────── "),n(A,{key:"breakdown",tab:t.t("tokens.tabs.breakdown")},{default:r(()=>[n(j,{columns:t.breakdownColumns,"data-source":t.breakdown,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.models",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="provider"?(f(),U(S,{key:0,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Lt,c(i.model),1)):k("v-if",!0),l.key==="calls"?(f(),p("span",Ht,c(t.formatNumber(i.calls)),1)):k("v-if",!0),l.key==="totalTokens"?(f(),p(B,{key:3},[m("span",Gt,c(t.formatNumber(i.totalTokens)),1),m("div",Jt,c(t.t("tokens.breakdownDetails.tokensInOut",{inputs:t.formatNumber(i.inputTokens),outputs:t.formatNumber(i.outputTokens)})),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p(B,{key:4},[m("span",Kt,c(t.formatCost(i.costUsd)),1),n(z,{percent:t.costPct(i.costUsd),"show-info":!1,"stroke-color":"#faad14",size:"small",style:{"margin-top":"2px"}},null,8,["percent"])],64)):k("v-if",!0),l.key==="avgCost"?(f(),p("span",Yt,c(i.calls>0?t.formatCost(i.costUsd/i.calls):"—"),1)):k("v-if",!0)]),emptyText:r(()=>[m("div",Qt,[n(t.NumberOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.breakdown")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Recent tab ───────────────────────────────────────── "),n(A,{key:"recent",tab:t.t("tokens.tabs.recent")},{default:r(()=>[n(j,{columns:t.recentColumns,"data-source":t.recent,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.rows",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="createdAt"?(f(),p("span",Wt,c(t.formatTokensTime(i.createdAt)),1)):k("v-if",!0),l.key==="provider"?(f(),U(S,{key:1,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Zt,c(i.model),1)):k("v-if",!0),l.key==="tokens"?(f(),p(B,{key:3},[m("span",qt,c(t.formatNumber(i.totalTokens)),1),m("div",Xt,c(t.formatNumber(i.inputTokens))+" / "+c(t.formatNumber(i.outputTokens)),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p("span",$t,c(t.formatCost(i.costUsd)),1)):k("v-if",!0),l.key==="responseTimeMs"?(f(),U(S,{key:5,color:t.respTagColor(i.responseTimeMs)},{default:r(()=>[h(c(i.responseTimeMs)+"ms",1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="endpoint"?(f(),p(B,{key:6},[i.endpoint?(f(),p("span",te,c(i.endpoint),1)):(f(),p("span",ee,"—"))],64)):k("v-if",!0)]),emptyText:r(()=>[m("div",oe,[n(t.ClockCircleOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.recent")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Cache tab ────────────────────────────────────────── "),n(A,{key:"cache",tab:t.t("tokens.tabs.cache")},{default:r(()=>[n(w,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:r(()=>[n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalEntries"),value:t.cache.totalEntries,"value-style":{color:"#1677ff",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalHits"),value:t.cache.totalHits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalTokensSaved"),value:t.cache.totalTokensSaved,"value-style":{color:"#13c2c2",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.expiredEntries"),value:t.cache.expiredEntries,"value-style":{color:t.cache.expiredEntries>0?"#faad14":"#888",fontSize:"18px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),n(b,{title:t.t("tokens.cache.maintenanceTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(R,null,{default:r(()=>[n(F,{title:t.t("tokens.cache.cleanupConfirm"),"ok-text":t.t("tokens.cache.cleanupOk"),"cancel-text":t.t("common.cancel"),onConfirm:t.cleanupExpired},{default:r(()=>[n(O,{disabled:t.cache.expiredEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.cleanupButton",{count:t.cache.expiredEntries})),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"]),n(F,{title:t.t("tokens.cache.clearConfirm"),"ok-text":t.t("tokens.cache.clearOk"),"ok-type":"danger","cancel-text":t.t("common.cancel"),onConfirm:t.clearAllCache},{default:r(()=>[n(O,{danger:"",disabled:t.cache.totalEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.clearButton")),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"])]),_:1})]),_:1},8,["title"]),n(b,{title:t.t("tokens.v2.cardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:r(()=>[n(w,{gutter:[16,16]},{default:r(()=>[n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ae,c(t.t("tokens.v2.budgetsTitle")),1),(f(!0),p(B,null,K(t.BUDGET_MATURITIES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.budgetStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.budgetStatusLabel(l)),1)]),_:2},1032,["color"]),n(z,{percent:t.pctOfTotal(t.statsV2.budgetsByStatus[l]||0,t.statsV2.totalBudgetsV2),"stroke-color":t.budgetBarColor(l),format:()=>`${t.statsV2.budgetsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ne,c(t.t("tokens.v2.recordsTitle")),1),(f(!0),p(B,null,K(t.USAGE_RECORD_LIFECYCLES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.recordStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.recordStatusLabel(l)),1)]),_:2},1032,["color"]),n(z,{percent:t.pctOfTotal(t.statsV2.recordsByStatus[l]||0,t.statsV2.totalRecordsV2),"stroke-color":t.recordBarColor(l),format:()=>`${t.statsV2.recordsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1},8,["title"])]),_:1},8,["tab"])]),_:1},8,["activeKey"])])}const de=_t(At,[["render",se],["__scopeId","data-v-175683a8"],["__file","/tmp/cc-web-panel-wjpwq8/repo/packages/web-panel/src/views/Tokens.vue"]]);export{de as default};
1
+ import{I as _,J as p,U as m,R as c,c as n,K as r,V as k,S as U,o as q,b as H,r as T,P as f,Q as h,F as B,Z as K}from"./vendor-BvqAck49.js";import{_ as _t,b as X,u as $,d as C}from"./index-GerFRbNP.js";import{s as st}from"./community-parser-CO25nZFt.js";import{aQ as gt,D as vt,a0 as xt,N as ht,a8 as Tt,R as St}from"./icons-DP3uiYxy.js";function N(e){const a=st(e);if(!a)return null;try{return JSON.parse(a)}catch{}const o=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!o)return null;try{return JSON.parse(o[0])}catch{return null}}const Ct=Object.freeze(["today","week","month","all"]),rt=Object.freeze(["planning","active","suspended","archived"]),lt=Object.freeze(["pending","recorded","billed","rejected","refunded"]);function d(e,a=0){return typeof e=="number"&&Number.isFinite(e)?e:a}function D(e){if(!e)return{noDb:!1,error:""};const a=st(e),o=/Database not available/i.test(a);return{noDb:o,error:o?"Database not available":""}}const Q={totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0};function tt(e){const a={...Q};return!e||typeof e!="object"||Array.isArray(e)||(a.totalCalls=d(e.total_calls??e.totalCalls,0),a.totalInputTokens=d(e.total_input_tokens??e.totalInputTokens,0),a.totalOutputTokens=d(e.total_output_tokens??e.totalOutputTokens,0),a.totalTokens=d(e.total_tokens??e.totalTokens,0),a.totalCostUsd=d(e.total_cost_usd??e.totalCostUsd,0),a.avgResponseTimeMs=d(e.avg_response_time_ms??e.avgResponseTimeMs,0)),a}function Y(e){const a=N(e);return!a||typeof a!="object"||Array.isArray(a)?{stats:{...Q},today:{...Q}}:{stats:tt(a.stats),today:tt(a.today)}}function Ot(e,a=0){if(!e||typeof e!="object")return null;const o=e.provider||"",t=e.model||"";return!o&&!t?null:{key:`${o}/${t}/${a}`,provider:String(o),model:String(t),calls:d(e.calls,0),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),_idx:a}}function et(e){const a=N(e);return Array.isArray(a)?a.map(Ot).filter(Boolean):[]}function Bt(e,a=0){if(!e||typeof e!="object")return null;const o=e.id||"";return o?{key:o,id:o,provider:String(e.provider||""),model:String(e.model||""),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),responseTimeMs:d(e.response_time_ms??e.responseTimeMs,0),endpoint:String(e.endpoint||""),createdAt:e.created_at??e.createdAt??"",_idx:a}:null}function ot(e){const a=N(e);return Array.isArray(a)?a.map(Bt).filter(Boolean):[]}const Rt={totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0};function at(e){const a={...Rt},o=N(e);return!o||typeof o!="object"||Array.isArray(o)||(a.totalEntries=d(o.total_entries??o.totalEntries,0),a.totalHits=d(o.total_hits??o.totalHits,0),a.totalTokensSaved=d(o.total_tokens_saved??o.totalTokensSaved,0),a.expiredEntries=d(o.expired_entries??o.expiredEntries,0)),a}const Et={totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}};function nt(e){const a=JSON.parse(JSON.stringify(Et));for(const t of rt)a.budgetsByStatus[t]=0;for(const t of lt)a.recordsByStatus[t]=0;const o=N(e);if(!o||typeof o!="object"||Array.isArray(o))return a;if(a.totalBudgetsV2=d(o.totalBudgetsV2,0),a.totalRecordsV2=d(o.totalRecordsV2,0),a.maxActiveBudgetsPerOwner=d(o.maxActiveBudgetsPerOwner,0),a.maxPendingRecordsPerBudget=d(o.maxPendingRecordsPerBudget,0),a.budgetIdleMs=d(o.budgetIdleMs,0),a.recordStuckMs=d(o.recordStuckMs,0),o.budgetsByStatus&&typeof o.budgetsByStatus=="object")for(const[t,v]of Object.entries(o.budgetsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.budgetsByStatus[t]=v);if(o.recordsByStatus&&typeof o.recordsByStatus=="object")for(const[t,v]of Object.entries(o.recordsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.recordsByStatus[t]=v);return a}function zt(e){if(e==null||e==="")return"—";const a=String(e),o=a.includes(" ")&&!a.includes("T")?a.replace(" ","T")+"Z":a,t=typeof e=="number"?new Date(e):new Date(o);return isNaN(t.getTime())?a:t.toLocaleString("zh-CN",{hour12:!1})}function wt(e){return typeof e!="number"||!Number.isFinite(e)?"$0":"$"+(Math.abs(e)<1?e.toFixed(4):e.toFixed(2))}const At={__name:"Tokens",setup(e,{expose:a}){a();const{t:o}=X(),t=$(),v=T(!1),I=T("all"),O=T({stats:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0},today:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0}}),R=T([]),V=T([]),M=T({totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0}),P=T({totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}}),b=T({noDb:!1,error:""}),x=T("breakdown"),g=H(()=>[{title:o("tokens.breakdownColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.breakdownColumns.model"),key:"model"},{title:o("tokens.breakdownColumns.calls"),key:"calls",width:"90px"},{title:o("tokens.breakdownColumns.totalTokens"),key:"totalTokens",width:"180px"},{title:o("tokens.breakdownColumns.costUsd"),key:"costUsd",width:"180px"},{title:o("tokens.breakdownColumns.avgCost"),key:"avgCost",width:"110px"}]),z=H(()=>[{title:o("tokens.recentColumns.createdAt"),key:"createdAt",width:"160px"},{title:o("tokens.recentColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.recentColumns.model"),key:"model",width:"180px"},{title:o("tokens.recentColumns.tokens"),key:"tokens",width:"160px"},{title:o("tokens.recentColumns.costUsd"),key:"costUsd",width:"110px"},{title:o("tokens.recentColumns.responseTimeMs"),key:"responseTimeMs",width:"100px"},{title:o("tokens.recentColumns.endpoint"),key:"endpoint"}]),S=H(()=>R.value.reduce((s,u)=>s+u.costUsd,0));function w(s){const u=`tokens.period.${s}`,y=o(u);return y===u?s:y}function j(s){const u=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let y=0;for(let E=0;E<(s||"").length;E++)y=y*31+s.charCodeAt(E)>>>0;return u[y%u.length]}function A(s){return s<=500?"#52c41a":s<=1500?"#1677ff":s<=3e3?"#faad14":"#ff4d4f"}function F(s){return s<=500?"green":s<=1500?"blue":s<=3e3?"gold":"red"}function G(s){return typeof s!="number"||!Number.isFinite(s)?"0":s.toLocaleString("en-US")}function l(s){return!S.value||s<=0?0:Math.min(100,Math.round(s/S.value*100))}function i(s,u){return u?Math.round(s/u*100):0}function ct(s){const u=`tokens.budgetStatus.${s}`,y=o(u);return y===u?s:y}function it(s){return{planning:"default",active:"green",suspended:"orange",archived:"default"}[s]||"default"}function dt(s){return{planning:"#888",active:"#52c41a",suspended:"#faad14",archived:"#666"}[s]||"#888"}function ut(s){const u=`tokens.recordStatus.${s}`,y=o(u);return y===u?s:y}function ft(s){return{pending:"default",recorded:"blue",billed:"green",rejected:"red",refunded:"orange"}[s]||"default"}function kt(s){return{pending:"#888",recorded:"#1677ff",billed:"#52c41a",rejected:"#ff4d4f",refunded:"#faad14"}[s]||"#888"}async function L(){v.value=!0,b.value={noDb:!1,error:""};try{const[s,u,y,E,yt]=await Promise.all([t.execute(`tokens show --period ${I.value} --json`,8e3).catch(()=>({output:""})),t.execute("tokens breakdown --json",8e3).catch(()=>({output:""})),t.execute("tokens recent -n 100 --json",1e4).catch(()=>({output:""})),t.execute("tokens cache --json",6e3).catch(()=>({output:""})),t.execute("tokens stats-v2",6e3).catch(()=>({output:""}))]),Z=[s,u,y,E].map(J=>D(J.output)).find(J=>J.noDb);Z&&(b.value=Z),O.value=Y(s.output),R.value=et(u.output),V.value=ot(y.output),M.value=at(E.output),P.value=nt(yt.output)}catch(s){C.error(o("tokens.messages.loadFailed",{err:s?.message||s}))}finally{v.value=!1}}async function mt(){try{const{output:s}=await t.execute(`tokens show --period ${I.value} --json`,8e3),u=D(s);if(u.noDb){b.value=u;return}O.value=Y(s)}catch(s){C.error(o("tokens.messages.loadShowFailed",{err:s?.message||s}))}}async function pt(){try{const{output:s}=await t.execute("tokens cache --cleanup",8e3);if(D(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.cleanupOk")),await L()}catch(s){C.error(o("tokens.messages.cleanupFailed",{err:s?.message||s}))}}async function bt(){try{const{output:s}=await t.execute("tokens cache --clear",8e3);if(D(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.clearOk")),await L()}catch(s){C.error(o("tokens.messages.clearFailed",{err:s?.message||s}))}}q(L);const W={t:o,ws:t,loading:v,period:I,show:O,breakdown:R,recent:V,cache:M,statsV2:P,errorState:b,activeTab:x,breakdownColumns:g,recentColumns:z,totalCost:S,periodLabel:w,providerColor:j,respColor:A,respTagColor:F,formatNumber:G,costPct:l,pctOfTotal:i,budgetStatusLabel:ct,budgetStatusColor:it,budgetBarColor:dt,recordStatusLabel:ut,recordStatusColor:ft,recordBarColor:kt,loadAll:L,loadShow:mt,cleanupExpired:pt,clearAllCache:bt,ref:T,computed:H,onMounted:q,get useI18n(){return X},get ReloadOutlined(){return St},get ApiOutlined(){return Tt},get NumberOutlined(){return ht},get ClockCircleOutlined(){return xt},get DatabaseOutlined(){return vt},get DeleteOutlined(){return gt},get message(){return C},get useWsStore(){return $},get parseShowResult(){return Y},get parseBreakdown(){return et},get parseRecent(){return ot},get parseCacheStats(){return at},get parseStatsV2(){return nt},get detectTokensError(){return D},get formatTokensTime(){return zt},get formatCost(){return wt},get PERIOD_OPTIONS(){return Ct},get BUDGET_MATURITIES_V2(){return rt},get USAGE_RECORD_LIFECYCLES_V2(){return lt}};return Object.defineProperty(W,"__isScriptSetup",{enumerable:!1,value:!0}),W}},Ut={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Dt={class:"page-title"},Nt={class:"page-sub"},It={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Vt={style:{color:"var(--text-secondary)","font-size":"12px"}},Mt={class:"stat-sub"},Pt={class:"stat-sub"},jt={class:"stat-sub"},Ft={class:"stat-sub"},Lt={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Ht={key:2,style:{color:"var(--text-secondary)"}},Gt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Jt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},Yt={key:5,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},Qt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Zt={key:2,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},qt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Xt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},$t={key:4,style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},te={key:0,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},ee={key:1,style:{color:"var(--text-muted)"}},oe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ae={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}},ne={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}};function se(e,a,o,t,v,I){const O=_("a-button"),R=_("a-space"),V=_("a-alert"),M=_("a-radio-button"),P=_("a-radio-group"),b=_("a-card"),x=_("a-statistic"),g=_("a-col"),z=_("a-row"),S=_("a-tag"),w=_("a-progress"),j=_("a-table"),A=_("a-tab-pane"),F=_("a-popconfirm"),G=_("a-tabs");return f(),p("div",null,[m("div",Ut,[m("div",null,[m("h2",Dt,c(t.t("tokens.title")),1),m("p",Nt,c(t.t("tokens.subtitle")),1)]),n(R,null,{default:r(()=>[n(O,{loading:t.loading,onClick:t.loadAll},{icon:r(()=>[n(t.ReloadOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.refresh")),1)]),_:1},8,["loading"])]),_:1})]),k(" noDb banner "),t.errorState.noDb?(f(),U(V,{key:0,type:"info","show-icon":"",message:t.t("tokens.noDb.message"),description:t.t("tokens.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):k("v-if",!0),k(" Period selector "),n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[m("div",It,[m("span",Vt,c(t.t("tokens.periodLabel")),1),n(P,{value:t.period,"onUpdate:value":a[0]||(a[0]=l=>t.period=l),size:"small","button-style":"solid",onChange:t.loadShow},{default:r(()=>[(f(!0),p(B,null,K(t.PERIOD_OPTIONS,l=>(f(),U(M,{key:l,value:l},{default:r(()=>[h(c(t.periodLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),k(" Stat cards "),n(z,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.calls"),value:t.show.stats.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(t.ApiOutlined)]),_:1},8,["title","value"]),m("div",Mt,c(t.t("tokens.stats.callsToday",{count:t.show.today.totalCalls})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalTokens"),value:t.show.stats.totalTokens,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(t.NumberOutlined)]),_:1},8,["title","value"]),m("div",Pt,c(t.t("tokens.stats.tokensInOut",{inputs:t.formatNumber(t.show.stats.totalInputTokens),outputs:t.formatNumber(t.show.stats.totalOutputTokens)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalCost"),value:t.show.stats.totalCostUsd,precision:t.show.stats.totalCostUsd<1?4:2,prefix:"$","value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value","precision"]),m("div",jt,c(t.t("tokens.stats.costToday",{amount:t.formatCost(t.show.today.totalCostUsd)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.avgResponse"),value:t.show.stats.avgResponseTimeMs,suffix:"ms",precision:0,"value-style":{color:t.respColor(t.show.stats.avgResponseTimeMs),fontSize:"20px"}},{prefix:r(()=>[n(t.ClockCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(g,{xs:24,sm:8,lg:4},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.cacheHits"),value:t.cache.totalHits,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(t.DatabaseOutlined)]),_:1},8,["title","value"]),m("div",Ft,c(t.t("tokens.stats.cacheTokensSaved",{count:t.formatNumber(t.cache.totalTokensSaved)})),1)]),_:1})]),_:1})]),_:1}),k(" Tabs "),n(G,{activeKey:t.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>t.activeTab=l),class:"tokens-tabs"},{default:r(()=>[k(" ── Breakdown tab ────────────────────────────────────── "),n(A,{key:"breakdown",tab:t.t("tokens.tabs.breakdown")},{default:r(()=>[n(j,{columns:t.breakdownColumns,"data-source":t.breakdown,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.models",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="provider"?(f(),U(S,{key:0,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Lt,c(i.model),1)):k("v-if",!0),l.key==="calls"?(f(),p("span",Ht,c(t.formatNumber(i.calls)),1)):k("v-if",!0),l.key==="totalTokens"?(f(),p(B,{key:3},[m("span",Gt,c(t.formatNumber(i.totalTokens)),1),m("div",Jt,c(t.t("tokens.breakdownDetails.tokensInOut",{inputs:t.formatNumber(i.inputTokens),outputs:t.formatNumber(i.outputTokens)})),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p(B,{key:4},[m("span",Kt,c(t.formatCost(i.costUsd)),1),n(w,{percent:t.costPct(i.costUsd),"show-info":!1,"stroke-color":"#faad14",size:"small",style:{"margin-top":"2px"}},null,8,["percent"])],64)):k("v-if",!0),l.key==="avgCost"?(f(),p("span",Yt,c(i.calls>0?t.formatCost(i.costUsd/i.calls):"—"),1)):k("v-if",!0)]),emptyText:r(()=>[m("div",Qt,[n(t.NumberOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.breakdown")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Recent tab ───────────────────────────────────────── "),n(A,{key:"recent",tab:t.t("tokens.tabs.recent")},{default:r(()=>[n(j,{columns:t.recentColumns,"data-source":t.recent,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.rows",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="createdAt"?(f(),p("span",Wt,c(t.formatTokensTime(i.createdAt)),1)):k("v-if",!0),l.key==="provider"?(f(),U(S,{key:1,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Zt,c(i.model),1)):k("v-if",!0),l.key==="tokens"?(f(),p(B,{key:3},[m("span",qt,c(t.formatNumber(i.totalTokens)),1),m("div",Xt,c(t.formatNumber(i.inputTokens))+" / "+c(t.formatNumber(i.outputTokens)),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p("span",$t,c(t.formatCost(i.costUsd)),1)):k("v-if",!0),l.key==="responseTimeMs"?(f(),U(S,{key:5,color:t.respTagColor(i.responseTimeMs)},{default:r(()=>[h(c(i.responseTimeMs)+"ms",1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="endpoint"?(f(),p(B,{key:6},[i.endpoint?(f(),p("span",te,c(i.endpoint),1)):(f(),p("span",ee,"—"))],64)):k("v-if",!0)]),emptyText:r(()=>[m("div",oe,[n(t.ClockCircleOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.recent")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Cache tab ────────────────────────────────────────── "),n(A,{key:"cache",tab:t.t("tokens.tabs.cache")},{default:r(()=>[n(z,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:r(()=>[n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalEntries"),value:t.cache.totalEntries,"value-style":{color:"#1677ff",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalHits"),value:t.cache.totalHits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalTokensSaved"),value:t.cache.totalTokensSaved,"value-style":{color:"#13c2c2",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.expiredEntries"),value:t.cache.expiredEntries,"value-style":{color:t.cache.expiredEntries>0?"#faad14":"#888",fontSize:"18px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),n(b,{title:t.t("tokens.cache.maintenanceTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(R,null,{default:r(()=>[n(F,{title:t.t("tokens.cache.cleanupConfirm"),"ok-text":t.t("tokens.cache.cleanupOk"),"cancel-text":t.t("common.cancel"),onConfirm:t.cleanupExpired},{default:r(()=>[n(O,{disabled:t.cache.expiredEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.cleanupButton",{count:t.cache.expiredEntries})),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"]),n(F,{title:t.t("tokens.cache.clearConfirm"),"ok-text":t.t("tokens.cache.clearOk"),"ok-type":"danger","cancel-text":t.t("common.cancel"),onConfirm:t.clearAllCache},{default:r(()=>[n(O,{danger:"",disabled:t.cache.totalEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.clearButton")),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"])]),_:1})]),_:1},8,["title"]),n(b,{title:t.t("tokens.v2.cardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:r(()=>[n(z,{gutter:[16,16]},{default:r(()=>[n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ae,c(t.t("tokens.v2.budgetsTitle")),1),(f(!0),p(B,null,K(t.BUDGET_MATURITIES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.budgetStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.budgetStatusLabel(l)),1)]),_:2},1032,["color"]),n(w,{percent:t.pctOfTotal(t.statsV2.budgetsByStatus[l]||0,t.statsV2.totalBudgetsV2),"stroke-color":t.budgetBarColor(l),format:()=>`${t.statsV2.budgetsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ne,c(t.t("tokens.v2.recordsTitle")),1),(f(!0),p(B,null,K(t.USAGE_RECORD_LIFECYCLES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.recordStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.recordStatusLabel(l)),1)]),_:2},1032,["color"]),n(w,{percent:t.pctOfTotal(t.statsV2.recordsByStatus[l]||0,t.statsV2.totalRecordsV2),"stroke-color":t.recordBarColor(l),format:()=>`${t.statsV2.recordsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1},8,["title"])]),_:1},8,["tab"])]),_:1},8,["activeKey"])])}const de=_t(At,[["render",se],["__scopeId","data-v-175683a8"],["__file","/tmp/cc-web-panel-SkGS8t/repo/packages/web-panel/src/views/Tokens.vue"]]);export{de as default};