chainlesschain 0.165.6 → 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 (251) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-vfoDb6HZ.js → AIOps-DxwjrnEA.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-Cm5f7p93.js → ActionButton-JdbYowzn.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-yRuvgWxa.js → Analytics-C06GCahv.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-BROsC4h1.js → AppLayout-BUVEEyi1.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-CimHApb1.js → Artifacts-D_ORzkJd.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DI8kr8zI.js → Audit-8o_Y5ejG.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-DSLzKy-n.js → BackgroundAgents-DrkHd5VU.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-DkH_n2r1.js → Backup-CKBZCX11.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-CKSrUoRA.js → BaseInput-C8HkI399.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-ClwfMXUS.js → Chat-zb2H2Wux.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CjMaqfL7.js → ChatBubbleRenderer-BDcNpU_F.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-BYTehcQG.js → Checkbox-MwPtQmNz.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-B8AMcp6J.js → Codegen-3p5QCkFK.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-BNSogPo3.js → Col-BPLlhn52.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-JxPvGb8O.js → Community-C-3dBNOM.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-DF7bFAgE.js → Compact-BUcy-F_b.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-Bvhqnwrq.js → Compliance-CI8NxT8m.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-BDS0CJvM.js → Cowork-DaDEBS-Q.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-DqvRfxoQ.js → Cron-BSv9HXu5.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CDcIvnqS.js → Crosschain-yuiKlJmv.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-D7jaUxU3.js → DID-D6LfldB0.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-B5A18wEV.js → Dashboard-CBhLqG61.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-_6IVkGag.js → Dropdown-BG8pIl3O.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-C9PeiKCG.js → EmailListRenderer-CY92VIE6.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DXjuEHrX.js → FamilyGuardDashboard-1Q_ehauM.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-B4IAR9zv.js → Federation-D3XirJIU.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-CxQeSNx1.js → FormItemContext-DfI9UuGZ.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-B8GS-Y3N.js → GenericCardRenderer-IeCZk2m7.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BS8SouUX.js → Git-DzK4IJAZ.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-Dq9aYb5Q.js → Governance-BHf5KfmQ.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-BrCEe9AJ.js → Inference-BmaxSALS.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-DybOpiY2.js → KnowledgeGraph-BgePFLA9.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-DBpzbRfx.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-Cc7CCSCu.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-KCqlp9ol.js → Memory-B026G2GA.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-Bys84ySN.js → MobileBridge-CM2Eeg6I.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-B-6qU-je.js → MobileProjects-B79Ob3hy.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-BgY-fvCq.js → Mtc-CxevSZuV.js} +4 -4
  43. package/src/assets/web-panel/assets/{MtcAudit-B8pCmqQJ.js → MtcAudit-X396cPEX.js} +4 -4
  44. package/src/assets/web-panel/assets/{Multisig-BbOmYutA.js → Multisig-HWIB_aZ1.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-BocLQz_M.js → NLProgramming-gnYD1Xwy.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-CSwbxEop.js → Notes-Dn2Gf_J1.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-CqFNSYG3.js → NotificationSettings-BRKBQ5rq.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-C6gMfAk7.js → OrderTableRenderer-Dy___Cgo.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-QrDXVdMJ.js → Organization-cqfccxnt.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-Cxntotjt.js → Overflow-CSX4FHN3.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-CIdBOwNq.js → P2P-Bwa4aghp.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-CT5aP8rD.js → PdhVaultBrowser-Dhszyjig.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-DH7OM8XU.js → Permissions-CXzTyk6e.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-CnJqbWce.js → PersonalDataHub-CFCAAJbb.js} +4 -4
  55. package/src/assets/web-panel/assets/{Pipeline-5C3HG1kH.js → Pipeline-BPJbx6xt.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-B4yIp7xK.js → Privacy-BbiXvEHz.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-BMvt-2M0.js → ProjectInit-B-s7-wSD.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-CvSTEMRG.js → ProjectSettings-Dyug206y.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-BKBJxEek.js → Projects-BtAI5Fwo.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-BdwUqFWN.js → Providers-JpIPmz6N.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-DtnCKlTm.js → QrScannerModal-CZdoN64A.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-sTbgwyNr.js → QuickAsk-BwvnoRIT.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-Bzr14gSb.js → Recommend-ASMlMQrD.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-C_TF5IaJ.js → RemoteSession-BiJzKFKi.js} +3 -3
  65. package/src/assets/web-panel/assets/{Reputation-GCAM4H2K.js → Reputation-C80TWLIO.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-Dir0r6OQ.js → Row-C1VNmjmX.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-CpGnlecX.js → RssFeed-T2MyGUlG.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DMMamC6u.js → Search-DXM6O83L.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-yqay5yG-.js → Security-nv69kU7W.js} +3 -3
  70. package/src/assets/web-panel/assets/{Services-C5i2wh9G.js → Services-AyHWe7Qj.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-vUqk35yj.js → Skeleton-D6PWLxFI.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-DzcSkhot.js → Skills-BqVeOmNQ.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-CB6qbYNr.js → Sla-BegIPl9M.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-BHUI7cox.js → SpeechSettings-CKJn3xk-.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-D-RrsxTJ.js → SyncSettings-Th4cnAMl.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-DFxdOJiq.js → Tasks-BuKfBroh.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-SKAob_Aq.js → Templates-CMuWN8Ac.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-BPfsfHQ-.js → Tenant-C4je8E8Q.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-8iw7FpUf.js → Terminal-agJESOcO.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-C4Gjj5Su.js → TimelineRenderer-D2qDuVZ_.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-COYhN18e.js → Tokens-Cvmn99rH.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-B-JzXcf6.js → Trigger-D_QYIHH8.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-BJ5bg0nI.js → Trust-BmzvQLnX.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-BG_ByRMf.js → UkeySign-D_LopHwH.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-B3kOnSiU.js → VideoEditing-DoWl3PhQ.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-CcoGFnK7.js → Wallet-5NYcAkxe.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-DdT8vRC_.js → WebAuthn-B-_Q3ewp.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-CZu3M9N8.js → WorkflowEditor-CHET-gi2.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-DxJt3Qba.js → chat-C6nvb-n6.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-DdYfwJaB.js → colors-CTDE9LTX.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-BG3SUzwj.js → compact-item-KnemdF8D.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-By51z2-1.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-B0apZ3KJ.js → hasIn-CFNTaby8.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-ZxtP8jG7.js → index-65HO56Bv.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-Da_WBdLX.js → index-B8RtbSkV.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BBPf3TpM.js → index-BHqSqnW7.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BP94CrBV.js → index-BTetEUWd.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-p1_8SbI1.js → index-BXWg1crv.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BWF8_mkx.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-SQqOlR3d.js → index-BuizJo2E.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CpjZhgNd.js → index-BwZM1rod.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CzmQElZy.js → index-C96N9xeL.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-bP_VlDb4.js → index-CHfUdnJH.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-ZFbps9po.js → index-CKvBF3Ov.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DaIz0NAW.js → index-CSD9_I2_.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BewKYrX9.js → index-Cc7dbl_p.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CNIxXMmN.js → index-CcF0D7UZ.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Q2SCX-MI.js → index-Ceu92a8D.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DE76D-kA.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-BkvcEo4p.js → index-CquKnw5r.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Cp6e-hGw.js → index-CyEtHvEE.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BLIbGOLX.js → index-DF-fcTvQ.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DCn8IcxV.js → index-DF1Y0Vuw.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Bissefox.js → index-DJyPeBBk.js} +3 -3
  118. package/src/assets/web-panel/assets/{index-BZ_0qm4g.js → index-DP-PbO11.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-kf57LJ93.js → index-DZgCRMxk.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BYINoRLK.js → index-DfJzS3Qa.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-3jWkIu5j.js → index-DqPpJkte.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B5rLiEo0.js → index-DzReoLyh.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CW93tZDv.js → index-JGTiDeOW.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-C1C9i79A.js → index-NUR0If7O.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-CAhHirVH.js → index-NtAcnJYW.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-RD6O-0C6.js → index-OmuhFYKE.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-oxRrmFO9.js → index-Wlc7o_C8.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-B3rWuPMW.js → index-bxTPfdri.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BIrJfqO4.js → index-k6uorYmf.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BfWYsB9t.js → index-ox6mIwE2.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Bos5_aMV.js → index-rVDD7AAR.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CWEuZWCK.js → index-u0h6QqVV.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Dz49VOyQ.js → index-v-mtxmWH.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-BWJktcg8.js → initDefaultProps-qEt8dI-t.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BEXBzUFV.js → motion-DetKPWy-.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-BUKwn2sx.js → move-BeNYeDV2.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-FTI7btqQ.js → mtc-parser-C0q0MK_T.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-CsLtSPH3.js → omit-DLKkrKpE.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-DWZxsT_S.js → pickAttrs-Bw1tWsY8.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-Bcfs43CX.js → placementArrow-DeesBLbd.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-a9bcC1p-.js → responsiveObserve-bqLhxHhn.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-BDTzgOXN.js → slide-DGCXRoQm.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-Iq1j_HUg.js → statusUtils-H-re3Egl.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-DAZEYxeh.js → styleChecker-BXg4qGX_.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-DVkjyDrh.js → useFlexGapSupport-CKLb2KA6.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-wXTpNTHt.js → useFs-CTAhHeyw.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-CtQM_aZr.js → usePersonalDataHub-BQ4pDh5g.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-hjEoG85v.js → vnode-jrSK6j4j.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-BHVpyKg_.js → zoom-fOQE24pw.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +3 -3
  152. package/src/commands/agent.js +91 -60
  153. package/src/commands/git.js +39 -0
  154. package/src/commands/plugin.js +17 -2
  155. package/src/commands/session-group.js +131 -0
  156. package/src/commands/session-location.js +48 -0
  157. package/src/commands/session.js +11 -0
  158. package/src/commands/sync-providers.js +4 -1
  159. package/src/commands/update.js +1 -0
  160. package/src/data/changelog.json +40 -1
  161. package/src/gateways/ws/mcp-topic-handlers.js +167 -0
  162. package/src/gateways/ws/ws-agent-handler.js +20 -12
  163. package/src/harness/jsonl-session-store.js +279 -37
  164. package/src/harness/mcp-client.js +701 -91
  165. package/src/harness/session-index.js +15 -4
  166. package/src/lib/agent-network.js +166 -29
  167. package/src/lib/agent-router.js +62 -6
  168. package/src/lib/agent-sandbox.js +7 -1
  169. package/src/lib/agent-worktree.js +8 -1
  170. package/src/lib/auto-mode-safety-classifier.js +3 -17
  171. package/src/lib/background-agent-keeper-protocol.js +26 -6
  172. package/src/lib/background-agent-supervisor.js +17 -1
  173. package/src/lib/browser-evidence.js +1405 -0
  174. package/src/lib/chrome-connector.js +465 -79
  175. package/src/lib/claude-code-bridge.js +159 -54
  176. package/src/lib/claude-project-auto-memory.js +481 -0
  177. package/src/lib/claude-project-storage-layout.js +104 -0
  178. package/src/lib/cloud/cloud-client.js +40 -0
  179. package/src/lib/cowork-workflow.js +69 -6
  180. package/src/lib/execution-location-local-supervisor.mjs +226 -0
  181. package/src/lib/execution-location-runner-lifecycle.js +991 -0
  182. package/src/lib/execution-location-target-preflight.js +333 -0
  183. package/src/lib/execution-location-target.js +783 -13
  184. package/src/lib/external-agent-adapters.js +269 -0
  185. package/src/lib/file-lines.js +6 -1
  186. package/src/lib/gateway-client-resilience.js +571 -0
  187. package/src/lib/gitlab-mr-worktree.js +176 -0
  188. package/src/lib/hooks-v2-producers.js +119 -15
  189. package/src/lib/hooks-v2-workspace-context.js +44 -1
  190. package/src/lib/host-resource-budget.js +295 -0
  191. package/src/lib/ide-context.js +15 -2
  192. package/src/lib/ipfs-storage.js +127 -25
  193. package/src/lib/llm-config-defaults.js +43 -0
  194. package/src/lib/mcp-lifecycle-authority.js +887 -0
  195. package/src/lib/mcp-oauth.js +101 -20
  196. package/src/lib/mcp-tls.js +103 -3
  197. package/src/lib/orchestrator.js +47 -0
  198. package/src/lib/paths.js +260 -32
  199. package/src/lib/permission-request.js +48 -0
  200. package/src/lib/plugin-runtime/bin.js +3 -1
  201. package/src/lib/plugin-runtime/hooks.js +3 -1
  202. package/src/lib/plugin-runtime/install.js +117 -1
  203. package/src/lib/plugin-runtime/lsp.js +4 -4
  204. package/src/lib/plugin-runtime/marketplace-archive-source.js +40 -5
  205. package/src/lib/plugin-runtime/marketplace-catalog.js +13 -2
  206. package/src/lib/plugin-runtime/marketplace-command-descriptor.js +343 -0
  207. package/src/lib/plugin-runtime/marketplace-command-source.js +580 -0
  208. package/src/lib/plugin-runtime/marketplace-source-adapter.js +33 -8
  209. package/src/lib/plugin-runtime/mcp.js +3 -1
  210. package/src/lib/plugin-runtime/monitors.js +3 -1
  211. package/src/lib/plugin-runtime/remote-source.js +151 -6
  212. package/src/lib/plugin-runtime/settings.js +3 -1
  213. package/src/lib/plugin-runtime/trust.js +274 -13
  214. package/src/lib/process-execution-broker/credential-agent.js +210 -41
  215. package/src/lib/process-execution-broker/index.js +15 -1
  216. package/src/lib/process-execution-broker/linux-cgroup-v2.js +391 -0
  217. package/src/lib/process-execution-broker/platform-sandbox.js +50 -28
  218. package/src/lib/project-mcp-trust.js +165 -10
  219. package/src/lib/resume-session.js +9 -6
  220. package/src/lib/session-core-singletons.js +26 -11
  221. package/src/lib/session-host-lease.js +52 -16
  222. package/src/lib/session-lifecycle-scope.js +153 -0
  223. package/src/lib/session-message-fabric.js +168 -21
  224. package/src/lib/session-projection.js +244 -4
  225. package/src/lib/session-store-guard.js +3 -1
  226. package/src/lib/session-workbench-store.js +466 -0
  227. package/src/lib/shell-approval.js +7 -5
  228. package/src/lib/spellcheck.js +211 -0
  229. package/src/lib/sub-agent-context.js +9 -9
  230. package/src/lib/sync-cli-db.js +485 -129
  231. package/src/lib/sync-credentials.js +31 -20
  232. package/src/lib/web-fetch.js +112 -40
  233. package/src/lib/web-search.js +127 -61
  234. package/src/lib/workflow-engine.js +42 -11
  235. package/src/lib/workspace-trust.js +793 -0
  236. package/src/repl/agent-repl.js +124 -5
  237. package/src/repl/permission-prompt.js +10 -12
  238. package/src/runtime/agent-core.js +311 -18
  239. package/src/runtime/agent-runtime.js +12 -1
  240. package/src/runtime/bootstrap.js +37 -13
  241. package/src/runtime/coding-agent-contract-shared.cjs +11 -4
  242. package/src/runtime/headless-runner.js +234 -36
  243. package/src/runtime/headless-stream.js +181 -6
  244. package/src/runtime/mcp-config.js +298 -8
  245. package/src/runtime/policies/agent-policy.js +8 -0
  246. package/src/runtime/status-diagnostics-lite.js +9 -1
  247. package/src/assets/web-panel/assets/MarkdownRenderer-CFyt8iUd.js +0 -1
  248. package/src/assets/web-panel/assets/McpTools-DFaIhOfu.js +0 -7
  249. package/src/assets/web-panel/assets/devWarning-DorRZcI9.js +0 -1
  250. package/src/assets/web-panel/assets/index-BETiL0a3.js +0 -1
  251. package/src/assets/web-panel/assets/index-BhAVHuW8.js +0 -1
@@ -91,6 +91,14 @@ export function resolveAgentPolicy({
91
91
  pdh: overrides.pdh,
92
92
  outputStyle: overrides.outputStyle,
93
93
  settingsFile: overrides.settingsFile || null,
94
+ // Captured before settings-file env overrides. The REPL consumes this
95
+ // immutable launch snapshot for Claude-compatible project storage so a
96
+ // checked-in settings file cannot redirect transcripts or auto memory.
97
+ claudeStorageLaunchEnv:
98
+ overrides.claudeStorageLaunchEnv &&
99
+ typeof overrides.claudeStorageLaunchEnv === "object"
100
+ ? Object.freeze({ ...overrides.claudeStorageLaunchEnv })
101
+ : null,
94
102
  disableSlashCommands: overrides.disableSlashCommands === true,
95
103
  // --remote-control also applies interactively: the REPL starts the
96
104
  // paired-device approval bridge at startup (批26).
@@ -10,6 +10,7 @@ import {
10
10
  VERSION,
11
11
  } from "../constants.js";
12
12
  import { isExecutableOnPath } from "../lib/executable-path.js";
13
+ import { resolveConfigDataRoot } from "../lib/paths.js";
13
14
 
14
15
  function checkPort(port, host, timeoutMs, connect = createConnection) {
15
16
  return new Promise((resolve) => {
@@ -82,7 +83,14 @@ export async function collectQuickStatusReport(options = {}) {
82
83
  executableCheck: options.executableCheck || isExecutableOnPath,
83
84
  connect: options.connect || createConnection,
84
85
  };
85
- const home = env.CHAINLESSCHAIN_HOME || join(deps.home(), CONFIG_DIR_NAME);
86
+ const configuredRoot = resolveConfigDataRoot({ env, cwd });
87
+ // Retain the injected-home seam for default-root unit callers, while every
88
+ // explicit native/Claude root uses the same validated resolver as runtime
89
+ // persistence.
90
+ const home =
91
+ configuredRoot.source === "default" && options.home
92
+ ? join(deps.home(), CONFIG_DIR_NAME)
93
+ : configuredRoot.path;
86
94
  const config = readJson(join(home, "config.json"), deps) || {};
87
95
  const llm = { ...DEFAULT_CONFIG.llm, ...(config.llm || {}) };
88
96
  const setupCompleted = config.setupCompleted === true;
@@ -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-Bissefox.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 f(t,o,e,r,n,m){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",f],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-iaNvff/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
@@ -1,7 +0,0 @@
1
- import{I as M,P as o,J as d,F as I,Z as G,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-Bissefox.js";import{at as Me,au as je,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 j=ie(c,w);j.length===0?e.push(_e(w,c,h,"raw")):e.push(...j);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",j=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",j="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:j,...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 j=0;j<c.length;j++){const V=c[j];if(!V||typeof V!="object"){t[`${i.name}[${j}]`]="必须是对象",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}[${j}].${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 j(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:j,addItem:V,removeItem:A,computed:E,get PlusOutlined(){return Me},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"}},Ge={key:1,style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Qe={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-bottom":"8px"}},Ye={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=M("a-tag"),w=M("a-input"),h=M("a-textarea"),k=M("a-input-number"),j=M("a-switch"),V=M("a-select"),A=M("a-button");return e.fields.length?(o(),d("div",Je,[(o(!0),d(I,null,G(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",Ge,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(j,{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,G(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",Qe,[f("span",Ye,"#"+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,G(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(j,{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-iaNvff/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(""),j=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({}),Q=O({}),ne=O("{}"),Y=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="",Q.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||Y.value)return;H.value="",Q.value={};let y={};if(te.value==="form"){const u=K(P.value.inputSchema||null),T=se(u,oe.value);if(!T.ok){Q.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}}}Y.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{Y.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:j,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:Q,paramsText:ne,running:Y,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 je},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"}},Mt={key:1},jt={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"}},Gt={key:0},Qt={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},Yt={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=M("a-button"),w=M("a-statistic"),h=M("a-card"),k=M("a-col"),j=M("a-row"),V=M("a-spin"),A=M("a-badge"),n=M("a-input-search"),l=M("a-tag"),b=M("a-table"),m=M("a-radio-button"),S=M("a-radio-group"),N=M("a-textarea"),J=M("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(j,{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,G(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",Mt,[f("div",jt,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",Gt,[f("div",Qt,s(e.t("mcpTools.read.descriptionLabel")),1),f("div",Yt,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,G(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-iaNvff/repo/packages/web-panel/src/views/McpTools.vue"]]);export{fo as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-Bissefox.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-Dir0r6OQ.js";import{a0 as t}from"./index-Bissefox.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-a9bcC1p-.js";import"./useFlexGapSupport-DVkjyDrh.js";import"./styleChecker-DAZEYxeh.js";import"./index-C1C9i79A.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-BNSogPo3.js";import{a0 as t}from"./index-Bissefox.js";import"./vendor-Bn1JzzAn.js";import"./index-C1C9i79A.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};