chainlesschain 0.162.124 → 0.162.126

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 (260) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/AIOps-BrTOcqIJ.js +1 -0
  4. package/src/assets/web-panel/assets/{ActionButton-COjZZKWG.js → ActionButton-na9cocmf.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-4ZDZE7lc.js → Analytics-BtDygkpt.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-CYH5k2Rp.js → AppLayout-D_t5CS18.js} +5 -5
  7. package/src/assets/web-panel/assets/Audit-BYMZccCy.js +1 -0
  8. package/src/assets/web-panel/assets/{Backup-CiX61Qc2.js → Backup-D2qDfAdL.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-CDxIQokd.js → BaseInput-kj456Ju9.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-CaKgdRab.js → Chat-BY0A0ZLE.js} +4 -4
  11. package/src/assets/web-panel/assets/ChatBubbleRenderer-D1VvrOPQ.js +1 -0
  12. package/src/assets/web-panel/assets/{Checkbox-CjiWfu4s.js → Checkbox-DiBhtXsh.js} +1 -1
  13. package/src/assets/web-panel/assets/Codegen-B1ER0L0j.js +1 -0
  14. package/src/assets/web-panel/assets/{Col-ZKWREyNs.js → Col-CjLmza7D.js} +1 -1
  15. package/src/assets/web-panel/assets/Community-BNId05U7.js +1 -0
  16. package/src/assets/web-panel/assets/{Compact-DqknM98n.js → Compact-BuuMj7K1.js} +1 -1
  17. package/src/assets/web-panel/assets/Compliance-DUuDycaJ.js +1 -0
  18. package/src/assets/web-panel/assets/{Cowork-Dp29kHsC.js → Cowork-BKHiF6uL.js} +2 -2
  19. package/src/assets/web-panel/assets/{Cron-zmEJAetz.js → Cron-C7p-lHnC.js} +2 -2
  20. package/src/assets/web-panel/assets/Crosschain-BvSOx8a6.js +1 -0
  21. package/src/assets/web-panel/assets/{DID-D_UFNzJ5.js → DID-D1k9jgHv.js} +2 -2
  22. package/src/assets/web-panel/assets/Dashboard-B9mCCnqY.js +3 -0
  23. package/src/assets/web-panel/assets/{Dropdown-CH7l3KCs.js → Dropdown-ge9UHSXF.js} +1 -1
  24. package/src/assets/web-panel/assets/{EmailListRenderer-Bud2M3XX.js → EmailListRenderer-TZO7ppXi.js} +1 -1
  25. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Bd2_8uME.js → FamilyGuardDashboard-DkhLJmzx.js} +1 -1
  26. package/src/assets/web-panel/assets/Federation-JLuA_8zp.js +1 -0
  27. package/src/assets/web-panel/assets/{FormItemContext-CpSH464Y.js → FormItemContext-C4w-rzNg.js} +1 -1
  28. package/src/assets/web-panel/assets/{GenericCardRenderer-CANo8O-y.js → GenericCardRenderer-Btns4sV9.js} +1 -1
  29. package/src/assets/web-panel/assets/{Git-hvuZVoD3.js → Git-BheXMjzC.js} +2 -2
  30. package/src/assets/web-panel/assets/Governance-D9rLlatH.js +1 -0
  31. package/src/assets/web-panel/assets/Inference-DiklIMcd.js +1 -0
  32. package/src/assets/web-panel/assets/KnowledgeGraph-C70EWL03.js +1 -0
  33. package/src/assets/web-panel/assets/{Logs-DDkTnedu.js → Logs-Zt_MLI10.js} +2 -2
  34. package/src/assets/web-panel/assets/Marketplace-suQxES99.js +1 -0
  35. package/src/assets/web-panel/assets/{McpTools-Qx78XyOT.js → McpTools-CclpCDpY.js} +3 -3
  36. package/src/assets/web-panel/assets/{Memory-CXYDO1oT.js → Memory-B2lHOUwF.js} +2 -2
  37. package/src/assets/web-panel/assets/MobileBridge-BMXKoDAD.js +1 -0
  38. package/src/assets/web-panel/assets/{MobileProjects-DEDbWNIk.js → MobileProjects-a6mWVdBV.js} +1 -1
  39. package/src/assets/web-panel/assets/{Mtc-Dwa_vlR8.js → Mtc-BFpM4Fkj.js} +2 -2
  40. package/src/assets/web-panel/assets/{MtcAudit-DAVkxhJv.js → MtcAudit-DDQkxkbS.js} +4 -4
  41. package/src/assets/web-panel/assets/{Multisig-C3upmgPN.js → Multisig-Crkd_zKQ.js} +3 -3
  42. package/src/assets/web-panel/assets/NLProgramming-Dpk5An7B.js +1 -0
  43. package/src/assets/web-panel/assets/{Notes-B1Oy3FbC.js → Notes-BrFnOMNz.js} +4 -4
  44. package/src/assets/web-panel/assets/{NotificationSettings-Bs4-Fc6b.js → NotificationSettings-CM0iApFM.js} +1 -1
  45. package/src/assets/web-panel/assets/{OrderTableRenderer-CEy1pIeq.js → OrderTableRenderer-XXjeqkdz.js} +1 -1
  46. package/src/assets/web-panel/assets/{Organization-D4cJ1UNo.js → Organization-CHFW_38T.js} +2 -2
  47. package/src/assets/web-panel/assets/{Overflow-fdzvlF7x.js → Overflow-C-vl3EjV.js} +1 -1
  48. package/src/assets/web-panel/assets/{P2P-Y13PwXBA.js → P2P-BT7Slavq.js} +2 -2
  49. package/src/assets/web-panel/assets/{PdhVaultBrowser-Ck1zCLe6.js → PdhVaultBrowser-DRUaULap.js} +3 -3
  50. package/src/assets/web-panel/assets/{Permissions-CvEXP6LC.js → Permissions-DkhOAvMz.js} +2 -2
  51. package/src/assets/web-panel/assets/{PersonalDataHub-JeP7IWMW.js → PersonalDataHub-Dl7dSOvV.js} +3 -3
  52. package/src/assets/web-panel/assets/Pipeline-B3nVI4p6.js +1 -0
  53. package/src/assets/web-panel/assets/Privacy-Dv1SXx1Q.js +1 -0
  54. package/src/assets/web-panel/assets/{ProjectInit-DeWd9UcS.js → ProjectInit-DrAhVi5p.js} +2 -2
  55. package/src/assets/web-panel/assets/{ProjectSettings-DUpVuU9F.js → ProjectSettings-h-ggCYN_.js} +2 -2
  56. package/src/assets/web-panel/assets/Projects-CM91hYdr.js +1 -0
  57. package/src/assets/web-panel/assets/{Providers-DECW00ek.js → Providers-rfkZel3N.js} +1 -1
  58. package/src/assets/web-panel/assets/{QuickAsk-Dl-pK9Io.js → QuickAsk-XepZB7h_.js} +1 -1
  59. package/src/assets/web-panel/assets/Recommend-DzQWsh1a.js +1 -0
  60. package/src/assets/web-panel/assets/Reputation-CDeaal0j.js +1 -0
  61. package/src/assets/web-panel/assets/Row-BN4aKhFH.js +1 -0
  62. package/src/assets/web-panel/assets/{RssFeed-iyQT5q9l.js → RssFeed-INP6VYAA.js} +3 -3
  63. package/src/assets/web-panel/assets/Search-ChPbwatu.js +1 -0
  64. package/src/assets/web-panel/assets/{Security-c4Jxf5Ih.js → Security-C97ZCY8N.js} +4 -4
  65. package/src/assets/web-panel/assets/{Services-CRuisolj.js → Services-Cbtl2Ajs.js} +2 -2
  66. package/src/assets/web-panel/assets/{Skeleton-CCnzJkb-.js → Skeleton-B13sFxBQ.js} +1 -1
  67. package/src/assets/web-panel/assets/{Skills-CZURCwZg.js → Skills-vI9zSIKX.js} +1 -1
  68. package/src/assets/web-panel/assets/Sla-Cr3oBH39.js +1 -0
  69. package/src/assets/web-panel/assets/SpeechSettings-BwemqPPV.js +1 -0
  70. package/src/assets/web-panel/assets/{SyncSettings-CJWVtd87.js → SyncSettings-CLA78P-Z.js} +2 -2
  71. package/src/assets/web-panel/assets/{Tasks-61lrQ_lS.js → Tasks-DBjQ_DOM.js} +1 -1
  72. package/src/assets/web-panel/assets/Templates-BkSLDkBs.js +1 -0
  73. package/src/assets/web-panel/assets/Tenant-Dn0nSlib.js +1 -0
  74. package/src/assets/web-panel/assets/{Terminal-CP15hcNS.js → Terminal-C8f4boru.js} +2 -2
  75. package/src/assets/web-panel/assets/{TimelineRenderer-Sl5uXrkN.js → TimelineRenderer-DW_rMtJR.js} +1 -1
  76. package/src/assets/web-panel/assets/Tokens-BdffrKYV.js +1 -0
  77. package/src/assets/web-panel/assets/{Trigger-BLCQEOF2.js → Trigger-CX4CUg-Q.js} +1 -1
  78. package/src/assets/web-panel/assets/Trust-Cq9Bl7Od.js +1 -0
  79. package/src/assets/web-panel/assets/{UkeySign-Dwp0zXQ6.js → UkeySign-BQy18_VY.js} +1 -1
  80. package/src/assets/web-panel/assets/{VideoEditing-CIHA55Sx.js → VideoEditing-h5hzK7Vw.js} +1 -1
  81. package/src/assets/web-panel/assets/{Wallet-Hjajvnto.js → Wallet-BLotT3gw.js} +3 -3
  82. package/src/assets/web-panel/assets/{WebAuthn-DqSURUvI.js → WebAuthn-8cCANYLE.js} +4 -4
  83. package/src/assets/web-panel/assets/{WorkflowEditor-B5bHRwUG.js → WorkflowEditor-Db6NwtAv.js} +1 -1
  84. package/src/assets/web-panel/assets/{chat-DsheLKkG.js → chat-BPk1LbpL.js} +1 -1
  85. package/src/assets/web-panel/assets/{colors-CST2UkgL.js → colors-BnNal71p.js} +1 -1
  86. package/src/assets/web-panel/assets/{compact-item-yqEoy1L7.js → compact-item-W2VC0tcy.js} +1 -1
  87. package/src/assets/web-panel/assets/{createContext-Jwp78HFY.js → createContext-DceVsgnZ.js} +1 -1
  88. package/src/assets/web-panel/assets/devWarning--rwFDBhx.js +1 -0
  89. package/src/assets/web-panel/assets/{hasIn-CVS5mFEP.js → hasIn-BEq6EDcp.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-BLTUVd0V.js → index-5gIBUFBn.js} +2 -2
  91. package/src/assets/web-panel/assets/index-APCHxOkM.js +3 -0
  92. package/src/assets/web-panel/assets/index-B2dMhwZi.js +1 -0
  93. package/src/assets/web-panel/assets/{index-C0FZScMe.js → index-B8cPjrEH.js} +4 -4
  94. package/src/assets/web-panel/assets/{index-CjfN2CpJ.js → index-BDC5HsxZ.js} +1 -1
  95. package/src/assets/web-panel/assets/index-BPFuPGKi.js +1 -0
  96. package/src/assets/web-panel/assets/{index-SjxCCf5h.js → index-BUkDcIwJ.js} +2 -2
  97. package/src/assets/web-panel/assets/{index-Cjig5i3a.js → index-BWcCyH6-.js} +28 -26
  98. package/src/assets/web-panel/assets/{index-AnW25bEq.js → index-BgZikQoh.js} +1 -1
  99. package/src/assets/web-panel/assets/index-Bwjus13Y.js +1 -0
  100. package/src/assets/web-panel/assets/index-BzSzRWsw.js +55 -0
  101. package/src/assets/web-panel/assets/index-C1K9CsGr.js +1 -0
  102. package/src/assets/web-panel/assets/{index-DDAigsel.js → index-CBZVISK6.js} +2 -2
  103. package/src/assets/web-panel/assets/index-CEJN-R2L.js +1 -0
  104. package/src/assets/web-panel/assets/index-CG5dGC9E.js +1 -0
  105. package/src/assets/web-panel/assets/{index-DxaU_lza.js → index-CMGLpstm.js} +1 -1
  106. package/src/assets/web-panel/assets/index-CWrGCndd.js +1 -0
  107. package/src/assets/web-panel/assets/index-CbcvfpCV.js +1 -0
  108. package/src/assets/web-panel/assets/{index-De600Jjm.js → index-Ceqv4lI2.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Cy0dNzkp.js → index-CsT6frT8.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CDAPnZUs.js → index-D8PQKsDT.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Crk4KWLW.js → index-DGncdA-j.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-R-VGFpi6.js → index-DHanQHO0.js} +3 -3
  113. package/src/assets/web-panel/assets/index-DaUBk28E.js +12 -0
  114. package/src/assets/web-panel/assets/{index-BzetOasL.js → index-Di2J4b4V.js} +1 -1
  115. package/src/assets/web-panel/assets/index-DtuLvWZN.js +21 -0
  116. package/src/assets/web-panel/assets/{index-Dgyn8-wN.js → index-DvS1J8xc.js} +2 -2
  117. package/src/assets/web-panel/assets/{index-CtyEOGuj.js → index-DxePJdwP.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CzsKK0tQ.js → index-Et4XvL49.js} +2 -2
  119. package/src/assets/web-panel/assets/{index-BuI27WSx.js → index-GlFxgcj4.js} +2 -2
  120. package/src/assets/web-panel/assets/index-HV119Oui.js +1 -0
  121. package/src/assets/web-panel/assets/index-InGW87pj.js +13 -0
  122. package/src/assets/web-panel/assets/{index-Dxljh9Fu.js → index-P1-s8JR7.js} +2 -2
  123. package/src/assets/web-panel/assets/{index-CSBPc-sI.js → index-SdABCNoi.js} +2 -2
  124. package/src/assets/web-panel/assets/{index-BCHAUdel.js → index-WTAZbN-c.js} +1 -1
  125. package/src/assets/web-panel/assets/index-_2I-KzOj.js +1 -0
  126. package/src/assets/web-panel/assets/index-m1sVaWVU.js +1 -0
  127. package/src/assets/web-panel/assets/index-s37wwyeN.js +1 -0
  128. package/src/assets/web-panel/assets/{index-CRBbVS43.js → index-tyWABqp9.js} +1 -1
  129. package/src/assets/web-panel/assets/{initDefaultProps-ClAjrsQ-.js → initDefaultProps-DzrCDb3j.js} +1 -1
  130. package/src/assets/web-panel/assets/motion-BQERVnE3.js +11 -0
  131. package/src/assets/web-panel/assets/{move-DMelzIW-.js → move-I9ACA5XJ.js} +1 -1
  132. package/src/assets/web-panel/assets/mtc-parser-Dd2Pw-tr.js +1 -0
  133. package/src/assets/web-panel/assets/{omit-oxecfU3b.js → omit-DwzYRzWV.js} +1 -1
  134. package/src/assets/web-panel/assets/{pickAttrs-DJ5F5M6x.js → pickAttrs-BSGULyIL.js} +1 -1
  135. package/src/assets/web-panel/assets/{placementArrow-DdbKsant.js → placementArrow-tSYYjAts.js} +1 -1
  136. package/src/assets/web-panel/assets/{responsiveObserve-BUuM5cmS.js → responsiveObserve-Dy2lqikT.js} +1 -1
  137. package/src/assets/web-panel/assets/{slide-DSV0ccvR.js → slide-RaB4Uq0c.js} +1 -1
  138. package/src/assets/web-panel/assets/{statusUtils-B-6oLAXf.js → statusUtils-CBpC_wZg.js} +1 -1
  139. package/src/assets/web-panel/assets/{styleChecker-DdCAHtsZ.js → styleChecker-BEKwPWt5.js} +1 -1
  140. package/src/assets/web-panel/assets/{useFlexGapSupport-ZORkcoZd.js → useFlexGapSupport-C4CnYJH1.js} +1 -1
  141. package/src/assets/web-panel/assets/{useFs-BFp46LoP.js → useFs-n24jutw5.js} +1 -1
  142. package/src/assets/web-panel/assets/{usePersonalDataHub-H7rxgbdW.js → usePersonalDataHub-DMgS8F6G.js} +1 -1
  143. package/src/assets/web-panel/assets/{vnode-eIq4Tk0J.js → vnode-BSp2KYcj.js} +1 -1
  144. package/src/assets/web-panel/assets/{zoom-CTNrv8-H.js → zoom-7UfQtTPh.js} +1 -1
  145. package/src/assets/web-panel/index.html +1 -1
  146. package/src/commands/agent.js +51 -2
  147. package/src/commands/compliance.js +3 -1
  148. package/src/commands/ide.js +60 -5
  149. package/src/commands/incentive.js +22 -22
  150. package/src/commands/mtc.js +5 -1
  151. package/src/commands/review.js +47 -17
  152. package/src/commands/session.js +11 -2
  153. package/src/gateways/ws/message-dispatcher.js +149 -166
  154. package/src/gateways/ws/ws-session-gateway.js +95 -9
  155. package/src/harness/background-task-manager.js +5 -1
  156. package/src/harness/jsonl-session-store.js +90 -12
  157. package/src/harness/mcp-client.js +62 -21
  158. package/src/harness/prompt-compressor.js +24 -5
  159. package/src/harness/worktree-isolator.js +10 -1
  160. package/src/lib/agent-core.js +2 -0
  161. package/src/lib/audit-logger.js +3 -1
  162. package/src/lib/autonomous-agent.js +29 -0
  163. package/src/lib/chat-core.js +5 -2
  164. package/src/lib/chat-intent-service.js +82 -23
  165. package/src/lib/checkpoint-store.js +31 -4
  166. package/src/lib/claude-code-bridge.js +48 -3
  167. package/src/lib/config-manager.js +25 -1
  168. package/src/lib/cost-budget.js +13 -2
  169. package/src/lib/credential-guard.js +81 -1
  170. package/src/lib/git-integration.js +16 -2
  171. package/src/lib/goal-store.js +11 -0
  172. package/src/lib/hook-manager.js +4 -0
  173. package/src/lib/interaction-adapter.js +32 -11
  174. package/src/lib/jetbrains-bridge.js +147 -0
  175. package/src/lib/jsonl-session-store.js +2 -0
  176. package/src/lib/llm-config-defaults.js +37 -0
  177. package/src/lib/llm-pricing.js +11 -4
  178. package/src/lib/llm-providers.js +11 -1
  179. package/src/lib/mcp-oauth.js +88 -10
  180. package/src/lib/mcp-serve.js +29 -0
  181. package/src/lib/orchestrator.js +38 -2
  182. package/src/lib/permission-engine.js +4 -1
  183. package/src/lib/pipeline-orchestrator.js +20 -2
  184. package/src/lib/project-instructions.js +13 -0
  185. package/src/lib/repl-bang-memorize.js +9 -1
  186. package/src/lib/repl-denials.js +137 -0
  187. package/src/lib/runnable-provider.js +7 -1
  188. package/src/lib/safe-json.js +22 -0
  189. package/src/lib/sandbox-v2.js +7 -6
  190. package/src/lib/search-command.js +65 -0
  191. package/src/lib/session-insights.js +13 -6
  192. package/src/lib/session-usage.js +21 -3
  193. package/src/lib/settings-hooks.cjs +133 -0
  194. package/src/lib/settings-loader.cjs +16 -7
  195. package/src/lib/social-graph.js +3 -1
  196. package/src/lib/status-line.cjs +4 -1
  197. package/src/lib/stream-retry.js +27 -0
  198. package/src/lib/sub-agent-context.js +9 -0
  199. package/src/lib/turn-context.js +15 -5
  200. package/src/repl/agent-repl.js +110 -8
  201. package/src/runtime/__tests__/message-roles.test.js +36 -3
  202. package/src/runtime/agent-core.js +179 -52
  203. package/src/runtime/coding-agent-contract-shared.cjs +9 -2
  204. package/src/runtime/coding-agent-shell-policy.cjs +23 -2
  205. package/src/runtime/file-ref-expander.js +51 -7
  206. package/src/runtime/headless-runner.js +96 -2
  207. package/src/runtime/headless-stream.js +78 -3
  208. package/src/runtime/mcp-config.js +114 -4
  209. package/src/runtime/message-roles.js +14 -1
  210. package/src/runtime/pipe-safety.js +51 -0
  211. package/src/runtime/policies/agent-policy.js +3 -0
  212. package/src/assets/web-panel/assets/AIOps-BsDJlD_l.js +0 -1
  213. package/src/assets/web-panel/assets/Audit-BKlFbLdl.js +0 -1
  214. package/src/assets/web-panel/assets/ChatBubbleRenderer-DgvpwU5o.js +0 -1
  215. package/src/assets/web-panel/assets/Codegen-tKWGzajw.js +0 -1
  216. package/src/assets/web-panel/assets/Community-CmLuPBUU.js +0 -1
  217. package/src/assets/web-panel/assets/Compliance-PZw0aBLI.js +0 -1
  218. package/src/assets/web-panel/assets/Crosschain-Sb-uM7Ty.js +0 -1
  219. package/src/assets/web-panel/assets/Dashboard-Btag698v.js +0 -3
  220. package/src/assets/web-panel/assets/Federation-1jhstF5P.js +0 -1
  221. package/src/assets/web-panel/assets/Governance-BQrWksKt.js +0 -1
  222. package/src/assets/web-panel/assets/Inference-jEBTp12v.js +0 -1
  223. package/src/assets/web-panel/assets/KnowledgeGraph-tDiV2taf.js +0 -1
  224. package/src/assets/web-panel/assets/Marketplace-9Yi32avt.js +0 -1
  225. package/src/assets/web-panel/assets/MobileBridge-MfUfkHA0.js +0 -1
  226. package/src/assets/web-panel/assets/NLProgramming-DO3CZ0_z.js +0 -1
  227. package/src/assets/web-panel/assets/Pipeline-BZ7wRzG1.js +0 -1
  228. package/src/assets/web-panel/assets/Privacy-BJ6qj9Hv.js +0 -1
  229. package/src/assets/web-panel/assets/Projects-y1WbI337.js +0 -1
  230. package/src/assets/web-panel/assets/Recommend-Bju04wTd.js +0 -1
  231. package/src/assets/web-panel/assets/Reputation-BUPa3nEk.js +0 -1
  232. package/src/assets/web-panel/assets/Row-WYqqaq_5.js +0 -1
  233. package/src/assets/web-panel/assets/Search-CrfwJF0R.js +0 -1
  234. package/src/assets/web-panel/assets/Sla-CrMzaEi2.js +0 -1
  235. package/src/assets/web-panel/assets/SpeechSettings-jTDOM5eY.js +0 -1
  236. package/src/assets/web-panel/assets/Templates-Cg-iF2g1.js +0 -1
  237. package/src/assets/web-panel/assets/Tenant-DrDv1FFc.js +0 -1
  238. package/src/assets/web-panel/assets/Tokens-yRIZTVsR.js +0 -1
  239. package/src/assets/web-panel/assets/Trust-D5xq8z6s.js +0 -1
  240. package/src/assets/web-panel/assets/community-parser-Cuyslaku.js +0 -3
  241. package/src/assets/web-panel/assets/devWarning-C8to6gQk.js +0 -1
  242. package/src/assets/web-panel/assets/index-BeblNJDH.js +0 -1
  243. package/src/assets/web-panel/assets/index-C130LLPq.js +0 -1
  244. package/src/assets/web-panel/assets/index-C8rq85gu.js +0 -1
  245. package/src/assets/web-panel/assets/index-CIE2n8k_.js +0 -1
  246. package/src/assets/web-panel/assets/index-CTd3lDxp.js +0 -13
  247. package/src/assets/web-panel/assets/index-CUWj5L2s.js +0 -1
  248. package/src/assets/web-panel/assets/index-ChRL6rgA.js +0 -3
  249. package/src/assets/web-panel/assets/index-CrlRa054.js +0 -1
  250. package/src/assets/web-panel/assets/index-Cu6Ql64n.js +0 -1
  251. package/src/assets/web-panel/assets/index-Cx_t5rWw.js +0 -12
  252. package/src/assets/web-panel/assets/index-DZfnYE6e.js +0 -1
  253. package/src/assets/web-panel/assets/index-D_1b7uh6.js +0 -55
  254. package/src/assets/web-panel/assets/index-D_e9gwfn.js +0 -1
  255. package/src/assets/web-panel/assets/index-DbxAlpPC.js +0 -21
  256. package/src/assets/web-panel/assets/index-DiK4vSZa.js +0 -1
  257. package/src/assets/web-panel/assets/index-DpYn5v2k.js +0 -1
  258. package/src/assets/web-panel/assets/index-diWkx2Wq.js +0 -1
  259. package/src/assets/web-panel/assets/motion-BalXv_60.js +0 -11
  260. package/src/assets/web-panel/assets/mtc-parser-CEQffxds.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.162.124",
3
+ "version": "0.162.126",
4
4
  "description": "CLI for ChainlessChain - install, configure, and manage your personal AI management system",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- 97c1abac6b5b6d5a503b9effcd960fe5f6892a4407746ccd9cdc519c3af7d01d
1
+ 905db7c017944a12ee60f53ffa6b5e87485f3ed06ce072b47bd8e4e3f21bf078
@@ -0,0 +1 @@
1
+ import{I as b,J as v,U as S,R as r,c as o,K as l,V as p,S as h,o as se,h as re,a as Y,b as Q,r as C,P as u,Q as y,F as z,Z as G}from"./vendor-BvqAck49.js";import{t as H,_ as ze,u as de,b as ce,d as f}from"./index-BWcCyH6-.js";import ue from"./index-DHanQHO0.js";import{f as Ie,c as Oe,b2 as Pe,aY as Te,aa as Ee,s as Le,as as je,R as Ne}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-DwzYRzWV.js";import"./pickAttrs-BSGULyIL.js";import"./initDefaultProps-DzrCDb3j.js";import"./motion-BQERVnE3.js";import"./raf-Deuc0E8-.js";import"./index-tyWABqp9.js";import"./index-CMGLpstm.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning--rwFDBhx.js";import"./compact-item-W2VC0tcy.js";import"./createContext-DceVsgnZ.js";import"./Compact-BuuMj7K1.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-BEKwPWt5.js";import"./zoom-7UfQtTPh.js";import"./ActionButton-na9cocmf.js";import"./vnode-BSp2KYcj.js";const Ue=Object.freeze(["P0","P1","P2","P3"]),De=Object.freeze(["open","acknowledged","resolved","closed"]);function g(t,a=0){return typeof t=="number"&&Number.isFinite(t)?t:a}function Me(t,a=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,anomalyMetric:t.anomalyMetric??t.anomaly_metric??"",severity:String(t.severity||"P3"),status:String(t.status||"open").toLowerCase(),description:String(t.description||""),anomalyData:t.anomalyData??t.anomaly_data??null,remediationId:t.remediationId??t.remediation_id??null,postmortem:t.postmortem||"",acknowledgedAt:t.acknowledgedAt??t.acknowledged_at??null,resolvedAt:t.resolvedAt??t.resolved_at??null,createdAt:t.createdAt??t.created_at??null,_idx:a}:null}function pe(t){const a=H(t);return Array.isArray(a)?a.map(Me).filter(Boolean):[]}function qe(t,a=0){if(!t||typeof t!="object")return null;const s=t.id||"";if(!s)return null;const e=t.enabled;let P=!1;return e===!0||e===1||e==="1"?P=!0:e===!1||e===0||e==="0"?P=!1:P=!!e,{key:s,id:s,name:String(t.name||""),triggerCondition:t.triggerCondition??t.trigger_condition??"",steps:t.steps||"",enabled:P,successCount:g(t.successCount??t.success_count,0),failureCount:g(t.failureCount??t.failure_count,0),createdAt:t.createdAt??t.created_at??null,_idx:a}}function me(t){const a=H(t);return Array.isArray(a)?a.map(qe).filter(Boolean):[]}function Be(t,a=0){if(!t||typeof t!="object")return null;const s=t.metricName??t.metric_name??"";return s?{key:s,metricName:s,mean:g(t.mean,0),stdDev:g(t.stdDev??t.std_dev,0),q1:g(t.q1,0),q3:g(t.q3,0),sampleCount:g(t.sampleCount??t.sample_count,0),updatedAt:t.updatedAt??t.updated_at??null,_idx:a}:null}function ye(t){const a=H(t);return Array.isArray(a)?a.map(Be).filter(Boolean):[]}function fe(t){const a=H(t);return!a||typeof a!="object"||Array.isArray(a)?null:{anomaly:!!a.anomaly,reason:a.reason||null,metricName:a.metricName??a.metric_name??"",value:g(a.value,0),algorithm:String(a.algorithm||""),score:g(a.score,0),threshold:g(a.threshold,0),baseline:a.baseline?{mean:g(a.baseline.mean,0),stdDev:g(a.baseline.stdDev??a.baseline.std_dev,0),q1:g(a.baseline.q1,0),q3:g(a.baseline.q3,0)}:null,incidentId:a.incidentId??a.incident_id??null,severity:a.severity||null}}const Je={incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}};function be(t){const a=JSON.parse(JSON.stringify(Je)),s=H(t);if(!s||typeof s!="object"||Array.isArray(s))return a;if(s.incidents&&typeof s.incidents=="object"){if(a.incidents.total=g(s.incidents.total,0),a.incidents.avgResolveMs=g(s.incidents.avgResolveMs??s.incidents.avg_resolve_ms,0),s.incidents.bySeverity&&typeof s.incidents.bySeverity=="object")for(const e of Object.keys(a.incidents.bySeverity))a.incidents.bySeverity[e]=g(s.incidents.bySeverity[e],0);if(s.incidents.byStatus&&typeof s.incidents.byStatus=="object")for(const e of Object.keys(a.incidents.byStatus))a.incidents.byStatus[e]=g(s.incidents.byStatus[e],0)}return s.playbooks&&typeof s.playbooks=="object"&&(a.playbooks.total=g(s.playbooks.total,0),a.playbooks.enabled=g(s.playbooks.enabled,0),a.playbooks.totalSuccess=g(s.playbooks.totalSuccess??s.playbooks.total_success,0),a.playbooks.totalFailure=g(s.playbooks.totalFailure??s.playbooks.total_failure,0)),s.baselines&&typeof s.baselines=="object"&&(a.baselines.total=g(s.baselines.total,0),Array.isArray(s.baselines.metrics)&&(a.baselines.metrics=[...s.baselines.metrics])),a}function Ve(t){if(t==null||t==="")return"—";const a=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(a.getTime())?String(t):a.toLocaleString("zh-CN",{hour12:!1})}const Ke={__name:"AIOps",setup(t,{expose:a}){a();const s=de(),{t:e}=ce(),P=C(!1),j=C(!1),w=C(!1),N=C([]),X=C([]),$=C([]),D=C({incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}}),I=C("incidents"),A=C(""),T=C(""),W=C(!1),R=C(!1),O=C(!1),B=C(!1),x=Y({severity:"P3",metric:"",description:""}),_=Y({name:"",triggerJson:"",stepsJson:""}),M=Y({metric:"",values:""}),U=Y({metric:"",value:null,algorithm:"z_score"}),q=C(null),ee=Q(()=>[{title:e("aiops.incidentCols.severity"),key:"severity",width:"90px"},{title:e("aiops.incidentCols.metric"),key:"metric",width:"160px"},{title:e("aiops.incidentCols.description"),key:"description"},{title:e("aiops.incidentCols.status"),key:"status",width:"100px"},{title:e("aiops.incidentCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.incidentCols.action"),key:"action",width:"220px"}]),F=Q(()=>[{title:e("aiops.playbookCols.name"),key:"name"},{title:e("aiops.playbookCols.enabled"),key:"enabled",width:"80px"},{title:e("aiops.playbookCols.stats"),key:"stats",width:"180px"},{title:e("aiops.playbookCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.playbookCols.action"),key:"action",width:"160px"}]),Z=Q(()=>[{title:e("aiops.baselineCols.metric"),key:"metric"},{title:e("aiops.baselineCols.mean"),key:"mean",width:"180px"},{title:e("aiops.baselineCols.iqr"),key:"iqr",width:"180px"},{title:e("aiops.baselineCols.sampleCount"),key:"sampleCount",width:"90px"},{title:e("aiops.baselineCols.updatedAt"),key:"updatedAt",width:"160px"}]),J=Q(()=>D.value.incidents.byStatus.open+D.value.incidents.byStatus.acknowledged),V=Q(()=>{let n=N.value;return A.value&&(n=n.filter(d=>d.severity===A.value)),T.value&&(n=n.filter(d=>d.status===T.value)),n});function K(n){const d=`aiops.statusLabels.${n}`,m=e(d);return m===d?n:m}function ae(n){return{open:"red",acknowledged:"orange",resolved:"cyan",closed:"default"}[n]||"default"}function i(n){return{P0:"red",P1:"volcano",P2:"orange",P3:"gold"}[n]||"default"}function c(n){const d=`aiops.reasonLabels.${n}`,m=e(d);return m===d?n:m}function E(n,d){return n?n.length>d?n.slice(0,d)+"...":n:""}function ve(n){return!n||n<=0?e("aiops.duration.none"):n<1e3?`${n}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:n<36e5?`${(n/6e4).toFixed(1)}min`:`${(n/36e5).toFixed(1)}h`}function ge({key:n}){n==="incident"?W.value=!0:n==="playbook"?R.value=!0:n==="baseline"?O.value=!0:n==="detect"&&(q.value=null,B.value=!0)}async function L(){P.value=!0;try{const[n,d,m,k]=await Promise.all([s.execute("ops incidents --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops playbooks --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops baselines --json",1e4).catch(()=>({output:""})),s.execute("ops stats --json",8e3).catch(()=>({output:""}))]);N.value=pe(n.output),X.value=me(d.output),$.value=ye(m.output),D.value=be(k.output)}catch(n){f.error(e("aiops.msg.loadFailed")+": "+(n?.message||n))}finally{P.value=!1}}async function ke(){if(!x.description.trim()){f.warning(e("aiops.msg.descEmpty"));return}j.value=!0;try{const n=[`ops incident-create --severity ${x.severity}`];x.metric.trim()&&n.push(`--metric "${x.metric.trim().replace(/"/g,'\\"')}"`),n.push(`--description "${x.description.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"incidentId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.incidentCreated")),W.value=!1,oe(),await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{j.value=!1}}async function _e(){if(!_.name.trim()){f.warning(e("aiops.msg.playbookNameEmpty"));return}for(const[n,d]of[[_.triggerJson,"triggerLabel"],[_.stepsJson,"stepsLabel"]])if(n.trim())try{JSON.parse(n)}catch{f.warning(e("aiops.msg.jsonInvalid",{label:e(`aiops.msg.${d}`)}));return}j.value=!0;try{const n=[`ops playbook-create --name "${_.name.trim().replace(/"/g,'\\"')}"`];_.triggerJson.trim()&&n.push(`--trigger '${_.triggerJson.trim().replace(/'/g,"'\\''")}'`),_.stepsJson.trim()&&n.push(`--steps '${_.stepsJson.trim().replace(/'/g,"'\\''")}'`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"playbookId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.playbookCreated")),R.value=!1,le(),I.value="playbooks",await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{j.value=!1}}async function he(){const n=M.metric.trim();if(!n){f.warning(e("aiops.msg.metricEmpty"));return}const d=M.values.split(/[\s,]+/).map(m=>m.trim()).filter(Boolean).map(m=>Number(m));if(d.length===0||d.some(m=>!Number.isFinite(m))){f.warning(e("aiops.msg.valuesInvalid"));return}j.value=!0;try{const m=`ops baseline-update "${n.replace(/"/g,'\\"')}" --values ${d.join(",")} --json`,{output:k}=await s.execute(m,1e4);if(/error|失败/i.test(k)&&!/"updated"/.test(k)){f.error(e("aiops.msg.baselineUpdateFailed")+": "+k.slice(0,120));return}f.success(e("aiops.msg.baselineUpdated",{n:d.length})),O.value=!1,ie(),I.value="baselines",await L()}catch(m){f.error(e("aiops.msg.baselineUpdateFailed")+": "+(m?.message||m))}finally{j.value=!1}}async function Ce(){if(!U.metric||U.value==null){f.warning(e("aiops.msg.detectFieldsEmpty"));return}w.value=!0,q.value=null;try{const n=`ops detect "${U.metric.replace(/"/g,'\\"')}" ${U.value} --algorithm ${U.algorithm} --json`,{output:d}=await s.execute(n,8e3),m=fe(d);if(!m){f.error(e("aiops.msg.detectFailed")+": "+d.slice(0,120));return}q.value=m,m.anomaly&&(f.warning(e("aiops.msg.detectAnomaly",{severity:m.severity||"P3"})),L())}catch(n){f.error(e("aiops.msg.detectFailed")+": "+(n?.message||n))}finally{w.value=!1}}async function Se(n){await te(n,"incident-ack",e("aiops.msg.incidentAcked"))}async function xe(n){await te(n,"incident-resolve",e("aiops.msg.incidentResolved"))}async function Fe(n){await te(n,"incident-close",e("aiops.msg.incidentClosed"))}async function te(n,d,m){try{const{output:k}=await s.execute(`ops ${d} ${n.id} --json`,8e3);if(/error|失败|invalid/i.test(k)&&!/"acknowledged"|"resolved"|"closed"/.test(k)){f.error(e("aiops.msg.incidentTransitionFailed")+": "+k.slice(0,120));return}f.success(m),await L()}catch(k){f.error(e("aiops.msg.incidentTransitionFailed")+": "+(k?.message||k))}}async function we(n){try{const{output:d}=await s.execute(`ops postmortem ${n.id}`,12e3);ue.info({title:e("aiops.msg.postmortemTitle",{id:n.id.slice(0,8)}),width:720,content:()=>re("pre",{style:"white-space: pre-wrap; max-height: 60vh; overflow: auto; font-size: 12px; padding: 8px; background: rgba(0,0,0,.04); border-radius: 4px;"},d||e("aiops.msg.postmortemEmpty"))})}catch(d){f.error(e("aiops.msg.postmortemFailed")+": "+(d?.message||d))}}async function Ae(n,d){const m=d?"on":"off";try{const{output:k}=await s.execute(`ops playbook-toggle ${n.id} ${m} --json`,8e3);if(/error|失败/i.test(k)&&!/"enabled"/.test(k)){f.error(e("aiops.msg.playbookToggleFailed")+": "+k.slice(0,120));return}f.success(e(d?"aiops.msg.playbookEnabled":"aiops.msg.playbookDisabled")),await L()}catch(k){f.error(e("aiops.msg.playbookToggleFailed")+": "+(k?.message||k))}}async function Re(n,d){try{const{output:m}=await s.execute(`ops playbook-record ${n.id} ${d} --json`,8e3);if(/error|失败/i.test(m)&&!/"recorded"/.test(m)){f.error(e("aiops.msg.playbookRecordFailed")+": "+m.slice(0,120));return}f.success(e(d==="success"?"aiops.msg.playbookRecordSuccess":"aiops.msg.playbookRecordFailure")),await L()}catch(m){f.error(e("aiops.msg.playbookRecordFailed")+": "+(m?.message||m))}}function oe(){x.severity="P3",x.metric="",x.description=""}function le(){_.name="",_.triggerJson="",_.stepsJson=""}function ie(){M.metric="",M.values=""}se(L);const ne={ws:s,t:e,loading:P,creating:j,detecting:w,incidents:N,playbooks:X,baselines:$,stats:D,activeTab:I,incidentSeverityFilter:A,incidentStatusFilter:T,showIncidentModal:W,showPlaybookModal:R,showBaselineModal:O,showDetectModal:B,incidentForm:x,playbookForm:_,baselineForm:M,detectForm:U,detectResult:q,incidentColumns:ee,playbookColumns:F,baselineColumns:Z,openCount:J,filteredIncidents:V,statusLabel:K,statusColor:ae,severityColor:i,reasonLabel:c,truncate:E,formatDurationMs:ve,handleNewClick:ge,loadAll:L,createIncident:ke,createPlaybook:_e,updateBaseline:he,detectAnomaly:Ce,ackIncident:Se,resolveIncident:xe,closeIncident:Fe,runIncidentTransition:te,generatePostmortem:we,togglePlaybook:Ae,recordRun:Re,resetIncidentForm:oe,resetPlaybookForm:le,resetBaselineForm:ie,ref:C,computed:Q,onMounted:se,reactive:Y,h:re,get ReloadOutlined(){return Ne},get PlusOutlined(){return je},get AlertOutlined(){return Le},get RocketOutlined(){return Ee},get LineChartOutlined(){return Te},get FundOutlined(){return Pe},get ExclamationCircleOutlined(){return Oe},get CheckCircleOutlined(){return Ie},get message(){return f},get Modal(){return ue},get useI18n(){return ce},get useWsStore(){return de},get parseIncidents(){return pe},get parsePlaybooks(){return me},get parseBaselines(){return ye},get parseDetectResult(){return fe},get parseStats(){return be},get formatOpsTime(){return Ve},get SEVERITIES(){return Ue},get INCIDENT_STATUSES(){return De}};return Object.defineProperty(ne,"__isScriptSetup",{enumerable:!1,value:!0}),ne}},Qe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},We={class:"page-title"},Ze={class:"page-sub"},Ye={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},Ge={class:"filter-bar"},He={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Xe={key:1,style:{color:"var(--text-muted)"}},$e={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},et={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},tt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},at={style:{color:"var(--text-primary)","font-weight":"500"}},ot={key:0,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},lt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},it={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},nt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},st={style:{color:"#1677ff"}},rt={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},dt={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ct={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ut={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},pt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},mt={key:1,style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},yt={key:2,style:{"margin-top":"8px"}};function ft(t,a,s,e,P,j){const w=b("a-button"),N=b("a-menu-item"),X=b("a-menu"),$=b("a-dropdown"),D=b("a-space"),I=b("a-statistic"),A=b("a-card"),T=b("a-col"),W=b("a-row"),R=b("a-tag"),O=b("a-radio-button"),B=b("a-radio-group"),x=b("a-table"),_=b("a-tab-pane"),M=b("a-switch"),U=b("a-tabs"),q=b("a-select-option"),ee=b("a-select"),F=b("a-form-item"),Z=b("a-input"),J=b("a-textarea"),V=b("a-form"),K=b("a-modal"),ae=b("a-input-number");return u(),v("div",null,[S("div",Qe,[S("div",null,[S("h2",We,r(t.$t("aiops.title")),1),S("p",Ze,r(t.$t("aiops.subtitle")),1)]),o(D,null,{default:l(()=>[o(w,{loading:e.loading,onClick:e.loadAll},{icon:l(()=>[o(e.ReloadOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.refresh")),1)]),_:1},8,["loading"]),o($,{trigger:["click"]},{overlay:l(()=>[o(X,{onClick:e.handleNewClick},{default:l(()=>[o(N,{key:"incident"},{default:l(()=>[o(e.AlertOutlined),y(" "+r(t.$t("aiops.actions.incident")),1)]),_:1}),o(N,{key:"playbook"},{default:l(()=>[o(e.RocketOutlined),y(" "+r(t.$t("aiops.actions.playbook")),1)]),_:1}),o(N,{key:"baseline"},{default:l(()=>[o(e.LineChartOutlined),y(" "+r(t.$t("aiops.actions.baseline")),1)]),_:1}),o(N,{key:"detect"},{default:l(()=>[o(e.FundOutlined),y(" "+r(t.$t("aiops.actions.detect")),1)]),_:1})]),_:1})]),default:l(()=>[o(w,{type:"primary"},{icon:l(()=>[o(e.PlusOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.newDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stats overview "),o(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.incidents"),value:e.stats.incidents.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:l(()=>[o(e.AlertOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.pending"),value:e.stats.incidents.byStatus.open+e.stats.incidents.byStatus.acknowledged,"value-style":{color:e.openCount>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.playbooks"),value:e.stats.playbooks.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:l(()=>[o(e.RocketOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.enabled"),value:e.stats.playbooks.enabled,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:24,sm:8,lg:4},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.baselines"),value:e.stats.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:l(()=>[o(e.LineChartOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Severity breakdown bar "),e.stats.incidents.total>0?(u(),h(A,{key:0,title:t.$t("aiops.severityCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:l(()=>[o(D,{size:[12,8],wrap:""},{default:l(()=>[(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(R,{key:i,color:e.severityColor(i),style:{"font-size":"13px",padding:"2px 10px"}},{default:l(()=>[y(r(i)+": "+r(e.stats.incidents.bySeverity[i]||0),1)]),_:2},1032,["color"]))),128)),S("span",Ye,r(t.$t("aiops.avgResolveLabel",{time:e.formatDurationMs(e.stats.incidents.avgResolveMs)})),1)]),_:1})]),_:1},8,["title"])):p("v-if",!0),p(" Tabs "),o(U,{activeKey:e.activeTab,"onUpdate:activeKey":a[2]||(a[2]=i=>e.activeTab=i),class:"aiops-tabs"},{default:l(()=>[p(" ── Incidents tab ─────────────────────────────────────────── "),o(_,{key:"incidents",tab:t.$t("aiops.tabs.incidents")},{default:l(()=>[S("div",Ge,[o(B,{value:e.incidentSeverityFilter,"onUpdate:value":a[0]||(a[0]=i=>e.incidentSeverityFilter=i),size:"small","button-style":"solid"},{default:l(()=>[o(O,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.all")),1)]),_:1}),(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(O,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(B,{value:e.incidentStatusFilter,"onUpdate:value":a[1]||(a[1]=i=>e.incidentStatusFilter=i),size:"small"},{default:l(()=>[o(O,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.allStatuses")),1)]),_:1}),(u(!0),v(z,null,G(e.INCIDENT_STATUSES,i=>(u(),h(O,{key:i,value:i},{default:l(()=>[y(r(e.statusLabel(i)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(x,{columns:e.incidentColumns,"data-source":e.filteredIncidents,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="severity"?(u(),h(R,{key:0,color:e.severityColor(c.severity),style:{"font-weight":"600"}},{default:l(()=>[y(r(c.severity),1)]),_:2},1032,["color"])):p("v-if",!0),i.key==="metric"?(u(),v(z,{key:1},[c.anomalyMetric?(u(),v("span",He,r(c.anomalyMetric),1)):(u(),v("span",Xe,"—"))],64)):p("v-if",!0),i.key==="description"?(u(),v("span",$e,r(e.truncate(c.description,80)||"—"),1)):p("v-if",!0),i.key==="status"?(u(),h(R,{key:3,color:e.statusColor(c.status)},{default:l(()=>[y(r(e.statusLabel(c.status)),1)]),_:2},1032,["color"])):p("v-if",!0),i.key==="createdAt"?(u(),v("span",et,r(e.formatOpsTime(c.createdAt)),1)):p("v-if",!0),i.key==="action"?(u(),v(z,{key:5},[c.status==="open"?(u(),h(w,{key:0,size:"small",type:"link",onClick:E=>e.ackIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.ack")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="open"||c.status==="acknowledged"?(u(),h(w,{key:1,size:"small",type:"link",onClick:E=>e.resolveIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.resolve")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="resolved"?(u(),h(w,{key:2,size:"small",type:"link",onClick:E=>e.closeIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.close")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="resolved"||c.status==="closed"?(u(),h(w,{key:3,size:"small",type:"link",onClick:E=>e.generatePostmortem(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.postmortem")),1)]),_:1},8,["onClick"])):p("v-if",!0)],64)):p("v-if",!0)]),emptyText:l(()=>[S("div",tt,[o(e.AlertOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(e.incidentSeverityFilter||e.incidentStatusFilter?t.$t("aiops.table.incidentEmptyFiltered"):t.$t("aiops.table.incidentEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Playbooks tab ─────────────────────────────────────────── "),o(_,{key:"playbooks",tab:t.$t("aiops.tabs.playbooks")},{default:l(()=>[o(x,{columns:e.playbookColumns,"data-source":e.playbooks,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="name"?(u(),v(z,{key:0},[S("span",at,r(c.name),1),c.triggerCondition?(u(),v("div",ot,r(e.truncate(c.triggerCondition,80)),1)):p("v-if",!0)],64)):p("v-if",!0),i.key==="enabled"?(u(),h(M,{key:1,checked:c.enabled,size:"small",onChange:E=>e.togglePlaybook(c,E)},null,8,["checked","onChange"])):p("v-if",!0),i.key==="stats"?(u(),v(z,{key:2},[o(R,{color:"green",style:{"font-size":"11px"}},{default:l(()=>[y(r(t.$t("aiops.table.successCount",{n:c.successCount})),1)]),_:2},1024),c.failureCount>0?(u(),h(R,{key:0,color:"red",style:{"font-size":"11px","margin-left":"4px"}},{default:l(()=>[y(r(t.$t("aiops.table.failureCount",{n:c.failureCount})),1)]),_:2},1024)):p("v-if",!0)],64)):p("v-if",!0),i.key==="createdAt"?(u(),v("span",lt,r(e.formatOpsTime(c.createdAt)),1)):p("v-if",!0),i.key==="action"?(u(),v(z,{key:4},[o(w,{size:"small",type:"link",onClick:E=>e.recordRun(c,"success")},{default:l(()=>[y(r(t.$t("aiops.playbookActions.success")),1)]),_:1},8,["onClick"]),o(w,{size:"small",type:"link",danger:"",onClick:E=>e.recordRun(c,"failure")},{default:l(()=>[y(r(t.$t("aiops.playbookActions.failure")),1)]),_:1},8,["onClick"])],64)):p("v-if",!0)]),emptyText:l(()=>[S("div",it,[o(e.RocketOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(t.$t("aiops.table.playbookEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Baselines tab ─────────────────────────────────────────── "),o(_,{key:"baselines",tab:t.$t("aiops.tabs.baselines")},{default:l(()=>[o(x,{columns:e.baselineColumns,"data-source":e.baselines,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="metric"?(u(),v("span",nt,r(c.metricName),1)):p("v-if",!0),i.key==="mean"?(u(),v(z,{key:1},[S("span",st,r(c.mean),1),S("span",rt,"σ "+r(c.stdDev),1)],64)):p("v-if",!0),i.key==="iqr"?(u(),v("span",dt," Q1 "+r(c.q1)+" / Q3 "+r(c.q3),1)):p("v-if",!0),i.key==="sampleCount"?(u(),h(R,{key:3,color:"blue",style:{"font-size":"11px"}},{default:l(()=>[y(r(c.sampleCount),1)]),_:2},1024)):p("v-if",!0),i.key==="updatedAt"?(u(),v("span",ct,r(e.formatOpsTime(c.updatedAt)),1)):p("v-if",!0)]),emptyText:l(()=>[S("div",ut,[o(e.LineChartOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(t.$t("aiops.table.baselineEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),p(" ── Create incident modal ─────────────────────────────────── "),o(K,{open:e.showIncidentModal,"onUpdate:open":a[6]||(a[6]=i=>e.showIncidentModal=i),title:t.$t("aiops.incident_modal.title"),"confirm-loading":e.creating,width:520,"ok-text":t.$t("aiops.incident_modal.ok"),"cancel-text":t.$t("aiops.incident_modal.cancel"),onOk:e.createIncident,onCancel:e.resetIncidentForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.incident_modal.severityLabel")},{default:l(()=>[o(ee,{value:e.incidentForm.severity,"onUpdate:value":a[3]||(a[3]=i=>e.incidentForm.severity=i)},{default:l(()=>[(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(q,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.metricLabel")},{default:l(()=>[o(Z,{value:e.incidentForm.metric,"onUpdate:value":a[4]||(a[4]=i=>e.incidentForm.metric=i),placeholder:t.$t("aiops.incident_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.descLabel"),required:""},{default:l(()=>[o(J,{value:e.incidentForm.description,"onUpdate:value":a[5]||(a[5]=i=>e.incidentForm.description=i),"auto-size":{minRows:3,maxRows:6}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Create playbook modal ─────────────────────────────────── "),o(K,{open:e.showPlaybookModal,"onUpdate:open":a[10]||(a[10]=i=>e.showPlaybookModal=i),title:t.$t("aiops.playbook_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("aiops.playbook_modal.ok"),"cancel-text":t.$t("aiops.playbook_modal.cancel"),onOk:e.createPlaybook,onCancel:e.resetPlaybookForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.playbook_modal.nameLabel"),required:""},{default:l(()=>[o(Z,{value:e.playbookForm.name,"onUpdate:value":a[7]||(a[7]=i=>e.playbookForm.name=i),placeholder:t.$t("aiops.playbook_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.playbook_modal.triggerLabel")},{default:l(()=>[o(J,{value:e.playbookForm.triggerJson,"onUpdate:value":a[8]||(a[8]=i=>e.playbookForm.triggerJson=i),placeholder:t.$t("aiops.playbook_modal.triggerPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.playbook_modal.stepsLabel")},{default:l(()=>[o(J,{value:e.playbookForm.stepsJson,"onUpdate:value":a[9]||(a[9]=i=>e.playbookForm.stepsJson=i),placeholder:t.$t("aiops.playbook_modal.stepsPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Update baseline modal ─────────────────────────────────── "),o(K,{open:e.showBaselineModal,"onUpdate:open":a[13]||(a[13]=i=>e.showBaselineModal=i),title:t.$t("aiops.baseline_modal.title"),"confirm-loading":e.creating,width:500,"ok-text":t.$t("aiops.baseline_modal.ok"),"cancel-text":t.$t("aiops.baseline_modal.cancel"),onOk:e.updateBaseline,onCancel:e.resetBaselineForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.baseline_modal.metricLabel"),required:""},{default:l(()=>[o(Z,{value:e.baselineForm.metric,"onUpdate:value":a[11]||(a[11]=i=>e.baselineForm.metric=i),placeholder:t.$t("aiops.baseline_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.baseline_modal.valuesLabel"),required:""},{default:l(()=>[o(J,{value:e.baselineForm.values,"onUpdate:value":a[12]||(a[12]=i=>e.baselineForm.values=i),placeholder:t.$t("aiops.baseline_modal.valuesPlaceholder"),"auto-size":{minRows:3,maxRows:8}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Detect anomaly modal ──────────────────────────────────── "),o(K,{open:e.showDetectModal,"onUpdate:open":a[17]||(a[17]=i=>e.showDetectModal=i),title:t.$t("aiops.detect_modal.title"),"confirm-loading":e.detecting,width:500,"ok-text":t.$t("aiops.detect_modal.ok"),"cancel-text":t.$t("aiops.detect_modal.cancel"),onOk:e.detectAnomaly},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.detect_modal.metricLabel"),required:""},{default:l(()=>[o(ee,{value:e.detectForm.metric,"onUpdate:value":a[14]||(a[14]=i=>e.detectForm.metric=i),"show-search":"",placeholder:t.$t("aiops.detect_modal.metricPlaceholder")},{default:l(()=>[(u(!0),v(z,null,G(e.baselines,i=>(u(),h(q,{key:i.metricName,value:i.metricName},{default:l(()=>[y(r(t.$t("aiops.detect_modal.metricOptionLabel",{name:i.metricName,count:i.sampleCount})),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.detect_modal.valueLabel"),required:""},{default:l(()=>[o(ae,{value:e.detectForm.value,"onUpdate:value":a[15]||(a[15]=i=>e.detectForm.value=i),style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.detect_modal.algorithmLabel")},{default:l(()=>[o(B,{value:e.detectForm.algorithm,"onUpdate:value":a[16]||(a[16]=i=>e.detectForm.algorithm=i)},{default:l(()=>[o(O,{value:"z_score"},{default:l(()=>[...a[18]||(a[18]=[y("Z-Score (3σ)",-1)])]),_:1}),o(O,{value:"iqr"},{default:l(()=>[...a[19]||(a[19]=[y("IQR (1.5×)",-1)])]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),e.detectResult?(u(),h(A,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:l(()=>[o(I,{title:t.$t("aiops.detect_modal.resultTitle"),value:e.detectResult.anomaly?t.$t("aiops.detect_modal.anomaly"):t.$t("aiops.detect_modal.normal"),"value-style":{color:e.detectResult.anomaly?"#ff4d4f":"#52c41a"}},null,8,["title","value","value-style"]),e.detectResult.reason&&!e.detectResult.anomaly?(u(),v("div",pt,r(t.$t("aiops.detect_modal.reasonLine",{reason:e.reasonLabel(e.detectResult.reason)})),1)):p("v-if",!0),e.detectResult.baseline?(u(),v("div",mt,[S("div",null,r(t.$t("aiops.detect_modal.scoreLine",{score:e.detectResult.score,threshold:e.detectResult.threshold})),1),S("div",null,r(t.$t("aiops.detect_modal.baselineLine",{mean:e.detectResult.baseline.mean,stdDev:e.detectResult.baseline.stdDev})),1)])):p("v-if",!0),e.detectResult.incidentId?(u(),v("div",yt,[o(R,{color:e.severityColor(e.detectResult.severity)},{default:l(()=>[y(r(t.$t("aiops.detect_modal.incidentCreated",{severity:e.detectResult.severity})),1)]),_:1},8,["color"])])):p("v-if",!0)]),_:1})):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Dt=ze(Ke,[["render",ft],["__scopeId","data-v-b804918b"],["__file","/tmp/cc-web-panel-1uwrpu/repo/packages/web-panel/src/views/AIOps.vue"]]);export{Dt as default};
@@ -1 +1 @@
1
- import{N as b,f as i,t as p}from"./index-Cjig5i3a.js";import{f as m,s as r,d as y,o as O,c as P}from"./vendor-BvqAck49.js";import{B as N,c as R}from"./index-CRBbVS43.js";const x=()=>{const n=r(!1);return m(()=>{n.value=!0}),n},A={type:{type:String},actionFn:Function,close:Function,autofocus:Boolean,prefixCls:String,buttonProps:p(),emitEvent:Boolean,quitOnNullishReturnValue:Boolean};function d(n){return!!(n&&n.then)}const j=y({compatConfig:{MODE:3},name:"ActionButton",props:A,setup(n,g){let{slots:B}=g;const l=r(!1),c=r(),a=r(!1);let f;const v=x();O(()=>{n.autofocus&&(f=setTimeout(()=>{var e,t;return(t=(e=b(c.value))===null||e===void 0?void 0:e.focus)===null||t===void 0?void 0:t.call(e)}))}),m(()=>{clearTimeout(f)});const u=function(){for(var e,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];(e=n.close)===null||e===void 0||e.call(n,...o)},h=e=>{d(e)&&(a.value=!0,e.then(function(){v.value||(a.value=!1),u(...arguments),l.value=!1},t=>(v.value||(a.value=!1),l.value=!1,Promise.reject(t))))},C=e=>{const{actionFn:t}=n;if(l.value)return;if(l.value=!0,!t){u();return}let o;if(n.emitEvent){if(o=t(e),n.quitOnNullishReturnValue&&!d(o)){l.value=!1,u(e);return}}else if(t.length)o=t(n.close),l.value=!1;else if(o=t(),!o){u();return}h(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return P(N,i(i(i({},R(e)),{},{onClick:C,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{j as A};
1
+ import{Q as b,f as i,x as p}from"./index-BWcCyH6-.js";import{f as m,s as r,d as y,o as O,c as P}from"./vendor-BvqAck49.js";import{B as x,c as R}from"./index-tyWABqp9.js";const A=()=>{const n=r(!1);return m(()=>{n.value=!0}),n},D={type:{type:String},actionFn:Function,close:Function,autofocus:Boolean,prefixCls:String,buttonProps:p(),emitEvent:Boolean,quitOnNullishReturnValue:Boolean};function d(n){return!!(n&&n.then)}const j=y({compatConfig:{MODE:3},name:"ActionButton",props:D,setup(n,g){let{slots:B}=g;const l=r(!1),c=r(),a=r(!1);let f;const v=A();O(()=>{n.autofocus&&(f=setTimeout(()=>{var e,t;return(t=(e=b(c.value))===null||e===void 0?void 0:e.focus)===null||t===void 0?void 0:t.call(e)}))}),m(()=>{clearTimeout(f)});const u=function(){for(var e,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];(e=n.close)===null||e===void 0||e.call(n,...o)},h=e=>{d(e)&&(a.value=!0,e.then(function(){v.value||(a.value=!1),u(...arguments),l.value=!1},t=>(v.value||(a.value=!1),l.value=!1,Promise.reject(t))))},C=e=>{const{actionFn:t}=n;if(l.value)return;if(l.value=!0,!t){u();return}let o;if(n.emitEvent){if(o=t(e),n.quitOnNullishReturnValue&&!d(o)){l.value=!1,u(e);return}}else if(t.length)o=t(n.close),l.value=!1;else if(o=t(),!o){u();return}h(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return P(x,i(i(i({},R(e)),{},{onClick:C,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{j as A};
@@ -1,3 +1,3 @@
1
- import{I as T,J as v,U as P,R as r,c as a,K as o,V as y,w as ae,o as oe,a as V,b as E,r as x,P as c,Q as d,S as D,F as pe}from"./vendor-BvqAck49.js";import{_ as ye,b as se,u as ne,d as U}from"./index-Cjig5i3a.js";import{t as le}from"./community-parser-Cuyslaku.js";import{aQ as me,D as ke,$ as fe,R as ve,aC as ge,H as _e}from"./icons-DP3uiYxy.js";const xe={__name:"Analytics",setup(re,{expose:u}){u();const{t:i}=se(),t=ne(),F=x("all"),J=x(!1),b=x(!1),L=x(!1),S=x(!1),p=x(!1),h=x(!1),m=x(20),g=V({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),C=x([]),I=x([]),_=V({entries:0,hits:0,tokensSaved:0,expired:0}),O=x(!1),z=V({totalCalls:0,inputTokens:0,outputTokens:0,totalTokens:0}),l=x([]),k=E(()=>[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:i("analytics.sessionUsageColumns.calls"),key:"calls",dataIndex:"calls",width:"100px",sorter:(e,s)=>(e.calls||0)-(s.calls||0)},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"110px",sorter:(e,s)=>(e.inputTokens||0)-(s.inputTokens||0)},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"110px",sorter:(e,s)=>(e.outputTokens||0)-(s.outputTokens||0)},{title:"Total",key:"totalTokens",dataIndex:"totalTokens",width:"110px",sorter:(e,s)=>(e.totalTokens||0)-(s.totalTokens||0)}]),ie=E(()=>[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px",sorter:(e,s)=>(e.provider||"").localeCompare(s.provider||"")},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0,sorter:(e,s)=>(e.model||"").localeCompare(s.model||"")},{title:i("analytics.breakdownColumns.calls"),key:"calls",dataIndex:"calls",width:"100px",sorter:(e,s)=>(e.calls||0)-(s.calls||0)},{title:i("analytics.breakdownColumns.inputTokens"),key:"inputTokens",dataIndex:"inputTokens",width:"120px",sorter:(e,s)=>(e.inputTokens||0)-(s.inputTokens||0)},{title:i("analytics.breakdownColumns.outputTokens"),key:"outputTokens",dataIndex:"outputTokens",width:"130px",sorter:(e,s)=>(e.outputTokens||0)-(s.outputTokens||0)},{title:i("analytics.breakdownColumns.totalTokens"),key:"totalTokens",dataIndex:"totalTokens",width:"120px",sorter:(e,s)=>(e.totalTokens||0)-(s.totalTokens||0)},{title:i("analytics.breakdownColumns.cost"),key:"cost",dataIndex:"cost",width:"110px",sorter:(e,s)=>(e.cost||0)-(s.cost||0)},{title:i("analytics.breakdownColumns.avgResponseTime"),key:"avgResponseTime",dataIndex:"avgResponseTime",width:"110px",sorter:(e,s)=>(e.avgResponseTime||0)-(s.avgResponseTime||0)}]),ce=E(()=>[{title:i("analytics.recentColumns.timestamp"),key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"Provider",key:"provider",dataIndex:"provider",width:"110px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:i("analytics.recentColumns.input"),key:"inputTokens",dataIndex:"inputTokens",width:"90px"},{title:i("analytics.recentColumns.output"),key:"outputTokens",dataIndex:"outputTokens",width:"90px"},{title:i("analytics.recentColumns.cost"),key:"cost",dataIndex:"cost",width:"100px"},{title:i("analytics.recentColumns.responseTime"),key:"responseTime",dataIndex:"responseTime",width:"100px"}]);function w(e){return(e||"").replace(/,/g,"")}function R(e){return le(e)}function Q(e){const s=(e||"").split(`
2
- `);for(const n of s){const f=n.trim(),M=f.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);M&&(g.totalCalls=parseInt(w(M[1]),10)||0);const j=f.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);j&&(g.totalTokens=parseInt(w(j[1]),10)||0);const B=f.match(/cost\s*[::]\s*\$?([\d,.]+)/i);B&&(g.totalCost=parseFloat(w(B[1]))||0);const A=f.match(/(?:avg|average)\s*(?:response\s*)?time\s*[::]\s*([\d,.]+)/i);A&&(g.avgResponseTime=parseFloat(w(A[1]))||0)}}function W(e){g.totalCalls=e.totalCalls??e.total_calls??e.calls??0,g.totalTokens=e.totalTokens??e.total_tokens??e.tokens??0,g.totalCost=e.totalCost??e.total_cost??e.cost??0,g.avgResponseTime=e.avgResponseTime??e.avg_response_time??e.avgTime??0}function K(e){return(Array.isArray(e)?e:e.breakdown||e.providers||e.rows||[]).map((n,f)=>({key:f,provider:n.provider||"-",model:n.model||"-",calls:n.calls||n.count||0,inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,totalTokens:n.totalTokens??n.total_tokens??(n.inputTokens??0)+(n.outputTokens??0),cost:n.cost??n.total_cost??0,avgResponseTime:n.avgResponseTime??n.avg_response_time??0}))}function q(e){return(Array.isArray(e)?e:e.recent||e.records||e.rows||[]).map((n,f)=>({key:f,timestamp:n.timestamp||n.time||n.created_at||"-",provider:n.provider||"-",model:n.model||"-",inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,cost:n.cost??0,responseTime:n.responseTime??n.response_time??0}))}function G(e){_.entries=e.entries??e.count??e.size??0,_.hits=e.hits??e.cacheHits??e.cache_hits??0,_.tokensSaved=e.tokensSaved??e.tokens_saved??0,_.expired=e.expired??e.expiredCount??e.expired_count??0}function X(e){const s=(e||"").split(`
3
- `);for(const n of s){const f=n.trim(),M=f.match(/entries?\s*[::]\s*([\d,]+)/i);M&&(_.entries=parseInt(w(M[1]),10)||0);const j=f.match(/hits?\s*[::]\s*([\d,]+)/i);j&&(_.hits=parseInt(w(j[1]),10)||0);const B=f.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);B&&(_.tokensSaved=parseInt(w(B[1]),10)||0);const A=f.match(/expired?\s*[::]\s*([\d,]+)/i);A&&(_.expired=parseInt(w(A[1]),10)||0)}}async function H(){J.value=!0;try{const{output:e}=await t.execute(`tokens show --period ${F.value} --json`,15e3),s=R(e);s?W(s):Q(e)}catch(e){console.error("loadSummary failed:",e)}finally{J.value=!1}}async function Y(){b.value=!0;try{const{output:e}=await t.execute("tokens breakdown --json",15e3),s=R(e);s?C.value=K(s):C.value=[]}catch(e){console.error("loadBreakdown failed:",e),C.value=[]}finally{b.value=!1}}async function Z(){L.value=!0;try{const{output:e}=await t.execute(`tokens recent --limit ${m.value} --json`,15e3),s=R(e);s?I.value=q(s):I.value=[]}catch(e){console.error("loadRecent failed:",e),I.value=[]}finally{L.value=!1}}async function N(){S.value=!0;try{const{output:e}=await t.execute("tokens cache --json",15e3),s=R(e);s?G(s):X(e)}catch(e){console.error("loadCache failed:",e)}finally{S.value=!1}}async function de(){p.value=!0;try{const{output:e}=await t.execute("tokens cache --clear --json",15e3),s=R(e);s&&s.error?U.error(i("analytics.messages.cacheClearFailed",{err:s.error})):(U.success(i("analytics.messages.cacheClearOk")),await N())}catch(e){U.error(i("analytics.messages.cacheClearFailed",{err:e.message}))}finally{p.value=!1}}async function ue(){h.value=!0;try{const{output:e}=await t.execute("tokens cache --cleanup --json",15e3),s=R(e);s&&s.error?U.error(i("analytics.messages.cacheCleanupFailed",{err:s.error})):(U.success(i("analytics.messages.cacheCleanupOk")),await N())}catch(e){U.error(i("analytics.messages.cacheCleanupFailed",{err:e.message}))}finally{h.value=!1}}async function $(){O.value=!0;try{const e=await t.sendRaw({type:"usage.global",limit:1e3},15e3);if(e.ok&&e.usage){const s=e.usage.total||{};z.totalCalls=s.calls??0,z.inputTokens=s.inputTokens??s.input_tokens??0,z.outputTokens=s.outputTokens??s.output_tokens??0,z.totalTokens=s.totalTokens??s.total_tokens??0,l.value=(e.usage.byModel||[]).map((n,f)=>({key:f,provider:n.provider||"-",model:n.model||"-",calls:n.calls??0,inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,totalTokens:n.totalTokens??n.total_tokens??0}))}}catch(e){console.warn("loadSessionUsage failed (route may not be available):",e.message)}finally{O.value=!1}}async function ee(){await Promise.all([H(),Y(),Z(),N(),$()])}ae(F,()=>{H()}),oe(ee);const te={t:i,ws:t,period:F,summaryLoading:J,breakdownLoading:b,recentLoading:L,cacheLoading:S,cacheClearLoading:p,cacheCleanupLoading:h,recentLimit:m,summary:g,breakdownData:C,recentData:I,cacheStats:_,sessionUsageLoading:O,sessionUsageSummary:z,sessionUsageByModel:l,sessionUsageColumns:k,breakdownColumns:ie,recentColumns:ce,stripCommas:w,tryParseJSON:R,parseSummaryText:Q,parseSummaryJSON:W,parseBreakdownJSON:K,parseRecentJSON:q,parseCacheJSON:G,parseCacheText:X,loadSummary:H,loadBreakdown:Y,loadRecent:Z,loadCache:N,cacheClear:de,cacheCleanup:ue,loadSessionUsage:$,loadAll:ee,ref:x,computed:E,reactive:V,watch:ae,onMounted:oe,get useI18n(){return se},get BarChartOutlined(){return _e},get DollarOutlined(){return ge},get ReloadOutlined(){return ve},get ThunderboltOutlined(){return fe},get DatabaseOutlined(){return ke},get DeleteOutlined(){return me},get message(){return U},get useWsStore(){return ne},get tryParseJson(){return le}};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}},he={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Te={class:"page-title"},be={class:"page-sub"},Ce={style:{display:"flex","align-items":"center",gap:"12px"}},we={key:0,style:{"text-align":"center",padding:"60px"}},Se={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ie={key:2,style:{color:"#faad14"}},Oe={key:3,style:{color:"var(--text-secondary)"}},ze={key:0,style:{"text-align":"center",padding:"60px"}},Re={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ue={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Le={key:3,style:{color:"#faad14"}},De={key:4,style:{color:"var(--text-secondary)"}},Me={key:0,style:{"text-align":"center",padding:"40px"}},je={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Be={key:0,style:{"text-align":"center",padding:"40px"}};function Ae(re,u,i,t,F,J){const b=T("a-radio-button"),L=T("a-radio-group"),S=T("a-button"),p=T("a-statistic"),h=T("a-card"),m=T("a-col"),g=T("a-row"),C=T("a-spin"),I=T("a-tag"),_=T("a-empty"),O=T("a-table"),z=T("a-space");return c(),v("div",null,[P("div",he,[P("div",null,[P("h2",Te,r(t.t("analytics.title")),1),P("p",be,r(t.t("analytics.subtitle")),1)]),P("div",Ce,[a(L,{value:t.period,"onUpdate:value":u[0]||(u[0]=l=>t.period=l),"button-style":"solid",size:"small"},{default:o(()=>[a(b,{value:"today"},{default:o(()=>[d(r(t.t("analytics.period.today")),1)]),_:1}),a(b,{value:"week"},{default:o(()=>[d(r(t.t("analytics.period.week")),1)]),_:1}),a(b,{value:"month"},{default:o(()=>[d(r(t.t("analytics.period.month")),1)]),_:1}),a(b,{value:"all"},{default:o(()=>[d(r(t.t("analytics.period.all")),1)]),_:1})]),_:1},8,["value"]),a(S,{type:"primary",ghost:"",loading:t.summaryLoading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])])]),y(" Top row: 4 stat cards "),a(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCalls"),value:t.summary.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.BarChartOutlined)]),suffix:o(()=>[d(r(t.t("analytics.summary.callsSuffix")),1)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalTokens"),value:t.summary.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCost"),value:t.summary.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.DollarOutlined)]),suffix:o(()=>[...u[2]||(u[2]=[d("USD",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.avgResponseTime"),value:t.summary.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),suffix:o(()=>[...u[3]||(u[3]=[d("ms",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Section 2: Provider Breakdown "),a(h,{title:t.t("analytics.providerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:o(()=>[t.breakdownLoading?(c(),v("div",we,[a(C,{size:"large"})])):(c(),D(O,{key:1,columns:t.breakdownColumns,"data-source":t.breakdownData,pagination:{pageSize:20,showTotal:l=>t.t("analytics.totals.rows",{count:l})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="provider"?(c(),D(I,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",Se,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),v("span",Ie,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="avgResponseTime"?(c(),v("span",Oe,r(k.avgResponseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.providerEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 3: Recent Calls "),a(h,{title:t.t("analytics.recentCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(L,{value:t.recentLimit,"onUpdate:value":u[1]||(u[1]=l=>t.recentLimit=l),size:"small",onChange:t.loadRecent},{default:o(()=>[a(b,{value:10},{default:o(()=>[...u[4]||(u[4]=[d("10",-1)])]),_:1}),a(b,{value:20},{default:o(()=>[...u[5]||(u[5]=[d("20",-1)])]),_:1}),a(b,{value:50},{default:o(()=>[...u[6]||(u[6]=[d("50",-1)])]),_:1})]),_:1},8,["value"])]),default:o(()=>[t.recentLoading?(c(),v("div",ze,[a(C,{size:"large"})])):(c(),D(O,{key:1,columns:t.recentColumns,"data-source":t.recentData,pagination:{pageSize:20,showTotal:l=>t.t("analytics.totals.rows",{count:l})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="timestamp"?(c(),v("span",Re,r(k.timestamp),1)):y("v-if",!0),l.key==="provider"?(c(),D(I,{key:1,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",Ue,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),v("span",Le,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="responseTime"?(c(),v("span",De,r(k.responseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.recentEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 4: Session Token Usage (Phase J — from JSONL sessions) "),a(h,{title:t.t("analytics.sessionCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(S,{size:"small",loading:t.sessionUsageLoading,onClick:t.loadSessionUsage,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])]),default:o(()=>[t.sessionUsageLoading?(c(),v("div",Me,[a(C)])):(c(),v(pe,{key:1},[a(g,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:o(()=>[a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.totalCalls"),value:t.sessionUsageSummary.totalCalls,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:o(()=>[a(t.BarChartOutlined)]),_:1},8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.inputTokens"),value:t.sessionUsageSummary.inputTokens,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.outputTokens"),value:t.sessionUsageSummary.outputTokens,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.totalTokens"),value:t.sessionUsageSummary.totalTokens,"value-style":{color:"#722ed1",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),a(O,{columns:t.sessionUsageColumns,"data-source":t.sessionUsageByModel,pagination:!1,size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="provider"?(c(),D(I,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",je,r(k.model),1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.sessionEmpty")},null,8,["description"])]),_:1},8,["columns","data-source"])],64))]),_:1},8,["title"]),y(" Section 5: Cache Status "),a(h,{title:t.t("analytics.cacheCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(z,null,{default:o(()=>[a(S,{size:"small",loading:t.cacheCleanupLoading,onClick:t.cacheCleanup,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.cleanup")),1)]),_:1},8,["loading"]),a(S,{size:"small",danger:"",loading:t.cacheClearLoading,onClick:t.cacheClear,style:{"border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.clear")),1)]),_:1},8,["loading"])]),_:1})]),default:o(()=>[t.cacheLoading?(c(),v("div",Be,[a(C)])):(c(),D(g,{key:1,gutter:[16,16]},{default:o(()=>[a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.entries"),value:t.cacheStats.entries,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:o(()=>[a(t.DatabaseOutlined)]),_:1},8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.hits"),value:t.cacheStats.hits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.tokensSaved"),value:t.cacheStats.tokensSaved,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.expired"),value:t.cacheStats.expired,"value-style":{color:"#ff4d4f",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}))]),_:1},8,["title"])])}const Ve=ye(xe,[["render",Ae],["__scopeId","data-v-cab07171"],["__file","/tmp/cc-web-panel-UUgUnt/repo/packages/web-panel/src/views/Analytics.vue"]]);export{Ve as default};
1
+ import{I as T,J as f,U as P,R as r,c as a,K as o,V as y,w as ae,o as oe,a as V,b as E,r as x,P as c,Q as d,S as D,F as pe}from"./vendor-BvqAck49.js";import{_ as ye,b as se,u as ne,t as le,d as U}from"./index-BWcCyH6-.js";import{aQ as me,D as ke,$ as ve,R as fe,aC as ge,H as _e}from"./icons-DP3uiYxy.js";const xe={__name:"Analytics",setup(re,{expose:u}){u();const{t:i}=se(),t=ne(),F=x("all"),J=x(!1),b=x(!1),L=x(!1),S=x(!1),p=x(!1),h=x(!1),m=x(20),g=V({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),C=x([]),I=x([]),_=V({entries:0,hits:0,tokensSaved:0,expired:0}),O=x(!1),z=V({totalCalls:0,inputTokens:0,outputTokens:0,totalTokens:0}),l=x([]),k=E(()=>[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:i("analytics.sessionUsageColumns.calls"),key:"calls",dataIndex:"calls",width:"100px",sorter:(e,s)=>(e.calls||0)-(s.calls||0)},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"110px",sorter:(e,s)=>(e.inputTokens||0)-(s.inputTokens||0)},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"110px",sorter:(e,s)=>(e.outputTokens||0)-(s.outputTokens||0)},{title:"Total",key:"totalTokens",dataIndex:"totalTokens",width:"110px",sorter:(e,s)=>(e.totalTokens||0)-(s.totalTokens||0)}]),ie=E(()=>[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px",sorter:(e,s)=>(e.provider||"").localeCompare(s.provider||"")},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0,sorter:(e,s)=>(e.model||"").localeCompare(s.model||"")},{title:i("analytics.breakdownColumns.calls"),key:"calls",dataIndex:"calls",width:"100px",sorter:(e,s)=>(e.calls||0)-(s.calls||0)},{title:i("analytics.breakdownColumns.inputTokens"),key:"inputTokens",dataIndex:"inputTokens",width:"120px",sorter:(e,s)=>(e.inputTokens||0)-(s.inputTokens||0)},{title:i("analytics.breakdownColumns.outputTokens"),key:"outputTokens",dataIndex:"outputTokens",width:"130px",sorter:(e,s)=>(e.outputTokens||0)-(s.outputTokens||0)},{title:i("analytics.breakdownColumns.totalTokens"),key:"totalTokens",dataIndex:"totalTokens",width:"120px",sorter:(e,s)=>(e.totalTokens||0)-(s.totalTokens||0)},{title:i("analytics.breakdownColumns.cost"),key:"cost",dataIndex:"cost",width:"110px",sorter:(e,s)=>(e.cost||0)-(s.cost||0)},{title:i("analytics.breakdownColumns.avgResponseTime"),key:"avgResponseTime",dataIndex:"avgResponseTime",width:"110px",sorter:(e,s)=>(e.avgResponseTime||0)-(s.avgResponseTime||0)}]),ce=E(()=>[{title:i("analytics.recentColumns.timestamp"),key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"Provider",key:"provider",dataIndex:"provider",width:"110px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:i("analytics.recentColumns.input"),key:"inputTokens",dataIndex:"inputTokens",width:"90px"},{title:i("analytics.recentColumns.output"),key:"outputTokens",dataIndex:"outputTokens",width:"90px"},{title:i("analytics.recentColumns.cost"),key:"cost",dataIndex:"cost",width:"100px"},{title:i("analytics.recentColumns.responseTime"),key:"responseTime",dataIndex:"responseTime",width:"100px"}]);function w(e){return(e||"").replace(/,/g,"")}function R(e){return le(e)}function Q(e){const s=(e||"").split(`
2
+ `);for(const n of s){const v=n.trim(),M=v.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);M&&(g.totalCalls=parseInt(w(M[1]),10)||0);const j=v.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);j&&(g.totalTokens=parseInt(w(j[1]),10)||0);const B=v.match(/cost\s*[::]\s*\$?([\d,.]+)/i);B&&(g.totalCost=parseFloat(w(B[1]))||0);const A=v.match(/(?:avg|average)\s*(?:response\s*)?time\s*[::]\s*([\d,.]+)/i);A&&(g.avgResponseTime=parseFloat(w(A[1]))||0)}}function W(e){g.totalCalls=e.totalCalls??e.total_calls??e.calls??0,g.totalTokens=e.totalTokens??e.total_tokens??e.tokens??0,g.totalCost=e.totalCost??e.total_cost??e.cost??0,g.avgResponseTime=e.avgResponseTime??e.avg_response_time??e.avgTime??0}function K(e){return(Array.isArray(e)?e:e.breakdown||e.providers||e.rows||[]).map((n,v)=>({key:v,provider:n.provider||"-",model:n.model||"-",calls:n.calls||n.count||0,inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,totalTokens:n.totalTokens??n.total_tokens??(n.inputTokens??0)+(n.outputTokens??0),cost:n.cost??n.total_cost??0,avgResponseTime:n.avgResponseTime??n.avg_response_time??0}))}function q(e){return(Array.isArray(e)?e:e.recent||e.records||e.rows||[]).map((n,v)=>({key:v,timestamp:n.timestamp||n.time||n.created_at||"-",provider:n.provider||"-",model:n.model||"-",inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,cost:n.cost??0,responseTime:n.responseTime??n.response_time??0}))}function G(e){_.entries=e.entries??e.count??e.size??0,_.hits=e.hits??e.cacheHits??e.cache_hits??0,_.tokensSaved=e.tokensSaved??e.tokens_saved??0,_.expired=e.expired??e.expiredCount??e.expired_count??0}function X(e){const s=(e||"").split(`
3
+ `);for(const n of s){const v=n.trim(),M=v.match(/entries?\s*[::]\s*([\d,]+)/i);M&&(_.entries=parseInt(w(M[1]),10)||0);const j=v.match(/hits?\s*[::]\s*([\d,]+)/i);j&&(_.hits=parseInt(w(j[1]),10)||0);const B=v.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);B&&(_.tokensSaved=parseInt(w(B[1]),10)||0);const A=v.match(/expired?\s*[::]\s*([\d,]+)/i);A&&(_.expired=parseInt(w(A[1]),10)||0)}}async function H(){J.value=!0;try{const{output:e}=await t.execute(`tokens show --period ${F.value} --json`,15e3),s=R(e);s?W(s):Q(e)}catch(e){console.error("loadSummary failed:",e)}finally{J.value=!1}}async function Y(){b.value=!0;try{const{output:e}=await t.execute("tokens breakdown --json",15e3),s=R(e);s?C.value=K(s):C.value=[]}catch(e){console.error("loadBreakdown failed:",e),C.value=[]}finally{b.value=!1}}async function Z(){L.value=!0;try{const{output:e}=await t.execute(`tokens recent --limit ${m.value} --json`,15e3),s=R(e);s?I.value=q(s):I.value=[]}catch(e){console.error("loadRecent failed:",e),I.value=[]}finally{L.value=!1}}async function N(){S.value=!0;try{const{output:e}=await t.execute("tokens cache --json",15e3),s=R(e);s?G(s):X(e)}catch(e){console.error("loadCache failed:",e)}finally{S.value=!1}}async function de(){p.value=!0;try{const{output:e}=await t.execute("tokens cache --clear --json",15e3),s=R(e);s&&s.error?U.error(i("analytics.messages.cacheClearFailed",{err:s.error})):(U.success(i("analytics.messages.cacheClearOk")),await N())}catch(e){U.error(i("analytics.messages.cacheClearFailed",{err:e.message}))}finally{p.value=!1}}async function ue(){h.value=!0;try{const{output:e}=await t.execute("tokens cache --cleanup --json",15e3),s=R(e);s&&s.error?U.error(i("analytics.messages.cacheCleanupFailed",{err:s.error})):(U.success(i("analytics.messages.cacheCleanupOk")),await N())}catch(e){U.error(i("analytics.messages.cacheCleanupFailed",{err:e.message}))}finally{h.value=!1}}async function $(){O.value=!0;try{const e=await t.sendRaw({type:"usage.global",limit:1e3},15e3);if(e.ok&&e.usage){const s=e.usage.total||{};z.totalCalls=s.calls??0,z.inputTokens=s.inputTokens??s.input_tokens??0,z.outputTokens=s.outputTokens??s.output_tokens??0,z.totalTokens=s.totalTokens??s.total_tokens??0,l.value=(e.usage.byModel||[]).map((n,v)=>({key:v,provider:n.provider||"-",model:n.model||"-",calls:n.calls??0,inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,totalTokens:n.totalTokens??n.total_tokens??0}))}}catch(e){console.warn("loadSessionUsage failed (route may not be available):",e.message)}finally{O.value=!1}}async function ee(){await Promise.all([H(),Y(),Z(),N(),$()])}ae(F,()=>{H()}),oe(ee);const te={t:i,ws:t,period:F,summaryLoading:J,breakdownLoading:b,recentLoading:L,cacheLoading:S,cacheClearLoading:p,cacheCleanupLoading:h,recentLimit:m,summary:g,breakdownData:C,recentData:I,cacheStats:_,sessionUsageLoading:O,sessionUsageSummary:z,sessionUsageByModel:l,sessionUsageColumns:k,breakdownColumns:ie,recentColumns:ce,stripCommas:w,tryParseJSON:R,parseSummaryText:Q,parseSummaryJSON:W,parseBreakdownJSON:K,parseRecentJSON:q,parseCacheJSON:G,parseCacheText:X,loadSummary:H,loadBreakdown:Y,loadRecent:Z,loadCache:N,cacheClear:de,cacheCleanup:ue,loadSessionUsage:$,loadAll:ee,ref:x,computed:E,reactive:V,watch:ae,onMounted:oe,get useI18n(){return se},get BarChartOutlined(){return _e},get DollarOutlined(){return ge},get ReloadOutlined(){return fe},get ThunderboltOutlined(){return ve},get DatabaseOutlined(){return ke},get DeleteOutlined(){return me},get message(){return U},get useWsStore(){return ne},get tryParseJson(){return le}};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}},he={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Te={class:"page-title"},be={class:"page-sub"},Ce={style:{display:"flex","align-items":"center",gap:"12px"}},we={key:0,style:{"text-align":"center",padding:"60px"}},Se={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ie={key:2,style:{color:"#faad14"}},Oe={key:3,style:{color:"var(--text-secondary)"}},ze={key:0,style:{"text-align":"center",padding:"60px"}},Re={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ue={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Le={key:3,style:{color:"#faad14"}},De={key:4,style:{color:"var(--text-secondary)"}},Me={key:0,style:{"text-align":"center",padding:"40px"}},je={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Be={key:0,style:{"text-align":"center",padding:"40px"}};function Ae(re,u,i,t,F,J){const b=T("a-radio-button"),L=T("a-radio-group"),S=T("a-button"),p=T("a-statistic"),h=T("a-card"),m=T("a-col"),g=T("a-row"),C=T("a-spin"),I=T("a-tag"),_=T("a-empty"),O=T("a-table"),z=T("a-space");return c(),f("div",null,[P("div",he,[P("div",null,[P("h2",Te,r(t.t("analytics.title")),1),P("p",be,r(t.t("analytics.subtitle")),1)]),P("div",Ce,[a(L,{value:t.period,"onUpdate:value":u[0]||(u[0]=l=>t.period=l),"button-style":"solid",size:"small"},{default:o(()=>[a(b,{value:"today"},{default:o(()=>[d(r(t.t("analytics.period.today")),1)]),_:1}),a(b,{value:"week"},{default:o(()=>[d(r(t.t("analytics.period.week")),1)]),_:1}),a(b,{value:"month"},{default:o(()=>[d(r(t.t("analytics.period.month")),1)]),_:1}),a(b,{value:"all"},{default:o(()=>[d(r(t.t("analytics.period.all")),1)]),_:1})]),_:1},8,["value"]),a(S,{type:"primary",ghost:"",loading:t.summaryLoading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])])]),y(" Top row: 4 stat cards "),a(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCalls"),value:t.summary.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.BarChartOutlined)]),suffix:o(()=>[d(r(t.t("analytics.summary.callsSuffix")),1)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalTokens"),value:t.summary.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCost"),value:t.summary.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.DollarOutlined)]),suffix:o(()=>[...u[2]||(u[2]=[d("USD",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.avgResponseTime"),value:t.summary.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),suffix:o(()=>[...u[3]||(u[3]=[d("ms",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Section 2: Provider Breakdown "),a(h,{title:t.t("analytics.providerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:o(()=>[t.breakdownLoading?(c(),f("div",we,[a(C,{size:"large"})])):(c(),D(O,{key:1,columns:t.breakdownColumns,"data-source":t.breakdownData,pagination:{pageSize:20,showTotal:l=>t.t("analytics.totals.rows",{count:l})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="provider"?(c(),D(I,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),f("span",Se,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),f("span",Ie,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="avgResponseTime"?(c(),f("span",Oe,r(k.avgResponseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.providerEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 3: Recent Calls "),a(h,{title:t.t("analytics.recentCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(L,{value:t.recentLimit,"onUpdate:value":u[1]||(u[1]=l=>t.recentLimit=l),size:"small",onChange:t.loadRecent},{default:o(()=>[a(b,{value:10},{default:o(()=>[...u[4]||(u[4]=[d("10",-1)])]),_:1}),a(b,{value:20},{default:o(()=>[...u[5]||(u[5]=[d("20",-1)])]),_:1}),a(b,{value:50},{default:o(()=>[...u[6]||(u[6]=[d("50",-1)])]),_:1})]),_:1},8,["value"])]),default:o(()=>[t.recentLoading?(c(),f("div",ze,[a(C,{size:"large"})])):(c(),D(O,{key:1,columns:t.recentColumns,"data-source":t.recentData,pagination:{pageSize:20,showTotal:l=>t.t("analytics.totals.rows",{count:l})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="timestamp"?(c(),f("span",Re,r(k.timestamp),1)):y("v-if",!0),l.key==="provider"?(c(),D(I,{key:1,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),f("span",Ue,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),f("span",Le,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="responseTime"?(c(),f("span",De,r(k.responseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.recentEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 4: Session Token Usage (Phase J — from JSONL sessions) "),a(h,{title:t.t("analytics.sessionCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(S,{size:"small",loading:t.sessionUsageLoading,onClick:t.loadSessionUsage,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])]),default:o(()=>[t.sessionUsageLoading?(c(),f("div",Me,[a(C)])):(c(),f(pe,{key:1},[a(g,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:o(()=>[a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.totalCalls"),value:t.sessionUsageSummary.totalCalls,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:o(()=>[a(t.BarChartOutlined)]),_:1},8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.inputTokens"),value:t.sessionUsageSummary.inputTokens,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.outputTokens"),value:t.sessionUsageSummary.outputTokens,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.totalTokens"),value:t.sessionUsageSummary.totalTokens,"value-style":{color:"#722ed1",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),a(O,{columns:t.sessionUsageColumns,"data-source":t.sessionUsageByModel,pagination:!1,size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="provider"?(c(),D(I,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),f("span",je,r(k.model),1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.sessionEmpty")},null,8,["description"])]),_:1},8,["columns","data-source"])],64))]),_:1},8,["title"]),y(" Section 5: Cache Status "),a(h,{title:t.t("analytics.cacheCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(z,null,{default:o(()=>[a(S,{size:"small",loading:t.cacheCleanupLoading,onClick:t.cacheCleanup,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.cleanup")),1)]),_:1},8,["loading"]),a(S,{size:"small",danger:"",loading:t.cacheClearLoading,onClick:t.cacheClear,style:{"border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.clear")),1)]),_:1},8,["loading"])]),_:1})]),default:o(()=>[t.cacheLoading?(c(),f("div",Be,[a(C)])):(c(),D(g,{key:1,gutter:[16,16]},{default:o(()=>[a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.entries"),value:t.cacheStats.entries,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:o(()=>[a(t.DatabaseOutlined)]),_:1},8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.hits"),value:t.cacheStats.hits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.tokensSaved"),value:t.cacheStats.tokensSaved,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.cacheStats.expired"),value:t.cacheStats.expired,"value-style":{color:"#ff4d4f",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}))]),_:1},8,["title"])])}const Ne=ye(xe,[["render",Ae],["__scopeId","data-v-cab07171"],["__file","/tmp/cc-web-panel-1uwrpu/repo/packages/web-panel/src/views/Analytics.vue"]]);export{Ne as default};
@@ -1,9 +1,9 @@
1
- import{b as v,r as R,I as k,P as p,J as L,c as e,K as t,U as d,Q as l,R as a,S as A,F as I,Z as se,_ as W,V as m,o as z,x as $,$ as fe,N as J,f as ee,M as te,w as ne,a0 as me}from"./vendor-BvqAck49.js";import{u as H,_ as Z,E as ke,a as oe,b as ie,c as ae,T as _e,d as V}from"./index-Cjig5i3a.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{R as ge,B as de,M as ce,U as Oe,D as he,S as be,h as we,i as ve,j as Le,N as Se,k as Ce,F as Ee,l as Te,m as Be,A as Ae,P as Ue,n as Me,o as Re,p as Pe,q as je,r as De,s as Ne,t as Ie,u as Ke,v as Fe,w as Ve,x as We,V as ze,K as Ge,y as He,z as qe,G as Je,H as Ye,J as Ze,W as Qe,O as Xe,Q as xe,X as $e,Y as et,Z as tt,_ as nt,$ as ot,a0 as it,a1 as at,a2 as lt,a3 as rt,a4 as st,a5 as dt,e as ct,a6 as ut,a7 as yt,a8 as pt,a9 as ft,aa as mt,ab as kt,ac as _t}from"./icons-DP3uiYxy.js";import le from"./index-R-VGFpi6.js";import"./KeyCode-D63Tfrq7.js";import"./omit-oxecfU3b.js";import"./pickAttrs-DJ5F5M6x.js";import"./initDefaultProps-ClAjrsQ-.js";import"./motion-BalXv_60.js";import"./raf-Deuc0E8-.js";import"./index-CRBbVS43.js";import"./index-DxaU_lza.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-C8to6gQk.js";import"./compact-item-yqEoy1L7.js";import"./createContext-Jwp78HFY.js";import"./Compact-DqknM98n.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-DdCAHtsZ.js";import"./zoom-CTNrv8-H.js";import"./ActionButton-COjZZKWG.js";import"./vnode-eIq4Tk0J.js";const gt=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,T={notifications:R([]),unreadCount:R(0)};function G(i){if(i&&i.ok===!1)throw new Error(i.error||"notification handler failed");return i?.result??i}function re(){const i=H();async function y({limit:o=50,offset:s=0,isRead:f}={}){if(!N().isEmbedded)return T.notifications.value=[],T.unreadCount.value=0,T.notifications.value;const g=await i.sendRaw({type:"notification.list",limit:o,offset:s,isRead:f},15e3),O=G(g);if(O?.success===!1)throw new Error(O.error||"notification.list failed");return T.notifications.value=Array.isArray(O?.notifications)?O.notifications:[],await S(),T.notifications.value}async function S(){if(!N().isEmbedded)return T.unreadCount.value=0,0;const o=await i.sendRaw({type:"notification.unread-count"},1e4),s=G(o);return T.unreadCount.value=Number(s?.count)||0,T.unreadCount.value}async function n(o){if(o==null||o==="")throw new Error("id is required");if(!N().isEmbedded)return;const s=await i.sendRaw({type:"notification.mark-read",id:o},1e4),f=G(s);if(f?.success===!1)throw new Error(f.error||"notification.mark-read failed");const g=T.notifications.value.find(O=>O.id===o);g&&(g.is_read=1),await S()}async function _(){if(!N().isEmbedded)return;const o=await i.sendRaw({type:"notification.mark-all-read"},1e4),s=G(o);if(s?.success===!1)throw new Error(s.error||"notification.mark-all-read failed");for(const f of T.notifications.value)f.is_read=1;T.unreadCount.value=0}async function h(o,s=""){if(!N().isEmbedded)throw new Error("桌面通知仅在嵌入式 web-shell 中可用");const f=await i.sendRaw({type:"notification.send-desktop",title:o,body:s},1e4),g=G(f);if(g?.success===!1)throw new Error(g.error||"notification.send-desktop failed")}return{notifications:v(()=>T.notifications.value),unreadCount:v(()=>T.unreadCount.value),refresh:y,refreshUnreadCount:S,markRead:n,markAllRead:_,sendDesktop:h}}const Ot={__name:"NotificationBell",setup(i,{expose:y}){y();const S=R(!1),n=R("all"),_=R(!1),{notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:g}=re();function O(){P()}z(()=>{window.addEventListener("cc:open-notification-drawer",O)}),$(()=>{window.removeEventListener("cc:open-notification-drawer",O)});const U=v(()=>n.value==="unread"?h.value.filter(c=>!c.is_read):h.value);async function C(){if(N().isEmbedded){_.value=!0;try{await s({limit:100})}catch{}finally{_.value=!1}}}async function P(){S.value=!0,await C()}async function j(c){if(!c.is_read)try{await f(c.id)}catch{}}async function r(){try{await g()}catch(c){console.warn("[NotificationBell] markAllRead failed:",c?.message||c)}}function w(c){if(!c)return"";const b=typeof c=="string"?Date.parse(c):Number(c);if(!Number.isFinite(b))return String(c);const M=Date.now()-b,D=6e4,K=60*D,F=24*K;return M<D?"刚刚":M<K?`${Math.floor(M/D)} 分钟前`:M<F?`${Math.floor(M/K)} 小时前`:new Date(b).toLocaleDateString()}const B={visible:S,filter:n,loading:_,notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:g,_onOpenEvent:O,filtered:U,refreshList:C,onOpen:P,onItemClick:j,onMarkAllRead:r,formatTime:w,ref:R,computed:v,onMounted:z,onUnmounted:$,get Empty(){return ke},get BellOutlined(){return de},get ReloadOutlined(){return ge},get useNotifications(){return re},get useShellMode(){return N}};return Object.defineProperty(B,"__isScriptSetup",{enumerable:!1,value:!0}),B}},ht={class:"notif-toolbar"},bt={class:"notif-body"},wt={key:2,class:"notif-list"},vt=["onClick"],Lt={class:"notif-row"},St={class:"notif-title"},Ct={class:"notif-time"},Et={key:0,class:"notif-message"};function Tt(i,y,S,n,_,h){const o=k("a-badge"),s=k("a-tooltip"),f=k("a-radio-button"),g=k("a-radio-group"),O=k("a-space"),U=k("a-button"),C=k("a-empty"),P=k("a-spin"),j=k("a-drawer");return p(),L(I,null,[e(s,{title:"通知"},{default:t(()=>[e(o,{count:n.unreadCount,"overflow-count":99,offset:[-4,4]},{default:t(()=>[d("button",{type:"button",class:"notif-bell-btn","aria-label":"通知",onClick:n.onOpen},[e(n.BellOutlined)])]),_:1},8,["count"])]),_:1}),e(j,{open:n.visible,"onUpdate:open":y[1]||(y[1]=r=>n.visible=r),title:"通知中心",placement:"right",width:400,"body-style":{padding:0}},{default:t(()=>[d("div",ht,[e(O,null,{default:t(()=>[e(g,{value:n.filter,"onUpdate:value":y[0]||(y[0]=r=>n.filter=r),size:"small","button-style":"solid"},{default:t(()=>[e(f,{value:"all"},{default:t(()=>[l("全部 ("+a(n.notifications.length)+")",1)]),_:1}),e(f,{value:"unread"},{default:t(()=>[l("未读 ("+a(n.unreadCount)+")",1)]),_:1})]),_:1},8,["value"])]),_:1}),e(O,null,{default:t(()=>[e(U,{size:"small",loading:n.loading,onClick:n.refreshList},{icon:t(()=>[e(n.ReloadOutlined)]),_:1},8,["loading"]),e(U,{size:"small",disabled:n.unreadCount===0,onClick:n.onMarkAllRead},{default:t(()=>[...y[2]||(y[2]=[l(" 全部已读 ",-1)])]),_:1},8,["disabled"])]),_:1})]),d("div",bt,[!n.loading&&n.filtered.length===0?(p(),A(C,{key:0,description:"暂无通知",image:n.Empty.PRESENTED_IMAGE_SIMPLE,style:{padding:"60px 0"}},null,8,["image"])):n.loading?(p(),A(P,{key:1,style:{display:"block",padding:"60px"}})):(p(),L("ul",wt,[(p(!0),L(I,null,se(n.filtered,r=>(p(),L("li",{key:r.id,class:W(["notif-item",{unread:!r.is_read}]),onClick:w=>n.onItemClick(r)},[d("div",Lt,[d("div",St,a(r.title||r.message||"(无标题)"),1),d("span",Ct,a(n.formatTime(r.created_at)),1)]),r.message&&r.title?(p(),L("div",Et,a(r.message),1)):m("v-if",!0)],10,vt))),128))]))])]),_:1},8,["open"])],64)}const Bt=Z(Ot,[["render",Tt],["__scopeId","data-v-8c1554dd"],["__file","/tmp/cc-web-panel-UUgUnt/repo/packages/web-panel/src/components/NotificationBell.vue"]]),At={__name:"MobileBridgeHeaderStatus",setup(i,{expose:y}){y();function S(r){if(!r)return[];try{return JSON.parse(r)}catch{}const w=String(r).split(`
2
- `),B=w.findIndex(c=>{const b=c.trim();if(!b)return!1;const M=b[0];if(M!=="["&&M!=="{")return!1;if(b.length===1)return!0;const D=b[1];return!(D>="A"&&D<="Z"||D>="a"&&D<="z")});if(B<0)return[];for(let c=w.length-1;c>=B;c--){const b=w[c].trim();if(/^[\]\}]/.test(b)&&!/^[\]\}][A-Za-z]/.test(b))try{return JSON.parse(w.slice(B,c+1).join(`
3
- `))}catch{return[]}}return[]}const n=J(),_=H(),h=R([]);let o=null;const s=v(()=>h.value.length),f=v(()=>h.value.filter(r=>U(r)).length),g=v(()=>s.value===0?"var(--text-muted, #999)":"#52c41a"),O=v(()=>s.value===0?"尚未配对任何手机 — 点击进入配对":`已配对 ${s.value} 台手机 — 点击进入管理`);function U(r){if(!r)return!1;if(typeof r.online=="boolean")return r.online;const w=(r.status||"").toLowerCase();return w==="online"||w==="connected"||w==="active"||w==="paired"}async function C(){if(_.status==="connected")try{const{output:r}=await _.execute("p2p devices --type mobile --json",1e4);h.value=S(r)||[]}catch{}}function P(){n.push("/mobile-bridge")}z(()=>{C(),o=setInterval(C,5e3)}),ee(()=>{o&&(clearInterval(o),o=null)});const j={parseJsonOutput:S,router:n,ws:_,devices:h,get pollTimer(){return o},set pollTimer(r){o=r},totalCount:s,onlineCount:f,iconColor:g,tooltip:O,isOnline:U,refresh:C,onClick:P,ref:R,computed:v,onMounted:z,onBeforeUnmount:ee,get useRouter(){return J},get MobileOutlined(){return ce},get useWsStore(){return H}};return Object.defineProperty(j,"__isScriptSetup",{enumerable:!1,value:!0}),j}},Ut={key:0,class:"mbh-count"};function Mt(i,y,S,n,_,h){const o=k("a-badge"),s=k("a-tooltip");return p(),A(s,{title:n.tooltip},{default:t(()=>[e(o,{count:n.totalCount,"show-zero":!1,"overflow-count":9,offset:[-2,4]},{default:t(()=>[d("button",{type:"button",class:W(["mbh-btn",{"mbh-btn--active":n.totalCount>0}]),onClick:n.onClick},[e(n.MobileOutlined,{style:fe({color:n.iconColor,fontSize:"14px"})},null,8,["style"]),n.totalCount>0?(p(),L("span",Ut,a(n.totalCount),1)):m("v-if",!0)],2)]),_:1},8,["count"])]),_:1},8,["title"])}const Rt=Z(At,[["render",Mt],["__scopeId","data-v-e8ef01d6"],["__file","/tmp/cc-web-panel-UUgUnt/repo/packages/web-panel/src/components/MobileBridgeHeaderStatus.vue"]]),Y="cc.web-panel.sidebar.openKeys",Pt={__name:"AppLayout",setup(i,{expose:y}){y();const S=J(),n=te(),_=H(),h=oe(),{t:o}=ie(),s=N(),f=R(!1),g=window.__CC_CONFIG__||{},O=v(()=>g.mode==="project"),U="v5.0.3.130",C=v(()=>h.current),P=v(()=>h.config.vars["--menu-mode"]),j=v(()=>{const u=n.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[u]||u]}),r=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function w(){try{const u=localStorage.getItem(Y);if(u){const E=JSON.parse(u);if(Array.isArray(E))return E.filter(q=>r.includes(q))}}catch{}return[...r]}const B=R(w());ne(B,u=>{try{localStorage.setItem(Y,JSON.stringify(u))}catch{}},{deep:!0});const c=v(()=>_.status),b=v(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[_.status]||"default"),M=v(()=>{const u=`appLayout.footerStatus.${_.status}`,E=o(u);return E===u?o("appLayout.footerStatus.unknown"):E});function D(u){h.setTheme(u)}const{current:K,supported:F,setLocale:Q}=ae();function ue(){const u=F[(F.indexOf(K.value)+1)%F.length];Q(u)}async function X(u){try{const E=await _.sendRaw({type:"window.open",role:u},1e4);if(E?.ok===!1){V.error(`打开失败:${E.error||"未知"}`);return}const q=E?.result??E;q?.reason==="role_reserved"?V.warning("该窗口角色被保留"):q?.reason}catch(E){V.error(`打开桌面窗口失败:${E.message||E}`)}}async function ye(){le.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const u=await _.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(u?.ok===!1)throw new Error(u.error||"shell.switch returned failure");V.loading({content:"正在重启…",duration:0})}catch(u){const E=u instanceof Error?u.message:String(u);V.error("切换失败:"+E)}}})}function pe({key:u}){if(typeof u=="string"&&u.startsWith("desktop:")){X(u);return}S.push({mcp:"/mcp"}[u]||`/${u}`)}z(()=>_.connect());const x={router:S,route:n,ws:_,themeStore:h,t:o,shellMode:s,collapsed:f,cfg:g,isProject:O,PRODUCT_VERSION:U,currentTheme:C,menuTheme:P,selectedKeys:j,ALL_GROUP_KEYS:r,OPEN_KEYS_LS:Y,loadOpenKeys:w,openKeys:B,wsStatus:c,statusBadge:b,statusText:M,setTheme:D,locale:K,SUPPORTED_LOCALES:F,setLocale:Q,toggleLocale:ue,openDesktopWindow:X,switchToDesktopShell:ye,onMenuClick:pe,ref:R,computed:v,onMounted:z,watch:ne,get useRouter(){return J},get useRoute(){return te},get DashboardOutlined(){return _t},get MessageOutlined(){return kt},get RocketOutlined(){return mt},get AppstoreOutlined(){return ft},get ApiOutlined(){return pt},get FolderOutlined(){return yt},get GlobalOutlined(){return ut},get InfoCircleOutlined(){return ct},get ControlOutlined(){return dt},get FileTextOutlined(){return st},get CloudServerOutlined(){return rt},get BookOutlined(){return lt},get BranchesOutlined(){return at},get ClockCircleOutlined(){return it},get ThunderboltOutlined(){return ot},get ApartmentOutlined(){return nt},get SafetyCertificateOutlined(){return tt},get LockOutlined(){return et},get WifiOutlined(){return $e},get CodeOutlined(){return xe},get ProjectOutlined(){return Xe},get WalletOutlined(){return Qe},get TeamOutlined(){return Ze},get BarChartOutlined(){return Ye},get BlockOutlined(){return Je},get CloudUploadOutlined(){return qe},get ReadOutlined(){return He},get KeyOutlined(){return Ge},get VideoCameraOutlined(){return ze},get ShareAltOutlined(){return We},get IdcardOutlined(){return Ve},get UsergroupAddOutlined(){return Fe},get ShoppingOutlined(){return Ke},get SwapOutlined(){return Ie},get AlertOutlined(){return Ne},get SafetyOutlined(){return De},get ExperimentOutlined(){return je},get DeploymentUnitOutlined(){return Pe},get BulbOutlined(){return Re},get BankOutlined(){return Me},get PartitionOutlined(){return Ue},get AuditOutlined(){return Ae},get FileSearchOutlined(){return Be},get TrophyOutlined(){return Te},get FireOutlined(){return Ee},get SearchOutlined(){return Ce},get NumberOutlined(){return Se},get ClusterOutlined(){return Le},get SoundOutlined(){return ve},get DesktopOutlined(){return we},get BellOutlined(){return de},get SyncOutlined(){return be},get MobileOutlined(){return ce},get DatabaseOutlined(){return he},get UnorderedListOutlined(){return Oe},get message(){return V},get Modal(){return le},get useWsStore(){return H},get useThemeStore(){return oe},get THEMES(){return _e},get logoSrc(){return gt},get useShellMode(){return N},get useI18n(){return ie},get useLocale(){return ae},NotificationBell:Bt,MobileBridgeHeaderStatus:Rt};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},jt=["src"],Dt={key:0,class:"logo-text"},Nt={key:0,class:"mode-banner project"},It={class:"banner-info"},Kt={class:"banner-name"},Ft={class:"banner-sub"},Vt={key:1,class:"mode-banner global"},Wt={class:"banner-name"},zt=["title"],Gt={class:"group-label"},Ht={class:"group-label"},qt={class:"group-label"},Jt={class:"group-label"},Yt={class:"group-label"},Zt={class:"group-label"},Qt={class:"group-label"},Xt={class:"group-label"},xt={class:"group-label"},$t={key:0,class:"footer-text"},en={class:"header-left"},tn={class:"header-right"},nn={class:"theme-switcher"},on=["data-theme-key","onClick"],an=["data-locale"],ln={class:"lang-switch-label"},rn={class:"version-tag"};function sn(i,y,S,n,_,h){const o=k("a-menu-item"),s=k("a-sub-menu"),f=k("a-menu-divider"),g=k("a-menu"),O=k("a-badge"),U=k("a-layout-sider"),C=k("a-tooltip"),P=k("a-tag"),j=k("a-layout-header"),r=k("router-view"),w=k("a-layout-content"),B=k("a-layout");return p(),A(B,{class:"app-root"},{default:t(()=>[m(" ── Sidebar ─────────────────────────────────────────────────── "),e(U,{collapsed:n.collapsed,"onUpdate:collapsed":y[2]||(y[2]=c=>n.collapsed=c),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[m(" Logo "),d("div",{class:W(["logo",{collapsed:n.collapsed}])},[d("img",{src:n.logoSrc,alt:"ChainlessChain",class:"logo-icon"},null,8,jt),n.collapsed?m("v-if",!0):(p(),L("span",Dt,"ChainlessChain"))],2),m(" Mode banner "),n.collapsed?(p(),L("div",{key:1,class:"mode-icon-sm",title:n.isProject?n.cfg.projectName:i.$t("appLayout.scope.global")},[n.isProject?(p(),A(n.FolderOutlined,{key:0,style:{color:"#1677ff"}})):(p(),A(n.GlobalOutlined,{key:1,style:{color:"#722ed1"}}))],8,zt)):(p(),L(I,{key:0},[n.isProject?(p(),L("div",Nt,[e(n.FolderOutlined,{class:"banner-icon"}),d("div",It,[d("div",Kt,a(n.cfg.projectName||i.$t("appLayout.scope.fallbackProject")),1),d("div",Ft,a(i.$t("appLayout.scope.projectPanel")),1)])])):(p(),L("div",Vt,[e(n.GlobalOutlined,{class:"banner-icon"}),d("span",Wt,a(i.$t("appLayout.scope.global")),1)]))],64)),m(" Navigation "),e(g,{selectedKeys:n.selectedKeys,"onUpdate:selectedKeys":y[0]||(y[0]=c=>n.selectedKeys=c),openKeys:n.openKeys,"onUpdate:openKeys":y[1]||(y[1]=c=>n.openKeys=c),theme:n.menuTheme,mode:"inline","inline-collapsed":n.collapsed,class:"side-menu",onClick:n.onMenuClick},{default:t(()=>[n.collapsed?(p(),L(I,{key:1},[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),n.shellMode.isEmbedded?(p(),L(I,{key:0},[e(f,{class:"divider-sm"}),e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),_:1})],64)):m("v-if",!0)],64)):(p(),L(I,{key:0},[e(s,{key:"g-overview"},{title:t(()=>[d("span",Gt,a(i.$t("appLayout.groups.overview")),1)]),default:t(()=>[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.dashboard")),1)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.chat")),1)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.quickAsk")),1)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cowork")),1)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.services")),1)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.aiops")),1)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tokens")),1)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.logs")),1)]),_:1})]),_:1}),e(s,{key:"g-config"},{title:t(()=>[d("span",Ht,a(i.$t("appLayout.groups.config")),1)]),default:t(()=>[e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.skills")),1)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.providers")),1)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mcp")),1)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projectSettings")),1)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.speechSettings")),1)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notificationSettings")),1)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.syncSettings")),1)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.nlprog")),1)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.codegen")),1)]),_:1})]),_:1}),e(s,{key:"g-data"},{title:t(()=>[d("span",qt,a(i.$t("appLayout.groups.data")),1)]),default:t(()=>[e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notes")),1)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.search")),1)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.memory")),1)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.knowledge")),1)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),default:t(()=>[y[3]||(y[3]=l("个人数据中台",-1))]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),default:t(()=>[y[4]||(y[4]=l("数据浏览器",-1))]),_:1}),e(o,{key:"family-guard"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[y[5]||(y[5]=l("家庭守护",-1))]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.marketplace")),1)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cron")),1)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.workflow")),1)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.pipeline")),1)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tasks")),1)]),_:1})]),_:1}),e(s,{key:"g-advanced"},{title:t(()=>[d("span",Jt,a(i.$t("appLayout.groups.advanced")),1)]),default:t(()=>[e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.security")),1)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.ukeySign")),1)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.trust")),1)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.audit")),1)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtc")),1)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtcAudit","MTC 审计")),1)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.multisig","M-of-N 多签")),1)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.did")),1)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.permissions")),1)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.p2p")),1)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileBridge","移动桥")),1)]),_:1}),e(o,{key:"mobile-projects"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileProjects","手机项目 (v0.2)")),1)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.terminal","远程终端")),1)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.backup")),1)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.git")),1)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projects")),1)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.crosschain")),1)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.compliance")),1)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.privacy")),1)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.inference")),1)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.federation")),1)]),_:1})]),_:1}),e(s,{key:"g-enterprise"},{title:t(()=>[d("span",Yt,a(i.$t("appLayout.groups.enterprise")),1)]),default:t(()=>[e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.wallet")),1)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.organization")),1)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tenant")),1)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.sla")),1)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.analytics")),1)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.templates")),1)]),_:1})]),_:1}),e(s,{key:"g-social"},{title:t(()=>[d("span",Zt,a(i.$t("appLayout.groups.social")),1)]),default:t(()=>[e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.community")),1)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.governance")),1)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.reputation")),1)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.recommend")),1)]),_:1})]),_:1}),e(s,{key:"g-media"},{title:t(()=>[d("span",Qt,a(i.$t("appLayout.groups.media")),1)]),default:t(()=>[e(o,{key:"video"},{icon:t(()=>[e(n.VideoCameraOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.video")),1)]),_:1})]),_:1}),e(s,{key:"g-extension"},{title:t(()=>[d("span",Xt,a(i.$t("appLayout.groups.extension")),1)]),default:t(()=>[e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.rssfeed")),1)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.webauthn")),1)]),_:1})]),_:1}),m(` Desktop-only group — only shown in the embedded web-shell. Each
1
+ import{b as v,r as P,I as k,P as y,J as L,c as e,K as t,U as d,Q as l,R as a,S as A,F as I,Z as se,_ as W,V as m,o as z,x as $,$ as fe,N as J,f as ee,M as te,w as ne,a0 as me}from"./vendor-BvqAck49.js";import{u as H,_ as Z,E as ke,a as oe,b as ie,c as ae,T as _e,d as V}from"./index-BWcCyH6-.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{R as ge,B as de,M as ue,U as Oe,D as he,S as be,h as we,i as ve,j as Le,N as Se,k as Ce,F as Ee,l as Te,m as Be,A as Ae,P as Me,n as Re,o as Pe,p as je,q as De,r as Ue,s as Ne,t as Ie,u as Ke,v as Fe,w as Ve,x as We,V as ze,K as Ge,y as He,z as qe,G as Je,H as Ye,J as Ze,W as Qe,O as Xe,Q as xe,X as $e,Y as et,Z as tt,_ as nt,$ as ot,a0 as it,a1 as at,a2 as lt,a3 as rt,a4 as st,a5 as dt,e as ut,a6 as ct,a7 as pt,a8 as yt,a9 as ft,aa as mt,ab as kt,ac as _t}from"./icons-DP3uiYxy.js";import le from"./index-DHanQHO0.js";import"./KeyCode-D63Tfrq7.js";import"./omit-DwzYRzWV.js";import"./pickAttrs-BSGULyIL.js";import"./initDefaultProps-DzrCDb3j.js";import"./motion-BQERVnE3.js";import"./raf-Deuc0E8-.js";import"./index-tyWABqp9.js";import"./index-CMGLpstm.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning--rwFDBhx.js";import"./compact-item-W2VC0tcy.js";import"./createContext-DceVsgnZ.js";import"./Compact-BuuMj7K1.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-BEKwPWt5.js";import"./zoom-7UfQtTPh.js";import"./ActionButton-na9cocmf.js";import"./vnode-BSp2KYcj.js";const gt=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,T={notifications:P([]),unreadCount:P(0)};function G(i){if(i&&i.ok===!1)throw new Error(i.error||"notification handler failed");return i?.result??i}function re(){const i=H();async function p({limit:o=50,offset:s=0,isRead:f}={}){if(!N().isEmbedded)return T.notifications.value=[],T.unreadCount.value=0,T.notifications.value;const g=await i.sendRaw({type:"notification.list",limit:o,offset:s,isRead:f},15e3),O=G(g);if(O?.success===!1)throw new Error(O.error||"notification.list failed");return T.notifications.value=Array.isArray(O?.notifications)?O.notifications:[],await S(),T.notifications.value}async function S(){if(!N().isEmbedded)return T.unreadCount.value=0,0;const o=await i.sendRaw({type:"notification.unread-count"},1e4),s=G(o);return T.unreadCount.value=Number(s?.count)||0,T.unreadCount.value}async function n(o){if(o==null||o==="")throw new Error("id is required");if(!N().isEmbedded)return;const s=await i.sendRaw({type:"notification.mark-read",id:o},1e4),f=G(s);if(f?.success===!1)throw new Error(f.error||"notification.mark-read failed");const g=T.notifications.value.find(O=>O.id===o);g&&(g.is_read=1),await S()}async function _(){if(!N().isEmbedded)return;const o=await i.sendRaw({type:"notification.mark-all-read"},1e4),s=G(o);if(s?.success===!1)throw new Error(s.error||"notification.mark-all-read failed");for(const f of T.notifications.value)f.is_read=1;T.unreadCount.value=0}async function h(o,s=""){if(!N().isEmbedded)throw new Error("桌面通知仅在嵌入式 web-shell 中可用");const f=await i.sendRaw({type:"notification.send-desktop",title:o,body:s},1e4),g=G(f);if(g?.success===!1)throw new Error(g.error||"notification.send-desktop failed")}return{notifications:v(()=>T.notifications.value),unreadCount:v(()=>T.unreadCount.value),refresh:p,refreshUnreadCount:S,markRead:n,markAllRead:_,sendDesktop:h}}const Ot={__name:"NotificationBell",setup(i,{expose:p}){p();const S=P(!1),n=P("all"),_=P(!1),{notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:g}=re();function O(){j()}z(()=>{window.addEventListener("cc:open-notification-drawer",O)}),$(()=>{window.removeEventListener("cc:open-notification-drawer",O)});const M=v(()=>n.value==="unread"?h.value.filter(u=>!u.is_read):h.value);async function C(){if(N().isEmbedded){_.value=!0;try{await s({limit:100})}catch{}finally{_.value=!1}}}async function j(){S.value=!0,await C()}async function D(u){if(!u.is_read)try{await f(u.id)}catch{}}async function r(){try{await g()}catch(u){console.warn("[NotificationBell] markAllRead failed:",u?.message||u)}}function w(u){if(!u)return"";const b=typeof u=="string"?Date.parse(u):Number(u);if(!Number.isFinite(b))return String(u);const R=Date.now()-b,U=6e4,K=60*U,F=24*K;return R<U?"刚刚":R<K?`${Math.floor(R/U)} 分钟前`:R<F?`${Math.floor(R/K)} 小时前`:new Date(b).toLocaleDateString()}const B={visible:S,filter:n,loading:_,notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:g,_onOpenEvent:O,filtered:M,refreshList:C,onOpen:j,onItemClick:D,onMarkAllRead:r,formatTime:w,ref:P,computed:v,onMounted:z,onUnmounted:$,get Empty(){return ke},get BellOutlined(){return de},get ReloadOutlined(){return ge},get useNotifications(){return re},get useShellMode(){return N}};return Object.defineProperty(B,"__isScriptSetup",{enumerable:!1,value:!0}),B}},ht={class:"notif-toolbar"},bt={class:"notif-body"},wt={key:2,class:"notif-list"},vt=["onClick"],Lt={class:"notif-row"},St={class:"notif-title"},Ct={class:"notif-time"},Et={key:0,class:"notif-message"};function Tt(i,p,S,n,_,h){const o=k("a-badge"),s=k("a-tooltip"),f=k("a-radio-button"),g=k("a-radio-group"),O=k("a-space"),M=k("a-button"),C=k("a-empty"),j=k("a-spin"),D=k("a-drawer");return y(),L(I,null,[e(s,{title:"通知"},{default:t(()=>[e(o,{count:n.unreadCount,"overflow-count":99,offset:[-4,4]},{default:t(()=>[d("button",{type:"button",class:"notif-bell-btn","aria-label":"通知",onClick:n.onOpen},[e(n.BellOutlined)])]),_:1},8,["count"])]),_:1}),e(D,{open:n.visible,"onUpdate:open":p[1]||(p[1]=r=>n.visible=r),title:"通知中心",placement:"right",width:400,"body-style":{padding:0}},{default:t(()=>[d("div",ht,[e(O,null,{default:t(()=>[e(g,{value:n.filter,"onUpdate:value":p[0]||(p[0]=r=>n.filter=r),size:"small","button-style":"solid"},{default:t(()=>[e(f,{value:"all"},{default:t(()=>[l("全部 ("+a(n.notifications.length)+")",1)]),_:1}),e(f,{value:"unread"},{default:t(()=>[l("未读 ("+a(n.unreadCount)+")",1)]),_:1})]),_:1},8,["value"])]),_:1}),e(O,null,{default:t(()=>[e(M,{size:"small",loading:n.loading,onClick:n.refreshList},{icon:t(()=>[e(n.ReloadOutlined)]),_:1},8,["loading"]),e(M,{size:"small",disabled:n.unreadCount===0,onClick:n.onMarkAllRead},{default:t(()=>[...p[2]||(p[2]=[l(" 全部已读 ",-1)])]),_:1},8,["disabled"])]),_:1})]),d("div",bt,[!n.loading&&n.filtered.length===0?(y(),A(C,{key:0,description:"暂无通知",image:n.Empty.PRESENTED_IMAGE_SIMPLE,style:{padding:"60px 0"}},null,8,["image"])):n.loading?(y(),A(j,{key:1,style:{display:"block",padding:"60px"}})):(y(),L("ul",wt,[(y(!0),L(I,null,se(n.filtered,r=>(y(),L("li",{key:r.id,class:W(["notif-item",{unread:!r.is_read}]),onClick:w=>n.onItemClick(r)},[d("div",Lt,[d("div",St,a(r.title||r.message||"(无标题)"),1),d("span",Ct,a(n.formatTime(r.created_at)),1)]),r.message&&r.title?(y(),L("div",Et,a(r.message),1)):m("v-if",!0)],10,vt))),128))]))])]),_:1},8,["open"])],64)}const Bt=Z(Ot,[["render",Tt],["__scopeId","data-v-8c1554dd"],["__file","/tmp/cc-web-panel-1uwrpu/repo/packages/web-panel/src/components/NotificationBell.vue"]]),At={__name:"MobileBridgeHeaderStatus",setup(i,{expose:p}){p();function S(r){if(!r)return[];try{return JSON.parse(r)}catch{}const w=String(r).split(`
2
+ `),B=w.findIndex(u=>{const b=u.trim();if(!b)return!1;const R=b[0];if(R!=="["&&R!=="{")return!1;if(b.length===1)return!0;const U=b[1];return!(U>="A"&&U<="Z"||U>="a"&&U<="z")});if(B<0)return[];for(let u=w.length-1;u>=B;u--){const b=w[u].trim();if(/^[\]\}]/.test(b)&&!/^[\]\}][A-Za-z]/.test(b))try{return JSON.parse(w.slice(B,u+1).join(`
3
+ `))}catch{return[]}}return[]}const n=J(),_=H(),h=P([]);let o=null;const s=v(()=>h.value.length),f=v(()=>h.value.filter(r=>M(r)).length),g=v(()=>s.value===0?"var(--text-muted, #999)":"#52c41a"),O=v(()=>s.value===0?"尚未配对任何手机 — 点击进入配对":`已配对 ${s.value} 台手机 — 点击进入管理`);function M(r){if(!r)return!1;if(typeof r.online=="boolean")return r.online;const w=(r.status||"").toLowerCase();return w==="online"||w==="connected"||w==="active"||w==="paired"}async function C(){if(_.status==="connected")try{const{output:r}=await _.execute("p2p devices --type mobile --json",1e4);h.value=S(r)||[]}catch{}}function j(){n.push("/mobile-bridge")}z(()=>{C(),o=setInterval(C,5e3)}),ee(()=>{o&&(clearInterval(o),o=null)});const D={parseJsonOutput:S,router:n,ws:_,devices:h,get pollTimer(){return o},set pollTimer(r){o=r},totalCount:s,onlineCount:f,iconColor:g,tooltip:O,isOnline:M,refresh:C,onClick:j,ref:P,computed:v,onMounted:z,onBeforeUnmount:ee,get useRouter(){return J},get MobileOutlined(){return ue},get useWsStore(){return H}};return Object.defineProperty(D,"__isScriptSetup",{enumerable:!1,value:!0}),D}},Mt={key:0,class:"mbh-count"};function Rt(i,p,S,n,_,h){const o=k("a-badge"),s=k("a-tooltip");return y(),A(s,{title:n.tooltip},{default:t(()=>[e(o,{count:n.totalCount,"show-zero":!1,"overflow-count":9,offset:[-2,4]},{default:t(()=>[d("button",{type:"button",class:W(["mbh-btn",{"mbh-btn--active":n.totalCount>0}]),onClick:n.onClick},[e(n.MobileOutlined,{style:fe({color:n.iconColor,fontSize:"14px"})},null,8,["style"]),n.totalCount>0?(y(),L("span",Mt,a(n.totalCount),1)):m("v-if",!0)],2)]),_:1},8,["count"])]),_:1},8,["title"])}const Pt=Z(At,[["render",Rt],["__scopeId","data-v-e8ef01d6"],["__file","/tmp/cc-web-panel-1uwrpu/repo/packages/web-panel/src/components/MobileBridgeHeaderStatus.vue"]]),Y="cc.web-panel.sidebar.openKeys",jt={__name:"AppLayout",setup(i,{expose:p}){p();const S=J(),n=te(),_=H(),h=oe(),{t:o}=ie(),s=N(),f=P(!1),g=window.__CC_CONFIG__||{},O=v(()=>g.mode==="project"),M="v5.0.3.130",C=v(()=>h.current),j=v(()=>h.config.vars["--menu-mode"]),D=v(()=>{const c=n.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[c]||c]}),r=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function w(){try{const c=localStorage.getItem(Y);if(c){const E=JSON.parse(c);if(Array.isArray(E))return E.filter(q=>r.includes(q))}}catch{}return[...r]}const B=P(w());ne(B,c=>{try{localStorage.setItem(Y,JSON.stringify(c))}catch{}},{deep:!0});const u=v(()=>_.status),b=v(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[_.status]||"default"),R=v(()=>{const c=`appLayout.footerStatus.${_.status}`,E=o(c);return E===c?o("appLayout.footerStatus.unknown"):E});function U(c){h.setTheme(c)}const{current:K,supported:F,setLocale:Q}=ae();function ce(){const c=F[(F.indexOf(K.value)+1)%F.length];Q(c)}async function X(c){try{const E=await _.sendRaw({type:"window.open",role:c},1e4);if(E?.ok===!1){V.error(`打开失败:${E.error||"未知"}`);return}const q=E?.result??E;q?.reason==="role_reserved"?V.warning("该窗口角色被保留"):q?.reason}catch(E){V.error(`打开桌面窗口失败:${E.message||E}`)}}async function pe(){le.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const c=await _.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(c?.ok===!1)throw new Error(c.error||"shell.switch returned failure");V.loading({content:"正在重启…",duration:0})}catch(c){const E=c instanceof Error?c.message:String(c);V.error("切换失败:"+E)}}})}function ye({key:c}){if(typeof c=="string"&&c.startsWith("desktop:")){X(c);return}S.push({mcp:"/mcp"}[c]||`/${c}`)}z(()=>_.connect());const x={router:S,route:n,ws:_,themeStore:h,t:o,shellMode:s,collapsed:f,cfg:g,isProject:O,PRODUCT_VERSION:M,currentTheme:C,menuTheme:j,selectedKeys:D,ALL_GROUP_KEYS:r,OPEN_KEYS_LS:Y,loadOpenKeys:w,openKeys:B,wsStatus:u,statusBadge:b,statusText:R,setTheme:U,locale:K,SUPPORTED_LOCALES:F,setLocale:Q,toggleLocale:ce,openDesktopWindow:X,switchToDesktopShell:pe,onMenuClick:ye,ref:P,computed:v,onMounted:z,watch:ne,get useRouter(){return J},get useRoute(){return te},get DashboardOutlined(){return _t},get MessageOutlined(){return kt},get RocketOutlined(){return mt},get AppstoreOutlined(){return ft},get ApiOutlined(){return yt},get FolderOutlined(){return pt},get GlobalOutlined(){return ct},get InfoCircleOutlined(){return ut},get ControlOutlined(){return dt},get FileTextOutlined(){return st},get CloudServerOutlined(){return rt},get BookOutlined(){return lt},get BranchesOutlined(){return at},get ClockCircleOutlined(){return it},get ThunderboltOutlined(){return ot},get ApartmentOutlined(){return nt},get SafetyCertificateOutlined(){return tt},get LockOutlined(){return et},get WifiOutlined(){return $e},get CodeOutlined(){return xe},get ProjectOutlined(){return Xe},get WalletOutlined(){return Qe},get TeamOutlined(){return Ze},get BarChartOutlined(){return Ye},get BlockOutlined(){return Je},get CloudUploadOutlined(){return qe},get ReadOutlined(){return He},get KeyOutlined(){return Ge},get VideoCameraOutlined(){return ze},get ShareAltOutlined(){return We},get IdcardOutlined(){return Ve},get UsergroupAddOutlined(){return Fe},get ShoppingOutlined(){return Ke},get SwapOutlined(){return Ie},get AlertOutlined(){return Ne},get SafetyOutlined(){return Ue},get ExperimentOutlined(){return De},get DeploymentUnitOutlined(){return je},get BulbOutlined(){return Pe},get BankOutlined(){return Re},get PartitionOutlined(){return Me},get AuditOutlined(){return Ae},get FileSearchOutlined(){return Be},get TrophyOutlined(){return Te},get FireOutlined(){return Ee},get SearchOutlined(){return Ce},get NumberOutlined(){return Se},get ClusterOutlined(){return Le},get SoundOutlined(){return ve},get DesktopOutlined(){return we},get BellOutlined(){return de},get SyncOutlined(){return be},get MobileOutlined(){return ue},get DatabaseOutlined(){return he},get UnorderedListOutlined(){return Oe},get message(){return V},get Modal(){return le},get useWsStore(){return H},get useThemeStore(){return oe},get THEMES(){return _e},get logoSrc(){return gt},get useShellMode(){return N},get useI18n(){return ie},get useLocale(){return ae},NotificationBell:Bt,MobileBridgeHeaderStatus:Pt};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},Dt=["src"],Ut={key:0,class:"logo-text"},Nt={key:0,class:"mode-banner project"},It={class:"banner-info"},Kt={class:"banner-name"},Ft={class:"banner-sub"},Vt={key:1,class:"mode-banner global"},Wt={class:"banner-name"},zt=["title"],Gt={class:"group-label"},Ht={class:"group-label"},qt={class:"group-label"},Jt={class:"group-label"},Yt={class:"group-label"},Zt={class:"group-label"},Qt={class:"group-label"},Xt={class:"group-label"},xt={class:"group-label"},$t={key:0,class:"footer-text"},en={class:"header-left"},tn={class:"header-right"},nn={class:"theme-switcher"},on=["data-theme-key","onClick"],an=["data-locale"],ln={class:"lang-switch-label"},rn={class:"version-tag"};function sn(i,p,S,n,_,h){const o=k("a-menu-item"),s=k("a-sub-menu"),f=k("a-menu-divider"),g=k("a-menu"),O=k("a-badge"),M=k("a-layout-sider"),C=k("a-tooltip"),j=k("a-tag"),D=k("a-layout-header"),r=k("router-view"),w=k("a-layout-content"),B=k("a-layout");return y(),A(B,{class:"app-root"},{default:t(()=>[m(" ── Sidebar ─────────────────────────────────────────────────── "),e(M,{collapsed:n.collapsed,"onUpdate:collapsed":p[2]||(p[2]=u=>n.collapsed=u),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[m(" Logo "),d("div",{class:W(["logo",{collapsed:n.collapsed}])},[d("img",{src:n.logoSrc,alt:"ChainlessChain",class:"logo-icon"},null,8,Dt),n.collapsed?m("v-if",!0):(y(),L("span",Ut,"ChainlessChain"))],2),m(" Mode banner "),n.collapsed?(y(),L("div",{key:1,class:"mode-icon-sm",title:n.isProject?n.cfg.projectName:i.$t("appLayout.scope.global")},[n.isProject?(y(),A(n.FolderOutlined,{key:0,style:{color:"#1677ff"}})):(y(),A(n.GlobalOutlined,{key:1,style:{color:"#722ed1"}}))],8,zt)):(y(),L(I,{key:0},[n.isProject?(y(),L("div",Nt,[e(n.FolderOutlined,{class:"banner-icon"}),d("div",It,[d("div",Kt,a(n.cfg.projectName||i.$t("appLayout.scope.fallbackProject")),1),d("div",Ft,a(i.$t("appLayout.scope.projectPanel")),1)])])):(y(),L("div",Vt,[e(n.GlobalOutlined,{class:"banner-icon"}),d("span",Wt,a(i.$t("appLayout.scope.global")),1)]))],64)),m(" Navigation "),e(g,{selectedKeys:n.selectedKeys,"onUpdate:selectedKeys":p[0]||(p[0]=u=>n.selectedKeys=u),openKeys:n.openKeys,"onUpdate:openKeys":p[1]||(p[1]=u=>n.openKeys=u),theme:n.menuTheme,mode:"inline","inline-collapsed":n.collapsed,class:"side-menu",onClick:n.onMenuClick},{default:t(()=>[n.collapsed?(y(),L(I,{key:1},[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),n.shellMode.isEmbedded?(y(),L(I,{key:0},[e(f,{class:"divider-sm"}),e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),_:1})],64)):m("v-if",!0)],64)):(y(),L(I,{key:0},[e(s,{key:"g-overview"},{title:t(()=>[d("span",Gt,a(i.$t("appLayout.groups.overview")),1)]),default:t(()=>[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.dashboard")),1)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.chat")),1)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.quickAsk")),1)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cowork")),1)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.services")),1)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.aiops")),1)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tokens")),1)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.logs")),1)]),_:1})]),_:1}),e(s,{key:"g-config"},{title:t(()=>[d("span",Ht,a(i.$t("appLayout.groups.config")),1)]),default:t(()=>[e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.skills")),1)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.providers")),1)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mcp")),1)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projectSettings")),1)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.speechSettings")),1)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notificationSettings")),1)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.syncSettings")),1)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.nlprog")),1)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.codegen")),1)]),_:1})]),_:1}),e(s,{key:"g-data"},{title:t(()=>[d("span",qt,a(i.$t("appLayout.groups.data")),1)]),default:t(()=>[e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notes")),1)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.search")),1)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.memory")),1)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.knowledge")),1)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),default:t(()=>[p[3]||(p[3]=l("个人数据中台",-1))]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),default:t(()=>[p[4]||(p[4]=l("数据浏览器",-1))]),_:1}),e(o,{key:"family-guard"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[p[5]||(p[5]=l("家庭守护",-1))]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.marketplace")),1)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cron")),1)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.workflow")),1)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.pipeline")),1)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tasks")),1)]),_:1})]),_:1}),e(s,{key:"g-advanced"},{title:t(()=>[d("span",Jt,a(i.$t("appLayout.groups.advanced")),1)]),default:t(()=>[e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.security")),1)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.ukeySign")),1)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.trust")),1)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.audit")),1)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtc")),1)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtcAudit","MTC 审计")),1)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.multisig","M-of-N 多签")),1)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.did")),1)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.permissions")),1)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.p2p")),1)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileBridge","移动桥")),1)]),_:1}),e(o,{key:"mobile-projects"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileProjects","手机项目 (v0.2)")),1)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.terminal","远程终端")),1)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.backup")),1)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.git")),1)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projects")),1)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.crosschain")),1)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.compliance")),1)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.privacy")),1)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.inference")),1)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.federation")),1)]),_:1})]),_:1}),e(s,{key:"g-enterprise"},{title:t(()=>[d("span",Yt,a(i.$t("appLayout.groups.enterprise")),1)]),default:t(()=>[e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.wallet")),1)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.organization")),1)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tenant")),1)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.sla")),1)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.analytics")),1)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.templates")),1)]),_:1})]),_:1}),e(s,{key:"g-social"},{title:t(()=>[d("span",Zt,a(i.$t("appLayout.groups.social")),1)]),default:t(()=>[e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.community")),1)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.governance")),1)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.reputation")),1)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.recommend")),1)]),_:1})]),_:1}),e(s,{key:"g-media"},{title:t(()=>[d("span",Qt,a(i.$t("appLayout.groups.media")),1)]),default:t(()=>[e(o,{key:"video"},{icon:t(()=>[e(n.VideoCameraOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.video")),1)]),_:1})]),_:1}),e(s,{key:"g-extension"},{title:t(()=>[d("span",Xt,a(i.$t("appLayout.groups.extension")),1)]),default:t(()=>[e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.rssfeed")),1)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.webauthn")),1)]),_:1})]),_:1}),m(` Desktop-only group — only shown in the embedded web-shell. Each
4
4
  click opens a new BrowserWindow loading the V5/V6 desktop
5
- renderer (full electronAPI / UKey / FS / settings live there). `),n.shellMode.isEmbedded?(p(),A(s,{key:"g-desktop"},{title:t(()=>[d("span",xt,a(i.$t("appLayout.groups.desktop")),1)]),default:t(()=>[e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopHardware")),1)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopBackup")),1)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopLlmTest")),1)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopSettings")),1)]),_:1})]),_:1})):m("v-if",!0)],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),m(" Connection status "),d("div",{class:W(["sidebar-footer",{collapsed:n.collapsed}])},[e(O,{status:n.statusBadge},null,8,["status"]),n.collapsed?m("v-if",!0):(p(),L("span",$t,a(n.statusText),1))],2)]),_:1},8,["collapsed"]),m(" ── Main area ───────────────────────────────────────────────── "),e(B,{class:"main-area"},{default:t(()=>[m(" Header "),e(j,{class:"app-header"},{default:t(()=>[d("div",en,[d("div",{class:W(["scope-tag",n.isProject?"project":"global"])},[(p(),A(me(n.isProject?n.FolderOutlined:n.GlobalOutlined))),d("span",null,a(n.isProject?n.cfg.projectName||i.$t("appLayout.scope.fallbackProject"):i.$t("appLayout.scope.global")),1),n.isProject&&n.cfg.projectRoot?(p(),A(C,{key:0,title:n.cfg.projectRoot},{default:t(()=>[e(n.InfoCircleOutlined,{class:"info-icon"})]),_:1},8,["title"])):m("v-if",!0)],2)]),d("div",tn,[m(" Theme switcher "),d("div",nn,[(p(!0),L(I,null,se(n.THEMES,(c,b)=>(p(),A(C,{key:b,title:c.label},{default:t(()=>[d("button",{class:W(["theme-btn",{active:n.currentTheme===b}]),"data-theme-key":b,onClick:M=>n.setTheme(b)},a(c.icon),11,on)]),_:2},1032,["title"]))),128))]),m(` Language switcher (incremental i18n; only owns its own
5
+ renderer (full electronAPI / UKey / FS / settings live there). `),n.shellMode.isEmbedded?(y(),A(s,{key:"g-desktop"},{title:t(()=>[d("span",xt,a(i.$t("appLayout.groups.desktop")),1)]),default:t(()=>[e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopHardware")),1)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopBackup")),1)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopLlmTest")),1)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopSettings")),1)]),_:1})]),_:1})):m("v-if",!0)],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),m(" Connection status "),d("div",{class:W(["sidebar-footer",{collapsed:n.collapsed}])},[e(O,{status:n.statusBadge},null,8,["status"]),n.collapsed?m("v-if",!0):(y(),L("span",$t,a(n.statusText),1))],2)]),_:1},8,["collapsed"]),m(" ── Main area ───────────────────────────────────────────────── "),e(B,{class:"main-area"},{default:t(()=>[m(" Header "),e(D,{class:"app-header"},{default:t(()=>[d("div",en,[d("div",{class:W(["scope-tag",n.isProject?"project":"global"])},[(y(),A(me(n.isProject?n.FolderOutlined:n.GlobalOutlined))),d("span",null,a(n.isProject?n.cfg.projectName||i.$t("appLayout.scope.fallbackProject"):i.$t("appLayout.scope.global")),1),n.isProject&&n.cfg.projectRoot?(y(),A(C,{key:0,title:n.cfg.projectRoot},{default:t(()=>[e(n.InfoCircleOutlined,{class:"info-icon"})]),_:1},8,["title"])):m("v-if",!0)],2)]),d("div",tn,[m(" Theme switcher "),d("div",nn,[(y(!0),L(I,null,se(n.THEMES,(u,b)=>(y(),A(C,{key:b,title:u.label},{default:t(()=>[d("button",{class:W(["theme-btn",{active:n.currentTheme===b}]),"data-theme-key":b,onClick:R=>n.setTheme(b)},a(u.icon),11,on)]),_:2},1032,["title"]))),128))]),m(` Language switcher (incremental i18n; only owns its own
6
6
  labels + ErrorBoundary + common.* today). `),e(C,{title:i.$t("language.label")},{default:t(()=>[d("button",{class:"lang-switch-btn","data-locale":n.locale,onClick:n.toggleLocale},[e(n.GlobalOutlined,{class:"lang-switch-icon"}),d("span",ln,a(i.$t("language.switch")),1)],8,an)]),_:1},8,["title"]),m(" Mobile bridge status — pill showing online/total paired phones.\n Click to /mobile-bridge. Polls every 5s via `p2p devices` CLI. "),e(n.MobileBridgeHeaderStatus),m(` Notification bell — only meaningful in the embedded web-shell
7
7
  where notification.* WS topics are registered. In pure-browser
8
8
  mode the composable returns empty / no-op shapes, so the badge
9
- just shows 0 and the drawer is empty. `),n.shellMode.isEmbedded?(p(),A(n.NotificationBell,{key:0})):m("v-if",!0),d("span",rn,a(n.PRODUCT_VERSION),1),m(" Phase 1.6 symmetric switch: only inside the embedded\n desktop shell does this make sense (no-op in `cc serve`\n browser mode where there's no V5/V6 to fall back to). "),n.shellMode.isEmbedded?(p(),A(C,{key:1,title:i.$t("appLayout.shellSwitch")},{default:t(()=>[d("button",{type:"button",class:"shell-switch-btn",onClick:n.switchToDesktopShell},[e(n.DesktopOutlined)])]),_:1},8,["title"])):m("v-if",!0),e(P,{color:n.wsStatus==="connected"?"green":n.wsStatus==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(a(n.wsStatus==="connected"?i.$t("appLayout.wsStatus.connected"):n.wsStatus==="connecting"?i.$t("appLayout.wsStatus.connecting"):i.$t("appLayout.wsStatus.disconnected")),1)]),_:1},8,["color"])])]),_:1}),m(" Content "),e(w,{class:"page-content"},{default:t(()=>[e(r)]),_:1})]),_:1})]),_:1})}const Rn=Z(Pt,[["render",sn],["__scopeId","data-v-6f6437fc"],["__file","/tmp/cc-web-panel-UUgUnt/repo/packages/web-panel/src/components/AppLayout.vue"]]);export{Rn as default};
9
+ just shows 0 and the drawer is empty. `),n.shellMode.isEmbedded?(y(),A(n.NotificationBell,{key:0})):m("v-if",!0),d("span",rn,a(n.PRODUCT_VERSION),1),m(" Phase 1.6 symmetric switch: only inside the embedded\n desktop shell does this make sense (no-op in `cc serve`\n browser mode where there's no V5/V6 to fall back to). "),n.shellMode.isEmbedded?(y(),A(C,{key:1,title:i.$t("appLayout.shellSwitch")},{default:t(()=>[d("button",{type:"button",class:"shell-switch-btn",onClick:n.switchToDesktopShell},[e(n.DesktopOutlined)])]),_:1},8,["title"])):m("v-if",!0),e(j,{color:n.wsStatus==="connected"?"green":n.wsStatus==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(a(n.wsStatus==="connected"?i.$t("appLayout.wsStatus.connected"):n.wsStatus==="connecting"?i.$t("appLayout.wsStatus.connecting"):i.$t("appLayout.wsStatus.disconnected")),1)]),_:1},8,["color"])])]),_:1}),m(" Content "),e(w,{class:"page-content"},{default:t(()=>[e(r)]),_:1})]),_:1})]),_:1})}const Pn=Z(jt,[["render",sn],["__scopeId","data-v-6f6437fc"],["__file","/tmp/cc-web-panel-1uwrpu/repo/packages/web-panel/src/components/AppLayout.vue"]]);export{Pn as default};
@@ -0,0 +1 @@
1
+ import{I as m,J as f,U as b,R as c,c as o,K as e,V as y,S as h,o as tt,b as V,r as x,P as d,Q as _,F as T,Z as B,$ as ht}from"./vendor-BvqAck49.js";import{s as xt,t as nt,_ as Lt,b as et,u as at,d as A}from"./index-BWcCyH6-.js";import{u as ot}from"./useFs-n24jutw5.js";import{s as St,am as Ct,f as Tt,d as Et,m as Ot,az as At,R as wt}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const it=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),st=Object.freeze(["low","medium","high","critical"]);function q(n,s=0){return typeof n=="number"&&Number.isFinite(n)?n:s}function Q(n){if(!n)return{noDb:!1,error:""};const s=xt(n),l=/Database not available/i.test(s);return{noDb:l,error:l?"Database not available":""}}function Rt(n,s=0){if(!n||typeof n!="object")return null;const l=n.id||"";if(!l)return null;let t=n.details;if(typeof t=="string"&&t)try{t=JSON.parse(t)}catch{}const L=typeof n.success=="boolean"?n.success:n.success===1||n.success==="1"||n.success===!0,M=n.audit_mtc_event_id??n.auditMtcEventId??null;return{key:l,id:l,eventType:String(n.event_type??n.eventType??"").toLowerCase(),operation:String(n.operation||""),actor:n.actor??"",target:n.target??"",details:t??null,riskLevel:String(n.risk_level??n.riskLevel??"low").toLowerCase(),ipAddress:n.ip_address??n.ipAddress??"",userAgent:n.user_agent??n.userAgent??"",success:L,errorMessage:n.error_message??n.errorMessage??"",createdAt:n.created_at??n.createdAt??"",auditMtcEventId:M,_idx:s}}function rt(n){const s=nt(n);return Array.isArray(s)?s.map(Rt).filter(Boolean):[]}const zt={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function lt(n){const s=JSON.parse(JSON.stringify(zt));for(const t of it)s.byEventType[t]=0;for(const t of st)s.byRiskLevel[t]=0;const l=nt(n);if(!l||typeof l!="object"||Array.isArray(l))return s;if(s.total=q(l.total,0),s.failures=q(l.failures,0),s.highRisk=q(l.highRisk,0),l.byEventType&&typeof l.byEventType=="object")for(const[t,L]of Object.entries(l.byEventType))typeof L=="number"&&Number.isFinite(L)&&(s.byEventType[t]=L);if(l.byRiskLevel&&typeof l.byRiskLevel=="object")for(const[t,L]of Object.entries(l.byRiskLevel))typeof L=="number"&&Number.isFinite(L)&&(s.byRiskLevel[t]=L);return s}function It(n){return!n||!n.auditMtcEventId?"none":"tracked"}function Mt(n){if(n==null||n==="")return"—";const s=String(n),l=s.includes(" ")&&!s.includes("T")?s.replace(" ","T")+"Z":s,t=new Date(l);return isNaN(t.getTime())?s:t.toLocaleString("zh-CN",{hour12:!1})}const Dt={__name:"Audit",setup(n,{expose:s}){s();const{t:l}=et(),t=at(),L=ot(),M=x(!1),w=x([]),E=x({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),F=x({noDb:!1,error:""}),R=x("events"),S=x(""),p=x(""),O=x(""),v=x(""),N=x(!1),z=x(!1),j=x(null),U=V(()=>[{title:l("audit.logColumns.createdAt"),key:"createdAt",width:"160px"},{title:l("audit.logColumns.eventType"),key:"eventType",width:"110px"},{title:l("audit.logColumns.operation"),key:"operation"},{title:l("audit.logColumns.actor"),key:"actor",width:"140px"},{title:l("audit.logColumns.target"),key:"target",width:"180px"},{title:l("audit.logColumns.riskLevel"),key:"riskLevel",width:"90px"},{title:l("audit.logColumns.success"),key:"success",width:"80px"},{title:l("audit.logColumns.mtc"),key:"mtc",width:"110px"},{title:l("audit.logColumns.action"),key:"action",width:"80px"}]),I=x({});function D(a){return a.auditMtcEventId&&I.value[a.id]||null}function J(a){const i=D(a);return i?i.state==="staging"?l("audit.mtc.stagingLabel"):i.state==="batched"?l("audit.mtc.batchedLabel",{batchId:i.batchId||"?"}):l("audit.mtc.unknownLabel"):l("audit.mtc.signedNotChecked")}function P(a){const i=D(a);return i?i.state==="staging"?"orange":i.state==="batched"?"green":"default":"blue"}function W(a){if(!a.auditMtcEventId)return"";const i=D(a),u=l("audit.mtc.tooltipBase",{id:a.auditMtcEventId});return i?i.state==="staging"?l("audit.mtc.tooltipStaging",{base:u}):i.state==="batched"?l("audit.mtc.tooltipBatched",{base:u,batchId:i.batchId,treeHead:i.treeHeadId||""}):u:l("audit.mtc.tooltipNotChecked",{base:u})}async function k(a){if(!a.auditMtcEventId)return;const i=a.auditMtcEventId.replace(/"/g,'\\"');try{const u=await t.execute(`audit mtc reconcile-check "${i}" --json`,8e3);let C;try{C=JSON.parse(u.output.trim())}catch{const $=u.output.match(/\{[\s\S]*\}/);C=$?JSON.parse($[0]):null}if(!C){A.warning(l("audit.mtc.noJson"));return}const kt=C.found?{state:"batched",batchId:C.batchId,treeHeadId:C.treeHeadId}:C.staging?{state:"staging"}:{state:"unknown"};I.value={...I.value,[a.id]:kt}}catch(u){A.error(l("audit.mtc.checkFailed",{err:u?.message||u}))}}const Y=V(()=>E.value.total?(E.value.total-E.value.failures)/E.value.total*100:100),H=V(()=>!!(p.value||O.value||v.value||N.value)),r=V(()=>{let a=w.value;if(O.value&&(a=a.filter(i=>i.eventType===O.value)),v.value&&(a=a.filter(i=>i.riskLevel===v.value)),N.value&&(a=a.filter(i=>!i.success)),p.value){const i=p.value.toLowerCase();a=a.filter(u=>(u.operation||"").toLowerCase().includes(i)||(u.actor||"").toLowerCase().includes(i)||(u.target||"").toLowerCase().includes(i))}return a});function g(a){const i=`audit.type.${a}`,u=l(i);return u===i?a:u}function Z(a){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[a]||"default"}function ct(a){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[a]||"#888"}function dt(a){const i=`audit.risk.${a}`,u=l(i);return u===i?a:u}function ut(a){return{low:"default",medium:"gold",high:"orange",critical:"red"}[a]||"default"}function ft(a){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[a]||"#888"}function yt(a,i){return i?Math.round(a/i*100):0}function gt(a,i){return a?a.length<=i?a:a.slice(0,i)+"…":""}function _t(a){if(typeof a=="string")return a;try{return JSON.stringify(a,null,2)}catch{return String(a)}}let K=null;function mt(){clearTimeout(K),K=setTimeout(()=>{p.value=S.value.trim()},300)}function bt(){p.value=S.value.trim()}async function G(){M.value=!0,F.value={noDb:!1,error:""};try{const[a,i]=await Promise.all([t.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),t.execute("audit stats --json",8e3).catch(()=>({output:""}))]),u=[a,i].map(C=>Q(C.output)).find(C=>C.noDb);u&&(F.value=u),w.value=rt(a.output),E.value=lt(i.output)}catch(a){A.error(l("audit.messages.loadFailed",{err:a?.message||a}))}finally{M.value=!1}}function vt(a){j.value=a,z.value=!0}async function pt(){try{const{output:a}=await t.execute("audit export -f json -n 10000",2e4);if(Q(a).noDb){A.error(l("audit.messages.needInit"));return}if(!a.trim().startsWith("[")){A.error(l("audit.messages.exportFailed",{err:a.slice(0,120)}));return}const u=await L.saveText(a.trim(),{defaultPath:`audit-${new Date().toISOString().slice(0,10)}.json`,filters:[{name:"JSON",extensions:["json"]}]});if(u.canceled)return;A.success(u.path?l("audit.messages.exportOk",{path:u.path}):l("audit.messages.exportOkDefault"))}catch(a){A.error(l("audit.messages.exportFailed",{err:a?.message||a}))}}tt(G);const X={t:l,ws:t,fs:L,loading:M,logs:w,stats:E,errorState:F,activeTab:R,searchInput:S,searchTerm:p,typeFilter:O,riskFilter:v,failuresOnly:N,showDetailsModal:z,currentLog:j,logColumns:U,mtcStatusCache:I,getMtcStatusEntry:D,getMtcLabel:J,getMtcColor:P,getMtcTooltip:W,checkMtcStatus:k,successRate:Y,hasFilters:H,filteredLogs:r,typeLabel:g,typeColor:Z,typeBarColor:ct,riskLabel:dt,riskColor:ut,riskBarColor:ft,pctOfTotal:yt,truncate:gt,formatDetails:_t,get searchDebounce(){return K},set searchDebounce(a){K=a},onSearchInput:mt,runSearch:bt,loadAll:G,viewLogDetails:vt,exportJson:pt,ref:x,computed:V,onMounted:tt,get useI18n(){return et},get ReloadOutlined(){return wt},get DownloadOutlined(){return At},get FileSearchOutlined(){return Ot},get CloseCircleOutlined(){return Et},get CheckCircleOutlined(){return Tt},get WarningOutlined(){return Ct},get AlertOutlined(){return St},get message(){return A},get useWsStore(){return at},get useFs(){return ot},get parseLogs(){return rt},get parseStats(){return lt},get detectAuditError(){return Q},get formatAuditTime(){return Mt},get classifyMtcStatus(){return It},get EVENT_TYPES(){return it},get RISK_LEVELS(){return st}};return Object.defineProperty(X,"__isScriptSetup",{enumerable:!1,value:!0}),X}},Ft={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Nt={class:"page-title"},jt={class:"page-sub"},Vt={class:"type-name"},Bt={class:"type-count"},Jt={class:"filter-bar"},Pt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Kt={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},Ut={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Yt={key:1,style:{color:"var(--text-muted)"}},Ht={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Zt={key:1,style:{color:"var(--text-muted)"}},qt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Qt={key:0,style:{"padding-top":"8px"}},Gt={style:{"font-family":"monospace","font-size":"12px"}},Xt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},$t={style:{"font-family":"monospace"}},te={key:0,style:{"font-family":"monospace","font-size":"12px"}},ee={key:1,style:{color:"var(--text-muted)"}},ae={key:0,style:{"font-family":"monospace","font-size":"12px"}},oe={key:1,style:{color:"var(--text-muted)"}},re={style:{"font-family":"monospace","font-size":"12px"}},le={style:{"font-family":"monospace","font-size":"11px"}},ne={style:{color:"#ff4d4f"}},ie={class:"details-pre"};function se(n,s,l,t,L,M){const w=m("a-button"),E=m("a-space"),F=m("a-alert"),R=m("a-statistic"),S=m("a-card"),p=m("a-col"),O=m("a-row"),v=m("a-tag"),N=m("a-input-search"),z=m("a-radio-button"),j=m("a-radio-group"),U=m("a-checkbox"),I=m("a-tooltip"),D=m("a-table"),J=m("a-tab-pane"),P=m("a-progress"),W=m("a-tabs"),k=m("a-descriptions-item"),Y=m("a-descriptions"),H=m("a-modal");return d(),f("div",null,[b("div",Ft,[b("div",null,[b("h2",Nt,c(t.t("audit.title")),1),b("p",jt,c(t.t("audit.subtitle")),1)]),o(E,null,{default:e(()=>[o(w,{loading:t.loading,onClick:t.loadAll},{icon:e(()=>[o(t.ReloadOutlined)]),default:e(()=>[_(" "+c(t.t("audit.refresh")),1)]),_:1},8,["loading"]),o(w,{onClick:t.exportJson},{icon:e(()=>[o(t.DownloadOutlined)]),default:e(()=>[_(" "+c(t.t("audit.exportJson")),1)]),_:1})]),_:1})]),y(" noDb banner "),t.errorState.noDb?(d(),h(F,{key:0,type:"info","show-icon":"",message:t.t("audit.noDb.message"),description:t.t("audit.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("v-if",!0),y(" Stat cards "),o(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:e(()=>[o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.total"),value:t.stats.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:e(()=>[o(t.FileSearchOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.failures"),value:t.stats.failures,"value-style":{color:t.stats.failures>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[o(t.CloseCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.highRisk"),value:t.stats.highRisk,"value-style":{color:t.stats.highRisk>0?"#fa8c16":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[o(t.WarningOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.critical"),value:t.stats.byRiskLevel.critical||0,"value-style":{color:(t.stats.byRiskLevel.critical||0)>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:e(()=>[o(t.AlertOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:24,sm:8,lg:4},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.successRate"),value:t.successRate,suffix:"%",precision:1,"value-style":{color:t.successRate>=95?"#52c41a":t.successRate>=80?"#faad14":"#ff4d4f",fontSize:"20px"}},{prefix:e(()=>[o(t.CheckCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),y(" Event type catalogue "),o(S,{title:t.t("audit.typeCatalogueTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:e(()=>[o(O,{gutter:[12,12]},{default:e(()=>[(d(!0),f(T,null,B(t.EVENT_TYPES,r=>(d(),h(p,{key:r,xs:12,sm:8,lg:3},{default:e(()=>[b("div",{class:"type-pill",style:ht({borderLeftColor:t.typeBarColor(r)})},[o(v,{color:t.typeColor(r),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[_(c(r),1)]),_:2},1032,["color"]),b("div",Vt,c(t.typeLabel(r)),1),b("div",Bt,c(t.stats.byEventType[r]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),y(" Tabs "),o(W,{activeKey:t.activeTab,"onUpdate:activeKey":s[4]||(s[4]=r=>t.activeTab=r),class:"audit-tabs"},{default:e(()=>[y(" ── Events tab ──────────────────────────────────────────── "),o(J,{key:"events",tab:t.t("audit.tabs.events")},{default:e(()=>[b("div",Jt,[o(N,{value:t.searchInput,"onUpdate:value":s[0]||(s[0]=r=>t.searchInput=r),placeholder:t.t("audit.filter.searchPlaceholder"),"allow-clear":"",style:{"max-width":"280px"},onSearch:t.runSearch,onInput:t.onSearchInput},null,8,["value","placeholder"]),o(j,{value:t.typeFilter,"onUpdate:value":s[1]||(s[1]=r=>t.typeFilter=r),size:"small","button-style":"solid"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allTypes")),1)]),_:1}),(d(!0),f(T,null,B(t.EVENT_TYPES,r=>(d(),h(z,{key:r,value:r},{default:e(()=>[_(c(t.typeLabel(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(j,{value:t.riskFilter,"onUpdate:value":s[2]||(s[2]=r=>t.riskFilter=r),size:"small"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allRisks")),1)]),_:1}),(d(!0),f(T,null,B(t.RISK_LEVELS,r=>(d(),h(z,{key:r,value:r},{default:e(()=>[_(c(t.riskLabel(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(U,{checked:t.failuresOnly,"onUpdate:checked":s[3]||(s[3]=r=>t.failuresOnly=r)},{default:e(()=>[_(c(t.t("audit.filter.failuresOnly")),1)]),_:1},8,["checked"])]),o(D,{columns:t.logColumns,"data-source":t.filteredLogs,pagination:{pageSize:20,showTotal:r=>t.t("audit.totals.rows",{count:r})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:r,record:g})=>[r.key==="createdAt"?(d(),f("span",Pt,c(t.formatAuditTime(g.createdAt)),1)):y("v-if",!0),r.key==="eventType"?(d(),h(v,{key:1,color:t.typeColor(g.eventType),style:{"font-family":"monospace"}},{default:e(()=>[_(c(g.eventType),1)]),_:2},1032,["color"])):y("v-if",!0),r.key==="operation"?(d(),f(T,{key:2},[b("span",Kt,c(g.operation),1),g.errorMessage?(d(),f("div",Ut,c(g.errorMessage),1)):y("v-if",!0)],64)):y("v-if",!0),r.key==="actor"?(d(),f(T,{key:3},[g.actor?(d(),f("span",Wt,c(g.actor),1)):(d(),f("span",Yt,"—"))],64)):y("v-if",!0),r.key==="target"?(d(),f(T,{key:4},[g.target?(d(),f("span",Ht,c(t.truncate(g.target,32)),1)):(d(),f("span",Zt,"—"))],64)):y("v-if",!0),r.key==="riskLevel"?(d(),h(v,{key:5,color:t.riskColor(g.riskLevel)},{default:e(()=>[_(c(t.riskLabel(g.riskLevel)),1)]),_:2},1032,["color"])):y("v-if",!0),r.key==="success"?(d(),h(v,{key:6,color:g.success?"green":"red"},{default:e(()=>[_(c(g.success?"OK":"FAIL"),1)]),_:2},1032,["color"])):y("v-if",!0),r.key==="mtc"?(d(),f(T,{key:7},[t.classifyMtcStatus(g)==="none"?(d(),h(I,{key:0,title:t.t("audit.mtc.noneTooltip")},{default:e(()=>[o(v,{color:"default"},{default:e(()=>[...s[6]||(s[6]=[_("—",-1)])]),_:1})]),_:1},8,["title"])):(d(),h(I,{key:1,title:t.getMtcTooltip(g)},{default:e(()=>[o(v,{color:t.getMtcColor(g),style:{cursor:"pointer"},onClick:Z=>t.checkMtcStatus(g)},{default:e(()=>[_(c(t.getMtcLabel(g)),1)]),_:2},1032,["color","onClick"])]),_:2},1032,["title"]))],64)):y("v-if",!0),r.key==="action"?(d(),h(w,{key:8,size:"small",type:"link",onClick:Z=>t.viewLogDetails(g)},{default:e(()=>[_(c(t.t("audit.rowAction.details")),1)]),_:1},8,["onClick"])):y("v-if",!0)]),emptyText:e(()=>[b("div",qt,[o(t.FileSearchOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+c(t.hasFilters?t.t("audit.empty.filtered"):t.t("audit.empty.noEvents")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Breakdown tab ───────────────────────────────────────── "),o(J,{key:"breakdown",tab:t.t("audit.tabs.breakdown")},{default:e(()=>[o(O,{gutter:[16,16]},{default:e(()=>[o(p,{xs:24,lg:12},{default:e(()=>[o(S,{title:t.t("audit.breakdown.byType"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(d(!0),f(T,null,B(t.EVENT_TYPES,r=>(d(),f("div",{key:r,class:"bd-row"},[o(v,{color:t.typeColor(r),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[_(c(r),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byEventType[r]||0,t.stats.total),"stroke-color":t.typeBarColor(r),format:()=>`${t.stats.byEventType[r]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(p,{xs:24,lg:12},{default:e(()=>[o(S,{title:t.t("audit.breakdown.byRisk"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(d(!0),f(T,null,B(t.RISK_LEVELS,r=>(d(),f("div",{key:r,class:"bd-row"},[o(v,{color:t.riskColor(r),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[_(c(t.riskLabel(r)),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byRiskLevel[r]||0,t.stats.total),"stroke-color":t.riskBarColor(r),format:()=>`${t.stats.byRiskLevel[r]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),y(" ── Event details modal ─────────────────────────────────── "),o(H,{open:t.showDetailsModal,"onUpdate:open":s[5]||(s[5]=r=>t.showDetailsModal=r),title:t.t("audit.details.title",{id:t.currentLog?.id?.slice(0,8)||""}),width:720,footer:null},{default:e(()=>[t.currentLog?(d(),f("div",Qt,[o(Y,{column:2,size:"small",bordered:""},{default:e(()=>[o(k,{label:t.t("audit.details.id"),span:2},{default:e(()=>[b("span",Gt,c(t.currentLog.id),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.eventType")},{default:e(()=>[o(v,{color:t.typeColor(t.currentLog.eventType),style:{"font-family":"monospace"}},{default:e(()=>[_(c(t.currentLog.eventType),1)]),_:1},8,["color"]),b("span",Xt,c(t.typeLabel(t.currentLog.eventType)),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.riskLevel")},{default:e(()=>[o(v,{color:t.riskColor(t.currentLog.riskLevel)},{default:e(()=>[_(c(t.riskLabel(t.currentLog.riskLevel)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(k,{label:t.t("audit.details.operation"),span:2},{default:e(()=>[b("span",$t,c(t.currentLog.operation),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.status")},{default:e(()=>[o(v,{color:t.currentLog.success?"green":"red"},{default:e(()=>[_(c(t.currentLog.success?t.t("audit.details.success"):t.t("audit.details.failure")),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(k,{label:t.t("audit.details.time")},{default:e(()=>[_(c(t.formatAuditTime(t.currentLog.createdAt)),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.actor")},{default:e(()=>[t.currentLog.actor?(d(),f("span",te,c(t.currentLog.actor),1)):(d(),f("span",ee,"—"))]),_:1},8,["label"]),o(k,{label:t.t("audit.details.target")},{default:e(()=>[t.currentLog.target?(d(),f("span",ae,c(t.currentLog.target),1)):(d(),f("span",oe,"—"))]),_:1},8,["label"]),t.currentLog.ipAddress?(d(),h(k,{key:0,label:t.t("audit.details.ip")},{default:e(()=>[b("span",re,c(t.currentLog.ipAddress),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.userAgent?(d(),h(k,{key:1,label:t.t("audit.details.userAgent")},{default:e(()=>[b("span",le,c(t.currentLog.userAgent),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.errorMessage?(d(),h(k,{key:2,label:t.t("audit.details.errorMessage"),span:2},{default:e(()=>[b("span",ne,c(t.currentLog.errorMessage),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.details?(d(),h(k,{key:3,label:t.t("audit.details.details"),span:2},{default:e(()=>[b("pre",ie,c(t.formatDetails(t.currentLog.details)),1)]),_:1},8,["label"])):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"])])}const ge=Lt(Dt,[["render",se],["__scopeId","data-v-be9f4fc3"],["__file","/tmp/cc-web-panel-1uwrpu/repo/packages/web-panel/src/views/Audit.vue"]]);export{ge as default};