chainlesschain 0.166.13 → 0.166.14

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 (173) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-BN25cNOD.js → AIOps-C8SyFhOo.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-Da9IP-m5.js → ActionButton-Dup5gFK0.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-D7hkEvQm.js → Analytics-8FyOWA7V.js} +2 -2
  5. package/src/assets/web-panel/assets/{AppLayout-CCV4Xnbc.js → AppLayout-DBzdU9dg.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-CVSnVJeA.js → Artifacts-C_0Z8gNy.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CuYdw5Ag.js → Audit-Cf2a-58m.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-DZCnK-Tf.js → BackgroundAgents-M7w-2zgB.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-cV9FdpTy.js → Backup-CCTHQXoL.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-BRnv6YSp.js → BaseInput-DjXpeFwJ.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-Bw5w87P4.js → Chat-cAvchsJU.js} +5 -5
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-C0GjtUAw.js → ChatBubbleRenderer-DvEvxlZv.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-DaoTqcdt.js → Checkbox-DKs6qvOn.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-B4dYcEIi.js → Codegen-DlkA7b9X.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-mAhuOeuD.js → Col-CkfdKhyJ.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-BK6KEdBk.js → Community-iNXMHzj6.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-CCglmNu5.js → Compact-DQxPEd09.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-Cm8S4of7.js → Compliance-CSKvMCjs.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-Dhs1QLMe.js → Cowork-CkWqazpD.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-CLlhmXWk.js → Cron-k6W8IzhB.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BnHVbaNs.js → Crosschain-C8MS1OuY.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-UzQP9-0O.js → DID-DJuCcgiQ.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-CBdlPClz.js → Dashboard-LeThKzp3.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-axIRPdq1.js → Dropdown-BvxwgpE4.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-DUalW5rx.js → EmailListRenderer-n3e_a1M3.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Bl4W9luY.js → FamilyGuardDashboard-509W6W6v.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-C1yP-uEu.js → Federation-xgZReQm0.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-Xh6Ig5q8.js → FormItemContext-jZOhKcQx.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-C2cz3bt2.js → GenericCardRenderer-Jo0ULzHv.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-C_z63ixg.js → Git-BsRcyWQP.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-BYqB33_3.js → Governance-JlpMYTAk.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-CEULuArm.js → Inference-CUEz872-.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-fgMsu-0H.js → KnowledgeGraph-DgrvvEDU.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-DO9Hdcec.js → Logs-Df-KY4U3.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-BEPDcSwz.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-B8zyLiFe.js → Marketplace-kPZDTOeI.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-BLAN2mWW.js → McpTools-CRRzPqNX.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-CrQcFM7u.js → Memory-D6pNSkg9.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-DVnyiiU-.js → MobileBridge-g-pvtwRC.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-qjCME5OD.js → MobileProjects-Bzayfrfe.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-4JE3C3It.js → Mtc-B7S3W-XL.js} +2 -2
  42. package/src/assets/web-panel/assets/{MtcAudit-CjBuak9I.js → MtcAudit-B8OMEWVb.js} +5 -5
  43. package/src/assets/web-panel/assets/{Multisig-BtPcYQcC.js → Multisig-CowRp7GH.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-Cx653_Ba.js → NLProgramming-BkQNyi4c.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-CkuD3YzS.js → Notes-Cm7gtkKz.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-BgNgU7HH.js → NotificationSettings-CbPTVh9m.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-BTC8W0a-.js → OrderTableRenderer-Dswi26mJ.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-Dmd4Hjxz.js → Organization-BkjQ9yy7.js} +2 -2
  49. package/src/assets/web-panel/assets/{Overflow-C_5DA-G0.js → Overflow-DmRFXP7Y.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-uwslV4XC.js → P2P-DQE1toAu.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-CuNgwVnX.js → PdhVaultBrowser-BujyoDRG.js} +4 -4
  52. package/src/assets/web-panel/assets/{Permissions-CJayVX9H.js → Permissions-xSjfOaiU.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-Cb05H5go.js → PersonalDataHub-B9ICLqVP.js} +4 -4
  54. package/src/assets/web-panel/assets/{Pipeline-BZlGKapZ.js → Pipeline-CUNwyN9E.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-BIzZWYzd.js → Privacy-SOoCricX.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-vEYYyQXQ.js → ProjectInit-CSaFul0F.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-MZqTy5CC.js → ProjectSettings-CueiB_oe.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-CRARUOl8.js → Projects-BOeXvU7y.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-80VAK8PX.js → Providers-CTqf_31h.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-CzRSoIwK.js → QrScannerModal-C8ZP31E9.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-BpwQ2n4C.js → QuickAsk-CPgn4713.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-BC03TZ79.js → Recommend-8_e0zw0i.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-DE59-jaa.js → RemoteSession-iT7lbGqw.js} +3 -3
  64. package/src/assets/web-panel/assets/{Reputation-DOHmeWyA.js → Reputation-B4q9SUOz.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-hc5RZl1D.js → Row-CA_nASyL.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-Cv5uMP7E.js → RssFeed-Cwb0E3yv.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-qohu7Ug0.js → Search-D9iVsOxJ.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-drCPFWV5.js → Security-DPLbYchG.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-BAEgUeRy.js → Services-DGMVL_LF.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-CkJkKBlo.js → Skeleton-B_6kym0D.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-bMuKEpez.js → Skills-Ds6r0dXB.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-DxWQVHRC.js → Sla-BLHAbBhb.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-BpS8idmV.js → SpeechSettings-CZuddd14.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-BPBLlW5v.js → SyncSettings-CdBq7oSl.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-C4SLEeUh.js → Tasks-DfT60Nyl.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-r-wfU39U.js → Templates-RLfsKy2V.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-C7vjRmLN.js → Tenant-Cw8xCNLE.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-DdzeFCV2.js → Terminal-BOUkNu4f.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-CYyWN2KD.js → TimelineRenderer-CgGZWaRm.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-D8A9osUg.js → Tokens-CpwjVyir.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-DBvrNlyS.js → Trigger-DL21H-eb.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-DBVAGc7o.js → Trust-B3ffFclW.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-C1vQUCRJ.js → UkeySign-CkBeb5aI.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-BKs4dah4.js → VideoEditing-U2iVaE3r.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-ByIuj3lD.js → Wallet-CQk2wzYd.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-DYlAFCm9.js → WebAuthn-DYIuIYzT.js} +5 -5
  87. package/src/assets/web-panel/assets/{WorkflowEditor-Dwyadd0c.js → WorkflowEditor-tg1c2mZQ.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-Bm2f3s08.js → chat-CtL61spq.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-C8ORSh7V.js → colors-DKpbeo8s.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-1iVlnsM-.js → compact-item-gPZsrswt.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-CmqNyUSL.js → createContext-CfHlwzVr.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-DdqnMhzi.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-rUMaX3Ul.js → hasIn-MV47g_6X.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-CCEyz58d.js → index-6G0ETFTW.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BVtnizyC.js → index-BBw52sEl.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BIvM-uAX.js → index-BN-wxSQ8.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DvedhJeM.js → index-BOyGUuBE.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BCOhTILd.js → index-BQp5M0s1.js} +1 -1
  99. package/src/assets/web-panel/assets/index-BcK8o4ke.js +1 -0
  100. package/src/assets/web-panel/assets/{index-DVJ1uKf4.js → index-BjlPD7GO.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BQL9r73Y.js → index-C4lF-f_z.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-C5RfRciU.js → index-C6nC_DyY.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DgUE51Pz.js → index-C9RF4ieu.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CkFvuAex.js → index-C9gtY4nG.js} +3 -3
  105. package/src/assets/web-panel/assets/{index-C-J5-pGH.js → index-CB1HnbNK.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-Bf1PlIHp.js → index-CRv_uMLV.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-tqTx5wXo.js → index-C_B9LiKs.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-Bgw4Y2rU.js → index-Cjv0kKCU.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DJxtPFOh.js → index-CmM9jqwe.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-pHWA7bmM.js → index-CmPJpLoD.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Dsve5Gkv.js → index-CzfxTSPW.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-B59OWAs7.js → index-D1XB5-t5.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BK-RY0-7.js → index-DGtEBodr.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BC32_0xT.js → index-DIeJmlAA.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-OcbzdRpT.js → index-DMMvlLp9.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-geQinnns.js → index-DU4rZpiK.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-D98FXb0w.js → index-D_Pl1GnW.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BC8Wb6cy.js → index-Dd19vRwy.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-fPK6GFEg.js → index-Ddcpj1El.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CfiHyVyl.js → index-Df9sWKpl.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-C-ZIHi42.js → index-DfLyHCWi.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DDHk911Q.js → index-DnZ_zS1M.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BFniLMn9.js → index-DsH-i_3d.js} +1 -1
  124. package/src/assets/web-panel/assets/index-DvbAjyYI.js +1 -0
  125. package/src/assets/web-panel/assets/{index-Dcck8QfW.js → index-ExAGPAnX.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DwMdWKiF.js → index-Rb7CRMw9.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-reUHhuz8.js → index-Zvkt9xqi.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BgwLNxmr.js → index-bSFrAszw.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-C3B1S-mW.js → index-fYcS7NS0.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CTfEmKK0.js → index-srBc9U_s.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-B53c3diB.js → index-xUlgG0Xe.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-B8BrB0Ls.js → index-yxxXlqBA.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-CuA-cpkL.js → initDefaultProps-BeOZoSZ4.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-CimmE_9b.js → motion-BXE8VMKx.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-DlGlrltz.js → move-I9sdvPGX.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-CK6BJQ07.js → mtc-parser-d25zrJd0.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-BKjBfZfB.js → omit-D71V_T4e.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-B2chVYw9.js → pickAttrs-BNZKpIAR.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-BW8aLJJ3.js → placementArrow-jOcgxTTz.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-dXlPl66S.js → responsiveObserve-pta_O8AU.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-hSa89S4G.js → slide-Dlq6om7z.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-DM6KLt-s.js → statusUtils-BnkO_yRv.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-C9MQAK15.js → styleChecker-p8NfWmcG.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-BpQDpP0z.js → useFlexGapSupport-KcjZZ5U7.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-C7rtRViA.js → useFs-gqonDMWB.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-Dm15xafq.js → usePersonalDataHub-jIIfE4go.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-mEiEytw4.js → vnode-Dyo7fBrM.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-DzPxflhY.js → zoom-6l8BMg9W.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/command-help-index.json +2 -2
  151. package/src/commands/agent.js +49 -27
  152. package/src/commands/record-replay.js +772 -0
  153. package/src/commands/skill.js +3 -0
  154. package/src/data/changelog.json +13 -0
  155. package/src/lib/agent-sandbox.js +4 -8
  156. package/src/lib/agent-team/team-message-tools.js +23 -5
  157. package/src/lib/process-execution-broker/credential-transport.js +31 -0
  158. package/src/lib/process-execution-broker/index.js +74 -0
  159. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  160. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  161. package/src/lib/process-execution-broker/windows-sandbox.cs +7 -3
  162. package/src/lib/record-replay/browser-target-policy.js +406 -0
  163. package/src/lib/record-replay/index.js +4 -0
  164. package/src/lib/record-replay/playwright-ui-driver.js +83 -20
  165. package/src/lib/record-replay/playwright-ui-recorder.js +611 -0
  166. package/src/lib/record-replay/recorded-skill-package.js +486 -0
  167. package/src/lib/record-replay/recorded-skill-store.js +1166 -0
  168. package/src/lib/record-replay/skill-recorder.js +634 -64
  169. package/src/runtime/headless-runner.js +72 -51
  170. package/src/assets/web-panel/assets/MarkdownRenderer-BkrK04xW.js +0 -1
  171. package/src/assets/web-panel/assets/devWarning-B69RCDDH.js +0 -1
  172. package/src/assets/web-panel/assets/index-9biMQ-tw.js +0 -1
  173. package/src/assets/web-panel/assets/index-COie87kl.js +0 -1
@@ -1 +1 @@
1
- import{I as p,J as f,U as C,R as u,c as l,K as r,V as b,o as ae,a as Y,b as U,r as y,P as i,Q as _,F as x,Z as V,S as T}from"./vendor-Bn1JzzAn.js";import{t as $,_ as me,u as le,b as oe,d as h}from"./index-CkFvuAex.js";import{a1 as ve,b0 as fe,a0 as be,f as ke,aa as _e,G as ye,R as ge}from"./icons-DG5UD-6K.js";const he=Object.freeze(["draft","published","deprecated","suspended"]),Se=Object.freeze(["pending","running","success","failed","timeout"]);function B(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function Ce(t,o=0){if(!t||typeof t!="object")return null;const c=t.id||"";return c?{key:c,id:c,name:String(t.name||""),version:String(t.version||""),description:String(t.description||""),endpoint:t.endpoint||"",pricing:t.pricing??null,status:String(t.status||"draft").toLowerCase(),owner:t.owner||"",invocationCount:B(t.invocationCount??t.invocation_count,0),createdAt:t.createdAt??t.created_at??null,updatedAt:t.updatedAt??t.updated_at??null,_idx:o}:null}function re(t){const o=$(t);return Array.isArray(o)?o.map(Ce).filter(Boolean):[]}function xe(t,o=0){if(!t||typeof t!="object")return null;const c=t.id||"";return c?{key:c,id:c,serviceId:t.serviceId||t.service_id||"",callerId:t.callerId||t.caller_id||"",input:t.input??null,output:t.output??null,status:String(t.status||"success").toLowerCase(),durationMs:t.durationMs??t.duration_ms??null,error:t.error||"",createdAt:t.createdAt??t.created_at??null,_idx:o}:null}function ne(t){const o=$(t);return Array.isArray(o)?o.map(xe).filter(Boolean):[]}function se(t){const o={total:0,counts:{success:0,failed:0,timeout:0,pending:0,running:0},successRate:0,avgDurationMs:0,scopedToService:null},c=$(t);if(!c||typeof c!="object"||Array.isArray(c))return o;o.total=B(c.total,0),o.successRate=B(c.successRate??c.success_rate,0),o.avgDurationMs=B(c.avgDurationMs??c.avg_duration_ms,0),o.scopedToService=c.scopedToService??c.scoped_to_service??null;const e=c.counts&&typeof c.counts=="object"?c.counts:{};for(const A of Object.keys(o.counts))o.counts[A]=B(e[A],0);return o}function Fe(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const we={__name:"Marketplace",setup(t,{expose:o}){o();const c=le(),{t:e}=oe(),A=y(!1),K=y(!1),R=y(!1),O=y([]),F=y([]),w=y({total:0,counts:{success:0,failed:0,timeout:0,pending:0,running:0},successRate:0,avgDurationMs:0,scopedToService:null}),I=y("services"),E=y(""),L=y(""),P=y(null),J=y(!1),M=y(!1),k=Y({name:"",version:"",description:"",endpoint:"",owner:"",status:"published"}),m=Y({serviceId:"",caller:"",status:"success",durationMs:null,error:""}),N=y(""),W=U(()=>[{title:e("marketplace.serviceCols.name"),key:"name"},{title:e("marketplace.serviceCols.status"),key:"status",width:"120px"},{title:e("marketplace.serviceCols.invocationCount"),key:"invocationCount",width:"110px"},{title:e("marketplace.serviceCols.owner"),key:"owner",width:"180px"},{title:e("marketplace.serviceCols.createdAt"),key:"createdAt",width:"160px"},{title:e("marketplace.serviceCols.action"),key:"action",width:"180px"}]),q=U(()=>[{title:e("marketplace.invocationCols.service"),key:"service"},{title:e("marketplace.invocationCols.caller"),key:"caller",width:"180px"},{title:e("marketplace.invocationCols.status"),key:"status",width:"100px"},{title:e("marketplace.invocationCols.durationMs"),key:"durationMs",width:"110px"},{title:e("marketplace.invocationCols.createdAt"),key:"createdAt",width:"160px"}]),j=U(()=>O.value.filter(n=>n.status==="published").length),D=U(()=>w.value.successRate*100),Z=U(()=>{let n=O.value;if(E.value&&(n=n.filter(s=>s.status===E.value)),L.value){const s=L.value.toLowerCase();n=n.filter(v=>v.name.toLowerCase().includes(s))}return n}),z=U(()=>P.value?F.value.filter(n=>n.serviceId===P.value):F.value);function g(n){const s=`marketplace.serviceStatusLabels.${n}`,v=e(s);return v===s?n:v}function G(n){return{draft:"default",published:"green",deprecated:"orange",suspended:"red"}[n]||"default"}function Q(n){const s=`marketplace.invocationStatusLabels.${n}`,v=e(s);return v===s?n:v}function X(n){return{pending:"default",running:"processing",success:"green",failed:"red",timeout:"orange"}[n]||"default"}function H(n){return n?n.length>28?n.slice(0,16)+"..."+n.slice(-8):n:""}function a(n,s){return n?n.length>s?n.slice(0,s)+"...":n:""}function d(n){const s=O.value.find(v=>v.id===n);return s?s.name:e("marketplace.deletedService")}async function S(){A.value=!0;try{const[n,s,v]=await Promise.all([c.execute("marketplace list --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("marketplace invocations --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("marketplace stats --json",1e4).catch(()=>({output:""}))]);O.value=re(n.output),F.value=ne(s.output),w.value=se(v.output)}catch(n){h.error(e("marketplace.msg.loadFailed")+": "+(n?.message||n))}finally{A.value=!1}}async function ie(){const n=k.name.trim();if(!n){h.warning(e("marketplace.msg.publishEmpty"));return}K.value=!0;try{const s=[`marketplace publish "${n.replace(/"/g,'\\"')}"`];k.version.trim()&&s.push(`--version "${k.version.trim().replace(/"/g,'\\"')}"`),k.description.trim()&&s.push(`--description "${k.description.trim().replace(/"/g,'\\"')}"`),k.endpoint.trim()&&s.push(`--endpoint "${k.endpoint.trim().replace(/"/g,'\\"')}"`),k.owner.trim()&&s.push(`--owner "${k.owner.trim().replace(/"/g,'\\"')}"`),s.push(`--status ${k.status}`),s.push("--json");const{output:v}=await c.execute(s.join(" "),15e3);if(/error|failed|失败/i.test(v)&&!/"id"/.test(v)){h.error(e("marketplace.msg.publishFailed")+": "+v.slice(0,120));return}h.success(e("marketplace.msg.publishSuccess")),J.value=!1,ee(),await S()}catch(s){h.error(e("marketplace.msg.publishFailed")+": "+(s?.message||s))}finally{K.value=!1}}function ce(n){if(n.status!=="published"){h.warning(e("marketplace.msg.recordOnlyPublished"));return}m.serviceId=n.id,m.caller="",m.status="success",m.durationMs=null,m.error="",N.value=n.name,M.value=!0}async function ue(){R.value=!0;try{const n=[`marketplace record ${m.serviceId}`];m.caller.trim()&&n.push(`--caller "${m.caller.trim().replace(/"/g,'\\"')}"`),n.push(`--status ${m.status}`),m.durationMs!=null&&n.push(`--duration-ms ${m.durationMs}`),(m.status==="failed"||m.status==="timeout")&&m.error.trim()&&n.push(`--error "${m.error.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:s}=await c.execute(n.join(" "),15e3);if(/error|failed|失败/i.test(s)&&!/"id"/.test(s)){h.error(e("marketplace.msg.recordFailed")+": "+s.slice(0,120));return}h.success(e("marketplace.msg.recordSuccess")),M.value=!1,I.value="invocations",await S()}catch(n){h.error(e("marketplace.msg.recordFailed")+": "+(n?.message||n))}finally{R.value=!1}}async function de(n,s){if(s!==n.status)try{const{output:v}=await c.execute(`marketplace status ${n.id} ${s} --json`,1e4);if(/error|invalid|失败/i.test(v)&&!/"status"/.test(v)){h.error(e("marketplace.msg.transitionFailed")+": "+v.slice(0,120));return}h.success(e("marketplace.msg.transitionSuccess",{label:g(s)})),await S()}catch(v){h.error(e("marketplace.msg.transitionFailed")+": "+(v?.message||v))}}function ee(){k.name="",k.version="",k.description="",k.endpoint="",k.owner="",k.status="published"}function pe(){m.serviceId="",m.caller="",m.status="success",m.durationMs=null,m.error="",N.value=""}ae(S);const te={ws:c,t:e,loading:A,publishing:K,recording:R,services:O,invocations:F,stats:w,activeTab:I,statusFilter:E,nameFilter:L,invocationServiceFilter:P,showPublishModal:J,showRecordModal:M,publishForm:k,recordForm:m,recordTargetName:N,serviceColumns:W,invocationColumns:q,publishedCount:j,successRatePct:D,filteredServices:Z,filteredInvocations:z,statusLabel:g,serviceStatusColor:G,invocationStatusLabel:Q,invocationStatusColor:X,shortDid:H,truncate:a,serviceName:d,loadAll:S,publishService:ie,openRecord:ce,recordInvocation:ue,transitionStatus:de,resetPublishForm:ee,resetRecordForm:pe,ref:y,computed:U,onMounted:ae,reactive:Y,get ReloadOutlined(){return ge},get CloudUploadOutlined(){return ye},get AppstoreOutlined(){return _e},get CheckCircleOutlined(){return ke},get ThunderboltOutlined(){return be},get RiseOutlined(){return fe},get ClockCircleOutlined(){return ve},get message(){return h},get useI18n(){return oe},get useWsStore(){return le},get parseServices(){return re},get parseInvocations(){return ne},get parseStats(){return se},get formatMarketplaceTime(){return Fe},get SERVICE_STATUSES(){return he},get INVOCATION_STATUSES(){return Se}};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}},Te={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Re={class:"page-title"},Ie={class:"page-sub"},Ae={class:"filter-bar"},Oe={style:{color:"var(--text-primary)","font-weight":"500"}},Me={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},ze={key:2,style:{color:"#722ed1","font-weight":"500"}},Ue={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Le={key:1,style:{color:"var(--text-muted)"}},Ee={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ne={class:"filter-bar"},je={style:{color:"var(--text-primary)"}},De={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Ve={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Be={key:1,style:{color:"var(--text-muted)"}},Ke={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Je={key:1,style:{color:"var(--text-muted)"}},We={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},qe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}};function Ge(t,o,c,e,A,K){const R=p("a-button"),O=p("a-space"),F=p("a-statistic"),w=p("a-card"),I=p("a-col"),E=p("a-row"),L=p("a-radio-button"),P=p("a-radio-group"),J=p("a-input-search"),M=p("a-tag"),k=p("a-menu-item"),m=p("a-menu"),N=p("a-dropdown"),W=p("a-table"),q=p("a-tab-pane"),j=p("a-select-option"),D=p("a-select"),Z=p("a-tabs"),z=p("a-input"),g=p("a-form-item"),G=p("a-textarea"),Q=p("a-form"),X=p("a-modal"),H=p("a-input-number");return i(),f("div",null,[C("div",Te,[C("div",null,[C("h2",Re,u(t.$t("marketplace.title")),1),C("p",Ie,u(t.$t("marketplace.subtitle")),1)]),l(O,null,{default:r(()=>[l(R,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[l(e.ReloadOutlined)]),default:r(()=>[_(" "+u(t.$t("marketplace.refresh")),1)]),_:1},8,["loading"]),l(R,{type:"primary",onClick:o[0]||(o[0]=a=>e.showPublishModal=!0)},{icon:r(()=>[l(e.CloudUploadOutlined)]),default:r(()=>[_(" "+u(t.$t("marketplace.publish")),1)]),_:1})]),_:1})]),b(" Stats overview "),l(E,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[l(I,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.total"),value:e.services.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[l(e.AppstoreOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),l(I,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.published"),value:e.publishedCount,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:r(()=>[l(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),l(I,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.invocations"),value:e.stats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[l(e.ThunderboltOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),l(I,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.successRate"),value:e.successRatePct,suffix:"%",precision:1,"value-style":{color:e.stats.successRate>=.9?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:r(()=>[l(e.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),l(I,{xs:24,sm:8,lg:4},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.avgDuration"),value:e.stats.avgDurationMs,suffix:"ms","value-style":{color:"#faad14",fontSize:"20px"}},{prefix:r(()=>[l(e.ClockCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),b(" Tabs "),l(Z,{activeKey:e.activeTab,"onUpdate:activeKey":o[4]||(o[4]=a=>e.activeTab=a),class:"market-tabs"},{default:r(()=>[b(" ── Services tab ──────────────────────────────────────────── "),l(q,{key:"services",tab:t.$t("marketplace.tabs.services")},{default:r(()=>[C("div",Ae,[l(P,{value:e.statusFilter,"onUpdate:value":o[1]||(o[1]=a=>e.statusFilter=a),size:"small","button-style":"solid"},{default:r(()=>[l(L,{value:""},{default:r(()=>[_(u(t.$t("marketplace.filter.all")),1)]),_:1}),(i(!0),f(x,null,V(e.SERVICE_STATUSES,a=>(i(),T(L,{key:a,value:a},{default:r(()=>[_(u(e.statusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),l(J,{value:e.nameFilter,"onUpdate:value":o[2]||(o[2]=a=>e.nameFilter=a),placeholder:t.$t("marketplace.filter.namePlaceholder"),"allow-clear":"",style:{"max-width":"280px"}},null,8,["value","placeholder"])]),l(W,{columns:e.serviceColumns,"data-source":e.filteredServices,pagination:{pageSize:20,showTotal:a=>t.$t("marketplace.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:a,record:d})=>[a.key==="name"?(i(),f(x,{key:0},[C("span",Oe,u(d.name),1),d.version?(i(),T(M,{key:0,color:"blue",style:{"margin-left":"6px","font-size":"10px"}},{default:r(()=>[_(" v"+u(d.version),1)]),_:2},1024)):b("v-if",!0),d.description?(i(),f("div",Me,u(e.truncate(d.description,80)),1)):b("v-if",!0)],64)):b("v-if",!0),a.key==="status"?(i(),T(M,{key:1,color:e.serviceStatusColor(d.status)},{default:r(()=>[_(u(e.statusLabel(d.status)),1)]),_:2},1032,["color"])):b("v-if",!0),a.key==="invocationCount"?(i(),f("span",ze,u(d.invocationCount),1)):b("v-if",!0),a.key==="owner"?(i(),f(x,{key:3},[d.owner?(i(),f("span",Ue,u(e.shortDid(d.owner)),1)):(i(),f("span",Le,"—"))],64)):b("v-if",!0),a.key==="createdAt"?(i(),f("span",Ee,u(e.formatMarketplaceTime(d.createdAt)),1)):b("v-if",!0),a.key==="action"?(i(),f(x,{key:5},[l(R,{size:"small",type:"link",onClick:S=>e.openRecord(d)},{default:r(()=>[_(u(t.$t("marketplace.table.actionRecord")),1)]),_:1},8,["onClick"]),l(N,{trigger:["click"]},{overlay:r(()=>[l(m,{onClick:S=>e.transitionStatus(d,S.key)},{default:r(()=>[(i(!0),f(x,null,V(e.SERVICE_STATUSES,S=>(i(),T(k,{key:S,disabled:S===d.status},{default:r(()=>[_(u(e.statusLabel(S)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:r(()=>[l(R,{size:"small",type:"link"},{default:r(()=>[_(u(t.$t("marketplace.table.statusDropdown")),1)]),_:1})]),_:2},1024)],64)):b("v-if",!0)]),emptyText:r(()=>[C("div",Pe,[l(e.AppstoreOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+u(e.statusFilter||e.nameFilter?t.$t("marketplace.table.emptyFiltered"):t.$t("marketplace.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),b(" ── Invocations tab ───────────────────────────────────────── "),l(q,{key:"invocations",tab:t.$t("marketplace.tabs.invocations")},{default:r(()=>[C("div",Ne,[l(D,{value:e.invocationServiceFilter,"onUpdate:value":o[3]||(o[3]=a=>e.invocationServiceFilter=a),placeholder:t.$t("marketplace.filter.byService"),"allow-clear":"",style:{width:"280px"},size:"small"},{default:r(()=>[(i(!0),f(x,null,V(e.services,a=>(i(),T(j,{key:a.id,value:a.id},{default:r(()=>[_(u(a.name)+" ("+u(e.statusLabel(a.status))+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),l(W,{columns:e.invocationColumns,"data-source":e.filteredInvocations,pagination:{pageSize:20,showTotal:a=>t.$t("marketplace.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:a,record:d})=>[a.key==="service"?(i(),f(x,{key:0},[C("span",je,u(e.serviceName(d.serviceId)),1),C("div",De,u(d.serviceId.slice(0,8)),1)],64)):b("v-if",!0),a.key==="caller"?(i(),f(x,{key:1},[d.callerId?(i(),f("span",Ve,u(e.shortDid(d.callerId)),1)):(i(),f("span",Be,"—"))],64)):b("v-if",!0),a.key==="status"?(i(),T(M,{key:2,color:e.invocationStatusColor(d.status)},{default:r(()=>[_(u(e.invocationStatusLabel(d.status)),1)]),_:2},1032,["color"])):b("v-if",!0),a.key==="durationMs"?(i(),f(x,{key:3},[d.durationMs!=null?(i(),f("span",Ke,u(d.durationMs)+" ms ",1)):(i(),f("span",Je,"—"))],64)):b("v-if",!0),a.key==="createdAt"?(i(),f("span",We,u(e.formatMarketplaceTime(d.createdAt)),1)):b("v-if",!0)]),emptyText:r(()=>[C("div",qe,[l(e.ThunderboltOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+u(t.$t("marketplace.table.emptyInvocations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),b(" ── Publish service modal ─────────────────────────────────── "),l(X,{open:e.showPublishModal,"onUpdate:open":o[11]||(o[11]=a=>e.showPublishModal=a),title:t.$t("marketplace.publish_modal.title"),"confirm-loading":e.publishing,width:560,"ok-text":t.$t("marketplace.publish_modal.ok"),"cancel-text":t.$t("marketplace.publish_modal.cancel"),onOk:e.publishService,onCancel:e.resetPublishForm},{default:r(()=>[l(Q,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[l(g,{label:t.$t("marketplace.publish_modal.nameLabel"),required:""},{default:r(()=>[l(z,{value:e.publishForm.name,"onUpdate:value":o[5]||(o[5]=a=>e.publishForm.name=a),placeholder:t.$t("marketplace.publish_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.versionLabel")},{default:r(()=>[l(z,{value:e.publishForm.version,"onUpdate:value":o[6]||(o[6]=a=>e.publishForm.version=a),placeholder:t.$t("marketplace.publish_modal.versionPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.descLabel")},{default:r(()=>[l(G,{value:e.publishForm.description,"onUpdate:value":o[7]||(o[7]=a=>e.publishForm.description=a),"auto-size":{minRows:2,maxRows:5}},null,8,["value"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.endpointLabel")},{default:r(()=>[l(z,{value:e.publishForm.endpoint,"onUpdate:value":o[8]||(o[8]=a=>e.publishForm.endpoint=a),placeholder:t.$t("marketplace.publish_modal.endpointPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.ownerLabel")},{default:r(()=>[l(z,{value:e.publishForm.owner,"onUpdate:value":o[9]||(o[9]=a=>e.publishForm.owner=a),placeholder:t.$t("marketplace.publish_modal.ownerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.statusLabel")},{default:r(()=>[l(D,{value:e.publishForm.status,"onUpdate:value":o[10]||(o[10]=a=>e.publishForm.status=a)},{default:r(()=>[(i(!0),f(x,null,V(e.SERVICE_STATUSES,a=>(i(),T(j,{key:a,value:a},{default:r(()=>[_(u(e.statusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),b(" ── Record invocation modal ───────────────────────────────── "),l(X,{open:e.showRecordModal,"onUpdate:open":o[16]||(o[16]=a=>e.showRecordModal=a),title:t.$t("marketplace.record_modal.title",{name:e.recordTargetName}),"confirm-loading":e.recording,width:520,"ok-text":t.$t("marketplace.record_modal.ok"),"cancel-text":t.$t("marketplace.record_modal.cancel"),onOk:e.recordInvocation,onCancel:e.resetRecordForm},{default:r(()=>[l(Q,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[l(g,{label:t.$t("marketplace.record_modal.callerLabel")},{default:r(()=>[l(z,{value:e.recordForm.caller,"onUpdate:value":o[12]||(o[12]=a=>e.recordForm.caller=a),placeholder:t.$t("marketplace.record_modal.callerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.record_modal.statusLabel")},{default:r(()=>[l(D,{value:e.recordForm.status,"onUpdate:value":o[13]||(o[13]=a=>e.recordForm.status=a)},{default:r(()=>[(i(!0),f(x,null,V(e.INVOCATION_STATUSES,a=>(i(),T(j,{key:a,value:a},{default:r(()=>[_(u(e.invocationStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.record_modal.durationLabel")},{default:r(()=>[l(H,{value:e.recordForm.durationMs,"onUpdate:value":o[14]||(o[14]=a=>e.recordForm.durationMs=a),min:0,max:36e5,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),e.recordForm.status==="failed"||e.recordForm.status==="timeout"?(i(),T(g,{key:0,label:t.$t("marketplace.record_modal.errorLabel")},{default:r(()=>[l(G,{value:e.recordForm.error,"onUpdate:value":o[15]||(o[15]=a=>e.recordForm.error=a),"auto-size":{minRows:2,maxRows:4}},null,8,["value"])]),_:1},8,["label"])):b("v-if",!0)]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const He=me(we,[["render",Ge],["__scopeId","data-v-892f664d"],["__file","/tmp/cc-web-panel-IRmDbX/repo/packages/web-panel/src/views/Marketplace.vue"]]);export{He as default};
1
+ import{I as p,J as f,U as C,R as u,c as l,K as r,V as b,o as ae,a as Y,b as L,r as y,P as i,Q as _,F as x,Z as V,S as T}from"./vendor-Bn1JzzAn.js";import{t as $,_ as me,u as le,b as oe,d as h}from"./index-C9gtY4nG.js";import{a1 as ve,b0 as fe,a0 as be,f as ke,aa as _e,G as ye,R as ge}from"./icons-DG5UD-6K.js";const he=Object.freeze(["draft","published","deprecated","suspended"]),Se=Object.freeze(["pending","running","success","failed","timeout"]);function B(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function Ce(t,o=0){if(!t||typeof t!="object")return null;const c=t.id||"";return c?{key:c,id:c,name:String(t.name||""),version:String(t.version||""),description:String(t.description||""),endpoint:t.endpoint||"",pricing:t.pricing??null,status:String(t.status||"draft").toLowerCase(),owner:t.owner||"",invocationCount:B(t.invocationCount??t.invocation_count,0),createdAt:t.createdAt??t.created_at??null,updatedAt:t.updatedAt??t.updated_at??null,_idx:o}:null}function re(t){const o=$(t);return Array.isArray(o)?o.map(Ce).filter(Boolean):[]}function xe(t,o=0){if(!t||typeof t!="object")return null;const c=t.id||"";return c?{key:c,id:c,serviceId:t.serviceId||t.service_id||"",callerId:t.callerId||t.caller_id||"",input:t.input??null,output:t.output??null,status:String(t.status||"success").toLowerCase(),durationMs:t.durationMs??t.duration_ms??null,error:t.error||"",createdAt:t.createdAt??t.created_at??null,_idx:o}:null}function ne(t){const o=$(t);return Array.isArray(o)?o.map(xe).filter(Boolean):[]}function se(t){const o={total:0,counts:{success:0,failed:0,timeout:0,pending:0,running:0},successRate:0,avgDurationMs:0,scopedToService:null},c=$(t);if(!c||typeof c!="object"||Array.isArray(c))return o;o.total=B(c.total,0),o.successRate=B(c.successRate??c.success_rate,0),o.avgDurationMs=B(c.avgDurationMs??c.avg_duration_ms,0),o.scopedToService=c.scopedToService??c.scoped_to_service??null;const e=c.counts&&typeof c.counts=="object"?c.counts:{};for(const A of Object.keys(o.counts))o.counts[A]=B(e[A],0);return o}function Fe(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const we={__name:"Marketplace",setup(t,{expose:o}){o();const c=le(),{t:e}=oe(),A=y(!1),K=y(!1),I=y(!1),O=y([]),F=y([]),w=y({total:0,counts:{success:0,failed:0,timeout:0,pending:0,running:0},successRate:0,avgDurationMs:0,scopedToService:null}),R=y("services"),E=y(""),U=y(""),P=y(null),J=y(!1),M=y(!1),k=Y({name:"",version:"",description:"",endpoint:"",owner:"",status:"published"}),m=Y({serviceId:"",caller:"",status:"success",durationMs:null,error:""}),N=y(""),W=L(()=>[{title:e("marketplace.serviceCols.name"),key:"name"},{title:e("marketplace.serviceCols.status"),key:"status",width:"120px"},{title:e("marketplace.serviceCols.invocationCount"),key:"invocationCount",width:"110px"},{title:e("marketplace.serviceCols.owner"),key:"owner",width:"180px"},{title:e("marketplace.serviceCols.createdAt"),key:"createdAt",width:"160px"},{title:e("marketplace.serviceCols.action"),key:"action",width:"180px"}]),q=L(()=>[{title:e("marketplace.invocationCols.service"),key:"service"},{title:e("marketplace.invocationCols.caller"),key:"caller",width:"180px"},{title:e("marketplace.invocationCols.status"),key:"status",width:"100px"},{title:e("marketplace.invocationCols.durationMs"),key:"durationMs",width:"110px"},{title:e("marketplace.invocationCols.createdAt"),key:"createdAt",width:"160px"}]),j=L(()=>O.value.filter(n=>n.status==="published").length),D=L(()=>w.value.successRate*100),Z=L(()=>{let n=O.value;if(E.value&&(n=n.filter(s=>s.status===E.value)),U.value){const s=U.value.toLowerCase();n=n.filter(v=>v.name.toLowerCase().includes(s))}return n}),z=L(()=>P.value?F.value.filter(n=>n.serviceId===P.value):F.value);function g(n){const s=`marketplace.serviceStatusLabels.${n}`,v=e(s);return v===s?n:v}function G(n){return{draft:"default",published:"green",deprecated:"orange",suspended:"red"}[n]||"default"}function Q(n){const s=`marketplace.invocationStatusLabels.${n}`,v=e(s);return v===s?n:v}function X(n){return{pending:"default",running:"processing",success:"green",failed:"red",timeout:"orange"}[n]||"default"}function H(n){return n?n.length>28?n.slice(0,16)+"..."+n.slice(-8):n:""}function a(n,s){return n?n.length>s?n.slice(0,s)+"...":n:""}function d(n){const s=O.value.find(v=>v.id===n);return s?s.name:e("marketplace.deletedService")}async function S(){A.value=!0;try{const[n,s,v]=await Promise.all([c.execute("marketplace list --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("marketplace invocations --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("marketplace stats --json",1e4).catch(()=>({output:""}))]);O.value=re(n.output),F.value=ne(s.output),w.value=se(v.output)}catch(n){h.error(e("marketplace.msg.loadFailed")+": "+(n?.message||n))}finally{A.value=!1}}async function ie(){const n=k.name.trim();if(!n){h.warning(e("marketplace.msg.publishEmpty"));return}K.value=!0;try{const s=[`marketplace publish "${n.replace(/"/g,'\\"')}"`];k.version.trim()&&s.push(`--version "${k.version.trim().replace(/"/g,'\\"')}"`),k.description.trim()&&s.push(`--description "${k.description.trim().replace(/"/g,'\\"')}"`),k.endpoint.trim()&&s.push(`--endpoint "${k.endpoint.trim().replace(/"/g,'\\"')}"`),k.owner.trim()&&s.push(`--owner "${k.owner.trim().replace(/"/g,'\\"')}"`),s.push(`--status ${k.status}`),s.push("--json");const{output:v}=await c.execute(s.join(" "),15e3);if(/error|failed|失败/i.test(v)&&!/"id"/.test(v)){h.error(e("marketplace.msg.publishFailed")+": "+v.slice(0,120));return}h.success(e("marketplace.msg.publishSuccess")),J.value=!1,ee(),await S()}catch(s){h.error(e("marketplace.msg.publishFailed")+": "+(s?.message||s))}finally{K.value=!1}}function ce(n){if(n.status!=="published"){h.warning(e("marketplace.msg.recordOnlyPublished"));return}m.serviceId=n.id,m.caller="",m.status="success",m.durationMs=null,m.error="",N.value=n.name,M.value=!0}async function ue(){I.value=!0;try{const n=[`marketplace record ${m.serviceId}`];m.caller.trim()&&n.push(`--caller "${m.caller.trim().replace(/"/g,'\\"')}"`),n.push(`--status ${m.status}`),m.durationMs!=null&&n.push(`--duration-ms ${m.durationMs}`),(m.status==="failed"||m.status==="timeout")&&m.error.trim()&&n.push(`--error "${m.error.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:s}=await c.execute(n.join(" "),15e3);if(/error|failed|失败/i.test(s)&&!/"id"/.test(s)){h.error(e("marketplace.msg.recordFailed")+": "+s.slice(0,120));return}h.success(e("marketplace.msg.recordSuccess")),M.value=!1,R.value="invocations",await S()}catch(n){h.error(e("marketplace.msg.recordFailed")+": "+(n?.message||n))}finally{I.value=!1}}async function de(n,s){if(s!==n.status)try{const{output:v}=await c.execute(`marketplace status ${n.id} ${s} --json`,1e4);if(/error|invalid|失败/i.test(v)&&!/"status"/.test(v)){h.error(e("marketplace.msg.transitionFailed")+": "+v.slice(0,120));return}h.success(e("marketplace.msg.transitionSuccess",{label:g(s)})),await S()}catch(v){h.error(e("marketplace.msg.transitionFailed")+": "+(v?.message||v))}}function ee(){k.name="",k.version="",k.description="",k.endpoint="",k.owner="",k.status="published"}function pe(){m.serviceId="",m.caller="",m.status="success",m.durationMs=null,m.error="",N.value=""}ae(S);const te={ws:c,t:e,loading:A,publishing:K,recording:I,services:O,invocations:F,stats:w,activeTab:R,statusFilter:E,nameFilter:U,invocationServiceFilter:P,showPublishModal:J,showRecordModal:M,publishForm:k,recordForm:m,recordTargetName:N,serviceColumns:W,invocationColumns:q,publishedCount:j,successRatePct:D,filteredServices:Z,filteredInvocations:z,statusLabel:g,serviceStatusColor:G,invocationStatusLabel:Q,invocationStatusColor:X,shortDid:H,truncate:a,serviceName:d,loadAll:S,publishService:ie,openRecord:ce,recordInvocation:ue,transitionStatus:de,resetPublishForm:ee,resetRecordForm:pe,ref:y,computed:L,onMounted:ae,reactive:Y,get ReloadOutlined(){return ge},get CloudUploadOutlined(){return ye},get AppstoreOutlined(){return _e},get CheckCircleOutlined(){return ke},get ThunderboltOutlined(){return be},get RiseOutlined(){return fe},get ClockCircleOutlined(){return ve},get message(){return h},get useI18n(){return oe},get useWsStore(){return le},get parseServices(){return re},get parseInvocations(){return ne},get parseStats(){return se},get formatMarketplaceTime(){return Fe},get SERVICE_STATUSES(){return he},get INVOCATION_STATUSES(){return Se}};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}},Te={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={class:"page-title"},Re={class:"page-sub"},Ae={class:"filter-bar"},Oe={style:{color:"var(--text-primary)","font-weight":"500"}},Me={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},ze={key:2,style:{color:"#722ed1","font-weight":"500"}},Le={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Ue={key:1,style:{color:"var(--text-muted)"}},Ee={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ne={class:"filter-bar"},je={style:{color:"var(--text-primary)"}},De={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Ve={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Be={key:1,style:{color:"var(--text-muted)"}},Ke={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Je={key:1,style:{color:"var(--text-muted)"}},We={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},qe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}};function Ge(t,o,c,e,A,K){const I=p("a-button"),O=p("a-space"),F=p("a-statistic"),w=p("a-card"),R=p("a-col"),E=p("a-row"),U=p("a-radio-button"),P=p("a-radio-group"),J=p("a-input-search"),M=p("a-tag"),k=p("a-menu-item"),m=p("a-menu"),N=p("a-dropdown"),W=p("a-table"),q=p("a-tab-pane"),j=p("a-select-option"),D=p("a-select"),Z=p("a-tabs"),z=p("a-input"),g=p("a-form-item"),G=p("a-textarea"),Q=p("a-form"),X=p("a-modal"),H=p("a-input-number");return i(),f("div",null,[C("div",Te,[C("div",null,[C("h2",Ie,u(t.$t("marketplace.title")),1),C("p",Re,u(t.$t("marketplace.subtitle")),1)]),l(O,null,{default:r(()=>[l(I,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[l(e.ReloadOutlined)]),default:r(()=>[_(" "+u(t.$t("marketplace.refresh")),1)]),_:1},8,["loading"]),l(I,{type:"primary",onClick:o[0]||(o[0]=a=>e.showPublishModal=!0)},{icon:r(()=>[l(e.CloudUploadOutlined)]),default:r(()=>[_(" "+u(t.$t("marketplace.publish")),1)]),_:1})]),_:1})]),b(" Stats overview "),l(E,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[l(R,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.total"),value:e.services.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[l(e.AppstoreOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),l(R,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.published"),value:e.publishedCount,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:r(()=>[l(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),l(R,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.invocations"),value:e.stats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[l(e.ThunderboltOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),l(R,{xs:12,sm:8,lg:5},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.successRate"),value:e.successRatePct,suffix:"%",precision:1,"value-style":{color:e.stats.successRate>=.9?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:r(()=>[l(e.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),l(R,{xs:24,sm:8,lg:4},{default:r(()=>[l(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[l(F,{title:t.$t("marketplace.stats.avgDuration"),value:e.stats.avgDurationMs,suffix:"ms","value-style":{color:"#faad14",fontSize:"20px"}},{prefix:r(()=>[l(e.ClockCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),b(" Tabs "),l(Z,{activeKey:e.activeTab,"onUpdate:activeKey":o[4]||(o[4]=a=>e.activeTab=a),class:"market-tabs"},{default:r(()=>[b(" ── Services tab ──────────────────────────────────────────── "),l(q,{key:"services",tab:t.$t("marketplace.tabs.services")},{default:r(()=>[C("div",Ae,[l(P,{value:e.statusFilter,"onUpdate:value":o[1]||(o[1]=a=>e.statusFilter=a),size:"small","button-style":"solid"},{default:r(()=>[l(U,{value:""},{default:r(()=>[_(u(t.$t("marketplace.filter.all")),1)]),_:1}),(i(!0),f(x,null,V(e.SERVICE_STATUSES,a=>(i(),T(U,{key:a,value:a},{default:r(()=>[_(u(e.statusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),l(J,{value:e.nameFilter,"onUpdate:value":o[2]||(o[2]=a=>e.nameFilter=a),placeholder:t.$t("marketplace.filter.namePlaceholder"),"allow-clear":"",style:{"max-width":"280px"}},null,8,["value","placeholder"])]),l(W,{columns:e.serviceColumns,"data-source":e.filteredServices,pagination:{pageSize:20,showTotal:a=>t.$t("marketplace.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:a,record:d})=>[a.key==="name"?(i(),f(x,{key:0},[C("span",Oe,u(d.name),1),d.version?(i(),T(M,{key:0,color:"blue",style:{"margin-left":"6px","font-size":"10px"}},{default:r(()=>[_(" v"+u(d.version),1)]),_:2},1024)):b("v-if",!0),d.description?(i(),f("div",Me,u(e.truncate(d.description,80)),1)):b("v-if",!0)],64)):b("v-if",!0),a.key==="status"?(i(),T(M,{key:1,color:e.serviceStatusColor(d.status)},{default:r(()=>[_(u(e.statusLabel(d.status)),1)]),_:2},1032,["color"])):b("v-if",!0),a.key==="invocationCount"?(i(),f("span",ze,u(d.invocationCount),1)):b("v-if",!0),a.key==="owner"?(i(),f(x,{key:3},[d.owner?(i(),f("span",Le,u(e.shortDid(d.owner)),1)):(i(),f("span",Ue,"—"))],64)):b("v-if",!0),a.key==="createdAt"?(i(),f("span",Ee,u(e.formatMarketplaceTime(d.createdAt)),1)):b("v-if",!0),a.key==="action"?(i(),f(x,{key:5},[l(I,{size:"small",type:"link",onClick:S=>e.openRecord(d)},{default:r(()=>[_(u(t.$t("marketplace.table.actionRecord")),1)]),_:1},8,["onClick"]),l(N,{trigger:["click"]},{overlay:r(()=>[l(m,{onClick:S=>e.transitionStatus(d,S.key)},{default:r(()=>[(i(!0),f(x,null,V(e.SERVICE_STATUSES,S=>(i(),T(k,{key:S,disabled:S===d.status},{default:r(()=>[_(u(e.statusLabel(S)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:r(()=>[l(I,{size:"small",type:"link"},{default:r(()=>[_(u(t.$t("marketplace.table.statusDropdown")),1)]),_:1})]),_:2},1024)],64)):b("v-if",!0)]),emptyText:r(()=>[C("div",Pe,[l(e.AppstoreOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+u(e.statusFilter||e.nameFilter?t.$t("marketplace.table.emptyFiltered"):t.$t("marketplace.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),b(" ── Invocations tab ───────────────────────────────────────── "),l(q,{key:"invocations",tab:t.$t("marketplace.tabs.invocations")},{default:r(()=>[C("div",Ne,[l(D,{value:e.invocationServiceFilter,"onUpdate:value":o[3]||(o[3]=a=>e.invocationServiceFilter=a),placeholder:t.$t("marketplace.filter.byService"),"allow-clear":"",style:{width:"280px"},size:"small"},{default:r(()=>[(i(!0),f(x,null,V(e.services,a=>(i(),T(j,{key:a.id,value:a.id},{default:r(()=>[_(u(a.name)+" ("+u(e.statusLabel(a.status))+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),l(W,{columns:e.invocationColumns,"data-source":e.filteredInvocations,pagination:{pageSize:20,showTotal:a=>t.$t("marketplace.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:a,record:d})=>[a.key==="service"?(i(),f(x,{key:0},[C("span",je,u(e.serviceName(d.serviceId)),1),C("div",De,u(d.serviceId.slice(0,8)),1)],64)):b("v-if",!0),a.key==="caller"?(i(),f(x,{key:1},[d.callerId?(i(),f("span",Ve,u(e.shortDid(d.callerId)),1)):(i(),f("span",Be,"—"))],64)):b("v-if",!0),a.key==="status"?(i(),T(M,{key:2,color:e.invocationStatusColor(d.status)},{default:r(()=>[_(u(e.invocationStatusLabel(d.status)),1)]),_:2},1032,["color"])):b("v-if",!0),a.key==="durationMs"?(i(),f(x,{key:3},[d.durationMs!=null?(i(),f("span",Ke,u(d.durationMs)+" ms ",1)):(i(),f("span",Je,"—"))],64)):b("v-if",!0),a.key==="createdAt"?(i(),f("span",We,u(e.formatMarketplaceTime(d.createdAt)),1)):b("v-if",!0)]),emptyText:r(()=>[C("div",qe,[l(e.ThunderboltOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+u(t.$t("marketplace.table.emptyInvocations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),b(" ── Publish service modal ─────────────────────────────────── "),l(X,{open:e.showPublishModal,"onUpdate:open":o[11]||(o[11]=a=>e.showPublishModal=a),title:t.$t("marketplace.publish_modal.title"),"confirm-loading":e.publishing,width:560,"ok-text":t.$t("marketplace.publish_modal.ok"),"cancel-text":t.$t("marketplace.publish_modal.cancel"),onOk:e.publishService,onCancel:e.resetPublishForm},{default:r(()=>[l(Q,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[l(g,{label:t.$t("marketplace.publish_modal.nameLabel"),required:""},{default:r(()=>[l(z,{value:e.publishForm.name,"onUpdate:value":o[5]||(o[5]=a=>e.publishForm.name=a),placeholder:t.$t("marketplace.publish_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.versionLabel")},{default:r(()=>[l(z,{value:e.publishForm.version,"onUpdate:value":o[6]||(o[6]=a=>e.publishForm.version=a),placeholder:t.$t("marketplace.publish_modal.versionPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.descLabel")},{default:r(()=>[l(G,{value:e.publishForm.description,"onUpdate:value":o[7]||(o[7]=a=>e.publishForm.description=a),"auto-size":{minRows:2,maxRows:5}},null,8,["value"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.endpointLabel")},{default:r(()=>[l(z,{value:e.publishForm.endpoint,"onUpdate:value":o[8]||(o[8]=a=>e.publishForm.endpoint=a),placeholder:t.$t("marketplace.publish_modal.endpointPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.ownerLabel")},{default:r(()=>[l(z,{value:e.publishForm.owner,"onUpdate:value":o[9]||(o[9]=a=>e.publishForm.owner=a),placeholder:t.$t("marketplace.publish_modal.ownerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.publish_modal.statusLabel")},{default:r(()=>[l(D,{value:e.publishForm.status,"onUpdate:value":o[10]||(o[10]=a=>e.publishForm.status=a)},{default:r(()=>[(i(!0),f(x,null,V(e.SERVICE_STATUSES,a=>(i(),T(j,{key:a,value:a},{default:r(()=>[_(u(e.statusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),b(" ── Record invocation modal ───────────────────────────────── "),l(X,{open:e.showRecordModal,"onUpdate:open":o[16]||(o[16]=a=>e.showRecordModal=a),title:t.$t("marketplace.record_modal.title",{name:e.recordTargetName}),"confirm-loading":e.recording,width:520,"ok-text":t.$t("marketplace.record_modal.ok"),"cancel-text":t.$t("marketplace.record_modal.cancel"),onOk:e.recordInvocation,onCancel:e.resetRecordForm},{default:r(()=>[l(Q,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[l(g,{label:t.$t("marketplace.record_modal.callerLabel")},{default:r(()=>[l(z,{value:e.recordForm.caller,"onUpdate:value":o[12]||(o[12]=a=>e.recordForm.caller=a),placeholder:t.$t("marketplace.record_modal.callerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.record_modal.statusLabel")},{default:r(()=>[l(D,{value:e.recordForm.status,"onUpdate:value":o[13]||(o[13]=a=>e.recordForm.status=a)},{default:r(()=>[(i(!0),f(x,null,V(e.INVOCATION_STATUSES,a=>(i(),T(j,{key:a,value:a},{default:r(()=>[_(u(e.invocationStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),l(g,{label:t.$t("marketplace.record_modal.durationLabel")},{default:r(()=>[l(H,{value:e.recordForm.durationMs,"onUpdate:value":o[14]||(o[14]=a=>e.recordForm.durationMs=a),min:0,max:36e5,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),e.recordForm.status==="failed"||e.recordForm.status==="timeout"?(i(),T(g,{key:0,label:t.$t("marketplace.record_modal.errorLabel")},{default:r(()=>[l(G,{value:e.recordForm.error,"onUpdate:value":o[15]||(o[15]=a=>e.recordForm.error=a),"auto-size":{minRows:2,maxRows:4}},null,8,["value"])]),_:1},8,["label"])):b("v-if",!0)]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const He=me(we,[["render",Ge],["__scopeId","data-v-892f664d"],["__file","/tmp/cc-web-panel-eI5lXL/repo/packages/web-panel/src/views/Marketplace.vue"]]);export{He as default};
@@ -1,4 +1,4 @@
1
- import{I as O,P as o,J as u,F as E,Z as K,V as x,U as f,R as s,c as g,K as y,Q as j,S as C,$ as Ce,b as L,o as ue,r as S}from"./vendor-Bn1JzzAn.js";import{u as ne,_ as ve,b as me}from"./index-CkFvuAex.js";import{at as Ae,au as Oe,aq as Re,f as Ve,af as je,a4 as Me,R as Ue}from"./icons-DG5UD-6K.js";function Q(r){if(r&&typeof r.ok=="boolean"&&!r.ok)throw new Error(r.error||"MCP call failed");return r?.result??r??null}function fe(){const r=ne();async function a(p){const c=await r.sendRaw(p?{type:"mcp.list_tools",serverName:p}:{type:"mcp.list_tools"},15e3);return Q(c)}async function t(p,c,T={}){if(typeof p!="string"||!p)throw new Error("serverName is required");if(typeof c!="string"||!c)throw new Error("toolName is required");const h=await r.sendRaw({type:"mcp.call_tool",serverName:p,toolName:c,params:T},6e4);return Q(h)}async function e(p){const c=await r.sendRaw(p?{type:"mcp.list_resources",serverName:p}:{type:"mcp.list_resources"},15e3);return Q(c)}async function i(p,c){if(typeof p!="string"||!p)throw new Error("serverName is required");if(typeof c!="string"||!c)throw new Error("uri is required");const T=await r.sendRaw({type:"mcp.read_resource",serverName:p,uri:c},3e4);return Q(T)}return{listTools:a,callTool:t,listResources:e,readResource:i}}function q(r){return!r||typeof r!="object"?[]:r.type!=="object"||!r.properties||typeof r.properties!="object"?[]:se(r,[])}function se(r,a){const t=new Set(Array.isArray(r.required)?r.required:[]),e=[],i=r.properties||{};for(const[p,c]of Object.entries(i)){if(!c||typeof c!="object")continue;const T=[...a,p],h=t.has(p);if(re(c.type)==="object"&&c.properties&&typeof c.properties=="object"){const R=se(c,T);R.length===0?e.push(pe(T,c,h,"raw")):e.push(...R);continue}e.push(pe(T,c,h))}return e}function pe(r,a,t,e){const i=re(a.type),p=typeof a.description=="string"?a.description:"",c=r.join("."),T=a.title||r[r.length-1],h=Array.isArray(a.enum)&&a.enum.length>0;let w="raw",R=null,A;if(e)w=e;else if(h)w="select";else if(i==="string")w=Le(a,p)?"textarea":"text";else if(i==="integer"||i==="number")w="number";else if(i==="boolean")w="boolean";else if(i==="array"){const V=a.items&&typeof a.items=="object"?a.items:null,n=V?re(V.type):null;n==="string"?(w="tags",R="string"):n==="object"&&V.properties&&typeof V.properties=="object"&&(w="objectList",A=se(V,[]),A.length===0&&(w="raw",A=void 0))}return{name:c,path:r,type:i,widget:w,label:T,description:p,required:t,default:a.default,enum:h?a.enum.slice():void 0,itemsType:R,...A?{itemFields:A}:{}}}function re(r){return typeof r=="string"?r:Array.isArray(r)&&r.find(t=>t&&t!=="null")||"any"}function Le(r,a){return r.format==="long-text"||r.format==="textarea"||typeof r.maxLength=="number"&&r.maxLength>200||a.length>120}function ye(r){const a={};for(const t of r){if(t.default!==void 0){a[t.name]=ae(t.default);continue}t.widget==="boolean"?a[t.name]=!1:t.widget==="tags"?a[t.name]=[]:t.widget==="number"?a[t.name]=null:t.widget==="raw"?a[t.name]="":t.widget==="objectList"?a[t.name]=[]:a[t.name]=""}return a}function ae(r){if(Array.isArray(r))return r.map(ae);if(r&&typeof r=="object"){const a={};for(const[t,e]of Object.entries(r))a[t]=ae(e);return a}return r}function le(r,a){const t={},e={};for(const i of r){const p=Array.isArray(i.path)?i.path:String(i.name).split("."),c=a?.[i.name];if(Ie(c,i.widget)){i.required&&(t[i.name]="必填");continue}if(i.widget==="number"){const h=typeof c=="number"?c:Number(c);if(Number.isNaN(h)){t[i.name]="必须是数字";continue}if(i.type==="integer"&&!Number.isInteger(h)){t[i.name]="必须是整数";continue}B(e,p,h);continue}if(i.widget==="boolean"){B(e,p,!!c);continue}if(i.widget==="tags"){const h=Array.isArray(c)?c:String(c).split(/[\n,]/).map(w=>w.trim()).filter(Boolean);B(e,p,h);continue}if(i.widget==="select"){if(Array.isArray(i.enum)&&!i.enum.includes(c)){t[i.name]="值不在允许的选项内";continue}B(e,p,c);continue}if(i.widget==="raw"){try{B(e,p,JSON.parse(c))}catch(h){t[i.name]=`JSON 解析失败:${h.message}`}continue}if(i.widget==="objectList"){if(!Array.isArray(c)){t[i.name]="必须是列表";continue}if(c.length===0)continue;const h=[];let w=!1;for(let R=0;R<c.length;R++){const A=c[R];if(!A||typeof A!="object"){t[`${i.name}[${R}]`]="必须是对象",w=!0;continue}const V=le(i.itemFields||[],A);if(!V.ok){w=!0;for(const[n,l]of Object.entries(V.errors))t[`${i.name}[${R}].${n}`]=l;continue}h.push(V.params)}w||B(e,p,h);continue}B(e,p,c)}return Object.keys(t).length>0?{ok:!1,errors:t}:{ok:!0,params:e}}function B(r,a,t){if(a.length===1){r[a[0]]=t;return}let e=r;for(let i=0;i<a.length-1;i++){const p=a[i];(e[p]===void 0||typeof e[p]!="object"||Array.isArray(e[p]))&&(e[p]={}),e=e[p]}e[a[a.length-1]]=t}function Ie(r,a){return r==null?!0:a==="boolean"?!1:a==="number"?r===""||r===null:a==="tags"?Array.isArray(r)?r.length===0:String(r).trim()==="":a==="objectList"?r==null:typeof r=="string"?r.trim()==="":!1}const Ee={__name:"McpToolForm",props:{schema:{type:Object,default:null},modelValue:{type:Object,default:()=>({})},errors:{type:Object,default:()=>({})}},emits:["update:modelValue"],setup(r,{expose:a,emit:t}){const e=r,i=t,p=L(()=>q(e.schema));function c(l){const b=Math.max(0,(l.path?.length??1)-1);return b>0?`margin-left: ${b*16}px;`:""}let T=null;function h(l){const b=l.path||[l.name];if(b.length<=1)return T=null,"";const m=b.slice(0,-1).join(".");return m===T?"":(T=m,m)}function w(l,b){i("update:modelValue",{...e.modelValue,[l]:b})}function R(l,b,m,z){const P=Array.isArray(e.modelValue[l])?e.modelValue[l].slice():[];P[b]={...P[b]||{},[m]:z},i("update:modelValue",{...e.modelValue,[l]:P})}function A(l){const b=Array.isArray(e.modelValue[l.name])?e.modelValue[l.name].slice():[],m={};for(const z of l.itemFields||[])z.default!==void 0?m[z.name]=z.default:z.widget==="boolean"?m[z.name]=!1:z.widget==="number"?m[z.name]=null:m[z.name]="";b.push(m),i("update:modelValue",{...e.modelValue,[l.name]:b})}function V(l,b){const m=Array.isArray(e.modelValue[l])?e.modelValue[l].slice():[];m.splice(b,1),i("update:modelValue",{...e.modelValue,[l]:m})}a({fields:p});const n={props:e,emit:i,fields:p,indentStyle:c,get lastParentKey(){return T},set lastParentKey(l){T=l},parentBreadcrumb:h,set:w,setItem:R,addItem:A,removeItem:V,computed:L,get PlusOutlined(){return Ae},get extractFields(){return q}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},Pe={key:0,style:{color:"var(--text-muted)","font-size":"12px",padding:"8px 0"}},Fe={key:1,style:{display:"flex","flex-direction":"column",gap:"14px"}},Be={key:0,style:{color:"var(--text-muted)","font-size":"10px","font-family":"monospace","margin-bottom":"4px"}},Ne={style:{"margin-bottom":"4px"}},qe={style:{"font-family":"monospace","font-size":"12px"}},Je={key:0,style:{color:"#ff4d4f","margin-left":"4px"}},Ke={key:1,style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},He={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-bottom":"8px"}},De={style:{color:"var(--text-muted)","font-size":"11px"}},We={style:{display:"flex","flex-direction":"column",gap:"10px"}},Xe={style:{"font-family":"monospace","font-size":"11px"}},Ge={key:0,style:{color:"#ff4d4f","margin-left":"4px"}},Qe={key:5,style:{color:"#ff4d4f","font-size":"11px"}},Ye={key:10,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}};function Ze(r,a,t,e,i,p){const c=O("a-tag"),T=O("a-input"),h=O("a-textarea"),w=O("a-input-number"),R=O("a-switch"),A=O("a-select"),V=O("a-button");return e.fields.length?(o(),u("div",Fe,[(o(!0),u(E,null,K(e.fields,n=>(o(),u(E,{key:n.name},[x(" Nested-leaf indent: 16px per parent path component "),f("div",{style:Ce(e.indentStyle(n))},[x(` Group breadcrumb shown ONCE per parent group transition so the
1
+ import{I as O,P as o,J as u,F as E,Z as K,V as x,U as f,R as s,c as g,K as y,Q as R,S as C,$ as Ce,b as U,o as ue,r as S}from"./vendor-Bn1JzzAn.js";import{u as ne,_ as ve,b as me}from"./index-C9gtY4nG.js";import{at as Ae,au as Oe,aq as Ve,f as je,af as Re,a4 as Me,R as Le}from"./icons-DG5UD-6K.js";function Q(r){if(r&&typeof r.ok=="boolean"&&!r.ok)throw new Error(r.error||"MCP call failed");return r?.result??r??null}function fe(){const r=ne();async function a(p){const c=await r.sendRaw(p?{type:"mcp.list_tools",serverName:p}:{type:"mcp.list_tools"},15e3);return Q(c)}async function t(p,c,T={}){if(typeof p!="string"||!p)throw new Error("serverName is required");if(typeof c!="string"||!c)throw new Error("toolName is required");const h=await r.sendRaw({type:"mcp.call_tool",serverName:p,toolName:c,params:T},6e4);return Q(h)}async function e(p){const c=await r.sendRaw(p?{type:"mcp.list_resources",serverName:p}:{type:"mcp.list_resources"},15e3);return Q(c)}async function i(p,c){if(typeof p!="string"||!p)throw new Error("serverName is required");if(typeof c!="string"||!c)throw new Error("uri is required");const T=await r.sendRaw({type:"mcp.read_resource",serverName:p,uri:c},3e4);return Q(T)}return{listTools:a,callTool:t,listResources:e,readResource:i}}function q(r){return!r||typeof r!="object"?[]:r.type!=="object"||!r.properties||typeof r.properties!="object"?[]:se(r,[])}function se(r,a){const t=new Set(Array.isArray(r.required)?r.required:[]),e=[],i=r.properties||{};for(const[p,c]of Object.entries(i)){if(!c||typeof c!="object")continue;const T=[...a,p],h=t.has(p);if(re(c.type)==="object"&&c.properties&&typeof c.properties=="object"){const V=se(c,T);V.length===0?e.push(pe(T,c,h,"raw")):e.push(...V);continue}e.push(pe(T,c,h))}return e}function pe(r,a,t,e){const i=re(a.type),p=typeof a.description=="string"?a.description:"",c=r.join("."),T=a.title||r[r.length-1],h=Array.isArray(a.enum)&&a.enum.length>0;let w="raw",V=null,A;if(e)w=e;else if(h)w="select";else if(i==="string")w=Ue(a,p)?"textarea":"text";else if(i==="integer"||i==="number")w="number";else if(i==="boolean")w="boolean";else if(i==="array"){const j=a.items&&typeof a.items=="object"?a.items:null,n=j?re(j.type):null;n==="string"?(w="tags",V="string"):n==="object"&&j.properties&&typeof j.properties=="object"&&(w="objectList",A=se(j,[]),A.length===0&&(w="raw",A=void 0))}return{name:c,path:r,type:i,widget:w,label:T,description:p,required:t,default:a.default,enum:h?a.enum.slice():void 0,itemsType:V,...A?{itemFields:A}:{}}}function re(r){return typeof r=="string"?r:Array.isArray(r)&&r.find(t=>t&&t!=="null")||"any"}function Ue(r,a){return r.format==="long-text"||r.format==="textarea"||typeof r.maxLength=="number"&&r.maxLength>200||a.length>120}function ye(r){const a={};for(const t of r){if(t.default!==void 0){a[t.name]=ae(t.default);continue}t.widget==="boolean"?a[t.name]=!1:t.widget==="tags"?a[t.name]=[]:t.widget==="number"?a[t.name]=null:t.widget==="raw"?a[t.name]="":t.widget==="objectList"?a[t.name]=[]:a[t.name]=""}return a}function ae(r){if(Array.isArray(r))return r.map(ae);if(r&&typeof r=="object"){const a={};for(const[t,e]of Object.entries(r))a[t]=ae(e);return a}return r}function le(r,a){const t={},e={};for(const i of r){const p=Array.isArray(i.path)?i.path:String(i.name).split("."),c=a?.[i.name];if(Ie(c,i.widget)){i.required&&(t[i.name]="必填");continue}if(i.widget==="number"){const h=typeof c=="number"?c:Number(c);if(Number.isNaN(h)){t[i.name]="必须是数字";continue}if(i.type==="integer"&&!Number.isInteger(h)){t[i.name]="必须是整数";continue}B(e,p,h);continue}if(i.widget==="boolean"){B(e,p,!!c);continue}if(i.widget==="tags"){const h=Array.isArray(c)?c:String(c).split(/[\n,]/).map(w=>w.trim()).filter(Boolean);B(e,p,h);continue}if(i.widget==="select"){if(Array.isArray(i.enum)&&!i.enum.includes(c)){t[i.name]="值不在允许的选项内";continue}B(e,p,c);continue}if(i.widget==="raw"){try{B(e,p,JSON.parse(c))}catch(h){t[i.name]=`JSON 解析失败:${h.message}`}continue}if(i.widget==="objectList"){if(!Array.isArray(c)){t[i.name]="必须是列表";continue}if(c.length===0)continue;const h=[];let w=!1;for(let V=0;V<c.length;V++){const A=c[V];if(!A||typeof A!="object"){t[`${i.name}[${V}]`]="必须是对象",w=!0;continue}const j=le(i.itemFields||[],A);if(!j.ok){w=!0;for(const[n,l]of Object.entries(j.errors))t[`${i.name}[${V}].${n}`]=l;continue}h.push(j.params)}w||B(e,p,h);continue}B(e,p,c)}return Object.keys(t).length>0?{ok:!1,errors:t}:{ok:!0,params:e}}function B(r,a,t){if(a.length===1){r[a[0]]=t;return}let e=r;for(let i=0;i<a.length-1;i++){const p=a[i];(e[p]===void 0||typeof e[p]!="object"||Array.isArray(e[p]))&&(e[p]={}),e=e[p]}e[a[a.length-1]]=t}function Ie(r,a){return r==null?!0:a==="boolean"?!1:a==="number"?r===""||r===null:a==="tags"?Array.isArray(r)?r.length===0:String(r).trim()==="":a==="objectList"?r==null:typeof r=="string"?r.trim()==="":!1}const Ee={__name:"McpToolForm",props:{schema:{type:Object,default:null},modelValue:{type:Object,default:()=>({})},errors:{type:Object,default:()=>({})}},emits:["update:modelValue"],setup(r,{expose:a,emit:t}){const e=r,i=t,p=U(()=>q(e.schema));function c(l){const b=Math.max(0,(l.path?.length??1)-1);return b>0?`margin-left: ${b*16}px;`:""}let T=null;function h(l){const b=l.path||[l.name];if(b.length<=1)return T=null,"";const m=b.slice(0,-1).join(".");return m===T?"":(T=m,m)}function w(l,b){i("update:modelValue",{...e.modelValue,[l]:b})}function V(l,b,m,z){const P=Array.isArray(e.modelValue[l])?e.modelValue[l].slice():[];P[b]={...P[b]||{},[m]:z},i("update:modelValue",{...e.modelValue,[l]:P})}function A(l){const b=Array.isArray(e.modelValue[l.name])?e.modelValue[l.name].slice():[],m={};for(const z of l.itemFields||[])z.default!==void 0?m[z.name]=z.default:z.widget==="boolean"?m[z.name]=!1:z.widget==="number"?m[z.name]=null:m[z.name]="";b.push(m),i("update:modelValue",{...e.modelValue,[l.name]:b})}function j(l,b){const m=Array.isArray(e.modelValue[l])?e.modelValue[l].slice():[];m.splice(b,1),i("update:modelValue",{...e.modelValue,[l]:m})}a({fields:p});const n={props:e,emit:i,fields:p,indentStyle:c,get lastParentKey(){return T},set lastParentKey(l){T=l},parentBreadcrumb:h,set:w,setItem:V,addItem:A,removeItem:j,computed:U,get PlusOutlined(){return Ae},get extractFields(){return q}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},Pe={key:0,style:{color:"var(--text-muted)","font-size":"12px",padding:"8px 0"}},Fe={key:1,style:{display:"flex","flex-direction":"column",gap:"14px"}},Be={key:0,style:{color:"var(--text-muted)","font-size":"10px","font-family":"monospace","margin-bottom":"4px"}},Ne={style:{"margin-bottom":"4px"}},qe={style:{"font-family":"monospace","font-size":"12px"}},Je={key:0,style:{color:"#ff4d4f","margin-left":"4px"}},Ke={key:1,style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},He={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-bottom":"8px"}},We={style:{color:"var(--text-muted)","font-size":"11px"}},Xe={style:{display:"flex","flex-direction":"column",gap:"10px"}},De={style:{"font-family":"monospace","font-size":"11px"}},Ge={key:0,style:{color:"#ff4d4f","margin-left":"4px"}},Qe={key:5,style:{color:"#ff4d4f","font-size":"11px"}},Ye={key:10,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}};function Ze(r,a,t,e,i,p){const c=O("a-tag"),T=O("a-input"),h=O("a-textarea"),w=O("a-input-number"),V=O("a-switch"),A=O("a-select"),j=O("a-button");return e.fields.length?(o(),u("div",Fe,[(o(!0),u(E,null,K(e.fields,n=>(o(),u(E,{key:n.name},[x(" Nested-leaf indent: 16px per parent path component "),f("div",{style:Ce(e.indentStyle(n))},[x(` Group breadcrumb shown ONCE per parent group transition so the
2
2
  user can tell "address.street" + "address.city" are siblings.
3
- The previous-field tracker is computed inline. `),e.parentBreadcrumb(n)!==""?(o(),u("div",Be,s(e.parentBreadcrumb(n)),1)):x("v-if",!0),f("div",Ne,[f("span",qe,s(n.label),1),n.required?(o(),u("span",Je,"*")):x("v-if",!0),g(c,{size:"small",style:{"margin-left":"8px","font-size":"10px"}},{default:y(()=>[j(s(n.type)+s(n.itemsType?`<${n.itemsType}>`:""),1)]),_:2},1024)]),n.description?(o(),u("div",Ke,s(n.description),1)):x("v-if",!0),n.widget==="text"?(o(),C(T,{key:2,value:t.modelValue[n.name]??"",placeholder:n.default!==void 0?`默认 ${n.default}`:"",size:"small","onUpdate:value":l=>e.set(n.name,l)},null,8,["value","placeholder","onUpdate:value"])):n.widget==="textarea"?(o(),C(h,{key:3,value:t.modelValue[n.name]??"",rows:4,placeholder:n.default!==void 0?`默认 ${n.default}`:"","onUpdate:value":l=>e.set(n.name,l)},null,8,["value","placeholder","onUpdate:value"])):n.widget==="number"?(o(),C(w,{key:4,value:t.modelValue[n.name],size:"small",placeholder:n.default!==void 0?`默认 ${n.default}`:"",style:{width:"100%"},"onUpdate:value":l=>e.set(n.name,l)},null,8,["value","placeholder","onUpdate:value"])):n.widget==="boolean"?(o(),C(R,{key:5,checked:!!t.modelValue[n.name],"onUpdate:checked":l=>e.set(n.name,l)},null,8,["checked","onUpdate:checked"])):n.widget==="select"?(o(),C(A,{key:6,value:t.modelValue[n.name]??void 0,options:(n.enum||[]).map(l=>({label:String(l),value:l})),size:"small",style:{width:"100%"},placeholder:n.default!==void 0?`默认 ${n.default}`:"请选择","onUpdate:value":l=>e.set(n.name,l)},null,8,["value","options","placeholder","onUpdate:value"])):n.widget==="tags"?(o(),C(A,{key:7,value:Array.isArray(t.modelValue[n.name])?t.modelValue[n.name]:[],mode:"tags",size:"small",style:{width:"100%"},placeholder:"输入后回车添加","token-separators":[",",`
4
- `],"onUpdate:value":l=>e.set(n.name,l)},null,8,["value","onUpdate:value"])):n.widget==="objectList"?(o(),u(E,{key:8},[x(" objectList: render each item as a sub-form panel with remove + add. "),f("div",null,[(o(!0),u(E,null,K(Array.isArray(t.modelValue[n.name])?t.modelValue[n.name]:[],(l,b)=>(o(),u("div",{key:b,style:{border:"1px dashed var(--border-color)",padding:"10px","border-radius":"4px","margin-bottom":"8px",background:"var(--bg-card-hover)"}},[f("div",He,[f("span",De,"#"+s(b+1),1),g(V,{size:"small",type:"link",danger:"",onClick:m=>e.removeItem(n.name,b)},{default:y(()=>[...a[0]||(a[0]=[j(" 删除 ",-1)])]),_:1},8,["onClick"])]),f("div",We,[(o(!0),u(E,null,K(n.itemFields||[],m=>(o(),u("div",{key:m.name,style:{display:"flex","flex-direction":"column",gap:"4px"}},[f("div",null,[f("span",Xe,s(m.label),1),m.required?(o(),u("span",Ge,"*")):x("v-if",!0),g(c,{size:"small",style:{"margin-left":"6px","font-size":"10px"}},{default:y(()=>[j(s(m.type),1)]),_:2},1024)]),m.widget==="text"?(o(),C(T,{key:0,value:l[m.name]??"",size:"small","onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","onUpdate:value"])):m.widget==="number"?(o(),C(w,{key:1,value:l[m.name],size:"small",style:{width:"100%"},"onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","onUpdate:value"])):m.widget==="boolean"?(o(),C(R,{key:2,checked:!!l[m.name],"onUpdate:checked":z=>e.setItem(n.name,b,m.name,z)},null,8,["checked","onUpdate:checked"])):m.widget==="select"?(o(),C(A,{key:3,value:l[m.name]??void 0,options:(m.enum||[]).map(z=>({label:String(z),value:z})),size:"small",style:{width:"100%"},"onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","options","onUpdate:value"])):(o(),C(h,{key:4,value:typeof l[m.name]=="string"?l[m.name]:"",rows:2,placeholder:"复杂子字段 — 请用 JSON 模式",style:{"font-family":"monospace","font-size":"11px"},"onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","onUpdate:value"])),t.errors[`${n.name}[${b}].${m.name}`]?(o(),u("div",Qe,s(t.errors[`${n.name}[${b}].${m.name}`]),1)):x("v-if",!0)]))),128))])]))),128)),g(V,{size:"small",type:"dashed",block:"",onClick:l=>e.addItem(n)},{icon:y(()=>[g(e.PlusOutlined)]),default:y(()=>[a[1]||(a[1]=j(" 添加项 ",-1))]),_:1},8,["onClick"])])],2112)):(o(),C(h,{key:9,value:t.modelValue[n.name]??"",rows:3,placeholder:'复杂类型 — 请输入 JSON,如 {"key":"value"}',style:{"font-family":"monospace","font-size":"12px"},"onUpdate:value":l=>e.set(n.name,l)},null,8,["value","onUpdate:value"])),t.errors[n.name]?(o(),u("div",Ye,s(t.errors[n.name]),1)):x("v-if",!0)],4)],64))),128))])):(o(),u("div",Pe," 此工具的 inputSchema 不是 type:object — 请用 JSON 模式编辑。 "))}const $e=ve(Ee,[["render",Ze],["__file","/tmp/cc-web-panel-IRmDbX/repo/packages/web-panel/src/components/McpToolForm.vue"]]),et={__name:"McpTools",setup(r,{expose:a}){a();const{t}=me(),e=ne(),i=fe(),p=S(!1),c=S([]),T=S([]),h=S(""),w=S(""),R=L(()=>c.value.filter(_=>["connected","ready"].includes(String(_.state||"").toLowerCase())).length);function A(_){const d=String(_||"").toLowerCase();return d==="connected"||d==="ready"?"success":d==="connecting"?"processing":d==="error"||d==="failed"?"error":"default"}const V=L(()=>{if(!h.value)return T.value;const _=h.value.toLowerCase();return T.value.filter(d=>d.name?.toLowerCase().includes(_)||d.description?.toLowerCase().includes(_))}),n=L(()=>[{title:t("mcpTools.toolColumns.name"),key:"name",dataIndex:"name",width:"28%"},{title:t("mcpTools.toolColumns.server"),key:"server",dataIndex:"server",width:"18%"},{title:t("mcpTools.toolColumns.description"),dataIndex:"description",ellipsis:!0},{title:t("mcpTools.toolColumns.action"),key:"action",width:110}]),l=S([]),b=S(""),m=S(!1),z=S(!1),P=L(()=>[{title:t("mcpTools.resourceColumns.uri"),key:"uri",dataIndex:"uri"},{title:t("mcpTools.resourceColumns.server"),key:"server",dataIndex:"server",width:"15%"},{title:t("mcpTools.resourceColumns.mime"),key:"mimeType",dataIndex:"mimeType",width:"15%"},{title:t("mcpTools.resourceColumns.action"),key:"action",width:90}]),H=L(()=>{if(!b.value)return l.value;const _=b.value.toLowerCase();return l.value.filter(d=>d.uri?.toLowerCase().includes(_)||d.name?.toLowerCase().includes(_)||d.description?.toLowerCase().includes(_))});async function v(){if(!m.value){m.value=!0;try{const _=await i.listResources();if(!_||!Array.isArray(_.servers)){l.value=[];return}const d=[];for(const k of _.servers)if(Array.isArray(k.resources))for(const I of k.resources)d.push({key:`${k.name}.${I.uri}`,uri:I.uri,name:I.name||"",description:I.description||"",mimeType:I.mimeType||null,server:k.name});l.value=d,z.value=!0}catch(_){console.error("listResources failed:",_),l.value=[]}finally{m.value=!1}}}const M=S(!1),N=S(null),Y=S(!1),D=S([]),Z=S(""),_e=L(()=>N.value?t("mcpTools.read.modalTitle",{server:N.value.server}):t("mcpTools.read.fallbackTitle"));async function ge(_){N.value=_,D.value=[],Z.value="",M.value=!0,Y.value=!0;try{const d=await i.readResource(_.server,_.uri);d&&Array.isArray(d.contents)?D.value=d.contents:D.value=d?[d]:[]}catch(d){Z.value=d?.message||String(d)}finally{Y.value=!1}}function he(){M.value=!1}const $=S(!1),U=S(null),ee=S("form"),te=S({}),W=S({}),oe=S("{}"),X=S(!1),F=S(null),G=S(""),xe=L(()=>q(U.value?.inputSchema||null).length>0),be=L(()=>U.value?t("mcpTools.run.modalTitle",{server:U.value.server,tool:U.value.name}):t("mcpTools.run.fallbackTitle")),ke=L(()=>{if(!U.value?.inputSchema)return"";try{return JSON.stringify(U.value.inputSchema,null,2)}catch{return String(U.value.inputSchema)}}),we=L(()=>{if(F.value===null)return"";try{return JSON.stringify(F.value,null,2)}catch{return String(F.value)}}),J=S("");function Te(_){U.value=_,oe.value="{}",F.value=null,G.value="",J.value="",W.value={};const d=q(_?.inputSchema||null);ee.value=d.length>0?"form":"json",te.value=ye(d),$.value=!0}function ze(){$.value=!1}async function Se(){if(!U.value||X.value)return;J.value="",W.value={};let _={};if(ee.value==="form"){const d=q(U.value.inputSchema||null),k=le(d,te.value);if(!k.ok){W.value=k.errors;return}_=k.params}else{const d=(oe.value||"").trim();if(d){try{_=JSON.parse(d)}catch(k){J.value=k.message||"invalid JSON";return}if(_===null||typeof _!="object"||Array.isArray(_)){J.value=t("mcpTools.run.paramsMustBeObject");return}}}X.value=!0,G.value="",F.value=null;try{const d=await i.callTool(U.value.server,U.value.name,_);F.value=d}catch(d){G.value=d?.message||String(d)}finally{X.value=!1}}async function ie(){const _=await i.listTools();if(!_||!Array.isArray(_.servers))return!1;c.value=_.servers.map(k=>({key:k.name,name:k.name,command:k.command||"",args:Array.isArray(k.args)?k.args:[],state:k.state||"disconnected",description:[k.configScope?`scope: ${k.configScope}`:"",k.autoConnect?"auto-connect":"",k.error?`error: ${k.error}`:""].filter(Boolean).join(" | "),error:k.error||null}));const d=[];for(const k of _.servers)if(Array.isArray(k.tools))for(const I of k.tools)d.push({key:`${k.name}.${I.name}`,name:I.name,description:I.description||"",server:k.name,inputSchema:I.inputSchema||null});return T.value=d,!0}async function ce(){p.value=!0;try{try{if(await ie()){w.value="topic";return}}catch(d){const k=d?.message||"";k.includes("mcp_unavailable")||k.includes("no_handler")||k.includes("UNKNOWN_TYPE")||k.includes("Unknown message type")||console.error("MCP topic load failed:",d)}const _=await e.executeJson("mcp servers --json",15e3);c.value=(Array.isArray(_)?_:[]).map(d=>({key:d.name,name:d.name,command:d.command||"",args:Array.isArray(d.args)?d.args:[],state:"disconnected",description:[d.configScope?`scope: ${d.configScope}`:"",d.autoConnect?"auto-connect (restart UI to connect)":""].filter(Boolean).join(" | "),error:null})),T.value=[],w.value="cli"}catch(_){console.error("MCP load failed:",_)}finally{p.value=!1,w.value==="topic"?v():(l.value=[],z.value=!1)}}ue(ce);const de={t,ws:e,mcp:i,loading:p,servers:c,tools:T,toolSearch:h,dataSource:w,connectedServers:R,serverBadgeStatus:A,filteredTools:V,toolColumns:n,resources:l,resourceSearch:b,resourcesLoading:m,resourcesLoaded:z,resourceColumns:P,filteredResources:H,loadResources:v,readModalOpen:M,selectedResource:N,reading:Y,readContents:D,readError:Z,readModalTitle:_e,openReadModal:ge,closeReadModal:he,runModalOpen:$,selectedTool:U,paramMode:ee,formValues:te,formErrors:W,paramsText:oe,running:X,runResult:F,runError:G,hasFormSchema:xe,runModalTitle:be,formattedSchema:ke,formattedResult:we,paramsParseError:J,openRunModal:Te,closeRunModal:ze,runSelectedTool:Se,loadFromTopic:ie,load:ce,ref:S,computed:L,onMounted:ue,get useI18n(){return me},get ReloadOutlined(){return Ue},get CloudServerOutlined(){return Me},get ToolOutlined(){return je},get CheckCircleOutlined(){return Ve},get PlayCircleOutlined(){return Re},get EyeOutlined(){return Oe},get useWsStore(){return ne},get useMcp(){return fe},McpToolForm:$e,get extractFields(){return q},get defaultValues(){return ye},get validateValues(){return le}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},tt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ot={class:"page-title"},nt={class:"page-sub"},rt={key:0,style:{"text-align":"center",padding:"30px"}},at={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},lt={style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px"}},st={key:2,class:"servers-grid"},it={style:{display:"flex","align-items":"center",gap:"10px","margin-bottom":"6px"}},ct={style:{color:"#e0e0e0","font-weight":"500","font-family":"monospace"}},dt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ut={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},mt={key:0,style:{"text-align":"center",padding:"30px"}},ft={key:0,style:{color:"#91caff","font-family":"monospace","font-size":"12px"}},pt={key:1,style:{color:"var(--text-muted)","font-size":"11px"}},yt={style:{padding:"30px",color:"var(--text-muted)"}},vt={key:0,style:{"text-align":"center",padding:"30px"}},_t={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},gt={key:0,style:{color:"#87d068","font-family":"monospace","font-size":"11px","word-break":"break-all"}},ht={key:1,style:{color:"var(--text-muted)","font-size":"10px"}},xt={style:{padding:"30px",color:"var(--text-muted)"}},bt={key:0,style:{display:"flex","flex-direction":"column",gap:"12px"}},kt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},wt={style:{"font-family":"monospace","font-size":"13px"}},Tt={style:{color:"#91caff"}},zt={key:0},St={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ct={style:{"font-size":"12px"}},At={key:1},Ot={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Rt={style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","max-height":"140px",overflow:"auto",margin:"0"}},Vt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"4px"}},jt={style:{color:"var(--text-muted)","font-size":"11px"}},Mt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Ut={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px"}},Lt={style:{color:"#ff4d4f","font-size":"11px","font-weight":"500","margin-bottom":"4px"}},It={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},Et={key:3},Pt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ft={style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","max-height":"240px",overflow:"auto",margin:"0","white-space":"pre-wrap"}},Bt={key:0,style:{display:"flex","flex-direction":"column",gap:"12px"}},Nt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},qt={style:{"font-family":"monospace","font-size":"12px","word-break":"break-all"}},Jt={style:{color:"#87d068"}},Kt={key:0},Ht={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Dt={style:{"font-size":"12px"}},Wt={key:1,style:{"text-align":"center",padding:"20px"}},Xt={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px"}},Gt={style:{color:"#ff4d4f","font-size":"11px","font-weight":"500","margin-bottom":"4px"}},Qt={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},Yt={key:3},Zt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},$t={style:{display:"flex",gap:"8px","align-items":"center","margin-bottom":"4px"}},eo={key:1,style:{color:"var(--text-muted)","font-size":"10px","font-family":"monospace"}},to={key:0,style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","max-height":"360px",overflow:"auto",margin:"0","white-space":"pre-wrap","word-break":"break-all"}},oo={key:1,style:{"font-size":"11px",color:"var(--text-muted)","font-style":"italic"}},no={key:2,style:{"font-size":"11px",color:"var(--text-muted)","font-style":"italic"}};function ro(r,a,t,e,i,p){const c=O("a-button"),T=O("a-statistic"),h=O("a-card"),w=O("a-col"),R=O("a-row"),A=O("a-spin"),V=O("a-badge"),n=O("a-input-search"),l=O("a-tag"),b=O("a-table"),m=O("a-radio-button"),z=O("a-radio-group"),P=O("a-textarea"),H=O("a-modal");return o(),u("div",null,[f("div",tt,[f("div",null,[f("h2",ot,s(e.t("mcpTools.title")),1),f("p",nt,s(e.t("mcpTools.subtitle")),1)]),g(c,{type:"primary",ghost:"",loading:e.loading,onClick:e.load},{icon:y(()=>[g(e.ReloadOutlined)]),default:y(()=>[j(" "+s(e.t("mcpTools.refresh")),1)]),_:1},8,["loading"])]),x(" Stats Row "),g(R,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:y(()=>[g(w,{xs:24,sm:8},{default:y(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:y(()=>[g(T,{title:e.t("mcpTools.stats.servers"),value:e.servers.length,"value-style":"color: #1677ff; font-size: 20px;"},{prefix:y(()=>[g(e.CloudServerOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),g(w,{xs:24,sm:8},{default:y(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:y(()=>[g(T,{title:e.t("mcpTools.stats.tools"),value:e.tools.length,"value-style":"color: #52c41a; font-size: 20px;"},{prefix:y(()=>[g(e.ToolOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),g(w,{xs:24,sm:8},{default:y(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:y(()=>[g(T,{title:e.t("mcpTools.stats.running"),value:e.connectedServers,"value-style":"color: #52c41a; font-size: 20px;"},{prefix:y(()=>[g(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),x(" Servers "),g(h,{title:e.t("mcpTools.servers.title"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:y(()=>[e.loading?(o(),u("div",rt,[g(A)])):e.servers.length?(o(),u("div",st,[(o(!0),u(E,null,K(e.servers,v=>(o(),C(h,{key:v.name,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:y(()=>[f("div",it,[g(e.CloudServerOutlined,{style:{color:"#1677ff"}}),f("span",ct,s(v.name),1),g(V,{status:e.serverBadgeStatus(v.state),text:v.state||"unknown"},null,8,["status","text"])]),v.command?(o(),u("div",dt,s(v.command)+" "+s(v.args?.join(" ")),1)):x("v-if",!0),v.description?(o(),u("div",ut,s(v.description),1)):x("v-if",!0)]),_:2},1024))),128))])):(o(),u("div",at,[j(s(e.t("mcpTools.servers.emptyHintPrefix"))+" ",1),f("code",lt,s(e.t("mcpTools.servers.emptyHintCommand")),1),j(" "+s(e.t("mcpTools.servers.emptyHintSuffix")),1)]))]),_:1},8,["title"]),x(" Tools "),g(h,{title:e.t("mcpTools.tools.title"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:y(()=>[g(n,{value:e.toolSearch,"onUpdate:value":a[0]||(a[0]=v=>e.toolSearch=v),placeholder:e.t("mcpTools.tools.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value","placeholder"])]),default:y(()=>[e.loading?(o(),u("div",mt,[g(A)])):(o(),C(b,{key:1,columns:e.toolColumns,"data-source":e.filteredTools,pagination:{pageSize:15},size:"small"},{bodyCell:y(({column:v,record:M})=>[v.key==="name"?(o(),u("span",ft,s(M.name),1)):x("v-if",!0),v.key==="server"?(o(),C(l,{key:1,color:"blue",style:{"font-size":"10px"}},{default:y(()=>[j(s(M.server),1)]),_:2},1024)):x("v-if",!0),v.key==="action"?(o(),u(E,{key:2},[e.dataSource==="topic"?(o(),C(c,{key:0,size:"small",type:"link",onClick:N=>e.openRunModal(M)},{icon:y(()=>[g(e.PlayCircleOutlined)]),default:y(()=>[j(" "+s(e.t("mcpTools.tools.runAction")),1)]),_:1},8,["onClick"])):(o(),u("span",pt,s(e.t("mcpTools.tools.desktopOnly")),1))],64)):x("v-if",!0)]),emptyText:y(()=>[f("div",yt,s(e.t("mcpTools.tools.emptyText")),1)]),_:1},8,["columns","data-source"]))]),_:1},8,["title"]),x(" Resources (topic mode only — CLI fallback doesn't surface resources) "),e.dataSource==="topic"?(o(),C(h,{key:0,title:e.t("mcpTools.resources.title"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:y(()=>[g(n,{value:e.resourceSearch,"onUpdate:value":a[1]||(a[1]=v=>e.resourceSearch=v),placeholder:e.t("mcpTools.resources.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value","placeholder"])]),default:y(()=>[e.resourcesLoading?(o(),u("div",vt,[g(A)])):e.resources.length?(o(),C(b,{key:2,columns:e.resourceColumns,"data-source":e.filteredResources,pagination:{pageSize:15},size:"small"},{bodyCell:y(({column:v,record:M})=>[v.key==="uri"?(o(),u("span",gt,s(M.uri),1)):x("v-if",!0),v.key==="server"?(o(),C(l,{key:1,color:"blue",style:{"font-size":"10px"}},{default:y(()=>[j(s(M.server),1)]),_:2},1024)):x("v-if",!0),v.key==="mimeType"?(o(),u(E,{key:2},[M.mimeType?(o(),C(l,{key:0,style:{"font-size":"10px"}},{default:y(()=>[j(s(M.mimeType),1)]),_:2},1024)):(o(),u("span",ht,"—"))],64)):x("v-if",!0),v.key==="action"?(o(),C(c,{key:3,size:"small",type:"link",onClick:N=>e.openReadModal(M)},{icon:y(()=>[g(e.EyeOutlined)]),default:y(()=>[j(" "+s(e.t("mcpTools.resources.readAction")),1)]),_:1},8,["onClick"])):x("v-if",!0)]),emptyText:y(()=>[f("div",xt,s(e.t("mcpTools.resources.emptyTable")),1)]),_:1},8,["columns","data-source"])):(o(),u("div",_t,s(e.t("mcpTools.resources.emptyHint")),1))]),_:1},8,["title"])):x("v-if",!0),g(H,{open:e.runModalOpen,title:e.runModalTitle,width:640,"confirm-loading":e.running,"ok-text":e.running?e.t("mcpTools.run.okRunning"):e.t("mcpTools.run.okIdle"),"cancel-text":e.t("mcpTools.run.cancel"),onOk:e.runSelectedTool,onCancel:e.closeRunModal},{default:y(()=>[e.selectedTool?(o(),u("div",bt,[f("div",null,[f("div",kt,s(e.t("mcpTools.run.serverLabel")),1),f("div",wt,[g(l,{color:"blue"},{default:y(()=>[j(s(e.selectedTool.server),1)]),_:1}),f("span",Tt,s(e.selectedTool.name),1)])]),e.selectedTool.description?(o(),u("div",zt,[f("div",St,s(e.t("mcpTools.run.descriptionLabel")),1),f("div",Ct,s(e.selectedTool.description),1)])):x("v-if",!0),e.selectedTool.inputSchema?(o(),u("div",At,[f("div",Ot,s(e.t("mcpTools.run.schemaLabel")),1),f("pre",Rt,s(e.formattedSchema),1)])):x("v-if",!0),f("div",null,[f("div",Vt,[f("span",jt,s(e.t("mcpTools.run.paramsLabel")),1),g(z,{value:e.paramMode,"onUpdate:value":a[2]||(a[2]=v=>e.paramMode=v),size:"small","button-style":"solid"},{default:y(()=>[g(m,{value:"form",disabled:!e.hasFormSchema},{default:y(()=>[j(s(e.t("mcpTools.run.modeForm")),1)]),_:1},8,["disabled"]),g(m,{value:"json"},{default:y(()=>[j(s(e.t("mcpTools.run.modeJson")),1)]),_:1})]),_:1},8,["value"])]),e.paramMode==="form"?(o(),C(e.McpToolForm,{key:0,modelValue:e.formValues,"onUpdate:modelValue":a[3]||(a[3]=v=>e.formValues=v),schema:e.selectedTool.inputSchema,errors:e.formErrors},null,8,["modelValue","schema","errors"])):(o(),u(E,{key:1},[g(P,{value:e.paramsText,"onUpdate:value":a[4]||(a[4]=v=>e.paramsText=v),rows:6,placeholder:"{}",style:{"font-family":"monospace","font-size":"12px"}},null,8,["value"]),e.paramsParseError?(o(),u("div",Mt,s(e.t("mcpTools.run.jsonParseFailed",{err:e.paramsParseError})),1)):x("v-if",!0)],64))]),e.runError?(o(),u("div",Ut,[f("div",Lt,s(e.t("mcpTools.run.errorTitle")),1),f("pre",It,s(e.runError),1)])):x("v-if",!0),e.runResult!==null?(o(),u("div",Et,[f("div",Pt,s(e.t("mcpTools.run.resultLabel")),1),f("pre",Ft,s(e.formattedResult),1)])):x("v-if",!0)])):x("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),g(H,{open:e.readModalOpen,title:e.readModalTitle,width:720,footer:null,onCancel:e.closeReadModal},{default:y(()=>[e.selectedResource?(o(),u("div",Bt,[f("div",null,[f("div",Nt,s(e.t("mcpTools.read.serverLabel")),1),f("div",qt,[g(l,{color:"blue"},{default:y(()=>[j(s(e.selectedResource.server),1)]),_:1}),f("span",Jt,s(e.selectedResource.uri),1)])]),e.selectedResource.description?(o(),u("div",Kt,[f("div",Ht,s(e.t("mcpTools.read.descriptionLabel")),1),f("div",Dt,s(e.selectedResource.description),1)])):x("v-if",!0),e.reading?(o(),u("div",Wt,[g(A,{tip:e.t("mcpTools.read.spinnerTip")},null,8,["tip"])])):x("v-if",!0),e.readError?(o(),u("div",Xt,[f("div",Gt,s(e.t("mcpTools.read.errorTitle")),1),f("pre",Qt,s(e.readError),1)])):x("v-if",!0),e.readContents.length?(o(),u("div",Yt,[f("div",Zt,s(e.t("mcpTools.read.contentsLabel",{count:e.readContents.length})),1),(o(!0),u(E,null,K(e.readContents,(v,M)=>(o(),u("div",{key:M,style:{"margin-bottom":"12px"}},[f("div",$t,[v.mimeType?(o(),C(l,{key:0,size:"small",style:{"font-size":"10px"}},{default:y(()=>[j(s(v.mimeType),1)]),_:2},1024)):x("v-if",!0),v.uri&&v.uri!==e.selectedResource.uri?(o(),u("span",eo,s(v.uri),1)):x("v-if",!0)]),v.text?(o(),u("pre",to,s(v.text),1)):v.blob?(o(),u("div",oo,s(e.t("mcpTools.read.binaryNote",{count:v.blob.length})),1)):(o(),u("div",no,s(e.t("mcpTools.read.emptyContent")),1))]))),128))])):x("v-if",!0)])):x("v-if",!0)]),_:1},8,["open","title"])])}const io=ve(et,[["render",ro],["__scopeId","data-v-0f358f52"],["__file","/tmp/cc-web-panel-IRmDbX/repo/packages/web-panel/src/views/McpTools.vue"]]);export{io as default};
3
+ The previous-field tracker is computed inline. `),e.parentBreadcrumb(n)!==""?(o(),u("div",Be,s(e.parentBreadcrumb(n)),1)):x("v-if",!0),f("div",Ne,[f("span",qe,s(n.label),1),n.required?(o(),u("span",Je,"*")):x("v-if",!0),g(c,{size:"small",style:{"margin-left":"8px","font-size":"10px"}},{default:y(()=>[R(s(n.type)+s(n.itemsType?`<${n.itemsType}>`:""),1)]),_:2},1024)]),n.description?(o(),u("div",Ke,s(n.description),1)):x("v-if",!0),n.widget==="text"?(o(),C(T,{key:2,value:t.modelValue[n.name]??"",placeholder:n.default!==void 0?`默认 ${n.default}`:"",size:"small","onUpdate:value":l=>e.set(n.name,l)},null,8,["value","placeholder","onUpdate:value"])):n.widget==="textarea"?(o(),C(h,{key:3,value:t.modelValue[n.name]??"",rows:4,placeholder:n.default!==void 0?`默认 ${n.default}`:"","onUpdate:value":l=>e.set(n.name,l)},null,8,["value","placeholder","onUpdate:value"])):n.widget==="number"?(o(),C(w,{key:4,value:t.modelValue[n.name],size:"small",placeholder:n.default!==void 0?`默认 ${n.default}`:"",style:{width:"100%"},"onUpdate:value":l=>e.set(n.name,l)},null,8,["value","placeholder","onUpdate:value"])):n.widget==="boolean"?(o(),C(V,{key:5,checked:!!t.modelValue[n.name],"onUpdate:checked":l=>e.set(n.name,l)},null,8,["checked","onUpdate:checked"])):n.widget==="select"?(o(),C(A,{key:6,value:t.modelValue[n.name]??void 0,options:(n.enum||[]).map(l=>({label:String(l),value:l})),size:"small",style:{width:"100%"},placeholder:n.default!==void 0?`默认 ${n.default}`:"请选择","onUpdate:value":l=>e.set(n.name,l)},null,8,["value","options","placeholder","onUpdate:value"])):n.widget==="tags"?(o(),C(A,{key:7,value:Array.isArray(t.modelValue[n.name])?t.modelValue[n.name]:[],mode:"tags",size:"small",style:{width:"100%"},placeholder:"输入后回车添加","token-separators":[",",`
4
+ `],"onUpdate:value":l=>e.set(n.name,l)},null,8,["value","onUpdate:value"])):n.widget==="objectList"?(o(),u(E,{key:8},[x(" objectList: render each item as a sub-form panel with remove + add. "),f("div",null,[(o(!0),u(E,null,K(Array.isArray(t.modelValue[n.name])?t.modelValue[n.name]:[],(l,b)=>(o(),u("div",{key:b,style:{border:"1px dashed var(--border-color)",padding:"10px","border-radius":"4px","margin-bottom":"8px",background:"var(--bg-card-hover)"}},[f("div",He,[f("span",We,"#"+s(b+1),1),g(j,{size:"small",type:"link",danger:"",onClick:m=>e.removeItem(n.name,b)},{default:y(()=>[...a[0]||(a[0]=[R(" 删除 ",-1)])]),_:1},8,["onClick"])]),f("div",Xe,[(o(!0),u(E,null,K(n.itemFields||[],m=>(o(),u("div",{key:m.name,style:{display:"flex","flex-direction":"column",gap:"4px"}},[f("div",null,[f("span",De,s(m.label),1),m.required?(o(),u("span",Ge,"*")):x("v-if",!0),g(c,{size:"small",style:{"margin-left":"6px","font-size":"10px"}},{default:y(()=>[R(s(m.type),1)]),_:2},1024)]),m.widget==="text"?(o(),C(T,{key:0,value:l[m.name]??"",size:"small","onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","onUpdate:value"])):m.widget==="number"?(o(),C(w,{key:1,value:l[m.name],size:"small",style:{width:"100%"},"onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","onUpdate:value"])):m.widget==="boolean"?(o(),C(V,{key:2,checked:!!l[m.name],"onUpdate:checked":z=>e.setItem(n.name,b,m.name,z)},null,8,["checked","onUpdate:checked"])):m.widget==="select"?(o(),C(A,{key:3,value:l[m.name]??void 0,options:(m.enum||[]).map(z=>({label:String(z),value:z})),size:"small",style:{width:"100%"},"onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","options","onUpdate:value"])):(o(),C(h,{key:4,value:typeof l[m.name]=="string"?l[m.name]:"",rows:2,placeholder:"复杂子字段 — 请用 JSON 模式",style:{"font-family":"monospace","font-size":"11px"},"onUpdate:value":z=>e.setItem(n.name,b,m.name,z)},null,8,["value","onUpdate:value"])),t.errors[`${n.name}[${b}].${m.name}`]?(o(),u("div",Qe,s(t.errors[`${n.name}[${b}].${m.name}`]),1)):x("v-if",!0)]))),128))])]))),128)),g(j,{size:"small",type:"dashed",block:"",onClick:l=>e.addItem(n)},{icon:y(()=>[g(e.PlusOutlined)]),default:y(()=>[a[1]||(a[1]=R(" 添加项 ",-1))]),_:1},8,["onClick"])])],2112)):(o(),C(h,{key:9,value:t.modelValue[n.name]??"",rows:3,placeholder:'复杂类型 — 请输入 JSON,如 {"key":"value"}',style:{"font-family":"monospace","font-size":"12px"},"onUpdate:value":l=>e.set(n.name,l)},null,8,["value","onUpdate:value"])),t.errors[n.name]?(o(),u("div",Ye,s(t.errors[n.name]),1)):x("v-if",!0)],4)],64))),128))])):(o(),u("div",Pe," 此工具的 inputSchema 不是 type:object — 请用 JSON 模式编辑。 "))}const $e=ve(Ee,[["render",Ze],["__file","/tmp/cc-web-panel-eI5lXL/repo/packages/web-panel/src/components/McpToolForm.vue"]]),et={__name:"McpTools",setup(r,{expose:a}){a();const{t}=me(),e=ne(),i=fe(),p=S(!1),c=S([]),T=S([]),h=S(""),w=S(""),V=U(()=>c.value.filter(_=>["connected","ready"].includes(String(_.state||"").toLowerCase())).length);function A(_){const d=String(_||"").toLowerCase();return d==="connected"||d==="ready"?"success":d==="connecting"?"processing":d==="error"||d==="failed"?"error":"default"}const j=U(()=>{if(!h.value)return T.value;const _=h.value.toLowerCase();return T.value.filter(d=>d.name?.toLowerCase().includes(_)||d.description?.toLowerCase().includes(_))}),n=U(()=>[{title:t("mcpTools.toolColumns.name"),key:"name",dataIndex:"name",width:"28%"},{title:t("mcpTools.toolColumns.server"),key:"server",dataIndex:"server",width:"18%"},{title:t("mcpTools.toolColumns.description"),dataIndex:"description",ellipsis:!0},{title:t("mcpTools.toolColumns.action"),key:"action",width:110}]),l=S([]),b=S(""),m=S(!1),z=S(!1),P=U(()=>[{title:t("mcpTools.resourceColumns.uri"),key:"uri",dataIndex:"uri"},{title:t("mcpTools.resourceColumns.server"),key:"server",dataIndex:"server",width:"15%"},{title:t("mcpTools.resourceColumns.mime"),key:"mimeType",dataIndex:"mimeType",width:"15%"},{title:t("mcpTools.resourceColumns.action"),key:"action",width:90}]),H=U(()=>{if(!b.value)return l.value;const _=b.value.toLowerCase();return l.value.filter(d=>d.uri?.toLowerCase().includes(_)||d.name?.toLowerCase().includes(_)||d.description?.toLowerCase().includes(_))});async function v(){if(!m.value){m.value=!0;try{const _=await i.listResources();if(!_||!Array.isArray(_.servers)){l.value=[];return}const d=[];for(const k of _.servers)if(Array.isArray(k.resources))for(const I of k.resources)d.push({key:`${k.name}.${I.uri}`,uri:I.uri,name:I.name||"",description:I.description||"",mimeType:I.mimeType||null,server:k.name});l.value=d,z.value=!0}catch(_){console.error("listResources failed:",_),l.value=[]}finally{m.value=!1}}}const M=S(!1),N=S(null),Y=S(!1),W=S([]),Z=S(""),_e=U(()=>N.value?t("mcpTools.read.modalTitle",{server:N.value.server}):t("mcpTools.read.fallbackTitle"));async function ge(_){N.value=_,W.value=[],Z.value="",M.value=!0,Y.value=!0;try{const d=await i.readResource(_.server,_.uri);d&&Array.isArray(d.contents)?W.value=d.contents:W.value=d?[d]:[]}catch(d){Z.value=d?.message||String(d)}finally{Y.value=!1}}function he(){M.value=!1}const $=S(!1),L=S(null),ee=S("form"),te=S({}),X=S({}),oe=S("{}"),D=S(!1),F=S(null),G=S(""),xe=U(()=>q(L.value?.inputSchema||null).length>0),be=U(()=>L.value?t("mcpTools.run.modalTitle",{server:L.value.server,tool:L.value.name}):t("mcpTools.run.fallbackTitle")),ke=U(()=>{if(!L.value?.inputSchema)return"";try{return JSON.stringify(L.value.inputSchema,null,2)}catch{return String(L.value.inputSchema)}}),we=U(()=>{if(F.value===null)return"";try{return JSON.stringify(F.value,null,2)}catch{return String(F.value)}}),J=S("");function Te(_){L.value=_,oe.value="{}",F.value=null,G.value="",J.value="",X.value={};const d=q(_?.inputSchema||null);ee.value=d.length>0?"form":"json",te.value=ye(d),$.value=!0}function ze(){$.value=!1}async function Se(){if(!L.value||D.value)return;J.value="",X.value={};let _={};if(ee.value==="form"){const d=q(L.value.inputSchema||null),k=le(d,te.value);if(!k.ok){X.value=k.errors;return}_=k.params}else{const d=(oe.value||"").trim();if(d){try{_=JSON.parse(d)}catch(k){J.value=k.message||"invalid JSON";return}if(_===null||typeof _!="object"||Array.isArray(_)){J.value=t("mcpTools.run.paramsMustBeObject");return}}}D.value=!0,G.value="",F.value=null;try{const d=await i.callTool(L.value.server,L.value.name,_);F.value=d}catch(d){G.value=d?.message||String(d)}finally{D.value=!1}}async function ie(){const _=await i.listTools();if(!_||!Array.isArray(_.servers))return!1;c.value=_.servers.map(k=>({key:k.name,name:k.name,command:k.command||"",args:Array.isArray(k.args)?k.args:[],state:k.state||"disconnected",description:[k.configScope?`scope: ${k.configScope}`:"",k.autoConnect?"auto-connect":"",k.error?`error: ${k.error}`:""].filter(Boolean).join(" | "),error:k.error||null}));const d=[];for(const k of _.servers)if(Array.isArray(k.tools))for(const I of k.tools)d.push({key:`${k.name}.${I.name}`,name:I.name,description:I.description||"",server:k.name,inputSchema:I.inputSchema||null});return T.value=d,!0}async function ce(){p.value=!0;try{try{if(await ie()){w.value="topic";return}}catch(d){const k=d?.message||"";k.includes("mcp_unavailable")||k.includes("no_handler")||k.includes("UNKNOWN_TYPE")||k.includes("Unknown message type")||console.error("MCP topic load failed:",d)}const _=await e.executeJson("mcp servers --json",15e3);c.value=(Array.isArray(_)?_:[]).map(d=>({key:d.name,name:d.name,command:d.command||"",args:Array.isArray(d.args)?d.args:[],state:"disconnected",description:[d.configScope?`scope: ${d.configScope}`:"",d.autoConnect?"auto-connect (restart UI to connect)":""].filter(Boolean).join(" | "),error:null})),T.value=[],w.value="cli"}catch(_){console.error("MCP load failed:",_)}finally{p.value=!1,w.value==="topic"?v():(l.value=[],z.value=!1)}}ue(ce);const de={t,ws:e,mcp:i,loading:p,servers:c,tools:T,toolSearch:h,dataSource:w,connectedServers:V,serverBadgeStatus:A,filteredTools:j,toolColumns:n,resources:l,resourceSearch:b,resourcesLoading:m,resourcesLoaded:z,resourceColumns:P,filteredResources:H,loadResources:v,readModalOpen:M,selectedResource:N,reading:Y,readContents:W,readError:Z,readModalTitle:_e,openReadModal:ge,closeReadModal:he,runModalOpen:$,selectedTool:L,paramMode:ee,formValues:te,formErrors:X,paramsText:oe,running:D,runResult:F,runError:G,hasFormSchema:xe,runModalTitle:be,formattedSchema:ke,formattedResult:we,paramsParseError:J,openRunModal:Te,closeRunModal:ze,runSelectedTool:Se,loadFromTopic:ie,load:ce,ref:S,computed:U,onMounted:ue,get useI18n(){return me},get ReloadOutlined(){return Le},get CloudServerOutlined(){return Me},get ToolOutlined(){return Re},get CheckCircleOutlined(){return je},get PlayCircleOutlined(){return Ve},get EyeOutlined(){return Oe},get useWsStore(){return ne},get useMcp(){return fe},McpToolForm:$e,get extractFields(){return q},get defaultValues(){return ye},get validateValues(){return le}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},tt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ot={class:"page-title"},nt={class:"page-sub"},rt={key:0,style:{"text-align":"center",padding:"30px"}},at={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},lt={style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px"}},st={key:2,class:"servers-grid"},it={style:{display:"flex","align-items":"center",gap:"10px","margin-bottom":"6px"}},ct={style:{color:"#e0e0e0","font-weight":"500","font-family":"monospace"}},dt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ut={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},mt={key:0,style:{"text-align":"center",padding:"30px"}},ft={key:0,style:{color:"#91caff","font-family":"monospace","font-size":"12px"}},pt={key:1,style:{color:"var(--text-muted)","font-size":"11px"}},yt={style:{padding:"30px",color:"var(--text-muted)"}},vt={key:0,style:{"text-align":"center",padding:"30px"}},_t={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},gt={key:0,style:{color:"#87d068","font-family":"monospace","font-size":"11px","word-break":"break-all"}},ht={key:1,style:{color:"var(--text-muted)","font-size":"10px"}},xt={style:{padding:"30px",color:"var(--text-muted)"}},bt={key:0,style:{display:"flex","flex-direction":"column",gap:"12px"}},kt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},wt={style:{"font-family":"monospace","font-size":"13px"}},Tt={style:{color:"#91caff"}},zt={key:0},St={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ct={style:{"font-size":"12px"}},At={key:1},Ot={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Vt={style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","max-height":"140px",overflow:"auto",margin:"0"}},jt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"4px"}},Rt={style:{color:"var(--text-muted)","font-size":"11px"}},Mt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Lt={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px"}},Ut={style:{color:"#ff4d4f","font-size":"11px","font-weight":"500","margin-bottom":"4px"}},It={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},Et={key:3},Pt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ft={style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","max-height":"240px",overflow:"auto",margin:"0","white-space":"pre-wrap"}},Bt={key:0,style:{display:"flex","flex-direction":"column",gap:"12px"}},Nt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},qt={style:{"font-family":"monospace","font-size":"12px","word-break":"break-all"}},Jt={style:{color:"#87d068"}},Kt={key:0},Ht={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Wt={style:{"font-size":"12px"}},Xt={key:1,style:{"text-align":"center",padding:"20px"}},Dt={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px"}},Gt={style:{color:"#ff4d4f","font-size":"11px","font-weight":"500","margin-bottom":"4px"}},Qt={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},Yt={key:3},Zt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},$t={style:{display:"flex",gap:"8px","align-items":"center","margin-bottom":"4px"}},eo={key:1,style:{color:"var(--text-muted)","font-size":"10px","font-family":"monospace"}},to={key:0,style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","max-height":"360px",overflow:"auto",margin:"0","white-space":"pre-wrap","word-break":"break-all"}},oo={key:1,style:{"font-size":"11px",color:"var(--text-muted)","font-style":"italic"}},no={key:2,style:{"font-size":"11px",color:"var(--text-muted)","font-style":"italic"}};function ro(r,a,t,e,i,p){const c=O("a-button"),T=O("a-statistic"),h=O("a-card"),w=O("a-col"),V=O("a-row"),A=O("a-spin"),j=O("a-badge"),n=O("a-input-search"),l=O("a-tag"),b=O("a-table"),m=O("a-radio-button"),z=O("a-radio-group"),P=O("a-textarea"),H=O("a-modal");return o(),u("div",null,[f("div",tt,[f("div",null,[f("h2",ot,s(e.t("mcpTools.title")),1),f("p",nt,s(e.t("mcpTools.subtitle")),1)]),g(c,{type:"primary",ghost:"",loading:e.loading,onClick:e.load},{icon:y(()=>[g(e.ReloadOutlined)]),default:y(()=>[R(" "+s(e.t("mcpTools.refresh")),1)]),_:1},8,["loading"])]),x(" Stats Row "),g(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:y(()=>[g(w,{xs:24,sm:8},{default:y(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:y(()=>[g(T,{title:e.t("mcpTools.stats.servers"),value:e.servers.length,"value-style":"color: #1677ff; font-size: 20px;"},{prefix:y(()=>[g(e.CloudServerOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),g(w,{xs:24,sm:8},{default:y(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:y(()=>[g(T,{title:e.t("mcpTools.stats.tools"),value:e.tools.length,"value-style":"color: #52c41a; font-size: 20px;"},{prefix:y(()=>[g(e.ToolOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),g(w,{xs:24,sm:8},{default:y(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:y(()=>[g(T,{title:e.t("mcpTools.stats.running"),value:e.connectedServers,"value-style":"color: #52c41a; font-size: 20px;"},{prefix:y(()=>[g(e.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),x(" Servers "),g(h,{title:e.t("mcpTools.servers.title"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:y(()=>[e.loading?(o(),u("div",rt,[g(A)])):e.servers.length?(o(),u("div",st,[(o(!0),u(E,null,K(e.servers,v=>(o(),C(h,{key:v.name,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:y(()=>[f("div",it,[g(e.CloudServerOutlined,{style:{color:"#1677ff"}}),f("span",ct,s(v.name),1),g(j,{status:e.serverBadgeStatus(v.state),text:v.state||"unknown"},null,8,["status","text"])]),v.command?(o(),u("div",dt,s(v.command)+" "+s(v.args?.join(" ")),1)):x("v-if",!0),v.description?(o(),u("div",ut,s(v.description),1)):x("v-if",!0)]),_:2},1024))),128))])):(o(),u("div",at,[R(s(e.t("mcpTools.servers.emptyHintPrefix"))+" ",1),f("code",lt,s(e.t("mcpTools.servers.emptyHintCommand")),1),R(" "+s(e.t("mcpTools.servers.emptyHintSuffix")),1)]))]),_:1},8,["title"]),x(" Tools "),g(h,{title:e.t("mcpTools.tools.title"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:y(()=>[g(n,{value:e.toolSearch,"onUpdate:value":a[0]||(a[0]=v=>e.toolSearch=v),placeholder:e.t("mcpTools.tools.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value","placeholder"])]),default:y(()=>[e.loading?(o(),u("div",mt,[g(A)])):(o(),C(b,{key:1,columns:e.toolColumns,"data-source":e.filteredTools,pagination:{pageSize:15},size:"small"},{bodyCell:y(({column:v,record:M})=>[v.key==="name"?(o(),u("span",ft,s(M.name),1)):x("v-if",!0),v.key==="server"?(o(),C(l,{key:1,color:"blue",style:{"font-size":"10px"}},{default:y(()=>[R(s(M.server),1)]),_:2},1024)):x("v-if",!0),v.key==="action"?(o(),u(E,{key:2},[e.dataSource==="topic"?(o(),C(c,{key:0,size:"small",type:"link",onClick:N=>e.openRunModal(M)},{icon:y(()=>[g(e.PlayCircleOutlined)]),default:y(()=>[R(" "+s(e.t("mcpTools.tools.runAction")),1)]),_:1},8,["onClick"])):(o(),u("span",pt,s(e.t("mcpTools.tools.desktopOnly")),1))],64)):x("v-if",!0)]),emptyText:y(()=>[f("div",yt,s(e.t("mcpTools.tools.emptyText")),1)]),_:1},8,["columns","data-source"]))]),_:1},8,["title"]),x(" Resources (topic mode only — CLI fallback doesn't surface resources) "),e.dataSource==="topic"?(o(),C(h,{key:0,title:e.t("mcpTools.resources.title"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:y(()=>[g(n,{value:e.resourceSearch,"onUpdate:value":a[1]||(a[1]=v=>e.resourceSearch=v),placeholder:e.t("mcpTools.resources.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value","placeholder"])]),default:y(()=>[e.resourcesLoading?(o(),u("div",vt,[g(A)])):e.resources.length?(o(),C(b,{key:2,columns:e.resourceColumns,"data-source":e.filteredResources,pagination:{pageSize:15},size:"small"},{bodyCell:y(({column:v,record:M})=>[v.key==="uri"?(o(),u("span",gt,s(M.uri),1)):x("v-if",!0),v.key==="server"?(o(),C(l,{key:1,color:"blue",style:{"font-size":"10px"}},{default:y(()=>[R(s(M.server),1)]),_:2},1024)):x("v-if",!0),v.key==="mimeType"?(o(),u(E,{key:2},[M.mimeType?(o(),C(l,{key:0,style:{"font-size":"10px"}},{default:y(()=>[R(s(M.mimeType),1)]),_:2},1024)):(o(),u("span",ht,"—"))],64)):x("v-if",!0),v.key==="action"?(o(),C(c,{key:3,size:"small",type:"link",onClick:N=>e.openReadModal(M)},{icon:y(()=>[g(e.EyeOutlined)]),default:y(()=>[R(" "+s(e.t("mcpTools.resources.readAction")),1)]),_:1},8,["onClick"])):x("v-if",!0)]),emptyText:y(()=>[f("div",xt,s(e.t("mcpTools.resources.emptyTable")),1)]),_:1},8,["columns","data-source"])):(o(),u("div",_t,s(e.t("mcpTools.resources.emptyHint")),1))]),_:1},8,["title"])):x("v-if",!0),g(H,{open:e.runModalOpen,title:e.runModalTitle,width:640,"confirm-loading":e.running,"ok-text":e.running?e.t("mcpTools.run.okRunning"):e.t("mcpTools.run.okIdle"),"cancel-text":e.t("mcpTools.run.cancel"),onOk:e.runSelectedTool,onCancel:e.closeRunModal},{default:y(()=>[e.selectedTool?(o(),u("div",bt,[f("div",null,[f("div",kt,s(e.t("mcpTools.run.serverLabel")),1),f("div",wt,[g(l,{color:"blue"},{default:y(()=>[R(s(e.selectedTool.server),1)]),_:1}),f("span",Tt,s(e.selectedTool.name),1)])]),e.selectedTool.description?(o(),u("div",zt,[f("div",St,s(e.t("mcpTools.run.descriptionLabel")),1),f("div",Ct,s(e.selectedTool.description),1)])):x("v-if",!0),e.selectedTool.inputSchema?(o(),u("div",At,[f("div",Ot,s(e.t("mcpTools.run.schemaLabel")),1),f("pre",Vt,s(e.formattedSchema),1)])):x("v-if",!0),f("div",null,[f("div",jt,[f("span",Rt,s(e.t("mcpTools.run.paramsLabel")),1),g(z,{value:e.paramMode,"onUpdate:value":a[2]||(a[2]=v=>e.paramMode=v),size:"small","button-style":"solid"},{default:y(()=>[g(m,{value:"form",disabled:!e.hasFormSchema},{default:y(()=>[R(s(e.t("mcpTools.run.modeForm")),1)]),_:1},8,["disabled"]),g(m,{value:"json"},{default:y(()=>[R(s(e.t("mcpTools.run.modeJson")),1)]),_:1})]),_:1},8,["value"])]),e.paramMode==="form"?(o(),C(e.McpToolForm,{key:0,modelValue:e.formValues,"onUpdate:modelValue":a[3]||(a[3]=v=>e.formValues=v),schema:e.selectedTool.inputSchema,errors:e.formErrors},null,8,["modelValue","schema","errors"])):(o(),u(E,{key:1},[g(P,{value:e.paramsText,"onUpdate:value":a[4]||(a[4]=v=>e.paramsText=v),rows:6,placeholder:"{}",style:{"font-family":"monospace","font-size":"12px"}},null,8,["value"]),e.paramsParseError?(o(),u("div",Mt,s(e.t("mcpTools.run.jsonParseFailed",{err:e.paramsParseError})),1)):x("v-if",!0)],64))]),e.runError?(o(),u("div",Lt,[f("div",Ut,s(e.t("mcpTools.run.errorTitle")),1),f("pre",It,s(e.runError),1)])):x("v-if",!0),e.runResult!==null?(o(),u("div",Et,[f("div",Pt,s(e.t("mcpTools.run.resultLabel")),1),f("pre",Ft,s(e.formattedResult),1)])):x("v-if",!0)])):x("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),g(H,{open:e.readModalOpen,title:e.readModalTitle,width:720,footer:null,onCancel:e.closeReadModal},{default:y(()=>[e.selectedResource?(o(),u("div",Bt,[f("div",null,[f("div",Nt,s(e.t("mcpTools.read.serverLabel")),1),f("div",qt,[g(l,{color:"blue"},{default:y(()=>[R(s(e.selectedResource.server),1)]),_:1}),f("span",Jt,s(e.selectedResource.uri),1)])]),e.selectedResource.description?(o(),u("div",Kt,[f("div",Ht,s(e.t("mcpTools.read.descriptionLabel")),1),f("div",Wt,s(e.selectedResource.description),1)])):x("v-if",!0),e.reading?(o(),u("div",Xt,[g(A,{tip:e.t("mcpTools.read.spinnerTip")},null,8,["tip"])])):x("v-if",!0),e.readError?(o(),u("div",Dt,[f("div",Gt,s(e.t("mcpTools.read.errorTitle")),1),f("pre",Qt,s(e.readError),1)])):x("v-if",!0),e.readContents.length?(o(),u("div",Yt,[f("div",Zt,s(e.t("mcpTools.read.contentsLabel",{count:e.readContents.length})),1),(o(!0),u(E,null,K(e.readContents,(v,M)=>(o(),u("div",{key:M,style:{"margin-bottom":"12px"}},[f("div",$t,[v.mimeType?(o(),C(l,{key:0,size:"small",style:{"font-size":"10px"}},{default:y(()=>[R(s(v.mimeType),1)]),_:2},1024)):x("v-if",!0),v.uri&&v.uri!==e.selectedResource.uri?(o(),u("span",eo,s(v.uri),1)):x("v-if",!0)]),v.text?(o(),u("pre",to,s(v.text),1)):v.blob?(o(),u("div",oo,s(e.t("mcpTools.read.binaryNote",{count:v.blob.length})),1)):(o(),u("div",no,s(e.t("mcpTools.read.emptyContent")),1))]))),128))])):x("v-if",!0)])):x("v-if",!0)]),_:1},8,["open","title"])])}const io=ve(et,[["render",ro],["__scopeId","data-v-0f358f52"],["__file","/tmp/cc-web-panel-eI5lXL/repo/packages/web-panel/src/views/McpTools.vue"]]);export{io as default};
@@ -1,2 +1,2 @@
1
- import{I as i,J as x,U as c,R as s,c as t,K as o,V as R,o as j,b as q,r as d,P as w,Q as k,F as K,Z as X}from"./vendor-Bn1JzzAn.js";import{_ as Z,b as D,u as H,d as O}from"./index-CkFvuAex.js";import{S as A,aB as G,a1 as Y,a0 as $,R as ee,at as te}from"./icons-DG5UD-6K.js";const oe={__name:"Memory",setup(E,{expose:n}){n();const{t:m}=D(),e=H(),B=d(!1),S=d(!1),_=d(!1),L=d(!1),f=d(!1),u=d({shortTerm:0,longTerm:0,core:0}),y=d([]),g=d("short-term"),v=d(""),p=d({content:"",importance:.5}),P=q(()=>({0:m("memory.modal.marks.low"),.5:m("memory.modal.marks.mid"),1:m("memory.modal.marks.high")}));function U(a){return{"short-term":"purple","long-term":"blue",core:"green"}[a]||"default"}function V(a){const l=`memory.layer.${a}`,h=m(l);return h===l?a:h}async function C(){B.value=!0;try{const{output:a}=await e.execute("hmemory stats",15e3);M(a)}catch(a){console.error("hmemory stats failed:",a)}finally{B.value=!1,await T()}}function M(a){const l=a.match(/short.?term[^\d]*(\d+)/i),h=a.match(/long.?term[^\d]*(\d+)/i),I=a.match(/core[^\d]*(\d+)/i);l&&(u.value.shortTerm=parseInt(l[1])),h&&(u.value.longTerm=parseInt(h[1])),I&&(u.value.core=parseInt(I[1]))}async function T(){S.value=!0;try{const a=g.value==="short-term"?"recent":g.value==="long-term"?"important":"core",{output:l}=await e.execute(`hmemory recall "${a}" --limit 20`,15e3);y.value=z(l)}catch{y.value=[]}finally{S.value=!1}}async function F(){if(!v.value.trim()){await T();return}S.value=!0;try{const{output:a}=await e.execute(`hmemory recall "${v.value}"`,15e3);y.value=z(a)}catch{y.value=[]}finally{S.value=!1}}function z(a){const l=[],h=a.split(`
2
- `);for(const I of h){const b=I.trim();if(!b||b.startsWith("─")||b.startsWith("Recall"))continue;const Q=b.match(/^[-●•\d.]+\s+(.+)/);if(Q){const W=Q[1].trim();W.length>5&&l.push({id:l.length,content:W,layer:g.value,importance:"",time:""})}else b.length>10&&!b.includes(":")&&l.length<30&&l.push({id:l.length,content:b,layer:g.value,importance:"",time:""})}return l.slice(0,20)}async function r(){if(!p.value.content.trim()){O.warning(m("memory.messages.contentRequired"));return}L.value=!0;try{const a=`hmemory store "${p.value.content.replace(/"/g,'\\"')}" --importance ${p.value.importance}`,{output:l}=await e.execute(a,15e3);l.toLowerCase().includes("stored")||l.includes("✔")?(O.success(m("memory.messages.storeOk")),f.value=!1,p.value={content:"",importance:.5},await C()):(O.warning(l.slice(0,100)||m("memory.messages.storeDefault")),f.value=!1)}catch(a){O.error(m("memory.messages.storeFailed",{err:a.message}))}finally{L.value=!1}}async function J(){_.value=!0;try{await e.execute("hmemory consolidate",2e4),O.success(m("memory.messages.consolidateOk")),await C()}catch(a){O.error(m("memory.messages.consolidateFailed",{err:a.message}))}finally{_.value=!1}}j(C);const N={t:m,ws:e,loading:B,recalling:S,consolidating:_,storing:L,showStore:f,stats:u,memories:y,activeLayer:g,recallQuery:v,newMemory:p,importanceMarks:P,layerColor:U,layerLabel:V,loadStats:C,parseStats:M,recallByLayer:T,doRecall:F,parseMemories:z,storeMemory:r,consolidate:J,ref:d,computed:q,onMounted:j,get useI18n(){return D},get PlusOutlined(){return te},get ReloadOutlined(){return ee},get ThunderboltOutlined(){return $},get ClockCircleOutlined(){return Y},get StarOutlined(){return G},get SyncOutlined(){return A},get message(){return O},get useWsStore(){return H}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}},ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},re={class:"page-title"},ne={class:"page-sub"},le={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},se={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ie={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ce={style:{display:"flex","align-items":"center",gap:"12px"}},me={key:0,style:{"text-align":"center",padding:"30px"}},de={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},ue={key:2,class:"memory-list"},ye={style:{display:"flex","justify-content":"space-between","align-items":"flex-start","margin-bottom":"4px"}},_e={style:{display:"flex",gap:"8px","align-items":"center"}},fe={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={style:{color:"var(--text-muted)","font-size":"11px"}},ve={style:{color:"#ccc","font-size":"13px","line-height":"1.6"}};function pe(E,n,m,e,B,S){const _=i("a-button"),L=i("a-space"),f=i("a-statistic"),u=i("a-card"),y=i("a-col"),g=i("a-row"),v=i("a-radio-button"),p=i("a-radio-group"),P=i("a-input-search"),U=i("a-spin"),V=i("a-tag"),C=i("a-textarea"),M=i("a-form-item"),T=i("a-slider"),F=i("a-form"),z=i("a-modal");return w(),x("div",null,[c("div",ae,[c("div",null,[c("h2",re,s(e.t("memory.title")),1),c("p",ne,s(e.t("memory.subtitle")),1)]),t(L,null,{default:o(()=>[t(_,{onClick:n[0]||(n[0]=r=>e.showStore=!0),type:"primary"},{icon:o(()=>[t(e.PlusOutlined)]),default:o(()=>[k(" "+s(e.t("memory.storeButton")),1)]),_:1}),t(_,{ghost:"",loading:e.loading,onClick:e.loadStats},{icon:o(()=>[t(e.ReloadOutlined)]),default:o(()=>[k(" "+s(e.t("memory.refresh")),1)]),_:1},8,["loading"])]),_:1})]),R(" Stats Row "),t(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(114,46,209,.1)","border-color":"rgba(114,46,209,.35)",cursor:"pointer"},hoverable:"",onClick:n[1]||(n[1]=r=>e.activeLayer="short-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.shortTerm"),value:e.stats.shortTerm||0,"value-style":"color: #c084fc; font-size: 20px;"},{prefix:o(()=>[t(e.ThunderboltOutlined)]),_:1},8,["title","value"]),c("div",le,s(e.t("memory.stats.shortTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.3)",cursor:"pointer"},hoverable:"",onClick:n[2]||(n[2]=r=>e.activeLayer="long-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.longTerm"),value:e.stats.longTerm||0,"value-style":"color: #91caff; font-size: 20px;"},{prefix:o(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"]),c("div",se,s(e.t("memory.stats.longTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)",cursor:"pointer"},hoverable:"",onClick:n[3]||(n[3]=r=>e.activeLayer="core")},{default:o(()=>[t(f,{title:e.t("memory.stats.core"),value:e.stats.core||0,"value-style":"color: #69db7c; font-size: 20px;"},{prefix:o(()=>[t(e.StarOutlined)]),_:1},8,["title","value"]),c("div",ie,s(e.t("memory.stats.coreHint")),1)]),_:1})]),_:1})]),_:1}),R(" Layer Tabs + Recall "),t(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[c("div",ce,[c("span",null,s(e.t("memory.card.title")),1),t(p,{value:e.activeLayer,"onUpdate:value":n[4]||(n[4]=r=>e.activeLayer=r),"button-style":"solid",size:"small",onChange:e.recallByLayer},{default:o(()=>[t(v,{value:"short-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.short")),1)]),_:1}),t(v,{value:"long-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.long")),1)]),_:1}),t(v,{value:"core"},{default:o(()=>[k(s(e.t("memory.card.tabs.core")),1)]),_:1})]),_:1},8,["value"])])]),extra:o(()=>[t(P,{value:e.recallQuery,"onUpdate:value":n[5]||(n[5]=r=>e.recallQuery=r),placeholder:e.t("memory.card.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"220px"},loading:e.recalling,onSearch:e.doRecall},null,8,["value","placeholder","loading"])]),default:o(()=>[e.recalling?(w(),x("div",me,[t(U)])):e.memories.length?(w(),x("div",ue,[(w(!0),x(K,null,X(e.memories,r=>(w(),x("div",{key:r.id,class:"memory-item"},[c("div",ye,[c("div",_e,[t(V,{color:e.layerColor(r.layer||e.activeLayer),style:{"font-size":"10px"}},{default:o(()=>[k(s(e.layerLabel(r.layer||e.activeLayer)),1)]),_:2},1032,["color"]),r.importance?(w(),x("span",fe,s(e.t("memory.card.importanceLabel",{value:r.importance})),1)):R("v-if",!0)]),c("span",ge,s(r.time),1)]),c("div",ve,s(r.content),1)]))),128))])):(w(),x("div",de,s(e.t("memory.card.emptyText")),1))]),_:1}),R(" Consolidate Button "),t(_,{loading:e.consolidating,onClick:e.consolidate,style:{background:"var(--bg-card-hover)","border-color":"var(--text-muted)",width:"100%"}},{icon:o(()=>[t(e.SyncOutlined)]),default:o(()=>[k(" "+s(e.t("memory.consolidateButton")),1)]),_:1},8,["loading"]),R(" Store Memory Modal "),t(z,{open:e.showStore,"onUpdate:open":n[8]||(n[8]=r=>e.showStore=r),title:e.t("memory.modal.title"),"confirm-loading":e.storing,onOk:e.storeMemory},{default:o(()=>[t(F,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[t(M,{label:e.t("memory.modal.contentLabel"),required:""},{default:o(()=>[t(C,{value:e.newMemory.content,"onUpdate:value":n[6]||(n[6]=r=>e.newMemory.content=r),rows:4,placeholder:e.t("memory.modal.contentPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(M,{label:e.t("memory.modal.importanceLabel")},{default:o(()=>[t(T,{value:e.newMemory.importance,"onUpdate:value":n[7]||(n[7]=r=>e.newMemory.importance=r),min:0,max:1,step:.1,marks:e.importanceMarks},null,8,["value","marks"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading"])])}const we=Z(oe,[["render",pe],["__scopeId","data-v-5658552f"],["__file","/tmp/cc-web-panel-IRmDbX/repo/packages/web-panel/src/views/Memory.vue"]]);export{we as default};
1
+ import{I as i,J as x,U as c,R as s,c as t,K as o,V as R,o as j,b as q,r as d,P as w,Q as k,F as K,Z as X}from"./vendor-Bn1JzzAn.js";import{_ as Z,b as H,u as D,d as O}from"./index-C9gtY4nG.js";import{S as A,aB as G,a1 as Y,a0 as $,R as ee,at as te}from"./icons-DG5UD-6K.js";const oe={__name:"Memory",setup(E,{expose:n}){n();const{t:m}=H(),e=D(),B=d(!1),S=d(!1),_=d(!1),L=d(!1),f=d(!1),u=d({shortTerm:0,longTerm:0,core:0}),y=d([]),g=d("short-term"),v=d(""),p=d({content:"",importance:.5}),P=q(()=>({0:m("memory.modal.marks.low"),.5:m("memory.modal.marks.mid"),1:m("memory.modal.marks.high")}));function U(a){return{"short-term":"purple","long-term":"blue",core:"green"}[a]||"default"}function V(a){const l=`memory.layer.${a}`,h=m(l);return h===l?a:h}async function C(){B.value=!0;try{const{output:a}=await e.execute("hmemory stats",15e3);M(a)}catch(a){console.error("hmemory stats failed:",a)}finally{B.value=!1,await T()}}function M(a){const l=a.match(/short.?term[^\d]*(\d+)/i),h=a.match(/long.?term[^\d]*(\d+)/i),I=a.match(/core[^\d]*(\d+)/i);l&&(u.value.shortTerm=parseInt(l[1])),h&&(u.value.longTerm=parseInt(h[1])),I&&(u.value.core=parseInt(I[1]))}async function T(){S.value=!0;try{const a=g.value==="short-term"?"recent":g.value==="long-term"?"important":"core",{output:l}=await e.execute(`hmemory recall "${a}" --limit 20`,15e3);y.value=z(l)}catch{y.value=[]}finally{S.value=!1}}async function F(){if(!v.value.trim()){await T();return}S.value=!0;try{const{output:a}=await e.execute(`hmemory recall "${v.value}"`,15e3);y.value=z(a)}catch{y.value=[]}finally{S.value=!1}}function z(a){const l=[],h=a.split(`
2
+ `);for(const I of h){const b=I.trim();if(!b||b.startsWith("─")||b.startsWith("Recall"))continue;const Q=b.match(/^[-●•\d.]+\s+(.+)/);if(Q){const W=Q[1].trim();W.length>5&&l.push({id:l.length,content:W,layer:g.value,importance:"",time:""})}else b.length>10&&!b.includes(":")&&l.length<30&&l.push({id:l.length,content:b,layer:g.value,importance:"",time:""})}return l.slice(0,20)}async function r(){if(!p.value.content.trim()){O.warning(m("memory.messages.contentRequired"));return}L.value=!0;try{const a=`hmemory store "${p.value.content.replace(/"/g,'\\"')}" --importance ${p.value.importance}`,{output:l}=await e.execute(a,15e3);l.toLowerCase().includes("stored")||l.includes("✔")?(O.success(m("memory.messages.storeOk")),f.value=!1,p.value={content:"",importance:.5},await C()):(O.warning(l.slice(0,100)||m("memory.messages.storeDefault")),f.value=!1)}catch(a){O.error(m("memory.messages.storeFailed",{err:a.message}))}finally{L.value=!1}}async function J(){_.value=!0;try{await e.execute("hmemory consolidate",2e4),O.success(m("memory.messages.consolidateOk")),await C()}catch(a){O.error(m("memory.messages.consolidateFailed",{err:a.message}))}finally{_.value=!1}}j(C);const N={t:m,ws:e,loading:B,recalling:S,consolidating:_,storing:L,showStore:f,stats:u,memories:y,activeLayer:g,recallQuery:v,newMemory:p,importanceMarks:P,layerColor:U,layerLabel:V,loadStats:C,parseStats:M,recallByLayer:T,doRecall:F,parseMemories:z,storeMemory:r,consolidate:J,ref:d,computed:q,onMounted:j,get useI18n(){return H},get PlusOutlined(){return te},get ReloadOutlined(){return ee},get ThunderboltOutlined(){return $},get ClockCircleOutlined(){return Y},get StarOutlined(){return G},get SyncOutlined(){return A},get message(){return O},get useWsStore(){return D}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}},ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},re={class:"page-title"},ne={class:"page-sub"},le={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},se={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ie={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ce={style:{display:"flex","align-items":"center",gap:"12px"}},me={key:0,style:{"text-align":"center",padding:"30px"}},de={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},ue={key:2,class:"memory-list"},ye={style:{display:"flex","justify-content":"space-between","align-items":"flex-start","margin-bottom":"4px"}},_e={style:{display:"flex",gap:"8px","align-items":"center"}},fe={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={style:{color:"var(--text-muted)","font-size":"11px"}},ve={style:{color:"#ccc","font-size":"13px","line-height":"1.6"}};function pe(E,n,m,e,B,S){const _=i("a-button"),L=i("a-space"),f=i("a-statistic"),u=i("a-card"),y=i("a-col"),g=i("a-row"),v=i("a-radio-button"),p=i("a-radio-group"),P=i("a-input-search"),U=i("a-spin"),V=i("a-tag"),C=i("a-textarea"),M=i("a-form-item"),T=i("a-slider"),F=i("a-form"),z=i("a-modal");return w(),x("div",null,[c("div",ae,[c("div",null,[c("h2",re,s(e.t("memory.title")),1),c("p",ne,s(e.t("memory.subtitle")),1)]),t(L,null,{default:o(()=>[t(_,{onClick:n[0]||(n[0]=r=>e.showStore=!0),type:"primary"},{icon:o(()=>[t(e.PlusOutlined)]),default:o(()=>[k(" "+s(e.t("memory.storeButton")),1)]),_:1}),t(_,{ghost:"",loading:e.loading,onClick:e.loadStats},{icon:o(()=>[t(e.ReloadOutlined)]),default:o(()=>[k(" "+s(e.t("memory.refresh")),1)]),_:1},8,["loading"])]),_:1})]),R(" Stats Row "),t(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(114,46,209,.1)","border-color":"rgba(114,46,209,.35)",cursor:"pointer"},hoverable:"",onClick:n[1]||(n[1]=r=>e.activeLayer="short-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.shortTerm"),value:e.stats.shortTerm||0,"value-style":"color: #c084fc; font-size: 20px;"},{prefix:o(()=>[t(e.ThunderboltOutlined)]),_:1},8,["title","value"]),c("div",le,s(e.t("memory.stats.shortTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.3)",cursor:"pointer"},hoverable:"",onClick:n[2]||(n[2]=r=>e.activeLayer="long-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.longTerm"),value:e.stats.longTerm||0,"value-style":"color: #91caff; font-size: 20px;"},{prefix:o(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"]),c("div",se,s(e.t("memory.stats.longTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)",cursor:"pointer"},hoverable:"",onClick:n[3]||(n[3]=r=>e.activeLayer="core")},{default:o(()=>[t(f,{title:e.t("memory.stats.core"),value:e.stats.core||0,"value-style":"color: #69db7c; font-size: 20px;"},{prefix:o(()=>[t(e.StarOutlined)]),_:1},8,["title","value"]),c("div",ie,s(e.t("memory.stats.coreHint")),1)]),_:1})]),_:1})]),_:1}),R(" Layer Tabs + Recall "),t(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[c("div",ce,[c("span",null,s(e.t("memory.card.title")),1),t(p,{value:e.activeLayer,"onUpdate:value":n[4]||(n[4]=r=>e.activeLayer=r),"button-style":"solid",size:"small",onChange:e.recallByLayer},{default:o(()=>[t(v,{value:"short-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.short")),1)]),_:1}),t(v,{value:"long-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.long")),1)]),_:1}),t(v,{value:"core"},{default:o(()=>[k(s(e.t("memory.card.tabs.core")),1)]),_:1})]),_:1},8,["value"])])]),extra:o(()=>[t(P,{value:e.recallQuery,"onUpdate:value":n[5]||(n[5]=r=>e.recallQuery=r),placeholder:e.t("memory.card.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"220px"},loading:e.recalling,onSearch:e.doRecall},null,8,["value","placeholder","loading"])]),default:o(()=>[e.recalling?(w(),x("div",me,[t(U)])):e.memories.length?(w(),x("div",ue,[(w(!0),x(K,null,X(e.memories,r=>(w(),x("div",{key:r.id,class:"memory-item"},[c("div",ye,[c("div",_e,[t(V,{color:e.layerColor(r.layer||e.activeLayer),style:{"font-size":"10px"}},{default:o(()=>[k(s(e.layerLabel(r.layer||e.activeLayer)),1)]),_:2},1032,["color"]),r.importance?(w(),x("span",fe,s(e.t("memory.card.importanceLabel",{value:r.importance})),1)):R("v-if",!0)]),c("span",ge,s(r.time),1)]),c("div",ve,s(r.content),1)]))),128))])):(w(),x("div",de,s(e.t("memory.card.emptyText")),1))]),_:1}),R(" Consolidate Button "),t(_,{loading:e.consolidating,onClick:e.consolidate,style:{background:"var(--bg-card-hover)","border-color":"var(--text-muted)",width:"100%"}},{icon:o(()=>[t(e.SyncOutlined)]),default:o(()=>[k(" "+s(e.t("memory.consolidateButton")),1)]),_:1},8,["loading"]),R(" Store Memory Modal "),t(z,{open:e.showStore,"onUpdate:open":n[8]||(n[8]=r=>e.showStore=r),title:e.t("memory.modal.title"),"confirm-loading":e.storing,onOk:e.storeMemory},{default:o(()=>[t(F,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[t(M,{label:e.t("memory.modal.contentLabel"),required:""},{default:o(()=>[t(C,{value:e.newMemory.content,"onUpdate:value":n[6]||(n[6]=r=>e.newMemory.content=r),rows:4,placeholder:e.t("memory.modal.contentPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(M,{label:e.t("memory.modal.importanceLabel")},{default:o(()=>[t(T,{value:e.newMemory.importance,"onUpdate:value":n[7]||(n[7]=r=>e.newMemory.importance=r),min:0,max:1,step:.1,marks:e.importanceMarks},null,8,["value","marks"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading"])])}const we=Z(oe,[["render",pe],["__scopeId","data-v-5658552f"],["__file","/tmp/cc-web-panel-eI5lXL/repo/packages/web-panel/src/views/Memory.vue"]]);export{we as default};
@@ -1 +1 @@
1
- import{I as d,J as Q,U as v,c as a,K as n,V as S,o as V,x as L,r as c,P as u,Q as m,R as b,S as A}from"./vendor-Bn1JzzAn.js";import{_ as te,u as W,t as H,d as l}from"./index-CkFvuAex.js";import{u as X}from"./useShellMode-CgR0wCYM.js";import{Q as ae}from"./QrScannerModal-CzRSoIwK.js";import{ak as oe,aJ as ne,aK as ie,M as re,R as le}from"./icons-DG5UD-6K.js";import"./markdown-CsiA8-E5.js";const de={__name:"MobileBridge",setup(G,{expose:o}){o();const y=W(),e=c([]),q=c(!1),z=c(""),p=c(""),O=c(!1),D=c("desktop-qr"),P=c(!1),x=c(""),w=c(null),h=c(""),g=c({label:"等待手机扫描…",color:"blue"});let k=null;const M=c(!1),_=c({did:"",code:"",deviceId:"",deviceName:""});async function R(){P.value=!0,x.value="",w.value=null,g.value={label:"等待手机扫描…",color:"blue"};try{const t=await y.sendRaw({type:"desktop.pair.generate-qr"},1e4),r=t?.result??t;r?.payload&&r?.payloadJson?(w.value=r.payload,h.value=r.payloadJson,N()):x.value=t?.error||"生成失败:mobileBridge 未就绪?"}catch(t){x.value=`生成失败: ${t.message}`}finally{P.value=!1}}async function T(){i();try{await y.sendRaw({type:"desktop.pair.reset"},3e3)}catch{}await R()}function N(){i(),k=setInterval(async()=>{try{const t=await y.sendRaw({type:"desktop.pair.poll-ack"},3e3),r=t?.result??t;r?.status==="acked"?(g.value={label:`手机已扫描确认 (${r.ack?.deviceInfo?.name||r.ack?.mobileDid?.slice(0,12)||""})`,color:"green"},i(),await U(r.ack),await F()):r?.status==="expired"&&(g.value={label:"QR 已过期(5min),点重新生成",color:"orange"},i())}catch{}},2500)}async function U(t){if(!t||!t.pairingCode||!t.mobileDid||!t.deviceInfo?.deviceId){l.warning("配对成功但 ack 字段不全,无法写入设备表");return}const r={type:"device-pairing",code:t.pairingCode,did:t.mobileDid,deviceInfo:{deviceId:t.deviceInfo.deviceId,name:t.deviceInfo.name||"(unnamed)",platform:t.deviceInfo.platform||"android"},timestamp:Date.now()};try{const I=JSON.stringify(JSON.stringify(r)),{output:f}=await y.execute(`p2p pair-from-qr ${I} --json`,15e3),C=J(f);C?.success?l.success(`配对成功: ${C.deviceName||C.deviceId.slice(0,8)}`):C?.error?.includes?.("QR 已过期")?l.info("配对已确认,设备已写入数据库"):l.warning(`配对状态待确认: ${C?.error||"unknown"} — 列表刷新后即可见`)}catch(I){l.warning(`配对状态待确认: ${I.message} — 列表刷新后即可见`)}}function i(){k&&(clearInterval(k),k=null)}function s(t){t==="desktop-qr"?w.value?k||N():R():i()}function j(){_.value={did:"",code:"",deviceId:"",deviceName:""}}async function Y(){if(M.value)return;if(!/^\d{6}$/.test(_.value.code.trim())){l.error("配对码必须是 6 位数字");return}M.value=!0;const t={type:"device-pairing",code:_.value.code.trim(),did:_.value.did.trim(),deviceInfo:{deviceId:_.value.deviceId.trim(),name:_.value.deviceName.trim()||"(unnamed)",platform:"android"},timestamp:Date.now()};try{await E(JSON.stringify(t)),j()}finally{M.value=!1}}const Z=[{title:"设备 ID",key:"device_id",dataIndex:"device_id",width:280},{title:"设备名称",key:"device_name",dataIndex:"device_name"},{title:"状态",key:"status",dataIndex:"status",width:90},{title:"配对时间",key:"paired_at",dataIndex:"paired_at",width:180},{title:"操作",key:"action",width:130}];async function F(){q.value=!0,z.value="";try{const{output:t}=await y.execute("p2p devices --type mobile --json",15e3);e.value=J(t)||[]}catch(t){z.value=`加载失败: ${t.message}`,e.value=[]}finally{q.value=!1}}async function E(t){O.value=!1;let r=null;try{const f=JSON.stringify(t),{output:C}=await y.execute(`p2p pair-from-qr ${f} --json`,15e3),B=J(C);if(!B?.success){l.error(`配对失败: ${B?.error||"未知错误"}`);return}try{r=JSON.parse(t)}catch{}l.success(`已写入配对: ${B.deviceName||B.deviceId.slice(0,8)}`),await F()}catch(f){l.error(`配对失败: ${f.message}`);return}if(!r)return;const{isEmbedded:I}=X();if(!I){l.info("CLI 模式下已写本地 paired_devices;手机端确认状态留 cc desktop");return}try{const f=await y.sendRaw({type:"mobile.pair.send-confirmation",qrPayload:r},1e4);f&&f.ok!==!1?l.success("已通知手机端完成握手"):l.warning(`desktop 已写库,但通知手机端失败: ${f?.error||"unknown"}`)}catch(f){l.warning(`通知手机端失败: ${f.message}(desktop 已写库)`)}}async function $(t){p.value=t.device_id;try{const{output:r}=await y.execute(`p2p unpair ${t.device_id} --json`,15e3),I=J(r);I?.ok?(l.success("已解除配对"),await F()):l.error(`解除失败: ${I?.error||"未知错误"}`)}catch(r){l.error(`解除失败: ${r.message}`)}finally{p.value=""}}function J(t){return H(t)}function ee(t){if(!t)return"—";try{return new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}V(async()=>{await F(),D.value==="desktop-qr"&&R()}),L(()=>{i()});const K={ws:y,devices:e,loading:q,error:z,unpairingId:p,showScanner:O,addMode:D,desktopQrLoading:P,desktopQrError:x,desktopQrPayload:w,desktopQrPayloadJson:h,desktopAckStatus:g,get desktopAckPollTimer(){return k},set desktopAckPollTimer(t){k=t},manualSubmitting:M,manualForm:_,generateDesktopQr:R,regenerateDesktopQr:T,startAckPolling:N,registerPairedFromAck:U,stopAckPolling:i,onTabChange:s,resetManualForm:j,onManualSubmit:Y,columns:Z,refresh:F,onQrScanned:E,doUnpair:$,parseJsonOutput:J,formatTime:ee,ref:c,onMounted:V,onUnmounted:L,get message(){return l},get ReloadOutlined(){return le},get MobileOutlined(){return re},get DisconnectOutlined(){return ie},get QrcodeOutlined(){return ne},get CheckOutlined(){return oe},get useWsStore(){return W},get useShellMode(){return X},get tryParseJson(){return H},QrScannerModal:ae};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}},se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ce={style:{"text-align":"center"}},ue={key:0},me={key:1,style:{color:"#ff4d4f"}},pe={style:{"margin-top":"12px"}},fe={key:2},ve={style:{display:"inline-block",background:"#fff",padding:"16px","border-radius":"8px",border:"2px solid var(--border-color)"}},ye={style:{"font-family":"monospace","font-size":"32px","font-weight":"bold","letter-spacing":"8px","margin-top":"4px"}},ge={style:{"margin-top":"16px"}},_e={key:0,style:{"text-align":"center",padding:"30px"}},ke={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},be={key:3,style:{color:"var(--text-muted)","font-size":"12px"}},xe={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}};function we(G,o,y,e,q,z){const p=d("a-button"),O=d("a-alert"),D=d("a-spin"),P=d("a-qrcode"),x=d("a-tag"),w=d("a-tab-pane"),h=d("a-input"),g=d("a-form-item"),k=d("a-form"),M=d("a-tabs"),_=d("a-card"),R=d("a-empty"),T=d("a-space"),N=d("a-popconfirm"),U=d("a-table");return u(),Q("div",null,[v("div",se,[o[8]||(o[8]=v("div",null,[v("h2",{class:"page-title"},"移动桥"),v("p",{class:"page-sub"},"已配对的 Android 设备 · QR pairing 完成后会出现在此")],-1)),a(p,{type:"primary",ghost:"",loading:e.loading,onClick:e.refresh},{icon:n(()=>[a(e.ReloadOutlined)]),default:n(()=>[o[7]||(o[7]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),S(" v1.1 W3.6 manual entry: 添加配对面板支持两种方式 "),a(_,{title:"新增配对",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:n(()=>[a(M,{activeKey:e.addMode,"onUpdate:activeKey":o[5]||(o[5]=i=>e.addMode=i),onChange:e.onTabChange},{default:n(()=>[a(w,{key:"desktop-qr",tab:"桌面 QR(推荐)"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 扫描桌面 QR,对准下方二维码即可"}),v("div",ce,[e.desktopQrLoading?(u(),Q("div",ue,[a(D),o[9]||(o[9]=m(" 生成 QR 中… ",-1))])):e.desktopQrError?(u(),Q("div",me,[m(b(e.desktopQrError)+" ",1),v("div",pe,[a(p,{onClick:e.regenerateDesktopQr},{default:n(()=>[...o[10]||(o[10]=[m("重试",-1)])]),_:1})])])):e.desktopQrPayload?(u(),Q("div",fe,[v("div",ve,[a(P,{value:e.desktopQrPayloadJson,size:280,"error-level":"H"},null,8,["value"])]),o[12]||(o[12]=v("div",{style:{"margin-top":"16px",color:"var(--text-muted)","font-size":"12px"}}," 配对码(手机也可手输): ",-1)),v("div",ye,b(e.desktopQrPayload.code),1),v("div",ge,[a(x,{color:e.desktopAckStatus.color},{default:n(()=>[m(b(e.desktopAckStatus.label),1)]),_:1},8,["color"]),a(p,{size:"small",type:"link",style:{"margin-left":"8px"},onClick:e.regenerateDesktopQr},{default:n(()=>[...o[11]||(o[11]=[m(" 重新生成 ",-1)])]),_:1})])])):S("v-if",!0)])]),_:1}),a(w,{key:"manual",tab:"手动输入"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 配对桌面 显示 QR 后,照着屏幕填写下方三个字段"}),a(k,{layout:"vertical",model:e.manualForm},{default:n(()=>[a(g,{label:"DID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.did,"onUpdate:value":o[0]||(o[0]=i=>e.manualForm.did=i),placeholder:"did:cc:...",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"配对码 (6 位数字)",required:!0},{default:n(()=>[a(h,{value:e.manualForm.code,"onUpdate:value":o[1]||(o[1]=i=>e.manualForm.code=i),placeholder:"123456",maxlength:"6",style:{"font-family":"monospace","font-size":"20px","letter-spacing":"4px","text-align":"center"}},null,8,["value"])]),_:1}),a(g,{label:"设备 ID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.deviceId,"onUpdate:value":o[2]||(o[2]=i=>e.manualForm.deviceId=i),placeholder:"android-xxx-xxx",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"设备名(可选)"},{default:n(()=>[a(h,{value:e.manualForm.deviceName,"onUpdate:value":o[3]||(o[3]=i=>e.manualForm.deviceName=i),placeholder:"My Pixel 8"},null,8,["value"])]),_:1}),a(g,null,{default:n(()=>[a(p,{type:"primary",loading:e.manualSubmitting,disabled:!e.manualForm.did||!e.manualForm.code||!e.manualForm.deviceId,onClick:e.onManualSubmit},{icon:n(()=>[a(e.CheckOutlined)]),default:n(()=>[o[13]||(o[13]=m(" 提交配对 ",-1))]),_:1},8,["loading","disabled"]),a(p,{style:{"margin-left":"8px"},disabled:e.manualSubmitting,onClick:e.resetManualForm},{default:n(()=>[...o[14]||(o[14]=[m(" 清空 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["model"])]),_:1}),a(w,{key:"scan",tab:"扫描手机 QR(高级)"},{default:n(()=>[a(O,{type:"warning","show-icon":"",style:{"margin-bottom":"16px"},message:"需要桌面摄像头,对小屏 QR 识别率不稳定",description:"无摄像头或扫描失败请用 “手动输入” 标签页"}),a(p,{type:"primary",onClick:o[4]||(o[4]=i=>e.showScanner=!0)},{icon:n(()=>[a(e.QrcodeOutlined)]),default:n(()=>[o[15]||(o[15]=m(" 打开摄像头扫描 ",-1))]),_:1})]),_:1})]),_:1},8,["activeKey"])]),_:1}),a(_,{title:"已配对设备",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[a(x,{color:"blue"},{default:n(()=>[m(b(e.devices.length)+" 台",1)]),_:1})]),default:n(()=>[e.loading?(u(),Q("div",_e,[a(D)])):e.devices.length===0?(u(),A(R,{key:1,description:"还未配对任何移动设备。在 Android 上:设置 → 配对桌面,生成 QR 后桌面端扫描。"})):(u(),A(U,{key:2,columns:e.columns,"data-source":e.devices,pagination:!1,size:"small","row-key":"device_id"},{bodyCell:n(({column:i,record:s})=>[i.key==="device_id"?(u(),Q("span",ke,b(s.device_id.length>24?s.device_id.slice(0,24)+"…":s.device_id),1)):S("v-if",!0),i.key==="device_name"?(u(),A(T,{key:1},{default:n(()=>[a(e.MobileOutlined,{style:{color:"var(--text-muted)"}}),v("span",null,b(s.device_name||"(unnamed)"),1)]),_:2},1024)):S("v-if",!0),i.key==="status"?(u(),A(x,{key:2,color:s.status==="active"?"green":"default"},{default:n(()=>[m(b(s.status==="active"?"已激活":s.status),1)]),_:2},1032,["color"])):S("v-if",!0),i.key==="paired_at"?(u(),Q("span",be,b(e.formatTime(s.paired_at)),1)):S("v-if",!0),i.key==="action"?(u(),A(N,{key:4,title:`确定解除 ${s.device_name||s.device_id.slice(0,12)} 的配对?`,"ok-text":"解除","cancel-text":"取消","ok-type":"danger",onConfirm:j=>e.doUnpair(s)},{default:n(()=>[a(p,{size:"small",type:"link",danger:"",loading:e.unpairingId===s.device_id},{default:n(()=>[a(e.DisconnectOutlined),o[16]||(o[16]=m(" 解除配对 ",-1))]),_:1},8,["loading"])]),_:2},1032,["title","onConfirm"])):S("v-if",!0)]),_:1},8,["data-source"])),e.error?(u(),Q("div",xe,b(e.error),1)):S("v-if",!0)]),_:1}),a(e.QrScannerModal,{open:e.showScanner,onScanned:e.onQrScanned,onCancel:o[6]||(o[6]=i=>e.showScanner=!1)},null,8,["open"])])}const Me=te(de,[["render",we],["__scopeId","data-v-e76deacb"],["__file","/tmp/cc-web-panel-IRmDbX/repo/packages/web-panel/src/views/MobileBridge.vue"]]);export{Me as default};
1
+ import{I as d,J as Q,U as v,c as a,K as n,V as S,o as L,x as V,r as c,P as u,Q as m,R as b,S as A}from"./vendor-Bn1JzzAn.js";import{_ as te,u as W,t as H,d as l}from"./index-C9gtY4nG.js";import{u as X}from"./useShellMode-CgR0wCYM.js";import{Q as ae}from"./QrScannerModal-C8ZP31E9.js";import{ak as oe,aJ as ne,aK as ie,M as re,R as le}from"./icons-DG5UD-6K.js";import"./markdown-CsiA8-E5.js";const de={__name:"MobileBridge",setup(G,{expose:o}){o();const y=W(),e=c([]),q=c(!1),z=c(""),p=c(""),O=c(!1),P=c("desktop-qr"),D=c(!1),x=c(""),w=c(null),h=c(""),g=c({label:"等待手机扫描…",color:"blue"});let k=null;const M=c(!1),_=c({did:"",code:"",deviceId:"",deviceName:""});async function R(){D.value=!0,x.value="",w.value=null,g.value={label:"等待手机扫描…",color:"blue"};try{const t=await y.sendRaw({type:"desktop.pair.generate-qr"},1e4),r=t?.result??t;r?.payload&&r?.payloadJson?(w.value=r.payload,h.value=r.payloadJson,N()):x.value=t?.error||"生成失败:mobileBridge 未就绪?"}catch(t){x.value=`生成失败: ${t.message}`}finally{D.value=!1}}async function T(){i();try{await y.sendRaw({type:"desktop.pair.reset"},3e3)}catch{}await R()}function N(){i(),k=setInterval(async()=>{try{const t=await y.sendRaw({type:"desktop.pair.poll-ack"},3e3),r=t?.result??t;r?.status==="acked"?(g.value={label:`手机已扫描确认 (${r.ack?.deviceInfo?.name||r.ack?.mobileDid?.slice(0,12)||""})`,color:"green"},i(),await U(r.ack),await F()):r?.status==="expired"&&(g.value={label:"QR 已过期(5min),点重新生成",color:"orange"},i())}catch{}},2500)}async function U(t){if(!t||!t.pairingCode||!t.mobileDid||!t.deviceInfo?.deviceId){l.warning("配对成功但 ack 字段不全,无法写入设备表");return}const r={type:"device-pairing",code:t.pairingCode,did:t.mobileDid,deviceInfo:{deviceId:t.deviceInfo.deviceId,name:t.deviceInfo.name||"(unnamed)",platform:t.deviceInfo.platform||"android"},timestamp:Date.now()};try{const I=JSON.stringify(JSON.stringify(r)),{output:f}=await y.execute(`p2p pair-from-qr ${I} --json`,15e3),C=J(f);C?.success?l.success(`配对成功: ${C.deviceName||C.deviceId.slice(0,8)}`):C?.error?.includes?.("QR 已过期")?l.info("配对已确认,设备已写入数据库"):l.warning(`配对状态待确认: ${C?.error||"unknown"} — 列表刷新后即可见`)}catch(I){l.warning(`配对状态待确认: ${I.message} — 列表刷新后即可见`)}}function i(){k&&(clearInterval(k),k=null)}function s(t){t==="desktop-qr"?w.value?k||N():R():i()}function j(){_.value={did:"",code:"",deviceId:"",deviceName:""}}async function Y(){if(M.value)return;if(!/^\d{6}$/.test(_.value.code.trim())){l.error("配对码必须是 6 位数字");return}M.value=!0;const t={type:"device-pairing",code:_.value.code.trim(),did:_.value.did.trim(),deviceInfo:{deviceId:_.value.deviceId.trim(),name:_.value.deviceName.trim()||"(unnamed)",platform:"android"},timestamp:Date.now()};try{await E(JSON.stringify(t)),j()}finally{M.value=!1}}const Z=[{title:"设备 ID",key:"device_id",dataIndex:"device_id",width:280},{title:"设备名称",key:"device_name",dataIndex:"device_name"},{title:"状态",key:"status",dataIndex:"status",width:90},{title:"配对时间",key:"paired_at",dataIndex:"paired_at",width:180},{title:"操作",key:"action",width:130}];async function F(){q.value=!0,z.value="";try{const{output:t}=await y.execute("p2p devices --type mobile --json",15e3);e.value=J(t)||[]}catch(t){z.value=`加载失败: ${t.message}`,e.value=[]}finally{q.value=!1}}async function E(t){O.value=!1;let r=null;try{const f=JSON.stringify(t),{output:C}=await y.execute(`p2p pair-from-qr ${f} --json`,15e3),B=J(C);if(!B?.success){l.error(`配对失败: ${B?.error||"未知错误"}`);return}try{r=JSON.parse(t)}catch{}l.success(`已写入配对: ${B.deviceName||B.deviceId.slice(0,8)}`),await F()}catch(f){l.error(`配对失败: ${f.message}`);return}if(!r)return;const{isEmbedded:I}=X();if(!I){l.info("CLI 模式下已写本地 paired_devices;手机端确认状态留 cc desktop");return}try{const f=await y.sendRaw({type:"mobile.pair.send-confirmation",qrPayload:r},1e4);f&&f.ok!==!1?l.success("已通知手机端完成握手"):l.warning(`desktop 已写库,但通知手机端失败: ${f?.error||"unknown"}`)}catch(f){l.warning(`通知手机端失败: ${f.message}(desktop 已写库)`)}}async function $(t){p.value=t.device_id;try{const{output:r}=await y.execute(`p2p unpair ${t.device_id} --json`,15e3),I=J(r);I?.ok?(l.success("已解除配对"),await F()):l.error(`解除失败: ${I?.error||"未知错误"}`)}catch(r){l.error(`解除失败: ${r.message}`)}finally{p.value=""}}function J(t){return H(t)}function ee(t){if(!t)return"—";try{return new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}L(async()=>{await F(),P.value==="desktop-qr"&&R()}),V(()=>{i()});const K={ws:y,devices:e,loading:q,error:z,unpairingId:p,showScanner:O,addMode:P,desktopQrLoading:D,desktopQrError:x,desktopQrPayload:w,desktopQrPayloadJson:h,desktopAckStatus:g,get desktopAckPollTimer(){return k},set desktopAckPollTimer(t){k=t},manualSubmitting:M,manualForm:_,generateDesktopQr:R,regenerateDesktopQr:T,startAckPolling:N,registerPairedFromAck:U,stopAckPolling:i,onTabChange:s,resetManualForm:j,onManualSubmit:Y,columns:Z,refresh:F,onQrScanned:E,doUnpair:$,parseJsonOutput:J,formatTime:ee,ref:c,onMounted:L,onUnmounted:V,get message(){return l},get ReloadOutlined(){return le},get MobileOutlined(){return re},get DisconnectOutlined(){return ie},get QrcodeOutlined(){return ne},get CheckOutlined(){return oe},get useWsStore(){return W},get useShellMode(){return X},get tryParseJson(){return H},QrScannerModal:ae};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}},se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ce={style:{"text-align":"center"}},ue={key:0},me={key:1,style:{color:"#ff4d4f"}},pe={style:{"margin-top":"12px"}},fe={key:2},ve={style:{display:"inline-block",background:"#fff",padding:"16px","border-radius":"8px",border:"2px solid var(--border-color)"}},ye={style:{"font-family":"monospace","font-size":"32px","font-weight":"bold","letter-spacing":"8px","margin-top":"4px"}},ge={style:{"margin-top":"16px"}},_e={key:0,style:{"text-align":"center",padding:"30px"}},ke={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},be={key:3,style:{color:"var(--text-muted)","font-size":"12px"}},xe={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}};function we(G,o,y,e,q,z){const p=d("a-button"),O=d("a-alert"),P=d("a-spin"),D=d("a-qrcode"),x=d("a-tag"),w=d("a-tab-pane"),h=d("a-input"),g=d("a-form-item"),k=d("a-form"),M=d("a-tabs"),_=d("a-card"),R=d("a-empty"),T=d("a-space"),N=d("a-popconfirm"),U=d("a-table");return u(),Q("div",null,[v("div",se,[o[8]||(o[8]=v("div",null,[v("h2",{class:"page-title"},"移动桥"),v("p",{class:"page-sub"},"已配对的 Android 设备 · QR pairing 完成后会出现在此")],-1)),a(p,{type:"primary",ghost:"",loading:e.loading,onClick:e.refresh},{icon:n(()=>[a(e.ReloadOutlined)]),default:n(()=>[o[7]||(o[7]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),S(" v1.1 W3.6 manual entry: 添加配对面板支持两种方式 "),a(_,{title:"新增配对",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:n(()=>[a(M,{activeKey:e.addMode,"onUpdate:activeKey":o[5]||(o[5]=i=>e.addMode=i),onChange:e.onTabChange},{default:n(()=>[a(w,{key:"desktop-qr",tab:"桌面 QR(推荐)"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 扫描桌面 QR,对准下方二维码即可"}),v("div",ce,[e.desktopQrLoading?(u(),Q("div",ue,[a(P),o[9]||(o[9]=m(" 生成 QR 中… ",-1))])):e.desktopQrError?(u(),Q("div",me,[m(b(e.desktopQrError)+" ",1),v("div",pe,[a(p,{onClick:e.regenerateDesktopQr},{default:n(()=>[...o[10]||(o[10]=[m("重试",-1)])]),_:1})])])):e.desktopQrPayload?(u(),Q("div",fe,[v("div",ve,[a(D,{value:e.desktopQrPayloadJson,size:280,"error-level":"H"},null,8,["value"])]),o[12]||(o[12]=v("div",{style:{"margin-top":"16px",color:"var(--text-muted)","font-size":"12px"}}," 配对码(手机也可手输): ",-1)),v("div",ye,b(e.desktopQrPayload.code),1),v("div",ge,[a(x,{color:e.desktopAckStatus.color},{default:n(()=>[m(b(e.desktopAckStatus.label),1)]),_:1},8,["color"]),a(p,{size:"small",type:"link",style:{"margin-left":"8px"},onClick:e.regenerateDesktopQr},{default:n(()=>[...o[11]||(o[11]=[m(" 重新生成 ",-1)])]),_:1})])])):S("v-if",!0)])]),_:1}),a(w,{key:"manual",tab:"手动输入"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 配对桌面 显示 QR 后,照着屏幕填写下方三个字段"}),a(k,{layout:"vertical",model:e.manualForm},{default:n(()=>[a(g,{label:"DID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.did,"onUpdate:value":o[0]||(o[0]=i=>e.manualForm.did=i),placeholder:"did:cc:...",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"配对码 (6 位数字)",required:!0},{default:n(()=>[a(h,{value:e.manualForm.code,"onUpdate:value":o[1]||(o[1]=i=>e.manualForm.code=i),placeholder:"123456",maxlength:"6",style:{"font-family":"monospace","font-size":"20px","letter-spacing":"4px","text-align":"center"}},null,8,["value"])]),_:1}),a(g,{label:"设备 ID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.deviceId,"onUpdate:value":o[2]||(o[2]=i=>e.manualForm.deviceId=i),placeholder:"android-xxx-xxx",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"设备名(可选)"},{default:n(()=>[a(h,{value:e.manualForm.deviceName,"onUpdate:value":o[3]||(o[3]=i=>e.manualForm.deviceName=i),placeholder:"My Pixel 8"},null,8,["value"])]),_:1}),a(g,null,{default:n(()=>[a(p,{type:"primary",loading:e.manualSubmitting,disabled:!e.manualForm.did||!e.manualForm.code||!e.manualForm.deviceId,onClick:e.onManualSubmit},{icon:n(()=>[a(e.CheckOutlined)]),default:n(()=>[o[13]||(o[13]=m(" 提交配对 ",-1))]),_:1},8,["loading","disabled"]),a(p,{style:{"margin-left":"8px"},disabled:e.manualSubmitting,onClick:e.resetManualForm},{default:n(()=>[...o[14]||(o[14]=[m(" 清空 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["model"])]),_:1}),a(w,{key:"scan",tab:"扫描手机 QR(高级)"},{default:n(()=>[a(O,{type:"warning","show-icon":"",style:{"margin-bottom":"16px"},message:"需要桌面摄像头,对小屏 QR 识别率不稳定",description:"无摄像头或扫描失败请用 “手动输入” 标签页"}),a(p,{type:"primary",onClick:o[4]||(o[4]=i=>e.showScanner=!0)},{icon:n(()=>[a(e.QrcodeOutlined)]),default:n(()=>[o[15]||(o[15]=m(" 打开摄像头扫描 ",-1))]),_:1})]),_:1})]),_:1},8,["activeKey"])]),_:1}),a(_,{title:"已配对设备",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[a(x,{color:"blue"},{default:n(()=>[m(b(e.devices.length)+" 台",1)]),_:1})]),default:n(()=>[e.loading?(u(),Q("div",_e,[a(P)])):e.devices.length===0?(u(),A(R,{key:1,description:"还未配对任何移动设备。在 Android 上:设置 → 配对桌面,生成 QR 后桌面端扫描。"})):(u(),A(U,{key:2,columns:e.columns,"data-source":e.devices,pagination:!1,size:"small","row-key":"device_id"},{bodyCell:n(({column:i,record:s})=>[i.key==="device_id"?(u(),Q("span",ke,b(s.device_id.length>24?s.device_id.slice(0,24)+"…":s.device_id),1)):S("v-if",!0),i.key==="device_name"?(u(),A(T,{key:1},{default:n(()=>[a(e.MobileOutlined,{style:{color:"var(--text-muted)"}}),v("span",null,b(s.device_name||"(unnamed)"),1)]),_:2},1024)):S("v-if",!0),i.key==="status"?(u(),A(x,{key:2,color:s.status==="active"?"green":"default"},{default:n(()=>[m(b(s.status==="active"?"已激活":s.status),1)]),_:2},1032,["color"])):S("v-if",!0),i.key==="paired_at"?(u(),Q("span",be,b(e.formatTime(s.paired_at)),1)):S("v-if",!0),i.key==="action"?(u(),A(N,{key:4,title:`确定解除 ${s.device_name||s.device_id.slice(0,12)} 的配对?`,"ok-text":"解除","cancel-text":"取消","ok-type":"danger",onConfirm:j=>e.doUnpair(s)},{default:n(()=>[a(p,{size:"small",type:"link",danger:"",loading:e.unpairingId===s.device_id},{default:n(()=>[a(e.DisconnectOutlined),o[16]||(o[16]=m(" 解除配对 ",-1))]),_:1},8,["loading"])]),_:2},1032,["title","onConfirm"])):S("v-if",!0)]),_:1},8,["data-source"])),e.error?(u(),Q("div",xe,b(e.error),1)):S("v-if",!0)]),_:1}),a(e.QrScannerModal,{open:e.showScanner,onScanned:e.onQrScanned,onCancel:o[6]||(o[6]=i=>e.showScanner=!1)},null,8,["open"])])}const Me=te(de,[["render",we],["__scopeId","data-v-e76deacb"],["__file","/tmp/cc-web-panel-eI5lXL/repo/packages/web-panel/src/views/MobileBridge.vue"]]);export{Me as default};
@@ -1 +1 @@
1
- import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-Bn1JzzAn.js";import{_ as v,b as m}from"./index-CkFvuAex.js";import{a8 as y,M}from"./icons-DG5UD-6K.js";const B={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return M},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function D(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",k,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(B,[["render",D],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-IRmDbX/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
1
+ import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-Bn1JzzAn.js";import{_ as v,b as m}from"./index-C9gtY4nG.js";import{a8 as y,M}from"./icons-DG5UD-6K.js";const B={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return M},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function T(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",k,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(B,[["render",T],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-eI5lXL/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};