chainlesschain 0.162.29 → 0.162.31

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 (420) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/AIOps-BqWP6FKu.js +1 -0
  3. package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +1 -0
  4. package/src/assets/web-panel/assets/{ActionButton-wRdLFzBQ.js → ActionButton-CXwMgOvX.js} +1 -1
  5. package/src/assets/web-panel/assets/Analytics-DAebZ4IY.js +3 -0
  6. package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +1 -0
  7. package/src/assets/web-panel/assets/AppLayout-CYsqYoME.js +9 -0
  8. package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +1 -0
  9. package/src/assets/web-panel/assets/Audit-BbTtX1Nf.js +1 -0
  10. package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +1 -0
  11. package/src/assets/web-panel/assets/Backup-DgqY2Eb-.js +1 -0
  12. package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +1 -0
  13. package/src/assets/web-panel/assets/BaseInput-Cq2ZuSoO.js +1 -0
  14. package/src/assets/web-panel/assets/Chat-D2kqpUyO.js +8 -0
  15. package/src/assets/web-panel/assets/Chat-DDh58PCf.css +1 -0
  16. package/src/assets/web-panel/assets/ChatBubbleRenderer-C-svYkrC.js +1 -0
  17. package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +1 -0
  18. package/src/assets/web-panel/assets/{Checkbox-DoGqmF9g.js → Checkbox-_9swHpyc.js} +1 -1
  19. package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +1 -0
  20. package/src/assets/web-panel/assets/Codegen-Cr9YbCPl.js +1 -0
  21. package/src/assets/web-panel/assets/{Col-C-9-jORK.js → Col--wdpCMxx.js} +1 -1
  22. package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +1 -0
  23. package/src/assets/web-panel/assets/Community-DuFcVnLu.js +1 -0
  24. package/src/assets/web-panel/assets/{Compact-CemvxU3z.js → Compact-1yzYeT04.js} +1 -1
  25. package/src/assets/web-panel/assets/Compliance-Dq3aU9Df.js +1 -0
  26. package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +1 -0
  27. package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +1 -0
  28. package/src/assets/web-panel/assets/Cowork-CrWcnIg8.js +6 -0
  29. package/src/assets/web-panel/assets/Cron-Bh6fKZ0h.js +2 -0
  30. package/src/assets/web-panel/assets/Crosschain-8ofPaWVW.js +1 -0
  31. package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +1 -0
  32. package/src/assets/web-panel/assets/DID-D3EiYm3w.js +2 -0
  33. package/src/assets/web-panel/assets/DID-DVsYcgvs.css +1 -0
  34. package/src/assets/web-panel/assets/Dashboard-BFjEdFne.js +3 -0
  35. package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +1 -0
  36. package/src/assets/web-panel/assets/Dropdown-pYVPcP6O.js +1 -0
  37. package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +1 -0
  38. package/src/assets/web-panel/assets/EmailListRenderer-zBPodwJ1.js +1 -0
  39. package/src/assets/web-panel/assets/FamilyGuardDashboard-CyQTW6PW.js +1 -0
  40. package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +1 -0
  41. package/src/assets/web-panel/assets/Federation-Ctaq3zYq.js +1 -0
  42. package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +1 -0
  43. package/src/assets/web-panel/assets/FormItemContext-CWYJCLq1.js +2 -0
  44. package/src/assets/web-panel/assets/GenericCardRenderer-B1g6t9R9.js +1 -0
  45. package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +1 -0
  46. package/src/assets/web-panel/assets/{Git-DPuaGtg7.css → Git-BdHhxBWR.css} +1 -1
  47. package/src/assets/web-panel/assets/Git-DH-v8iwd.js +2 -0
  48. package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +1 -0
  49. package/src/assets/web-panel/assets/Governance-jZxXvOs5.js +1 -0
  50. package/src/assets/web-panel/assets/Inference-D07LRghn.js +1 -0
  51. package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +1 -0
  52. package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +1 -0
  53. package/src/assets/web-panel/assets/KnowledgeGraph-DnGtRZhx.js +1 -0
  54. package/src/assets/web-panel/assets/Logs-D2pM9C4W.js +2 -0
  55. package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +1 -0
  56. package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +1 -0
  57. package/src/assets/web-panel/assets/Marketplace-UyIO7C7r.js +1 -0
  58. package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +1 -0
  59. package/src/assets/web-panel/assets/McpTools-Bf1gvZPf.js +7 -0
  60. package/src/assets/web-panel/assets/Memory-C1bWj4RN.js +2 -0
  61. package/src/assets/web-panel/assets/Memory-CleW_R6V.css +1 -0
  62. package/src/assets/web-panel/assets/MobileBridge-C_Ot1H_a.js +3 -0
  63. package/src/assets/web-panel/assets/MobileBridge-zJpPuf4E.css +1 -0
  64. package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +1 -0
  65. package/src/assets/web-panel/assets/MobileProjects-zr-PpsT_.js +1 -0
  66. package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +1 -0
  67. package/src/assets/web-panel/assets/Mtc-CnzFUz5J.js +6 -0
  68. package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +1 -0
  69. package/src/assets/web-panel/assets/MtcAudit-CAAh99wz.js +19 -0
  70. package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +1 -0
  71. package/src/assets/web-panel/assets/Multisig-D6IAg6HE.js +13 -0
  72. package/src/assets/web-panel/assets/NLProgramming-BFMarxb0.js +1 -0
  73. package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +1 -0
  74. package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +1 -0
  75. package/src/assets/web-panel/assets/Notes-BRp9ro3t.js +7 -0
  76. package/src/assets/web-panel/assets/NotificationSettings-C0Au3Cxb.js +1 -0
  77. package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +1 -0
  78. package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +1 -0
  79. package/src/assets/web-panel/assets/OrderTableRenderer-ISp6btRY.js +1 -0
  80. package/src/assets/web-panel/assets/Organization-DYoxLBRX.js +4 -0
  81. package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +1 -0
  82. package/src/assets/web-panel/assets/{Overflow-BFxt7NlK.js → Overflow-rO8JJWGJ.js} +1 -1
  83. package/src/assets/web-panel/assets/{OverrideContext-C_4H9tGA.js → OverrideContext-C2r4vyBb.js} +1 -1
  84. package/src/assets/web-panel/assets/P2P-DJleeXIK.js +2 -0
  85. package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +1 -0
  86. package/src/assets/web-panel/assets/PdhVaultBrowser-DM5qghFp.js +7 -0
  87. package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +1 -0
  88. package/src/assets/web-panel/assets/Permissions-D5v4Beya.js +4 -0
  89. package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +1 -0
  90. package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +1 -0
  91. package/src/assets/web-panel/assets/PersonalDataHub-c2ZTX0Pv.js +9 -0
  92. package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +1 -0
  93. package/src/assets/web-panel/assets/Pipeline-Crrkyhpz.js +1 -0
  94. package/src/assets/web-panel/assets/Privacy-DZVyrJKa.js +1 -0
  95. package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +1 -0
  96. package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +1 -0
  97. package/src/assets/web-panel/assets/ProjectInit-DKg7J0gz.js +2 -0
  98. package/src/assets/web-panel/assets/ProjectSettings-3ndmTvVH.js +2 -0
  99. package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +1 -0
  100. package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +1 -0
  101. package/src/assets/web-panel/assets/Projects-ll5wnj2L.js +1 -0
  102. package/src/assets/web-panel/assets/Providers-BeqBVMhB.js +1 -0
  103. package/src/assets/web-panel/assets/Providers-C6q_fvea.css +1 -0
  104. package/src/assets/web-panel/assets/QuickAsk-DKAAxzuA.js +1 -0
  105. package/src/assets/web-panel/assets/Recommend-Byu7IGei.js +1 -0
  106. package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +1 -0
  107. package/src/assets/web-panel/assets/Reputation-BKhWAmCu.js +1 -0
  108. package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +1 -0
  109. package/src/assets/web-panel/assets/Row-BFtn11O6.js +1 -0
  110. package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +1 -0
  111. package/src/assets/web-panel/assets/RssFeed-D5a0PT0k.js +3 -0
  112. package/src/assets/web-panel/assets/Search-DAkuaZNe.js +1 -0
  113. package/src/assets/web-panel/assets/Search-Klk29S7C.css +1 -0
  114. package/src/assets/web-panel/assets/Security-BmrukMHn.css +1 -0
  115. package/src/assets/web-panel/assets/Security-C79Ml2Ms.js +4 -0
  116. package/src/assets/web-panel/assets/Services-BBk_jH6-.js +2 -0
  117. package/src/assets/web-panel/assets/Services-DAnVNhUG.css +1 -0
  118. package/src/assets/web-panel/assets/{Skeleton-DL5ebkDK.js → Skeleton-Cy0VvL0M.js} +1 -1
  119. package/src/assets/web-panel/assets/Skills-BUu9owbR.css +1 -0
  120. package/src/assets/web-panel/assets/Skills-OQNky3uI.js +1 -0
  121. package/src/assets/web-panel/assets/Sla-CbX1f8xN.js +1 -0
  122. package/src/assets/web-panel/assets/Sla-sodqCU4a.css +1 -0
  123. package/src/assets/web-panel/assets/SpeechSettings-BIkoUjws.js +1 -0
  124. package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +1 -0
  125. package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +1 -0
  126. package/src/assets/web-panel/assets/SyncSettings-DG6Swk7G.js +2 -0
  127. package/src/assets/web-panel/assets/Tasks-C9R8sgyi.js +1 -0
  128. package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +1 -0
  129. package/src/assets/web-panel/assets/Templates-AaJPeCIz.js +1 -0
  130. package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +1 -0
  131. package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +1 -0
  132. package/src/assets/web-panel/assets/Tenant-jVFRofww.js +1 -0
  133. package/src/assets/web-panel/assets/Terminal-DHBMzfK6.js +3 -0
  134. package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +1 -0
  135. package/src/assets/web-panel/assets/TimelineRenderer-9RFfOHSI.js +1 -0
  136. package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +1 -0
  137. package/src/assets/web-panel/assets/Tokens-CynVae-o.css +1 -0
  138. package/src/assets/web-panel/assets/Tokens-ZTfwuABF.js +1 -0
  139. package/src/assets/web-panel/assets/{Trigger-Rzs-a8Xf.js → Trigger-Xo7uZNQs.js} +1 -1
  140. package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +1 -0
  141. package/src/assets/web-panel/assets/Trust-C0cTPYvn.js +1 -0
  142. package/src/assets/web-panel/assets/UkeySign-DmMKio71.js +1 -0
  143. package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +1 -0
  144. package/src/assets/web-panel/assets/VideoEditing-DP7B-oGT.js +1 -0
  145. package/src/assets/web-panel/assets/Wallet-B1kZDARo.js +4 -0
  146. package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +1 -0
  147. package/src/assets/web-panel/assets/WebAuthn-Bo5kBx27.js +5 -0
  148. package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +1 -0
  149. package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +1 -0
  150. package/src/assets/web-panel/assets/WorkflowEditor-DGI9SNHH.js +1 -0
  151. package/src/assets/web-panel/assets/{_getTag-BVc6NQ_K.js → _getTag-DnrRH4E6.js} +1 -1
  152. package/src/assets/web-panel/assets/{chat-C7tndXfg.js → chat-y97W1CIG.js} +1 -1
  153. package/src/assets/web-panel/assets/{collapseMotion-DfnRZex1.js → collapseMotion-mxzzcDsg.js} +1 -1
  154. package/src/assets/web-panel/assets/{colors-dUAGx-eS.js → colors-DtTNo0sH.js} +1 -1
  155. package/src/assets/web-panel/assets/{compact-item-X13u92RU.js → compact-item-D0q0exuS.js} +1 -1
  156. package/src/assets/web-panel/assets/createContext-D7pLFs2I.js +1 -0
  157. package/src/assets/web-panel/assets/{debounce-D9xTw4Sx.js → debounce-CFGTTtN3.js} +1 -1
  158. package/src/assets/web-panel/assets/devWarning-BDK34w0I.js +1 -0
  159. package/src/assets/web-panel/assets/echarts-jxgIOFUZ.js +25 -0
  160. package/src/assets/web-panel/assets/{hasIn-DGFXWm7Y.js → hasIn-CXjG5B2j.js} +1 -1
  161. package/src/assets/web-panel/assets/{icons--SBOhPAi.js → icons-DP3uiYxy.js} +4 -4
  162. package/src/assets/web-panel/assets/{index-Deh_HoQ3.js → index-1dwtkcJv.js} +2 -2
  163. package/src/assets/web-panel/assets/index-4mWZhCzz.js +1 -0
  164. package/src/assets/web-panel/assets/index-6np5ESBM.js +1 -0
  165. package/src/assets/web-panel/assets/{index-Bewc5jaO.js → index-8jxbZupG.js} +1 -1
  166. package/src/assets/web-panel/assets/{index-DW1GR68q.js → index-B3y_4OdG.js} +1 -1
  167. package/src/assets/web-panel/assets/index-B4dPdrvC.js +1 -0
  168. package/src/assets/web-panel/assets/index-B6SaRuCI.js +1 -0
  169. package/src/assets/web-panel/assets/index-B9ekWb3I.js +1 -0
  170. package/src/assets/web-panel/assets/index-BJUf19Wd.js +73 -0
  171. package/src/assets/web-panel/assets/index-BO644Q4S.js +21 -0
  172. package/src/assets/web-panel/assets/index-BPXhU-jp.js +7 -0
  173. package/src/assets/web-panel/assets/index-BU944DeT.js +31 -0
  174. package/src/assets/web-panel/assets/index-B_hjkMtX.js +3 -0
  175. package/src/assets/web-panel/assets/index-BdhEYW2a.js +1 -0
  176. package/src/assets/web-panel/assets/{index-DBfn83eM.js → index-BgmvrPJH.js} +1 -1
  177. package/src/assets/web-panel/assets/index-BgyrM0UN.js +19 -0
  178. package/src/assets/web-panel/assets/{index-Cq-fdWWC.js → index-BnLrbXDA.js} +1 -1
  179. package/src/assets/web-panel/assets/{index-C54Ydkuz.js → index-BqVjUN8b.js} +4 -4
  180. package/src/assets/web-panel/assets/index-BzCPx1cq.js +21 -0
  181. package/src/assets/web-panel/assets/index-CFsPe2N7.js +3 -0
  182. package/src/assets/web-panel/assets/{index-C14mc-46.js → index-CKrbutAQ.js} +1 -1
  183. package/src/assets/web-panel/assets/index-CSdhC7Qo.js +1 -0
  184. package/src/assets/web-panel/assets/{index-BqX3jeij.js → index-Cbqu804A.js} +1 -1
  185. package/src/assets/web-panel/assets/{index-CvlrcZKy.js → index-CkGFqlYX.js} +4 -4
  186. package/src/assets/web-panel/assets/{index-CfX1DEtk.css → index-Cq93VfoF.css} +1 -1
  187. package/src/assets/web-panel/assets/index-Ct6xtKkc.js +1 -0
  188. package/src/assets/web-panel/assets/index-DY6KLlgG.js +1 -0
  189. package/src/assets/web-panel/assets/index-D_4WcI1V.js +13 -0
  190. package/src/assets/web-panel/assets/{index-Ced-t9AY.js → index-DjCawXk1.js} +3 -3
  191. package/src/assets/web-panel/assets/index-Dr45Nm9V.js +55 -0
  192. package/src/assets/web-panel/assets/index-EaIfumgW.js +1 -0
  193. package/src/assets/web-panel/assets/index-POaFzYGS.js +1 -0
  194. package/src/assets/web-panel/assets/index-TrBGgrwG.js +1 -0
  195. package/src/assets/web-panel/assets/{index-DrH9uW99.js → index-YWOEx3rP.js} +2 -2
  196. package/src/assets/web-panel/assets/{index-DZMiVgXE.js → index-_3wPBMKt.js} +1 -1
  197. package/src/assets/web-panel/assets/{index-CBnkvGxd.js → index-aarO4HT9.js} +1 -1
  198. package/src/assets/web-panel/assets/index-bVJvqDAz.js +1 -0
  199. package/src/assets/web-panel/assets/{index-BipKV1Yr.js → index-gFLQe31v.js} +2 -2
  200. package/src/assets/web-panel/assets/index-kvV0f4tV.js +12 -0
  201. package/src/assets/web-panel/assets/index-qoB3whR9.js +12 -0
  202. package/src/assets/web-panel/assets/{initDefaultProps-B8zdOlFC.js → initDefaultProps-BnXISaAa.js} +1 -1
  203. package/src/assets/web-panel/assets/{isPlainObject-_gz-soRW.js → isPlainObject-BWRMT62c.js} +1 -1
  204. package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +1 -0
  205. package/src/assets/web-panel/assets/motion-ChY7C0zJ.js +11 -0
  206. package/src/assets/web-panel/assets/{move-BioqdqDn.js → move-ByFZMFM5.js} +1 -1
  207. package/src/assets/web-panel/assets/{mtc-parser-Cc3pB9Xm.js → mtc-parser-BbAbUB-9.js} +1 -1
  208. package/src/assets/web-panel/assets/{omit-C1hn14Vc.js → omit-BYeliY1H.js} +1 -1
  209. package/src/assets/web-panel/assets/{pickAttrs-DgVG8oMj.js → pickAttrs-B9dcAKnu.js} +1 -1
  210. package/src/assets/web-panel/assets/{placementArrow-cJY6hoXZ.js → placementArrow-D3F_txz7.js} +1 -1
  211. package/src/assets/web-panel/assets/{responsiveObserve-DbUdURRx.js → responsiveObserve-ClkwY7wS.js} +1 -1
  212. package/src/assets/web-panel/assets/{slide-C2OEWnC4.js → slide-BNgy2Eea.js} +1 -1
  213. package/src/assets/web-panel/assets/{statusUtils-DghgcGqm.js → statusUtils-Bv3heMCD.js} +1 -1
  214. package/src/assets/web-panel/assets/{styleChecker-GoQ7uwU1.js → styleChecker-DVdlHbQm.js} +1 -1
  215. package/src/assets/web-panel/assets/useFlexGapSupport-alrRY5BK.js +1 -0
  216. package/src/assets/web-panel/assets/{useFs-CZCJDMup.js → useFs-CcVh0-Vu.js} +1 -1
  217. package/src/assets/web-panel/assets/{useMergedState-WwedrFR0.js → useMergedState-Cl2q1fes.js} +1 -1
  218. package/src/assets/web-panel/assets/{usePersonalDataHub-BjAS9b7w.js → usePersonalDataHub-CkkHPhyq.js} +1 -1
  219. package/src/assets/web-panel/assets/{useRefs-Cdq8EWeF.js → useRefs-DD9q4mOT.js} +1 -1
  220. package/src/assets/web-panel/assets/{useState-DGS1NOyn.js → useState-BK4hy8Ma.js} +1 -1
  221. package/src/assets/web-panel/assets/vendor-BvqAck49.js +42 -0
  222. package/src/assets/web-panel/assets/vnode-DWi0X9WN.js +1 -0
  223. package/src/assets/web-panel/assets/{zoom-CzyiNxpd.js → zoom-DCbqxxLH.js} +1 -1
  224. package/src/assets/web-panel/index.html +4 -4
  225. package/src/commands/agent.js +306 -1
  226. package/src/commands/ask.js +35 -1
  227. package/src/commands/checkpoint.js +239 -0
  228. package/src/commands/cost.js +114 -0
  229. package/src/commands/session.js +22 -2
  230. package/src/index.js +4 -0
  231. package/src/lib/file-checkpoint.js +300 -0
  232. package/src/lib/llm-pricing.js +227 -0
  233. package/src/lib/personal-data-hub-wiring.js +30 -0
  234. package/src/lib/recent-session.js +72 -0
  235. package/src/lib/session-picker.js +68 -0
  236. package/src/repl/agent-repl.js +58 -2
  237. package/src/repl/chat-repl.js +16 -1
  238. package/src/runtime/agent-core.js +68 -31
  239. package/src/runtime/fallback-model.js +109 -0
  240. package/src/runtime/file-ref-expander.js +258 -0
  241. package/src/runtime/headless-runner.js +576 -0
  242. package/src/runtime/headless-stream.js +302 -0
  243. package/src/runtime/policies/agent-policy.js +6 -0
  244. package/src/runtime/quiet-stdout.js +35 -0
  245. package/src/runtime/system-prompt.js +60 -0
  246. package/src/assets/web-panel/assets/AIOps-BWWsdf3s.js +0 -1
  247. package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +0 -1
  248. package/src/assets/web-panel/assets/Analytics-C1-TXmTC.css +0 -1
  249. package/src/assets/web-panel/assets/Analytics-CU1ellhG.js +0 -3
  250. package/src/assets/web-panel/assets/AppLayout-9pWRQa_t.css +0 -1
  251. package/src/assets/web-panel/assets/AppLayout-cXY-mRTd.js +0 -3
  252. package/src/assets/web-panel/assets/Audit-6ZMsXmrO.css +0 -1
  253. package/src/assets/web-panel/assets/Audit-CtQuC6zy.js +0 -1
  254. package/src/assets/web-panel/assets/Backup-CY9QozR7.css +0 -1
  255. package/src/assets/web-panel/assets/Backup-WeATa8CV.js +0 -1
  256. package/src/assets/web-panel/assets/BaseInput-BCu2Cejw.js +0 -1
  257. package/src/assets/web-panel/assets/Chat-Bj0XPlH8.js +0 -7
  258. package/src/assets/web-panel/assets/Chat-IlrLB9ZV.css +0 -1
  259. package/src/assets/web-panel/assets/ChatBubbleRenderer-Bpp2sN9W.js +0 -1
  260. package/src/assets/web-panel/assets/ChatBubbleRenderer-CO908iBt.css +0 -1
  261. package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +0 -1
  262. package/src/assets/web-panel/assets/Codegen-PeBhNei5.js +0 -1
  263. package/src/assets/web-panel/assets/Community-BvaB_Wcs.js +0 -1
  264. package/src/assets/web-panel/assets/Community-C2RejeOY.css +0 -1
  265. package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +0 -1
  266. package/src/assets/web-panel/assets/Compliance-DjquEqsU.js +0 -1
  267. package/src/assets/web-panel/assets/Cowork-Bv6Tm40_.js +0 -6
  268. package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +0 -1
  269. package/src/assets/web-panel/assets/Cron-D9fPIXV8.js +0 -2
  270. package/src/assets/web-panel/assets/Crosschain-C0WilDBF.js +0 -1
  271. package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +0 -1
  272. package/src/assets/web-panel/assets/DID-BX6k3jZi.css +0 -1
  273. package/src/assets/web-panel/assets/DID-CiGeAI1K.js +0 -2
  274. package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +0 -1
  275. package/src/assets/web-panel/assets/Dashboard-zqQuizB8.js +0 -3
  276. package/src/assets/web-panel/assets/Dropdown-_Mjb8yOR.js +0 -1
  277. package/src/assets/web-panel/assets/EmailListRenderer-C369EVhV.js +0 -1
  278. package/src/assets/web-panel/assets/EmailListRenderer-CVJ1j3Ll.css +0 -1
  279. package/src/assets/web-panel/assets/FamilyGuardDashboard-D8WsrCmn.js +0 -1
  280. package/src/assets/web-panel/assets/FamilyGuardDashboard-Df-D09Q4.css +0 -1
  281. package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +0 -1
  282. package/src/assets/web-panel/assets/Federation-Dq7CrAzj.js +0 -1
  283. package/src/assets/web-panel/assets/FormItemContext-C7TvuLVK.js +0 -1
  284. package/src/assets/web-panel/assets/GenericCardRenderer-BJUR1Emh.js +0 -1
  285. package/src/assets/web-panel/assets/GenericCardRenderer-DtJFcJYl.css +0 -1
  286. package/src/assets/web-panel/assets/Git-B5MdAp15.js +0 -2
  287. package/src/assets/web-panel/assets/Governance-BIbPWlSM.js +0 -1
  288. package/src/assets/web-panel/assets/Governance-BoipmXaM.css +0 -1
  289. package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +0 -1
  290. package/src/assets/web-panel/assets/Inference-vOz9J05E.js +0 -1
  291. package/src/assets/web-panel/assets/KnowledgeGraph-B_vUO-Td.js +0 -1
  292. package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +0 -1
  293. package/src/assets/web-panel/assets/Logs-BwPfxX3p.js +0 -2
  294. package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +0 -1
  295. package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +0 -1
  296. package/src/assets/web-panel/assets/Marketplace-T5HNwUjX.js +0 -1
  297. package/src/assets/web-panel/assets/McpTools-CDjHmzxH.css +0 -1
  298. package/src/assets/web-panel/assets/McpTools-CuKeBPxy.js +0 -5
  299. package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +0 -1
  300. package/src/assets/web-panel/assets/Memory-DmRW_sTE.js +0 -2
  301. package/src/assets/web-panel/assets/MobileBridge-DK2N_MJA.js +0 -3
  302. package/src/assets/web-panel/assets/MobileBridge-DwxX55b_.css +0 -1
  303. package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +0 -1
  304. package/src/assets/web-panel/assets/MobileProjects-wl3bXCnJ.js +0 -1
  305. package/src/assets/web-panel/assets/Mtc-C8e0941i.js +0 -6
  306. package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +0 -1
  307. package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +0 -1
  308. package/src/assets/web-panel/assets/MtcAudit-Cwigy2IR.js +0 -19
  309. package/src/assets/web-panel/assets/Multisig-BSfh_ncy.js +0 -7
  310. package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +0 -1
  311. package/src/assets/web-panel/assets/NLProgramming-BwzJAfJg.js +0 -1
  312. package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +0 -1
  313. package/src/assets/web-panel/assets/Notes-COE2q2gD.css +0 -1
  314. package/src/assets/web-panel/assets/Notes-uilHH6hE.js +0 -7
  315. package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +0 -1
  316. package/src/assets/web-panel/assets/NotificationSettings-DvM3DTPW.js +0 -1
  317. package/src/assets/web-panel/assets/OrderTableRenderer-BIEm3hZl.js +0 -1
  318. package/src/assets/web-panel/assets/OrderTableRenderer-BnOISpKI.css +0 -1
  319. package/src/assets/web-panel/assets/Organization-BX-cIO8M.css +0 -1
  320. package/src/assets/web-panel/assets/Organization-zxWoIwYM.js +0 -4
  321. package/src/assets/web-panel/assets/P2P-BsbToYKZ.js +0 -2
  322. package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +0 -1
  323. package/src/assets/web-panel/assets/PdhVaultBrowser-B9ZGFpn4.css +0 -1
  324. package/src/assets/web-panel/assets/PdhVaultBrowser-VU8vfhsS.js +0 -7
  325. package/src/assets/web-panel/assets/Permissions-C10Sd26B.js +0 -4
  326. package/src/assets/web-panel/assets/Permissions-C9WlkGl-.css +0 -1
  327. package/src/assets/web-panel/assets/PersonalDataHub-Bz5u9Gth.css +0 -1
  328. package/src/assets/web-panel/assets/PersonalDataHub-edJB7VeU.js +0 -2
  329. package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +0 -1
  330. package/src/assets/web-panel/assets/Pipeline-qNmVxn5A.js +0 -1
  331. package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +0 -1
  332. package/src/assets/web-panel/assets/Privacy-h78XF7eO.js +0 -1
  333. package/src/assets/web-panel/assets/ProjectInit-C9-vm1no.js +0 -2
  334. package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +0 -1
  335. package/src/assets/web-panel/assets/ProjectSettings-DpDNsQTb.js +0 -2
  336. package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +0 -1
  337. package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +0 -1
  338. package/src/assets/web-panel/assets/Projects-CwU3W4RD.js +0 -1
  339. package/src/assets/web-panel/assets/Providers-BNI-WkmA.css +0 -1
  340. package/src/assets/web-panel/assets/Providers-C3KZlUEI.js +0 -1
  341. package/src/assets/web-panel/assets/QuickAsk-CILvLGze.js +0 -1
  342. package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +0 -1
  343. package/src/assets/web-panel/assets/Recommend-XfFlk3BY.js +0 -1
  344. package/src/assets/web-panel/assets/Reputation-BqmWvaMD.js +0 -1
  345. package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +0 -1
  346. package/src/assets/web-panel/assets/Row-BEbjCI_X.js +0 -1
  347. package/src/assets/web-panel/assets/RssFeed-BlFC20eg.css +0 -1
  348. package/src/assets/web-panel/assets/RssFeed-CFukIl-a.js +0 -3
  349. package/src/assets/web-panel/assets/Search-B6RalzTB.css +0 -1
  350. package/src/assets/web-panel/assets/Search-dVPkf1o2.js +0 -1
  351. package/src/assets/web-panel/assets/Security-13K57V_v.css +0 -1
  352. package/src/assets/web-panel/assets/Security-DlRFaUrn.js +0 -4
  353. package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +0 -1
  354. package/src/assets/web-panel/assets/Services-DKy7AjpA.js +0 -2
  355. package/src/assets/web-panel/assets/Skills-BEqnpg2j.js +0 -1
  356. package/src/assets/web-panel/assets/Skills-BdjRyorN.css +0 -1
  357. package/src/assets/web-panel/assets/Sla-CZ9_lzPI.js +0 -1
  358. package/src/assets/web-panel/assets/Sla-K19oOyQc.css +0 -1
  359. package/src/assets/web-panel/assets/SpeechSettings-DVSY_ehZ.js +0 -1
  360. package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +0 -1
  361. package/src/assets/web-panel/assets/SyncSettings-C6cDrwDR.css +0 -1
  362. package/src/assets/web-panel/assets/SyncSettings-DgvsRpGt.js +0 -1
  363. package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +0 -1
  364. package/src/assets/web-panel/assets/Tasks-L5qXKsxK.js +0 -1
  365. package/src/assets/web-panel/assets/Templates-BWTV8-2E.css +0 -1
  366. package/src/assets/web-panel/assets/Templates-DR4VBx7q.js +0 -1
  367. package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +0 -1
  368. package/src/assets/web-panel/assets/Tenant-jMyaK184.js +0 -1
  369. package/src/assets/web-panel/assets/Terminal-DA5gjCiE.js +0 -3
  370. package/src/assets/web-panel/assets/Terminal-G1DrFtKr.css +0 -1
  371. package/src/assets/web-panel/assets/TimelineRenderer-BM17JHyr.js +0 -1
  372. package/src/assets/web-panel/assets/TimelineRenderer-DmztdsbF.css +0 -1
  373. package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +0 -1
  374. package/src/assets/web-panel/assets/Tokens-CCJIrnhi.js +0 -1
  375. package/src/assets/web-panel/assets/Trust-BHeJEfNG.js +0 -1
  376. package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +0 -1
  377. package/src/assets/web-panel/assets/UkeySign-DjcIVRk4.js +0 -1
  378. package/src/assets/web-panel/assets/VideoEditing-BPhptg3q.js +0 -1
  379. package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +0 -1
  380. package/src/assets/web-panel/assets/Wallet-D_xDgfaz.js +0 -4
  381. package/src/assets/web-panel/assets/Wallet-gR0ZvZbK.css +0 -1
  382. package/src/assets/web-panel/assets/WebAuthn-SSh5VhVO.css +0 -1
  383. package/src/assets/web-panel/assets/WebAuthn-pd961lgM.js +0 -5
  384. package/src/assets/web-panel/assets/WorkflowEditor-BmXDUZ8M.js +0 -1
  385. package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +0 -1
  386. package/src/assets/web-panel/assets/createContext-BBLoTzN8.js +0 -1
  387. package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +0 -1
  388. package/src/assets/web-panel/assets/echarts-Dj_pBaVI.js +0 -19
  389. package/src/assets/web-panel/assets/favicon-FSU2gSy6.ico +0 -0
  390. package/src/assets/web-panel/assets/index-1xUFGcnI.js +0 -21
  391. package/src/assets/web-panel/assets/index-4BeUpRaU.js +0 -1
  392. package/src/assets/web-panel/assets/index-AVHrO1io.js +0 -21
  393. package/src/assets/web-panel/assets/index-B2fc2n_u.js +0 -3
  394. package/src/assets/web-panel/assets/index-B5aXiiOG.js +0 -1
  395. package/src/assets/web-panel/assets/index-B78VsLFL.js +0 -1
  396. package/src/assets/web-panel/assets/index-BECv44dY.js +0 -12
  397. package/src/assets/web-panel/assets/index-BGn5-2TK.js +0 -1
  398. package/src/assets/web-panel/assets/index-BM9IHnrf.js +0 -13
  399. package/src/assets/web-panel/assets/index-BlMshk9V.js +0 -1
  400. package/src/assets/web-panel/assets/index-BoWoWh9f.js +0 -19
  401. package/src/assets/web-panel/assets/index-Bt79ud6Y.js +0 -1
  402. package/src/assets/web-panel/assets/index-CO9Tt0Bo.js +0 -1
  403. package/src/assets/web-panel/assets/index-CSZvB2uy.js +0 -12
  404. package/src/assets/web-panel/assets/index-CjeazYU2.js +0 -1
  405. package/src/assets/web-panel/assets/index-Cw-TEBru.js +0 -1
  406. package/src/assets/web-panel/assets/index-CyObfnlZ.js +0 -3
  407. package/src/assets/web-panel/assets/index-D0d2TS5o.js +0 -69
  408. package/src/assets/web-panel/assets/index-DV3zNhRX.js +0 -1
  409. package/src/assets/web-panel/assets/index-DnHElN_A.js +0 -7
  410. package/src/assets/web-panel/assets/index-DspW4reY.js +0 -55
  411. package/src/assets/web-panel/assets/index-DxUFdvJ5.js +0 -1
  412. package/src/assets/web-panel/assets/index-La4F-U-s.js +0 -1
  413. package/src/assets/web-panel/assets/index-azbNWBMo.js +0 -1
  414. package/src/assets/web-panel/assets/index-squRDiXd.js +0 -31
  415. package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +0 -1
  416. package/src/assets/web-panel/assets/motion-ChVLXdRp.js +0 -11
  417. package/src/assets/web-panel/assets/useFlexGapSupport-CzD0s7wN.js +0 -1
  418. package/src/assets/web-panel/assets/vendor-DhFY8mDK.js +0 -1
  419. package/src/assets/web-panel/assets/vnode-CnXQ7gJ2.js +0 -1
  420. package/src/assets/web-panel/assets/warning-Pq00owYb.js +0 -1
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Streaming-input headless runner — Claude-Code `--input-format stream-json`.
3
+ *
4
+ * Where `runAgentHeadless` runs ONE turn from a single prompt and exits, this
5
+ * variant keeps a persistent conversation driven by NDJSON user events on
6
+ * stdin: one JSON object per line, a turn per event, NDJSON results per turn,
7
+ * until stdin closes. Pairs with `--output-format stream-json` for a full
8
+ * program-to-agent duplex (SDK-style multi-turn).
9
+ *
10
+ * Input event shapes accepted (kept liberal for interop):
11
+ * {"type":"user","message":{"role":"user","content":"hi"}}
12
+ * {"type":"user","message":{"content":[{"type":"text","text":"hi"}]}}
13
+ * {"type":"user","text":"hi"} | {"role":"user","content":"hi"} | {"prompt":"hi"}
14
+ *
15
+ * Reuses the exported permission/tool helpers + the core agent loop so it does
16
+ * not duplicate (or fork) `runAgentHeadless`'s internals.
17
+ */
18
+
19
+ import { bootstrap } from "./bootstrap.js";
20
+ import { buildSystemPrompt, agentLoop as coreAgentLoop } from "./agent-core.js";
21
+ import { composeSystemPrompt } from "./system-prompt.js";
22
+ import { expandFileRefs } from "./file-ref-expander.js";
23
+ import { IterationBudget } from "../lib/iteration-budget.js";
24
+ import {
25
+ resolvePermissionMode,
26
+ resolveEnabledTools,
27
+ } from "./headless-runner.js";
28
+ import { withQuietStdout } from "./quiet-stdout.js";
29
+
30
+ /**
31
+ * Parse one NDJSON input line into { text } / { error } / null (blank → skip).
32
+ */
33
+ export function parseInputEvent(line) {
34
+ const trimmed = (line || "").trim();
35
+ if (!trimmed) return null;
36
+ let obj;
37
+ try {
38
+ obj = JSON.parse(trimmed);
39
+ } catch {
40
+ return { error: `invalid JSON line: ${trimmed.slice(0, 80)}` };
41
+ }
42
+ const msg = obj && typeof obj === "object" ? obj.message || obj : {};
43
+ let content = msg.content ?? obj.text ?? obj.prompt;
44
+ if (Array.isArray(content)) {
45
+ content = content
46
+ .map((b) => (typeof b === "string" ? b : b?.text || ""))
47
+ .join("");
48
+ }
49
+ if (typeof content !== "string" || !content.trim()) return null;
50
+ return { text: content };
51
+ }
52
+
53
+ /**
54
+ * Yield NDJSON lines from a byte/string stream (stdin). Splits on "\n" and
55
+ * flushes any trailing partial line when the stream ends.
56
+ */
57
+ export async function* readJsonLines(input) {
58
+ let buf = "";
59
+ for await (const chunk of input) {
60
+ buf += typeof chunk === "string" ? chunk : chunk.toString("utf-8");
61
+ let idx;
62
+ while ((idx = buf.indexOf("\n")) >= 0) {
63
+ yield buf.slice(0, idx);
64
+ buf = buf.slice(idx + 1);
65
+ }
66
+ }
67
+ if (buf.trim()) yield buf;
68
+ }
69
+
70
+ /**
71
+ * Run a single turn through the core agent loop, emitting NDJSON events.
72
+ * Returns the turn outcome so the caller can grow history + the result line.
73
+ */
74
+ async function runTurn(messages, loopOptions, { runLoop, emit }) {
75
+ const usage = { input_tokens: 0, output_tokens: 0 };
76
+ const toolCalls = [];
77
+ let finalText = "";
78
+ let endReason = "complete";
79
+
80
+ for await (const event of runLoop(messages, loopOptions)) {
81
+ switch (event.type) {
82
+ case "tool-executing":
83
+ toolCalls.push({ tool: event.tool, args: event.args });
84
+ emit({ type: "tool_use", tool: event.tool, args: event.args });
85
+ break;
86
+ case "tool-result": {
87
+ const err = event.error || event.result?.error || null;
88
+ if (toolCalls.length > 0)
89
+ toolCalls[toolCalls.length - 1].is_error = Boolean(err);
90
+ emit({
91
+ type: "tool_result",
92
+ tool: event.tool,
93
+ is_error: Boolean(err),
94
+ error: err,
95
+ result: event.result,
96
+ });
97
+ break;
98
+ }
99
+ case "token-usage":
100
+ usage.input_tokens += event.usage?.input_tokens || 0;
101
+ usage.output_tokens += event.usage?.output_tokens || 0;
102
+ emit({ type: "token_usage", usage: event.usage });
103
+ break;
104
+ case "iteration-warning":
105
+ emit({ type: "iteration_warning", message: event.message });
106
+ break;
107
+ case "iteration-budget-exhausted":
108
+ endReason = "max_turns";
109
+ emit({ type: "iteration_budget_exhausted", budget: event.budget });
110
+ break;
111
+ case "response-complete":
112
+ finalText = event.content || "";
113
+ break;
114
+ case "run-ended":
115
+ if (event.reason) endReason = event.reason;
116
+ break;
117
+ default:
118
+ if (event.type) emit(event);
119
+ break;
120
+ }
121
+ }
122
+ return { finalText, endReason, usage, toolCalls };
123
+ }
124
+
125
+ /**
126
+ * Drive a multi-turn headless conversation from NDJSON stdin events.
127
+ *
128
+ * @param {object} options same shape as runAgentHeadless (minus single prompt)
129
+ * @param {object} [deps] { input, bootstrap, getApprovalGate, agentLoop,
130
+ * writeOut, writeErr, expandFileRefs }
131
+ * @returns {Promise<{exitCode:number, turns:number}>}
132
+ */
133
+ export async function runAgentHeadlessStream(options = {}, deps = {}) {
134
+ const model = options.model || "qwen2.5:7b";
135
+ const provider = options.provider || "ollama";
136
+ const baseUrl = options.baseUrl || "http://localhost:11434";
137
+ const apiKey = options.apiKey || null;
138
+ const cwd = options.cwd || process.cwd();
139
+ const additionalDirectories = Array.isArray(options.additionalDirectories)
140
+ ? options.additionalDirectories.filter(Boolean)
141
+ : [];
142
+
143
+ const input = deps.input || process.stdin;
144
+ const runLoop = deps.agentLoop || coreAgentLoop;
145
+ const doBootstrap = deps.bootstrap || bootstrap;
146
+ const doExpand = deps.expandFileRefs || expandFileRefs;
147
+ const writeOut = deps.writeOut || ((s) => process.stdout.write(s));
148
+ const writeErr = deps.writeErr || ((s) => process.stderr.write(s));
149
+ const emit = (obj) => writeOut(JSON.stringify(obj) + "\n");
150
+
151
+ const getApprovalGate =
152
+ deps.getApprovalGate ||
153
+ (async () => {
154
+ const m = await import("../lib/session-core-singletons.js");
155
+ return m.getApprovalGate();
156
+ });
157
+
158
+ const perm = resolvePermissionMode(options.permissionMode);
159
+ const enabledToolNames = resolveEnabledTools({
160
+ allowedTools: options.allowedTools,
161
+ readOnly: perm.readOnly,
162
+ });
163
+ const disabledTools = options.disallowedTools || [];
164
+
165
+ let db = null;
166
+ try {
167
+ // Bootstrap logs db/config diagnostics via console.info (→ stdout); divert
168
+ // to stderr so the NDJSON stream stays clean.
169
+ const ctx = await withQuietStdout(() => doBootstrap({ verbose: false }));
170
+ db = ctx.db || null;
171
+ } catch {
172
+ // DB optional — static-prompt fallback.
173
+ }
174
+
175
+ const sessionId =
176
+ options.sessionId || `headless-stream-${Date.now()}-${process.pid}`;
177
+
178
+ let approvalGate = null;
179
+ try {
180
+ approvalGate = await getApprovalGate();
181
+ if (approvalGate) {
182
+ approvalGate.setSessionPolicy?.(sessionId, perm.sessionPolicy);
183
+ approvalGate.setConfirmer?.(perm.confirmer);
184
+ }
185
+ } catch {
186
+ approvalGate = null;
187
+ }
188
+
189
+ const systemContent = composeSystemPrompt(
190
+ buildSystemPrompt(cwd, { additionalDirectories }),
191
+ {
192
+ systemPrompt: options.systemPrompt,
193
+ appendSystemPrompt: options.appendSystemPrompt,
194
+ },
195
+ );
196
+ const messages = [{ role: "system", content: systemContent }];
197
+
198
+ emit({
199
+ type: "system",
200
+ subtype: "init",
201
+ session_id: sessionId,
202
+ model,
203
+ provider,
204
+ permission_mode: options.permissionMode || "default",
205
+ tools: enabledToolNames,
206
+ input_format: "stream-json",
207
+ additional_directories: additionalDirectories,
208
+ });
209
+
210
+ const loopOptionsBase = {
211
+ model,
212
+ provider,
213
+ baseUrl,
214
+ apiKey,
215
+ cwd,
216
+ additionalDirectories,
217
+ sessionId,
218
+ hookDb: db,
219
+ approvalGate,
220
+ enabledToolNames,
221
+ disabledTools,
222
+ chatFn: deps.chatFn || options.chatFn || undefined,
223
+ signal: options.signal || undefined,
224
+ };
225
+
226
+ let turns = 0;
227
+ let sawError = false;
228
+
229
+ for await (const line of readJsonLines(input)) {
230
+ const parsed = parseInputEvent(line);
231
+ if (parsed == null) continue; // blank line
232
+ if (parsed.error) {
233
+ emit({
234
+ type: "result",
235
+ subtype: "error",
236
+ is_error: true,
237
+ error: parsed.error,
238
+ });
239
+ sawError = true;
240
+ continue;
241
+ }
242
+
243
+ // Per-turn iteration budget so one turn can't starve the rest.
244
+ const budget = Number.isFinite(options.maxTurns)
245
+ ? new IterationBudget({
246
+ limit: Math.max(1, Math.floor(options.maxTurns)),
247
+ })
248
+ : new IterationBudget();
249
+
250
+ // @file expansion per user event (parity with single-turn headless).
251
+ let userContent = parsed.text;
252
+ if (options.expandFileRefs !== false) {
253
+ const expanded = doExpand(parsed.text, { cwd });
254
+ userContent = expanded.prompt;
255
+ for (const w of expanded.warnings) writeErr(` @ref: ${w}\n`);
256
+ }
257
+
258
+ messages.push({ role: "user", content: userContent });
259
+ turns += 1;
260
+
261
+ let outcome;
262
+ try {
263
+ outcome = await runTurn(
264
+ messages,
265
+ { ...loopOptionsBase, iterationBudget: budget },
266
+ { runLoop, emit },
267
+ );
268
+ } catch (err) {
269
+ emit({
270
+ type: "result",
271
+ subtype: "error",
272
+ is_error: true,
273
+ error: err?.message || String(err),
274
+ turn: turns,
275
+ });
276
+ sawError = true;
277
+ continue;
278
+ }
279
+
280
+ // Grow the conversation so the next turn has context.
281
+ messages.push({ role: "assistant", content: outcome.finalText });
282
+
283
+ const exhausted =
284
+ outcome.endReason === "budget-exhausted" ||
285
+ outcome.endReason === "max_turns";
286
+ const isError = exhausted || outcome.endReason === "no-response";
287
+ if (isError) sawError = true;
288
+
289
+ emit({
290
+ type: "result",
291
+ subtype: exhausted ? "error_max_turns" : isError ? "error" : "success",
292
+ is_error: isError,
293
+ result: outcome.finalText,
294
+ session_id: sessionId,
295
+ turn: turns,
296
+ usage: outcome.usage,
297
+ });
298
+ }
299
+
300
+ emit({ type: "system", subtype: "end", session_id: sessionId, turns });
301
+ return { exitCode: sawError ? 1 : 0, turns };
302
+ }
@@ -26,6 +26,12 @@ export function resolveAgentPolicy({
26
26
  noStream: overrides.noStream === true,
27
27
  parkOnExit: overrides.parkOnExit === false ? false : true,
28
28
  bundlePath: overrides.bundlePath || null,
29
+ additionalDirectories: Array.isArray(overrides.additionalDirectories)
30
+ ? overrides.additionalDirectories
31
+ : [],
32
+ systemPrompt: overrides.systemPrompt || null,
33
+ appendSystemPrompt: overrides.appendSystemPrompt || null,
34
+ fallbackModel: overrides.fallbackModel || null,
29
35
  };
30
36
  }
31
37
 
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Run a function with stdout redirected to stderr.
3
+ *
4
+ * The headless runners emit machine-readable output (text answer / JSON /
5
+ * NDJSON) on stdout, but bootstrap/db/config code logs diagnostics via
6
+ * console.info — which Node writes to stdout — e.g. "[DatabaseManager] …",
7
+ * "[AppConfig] Configuration loaded". Those lines corrupt a JSON/NDJSON stream
8
+ * and muddy a plain-text answer. Wrapping the noisy setup in withQuietStdout
9
+ * sends that chatter to stderr (the diagnostic channel) while keeping stdout
10
+ * pristine for the actual payload.
11
+ *
12
+ * Scope is deliberately narrow: it swaps `stream.write` only for the duration
13
+ * of `fn` and always restores it (even on throw), so it never affects the
14
+ * payload writes that happen afterwards, nor any other command.
15
+ *
16
+ * @template T
17
+ * @param {() => T | Promise<T>} fn
18
+ * @param {object} [opts]
19
+ * @param {{write: Function}} [opts.stream=process.stdout] stream to silence
20
+ * @param {{write: Function}} [opts.target=process.stderr] where to divert to
21
+ * @returns {Promise<T>}
22
+ */
23
+ export async function withQuietStdout(fn, opts = {}) {
24
+ const stream = opts.stream || process.stdout;
25
+ const target = opts.target || process.stderr;
26
+ const original = stream.write;
27
+ stream.write = function (chunk, encoding, cb) {
28
+ return target.write(chunk, encoding, cb);
29
+ };
30
+ try {
31
+ return await fn();
32
+ } finally {
33
+ stream.write = original;
34
+ }
35
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * System-prompt overrides for `cc agent` — Claude-Code `--system-prompt` /
3
+ * `--append-system-prompt` parity.
4
+ *
5
+ * - `--system-prompt` replaces the built-in system prompt entirely.
6
+ * - `--append-system-prompt` appends extra guidance after the built-in one.
7
+ *
8
+ * Both accept a literal string OR `@path` (read the file as the prompt text),
9
+ * so a reusable persona can live in a file without a full `--bundle`.
10
+ *
11
+ * Split into two pure-ish functions so each is unit-testable:
12
+ * - resolvePromptText : CLI value (literal / @file) → text [does fs I/O]
13
+ * - composeSystemPrompt: (base, {systemPrompt, appendSystemPrompt}) → text
14
+ */
15
+
16
+ import fsDefault from "fs";
17
+ import pathDefault from "path";
18
+
19
+ /**
20
+ * Resolve a CLI prompt value. A leading `@` means "read this file"; anything
21
+ * else (or an unreadable @path) is returned verbatim as literal text.
22
+ *
23
+ * @param {string|null|undefined} value
24
+ * @param {object} [opts] { cwd, deps:{ fs, path } }
25
+ * @returns {string|null} null only when value is null/undefined
26
+ */
27
+ export function resolvePromptText(value, opts = {}) {
28
+ if (value == null) return null;
29
+ const str = String(value);
30
+ if (!str.startsWith("@")) return str;
31
+
32
+ const fs = opts.deps?.fs || fsDefault;
33
+ const path = opts.deps?.path || pathDefault;
34
+ const cwd = opts.cwd || process.cwd();
35
+ const abs = path.resolve(cwd, str.slice(1));
36
+ try {
37
+ return fs.readFileSync(abs, "utf-8");
38
+ } catch {
39
+ // Not a readable file → treat the whole token as literal text.
40
+ return str;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Compose the effective system prompt.
46
+ * - a (truthy) override replaces the base entirely;
47
+ * - an append is added after, separated by a blank line.
48
+ *
49
+ * @param {string} base
50
+ * @param {object} [opts] { systemPrompt, appendSystemPrompt }
51
+ * @returns {string}
52
+ */
53
+ export function composeSystemPrompt(base, opts = {}) {
54
+ const { systemPrompt, appendSystemPrompt } = opts;
55
+ let result = systemPrompt ? systemPrompt : base || "";
56
+ if (appendSystemPrompt) {
57
+ result = result ? `${result}\n\n${appendSystemPrompt}` : appendSystemPrompt;
58
+ }
59
+ return result;
60
+ }
@@ -1 +0,0 @@
1
- import{_ as We,u as Xe,b as Ye,d as m}from"./index-D0d2TS5o.js";import{s as Ze}from"./community-parser-CO25nZFt.js";import{R as Ge,as as He,A as re,j as ue,aX as de,b2 as et,c as tt,f as at}from"./icons--SBOhPAi.js";import ot from"./index-C54Ydkuz.js";import{o as lt,M as v,R as z,P as r,c as a,N as l,Q as C,S as y,K as b,r as x,L as d,O as p,u as k,F as R,Y as E,f as M,h as st,a as G}from"./vendor-DhFY8mDK.js";import"./KeyCode-D63Tfrq7.js";import"./omit-C1hn14Vc.js";import"./pickAttrs-DgVG8oMj.js";import"./initDefaultProps-B8zdOlFC.js";import"./motion-ChVLXdRp.js";import"./raf-Deuc0E8-.js";import"./index-BqX3jeij.js";import"./index-BGn5-2TK.js";import"./isVisible-C7tPsqfj.js";import"./useState-DGS1NOyn.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-X13u92RU.js";import"./createContext-BBLoTzN8.js";import"./Compact-CemvxU3z.js";import"./_getTag-BVc6NQ_K.js";import"./styleChecker-GoQ7uwU1.js";import"./zoom-CzyiNxpd.js";import"./ActionButton-wRdLFzBQ.js";import"./vnode-CnXQ7gJ2.js";function B(i){const n=Ze(i);if(!n)return null;try{return JSON.parse(n)}catch{}const t=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!t)return null;try{return JSON.parse(t[0])}catch{return null}}const ce=Object.freeze(["P0","P1","P2","P3"]),it=Object.freeze(["open","acknowledged","resolved","closed"]);function g(i,n=0){return typeof i=="number"&&Number.isFinite(i)?i:n}function nt(i,n=0){if(!i||typeof i!="object")return null;const t=i.id||"";return t?{key:t,id:t,anomalyMetric:i.anomalyMetric??i.anomaly_metric??"",severity:String(i.severity||"P3"),status:String(i.status||"open").toLowerCase(),description:String(i.description||""),anomalyData:i.anomalyData??i.anomaly_data??null,remediationId:i.remediationId??i.remediation_id??null,postmortem:i.postmortem||"",acknowledgedAt:i.acknowledgedAt??i.acknowledged_at??null,resolvedAt:i.resolvedAt??i.resolved_at??null,createdAt:i.createdAt??i.created_at??null,_idx:n}:null}function rt(i){const n=B(i);return Array.isArray(n)?n.map(nt).filter(Boolean):[]}function ut(i,n=0){if(!i||typeof i!="object")return null;const t=i.id||"";if(!t)return null;const _=i.enabled;let S=!1;return _===!0||_===1||_==="1"?S=!0:_===!1||_===0||_==="0"?S=!1:S=!!_,{key:t,id:t,name:String(i.name||""),triggerCondition:i.triggerCondition??i.trigger_condition??"",steps:i.steps||"",enabled:S,successCount:g(i.successCount??i.success_count,0),failureCount:g(i.failureCount??i.failure_count,0),createdAt:i.createdAt??i.created_at??null,_idx:n}}function dt(i){const n=B(i);return Array.isArray(n)?n.map(ut).filter(Boolean):[]}function ct(i,n=0){if(!i||typeof i!="object")return null;const t=i.metricName??i.metric_name??"";return t?{key:t,metricName:t,mean:g(i.mean,0),stdDev:g(i.stdDev??i.std_dev,0),q1:g(i.q1,0),q3:g(i.q3,0),sampleCount:g(i.sampleCount??i.sample_count,0),updatedAt:i.updatedAt??i.updated_at??null,_idx:n}:null}function pt(i){const n=B(i);return Array.isArray(n)?n.map(ct).filter(Boolean):[]}function mt(i){const n=B(i);return!n||typeof n!="object"||Array.isArray(n)?null:{anomaly:!!n.anomaly,reason:n.reason||null,metricName:n.metricName??n.metric_name??"",value:g(n.value,0),algorithm:String(n.algorithm||""),score:g(n.score,0),threshold:g(n.threshold,0),baseline:n.baseline?{mean:g(n.baseline.mean,0),stdDev:g(n.baseline.stdDev??n.baseline.std_dev,0),q1:g(n.baseline.q1,0),q3:g(n.baseline.q3,0)}:null,incidentId:n.incidentId??n.incident_id??null,severity:n.severity||null}}const yt={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 ft(i){const n=JSON.parse(JSON.stringify(yt)),t=B(i);if(!t||typeof t!="object"||Array.isArray(t))return n;if(t.incidents&&typeof t.incidents=="object"){if(n.incidents.total=g(t.incidents.total,0),n.incidents.avgResolveMs=g(t.incidents.avgResolveMs??t.incidents.avg_resolve_ms,0),t.incidents.bySeverity&&typeof t.incidents.bySeverity=="object")for(const _ of Object.keys(n.incidents.bySeverity))n.incidents.bySeverity[_]=g(t.incidents.bySeverity[_],0);if(t.incidents.byStatus&&typeof t.incidents.byStatus=="object")for(const _ of Object.keys(n.incidents.byStatus))n.incidents.byStatus[_]=g(t.incidents.byStatus[_],0)}return t.playbooks&&typeof t.playbooks=="object"&&(n.playbooks.total=g(t.playbooks.total,0),n.playbooks.enabled=g(t.playbooks.enabled,0),n.playbooks.totalSuccess=g(t.playbooks.totalSuccess??t.playbooks.total_success,0),n.playbooks.totalFailure=g(t.playbooks.totalFailure??t.playbooks.total_failure,0)),t.baselines&&typeof t.baselines=="object"&&(n.baselines.total=g(t.baselines.total,0),Array.isArray(t.baselines.metrics)&&(n.baselines.metrics=[...t.baselines.metrics])),n}function pe(i){if(i==null||i==="")return"—";const n=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(n.getTime())?String(i):n.toLocaleString("zh-CN",{hour12:!1})}const vt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},bt={class:"page-title"},gt={class:"page-sub"},kt={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},_t={class:"filter-bar"},$t={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ht={key:1,style:{color:"var(--text-muted)"}},Ct={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},xt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},St={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},wt={style:{color:"var(--text-primary)","font-weight":"500"}},zt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},At={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Ft={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Pt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Rt={style:{color:"#1677ff"}},jt={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},Nt={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},It={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Lt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ot={key:0,style:{color:"var(--text-secondary)","font-size":"12px","margin-top":"8px"}},Tt={key:1,style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Ut={key:2,style:{"margin-top":"8px"}},qt={__name:"AIOps",setup(i){const n=Xe(),{t}=Ye(),_=x(!1),S=x(!1),H=x(!1),me=x([]),ye=x([]),ee=x([]),A=x({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:[]}}),K=x("incidents"),q=x(""),J=x(""),V=x(!1),Q=x(!1),W=x(!1),te=x(!1),w=G({severity:"P3",metric:"",description:""}),$=G({name:"",triggerJson:"",stepsJson:""}),N=G({metric:"",values:""}),F=G({metric:"",value:null,algorithm:"z_score"}),h=x(null),xe=M(()=>[{title:t("aiops.incidentCols.severity"),key:"severity",width:"90px"},{title:t("aiops.incidentCols.metric"),key:"metric",width:"160px"},{title:t("aiops.incidentCols.description"),key:"description"},{title:t("aiops.incidentCols.status"),key:"status",width:"100px"},{title:t("aiops.incidentCols.createdAt"),key:"createdAt",width:"160px"},{title:t("aiops.incidentCols.action"),key:"action",width:"220px"}]),Se=M(()=>[{title:t("aiops.playbookCols.name"),key:"name"},{title:t("aiops.playbookCols.enabled"),key:"enabled",width:"80px"},{title:t("aiops.playbookCols.stats"),key:"stats",width:"180px"},{title:t("aiops.playbookCols.createdAt"),key:"createdAt",width:"160px"},{title:t("aiops.playbookCols.action"),key:"action",width:"160px"}]),we=M(()=>[{title:t("aiops.baselineCols.metric"),key:"metric"},{title:t("aiops.baselineCols.mean"),key:"mean",width:"180px"},{title:t("aiops.baselineCols.iqr"),key:"iqr",width:"180px"},{title:t("aiops.baselineCols.sampleCount"),key:"sampleCount",width:"90px"},{title:t("aiops.baselineCols.updatedAt"),key:"updatedAt",width:"160px"}]),ze=M(()=>A.value.incidents.byStatus.open+A.value.incidents.byStatus.acknowledged),Ae=M(()=>{let e=me.value;return q.value&&(e=e.filter(o=>o.severity===q.value)),J.value&&(e=e.filter(o=>o.status===J.value)),e});function fe(e){const o=`aiops.statusLabels.${e}`,u=t(o);return u===o?e:u}function Fe(e){return{open:"red",acknowledged:"orange",resolved:"cyan",closed:"default"}[e]||"default"}function ae(e){return{P0:"red",P1:"volcano",P2:"orange",P3:"gold"}[e]||"default"}function Pe(e){const o=`aiops.reasonLabels.${e}`,u=t(o);return u===o?e:u}function ve(e,o){return e?e.length>o?e.slice(0,o)+"...":e:""}function Re(e){return!e||e<=0?t("aiops.duration.none"):e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:e<36e5?`${(e/6e4).toFixed(1)}min`:`${(e/36e5).toFixed(1)}h`}function je({key:e}){e==="incident"?V.value=!0:e==="playbook"?Q.value=!0:e==="baseline"?W.value=!0:e==="detect"&&(h.value=null,te.value=!0)}async function j(){_.value=!0;try{const[e,o,u,f]=await Promise.all([n.execute("ops incidents --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("ops playbooks --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("ops baselines --json",1e4).catch(()=>({output:""})),n.execute("ops stats --json",8e3).catch(()=>({output:""}))]);me.value=rt(e.output),ye.value=dt(o.output),ee.value=pt(u.output),A.value=ft(f.output)}catch(e){m.error(t("aiops.msg.loadFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function Ne(){if(!w.description.trim()){m.warning(t("aiops.msg.descEmpty"));return}S.value=!0;try{const e=[`ops incident-create --severity ${w.severity}`];w.metric.trim()&&e.push(`--metric "${w.metric.trim().replace(/"/g,'\\"')}"`),e.push(`--description "${w.description.trim().replace(/"/g,'\\"')}"`),e.push("--json");const{output:o}=await n.execute(e.join(" "),1e4);if(/error|失败/i.test(o)&&!/"incidentId"/.test(o)){m.error(t("aiops.msg.createFailed")+": "+o.slice(0,120));return}m.success(t("aiops.msg.incidentCreated")),V.value=!1,ge(),await j()}catch(e){m.error(t("aiops.msg.createFailed")+": "+(e?.message||e))}finally{S.value=!1}}async function Ie(){if(!$.name.trim()){m.warning(t("aiops.msg.playbookNameEmpty"));return}for(const[e,o]of[[$.triggerJson,"triggerLabel"],[$.stepsJson,"stepsLabel"]])if(e.trim())try{JSON.parse(e)}catch{m.warning(t("aiops.msg.jsonInvalid",{label:t(`aiops.msg.${o}`)}));return}S.value=!0;try{const e=[`ops playbook-create --name "${$.name.trim().replace(/"/g,'\\"')}"`];$.triggerJson.trim()&&e.push(`--trigger '${$.triggerJson.trim().replace(/'/g,"'\\''")}'`),$.stepsJson.trim()&&e.push(`--steps '${$.stepsJson.trim().replace(/'/g,"'\\''")}'`),e.push("--json");const{output:o}=await n.execute(e.join(" "),1e4);if(/error|失败/i.test(o)&&!/"playbookId"/.test(o)){m.error(t("aiops.msg.createFailed")+": "+o.slice(0,120));return}m.success(t("aiops.msg.playbookCreated")),Q.value=!1,ke(),K.value="playbooks",await j()}catch(e){m.error(t("aiops.msg.createFailed")+": "+(e?.message||e))}finally{S.value=!1}}async function Le(){const e=N.metric.trim();if(!e){m.warning(t("aiops.msg.metricEmpty"));return}const o=N.values.split(/[\s,]+/).map(u=>u.trim()).filter(Boolean).map(u=>Number(u));if(o.length===0||o.some(u=>!Number.isFinite(u))){m.warning(t("aiops.msg.valuesInvalid"));return}S.value=!0;try{const u=`ops baseline-update "${e.replace(/"/g,'\\"')}" --values ${o.join(",")} --json`,{output:f}=await n.execute(u,1e4);if(/error|失败/i.test(f)&&!/"updated"/.test(f)){m.error(t("aiops.msg.baselineUpdateFailed")+": "+f.slice(0,120));return}m.success(t("aiops.msg.baselineUpdated",{n:o.length})),W.value=!1,_e(),K.value="baselines",await j()}catch(u){m.error(t("aiops.msg.baselineUpdateFailed")+": "+(u?.message||u))}finally{S.value=!1}}async function Oe(){if(!F.metric||F.value==null){m.warning(t("aiops.msg.detectFieldsEmpty"));return}H.value=!0,h.value=null;try{const e=`ops detect "${F.metric.replace(/"/g,'\\"')}" ${F.value} --algorithm ${F.algorithm} --json`,{output:o}=await n.execute(e,8e3),u=mt(o);if(!u){m.error(t("aiops.msg.detectFailed")+": "+o.slice(0,120));return}h.value=u,u.anomaly&&(m.warning(t("aiops.msg.detectAnomaly",{severity:u.severity||"P3"})),j())}catch(e){m.error(t("aiops.msg.detectFailed")+": "+(e?.message||e))}finally{H.value=!1}}async function Te(e){await oe(e,"incident-ack",t("aiops.msg.incidentAcked"))}async function Ue(e){await oe(e,"incident-resolve",t("aiops.msg.incidentResolved"))}async function qe(e){await oe(e,"incident-close",t("aiops.msg.incidentClosed"))}async function oe(e,o,u){try{const{output:f}=await n.execute(`ops ${o} ${e.id} --json`,8e3);if(/error|失败|invalid/i.test(f)&&!/"acknowledged"|"resolved"|"closed"/.test(f)){m.error(t("aiops.msg.incidentTransitionFailed")+": "+f.slice(0,120));return}m.success(u),await j()}catch(f){m.error(t("aiops.msg.incidentTransitionFailed")+": "+(f?.message||f))}}async function Je(e){try{const{output:o}=await n.execute(`ops postmortem ${e.id}`,12e3);ot.info({title:t("aiops.msg.postmortemTitle",{id:e.id.slice(0,8)}),width:720,content:()=>st("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;"},o||t("aiops.msg.postmortemEmpty"))})}catch(o){m.error(t("aiops.msg.postmortemFailed")+": "+(o?.message||o))}}async function De(e,o){const u=o?"on":"off";try{const{output:f}=await n.execute(`ops playbook-toggle ${e.id} ${u} --json`,8e3);if(/error|失败/i.test(f)&&!/"enabled"/.test(f)){m.error(t("aiops.msg.playbookToggleFailed")+": "+f.slice(0,120));return}m.success(t(o?"aiops.msg.playbookEnabled":"aiops.msg.playbookDisabled")),await j()}catch(f){m.error(t("aiops.msg.playbookToggleFailed")+": "+(f?.message||f))}}async function be(e,o){try{const{output:u}=await n.execute(`ops playbook-record ${e.id} ${o} --json`,8e3);if(/error|失败/i.test(u)&&!/"recorded"/.test(u)){m.error(t("aiops.msg.playbookRecordFailed")+": "+u.slice(0,120));return}m.success(t(o==="success"?"aiops.msg.playbookRecordSuccess":"aiops.msg.playbookRecordFailure")),await j()}catch(u){m.error(t("aiops.msg.playbookRecordFailed")+": "+(u?.message||u))}}function ge(){w.severity="P3",w.metric="",w.description=""}function ke(){$.name="",$.triggerJson="",$.stepsJson=""}function _e(){N.metric="",N.values=""}return lt(j),(e,o)=>{const u=b("a-button"),f=b("a-menu-item"),Ee=b("a-menu"),Me=b("a-dropdown"),$e=b("a-space"),T=b("a-statistic"),I=b("a-card"),D=b("a-col"),Be=b("a-row"),L=b("a-tag"),U=b("a-radio-button"),le=b("a-radio-group"),se=b("a-table"),ie=b("a-tab-pane"),Ke=b("a-switch"),Ve=b("a-tabs"),he=b("a-select-option"),Ce=b("a-select"),P=b("a-form-item"),ne=b("a-input"),X=b("a-textarea"),Y=b("a-form"),Z=b("a-modal"),Qe=b("a-input-number");return d(),v("div",null,[z("div",vt,[z("div",null,[z("h2",bt,r(e.$t("aiops.title")),1),z("p",gt,r(e.$t("aiops.subtitle")),1)]),a($e,null,{default:l(()=>[a(u,{loading:_.value,onClick:j},{icon:l(()=>[a(k(Ge))]),default:l(()=>[p(" "+r(e.$t("aiops.refresh")),1)]),_:1},8,["loading"]),a(Me,{trigger:["click"]},{overlay:l(()=>[a(Ee,{onClick:je},{default:l(()=>[a(f,{key:"incident"},{default:l(()=>[a(k(re)),p(" "+r(e.$t("aiops.actions.incident")),1)]),_:1}),a(f,{key:"playbook"},{default:l(()=>[a(k(ue)),p(" "+r(e.$t("aiops.actions.playbook")),1)]),_:1}),a(f,{key:"baseline"},{default:l(()=>[a(k(de)),p(" "+r(e.$t("aiops.actions.baseline")),1)]),_:1}),a(f,{key:"detect"},{default:l(()=>[a(k(et)),p(" "+r(e.$t("aiops.actions.detect")),1)]),_:1})]),_:1})]),default:l(()=>[a(u,{type:"primary"},{icon:l(()=>[a(k(He))]),default:l(()=>[p(" "+r(e.$t("aiops.newDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(Be,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[a(D,{xs:12,sm:8,lg:5},{default:l(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(T,{title:e.$t("aiops.stats.incidents"),value:A.value.incidents.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:l(()=>[a(k(re))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(D,{xs:12,sm:8,lg:5},{default:l(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(T,{title:e.$t("aiops.stats.pending"),value:A.value.incidents.byStatus.open+A.value.incidents.byStatus.acknowledged,"value-style":{color:ze.value>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:l(()=>[a(k(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(D,{xs:12,sm:8,lg:5},{default:l(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(T,{title:e.$t("aiops.stats.playbooks"),value:A.value.playbooks.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:l(()=>[a(k(ue))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(D,{xs:12,sm:8,lg:5},{default:l(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(T,{title:e.$t("aiops.stats.enabled"),value:A.value.playbooks.enabled,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:l(()=>[a(k(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(D,{xs:24,sm:8,lg:4},{default:l(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(T,{title:e.$t("aiops.stats.baselines"),value:A.value.baselines.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:l(()=>[a(k(de))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),A.value.incidents.total>0?(d(),C(I,{key:0,title:e.$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(()=>[a($e,{size:[12,8],wrap:""},{default:l(()=>[(d(!0),v(R,null,E(k(ce),s=>(d(),C(L,{key:s,color:ae(s),style:{"font-size":"13px",padding:"2px 10px"}},{default:l(()=>[p(r(s)+": "+r(A.value.incidents.bySeverity[s]||0),1)]),_:2},1032,["color"]))),128)),z("span",kt,r(e.$t("aiops.avgResolveLabel",{time:Re(A.value.incidents.avgResolveMs)})),1)]),_:1})]),_:1},8,["title"])):y("",!0),a(Ve,{activeKey:K.value,"onUpdate:activeKey":o[2]||(o[2]=s=>K.value=s),class:"aiops-tabs"},{default:l(()=>[a(ie,{key:"incidents",tab:e.$t("aiops.tabs.incidents")},{default:l(()=>[z("div",_t,[a(le,{value:q.value,"onUpdate:value":o[0]||(o[0]=s=>q.value=s),size:"small","button-style":"solid"},{default:l(()=>[a(U,{value:""},{default:l(()=>[p(r(e.$t("aiops.filter.all")),1)]),_:1}),(d(!0),v(R,null,E(k(ce),s=>(d(),C(U,{key:s,value:s},{default:l(()=>[p(r(s),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(le,{value:J.value,"onUpdate:value":o[1]||(o[1]=s=>J.value=s),size:"small"},{default:l(()=>[a(U,{value:""},{default:l(()=>[p(r(e.$t("aiops.filter.allStatuses")),1)]),_:1}),(d(!0),v(R,null,E(k(it),s=>(d(),C(U,{key:s,value:s},{default:l(()=>[p(r(fe(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(se,{columns:xe.value,"data-source":Ae.value,pagination:{pageSize:20,showTotal:s=>e.$t("aiops.table.totalSuffix",{n:s})},size:"small",loading:_.value,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:s,record:c})=>[s.key==="severity"?(d(),C(L,{key:0,color:ae(c.severity),style:{"font-weight":"600"}},{default:l(()=>[p(r(c.severity),1)]),_:2},1032,["color"])):y("",!0),s.key==="metric"?(d(),v(R,{key:1},[c.anomalyMetric?(d(),v("span",$t,r(c.anomalyMetric),1)):(d(),v("span",ht,"—"))],64)):y("",!0),s.key==="description"?(d(),v("span",Ct,r(ve(c.description,80)||"—"),1)):y("",!0),s.key==="status"?(d(),C(L,{key:3,color:Fe(c.status)},{default:l(()=>[p(r(fe(c.status)),1)]),_:2},1032,["color"])):y("",!0),s.key==="createdAt"?(d(),v("span",xt,r(k(pe)(c.createdAt)),1)):y("",!0),s.key==="action"?(d(),v(R,{key:5},[c.status==="open"?(d(),C(u,{key:0,size:"small",type:"link",onClick:O=>Te(c)},{default:l(()=>[p(r(e.$t("aiops.incidentActions.ack")),1)]),_:1},8,["onClick"])):y("",!0),c.status==="open"||c.status==="acknowledged"?(d(),C(u,{key:1,size:"small",type:"link",onClick:O=>Ue(c)},{default:l(()=>[p(r(e.$t("aiops.incidentActions.resolve")),1)]),_:1},8,["onClick"])):y("",!0),c.status==="resolved"?(d(),C(u,{key:2,size:"small",type:"link",onClick:O=>qe(c)},{default:l(()=>[p(r(e.$t("aiops.incidentActions.close")),1)]),_:1},8,["onClick"])):y("",!0),c.status==="resolved"||c.status==="closed"?(d(),C(u,{key:3,size:"small",type:"link",onClick:O=>Je(c)},{default:l(()=>[p(r(e.$t("aiops.incidentActions.postmortem")),1)]),_:1},8,["onClick"])):y("",!0)],64)):y("",!0)]),emptyText:l(()=>[z("div",St,[a(k(re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+r(q.value||J.value?e.$t("aiops.table.incidentEmptyFiltered"):e.$t("aiops.table.incidentEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(ie,{key:"playbooks",tab:e.$t("aiops.tabs.playbooks")},{default:l(()=>[a(se,{columns:Se.value,"data-source":ye.value,pagination:{pageSize:20,showTotal:s=>e.$t("aiops.table.totalSuffix",{n:s})},size:"small",loading:_.value,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:s,record:c})=>[s.key==="name"?(d(),v(R,{key:0},[z("span",wt,r(c.name),1),c.triggerCondition?(d(),v("div",zt,r(ve(c.triggerCondition,80)),1)):y("",!0)],64)):y("",!0),s.key==="enabled"?(d(),C(Ke,{key:1,checked:c.enabled,size:"small",onChange:O=>De(c,O)},null,8,["checked","onChange"])):y("",!0),s.key==="stats"?(d(),v(R,{key:2},[a(L,{color:"green",style:{"font-size":"11px"}},{default:l(()=>[p(r(e.$t("aiops.table.successCount",{n:c.successCount})),1)]),_:2},1024),c.failureCount>0?(d(),C(L,{key:0,color:"red",style:{"font-size":"11px","margin-left":"4px"}},{default:l(()=>[p(r(e.$t("aiops.table.failureCount",{n:c.failureCount})),1)]),_:2},1024)):y("",!0)],64)):y("",!0),s.key==="createdAt"?(d(),v("span",At,r(k(pe)(c.createdAt)),1)):y("",!0),s.key==="action"?(d(),v(R,{key:4},[a(u,{size:"small",type:"link",onClick:O=>be(c,"success")},{default:l(()=>[p(r(e.$t("aiops.playbookActions.success")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",danger:"",onClick:O=>be(c,"failure")},{default:l(()=>[p(r(e.$t("aiops.playbookActions.failure")),1)]),_:1},8,["onClick"])],64)):y("",!0)]),emptyText:l(()=>[z("div",Ft,[a(k(ue),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+r(e.$t("aiops.table.playbookEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(ie,{key:"baselines",tab:e.$t("aiops.tabs.baselines")},{default:l(()=>[a(se,{columns:we.value,"data-source":ee.value,pagination:{pageSize:20,showTotal:s=>e.$t("aiops.table.totalSuffix",{n:s})},size:"small",loading:_.value,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:s,record:c})=>[s.key==="metric"?(d(),v("span",Pt,r(c.metricName),1)):y("",!0),s.key==="mean"?(d(),v(R,{key:1},[z("span",Rt,r(c.mean),1),z("span",jt,"σ "+r(c.stdDev),1)],64)):y("",!0),s.key==="iqr"?(d(),v("span",Nt," Q1 "+r(c.q1)+" / Q3 "+r(c.q3),1)):y("",!0),s.key==="sampleCount"?(d(),C(L,{key:3,color:"blue",style:{"font-size":"11px"}},{default:l(()=>[p(r(c.sampleCount),1)]),_:2},1024)):y("",!0),s.key==="updatedAt"?(d(),v("span",It,r(k(pe)(c.updatedAt)),1)):y("",!0)]),emptyText:l(()=>[z("div",Lt,[a(k(de),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+r(e.$t("aiops.table.baselineEmpty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(Z,{open:V.value,"onUpdate:open":o[6]||(o[6]=s=>V.value=s),title:e.$t("aiops.incident_modal.title"),"confirm-loading":S.value,width:520,"ok-text":e.$t("aiops.incident_modal.ok"),"cancel-text":e.$t("aiops.incident_modal.cancel"),onOk:Ne,onCancel:ge},{default:l(()=>[a(Y,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[a(P,{label:e.$t("aiops.incident_modal.severityLabel")},{default:l(()=>[a(Ce,{value:w.severity,"onUpdate:value":o[3]||(o[3]=s=>w.severity=s)},{default:l(()=>[(d(!0),v(R,null,E(k(ce),s=>(d(),C(he,{key:s,value:s},{default:l(()=>[p(r(s),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(P,{label:e.$t("aiops.incident_modal.metricLabel")},{default:l(()=>[a(ne,{value:w.metric,"onUpdate:value":o[4]||(o[4]=s=>w.metric=s),placeholder:e.$t("aiops.incident_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(P,{label:e.$t("aiops.incident_modal.descLabel"),required:""},{default:l(()=>[a(X,{value:w.description,"onUpdate:value":o[5]||(o[5]=s=>w.description=s),"auto-size":{minRows:3,maxRows:6}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(Z,{open:Q.value,"onUpdate:open":o[10]||(o[10]=s=>Q.value=s),title:e.$t("aiops.playbook_modal.title"),"confirm-loading":S.value,width:540,"ok-text":e.$t("aiops.playbook_modal.ok"),"cancel-text":e.$t("aiops.playbook_modal.cancel"),onOk:Ie,onCancel:ke},{default:l(()=>[a(Y,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[a(P,{label:e.$t("aiops.playbook_modal.nameLabel"),required:""},{default:l(()=>[a(ne,{value:$.name,"onUpdate:value":o[7]||(o[7]=s=>$.name=s),placeholder:e.$t("aiops.playbook_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(P,{label:e.$t("aiops.playbook_modal.triggerLabel")},{default:l(()=>[a(X,{value:$.triggerJson,"onUpdate:value":o[8]||(o[8]=s=>$.triggerJson=s),placeholder:e.$t("aiops.playbook_modal.triggerPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(P,{label:e.$t("aiops.playbook_modal.stepsLabel")},{default:l(()=>[a(X,{value:$.stepsJson,"onUpdate:value":o[9]||(o[9]=s=>$.stepsJson=s),placeholder:e.$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"]),a(Z,{open:W.value,"onUpdate:open":o[13]||(o[13]=s=>W.value=s),title:e.$t("aiops.baseline_modal.title"),"confirm-loading":S.value,width:500,"ok-text":e.$t("aiops.baseline_modal.ok"),"cancel-text":e.$t("aiops.baseline_modal.cancel"),onOk:Le,onCancel:_e},{default:l(()=>[a(Y,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[a(P,{label:e.$t("aiops.baseline_modal.metricLabel"),required:""},{default:l(()=>[a(ne,{value:N.metric,"onUpdate:value":o[11]||(o[11]=s=>N.metric=s),placeholder:e.$t("aiops.baseline_modal.metricPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(P,{label:e.$t("aiops.baseline_modal.valuesLabel"),required:""},{default:l(()=>[a(X,{value:N.values,"onUpdate:value":o[12]||(o[12]=s=>N.values=s),placeholder:e.$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"]),a(Z,{open:te.value,"onUpdate:open":o[17]||(o[17]=s=>te.value=s),title:e.$t("aiops.detect_modal.title"),"confirm-loading":H.value,width:500,"ok-text":e.$t("aiops.detect_modal.ok"),"cancel-text":e.$t("aiops.detect_modal.cancel"),onOk:Oe},{default:l(()=>[a(Y,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[a(P,{label:e.$t("aiops.detect_modal.metricLabel"),required:""},{default:l(()=>[a(Ce,{value:F.metric,"onUpdate:value":o[14]||(o[14]=s=>F.metric=s),"show-search":"",placeholder:e.$t("aiops.detect_modal.metricPlaceholder")},{default:l(()=>[(d(!0),v(R,null,E(ee.value,s=>(d(),C(he,{key:s.metricName,value:s.metricName},{default:l(()=>[p(r(e.$t("aiops.detect_modal.metricOptionLabel",{name:s.metricName,count:s.sampleCount})),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),a(P,{label:e.$t("aiops.detect_modal.valueLabel"),required:""},{default:l(()=>[a(Qe,{value:F.value,"onUpdate:value":o[15]||(o[15]=s=>F.value=s),style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(P,{label:e.$t("aiops.detect_modal.algorithmLabel")},{default:l(()=>[a(le,{value:F.algorithm,"onUpdate:value":o[16]||(o[16]=s=>F.algorithm=s)},{default:l(()=>[a(U,{value:"z_score"},{default:l(()=>[...o[18]||(o[18]=[p("Z-Score (3σ)",-1)])]),_:1}),a(U,{value:"iqr"},{default:l(()=>[...o[19]||(o[19]=[p("IQR (1.5×)",-1)])]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),h.value?(d(),C(I,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:l(()=>[a(T,{title:e.$t("aiops.detect_modal.resultTitle"),value:h.value.anomaly?e.$t("aiops.detect_modal.anomaly"):e.$t("aiops.detect_modal.normal"),"value-style":{color:h.value.anomaly?"#ff4d4f":"#52c41a"}},null,8,["title","value","value-style"]),h.value.reason&&!h.value.anomaly?(d(),v("div",Ot,r(e.$t("aiops.detect_modal.reasonLine",{reason:Pe(h.value.reason)})),1)):y("",!0),h.value.baseline?(d(),v("div",Tt,[z("div",null,r(e.$t("aiops.detect_modal.scoreLine",{score:h.value.score,threshold:h.value.threshold})),1),z("div",null,r(e.$t("aiops.detect_modal.baselineLine",{mean:h.value.baseline.mean,stdDev:h.value.baseline.stdDev})),1)])):y("",!0),h.value.incidentId?(d(),v("div",Ut,[a(L,{color:ae(h.value.severity)},{default:l(()=>[p(r(e.$t("aiops.detect_modal.incidentCreated",{severity:h.value.severity})),1)]),_:1},8,["color"])])):y("",!0)]),_:1})):y("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},ca=We(qt,[["__scopeId","data-v-ecfcab22"]]);export{ca as default};
@@ -1 +0,0 @@
1
- .page-title[data-v-ecfcab22]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-ecfcab22]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.aiops-tabs[data-v-ecfcab22] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-ecfcab22]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
@@ -1 +0,0 @@
1
- [data-v-e9b2b29c] .analytics-row:hover td{background:var(--bg-card-hover)!important}[data-v-e9b2b29c] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}[data-v-e9b2b29c] .ant-radio-button-wrapper{background:var(--bg-card)!important;border-color:var(--border-color)!important;color:var(--text-secondary)!important}[data-v-e9b2b29c] .ant-radio-button-wrapper-checked{background:#1677ff!important;border-color:#1677ff!important;color:#fff!important}
@@ -1,3 +0,0 @@
1
- import{_ as fe,b as _e,u as ge,d as I}from"./index-D0d2TS5o.js";import{R as ee,a5 as te,i as ae,aC as xe,w as Te,aQ as oe}from"./icons--SBOhPAi.js";import{w as he,o as be,M as m,R,P as r,u as n,c as a,N as o,r as g,K as x,a as K,L as c,O as y,Q as z,S as T,F as we,f as W}from"./vendor-DhFY8mDK.js";const Ce={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Se={class:"page-title"},Ie={class:"page-sub"},ze={style:{display:"flex","align-items":"center",gap:"12px"}},Re={key:0,style:{"text-align":"center",padding:"60px"}},Oe={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Me={key:2,style:{color:"#faad14"}},je={key:3,style:{color:"var(--text-secondary)"}},Ne={key:0,style:{"text-align":"center",padding:"60px"}},Fe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ue={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ae={key:3,style:{color:"#faad14"}},Be={key:4,style:{color:"var(--text-secondary)"}},Le={key:0,style:{"text-align":"center",padding:"40px"}},De={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Je={key:0,style:{"text-align":"center",padding:"40px"}},Pe={__name:"Analytics",setup($e){const{t:l}=_e(),C=ge(),O=g("all"),U=g(!1),A=g(!1),B=g(!1),L=g(!1),D=g(!1),J=g(!1),P=g(20),f=K({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),M=g([]),j=g([]),_=K({entries:0,hits:0,tokensSaved:0,expired:0}),N=g(!1),b=K({totalCalls:0,inputTokens:0,outputTokens:0,totalTokens:0}),q=g([]),se=W(()=>[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:l("analytics.sessionUsageColumns.calls"),key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"110px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"110px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:"Total",key:"totalTokens",dataIndex:"totalTokens",width:"110px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)}]),le=W(()=>[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px",sorter:(e,t)=>(e.provider||"").localeCompare(t.provider||"")},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0,sorter:(e,t)=>(e.model||"").localeCompare(t.model||"")},{title:l("analytics.breakdownColumns.calls"),key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:l("analytics.breakdownColumns.inputTokens"),key:"inputTokens",dataIndex:"inputTokens",width:"120px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:l("analytics.breakdownColumns.outputTokens"),key:"outputTokens",dataIndex:"outputTokens",width:"130px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:l("analytics.breakdownColumns.totalTokens"),key:"totalTokens",dataIndex:"totalTokens",width:"120px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)},{title:l("analytics.breakdownColumns.cost"),key:"cost",dataIndex:"cost",width:"110px",sorter:(e,t)=>(e.cost||0)-(t.cost||0)},{title:l("analytics.breakdownColumns.avgResponseTime"),key:"avgResponseTime",dataIndex:"avgResponseTime",width:"110px",sorter:(e,t)=>(e.avgResponseTime||0)-(t.avgResponseTime||0)}]),ne=W(()=>[{title:l("analytics.recentColumns.timestamp"),key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"Provider",key:"provider",dataIndex:"provider",width:"110px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:l("analytics.recentColumns.input"),key:"inputTokens",dataIndex:"inputTokens",width:"90px"},{title:l("analytics.recentColumns.output"),key:"outputTokens",dataIndex:"outputTokens",width:"90px"},{title:l("analytics.recentColumns.cost"),key:"cost",dataIndex:"cost",width:"100px"},{title:l("analytics.recentColumns.responseTime"),key:"responseTime",dataIndex:"responseTime",width:"100px"}]);function w(e){return(e||"").replace(/,/g,"")}function S(e){try{const t=(e||"").trim(),s=t.search(/[{[]/);return s>=0?JSON.parse(t.slice(s)):null}catch{return null}}function re(e){const t=(e||"").split(`
2
- `);for(const s of t){const u=s.trim(),h=u.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);h&&(f.totalCalls=parseInt(w(h[1]),10)||0);const d=u.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);d&&(f.totalTokens=parseInt(w(d[1]),10)||0);const k=u.match(/cost\s*[::]\s*\$?([\d,.]+)/i);k&&(f.totalCost=parseFloat(w(k[1]))||0);const p=u.match(/(?:avg|average)\s*(?:response\s*)?time\s*[::]\s*([\d,.]+)/i);p&&(f.avgResponseTime=parseFloat(w(p[1]))||0)}}function ie(e){f.totalCalls=e.totalCalls??e.total_calls??e.calls??0,f.totalTokens=e.totalTokens??e.total_tokens??e.tokens??0,f.totalCost=e.totalCost??e.total_cost??e.cost??0,f.avgResponseTime=e.avgResponseTime??e.avg_response_time??e.avgTime??0}function ce(e){return(Array.isArray(e)?e:e.breakdown||e.providers||e.rows||[]).map((s,u)=>({key:u,provider:s.provider||"-",model:s.model||"-",calls:s.calls||s.count||0,inputTokens:s.inputTokens??s.input_tokens??0,outputTokens:s.outputTokens??s.output_tokens??0,totalTokens:s.totalTokens??s.total_tokens??(s.inputTokens??0)+(s.outputTokens??0),cost:s.cost??s.total_cost??0,avgResponseTime:s.avgResponseTime??s.avg_response_time??0}))}function ue(e){return(Array.isArray(e)?e:e.recent||e.records||e.rows||[]).map((s,u)=>({key:u,timestamp:s.timestamp||s.time||s.created_at||"-",provider:s.provider||"-",model:s.model||"-",inputTokens:s.inputTokens??s.input_tokens??0,outputTokens:s.outputTokens??s.output_tokens??0,cost:s.cost??0,responseTime:s.responseTime??s.response_time??0}))}function de(e){_.entries=e.entries??e.count??e.size??0,_.hits=e.hits??e.cacheHits??e.cache_hits??0,_.tokensSaved=e.tokensSaved??e.tokens_saved??0,_.expired=e.expired??e.expiredCount??e.expired_count??0}function pe(e){const t=(e||"").split(`
3
- `);for(const s of t){const u=s.trim(),h=u.match(/entries?\s*[::]\s*([\d,]+)/i);h&&(_.entries=parseInt(w(h[1]),10)||0);const d=u.match(/hits?\s*[::]\s*([\d,]+)/i);d&&(_.hits=parseInt(w(d[1]),10)||0);const k=u.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);k&&(_.tokensSaved=parseInt(w(k[1]),10)||0);const p=u.match(/expired?\s*[::]\s*([\d,]+)/i);p&&(_.expired=parseInt(w(p[1]),10)||0)}}async function G(){U.value=!0;try{const{output:e}=await C.execute(`tokens show --period ${O.value} --json`,15e3),t=S(e);t?ie(t):re(e)}catch(e){console.error("loadSummary failed:",e)}finally{U.value=!1}}async function ye(){A.value=!0;try{const{output:e}=await C.execute("tokens breakdown --json",15e3),t=S(e);t?M.value=ce(t):M.value=[]}catch(e){console.error("loadBreakdown failed:",e),M.value=[]}finally{A.value=!1}}async function X(){B.value=!0;try{const{output:e}=await C.execute(`tokens recent --limit ${P.value} --json`,15e3),t=S(e);t?j.value=ue(t):j.value=[]}catch(e){console.error("loadRecent failed:",e),j.value=[]}finally{B.value=!1}}async function $(){L.value=!0;try{const{output:e}=await C.execute("tokens cache --json",15e3),t=S(e);t?de(t):pe(e)}catch(e){console.error("loadCache failed:",e)}finally{L.value=!1}}async function ke(){D.value=!0;try{const{output:e}=await C.execute("tokens cache --clear --json",15e3),t=S(e);t&&t.error?I.error(l("analytics.messages.cacheClearFailed",{err:t.error})):(I.success(l("analytics.messages.cacheClearOk")),await $())}catch(e){I.error(l("analytics.messages.cacheClearFailed",{err:e.message}))}finally{D.value=!1}}async function me(){J.value=!0;try{const{output:e}=await C.execute("tokens cache --cleanup --json",15e3),t=S(e);t&&t.error?I.error(l("analytics.messages.cacheCleanupFailed",{err:t.error})):(I.success(l("analytics.messages.cacheCleanupOk")),await $())}catch(e){I.error(l("analytics.messages.cacheCleanupFailed",{err:e.message}))}finally{J.value=!1}}async function Y(){N.value=!0;try{const e=await C.sendRaw({type:"usage.global",limit:1e3},15e3);if(e.ok&&e.usage){const t=e.usage.total||{};b.totalCalls=t.calls??0,b.inputTokens=t.inputTokens??t.input_tokens??0,b.outputTokens=t.outputTokens??t.output_tokens??0,b.totalTokens=t.totalTokens??t.total_tokens??0,q.value=(e.usage.byModel||[]).map((s,u)=>({key:u,provider:s.provider||"-",model:s.model||"-",calls:s.calls??0,inputTokens:s.inputTokens??s.input_tokens??0,outputTokens:s.outputTokens??s.output_tokens??0,totalTokens:s.totalTokens??s.total_tokens??0}))}}catch(e){console.warn("loadSessionUsage failed (route may not be available):",e.message)}finally{N.value=!1}}async function Z(){await Promise.all([G(),ye(),X(),$(),Y()])}return he(O,()=>{G()}),be(Z),(e,t)=>{const s=x("a-radio-button"),u=x("a-radio-group"),h=x("a-button"),d=x("a-statistic"),k=x("a-card"),p=x("a-col"),E=x("a-row"),F=x("a-spin"),V=x("a-tag"),Q=x("a-empty"),H=x("a-table"),ve=x("a-space");return c(),m("div",null,[R("div",Ce,[R("div",null,[R("h2",Se,r(n(l)("analytics.title")),1),R("p",Ie,r(n(l)("analytics.subtitle")),1)]),R("div",ze,[a(u,{value:O.value,"onUpdate:value":t[0]||(t[0]=i=>O.value=i),"button-style":"solid",size:"small"},{default:o(()=>[a(s,{value:"today"},{default:o(()=>[y(r(n(l)("analytics.period.today")),1)]),_:1}),a(s,{value:"week"},{default:o(()=>[y(r(n(l)("analytics.period.week")),1)]),_:1}),a(s,{value:"month"},{default:o(()=>[y(r(n(l)("analytics.period.month")),1)]),_:1}),a(s,{value:"all"},{default:o(()=>[y(r(n(l)("analytics.period.all")),1)]),_:1})]),_:1},8,["value"]),a(h,{type:"primary",ghost:"",loading:U.value,onClick:Z},{icon:o(()=>[a(n(ee))]),default:o(()=>[y(" "+r(n(l)("analytics.refresh")),1)]),_:1},8,["loading"])])]),a(E,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(p,{xs:24,sm:12,lg:6},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(d,{title:n(l)("analytics.summary.totalCalls"),value:f.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(n(te))]),suffix:o(()=>[y(r(n(l)("analytics.summary.callsSuffix")),1)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(p,{xs:24,sm:12,lg:6},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(d,{title:n(l)("analytics.summary.totalTokens"),value:f.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(n(ae))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(p,{xs:24,sm:12,lg:6},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(d,{title:n(l)("analytics.summary.totalCost"),value:f.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(n(xe))]),suffix:o(()=>[...t[2]||(t[2]=[y("USD",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1}),a(p,{xs:24,sm:12,lg:6},{default:o(()=>[a(k,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(d,{title:n(l)("analytics.summary.avgResponseTime"),value:f.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(n(ae))]),suffix:o(()=>[...t[3]||(t[3]=[y("ms",-1)])]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),a(k,{title:n(l)("analytics.providerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:o(()=>[A.value?(c(),m("div",Re,[a(F,{size:"large"})])):(c(),z(H,{key:1,columns:le.value,"data-source":M.value,pagination:{pageSize:20,showTotal:i=>n(l)("analytics.totals.rows",{count:i})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:i,record:v})=>[i.key==="provider"?(c(),z(V,{key:0,color:"blue"},{default:o(()=>[y(r(v.provider),1)]),_:2},1024)):T("",!0),i.key==="model"?(c(),m("span",Oe,r(v.model),1)):T("",!0),i.key==="cost"?(c(),m("span",Me,"$"+r((v.cost||0).toFixed(4)),1)):T("",!0),i.key==="avgResponseTime"?(c(),m("span",je,r(v.avgResponseTime||0)+" ms",1)):T("",!0)]),emptyText:o(()=>[a(Q,{description:n(l)("analytics.providerEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),a(k,{title:n(l)("analytics.recentCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(u,{value:P.value,"onUpdate:value":t[1]||(t[1]=i=>P.value=i),size:"small",onChange:X},{default:o(()=>[a(s,{value:10},{default:o(()=>[...t[4]||(t[4]=[y("10",-1)])]),_:1}),a(s,{value:20},{default:o(()=>[...t[5]||(t[5]=[y("20",-1)])]),_:1}),a(s,{value:50},{default:o(()=>[...t[6]||(t[6]=[y("50",-1)])]),_:1})]),_:1},8,["value"])]),default:o(()=>[B.value?(c(),m("div",Ne,[a(F,{size:"large"})])):(c(),z(H,{key:1,columns:ne.value,"data-source":j.value,pagination:{pageSize:20,showTotal:i=>n(l)("analytics.totals.rows",{count:i})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:i,record:v})=>[i.key==="timestamp"?(c(),m("span",Fe,r(v.timestamp),1)):T("",!0),i.key==="provider"?(c(),z(V,{key:1,color:"blue"},{default:o(()=>[y(r(v.provider),1)]),_:2},1024)):T("",!0),i.key==="model"?(c(),m("span",Ue,r(v.model),1)):T("",!0),i.key==="cost"?(c(),m("span",Ae,"$"+r((v.cost||0).toFixed(4)),1)):T("",!0),i.key==="responseTime"?(c(),m("span",Be,r(v.responseTime||0)+" ms",1)):T("",!0)]),emptyText:o(()=>[a(Q,{description:n(l)("analytics.recentEmpty")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1},8,["title"]),a(k,{title:n(l)("analytics.sessionCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(h,{size:"small",loading:N.value,onClick:Y,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(n(ee))]),default:o(()=>[y(" "+r(n(l)("analytics.refresh")),1)]),_:1},8,["loading"])]),default:o(()=>[N.value?(c(),m("div",Le,[a(F)])):(c(),m(we,{key:1},[a(E,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:o(()=>[a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.sessionStats.totalCalls"),value:b.totalCalls,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:o(()=>[a(n(te))]),_:1},8,["title","value"])]),_:1}),a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.sessionStats.inputTokens"),value:b.inputTokens,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.sessionStats.outputTokens"),value:b.outputTokens,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.sessionStats.totalTokens"),value:b.totalTokens,"value-style":{color:"#722ed1",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),a(H,{columns:se.value,"data-source":q.value,pagination:!1,size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:o(({column:i,record:v})=>[i.key==="provider"?(c(),z(V,{key:0,color:"blue"},{default:o(()=>[y(r(v.provider),1)]),_:2},1024)):T("",!0),i.key==="model"?(c(),m("span",De,r(v.model),1)):T("",!0)]),emptyText:o(()=>[a(Q,{description:n(l)("analytics.sessionEmpty")},null,8,["description"])]),_:1},8,["columns","data-source"])],64))]),_:1},8,["title"]),a(k,{title:n(l)("analytics.cacheCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(ve,null,{default:o(()=>[a(h,{size:"small",loading:J.value,onClick:me,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(n(oe))]),default:o(()=>[y(" "+r(n(l)("analytics.cacheActions.cleanup")),1)]),_:1},8,["loading"]),a(h,{size:"small",danger:"",loading:D.value,onClick:ke,style:{"border-color":"var(--border-color)"}},{icon:o(()=>[a(n(oe))]),default:o(()=>[y(" "+r(n(l)("analytics.cacheActions.clear")),1)]),_:1},8,["loading"])]),_:1})]),default:o(()=>[L.value?(c(),m("div",Je,[a(F)])):(c(),z(E,{key:1,gutter:[16,16]},{default:o(()=>[a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.cacheStats.entries"),value:_.entries,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:o(()=>[a(n(Te))]),_:1},8,["title","value"])]),_:1}),a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.cacheStats.hits"),value:_.hits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.cacheStats.tokensSaved"),value:_.tokensSaved,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1}),a(p,{xs:12,sm:6},{default:o(()=>[a(d,{title:n(l)("analytics.cacheStats.expired"),value:_.expired,"value-style":{color:"#ff4d4f",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}))]),_:1},8,["title"])])}}},He=fe(Pe,[["__scopeId","data-v-e9b2b29c"]]);export{He as default};
@@ -1 +0,0 @@
1
- .notif-bell-btn[data-v-af539070]{width:32px;height:32px;border:none;background:transparent;border-radius:50%;cursor:pointer;color:var(--text-primary);display:inline-flex;align-items:center;justify-content:center;font-size:16px;transition:background .15s,transform .15s}.notif-bell-btn[data-v-af539070]:hover{background:var(--bg-card-hover);transform:scale(1.1)}.notif-toolbar[data-v-af539070]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border-color);background:var(--bg-card)}.notif-body[data-v-af539070]{max-height:calc(100vh - 130px);overflow-y:auto}.notif-list[data-v-af539070]{list-style:none;margin:0;padding:0}.notif-item[data-v-af539070]{padding:12px 16px;border-bottom:1px solid var(--border-color);cursor:pointer;transition:background .15s}.notif-item[data-v-af539070]:hover{background:var(--bg-card-hover)}.notif-item.unread[data-v-af539070]{background:#1677ff14}.notif-row[data-v-af539070]{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.notif-title[data-v-af539070]{font-weight:500;color:var(--text-primary);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notif-time[data-v-af539070]{flex-shrink:0;font-size:11px;color:var(--text-muted)}.notif-message[data-v-af539070]{margin-top:4px;font-size:12px;color:var(--text-secondary);line-height:1.5;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.mbh-btn[data-v-05eb475d]{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 10px;border:1px solid var(--border-color);border-radius:14px;background:var(--bg-card);color:var(--text-primary);font-size:11px;cursor:pointer;transition:background .15s,border-color .15s,transform .15s}.mbh-btn[data-v-05eb475d]:hover{background:var(--bg-card-hover);border-color:#52c41a;transform:scale(1.04)}.mbh-btn--active[data-v-05eb475d]{border-color:#52c41a99}.mbh-count[data-v-05eb475d]{line-height:1;font-weight:500;color:var(--text-secondary)}.app-root[data-v-939d6dbb]{height:100vh;background:var(--bg-base);overflow:hidden}.sidebar[data-v-939d6dbb]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s;height:100vh}[data-v-939d6dbb] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden;height:100%}.main-area[data-v-939d6dbb]{background:var(--bg-base);height:100vh;display:flex;flex-direction:column}.logo[data-v-939d6dbb]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-939d6dbb]{padding:0;justify-content:center}.logo-icon[data-v-939d6dbb]{width:24px;height:24px;flex-shrink:0;object-fit:contain}.logo-text[data-v-939d6dbb]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-939d6dbb]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-939d6dbb]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-939d6dbb]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-939d6dbb]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-939d6dbb]{color:#722ed1}.banner-info[data-v-939d6dbb]{flex:1;min-width:0}.banner-name[data-v-939d6dbb]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-939d6dbb]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-939d6dbb]{color:#c084fc}.mode-icon-sm[data-v-939d6dbb]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-939d6dbb]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important;flex:1;overflow-y:auto;overflow-x:hidden}.group-label[data-v-939d6dbb]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-939d6dbb] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-939d6dbb] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-939d6dbb]{margin:4px 0!important}.sidebar-footer[data-v-939d6dbb]{flex-shrink:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-939d6dbb]{justify-content:center;padding:8px 0}.footer-text[data-v-939d6dbb]{color:var(--text-secondary);font-size:11px}.app-header[data-v-939d6dbb]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-939d6dbb],.header-right[data-v-939d6dbb]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-939d6dbb]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-939d6dbb]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-939d6dbb]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-939d6dbb]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-939d6dbb]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-939d6dbb]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-939d6dbb]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-939d6dbb]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-939d6dbb]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-939d6dbb]{margin:0!important;font-size:11px}.lang-switch-btn[data-v-939d6dbb]{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 12px;border:1px solid var(--border-color);border-radius:14px;background:var(--bg-card);color:var(--text-primary);font-size:12px;font-weight:500;cursor:pointer;transition:background .15s,color .15s,border-color .15s,transform .15s}.lang-switch-btn[data-v-939d6dbb]:hover{background:var(--bg-card-hover);color:#1677ff;border-color:#1677ff;transform:scale(1.04)}.lang-switch-icon[data-v-939d6dbb]{font-size:14px}.lang-switch-label[data-v-939d6dbb]{line-height:1}.shell-switch-btn[data-v-939d6dbb]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:background .15s,transform .15s,color .15s;opacity:.6}.shell-switch-btn[data-v-939d6dbb]:hover{opacity:1;transform:scale(1.15);background:var(--bg-card-hover);color:var(--text-primary)}.page-content[data-v-939d6dbb]{padding:24px;overflow:auto;background:var(--bg-base);flex:1;min-height:0}