chainlesschain 0.165.8 → 0.165.9

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 (169) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-B3gWmXjo.js → AIOps-DxwjrnEA.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-G9pdT-0e.js → ActionButton-JdbYowzn.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-Ca30J7m2.js → Analytics-C06GCahv.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-BtVTm8PU.js → AppLayout-BUVEEyi1.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-BhViNa6u.js → Artifacts-D_ORzkJd.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DhKq-FnY.js → Audit-8o_Y5ejG.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-BL0SVbnE.js → BackgroundAgents-DrkHd5VU.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-BWkblnFi.js → Backup-CKBZCX11.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-ClaRNrF8.js → BaseInput-C8HkI399.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-sZE2Z77o.js → Chat-zb2H2Wux.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BAfKOnRe.js → ChatBubbleRenderer-BDcNpU_F.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-Cvhay5WM.js → Checkbox-MwPtQmNz.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-BpejL-4N.js → Codegen-3p5QCkFK.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-g2Ki6g_1.js → Col-BPLlhn52.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-D2xKbNo9.js → Community-C-3dBNOM.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-DbL1Pds3.js → Compact-BUcy-F_b.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-DGtZCV4c.js → Compliance-CI8NxT8m.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-4kQpoNsI.js → Cowork-DaDEBS-Q.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-BxTYXXAN.js → Cron-BSv9HXu5.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-k0J0LT2N.js → Crosschain-yuiKlJmv.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-BaqhoPgN.js → DID-D6LfldB0.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-T4RVPIM1.js → Dashboard-CBhLqG61.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DszOToWq.js → Dropdown-BG8pIl3O.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-C9KJU7HF.js → EmailListRenderer-CY92VIE6.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Cmr0JnsA.js → FamilyGuardDashboard-1Q_ehauM.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-BI-_2xZX.js → Federation-D3XirJIU.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-DsnDEPsl.js → FormItemContext-DfI9UuGZ.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-BLncAKKK.js → GenericCardRenderer-IeCZk2m7.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BPQhGXDn.js → Git-DzK4IJAZ.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CyElbUQW.js → Governance-BHf5KfmQ.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-CcSntBQD.js → Inference-BmaxSALS.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-p6e7HZ2r.js → KnowledgeGraph-BgePFLA9.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-CNEtr-wz.js → Logs-nqgxpOc4.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-xkX6izBt.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-Dd2notAJ.js → Marketplace-Bu8to-86.js} +1 -1
  38. package/src/assets/web-panel/assets/McpTools-BFWTzEk0.js +4 -0
  39. package/src/assets/web-panel/assets/{Memory-Dg2uTvwx.js → Memory-B026G2GA.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-r1YMRiJV.js → MobileBridge-CM2Eeg6I.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-C-89kSm4.js → MobileProjects-B79Ob3hy.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-CrPZcVgf.js → Mtc-CxevSZuV.js} +5 -5
  43. package/src/assets/web-panel/assets/{MtcAudit-sxi7hqJb.js → MtcAudit-X396cPEX.js} +4 -4
  44. package/src/assets/web-panel/assets/{Multisig-CAgOMfF1.js → Multisig-HWIB_aZ1.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-DafaPts3.js → NLProgramming-gnYD1Xwy.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-CJM-xUW_.js → Notes-Dn2Gf_J1.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-L0ZjfAh_.js → NotificationSettings-BRKBQ5rq.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-BB1CvCK0.js → OrderTableRenderer-Dy___Cgo.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-DeLtgAD8.js → Organization-cqfccxnt.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-CKC2b10z.js → Overflow-CSX4FHN3.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-eyf2rzY1.js → P2P-Bwa4aghp.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-5upNIOW8.js → PdhVaultBrowser-Dhszyjig.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-B8p3W6JK.js → Permissions-CXzTyk6e.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-BnRMxTq3.js → PersonalDataHub-CFCAAJbb.js} +5 -5
  55. package/src/assets/web-panel/assets/{Pipeline-DjCNI1li.js → Pipeline-BPJbx6xt.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-u6gXLbWT.js → Privacy-BbiXvEHz.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-BZAw4tkM.js → ProjectInit-B-s7-wSD.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-B1Tr72q7.js → ProjectSettings-Dyug206y.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-DO7HFuBQ.js → Projects-BtAI5Fwo.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-BjCztyhj.js → Providers-JpIPmz6N.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-ZWyCUbR1.js → QrScannerModal-CZdoN64A.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-DhDjeW4G.js → QuickAsk-BwvnoRIT.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-R_CN2MuU.js → Recommend-ASMlMQrD.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-uxFcujeu.js → RemoteSession-BiJzKFKi.js} +3 -3
  65. package/src/assets/web-panel/assets/{Reputation-DX8D7rks.js → Reputation-C80TWLIO.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-BYahQILD.js → Row-C1VNmjmX.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-CUSQ2tm-.js → RssFeed-T2MyGUlG.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-CnN_S8Cs.js → Search-DXM6O83L.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-DcZlh-O4.js → Security-nv69kU7W.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-ZhBOjzIX.js → Services-AyHWe7Qj.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-D5Qnq_lI.js → Skeleton-D6PWLxFI.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-BC9cZ3Be.js → Skills-BqVeOmNQ.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-DauJ3E8_.js → Sla-BegIPl9M.js} +1 -1
  74. package/src/assets/web-panel/assets/SpeechSettings-CKJn3xk-.js +1 -0
  75. package/src/assets/web-panel/assets/{SyncSettings-DUvJbSct.js → SyncSettings-Th4cnAMl.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-BXa-5noQ.js → Tasks-BuKfBroh.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-JxaiUt_3.js → Templates-CMuWN8Ac.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-BW4ERQN8.js → Tenant-C4je8E8Q.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-DltUbdtv.js → Terminal-agJESOcO.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-CMoZz0Tc.js → TimelineRenderer-D2qDuVZ_.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-D_VEV60K.js → Tokens-Cvmn99rH.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-CCXTCs0R.js → Trigger-D_QYIHH8.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-lkGRIPcG.js → Trust-BmzvQLnX.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-BfGeQ9HX.js → UkeySign-D_LopHwH.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-BEC7pYvc.js → VideoEditing-DoWl3PhQ.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-BZdG24o0.js → Wallet-5NYcAkxe.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-yoEddedp.js → WebAuthn-B-_Q3ewp.js} +3 -3
  88. package/src/assets/web-panel/assets/{WorkflowEditor-BXZEprOW.js → WorkflowEditor-CHET-gi2.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-gg0bzZal.js → chat-C6nvb-n6.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-DjRVRuin.js → colors-CTDE9LTX.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-su-dieAc.js → compact-item-KnemdF8D.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-Ci3S8oKF.js → createContext-DUJR3Uek.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-1DqLH1KX.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-D8F10heH.js → hasIn-CFNTaby8.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CusgZPtc.js → index-65HO56Bv.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BbF1IHof.js → index-B8RtbSkV.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CEmXRhAE.js → index-BHqSqnW7.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DIJ2qFOC.js → index-BTetEUWd.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CUmDhC4j.js → index-BXWg1crv.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DBAETXft.js → index-BdiC4LOs.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BhJtcPWo.js +1 -0
  102. package/src/assets/web-panel/assets/{index-Tu8eWqh-.js → index-BuizJo2E.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BzPB6kGZ.js → index-BwZM1rod.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DkMEF5VT.js → index-C96N9xeL.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BTFpdBtt.js → index-CHfUdnJH.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DkfQR3hM.js → index-CKvBF3Ov.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-T6_6ygJZ.js → index-CSD9_I2_.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CR0h6seT.js → index-Cc7dbl_p.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Dbq4NMET.js → index-CcF0D7UZ.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C6ygzplr.js → index-Ceu92a8D.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-11wtYQiF.js → index-CnLpuTAU.js} +1 -1
  112. package/src/assets/web-panel/assets/index-Cq8MWPDT.js +1 -0
  113. package/src/assets/web-panel/assets/{index-1IgxgALJ.js → index-CquKnw5r.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CMPqd5Cv.js → index-CyEtHvEE.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BMMOVoLD.js → index-DF-fcTvQ.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-W7XUgdVL.js → index-DF1Y0Vuw.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DyLUarhZ.js → index-DJyPeBBk.js} +3 -3
  118. package/src/assets/web-panel/assets/{index-BDJntYmJ.js → index-DP-PbO11.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-COWd8uGx.js → index-DZgCRMxk.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-8Z-8BIlN.js → index-DfJzS3Qa.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-dHZinfko.js → index-DqPpJkte.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BCI5v0yB.js → index-DzReoLyh.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CPIYSp4H.js → index-JGTiDeOW.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-jyNgp5FI.js → index-NUR0If7O.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-6Tniqk1s.js → index-NtAcnJYW.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BgT9su_e.js → index-OmuhFYKE.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DugB_aKa.js → index-Wlc7o_C8.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Ba_HyPnE.js → index-bxTPfdri.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CC3ZDjzY.js → index-k6uorYmf.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-5JqhujnR.js → index-ox6mIwE2.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-1agckWSq.js → index-rVDD7AAR.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BGzixOGZ.js → index-u0h6QqVV.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DnLucOn9.js → index-v-mtxmWH.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-Cv4p8e4w.js → initDefaultProps-qEt8dI-t.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-B8EwmMOw.js → motion-DetKPWy-.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-B8R9F8TK.js → move-BeNYeDV2.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-DoFYz5Bp.js → mtc-parser-C0q0MK_T.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-CHWYLBjI.js → omit-DLKkrKpE.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-CXuPDO77.js → pickAttrs-Bw1tWsY8.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-BaAtUUon.js → placementArrow-DeesBLbd.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-DCc4zcDD.js → responsiveObserve-bqLhxHhn.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-B_lx89oZ.js → slide-DGCXRoQm.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-DE8DPmR0.js → statusUtils-H-re3Egl.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-1ktXOsL_.js → styleChecker-BXg4qGX_.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-xH89-wjh.js → useFlexGapSupport-CKLb2KA6.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-DscvfW5p.js → useFs-CTAhHeyw.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-RdMKQta7.js → usePersonalDataHub-BQ4pDh5g.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-Z3wTni2T.js → vnode-jrSK6j4j.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-B0iChCsm.js → zoom-fOQE24pw.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/data/changelog.json +13 -0
  152. package/src/gateways/ws/mcp-topic-handlers.js +167 -0
  153. package/src/lib/agent-network.js +166 -29
  154. package/src/lib/agent-router.js +62 -6
  155. package/src/lib/agent-sandbox.js +7 -1
  156. package/src/lib/claude-code-bridge.js +159 -54
  157. package/src/lib/cowork-workflow.js +69 -6
  158. package/src/lib/external-agent-adapters.js +269 -0
  159. package/src/lib/ipfs-storage.js +127 -25
  160. package/src/lib/orchestrator.js +47 -0
  161. package/src/lib/shell-approval.js +7 -5
  162. package/src/lib/workflow-engine.js +42 -11
  163. package/src/runtime/agent-runtime.js +12 -1
  164. package/src/assets/web-panel/assets/MarkdownRenderer-Bj9xI0YH.js +0 -1
  165. package/src/assets/web-panel/assets/McpTools-BBsN2CSW.js +0 -7
  166. package/src/assets/web-panel/assets/SpeechSettings-DbNeZ_fh.js +0 -1
  167. package/src/assets/web-panel/assets/devWarning-CxbFX9uH.js +0 -1
  168. package/src/assets/web-panel/assets/index-CJGOlduY.js +0 -1
  169. package/src/assets/web-panel/assets/index-CkBCN5yH.js +0 -1
@@ -5,6 +5,12 @@
5
5
  */
6
6
 
7
7
  import crypto from "crypto";
8
+ import runtimeClaimsContract from "@chainlesschain/session-core/runtime-claims";
9
+
10
+ const { RUNTIME_MODE, createRuntimeClaims } = runtimeClaimsContract;
11
+ const WORKFLOW_SIMULATION_CLAIMS = createRuntimeClaims({
12
+ mode: RUNTIME_MODE.SIMULATED,
13
+ });
8
14
 
9
15
  // ─── Frozen enums (Phase 82 spec) ─────────────────────────────
10
16
 
@@ -14,6 +20,7 @@ export const WORKFLOW_STATUS = Object.freeze({
14
20
  RUNNING: "running",
15
21
  PAUSED: "paused",
16
22
  COMPLETED: "completed",
23
+ SIMULATED: "simulated",
17
24
  FAILED: "failed",
18
25
  ROLLING_BACK: "rolling_back",
19
26
  ROLLED_BACK: "rolled_back",
@@ -24,6 +31,7 @@ export const NODE_STATUS = Object.freeze({
24
31
  PENDING: "pending",
25
32
  RUNNING: "running",
26
33
  COMPLETED: "completed",
34
+ SIMULATED: "simulated",
27
35
  FAILED: "failed",
28
36
  SKIPPED: "skipped",
29
37
  WAITING_APPROVAL: "waiting_approval",
@@ -228,7 +236,10 @@ export function deleteWorkflow(db, workflowId) {
228
236
  }
229
237
 
230
238
  /**
231
- * Execute a workflow, running through stages in topological order.
239
+ * Simulate a workflow by traversing stages in topological order.
240
+ *
241
+ * This legacy designer has no action executor. It must never report a
242
+ * production completion until an execution adapter is explicitly supplied.
232
243
  * @returns {{ id, workflowId, status, log }}
233
244
  */
234
245
  export function executeWorkflow(db, workflowId, input = {}) {
@@ -251,14 +262,14 @@ export function executeWorkflow(db, workflowId, input = {}) {
251
262
  // Topological sort for execution order
252
263
  const order = topologicalSort(stages);
253
264
 
254
- // Execute each stage
265
+ // Plan each stage. No action or approval handler is invoked here.
255
266
  for (const stageId of order) {
256
267
  const stage = stages.find((s) => s.id === stageId);
257
268
  log.push({
258
269
  stageId: stage.id,
259
270
  stageName: stage.name,
260
271
  type: stage.type || "action",
261
- status: "completed",
272
+ status: "simulated",
262
273
  timestamp: new Date().toISOString(),
263
274
  });
264
275
  }
@@ -271,7 +282,7 @@ export function executeWorkflow(db, workflowId, input = {}) {
271
282
  ).run(
272
283
  execId,
273
284
  workflowId,
274
- "completed",
285
+ "simulated",
275
286
  JSON.stringify(input),
276
287
  JSON.stringify(log),
277
288
  order[order.length - 1] || null,
@@ -279,7 +290,14 @@ export function executeWorkflow(db, workflowId, input = {}) {
279
290
  now,
280
291
  );
281
292
 
282
- return { id: execId, workflowId, status: "completed", log };
293
+ return {
294
+ id: execId,
295
+ workflowId,
296
+ status: "simulated",
297
+ log,
298
+ runtimeClaims: WORKFLOW_SIMULATION_CLAIMS,
299
+ terminalEvidence: [],
300
+ };
283
301
  }
284
302
 
285
303
  /**
@@ -332,7 +350,7 @@ export function pauseExecution(db, executionId) {
332
350
  if (
333
351
  exec.status !== "running" &&
334
352
  exec.status !== "pending" &&
335
- exec.status !== "completed"
353
+ exec.status !== "simulated"
336
354
  ) {
337
355
  throw new Error(`Cannot pause execution in status: ${exec.status}`);
338
356
  }
@@ -352,11 +370,15 @@ export function pauseExecution(db, executionId) {
352
370
  executionId,
353
371
  );
354
372
 
355
- return { id: executionId, status: "paused" };
373
+ return {
374
+ id: executionId,
375
+ status: "paused",
376
+ runtimeClaims: WORKFLOW_SIMULATION_CLAIMS,
377
+ };
356
378
  }
357
379
 
358
380
  /**
359
- * Resume a paused execution.
381
+ * Resume a paused simulation.
360
382
  */
361
383
  export function resumeExecution(db, executionId) {
362
384
  ensureWorkflowTables(db);
@@ -371,13 +393,13 @@ export function resumeExecution(db, executionId) {
371
393
  }
372
394
 
373
395
  db.prepare("UPDATE workflow_executions SET status = ? WHERE id = ?").run(
374
- "running",
396
+ "simulated",
375
397
  executionId,
376
398
  );
377
399
 
378
400
  const log = _safeParse(exec.log, []);
379
401
  log.push({
380
- action: "resumed",
402
+ action: "simulation-resumed",
381
403
  timestamp: new Date().toISOString(),
382
404
  });
383
405
  db.prepare("UPDATE workflow_executions SET log = ? WHERE id = ?").run(
@@ -385,7 +407,11 @@ export function resumeExecution(db, executionId) {
385
407
  executionId,
386
408
  );
387
409
 
388
- return { id: executionId, status: "running" };
410
+ return {
411
+ id: executionId,
412
+ status: "simulated",
413
+ runtimeClaims: WORKFLOW_SIMULATION_CLAIMS,
414
+ };
389
415
  }
390
416
 
391
417
  /**
@@ -439,6 +465,11 @@ export function getExecutionLog(db, executionId) {
439
465
  log: _safeParse(exec.log, []),
440
466
  startedAt: exec.started_at,
441
467
  completedAt: exec.completed_at,
468
+ runtimeClaims:
469
+ exec.status === "simulated" || exec.status === "paused"
470
+ ? WORKFLOW_SIMULATION_CLAIMS
471
+ : undefined,
472
+ terminalEvidence: [],
442
473
  };
443
474
  }
444
475
 
@@ -16,6 +16,7 @@ import { startChatRepl } from "../gateways/repl/chat-repl.js";
16
16
  import { ChainlessChainWSServer } from "../gateways/ws/ws-server.js";
17
17
  import { WSSessionManager } from "../gateways/ws/ws-session-gateway.js";
18
18
  import { attachTopicHandlers } from "../gateways/ws/topic-handler-attachment.js";
19
+ import { createMcpTopicHandlers } from "../gateways/ws/mcp-topic-handlers.js";
19
20
  import { PtyManager } from "../gateways/terminal/PtyManager.js";
20
21
  import { createTerminalHandlers } from "../gateways/terminal/terminal-handlers.js";
21
22
  import { createWebUIServer } from "../gateways/ui/web-ui-server.js";
@@ -578,8 +579,18 @@ export class AgentRuntime {
578
579
  ptyManager,
579
580
  broadcast: (frame) => wsBroadcastRef.current?.(frame),
580
581
  });
582
+ const mcpConfigStore = rawDb
583
+ ? this.deps.createMcpServerConfig(rawDb)
584
+ : null;
581
585
  const attached = attachTopicHandlers(wsServer, {
582
- handlers: terminal.handlers,
586
+ handlers: {
587
+ ...terminal.handlers,
588
+ ...createMcpTopicHandlers({
589
+ mcpClient,
590
+ configStore: mcpConfigStore,
591
+ cwd: workspacePolicyCwd,
592
+ }),
593
+ },
583
594
  });
584
595
  wsBroadcastRef.current = attached.broadcast;
585
596
  terminal.attachServerEvents();
@@ -1 +0,0 @@
1
- import{P as c,J as p,b as a}from"./vendor-Bn1JzzAn.js";import{r as s}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-DyLUarhZ.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=a(()=>s(e.content||"")),n={props:e,rendered:r,computed:a,get renderMarkdown(){return s}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-DaKYjg/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
@@ -1,7 +0,0 @@
1
- import{I as j,P as o,J as d,F as I,Z as Y,V as x,U as f,R as s,c as g,K as v,Q as U,S as R,$ as Ve,b as E,o as pe,r as O}from"./vendor-Bn1JzzAn.js";import{u as re,_ as he,b as ye}from"./index-DyLUarhZ.js";import{at as je,au as Me,aq as Ue,f as Le,af as Pe,a4 as Ee,R as Ie}from"./icons-DG5UD-6K.js";function X(r){if(r&&typeof r.ok=="boolean"&&!r.ok)throw new Error(r.error||"MCP call failed");return r?.result??r??null}function ve(){const r=re();async function a(p){const c=await r.sendRaw(p?{type:"mcp.list_tools",serverName:p}:{type:"mcp.list_tools"},15e3);return X(c)}async function t(p,c,w={}){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:w},6e4);return X(h)}async function e(p){const c=await r.sendRaw(p?{type:"mcp.list_resources",serverName:p}:{type:"mcp.list_resources"},15e3);return X(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 w=await r.sendRaw({type:"mcp.read_resource",serverName:p,uri:c},3e4);return X(w)}return{listTools:a,callTool:t,listResources:e,readResource:i}}function K(r){return!r||typeof r!="object"?[]:r.type!=="object"||!r.properties||typeof r.properties!="object"?[]:ie(r,[])}function ie(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 w=[...a,p],h=t.has(p);if(ae(c.type)==="object"&&c.properties&&typeof c.properties=="object"){const M=ie(c,w);M.length===0?e.push(_e(w,c,h,"raw")):e.push(...M);continue}e.push(_e(w,c,h))}return e}function _e(r,a,t,e){const i=ae(a.type),p=typeof a.description=="string"?a.description:"",c=r.join("."),w=a.title||r[r.length-1],h=Array.isArray(a.enum)&&a.enum.length>0;let k="raw",M=null,V;if(e)k=e;else if(h)k="select";else if(i==="string")k=Fe(a,p)?"textarea":"text";else if(i==="integer"||i==="number")k="number";else if(i==="boolean")k="boolean";else if(i==="array"){const A=a.items&&typeof a.items=="object"?a.items:null,n=A?ae(A.type):null;n==="string"?(k="tags",M="string"):n==="object"&&A.properties&&typeof A.properties=="object"&&(k="objectList",V=ie(A,[]),V.length===0&&(k="raw",V=void 0))}return{name:c,path:r,type:i,widget:k,label:w,description:p,required:t,default:a.default,enum:h?a.enum.slice():void 0,itemsType:M,...V?{itemFields:V}:{}}}function ae(r){return typeof r=="string"?r:Array.isArray(r)&&r.find(t=>t&&t!=="null")||"any"}function Fe(r,a){return r.format==="long-text"||r.format==="textarea"||typeof r.maxLength=="number"&&r.maxLength>200||a.length>120}function ge(r){const a={};for(const t of r){if(t.default!==void 0){a[t.name]=le(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 le(r){if(Array.isArray(r))return r.map(le);if(r&&typeof r=="object"){const a={};for(const[t,e]of Object.entries(r))a[t]=le(e);return a}return r}function se(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(Ne(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(k=>k.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 k=!1;for(let M=0;M<c.length;M++){const V=c[M];if(!V||typeof V!="object"){t[`${i.name}[${M}]`]="必须是对象",k=!0;continue}const A=se(i.itemFields||[],V);if(!A.ok){k=!0;for(const[n,l]of Object.entries(A.errors))t[`${i.name}[${M}].${n}`]=l;continue}h.push(A.params)}k||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 Ne(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 qe={__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=E(()=>K(e.schema));function c(l){const b=Math.max(0,(l.path?.length??1)-1);return b>0?`margin-left: ${b*16}px;`:""}let w=null;function h(l){const b=l.path||[l.name];if(b.length<=1)return w=null,"";const m=b.slice(0,-1).join(".");return m===w?"":(w=m,m)}function k(l,b){i("update:modelValue",{...e.modelValue,[l]:b})}function M(l,b,m,S){const N=Array.isArray(e.modelValue[l])?e.modelValue[l].slice():[];N[b]={...N[b]||{},[m]:S},i("update:modelValue",{...e.modelValue,[l]:N})}function V(l){const b=Array.isArray(e.modelValue[l.name])?e.modelValue[l.name].slice():[],m={};for(const S of l.itemFields||[])S.default!==void 0?m[S.name]=S.default:S.widget==="boolean"?m[S.name]=!1:S.widget==="number"?m[S.name]=null:m[S.name]="";b.push(m),i("update:modelValue",{...e.modelValue,[l.name]:b})}function A(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 w},set lastParentKey(l){w=l},parentBreadcrumb:h,set:k,setItem:M,addItem:V,removeItem:A,computed:E,get PlusOutlined(){return je},get extractFields(){return K}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},Be={key:0,style:{color:"var(--text-muted)","font-size":"12px",padding:"8px 0"}},Je={key:1,style:{display:"flex","flex-direction":"column",gap:"14px"}},We={key:0,style:{color:"var(--text-muted)","font-size":"10px","font-family":"monospace","margin-bottom":"4px"}},Ke={style:{"margin-bottom":"4px"}},He={style:{"font-family":"monospace","font-size":"12px"}},De={key:0,style:{color:"#ff4d4f","margin-left":"4px"}},Ye={key:1,style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ge={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-bottom":"8px"}},Qe={style:{color:"var(--text-muted)","font-size":"11px"}},Ze={style:{display:"flex","flex-direction":"column",gap:"10px"}},Xe={style:{"font-family":"monospace","font-size":"11px"}},$e={key:0,style:{color:"#ff4d4f","margin-left":"4px"}},et={key:5,style:{color:"#ff4d4f","font-size":"11px"}},tt={key:10,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}};function ot(r,a,t,e,i,p){const c=j("a-tag"),w=j("a-input"),h=j("a-textarea"),k=j("a-input-number"),M=j("a-switch"),V=j("a-select"),A=j("a-button");return e.fields.length?(o(),d("div",Je,[(o(!0),d(I,null,Y(e.fields,n=>(o(),d(I,{key:n.name},[x(" Nested-leaf indent: 16px per parent path component "),f("div",{style:Ve(e.indentStyle(n))},[x(` Group breadcrumb shown ONCE per parent group transition so the
2
- user can tell "address.street" + "address.city" are siblings.
3
- The previous-field tracker is computed inline. `),e.parentBreadcrumb(n)!==""?(o(),d("div",We,s(e.parentBreadcrumb(n)),1)):x("v-if",!0),f("div",Ke,[f("span",He,s(n.label),1),n.required?(o(),d("span",De,"*")):x("v-if",!0),g(c,{size:"small",style:{"margin-left":"8px","font-size":"10px"}},{default:v(()=>[U(s(n.type)+s(n.itemsType?`<${n.itemsType}>`:""),1)]),_:2},1024)]),n.description?(o(),d("div",Ye,s(n.description),1)):x("v-if",!0),n.widget==="text"?(o(),R(w,{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(),R(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(),R(k,{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(),R(M,{key:5,checked:!!t.modelValue[n.name],"onUpdate:checked":l=>e.set(n.name,l)},null,8,["checked","onUpdate:checked"])):n.widget==="select"?(o(),R(V,{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(),R(V,{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(),d(I,{key:8},[x(" objectList: render each item as a sub-form panel with remove + add. "),f("div",null,[(o(!0),d(I,null,Y(Array.isArray(t.modelValue[n.name])?t.modelValue[n.name]:[],(l,b)=>(o(),d("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",Ge,[f("span",Qe,"#"+s(b+1),1),g(A,{size:"small",type:"link",danger:"",onClick:m=>e.removeItem(n.name,b)},{default:v(()=>[...a[0]||(a[0]=[U(" 删除 ",-1)])]),_:1},8,["onClick"])]),f("div",Ze,[(o(!0),d(I,null,Y(n.itemFields||[],m=>(o(),d("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(),d("span",$e,"*")):x("v-if",!0),g(c,{size:"small",style:{"margin-left":"6px","font-size":"10px"}},{default:v(()=>[U(s(m.type),1)]),_:2},1024)]),m.widget==="text"?(o(),R(w,{key:0,value:l[m.name]??"",size:"small","onUpdate:value":S=>e.setItem(n.name,b,m.name,S)},null,8,["value","onUpdate:value"])):m.widget==="number"?(o(),R(k,{key:1,value:l[m.name],size:"small",style:{width:"100%"},"onUpdate:value":S=>e.setItem(n.name,b,m.name,S)},null,8,["value","onUpdate:value"])):m.widget==="boolean"?(o(),R(M,{key:2,checked:!!l[m.name],"onUpdate:checked":S=>e.setItem(n.name,b,m.name,S)},null,8,["checked","onUpdate:checked"])):m.widget==="select"?(o(),R(V,{key:3,value:l[m.name]??void 0,options:(m.enum||[]).map(S=>({label:String(S),value:S})),size:"small",style:{width:"100%"},"onUpdate:value":S=>e.setItem(n.name,b,m.name,S)},null,8,["value","options","onUpdate:value"])):(o(),R(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":S=>e.setItem(n.name,b,m.name,S)},null,8,["value","onUpdate:value"])),t.errors[`${n.name}[${b}].${m.name}`]?(o(),d("div",et,s(t.errors[`${n.name}[${b}].${m.name}`]),1)):x("v-if",!0)]))),128))])]))),128)),g(A,{size:"small",type:"dashed",block:"",onClick:l=>e.addItem(n)},{icon:v(()=>[g(e.PlusOutlined)]),default:v(()=>[a[1]||(a[1]=U(" 添加项 ",-1))]),_:1},8,["onClick"])])],2112)):(o(),R(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(),d("div",tt,s(t.errors[n.name]),1)):x("v-if",!0)],4)],64))),128))])):(o(),d("div",Be," 此工具的 inputSchema 不是 type:object — 请用 JSON 模式编辑。 "))}const nt=he(qe,[["render",ot],["__file","/tmp/cc-web-panel-DaKYjg/repo/packages/web-panel/src/components/McpToolForm.vue"]]),rt={__name:"McpTools",setup(r,{expose:a}){a();const{t}=ye(),e=re(),i=ve(),p=O(!1),c=O([]),w=O([]),h=O(""),k=O(""),M=E(()=>{if(!h.value)return w.value;const y=h.value.toLowerCase();return w.value.filter(u=>u.name?.toLowerCase().includes(y)||u.description?.toLowerCase().includes(y))}),V=E(()=>[{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}]),A=O([]),n=O(""),l=O(!1),b=O(!1),m=E(()=>[{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}]),S=E(()=>{if(!n.value)return A.value;const y=n.value.toLowerCase();return A.value.filter(u=>u.uri?.toLowerCase().includes(y)||u.name?.toLowerCase().includes(y)||u.description?.toLowerCase().includes(y))});async function N(){if(!l.value){l.value=!0;try{const y=await i.listResources();if(!y||!Array.isArray(y.servers)){A.value=[];return}const u=[];for(const T of y.servers)if(Array.isArray(T.resources))for(const z of T.resources)u.push({key:`${T.name}.${z.uri}`,uri:z.uri,name:z.name||"",description:z.description||"",mimeType:z.mimeType||null,server:T.name});A.value=u,b.value=!0}catch(y){console.error("listResources failed:",y),A.value=[]}finally{l.value=!1}}}const J=O(!1),_=O(null),L=O(!1),W=O([]),$=O(""),xe=E(()=>_.value?t("mcpTools.read.modalTitle",{server:_.value.server}):t("mcpTools.read.fallbackTitle"));async function be(y){_.value=y,W.value=[],$.value="",J.value=!0,L.value=!0;try{const u=await i.readResource(y.server,y.uri);u&&Array.isArray(u.contents)?W.value=u.contents:W.value=u?[u]:[]}catch(u){$.value=u?.message||String(u)}finally{L.value=!1}}function ke(){J.value=!1}const ee=O(!1),P=O(null),te=O("form"),oe=O({}),G=O({}),ne=O("{}"),Q=O(!1),q=O(null),Z=O(""),we=E(()=>K(P.value?.inputSchema||null).length>0),Te=E(()=>P.value?t("mcpTools.run.modalTitle",{server:P.value.server,tool:P.value.name}):t("mcpTools.run.fallbackTitle")),ze=E(()=>{if(!P.value?.inputSchema)return"";try{return JSON.stringify(P.value.inputSchema,null,2)}catch{return String(P.value.inputSchema)}}),Se=E(()=>{if(q.value===null)return"";try{return JSON.stringify(q.value,null,2)}catch{return String(q.value)}}),H=O("");function Ce(y){P.value=y,ne.value="{}",q.value=null,Z.value="",H.value="",G.value={};const u=K(y?.inputSchema||null);te.value=u.length>0?"form":"json",oe.value=ge(u),ee.value=!0}function Oe(){ee.value=!1}async function Ae(){if(!P.value||Q.value)return;H.value="",G.value={};let y={};if(te.value==="form"){const u=K(P.value.inputSchema||null),T=se(u,oe.value);if(!T.ok){G.value=T.errors;return}y=T.params}else{const u=(ne.value||"").trim();if(u){try{y=JSON.parse(u)}catch(T){H.value=T.message||"invalid JSON";return}if(y===null||typeof y!="object"||Array.isArray(y)){H.value=t("mcpTools.run.paramsMustBeObject");return}}}Q.value=!0,Z.value="",q.value=null;try{const u=await i.callTool(P.value.server,P.value.name,y);q.value=u}catch(u){Z.value=u?.message||String(u)}finally{Q.value=!1}}async function ce(){const y=await i.listTools();if(!y||!Array.isArray(y.servers))return!1;c.value=y.servers.map(T=>({key:T.name,name:T.name,command:"",args:[],description:T.state?`state: ${T.state}`:"",error:T.error||null}));const u=[];for(const T of y.servers)if(Array.isArray(T.tools))for(const z of T.tools)u.push({key:`${T.name}.${z.name}`,name:z.name,description:z.description||"",server:T.name,inputSchema:z.inputSchema||null});return w.value=u,!0}async function de(){p.value=!0;try{try{if(await ce()){k.value="topic";return}}catch(T){const z=T?.message||"";z.includes("mcp_unavailable")||z.includes("no_handler")||z.includes("UNKNOWN_TYPE")||console.error("MCP topic load failed:",T)}const[y,u]=await Promise.all([e.execute("mcp servers",15e3).catch(()=>({output:""})),e.execute("mcp tools",15e3).catch(()=>({output:""}))]);c.value=ue(y.output),w.value=me(u.output),k.value="cli"}catch(y){console.error("MCP load failed:",y)}finally{p.value=!1,k.value==="topic"?N():(A.value=[],b.value=!1)}}function ue(y){const u=[],T=y.split(`
5
- `);let z=null;for(const D of T){const C=D.trim();if(!C||C.startsWith("─")||C.startsWith("MCP"))continue;const F=C.match(/^[●•]?\s*([a-z][a-z0-9-_]+)\s*$/i)||C.match(/^([a-z][a-z0-9-_]+)\s*[::]/);F?(z&&u.push(z),z={key:F[1],name:F[1],command:"",args:[],description:""}):z&&(C.startsWith("command:")||C.startsWith("Command:")?z.command=C.replace(/^command:\s*/i,"").trim():C.startsWith("args:")||C.startsWith("Args:")?z.args=C.replace(/^args:\s*/i,"").split(",").map(Re=>Re.trim()):z.description||(z.description=C.slice(0,80)))}return z&&u.push(z),!u.length&&y.trim()&&!y.includes("No MCP")&&y.split(`
6
- `).filter(C=>C.trim()&&!C.includes("─")).slice(0,10).forEach((C,F)=>{u.push({key:F,name:C.trim(),command:"",args:[],description:""})}),u}function me(y){const u=[],T=y.split(`
7
- `);let z="unknown";for(const D of T){const C=D.trim();if(!C||C.startsWith("─"))continue;if(C.match(/^\[/)||C.match(/^Server:/i)){z=C.replace(/[\[\]]/g,"").replace(/^Server:\s*/i,"").trim();continue}const F=C.match(/^[●•]?\s*([a-z][a-z0-9_-]+)\s*[-–]\s*(.+)/i)||C.match(/^[●•]?\s*([a-z][a-z0-9_-]+)$/);F&&u.push({key:u.length,name:F[1],description:F[2]||"",server:z})}return u}pe(de);const fe={t,ws:e,mcp:i,loading:p,servers:c,tools:w,toolSearch:h,dataSource:k,filteredTools:M,toolColumns:V,resources:A,resourceSearch:n,resourcesLoading:l,resourcesLoaded:b,resourceColumns:m,filteredResources:S,loadResources:N,readModalOpen:J,selectedResource:_,reading:L,readContents:W,readError:$,readModalTitle:xe,openReadModal:be,closeReadModal:ke,runModalOpen:ee,selectedTool:P,paramMode:te,formValues:oe,formErrors:G,paramsText:ne,running:Q,runResult:q,runError:Z,hasFormSchema:we,runModalTitle:Te,formattedSchema:ze,formattedResult:Se,paramsParseError:H,openRunModal:Ce,closeRunModal:Oe,runSelectedTool:Ae,loadFromTopic:ce,load:de,parseServers:ue,parseTools:me,ref:O,computed:E,onMounted:pe,get useI18n(){return ye},get ReloadOutlined(){return Ie},get CloudServerOutlined(){return Ee},get ToolOutlined(){return Pe},get CheckCircleOutlined(){return Le},get PlayCircleOutlined(){return Ue},get EyeOutlined(){return Me},get useWsStore(){return re},get useMcp(){return ve},McpToolForm:nt,get extractFields(){return K},get defaultValues(){return ge},get validateValues(){return se}};return Object.defineProperty(fe,"__isScriptSetup",{enumerable:!1,value:!0}),fe}},at={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},lt={class:"page-title"},st={class:"page-sub"},it={key:0,style:{"text-align":"center",padding:"30px"}},ct={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},dt={style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px"}},ut={key:2,class:"servers-grid"},mt={style:{display:"flex","align-items":"center",gap:"10px","margin-bottom":"6px"}},ft={style:{color:"#e0e0e0","font-weight":"500","font-family":"monospace"}},pt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},yt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},vt={key:0,style:{"text-align":"center",padding:"30px"}},_t={key:0,style:{color:"#91caff","font-family":"monospace","font-size":"12px"}},gt={key:1,style:{color:"var(--text-muted)","font-size":"11px"}},ht={style:{padding:"30px",color:"var(--text-muted)"}},xt={key:0,style:{"text-align":"center",padding:"30px"}},bt={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},kt={key:0,style:{color:"#87d068","font-family":"monospace","font-size":"11px","word-break":"break-all"}},wt={key:1,style:{color:"var(--text-muted)","font-size":"10px"}},Tt={style:{padding:"30px",color:"var(--text-muted)"}},zt={key:0,style:{display:"flex","flex-direction":"column",gap:"12px"}},St={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ct={style:{"font-family":"monospace","font-size":"13px"}},Ot={style:{color:"#91caff"}},At={key:0},Rt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Vt={style:{"font-size":"12px"}},jt={key:1},Mt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ut={style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","max-height":"140px",overflow:"auto",margin:"0"}},Lt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"4px"}},Pt={style:{color:"var(--text-muted)","font-size":"11px"}},Et={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},It={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px"}},Ft={style:{color:"#ff4d4f","font-size":"11px","font-weight":"500","margin-bottom":"4px"}},Nt={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},qt={key:3},Bt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Jt={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"}},Wt={key:0,style:{display:"flex","flex-direction":"column",gap:"12px"}},Kt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Ht={style:{"font-family":"monospace","font-size":"12px","word-break":"break-all"}},Dt={style:{color:"#87d068"}},Yt={key:0},Gt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Qt={style:{"font-size":"12px"}},Zt={key:1,style:{"text-align":"center",padding:"20px"}},Xt={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px"}},$t={style:{color:"#ff4d4f","font-size":"11px","font-weight":"500","margin-bottom":"4px"}},eo={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},to={key:3},oo={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},no={style:{display:"flex",gap:"8px","align-items":"center","margin-bottom":"4px"}},ro={key:1,style:{color:"var(--text-muted)","font-size":"10px","font-family":"monospace"}},ao={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"}},lo={key:1,style:{"font-size":"11px",color:"var(--text-muted)","font-style":"italic"}},so={key:2,style:{"font-size":"11px",color:"var(--text-muted)","font-style":"italic"}};function io(r,a,t,e,i,p){const c=j("a-button"),w=j("a-statistic"),h=j("a-card"),k=j("a-col"),M=j("a-row"),V=j("a-spin"),A=j("a-badge"),n=j("a-input-search"),l=j("a-tag"),b=j("a-table"),m=j("a-radio-button"),S=j("a-radio-group"),N=j("a-textarea"),J=j("a-modal");return o(),d("div",null,[f("div",at,[f("div",null,[f("h2",lt,s(e.t("mcpTools.title")),1),f("p",st,s(e.t("mcpTools.subtitle")),1)]),g(c,{type:"primary",ghost:"",loading:e.loading,onClick:e.load},{icon:v(()=>[g(e.ReloadOutlined)]),default:v(()=>[U(" "+s(e.t("mcpTools.refresh")),1)]),_:1},8,["loading"])]),x(" Stats Row "),g(M,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:v(()=>[g(k,{xs:24,sm:8},{default:v(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:v(()=>[g(w,{title:e.t("mcpTools.stats.servers"),value:e.servers.length,"value-style":"color: #1677ff; font-size: 20px;"},{prefix:v(()=>[g(e.CloudServerOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),g(k,{xs:24,sm:8},{default:v(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:v(()=>[g(w,{title:e.t("mcpTools.stats.tools"),value:e.tools.length,"value-style":"color: #52c41a; font-size: 20px;"},{prefix:v(()=>[g(e.ToolOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),g(k,{xs:24,sm:8},{default:v(()=>[g(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:v(()=>[g(w,{title:e.t("mcpTools.stats.running"),value:e.t("mcpTools.stats.ready"),"value-style":"color: #52c41a; font-size: 20px;"},{prefix:v(()=>[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:v(()=>[e.loading?(o(),d("div",it,[g(V)])):e.servers.length?(o(),d("div",ut,[(o(!0),d(I,null,Y(e.servers,_=>(o(),R(h,{key:_.name,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:v(()=>[f("div",mt,[g(e.CloudServerOutlined,{style:{color:"#1677ff"}}),f("span",ft,s(_.name),1),g(A,{status:"success"})]),_.command?(o(),d("div",pt,s(_.command)+" "+s(_.args?.join(" ")),1)):x("v-if",!0),_.description?(o(),d("div",yt,s(_.description),1)):x("v-if",!0)]),_:2},1024))),128))])):(o(),d("div",ct,[U(s(e.t("mcpTools.servers.emptyHintPrefix"))+" ",1),f("code",dt,s(e.t("mcpTools.servers.emptyHintCommand")),1),U(" "+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:v(()=>[g(n,{value:e.toolSearch,"onUpdate:value":a[0]||(a[0]=_=>e.toolSearch=_),placeholder:e.t("mcpTools.tools.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value","placeholder"])]),default:v(()=>[e.loading?(o(),d("div",vt,[g(V)])):(o(),R(b,{key:1,columns:e.toolColumns,"data-source":e.filteredTools,pagination:{pageSize:15},size:"small"},{bodyCell:v(({column:_,record:L})=>[_.key==="name"?(o(),d("span",_t,s(L.name),1)):x("v-if",!0),_.key==="server"?(o(),R(l,{key:1,color:"blue",style:{"font-size":"10px"}},{default:v(()=>[U(s(L.server),1)]),_:2},1024)):x("v-if",!0),_.key==="action"?(o(),d(I,{key:2},[e.dataSource==="topic"?(o(),R(c,{key:0,size:"small",type:"link",onClick:W=>e.openRunModal(L)},{icon:v(()=>[g(e.PlayCircleOutlined)]),default:v(()=>[U(" "+s(e.t("mcpTools.tools.runAction")),1)]),_:1},8,["onClick"])):(o(),d("span",gt,s(e.t("mcpTools.tools.desktopOnly")),1))],64)):x("v-if",!0)]),emptyText:v(()=>[f("div",ht,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(),R(h,{key:0,title:e.t("mcpTools.resources.title"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:v(()=>[g(n,{value:e.resourceSearch,"onUpdate:value":a[1]||(a[1]=_=>e.resourceSearch=_),placeholder:e.t("mcpTools.resources.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value","placeholder"])]),default:v(()=>[e.resourcesLoading?(o(),d("div",xt,[g(V)])):e.resources.length?(o(),R(b,{key:2,columns:e.resourceColumns,"data-source":e.filteredResources,pagination:{pageSize:15},size:"small"},{bodyCell:v(({column:_,record:L})=>[_.key==="uri"?(o(),d("span",kt,s(L.uri),1)):x("v-if",!0),_.key==="server"?(o(),R(l,{key:1,color:"blue",style:{"font-size":"10px"}},{default:v(()=>[U(s(L.server),1)]),_:2},1024)):x("v-if",!0),_.key==="mimeType"?(o(),d(I,{key:2},[L.mimeType?(o(),R(l,{key:0,style:{"font-size":"10px"}},{default:v(()=>[U(s(L.mimeType),1)]),_:2},1024)):(o(),d("span",wt,"—"))],64)):x("v-if",!0),_.key==="action"?(o(),R(c,{key:3,size:"small",type:"link",onClick:W=>e.openReadModal(L)},{icon:v(()=>[g(e.EyeOutlined)]),default:v(()=>[U(" "+s(e.t("mcpTools.resources.readAction")),1)]),_:1},8,["onClick"])):x("v-if",!0)]),emptyText:v(()=>[f("div",Tt,s(e.t("mcpTools.resources.emptyTable")),1)]),_:1},8,["columns","data-source"])):(o(),d("div",bt,s(e.t("mcpTools.resources.emptyHint")),1))]),_:1},8,["title"])):x("v-if",!0),g(J,{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:v(()=>[e.selectedTool?(o(),d("div",zt,[f("div",null,[f("div",St,s(e.t("mcpTools.run.serverLabel")),1),f("div",Ct,[g(l,{color:"blue"},{default:v(()=>[U(s(e.selectedTool.server),1)]),_:1}),f("span",Ot,s(e.selectedTool.name),1)])]),e.selectedTool.description?(o(),d("div",At,[f("div",Rt,s(e.t("mcpTools.run.descriptionLabel")),1),f("div",Vt,s(e.selectedTool.description),1)])):x("v-if",!0),e.selectedTool.inputSchema?(o(),d("div",jt,[f("div",Mt,s(e.t("mcpTools.run.schemaLabel")),1),f("pre",Ut,s(e.formattedSchema),1)])):x("v-if",!0),f("div",null,[f("div",Lt,[f("span",Pt,s(e.t("mcpTools.run.paramsLabel")),1),g(S,{value:e.paramMode,"onUpdate:value":a[2]||(a[2]=_=>e.paramMode=_),size:"small","button-style":"solid"},{default:v(()=>[g(m,{value:"form",disabled:!e.hasFormSchema},{default:v(()=>[U(s(e.t("mcpTools.run.modeForm")),1)]),_:1},8,["disabled"]),g(m,{value:"json"},{default:v(()=>[U(s(e.t("mcpTools.run.modeJson")),1)]),_:1})]),_:1},8,["value"])]),e.paramMode==="form"?(o(),R(e.McpToolForm,{key:0,modelValue:e.formValues,"onUpdate:modelValue":a[3]||(a[3]=_=>e.formValues=_),schema:e.selectedTool.inputSchema,errors:e.formErrors},null,8,["modelValue","schema","errors"])):(o(),d(I,{key:1},[g(N,{value:e.paramsText,"onUpdate:value":a[4]||(a[4]=_=>e.paramsText=_),rows:6,placeholder:"{}",style:{"font-family":"monospace","font-size":"12px"}},null,8,["value"]),e.paramsParseError?(o(),d("div",Et,s(e.t("mcpTools.run.jsonParseFailed",{err:e.paramsParseError})),1)):x("v-if",!0)],64))]),e.runError?(o(),d("div",It,[f("div",Ft,s(e.t("mcpTools.run.errorTitle")),1),f("pre",Nt,s(e.runError),1)])):x("v-if",!0),e.runResult!==null?(o(),d("div",qt,[f("div",Bt,s(e.t("mcpTools.run.resultLabel")),1),f("pre",Jt,s(e.formattedResult),1)])):x("v-if",!0)])):x("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),g(J,{open:e.readModalOpen,title:e.readModalTitle,width:720,footer:null,onCancel:e.closeReadModal},{default:v(()=>[e.selectedResource?(o(),d("div",Wt,[f("div",null,[f("div",Kt,s(e.t("mcpTools.read.serverLabel")),1),f("div",Ht,[g(l,{color:"blue"},{default:v(()=>[U(s(e.selectedResource.server),1)]),_:1}),f("span",Dt,s(e.selectedResource.uri),1)])]),e.selectedResource.description?(o(),d("div",Yt,[f("div",Gt,s(e.t("mcpTools.read.descriptionLabel")),1),f("div",Qt,s(e.selectedResource.description),1)])):x("v-if",!0),e.reading?(o(),d("div",Zt,[g(V,{tip:e.t("mcpTools.read.spinnerTip")},null,8,["tip"])])):x("v-if",!0),e.readError?(o(),d("div",Xt,[f("div",$t,s(e.t("mcpTools.read.errorTitle")),1),f("pre",eo,s(e.readError),1)])):x("v-if",!0),e.readContents.length?(o(),d("div",to,[f("div",oo,s(e.t("mcpTools.read.contentsLabel",{count:e.readContents.length})),1),(o(!0),d(I,null,Y(e.readContents,(_,L)=>(o(),d("div",{key:L,style:{"margin-bottom":"12px"}},[f("div",no,[_.mimeType?(o(),R(l,{key:0,size:"small",style:{"font-size":"10px"}},{default:v(()=>[U(s(_.mimeType),1)]),_:2},1024)):x("v-if",!0),_.uri&&_.uri!==e.selectedResource.uri?(o(),d("span",ro,s(_.uri),1)):x("v-if",!0)]),_.text?(o(),d("pre",ao,s(_.text),1)):_.blob?(o(),d("div",lo,s(e.t("mcpTools.read.binaryNote",{count:_.blob.length})),1)):(o(),d("div",so,s(e.t("mcpTools.read.emptyContent")),1))]))),128))])):x("v-if",!0)])):x("v-if",!0)]),_:1},8,["open","title"])])}const fo=he(rt,[["render",io],["__scopeId","data-v-0f358f52"],["__file","/tmp/cc-web-panel-DaKYjg/repo/packages/web-panel/src/views/McpTools.vue"]]);export{fo as default};
@@ -1 +0,0 @@
1
- import{I as u,J,U as b,R as c,c as a,K as i,a as R,r as k,o as K,b as E,P as O,Q as p,S as z,V as C}from"./vendor-Bn1JzzAn.js";import{t as M,_ as Q,b as F,u as T,d as S}from"./index-DyLUarhZ.js";import{i as Y,R as q}from"./icons-DG5UD-6K.js";const v=Object.freeze({defaultEngine:"webspeech",webSpeech:{lang:"zh-CN"},whisperAPI:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"whisper-1",language:"zh",timeout:6e4},whisperLocal:{serverUrl:"http://localhost:8002",modelSize:"base",device:"auto",timeout:12e4}}),X=["webspeech","whisper-api","whisper-local"];function D(g,t){if(typeof g=="number"&&Number.isFinite(g))return g;const s=parseFloat(g);return Number.isFinite(s)?s:t}function Z(g){return JSON.parse(JSON.stringify(g))}function B(g){const t=Z(v);if(!g)return t;const s=g.trim();if(!s||/key not found/i.test(s))return t;const e=M(s);if(!e||typeof e!="object"||Array.isArray(e))return t;if(typeof e.defaultEngine=="string"&&X.includes(e.defaultEngine)&&(t.defaultEngine=e.defaultEngine),e.webSpeech&&typeof e.webSpeech=="object"&&typeof e.webSpeech.lang=="string"&&e.webSpeech.lang&&(t.webSpeech.lang=e.webSpeech.lang),e.whisperAPI&&typeof e.whisperAPI=="object"){const l=e.whisperAPI;typeof l.apiKey=="string"&&(t.whisperAPI.apiKey=l.apiKey),typeof l.baseURL=="string"&&l.baseURL&&(t.whisperAPI.baseURL=l.baseURL),typeof l.model=="string"&&l.model&&(t.whisperAPI.model=l.model),typeof l.language=="string"&&l.language&&(t.whisperAPI.language=l.language),l.timeout!==void 0&&(t.whisperAPI.timeout=D(l.timeout,v.whisperAPI.timeout))}if(e.whisperLocal&&typeof e.whisperLocal=="object"){const l=e.whisperLocal;typeof l.serverUrl=="string"&&l.serverUrl&&(t.whisperLocal.serverUrl=l.serverUrl),typeof l.modelSize=="string"&&l.modelSize&&(t.whisperLocal.modelSize=l.modelSize),typeof l.device=="string"&&l.device&&(t.whisperLocal.device=l.device),l.timeout!==void 0&&(t.whisperLocal.timeout=D(l.timeout,v.whisperLocal.timeout))}return t}function j(g,t){const s={};g.defaultEngine!==t.defaultEngine&&(s.defaultEngine=t.defaultEngine);for(const e of["webSpeech","whisperAPI","whisperLocal"]){const l=g[e]||{},w=t[e]||{};for(const o of Object.keys(v[e]))l[o]!==w[o]&&(s[`${e}.${o}`]=w[o])}return s}const $={__name:"SpeechSettings",setup(g,{expose:t}){t();const{t:s}=F(),e=T(),l=k(!1),w=k(!1),o=R(JSON.parse(JSON.stringify(v))),h=k(JSON.parse(JSON.stringify(v))),y=E(()=>[{value:"webspeech",label:s("speechSettings.engineOptions.webspeech")},{value:"whisper-api",label:s("speechSettings.engineOptions.whisper-api")},{value:"whisper-local",label:s("speechSettings.engineOptions.whisper-local")}]),f=E(()=>{const d=`speechSettings.engineHint.${o.defaultEngine}`,n=s(d);return n===d?"":n}),_=E(()=>Object.keys(j(h.value,o)).length>0);function m(d){o.defaultEngine=d.defaultEngine,Object.assign(o.webSpeech,d.webSpeech),Object.assign(o.whisperAPI,d.whisperAPI),Object.assign(o.whisperLocal,d.whisperLocal),h.value=JSON.parse(JSON.stringify(d))}async function r(){l.value=!0;try{const{output:d}=await e.execute("config get speech",1e4);m(B(d))}catch(d){/key not found/i.test(d.message)?m(JSON.parse(JSON.stringify(v))):S.error(s("speechSettings.messages.loadFailed",{err:d.message}))}finally{l.value=!1}}function N(){m(h.value)}async function L(){const d=j(h.value,o),n=Object.keys(d);if(n.length===0){S.info(s("speechSettings.messages.noChanges"));return}w.value=!0;let P=0,I=0;for(const A of n){const H=d[A],V=String(H).replace(/"/g,'\\"'),W=`config set speech.${A} "${V}"`;try{const{output:U,exitCode:G}=await e.execute(W,1e4);G!==0||/error|failed|失败/i.test(U)?(I++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.slice(0,80)}))):P++}catch(U){I++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.message}))}}w.value=!1,I===0?(S.success(s("speechSettings.messages.saveOk",{count:P})),h.value=JSON.parse(JSON.stringify(o))):P>0&&(S.warning(s("speechSettings.messages.savePartial",{ok:P,fail:I})),await r())}K(()=>{r()});const x={t:s,ws:e,loading:l,saving:w,form:o,baseline:h,engineOptions:y,engineHint:f,isDirty:_,applyConfig:m,loadConfig:r,resetForm:N,saveConfig:L,reactive:R,ref:k,computed:E,onMounted:K,get useI18n(){return F},get ReloadOutlined(){return q},get SoundOutlined(){return Y},get message(){return S},get useWsStore(){return T},get parseSpeechConfig(){return B},get diffSpeechConfig(){return j},get SPEECH_DEFAULTS(){return v}};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},te={class:"page-title"},ae={class:"page-sub"},ie={style:{color:"var(--text-primary)"}},le={style:{color:"var(--text-muted)","font-size":"11px"}},ne={style:{color:"var(--text-primary)"}},se={style:{color:"var(--text-primary)"}},oe={style:{color:"var(--text-primary)"}},re={style:{display:"flex",gap:"12px","align-items":"center"}},de={key:0,style:{color:"#faad14","font-size":"12px"}};function pe(g,t,s,e,l,w){const o=u("a-button"),h=u("a-alert"),y=u("a-select"),f=u("a-form-item"),_=u("a-form"),m=u("a-card"),r=u("a-select-option"),N=u("a-input-password"),L=u("a-input"),x=u("a-input-number"),d=u("a-spin");return O(),J("div",null,[b("div",ee,[b("div",null,[b("h2",te,c(e.t("speechSettings.title")),1),b("p",ae,c(e.t("speechSettings.subtitle")),1)]),a(o,{loading:e.loading,onClick:e.loadConfig},{icon:i(()=>[a(e.ReloadOutlined)]),default:i(()=>[p(" "+c(e.t("speechSettings.refresh")),1)]),_:1},8,["loading"])]),a(h,{message:e.t("speechSettings.alert.message"),description:e.t("speechSettings.alert.description"),type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),a(d,{spinning:e.loading},{default:i(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",ie,[a(e.SoundOutlined,{style:{"margin-right":"8px"}}),p(c(e.t("speechSettings.engineCardTitle")),1)])]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.engineLabel")},{extra:i(()=>[b("span",le,c(e.engineHint),1)]),default:i(()=>[a(y,{value:e.form.defaultEngine,"onUpdate:value":t[0]||(t[0]=n=>e.form.defaultEngine=n),style:{width:"320px"},disabled:e.saving,options:e.engineOptions},null,8,["value","disabled","options"])]),_:1},8,["label"])]),_:1})]),_:1}),e.form.defaultEngine==="webspeech"?(O(),z(m,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",ne,c(e.t("speechSettings.webSpeech.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.webSpeech.langLabel")},{default:i(()=>[a(y,{value:e.form.webSpeech.lang,"onUpdate:value":t[1]||(t[1]=n=>e.form.webSpeech.lang=n),style:{width:"240px"},disabled:e.saving},{default:i(()=>[a(r,{value:"zh-CN"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.zh-CN")),1)]),_:1}),a(r,{value:"zh-TW"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.zh-TW")),1)]),_:1}),a(r,{value:"en-US"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.en-US")),1)]),_:1}),a(r,{value:"en-GB"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.en-GB")),1)]),_:1}),a(r,{value:"ja-JP"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.ja-JP")),1)]),_:1}),a(r,{value:"ko-KR"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.ko-KR")),1)]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),e.form.defaultEngine==="whisper-api"?(O(),z(m,{key:1,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",se,c(e.t("speechSettings.whisperAPI.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.whisperAPI.apiKeyLabel")},{default:i(()=>[a(N,{value:e.form.whisperAPI.apiKey,"onUpdate:value":t[2]||(t[2]=n=>e.form.whisperAPI.apiKey=n),placeholder:"sk-...",disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.baseUrlLabel")},{default:i(()=>[a(L,{value:e.form.whisperAPI.baseURL,"onUpdate:value":t[3]||(t[3]=n=>e.form.whisperAPI.baseURL=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.modelLabel")},{default:i(()=>[a(L,{value:e.form.whisperAPI.model,"onUpdate:value":t[4]||(t[4]=n=>e.form.whisperAPI.model=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.languageLabel")},{default:i(()=>[a(L,{value:e.form.whisperAPI.language,"onUpdate:value":t[5]||(t[5]=n=>e.form.whisperAPI.language=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.timeoutLabel")},{default:i(()=>[a(x,{value:e.form.whisperAPI.timeout,"onUpdate:value":t[6]||(t[6]=n=>e.form.whisperAPI.timeout=n),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),e.form.defaultEngine==="whisper-local"?(O(),z(m,{key:2,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",oe,c(e.t("speechSettings.whisperLocal.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.whisperLocal.serverUrlLabel")},{default:i(()=>[a(L,{value:e.form.whisperLocal.serverUrl,"onUpdate:value":t[7]||(t[7]=n=>e.form.whisperLocal.serverUrl=n),placeholder:"http://localhost:8002",disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.modelSizeLabel")},{default:i(()=>[a(y,{value:e.form.whisperLocal.modelSize,"onUpdate:value":t[8]||(t[8]=n=>e.form.whisperLocal.modelSize=n),style:{width:"180px"},disabled:e.saving},{default:i(()=>[a(r,{value:"tiny"},{default:i(()=>[...t[11]||(t[11]=[p("tiny",-1)])]),_:1}),a(r,{value:"base"},{default:i(()=>[...t[12]||(t[12]=[p("base",-1)])]),_:1}),a(r,{value:"small"},{default:i(()=>[...t[13]||(t[13]=[p("small",-1)])]),_:1}),a(r,{value:"medium"},{default:i(()=>[...t[14]||(t[14]=[p("medium",-1)])]),_:1}),a(r,{value:"large"},{default:i(()=>[...t[15]||(t[15]=[p("large",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.deviceLabel")},{default:i(()=>[a(y,{value:e.form.whisperLocal.device,"onUpdate:value":t[9]||(t[9]=n=>e.form.whisperLocal.device=n),style:{width:"180px"},disabled:e.saving},{default:i(()=>[a(r,{value:"auto"},{default:i(()=>[...t[16]||(t[16]=[p("auto",-1)])]),_:1}),a(r,{value:"cpu"},{default:i(()=>[...t[17]||(t[17]=[p("cpu",-1)])]),_:1}),a(r,{value:"cuda"},{default:i(()=>[...t[18]||(t[18]=[p("cuda",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.timeoutLabel")},{default:i(()=>[a(x,{value:e.form.whisperLocal.timeout,"onUpdate:value":t[10]||(t[10]=n=>e.form.whisperLocal.timeout=n),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),b("div",re,[a(o,{onClick:e.resetForm,disabled:e.saving||e.loading},{default:i(()=>[p(c(e.t("speechSettings.buttons.reset")),1)]),_:1},8,["disabled"]),a(o,{type:"primary",loading:e.saving,disabled:!e.isDirty,onClick:e.saveConfig},{default:i(()=>[p(c(e.t("speechSettings.buttons.save")),1)]),_:1},8,["loading","disabled"]),e.isDirty?(O(),J("span",de,c(e.t("speechSettings.dirtyHint")),1)):C("v-if",!0)])]),_:1},8,["spinning"])])}const ue=Q($,[["render",pe],["__scopeId","data-v-2b18ccaa"],["__file","/tmp/cc-web-panel-DaKYjg/repo/packages/web-panel/src/views/SpeechSettings.vue"]]);export{ue as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-DyLUarhZ.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-g2Ki6g_1.js";import{a0 as t}from"./index-DyLUarhZ.js";import"./vendor-Bn1JzzAn.js";import"./index-jyNgp5FI.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-BYahQILD.js";import{a0 as t}from"./index-DyLUarhZ.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-DCc4zcDD.js";import"./useFlexGapSupport-xH89-wjh.js";import"./styleChecker-1ktXOsL_.js";import"./index-jyNgp5FI.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};