chainlesschain 0.162.185 → 0.162.186
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.
- package/bin/chainlesschain.js +21 -5
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-Co4ipAKx.js → AIOps-DTXiO-TB.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BpsoDrDq.js → ActionButton-BbmDW-Pz.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DMUqeBik.js → Analytics-CSfgXJuD.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-C6fD_dXr.js → AppLayout-BS0FFLb7.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-DW0YlQlV.js → Artifacts-B19WFPK2.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DXtHiiFK.js → Audit-CQhZBi7n.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BgmF62U-.js → BackgroundAgents-BOLZCpGH.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-D8vhVLQC.js → Backup-Dz3R_ePD.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-D7nCtY2X.js → BaseInput-CYfgMpax.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CBZLEV2G.js → Chat-5CymMr1j.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-B2A_TJtl.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DJLkeD4M.js → Checkbox-CDXHVYcu.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Cs6xO8Fd.js → Codegen-uq9Z9oiS.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Dtx9wxfT.js → Col-BuW1K_65.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DiigJg4n.js → Community-Bbg-PvRY.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B67oMDDL.js → Compact-co0pPPTw.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BBDl-Jos.js → Compliance-B-pFAv7z.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Ba98hSsa.js → Cowork-54ZQS4gC.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DBWQZIz7.js → Cron-B1BF2Seq.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-OcrKzxAt.js → Crosschain-Dey6qQTj.js} +1 -1
- package/src/assets/web-panel/assets/{DID-mW2eSbjM.js → DID-ltERvfAj.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BmsDPmKJ.js → Dashboard-DuWxOcqN.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CVzmCyRx.js → Dropdown-CrZ8ekTo.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-vVgqKzhh.js → EmailListRenderer-fIyHXhUS.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CWY5t_ZJ.js → FamilyGuardDashboard-BtRyrRPm.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-ZGomhjxr.js → Federation-EUC6Wydj.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DyaknbLr.js → FormItemContext-BOpka2G-.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CmIvN1qr.js → GenericCardRenderer-BXtrrYHn.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DQOJIYkG.js → Git-8WMb7PiR.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CMiY-EEp.js → Governance-DNWOeDTV.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-D6IXuucf.js → Inference-Bne9b_Lb.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-6jkTL0hV.js → KnowledgeGraph-Cp-6Us9b.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-N0jD-349.js → Logs-Ck-uSPAx.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-DxjsdAXw.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-WhYuhBxm.js → Marketplace-Vdq7brrJ.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DTeO28xy.js → McpTools-ggLnw4hY.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-MSHzPSE-.js → Memory-BKIjNVCU.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Cyqs3J3W.js → MobileBridge-BElCY25a.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-7IN2hWHg.js → MobileProjects-DpLgovdH.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-MWBnezNM.js → Mtc-bNdrF_Zh.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DQu35Nu-.js → MtcAudit-Dw8w1Cqk.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-CQS_M-DP.js → Multisig-CfGKvlqc.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-WD16vQvY.js → NLProgramming-D6OJf7YN.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DqsiSwOq.js → Notes-B3n_LzIS.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-D3LoxO-P.js → NotificationSettings-Uu1V_ICM.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C5jPoTd6.js → OrderTableRenderer-aGyWwWcp.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-48aMBJso.js → Organization-qjFFmuwK.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-j-a2XkhR.js → Overflow-J4ZgnwZz.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BYpBNYnh.js → P2P-YEZF-uVH.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CYCsrrLg.js → PdhVaultBrowser-yqx7fwqk.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-ZRXGXDFb.js → Permissions-DdEjlZ02.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-6OWUPHyL.js → PersonalDataHub-DbAPYvns.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-FcjlDK9E.js → Pipeline-Bxlk_ZJU.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-vD_6Tldp.js → Privacy-CpE-05tz.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B_CHOLXp.js → ProjectInit-DWlhcGHT.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-rEiqQ2da.js → ProjectSettings-BnH6BiTQ.js} +2 -2
- package/src/assets/web-panel/assets/Projects-CHw2fXDB.js +1 -0
- package/src/assets/web-panel/assets/{Providers-Dgtt97B4.js → Providers-Bdz_sTyb.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DaGVylZO.js → QrScannerModal-BHh2b3pH.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DP2_2x3u.js → QuickAsk-D84M09pe.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-D29yj4ki.js → Recommend-Czc30K6M.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Ue2wnBLp.js → RemoteSession-q_TU5qxt.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CrxIHqeC.js → Reputation-CnTce4WM.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BgSzJPCn.js → Row-C60UFLay.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-AwhYOrP9.js → RssFeed-BOUFEu9_.js} +3 -3
- package/src/assets/web-panel/assets/{Search-D2shpEcm.js → Search-D4__blE-.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BtKzhTbT.js → Security-BoOm7_JK.js} +3 -3
- package/src/assets/web-panel/assets/{Services-BY0DsUSm.js → Services-AvzrW6HA.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-B3Sb0UI9.js → Skeleton-BZlrHozi.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Ne5w0bDs.js → Skills-CKaMLuk0.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-C8VkaP4T.js → Sla-DYCNJF8h.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-BvCSU6d2.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-CwFafrUg.js → SyncSettings-B6tW8dVO.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-yJuKoDlR.js → Tasks-oNC_2NVz.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DYn9qCmx.js → Templates-DvLPvvjL.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DkKReHvn.js → Tenant-BDt9UBn_.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-r6bd-owt.js → Terminal-ddCUnH-X.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Mq2juUC3.js → TimelineRenderer-CA4sDL47.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BnMw7MRi.js → Tokens-By03hnVs.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CTzKp4o9.js → Trigger-Dz2mH-ZU.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BBrSZm9U.js → Trust-DShSWHeJ.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D9fDvEMq.js → UkeySign-JN8lP3gt.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DUi5ve-0.js → VideoEditing-BgPy4gV3.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-C8Fi1P8_.js → Wallet-CQGEsXw_.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-s1LppYi2.js → WebAuthn-D8xR-ds_.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DJL2C4lj.js → WorkflowEditor-Df61_p1p.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D3F2ndOB.js → chat-fdPby427.js} +1 -1
- package/src/assets/web-panel/assets/{colors-B7739-e3.js → colors-Dimqhufo.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CcJbFTF4.js → compact-item-DHayKcqZ.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CuP_DEFS.js → createContext-hZUhypRH.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-ePxoBp92.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-6YEXfIik.js → hasIn-Dw7zC_dV.js} +1 -1
- package/src/assets/web-panel/assets/{index-LfRlSmqe.js → index--DVpUpz3.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_75jYWk.js → index-BHJUptSx.js} +1 -1
- package/src/assets/web-panel/assets/{index-fWgUQZ9d.js → index-BIxxvaGN.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3pctdCb.js → index-BM5BNqp9.js} +1 -1
- package/src/assets/web-panel/assets/index-BTBDdCoo.js +1 -0
- package/src/assets/web-panel/assets/{index-CxradkS6.js → index-BVHdkz8F.js} +22 -22
- package/src/assets/web-panel/assets/{index-CRuoRapN.js → index-BYdNwhkv.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0K_rFC1.js → index-Bhmpp3cm.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bru_kpZl.js → index-BuMSdwno.js} +1 -1
- package/src/assets/web-panel/assets/{index-b9cuvFEv.js → index-BwnUluxu.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6Ij_2uw.js → index-C1yMYKi-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Gxw09e9R.js → index-C8XXPz2n.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXdnfDVK.js → index-CBQK-LEF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Nz-MUHD1.js → index-CIOE8tt6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIID4XcP.js → index-CPZ3U5iH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxSqVMGh.js → index-CTiVrnpR.js} +1 -1
- package/src/assets/web-panel/assets/{index-eR6H6NR7.js → index-CcpDboUd.js} +1 -1
- package/src/assets/web-panel/assets/index-CfOGx8Ns.js +1 -0
- package/src/assets/web-panel/assets/{index-CY0zd_jc.js → index-CsCo_A0I.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGsE7MQz.js → index-CuaVa8tX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV11jpeO.js → index-CvKHpaao.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bh4hcNWW.js → index-D7jQEwB6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDRlBaDt.js → index-DAjvkQ4K.js} +1 -1
- package/src/assets/web-panel/assets/{index-BhIKnQAW.js → index-DC2R4zvM.js} +1 -1
- package/src/assets/web-panel/assets/{index-4h3lpWJ3.js → index-DJP7TjWm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHvxXXNA.js → index-DSlda4-6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlSvpNMf.js → index-DVM_KgzF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dox44j29.js → index-DX1DwDFI.js} +1 -1
- package/src/assets/web-panel/assets/{index-yOZYSNmG.js → index-DnwDYBnG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dsy7_x4s.js → index-DxoPzPHy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsdSnHQE.js → index-DyEhrvpm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjI9MkId.js → index-DzJXkoZs.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYYSLEjn.js → index-JE6Udz2r.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3haorUt.js → index-Urt2R5aE.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0zdPyTD.js → index-cEnkyHtX.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3ZA_h1j.js → index-j0pxzOu7.js} +1 -1
- package/src/assets/web-panel/assets/{index-mfWQRSLn.js → index-lPjBQJCy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpEKmjoa.js → index-ulvBurtw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOHUo3aM.js → index-y5LHQ5Ck.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CJ1Bq2L3.js → initDefaultProps-B4pR3px5.js} +1 -1
- package/src/assets/web-panel/assets/{motion-rYJN_vzf.js → motion-CE7dWPPs.js} +1 -1
- package/src/assets/web-panel/assets/{move-DnDK2gTP.js → move-Hw8cUObc.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CKnXy7ES.js → mtc-parser-CvRjE4Fa.js} +1 -1
- package/src/assets/web-panel/assets/{omit-3nRc3hWT.js → omit-CkFeLVre.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Ddjj3sLu.js → pickAttrs-5ZMqmbbb.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CbsbphQY.js → placementArrow-BZ4oeZ0q.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D9aZ4VDJ.js → responsiveObserve-lwoiX_Us.js} +1 -1
- package/src/assets/web-panel/assets/{slide-D4pvdFj0.js → slide-D_as37l8.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-C2W-vY-S.js → statusUtils-BsA-4Bs7.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cbq5150d.js → styleChecker-BVar4sLQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BA2B7R82.js → useFlexGapSupport-j1IwVpGd.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CLrwg3xg.js → useFs-7Q9bEnUp.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DQeAI5qs.js → usePersonalDataHub-BBwTIRMd.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-8BDGy-YU.js → vnode-C7Dk-M8w.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-B2SzFprl.js → zoom-D3UHaTFB.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/eval.js +7 -0
- package/src/commands/status.js +55 -0
- package/src/commands/team.js +31 -6
- package/src/data/changelog.json +13 -0
- package/src/lazy-dispatch.js +12 -1
- package/src/lib/observability/index.js +191 -19
- package/src/lib/observability/otlp-exporter.js +1209 -207
- package/src/lib/otlp-exporter.js +8 -36
- package/src/program-base.js +9 -2
- package/src/runtime/headless-runner.js +45 -21
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CtDb-2Qu.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-BL1IVXm-.js +0 -1
- package/src/assets/web-panel/assets/Projects-Bg8obRAM.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BQdIEYP9.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Cj_36GHq.js +0 -1
- package/src/assets/web-panel/assets/index-CezFrAmD.js +0 -1
- package/src/assets/web-panel/assets/index-Cxgguez6.js +0 -1
package/bin/chainlesschain.js
CHANGED
|
@@ -8,9 +8,16 @@ import "../src/lib/process-execution-broker/patch-child-process.js";
|
|
|
8
8
|
import { ensureUtf8 } from "../src/lib/ensure-utf8.js";
|
|
9
9
|
ensureUtf8();
|
|
10
10
|
|
|
11
|
-
// Initialize observability
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
// Initialize observability before command modules load so every completed span
|
|
12
|
+
// can reach a standard OTel Collector. Export stays off unless the global flag
|
|
13
|
+
// or an OTEL_EXPORTER_OTLP_* endpoint is present.
|
|
14
|
+
import {
|
|
15
|
+
initObservability,
|
|
16
|
+
resolveOtlpEndpointFromArgv,
|
|
17
|
+
} from "../src/lib/observability/index.js";
|
|
18
|
+
const observability = initObservability({
|
|
19
|
+
endpoint: resolveOtlpEndpointFromArgv(process.argv),
|
|
20
|
+
});
|
|
14
21
|
|
|
15
22
|
// Force blocking stdio when piped, so process.exit() flushes the full output
|
|
16
23
|
// before the process tears down. Without this, macOS (and occasionally Linux)
|
|
@@ -37,6 +44,15 @@ import {
|
|
|
37
44
|
// Funnel rejections/exceptions that escape a command action (async event
|
|
38
45
|
// handlers, detached tasks, third-party libs) through the same friendly
|
|
39
46
|
// boundary as the top-level parse, instead of Node's default ugly-stack crash.
|
|
40
|
-
installGlobalErrorHandlers()
|
|
47
|
+
installGlobalErrorHandlers(process, async (error) => {
|
|
48
|
+
await observability.shutdown().catch(() => {});
|
|
49
|
+
reportFatal(error);
|
|
50
|
+
});
|
|
41
51
|
|
|
42
|
-
runCli(process.argv).
|
|
52
|
+
runCli(process.argv).then(
|
|
53
|
+
() => observability.shutdown().catch(() => {}),
|
|
54
|
+
async (error) => {
|
|
55
|
+
await observability.shutdown().catch(() => {});
|
|
56
|
+
reportFatal(error);
|
|
57
|
+
},
|
|
58
|
+
);
|
package/package.json
CHANGED
|
@@ -1 +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-Bn1JzzAn.js";import{t as H,_ as ze,u as de,b as ce,d as f}from"./index-CxradkS6.js";import ue from"./index-mfWQRSLn.js";import{f as Ie,c as Oe,b3 as Pe,aZ as Te,ab as Ee,t as Le,at as je,R as Ne}from"./icons-DG5UD-6K.js";import"./KeyCode-D63Tfrq7.js";import"./omit-3nRc3hWT.js";import"./pickAttrs-Ddjj3sLu.js";import"./initDefaultProps-CJ1Bq2L3.js";import"./motion-rYJN_vzf.js";import"./raf-Deuc0E8-.js";import"./index-BhIKnQAW.js";import"./index-DXdnfDVK.js";import"./isVisible-C7tPsqfj.js";import"./useState-CnxtbLoC.js";import"./devWarning-Cj_36GHq.js";import"./compact-item-CcJbFTF4.js";import"./createContext-CuP_DEFS.js";import"./Compact-B67oMDDL.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-Cbq5150d.js";import"./zoom-B2SzFprl.js";import"./ActionButton-BpsoDrDq.js";import"./vnode-8BDGy-YU.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(""),Z=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"}]),W=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"?Z.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")),Z.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:Z,showPlaybookModal:R,showBaselineModal:O,showDetectModal:B,incidentForm:x,playbookForm:_,baselineForm:M,detectForm:U,detectResult:q,incidentColumns:ee,playbookColumns:F,baselineColumns:W,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"}},Ze={class:"page-title"},We={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"),Z=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"),W=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",Ze,r(t.$t("aiops.title")),1),S("p",We,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(Z,{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(W,{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(W,{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(W,{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-AYiyec/repo/packages/web-panel/src/views/AIOps.vue"]]);export{Dt as default};
|
|
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 G,b as Q,r as C,P as u,Q as y,F as z,Z as H}from"./vendor-Bn1JzzAn.js";import{t as X,_ as ze,u as de,b as ce,d as f}from"./index-BVHdkz8F.js";import ue from"./index-lPjBQJCy.js";import{f as Ie,c as Oe,b3 as Pe,aZ as Te,ab as Ee,t as Le,at as je,R as Ne}from"./icons-DG5UD-6K.js";import"./KeyCode-D63Tfrq7.js";import"./omit-CkFeLVre.js";import"./pickAttrs-5ZMqmbbb.js";import"./initDefaultProps-B4pR3px5.js";import"./motion-CE7dWPPs.js";import"./raf-Deuc0E8-.js";import"./index-DC2R4zvM.js";import"./index-CBQK-LEF.js";import"./isVisible-C7tPsqfj.js";import"./useState-CnxtbLoC.js";import"./devWarning-ePxoBp92.js";import"./compact-item-DHayKcqZ.js";import"./createContext-hZUhypRH.js";import"./Compact-co0pPPTw.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-BVar4sLQ.js";import"./zoom-D3UHaTFB.js";import"./ActionButton-BbmDW-Pz.js";import"./vnode-C7Dk-M8w.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=X(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=X(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=X(t);return Array.isArray(a)?a.map(Be).filter(Boolean):[]}function fe(t){const a=X(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=X(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([]),Y=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(""),Z=C(!1),R=C(!1),O=C(!1),B=C(!1),x=G({severity:"P3",metric:"",description:""}),_=G({name:"",triggerJson:"",stepsJson:""}),M=G({metric:"",values:""}),U=G({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"}]),W=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"?Z.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),Y.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")),Z.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:Y,baselines:$,stats:D,activeTab:I,incidentSeverityFilter:A,incidentStatusFilter:T,showIncidentModal:Z,showPlaybookModal:R,showBaselineModal:O,showDetectModal:B,incidentForm:x,playbookForm:_,baselineForm:M,detectForm:U,detectResult:q,incidentColumns:ee,playbookColumns:F,baselineColumns:W,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:G,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"}},Ze={class:"page-title"},We={class:"page-sub"},Ge={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},He={class:"filter-bar"},Xe={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Ye={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"),Y=b("a-menu"),$=b("a-dropdown"),D=b("a-space"),I=b("a-statistic"),A=b("a-card"),T=b("a-col"),Z=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"),W=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",Ze,r(t.$t("aiops.title")),1),S("p",We,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(Y,{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(Z,{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,H(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",Ge,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",He,[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,H(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,H(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",Xe,r(c.anomalyMetric),1)):(u(),v("span",Ye,"—"))],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,H(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(W,{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(W,{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(W,{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,H(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-3e4hnj/repo/packages/web-panel/src/views/AIOps.vue"]]);export{Dt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{O as b,f as i,v as p}from"./index-
|
|
1
|
+
import{O as b,f as i,v as p}from"./index-BVHdkz8F.js";import{f as m,s as r,d as O,o as y,c as P}from"./vendor-Bn1JzzAn.js";import{B as R,c as x}from"./index-DC2R4zvM.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=O({compatConfig:{MODE:3},name:"ActionButton",props:D,setup(n,g){let{slots:B}=g;const l=r(!1),c=r(),a=r(!1);let f;const v=A();y(()=>{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(R,i(i(i({},x(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 f,U as J,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-Bn1JzzAn.js";import{_ as ye,b as se,u as ne,t as le,d as U}from"./index-
|
|
2
|
-
`);for(const n of s){const v=n.trim(),
|
|
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 W(){F.value=!0;try{const{output:e}=await t.execute(`tokens show --period ${P.value} --json`,15e3),s=R(e);s?K(s):H(e)}catch(e){console.error("loadSummary failed:",e)}finally{F.value=!1}}async function X(){b.value=!0;try{const{output:e}=await t.execute("tokens breakdown --json",15e3),s=R(e);s?C.value=Q(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=Y(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?q(s):G(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([W(),X(),Z(),N(),$()])}ae(P,()=>{W()}),oe(ee);const te={t:i,ws:t,period:P,summaryLoading:F,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:H,parseSummaryJSON:K,parseBreakdownJSON:Q,parseRecentJSON:Y,parseCacheJSON:q,parseCacheText:G,loadSummary:W,loadBreakdown:X,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,P,F){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,[J("div",he,[J("div",null,[J("h2",Te,r(t.t("analytics.title")),1),J("p",be,r(t.t("analytics.subtitle")),1)]),J("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-AYiyec/repo/packages/web-panel/src/views/Analytics.vue"]]);export{Ne as default};
|
|
1
|
+
import{I as T,J as f,U as J,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-Bn1JzzAn.js";import{_ as ye,b as se,u as ne,t as le,d as U}from"./index-BVHdkz8F.js";import{aR as me,D as ke,a0 as ve,R as fe,aD as ge,J as _e}from"./icons-DG5UD-6K.js";const xe={__name:"Analytics",setup(re,{expose:u}){u();const{t:i}=se(),t=ne(),P=x("all"),F=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 H(e){const s=(e||"").split(`
|
|
2
|
+
`);for(const n of s){const v=n.trim(),j=v.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);j&&(g.totalCalls=parseInt(w(j[1]),10)||0);const M=v.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);M&&(g.totalTokens=parseInt(w(M[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 K(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 Q(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(),j=v.match(/entries?\s*[::]\s*([\d,]+)/i);j&&(_.entries=parseInt(w(j[1]),10)||0);const M=v.match(/hits?\s*[::]\s*([\d,]+)/i);M&&(_.hits=parseInt(w(M[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 W(){F.value=!0;try{const{output:e}=await t.execute(`tokens show --period ${P.value} --json`,15e3),s=R(e);s?K(s):H(e)}catch(e){console.error("loadSummary failed:",e)}finally{F.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=Q(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([W(),Y(),Z(),N(),$()])}ae(P,()=>{W()}),oe(ee);const te={t:i,ws:t,period:P,summaryLoading:F,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:H,parseSummaryJSON:K,parseBreakdownJSON:Q,parseRecentJSON:q,parseCacheJSON:G,parseCacheText:X,loadSummary:W,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)"}},je={key:0,style:{"text-align":"center",padding:"40px"}},Me={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,P,F){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,[J("div",he,[J("div",null,[J("h2",Te,r(t.t("analytics.title")),1),J("p",be,r(t.t("analytics.subtitle")),1)]),J("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",je,[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",Me,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-3e4hnj/repo/packages/web-panel/src/views/Analytics.vue"]]);export{Ne as default};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{b as v,r as
|
|
2
|
-
`),
|
|
3
|
-
`))}catch{return[]}}return[]}const n=J(),g=H(),h=D([]);let o=null;const s=v(()=>h.value.length),f=v(()=>h.value.filter(r=>M(r)).length),_=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(g.status==="connected")try{const{output:r}=await g.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:g,devices:h,get pollTimer(){return o},set pollTimer(r){o=r},totalCount:s,onlineCount:f,iconColor:_,tooltip:O,isOnline:M,refresh:C,onClick:P,ref:D,computed:v,onMounted:z,onBeforeUnmount:ee,get useRouter(){return J},get MobileOutlined(){return ue},get useWsStore(){return H}};return Object.defineProperty(j,"__isScriptSetup",{enumerable:!1,value:!0}),j}},Rt={key:0,class:"mbh-count"};function Dt(i,u,S,n,g,h){const o=k("a-badge"),s=k("a-tooltip");return p(),B(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",Rt,a(n.totalCount),1)):m("v-if",!0)],2)]),_:1},8,["count"])]),_:1},8,["title"])}const Pt=Z(Mt,[["render",Dt],["__scopeId","data-v-e8ef01d6"],["__file","/tmp/cc-web-panel-AYiyec/repo/packages/web-panel/src/components/MobileBridgeHeaderStatus.vue"]]),Y="cc.web-panel.sidebar.openKeys",jt={__name:"AppLayout",setup(i,{expose:u}){u();const S=J(),n=te(),g=H(),h=oe(),{t:o}=ie(),s=N(),f=D(!1),_=window.__CC_CONFIG__||{},O=v(()=>_.mode==="project"),M="v5.0.3.135",C=v(()=>h.current),P=v(()=>h.config.vars["--menu-mode"]),j=v(()=>{const y=n.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[y]||y]}),r=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function w(){try{const y=localStorage.getItem(Y);if(y){const A=JSON.parse(y);if(Array.isArray(A))return A.filter(q=>r.includes(q))}}catch{}return[...r]}const T=D(w());ne(T,y=>{try{localStorage.setItem(Y,JSON.stringify(y))}catch{}},{deep:!0});const c=v(()=>g.status),b=v(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[g.status]||"default"),R=v(()=>{const y=`appLayout.footerStatus.${g.status}`,A=o(y);return A===y?o("appLayout.footerStatus.unknown"):A});function U(y){h.setTheme(y)}const{current:I,supported:K,setLocale:Q}=ae();function ce(){const y=K[(K.indexOf(I.value)+1)%K.length];Q(y)}async function X(y){try{const A=await g.sendRaw({type:"window.open",role:y},1e4);if(A?.ok===!1){V.error(`打开失败:${A.error||"未知"}`);return}const q=A?.result??A;q?.reason==="role_reserved"?V.warning("该窗口角色被保留"):q?.reason}catch(A){V.error(`打开桌面窗口失败:${A.message||A}`)}}async function ye(){le.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const y=await g.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(y?.ok===!1)throw new Error(y.error||"shell.switch returned failure");V.loading({content:"正在重启…",duration:0})}catch(y){const A=y instanceof Error?y.message:String(y);V.error("切换失败:"+A)}}})}function pe({key:y}){if(typeof y=="string"&&y.startsWith("desktop:")){X(y);return}S.push({mcp:"/mcp"}[y]||`/${y}`)}z(()=>g.connect());const x={router:S,route:n,ws:g,themeStore:h,t:o,shellMode:s,collapsed:f,cfg:_,isProject:O,PRODUCT_VERSION:M,currentTheme:C,menuTheme:P,selectedKeys:j,ALL_GROUP_KEYS:r,OPEN_KEYS_LS:Y,loadOpenKeys:w,openKeys:T,wsStatus:c,statusBadge:b,statusText:R,setTheme:U,locale:I,SUPPORTED_LOCALES:K,setLocale:Q,toggleLocale:ce,openDesktopWindow:X,switchToDesktopShell:ye,onMenuClick:pe,ref:D,computed:v,onMounted:z,watch:ne,get useRouter(){return J},get useRoute(){return te},get DashboardOutlined(){return _t},get MessageOutlined(){return gt},get RocketOutlined(){return kt},get AppstoreOutlined(){return mt},get ApiOutlined(){return ft},get FolderOutlined(){return pt},get GlobalOutlined(){return yt},get InfoCircleOutlined(){return ct},get ControlOutlined(){return ut},get FileTextOutlined(){return dt},get CloudServerOutlined(){return st},get BookOutlined(){return rt},get BranchesOutlined(){return lt},get ClockCircleOutlined(){return at},get ThunderboltOutlined(){return it},get ApartmentOutlined(){return ot},get SafetyCertificateOutlined(){return nt},get LockOutlined(){return tt},get WifiOutlined(){return et},get CodeOutlined(){return $e},get ProjectOutlined(){return xe},get WalletOutlined(){return Xe},get TeamOutlined(){return Qe},get BarChartOutlined(){return Ze},get BlockOutlined(){return Ye},get CloudUploadOutlined(){return Je},get ReadOutlined(){return qe},get KeyOutlined(){return He},get VideoCameraOutlined(){return Ge},get ShareAltOutlined(){return ze},get IdcardOutlined(){return We},get UsergroupAddOutlined(){return Ve},get ShoppingOutlined(){return Ke},get SwapOutlined(){return Ie},get AlertOutlined(){return Fe},get SafetyOutlined(){return Ne},get ExperimentOutlined(){return Ue},get DeploymentUnitOutlined(){return je},get BulbOutlined(){return Pe},get BankOutlined(){return De},get PartitionOutlined(){return Re},get AuditOutlined(){return Me},get FileSearchOutlined(){return Be},get TrophyOutlined(){return Te},get FireOutlined(){return Ee},get SearchOutlined(){return Ae},get NumberOutlined(){return Ce},get ClusterOutlined(){return Se},get SoundOutlined(){return Le},get DesktopOutlined(){return ve},get BellOutlined(){return de},get SyncOutlined(){return we},get MobileOutlined(){return ue},get DatabaseOutlined(){return be},get UnorderedListOutlined(){return he},get FileDoneOutlined(){return Oe},get message(){return V},get Modal(){return le},get useWsStore(){return H},get useThemeStore(){return oe},get THEMES(){return ge},get logoSrc(){return Ot},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}},Ut=["src"],Nt={key:0,class:"logo-text"},Ft={key:0,class:"mode-banner project"},It={class:"banner-info"},Kt={class:"banner-name"},Vt={class:"banner-sub"},Wt={key:1,class:"mode-banner global"},zt={class:"banner-name"},Gt=["title"],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={class:"group-label"},en={key:0,class:"footer-text"},tn={class:"header-left"},nn={class:"header-right"},on={class:"theme-switcher"},an=["data-theme-key","onClick"],ln=["data-locale"],rn={class:"lang-switch-label"},sn={class:"version-tag"};function dn(i,u,S,n,g,h){const o=k("a-menu-item"),s=k("a-sub-menu"),f=k("a-menu-divider"),_=k("a-menu"),O=k("a-badge"),M=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"),T=k("a-layout");return p(),B(T,{class:"app-root"},{default:t(()=>[m(" ── Sidebar ─────────────────────────────────────────────────── "),e(M,{collapsed:n.collapsed,"onUpdate:collapsed":u[2]||(u[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,Ut),n.collapsed?m("v-if",!0):(p(),L("span",Nt,"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(),B(n.FolderOutlined,{key:0,style:{color:"#1677ff"}})):(p(),B(n.GlobalOutlined,{key:1,style:{color:"#722ed1"}}))],8,Gt)):(p(),L(F,{key:0},[n.isProject?(p(),L("div",Ft,[e(n.FolderOutlined,{class:"banner-icon"}),d("div",It,[d("div",Kt,a(n.cfg.projectName||i.$t("appLayout.scope.fallbackProject")),1),d("div",Vt,a(i.$t("appLayout.scope.projectPanel")),1)])])):(p(),L("div",Wt,[e(n.GlobalOutlined,{class:"banner-icon"}),d("span",zt,a(i.$t("appLayout.scope.global")),1)]))],64)),m(" Navigation "),e(_,{selectedKeys:n.selectedKeys,"onUpdate:selectedKeys":u[0]||(u[0]=c=>n.selectedKeys=c),openKeys:n.openKeys,"onUpdate:openKeys":u[1]||(u[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(F,{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(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),_: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(F,{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(F,{key:0},[e(s,{key:"g-overview"},{title:t(()=>[d("span",Ht,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",qt,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",Jt,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(()=>[u[3]||(u[3]=l("个人数据中台",-1))]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),default:t(()=>[u[4]||(u[4]=l("数据浏览器",-1))]),_:1}),e(o,{key:"family-guard"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[u[5]||(u[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}),e(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[u[6]||(u[6]=l("后台 Agent",-1))]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),default:t(()=>[u[7]||(u[7]=l("交付物",-1))]),_:1})]),_:1}),e(s,{key:"g-advanced"},{title:t(()=>[d("span",Yt,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:"remote-session"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.remoteSession","远程会话")),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",Zt,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",Qt,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",Xt,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 j,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 B,F,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-Bn1JzzAn.js";import{u as H,_ as Z,E as ke,a as oe,b as ie,c as ae,T as ge,d as V}from"./index-BVHdkz8F.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{R as _e,B as de,M as ue,F as Oe,U as he,D as be,S as we,h as ve,i as Le,j as Se,N as Ce,k as Ee,l as Te,m as Ae,n as Be,A as Me,P as Re,o as je,p as De,q as Pe,r as Ue,s as Ne,t as Fe,u as Ie,v as Ke,w as Ve,x as We,y as ze,V as Ge,K as He,z as qe,G as Je,H as Ye,J as Ze,O as Qe,W 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,a6 as ut,e as ct,a7 as yt,a8 as pt,a9 as ft,aa as mt,ab as kt,ac as gt,ad as _t}from"./icons-DG5UD-6K.js";import le from"./index-lPjBQJCy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-CkFeLVre.js";import"./pickAttrs-5ZMqmbbb.js";import"./initDefaultProps-B4pR3px5.js";import"./motion-CE7dWPPs.js";import"./raf-Deuc0E8-.js";import"./index-DC2R4zvM.js";import"./index-CBQK-LEF.js";import"./isVisible-C7tPsqfj.js";import"./useState-CnxtbLoC.js";import"./devWarning-ePxoBp92.js";import"./compact-item-DHayKcqZ.js";import"./createContext-hZUhypRH.js";import"./Compact-co0pPPTw.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-BVar4sLQ.js";import"./zoom-D3UHaTFB.js";import"./ActionButton-BbmDW-Pz.js";import"./vnode-C7Dk-M8w.js";const Ot=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,T={notifications:j([]),unreadCount:j(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 u({limit:o=50,offset:s=0,isRead:f}={}){if(!N().isEmbedded)return T.notifications.value=[],T.unreadCount.value=0,T.notifications.value;const _=await i.sendRaw({type:"notification.list",limit:o,offset:s,isRead:f},15e3),O=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 _=T.notifications.value.find(O=>O.id===o);_&&(_.is_read=1),await S()}async function g(){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(f);if(_?.success===!1)throw new Error(_.error||"notification.send-desktop failed")}return{notifications:v(()=>T.notifications.value),unreadCount:v(()=>T.unreadCount.value),refresh:u,refreshUnreadCount:S,markRead:n,markAllRead:g,sendDesktop:h}}const ht={__name:"NotificationBell",setup(i,{expose:u}){u();const S=j(!1),n=j("all"),g=j(!1),{notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:_}=re();function O(){D()}z(()=>{window.addEventListener("cc:open-notification-drawer",O)}),$(()=>{window.removeEventListener("cc:open-notification-drawer",O)});const M=v(()=>n.value==="unread"?h.value.filter(c=>!c.is_read):h.value);async function C(){if(N().isEmbedded){g.value=!0;try{await s({limit:100})}catch{}finally{g.value=!1}}}async function D(){S.value=!0,await C()}async function P(c){if(!c.is_read)try{await f(c.id)}catch{}}async function r(){try{await _()}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 R=Date.now()-b,U=6e4,I=60*U,K=24*I;return R<U?"刚刚":R<I?`${Math.floor(R/U)} 分钟前`:R<K?`${Math.floor(R/I)} 小时前`:new Date(b).toLocaleDateString()}const A={visible:S,filter:n,loading:g,notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:_,_onOpenEvent:O,filtered:M,refreshList:C,onOpen:D,onItemClick:P,onMarkAllRead:r,formatTime:w,ref:j,computed:v,onMounted:z,onUnmounted:$,get Empty(){return ke},get BellOutlined(){return de},get ReloadOutlined(){return _e},get useNotifications(){return re},get useShellMode(){return N}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},bt={class:"notif-toolbar"},wt={class:"notif-body"},vt={key:2,class:"notif-list"},Lt=["onClick"],St={class:"notif-row"},Ct={class:"notif-title"},Et={class:"notif-time"},Tt={key:0,class:"notif-message"};function At(i,u,S,n,g,h){const o=k("a-badge"),s=k("a-tooltip"),f=k("a-radio-button"),_=k("a-radio-group"),O=k("a-space"),M=k("a-button"),C=k("a-empty"),D=k("a-spin"),P=k("a-drawer");return p(),L(F,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(P,{open:n.visible,"onUpdate:open":u[1]||(u[1]=r=>n.visible=r),title:"通知中心",placement:"right",width:400,"body-style":{padding:0}},{default:t(()=>[d("div",bt,[e(O,null,{default:t(()=>[e(_,{value:n.filter,"onUpdate:value":u[0]||(u[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(()=>[...u[2]||(u[2]=[l(" 全部已读 ",-1)])]),_:1},8,["disabled"])]),_:1})]),d("div",wt,[!n.loading&&n.filtered.length===0?(p(),B(C,{key:0,description:"暂无通知",image:n.Empty.PRESENTED_IMAGE_SIMPLE,style:{padding:"60px 0"}},null,8,["image"])):n.loading?(p(),B(D,{key:1,style:{display:"block",padding:"60px"}})):(p(),L("ul",vt,[(p(!0),L(F,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",St,[d("div",Ct,a(r.title||r.message||"(无标题)"),1),d("span",Et,a(n.formatTime(r.created_at)),1)]),r.message&&r.title?(p(),L("div",Tt,a(r.message),1)):m("v-if",!0)],10,Lt))),128))]))])]),_:1},8,["open"])],64)}const Bt=Z(ht,[["render",At],["__scopeId","data-v-8c1554dd"],["__file","/tmp/cc-web-panel-3e4hnj/repo/packages/web-panel/src/components/NotificationBell.vue"]]),Mt={__name:"MobileBridgeHeaderStatus",setup(i,{expose:u}){u();function S(r){if(!r)return[];try{return JSON.parse(r)}catch{}const w=String(r).split(`
|
|
2
|
+
`),A=w.findIndex(c=>{const b=c.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(A<0)return[];for(let c=w.length-1;c>=A;c--){const b=w[c].trim();if(/^[\]\}]/.test(b)&&!/^[\]\}][A-Za-z]/.test(b))try{return JSON.parse(w.slice(A,c+1).join(`
|
|
3
|
+
`))}catch{return[]}}return[]}const n=J(),g=H(),h=j([]);let o=null;const s=v(()=>h.value.length),f=v(()=>h.value.filter(r=>M(r)).length),_=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(g.status==="connected")try{const{output:r}=await g.execute("p2p devices --type mobile --json",1e4);h.value=S(r)||[]}catch{}}function D(){n.push("/mobile-bridge")}z(()=>{C(),o=setInterval(C,5e3)}),ee(()=>{o&&(clearInterval(o),o=null)});const P={parseJsonOutput:S,router:n,ws:g,devices:h,get pollTimer(){return o},set pollTimer(r){o=r},totalCount:s,onlineCount:f,iconColor:_,tooltip:O,isOnline:M,refresh:C,onClick:D,ref:j,computed:v,onMounted:z,onBeforeUnmount:ee,get useRouter(){return J},get MobileOutlined(){return ue},get useWsStore(){return H}};return Object.defineProperty(P,"__isScriptSetup",{enumerable:!1,value:!0}),P}},Rt={key:0,class:"mbh-count"};function jt(i,u,S,n,g,h){const o=k("a-badge"),s=k("a-tooltip");return p(),B(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",Rt,a(n.totalCount),1)):m("v-if",!0)],2)]),_:1},8,["count"])]),_:1},8,["title"])}const Dt=Z(Mt,[["render",jt],["__scopeId","data-v-e8ef01d6"],["__file","/tmp/cc-web-panel-3e4hnj/repo/packages/web-panel/src/components/MobileBridgeHeaderStatus.vue"]]),Y="cc.web-panel.sidebar.openKeys",Pt={__name:"AppLayout",setup(i,{expose:u}){u();const S=J(),n=te(),g=H(),h=oe(),{t:o}=ie(),s=N(),f=j(!1),_=window.__CC_CONFIG__||{},O=v(()=>_.mode==="project"),M="v5.0.3.135",C=v(()=>h.current),D=v(()=>h.config.vars["--menu-mode"]),P=v(()=>{const y=n.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[y]||y]}),r=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function w(){try{const y=localStorage.getItem(Y);if(y){const E=JSON.parse(y);if(Array.isArray(E))return E.filter(q=>r.includes(q))}}catch{}return[...r]}const A=j(w());ne(A,y=>{try{localStorage.setItem(Y,JSON.stringify(y))}catch{}},{deep:!0});const c=v(()=>g.status),b=v(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[g.status]||"default"),R=v(()=>{const y=`appLayout.footerStatus.${g.status}`,E=o(y);return E===y?o("appLayout.footerStatus.unknown"):E});function U(y){h.setTheme(y)}const{current:I,supported:K,setLocale:Q}=ae();function ce(){const y=K[(K.indexOf(I.value)+1)%K.length];Q(y)}async function X(y){try{const E=await g.sendRaw({type:"window.open",role:y},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 y=await g.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(y?.ok===!1)throw new Error(y.error||"shell.switch returned failure");V.loading({content:"正在重启…",duration:0})}catch(y){const E=y instanceof Error?y.message:String(y);V.error("切换失败:"+E)}}})}function pe({key:y}){if(typeof y=="string"&&y.startsWith("desktop:")){X(y);return}S.push({mcp:"/mcp"}[y]||`/${y}`)}z(()=>g.connect());const x={router:S,route:n,ws:g,themeStore:h,t:o,shellMode:s,collapsed:f,cfg:_,isProject:O,PRODUCT_VERSION:M,currentTheme:C,menuTheme:D,selectedKeys:P,ALL_GROUP_KEYS:r,OPEN_KEYS_LS:Y,loadOpenKeys:w,openKeys:A,wsStatus:c,statusBadge:b,statusText:R,setTheme:U,locale:I,SUPPORTED_LOCALES:K,setLocale:Q,toggleLocale:ce,openDesktopWindow:X,switchToDesktopShell:ye,onMenuClick:pe,ref:j,computed:v,onMounted:z,watch:ne,get useRouter(){return J},get useRoute(){return te},get DashboardOutlined(){return _t},get MessageOutlined(){return gt},get RocketOutlined(){return kt},get AppstoreOutlined(){return mt},get ApiOutlined(){return ft},get FolderOutlined(){return pt},get GlobalOutlined(){return yt},get InfoCircleOutlined(){return ct},get ControlOutlined(){return ut},get FileTextOutlined(){return dt},get CloudServerOutlined(){return st},get BookOutlined(){return rt},get BranchesOutlined(){return lt},get ClockCircleOutlined(){return at},get ThunderboltOutlined(){return it},get ApartmentOutlined(){return ot},get SafetyCertificateOutlined(){return nt},get LockOutlined(){return tt},get WifiOutlined(){return et},get CodeOutlined(){return $e},get ProjectOutlined(){return xe},get WalletOutlined(){return Xe},get TeamOutlined(){return Qe},get BarChartOutlined(){return Ze},get BlockOutlined(){return Ye},get CloudUploadOutlined(){return Je},get ReadOutlined(){return qe},get KeyOutlined(){return He},get VideoCameraOutlined(){return Ge},get ShareAltOutlined(){return ze},get IdcardOutlined(){return We},get UsergroupAddOutlined(){return Ve},get ShoppingOutlined(){return Ke},get SwapOutlined(){return Ie},get AlertOutlined(){return Fe},get SafetyOutlined(){return Ne},get ExperimentOutlined(){return Ue},get DeploymentUnitOutlined(){return Pe},get BulbOutlined(){return De},get BankOutlined(){return je},get PartitionOutlined(){return Re},get AuditOutlined(){return Me},get FileSearchOutlined(){return Be},get TrophyOutlined(){return Ae},get FireOutlined(){return Te},get SearchOutlined(){return Ee},get NumberOutlined(){return Ce},get ClusterOutlined(){return Se},get SoundOutlined(){return Le},get DesktopOutlined(){return ve},get BellOutlined(){return de},get SyncOutlined(){return we},get MobileOutlined(){return ue},get DatabaseOutlined(){return be},get UnorderedListOutlined(){return he},get FileDoneOutlined(){return Oe},get message(){return V},get Modal(){return le},get useWsStore(){return H},get useThemeStore(){return oe},get THEMES(){return ge},get logoSrc(){return Ot},get useShellMode(){return N},get useI18n(){return ie},get useLocale(){return ae},NotificationBell:Bt,MobileBridgeHeaderStatus:Dt};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},Ut=["src"],Nt={key:0,class:"logo-text"},Ft={key:0,class:"mode-banner project"},It={class:"banner-info"},Kt={class:"banner-name"},Vt={class:"banner-sub"},Wt={key:1,class:"mode-banner global"},zt={class:"banner-name"},Gt=["title"],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={class:"group-label"},en={key:0,class:"footer-text"},tn={class:"header-left"},nn={class:"header-right"},on={class:"theme-switcher"},an=["data-theme-key","onClick"],ln=["data-locale"],rn={class:"lang-switch-label"},sn={class:"version-tag"};function dn(i,u,S,n,g,h){const o=k("a-menu-item"),s=k("a-sub-menu"),f=k("a-menu-divider"),_=k("a-menu"),O=k("a-badge"),M=k("a-layout-sider"),C=k("a-tooltip"),D=k("a-tag"),P=k("a-layout-header"),r=k("router-view"),w=k("a-layout-content"),A=k("a-layout");return p(),B(A,{class:"app-root"},{default:t(()=>[m(" ── Sidebar ─────────────────────────────────────────────────── "),e(M,{collapsed:n.collapsed,"onUpdate:collapsed":u[2]||(u[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,Ut),n.collapsed?m("v-if",!0):(p(),L("span",Nt,"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(),B(n.FolderOutlined,{key:0,style:{color:"#1677ff"}})):(p(),B(n.GlobalOutlined,{key:1,style:{color:"#722ed1"}}))],8,Gt)):(p(),L(F,{key:0},[n.isProject?(p(),L("div",Ft,[e(n.FolderOutlined,{class:"banner-icon"}),d("div",It,[d("div",Kt,a(n.cfg.projectName||i.$t("appLayout.scope.fallbackProject")),1),d("div",Vt,a(i.$t("appLayout.scope.projectPanel")),1)])])):(p(),L("div",Wt,[e(n.GlobalOutlined,{class:"banner-icon"}),d("span",zt,a(i.$t("appLayout.scope.global")),1)]))],64)),m(" Navigation "),e(_,{selectedKeys:n.selectedKeys,"onUpdate:selectedKeys":u[0]||(u[0]=c=>n.selectedKeys=c),openKeys:n.openKeys,"onUpdate:openKeys":u[1]||(u[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(F,{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(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),_: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(F,{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(F,{key:0},[e(s,{key:"g-overview"},{title:t(()=>[d("span",Ht,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",qt,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",Jt,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(()=>[u[3]||(u[3]=l("个人数据中台",-1))]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),default:t(()=>[u[4]||(u[4]=l("数据浏览器",-1))]),_:1}),e(o,{key:"family-guard"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[u[5]||(u[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}),e(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[u[6]||(u[6]=l("后台 Agent",-1))]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),default:t(()=>[u[7]||(u[7]=l("交付物",-1))]),_:1})]),_:1}),e(s,{key:"g-advanced"},{title:t(()=>[d("span",Yt,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:"remote-session"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.remoteSession","远程会话")),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",Zt,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",Qt,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",Xt,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(),B(s,{key:"g-desktop"},{title:t(()=>[d("span",$t,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",en,a(n.statusText),1))],2)]),_:1},8,["collapsed"]),m(" ── Main area ───────────────────────────────────────────────── "),e(
|
|
5
|
+
renderer (full electronAPI / UKey / FS / settings live there). `),n.shellMode.isEmbedded?(p(),B(s,{key:"g-desktop"},{title:t(()=>[d("span",$t,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",en,a(n.statusText),1))],2)]),_:1},8,["collapsed"]),m(" ── Main area ───────────────────────────────────────────────── "),e(A,{class:"main-area"},{default:t(()=>[m(" Header "),e(P,{class:"app-header"},{default:t(()=>[d("div",tn,[d("div",{class:W(["scope-tag",n.isProject?"project":"global"])},[(p(),B(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(),B(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",nn,[m(" Theme switcher "),d("div",on,[(p(!0),L(F,null,se(n.THEMES,(c,b)=>(p(),B(C,{key:b,title:c.label},{default:t(()=>[d("button",{class:W(["theme-btn",{active:n.currentTheme===b}]),"data-theme-key":b,onClick:R=>n.setTheme(b)},a(c.icon),11,an)]),_: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",rn,a(i.$t("language.switch")),1)],8,ln)]),_: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(),B(n.NotificationBell,{key:0})):m("v-if",!0),d("span",sn,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(),B(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(
|
|
9
|
+
just shows 0 and the drawer is empty. `),n.shellMode.isEmbedded?(p(),B(n.NotificationBell,{key:0})):m("v-if",!0),d("span",sn,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(),B(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(D,{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 Dn=Z(Pt,[["render",dn],["__scopeId","data-v-6f6437fc"],["__file","/tmp/cc-web-panel-3e4hnj/repo/packages/web-panel/src/components/AppLayout.vue"]]);export{Dn as default};
|