chainlesschain 0.162.78 → 0.162.80
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/README.md +37 -1
- package/bin/chainlesschain.js +20 -1
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-BhKMd38k.js → AIOps-CwebRiRI.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BzhKY5C_.js → ActionButton-C7h2xsW3.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CATIz2Jc.js → Analytics-BRdOQzzK.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-eCx64YWg.js → AppLayout-D_i-Jbsu.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-CGOHfCHj.js → Audit-AgCF_nLK.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-Dyr6R0Ra.js → Backup-Be9up1Uo.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CVhBu7NZ.js → BaseInput-2j-7gyTU.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DOCCKp2k.js → Chat-ZyYadHdk.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DcXCCnjN.js → ChatBubbleRenderer-CwnbmcAg.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-3yjnENud.js → Checkbox-Di0bejSO.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-D06sn8kB.js → Codegen-BgEwqrVh.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Bjn5vFES.js → Col-FIduoerd.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BYHpQHmf.js → Community-Bf7olKXg.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-MKRmnUDQ.js → Compact-CsjIF6B3.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CVtPe8dh.js → Compliance-CQchRaQh.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BRu5M3dv.js → Cowork-gJzDgX9E.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-D_7eU5Ut.js → Cron-CDjeagXb.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BFyVp_e9.js → Crosschain-D4UE5bt0.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DRoG7638.js → DID-OwvsxTzD.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-NfM_v-Oe.js → Dashboard-CbmOlZ1l.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CGN1Ksu0.js → Dropdown-B6tBUMev.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DhsY_z_a.js → EmailListRenderer-DnM2-O3n.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-vW_VsKUG.js → FamilyGuardDashboard-DPD9znJH.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-D2ob_c7h.js → Federation-DjUj87Vr.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Cpem15Pr.js → FormItemContext-DyPgrKLf.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-P6XfmXwT.js → GenericCardRenderer-D3fmbO1W.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CfSeec1R.js → Git-IvwC_R2h.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-4ipIpqNl.js → Governance-CTVEvxpW.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CiQY_P9Y.js → Inference-DQlp7Rf1.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-B3Qem78R.js → KnowledgeGraph-Cg8pVh5j.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-De2zWVy6.js → Logs-D7kLXyaK.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-CTNu4c1A.js → Marketplace-QOj6g-oT.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Xx25EA2f.js → McpTools-PO9yrTD6.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-YzzCCrch.js → Memory-B1FwSFmt.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CJZY98f0.js → MobileBridge-CYiQSoKu.js} +3 -3
- package/src/assets/web-panel/assets/{MobileProjects-Dw7yl4KN.js → MobileProjects-BThUga4r.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-D7TzGJhH.js → Mtc-B4pMzmr7.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-THyGhf0h.js → MtcAudit-D6-KGsvR.js} +6 -6
- package/src/assets/web-panel/assets/{Multisig-RVxuGPUR.js → Multisig-BlZigJMj.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DK7TCzKF.js → NLProgramming-Dhy92OLw.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BaOU0psj.js → Notes-DOSv2Lb0.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-BMivJy85.js → NotificationSettings-FRWsHQfi.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BZOiY8Yw.js → OrderTableRenderer-xRSRWRZg.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-zVRtW1n_.js → Organization-DApwYY-B.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-C0YLldFH.js → Overflow-DyJQHxIY.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Xxgzghqp.js → P2P-NKTPd_Bn.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DH_LO13b.js → PdhVaultBrowser-DCgGt1BE.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-CvAd1VBw.js → Permissions-BX9MCb2z.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CWQGgCAK.js → PersonalDataHub-Bcg4az84.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-BNAoh-Lb.js → Pipeline-DjsbfwbG.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CNO5pFq-.js → Privacy-kDWl06vo.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-WaVVDsm3.js → ProjectInit-yCe-Imkv.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-D1WfkuJ3.js → ProjectSettings-tVcxlGJ5.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BzjvJYMW.js → Projects-DGL4Za4o.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-IOOJ4_wy.js → Providers-CciGxskW.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-ChHZqVZy.js → QuickAsk-It17rT4F.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CSiW6Qv9.js → Recommend-CixKdpBl.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-BQe0rkfF.js → Reputation-LB0_D2lx.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Dem0Wxxb.js → Row-BoiDd-zb.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-pBY5G41C.js → RssFeed-yA5FdTgh.js} +2 -2
- package/src/assets/web-panel/assets/{Search-CtRepO6B.js → Search-xYldUFeJ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-nrSlKpWq.js → Security-BtRMnkFm.js} +4 -4
- package/src/assets/web-panel/assets/{Services-DeaDBASi.js → Services-CNKTgE2v.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Cz9R-Wjb.js → Skeleton-B9goiUo_.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-B3U-XLH3.js → Skills-CUf2Z5Ge.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Bu46dIA_.js → Sla-TPga8c2I.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-C9Z0V0pk.js → SpeechSettings-B8zrmLP6.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Ctj9KHHr.js → SyncSettings-DGyAbZ84.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-D4upQgR_.js → Tasks-DPeVrQNM.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-JHsPGU_c.js → Templates-CNLco6pc.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-uoaQL3fB.js → Tenant-CL9Eczo8.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-DGLvbp97.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-BTicmSAV.js → TimelineRenderer-Cv0LxMwd.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Bp3BUe2K.js → Tokens-DLhHgtcS.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CgoISw5d.js → Trigger-DzDaE-An.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CC29awNT.js → Trust-CRh-fhYe.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CB1SB6Nc.js → UkeySign-_xBJ16UC.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D7vptDUg.js → VideoEditing-Z5m_edIa.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BWfjzF7p.js → Wallet-DgmchNit.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-Dzz5OnPc.js → WebAuthn-BxuKxjuf.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-CiDeVmsG.js → WorkflowEditor-luJ180aM.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DQbciNb5.js → chat-DzglnTps.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DcLbPJzb.js → colors-DelLNoxZ.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CvYrR3rc.js → compact-item-BZaabUge.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BR4P7Rgm.js → createContext-DqTSTjmk.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CJLMPKYL.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-IQ88RNRJ.js → hasIn-CAeHUQj2.js} +1 -1
- package/src/assets/web-panel/assets/index-7CJalvEf.js +1 -0
- package/src/assets/web-panel/assets/{index-Bw0Dm_P6.js → index-7FxBHcH8.js} +1 -1
- package/src/assets/web-panel/assets/{index-Db5LFFCN.js → index-BAcpfWwI.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5W1vQHV.js → index-BAfdWN9t.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUTN1VlO.js → index-BR-DF81e.js} +3 -3
- package/src/assets/web-panel/assets/{index-BmPuR0aA.js → index-BTbN0V4A.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8OJdOc_.js → index-Bv2Tp7kz.js} +1 -1
- package/src/assets/web-panel/assets/{index-BhkZZXtI.js → index-BzLgm3Jm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzERBV9P.js → index-CBZPDGTg.js} +1 -1
- package/src/assets/web-panel/assets/{index-UbB2IcFR.js → index-CBtnHlYF.js} +1 -1
- package/src/assets/web-panel/assets/{index-eKd1n8pw.js → index-CDw1am9U.js} +1 -1
- package/src/assets/web-panel/assets/{index-JqOP7puJ.js → index-CI5cynRw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiMlLIZ-.js → index-CKZQVcH1.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgP5aQmA.js → index-CV4FisuU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BH2RT15D.js → index-CaSLz8-6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DgaCUxpi.js → index-Cj7oeTxA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdQBxvpt.js → index-Clq1OP4B.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bl1TSbTE.js → index-CppTZ4SW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQXs-5db.js → index-D-QuIaEh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGwa8mnJ.js → index-D-lVDXUg.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHIp5msb.js → index-DE4-6oHW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCO8yc1h.js → index-DM7xncnU.js} +1 -1
- package/src/assets/web-panel/assets/{index-b6FjzfoJ.js → index-DRt2lx0X.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bo7HAK6G.js → index-DSATjRyg.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dpmnk2qv.js → index-DU9QWJO5.js} +1 -1
- package/src/assets/web-panel/assets/{index-Mn8_ryOe.js → index-DXvcxNo5.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dox9vEhP.js → index-DhMSUhbW.js} +1 -1
- package/src/assets/web-panel/assets/{index-bRT7u-51.js → index-Dk1R9vFq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHxJnExB.js → index-DrSuq6t6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPOupQSX.js → index-DtfTElxo.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxY0ozve.js → index-KeadEGaZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvQpTO67.js → index-NZBXGj64.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiOZ_Whh.js → index-OGKhEFZZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeCWyiFl.js → index-RZ23Wlp8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVb6RI7f.js → index-WzAdJ0PX.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cm74AosZ.js → index-Xo2WWPZ4.js} +1 -1
- package/src/assets/web-panel/assets/index-_hLbeSOT.js +1 -0
- package/src/assets/web-panel/assets/{index-CE2mqX8w.js → index-kJ30C4m8.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bu8931Yi.js → index-vLR-ssxc.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C0arzCLE.js → initDefaultProps-BiHvIjo1.js} +1 -1
- package/src/assets/web-panel/assets/{motion-C1K6JxwD.js → motion-COD0OBOe.js} +1 -1
- package/src/assets/web-panel/assets/{move-DREsRLHj.js → move-DJNLMhIj.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BtPS3EDq.js → omit-4qrDRhlN.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BPz6tHoT.js → pickAttrs-3jv8tAgW.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B0CR_CSI.js → placementArrow-N1UVUOH_.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Ch2ojiNn.js → responsiveObserve-D67_gjCH.js} +1 -1
- package/src/assets/web-panel/assets/{slide-9qU9vOhj.js → slide-DiDh7_u4.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Cr4fICjV.js → statusUtils-Dzz3tSiz.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cor2-FwV.js → styleChecker-L-tgt7xx.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BINo_rNH.js → useFlexGapSupport-vAgElNal.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Dm1tDNYC.js → useFs-af0c_HYI.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-__JgBEkX.js → usePersonalDataHub-V9U2Mbny.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-1hQKpRgP.js → vnode-C7zS_LLr.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-C1EY9X2J.js → zoom-DdXBDemd.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/audit.js +4 -3
- package/src/commands/automation.js +6 -14
- package/src/commands/bi.js +10 -9
- package/src/commands/codegen.js +5 -13
- package/src/commands/dao.js +8 -6
- package/src/commands/dbevo.js +13 -14
- package/src/commands/economy.js +3 -2
- package/src/commands/evolution.js +3 -2
- package/src/commands/federation.js +4 -3
- package/src/commands/governance.js +9 -4
- package/src/commands/hardening.js +5 -4
- package/src/commands/incentive.js +6 -5
- package/src/commands/kg.js +17 -10
- package/src/commands/lowcode.js +23 -11
- package/src/commands/marketplace.js +4 -3
- package/src/commands/mcp.js +17 -5
- package/src/commands/ops.js +9 -4
- package/src/commands/recommend.js +7 -5
- package/src/commands/scim.js +3 -2
- package/src/commands/session.js +9 -6
- package/src/commands/social.js +4 -3
- package/src/commands/sync.js +3 -2
- package/src/commands/tenant.js +11 -6
- package/src/commands/zkp.js +8 -9
- package/src/gateways/ws/ws-agent-handler.js +12 -3
- package/src/gateways/ws/ws-server.js +6 -0
- package/src/harness/background-task-manager.js +44 -18
- package/src/harness/mcp-client.js +125 -46
- package/src/lib/chat-core.js +209 -107
- package/src/lib/claude-code-bridge.js +13 -1
- package/src/lib/dao-governance.js +3 -3
- package/src/lib/downloader.js +82 -25
- package/src/lib/headless-config-command.js +62 -0
- package/src/lib/json-schema-output.js +55 -11
- package/src/lib/mcp-oauth.js +110 -21
- package/src/lib/mcp-serve.js +70 -11
- package/src/lib/multisig-runtime.js +22 -3
- package/src/lib/parse-json-option.js +35 -0
- package/src/lib/parse-number-option.js +27 -0
- package/src/lib/runnable-provider.js +216 -0
- package/src/repl/agent-repl.js +76 -17
- package/src/repl/config-summary.js +66 -0
- package/src/runtime/agent-core.js +210 -37
- package/src/runtime/headless-runner.js +49 -1
- package/src/runtime/headless-stream.js +34 -0
- package/src/assets/web-panel/assets/Terminal-CWRWr8bq.js +0 -3
- package/src/assets/web-panel/assets/devWarning-CnV02N63.js +0 -1
- package/src/assets/web-panel/assets/index-DJ2gkaIH.js +0 -1
- package/src/assets/web-panel/assets/index-Dvm_-AOi.js +0 -1
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ clchain start # equivalent to: chainlesschain start
|
|
|
30
30
|
|
|
31
31
|
## Commands
|
|
32
32
|
|
|
33
|
-
> **
|
|
33
|
+
> **158 top-level commands** are registered (as of CLI v0.162.78). The sections below document the most-used ones with full options. For the complete, always-current list, run `chainlesschain --help` (or `cc --help`) — that output is the canonical source of truth.
|
|
34
34
|
|
|
35
35
|
### `chainlesschain setup`
|
|
36
36
|
|
|
@@ -1417,6 +1417,42 @@ chainlesschain loop "nightly sweep" --save nightly # Persist; later: --r
|
|
|
1417
1417
|
|
|
1418
1418
|
Options: `--every <dur>` (30s / 5m / 1.5h), `-n, --max-iterations <n>`, `--until-exit-zero`, `--until <regex>`, `--dynamic`, `--save [id]`, `--resume <id>`, `--json`. Unknown flags pass through to the wrapped agent/command.
|
|
1419
1419
|
|
|
1420
|
+
### `chainlesschain review [effort]`
|
|
1421
|
+
|
|
1422
|
+
Diff-first code review of your working changes (Claude-Code `/code-review` parity). Reviews the working tree by default; scope it to staged changes, a branch base, or an explicit revision range.
|
|
1423
|
+
|
|
1424
|
+
```bash
|
|
1425
|
+
chainlesschain review # Review working changes (effort: medium)
|
|
1426
|
+
chainlesschain review high --paths src/ # Higher effort, limited to paths
|
|
1427
|
+
chainlesschain review --staged # Staged changes only
|
|
1428
|
+
chainlesschain review --base main # This branch vs a base ref
|
|
1429
|
+
chainlesschain review --fix # Apply fixes to the working tree (auto-checkpointed)
|
|
1430
|
+
chainlesschain review --security # Security-focused (/security-review parity)
|
|
1431
|
+
chainlesschain review --simplify # Cleanup-only, no bug hunt (/simplify parity)
|
|
1432
|
+
chainlesschain review --comment # Post findings as inline PR comments (via gh)
|
|
1433
|
+
```
|
|
1434
|
+
|
|
1435
|
+
Options: `-e, --effort <low|medium|high>`, `--range <A..B>`, `--no-untracked`, `--no-checkpoint`, `--model`/`--provider`/`--base-url`/`--api-key`, `--max-turns <n>`, `--dry-run`, `--json`.
|
|
1436
|
+
|
|
1437
|
+
### `chainlesschain insights [id]`
|
|
1438
|
+
|
|
1439
|
+
Analyze a session — turns, tools used, errors, duration, and token usage + cost. Defaults to the most-recent session when the ID is omitted.
|
|
1440
|
+
|
|
1441
|
+
```bash
|
|
1442
|
+
chainlesschain insights # Most recent session
|
|
1443
|
+
chainlesschain insights <session-id> # One session
|
|
1444
|
+
chainlesschain insights --json # JSON output
|
|
1445
|
+
```
|
|
1446
|
+
|
|
1447
|
+
### `chainlesschain terminal-setup`
|
|
1448
|
+
|
|
1449
|
+
Bind **Shift+Enter** to a REPL newline in your terminal (Claude-Code parity). Prints the manual steps by default, or writes the VS Code keybinding with `--apply`.
|
|
1450
|
+
|
|
1451
|
+
```bash
|
|
1452
|
+
chainlesschain terminal-setup # Print binding instructions
|
|
1453
|
+
chainlesschain terminal-setup --apply # Write the keybinding (VS Code only)
|
|
1454
|
+
```
|
|
1455
|
+
|
|
1420
1456
|
### `chainlesschain goal <action>`
|
|
1421
1457
|
|
|
1422
1458
|
Cross-session persistent goals / OKRs. Bind a goal into headless runs with `cc agent -p --goal <id>` (add `--goal-assess` for a run-end LLM progress assessment).
|
package/bin/chainlesschain.js
CHANGED
|
@@ -19,5 +19,24 @@ if (!process.stderr.isTTY && process.stderr._handle?.setBlocking) {
|
|
|
19
19
|
|
|
20
20
|
import { createProgram } from "../src/index.js";
|
|
21
21
|
|
|
22
|
+
// Centralized friendly-error boundary. An uncaught error thrown from a command
|
|
23
|
+
// action (e.g. malformed --json input, a failed DB op) otherwise surfaces as a
|
|
24
|
+
// raw stack trace via Node's default unhandledRejection. Turn it into a clean
|
|
25
|
+
// one-line `error: <message>` instead; restore the full stack under --verbose
|
|
26
|
+
// or CC_DEBUG/DEBUG for debugging.
|
|
27
|
+
function reportFatal(err) {
|
|
28
|
+
const verbose =
|
|
29
|
+
process.argv.includes("--verbose") ||
|
|
30
|
+
Boolean(process.env.CC_DEBUG) ||
|
|
31
|
+
Boolean(process.env.DEBUG);
|
|
32
|
+
if (verbose && err && err.stack) {
|
|
33
|
+
process.stderr.write(`${err.stack}\n`);
|
|
34
|
+
} else {
|
|
35
|
+
const msg = err && err.message ? err.message : String(err);
|
|
36
|
+
process.stderr.write(`error: ${msg}\n`);
|
|
37
|
+
}
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
|
|
22
41
|
const program = createProgram();
|
|
23
|
-
program.
|
|
42
|
+
program.parseAsync(process.argv).catch(reportFatal);
|
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 Z,b as Q,r as C,P as u,Q as y,F as z,Z as G}from"./vendor-BvqAck49.js";import{_ as ze,u as de,b as ce,d as f}from"./index-BUTN1VlO.js";import{s as Ie}from"./community-parser-CO25nZFt.js";import ue from"./index-Bl1TSbTE.js";import{f as Oe,c as Pe,b2 as Te,aY as Ee,aa as Le,s as Ne,as as je,R as Ue}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BtPS3EDq.js";import"./pickAttrs-BPz6tHoT.js";import"./initDefaultProps-C0arzCLE.js";import"./motion-C1K6JxwD.js";import"./raf-Deuc0E8-.js";import"./index-JqOP7puJ.js";import"./index-eKd1n8pw.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-CnV02N63.js";import"./compact-item-CvYrR3rc.js";import"./createContext-BR4P7Rgm.js";import"./Compact-MKRmnUDQ.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-Cor2-FwV.js";import"./zoom-C1EY9X2J.js";import"./ActionButton-BzhKY5C_.js";import"./vnode-1hQKpRgP.js";function H(t){const a=Ie(t);if(!a)return null;try{return JSON.parse(a)}catch{}const s=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const De=Object.freeze(["P0","P1","P2","P3"]),Me=Object.freeze(["open","acknowledged","resolved","closed"]);function g(t,a=0){return typeof t=="number"&&Number.isFinite(t)?t:a}function Je(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(Je).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 Ve={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(Ve)),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 Ke(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 Qe={__name:"AIOps",setup(t,{expose:a}){a();const s=de(),{t:e}=ce(),P=C(!1),N=C(!1),w=C(!1),j=C([]),X=C([]),$=C([]),D=C({incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}}),I=C("incidents"),A=C(""),T=C(""),W=C(!1),R=C(!1),O=C(!1),q=C(!1),x=Z({severity:"P3",metric:"",description:""}),_=Z({name:"",triggerJson:"",stepsJson:""}),M=Z({metric:"",values:""}),U=Z({metric:"",value:null,algorithm:"z_score"}),J=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"}]),Y=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"}]),B=Q(()=>D.value.incidents.byStatus.open+D.value.incidents.byStatus.acknowledged),V=Q(()=>{let n=j.value;return A.value&&(n=n.filter(d=>d.severity===A.value)),T.value&&(n=n.filter(d=>d.status===T.value)),n});function K(n){const d=`aiops.statusLabels.${n}`,m=e(d);return m===d?n:m}function ae(n){return{open:"red",acknowledged:"orange",resolved:"cyan",closed:"default"}[n]||"default"}function i(n){return{P0:"red",P1:"volcano",P2:"orange",P3:"gold"}[n]||"default"}function c(n){const d=`aiops.reasonLabels.${n}`,m=e(d);return m===d?n:m}function E(n,d){return n?n.length>d?n.slice(0,d)+"...":n:""}function ve(n){return!n||n<=0?e("aiops.duration.none"):n<1e3?`${n}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:n<36e5?`${(n/6e4).toFixed(1)}min`:`${(n/36e5).toFixed(1)}h`}function ge({key:n}){n==="incident"?W.value=!0:n==="playbook"?R.value=!0:n==="baseline"?O.value=!0:n==="detect"&&(J.value=null,q.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:""}))]);j.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}N.value=!0;try{const n=[`ops incident-create --severity ${x.severity}`];x.metric.trim()&&n.push(`--metric "${x.metric.trim().replace(/"/g,'\\"')}"`),n.push(`--description "${x.description.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"incidentId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.incidentCreated")),W.value=!1,oe(),await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{N.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}N.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{N.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}N.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{N.value=!1}}async function Ce(){if(!U.metric||U.value==null){f.warning(e("aiops.msg.detectFieldsEmpty"));return}w.value=!0,J.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}J.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:N,detecting:w,incidents:j,playbooks:X,baselines:$,stats:D,activeTab:I,incidentSeverityFilter:A,incidentStatusFilter:T,showIncidentModal:W,showPlaybookModal:R,showBaselineModal:O,showDetectModal:q,incidentForm:x,playbookForm:_,baselineForm:M,detectForm:U,detectResult:J,incidentColumns:ee,playbookColumns:F,baselineColumns:Y,openCount:B,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:Z,h:re,get ReloadOutlined(){return Ue},get PlusOutlined(){return je},get AlertOutlined(){return Ne},get RocketOutlined(){return Le},get LineChartOutlined(){return Ee},get FundOutlined(){return Te},get ExclamationCircleOutlined(){return Pe},get CheckCircleOutlined(){return Oe},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 Ke},get SEVERITIES(){return De},get INCIDENT_STATUSES(){return Me}};return Object.defineProperty(ne,"__isScriptSetup",{enumerable:!1,value:!0}),ne}},We={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ye={class:"page-title"},Ze={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"}},$e={key:1,style:{color:"var(--text-muted)"}},et={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},tt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ot={style:{color:"var(--text-primary)","font-weight":"500"}},lt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},it={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},rt={style:{color:"#1677ff"}},dt={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},ct={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},yt={key:1,style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},ft={key:2,style:{"margin-top":"8px"}};function bt(t,a,s,e,P,N){const w=b("a-button"),j=b("a-menu-item"),X=b("a-menu"),$=b("a-dropdown"),D=b("a-space"),I=b("a-statistic"),A=b("a-card"),T=b("a-col"),W=b("a-row"),R=b("a-tag"),O=b("a-radio-button"),q=b("a-radio-group"),x=b("a-table"),_=b("a-tab-pane"),M=b("a-switch"),U=b("a-tabs"),J=b("a-select-option"),ee=b("a-select"),F=b("a-form-item"),Y=b("a-input"),B=b("a-textarea"),V=b("a-form"),K=b("a-modal"),ae=b("a-input-number");return u(),v("div",null,[S("div",We,[S("div",null,[S("h2",Ye,r(t.$t("aiops.title")),1),S("p",Ze,r(t.$t("aiops.subtitle")),1)]),o(D,null,{default:l(()=>[o(w,{loading:e.loading,onClick:e.loadAll},{icon:l(()=>[o(e.ReloadOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.refresh")),1)]),_:1},8,["loading"]),o($,{trigger:["click"]},{overlay:l(()=>[o(X,{onClick:e.handleNewClick},{default:l(()=>[o(j,{key:"incident"},{default:l(()=>[o(e.AlertOutlined),y(" "+r(t.$t("aiops.actions.incident")),1)]),_:1}),o(j,{key:"playbook"},{default:l(()=>[o(e.RocketOutlined),y(" "+r(t.$t("aiops.actions.playbook")),1)]),_:1}),o(j,{key:"baseline"},{default:l(()=>[o(e.LineChartOutlined),y(" "+r(t.$t("aiops.actions.baseline")),1)]),_:1}),o(j,{key:"detect"},{default:l(()=>[o(e.FundOutlined),y(" "+r(t.$t("aiops.actions.detect")),1)]),_:1})]),_:1})]),default:l(()=>[o(w,{type:"primary"},{icon:l(()=>[o(e.PlusOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.newDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stats overview "),o(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.incidents"),value:e.stats.incidents.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:l(()=>[o(e.AlertOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.pending"),value:e.stats.incidents.byStatus.open+e.stats.incidents.byStatus.acknowledged,"value-style":{color:e.openCount>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.playbooks"),value:e.stats.playbooks.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:l(()=>[o(e.RocketOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.enabled"),value:e.stats.playbooks.enabled,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:24,sm:8,lg:4},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.baselines"),value:e.stats.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:l(()=>[o(e.LineChartOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Severity breakdown bar "),e.stats.incidents.total>0?(u(),h(A,{key:0,title:t.$t("aiops.severityCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:l(()=>[o(D,{size:[12,8],wrap:""},{default:l(()=>[(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(R,{key:i,color:e.severityColor(i),style:{"font-size":"13px",padding:"2px 10px"}},{default:l(()=>[y(r(i)+": "+r(e.stats.incidents.bySeverity[i]||0),1)]),_:2},1032,["color"]))),128)),S("span",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(q,{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(q,{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",Xe,r(c.anomalyMetric),1)):(u(),v("span",$e,"—"))],64)):p("v-if",!0),i.key==="description"?(u(),v("span",et,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",tt,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",at,[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",ot,r(c.name),1),c.triggerCondition?(u(),v("div",lt,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",it,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",nt,[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",st,r(c.metricName),1)):p("v-if",!0),i.key==="mean"?(u(),v(z,{key:1},[S("span",rt,r(c.mean),1),S("span",dt,"σ "+r(c.stdDev),1)],64)):p("v-if",!0),i.key==="iqr"?(u(),v("span",ct," 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",ut,r(e.formatOpsTime(c.updatedAt)),1)):p("v-if",!0)]),emptyText:l(()=>[S("div",pt,[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(J,{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(Y,{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(B,{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(Y,{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(B,{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(B,{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(Y,{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(B,{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(J,{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(q,{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",mt,r(t.$t("aiops.detect_modal.reasonLine",{reason:e.reasonLabel(e.detectResult.reason)})),1)):p("v-if",!0),e.detectResult.baseline?(u(),v("div",yt,[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",ft,[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 Jt=ze(Qe,[["render",bt],["__scopeId","data-v-b804918b"],["__file","/tmp/cc-web-panel-UKI3LY/repo/packages/web-panel/src/views/AIOps.vue"]]);export{Jt 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 H,b as Q,r as C,P as u,Q as y,F as z,Z as X}from"./vendor-BvqAck49.js";import{_ as ze,u as de,b as ce,d as f}from"./index-BR-DF81e.js";import{s as Oe}from"./community-parser-CO25nZFt.js";import ue from"./index-CppTZ4SW.js";import{f as Ie,c as Pe,b2 as Te,aY as Ee,aa as Le,s as Ne,as as je,R as Ue}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-4qrDRhlN.js";import"./pickAttrs-3jv8tAgW.js";import"./initDefaultProps-BiHvIjo1.js";import"./motion-COD0OBOe.js";import"./raf-Deuc0E8-.js";import"./index-CI5cynRw.js";import"./index-CDw1am9U.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-CJLMPKYL.js";import"./compact-item-BZaabUge.js";import"./createContext-DqTSTjmk.js";import"./Compact-CsjIF6B3.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-L-tgt7xx.js";import"./zoom-DdXBDemd.js";import"./ActionButton-C7h2xsW3.js";import"./vnode-C7zS_LLr.js";function Y(t){const a=Oe(t);if(!a)return null;try{return JSON.parse(a)}catch{}const s=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const De=Object.freeze(["P0","P1","P2","P3"]),Me=Object.freeze(["open","acknowledged","resolved","closed"]);function g(t,a=0){return typeof t=="number"&&Number.isFinite(t)?t:a}function Je(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=Y(t);return Array.isArray(a)?a.map(Je).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=Y(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=Y(t);return Array.isArray(a)?a.map(Be).filter(Boolean):[]}function fe(t){const a=Y(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 Ve={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(Ve)),s=Y(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 Ke(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 Qe={__name:"AIOps",setup(t,{expose:a}){a();const s=de(),{t:e}=ce(),P=C(!1),N=C(!1),w=C(!1),j=C([]),G=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:[]}}),O=C("incidents"),A=C(""),T=C(""),W=C(!1),R=C(!1),I=C(!1),q=C(!1),x=H({severity:"P3",metric:"",description:""}),_=H({name:"",triggerJson:"",stepsJson:""}),M=H({metric:"",values:""}),U=H({metric:"",value:null,algorithm:"z_score"}),J=C(null),ee=Q(()=>[{title:e("aiops.incidentCols.severity"),key:"severity",width:"90px"},{title:e("aiops.incidentCols.metric"),key:"metric",width:"160px"},{title:e("aiops.incidentCols.description"),key:"description"},{title:e("aiops.incidentCols.status"),key:"status",width:"100px"},{title:e("aiops.incidentCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.incidentCols.action"),key:"action",width:"220px"}]),F=Q(()=>[{title:e("aiops.playbookCols.name"),key:"name"},{title:e("aiops.playbookCols.enabled"),key:"enabled",width:"80px"},{title:e("aiops.playbookCols.stats"),key:"stats",width:"180px"},{title:e("aiops.playbookCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.playbookCols.action"),key:"action",width:"160px"}]),Z=Q(()=>[{title:e("aiops.baselineCols.metric"),key:"metric"},{title:e("aiops.baselineCols.mean"),key:"mean",width:"180px"},{title:e("aiops.baselineCols.iqr"),key:"iqr",width:"180px"},{title:e("aiops.baselineCols.sampleCount"),key:"sampleCount",width:"90px"},{title:e("aiops.baselineCols.updatedAt"),key:"updatedAt",width:"160px"}]),B=Q(()=>D.value.incidents.byStatus.open+D.value.incidents.byStatus.acknowledged),V=Q(()=>{let n=j.value;return A.value&&(n=n.filter(d=>d.severity===A.value)),T.value&&(n=n.filter(d=>d.status===T.value)),n});function K(n){const d=`aiops.statusLabels.${n}`,m=e(d);return m===d?n:m}function ae(n){return{open:"red",acknowledged:"orange",resolved:"cyan",closed:"default"}[n]||"default"}function i(n){return{P0:"red",P1:"volcano",P2:"orange",P3:"gold"}[n]||"default"}function c(n){const d=`aiops.reasonLabels.${n}`,m=e(d);return m===d?n:m}function E(n,d){return n?n.length>d?n.slice(0,d)+"...":n:""}function ve(n){return!n||n<=0?e("aiops.duration.none"):n<1e3?`${n}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:n<36e5?`${(n/6e4).toFixed(1)}min`:`${(n/36e5).toFixed(1)}h`}function ge({key:n}){n==="incident"?W.value=!0:n==="playbook"?R.value=!0:n==="baseline"?I.value=!0:n==="detect"&&(J.value=null,q.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:""}))]);j.value=pe(n.output),G.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}N.value=!0;try{const n=[`ops incident-create --severity ${x.severity}`];x.metric.trim()&&n.push(`--metric "${x.metric.trim().replace(/"/g,'\\"')}"`),n.push(`--description "${x.description.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"incidentId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.incidentCreated")),W.value=!1,oe(),await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{N.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}N.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(),O.value="playbooks",await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{N.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}N.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})),I.value=!1,ie(),O.value="baselines",await L()}catch(m){f.error(e("aiops.msg.baselineUpdateFailed")+": "+(m?.message||m))}finally{N.value=!1}}async function Ce(){if(!U.metric||U.value==null){f.warning(e("aiops.msg.detectFieldsEmpty"));return}w.value=!0,J.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}J.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:N,detecting:w,incidents:j,playbooks:G,baselines:$,stats:D,activeTab:O,incidentSeverityFilter:A,incidentStatusFilter:T,showIncidentModal:W,showPlaybookModal:R,showBaselineModal:I,showDetectModal:q,incidentForm:x,playbookForm:_,baselineForm:M,detectForm:U,detectResult:J,incidentColumns:ee,playbookColumns:F,baselineColumns:Z,openCount:B,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:H,h:re,get ReloadOutlined(){return Ue},get PlusOutlined(){return je},get AlertOutlined(){return Ne},get RocketOutlined(){return Le},get LineChartOutlined(){return Ee},get FundOutlined(){return Te},get ExclamationCircleOutlined(){return Pe},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 Ke},get SEVERITIES(){return De},get INCIDENT_STATUSES(){return Me}};return Object.defineProperty(ne,"__isScriptSetup",{enumerable:!1,value:!0}),ne}},We={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ze={class:"page-title"},He={class:"page-sub"},Xe={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},Ye={class:"filter-bar"},Ge={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},$e={key:1,style:{color:"var(--text-muted)"}},et={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},tt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ot={style:{color:"var(--text-primary)","font-weight":"500"}},lt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},it={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},rt={style:{color:"#1677ff"}},dt={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},ct={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},yt={key:1,style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},ft={key:2,style:{"margin-top":"8px"}};function bt(t,a,s,e,P,N){const w=b("a-button"),j=b("a-menu-item"),G=b("a-menu"),$=b("a-dropdown"),D=b("a-space"),O=b("a-statistic"),A=b("a-card"),T=b("a-col"),W=b("a-row"),R=b("a-tag"),I=b("a-radio-button"),q=b("a-radio-group"),x=b("a-table"),_=b("a-tab-pane"),M=b("a-switch"),U=b("a-tabs"),J=b("a-select-option"),ee=b("a-select"),F=b("a-form-item"),Z=b("a-input"),B=b("a-textarea"),V=b("a-form"),K=b("a-modal"),ae=b("a-input-number");return u(),v("div",null,[S("div",We,[S("div",null,[S("h2",Ze,r(t.$t("aiops.title")),1),S("p",He,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(G,{onClick:e.handleNewClick},{default:l(()=>[o(j,{key:"incident"},{default:l(()=>[o(e.AlertOutlined),y(" "+r(t.$t("aiops.actions.incident")),1)]),_:1}),o(j,{key:"playbook"},{default:l(()=>[o(e.RocketOutlined),y(" "+r(t.$t("aiops.actions.playbook")),1)]),_:1}),o(j,{key:"baseline"},{default:l(()=>[o(e.LineChartOutlined),y(" "+r(t.$t("aiops.actions.baseline")),1)]),_:1}),o(j,{key:"detect"},{default:l(()=>[o(e.FundOutlined),y(" "+r(t.$t("aiops.actions.detect")),1)]),_:1})]),_:1})]),default:l(()=>[o(w,{type:"primary"},{icon:l(()=>[o(e.PlusOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.newDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stats overview "),o(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{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(O,{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(O,{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(O,{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(O,{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,X(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",Xe,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",Ye,[o(q,{value:e.incidentSeverityFilter,"onUpdate:value":a[0]||(a[0]=i=>e.incidentSeverityFilter=i),size:"small","button-style":"solid"},{default:l(()=>[o(I,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.all")),1)]),_:1}),(u(!0),v(z,null,X(e.SEVERITIES,i=>(u(),h(I,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(q,{value:e.incidentStatusFilter,"onUpdate:value":a[1]||(a[1]=i=>e.incidentStatusFilter=i),size:"small"},{default:l(()=>[o(I,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.allStatuses")),1)]),_:1}),(u(!0),v(z,null,X(e.INCIDENT_STATUSES,i=>(u(),h(I,{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",Ge,r(c.anomalyMetric),1)):(u(),v("span",$e,"—"))],64)):p("v-if",!0),i.key==="description"?(u(),v("span",et,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",tt,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",at,[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",ot,r(c.name),1),c.triggerCondition?(u(),v("div",lt,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",it,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",nt,[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",st,r(c.metricName),1)):p("v-if",!0),i.key==="mean"?(u(),v(z,{key:1},[S("span",rt,r(c.mean),1),S("span",dt,"σ "+r(c.stdDev),1)],64)):p("v-if",!0),i.key==="iqr"?(u(),v("span",ct," 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",ut,r(e.formatOpsTime(c.updatedAt)),1)):p("v-if",!0)]),emptyText:l(()=>[S("div",pt,[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,X(e.SEVERITIES,i=>(u(),h(J,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.metricLabel")},{default:l(()=>[o(Z,{value:e.incidentForm.metric,"onUpdate:value":a[4]||(a[4]=i=>e.incidentForm.metric=i),placeholder:t.$t("aiops.incident_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.descLabel"),required:""},{default:l(()=>[o(B,{value:e.incidentForm.description,"onUpdate:value":a[5]||(a[5]=i=>e.incidentForm.description=i),"auto-size":{minRows:3,maxRows:6}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Create playbook modal ─────────────────────────────────── "),o(K,{open:e.showPlaybookModal,"onUpdate:open":a[10]||(a[10]=i=>e.showPlaybookModal=i),title:t.$t("aiops.playbook_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("aiops.playbook_modal.ok"),"cancel-text":t.$t("aiops.playbook_modal.cancel"),onOk:e.createPlaybook,onCancel:e.resetPlaybookForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.playbook_modal.nameLabel"),required:""},{default:l(()=>[o(Z,{value:e.playbookForm.name,"onUpdate:value":a[7]||(a[7]=i=>e.playbookForm.name=i),placeholder:t.$t("aiops.playbook_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.playbook_modal.triggerLabel")},{default:l(()=>[o(B,{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(B,{value:e.playbookForm.stepsJson,"onUpdate:value":a[9]||(a[9]=i=>e.playbookForm.stepsJson=i),placeholder:t.$t("aiops.playbook_modal.stepsPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Update baseline modal ─────────────────────────────────── "),o(K,{open:e.showBaselineModal,"onUpdate:open":a[13]||(a[13]=i=>e.showBaselineModal=i),title:t.$t("aiops.baseline_modal.title"),"confirm-loading":e.creating,width:500,"ok-text":t.$t("aiops.baseline_modal.ok"),"cancel-text":t.$t("aiops.baseline_modal.cancel"),onOk:e.updateBaseline,onCancel:e.resetBaselineForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.baseline_modal.metricLabel"),required:""},{default:l(()=>[o(Z,{value:e.baselineForm.metric,"onUpdate:value":a[11]||(a[11]=i=>e.baselineForm.metric=i),placeholder:t.$t("aiops.baseline_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.baseline_modal.valuesLabel"),required:""},{default:l(()=>[o(B,{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,X(e.baselines,i=>(u(),h(J,{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(q,{value:e.detectForm.algorithm,"onUpdate:value":a[16]||(a[16]=i=>e.detectForm.algorithm=i)},{default:l(()=>[o(I,{value:"z_score"},{default:l(()=>[...a[18]||(a[18]=[y("Z-Score (3σ)",-1)])]),_:1}),o(I,{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(O,{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",mt,r(t.$t("aiops.detect_modal.reasonLine",{reason:e.reasonLabel(e.detectResult.reason)})),1)):p("v-if",!0),e.detectResult.baseline?(u(),v("div",yt,[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",ft,[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 Jt=ze(Qe,[["render",bt],["__scopeId","data-v-b804918b"],["__file","/tmp/cc-web-panel-Hs0OhX/repo/packages/web-panel/src/views/AIOps.vue"]]);export{Jt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as b,f as i,t as p}from"./index-
|
|
1
|
+
import{N as b,f as i,t as p}from"./index-BR-DF81e.js";import{f as m,s as r,d as y,o as O,c as P}from"./vendor-BvqAck49.js";import{B as N,c as R}from"./index-CI5cynRw.js";const x=()=>{const n=r(!1);return m(()=>{n.value=!0}),n},A={type:{type:String},actionFn:Function,close:Function,autofocus:Boolean,prefixCls:String,buttonProps:p(),emitEvent:Boolean,quitOnNullishReturnValue:Boolean};function d(n){return!!(n&&n.then)}const j=y({compatConfig:{MODE:3},name:"ActionButton",props:A,setup(n,g){let{slots:B}=g;const l=r(!1),c=r(),a=r(!1);let f;const v=x();O(()=>{n.autofocus&&(f=setTimeout(()=>{var e,t;return(t=(e=b(c.value))===null||e===void 0?void 0:e.focus)===null||t===void 0?void 0:t.call(e)}))}),m(()=>{clearTimeout(f)});const u=function(){for(var e,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];(e=n.close)===null||e===void 0||e.call(n,...o)},h=e=>{d(e)&&(a.value=!0,e.then(function(){v.value||(a.value=!1),u(...arguments),l.value=!1},t=>(v.value||(a.value=!1),l.value=!1,Promise.reject(t))))},C=e=>{const{actionFn:t}=n;if(l.value)return;if(l.value=!0,!t){u();return}let o;if(n.emitEvent){if(o=t(e),n.quitOnNullishReturnValue&&!d(o)){l.value=!1,u(e);return}}else if(t.length)o=t(n.close),l.value=!1;else if(o=t(),!o){u();return}h(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return P(N,i(i(i({},R(e)),{},{onClick:C,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{j as A};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{I as T,J as v,U as N,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 ue}from"./vendor-BvqAck49.js";import{_ as pe,b as se,u as ne,d as U}from"./index-
|
|
2
|
-
`);for(const n of s){const f=n.trim(),j=f.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);j&&(g.totalCalls=parseInt(w(j[1]),10)||0);const M=f.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);M&&(g.totalTokens=parseInt(w(M[1]),10)||0);const B=f.match(/cost\s*[::]\s*\$?([\d,.]+)/i);B&&(g.totalCost=parseFloat(w(B[1]))||0);const A=f.match(/(?:avg|average)\s*(?:response\s*)?time\s*[::]\s*([\d,.]+)/i);A&&(g.avgResponseTime=parseFloat(w(A[1]))||0)}}function
|
|
3
|
-
`);for(const n of s){const f=n.trim(),j=f.match(/entries?\s*[::]\s*([\d,]+)/i);j&&(_.entries=parseInt(w(j[1]),10)||0);const M=f.match(/hits?\s*[::]\s*([\d,]+)/i);M&&(_.hits=parseInt(w(M[1]),10)||0);const B=f.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);B&&(_.tokensSaved=parseInt(w(B[1]),10)||0);const A=f.match(/expired?\s*[::]\s*([\d,]+)/i);A&&(_.expired=parseInt(w(A[1]),10)||0)}}async function H(){J.value=!0;try{const{output:e}=await t.execute(`tokens show --period ${F.value} --json`,15e3),s=R(e);s?Q(s):K(e)}catch(e){console.error("loadSummary failed:",e)}finally{J.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=W(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 P(){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 ce(){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 P())}catch(e){U.error(i("analytics.messages.cacheClearFailed",{err:e.message}))}finally{p.value=!1}}async function de(){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 P())}catch(e){U.error(i("analytics.messages.cacheCleanupFailed",{err:e.message}))}finally{h.value=!1}}async function $(){O.value=!0;try{const e=await t.sendRaw({type:"usage.global",limit:1e3},15e3);if(e.ok&&e.usage){const s=e.usage.total||{};z.totalCalls=s.calls??0,z.inputTokens=s.inputTokens??s.input_tokens??0,z.outputTokens=s.outputTokens??s.output_tokens??0,z.totalTokens=s.totalTokens??s.total_tokens??0,l.value=(e.usage.byModel||[]).map((n,f)=>({key:f,provider:n.provider||"-",model:n.model||"-",calls:n.calls??0,inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,totalTokens:n.totalTokens??n.total_tokens??0}))}}catch(e){console.warn("loadSessionUsage failed (route may not be available):",e.message)}finally{O.value=!1}}async function ee(){await Promise.all([H(),X(),Z(),P(),$()])}ae(F,()=>{H()}),oe(ee);const te={t:i,ws:t,period:F,summaryLoading:J,breakdownLoading:b,recentLoading:L,cacheLoading:S,cacheClearLoading:p,cacheCleanupLoading:h,recentLimit:m,summary:g,breakdownData:C,recentData:I,cacheStats:_,sessionUsageLoading:O,sessionUsageSummary:z,sessionUsageByModel:l,sessionUsageColumns:k,breakdownColumns:re,recentColumns:ie,stripCommas:w,tryParseJSON:R,parseSummaryText:K,parseSummaryJSON:Q,parseBreakdownJSON:W,parseRecentJSON:Y,parseCacheJSON:q,parseCacheText:G,loadSummary:H,loadBreakdown:X,loadRecent:Z,loadCache:P,cacheClear:ce,cacheCleanup:de,loadSessionUsage:$,loadAll:ee,ref:x,computed:E,reactive:V,watch:ae,onMounted:oe,get useI18n(){return se},get BarChartOutlined(){return ge},get DollarOutlined(){return ve},get ReloadOutlined(){return fe},get ThunderboltOutlined(){return ke},get DatabaseOutlined(){return me},get DeleteOutlined(){return ye},get message(){return U},get useWsStore(){return ne}};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}},xe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},he={class:"page-title"},Te={class:"page-sub"},be={style:{display:"flex","align-items":"center",gap:"12px"}},Ce={key:0,style:{"text-align":"center",padding:"60px"}},we={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Se={key:2,style:{color:"#faad14"}},Ie={key:3,style:{color:"var(--text-secondary)"}},Oe={key:0,style:{"text-align":"center",padding:"60px"}},ze={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Re={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ue={key:3,style:{color:"#faad14"}},Le={key:4,style:{color:"var(--text-secondary)"}},De={key:0,style:{"text-align":"center",padding:"40px"}},je={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Me={key:0,style:{"text-align":"center",padding:"40px"}};function Be(le,u,i,t,F,J){const b=T("a-radio-button"),L=T("a-radio-group"),S=T("a-button"),p=T("a-statistic"),h=T("a-card"),m=T("a-col"),g=T("a-row"),C=T("a-spin"),I=T("a-tag"),_=T("a-empty"),O=T("a-table"),z=T("a-space");return c(),v("div",null,[N("div",xe,[N("div",null,[N("h2",he,r(t.t("analytics.title")),1),N("p",Te,r(t.t("analytics.subtitle")),1)]),N("div",be,[a(L,{value:t.period,"onUpdate:value":u[0]||(u[0]=l=>t.period=l),"button-style":"solid",size:"small"},{default:o(()=>[a(b,{value:"today"},{default:o(()=>[d(r(t.t("analytics.period.today")),1)]),_:1}),a(b,{value:"week"},{default:o(()=>[d(r(t.t("analytics.period.week")),1)]),_:1}),a(b,{value:"month"},{default:o(()=>[d(r(t.t("analytics.period.month")),1)]),_:1}),a(b,{value:"all"},{default:o(()=>[d(r(t.t("analytics.period.all")),1)]),_:1})]),_:1},8,["value"]),a(S,{type:"primary",ghost:"",loading:t.summaryLoading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])])]),y(" Top row: 4 stat cards "),a(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCalls"),value:t.summary.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.BarChartOutlined)]),suffix:o(()=>[d(r(t.t("analytics.summary.callsSuffix")),1)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalTokens"),value:t.summary.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCost"),value:t.summary.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.DollarOutlined)]),suffix:o(()=>[...u[2]||(u[2]=[d("USD",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.avgResponseTime"),value:t.summary.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),suffix:o(()=>[...u[3]||(u[3]=[d("ms",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Section 2: Provider Breakdown "),a(h,{title:t.t("analytics.providerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:o(()=>[t.breakdownLoading?(c(),v("div",Ce,[a(C,{size:"large"})])):(c(),D(O,{key:1,columns:t.breakdownColumns,"data-source":t.breakdownData,pagination:{pageSize:20,showTotal:l=>t.t("analytics.totals.rows",{count:l})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="provider"?(c(),D(I,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",we,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),v("span",Se,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="avgResponseTime"?(c(),v("span",Ie,r(k.avgResponseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.providerEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 3: Recent Calls "),a(h,{title:t.t("analytics.recentCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(L,{value:t.recentLimit,"onUpdate:value":u[1]||(u[1]=l=>t.recentLimit=l),size:"small",onChange:t.loadRecent},{default:o(()=>[a(b,{value:10},{default:o(()=>[...u[4]||(u[4]=[d("10",-1)])]),_:1}),a(b,{value:20},{default:o(()=>[...u[5]||(u[5]=[d("20",-1)])]),_:1}),a(b,{value:50},{default:o(()=>[...u[6]||(u[6]=[d("50",-1)])]),_:1})]),_:1},8,["value"])]),default:o(()=>[t.recentLoading?(c(),v("div",Oe,[a(C,{size:"large"})])):(c(),D(O,{key:1,columns:t.recentColumns,"data-source":t.recentData,pagination:{pageSize:20,showTotal:l=>t.t("analytics.totals.rows",{count:l})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="timestamp"?(c(),v("span",ze,r(k.timestamp),1)):y("v-if",!0),l.key==="provider"?(c(),D(I,{key:1,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",Re,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),v("span",Ue,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="responseTime"?(c(),v("span",Le,r(k.responseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.recentEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 4: Session Token Usage (Phase J — from JSONL sessions) "),a(h,{title:t.t("analytics.sessionCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(S,{size:"small",loading:t.sessionUsageLoading,onClick:t.loadSessionUsage,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])]),default:o(()=>[t.sessionUsageLoading?(c(),v("div",De,[a(C)])):(c(),v(ue,{key:1},[a(g,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:o(()=>[a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.totalCalls"),value:t.sessionUsageSummary.totalCalls,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:o(()=>[a(t.BarChartOutlined)]),_:1},8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.inputTokens"),value:t.sessionUsageSummary.inputTokens,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.outputTokens"),value:t.sessionUsageSummary.outputTokens,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(m,{xs:12,sm:6},{default:o(()=>[a(p,{title:t.t("analytics.sessionStats.totalTokens"),value:t.sessionUsageSummary.totalTokens,"value-style":{color:"#722ed1",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),a(O,{columns:t.sessionUsageColumns,"data-source":t.sessionUsageByModel,pagination:!1,size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="provider"?(c(),D(I,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",je,r(k.model),1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.sessionEmpty")},null,8,["description"])]),_:1},8,["columns","data-source"])],64))]),_:1},8,["title"]),y(" Section 5: Cache Status "),a(h,{title:t.t("analytics.cacheCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(z,null,{default:o(()=>[a(S,{size:"small",loading:t.cacheCleanupLoading,onClick:t.cacheCleanup,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.cleanup")),1)]),_:1},8,["loading"]),a(S,{size:"small",danger:"",loading:t.cacheClearLoading,onClick:t.cacheClear,style:{"border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.clear")),1)]),_:1},8,["loading"])]),_:1})]),default:o(()=>[t.cacheLoading?(c(),v("div",Me,[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 Je=pe(_e,[["render",Be],["__scopeId","data-v-cab07171"],["__file","/tmp/cc-web-panel-UKI3LY/repo/packages/web-panel/src/views/Analytics.vue"]]);export{Je as default};
|
|
1
|
+
import{I as T,J as v,U as N,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 ue}from"./vendor-BvqAck49.js";import{_ as pe,b as se,u as ne,d as U}from"./index-BR-DF81e.js";import{aQ as ye,D as me,$ as ke,R as fe,aC as ve,H as ge}from"./icons-DP3uiYxy.js";const _e={__name:"Analytics",setup(le,{expose:u}){u();const{t:i}=se(),t=ne(),F=x("all"),J=x(!1),b=x(!1),L=x(!1),S=x(!1),p=x(!1),h=x(!1),m=x(20),g=V({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),C=x([]),O=x([]),_=V({entries:0,hits:0,tokensSaved:0,expired:0}),I=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)}]),re=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)}]),ie=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){try{const s=(e||"").trim(),n=s.search(/[{[]/);return n>=0?JSON.parse(s.slice(n)):null}catch{return null}}function Q(e){const s=(e||"").split(`
|
|
2
|
+
`);for(const n of s){const f=n.trim(),j=f.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);j&&(g.totalCalls=parseInt(w(j[1]),10)||0);const M=f.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);M&&(g.totalTokens=parseInt(w(M[1]),10)||0);const B=f.match(/cost\s*[::]\s*\$?([\d,.]+)/i);B&&(g.totalCost=parseFloat(w(B[1]))||0);const A=f.match(/(?:avg|average)\s*(?:response\s*)?time\s*[::]\s*([\d,.]+)/i);A&&(g.avgResponseTime=parseFloat(w(A[1]))||0)}}function W(e){g.totalCalls=e.totalCalls??e.total_calls??e.calls??0,g.totalTokens=e.totalTokens??e.total_tokens??e.tokens??0,g.totalCost=e.totalCost??e.total_cost??e.cost??0,g.avgResponseTime=e.avgResponseTime??e.avg_response_time??e.avgTime??0}function K(e){return(Array.isArray(e)?e:e.breakdown||e.providers||e.rows||[]).map((n,f)=>({key:f,provider:n.provider||"-",model:n.model||"-",calls:n.calls||n.count||0,inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,totalTokens:n.totalTokens??n.total_tokens??(n.inputTokens??0)+(n.outputTokens??0),cost:n.cost??n.total_cost??0,avgResponseTime:n.avgResponseTime??n.avg_response_time??0}))}function X(e){return(Array.isArray(e)?e:e.recent||e.records||e.rows||[]).map((n,f)=>({key:f,timestamp:n.timestamp||n.time||n.created_at||"-",provider:n.provider||"-",model:n.model||"-",inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,cost:n.cost??0,responseTime:n.responseTime??n.response_time??0}))}function q(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 G(e){const s=(e||"").split(`
|
|
3
|
+
`);for(const n of s){const f=n.trim(),j=f.match(/entries?\s*[::]\s*([\d,]+)/i);j&&(_.entries=parseInt(w(j[1]),10)||0);const M=f.match(/hits?\s*[::]\s*([\d,]+)/i);M&&(_.hits=parseInt(w(M[1]),10)||0);const B=f.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);B&&(_.tokensSaved=parseInt(w(B[1]),10)||0);const A=f.match(/expired?\s*[::]\s*([\d,]+)/i);A&&(_.expired=parseInt(w(A[1]),10)||0)}}async function H(){J.value=!0;try{const{output:e}=await t.execute(`tokens show --period ${F.value} --json`,15e3),s=R(e);s?W(s):Q(e)}catch(e){console.error("loadSummary failed:",e)}finally{J.value=!1}}async function Y(){b.value=!0;try{const{output:e}=await t.execute("tokens breakdown --json",15e3),s=R(e);s?C.value=K(s):C.value=[]}catch(e){console.error("loadBreakdown failed:",e),C.value=[]}finally{b.value=!1}}async function Z(){L.value=!0;try{const{output:e}=await t.execute(`tokens recent --limit ${m.value} --json`,15e3),s=R(e);s?O.value=X(s):O.value=[]}catch(e){console.error("loadRecent failed:",e),O.value=[]}finally{L.value=!1}}async function P(){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 ce(){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 P())}catch(e){U.error(i("analytics.messages.cacheClearFailed",{err:e.message}))}finally{p.value=!1}}async function de(){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 P())}catch(e){U.error(i("analytics.messages.cacheCleanupFailed",{err:e.message}))}finally{h.value=!1}}async function $(){I.value=!0;try{const e=await t.sendRaw({type:"usage.global",limit:1e3},15e3);if(e.ok&&e.usage){const s=e.usage.total||{};z.totalCalls=s.calls??0,z.inputTokens=s.inputTokens??s.input_tokens??0,z.outputTokens=s.outputTokens??s.output_tokens??0,z.totalTokens=s.totalTokens??s.total_tokens??0,l.value=(e.usage.byModel||[]).map((n,f)=>({key:f,provider:n.provider||"-",model:n.model||"-",calls:n.calls??0,inputTokens:n.inputTokens??n.input_tokens??0,outputTokens:n.outputTokens??n.output_tokens??0,totalTokens:n.totalTokens??n.total_tokens??0}))}}catch(e){console.warn("loadSessionUsage failed (route may not be available):",e.message)}finally{I.value=!1}}async function ee(){await Promise.all([H(),Y(),Z(),P(),$()])}ae(F,()=>{H()}),oe(ee);const te={t:i,ws:t,period:F,summaryLoading:J,breakdownLoading:b,recentLoading:L,cacheLoading:S,cacheClearLoading:p,cacheCleanupLoading:h,recentLimit:m,summary:g,breakdownData:C,recentData:O,cacheStats:_,sessionUsageLoading:I,sessionUsageSummary:z,sessionUsageByModel:l,sessionUsageColumns:k,breakdownColumns:re,recentColumns:ie,stripCommas:w,tryParseJSON:R,parseSummaryText:Q,parseSummaryJSON:W,parseBreakdownJSON:K,parseRecentJSON:X,parseCacheJSON:q,parseCacheText:G,loadSummary:H,loadBreakdown:Y,loadRecent:Z,loadCache:P,cacheClear:ce,cacheCleanup:de,loadSessionUsage:$,loadAll:ee,ref:x,computed:E,reactive:V,watch:ae,onMounted:oe,get useI18n(){return se},get BarChartOutlined(){return ge},get DollarOutlined(){return ve},get ReloadOutlined(){return fe},get ThunderboltOutlined(){return ke},get DatabaseOutlined(){return me},get DeleteOutlined(){return ye},get message(){return U},get useWsStore(){return ne}};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}},xe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},he={class:"page-title"},Te={class:"page-sub"},be={style:{display:"flex","align-items":"center",gap:"12px"}},Ce={key:0,style:{"text-align":"center",padding:"60px"}},we={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Se={key:2,style:{color:"#faad14"}},Oe={key:3,style:{color:"var(--text-secondary)"}},Ie={key:0,style:{"text-align":"center",padding:"60px"}},ze={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Re={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ue={key:3,style:{color:"#faad14"}},Le={key:4,style:{color:"var(--text-secondary)"}},De={key:0,style:{"text-align":"center",padding:"40px"}},je={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Me={key:0,style:{"text-align":"center",padding:"40px"}};function Be(le,u,i,t,F,J){const b=T("a-radio-button"),L=T("a-radio-group"),S=T("a-button"),p=T("a-statistic"),h=T("a-card"),m=T("a-col"),g=T("a-row"),C=T("a-spin"),O=T("a-tag"),_=T("a-empty"),I=T("a-table"),z=T("a-space");return c(),v("div",null,[N("div",xe,[N("div",null,[N("h2",he,r(t.t("analytics.title")),1),N("p",Te,r(t.t("analytics.subtitle")),1)]),N("div",be,[a(L,{value:t.period,"onUpdate:value":u[0]||(u[0]=l=>t.period=l),"button-style":"solid",size:"small"},{default:o(()=>[a(b,{value:"today"},{default:o(()=>[d(r(t.t("analytics.period.today")),1)]),_:1}),a(b,{value:"week"},{default:o(()=>[d(r(t.t("analytics.period.week")),1)]),_:1}),a(b,{value:"month"},{default:o(()=>[d(r(t.t("analytics.period.month")),1)]),_:1}),a(b,{value:"all"},{default:o(()=>[d(r(t.t("analytics.period.all")),1)]),_:1})]),_:1},8,["value"]),a(S,{type:"primary",ghost:"",loading:t.summaryLoading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])])]),y(" Top row: 4 stat cards "),a(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCalls"),value:t.summary.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.BarChartOutlined)]),suffix:o(()=>[d(r(t.t("analytics.summary.callsSuffix")),1)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalTokens"),value:t.summary.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.totalCost"),value:t.summary.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.DollarOutlined)]),suffix:o(()=>[...u[2]||(u[2]=[d("USD",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1}),a(m,{xs:24,sm:12,lg:6},{default:o(()=>[a(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(p,{title:t.t("analytics.summary.avgResponseTime"),value:t.summary.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.ThunderboltOutlined)]),suffix:o(()=>[...u[3]||(u[3]=[d("ms",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Section 2: Provider Breakdown "),a(h,{title:t.t("analytics.providerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:o(()=>[t.breakdownLoading?(c(),v("div",Ce,[a(C,{size:"large"})])):(c(),D(I,{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(O,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",we,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),v("span",Se,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="avgResponseTime"?(c(),v("span",Oe,r(k.avgResponseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.providerEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 3: Recent Calls "),a(h,{title:t.t("analytics.recentCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(L,{value:t.recentLimit,"onUpdate:value":u[1]||(u[1]=l=>t.recentLimit=l),size:"small",onChange:t.loadRecent},{default:o(()=>[a(b,{value:10},{default:o(()=>[...u[4]||(u[4]=[d("10",-1)])]),_:1}),a(b,{value:20},{default:o(()=>[...u[5]||(u[5]=[d("20",-1)])]),_:1}),a(b,{value:50},{default:o(()=>[...u[6]||(u[6]=[d("50",-1)])]),_:1})]),_:1},8,["value"])]),default:o(()=>[t.recentLoading?(c(),v("div",Ie,[a(C,{size:"large"})])):(c(),D(I,{key:1,columns:t.recentColumns,"data-source":t.recentData,pagination:{pageSize:20,showTotal:l=>t.t("analytics.totals.rows",{count:l})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:l,record:k})=>[l.key==="timestamp"?(c(),v("span",ze,r(k.timestamp),1)):y("v-if",!0),l.key==="provider"?(c(),D(O,{key:1,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",Re,r(k.model),1)):y("v-if",!0),l.key==="cost"?(c(),v("span",Ue,"$"+r((k.cost||0).toFixed(4)),1)):y("v-if",!0),l.key==="responseTime"?(c(),v("span",Le,r(k.responseTime||0)+" ms",1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.recentEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),y(" Section 4: Session Token Usage (Phase J — from JSONL sessions) "),a(h,{title:t.t("analytics.sessionCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(S,{size:"small",loading:t.sessionUsageLoading,onClick:t.loadSessionUsage,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.refresh")),1)]),_:1},8,["loading"])]),default:o(()=>[t.sessionUsageLoading?(c(),v("div",De,[a(C)])):(c(),v(ue,{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(I,{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(O,{key:0,color:"blue"},{default:o(()=>[d(r(k.provider),1)]),_:2},1024)):y("v-if",!0),l.key==="model"?(c(),v("span",je,r(k.model),1)):y("v-if",!0)]),emptyText:o(()=>[a(_,{description:t.t("analytics.sessionEmpty")},null,8,["description"])]),_:1},8,["columns","data-source"])],64))]),_:1},8,["title"]),y(" Section 5: Cache Status "),a(h,{title:t.t("analytics.cacheCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(z,null,{default:o(()=>[a(S,{size:"small",loading:t.cacheCleanupLoading,onClick:t.cacheCleanup,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.cleanup")),1)]),_:1},8,["loading"]),a(S,{size:"small",danger:"",loading:t.cacheClearLoading,onClick:t.cacheClear,style:{"border-color":"var(--border-color)"}},{icon:o(()=>[a(t.DeleteOutlined)]),default:o(()=>[d(" "+r(t.t("analytics.cacheActions.clear")),1)]),_:1},8,["loading"])]),_:1})]),default:o(()=>[t.cacheLoading?(c(),v("div",Me,[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 Je=pe(_e,[["render",Be],["__scopeId","data-v-cab07171"],["__file","/tmp/cc-web-panel-Hs0OhX/repo/packages/web-panel/src/views/Analytics.vue"]]);export{Je as default};
|