chainlesschain 0.162.39 → 0.162.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +368 -1
  2. package/package.json +2 -2
  3. package/src/assets/web-panel/assets/{AIOps-DCjoAX_u.js → AIOps-CPmKv82o.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-XHoOmsbP.js → ActionButton-BNDYY7Qd.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics--xaFkDnL.js → Analytics-BgCMCOsk.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-CSa3FBn8.js → AppLayout-Dv4oJcqS.js} +5 -5
  7. package/src/assets/web-panel/assets/{Audit-ONWXiAwG.js → Audit-5iV3yrGa.js} +1 -1
  8. package/src/assets/web-panel/assets/{Backup-CKOPNdgy.js → Backup-CHDhnbzF.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-PNj4uVqg.js → BaseInput-B6reFkra.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-CZCulyXV.js → Chat-DwS5YyE2.js} +6 -6
  11. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CjuJpfpV.js → ChatBubbleRenderer-CqXa87Hw.js} +1 -1
  12. package/src/assets/web-panel/assets/{Checkbox-jvy668lD.js → Checkbox-yiW0M4RE.js} +1 -1
  13. package/src/assets/web-panel/assets/{Codegen-DhUebOQD.js → Codegen-DoiVuD_g.js} +1 -1
  14. package/src/assets/web-panel/assets/{Col-BiBvHfdT.js → Col-BVASLexk.js} +1 -1
  15. package/src/assets/web-panel/assets/{Community-CmEdEti-.js → Community-D6KQ7JoU.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compact-CtxpF4R5.js → Compact-Bl9Uhb6v.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compliance-CvPTrTAJ.js → Compliance-MM31-dba.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cowork-BMafGHjy.js → Cowork-PjU_1ieD.js} +2 -2
  19. package/src/assets/web-panel/assets/{Cron-mdg_4TR1.js → Cron-DorNtPZL.js} +2 -2
  20. package/src/assets/web-panel/assets/{Crosschain--dGxsUvn.js → Crosschain-Bm5ts2Kw.js} +1 -1
  21. package/src/assets/web-panel/assets/{DID-C9oKaCml.js → DID-7Y3jlFdY.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dashboard-CoGxKMvy.js → Dashboard-1oE532bG.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dropdown-CDDu3ZZ3.js → Dropdown-hJlOPs0s.js} +1 -1
  24. package/src/assets/web-panel/assets/{EmailListRenderer-Dy7_r9Ag.js → EmailListRenderer-BEqJxKaO.js} +1 -1
  25. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CNg6vImJ.js → FamilyGuardDashboard-BvCGwB6X.js} +1 -1
  26. package/src/assets/web-panel/assets/{Federation-CT61bf3u.js → Federation-CsXI72e5.js} +1 -1
  27. package/src/assets/web-panel/assets/{FormItemContext-CSLRnXhg.js → FormItemContext-Dh9SMul-.js} +1 -1
  28. package/src/assets/web-panel/assets/{GenericCardRenderer-CZ4NE5N3.js → GenericCardRenderer-9edWzrtG.js} +1 -1
  29. package/src/assets/web-panel/assets/{Git-DBuOma3L.js → Git-ZYhNL8Xk.js} +2 -2
  30. package/src/assets/web-panel/assets/{Governance-BTU_SEef.js → Governance-BwAdp8QA.js} +1 -1
  31. package/src/assets/web-panel/assets/{Inference-47SAmLC_.js → Inference-5C-M1XsH.js} +1 -1
  32. package/src/assets/web-panel/assets/{KnowledgeGraph-DCrK5vP4.js → KnowledgeGraph-zFAi-zCi.js} +1 -1
  33. package/src/assets/web-panel/assets/{Logs-BqiDxdav.js → Logs-BZsEdbgE.js} +2 -2
  34. package/src/assets/web-panel/assets/{Marketplace-CReUjsDt.js → Marketplace-BP6gErRK.js} +1 -1
  35. package/src/assets/web-panel/assets/{McpTools-agZBV3p8.js → McpTools-CXVzoLrd.js} +6 -6
  36. package/src/assets/web-panel/assets/{Memory-C_YvUtyS.js → Memory-BIpChb4-.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileBridge-41fP1Tui.js → MobileBridge-B4O7wDT8.js} +3 -3
  38. package/src/assets/web-panel/assets/MobileProjects-7VPMoHus.js +1 -0
  39. package/src/assets/web-panel/assets/{Mtc-JFJCXUnk.js → Mtc-BTmEyTM5.js} +6 -6
  40. package/src/assets/web-panel/assets/{MtcAudit-BHNpPZC9.js → MtcAudit-CsbG9LlV.js} +6 -6
  41. package/src/assets/web-panel/assets/{Multisig-DuCRumiz.js → Multisig-CL8yoGon.js} +3 -3
  42. package/src/assets/web-panel/assets/{NLProgramming-DK-g0fKY.js → NLProgramming-C2cIlIp_.js} +1 -1
  43. package/src/assets/web-panel/assets/{Notes-BSMcjsPf.js → Notes-7aBk_n_M.js} +3 -3
  44. package/src/assets/web-panel/assets/{NotificationSettings-9ouC118H.js → NotificationSettings-BuhQk4rJ.js} +1 -1
  45. package/src/assets/web-panel/assets/{OrderTableRenderer-LG2nUO5y.js → OrderTableRenderer-mqMFZu0x.js} +1 -1
  46. package/src/assets/web-panel/assets/{Organization-DSV7oRnR.js → Organization-CAdq-170.js} +4 -4
  47. package/src/assets/web-panel/assets/{Overflow-DVkkORc3.js → Overflow--Xn0E787.js} +1 -1
  48. package/src/assets/web-panel/assets/{P2P-BXXjkkQD.js → P2P-DYt3YAXI.js} +2 -2
  49. package/src/assets/web-panel/assets/{PdhVaultBrowser-O5hNnLTP.js → PdhVaultBrowser-Bgb_v8WN.js} +3 -3
  50. package/src/assets/web-panel/assets/{Permissions-D_s0H5Av.js → Permissions-DoFlmoaW.js} +4 -4
  51. package/src/assets/web-panel/assets/{PersonalDataHub-CzMDrwUi.js → PersonalDataHub-C-FJB3a0.js} +3 -3
  52. package/src/assets/web-panel/assets/{Pipeline-i9krLVTL.js → Pipeline-3bL2RzzL.js} +1 -1
  53. package/src/assets/web-panel/assets/{Privacy-cMQcj9I8.js → Privacy-c4igYUCF.js} +1 -1
  54. package/src/assets/web-panel/assets/{ProjectInit-Ca_l7avo.js → ProjectInit-C0QS1UPR.js} +2 -2
  55. package/src/assets/web-panel/assets/{ProjectSettings-BkaIhd6b.js → ProjectSettings-CkYC0xkE.js} +2 -2
  56. package/src/assets/web-panel/assets/{Projects-Dy9yNmDg.js → Projects-Di17SYft.js} +1 -1
  57. package/src/assets/web-panel/assets/{Providers-D0nzYiqz.js → Providers-41NySsLt.js} +1 -1
  58. package/src/assets/web-panel/assets/{QuickAsk-Bzzr9d0f.js → QuickAsk-DHq9pD7z.js} +1 -1
  59. package/src/assets/web-panel/assets/{Recommend-C-UFbQnX.js → Recommend-CLjgFPLv.js} +1 -1
  60. package/src/assets/web-panel/assets/{Reputation-BKMIKO5F.js → Reputation-EIrgErm3.js} +1 -1
  61. package/src/assets/web-panel/assets/{Row-Bs7htK1T.js → Row-GAvKzKH7.js} +1 -1
  62. package/src/assets/web-panel/assets/{RssFeed-v6MdULUh.js → RssFeed-CYCNsVmD.js} +2 -2
  63. package/src/assets/web-panel/assets/{Search-DlRWYzvz.js → Search-DWOE32k8.js} +1 -1
  64. package/src/assets/web-panel/assets/{Security-DXWO37xX.js → Security-Dgh8Jevn.js} +4 -4
  65. package/src/assets/web-panel/assets/{Services-C2tWA-O0.js → Services-BxdgP67N.js} +2 -2
  66. package/src/assets/web-panel/assets/{Skeleton-Q8pIYY4a.js → Skeleton-D-xT4ZkA.js} +1 -1
  67. package/src/assets/web-panel/assets/{Skills-D7XBlErj.js → Skills-BKN4lfSa.js} +1 -1
  68. package/src/assets/web-panel/assets/{Sla-CiyMVPJ1.js → Sla--N1TudpS.js} +1 -1
  69. package/src/assets/web-panel/assets/{SpeechSettings-CadCeeiR.js → SpeechSettings-B0vfJpEh.js} +1 -1
  70. package/src/assets/web-panel/assets/{SyncSettings-DzNAUhQq.js → SyncSettings-BuBAbPAh.js} +2 -2
  71. package/src/assets/web-panel/assets/{Tasks-BjdHjZeb.js → Tasks-4XugjJ87.js} +1 -1
  72. package/src/assets/web-panel/assets/{Templates-DfgEpUa4.js → Templates-DI2giLgc.js} +1 -1
  73. package/src/assets/web-panel/assets/{Tenant-C8ajkuYi.js → Tenant-BiTWvm0g.js} +1 -1
  74. package/src/assets/web-panel/assets/{Terminal-B9rHwQQx.js → Terminal-vV6AWGDi.js} +2 -2
  75. package/src/assets/web-panel/assets/{TimelineRenderer-D1ZVNezX.js → TimelineRenderer-BmgzKdAp.js} +1 -1
  76. package/src/assets/web-panel/assets/{Tokens-CAkED4mx.js → Tokens-Nvupdm6p.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trigger-CJSrm6X0.js → Trigger-DRfR77WJ.js} +1 -1
  78. package/src/assets/web-panel/assets/{Trust-B-TeorSk.js → Trust-De0Jal_6.js} +1 -1
  79. package/src/assets/web-panel/assets/{UkeySign-Di7Ymofy.js → UkeySign-Dzo4-VAM.js} +1 -1
  80. package/src/assets/web-panel/assets/{VideoEditing-DM1eYNZe.js → VideoEditing-hg2ytiJB.js} +1 -1
  81. package/src/assets/web-panel/assets/{Wallet-DvRWkbmR.js → Wallet--bU5-gRh.js} +4 -4
  82. package/src/assets/web-panel/assets/{WebAuthn-CeZ3Y622.js → WebAuthn-DZptt-PV.js} +4 -4
  83. package/src/assets/web-panel/assets/{WorkflowEditor-Cq8c4h5j.js → WorkflowEditor-Dy9223bY.js} +1 -1
  84. package/src/assets/web-panel/assets/{chat-7-WfML6Q.js → chat-DaxGeI9w.js} +1 -1
  85. package/src/assets/web-panel/assets/{colors-D6FgCmB-.js → colors-Cu2VEci3.js} +1 -1
  86. package/src/assets/web-panel/assets/{compact-item-ClYV25qi.js → compact-item-CGolhyJq.js} +1 -1
  87. package/src/assets/web-panel/assets/{createContext-CDhtjdkV.js → createContext-DY7EFhkD.js} +1 -1
  88. package/src/assets/web-panel/assets/devWarning-DV2BNd59.js +1 -0
  89. package/src/assets/web-panel/assets/{hasIn-DZSH5LQd.js → hasIn-Bpc-NoFN.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-CKgS8E_X.js → index-1D4sfByw.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-Or_McYjX.js → index-8h9y5S6X.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-BlBF_l8m.js → index-BP9P6chP.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-CSjoWPxB.js → index-BQ2z6Ky5.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DjG82V0v.js → index-BRAgl2J_.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-B_mMFQ4S.js → index-BTvwiqJE.js} +1 -1
  96. package/src/assets/web-panel/assets/index-BZqtTmyG.js +1 -0
  97. package/src/assets/web-panel/assets/{index-D0YzTJJO.js → index-BjfxHEmX.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DgaF1F0W.js → index-BlHq81Ow.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-Bj8hZiyL.js → index-Bn5gM9Oy.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DPEYvNvq.js → index-Bz83ngs0.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DL6GFJAd.js → index-C-Hkl_2G.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BJ7mrOaB.js → index-C0_zeYnx.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CrTmxbL8.js → index-C2RpsAiO.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CDX4QU3k.js → index-CBSk_VrT.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DZ4zuoCP.js → index-CFAnEzRW.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-B6VWGnwq.js → index-CGqeHu_F.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-C7pQa2is.js → index-CJFYF8F9.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CWOkL-8O.js → index-CLNqZF55.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-tU6pZ1TP.js → index-CaKXhpEu.js} +1 -1
  110. package/src/assets/web-panel/assets/{index---azBCXl.js → index-Ciw5-X1B.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DLizxxId.js → index-D0GN5tdM.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BHeK8I5A.js → index-D63ObMdQ.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-z-R0KaJS.js → index-DAov-rJR.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BUOPjAUM.js → index-DElatOQ0.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-Di9pFrHV.js → index-DNX81oSR.js} +1 -1
  116. package/src/assets/web-panel/assets/index-DUpwdJt9.js +1 -0
  117. package/src/assets/web-panel/assets/{index-B13QnrnE.js → index-DZ4Vm8dQ.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-C7sC56w8.js → index-DexYD87j.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CxwfFZ1u.js → index-DfKmAEtE.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-B78X5S22.js → index-DldaToUA.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BpzOUiSb.js → index-DpRSzAFl.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B4PMzmOx.js → index-DxXkr-NS.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BqOIoEo6.js → index-RumxOD0S.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DGJK8D0l.js → index-VBRPxZeE.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DWRoh3_3.js → index-eF9RV_4c.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DGj1orXm.js → index-lfP8sdzB.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CmU631Je.js → index-oJQgRCrR.js} +3 -3
  128. package/src/assets/web-panel/assets/{index-rCs9VJJp.js → index-rkm7dHwG.js} +1 -1
  129. package/src/assets/web-panel/assets/{initDefaultProps-CSdsIGy3.js → initDefaultProps-CkJZfCo8.js} +1 -1
  130. package/src/assets/web-panel/assets/{motion-Do-AcZV4.js → motion-BerbusV1.js} +1 -1
  131. package/src/assets/web-panel/assets/{move-BmgOoMsi.js → move-DyRzKPD4.js} +1 -1
  132. package/src/assets/web-panel/assets/{omit-D4Tm7-s9.js → omit-CCdrTUAs.js} +1 -1
  133. package/src/assets/web-panel/assets/{pickAttrs-CuWA8-lj.js → pickAttrs-mVDeZx2m.js} +1 -1
  134. package/src/assets/web-panel/assets/{placementArrow-BSbEF5op.js → placementArrow-Bb_-Fs_o.js} +1 -1
  135. package/src/assets/web-panel/assets/{responsiveObserve-GIMJwB_9.js → responsiveObserve-C6TMj1R_.js} +1 -1
  136. package/src/assets/web-panel/assets/{slide-DlZxpIBe.js → slide-CdCNsy1J.js} +1 -1
  137. package/src/assets/web-panel/assets/{statusUtils-BZ26LPlh.js → statusUtils-Ccxd1rFd.js} +1 -1
  138. package/src/assets/web-panel/assets/{styleChecker-Yn_3FZ0l.js → styleChecker-3IL-yw1V.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFlexGapSupport-O_LOE1AB.js → useFlexGapSupport-CH8DjUHl.js} +1 -1
  140. package/src/assets/web-panel/assets/{useFs-VFMyQqtl.js → useFs-Cn9nE2sp.js} +1 -1
  141. package/src/assets/web-panel/assets/{usePersonalDataHub-B_hyrGB-.js → usePersonalDataHub-BPyT0HO7.js} +1 -1
  142. package/src/assets/web-panel/assets/{vnode-D4LttGy7.js → vnode-Mfm7vy07.js} +1 -1
  143. package/src/assets/web-panel/assets/{zoom-KnTK1fjj.js → zoom-CTpAiAE9.js} +1 -1
  144. package/src/assets/web-panel/index.html +1 -1
  145. package/src/commands/init.js +84 -2
  146. package/src/commands/session.js +36 -12
  147. package/src/index.js +10 -0
  148. package/src/lib/agent-session-export.js +124 -0
  149. package/src/lib/ide-context.js +62 -0
  150. package/src/lib/project-instructions.js +275 -0
  151. package/src/lib/project-inventory.js +355 -0
  152. package/src/lib/repl-bang-memorize.js +142 -0
  153. package/src/lib/repl-completer.js +17 -2
  154. package/src/lib/update-notice-refresh.mjs +10 -0
  155. package/src/lib/update-notice.js +154 -0
  156. package/src/repl/agent-repl.js +118 -0
  157. package/src/runtime/agent-core.js +162 -0
  158. package/src/runtime/system-prompt.js +21 -1
  159. package/src/assets/web-panel/assets/MobileProjects-BkqLvGfL.js +0 -1
  160. package/src/assets/web-panel/assets/devWarning-O0FVFeZg.js +0 -1
  161. package/src/assets/web-panel/assets/index--ANIKvhL.js +0 -1
  162. package/src/assets/web-panel/assets/index-DUfp4rnQ.js +0 -1
package/README.md CHANGED
@@ -30,7 +30,7 @@ clchain start # equivalent to: chainlesschain start
30
30
 
31
31
  ## Commands
32
32
 
33
- > **144 top-level commands** are registered (as of CLI v0.162.x). The sections below document the most-used ones with full options. For the complete, always-current list, run `chainlesschain --help` (or `cc --help`) — that output is the canonical source of truth.
33
+ > **155 top-level commands** are registered (as of CLI v0.162.38). The sections below document the most-used ones with full options. For the complete, always-current list, run `chainlesschain --help` (or `cc --help`) — that output is the canonical source of truth.
34
34
 
35
35
  ### `chainlesschain setup`
36
36
 
@@ -1353,6 +1353,373 @@ The numbers below are an approximate, pre-iter16 snapshot of the unit/integratio
1353
1353
  | V2 Governance (iter16–28) | 136 | ~5,984 | All passing |
1354
1354
  | **CLI Total (approx.)** | **280+** | **~9,000** | **All passing** |
1355
1355
 
1356
+ ## Agent Power & Claude-Code Parity
1357
+
1358
+ Headless-agent companions: session economics, file checkpoints, permission rules, prompt macros, IDE bridging. All work without the desktop GUI.
1359
+
1360
+ ### `chainlesschain checkpoint <action>`
1361
+
1362
+ Snapshot / rewind file state. Uses a git-plumbing engine (shadow commits, zero impact on your real index/worktree) inside git repos, with a copy-based fallback elsewhere. Also auto-snapshots before file-modifying tools when running `cc agent --checkpoint`.
1363
+
1364
+ ```bash
1365
+ chainlesschain checkpoint create src/ --label "before refactor" # Snapshot paths
1366
+ chainlesschain checkpoint list # List checkpoints (newest first)
1367
+ chainlesschain checkpoint show <id> --diff # Diff snapshot vs current files
1368
+ chainlesschain checkpoint restore <id> # Rewind (alias: rewind; --dry-run, --force)
1369
+ chainlesschain checkpoint delete <id> # Delete one checkpoint
1370
+ chainlesschain checkpoint clear # Delete all (per --session)
1371
+ ```
1372
+
1373
+ Common options: `-d, --dir <dir>` target directory, `-s, --session <id>` checkpoint session (git engine), `--json`.
1374
+
1375
+ ### `chainlesschain compact <session-id>`
1376
+
1377
+ Compact a stored session's history offline (no LLM call) — deduplicates and compresses old messages, persisting a `compact` event so `cc agent --resume` rebuilds from the smaller context. The agent loop also auto-compacts oversized histories by default (`autoCompact: false` opts out).
1378
+
1379
+ ```bash
1380
+ chainlesschain compact <session-id> # Compress and persist
1381
+ chainlesschain compact <session-id> --dry-run # Preview the reduction without writing
1382
+ chainlesschain compact <session-id> --max-tokens 4000 --max-messages 30
1383
+ chainlesschain compact <session-id> --json
1384
+ ```
1385
+
1386
+ ### `chainlesschain cost [id]`
1387
+
1388
+ Estimated $ cost from recorded token usage — per-session, or a global rollup when the ID is omitted. Prices are configurable via `llm.pricing` in `~/.chainlesschain/config.json`.
1389
+
1390
+ ```bash
1391
+ chainlesschain cost # Global rollup across sessions
1392
+ chainlesschain cost <session-id> # One session
1393
+ chainlesschain cost --limit 200 --json # Cap rollup size, JSON output
1394
+ ```
1395
+
1396
+ ### `chainlesschain context [id]`
1397
+
1398
+ Context-window token breakdown for a session (Claude-Code `/context` parity). Defaults to the most-recent headless session.
1399
+
1400
+ ```bash
1401
+ chainlesschain context # Most recent session
1402
+ chainlesschain context <session-id> --model gpt-4o --provider openai
1403
+ chainlesschain context --json
1404
+ ```
1405
+
1406
+ ### `chainlesschain loop [parts...]`
1407
+
1408
+ Repeatedly run an agent prompt or a `-- <command>` on a fixed interval — a self-driving retry/watch loop.
1409
+
1410
+ ```bash
1411
+ chainlesschain loop "fix failing tests" --every 5m --until-exit-zero
1412
+ chainlesschain loop --every 30s -- npm run test:unit # Command mode
1413
+ chainlesschain loop "check deploy" -n 10 --until "DONE" # Stop on regex match
1414
+ chainlesschain loop "triage" --dynamic # Self-paced via [[loop:next]] / [[loop:stop]]
1415
+ chainlesschain loop "nightly sweep" --save nightly # Persist; later: --resume nightly
1416
+ ```
1417
+
1418
+ Options: `--every <dur>` (30s / 5m / 1.5h), `-n, --max-iterations <n>`, `--until-exit-zero`, `--until <regex>`, `--dynamic`, `--save [id]`, `--resume <id>`, `--json`. Unknown flags pass through to the wrapped agent/command.
1419
+
1420
+ ### `chainlesschain goal <action>`
1421
+
1422
+ Cross-session persistent goals / OKRs. Bind a goal into headless runs with `cc agent -p --goal <id>` (add `--goal-assess` for a run-end LLM progress assessment).
1423
+
1424
+ ```bash
1425
+ chainlesschain goal set "Ship the v2 importer" --title importer # Create (alias: add)
1426
+ chainlesschain goal list --status active # List goals
1427
+ chainlesschain goal show <id> # Full detail
1428
+ chainlesschain goal kr add <id> "100 tests green" --target 100 # Add key result
1429
+ chainlesschain goal kr set <id> <krId> --current 80 # Update key result
1430
+ chainlesschain goal progress <id> --pct 60 --note "parser done" # Record progress
1431
+ chainlesschain goal link <id> [sessionId] # Attach a session
1432
+ chainlesschain goal pause|resume|close|abandon <id> # Lifecycle
1433
+ chainlesschain goal rm <id> # Delete (alias: delete)
1434
+ ```
1435
+
1436
+ ### `chainlesschain permissions <action>` (alias: `perms`)
1437
+
1438
+ Inspect / dry-run / edit `.claude/settings.json` permission rules (`allow` / `ask` / `deny`, `Tool(glob)` syntax, deny > ask > allow). Used by `cc agent --settings`.
1439
+
1440
+ ```bash
1441
+ chainlesschain permissions list # Merged rules + their source files
1442
+ chainlesschain permissions test Bash "git push origin" # Dry-run: which rule matches?
1443
+ chainlesschain permissions add deny "Read(./.env*)" # Append a rule
1444
+ chainlesschain permissions add allow "Bash(npm test:*)" --local # .claude/settings.local.json
1445
+ chainlesschain permissions add ask "WebFetch(domain:*)" --user # ~/.claude/settings.json
1446
+ ```
1447
+
1448
+ Options: `--json`, `--settings <file>` to merge an explicit settings file.
1449
+
1450
+ ### `chainlesschain output-style <action>`
1451
+
1452
+ List / show agent output-style personas (`.claude/output-styles/*.md` + built-ins) layered onto the system prompt. Select with `cc agent --output-style <name>` or `outputStyle` in settings.json.
1453
+
1454
+ ```bash
1455
+ chainlesschain output-style list # Default action (alias: ls)
1456
+ chainlesschain output-style show explanatory # Metadata + body
1457
+ chainlesschain output-style new my-style --description "Terse reviewer"
1458
+ chainlesschain output-style new my-style --personal # ~/.claude/output-styles
1459
+ ```
1460
+
1461
+ ### `chainlesschain statusline <action>`
1462
+
1463
+ Preview / show the `.claude/settings.json` `statusLine` command (REPL renders it before each prompt; a built-in context-usage line is shown when no custom command is configured).
1464
+
1465
+ ```bash
1466
+ chainlesschain statusline preview # Render once (default action)
1467
+ chainlesschain statusline preview --model opus
1468
+ chainlesschain statusline show # Resolved statusLine config
1469
+ ```
1470
+
1471
+ ### `chainlesschain command <action>` (alias: `cmd`)
1472
+
1473
+ User-defined slash-command macros (`.claude/commands/*.md` and `.chainlesschain/commands/`) — reusable prompt templates with `$ARGUMENTS`/`$1-9`, `` !`bash` `` and `@file` expansion.
1474
+
1475
+ ```bash
1476
+ chainlesschain command list # Discovered macros (alias: ls)
1477
+ chainlesschain command show <name> # Metadata + template body
1478
+ chainlesschain command run <name> [args...] # Expand + run headlessly
1479
+ chainlesschain command run <name> --print-prompt # Show expanded prompt only
1480
+ chainlesschain command new <name> --description "Review a PR"
1481
+ chainlesschain command new <name> --claude # Claude-Code-portable location
1482
+ ```
1483
+
1484
+ `run` options: `--no-bang`, `--output-format text|json|stream-json`, `--model`, `--permission-mode`.
1485
+
1486
+ ### `chainlesschain ide <action>`
1487
+
1488
+ Inspect IDE bridge discovery — how `cc agent` auto-connects to an editor MCP server (VS Code / JetBrains extensions) via `CHAINLESSCHAIN_IDE_PORT` or `~/.chainlesschain/ide/*.json` lockfiles. Force / disable with `cc agent --ide` / `--no-ide`.
1489
+
1490
+ ```bash
1491
+ chainlesschain ide list # Live IDE lockfiles (advertised editor MCP servers)
1492
+ chainlesschain ide status # Server `cc agent` would connect to right now
1493
+ chainlesschain ide doctor # Explain why discovery did / didn't pick a server
1494
+ ```
1495
+
1496
+ All subcommands accept `--json` (tokens redacted); `status`/`doctor` accept `--ide` to force selection outside an IDE terminal.
1497
+
1498
+ ### `chainlesschain decrypt <action>`
1499
+
1500
+ Decrypt files encrypted by `chainlesschain encrypt` (AES-256-GCM), and disable database encryption tracking.
1501
+
1502
+ ```bash
1503
+ chainlesschain decrypt file secret.txt.enc -o secret.txt # -p/--password to skip prompt
1504
+ chainlesschain decrypt db --force # Disable DB encryption tracking
1505
+ ```
1506
+
1507
+ ### `chainlesschain stream <prompt>`
1508
+
1509
+ Stream a single prompt through the session-core StreamRouter, emitting NDJSON events on stdout — useful for piping LLM output into other tools.
1510
+
1511
+ ```bash
1512
+ chainlesschain stream "Summarize this repo" # NDJSON events
1513
+ chainlesschain stream "Hello" --text # Concatenated final text only
1514
+ chainlesschain stream "Hi" --provider openai --model gpt-4o --api-key sk-...
1515
+ ```
1516
+
1517
+ Options: `--model`, `--provider` (default `ollama`), `--base-url`, `--api-key`, `--text`.
1518
+
1519
+ ---
1520
+
1521
+ ## Device & Data
1522
+
1523
+ Personal Data Hub, mobile pairing, and on-device bridges.
1524
+
1525
+ ### `chainlesschain hub <action>`
1526
+
1527
+ Personal Data Hub — local vault + adapters + AnalysisEngine on this machine. Ingest your own platform data, then query it in natural language.
1528
+
1529
+ ```bash
1530
+ chainlesschain hub ask "How much did I spend on travel?" # NL question over the vault
1531
+ chainlesschain hub retrieve-context "topic" # RAG context retrieval
1532
+ chainlesschain hub stats # Row counts + adapters + paths
1533
+ chainlesschain hub health # vault / llm / kgSink / ragSink
1534
+ chainlesschain hub readiness # Adapter readiness report
1535
+ chainlesschain hub sync-adapter <name> # Run one adapter's ingest
1536
+ chainlesschain hub sync-all # Run all adapters in series
1537
+ chainlesschain hub bilibili-adb-sync # Per-platform PC-ADB collectors
1538
+ chainlesschain hub search "keyword" # FTS5 vault search + facets
1539
+ chainlesschain hub query-events # Filtered event query
1540
+ chainlesschain hub export # Export vault data
1541
+ chainlesschain hub aichat list # AIChat vendor sub-group (login/probe/register/health)
1542
+ ```
1543
+
1544
+ Other ADB collectors: `weibo-adb-sync`, `kuaishou-adb-sync`, `toutiao-adb-sync`, `xhs-adb-sync`, `douyin-adb-sync`. Also: `list-adapters`, `facet-counts`, `recent-audit`, `event-detail <id>`, `rederive`, `run-skill <name>`, `register-mock`, `destroy`.
1545
+
1546
+ ### `chainlesschain pair <action>`
1547
+
1548
+ LAN pairing utilities — preflight diagnostics plus 6-digit pairing-token issuance for mobile devices.
1549
+
1550
+ ```bash
1551
+ chainlesschain pair preflight # Network / port diagnostics
1552
+ chainlesschain pair token generate --name "My iPhone" # Issue token (+ QR data with --json)
1553
+ chainlesschain pair token list --did <did> # List tokens
1554
+ chainlesschain pair token show <code> # Inspect one token
1555
+ chainlesschain pair token revoke <code> # Revoke a pending token
1556
+ ```
1557
+
1558
+ ### `chainlesschain notification send` (alias: `notif`)
1559
+
1560
+ Push notifications to paired mobile devices (iPhone/Android).
1561
+
1562
+ ```bash
1563
+ chainlesschain notification send --target <device-did> --title "Build done"
1564
+ chainlesschain notification send --target <did> --title "Quiet test" --body "..." --silenced
1565
+ ```
1566
+
1567
+ Options: `--type <type>` (default `app`), `--timeout <ms>` (default 10000), `--json`.
1568
+
1569
+ ### `chainlesschain android <action>`
1570
+
1571
+ Android-native bridge: ContentResolver / SAF / Accessibility / Shizuku / root. Runs against a connected device's in-app bridge.
1572
+
1573
+ ```bash
1574
+ chainlesschain android caps # Probe available bridge capabilities
1575
+ chainlesschain android contacts pull --since <ms> # Contacts (runtime permission required)
1576
+ chainlesschain android sms pull # SMS
1577
+ chainlesschain android calls pull # Call log
1578
+ chainlesschain android app list --system # Installed packages
1579
+ chainlesschain android app launch <pkg> # Launch app
1580
+ chainlesschain android app intent <pkg> <action>
1581
+ chainlesschain android fs read <target> # SAF / sandbox file read
1582
+ chainlesschain android fs list <target> # Directory listing
1583
+ chainlesschain android a11y query --filter <css> # Accessibility node tree
1584
+ chainlesschain android a11y click <nodeId> # Click a node
1585
+ ```
1586
+
1587
+ ### `chainlesschain project <action>`
1588
+
1589
+ Manage desktop projects (shared SQLite database, syncs to mobile).
1590
+
1591
+ ```bash
1592
+ chainlesschain project init <name> --description "..." # Create project
1593
+ chainlesschain project list # List projects
1594
+ chainlesschain project show <id> # Details
1595
+ chainlesschain project delete <id> # Soft delete (--hard to remove)
1596
+ ```
1597
+
1598
+ ### `chainlesschain video <action>`
1599
+
1600
+ Video editing agent — long footage + music → montage (CutClaw-inspired): deconstruct, plan shots with an LLM, assemble via a ReAct editor loop, render with ffmpeg.
1601
+
1602
+ ```bash
1603
+ chainlesschain video edit --audio music.mp3 --instruction "fast-paced travel cut" --output out.mp4
1604
+ chainlesschain video deconstruct --fps 2 # Frames + ASR + beat analysis (cached)
1605
+ chainlesschain video plan --instruction "..." # Generate shot_plan
1606
+ chainlesschain video assemble --parallel --review # Editor loop (+ VLM quality gate)
1607
+ ```
1608
+
1609
+ Notable `edit` options: `--srt` (skip ASR), `--character`, `--snap-beats`, `--ducking`, `--use-madmom`, `--concurrency <n>`, `--stream` (NDJSON progress), `--json`.
1610
+
1611
+ ### `chainlesschain mtc <action>`
1612
+
1613
+ Merkle Tree Certificates — batch issuance & verification, plus Phase 3 federation MTCA (M-of-N member registry).
1614
+
1615
+ ```bash
1616
+ chainlesschain mtc batch # Tree + landmark + envelopes from leaves
1617
+ chainlesschain mtc verify # Verify an envelope against a landmark
1618
+ chainlesschain mtc landmark inspect # Pretty-print a landmark file
1619
+ chainlesschain mtc batch-dids # Batch from local DB DIDs
1620
+ chainlesschain mtc batch-skills # Batch from local CLI skills
1621
+ chainlesschain mtc publish-skills # Publish a skills batch
1622
+ chainlesschain mtc serve # Serve landmarks/envelopes
1623
+ chainlesschain mtc federation join <federation-id>
1624
+ chainlesschain mtc federation status # Registered federations + members
1625
+ chainlesschain mtc federation invite <fed-id> <member-id> # + vote / propose-revoke / rotate-key / fork / merge
1626
+ ```
1627
+
1628
+ ### `chainlesschain multisig <action>`
1629
+
1630
+ M-of-N multi-signature proposals beyond MTC publisher_signature — per-domain policies, signature collection, finalization.
1631
+
1632
+ ```bash
1633
+ chainlesschain multisig propose <domain> # Create proposal + sign as initiator
1634
+ chainlesschain multisig sign <proposalId> # Add a signature
1635
+ chainlesschain multisig finalize <proposalId> # Finalize once threshold reached
1636
+ chainlesschain multisig list # List proposals
1637
+ chainlesschain multisig show <proposalId> # Detail with all signatures
1638
+ chainlesschain multisig sweep # Expire past-deadline proposals
1639
+ chainlesschain multisig policy show <domain> # Per-domain M-of-N policy
1640
+ chainlesschain multisig policy set <domain>
1641
+ ```
1642
+
1643
+ ---
1644
+
1645
+ ## Full Command Index
1646
+
1647
+ Every remaining top-level command not documented above, with its built-in description. Run `chainlesschain <command> --help` for subcommands and options.
1648
+
1649
+ | Command | What it does |
1650
+ | ------------------------------ | ------------------------------------------------------------------------------------------------------- |
1651
+ | `activitypub` (alias `ap`) | ActivityPub C2S bridge — actors, outbox/inbox, Follow/Create/Like/Announce |
1652
+ | `agent-network` (alias `anet`) | Decentralized Agent Network — DID / registry / credentials / task routing (Phase 24) |
1653
+ | `auto` | Alias root of `automation` (same workflow automation engine) |
1654
+ | `automation` | Workflow automation engine — 12 SaaS connectors + triggers (Phase 96) |
1655
+ | `codegen` | Code generation agent (Phase 86) |
1656
+ | `collab` | Collaboration governance — decisions, voting, autonomy levels, task assignment |
1657
+ | `crosschain` | Cross-chain interoperability (Phase 89) |
1658
+ | `dbevo` | Database evolution & migration framework (Phase 80) |
1659
+ | `dev` | Autonomous developer — dev sessions, ADRs, code review, refactor catalog |
1660
+ | `did-v2` (alias `didv2`) | Decentralized Identity 2.0 — W3C DID v2.0 + VP + social recovery + roaming (Phase 55) |
1661
+ | `ecosystem` (alias `eco`) | Plugin Ecosystem 2.0 — registry + deps + install + AI review + publish + revenue + recommend (Phase 64) |
1662
+ | `federation` | Federation hardening system (Phase 58) |
1663
+ | `fusion` | Protocol fusion & AI social (Phase 72-73) |
1664
+ | `governance` | Community governance — proposals, voting, impact analysis, prediction |
1665
+ | `incentive` | Token incentive — ledger accounts, transfers, contributions, leaderboard |
1666
+ | `inference` | Decentralized inference network (Phase 67) |
1667
+ | `infra` | Decentralized infrastructure (Phase 74-75) |
1668
+ | `ipfs` | IPFS decentralized storage (Phase 17) |
1669
+ | `kg` | Knowledge graph — entities, relations, multi-hop reasoning, stats |
1670
+ | `marketplace` | Skill marketplace — publish skill services, record invocations, view stats |
1671
+ | `multimodal` (alias `mm`) | Multimodal collaboration (Phase 27) |
1672
+ | `nlprog` | Natural language programming system (Phase 28) |
1673
+ | `ops` | Autonomous operations / AIOps |
1674
+ | `perception` | Multimodal perception engine (Phase 84) |
1675
+ | `perf` | Performance monitoring & auto-tuning (Phase 22) |
1676
+ | `pipeline` (alias `pipe`) | Development Pipeline Orchestration — 7-stage AI dev pipeline + gates + deploys (Phase 26) |
1677
+ | `privacy` | Privacy computing (Phase 91) |
1678
+ | `quantize` | Model quantization system (Phase 20) |
1679
+ | `recommend` | Smart content recommendation (Phase 48) |
1680
+ | `reputation` (alias `rep`) | Reputation optimizer — observations, decay, anomaly detection, Bayesian optimization |
1681
+ | `runtime` | Universal application runtime (Phase 63) |
1682
+ | `sla` | Cross-org SLA management — contracts, metrics, violations, compensation |
1683
+ | `sso` | SSO enterprise authentication — SAML / OAuth2 / OIDC (Phase 14) |
1684
+ | `stress` | Federation stress testing — load simulation, bottleneck & capacity planning |
1685
+ | `tech` | Tech Learning Engine — stack analysis, anti-pattern detection, practice store |
1686
+ | `tenant` | Multi-tenant SaaS — tenants, usage metering, subscriptions, quotas |
1687
+ | `trust` | Trust & security (Phase 68-71) |
1688
+ | `autoagent` | Autonomous agent V2 governance (V2 governance, developer surface) |
1689
+ | `bm25` | BM25 Search V2 governance (V2 governance, developer surface) |
1690
+ | `ccron` | Cowork Cron V2 governance (V2 governance, developer surface) |
1691
+ | `compt` | Compression Telemetry V2 governance (V2 governance, developer surface) |
1692
+ | `consol` | Session Consolidator V2 governance (V2 governance, developer surface) |
1693
+ | `execbe` | Execution backend V2 governance (V2 governance, developer surface) |
1694
+ | `fflag` | Feature Flags V2 governance (V2 governance, developer surface) |
1695
+ | `itbudget` | Iteration Budget V2 governance (V2 governance, developer surface) |
1696
+ | `mcpscaf` | MCP Scaffold V2 governance (V2 governance, developer surface) |
1697
+ | `meminj` | Memory Injection V2 governance (V2 governance, developer surface) |
1698
+ | `orchgov` | Orchestrator V2 governance (V2 governance, developer surface) |
1699
+ | `pdfp` | PDF Parser V2 governance (V2 governance, developer surface) |
1700
+ | `perm` | Permission Engine V2 governance (V2 governance, developer surface) |
1701
+ | `permmem` | Permanent memory V2 — pin maturity + retention jobs (V2 governance, developer surface) |
1702
+ | `planmode` | Plan Mode V2 governance (V2 governance, developer surface) |
1703
+ | `promcomp` | Prompt Compressor V2 governance (V2 governance, developer surface) |
1704
+ | `rcache` | Response cache V2 — profile maturity + refresh jobs (V2 governance, developer surface) |
1705
+ | `router` | Agent router V2 governance (V2 governance, developer surface) |
1706
+ | `seshhook` | Session Hooks V2 governance (V2 governance, developer surface) |
1707
+ | `seshsearch` | Session Search V2 governance (V2 governance, developer surface) |
1708
+ | `seshtail` | Session Tail V2 governance (V2 governance, developer surface) |
1709
+ | `seshu` | Session Usage V2 governance (V2 governance, developer surface) |
1710
+ | `sganal` | Social Graph Analytics V2 governance (V2 governance, developer surface) |
1711
+ | `slotfill` | Slot Filler V2 governance (V2 governance, developer surface) |
1712
+ | `subagent` | Sub-agent registry V2 governance (V2 governance, developer surface) |
1713
+ | `svccont` | Service Container V2 governance (V2 governance, developer surface) |
1714
+ | `tms` | Task Model Selector V2 governance (V2 governance, developer surface) |
1715
+ | `todo` | Todo manager V2 governance (V2 governance, developer surface) |
1716
+ | `topiccls` | Topic Classifier V2 governance (V2 governance, developer surface) |
1717
+ | `uprof` | User Profile V2 governance (V2 governance, developer surface) |
1718
+ | `vcheck` | Version Checker V2 governance (V2 governance, developer surface) |
1719
+ | `webfetch` | Web Fetch V2 governance (V2 governance, developer surface) |
1720
+
1721
+ Full reference: https://docs.chainlesschain.com/chainlesschain/cli.html
1722
+
1356
1723
  ## License
1357
1724
 
1358
1725
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.162.39",
3
+ "version": "0.162.40",
4
4
  "description": "CLI for ChainlessChain - install, configure, and manage your personal AI management system",
5
5
  "type": "module",
6
6
  "bin": {
@@ -58,7 +58,7 @@
58
58
  "@chainlesschain/core-infra": "0.1.0",
59
59
  "@chainlesschain/core-mtc": "0.2.1",
60
60
  "@chainlesschain/core-multisig": "0.1.0",
61
- "@chainlesschain/personal-data-hub": "0.4.3",
61
+ "@chainlesschain/personal-data-hub": "0.4.4",
62
62
  "@chainlesschain/session-core": "0.3.2",
63
63
  "@chainlesschain/shared-logger": "0.1.0",
64
64
  "@inquirer/prompts": "^7.2.0",
@@ -1 +1 @@
1
- import{I as b,J as v,U as S,R as r,c as o,K as l,V as p,S as h,o as se,h as re,a as Z,b as Q,r as C,P as u,Q as y,F as z,Z as G}from"./vendor-BvqAck49.js";import{_ as ze,u as de,b as ce,d as f}from"./index-CmU631Je.js";import{s as Ie}from"./community-parser-CO25nZFt.js";import ue from"./index-B78X5S22.js";import{f as Oe,c as Pe,b2 as Te,aY as Ee,aa as Le,s as Ne,as as je,R as Ue}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-D4Tm7-s9.js";import"./pickAttrs-CuWA8-lj.js";import"./initDefaultProps-CSdsIGy3.js";import"./motion-Do-AcZV4.js";import"./raf-Deuc0E8-.js";import"./index-DjG82V0v.js";import"./index-Or_McYjX.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-O0FVFeZg.js";import"./compact-item-ClYV25qi.js";import"./createContext-CDhtjdkV.js";import"./Compact-CtxpF4R5.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-Yn_3FZ0l.js";import"./zoom-KnTK1fjj.js";import"./ActionButton-XHoOmsbP.js";import"./vnode-D4LttGy7.js";function H(t){const a=Ie(t);if(!a)return null;try{return JSON.parse(a)}catch{}const s=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const De=Object.freeze(["P0","P1","P2","P3"]),Me=Object.freeze(["open","acknowledged","resolved","closed"]);function g(t,a=0){return typeof t=="number"&&Number.isFinite(t)?t:a}function Je(t,a=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,anomalyMetric:t.anomalyMetric??t.anomaly_metric??"",severity:String(t.severity||"P3"),status:String(t.status||"open").toLowerCase(),description:String(t.description||""),anomalyData:t.anomalyData??t.anomaly_data??null,remediationId:t.remediationId??t.remediation_id??null,postmortem:t.postmortem||"",acknowledgedAt:t.acknowledgedAt??t.acknowledged_at??null,resolvedAt:t.resolvedAt??t.resolved_at??null,createdAt:t.createdAt??t.created_at??null,_idx:a}:null}function pe(t){const a=H(t);return Array.isArray(a)?a.map(Je).filter(Boolean):[]}function qe(t,a=0){if(!t||typeof t!="object")return null;const s=t.id||"";if(!s)return null;const e=t.enabled;let P=!1;return e===!0||e===1||e==="1"?P=!0:e===!1||e===0||e==="0"?P=!1:P=!!e,{key:s,id:s,name:String(t.name||""),triggerCondition:t.triggerCondition??t.trigger_condition??"",steps:t.steps||"",enabled:P,successCount:g(t.successCount??t.success_count,0),failureCount:g(t.failureCount??t.failure_count,0),createdAt:t.createdAt??t.created_at??null,_idx:a}}function me(t){const a=H(t);return Array.isArray(a)?a.map(qe).filter(Boolean):[]}function Be(t,a=0){if(!t||typeof t!="object")return null;const s=t.metricName??t.metric_name??"";return s?{key:s,metricName:s,mean:g(t.mean,0),stdDev:g(t.stdDev??t.std_dev,0),q1:g(t.q1,0),q3:g(t.q3,0),sampleCount:g(t.sampleCount??t.sample_count,0),updatedAt:t.updatedAt??t.updated_at??null,_idx:a}:null}function ye(t){const a=H(t);return Array.isArray(a)?a.map(Be).filter(Boolean):[]}function fe(t){const a=H(t);return!a||typeof a!="object"||Array.isArray(a)?null:{anomaly:!!a.anomaly,reason:a.reason||null,metricName:a.metricName??a.metric_name??"",value:g(a.value,0),algorithm:String(a.algorithm||""),score:g(a.score,0),threshold:g(a.threshold,0),baseline:a.baseline?{mean:g(a.baseline.mean,0),stdDev:g(a.baseline.stdDev??a.baseline.std_dev,0),q1:g(a.baseline.q1,0),q3:g(a.baseline.q3,0)}:null,incidentId:a.incidentId??a.incident_id??null,severity:a.severity||null}}const Ve={incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}};function be(t){const a=JSON.parse(JSON.stringify(Ve)),s=H(t);if(!s||typeof s!="object"||Array.isArray(s))return a;if(s.incidents&&typeof s.incidents=="object"){if(a.incidents.total=g(s.incidents.total,0),a.incidents.avgResolveMs=g(s.incidents.avgResolveMs??s.incidents.avg_resolve_ms,0),s.incidents.bySeverity&&typeof s.incidents.bySeverity=="object")for(const e of Object.keys(a.incidents.bySeverity))a.incidents.bySeverity[e]=g(s.incidents.bySeverity[e],0);if(s.incidents.byStatus&&typeof s.incidents.byStatus=="object")for(const e of Object.keys(a.incidents.byStatus))a.incidents.byStatus[e]=g(s.incidents.byStatus[e],0)}return s.playbooks&&typeof s.playbooks=="object"&&(a.playbooks.total=g(s.playbooks.total,0),a.playbooks.enabled=g(s.playbooks.enabled,0),a.playbooks.totalSuccess=g(s.playbooks.totalSuccess??s.playbooks.total_success,0),a.playbooks.totalFailure=g(s.playbooks.totalFailure??s.playbooks.total_failure,0)),s.baselines&&typeof s.baselines=="object"&&(a.baselines.total=g(s.baselines.total,0),Array.isArray(s.baselines.metrics)&&(a.baselines.metrics=[...s.baselines.metrics])),a}function Ke(t){if(t==null||t==="")return"—";const a=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(a.getTime())?String(t):a.toLocaleString("zh-CN",{hour12:!1})}const Qe={__name:"AIOps",setup(t,{expose:a}){a();const s=de(),{t:e}=ce(),P=C(!1),N=C(!1),w=C(!1),j=C([]),X=C([]),$=C([]),D=C({incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}}),I=C("incidents"),A=C(""),T=C(""),W=C(!1),R=C(!1),O=C(!1),q=C(!1),x=Z({severity:"P3",metric:"",description:""}),_=Z({name:"",triggerJson:"",stepsJson:""}),M=Z({metric:"",values:""}),U=Z({metric:"",value:null,algorithm:"z_score"}),J=C(null),ee=Q(()=>[{title:e("aiops.incidentCols.severity"),key:"severity",width:"90px"},{title:e("aiops.incidentCols.metric"),key:"metric",width:"160px"},{title:e("aiops.incidentCols.description"),key:"description"},{title:e("aiops.incidentCols.status"),key:"status",width:"100px"},{title:e("aiops.incidentCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.incidentCols.action"),key:"action",width:"220px"}]),F=Q(()=>[{title:e("aiops.playbookCols.name"),key:"name"},{title:e("aiops.playbookCols.enabled"),key:"enabled",width:"80px"},{title:e("aiops.playbookCols.stats"),key:"stats",width:"180px"},{title:e("aiops.playbookCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.playbookCols.action"),key:"action",width:"160px"}]),Y=Q(()=>[{title:e("aiops.baselineCols.metric"),key:"metric"},{title:e("aiops.baselineCols.mean"),key:"mean",width:"180px"},{title:e("aiops.baselineCols.iqr"),key:"iqr",width:"180px"},{title:e("aiops.baselineCols.sampleCount"),key:"sampleCount",width:"90px"},{title:e("aiops.baselineCols.updatedAt"),key:"updatedAt",width:"160px"}]),B=Q(()=>D.value.incidents.byStatus.open+D.value.incidents.byStatus.acknowledged),V=Q(()=>{let n=j.value;return A.value&&(n=n.filter(d=>d.severity===A.value)),T.value&&(n=n.filter(d=>d.status===T.value)),n});function K(n){const d=`aiops.statusLabels.${n}`,m=e(d);return m===d?n:m}function ae(n){return{open:"red",acknowledged:"orange",resolved:"cyan",closed:"default"}[n]||"default"}function i(n){return{P0:"red",P1:"volcano",P2:"orange",P3:"gold"}[n]||"default"}function c(n){const d=`aiops.reasonLabels.${n}`,m=e(d);return m===d?n:m}function E(n,d){return n?n.length>d?n.slice(0,d)+"...":n:""}function ve(n){return!n||n<=0?e("aiops.duration.none"):n<1e3?`${n}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:n<36e5?`${(n/6e4).toFixed(1)}min`:`${(n/36e5).toFixed(1)}h`}function ge({key:n}){n==="incident"?W.value=!0:n==="playbook"?R.value=!0:n==="baseline"?O.value=!0:n==="detect"&&(J.value=null,q.value=!0)}async function L(){P.value=!0;try{const[n,d,m,k]=await Promise.all([s.execute("ops incidents --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops playbooks --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops baselines --json",1e4).catch(()=>({output:""})),s.execute("ops stats --json",8e3).catch(()=>({output:""}))]);j.value=pe(n.output),X.value=me(d.output),$.value=ye(m.output),D.value=be(k.output)}catch(n){f.error(e("aiops.msg.loadFailed")+": "+(n?.message||n))}finally{P.value=!1}}async function ke(){if(!x.description.trim()){f.warning(e("aiops.msg.descEmpty"));return}N.value=!0;try{const n=[`ops incident-create --severity ${x.severity}`];x.metric.trim()&&n.push(`--metric "${x.metric.trim().replace(/"/g,'\\"')}"`),n.push(`--description "${x.description.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"incidentId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.incidentCreated")),W.value=!1,oe(),await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{N.value=!1}}async function _e(){if(!_.name.trim()){f.warning(e("aiops.msg.playbookNameEmpty"));return}for(const[n,d]of[[_.triggerJson,"triggerLabel"],[_.stepsJson,"stepsLabel"]])if(n.trim())try{JSON.parse(n)}catch{f.warning(e("aiops.msg.jsonInvalid",{label:e(`aiops.msg.${d}`)}));return}N.value=!0;try{const n=[`ops playbook-create --name "${_.name.trim().replace(/"/g,'\\"')}"`];_.triggerJson.trim()&&n.push(`--trigger '${_.triggerJson.trim().replace(/'/g,"'\\''")}'`),_.stepsJson.trim()&&n.push(`--steps '${_.stepsJson.trim().replace(/'/g,"'\\''")}'`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"playbookId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.playbookCreated")),R.value=!1,le(),I.value="playbooks",await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{N.value=!1}}async function he(){const n=M.metric.trim();if(!n){f.warning(e("aiops.msg.metricEmpty"));return}const d=M.values.split(/[\s,]+/).map(m=>m.trim()).filter(Boolean).map(m=>Number(m));if(d.length===0||d.some(m=>!Number.isFinite(m))){f.warning(e("aiops.msg.valuesInvalid"));return}N.value=!0;try{const m=`ops baseline-update "${n.replace(/"/g,'\\"')}" --values ${d.join(",")} --json`,{output:k}=await s.execute(m,1e4);if(/error|失败/i.test(k)&&!/"updated"/.test(k)){f.error(e("aiops.msg.baselineUpdateFailed")+": "+k.slice(0,120));return}f.success(e("aiops.msg.baselineUpdated",{n:d.length})),O.value=!1,ie(),I.value="baselines",await L()}catch(m){f.error(e("aiops.msg.baselineUpdateFailed")+": "+(m?.message||m))}finally{N.value=!1}}async function Ce(){if(!U.metric||U.value==null){f.warning(e("aiops.msg.detectFieldsEmpty"));return}w.value=!0,J.value=null;try{const n=`ops detect "${U.metric.replace(/"/g,'\\"')}" ${U.value} --algorithm ${U.algorithm} --json`,{output:d}=await s.execute(n,8e3),m=fe(d);if(!m){f.error(e("aiops.msg.detectFailed")+": "+d.slice(0,120));return}J.value=m,m.anomaly&&(f.warning(e("aiops.msg.detectAnomaly",{severity:m.severity||"P3"})),L())}catch(n){f.error(e("aiops.msg.detectFailed")+": "+(n?.message||n))}finally{w.value=!1}}async function Se(n){await te(n,"incident-ack",e("aiops.msg.incidentAcked"))}async function xe(n){await te(n,"incident-resolve",e("aiops.msg.incidentResolved"))}async function Fe(n){await te(n,"incident-close",e("aiops.msg.incidentClosed"))}async function te(n,d,m){try{const{output:k}=await s.execute(`ops ${d} ${n.id} --json`,8e3);if(/error|失败|invalid/i.test(k)&&!/"acknowledged"|"resolved"|"closed"/.test(k)){f.error(e("aiops.msg.incidentTransitionFailed")+": "+k.slice(0,120));return}f.success(m),await L()}catch(k){f.error(e("aiops.msg.incidentTransitionFailed")+": "+(k?.message||k))}}async function we(n){try{const{output:d}=await s.execute(`ops postmortem ${n.id}`,12e3);ue.info({title:e("aiops.msg.postmortemTitle",{id:n.id.slice(0,8)}),width:720,content:()=>re("pre",{style:"white-space: pre-wrap; max-height: 60vh; overflow: auto; font-size: 12px; padding: 8px; background: rgba(0,0,0,.04); border-radius: 4px;"},d||e("aiops.msg.postmortemEmpty"))})}catch(d){f.error(e("aiops.msg.postmortemFailed")+": "+(d?.message||d))}}async function Ae(n,d){const m=d?"on":"off";try{const{output:k}=await s.execute(`ops playbook-toggle ${n.id} ${m} --json`,8e3);if(/error|失败/i.test(k)&&!/"enabled"/.test(k)){f.error(e("aiops.msg.playbookToggleFailed")+": "+k.slice(0,120));return}f.success(e(d?"aiops.msg.playbookEnabled":"aiops.msg.playbookDisabled")),await L()}catch(k){f.error(e("aiops.msg.playbookToggleFailed")+": "+(k?.message||k))}}async function Re(n,d){try{const{output:m}=await s.execute(`ops playbook-record ${n.id} ${d} --json`,8e3);if(/error|失败/i.test(m)&&!/"recorded"/.test(m)){f.error(e("aiops.msg.playbookRecordFailed")+": "+m.slice(0,120));return}f.success(e(d==="success"?"aiops.msg.playbookRecordSuccess":"aiops.msg.playbookRecordFailure")),await L()}catch(m){f.error(e("aiops.msg.playbookRecordFailed")+": "+(m?.message||m))}}function oe(){x.severity="P3",x.metric="",x.description=""}function le(){_.name="",_.triggerJson="",_.stepsJson=""}function ie(){M.metric="",M.values=""}se(L);const ne={ws:s,t:e,loading:P,creating:N,detecting:w,incidents:j,playbooks:X,baselines:$,stats:D,activeTab:I,incidentSeverityFilter:A,incidentStatusFilter:T,showIncidentModal:W,showPlaybookModal:R,showBaselineModal:O,showDetectModal:q,incidentForm:x,playbookForm:_,baselineForm:M,detectForm:U,detectResult:J,incidentColumns:ee,playbookColumns:F,baselineColumns:Y,openCount:B,filteredIncidents:V,statusLabel:K,statusColor:ae,severityColor:i,reasonLabel:c,truncate:E,formatDurationMs:ve,handleNewClick:ge,loadAll:L,createIncident:ke,createPlaybook:_e,updateBaseline:he,detectAnomaly:Ce,ackIncident:Se,resolveIncident:xe,closeIncident:Fe,runIncidentTransition:te,generatePostmortem:we,togglePlaybook:Ae,recordRun:Re,resetIncidentForm:oe,resetPlaybookForm:le,resetBaselineForm:ie,ref:C,computed:Q,onMounted:se,reactive:Z,h:re,get ReloadOutlined(){return Ue},get PlusOutlined(){return je},get AlertOutlined(){return Ne},get RocketOutlined(){return Le},get LineChartOutlined(){return Ee},get FundOutlined(){return Te},get ExclamationCircleOutlined(){return Pe},get CheckCircleOutlined(){return Oe},get message(){return f},get Modal(){return ue},get useI18n(){return ce},get useWsStore(){return de},get parseIncidents(){return pe},get parsePlaybooks(){return me},get parseBaselines(){return ye},get parseDetectResult(){return fe},get parseStats(){return be},get formatOpsTime(){return Ke},get SEVERITIES(){return De},get INCIDENT_STATUSES(){return Me}};return Object.defineProperty(ne,"__isScriptSetup",{enumerable:!1,value:!0}),ne}},We={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ye={class:"page-title"},Ze={class:"page-sub"},Ge={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},He={class:"filter-bar"},Xe={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},$e={key:1,style:{color:"var(--text-muted)"}},et={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},tt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ot={style:{color:"var(--text-primary)","font-weight":"500"}},lt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},it={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},rt={style:{color:"#1677ff"}},dt={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},ct={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},yt={key:1,style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},ft={key:2,style:{"margin-top":"8px"}};function bt(t,a,s,e,P,N){const w=b("a-button"),j=b("a-menu-item"),X=b("a-menu"),$=b("a-dropdown"),D=b("a-space"),I=b("a-statistic"),A=b("a-card"),T=b("a-col"),W=b("a-row"),R=b("a-tag"),O=b("a-radio-button"),q=b("a-radio-group"),x=b("a-table"),_=b("a-tab-pane"),M=b("a-switch"),U=b("a-tabs"),J=b("a-select-option"),ee=b("a-select"),F=b("a-form-item"),Y=b("a-input"),B=b("a-textarea"),V=b("a-form"),K=b("a-modal"),ae=b("a-input-number");return u(),v("div",null,[S("div",We,[S("div",null,[S("h2",Ye,r(t.$t("aiops.title")),1),S("p",Ze,r(t.$t("aiops.subtitle")),1)]),o(D,null,{default:l(()=>[o(w,{loading:e.loading,onClick:e.loadAll},{icon:l(()=>[o(e.ReloadOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.refresh")),1)]),_:1},8,["loading"]),o($,{trigger:["click"]},{overlay:l(()=>[o(X,{onClick:e.handleNewClick},{default:l(()=>[o(j,{key:"incident"},{default:l(()=>[o(e.AlertOutlined),y(" "+r(t.$t("aiops.actions.incident")),1)]),_:1}),o(j,{key:"playbook"},{default:l(()=>[o(e.RocketOutlined),y(" "+r(t.$t("aiops.actions.playbook")),1)]),_:1}),o(j,{key:"baseline"},{default:l(()=>[o(e.LineChartOutlined),y(" "+r(t.$t("aiops.actions.baseline")),1)]),_:1}),o(j,{key:"detect"},{default:l(()=>[o(e.FundOutlined),y(" "+r(t.$t("aiops.actions.detect")),1)]),_:1})]),_:1})]),default:l(()=>[o(w,{type:"primary"},{icon:l(()=>[o(e.PlusOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.newDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stats overview "),o(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.incidents"),value:e.stats.incidents.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:l(()=>[o(e.AlertOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.pending"),value:e.stats.incidents.byStatus.open+e.stats.incidents.byStatus.acknowledged,"value-style":{color:e.openCount>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.playbooks"),value:e.stats.playbooks.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:l(()=>[o(e.RocketOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.enabled"),value:e.stats.playbooks.enabled,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:24,sm:8,lg:4},{default:l(()=>[o(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.baselines"),value:e.stats.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:l(()=>[o(e.LineChartOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Severity breakdown bar "),e.stats.incidents.total>0?(u(),h(A,{key:0,title:t.$t("aiops.severityCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:l(()=>[o(D,{size:[12,8],wrap:""},{default:l(()=>[(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(R,{key:i,color:e.severityColor(i),style:{"font-size":"13px",padding:"2px 10px"}},{default:l(()=>[y(r(i)+": "+r(e.stats.incidents.bySeverity[i]||0),1)]),_:2},1032,["color"]))),128)),S("span",Ge,r(t.$t("aiops.avgResolveLabel",{time:e.formatDurationMs(e.stats.incidents.avgResolveMs)})),1)]),_:1})]),_:1},8,["title"])):p("v-if",!0),p(" Tabs "),o(U,{activeKey:e.activeTab,"onUpdate:activeKey":a[2]||(a[2]=i=>e.activeTab=i),class:"aiops-tabs"},{default:l(()=>[p(" ── Incidents tab ─────────────────────────────────────────── "),o(_,{key:"incidents",tab:t.$t("aiops.tabs.incidents")},{default:l(()=>[S("div",He,[o(q,{value:e.incidentSeverityFilter,"onUpdate:value":a[0]||(a[0]=i=>e.incidentSeverityFilter=i),size:"small","button-style":"solid"},{default:l(()=>[o(O,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.all")),1)]),_:1}),(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(O,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(q,{value:e.incidentStatusFilter,"onUpdate:value":a[1]||(a[1]=i=>e.incidentStatusFilter=i),size:"small"},{default:l(()=>[o(O,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.allStatuses")),1)]),_:1}),(u(!0),v(z,null,G(e.INCIDENT_STATUSES,i=>(u(),h(O,{key:i,value:i},{default:l(()=>[y(r(e.statusLabel(i)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(x,{columns:e.incidentColumns,"data-source":e.filteredIncidents,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="severity"?(u(),h(R,{key:0,color:e.severityColor(c.severity),style:{"font-weight":"600"}},{default:l(()=>[y(r(c.severity),1)]),_:2},1032,["color"])):p("v-if",!0),i.key==="metric"?(u(),v(z,{key:1},[c.anomalyMetric?(u(),v("span",Xe,r(c.anomalyMetric),1)):(u(),v("span",$e,"—"))],64)):p("v-if",!0),i.key==="description"?(u(),v("span",et,r(e.truncate(c.description,80)||"—"),1)):p("v-if",!0),i.key==="status"?(u(),h(R,{key:3,color:e.statusColor(c.status)},{default:l(()=>[y(r(e.statusLabel(c.status)),1)]),_:2},1032,["color"])):p("v-if",!0),i.key==="createdAt"?(u(),v("span",tt,r(e.formatOpsTime(c.createdAt)),1)):p("v-if",!0),i.key==="action"?(u(),v(z,{key:5},[c.status==="open"?(u(),h(w,{key:0,size:"small",type:"link",onClick:E=>e.ackIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.ack")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="open"||c.status==="acknowledged"?(u(),h(w,{key:1,size:"small",type:"link",onClick:E=>e.resolveIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.resolve")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="resolved"?(u(),h(w,{key:2,size:"small",type:"link",onClick:E=>e.closeIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.close")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="resolved"||c.status==="closed"?(u(),h(w,{key:3,size:"small",type:"link",onClick:E=>e.generatePostmortem(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.postmortem")),1)]),_:1},8,["onClick"])):p("v-if",!0)],64)):p("v-if",!0)]),emptyText:l(()=>[S("div",at,[o(e.AlertOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(e.incidentSeverityFilter||e.incidentStatusFilter?t.$t("aiops.table.incidentEmptyFiltered"):t.$t("aiops.table.incidentEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Playbooks tab ─────────────────────────────────────────── "),o(_,{key:"playbooks",tab:t.$t("aiops.tabs.playbooks")},{default:l(()=>[o(x,{columns:e.playbookColumns,"data-source":e.playbooks,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="name"?(u(),v(z,{key:0},[S("span",ot,r(c.name),1),c.triggerCondition?(u(),v("div",lt,r(e.truncate(c.triggerCondition,80)),1)):p("v-if",!0)],64)):p("v-if",!0),i.key==="enabled"?(u(),h(M,{key:1,checked:c.enabled,size:"small",onChange:E=>e.togglePlaybook(c,E)},null,8,["checked","onChange"])):p("v-if",!0),i.key==="stats"?(u(),v(z,{key:2},[o(R,{color:"green",style:{"font-size":"11px"}},{default:l(()=>[y(r(t.$t("aiops.table.successCount",{n:c.successCount})),1)]),_:2},1024),c.failureCount>0?(u(),h(R,{key:0,color:"red",style:{"font-size":"11px","margin-left":"4px"}},{default:l(()=>[y(r(t.$t("aiops.table.failureCount",{n:c.failureCount})),1)]),_:2},1024)):p("v-if",!0)],64)):p("v-if",!0),i.key==="createdAt"?(u(),v("span",it,r(e.formatOpsTime(c.createdAt)),1)):p("v-if",!0),i.key==="action"?(u(),v(z,{key:4},[o(w,{size:"small",type:"link",onClick:E=>e.recordRun(c,"success")},{default:l(()=>[y(r(t.$t("aiops.playbookActions.success")),1)]),_:1},8,["onClick"]),o(w,{size:"small",type:"link",danger:"",onClick:E=>e.recordRun(c,"failure")},{default:l(()=>[y(r(t.$t("aiops.playbookActions.failure")),1)]),_:1},8,["onClick"])],64)):p("v-if",!0)]),emptyText:l(()=>[S("div",nt,[o(e.RocketOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(t.$t("aiops.table.playbookEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Baselines tab ─────────────────────────────────────────── "),o(_,{key:"baselines",tab:t.$t("aiops.tabs.baselines")},{default:l(()=>[o(x,{columns:e.baselineColumns,"data-source":e.baselines,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="metric"?(u(),v("span",st,r(c.metricName),1)):p("v-if",!0),i.key==="mean"?(u(),v(z,{key:1},[S("span",rt,r(c.mean),1),S("span",dt,"σ "+r(c.stdDev),1)],64)):p("v-if",!0),i.key==="iqr"?(u(),v("span",ct," Q1 "+r(c.q1)+" / Q3 "+r(c.q3),1)):p("v-if",!0),i.key==="sampleCount"?(u(),h(R,{key:3,color:"blue",style:{"font-size":"11px"}},{default:l(()=>[y(r(c.sampleCount),1)]),_:2},1024)):p("v-if",!0),i.key==="updatedAt"?(u(),v("span",ut,r(e.formatOpsTime(c.updatedAt)),1)):p("v-if",!0)]),emptyText:l(()=>[S("div",pt,[o(e.LineChartOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(t.$t("aiops.table.baselineEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),p(" ── Create incident modal ─────────────────────────────────── "),o(K,{open:e.showIncidentModal,"onUpdate:open":a[6]||(a[6]=i=>e.showIncidentModal=i),title:t.$t("aiops.incident_modal.title"),"confirm-loading":e.creating,width:520,"ok-text":t.$t("aiops.incident_modal.ok"),"cancel-text":t.$t("aiops.incident_modal.cancel"),onOk:e.createIncident,onCancel:e.resetIncidentForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.incident_modal.severityLabel")},{default:l(()=>[o(ee,{value:e.incidentForm.severity,"onUpdate:value":a[3]||(a[3]=i=>e.incidentForm.severity=i)},{default:l(()=>[(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(J,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.metricLabel")},{default:l(()=>[o(Y,{value:e.incidentForm.metric,"onUpdate:value":a[4]||(a[4]=i=>e.incidentForm.metric=i),placeholder:t.$t("aiops.incident_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.descLabel"),required:""},{default:l(()=>[o(B,{value:e.incidentForm.description,"onUpdate:value":a[5]||(a[5]=i=>e.incidentForm.description=i),"auto-size":{minRows:3,maxRows:6}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Create playbook modal ─────────────────────────────────── "),o(K,{open:e.showPlaybookModal,"onUpdate:open":a[10]||(a[10]=i=>e.showPlaybookModal=i),title:t.$t("aiops.playbook_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("aiops.playbook_modal.ok"),"cancel-text":t.$t("aiops.playbook_modal.cancel"),onOk:e.createPlaybook,onCancel:e.resetPlaybookForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.playbook_modal.nameLabel"),required:""},{default:l(()=>[o(Y,{value:e.playbookForm.name,"onUpdate:value":a[7]||(a[7]=i=>e.playbookForm.name=i),placeholder:t.$t("aiops.playbook_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.playbook_modal.triggerLabel")},{default:l(()=>[o(B,{value:e.playbookForm.triggerJson,"onUpdate:value":a[8]||(a[8]=i=>e.playbookForm.triggerJson=i),placeholder:t.$t("aiops.playbook_modal.triggerPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.playbook_modal.stepsLabel")},{default:l(()=>[o(B,{value:e.playbookForm.stepsJson,"onUpdate:value":a[9]||(a[9]=i=>e.playbookForm.stepsJson=i),placeholder:t.$t("aiops.playbook_modal.stepsPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Update baseline modal ─────────────────────────────────── "),o(K,{open:e.showBaselineModal,"onUpdate:open":a[13]||(a[13]=i=>e.showBaselineModal=i),title:t.$t("aiops.baseline_modal.title"),"confirm-loading":e.creating,width:500,"ok-text":t.$t("aiops.baseline_modal.ok"),"cancel-text":t.$t("aiops.baseline_modal.cancel"),onOk:e.updateBaseline,onCancel:e.resetBaselineForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.baseline_modal.metricLabel"),required:""},{default:l(()=>[o(Y,{value:e.baselineForm.metric,"onUpdate:value":a[11]||(a[11]=i=>e.baselineForm.metric=i),placeholder:t.$t("aiops.baseline_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.baseline_modal.valuesLabel"),required:""},{default:l(()=>[o(B,{value:e.baselineForm.values,"onUpdate:value":a[12]||(a[12]=i=>e.baselineForm.values=i),placeholder:t.$t("aiops.baseline_modal.valuesPlaceholder"),"auto-size":{minRows:3,maxRows:8}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Detect anomaly modal ──────────────────────────────────── "),o(K,{open:e.showDetectModal,"onUpdate:open":a[17]||(a[17]=i=>e.showDetectModal=i),title:t.$t("aiops.detect_modal.title"),"confirm-loading":e.detecting,width:500,"ok-text":t.$t("aiops.detect_modal.ok"),"cancel-text":t.$t("aiops.detect_modal.cancel"),onOk:e.detectAnomaly},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.detect_modal.metricLabel"),required:""},{default:l(()=>[o(ee,{value:e.detectForm.metric,"onUpdate:value":a[14]||(a[14]=i=>e.detectForm.metric=i),"show-search":"",placeholder:t.$t("aiops.detect_modal.metricPlaceholder")},{default:l(()=>[(u(!0),v(z,null,G(e.baselines,i=>(u(),h(J,{key:i.metricName,value:i.metricName},{default:l(()=>[y(r(t.$t("aiops.detect_modal.metricOptionLabel",{name:i.metricName,count:i.sampleCount})),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.detect_modal.valueLabel"),required:""},{default:l(()=>[o(ae,{value:e.detectForm.value,"onUpdate:value":a[15]||(a[15]=i=>e.detectForm.value=i),style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.detect_modal.algorithmLabel")},{default:l(()=>[o(q,{value:e.detectForm.algorithm,"onUpdate:value":a[16]||(a[16]=i=>e.detectForm.algorithm=i)},{default:l(()=>[o(O,{value:"z_score"},{default:l(()=>[...a[18]||(a[18]=[y("Z-Score (3σ)",-1)])]),_:1}),o(O,{value:"iqr"},{default:l(()=>[...a[19]||(a[19]=[y("IQR (1.5×)",-1)])]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),e.detectResult?(u(),h(A,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:l(()=>[o(I,{title:t.$t("aiops.detect_modal.resultTitle"),value:e.detectResult.anomaly?t.$t("aiops.detect_modal.anomaly"):t.$t("aiops.detect_modal.normal"),"value-style":{color:e.detectResult.anomaly?"#ff4d4f":"#52c41a"}},null,8,["title","value","value-style"]),e.detectResult.reason&&!e.detectResult.anomaly?(u(),v("div",mt,r(t.$t("aiops.detect_modal.reasonLine",{reason:e.reasonLabel(e.detectResult.reason)})),1)):p("v-if",!0),e.detectResult.baseline?(u(),v("div",yt,[S("div",null,r(t.$t("aiops.detect_modal.scoreLine",{score:e.detectResult.score,threshold:e.detectResult.threshold})),1),S("div",null,r(t.$t("aiops.detect_modal.baselineLine",{mean:e.detectResult.baseline.mean,stdDev:e.detectResult.baseline.stdDev})),1)])):p("v-if",!0),e.detectResult.incidentId?(u(),v("div",ft,[o(R,{color:e.severityColor(e.detectResult.severity)},{default:l(()=>[y(r(t.$t("aiops.detect_modal.incidentCreated",{severity:e.detectResult.severity})),1)]),_:1},8,["color"])])):p("v-if",!0)]),_:1})):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Jt=ze(Qe,[["render",bt],["__scopeId","data-v-b804918b"],["__file","/tmp/cc-web-panel-sTYgkT/repo/packages/web-panel/src/views/AIOps.vue"]]);export{Jt as default};
1
+ import{I as b,J as v,U as S,R as r,c as o,K as l,V as p,S as h,o as se,h as re,a as Y,b as Q,r as C,P as u,Q as y,F as z,Z as G}from"./vendor-BvqAck49.js";import{_ as ze,u as de,b as ce,d as f}from"./index-oJQgRCrR.js";import{s as Ie}from"./community-parser-CO25nZFt.js";import ue from"./index-DldaToUA.js";import{f as Oe,c as Pe,b2 as Te,aY as Ee,aa as Le,s as Ne,as as je,R as Ue}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-CCdrTUAs.js";import"./pickAttrs-mVDeZx2m.js";import"./initDefaultProps-CkJZfCo8.js";import"./motion-BerbusV1.js";import"./raf-Deuc0E8-.js";import"./index-BRAgl2J_.js";import"./index-8h9y5S6X.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-DV2BNd59.js";import"./compact-item-CGolhyJq.js";import"./createContext-DY7EFhkD.js";import"./Compact-Bl9Uhb6v.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-3IL-yw1V.js";import"./zoom-CTpAiAE9.js";import"./ActionButton-BNDYY7Qd.js";import"./vnode-Mfm7vy07.js";function H(t){const a=Ie(t);if(!a)return null;try{return JSON.parse(a)}catch{}const s=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const De=Object.freeze(["P0","P1","P2","P3"]),Me=Object.freeze(["open","acknowledged","resolved","closed"]);function g(t,a=0){return typeof t=="number"&&Number.isFinite(t)?t:a}function Je(t,a=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,anomalyMetric:t.anomalyMetric??t.anomaly_metric??"",severity:String(t.severity||"P3"),status:String(t.status||"open").toLowerCase(),description:String(t.description||""),anomalyData:t.anomalyData??t.anomaly_data??null,remediationId:t.remediationId??t.remediation_id??null,postmortem:t.postmortem||"",acknowledgedAt:t.acknowledgedAt??t.acknowledged_at??null,resolvedAt:t.resolvedAt??t.resolved_at??null,createdAt:t.createdAt??t.created_at??null,_idx:a}:null}function pe(t){const a=H(t);return Array.isArray(a)?a.map(Je).filter(Boolean):[]}function qe(t,a=0){if(!t||typeof t!="object")return null;const s=t.id||"";if(!s)return null;const e=t.enabled;let P=!1;return e===!0||e===1||e==="1"?P=!0:e===!1||e===0||e==="0"?P=!1:P=!!e,{key:s,id:s,name:String(t.name||""),triggerCondition:t.triggerCondition??t.trigger_condition??"",steps:t.steps||"",enabled:P,successCount:g(t.successCount??t.success_count,0),failureCount:g(t.failureCount??t.failure_count,0),createdAt:t.createdAt??t.created_at??null,_idx:a}}function me(t){const a=H(t);return Array.isArray(a)?a.map(qe).filter(Boolean):[]}function Be(t,a=0){if(!t||typeof t!="object")return null;const s=t.metricName??t.metric_name??"";return s?{key:s,metricName:s,mean:g(t.mean,0),stdDev:g(t.stdDev??t.std_dev,0),q1:g(t.q1,0),q3:g(t.q3,0),sampleCount:g(t.sampleCount??t.sample_count,0),updatedAt:t.updatedAt??t.updated_at??null,_idx:a}:null}function ye(t){const a=H(t);return Array.isArray(a)?a.map(Be).filter(Boolean):[]}function fe(t){const a=H(t);return!a||typeof a!="object"||Array.isArray(a)?null:{anomaly:!!a.anomaly,reason:a.reason||null,metricName:a.metricName??a.metric_name??"",value:g(a.value,0),algorithm:String(a.algorithm||""),score:g(a.score,0),threshold:g(a.threshold,0),baseline:a.baseline?{mean:g(a.baseline.mean,0),stdDev:g(a.baseline.stdDev??a.baseline.std_dev,0),q1:g(a.baseline.q1,0),q3:g(a.baseline.q3,0)}:null,incidentId:a.incidentId??a.incident_id??null,severity:a.severity||null}}const Ve={incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}};function be(t){const a=JSON.parse(JSON.stringify(Ve)),s=H(t);if(!s||typeof s!="object"||Array.isArray(s))return a;if(s.incidents&&typeof s.incidents=="object"){if(a.incidents.total=g(s.incidents.total,0),a.incidents.avgResolveMs=g(s.incidents.avgResolveMs??s.incidents.avg_resolve_ms,0),s.incidents.bySeverity&&typeof s.incidents.bySeverity=="object")for(const e of Object.keys(a.incidents.bySeverity))a.incidents.bySeverity[e]=g(s.incidents.bySeverity[e],0);if(s.incidents.byStatus&&typeof s.incidents.byStatus=="object")for(const e of Object.keys(a.incidents.byStatus))a.incidents.byStatus[e]=g(s.incidents.byStatus[e],0)}return s.playbooks&&typeof s.playbooks=="object"&&(a.playbooks.total=g(s.playbooks.total,0),a.playbooks.enabled=g(s.playbooks.enabled,0),a.playbooks.totalSuccess=g(s.playbooks.totalSuccess??s.playbooks.total_success,0),a.playbooks.totalFailure=g(s.playbooks.totalFailure??s.playbooks.total_failure,0)),s.baselines&&typeof s.baselines=="object"&&(a.baselines.total=g(s.baselines.total,0),Array.isArray(s.baselines.metrics)&&(a.baselines.metrics=[...s.baselines.metrics])),a}function Ke(t){if(t==null||t==="")return"—";const a=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(a.getTime())?String(t):a.toLocaleString("zh-CN",{hour12:!1})}const Qe={__name:"AIOps",setup(t,{expose:a}){a();const s=de(),{t:e}=ce(),P=C(!1),N=C(!1),w=C(!1),j=C([]),X=C([]),$=C([]),D=C({incidents:{total:0,bySeverity:{P0:0,P1:0,P2:0,P3:0},byStatus:{open:0,acknowledged:0,resolved:0,closed:0},avgResolveMs:0},playbooks:{total:0,enabled:0,totalSuccess:0,totalFailure:0},baselines:{total:0,metrics:[]}}),I=C("incidents"),R=C(""),T=C(""),W=C(!1),A=C(!1),O=C(!1),q=C(!1),x=Y({severity:"P3",metric:"",description:""}),_=Y({name:"",triggerJson:"",stepsJson:""}),M=Y({metric:"",values:""}),U=Y({metric:"",value:null,algorithm:"z_score"}),J=C(null),ee=Q(()=>[{title:e("aiops.incidentCols.severity"),key:"severity",width:"90px"},{title:e("aiops.incidentCols.metric"),key:"metric",width:"160px"},{title:e("aiops.incidentCols.description"),key:"description"},{title:e("aiops.incidentCols.status"),key:"status",width:"100px"},{title:e("aiops.incidentCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.incidentCols.action"),key:"action",width:"220px"}]),F=Q(()=>[{title:e("aiops.playbookCols.name"),key:"name"},{title:e("aiops.playbookCols.enabled"),key:"enabled",width:"80px"},{title:e("aiops.playbookCols.stats"),key:"stats",width:"180px"},{title:e("aiops.playbookCols.createdAt"),key:"createdAt",width:"160px"},{title:e("aiops.playbookCols.action"),key:"action",width:"160px"}]),Z=Q(()=>[{title:e("aiops.baselineCols.metric"),key:"metric"},{title:e("aiops.baselineCols.mean"),key:"mean",width:"180px"},{title:e("aiops.baselineCols.iqr"),key:"iqr",width:"180px"},{title:e("aiops.baselineCols.sampleCount"),key:"sampleCount",width:"90px"},{title:e("aiops.baselineCols.updatedAt"),key:"updatedAt",width:"160px"}]),B=Q(()=>D.value.incidents.byStatus.open+D.value.incidents.byStatus.acknowledged),V=Q(()=>{let n=j.value;return R.value&&(n=n.filter(d=>d.severity===R.value)),T.value&&(n=n.filter(d=>d.status===T.value)),n});function K(n){const d=`aiops.statusLabels.${n}`,m=e(d);return m===d?n:m}function ae(n){return{open:"red",acknowledged:"orange",resolved:"cyan",closed:"default"}[n]||"default"}function i(n){return{P0:"red",P1:"volcano",P2:"orange",P3:"gold"}[n]||"default"}function c(n){const d=`aiops.reasonLabels.${n}`,m=e(d);return m===d?n:m}function E(n,d){return n?n.length>d?n.slice(0,d)+"...":n:""}function ve(n){return!n||n<=0?e("aiops.duration.none"):n<1e3?`${n}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:n<36e5?`${(n/6e4).toFixed(1)}min`:`${(n/36e5).toFixed(1)}h`}function ge({key:n}){n==="incident"?W.value=!0:n==="playbook"?A.value=!0:n==="baseline"?O.value=!0:n==="detect"&&(J.value=null,q.value=!0)}async function L(){P.value=!0;try{const[n,d,m,k]=await Promise.all([s.execute("ops incidents --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops playbooks --limit 200 --json",1e4).catch(()=>({output:""})),s.execute("ops baselines --json",1e4).catch(()=>({output:""})),s.execute("ops stats --json",8e3).catch(()=>({output:""}))]);j.value=pe(n.output),X.value=me(d.output),$.value=ye(m.output),D.value=be(k.output)}catch(n){f.error(e("aiops.msg.loadFailed")+": "+(n?.message||n))}finally{P.value=!1}}async function ke(){if(!x.description.trim()){f.warning(e("aiops.msg.descEmpty"));return}N.value=!0;try{const n=[`ops incident-create --severity ${x.severity}`];x.metric.trim()&&n.push(`--metric "${x.metric.trim().replace(/"/g,'\\"')}"`),n.push(`--description "${x.description.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"incidentId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.incidentCreated")),W.value=!1,oe(),await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{N.value=!1}}async function _e(){if(!_.name.trim()){f.warning(e("aiops.msg.playbookNameEmpty"));return}for(const[n,d]of[[_.triggerJson,"triggerLabel"],[_.stepsJson,"stepsLabel"]])if(n.trim())try{JSON.parse(n)}catch{f.warning(e("aiops.msg.jsonInvalid",{label:e(`aiops.msg.${d}`)}));return}N.value=!0;try{const n=[`ops playbook-create --name "${_.name.trim().replace(/"/g,'\\"')}"`];_.triggerJson.trim()&&n.push(`--trigger '${_.triggerJson.trim().replace(/'/g,"'\\''")}'`),_.stepsJson.trim()&&n.push(`--steps '${_.stepsJson.trim().replace(/'/g,"'\\''")}'`),n.push("--json");const{output:d}=await s.execute(n.join(" "),1e4);if(/error|失败/i.test(d)&&!/"playbookId"/.test(d)){f.error(e("aiops.msg.createFailed")+": "+d.slice(0,120));return}f.success(e("aiops.msg.playbookCreated")),A.value=!1,le(),I.value="playbooks",await L()}catch(n){f.error(e("aiops.msg.createFailed")+": "+(n?.message||n))}finally{N.value=!1}}async function he(){const n=M.metric.trim();if(!n){f.warning(e("aiops.msg.metricEmpty"));return}const d=M.values.split(/[\s,]+/).map(m=>m.trim()).filter(Boolean).map(m=>Number(m));if(d.length===0||d.some(m=>!Number.isFinite(m))){f.warning(e("aiops.msg.valuesInvalid"));return}N.value=!0;try{const m=`ops baseline-update "${n.replace(/"/g,'\\"')}" --values ${d.join(",")} --json`,{output:k}=await s.execute(m,1e4);if(/error|失败/i.test(k)&&!/"updated"/.test(k)){f.error(e("aiops.msg.baselineUpdateFailed")+": "+k.slice(0,120));return}f.success(e("aiops.msg.baselineUpdated",{n:d.length})),O.value=!1,ie(),I.value="baselines",await L()}catch(m){f.error(e("aiops.msg.baselineUpdateFailed")+": "+(m?.message||m))}finally{N.value=!1}}async function Ce(){if(!U.metric||U.value==null){f.warning(e("aiops.msg.detectFieldsEmpty"));return}w.value=!0,J.value=null;try{const n=`ops detect "${U.metric.replace(/"/g,'\\"')}" ${U.value} --algorithm ${U.algorithm} --json`,{output:d}=await s.execute(n,8e3),m=fe(d);if(!m){f.error(e("aiops.msg.detectFailed")+": "+d.slice(0,120));return}J.value=m,m.anomaly&&(f.warning(e("aiops.msg.detectAnomaly",{severity:m.severity||"P3"})),L())}catch(n){f.error(e("aiops.msg.detectFailed")+": "+(n?.message||n))}finally{w.value=!1}}async function Se(n){await te(n,"incident-ack",e("aiops.msg.incidentAcked"))}async function xe(n){await te(n,"incident-resolve",e("aiops.msg.incidentResolved"))}async function Fe(n){await te(n,"incident-close",e("aiops.msg.incidentClosed"))}async function te(n,d,m){try{const{output:k}=await s.execute(`ops ${d} ${n.id} --json`,8e3);if(/error|失败|invalid/i.test(k)&&!/"acknowledged"|"resolved"|"closed"/.test(k)){f.error(e("aiops.msg.incidentTransitionFailed")+": "+k.slice(0,120));return}f.success(m),await L()}catch(k){f.error(e("aiops.msg.incidentTransitionFailed")+": "+(k?.message||k))}}async function we(n){try{const{output:d}=await s.execute(`ops postmortem ${n.id}`,12e3);ue.info({title:e("aiops.msg.postmortemTitle",{id:n.id.slice(0,8)}),width:720,content:()=>re("pre",{style:"white-space: pre-wrap; max-height: 60vh; overflow: auto; font-size: 12px; padding: 8px; background: rgba(0,0,0,.04); border-radius: 4px;"},d||e("aiops.msg.postmortemEmpty"))})}catch(d){f.error(e("aiops.msg.postmortemFailed")+": "+(d?.message||d))}}async function Re(n,d){const m=d?"on":"off";try{const{output:k}=await s.execute(`ops playbook-toggle ${n.id} ${m} --json`,8e3);if(/error|失败/i.test(k)&&!/"enabled"/.test(k)){f.error(e("aiops.msg.playbookToggleFailed")+": "+k.slice(0,120));return}f.success(e(d?"aiops.msg.playbookEnabled":"aiops.msg.playbookDisabled")),await L()}catch(k){f.error(e("aiops.msg.playbookToggleFailed")+": "+(k?.message||k))}}async function Ae(n,d){try{const{output:m}=await s.execute(`ops playbook-record ${n.id} ${d} --json`,8e3);if(/error|失败/i.test(m)&&!/"recorded"/.test(m)){f.error(e("aiops.msg.playbookRecordFailed")+": "+m.slice(0,120));return}f.success(e(d==="success"?"aiops.msg.playbookRecordSuccess":"aiops.msg.playbookRecordFailure")),await L()}catch(m){f.error(e("aiops.msg.playbookRecordFailed")+": "+(m?.message||m))}}function oe(){x.severity="P3",x.metric="",x.description=""}function le(){_.name="",_.triggerJson="",_.stepsJson=""}function ie(){M.metric="",M.values=""}se(L);const ne={ws:s,t:e,loading:P,creating:N,detecting:w,incidents:j,playbooks:X,baselines:$,stats:D,activeTab:I,incidentSeverityFilter:R,incidentStatusFilter:T,showIncidentModal:W,showPlaybookModal:A,showBaselineModal:O,showDetectModal:q,incidentForm:x,playbookForm:_,baselineForm:M,detectForm:U,detectResult:J,incidentColumns:ee,playbookColumns:F,baselineColumns:Z,openCount:B,filteredIncidents:V,statusLabel:K,statusColor:ae,severityColor:i,reasonLabel:c,truncate:E,formatDurationMs:ve,handleNewClick:ge,loadAll:L,createIncident:ke,createPlaybook:_e,updateBaseline:he,detectAnomaly:Ce,ackIncident:Se,resolveIncident:xe,closeIncident:Fe,runIncidentTransition:te,generatePostmortem:we,togglePlaybook:Re,recordRun:Ae,resetIncidentForm:oe,resetPlaybookForm:le,resetBaselineForm:ie,ref:C,computed:Q,onMounted:se,reactive:Y,h:re,get ReloadOutlined(){return Ue},get PlusOutlined(){return je},get AlertOutlined(){return Ne},get RocketOutlined(){return Le},get LineChartOutlined(){return Ee},get FundOutlined(){return Te},get ExclamationCircleOutlined(){return Pe},get CheckCircleOutlined(){return Oe},get message(){return f},get Modal(){return ue},get useI18n(){return ce},get useWsStore(){return de},get parseIncidents(){return pe},get parsePlaybooks(){return me},get parseBaselines(){return ye},get parseDetectResult(){return fe},get parseStats(){return be},get formatOpsTime(){return Ke},get SEVERITIES(){return De},get INCIDENT_STATUSES(){return Me}};return Object.defineProperty(ne,"__isScriptSetup",{enumerable:!1,value:!0}),ne}},We={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ze={class:"page-title"},Ye={class:"page-sub"},Ge={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},He={class:"filter-bar"},Xe={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},$e={key:1,style:{color:"var(--text-muted)"}},et={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},tt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ot={style:{color:"var(--text-primary)","font-weight":"500"}},lt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},it={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},rt={style:{color:"#1677ff"}},dt={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},ct={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},yt={key:1,style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},ft={key:2,style:{"margin-top":"8px"}};function bt(t,a,s,e,P,N){const w=b("a-button"),j=b("a-menu-item"),X=b("a-menu"),$=b("a-dropdown"),D=b("a-space"),I=b("a-statistic"),R=b("a-card"),T=b("a-col"),W=b("a-row"),A=b("a-tag"),O=b("a-radio-button"),q=b("a-radio-group"),x=b("a-table"),_=b("a-tab-pane"),M=b("a-switch"),U=b("a-tabs"),J=b("a-select-option"),ee=b("a-select"),F=b("a-form-item"),Z=b("a-input"),B=b("a-textarea"),V=b("a-form"),K=b("a-modal"),ae=b("a-input-number");return u(),v("div",null,[S("div",We,[S("div",null,[S("h2",Ze,r(t.$t("aiops.title")),1),S("p",Ye,r(t.$t("aiops.subtitle")),1)]),o(D,null,{default:l(()=>[o(w,{loading:e.loading,onClick:e.loadAll},{icon:l(()=>[o(e.ReloadOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.refresh")),1)]),_:1},8,["loading"]),o($,{trigger:["click"]},{overlay:l(()=>[o(X,{onClick:e.handleNewClick},{default:l(()=>[o(j,{key:"incident"},{default:l(()=>[o(e.AlertOutlined),y(" "+r(t.$t("aiops.actions.incident")),1)]),_:1}),o(j,{key:"playbook"},{default:l(()=>[o(e.RocketOutlined),y(" "+r(t.$t("aiops.actions.playbook")),1)]),_:1}),o(j,{key:"baseline"},{default:l(()=>[o(e.LineChartOutlined),y(" "+r(t.$t("aiops.actions.baseline")),1)]),_:1}),o(j,{key:"detect"},{default:l(()=>[o(e.FundOutlined),y(" "+r(t.$t("aiops.actions.detect")),1)]),_:1})]),_:1})]),default:l(()=>[o(w,{type:"primary"},{icon:l(()=>[o(e.PlusOutlined)]),default:l(()=>[y(" "+r(t.$t("aiops.newDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stats overview "),o(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.incidents"),value:e.stats.incidents.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:l(()=>[o(e.AlertOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.pending"),value:e.stats.incidents.byStatus.open+e.stats.incidents.byStatus.acknowledged,"value-style":{color:e.openCount>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.playbooks"),value:e.stats.playbooks.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:l(()=>[o(e.RocketOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:l(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.enabled"),value:e.stats.playbooks.enabled,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:l(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(T,{xs:24,sm:8,lg:4},{default:l(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(I,{title:t.$t("aiops.stats.baselines"),value:e.stats.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:l(()=>[o(e.LineChartOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Severity breakdown bar "),e.stats.incidents.total>0?(u(),h(R,{key:0,title:t.$t("aiops.severityCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:l(()=>[o(D,{size:[12,8],wrap:""},{default:l(()=>[(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(A,{key:i,color:e.severityColor(i),style:{"font-size":"13px",padding:"2px 10px"}},{default:l(()=>[y(r(i)+": "+r(e.stats.incidents.bySeverity[i]||0),1)]),_:2},1032,["color"]))),128)),S("span",Ge,r(t.$t("aiops.avgResolveLabel",{time:e.formatDurationMs(e.stats.incidents.avgResolveMs)})),1)]),_:1})]),_:1},8,["title"])):p("v-if",!0),p(" Tabs "),o(U,{activeKey:e.activeTab,"onUpdate:activeKey":a[2]||(a[2]=i=>e.activeTab=i),class:"aiops-tabs"},{default:l(()=>[p(" ── Incidents tab ─────────────────────────────────────────── "),o(_,{key:"incidents",tab:t.$t("aiops.tabs.incidents")},{default:l(()=>[S("div",He,[o(q,{value:e.incidentSeverityFilter,"onUpdate:value":a[0]||(a[0]=i=>e.incidentSeverityFilter=i),size:"small","button-style":"solid"},{default:l(()=>[o(O,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.all")),1)]),_:1}),(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(O,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(q,{value:e.incidentStatusFilter,"onUpdate:value":a[1]||(a[1]=i=>e.incidentStatusFilter=i),size:"small"},{default:l(()=>[o(O,{value:""},{default:l(()=>[y(r(t.$t("aiops.filter.allStatuses")),1)]),_:1}),(u(!0),v(z,null,G(e.INCIDENT_STATUSES,i=>(u(),h(O,{key:i,value:i},{default:l(()=>[y(r(e.statusLabel(i)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(x,{columns:e.incidentColumns,"data-source":e.filteredIncidents,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="severity"?(u(),h(A,{key:0,color:e.severityColor(c.severity),style:{"font-weight":"600"}},{default:l(()=>[y(r(c.severity),1)]),_:2},1032,["color"])):p("v-if",!0),i.key==="metric"?(u(),v(z,{key:1},[c.anomalyMetric?(u(),v("span",Xe,r(c.anomalyMetric),1)):(u(),v("span",$e,"—"))],64)):p("v-if",!0),i.key==="description"?(u(),v("span",et,r(e.truncate(c.description,80)||"—"),1)):p("v-if",!0),i.key==="status"?(u(),h(A,{key:3,color:e.statusColor(c.status)},{default:l(()=>[y(r(e.statusLabel(c.status)),1)]),_:2},1032,["color"])):p("v-if",!0),i.key==="createdAt"?(u(),v("span",tt,r(e.formatOpsTime(c.createdAt)),1)):p("v-if",!0),i.key==="action"?(u(),v(z,{key:5},[c.status==="open"?(u(),h(w,{key:0,size:"small",type:"link",onClick:E=>e.ackIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.ack")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="open"||c.status==="acknowledged"?(u(),h(w,{key:1,size:"small",type:"link",onClick:E=>e.resolveIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.resolve")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="resolved"?(u(),h(w,{key:2,size:"small",type:"link",onClick:E=>e.closeIncident(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.close")),1)]),_:1},8,["onClick"])):p("v-if",!0),c.status==="resolved"||c.status==="closed"?(u(),h(w,{key:3,size:"small",type:"link",onClick:E=>e.generatePostmortem(c)},{default:l(()=>[y(r(t.$t("aiops.incidentActions.postmortem")),1)]),_:1},8,["onClick"])):p("v-if",!0)],64)):p("v-if",!0)]),emptyText:l(()=>[S("div",at,[o(e.AlertOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(e.incidentSeverityFilter||e.incidentStatusFilter?t.$t("aiops.table.incidentEmptyFiltered"):t.$t("aiops.table.incidentEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Playbooks tab ─────────────────────────────────────────── "),o(_,{key:"playbooks",tab:t.$t("aiops.tabs.playbooks")},{default:l(()=>[o(x,{columns:e.playbookColumns,"data-source":e.playbooks,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="name"?(u(),v(z,{key:0},[S("span",ot,r(c.name),1),c.triggerCondition?(u(),v("div",lt,r(e.truncate(c.triggerCondition,80)),1)):p("v-if",!0)],64)):p("v-if",!0),i.key==="enabled"?(u(),h(M,{key:1,checked:c.enabled,size:"small",onChange:E=>e.togglePlaybook(c,E)},null,8,["checked","onChange"])):p("v-if",!0),i.key==="stats"?(u(),v(z,{key:2},[o(A,{color:"green",style:{"font-size":"11px"}},{default:l(()=>[y(r(t.$t("aiops.table.successCount",{n:c.successCount})),1)]),_:2},1024),c.failureCount>0?(u(),h(A,{key:0,color:"red",style:{"font-size":"11px","margin-left":"4px"}},{default:l(()=>[y(r(t.$t("aiops.table.failureCount",{n:c.failureCount})),1)]),_:2},1024)):p("v-if",!0)],64)):p("v-if",!0),i.key==="createdAt"?(u(),v("span",it,r(e.formatOpsTime(c.createdAt)),1)):p("v-if",!0),i.key==="action"?(u(),v(z,{key:4},[o(w,{size:"small",type:"link",onClick:E=>e.recordRun(c,"success")},{default:l(()=>[y(r(t.$t("aiops.playbookActions.success")),1)]),_:1},8,["onClick"]),o(w,{size:"small",type:"link",danger:"",onClick:E=>e.recordRun(c,"failure")},{default:l(()=>[y(r(t.$t("aiops.playbookActions.failure")),1)]),_:1},8,["onClick"])],64)):p("v-if",!0)]),emptyText:l(()=>[S("div",nt,[o(e.RocketOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(t.$t("aiops.table.playbookEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Baselines tab ─────────────────────────────────────────── "),o(_,{key:"baselines",tab:t.$t("aiops.tabs.baselines")},{default:l(()=>[o(x,{columns:e.baselineColumns,"data-source":e.baselines,pagination:{pageSize:20,showTotal:i=>t.$t("aiops.table.totalSuffix",{n:i})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:i,record:c})=>[i.key==="metric"?(u(),v("span",st,r(c.metricName),1)):p("v-if",!0),i.key==="mean"?(u(),v(z,{key:1},[S("span",rt,r(c.mean),1),S("span",dt,"σ "+r(c.stdDev),1)],64)):p("v-if",!0),i.key==="iqr"?(u(),v("span",ct," Q1 "+r(c.q1)+" / Q3 "+r(c.q3),1)):p("v-if",!0),i.key==="sampleCount"?(u(),h(A,{key:3,color:"blue",style:{"font-size":"11px"}},{default:l(()=>[y(r(c.sampleCount),1)]),_:2},1024)):p("v-if",!0),i.key==="updatedAt"?(u(),v("span",ut,r(e.formatOpsTime(c.updatedAt)),1)):p("v-if",!0)]),emptyText:l(()=>[S("div",pt,[o(e.LineChartOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+r(t.$t("aiops.table.baselineEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),p(" ── Create incident modal ─────────────────────────────────── "),o(K,{open:e.showIncidentModal,"onUpdate:open":a[6]||(a[6]=i=>e.showIncidentModal=i),title:t.$t("aiops.incident_modal.title"),"confirm-loading":e.creating,width:520,"ok-text":t.$t("aiops.incident_modal.ok"),"cancel-text":t.$t("aiops.incident_modal.cancel"),onOk:e.createIncident,onCancel:e.resetIncidentForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.incident_modal.severityLabel")},{default:l(()=>[o(ee,{value:e.incidentForm.severity,"onUpdate:value":a[3]||(a[3]=i=>e.incidentForm.severity=i)},{default:l(()=>[(u(!0),v(z,null,G(e.SEVERITIES,i=>(u(),h(J,{key:i,value:i},{default:l(()=>[y(r(i),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.metricLabel")},{default:l(()=>[o(Z,{value:e.incidentForm.metric,"onUpdate:value":a[4]||(a[4]=i=>e.incidentForm.metric=i),placeholder:t.$t("aiops.incident_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.incident_modal.descLabel"),required:""},{default:l(()=>[o(B,{value:e.incidentForm.description,"onUpdate:value":a[5]||(a[5]=i=>e.incidentForm.description=i),"auto-size":{minRows:3,maxRows:6}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Create playbook modal ─────────────────────────────────── "),o(K,{open:e.showPlaybookModal,"onUpdate:open":a[10]||(a[10]=i=>e.showPlaybookModal=i),title:t.$t("aiops.playbook_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("aiops.playbook_modal.ok"),"cancel-text":t.$t("aiops.playbook_modal.cancel"),onOk:e.createPlaybook,onCancel:e.resetPlaybookForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.playbook_modal.nameLabel"),required:""},{default:l(()=>[o(Z,{value:e.playbookForm.name,"onUpdate:value":a[7]||(a[7]=i=>e.playbookForm.name=i),placeholder:t.$t("aiops.playbook_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.playbook_modal.triggerLabel")},{default:l(()=>[o(B,{value:e.playbookForm.triggerJson,"onUpdate:value":a[8]||(a[8]=i=>e.playbookForm.triggerJson=i),placeholder:t.$t("aiops.playbook_modal.triggerPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.playbook_modal.stepsLabel")},{default:l(()=>[o(B,{value:e.playbookForm.stepsJson,"onUpdate:value":a[9]||(a[9]=i=>e.playbookForm.stepsJson=i),placeholder:t.$t("aiops.playbook_modal.stepsPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Update baseline modal ─────────────────────────────────── "),o(K,{open:e.showBaselineModal,"onUpdate:open":a[13]||(a[13]=i=>e.showBaselineModal=i),title:t.$t("aiops.baseline_modal.title"),"confirm-loading":e.creating,width:500,"ok-text":t.$t("aiops.baseline_modal.ok"),"cancel-text":t.$t("aiops.baseline_modal.cancel"),onOk:e.updateBaseline,onCancel:e.resetBaselineForm},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.baseline_modal.metricLabel"),required:""},{default:l(()=>[o(Z,{value:e.baselineForm.metric,"onUpdate:value":a[11]||(a[11]=i=>e.baselineForm.metric=i),placeholder:t.$t("aiops.baseline_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.baseline_modal.valuesLabel"),required:""},{default:l(()=>[o(B,{value:e.baselineForm.values,"onUpdate:value":a[12]||(a[12]=i=>e.baselineForm.values=i),placeholder:t.$t("aiops.baseline_modal.valuesPlaceholder"),"auto-size":{minRows:3,maxRows:8}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Detect anomaly modal ──────────────────────────────────── "),o(K,{open:e.showDetectModal,"onUpdate:open":a[17]||(a[17]=i=>e.showDetectModal=i),title:t.$t("aiops.detect_modal.title"),"confirm-loading":e.detecting,width:500,"ok-text":t.$t("aiops.detect_modal.ok"),"cancel-text":t.$t("aiops.detect_modal.cancel"),onOk:e.detectAnomaly},{default:l(()=>[o(V,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(F,{label:t.$t("aiops.detect_modal.metricLabel"),required:""},{default:l(()=>[o(ee,{value:e.detectForm.metric,"onUpdate:value":a[14]||(a[14]=i=>e.detectForm.metric=i),"show-search":"",placeholder:t.$t("aiops.detect_modal.metricPlaceholder")},{default:l(()=>[(u(!0),v(z,null,G(e.baselines,i=>(u(),h(J,{key:i.metricName,value:i.metricName},{default:l(()=>[y(r(t.$t("aiops.detect_modal.metricOptionLabel",{name:i.metricName,count:i.sampleCount})),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.detect_modal.valueLabel"),required:""},{default:l(()=>[o(ae,{value:e.detectForm.value,"onUpdate:value":a[15]||(a[15]=i=>e.detectForm.value=i),style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(F,{label:t.$t("aiops.detect_modal.algorithmLabel")},{default:l(()=>[o(q,{value:e.detectForm.algorithm,"onUpdate:value":a[16]||(a[16]=i=>e.detectForm.algorithm=i)},{default:l(()=>[o(O,{value:"z_score"},{default:l(()=>[...a[18]||(a[18]=[y("Z-Score (3σ)",-1)])]),_:1}),o(O,{value:"iqr"},{default:l(()=>[...a[19]||(a[19]=[y("IQR (1.5×)",-1)])]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),e.detectResult?(u(),h(R,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:l(()=>[o(I,{title:t.$t("aiops.detect_modal.resultTitle"),value:e.detectResult.anomaly?t.$t("aiops.detect_modal.anomaly"):t.$t("aiops.detect_modal.normal"),"value-style":{color:e.detectResult.anomaly?"#ff4d4f":"#52c41a"}},null,8,["title","value","value-style"]),e.detectResult.reason&&!e.detectResult.anomaly?(u(),v("div",mt,r(t.$t("aiops.detect_modal.reasonLine",{reason:e.reasonLabel(e.detectResult.reason)})),1)):p("v-if",!0),e.detectResult.baseline?(u(),v("div",yt,[S("div",null,r(t.$t("aiops.detect_modal.scoreLine",{score:e.detectResult.score,threshold:e.detectResult.threshold})),1),S("div",null,r(t.$t("aiops.detect_modal.baselineLine",{mean:e.detectResult.baseline.mean,stdDev:e.detectResult.baseline.stdDev})),1)])):p("v-if",!0),e.detectResult.incidentId?(u(),v("div",ft,[o(A,{color:e.severityColor(e.detectResult.severity)},{default:l(()=>[y(r(t.$t("aiops.detect_modal.incidentCreated",{severity:e.detectResult.severity})),1)]),_:1},8,["color"])])):p("v-if",!0)]),_:1})):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Jt=ze(Qe,[["render",bt],["__scopeId","data-v-b804918b"],["__file","/tmp/cc-web-panel-RrTzBJ/repo/packages/web-panel/src/views/AIOps.vue"]]);export{Jt as default};
@@ -1 +1 @@
1
- import{N as b,f as i,t as p}from"./index-CmU631Je.js";import{f as m,s as r,d as y,o as O,c as P}from"./vendor-BvqAck49.js";import{B as N,c as R}from"./index-DjG82V0v.js";const x=()=>{const n=r(!1);return m(()=>{n.value=!0}),n},A={type:{type:String},actionFn:Function,close:Function,autofocus:Boolean,prefixCls:String,buttonProps:p(),emitEvent:Boolean,quitOnNullishReturnValue:Boolean};function d(n){return!!(n&&n.then)}const j=y({compatConfig:{MODE:3},name:"ActionButton",props:A,setup(n,g){let{slots:B}=g;const l=r(!1),c=r(),a=r(!1);let f;const v=x();O(()=>{n.autofocus&&(f=setTimeout(()=>{var e,t;return(t=(e=b(c.value))===null||e===void 0?void 0:e.focus)===null||t===void 0?void 0:t.call(e)}))}),m(()=>{clearTimeout(f)});const u=function(){for(var e,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];(e=n.close)===null||e===void 0||e.call(n,...o)},h=e=>{d(e)&&(a.value=!0,e.then(function(){v.value||(a.value=!1),u(...arguments),l.value=!1},t=>(v.value||(a.value=!1),l.value=!1,Promise.reject(t))))},C=e=>{const{actionFn:t}=n;if(l.value)return;if(l.value=!0,!t){u();return}let o;if(n.emitEvent){if(o=t(e),n.quitOnNullishReturnValue&&!d(o)){l.value=!1,u(e);return}}else if(t.length)o=t(n.close),l.value=!1;else if(o=t(),!o){u();return}h(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return P(N,i(i(i({},R(e)),{},{onClick:C,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{j as A};
1
+ import{N as b,f as i,t as p}from"./index-oJQgRCrR.js";import{f as m,s as r,d as y,o as O,c as P}from"./vendor-BvqAck49.js";import{B as N,c as R}from"./index-BRAgl2J_.js";const x=()=>{const n=r(!1);return m(()=>{n.value=!0}),n},A={type:{type:String},actionFn:Function,close:Function,autofocus:Boolean,prefixCls:String,buttonProps:p(),emitEvent:Boolean,quitOnNullishReturnValue:Boolean};function d(n){return!!(n&&n.then)}const j=y({compatConfig:{MODE:3},name:"ActionButton",props:A,setup(n,g){let{slots:B}=g;const l=r(!1),c=r(),a=r(!1);let f;const v=x();O(()=>{n.autofocus&&(f=setTimeout(()=>{var e,t;return(t=(e=b(c.value))===null||e===void 0?void 0:e.focus)===null||t===void 0?void 0:t.call(e)}))}),m(()=>{clearTimeout(f)});const u=function(){for(var e,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];(e=n.close)===null||e===void 0||e.call(n,...o)},h=e=>{d(e)&&(a.value=!0,e.then(function(){v.value||(a.value=!1),u(...arguments),l.value=!1},t=>(v.value||(a.value=!1),l.value=!1,Promise.reject(t))))},C=e=>{const{actionFn:t}=n;if(l.value)return;if(l.value=!0,!t){u();return}let o;if(n.emitEvent){if(o=t(e),n.quitOnNullishReturnValue&&!d(o)){l.value=!1,u(e);return}}else if(t.length)o=t(n.close),l.value=!1;else if(o=t(),!o){u();return}h(o)};return()=>{const{type:e,prefixCls:t,buttonProps:o}=n;return P(N,i(i(i({},R(e)),{},{onClick:C,loading:a.value,prefixCls:t},o),{},{ref:c}),B)}}});export{j as A};