chainlesschain 0.163.7 → 0.163.8

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 (181) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/assets/{AIOps-axqQfwv8.js → AIOps-CavM7W3k.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-DV-Ro0By.js → ActionButton-CUvZGabQ.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-Bt72WEVu.js → Analytics-DeBnWnbe.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-BtepG55E.js → AppLayout-DbI5kxvd.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-B7KaJ7S_.js → Artifacts-D93bigKm.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-FNFaUg7A.js → Audit-CBNvfUZa.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-DFb6J2wQ.js → BackgroundAgents-CJLyh_YU.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-CC7YBhyj.js → Backup-D_0yoehD.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-RkgTNVtj.js → BaseInput-TJxmbObW.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-hHEmGZy-.js → Chat-CE0dto1q.js} +5 -5
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CAP9YhHv.js → ChatBubbleRenderer-CZ5-yYiD.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-z5wXOQP1.js → Checkbox-Ck1RVIVo.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-DVaDJnxy.js → Codegen-qpoyf6DK.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-CJmaRDR5.js → Col-DUyPWjIE.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-DF29_2bI.js → Community-D_S1BemS.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-DtkQkBzn.js → Compact-BjxeK-Gc.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-xoHDxp7I.js → Compliance-Dd3CEJsu.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-BUm-R7ht.js → Cowork-B4QG7-ad.js} +3 -3
  20. package/src/assets/web-panel/assets/{Cron-Cgl14ZkB.js → Cron-BtZnids5.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BNcbmoqh.js → Crosschain-CHPfCBFD.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-Bwja0Zo9.js → DID-DT8DCEOK.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-Bk5XjEdJ.js → Dashboard-COQab5_U.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-Ci36Oitq.js → Dropdown-BY1PsQuU.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer--U04ZN4q.js → EmailListRenderer-CsuAuaq3.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2gNPR2s.js → FamilyGuardDashboard-BqpinD-j.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-C4KghYn7.js → Federation-D0gkfQFv.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-QL7x_Q_0.js → FormItemContext-BqgE-axK.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-F3Ryltwm.js → GenericCardRenderer-D0hJ2KvC.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-2HassK5k.js → Git-CmMB0uPY.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-DoBIp7oe.js → Governance-BnVEI0Dk.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference--W01QhZ-.js → Inference-YTAMihRP.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DmvwqGpT.js → KnowledgeGraph-0ax7VHop.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-BBJ4yAel.js → Logs-B9TRcokL.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-yySN5YNM.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-D5lNngSI.js → Marketplace-B6CSuD_H.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-CkEVOMKH.js → McpTools-CjMXvOVU.js} +4 -4
  38. package/src/assets/web-panel/assets/{Memory-B1Ow1xVE.js → Memory-CXRF71U3.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-SgYbUfb6.js → MobileBridge-DQgNp_oS.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-BWdOvQAj.js → MobileProjects-DlPwcCbq.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-DcTXSSma.js → Mtc-6hDTRPe1.js} +2 -2
  42. package/src/assets/web-panel/assets/{MtcAudit-Dt3WG4oj.js → MtcAudit-BlVHU1DS.js} +2 -2
  43. package/src/assets/web-panel/assets/{Multisig-B9B38UZx.js → Multisig-DP9pzEbV.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-B0S4GGvG.js → NLProgramming-Djorh8EV.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-DZ5U58Ng.js → Notes-oLZ-JkUg.js} +4 -4
  46. package/src/assets/web-panel/assets/{NotificationSettings-PjL5ZW34.js → NotificationSettings-Cg288VH3.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-DrAX2ESt.js → OrderTableRenderer-Bb1O3Ofr.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-Cv1GYs-c.js → Organization-CBdo-bHs.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-Bbkp_PL3.js → Overflow-qZdnVumx.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-BD8QUgoZ.js → P2P-D4kNfGNQ.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-BO-2PeaB.js → PdhVaultBrowser-DnlMemM7.js} +5 -5
  52. package/src/assets/web-panel/assets/{Permissions-D_OPVa02.js → Permissions-DHucHFBJ.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-mh-pEmaB.js → PersonalDataHub-BovlOIPR.js} +4 -4
  54. package/src/assets/web-panel/assets/{Pipeline-6JC2EDdb.js → Pipeline-Deru3CQY.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-CUshzUAG.js → Privacy-Bq5oTTbU.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-Cs2Aalri.js → ProjectInit-BfzxVWAz.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-1ak49tcj.js → ProjectSettings-CKC6XBtH.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-BV4oApsm.js → Projects-CMolGhae.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-CXXxvafH.js → Providers-C_jx4TWX.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-PTcDsF58.js → QrScannerModal-BdIHeVGC.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-CDwucrJw.js → QuickAsk-BwZwAcPD.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-CJlLVRXR.js → Recommend-BNTt0L-m.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-DlN-ETsO.js → RemoteSession-Biyn2-Ro.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-DI23LR6m.js → Reputation-D6VpG32B.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-Cl7UQMrM.js → Row-D_74OvQQ.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-CexHNfh8.js → RssFeed-BTr0a-BQ.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-BneBWvRN.js → Search-C3MCFoNU.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-DX7Phgrp.js → Security-CqW9aJ6s.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-BWXO8Mte.js → Services-Cw5GNaHF.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-DCyOjKPJ.js → Skeleton-DZps5qeY.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-CXqERsTB.js → Skills-C6NQ1znT.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-bhbrbz8E.js → Sla-DFP8G2Sh.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-3IPU0HBZ.js → SpeechSettings-ESt6MB6v.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-DBNTQLbM.js → SyncSettings-BHnN98aM.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-quP0bkN-.js → Tasks-NiSCaOf-.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-BouWmgho.js → Templates-DsKFhW2C.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-qv0D9s7z.js → Tenant-CQ0E0ze5.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-BxvbE8BB.js → Terminal-D_rBu_by.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-D-IeLnJ2.js → TimelineRenderer-D3Vm4Po4.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-CFMKKyVG.js → Tokens-DNTxRH6q.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-L8as3UuJ.js → Trigger-Dgprz1ms.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-MxmA4VZG.js → Trust-B2rUnVBD.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-C0VvJYRi.js → UkeySign-DEGQNc6_.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-Bf5QZj8N.js → VideoEditing-jlsAx3Eh.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-BIJ9riRz.js → Wallet-8jQih1ij.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-B8p9Mhkw.js → WebAuthn-XLeO6xIB.js} +4 -4
  87. package/src/assets/web-panel/assets/{WorkflowEditor-BVsuaPen.js → WorkflowEditor-De_dgDAG.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-BfkjoKpV.js → chat-CI19R_Sk.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-DeAlsWK8.js → colors-DsYTOYN3.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-Cs97bz5j.js → compact-item-CM3-t_Qr.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-BqbG60LH.js → createContext-BjxlBRZv.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-S1ld2LwU.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-i_RY0b1X.js → hasIn-RDaWX_4i.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-U4f5izHz.js → index-9R6BxAr0.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-0-agYlWL.js → index-B-Z8eFUJ.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-B1CbOH1i.js → index-B0PMlbMs.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DqBgBpgp.js → index-B5REnKt8.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BcUXAB2s.js → index-B7WBt_4T.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CIG8fQ2_.js → index-B9O9YyWE.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-gyFpvL7l.js → index-BCnZyIMA.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-yObj1O4n.js → index-BGqqJfL0.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DiSkx4UB.js → index-BHNYPO0b.js} +3 -3
  103. package/src/assets/web-panel/assets/{index-Bm7lLR4c.js → index-BKJr-TZp.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BOVkf1K3.js → index-BN6UPD2E.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BESLFt4q.js → index-Bi46Xu4u.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CE2VtTlp.js → index-BlT2VAEK.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DmbfhJUP.js → index-C0yx-jtQ.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BYUVuwKt.js → index-C4gkzxkw.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CeWoNHau.js → index-CVQMeiwH.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-PT_5sBMA.js → index-Cd3euP_4.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CgsqdnRV.js → index-Cd9OJhHG.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-B-3tEpTc.js → index-CiECJi-Q.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BkBi5TmC.js → index-CjTrRt13.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-D2B4VPyP.js → index-CnHH7bnD.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-dIHr4B_u.js → index-Cpqm1qfU.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-B5UkyA3c.js → index-CyOGN6a5.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Dk7-v4hP.js → index-D0zcy54x.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-ZxO_-E8a.js → index-D6sm5-Xq.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-B-JVTrpr.js → index-DIUnNOjG.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Dk2qouAz.js → index-DX7tuWVJ.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BuLQobzW.js → index-DXXtGMUJ.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DUUrv141.js → index-DcPFB8qJ.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-D9evtvg2.js → index-DoQA0-52.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-COdGA-8n.js → index-Drlnwr8F.js} +1 -1
  125. package/src/assets/web-panel/assets/index-Drz6yq0m.js +1 -0
  126. package/src/assets/web-panel/assets/{index-CED2PL_y.js → index-Dsij_KsN.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-79V_zv1s.js → index-Dxge-xWl.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CG3PRyAL.js → index-DyIWssPC.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-YXgLng0K.js → index-IeiL9RKc.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-s1opAL-M.js → index-nAH87mQP.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cf3WCLmy.js → index-pPL66J85.js} +1 -1
  132. package/src/assets/web-panel/assets/index-uWiUs7S_.js +1 -0
  133. package/src/assets/web-panel/assets/{initDefaultProps-C9h9yKL3.js → initDefaultProps-BTL88of4.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-BvmLsPdu.js → motion-BUB2pXwB.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-CoL4ekU1.js → move-egCkkOMm.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-C4pMy6xV.js → mtc-parser-DAWhZC8c.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-DPuJfNxx.js → omit-CvOxe_6d.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-D0KEeaK2.js → pickAttrs-DZUSLZ5Z.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-BpkyINxt.js → placementArrow-BERxGNMY.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-DQI_wOq8.js → responsiveObserve-DZuDfZ9n.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-DYfdDiRg.js → slide-DO756sgI.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-B5dtvb0D.js → statusUtils-BRQlIz28.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-CF310mSj.js → styleChecker-DCSfdybl.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-D1Qp4BLp.js → useFlexGapSupport-LD8dWVve.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-C7_iyvJK.js → useFs-BX9uW2LK.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-DZUt_fIm.js → usePersonalDataHub-BPSlPuHU.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-D3dsi0lZ.js → vnode-BmOILC9V.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-WdbOlvdQ.js → zoom-1iKowKGg.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/command-help-index.json +3 -3
  151. package/src/commands/automation.js +103 -1
  152. package/src/commands/team-merge-review.js +937 -0
  153. package/src/commands/team.js +2 -0
  154. package/src/data/changelog.json +14 -1
  155. package/src/lib/agent-schedule-store.js +139 -28
  156. package/src/lib/agent-team/team-merge-review-store.js +765 -0
  157. package/src/lib/agent-team/team-merge-review-transaction.js +1223 -0
  158. package/src/lib/agent-team/team-merge-review.js +1847 -0
  159. package/src/lib/automation-center-incidents.js +314 -0
  160. package/src/lib/automation-center-runtime.js +448 -0
  161. package/src/lib/automation-center.js +182 -38
  162. package/src/lib/automation-engine.js +41 -0
  163. package/src/lib/automation-execution-authority.js +241 -12
  164. package/src/lib/automation-execution-incident.js +737 -0
  165. package/src/lib/cowork-cron.js +85 -14
  166. package/src/lib/scheduler-kernel/agenda-adapter.js +17 -7
  167. package/src/lib/scheduler-kernel/automation-adapter.js +105 -11
  168. package/src/lib/scheduler-kernel/automation-event-adapter.js +87 -11
  169. package/src/lib/scheduler-kernel/contract.js +91 -0
  170. package/src/lib/scheduler-kernel/cowork-cron-adapter.js +12 -1
  171. package/src/lib/scheduler-kernel/loop-adapter.js +7 -1
  172. package/src/lib/scheduler-kernel/routine-adapter.js +7 -1
  173. package/src/lib/scheduler-kernel/runtime-control-capabilities.js +31 -0
  174. package/src/lib/scheduler-kernel/runtime.js +176 -3
  175. package/src/lib/scheduler-kernel/store.js +1253 -45
  176. package/src/runtime/agent-core.js +10 -0
  177. package/src/runtime/mcp-config.js +81 -10
  178. package/src/assets/web-panel/assets/MarkdownRenderer-BLCZMzhJ.js +0 -1
  179. package/src/assets/web-panel/assets/devWarning-DPty0mGN.js +0 -1
  180. package/src/assets/web-panel/assets/index-Bt7g0Vq_.js +0 -1
  181. package/src/assets/web-panel/assets/index-ChVT0p9u.js +0 -1
@@ -6873,6 +6873,16 @@ async function executeToolInner(
6873
6873
  });
6874
6874
  }
6875
6875
  try {
6876
+ if (localToolExecutor.op === "list-templates") {
6877
+ const resourceTemplates =
6878
+ typeof mcpClient.listResourceTemplates === "function"
6879
+ ? mcpClient.listResourceTemplates(args?.server || undefined)
6880
+ : [];
6881
+ return attachDescriptor({
6882
+ count: resourceTemplates.length,
6883
+ resourceTemplates,
6884
+ });
6885
+ }
6876
6886
  if (localToolExecutor.op === "list") {
6877
6887
  const resources =
6878
6888
  typeof mcpClient.listResources === "function"
@@ -332,7 +332,8 @@ export function mcpAuthHint(url, errMessage) {
332
332
  * @param {object} servers `{ name: { command|url, args, env, transport, headers } }`
333
333
  * @param {object} [deps] { writeErr, createClient }
334
334
  * @returns {Promise<{mcpClient, extraToolDefinitions, externalToolExecutors,
335
- * externalToolDescriptors, connected}>}
335
+ * externalToolDescriptors, connected, resources,
336
+ * resourceTemplates, prompts}>}
336
337
  */
337
338
  export async function setupMcpFromConfig(servers, deps = {}) {
338
339
  const writeErr = deps.writeErr || (() => {});
@@ -354,6 +355,7 @@ export async function setupMcpFromConfig(servers, deps = {}) {
354
355
  externalToolDescriptors: {},
355
356
  connected: [],
356
357
  resources: [],
358
+ resourceTemplates: [],
357
359
  prompts: [],
358
360
  };
359
361
  if (!(result._mcpServerNameReservations instanceof Set)) {
@@ -362,9 +364,12 @@ export async function setupMcpFromConfig(servers, deps = {}) {
362
364
  configurable: true,
363
365
  });
364
366
  }
365
- // Back-fill the resource/prompt accumulators when an older `deps.into` object
366
- // (created before this field existed) is passed in.
367
+ // Back-fill the resource/template/prompt accumulators when an older
368
+ // `deps.into` object (created before these fields existed) is passed in.
367
369
  if (!Array.isArray(result.resources)) result.resources = [];
370
+ if (!Array.isArray(result.resourceTemplates)) {
371
+ result.resourceTemplates = [];
372
+ }
368
373
  if (!Array.isArray(result.prompts)) result.prompts = [];
369
374
  // Per-server usage instructions from the MCP initialize response (surfaced
370
375
  // by tool search; absent for servers that send none).
@@ -477,6 +482,9 @@ export async function setupMcpFromConfig(servers, deps = {}) {
477
482
  toolMetadataError = error;
478
483
  }
479
484
  const resources = Array.isArray(res?.resources) ? res.resources : [];
485
+ const resourceTemplates = Array.isArray(res?.resourceTemplates)
486
+ ? res.resourceTemplates
487
+ : [];
480
488
  const prompts = Array.isArray(res?.prompts) ? res.prompts : [];
481
489
  // A server can connect (initialize OK) yet have its tools/list fail — the
482
490
  // mcp-client surfaces that as `res.toolsError` (Claude-Code 2.1.181
@@ -507,6 +515,10 @@ export async function setupMcpFromConfig(servers, deps = {}) {
507
515
  if (!r || !r.uri) continue;
508
516
  result.resources.push({ ...r, server: name });
509
517
  }
518
+ for (const template of resourceTemplates) {
519
+ if (!template || !template.uriTemplate) continue;
520
+ result.resourceTemplates.push({ ...template, server: name });
521
+ }
510
522
  for (const p of prompts) {
511
523
  if (!p || !p.name) continue;
512
524
  result.prompts.push({ ...p, server: name });
@@ -566,13 +578,16 @@ export async function setupMcpFromConfig(servers, deps = {}) {
566
578
  }
567
579
  }
568
580
 
569
- // Expose MCP resources to the LLM as two generic tools (Claude-Code parity:
570
- // ListMcpResourcesTool / ReadMcpResourceTool). Registered once, only when at
571
- // least one connected server advertises a resource, and re-entrant safe for
572
- // accumulating `deps.into` batches.
573
- if (result.resources.length > 0) {
581
+ // Expose MCP resources to the LLM as generic read-only tools. A
582
+ // templates-only server still needs the read tool so the model can
583
+ // instantiate a URI template and explicitly read that URI. Registration is
584
+ // re-entrant safe for accumulating `deps.into` batches.
585
+ if (result.resources.length > 0 || result.resourceTemplates.length > 0) {
574
586
  registerMcpResourceTools(result);
575
587
  }
588
+ if (result.resourceTemplates.length > 0) {
589
+ registerMcpResourceTemplateTool(result);
590
+ }
576
591
 
577
592
  return result;
578
593
  }
@@ -615,14 +630,14 @@ export function registerMcpResourceTools(result) {
615
630
  name: "read_mcp_resource",
616
631
  description:
617
632
  "Read the contents of an MCP resource by its URI. Use " +
618
- "list_mcp_resources first to discover available URIs.",
633
+ "list_mcp_resources or list_mcp_resource_templates first to discover a URI.",
619
634
  parameters: {
620
635
  type: "object",
621
636
  properties: {
622
637
  server: {
623
638
  type: "string",
624
639
  description:
625
- "MCP server name that owns the resource (from list_mcp_resources).",
640
+ "MCP server name that owns the resource or resource template.",
626
641
  },
627
642
  uri: {
628
643
  type: "string",
@@ -689,6 +704,62 @@ export function registerMcpResourceTools(result) {
689
704
  };
690
705
  }
691
706
 
707
+ /** Register the read-only resource-template discovery tool once. */
708
+ function registerMcpResourceTemplateTool(result) {
709
+ const {
710
+ extraToolDefinitions,
711
+ externalToolExecutors,
712
+ externalToolDescriptors,
713
+ } = result;
714
+ if (externalToolExecutors.list_mcp_resource_templates) return;
715
+
716
+ extraToolDefinitions.push({
717
+ type: "function",
718
+ function: {
719
+ name: "list_mcp_resource_templates",
720
+ description:
721
+ "List URI templates exposed by connected MCP servers. Fill a template " +
722
+ "with concrete arguments, then pass the resulting URI and returned " +
723
+ "server name to read_mcp_resource.",
724
+ parameters: {
725
+ type: "object",
726
+ properties: {
727
+ server: {
728
+ type: "string",
729
+ description: "Optional MCP server name to filter by.",
730
+ },
731
+ },
732
+ },
733
+ },
734
+ });
735
+ externalToolExecutors.list_mcp_resource_templates = {
736
+ kind: "mcp-resource",
737
+ op: "list-templates",
738
+ };
739
+ externalToolDescriptors.list_mcp_resource_templates = {
740
+ name: "list_mcp_resource_templates",
741
+ kind: "mcp-resource",
742
+ category: "mcp",
743
+ source: "mcp",
744
+ isReadOnly: true,
745
+ riskLevel: "low",
746
+ effectContract: {
747
+ version: 1,
748
+ declaredEffect: "read",
749
+ authorizedEffect: "read",
750
+ riskLevel: "low",
751
+ sourceTrusted: true,
752
+ provenance: "host:mcp-resource-wrapper",
753
+ annotations: {
754
+ readOnlyHint: true,
755
+ destructiveHint: false,
756
+ idempotentHint: true,
757
+ openWorldHint: false,
758
+ },
759
+ },
760
+ };
761
+ }
762
+
692
763
  /**
693
764
  * Read + parse a `--mcp-config` file and connect its servers.
694
765
  * Throws on an unreadable/empty config (fail fast — the user asked for MCP).
@@ -1 +0,0 @@
1
- import{P as c,J as p,b as s}from"./vendor-Bn1JzzAn.js";import{r as a}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-DiSkx4UB.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=s(()=>a(e.content||"")),n={props:e,rendered:r,computed:s,get renderMarkdown(){return a}};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-2QdDpX/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-DiSkx4UB.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-CJmaRDR5.js";import{a0 as t}from"./index-DiSkx4UB.js";import"./vendor-Bn1JzzAn.js";import"./index-BOVkf1K3.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-Cl7UQMrM.js";import{a0 as t}from"./index-DiSkx4UB.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-DQI_wOq8.js";import"./useFlexGapSupport-D1Qp4BLp.js";import"./styleChecker-CF310mSj.js";import"./index-BOVkf1K3.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};