chainlesschain 0.162.123 → 0.162.124
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/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-C5CSd8pY.js → AIOps-BsDJlD_l.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BugJtiJc.js → ActionButton-COjZZKWG.js} +1 -1
- package/src/assets/web-panel/assets/Analytics-4ZDZE7lc.js +3 -0
- package/src/assets/web-panel/assets/{AppLayout-Cb0eHetM.js → AppLayout-CYH5k2Rp.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-qjq04wh8.js → Audit-BKlFbLdl.js} +1 -1
- package/src/assets/web-panel/assets/Backup-CiX61Qc2.js +1 -0
- package/src/assets/web-panel/assets/{BaseInput-CZ0c7QHk.js → BaseInput-CDxIQokd.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CaKDT3wV.js → Chat-CaKgdRab.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DgvpwU5o.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-C6-Iu3bG.js → Checkbox-CjiWfu4s.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-TGLFk6P1.js → Codegen-tKWGzajw.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DVBrO7AN.js → Col-ZKWREyNs.js} +1 -1
- package/src/assets/web-panel/assets/{Community-tg6-Rik1.js → Community-CmLuPBUU.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DM4ZgFSE.js → Compact-DqknM98n.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-PZw0aBLI.js +1 -0
- package/src/assets/web-panel/assets/{Cowork-CJwiWkUY.js → Cowork-Dp29kHsC.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-dsdXHvrO.js → Cron-zmEJAetz.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-p7_5Gq-7.js → Crosschain-Sb-uM7Ty.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BB_LBLYT.js → DID-D_UFNzJ5.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Bh_HkNSD.js → Dashboard-Btag698v.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-dTFtVnKk.js → Dropdown-CH7l3KCs.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-yqdttzXV.js → EmailListRenderer-Bud2M3XX.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DfX3YpUU.js → FamilyGuardDashboard-Bd2_8uME.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BJApfPV4.js → Federation-1jhstF5P.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DNMwIh7X.js → FormItemContext-CpSH464Y.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-C-T8UQf0.js → GenericCardRenderer-CANo8O-y.js} +1 -1
- package/src/assets/web-panel/assets/{Git-SURFhkLi.js → Git-hvuZVoD3.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-B4u_KsfE.js → Governance-BQrWksKt.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-2kr_rKQd.js → Inference-jEBTp12v.js} +1 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-tDiV2taf.js +1 -0
- package/src/assets/web-panel/assets/Logs-DDkTnedu.js +2 -0
- package/src/assets/web-panel/assets/{Marketplace-W9Iz8b2m.js → Marketplace-9Yi32avt.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-D0waMomb.js → McpTools-Qx78XyOT.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-Ci768GQ3.js → Memory-CXYDO1oT.js} +2 -2
- package/src/assets/web-panel/assets/MobileBridge-MfUfkHA0.js +1 -0
- package/src/assets/web-panel/assets/{MobileProjects-RpFuAiNz.js → MobileProjects-DEDbWNIk.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-DJdw8btT.js → Mtc-Dwa_vlR8.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-Dc596XgH.js → MtcAudit-DAVkxhJv.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig--Qs7eGsH.js → Multisig-C3upmgPN.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-D3y71FDX.js → NLProgramming-DO3CZ0_z.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-uMxjj66_.js → Notes-B1Oy3FbC.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-C4ikBOsm.js → NotificationSettings-Bs4-Fc6b.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BpmdunAz.js → OrderTableRenderer-CEy1pIeq.js} +1 -1
- package/src/assets/web-panel/assets/Organization-D4cJ1UNo.js +4 -0
- package/src/assets/web-panel/assets/{Overflow-B-4_IpbB.js → Overflow-fdzvlF7x.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DdOf9BZs.js → P2P-Y13PwXBA.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DDU2Zc9Q.js → PdhVaultBrowser-Ck1zCLe6.js} +3 -3
- package/src/assets/web-panel/assets/Permissions-CvEXP6LC.js +4 -0
- package/src/assets/web-panel/assets/{PersonalDataHub-B3WcvKni.js → PersonalDataHub-JeP7IWMW.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DASuPDc3.js → Pipeline-BZ7wRzG1.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DnixwmhJ.js → Privacy-BJ6qj9Hv.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BQjMDkML.js → ProjectInit-DeWd9UcS.js} +2 -2
- package/src/assets/web-panel/assets/ProjectSettings-DUpVuU9F.js +2 -0
- package/src/assets/web-panel/assets/{Projects-BGWEJIVT.js → Projects-y1WbI337.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Bl0dw6cI.js → Providers-DECW00ek.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BDrk7l3t.js → QuickAsk-Dl-pK9Io.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BPKof_CA.js → Recommend-Bju04wTd.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-6MNJLklK.js → Reputation-BUPa3nEk.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DmGJwpfd.js → Row-WYqqaq_5.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-9-Fxh3_w.js → RssFeed-iyQT5q9l.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CCHjey_D.js → Search-CrfwJF0R.js} +1 -1
- package/src/assets/web-panel/assets/{Security-D6CySV7r.js → Security-c4Jxf5Ih.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Co8Mk8qE.js → Services-CRuisolj.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BdON8M-1.js → Skeleton-CCnzJkb-.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CEJE1Go1.js → Skills-CZURCwZg.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BSxFvFX9.js → Sla-CrMzaEi2.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-jTDOM5eY.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-52NXsfyj.js → SyncSettings-CJWVtd87.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-He7CweW6.js → Tasks-61lrQ_lS.js} +1 -1
- package/src/assets/web-panel/assets/Templates-Cg-iF2g1.js +1 -0
- package/src/assets/web-panel/assets/{Tenant-Dd5XNbYF.js → Tenant-DrDv1FFc.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-CP15hcNS.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-BdfqBQmM.js → TimelineRenderer-Sl5uXrkN.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CsgNsrdQ.js → Tokens-yRIZTVsR.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-Dt_N_rvo.js → Trigger-BLCQEOF2.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-B1lJzsPn.js → Trust-D5xq8z6s.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CW8YdFxg.js → UkeySign-Dwp0zXQ6.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CU6o7qvp.js → VideoEditing-CIHA55Sx.js} +1 -1
- package/src/assets/web-panel/assets/Wallet-Hjajvnto.js +4 -0
- package/src/assets/web-panel/assets/WebAuthn-DqSURUvI.js +5 -0
- package/src/assets/web-panel/assets/{WorkflowEditor-BcCA2U8H.js → WorkflowEditor-B5bHRwUG.js} +1 -1
- package/src/assets/web-panel/assets/{chat-Cxl5DGsc.js → chat-DsheLKkG.js} +1 -1
- package/src/assets/web-panel/assets/{colors-FS_7Xggs.js → colors-CST2UkgL.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BzXjd3wJ.js → compact-item-yqEoy1L7.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DhF9bi_u.js → createContext-Jwp78HFY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-C8to6gQk.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Y1a0aV9N.js → hasIn-CVS5mFEP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfaSKEVD.js → index-AnW25bEq.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dmjxpu0L.js → index-BCHAUdel.js} +1 -1
- package/src/assets/web-panel/assets/{index-B48PZ-xM.js → index-BLTUVd0V.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRSkKj9M.js → index-BeblNJDH.js} +1 -1
- package/src/assets/web-panel/assets/{index-uLoKviUT.js → index-BuI27WSx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTltEtoG.js → index-BzetOasL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CETvk0NN.js → index-C0FZScMe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZJMsVI1.js → index-C130LLPq.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cgo1J_Kf.js → index-C8rq85gu.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBtULjKY.js → index-CDAPnZUs.js} +1 -1
- package/src/assets/web-panel/assets/{index-BepInmSi.js → index-CIE2n8k_.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3IVAG9l.js → index-CRBbVS43.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ci7PSoQn.js → index-CSBPc-sI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CxYHV8nb.js → index-CTd3lDxp.js} +1 -1
- package/src/assets/web-panel/assets/index-CUWj5L2s.js +1 -0
- package/src/assets/web-panel/assets/{index-CzlCP4jP.js → index-ChRL6rgA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DVTex5M8.js → index-CjfN2CpJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-1iacQgo5.js → index-Cjig5i3a.js} +3 -3
- package/src/assets/web-panel/assets/{index-JUukFpxi.js → index-Crk4KWLW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BllceSdr.js → index-CrlRa054.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cn9lbqaS.js → index-CtyEOGuj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bt_0ygjA.js → index-Cu6Ql64n.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_Z0PHC0.js → index-Cx_t5rWw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CELVZPNt.js → index-Cy0dNzkp.js} +1 -1
- package/src/assets/web-panel/assets/{index-GCd5hs58.js → index-CzsKK0tQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnvaUocg.js → index-DDAigsel.js} +1 -1
- package/src/assets/web-panel/assets/index-DZfnYE6e.js +1 -0
- package/src/assets/web-panel/assets/{index-C2S8McM1.js → index-D_1b7uh6.js} +1 -1
- package/src/assets/web-panel/assets/{index--fcP34eT.js → index-D_e9gwfn.js} +1 -1
- package/src/assets/web-panel/assets/{index-DgHWZVjv.js → index-DbxAlpPC.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNmWkPqm.js → index-De600Jjm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxGVbuqr.js → index-Dgyn8-wN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzQkdgQW.js → index-DiK4vSZa.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuTKOay7.js → index-DpYn5v2k.js} +1 -1
- package/src/assets/web-panel/assets/{index-Sl-sLj3T.js → index-DxaU_lza.js} +1 -1
- package/src/assets/web-panel/assets/{index-Na733kBa.js → index-Dxljh9Fu.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLyIxnjc.js → index-R-VGFpi6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUcVF8e6.js → index-SjxCCf5h.js} +1 -1
- package/src/assets/web-panel/assets/{index-1khPb4ZS.js → index-diWkx2Wq.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-D6QmlnQ-.js → initDefaultProps-ClAjrsQ-.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BHrTGY1_.js → motion-BalXv_60.js} +1 -1
- package/src/assets/web-panel/assets/{move-Bpph6B_N.js → move-DMelzIW-.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Dx0YMbWn.js → omit-oxecfU3b.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D-a8Fm6C.js → pickAttrs-DJ5F5M6x.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DXFSVgxv.js → placementArrow-DdbKsant.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CxhQ1EaK.js → responsiveObserve-BUuM5cmS.js} +1 -1
- package/src/assets/web-panel/assets/{slide-IlBI0XU8.js → slide-DSV0ccvR.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-COoXVzje.js → statusUtils-B-6oLAXf.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DCuq89M_.js → styleChecker-DdCAHtsZ.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-tfNE1ALO.js → useFlexGapSupport-ZORkcoZd.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DD4bzBkU.js → useFs-BFp46LoP.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DVkH1hbT.js → usePersonalDataHub-H7rxgbdW.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D1ZmXyxM.js → vnode-eIq4Tk0J.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DblBUHfi.js → zoom-CTNrv8-H.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/ask.js +24 -1
- package/src/commands/init.js +5 -4
- package/src/commands/instinct.js +18 -5
- package/src/commands/mcp.js +30 -3
- package/src/commands/memory.js +18 -5
- package/src/gateways/http/envelope-http-server.js +17 -2
- package/src/gateways/terminal/PtyManager.js +15 -2
- package/src/gateways/ws/ws-server.js +20 -0
- package/src/gateways/ws/ws-session-gateway.js +16 -0
- package/src/harness/mcp-client.js +57 -0
- package/src/harness/worktree-isolator.js +20 -9
- package/src/lib/agent-core.js +3 -0
- package/src/lib/autonomous-agent.js +7 -6
- package/src/lib/chat-intent-service.js +4 -2
- package/src/lib/checkpoint-store.js +23 -0
- package/src/lib/credential-guard.js +7 -0
- package/src/lib/git-integration.js +57 -1
- package/src/lib/hook-runner.cjs +11 -1
- package/src/lib/interactive-planner.js +4 -3
- package/src/lib/json-schema-output.js +47 -0
- package/src/lib/learning/reflection-engine.js +4 -3
- package/src/lib/learning/skill-improver.js +4 -3
- package/src/lib/learning/skill-synthesizer.js +4 -3
- package/src/lib/mcp-oauth.js +208 -20
- package/src/lib/mcp-serve.js +56 -6
- package/src/lib/orchestrator.js +4 -2
- package/src/lib/process-manager.js +31 -3
- package/src/lib/repl-completer.js +29 -0
- package/src/lib/slot-filler.js +4 -3
- package/src/lib/sub-agent-context.js +6 -0
- package/src/lib/web-fetch.js +54 -3
- package/src/lib/workflow-engine.js +35 -11
- package/src/runtime/agent-core.js +248 -26
- package/src/runtime/headless-stream.js +124 -17
- package/src/assets/web-panel/assets/Analytics-CzxpcV9E.js +0 -3
- package/src/assets/web-panel/assets/Backup-C2Y_XNBA.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-TeKnMwPj.js +0 -1
- package/src/assets/web-panel/assets/Compliance-DFeWryxt.js +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-h-nL7J6x.js +0 -1
- package/src/assets/web-panel/assets/Logs-DjuWREBJ.js +0 -2
- package/src/assets/web-panel/assets/MobileBridge-4jAehfcz.js +0 -3
- package/src/assets/web-panel/assets/Organization-BBEmFNGM.js +0 -4
- package/src/assets/web-panel/assets/Permissions-B1ebgevF.js +0 -4
- package/src/assets/web-panel/assets/ProjectSettings-dHyZ3SxW.js +0 -2
- package/src/assets/web-panel/assets/SpeechSettings-C3rShYlV.js +0 -1
- package/src/assets/web-panel/assets/Templates-UtjBlJIO.js +0 -1
- package/src/assets/web-panel/assets/Terminal-pFyh42cu.js +0 -3
- package/src/assets/web-panel/assets/Wallet-DPxjEhbN.js +0 -4
- package/src/assets/web-panel/assets/WebAuthn-CuJ29YAF.js +0 -5
- package/src/assets/web-panel/assets/devWarning-B1j78JeH.js +0 -1
- package/src/assets/web-panel/assets/index-BaN6wKWx.js +0 -1
- package/src/assets/web-panel/assets/index-N7JKRLCC.js +0 -1
|
@@ -20,6 +20,7 @@ import { bootstrap } from "./bootstrap.js";
|
|
|
20
20
|
import { buildSystemPrompt, agentLoop as coreAgentLoop } from "./agent-core.js";
|
|
21
21
|
import { composeSystemPrompt } from "./system-prompt.js";
|
|
22
22
|
import { collapseConsecutiveMessagesInPlace } from "./message-roles.js";
|
|
23
|
+
import { sanitizeToolPairs } from "../harness/prompt-compressor.js";
|
|
23
24
|
import { expandFileRefsAsync } from "./file-ref-expander.js";
|
|
24
25
|
import { detectImagePaths } from "../lib/image-input.js";
|
|
25
26
|
import { detectVersionSkew, versionSkewMessage } from "../lib/version-skew.js";
|
|
@@ -44,6 +45,102 @@ import {
|
|
|
44
45
|
} from "../harness/jsonl-session-store.js";
|
|
45
46
|
import { getPlanModeManager } from "../lib/plan-mode.js";
|
|
46
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the streaming-delta coalesce window (ms). Adjacent partial-message
|
|
50
|
+
* text/thinking deltas are batched into a single `stream_event` line over this
|
|
51
|
+
* window, cutting per-token JSON.stringify + write + downstream parse/postMessage
|
|
52
|
+
* overhead (Claude-Code 2.1.191: "Reduced CPU usage during streaming responses by
|
|
53
|
+
* coalescing text updates"). `0` (or a negative / non-numeric value) disables
|
|
54
|
+
* batching, restoring the exact per-token emit behavior. Precedence:
|
|
55
|
+
* explicit `options.streamCoalesceMs` > `CC_STREAM_COALESCE_MS` env > default 50.
|
|
56
|
+
*/
|
|
57
|
+
export function resolveStreamCoalesceMs(options = {}, env = {}) {
|
|
58
|
+
const pick =
|
|
59
|
+
options.streamCoalesceMs !== undefined
|
|
60
|
+
? options.streamCoalesceMs
|
|
61
|
+
: env.CC_STREAM_COALESCE_MS;
|
|
62
|
+
if (pick === undefined || pick === null || pick === "") return 50;
|
|
63
|
+
const n = Number(pick);
|
|
64
|
+
if (!Number.isFinite(n) || n < 0) return 50;
|
|
65
|
+
return n;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Coalescer for the NDJSON output stream. Every line still flows through `emit`,
|
|
70
|
+
* but consecutive partial-message text/thinking deltas are buffered and flushed
|
|
71
|
+
* as one batched `stream_event` line: on a short timer (`coalesceMs`), whenever a
|
|
72
|
+
* delta of the OTHER kind or any non-delta line is emitted (so ordering is always
|
|
73
|
+
* preserved — a batched text run is flushed before the tool_use/result that
|
|
74
|
+
* follows it), and at stream end (the terminal line routes through `emit`). With
|
|
75
|
+
* `coalesceMs <= 0` deltas pass straight through, matching the legacy behavior.
|
|
76
|
+
*
|
|
77
|
+
* The flush timer is `unref()`d so it never holds the process open. Pure aside
|
|
78
|
+
* from the injected `writeOut`/timer seams, so it unit-tests deterministically.
|
|
79
|
+
*/
|
|
80
|
+
export function createStreamCoalescer({
|
|
81
|
+
writeOut,
|
|
82
|
+
coalesceMs = 50,
|
|
83
|
+
setTimer,
|
|
84
|
+
clearTimer,
|
|
85
|
+
} = {}) {
|
|
86
|
+
const rawEmit = (obj) => writeOut(JSON.stringify(obj) + "\n");
|
|
87
|
+
const startTimer =
|
|
88
|
+
setTimer ||
|
|
89
|
+
((fn, ms) => {
|
|
90
|
+
const t = setTimeout(fn, ms);
|
|
91
|
+
if (t && typeof t.unref === "function") t.unref();
|
|
92
|
+
return t;
|
|
93
|
+
});
|
|
94
|
+
const stopTimer = clearTimer || ((t) => clearTimeout(t));
|
|
95
|
+
|
|
96
|
+
let pending = null; // { kind: "text" | "thinking", text: string }
|
|
97
|
+
let timer = null;
|
|
98
|
+
|
|
99
|
+
const buildLine = (kind, text) => ({
|
|
100
|
+
type: "stream_event",
|
|
101
|
+
event: {
|
|
102
|
+
type: "content_block_delta",
|
|
103
|
+
delta:
|
|
104
|
+
kind === "thinking"
|
|
105
|
+
? { type: "thinking_delta", thinking: text }
|
|
106
|
+
: { type: "text_delta", text },
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const flush = () => {
|
|
111
|
+
if (timer != null) {
|
|
112
|
+
stopTimer(timer);
|
|
113
|
+
timer = null;
|
|
114
|
+
}
|
|
115
|
+
if (!pending) return;
|
|
116
|
+
const p = pending;
|
|
117
|
+
pending = null;
|
|
118
|
+
rawEmit(buildLine(p.kind, p.text));
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const delta = (kind, text) => {
|
|
122
|
+
if (!(coalesceMs > 0)) {
|
|
123
|
+
rawEmit(buildLine(kind, text));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (pending && pending.kind !== kind) flush();
|
|
127
|
+
if (!pending) pending = { kind, text: "" };
|
|
128
|
+
pending.text += text;
|
|
129
|
+
if (timer == null) timer = startTimer(flush, coalesceMs);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
// Any non-delta line flushes pending deltas first to preserve ordering.
|
|
134
|
+
emit: (obj) => {
|
|
135
|
+
flush();
|
|
136
|
+
rawEmit(obj);
|
|
137
|
+
},
|
|
138
|
+
emitTextDelta: (text) => delta("text", text),
|
|
139
|
+
emitThinkingDelta: (text) => delta("thinking", text),
|
|
140
|
+
flush,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
47
144
|
/**
|
|
48
145
|
* Structured view of the global plan-mode state for `plan_update` events
|
|
49
146
|
* (the chat panel renders its plan card from this). Pure read; never throws.
|
|
@@ -416,7 +513,17 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
416
513
|
const doExpand = deps.expandFileRefs || expandFileRefsAsync;
|
|
417
514
|
const writeOut = deps.writeOut || ((s) => process.stdout.write(s));
|
|
418
515
|
const writeErr = deps.writeErr || ((s) => process.stderr.write(s));
|
|
419
|
-
|
|
516
|
+
// Batch consecutive partial-message text/thinking deltas into one stream_event
|
|
517
|
+
// line (Claude-Code 2.1.191 streaming-CPU optimization). `emit` flushes any
|
|
518
|
+
// pending deltas before writing a non-delta line, so ordering is preserved;
|
|
519
|
+
// CC_STREAM_COALESCE_MS=0 restores the per-token emit behavior.
|
|
520
|
+
const streamCoalescer =
|
|
521
|
+
deps.streamCoalescer ||
|
|
522
|
+
createStreamCoalescer({
|
|
523
|
+
writeOut,
|
|
524
|
+
coalesceMs: resolveStreamCoalesceMs(options, process.env),
|
|
525
|
+
});
|
|
526
|
+
const emit = streamCoalescer.emit;
|
|
420
527
|
|
|
421
528
|
const getApprovalGate =
|
|
422
529
|
deps.getApprovalGate ||
|
|
@@ -822,27 +929,13 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
822
929
|
// `stream_event` lines. Output here is always NDJSON, so gating on the
|
|
823
930
|
// flag alone suffices.
|
|
824
931
|
onToken: options.includePartialMessages
|
|
825
|
-
? (text) =>
|
|
826
|
-
emit({
|
|
827
|
-
type: "stream_event",
|
|
828
|
-
event: {
|
|
829
|
-
type: "content_block_delta",
|
|
830
|
-
delta: { type: "text_delta", text },
|
|
831
|
-
},
|
|
832
|
-
})
|
|
932
|
+
? (text) => streamCoalescer.emitTextDelta(text)
|
|
833
933
|
: undefined,
|
|
834
934
|
// Extended-thinking reasoning deltas (Anthropic; only when thinking is on).
|
|
835
935
|
// Surfaced as a thinking_delta so consumers can render a dimmed/collapsed
|
|
836
936
|
// reasoning block — the visible half of the /think toggle.
|
|
837
937
|
onThinking: options.includePartialMessages
|
|
838
|
-
? (thinking) =>
|
|
839
|
-
emit({
|
|
840
|
-
type: "stream_event",
|
|
841
|
-
event: {
|
|
842
|
-
type: "content_block_delta",
|
|
843
|
-
delta: { type: "thinking_delta", thinking },
|
|
844
|
-
},
|
|
845
|
-
})
|
|
938
|
+
? (thinking) => streamCoalescer.emitThinkingDelta(thinking)
|
|
846
939
|
: undefined,
|
|
847
940
|
// Auto-retry notice (Claude-Code 2.1.181): the streaming call hit a
|
|
848
941
|
// transient API connection drop and is retrying. Surfaced unconditionally
|
|
@@ -1389,6 +1482,20 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
1389
1482
|
if (isAbort && !options.signal?.aborted) {
|
|
1390
1483
|
// User-initiated turn interrupt — not an error; no assistant message
|
|
1391
1484
|
// is recorded (the dangling user turn is fine for the next exchange).
|
|
1485
|
+
//
|
|
1486
|
+
// BUT if the interrupt landed mid-tool-loop, `messages` now holds an
|
|
1487
|
+
// assistant turn whose tool_calls never got their results — sending
|
|
1488
|
+
// that next turn makes strict providers (Anthropic) reject the whole
|
|
1489
|
+
// request ("tool_use without tool_result"), wedging the rest of the
|
|
1490
|
+
// session. Drop the dangling call/result pair in place before
|
|
1491
|
+
// continuing. Always re-balance (not gated on length): a partial
|
|
1492
|
+
// interrupt that trims one assistant turn's tool_calls in place leaves
|
|
1493
|
+
// the array length unchanged. sanitizeToolPairs is idempotent on an
|
|
1494
|
+
// already-balanced array and leaves user/text turns untouched, so the
|
|
1495
|
+
// intentional dangling-user state above is preserved.
|
|
1496
|
+
const balanced = sanitizeToolPairs(messages);
|
|
1497
|
+
messages.length = 0;
|
|
1498
|
+
messages.push(...balanced);
|
|
1392
1499
|
emit({
|
|
1393
1500
|
type: "result",
|
|
1394
1501
|
subtype: "interrupted",
|
|
@@ -1,3 +0,0 @@
|
|
|
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-1iacQgo5.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 Z(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 q(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 G(){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 Y(){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?Z(s):q(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(),G(),Y(),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:Z,parseCacheText:q,loadSummary:H,loadBreakdown:G,loadRecent:Y,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-eXzh0Z/repo/packages/web-panel/src/views/Analytics.vue"]]);export{Je as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as b,J as d,U as y,R as l,c as t,K as n,o as pe,b as Q,r as c,P as s,Q as k,V as r,S as x,F as Ce}from"./vendor-BvqAck49.js";import{_ as ze,b as fe,u as ye,d as ie}from"./index-1iacQgo5.js";import{u as be}from"./useFs-DD4bzBkU.js";import{az as Pe,R as Be,aQ as Le,as as Ae,aS as Te,S as Fe,z as Me}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const Re={__name:"Backup",setup(ke,{expose:v}){v();const{t:i}=fe(),e=ye(),W=be(),E=c(!1),g=c("backup"),C=c(!1),h=c(!1),B=c(!1),w=c(""),f=c([]),O=c(""),F=Q(()=>[{title:i("backup.backupColumns.id"),key:"id"},{title:i("backup.backupColumns.size"),key:"size",width:120},{title:i("backup.backupColumns.createdAt"),key:"createdAt"},{title:i("backup.backupColumns.action"),key:"action",width:100}]);async function m(){h.value=!0,w.value="";try{const{output:a}=await e.execute("backup list --json",15e3),o=T(a);Array.isArray(o)?f.value=o:o&&Array.isArray(o.backups)?f.value=o.backups:(f.value=[],a&&a.trim()&&(O.value=a))}catch(a){w.value=i("backup.messages.loadBackupsFailed",{err:a.message})}finally{h.value=!1}}async function S(){B.value=!0,O.value="",w.value="";try{const{output:a}=await e.execute("backup create --json",3e4);O.value=a||i("backup.backup.createDefaultMessage"),await m()}catch(a){O.value=i("backup.messages.createBackupFailed",{err:a.message})}finally{B.value=!1}}const M=c(!1),L=c(!1),A=c(null),z=c("");function G(a){A.value=a,z.value="",M.value=!0}async function u(){if(A.value){L.value=!0,z.value="";try{const{output:a}=await e.execute(`backup restore ${A.value.id}`,6e4);z.value=a||i("backup.backup.restoreDefaultMessage")}catch(a){z.value=i("backup.messages.restoreFailed",{err:a.message})}finally{L.value=!1}}}const p=c(!1),R=c(""),D=c(!1),U=c(""),X=c(0),Z=c(""),P=c(""),q=c(!1),Y=c(!1),I=c([]),ve=Q(()=>[{title:i("backup.conflictColumns.path"),key:"path"},{title:i("backup.conflictColumns.type"),key:"type",width:120}]);async function j(){p.value=!0,R.value="";try{const{output:a}=await e.execute("sync status --json",15e3),o=T(a);o?(D.value=o.online||o.synced||o.status==="online"||!1,U.value=D.value?i("backup.sync.synced"):i("backup.sync.notSynced"),X.value=o.pending??o.pendingChanges??0,Z.value=o.lastSync||o.lastSyncTime||""):ce(a)}catch(a){R.value=i("backup.messages.loadSyncFailed",{err:a.message})}finally{p.value=!1}}function ce(a){if(!a){U.value=i("backup.sync.unknown");return}D.value=/synced|online|up.to.date/i.test(a),U.value=D.value?i("backup.sync.synced"):i("backup.sync.notSynced");const o=a.match(/pending[:\s]+(\d+)/i);X.value=o?parseInt(o[1]):0;const _=a.match(/last[:\s]+(.+)/i);_&&(Z.value=_[1].trim())}async function ge(){q.value=!0,P.value="";try{const{output:a}=await e.execute("sync push",3e4);P.value=a||i("backup.sync.pushDefaultMessage"),await j()}catch(a){P.value=i("backup.messages.pushFailed",{err:a.message})}finally{q.value=!1}}async function me(){Y.value=!0,P.value="";try{const{output:a}=await e.execute("sync pull",3e4);P.value=a||i("backup.sync.pullDefaultMessage"),await j()}catch(a){P.value=i("backup.messages.pullFailed",{err:a.message})}finally{Y.value=!1}}async function se(){try{const{output:a}=await e.execute("sync conflicts --json",15e3),o=T(a);Array.isArray(o)?I.value=o:o&&Array.isArray(o.conflicts)?I.value=o.conflicts:I.value=[]}catch{I.value=[]}}const $=c(!1),ee=c(""),ae=c(!1),te=c(""),ne=c(!1),N=c(""),H=c([]),_e=Q(()=>[{title:i("backup.pinColumns.cid"),key:"cid"},{title:i("backup.pinColumns.name"),key:"name"},{title:i("backup.pinColumns.size"),key:"size",width:120},{title:i("backup.pinColumns.pinnedAt"),key:"pinnedAt"},{title:i("backup.pinColumns.action"),key:"action",width:120}]);async function re(){$.value=!0,ee.value="";try{const{output:a}=await e.execute("ipfs status --json",15e3),o=T(a);if(o)ae.value=o.online||o.status==="online"||o.connected||!1,te.value=o.peerId||o.id||"";else{ae.value=a?/online|connected|running/i.test(a):!1;const _=a?a.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;te.value=_?_[1]:""}}catch(a){ee.value=i("backup.messages.loadIpfsFailed",{err:a.message})}finally{$.value=!1}}async function J(){ne.value=!0,N.value="";try{const{output:a}=await e.execute("ipfs pins --json",15e3),o=T(a);Array.isArray(o)?H.value=o:o&&Array.isArray(o.pins)?H.value=o.pins:H.value=[]}catch(a){N.value=i("backup.messages.loadPinsFailed",{err:a.message})}finally{ne.value=!1}}const xe=c(!1),oe=c(!1),le=c(""),K=c("");async function he(){if(le.value.trim()){oe.value=!0,K.value="";try{const{output:a}=await e.execute(`ipfs pin "${le.value.trim()}"`,3e4);K.value=a||i("backup.ipfs.pinDefaultSuccess"),await J()}catch(a){K.value=i("backup.messages.pinFailed",{err:a.message})}finally{oe.value=!1}}}async function we(a){try{await e.execute(`ipfs unpin ${a.cid}`,15e3),await J()}catch(o){N.value=i("backup.messages.unpinFailed",{err:o.message})}}function T(a){if(!a||!a.trim())return null;try{return JSON.parse(a.trim())}catch{const _=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(_)try{return JSON.parse(_[0])}catch{}return null}}async function Oe(){if(f.value.length){E.value=!0;try{const a=await W.saveJson({schema:1,exportedAt:new Date().toISOString(),count:f.value.length,backups:f.value},{defaultPath:`backup-list-${new Date().toISOString().slice(0,10)}.json`});if(a.canceled)return;ie.success(a.path?i("backup.messages.exportOk",{count:f.value.length,path:a.path}):i("backup.messages.exportOkDefault"))}catch(a){ie.error(i("backup.messages.exportFailed",{err:a.message||a}))}finally{E.value=!1}}}function Se(a){if(a==null||isNaN(a))return"-";const o=Number(a);if(o===0)return"0 B";const _=["B","KB","MB","GB","TB"],V=Math.floor(Math.log(o)/Math.log(1024));return(o/Math.pow(1024,V)).toFixed(V>0?1:0)+" "+_[V]}async function ue(){C.value=!0;try{await Promise.all([m(),j(),se(),re(),J()])}finally{C.value=!1}}pe(ue);const de={t:i,ws:e,fs:W,exportingList:E,activeTab:g,refreshing:C,backupLoading:h,backupCreating:B,backupError:w,backups:f,lastBackupResult:O,backupColumns:F,loadBackups:m,createBackup:S,showRestoreModal:M,restoreLoading:L,restoreTarget:A,restoreResult:z,confirmRestore:G,doRestore:u,syncLoading:p,syncError:R,syncOnline:D,syncStatusText:U,syncPending:X,lastSyncTime:Z,syncOutput:P,pushLoading:q,pullLoading:Y,conflicts:I,conflictColumns:ve,loadSync:j,parseSyncStatusText:ce,syncPush:ge,syncPull:me,loadConflicts:se,ipfsLoading:$,ipfsError:ee,ipfsOnline:ae,ipfsPeerId:te,pinsLoading:ne,pinsError:N,pins:H,pinColumns:_e,loadIpfsStatus:re,loadPins:J,showPinModal:xe,pinLoading:oe,pinFilePath:le,pinResult:K,doPin:he,unpinFile:we,safeParseJson:T,exportBackupList:Oe,formatSize:Se,refreshAll:ue,ref:c,computed:Q,onMounted:pe,get useI18n(){return fe},get CloudUploadOutlined(){return Me},get SyncOutlined(){return Fe},get HddOutlined(){return Te},get PlusOutlined(){return Ae},get DeleteOutlined(){return Le},get ReloadOutlined(){return Be},get DownloadOutlined(){return Pe},get message(){return ie},get useWsStore(){return ye},get useFs(){return be}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={class:"page-title"},Ee={class:"page-sub"},Ue={key:0,style:{"text-align":"center",padding:"30px"}},je={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Ne={key:1},He={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Je={key:3,style:{"margin-top":"16px"}},Ke={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},Qe={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},We={style:{color:"var(--text-secondary)"}},Ge={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},Xe={style:{"font-family":"monospace"}},Ze={key:0},qe={key:1,style:{"margin-top":"12px"}},Ye={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},$e={key:0,style:{"text-align":"center",padding:"30px"}},ea={key:0,style:{"margin-bottom":"16px"}},aa={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},ta={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},na={key:0,style:{"font-family":"monospace","font-size":"12px"}},oa={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},la={key:0,style:{"text-align":"center",padding:"30px"}},ia={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ca={key:0,style:{"text-align":"center",padding:"30px"}},sa={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},ra={key:1},ua={key:2},da={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},pa={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},fa={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},ya={key:0,style:{"margin-top":"12px"}},ba={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}};function ka(ke,v,i,e,W,E){const g=b("a-button"),C=b("a-space"),h=b("a-spin"),B=b("a-empty"),w=b("a-table"),f=b("a-card"),O=b("a-modal"),F=b("a-tab-pane"),m=b("a-statistic"),S=b("a-col"),M=b("a-row"),L=b("a-tag"),A=b("a-popconfirm"),z=b("a-input"),G=b("a-tabs");return s(),d("div",null,[y("div",De,[y("div",null,[y("h2",Ie,l(e.t("backup.title")),1),y("p",Ee,l(e.t("backup.subtitle")),1)]),t(g,{type:"primary",ghost:"",loading:e.refreshing,onClick:e.refreshAll},{icon:n(()=>[t(e.ReloadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.refresh")),1)]),_:1},8,["loading"])]),t(G,{activeKey:e.activeTab,"onUpdate:activeKey":v[4]||(v[4]=u=>e.activeTab=u),type:"card"},{default:n(()=>[r(" Tab 1: Backup management "),t(F,{key:"backup"},{tab:n(()=>[t(e.CloudUploadOutlined),k(" "+l(e.t("backup.tabs.backup")),1)]),default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:n(()=>[t(C,null,{default:n(()=>[t(e.CloudUploadOutlined),y("span",null,l(e.t("backup.backup.cardTitle")),1)]),_:1})]),extra:n(()=>[t(C,null,{default:n(()=>[t(g,{disabled:!e.backups.length,loading:e.exportingList,onClick:e.exportBackupList},{icon:n(()=>[t(e.DownloadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.backup.exportButton")),1)]),_:1},8,["disabled","loading"]),t(g,{type:"primary",loading:e.backupCreating,onClick:e.createBackup},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[k(" "+l(e.t("backup.backup.createButton")),1)]),_:1},8,["loading"])]),_:1})]),default:n(()=>[e.backupLoading?(s(),d("div",Ue,[t(h)])):e.backups.length===0&&!e.lastBackupResult?(s(),x(B,{key:1,description:e.t("backup.backup.emptyText")},null,8,["description"])):r("v-if",!0),e.backups.length>0?(s(),x(w,{key:2,columns:e.backupColumns,"data-source":e.backups,pagination:!1,size:"small","row-key":"id"},{bodyCell:n(({column:u,record:p})=>[u.key==="id"?(s(),d("span",je,l(p.id.length>20?p.id.slice(0,20)+"...":p.id),1)):r("v-if",!0),u.key==="size"?(s(),d("span",Ne,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="createdAt"?(s(),d("span",He,l(p.createdAt||"-"),1)):r("v-if",!0),u.key==="action"?(s(),x(g,{key:3,size:"small",type:"link",onClick:R=>e.confirmRestore(p)},{default:n(()=>[k(l(e.t("backup.backupColumns.restore")),1)]),_:1},8,["onClick"])):r("v-if",!0)]),_:1},8,["columns","data-source"])):r("v-if",!0),e.lastBackupResult?(s(),d("div",Je,[y("div",Ke,l(e.t("backup.backup.lastResultLabel")),1),y("pre",Ve,l(e.lastBackupResult),1)])):r("v-if",!0),e.backupError?(s(),d("div",Qe,l(e.backupError),1)):r("v-if",!0)]),_:1}),t(O,{open:e.showRestoreModal,"onUpdate:open":v[0]||(v[0]=u=>e.showRestoreModal=u),title:e.t("backup.backup.restoreTitle"),"ok-text":e.t("backup.backup.restoreOk"),"cancel-text":e.t("common.cancel"),"confirm-loading":e.restoreLoading,onOk:e.doRestore,"ok-type":"danger"},{default:n(()=>[y("p",We,l(e.t("backup.backup.restoreIntro")),1),e.restoreTarget?(s(),d("div",Ge,[y("div",null,[y("strong",null,l(e.t("backup.backup.backupIdPrefix")),1),v[5]||(v[5]=k()),y("span",Xe,l(e.restoreTarget.id),1)]),e.restoreTarget.createdAt?(s(),d("div",Ze,[y("strong",null,l(e.t("backup.backup.createdAtPrefix")),1),k(" "+l(e.restoreTarget.createdAt),1)])):r("v-if",!0)])):r("v-if",!0),e.restoreResult?(s(),d("div",qe,[y("pre",Ye,l(e.restoreResult),1)])):r("v-if",!0)]),_:1},8,["open","title","ok-text","cancel-text","confirm-loading"])]),_:1}),r(" Tab 2: Data sync "),t(F,{key:"sync"},{tab:n(()=>[t(e.SyncOutlined),k(" "+l(e.t("backup.tabs.sync")),1)]),default:n(()=>[e.syncLoading?(s(),d("div",$e,[t(h)])):(s(),d(Ce,{key:1},[t(M,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.statusLabel"),value:e.syncStatusText,"value-style":{color:e.syncOnline?"#52c41a":"#888",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.pendingLabel"),value:e.syncPending,"value-style":{color:e.syncPending>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.lastSyncLabel"),value:e.lastSyncTime||e.t("backup.sync.noLastSync"),"value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(C,{style:{"margin-bottom":"16px"}},{default:n(()=>[t(g,{loading:e.pushLoading,onClick:e.syncPush,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.CloudUploadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.sync.pushButton")),1)]),_:1},8,["loading"]),t(g,{loading:e.pullLoading,onClick:e.syncPull,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.SyncOutlined)]),default:n(()=>[k(" "+l(e.t("backup.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),e.syncOutput?(s(),d("div",ea,[y("div",aa,l(e.t("backup.sync.outputLabel")),1),y("pre",ta,l(e.syncOutput),1)])):r("v-if",!0),r(" Conflicts "),e.conflicts.length>0?(s(),x(f,{key:1,title:e.t("backup.sync.conflictsTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(w,{columns:e.conflictColumns,"data-source":e.conflicts,pagination:!1,size:"small","row-key":"path"},{bodyCell:n(({column:u,record:p})=>[u.key==="path"?(s(),d("span",na,l(p.path),1)):r("v-if",!0),u.key==="type"?(s(),x(L,{key:1,color:"red"},{default:n(()=>[k(l(p.type||e.t("backup.sync.conflictDefault")),1)]),_:2},1024)):r("v-if",!0)]),_:1},8,["columns","data-source"])]),_:1},8,["title"])):r("v-if",!0)],64)),e.syncError?(s(),d("div",oa,l(e.syncError),1)):r("v-if",!0)]),_:1}),r(" Tab 3: IPFS storage "),t(F,{key:"ipfs"},{tab:n(()=>[t(e.HddOutlined),k(" "+l(e.t("backup.tabs.ipfs")),1)]),default:n(()=>[t(f,{title:e.t("backup.ipfs.statusCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:n(()=>[t(L,{color:e.ipfsOnline?"green":"default"},{default:n(()=>[k(l(e.ipfsOnline?e.t("backup.ipfs.online"):e.t("backup.ipfs.offline")),1)]),_:1},8,["color"])]),default:n(()=>[e.ipfsLoading?(s(),d("div",la,[t(h)])):(s(),x(M,{key:1,gutter:[16,16]},{default:n(()=>[t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.nodeStatusLabel"),value:e.ipfsOnline?e.t("backup.ipfs.connected"):e.t("backup.ipfs.disconnected"),"value-style":{color:e.ipfsOnline?"#52c41a":"#888",fontSize:"16px"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.pinnedLabel"),value:e.pins.length,"value-style":{fontSize:"16px"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.peerIdLabel"),value:e.ipfsPeerId||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1})),e.ipfsError?(s(),d("div",ia,l(e.ipfsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(f,{title:e.t("backup.ipfs.pinListTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[t(g,{size:"small",onClick:v[1]||(v[1]=u=>e.showPinModal=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[k(" "+l(e.t("backup.ipfs.pinFileButton")),1)]),_:1})]),default:n(()=>[e.pinsLoading?(s(),d("div",ca,[t(h)])):e.pins.length===0?(s(),x(B,{key:1,description:e.t("backup.ipfs.pinEmptyText")},null,8,["description"])):(s(),x(w,{key:2,columns:e.pinColumns,"data-source":e.pins,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:n(({column:u,record:p})=>[u.key==="cid"?(s(),d("span",sa,l(p.cid.length>24?p.cid.slice(0,24)+"...":p.cid),1)):r("v-if",!0),u.key==="name"?(s(),d("span",ra,l(p.name||"-"),1)):r("v-if",!0),u.key==="size"?(s(),d("span",ua,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="pinnedAt"?(s(),d("span",da,l(p.pinnedAt||"-"),1)):r("v-if",!0),u.key==="action"?(s(),x(A,{key:4,title:e.t("backup.ipfs.unpinConfirm"),"ok-text":e.t("backup.ipfs.unpinOk"),"cancel-text":e.t("common.cancel"),onConfirm:R=>e.unpinFile(p)},{default:n(()=>[t(g,{size:"small",type:"link",danger:""},{default:n(()=>[t(e.DeleteOutlined),k(" "+l(e.t("backup.ipfs.unpinAction")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):r("v-if",!0)]),_:1},8,["columns","data-source"])),e.pinsError?(s(),d("div",pa,l(e.pinsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(O,{open:e.showPinModal,"onUpdate:open":v[3]||(v[3]=u=>e.showPinModal=u),title:e.t("backup.ipfs.pinModalTitle"),"confirm-loading":e.pinLoading,onOk:e.doPin,"ok-text":e.t("backup.ipfs.pinModalOk"),"cancel-text":e.t("common.cancel")},{default:n(()=>[y("div",fa,l(e.t("backup.ipfs.pinModalIntro")),1),t(z,{value:e.pinFilePath,"onUpdate:value":v[2]||(v[2]=u=>e.pinFilePath=u),placeholder:e.t("backup.ipfs.pinModalPlaceholder"),onPressEnter:e.doPin},null,8,["value","placeholder"]),e.pinResult?(s(),d("div",ya,[y("pre",ba,l(e.pinResult),1)])):r("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1})]),_:1},8,["activeKey"])])}const ha=ze(Re,[["render",ka],["__scopeId","data-v-077902a5"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/Backup.vue"]]);export{ha as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as u,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-BvqAck49.js";import{_ as k}from"./index-1iacQgo5.js";import"./icons-DP3uiYxy.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},M={class:"meta"},R={class:"actor"},V={class:"time"},q={class:"body"};function D(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",T,[n("div",M,[n("span",R,a(r.actorLabel),1),n("span",V,a(r.formattedTime),1)]),n("div",q,a(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const z=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{z as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as p,J as m,U as g,R as r,c as a,K as o,V as c,S as _,o as ne,a as X,b as E,r as h,P as s,Q as b,F as R,Z,$ as ie}from"./vendor-BvqAck49.js";import{_ as he,u as re,b as se,d as v}from"./index-1iacQgo5.js";import{t as J}from"./community-parser-Cuyslaku.js";import{s as _e,am as ke,ak as xe,G as ze,Z as Ae,b2 as Se,D as Te,b3 as Ce,as as Oe,R as Fe}from"./icons-DP3uiYxy.js";const Re=Object.freeze(["file-md5","file-sha1","file-sha256","file-sha512","ipv4","ipv6","domain","url","email"]);function T(e,l=0){return typeof e=="number"&&Number.isFinite(e)?e:l}function ye(e,l=0){if(!e||typeof e!="object")return null;const d=e.id||"";if(!d)return null;const t=Array.isArray(e.labels)?e.labels:[];return{key:d,id:d,type:String(e.type||""),value:String(e.value||""),labels:t,confidence:e.confidence!=null?T(e.confidence,null):null,sourceId:e.sourceId??e.source_id??null,sourceName:e.sourceName??e.source_name??null,validFrom:e.validFrom??e.valid_from??null,validUntil:e.validUntil??e.valid_until??null,firstSeenAt:e.firstSeenAt??e.first_seen_at??null,lastSeenAt:e.lastSeenAt??e.last_seen_at??null,_idx:l}}function ce(e){const l=J(e);return Array.isArray(l)?l.map(ye).filter(Boolean):[]}function ue(e){const l=J(e);return!l||typeof l!="object"||Array.isArray(l)?null:{matched:!!l.matched,type:String(l.type||"unknown"),indicator:l.indicator?ye(l.indicator):null}}function de(e){const l={total:0,byType:{}},d=J(e);if(!d||typeof d!="object"||Array.isArray(d))return l;if(l.total=T(d.total,0),d.byType&&typeof d.byType=="object")for(const[t,C]of Object.entries(d.byType))typeof C=="number"&&Number.isFinite(C)&&(l.byType[t]=C);return l}function we(e,l=0){if(!e||typeof e!="object")return null;const d=e.entity||"";return d?{key:d,entity:d,eventCount:T(e.eventCount??e.event_count,0),failureRate:T(e.failureRate??e.failure_rate,0),uniqueResources:T(e.uniqueResources??e.unique_resources,0),uniqueActions:T(e.uniqueActions??e.unique_actions,0),burstiness:T(e.burstiness,0),riskScore:T(e.riskScore??e.risk_score,0),_idx:l}:null}function me(e){const l=J(e);return Array.isArray(l)?l.map(we).filter(Boolean):[]}function Ue(e,l=0){return!e||typeof e!="object"?null:{key:l,score:T(e.score,0),reasons:Array.isArray(e.reasons)?e.reasons:[],event:e.event&&typeof e.event=="object"?e.event:null,_idx:l}}function pe(e){const l=J(e);return Array.isArray(l)?l.map(Ue).filter(Boolean):[]}function $(e){if(!e)return{noAuditLog:!1,error:""};const l=/no such table:\s*audit_log/i.test(e),d=e.match(/Failed:\s*(.+?)(?:\r?\n|$)/i);return{noAuditLog:l,error:d?d[1].trim():""}}function je(e){if(e==null||e==="")return"—";const l=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(l.getTime())?String(e):l.toLocaleString("zh-CN",{hour12:!1})}const Be={__name:"Compliance",setup(e,{expose:l}){l();const d=re(),{t}=se(),C=h(!1),G=h(!1),w=h(!1),U=h(!1),I=h([]),M=h({total:0,byType:{}}),L=h([]),z=h([]),k=h({noAuditLog:!1,error:""}),S=h("threat"),D=h(""),x=h(!1),j=h(!1),N=h(!1),H=X({observable:""}),B=h(null),O=X({entity:"",days:30}),A=X({entity:"",threshold:.7,days:1}),ee=E(()=>[{title:t("compliance.cols.type"),key:"type",width:"120px"},{title:t("compliance.cols.value"),key:"value"},{title:t("compliance.cols.labels"),key:"labels",width:"160px"},{title:t("compliance.cols.confidence"),key:"confidence",width:"90px"},{title:t("compliance.cols.source"),key:"source",width:"160px"},{title:t("compliance.cols.lastSeen"),key:"lastSeen",width:"160px"},{title:t("compliance.cols.action"),key:"action",width:"90px"}]),te=E(()=>[{title:t("compliance.cols.entity"),key:"entity",width:"180px"},{title:t("compliance.cols.riskScore"),key:"riskScore"},{title:t("compliance.cols.eventCount"),key:"eventCount",width:"90px"},{title:t("compliance.cols.failureRate"),key:"failureRate",width:"90px"},{title:t("compliance.cols.uniqueResources"),key:"uniqueResources",width:"90px"},{title:t("compliance.cols.burstiness"),key:"burstiness",width:"90px"}]),ae=E(()=>D.value?I.value.filter(i=>i.type===D.value):I.value),oe=E(()=>Object.keys(M.value.byType).length),W=E(()=>Object.entries(M.value.byType).sort((i,y)=>y[1]-i[1])),F=E(()=>L.value.filter(i=>i.riskScore>=70).length),P={ipv4:"blue",ipv6:"cyan",domain:"purple",url:"magenta",email:"gold","file-md5":"orange","file-sha1":"orange","file-sha256":"red","file-sha512":"red",unknown:"default"};function V(i){return P[i]||"default"}function K(i){return i>=80?"#ff4d4f":i>=50?"#faad14":"#52c41a"}function n(i){return i>=70?"#ff4d4f":i>=40?"#faad14":"#52c41a"}function u(i,y){return i?i.length>y?i.slice(0,y)+"...":i:""}function Y({key:i}){i==="match"?(B.value=null,x.value=!0):i==="ueba-build"?j.value=!0:i==="ueba-analyze"&&(N.value=!0)}async function Q(){C.value=!0;try{const[i,y,f]=await Promise.all([d.execute("compliance threat-intel list --limit 200 --json",1e4).catch(()=>({output:""})),d.execute("compliance threat-intel stats --json",8e3).catch(()=>({output:""})),d.execute("compliance ueba top --top-k 20 --json",1e4).catch(()=>({output:""}))]);I.value=ce(i.output),M.value=de(y.output),k.value=$(f.output),L.value=k.value.noAuditLog?[]:me(f.output)}catch(i){v.error(t("compliance.msg.loadFailed")+": "+(i?.message||i))}finally{C.value=!1}}async function fe(){const i=H.observable.trim();if(!i){v.warning(t("compliance.msg.matchEmpty"));return}G.value=!0,B.value=null;try{const y=`compliance threat-intel match "${i.replace(/"/g,'\\"')}" --json`,{output:f}=await d.execute(y,8e3),q=ue(f);if(!q){v.error(t("compliance.msg.matchFailed")+": "+f.slice(0,120));return}B.value=q,q.matched?v.warning(t("compliance.msg.matchHit",{type:q.type})):q.type==="unknown"?v.info(t("compliance.msg.matchUnknownType")):v.success(t("compliance.msg.matchMiss",{type:q.type}))}catch(y){v.error(t("compliance.msg.matchFailed")+": "+(y?.message||y))}finally{G.value=!1}}async function be(i){try{const y=`compliance threat-intel remove ${i.type} "${i.value.replace(/"/g,'\\"')}" --json`,{output:f}=await d.execute(y,8e3);if(/error|失败/i.test(f)&&!/"removed"/.test(f)){v.error(t("compliance.msg.deleteFailed")+": "+f.slice(0,120));return}v.success(t("compliance.msg.deleteSuccess")),await Q()}catch(y){v.error(t("compliance.msg.deleteFailed")+": "+(y?.message||y))}}async function ve(){w.value=!0;try{const i=["compliance ueba baseline"];O.entity.trim()&&i.push(`--entity "${O.entity.trim().replace(/"/g,'\\"')}"`),O.days!=null&&i.push(`--days ${O.days}`),i.push("--json");const{output:y}=await d.execute(i.join(" "),3e4),f=$(y);if(f.noAuditLog){k.value=f,v.warning(t("compliance.msg.auditEmptyBuild")),j.value=!1;return}if(f.error){v.error(t("compliance.msg.buildFailed")+": "+f.error);return}v.success(t("compliance.msg.buildSuccess")),j.value=!1,S.value="ueba",await Q()}catch(i){v.error(t("compliance.msg.buildFailed")+": "+(i?.message||i))}finally{w.value=!1}}async function ge(){U.value=!0;try{const i=["compliance ueba analyze"];A.entity.trim()&&i.push(`--entity "${A.entity.trim().replace(/"/g,'\\"')}"`),A.threshold!=null&&i.push(`--threshold ${A.threshold}`),A.days!=null&&i.push(`--days ${A.days}`),i.push("--json");const{output:y}=await d.execute(i.join(" "),3e4),f=$(y);if(f.noAuditLog){k.value=f,v.warning(t("compliance.msg.auditEmptyAnalyze")),N.value=!1;return}if(f.error&&!y.includes("[")){v.error(t("compliance.msg.analyzeFailed")+": "+f.error);return}z.value=pe(y),v.success(t("compliance.msg.analyzeSuccess",{n:z.value.length})),N.value=!1,S.value="ueba"}catch(i){v.error(t("compliance.msg.analyzeFailed")+": "+(i?.message||i))}finally{U.value=!1}}ne(Q);const le={ws:d,t,loading:C,matching:G,building:w,analyzing:U,indicators:I,threatStats:M,uebaTop:L,anomalies:z,uebaError:k,activeTab:S,iocTypeFilter:D,showMatchModal:x,showBuildModal:j,showAnalyzeModal:N,matchForm:H,matchResult:B,buildForm:O,analyzeForm:A,indicatorColumns:ee,uebaColumns:te,filteredIndicators:ae,threatTypeCount:oe,typeBreakdown:W,highRiskCount:F,IOC_TYPE_COLORS:P,iocTypeColor:V,confidenceColor:K,riskColor:n,truncate:u,handleNewClick:Y,loadAll:Q,matchObservable:fe,removeIndicator:be,buildBaseline:ve,runAnalyze:ge,ref:h,computed:E,onMounted:ne,reactive:X,get ReloadOutlined(){return Fe},get PlusOutlined(){return Oe},get AimOutlined(){return Ce},get DatabaseOutlined(){return Te},get FundOutlined(){return Se},get SafetyCertificateOutlined(){return Ae},get BlockOutlined(){return ze},get UserOutlined(){return xe},get WarningOutlined(){return ke},get AlertOutlined(){return _e},get message(){return v},get useI18n(){return se},get useWsStore(){return re},get parseIndicators(){return ce},get parseMatchResult(){return ue},get parseThreatIntelStats(){return de},get parseUebaTop(){return me},get parseAnomalies(){return pe},get detectUebaError(){return $},get formatComplianceTime(){return je},get IOC_TYPES(){return Re}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},Ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={class:"page-title"},Me={class:"page-sub"},Le={class:"filter-bar"},Ne={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px","word-break":"break-all"}},Pe={key:0,style:{color:"var(--text-muted)"}},qe={key:1,style:{color:"var(--text-muted)"}},De={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},We={key:1,style:{color:"var(--text-muted)"}},Ve={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Ke={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ye={style:{color:"var(--text-primary)",margin:"16px 0 8px","font-size":"14px"}},Ze={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Je={key:2,style:{color:"var(--text-secondary)"}},Ge={key:5,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},He={style:{padding:"30px",color:"var(--text-muted)","text-align":"center"}},Qe={key:2,style:{color:"var(--text-primary)",margin:"24px 0 8px","font-size":"14px"}},Xe={style:{flex:"1"}},$e={style:{display:"flex",gap:"8px","align-items":"center"}},et={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},tt={key:1,style:{color:"var(--text-secondary)","font-size":"11px"}},at={key:0,style:{"margin-top":"4px"}},ot={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-secondary)"}},lt={key:0,style:{"margin-top":"12px","font-size":"12px"}},nt={style:{color:"var(--text-secondary)"}},it={style:{color:"var(--text-secondary)"}},rt={key:0,style:{"margin-top":"4px"}},st={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0"}},ct={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0"}};function ut(e,l,d,t,C,G){const w=p("a-button"),U=p("a-menu-item"),I=p("a-menu"),M=p("a-dropdown"),L=p("a-space"),z=p("a-statistic"),k=p("a-card"),S=p("a-col"),D=p("a-row"),x=p("a-tag"),j=p("a-radio-button"),N=p("a-radio-group"),H=p("a-popconfirm"),B=p("a-table"),O=p("a-tab-pane"),A=p("a-alert"),ee=p("a-progress"),te=p("a-list-item"),ae=p("a-list"),oe=p("a-tabs"),W=p("a-input"),F=p("a-form-item"),P=p("a-form"),V=p("a-modal"),K=p("a-input-number");return s(),m("div",null,[g("div",Ee,[g("div",null,[g("h2",Ie,r(e.$t("compliance.title")),1),g("p",Me,r(e.$t("compliance.subtitle")),1)]),a(L,null,{default:o(()=>[a(w,{loading:t.loading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[b(" "+r(e.$t("compliance.refresh")),1)]),_:1},8,["loading"]),a(M,{trigger:["click"]},{overlay:o(()=>[a(I,{onClick:t.handleNewClick},{default:o(()=>[a(U,{key:"match"},{default:o(()=>[a(t.AimOutlined),b(" "+r(e.$t("compliance.actions.match")),1)]),_:1}),a(U,{key:"ueba-build"},{default:o(()=>[a(t.DatabaseOutlined),b(" "+r(e.$t("compliance.actions.uebaBuild")),1)]),_:1}),a(U,{key:"ueba-analyze"},{default:o(()=>[a(t.FundOutlined),b(" "+r(e.$t("compliance.actions.uebaAnalyze")),1)]),_:1})]),_:1})]),default:o(()=>[a(w,{type:"primary"},{icon:o(()=>[a(t.PlusOutlined)]),default:o(()=>[b(" "+r(e.$t("compliance.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),c(" Stats overview "),a(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(S,{xs:12,sm:8,lg:5},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(z,{title:e.$t("compliance.stats.iocTotal"),value:t.threatStats.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.SafetyCertificateOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(S,{xs:12,sm:8,lg:5},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(z,{title:e.$t("compliance.stats.iocTypes"),value:t.threatTypeCount,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:o(()=>[a(t.BlockOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(S,{xs:12,sm:8,lg:5},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(z,{title:e.$t("compliance.stats.riskEntities"),value:t.uebaTop.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(S,{xs:12,sm:8,lg:5},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(z,{title:e.$t("compliance.stats.highRisk"),value:t.highRiskCount,"value-style":{color:t.highRiskCount>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.WarningOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(S,{xs:24,sm:8,lg:4},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(z,{title:e.$t("compliance.stats.recentAnomalies"),value:t.anomalies.length,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.AlertOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),c(" Type breakdown "),t.threatStats.total>0?(s(),_(k,{key:0,title:e.$t("compliance.typeBreakdown"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:o(()=>[a(L,{size:[12,8],wrap:""},{default:o(()=>[(s(!0),m(R,null,Z(t.typeBreakdown,([n,u])=>(s(),_(x,{key:n,color:t.iocTypeColor(n)},{default:o(()=>[b(r(n)+": "+r(u),1)]),_:2},1032,["color"]))),128))]),_:1})]),_:1},8,["title"])):c("v-if",!0),c(" Tabs "),a(oe,{activeKey:t.activeTab,"onUpdate:activeKey":l[1]||(l[1]=n=>t.activeTab=n),class:"compliance-tabs"},{default:o(()=>[c(" ── Threat Intel tab ──────────────────────────────────────── "),a(O,{key:"threat",tab:e.$t("compliance.tabs.threat")},{default:o(()=>[g("div",Le,[a(N,{value:t.iocTypeFilter,"onUpdate:value":l[0]||(l[0]=n=>t.iocTypeFilter=n),size:"small"},{default:o(()=>[a(j,{value:""},{default:o(()=>[b(r(e.$t("compliance.filter.all")),1)]),_:1}),(s(!0),m(R,null,Z(t.IOC_TYPES,n=>(s(),_(j,{key:n,value:n},{default:o(()=>[b(r(n),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(B,{columns:t.indicatorColumns,"data-source":t.filteredIndicators,pagination:{pageSize:20,showTotal:n=>e.$t("compliance.table.totalSuffix",{n})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:n,record:u})=>[n.key==="type"?(s(),_(x,{key:0,color:t.iocTypeColor(u.type),style:{"font-family":"monospace"}},{default:o(()=>[b(r(u.type),1)]),_:2},1032,["color"])):c("v-if",!0),n.key==="value"?(s(),m("span",Ne,r(t.truncate(u.value,64)),1)):c("v-if",!0),n.key==="labels"?(s(),m(R,{key:2},[(s(!0),m(R,null,Z(u.labels,Y=>(s(),_(x,{key:Y,color:"orange",style:{"font-size":"10px",margin:"1px"}},{default:o(()=>[b(r(Y),1)]),_:2},1024))),128)),u.labels.length?c("v-if",!0):(s(),m("span",Pe,"—"))],64)):c("v-if",!0),n.key==="confidence"?(s(),m(R,{key:3},[u.confidence!=null?(s(),m("span",{key:0,style:ie({color:t.confidenceColor(u.confidence),fontWeight:500})},r(u.confidence),5)):(s(),m("span",qe,"—"))],64)):c("v-if",!0),n.key==="source"?(s(),m(R,{key:4},[u.sourceName?(s(),m("span",De,r(u.sourceName),1)):(s(),m("span",We,"—"))],64)):c("v-if",!0),n.key==="lastSeen"?(s(),m("span",Ve,r(t.formatComplianceTime(u.lastSeenAt)),1)):c("v-if",!0),n.key==="action"?(s(),_(H,{key:6,title:e.$t("compliance.table.deleteConfirm"),"ok-text":e.$t("compliance.table.deleteOk"),"cancel-text":e.$t("compliance.table.cancel"),onConfirm:Y=>t.removeIndicator(u)},{default:o(()=>[a(w,{size:"small",type:"link",danger:""},{default:o(()=>[b(r(e.$t("compliance.table.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):c("v-if",!0)]),emptyText:o(()=>[g("div",Ke,[a(t.SafetyCertificateOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),b(" "+r(e.$t("compliance.table.emptyThreatsLine1"))+" ",1),l[11]||(l[11]=g("code",{style:{"font-size":"11px"}},"cc compliance threat-intel import <file.json>",-1))])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),c(" ── UEBA tab ──────────────────────────────────────────────── "),a(O,{key:"ueba",tab:e.$t("compliance.tabs.ueba")},{default:o(()=>[t.uebaError.noAuditLog?(s(),_(A,{key:0,type:"info","show-icon":"",message:e.$t("compliance.ueba.noAuditLog"),description:e.$t("compliance.ueba.noAuditLogDesc"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):t.uebaError.error?(s(),_(A,{key:1,type:"error","show-icon":"",message:e.$t("compliance.ueba.errorMessage",{err:t.uebaError.error}),style:{"margin-bottom":"16px"}},null,8,["message"])):c("v-if",!0),g("h3",Ye,r(e.$t("compliance.ueba.topRiskTitle",{count:t.uebaTop.length})),1),a(B,{columns:t.uebaColumns,"data-source":t.uebaTop,pagination:!1,size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:n,record:u})=>[n.key==="entity"?(s(),m("span",Ze,r(u.entity),1)):c("v-if",!0),n.key==="riskScore"?(s(),_(ee,{key:1,percent:Math.min(u.riskScore,100),"stroke-color":t.riskColor(u.riskScore),size:"small",format:()=>u.riskScore.toFixed(1)},null,8,["percent","stroke-color","format"])):c("v-if",!0),n.key==="eventCount"?(s(),m("span",Je,r(u.eventCount),1)):c("v-if",!0),n.key==="failureRate"?(s(),m("span",{key:3,style:ie({color:u.failureRate>.3?"#ff4d4f":"var(--text-secondary)",fontFamily:"monospace"})},r((u.failureRate*100).toFixed(1))+"% ",5)):c("v-if",!0),n.key==="uniqueResources"?(s(),_(x,{key:4,color:"cyan",style:{"font-size":"11px"}},{default:o(()=>[b(r(u.uniqueResources),1)]),_:2},1024)):c("v-if",!0),n.key==="burstiness"?(s(),m("span",Ge,r((u.burstiness*100).toFixed(0))+"% ",1)):c("v-if",!0)]),emptyText:o(()=>[g("div",He,[a(t.UserOutlined,{style:{"font-size":"32px","margin-bottom":"8px",display:"block"}}),b(" "+r(t.uebaError.noAuditLog?e.$t("compliance.table.emptyAuditEntities"):e.$t("compliance.table.emptyRiskEntities")),1)])]),_:1},8,["columns","data-source","loading"]),t.anomalies.length?(s(),m("h3",Qe,r(e.$t("compliance.ueba.anomalyTitle",{count:t.anomalies.length})),1)):c("v-if",!0),t.anomalies.length?(s(),_(ae,{key:3,size:"small","data-source":t.anomalies,locale:{emptyText:e.$t("compliance.table.noAnomalies")}},{renderItem:o(({item:n})=>[a(te,{style:{background:"var(--bg-card)",padding:"10px 16px"}},{default:o(()=>[g("div",Xe,[g("div",$e,[a(x,{color:t.riskColor(n.score*100)},{default:o(()=>[b("score "+r(n.score.toFixed(2)),1)]),_:2},1032,["color"]),n.event?.entity?(s(),m("span",et,r(n.event.entity),1)):c("v-if",!0),n.event?.action?(s(),m("span",tt," → "+r(n.event.action),1)):c("v-if",!0)]),n.reasons.length?(s(),m("div",at,[(s(!0),m(R,null,Z(n.reasons,u=>(s(),_(x,{key:u,color:"volcano",style:{"font-size":"10px",margin:"1px"}},{default:o(()=>[b(r(u),1)]),_:2},1024))),128))])):c("v-if",!0)])]),_:2},1024)]),_:1},8,["data-source","locale"])):c("v-if",!0)]),_:1},8,["tab"])]),_:1},8,["activeKey"]),c(" ── Match modal ───────────────────────────────────────────── "),a(V,{open:t.showMatchModal,"onUpdate:open":l[3]||(l[3]=n=>t.showMatchModal=n),title:e.$t("compliance.match.modalTitle"),"confirm-loading":t.matching,width:500,"ok-text":e.$t("compliance.match.ok"),"cancel-text":e.$t("compliance.match.close"),onOk:t.matchObservable},{default:o(()=>[a(P,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(F,{label:e.$t("compliance.match.label"),required:""},{default:o(()=>[a(W,{value:t.matchForm.observable,"onUpdate:value":l[2]||(l[2]=n=>t.matchForm.observable=n),placeholder:e.$t("compliance.match.placeholder"),"allow-clear":""},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.matchResult?(s(),_(k,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(z,{title:e.$t("compliance.match.result"),value:t.matchResult.matched?e.$t("compliance.match.hit"):e.$t("compliance.match.miss"),"value-style":{color:t.matchResult.matched?"#ff4d4f":"#52c41a"}},null,8,["title","value","value-style"]),g("div",ot,[b(r(e.$t("compliance.match.detectType"))+" ",1),a(x,{color:t.iocTypeColor(t.matchResult.type)},{default:o(()=>[b(r(t.matchResult.type),1)]),_:1},8,["color"])]),t.matchResult.indicator?(s(),m("div",lt,[g("div",nt,r(e.$t("compliance.match.sourcePrefix"))+" "+r(t.matchResult.indicator.sourceName||"—"),1),g("div",it,r(e.$t("compliance.match.confidencePrefix"))+" "+r(t.matchResult.indicator.confidence??"—"),1),t.matchResult.indicator.labels.length?(s(),m("div",rt,[(s(!0),m(R,null,Z(t.matchResult.indicator.labels,n=>(s(),_(x,{key:n,color:"orange",style:{"font-size":"10px"}},{default:o(()=>[b(r(n),1)]),_:2},1024))),128))])):c("v-if",!0)])):c("v-if",!0)]),_:1})):c("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),c(" ── UEBA build baseline modal ─────────────────────────────── "),a(V,{open:t.showBuildModal,"onUpdate:open":l[6]||(l[6]=n=>t.showBuildModal=n),title:e.$t("compliance.build.modalTitle"),"confirm-loading":t.building,width:480,"ok-text":e.$t("compliance.build.ok"),"cancel-text":e.$t("compliance.build.cancel"),onOk:t.buildBaseline},{default:o(()=>[a(P,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(F,{label:e.$t("compliance.build.entityLabel")},{default:o(()=>[a(W,{value:t.buildForm.entity,"onUpdate:value":l[4]||(l[4]=n=>t.buildForm.entity=n),placeholder:e.$t("compliance.build.entityPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(F,{label:e.$t("compliance.build.daysLabel")},{default:o(()=>[a(K,{value:t.buildForm.days,"onUpdate:value":l[5]||(l[5]=n=>t.buildForm.days=n),min:1,max:365,placeholder:e.$t("compliance.build.daysPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),g("p",st,r(e.$t("compliance.build.footnote")),1)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),c(" ── UEBA analyze modal ────────────────────────────────────── "),a(V,{open:t.showAnalyzeModal,"onUpdate:open":l[10]||(l[10]=n=>t.showAnalyzeModal=n),title:e.$t("compliance.analyze.modalTitle"),"confirm-loading":t.analyzing,width:480,"ok-text":e.$t("compliance.analyze.ok"),"cancel-text":e.$t("compliance.analyze.cancel"),onOk:t.runAnalyze},{default:o(()=>[a(P,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(F,{label:e.$t("compliance.analyze.entityLabel")},{default:o(()=>[a(W,{value:t.analyzeForm.entity,"onUpdate:value":l[7]||(l[7]=n=>t.analyzeForm.entity=n),placeholder:e.$t("compliance.analyze.entityPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(F,{label:e.$t("compliance.analyze.thresholdLabel")},{default:o(()=>[a(K,{value:t.analyzeForm.threshold,"onUpdate:value":l[8]||(l[8]=n=>t.analyzeForm.threshold=n),min:0,max:1,step:.05,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(F,{label:e.$t("compliance.analyze.daysLabel")},{default:o(()=>[a(K,{value:t.analyzeForm.days,"onUpdate:value":l[9]||(l[9]=n=>t.analyzeForm.days=n),min:1,max:30,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),g("p",ct,r(e.$t("compliance.analyze.footnote")),1)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const ft=he(Be,[["render",ut],["__scopeId","data-v-d3ffc3f8"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/Compliance.vue"]]);export{ft as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as c,J as m,U as E,R as s,c as a,K as o,S as A,V as f,o as re,b as U,a as Y,r as k,P as d,Q as y,F as B,Z as N}from"./vendor-BvqAck49.js";import{_ as Se,u as ie,b as se,d as v}from"./index-1iacQgo5.js";import{u as de,i as pe,a as ue,b as ce,c as ye,d as ge,E as Ie}from"./echarts-jxgIOFUZ.js";import{H as Ae,x as De,p as ze,aB as je,as as Fe,R as Me}from"./icons-DP3uiYxy.js";function Z(t){if(!t)return null;const l=t.trim();try{return JSON.parse(l)}catch{const i=l.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(!i)return null;try{return JSON.parse(i[1])}catch{return null}}}function ee(t,l=0){if(!t||typeof t!="object")return null;const i=t.id||t.entity_id||"";if(!i)return null;const e=Array.isArray(t.tags)?t.tags:typeof t.tags=="string"&&t.tags.length>0?t.tags.split(",").map(b=>b.trim()).filter(Boolean):[];return{key:i,id:i,name:t.name||"",type:t.type||"",tags:e,properties:t.properties&&typeof t.properties=="object"?t.properties:null,createdAt:t.created_at||t.createdAt||"",updatedAt:t.updated_at||t.updatedAt||"",_idx:l}}function me(t,l=0){if(!t||typeof t!="object")return null;const i=t.id||t.relation_id||"";if(!i)return null;const e=t.sourceId||t.source_id||"",b=t.targetId||t.target_id||"";if(!e||!b)return null;const O=typeof t.weight=="number"?t.weight:typeof t.weight=="string"?parseFloat(t.weight):1;return{key:i,id:i,sourceId:e,targetId:b,relationType:t.relationType||t.relation_type||"",weight:Number.isFinite(O)?O:1,properties:t.properties&&typeof t.properties=="object"?t.properties:null,createdAt:t.created_at||t.createdAt||"",_idx:l}}function fe(t){const l=Z(t);return Array.isArray(l)?l.map(ee).filter(Boolean):l&&Array.isArray(l.entities)?l.entities.map(ee).filter(Boolean):[]}function he(t){const l=Z(t);return Array.isArray(l)?l.map(me).filter(Boolean):l&&Array.isArray(l.relations)?l.relations.map(me).filter(Boolean):[]}function ke(t){const l=Z(t);if(!l||typeof l!="object"||Array.isArray(l))return{entityCount:0,relationCount:0,avgDegree:0,density:0,typeDistribution:{},relationTypeDistribution:{}};const i=e=>{const b=typeof e=="number"?e:parseFloat(e);return Number.isFinite(b)?b:0};return{entityCount:i(l.entityCount??l.entity_count),relationCount:i(l.relationCount??l.relation_count),avgDegree:i(l.avgDegree??l.avg_degree),density:i(l.density),typeDistribution:l.typeDistribution||l.type_distribution||{},relationTypeDistribution:l.relationTypeDistribution||l.relation_type_distribution||{}}}function ve(t){const l=Z(t);return Array.isArray(l)?l.map((i,e)=>{if(!i||typeof i!="object"||!i.entity)return null;const b=ee(i.entity,e);return b?{key:`${b.id}-${e}`,depth:typeof i.depth=="number"?i.depth:0,entity:b}:null}).filter(Boolean):[]}function _e(t){const l=Z(t);return Array.isArray(l)?l.map(i=>!i||typeof i!="object"||!i.name?null:{name:String(i.name),description:String(i.description||"")}).filter(Boolean):[]}function be(t,l){const i=new Map,e=[];for(const p of t)i.has(p.type)||(i.set(p.type,e.length),e.push({name:p.type||"unknown"}));const b=t.map(p=>({id:p.id,name:p.name||p.id.slice(0,8),category:i.get(p.type)??0,value:1,symbolSize:24})),O=new Set(t.map(p=>p.id)),R=[];for(const p of l)!O.has(p.sourceId)||!O.has(p.targetId)||R.push({source:p.sourceId,target:p.targetId,value:p.relationType,lineStyle:{width:Math.max(1,Math.min(6,p.weight*2))}});return{nodes:b,links:R,categories:e}}const Le={__name:"KnowledgeGraph",setup(t,{expose:l}){l(),de([ge,ye,ce,ue,pe]);const i=ie(),{t:e}=se(),b=k(!1),O=k(!1),R=k(!1),p=k(!1),D=k(!1),T=k(""),S=k(!1),W=k("graph"),M=k([]),z=k([]),j=k([]),C=k({entityCount:0,relationCount:0,avgDegree:0,density:0,typeDistribution:{},relationTypeDistribution:{}}),H=k(!1),K=k(!1),V=k(!1),x=Y({name:"",type:"",tags:""}),_=Y({sourceId:"",targetId:"",relationType:"",weight:1}),G=Y({maxDepth:3,direction:"out"}),I=k(""),L=k(""),F=k([]),q=U(()=>[{title:e("knowledgeGraph.entityCols.id"),key:"id",width:"120px"},{title:e("knowledgeGraph.entityCols.name"),key:"name",dataIndex:"name",ellipsis:!0},{title:e("knowledgeGraph.entityCols.type"),key:"type",dataIndex:"type",width:"140px"},{title:e("knowledgeGraph.entityCols.tags"),key:"tags",width:"200px"},{title:e("knowledgeGraph.entityCols.action"),key:"action",width:"160px"}]),Q=U(()=>[{title:e("knowledgeGraph.relationCols.source"),key:"source",width:"120px"},{title:"",key:"arrow",width:"40px"},{title:e("knowledgeGraph.relationCols.target"),key:"target",width:"120px"},{title:e("knowledgeGraph.relationCols.relationType"),key:"relationType",width:"160px"},{title:e("knowledgeGraph.relationCols.weight"),key:"weight",width:"100px"}]),X={Person:"magenta",Organization:"blue",Project:"cyan",Technology:"geekblue",Document:"gold",Concept:"purple",Event:"volcano"};function $(r){return X[r]||"default"}const n=U(()=>{const r=new Map;for(const u of M.value)r.set(u.id,u.name||u.id.slice(0,8));return r});function w(r){return n.value.get(r)||r.slice(0,12)}function P(r,u){return String(u?.children?.[0]?.children||"").toLowerCase().includes(String(r).toLowerCase())}const we=U(()=>{const r=C.value.typeDistribution||{},u=Object.values(r).reduce((g,h)=>g+h,0)||1;return Object.entries(r).map(([g,h])=>({type:g,count:h,percent:Math.round(h/u*100)})).sort((g,h)=>h.count-g.count)}),Ge=U(()=>{const r=C.value.relationTypeDistribution||{},u=Object.values(r).reduce((g,h)=>g+h,0)||1;return Object.entries(r).map(([g,h])=>({type:g,count:h,percent:Math.round(h/u*100)})).sort((g,h)=>h.count-g.count)}),Re=U(()=>{const{nodes:r,links:u,categories:g}=be(M.value,z.value);return{tooltip:{show:!0},legend:[{data:g.map(h=>h.name),textStyle:{color:"#aaa"},bottom:0}],series:[{type:"graph",layout:"force",data:r,links:u,categories:g,roam:!0,label:{show:!0,position:"right",color:"#ddd",fontSize:11},lineStyle:{color:"source",curveness:.1,opacity:.6},emphasis:{focus:"adjacency",lineStyle:{width:4}},force:{repulsion:180,edgeLength:[60,140],gravity:.05}}]}});async function J(){O.value=!0;try{await Promise.all([te(),ae(),ne()])}finally{O.value=!1}}async function te(){try{const{output:r}=await i.execute("kg list --limit 500 --json",15e3);M.value=fe(r)}catch(r){v.error(e("knowledgeGraph.msg.loadEntitiesFailed")+": "+r.message),M.value=[]}}async function ae(){try{const{output:r}=await i.execute("kg relations --limit 1000 --json",15e3);z.value=he(r)}catch(r){v.error(e("knowledgeGraph.msg.loadRelationsFailed")+": "+r.message),z.value=[]}}async function ne(){try{const{output:r}=await i.execute("kg stats --json",1e4);C.value=ke(r)}catch(r){v.error(e("knowledgeGraph.msg.loadStatsFailed")+": "+r.message)}}async function oe(){if(!(j.value.length>0)){R.value=!0;try{const{output:r}=await i.execute("kg entity-types --json",1e4);j.value=_e(r)}catch(r){v.error(e("knowledgeGraph.msg.loadEntityTypesFailed")+": "+r.message)}finally{R.value=!1}}}async function Ce(){if(!x.name.trim()||!x.type){v.warning(e("knowledgeGraph.msg.addEntityEmpty"));return}p.value=!0;try{let u=`kg add "${x.name.trim().replace(/"/g,'\\"')}" ${x.type} --json`;x.tags.trim()&&(u+=` --tags "${x.tags.trim().replace(/"/g,'\\"')}"`);const{output:g,exitCode:h}=await i.execute(u,15e3);h!==0||/error|失败/i.test(g)?v.error(e("knowledgeGraph.msg.addEntityFailed")+": "+g.slice(0,120)):(v.success(e("knowledgeGraph.msg.addEntitySuccess")),H.value=!1,x.name="",x.type="",x.tags="",await J())}catch(r){v.error(e("knowledgeGraph.msg.addEntityFailed")+": "+r.message)}finally{p.value=!1}}async function xe(){if(!_.sourceId||!_.targetId||!_.relationType.trim()){v.warning(e("knowledgeGraph.msg.addRelationEmpty"));return}if(_.sourceId===_.targetId){v.warning(e("knowledgeGraph.msg.addRelationSelfLoop"));return}D.value=!0;try{const r=_.relationType.trim().replace(/"/g,'\\"'),u=`kg add-relation ${_.sourceId} ${_.targetId} "${r}" --weight ${_.weight} --json`,{output:g,exitCode:h}=await i.execute(u,15e3);h!==0||/error|失败/i.test(g)?v.error(e("knowledgeGraph.msg.addRelationFailed")+": "+g.slice(0,120)):(v.success(e("knowledgeGraph.msg.addRelationSuccess")),K.value=!1,_.sourceId="",_.targetId="",_.relationType="",_.weight=1,await J())}catch(r){v.error(e("knowledgeGraph.msg.addRelationFailed")+": "+r.message)}finally{D.value=!1}}async function Te(r){T.value=r.id;try{const{output:u,exitCode:g}=await i.execute(`kg remove ${r.id}`,15e3);g!==0||/error|失败/i.test(u)?v.error(e("knowledgeGraph.msg.deleteFailed")+": "+u.slice(0,120)):(v.success(e("knowledgeGraph.msg.deleteSuccess")),await J())}catch(u){v.error(e("knowledgeGraph.msg.deleteFailed")+": "+u.message)}finally{T.value=""}}function Ee(r){I.value=r.id,L.value=r.name,F.value=[],V.value=!0}async function Oe(){S.value=!0;try{const r=`kg reason ${I.value} --max-depth ${G.maxDepth} --direction ${G.direction} --json`,{output:u}=await i.execute(r,15e3);F.value=ve(u),F.value.length===0&&v.info(e("knowledgeGraph.msg.reasonEmpty"))}catch(r){v.error(e("knowledgeGraph.msg.reasonFailed")+": "+r.message)}finally{S.value=!1}}re(()=>{J(),oe()});const le={ws:i,t:e,hasDesktopFeatures:b,loading:O,loadingTypes:R,addingEntity:p,addingRelation:D,removing:T,reasoning:S,activeTab:W,entities:M,relations:z,entityTypes:j,stats:C,showAddEntityModal:H,showAddRelationModal:K,showReasonModal:V,newEntity:x,newRelation:_,reasonOptions:G,reasonStartId:I,reasonStartName:L,reasonResults:F,entityColumns:q,relationColumns:Q,TYPE_COLORS:X,entityTypeColor:$,entityNameMap:n,entityNameOrId:w,entityFilter:P,entityTypeRows:we,relationTypeRows:Ge,graphOption:Re,loadAll:J,loadEntities:te,loadRelations:ae,loadStats:ne,loadEntityTypes:oe,addEntity:Ce,addRelation:xe,removeEntity:Te,openReason:Ee,runReason:Oe,ref:k,reactive:Y,computed:U,onMounted:re,get ReloadOutlined(){return Me},get PlusOutlined(){return Fe},get LinkOutlined(){return je},get DeploymentUnitOutlined(){return ze},get ShareAltOutlined(){return De},get BarChartOutlined(){return Ae},get message(){return v},get useI18n(){return se},get VChart(){return Ie},get use(){return de},get CanvasRenderer(){return ge},get GraphChart(){return ye},get TooltipComponent(){return ce},get LegendComponent(){return ue},get TitleComponent(){return pe},get useWsStore(){return ie},get parseEntities(){return fe},get parseRelations(){return he},get parseStats(){return ke},get parseReason(){return ve},get parseEntityTypes(){return _e},get buildGraphData(){return be}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},Ue={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Be={class:"page-title"},Pe={class:"page-sub"},Ne={key:0,style:{padding:"60px","text-align":"center"}},Ke={key:1,style:{height:"540px"}},Ve={key:0,style:{color:"#888","font-family":"monospace","font-size":"11px"}},qe={key:1,style:{color:"var(--text-primary)"}},Je={key:0,style:{color:"var(--text-muted)"}},Ze={key:0,style:{color:"#888","font-family":"monospace","font-size":"11px"}},We={key:1,style:{color:"var(--text-muted)"}},He={key:2,style:{color:"#888","font-family":"monospace","font-size":"11px"}},Qe={key:4,style:{color:"var(--text-secondary)","font-family":"monospace"}},Xe={key:0,style:{padding:"40px","text-align":"center",color:"var(--text-muted)"}},Ye={style:{display:"flex","justify-content":"space-between","margin-bottom":"4px"}},$e={style:{color:"var(--text-secondary)","font-family":"monospace"}},et={key:0,style:{padding:"40px","text-align":"center",color:"var(--text-muted)"}},tt={style:{display:"flex","justify-content":"space-between","margin-bottom":"4px"}},at={style:{color:"var(--text-secondary)","font-family":"monospace"}},nt={style:{color:"var(--text-muted)","font-size":"11px"}},ot={key:0,style:{padding:"30px","text-align":"center",color:"var(--text-muted)"}},lt={style:{"margin-left":"12px",color:"var(--text-primary)"}},rt={style:{"margin-left":"8px",color:"#888","font-family":"monospace","font-size":"11px"}};function it(t,l,i,e,b,O){const R=c("a-button"),p=c("a-space"),D=c("a-statistic"),T=c("a-card"),S=c("a-col"),W=c("a-row"),M=c("a-alert"),z=c("a-empty"),j=c("a-tab-pane"),C=c("a-tag"),H=c("a-popconfirm"),K=c("a-table"),V=c("a-progress"),x=c("a-tabs"),_=c("a-input"),G=c("a-form-item"),I=c("a-select-option"),L=c("a-select"),F=c("a-form"),q=c("a-modal"),Q=c("a-input-number"),X=c("a-list-item"),$=c("a-list");return d(),m("div",null,[E("div",Ue,[E("div",null,[E("h2",Be,s(t.$t("knowledgeGraph.title")),1),E("p",Pe,s(t.$t("knowledgeGraph.subtitle")),1)]),a(p,null,{default:o(()=>[a(R,{loading:e.loading,onClick:e.loadAll},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[y(" "+s(t.$t("knowledgeGraph.refresh")),1)]),_:1},8,["loading"]),a(R,{type:"primary",onClick:l[0]||(l[0]=n=>e.showAddEntityModal=!0)},{icon:o(()=>[a(e.PlusOutlined)]),default:o(()=>[y(" "+s(t.$t("knowledgeGraph.addEntity")),1)]),_:1}),a(R,{onClick:l[1]||(l[1]=n=>e.showAddRelationModal=!0),disabled:e.entities.length<2},{icon:o(()=>[a(e.LinkOutlined)]),default:o(()=>[y(" "+s(t.$t("knowledgeGraph.addRelation")),1)]),_:1},8,["disabled"])]),_:1})]),a(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(S,{xs:24,sm:12,lg:6},{default:o(()=>[a(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(D,{title:t.$t("knowledgeGraph.stats.entityCount"),value:e.stats.entityCount,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(e.DeploymentUnitOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(S,{xs:24,sm:12,lg:6},{default:o(()=>[a(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(D,{title:t.$t("knowledgeGraph.stats.relationCount"),value:e.stats.relationCount,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(e.LinkOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(S,{xs:24,sm:12,lg:6},{default:o(()=>[a(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(D,{title:t.$t("knowledgeGraph.stats.avgDegree"),value:e.stats.avgDegree,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1}),a(S,{xs:24,sm:12,lg:6},{default:o(()=>[a(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(D,{title:t.$t("knowledgeGraph.stats.density"),value:e.stats.density,precision:4,"value-style":{color:"#722ed1",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1})]),_:1}),e.hasDesktopFeatures?f("v-if",!0):(d(),A(M,{key:0,message:t.$t("knowledgeGraph.webOnly.message"),description:t.$t("knowledgeGraph.webOnly.description"),type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}},null,8,["message","description"])),a(x,{activeKey:e.activeTab,"onUpdate:activeKey":l[2]||(l[2]=n=>e.activeTab=n),type:"card"},{default:o(()=>[f(" Tab 1: graph viz "),a(j,{key:"graph"},{tab:o(()=>[a(e.ShareAltOutlined),y(" "+s(t.$t("knowledgeGraph.tabs.graph")),1)]),default:o(()=>[a(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[e.entities.length===0?(d(),m("div",Ne,[a(z,{description:t.$t("knowledgeGraph.table.emptyGraph")},null,8,["description"])])):(d(),m("div",Ke,[a(e.VChart,{option:e.graphOption,autoresize:""},null,8,["option"])]))]),_:1})]),_:1}),f(" Tab 2: entities "),a(j,{key:"entities"},{tab:o(()=>[a(e.DeploymentUnitOutlined),y(" "+s(t.$t("knowledgeGraph.tabs.entities",{n:e.entities.length})),1)]),default:o(()=>[a(K,{columns:e.entityColumns,"data-source":e.entities,pagination:{pageSize:20,showTotal:n=>t.$t("knowledgeGraph.table.totalSuffix",{n})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"kg-row"},{bodyCell:o(({column:n,record:w})=>[n.key==="id"?(d(),m("span",Ve,s(w.id.slice(0,12)),1)):f("v-if",!0),n.key==="name"?(d(),m("span",qe,s(w.name),1)):f("v-if",!0),n.key==="type"?(d(),A(C,{key:2,color:e.entityTypeColor(w.type)},{default:o(()=>[y(s(w.type),1)]),_:2},1032,["color"])):f("v-if",!0),n.key==="tags"?(d(),m(B,{key:3},[(d(!0),m(B,null,N(w.tags,P=>(d(),A(C,{key:P,color:"default"},{default:o(()=>[y(s(P),1)]),_:2},1024))),128)),w.tags.length===0?(d(),m("span",Je,"-")):f("v-if",!0)],64)):f("v-if",!0),n.key==="action"?(d(),A(p,{key:4,size:"small"},{default:o(()=>[a(R,{size:"small",type:"link",onClick:P=>e.openReason(w)},{default:o(()=>[y(s(t.$t("knowledgeGraph.actions.reason")),1)]),_:1},8,["onClick"]),a(H,{title:t.$t("knowledgeGraph.deleteConfirm.title"),"ok-text":t.$t("knowledgeGraph.deleteConfirm.ok"),"ok-type":"danger","cancel-text":t.$t("knowledgeGraph.deleteConfirm.cancel"),onConfirm:P=>e.removeEntity(w)},{default:o(()=>[a(R,{size:"small",type:"link",danger:"",loading:e.removing===w.id},{default:o(()=>[y(s(t.$t("knowledgeGraph.actions.delete")),1)]),_:1},8,["loading"])]),_:2},1032,["title","ok-text","cancel-text","onConfirm"])]),_:2},1024)):f("v-if",!0)]),emptyText:o(()=>[a(z,{description:t.$t("knowledgeGraph.table.emptyEntities")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"])]),_:1}),f(" Tab 3: relations "),a(j,{key:"relations"},{tab:o(()=>[a(e.LinkOutlined),y(" "+s(t.$t("knowledgeGraph.tabs.relations",{n:e.relations.length})),1)]),default:o(()=>[a(K,{columns:e.relationColumns,"data-source":e.relations,pagination:{pageSize:20,showTotal:n=>t.$t("knowledgeGraph.table.totalSuffix",{n})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"kg-row"},{bodyCell:o(({column:n,record:w})=>[n.key==="source"?(d(),m("span",Ze,s(e.entityNameOrId(w.sourceId)),1)):f("v-if",!0),n.key==="arrow"?(d(),m("span",We,"→")):f("v-if",!0),n.key==="target"?(d(),m("span",He,s(e.entityNameOrId(w.targetId)),1)):f("v-if",!0),n.key==="relationType"?(d(),A(C,{key:3,color:"cyan"},{default:o(()=>[y(s(w.relationType),1)]),_:2},1024)):f("v-if",!0),n.key==="weight"?(d(),m("span",Qe,s(w.weight.toFixed(2)),1)):f("v-if",!0)]),emptyText:o(()=>[a(z,{description:t.$t("knowledgeGraph.table.emptyRelations")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"])]),_:1}),f(" Tab 4: type breakdown "),a(j,{key:"distribution"},{tab:o(()=>[a(e.BarChartOutlined),y(" "+s(t.$t("knowledgeGraph.tabs.distribution")),1)]),default:o(()=>[a(W,{gutter:[24,24]},{default:o(()=>[a(S,{xs:24,md:12},{default:o(()=>[a(T,{title:t.$t("knowledgeGraph.distribution.entityTypes"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[e.entityTypeRows.length===0?(d(),m("div",Xe,s(t.$t("knowledgeGraph.table.emptyData")),1)):f("v-if",!0),(d(!0),m(B,null,N(e.entityTypeRows,n=>(d(),m("div",{key:n.type,style:{"margin-bottom":"8px"}},[E("div",Ye,[a(C,{color:e.entityTypeColor(n.type)},{default:o(()=>[y(s(n.type),1)]),_:2},1032,["color"]),E("span",$e,s(n.count),1)]),a(V,{percent:n.percent,"show-info":!1,"stroke-color":"#1677ff"},null,8,["percent"])]))),128))]),_:1},8,["title"])]),_:1}),a(S,{xs:24,md:12},{default:o(()=>[a(T,{title:t.$t("knowledgeGraph.distribution.relationTypes"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[e.relationTypeRows.length===0?(d(),m("div",et,s(t.$t("knowledgeGraph.table.emptyData")),1)):f("v-if",!0),(d(!0),m(B,null,N(e.relationTypeRows,n=>(d(),m("div",{key:n.type,style:{"margin-bottom":"8px"}},[E("div",tt,[a(C,{color:"cyan"},{default:o(()=>[y(s(n.type),1)]),_:2},1024),E("span",at,s(n.count),1)]),a(V,{percent:n.percent,"show-info":!1,"stroke-color":"#52c41a"},null,8,["percent"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),f(" Add Entity Modal "),a(q,{open:e.showAddEntityModal,"onUpdate:open":l[6]||(l[6]=n=>e.showAddEntityModal=n),title:t.$t("knowledgeGraph.addEntity_modal.title"),"confirm-loading":e.addingEntity,onOk:e.addEntity,"ok-text":t.$t("knowledgeGraph.addEntity_modal.ok"),"cancel-text":t.$t("knowledgeGraph.addEntity_modal.cancel")},{default:o(()=>[a(F,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(G,{label:t.$t("knowledgeGraph.addEntity_modal.nameLabel"),required:""},{default:o(()=>[a(_,{value:e.newEntity.name,"onUpdate:value":l[3]||(l[3]=n=>e.newEntity.name=n),placeholder:t.$t("knowledgeGraph.addEntity_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:t.$t("knowledgeGraph.addEntity_modal.typeLabel"),required:""},{default:o(()=>[a(L,{value:e.newEntity.type,"onUpdate:value":l[4]||(l[4]=n=>e.newEntity.type=n),placeholder:t.$t("knowledgeGraph.addEntity_modal.typePlaceholder"),loading:e.loadingTypes},{default:o(()=>[(d(!0),m(B,null,N(e.entityTypes,n=>(d(),A(I,{key:n.name,value:n.name},{default:o(()=>[y(s(n.name)+" ",1),E("span",nt,"— "+s(n.description),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder","loading"])]),_:1},8,["label"]),a(G,{label:t.$t("knowledgeGraph.addEntity_modal.tagsLabel")},{default:o(()=>[a(_,{value:e.newEntity.tags,"onUpdate:value":l[5]||(l[5]=n=>e.newEntity.tags=n),placeholder:t.$t("knowledgeGraph.addEntity_modal.tagsPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),f(" Add Relation Modal "),a(q,{open:e.showAddRelationModal,"onUpdate:open":l[11]||(l[11]=n=>e.showAddRelationModal=n),title:t.$t("knowledgeGraph.addRelation_modal.title"),"confirm-loading":e.addingRelation,onOk:e.addRelation,"ok-text":t.$t("knowledgeGraph.addRelation_modal.ok"),"cancel-text":t.$t("knowledgeGraph.addRelation_modal.cancel")},{default:o(()=>[a(F,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(G,{label:t.$t("knowledgeGraph.addRelation_modal.sourceLabel"),required:""},{default:o(()=>[a(L,{value:e.newRelation.sourceId,"onUpdate:value":l[7]||(l[7]=n=>e.newRelation.sourceId=n),placeholder:t.$t("knowledgeGraph.addRelation_modal.sourcePlaceholder"),"show-search":"","filter-option":e.entityFilter},{default:o(()=>[(d(!0),m(B,null,N(e.entities,n=>(d(),A(I,{key:n.id,value:n.id},{default:o(()=>[y(s(n.name)+" ("+s(n.type)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:t.$t("knowledgeGraph.addRelation_modal.targetLabel"),required:""},{default:o(()=>[a(L,{value:e.newRelation.targetId,"onUpdate:value":l[8]||(l[8]=n=>e.newRelation.targetId=n),placeholder:t.$t("knowledgeGraph.addRelation_modal.targetPlaceholder"),"show-search":"","filter-option":e.entityFilter},{default:o(()=>[(d(!0),m(B,null,N(e.entities,n=>(d(),A(I,{key:n.id,value:n.id,disabled:n.id===e.newRelation.sourceId},{default:o(()=>[y(s(n.name)+" ("+s(n.type)+") ",1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:t.$t("knowledgeGraph.addRelation_modal.relationTypeLabel"),required:""},{default:o(()=>[a(_,{value:e.newRelation.relationType,"onUpdate:value":l[9]||(l[9]=n=>e.newRelation.relationType=n),placeholder:t.$t("knowledgeGraph.addRelation_modal.relationTypePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:t.$t("knowledgeGraph.addRelation_modal.weightLabel")},{default:o(()=>[a(Q,{value:e.newRelation.weight,"onUpdate:value":l[10]||(l[10]=n=>e.newRelation.weight=n),min:.1,max:10,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),f(" Reason Modal (BFS) "),a(q,{open:e.showReasonModal,"onUpdate:open":l[14]||(l[14]=n=>e.showReasonModal=n),title:t.$t("knowledgeGraph.reason_modal.title",{name:e.reasonStartName}),width:640,footer:null},{default:o(()=>[a(F,{layout:"inline",style:{"margin-bottom":"16px"}},{default:o(()=>[a(G,{label:t.$t("knowledgeGraph.reason_modal.maxDepth")},{default:o(()=>[a(Q,{value:e.reasonOptions.maxDepth,"onUpdate:value":l[12]||(l[12]=n=>e.reasonOptions.maxDepth=n),min:1,max:10},null,8,["value"])]),_:1},8,["label"]),a(G,{label:t.$t("knowledgeGraph.reason_modal.direction")},{default:o(()=>[a(L,{value:e.reasonOptions.direction,"onUpdate:value":l[13]||(l[13]=n=>e.reasonOptions.direction=n),style:{width:"100px"}},{default:o(()=>[a(I,{value:"out"},{default:o(()=>[y(s(t.$t("knowledgeGraph.reason_modal.directionOut")),1)]),_:1}),a(I,{value:"in"},{default:o(()=>[y(s(t.$t("knowledgeGraph.reason_modal.directionIn")),1)]),_:1}),a(I,{value:"both"},{default:o(()=>[y(s(t.$t("knowledgeGraph.reason_modal.directionBoth")),1)]),_:1})]),_:1},8,["value"])]),_:1},8,["label"]),a(G,null,{default:o(()=>[a(R,{type:"primary",loading:e.reasoning,onClick:e.runReason},{default:o(()=>[y(s(t.$t("knowledgeGraph.reason_modal.run")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),e.reasonResults.length===0&&!e.reasoning?(d(),m("div",ot,s(t.$t("knowledgeGraph.reason_modal.hint")),1)):(d(),A($,{key:1,"data-source":e.reasonResults,size:"small"},{renderItem:o(({item:n})=>[a(X,null,{default:o(()=>[a(C,{color:"purple"},{default:o(()=>[y("depth="+s(n.depth),1)]),_:2},1024),a(C,{color:e.entityTypeColor(n.entity.type),style:{"margin-left":"8px"}},{default:o(()=>[y(s(n.entity.type),1)]),_:2},1032,["color"]),E("span",lt,s(n.entity.name),1),E("span",rt,s(n.entity.id.slice(0,12)),1)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["open","title"])])}const ct=Se(Le,[["render",it],["__scopeId","data-v-ce227b16"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/KnowledgeGraph.vue"]]);export{ct as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{I as s,J as g,U as d,c as n,K as _,V as k,S as W,R as S,F as K,Z as Q,w as M,n as C,o as R,b as T,r,P as p,Q as O,_ as U}from"./vendor-BvqAck49.js";import{_ as z,u as N}from"./index-1iacQgo5.js";import{R as E}from"./icons-DP3uiYxy.js";const j={__name:"Logs",setup(V,{expose:a}){a();const x=N(),e=r("status"),y=r(!1),v=r(""),i=r(""),c=r(""),f=r(!0),o=r(null),h={status:"status",doctor:"doctor","skill-sources":"skill sources","llm-providers":"llm providers"},m=T(()=>i.value.split(`
|
|
2
|
-
`)),b=T(()=>{if(!c.value)return m.value;const t=c.value.toLowerCase();return m.value.filter(u=>u.toLowerCase().includes(t))});function L(t){return t.includes("✖")||t.includes("error")||t.includes("Error")||t.includes("failed")?"line-error":t.includes("✔")||t.includes("✓")||t.includes("success")||t.includes("running")?"line-success":t.includes("warn")||t.includes("Warn")||t.includes("○")?"line-warn":t.startsWith(" ")||t.startsWith(" ")?"line-indent":""}function l(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function w(t){if(!c.value)return t;const u=c.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.replace(new RegExp(`(${u})`,"gi"),"<mark>$1</mark>")}async function B(){y.value=!0,v.value="",i.value="";const t=h[e.value]||"status";try{const{output:u}=await x.execute(t,3e4);i.value=u,f.value&&(await C(),o.value&&(o.value.scrollTop=o.value.scrollHeight))}catch(u){v.value=`执行失败: ${u.message}`,i.value=v.value}finally{y.value=!1}}M(b,async()=>{f.value&&(await C(),o.value&&(o.value.scrollTop=o.value.scrollHeight))}),R(B);const H={ws:x,activeTab:e,loading:y,error:v,rawOutput:i,searchQuery:c,autoScroll:f,logContainer:o,TAB_COMMANDS:h,allLines:m,filteredLines:b,lineClass:L,escapeHtml:l,highlightSearch:w,loadLog:B,ref:r,computed:T,watch:M,nextTick:C,onMounted:R,get ReloadOutlined(){return E},get useWsStore(){return N}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}},q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},A={style:{display:"flex",gap:"10px",margin:"12px 0"}},D={ref:"logContainer",class:"log-box"},F={key:0,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},I={key:1,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},P={key:2},Z=["innerHTML"];function J(V,a,x,e,y,v){const i=s("a-checkbox"),c=s("a-button"),f=s("a-space"),o=s("a-tab-pane"),h=s("a-tabs"),m=s("a-input-search"),b=s("a-tag"),L=s("a-spin");return p(),g("div",null,[d("div",q,[a[5]||(a[5]=d("div",null,[d("h2",{class:"page-title"},"日志查看"),d("p",{class:"page-sub"},"系统运行日志与诊断输出")],-1)),n(f,null,{default:_(()=>[n(i,{checked:e.autoScroll,"onUpdate:checked":a[0]||(a[0]=l=>e.autoScroll=l)},{default:_(()=>[...a[3]||(a[3]=[O("自动滚动",-1)])]),_:1},8,["checked"]),n(c,{type:"primary",ghost:"",loading:e.loading,onClick:e.loadLog},{icon:_(()=>[n(e.ReloadOutlined)]),default:_(()=>[a[4]||(a[4]=O(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),k(" Tab Selector "),n(h,{activeKey:e.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>e.activeTab=l),onChange:e.loadLog,style:{"margin-bottom":"0"}},{default:_(()=>[n(o,{key:"status",tab:"系统状态"}),n(o,{key:"doctor",tab:"环境诊断"}),n(o,{key:"skill-sources",tab:"技能来源"}),n(o,{key:"llm-providers",tab:"LLM 提供商"})]),_:1},8,["activeKey"]),k(" Search Bar "),d("div",A,[n(m,{value:e.searchQuery,"onUpdate:value":a[2]||(a[2]=l=>e.searchQuery=l),placeholder:"搜索日志内容...","allow-clear":"",style:{flex:"1"}},null,8,["value"]),e.filteredLines.length!==e.allLines.length?(p(),W(b,{key:0,color:"blue"},{default:_(()=>[O(S(e.filteredLines.length)+" / "+S(e.allLines.length)+" 行 ",1)]),_:1})):k("v-if",!0)]),k(" Log Output "),d("div",D,[e.loading?(p(),g("div",F,[n(L,{size:"large"}),a[6]||(a[6]=d("div",{style:{"margin-top":"10px"}},"加载中...",-1))])):e.filteredLines.length?(p(),g("div",P,[(p(!0),g(K,null,Q(e.filteredLines,(l,w)=>(p(),g("div",{key:w,class:U(["log-line",e.lineClass(l)]),innerHTML:e.highlightSearch(e.escapeHtml(l))},null,10,Z))),128))])):(p(),g("div",I,S(e.error||"暂无日志内容,点击刷新加载"),1))],512)])}const $=z(j,[["render",J],["__scopeId","data-v-8c2906e0"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/Logs.vue"]]);export{$ as default};
|