@xopcai/xopc 0.0.115 → 0.0.117

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 (578) hide show
  1. package/README.md +26 -10
  2. package/README.zh-CN.md +26 -10
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/demo-memory/src/index.d.ts +6 -0
  5. package/dist/extensions/demo-memory/src/index.js +132 -0
  6. package/dist/extensions/demo-memory/src/index.js.map +1 -0
  7. package/dist/extensions/demo-memory/xopc.extension.json +15 -0
  8. package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
  9. package/dist/extensions/telegram/src/command-handler.js +1 -2
  10. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  11. package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  14. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DVnBfANm.js → agent-avatar-dicebear-BBLhJ2C6.js} +1 -1
  15. package/dist/gateway/static/root/assets/agents-C6xgagZd.js +71 -0
  16. package/dist/gateway/static/root/assets/app-management-settings-panel-CBpLONvG.js +1 -0
  17. package/dist/gateway/static/root/assets/{appearance-settings-BQpPSTHD.js → appearance-settings-CGcc54yj.js} +1 -1
  18. package/dist/gateway/static/root/assets/apps-page-DdDx0V4z.js +1 -0
  19. package/dist/gateway/static/root/assets/{archive-plugin-CXu-Csep.js → archive-plugin-DZsVqMhU.js} +1 -1
  20. package/dist/gateway/static/root/assets/{attachment-load-BAjgOoGY.js → attachment-load-CIol6JWX.js} +1 -1
  21. package/dist/gateway/static/root/assets/{binary-plugins-BSBgB2hO.js → binary-plugins-B3UauMfp.js} +1 -1
  22. package/dist/gateway/static/root/assets/{block-editor-BpXw9TTR.js → block-editor-2HJoFchH.js} +3 -3
  23. package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +8 -0
  24. package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +1 -0
  25. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +1 -0
  26. package/dist/gateway/static/root/assets/{channels-settings-BbPUpzWB.js → channels-settings-BYyRzsex.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +2 -0
  28. package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +1 -0
  29. package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +3 -0
  30. package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +1 -0
  31. package/dist/gateway/static/root/assets/{extension-debug-page-D9kgUHCc.js → extension-debug-page-DX5WRE_t.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-CGyhXqzR.js → extension-page-Buah7Bw-.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-DL8Xquqd.js → extension-settings-page-DuroLVnf.js} +1 -1
  34. package/dist/gateway/static/root/assets/{fetch-D0VXA932.js → fetch-B5zdl27C.js} +1 -1
  35. package/dist/gateway/static/root/assets/{format-interval-label-Be8SmgUw.js → format-interval-label-Dn_QKIqb.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-config-api-gT4ZhE7h.js +1 -0
  37. package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +1 -0
  38. package/dist/gateway/static/root/assets/{gateway-startup-retry-DERUH61L.js → gateway-startup-retry-B3kL8KGY.js} +1 -1
  39. package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +1 -0
  40. package/dist/gateway/static/root/assets/{goals-config-api-BPmqWk90.js → goals-config-api-AR-fVh0P.js} +1 -1
  41. package/dist/gateway/static/root/assets/goals-page-Cpb21ezg.js +2 -0
  42. package/dist/gateway/static/root/assets/goals-settings-CPAuFwoD.js +1 -0
  43. package/dist/gateway/static/root/assets/{heartbeat-config-api-Bfdzr8oV.js → heartbeat-config-api-D7bKFEeO.js} +1 -1
  44. package/dist/gateway/static/root/assets/heartbeat-settings-CC69vNx0.js +1 -0
  45. package/dist/gateway/static/root/assets/index-CwhK8qCh.js +122 -0
  46. package/dist/gateway/static/root/assets/index-CyfhARL-.css +1 -0
  47. package/dist/gateway/static/root/assets/{interval-presets-utKbuCRY.js → interval-presets-0DtsnxE0.js} +1 -1
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CjqS6c6V.js → keyboard-shortcuts-settings-BPREtN8B.js} +1 -1
  49. package/dist/gateway/static/root/assets/logs-page-DefCgF4o.js +2 -0
  50. package/dist/gateway/static/root/assets/{markdown-split-DW8C47iB.js → markdown-split-ChbR9LGO.js} +1 -1
  51. package/dist/gateway/static/root/assets/{media-plugins-D6HwDhDT.js → media-plugins-B82oP80n.js} +1 -1
  52. package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +3 -0
  53. package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +2 -0
  54. package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +2 -0
  55. package/dist/gateway/static/root/assets/{note-image-lightbox-pJM35Pz5.js → note-image-lightbox-CDknITM3.js} +1 -1
  56. package/dist/gateway/static/root/assets/notes-page-X2slSx7V.js +1 -0
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-CVwHuyN6.js → preview-open-alternatives-DV3xQsWB.js} +1 -1
  58. package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +1 -0
  59. package/dist/gateway/static/root/assets/{save-bar-controls-Ba-UEk7x.js → save-bar-controls-BODCXnvY.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schedule-field-CNN9595U.js → schedule-field-CgJSCD3B.js} +1 -1
  61. package/dist/gateway/static/root/assets/{schema-form-DnNMmtD5.js → schema-form-qtfEI6QM.js} +1 -1
  62. package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +1 -0
  63. package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +1 -0
  64. package/dist/gateway/static/root/assets/{settings-collapsible-section-CmOz80i5.js → settings-collapsible-section-BHZKjVcS.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-form-section-BmK7JJOV.js → settings-form-section-5i35D-J1.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +1 -0
  67. package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +1 -0
  68. package/dist/gateway/static/root/assets/{share-preview-page-Dp2qGrHC.js → share-preview-page-B0H63tDv.js} +1 -1
  69. package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +1 -0
  70. package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +1 -0
  71. package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +2 -0
  72. package/dist/gateway/static/root/assets/system-settings-panel-DXs2VmBt.js +1 -0
  73. package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +1 -0
  74. package/dist/gateway/static/root/assets/{use-channel-catalog-CHlO8J9G.js → use-channel-catalog-BCjP_VHb.js} +1 -1
  75. package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +1 -0
  76. package/dist/gateway/static/root/assets/{voice-player-store-DDDWYHvg.js → voice-player-store-BlF9V05n.js} +1 -1
  77. package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.js +18 -0
  78. package/dist/gateway/static/root/index.html +5 -5
  79. package/dist/package.js +1 -1
  80. package/dist/src/agent/agent-manager.d.ts +1 -1
  81. package/dist/src/agent/agent-manager.js +7 -8
  82. package/dist/src/agent/agent-manager.js.map +1 -1
  83. package/dist/src/agent/agent-scope.js +6 -8
  84. package/dist/src/agent/agent-scope.js.map +1 -1
  85. package/dist/src/agent/background-review/coordinator.js +0 -1
  86. package/dist/src/agent/background-review/coordinator.js.map +1 -1
  87. package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
  88. package/dist/src/agent/background-review/run-background-review.js +2 -4
  89. package/dist/src/agent/background-review/run-background-review.js.map +1 -1
  90. package/dist/src/agent/background-review/settings.js +8 -7
  91. package/dist/src/agent/background-review/settings.js.map +1 -1
  92. package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
  93. package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
  94. package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
  95. package/dist/src/agent/context/workspace-seed.js +1 -1
  96. package/dist/src/agent/embedded/run-for-session.js +1 -1
  97. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  98. package/dist/src/agent/fallback/candidates.js +6 -3
  99. package/dist/src/agent/fallback/candidates.js.map +1 -1
  100. package/dist/src/agent/goals/checklist-judge.d.ts +1 -0
  101. package/dist/src/agent/goals/checklist-judge.js +1 -1
  102. package/dist/src/agent/goals/checklist-judge.js.map +1 -1
  103. package/dist/src/agent/goals/evaluate-turn.d.ts +1 -0
  104. package/dist/src/agent/goals/evaluate-turn.js +1 -0
  105. package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
  106. package/dist/src/agent/goals/post-turn.js +8 -1
  107. package/dist/src/agent/goals/post-turn.js.map +1 -1
  108. package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
  109. package/dist/src/agent/image/generation/runtime.js +1 -1
  110. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  111. package/dist/src/agent/image/image-helpers.d.ts +1 -1
  112. package/dist/src/agent/image/image-helpers.js +4 -17
  113. package/dist/src/agent/image/image-helpers.js.map +1 -1
  114. package/dist/src/agent/image/image-model-fallback.js +1 -1
  115. package/dist/src/agent/image/image-model-fallback.js.map +1 -1
  116. package/dist/src/agent/image/inbound-image-handling.js +1 -1
  117. package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
  118. package/dist/src/agent/image/tool-model-config.d.ts +1 -1
  119. package/dist/src/agent/image/tool-model-config.js +2 -2
  120. package/dist/src/agent/image/tool-model-config.js.map +1 -1
  121. package/dist/src/agent/image/understanding/pi-ai-provider.js +5 -2
  122. package/dist/src/agent/image/understanding/pi-ai-provider.js.map +1 -1
  123. package/dist/src/agent/image/understanding/provider-registry.d.ts +1 -0
  124. package/dist/src/agent/image/understanding/provider-registry.js +16 -2
  125. package/dist/src/agent/image/understanding/provider-registry.js.map +1 -1
  126. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +1 -1
  127. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
  128. package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
  129. package/dist/src/agent/media-generation/runtime-shared.js +1 -1
  130. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  131. package/dist/src/agent/memory/builtin-memory-store.d.ts +2 -0
  132. package/dist/src/agent/memory/builtin-memory-store.js +4 -0
  133. package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
  134. package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
  135. package/dist/src/agent/memory/builtin-provider.js +261 -11
  136. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  137. package/dist/src/agent/memory/context-assembler.d.ts +10 -0
  138. package/dist/src/agent/memory/context-assembler.js +26 -0
  139. package/dist/src/agent/memory/context-assembler.js.map +1 -0
  140. package/dist/src/agent/memory/create-memory-manager.js +25 -7
  141. package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
  142. package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
  143. package/dist/src/agent/memory/dreaming/config.js +8 -8
  144. package/dist/src/agent/memory/dreaming/config.js.map +1 -1
  145. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
  146. package/dist/src/agent/memory/dreaming/deep-promotion.js +24 -0
  147. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
  148. package/dist/src/agent/memory/index.d.ts +1 -0
  149. package/dist/src/agent/memory/index.js +4 -3
  150. package/dist/src/agent/memory/inject-prefetch.js +6 -2
  151. package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
  152. package/dist/src/agent/memory/manager.d.ts +37 -1
  153. package/dist/src/agent/memory/manager.js +332 -40
  154. package/dist/src/agent/memory/manager.js.map +1 -1
  155. package/dist/src/agent/memory/memory-config.js +12 -15
  156. package/dist/src/agent/memory/memory-config.js.map +1 -1
  157. package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
  158. package/dist/src/agent/memory/plugin-discovery.js +97 -31
  159. package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
  160. package/dist/src/agent/memory/provider.d.ts +20 -15
  161. package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
  162. package/dist/src/agent/memory/stub-memory-provider.js +20 -3
  163. package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
  164. package/dist/src/agent/memory/types.d.ts +136 -0
  165. package/dist/src/agent/models/manager.d.ts +1 -1
  166. package/dist/src/agent/models/manager.js +1 -1
  167. package/dist/src/agent/models/manager.js.map +1 -1
  168. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
  169. package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
  170. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  171. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
  172. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  173. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  174. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
  175. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
  176. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
  177. package/dist/src/agent/reply/post-compaction-context.js +11 -6
  178. package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
  179. package/dist/src/agent/reply/startup-context.js +8 -9
  180. package/dist/src/agent/reply/startup-context.js.map +1 -1
  181. package/dist/src/agent/service/process-direct-streaming.js +1 -4
  182. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  183. package/dist/src/agent/service/session-context-report.js +1 -1
  184. package/dist/src/agent/service/session-context-report.js.map +1 -1
  185. package/dist/src/agent/service.js +21 -25
  186. package/dist/src/agent/service.js.map +1 -1
  187. package/dist/src/agent/service.types.d.ts +1 -2
  188. package/dist/src/agent/session/session-hydrator.js +1 -2
  189. package/dist/src/agent/session/session-hydrator.js.map +1 -1
  190. package/dist/src/agent/session/session-inspector.d.ts +1 -1
  191. package/dist/src/agent/session/session-inspector.js +9 -14
  192. package/dist/src/agent/session/session-inspector.js.map +1 -1
  193. package/dist/src/agent/skills/hub-pull.js +1 -1
  194. package/dist/src/agent/starter-agents.d.ts +1 -3
  195. package/dist/src/agent/starter-agents.js +13 -21
  196. package/dist/src/agent/starter-agents.js.map +1 -1
  197. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
  198. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  199. package/dist/src/agent/tools/composio-tool.d.ts +8 -0
  200. package/dist/src/agent/tools/composio-tool.js +46 -0
  201. package/dist/src/agent/tools/composio-tool.js.map +1 -0
  202. package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
  203. package/dist/src/agent/tools/curated-memory-tool.js +20 -16
  204. package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
  205. package/dist/src/agent/tools/factory.d.ts +0 -4
  206. package/dist/src/agent/tools/factory.js +32 -66
  207. package/dist/src/agent/tools/factory.js.map +1 -1
  208. package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
  209. package/dist/src/agent/tools/image-generate-tool.js +19 -14
  210. package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
  211. package/dist/src/agent/tools/image-tool.js +1 -3
  212. package/dist/src/agent/tools/image-tool.js.map +1 -1
  213. package/dist/src/agent/tools/index.d.ts +1 -0
  214. package/dist/src/agent/tools/index.js +2 -1
  215. package/dist/src/agent/tools/memory-tool.d.ts +2 -2
  216. package/dist/src/agent/tools/memory-tool.js +39 -14
  217. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  218. package/dist/src/agent/tools/session-search-tool.js +1 -3
  219. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  220. package/dist/src/agent/tools/web-extract.js +6 -5
  221. package/dist/src/agent/tools/web-extract.js.map +1 -1
  222. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
  223. package/dist/src/agent/workflow/builtins/audit-repo.js +15 -2
  224. package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
  225. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +1 -1
  226. package/dist/src/agent/workflow/builtins/client-proposal.js +10 -1
  227. package/dist/src/agent/workflow/builtins/client-proposal.js.map +1 -1
  228. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +1 -1
  229. package/dist/src/agent/workflow/builtins/competitor-scan.js +16 -2
  230. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +1 -1
  231. package/dist/src/agent/workflow/builtins/content-draft.d.ts +1 -1
  232. package/dist/src/agent/workflow/builtins/content-draft.js +15 -2
  233. package/dist/src/agent/workflow/builtins/content-draft.js.map +1 -1
  234. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +1 -1
  235. package/dist/src/agent/workflow/builtins/content-repurpose.js +10 -1
  236. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +1 -1
  237. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  238. package/dist/src/agent/workflow/builtins/debug-incident.js +9 -1
  239. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  240. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +1 -1
  241. package/dist/src/agent/workflow/builtins/decision-compare.js +16 -2
  242. package/dist/src/agent/workflow/builtins/decision-compare.js.map +1 -1
  243. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +1 -1
  244. package/dist/src/agent/workflow/builtins/implementation-plan.js +11 -1
  245. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -1
  246. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +1 -1
  247. package/dist/src/agent/workflow/builtins/inbox-triage.js +11 -1
  248. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +1 -1
  249. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +1 -1
  250. package/dist/src/agent/workflow/builtins/meeting-prep.js +9 -1
  251. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +1 -1
  252. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
  253. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +9 -1
  254. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
  255. package/dist/src/agent/workflow/builtins/offer-design.d.ts +1 -1
  256. package/dist/src/agent/workflow/builtins/offer-design.js +10 -1
  257. package/dist/src/agent/workflow/builtins/offer-design.js.map +1 -1
  258. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  259. package/dist/src/agent/workflow/builtins/pr-review.js +9 -1
  260. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  261. package/dist/src/agent/workflow/builtins/release-check.d.ts +1 -1
  262. package/dist/src/agent/workflow/builtins/release-check.js +10 -1
  263. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -1
  264. package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
  265. package/dist/src/agent/workflow/builtins/research.js +16 -2
  266. package/dist/src/agent/workflow/builtins/research.js.map +1 -1
  267. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +1 -1
  268. package/dist/src/agent/workflow/builtins/weekly-review.js +9 -1
  269. package/dist/src/agent/workflow/builtins/weekly-review.js.map +1 -1
  270. package/dist/src/agent/workflow/subagent-runner.js +1 -3
  271. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  272. package/dist/src/agent-manifest/index.d.ts +4 -0
  273. package/dist/src/agent-manifest/index.js +10 -0
  274. package/dist/src/agent-manifest/index.js.map +1 -0
  275. package/dist/src/agent-manifest/prompt.d.ts +2 -0
  276. package/dist/src/agent-manifest/prompt.js +57 -0
  277. package/dist/src/agent-manifest/prompt.js.map +1 -0
  278. package/dist/src/agent-manifest/resolver.d.ts +11 -0
  279. package/dist/src/agent-manifest/resolver.js +93 -0
  280. package/dist/src/agent-manifest/resolver.js.map +1 -0
  281. package/dist/src/agent-manifest/schema.d.ts +778 -0
  282. package/dist/src/agent-manifest/schema.js +267 -0
  283. package/dist/src/agent-manifest/schema.js.map +1 -0
  284. package/dist/src/agent-manifest/validator.d.ts +24 -0
  285. package/dist/src/agent-manifest/validator.js +87 -0
  286. package/dist/src/agent-manifest/validator.js.map +1 -0
  287. package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
  288. package/dist/src/agent-runtime/boundary-guard.js +23 -0
  289. package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
  290. package/dist/src/agent-runtime/index.d.ts +7 -0
  291. package/dist/src/agent-runtime/index.js +8 -0
  292. package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
  293. package/dist/src/agent-runtime/memory-runtime.js +50 -0
  294. package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
  295. package/dist/src/agent-runtime/model-router.d.ts +11 -0
  296. package/dist/src/agent-runtime/model-router.js +16 -0
  297. package/dist/src/agent-runtime/model-router.js.map +1 -0
  298. package/dist/src/agent-runtime/run-trace.d.ts +27 -0
  299. package/dist/src/agent-runtime/run-trace.js +53 -0
  300. package/dist/src/agent-runtime/run-trace.js.map +1 -0
  301. package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
  302. package/dist/src/agent-runtime/runtime-profile.js +44 -0
  303. package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
  304. package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
  305. package/dist/src/agent-runtime/tool-registry.js +52 -0
  306. package/dist/src/agent-runtime/tool-registry.js.map +1 -0
  307. package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
  308. package/dist/src/agent-runtime/workflow-runtime.js +34 -0
  309. package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
  310. package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
  311. package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
  312. package/dist/src/browser/actions/registry.js +5 -8
  313. package/dist/src/browser/actions/registry.js.map +1 -1
  314. package/dist/src/browser/backend-from-config.d.ts +1 -1
  315. package/dist/src/browser/backend-from-config.js +50 -71
  316. package/dist/src/browser/backend-from-config.js.map +1 -1
  317. package/dist/src/browser/browser-command-timeout.d.ts +0 -1
  318. package/dist/src/browser/browser-command-timeout.js +3 -7
  319. package/dist/src/browser/browser-command-timeout.js.map +1 -1
  320. package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
  321. package/dist/src/browser/providers/browser-ext-install.js +3 -8
  322. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  323. package/dist/src/browser/readiness.js +16 -16
  324. package/dist/src/browser/readiness.js.map +1 -1
  325. package/dist/src/browser/schemas.js +1 -1
  326. package/dist/src/browser/schemas.js.map +1 -1
  327. package/dist/src/chat-commands/builtins/config.js +4 -4
  328. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  329. package/dist/src/chat-commands/builtins/thinking.js +16 -42
  330. package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
  331. package/dist/src/chat-commands/config-paths.js +1 -1
  332. package/dist/src/chat-commands/config-paths.js.map +1 -1
  333. package/dist/src/chat-commands/context.js +3 -4
  334. package/dist/src/chat-commands/context.js.map +1 -1
  335. package/dist/src/cli/command-manifest.js +1 -1
  336. package/dist/src/cli/command-manifest.js.map +1 -1
  337. package/dist/src/cli/commands/agent.js +3 -1
  338. package/dist/src/cli/commands/agent.js.map +1 -1
  339. package/dist/src/cli/commands/agents.js +3 -6
  340. package/dist/src/cli/commands/agents.js.map +1 -1
  341. package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
  342. package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
  343. package/dist/src/cli/commands/config.js +5 -5
  344. package/dist/src/cli/commands/config.js.map +1 -1
  345. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  346. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -17
  347. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  348. package/dist/src/cli/commands/goal.js +1 -1
  349. package/dist/src/cli/commands/image.js +13 -372
  350. package/dist/src/cli/commands/image.js.map +1 -1
  351. package/dist/src/cli/commands/models.js +26 -10
  352. package/dist/src/cli/commands/models.js.map +1 -1
  353. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  354. package/dist/src/cli/commands/onboard/model.js +20 -22
  355. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  356. package/dist/src/cli/commands/onboard.js +1 -1
  357. package/dist/src/cli/commands/onboard.js.map +1 -1
  358. package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
  359. package/dist/src/cli/utils/init-workspace-core.js +7 -6
  360. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  361. package/dist/src/commands/agents.config.d.ts +0 -1
  362. package/dist/src/commands/agents.config.js +66 -12
  363. package/dist/src/commands/agents.config.js.map +1 -1
  364. package/dist/src/config/agent-profile.d.ts +5 -17
  365. package/dist/src/config/agent-profile.js +31 -64
  366. package/dist/src/config/agent-profile.js.map +1 -1
  367. package/dist/src/config/agent-typed-models.d.ts +1 -1
  368. package/dist/src/config/agent-typed-models.js +0 -1
  369. package/dist/src/config/agent-typed-models.js.map +1 -1
  370. package/dist/src/config/index.js +3 -3
  371. package/dist/src/config/integration.d.ts +1 -1
  372. package/dist/src/config/reload.js +1 -1
  373. package/dist/src/config/reload.js.map +1 -1
  374. package/dist/src/config/rules.js +6 -56
  375. package/dist/src/config/rules.js.map +1 -1
  376. package/dist/src/config/schema.d.ts +925 -781
  377. package/dist/src/config/schema.js +157 -424
  378. package/dist/src/config/schema.js.map +1 -1
  379. package/dist/src/connectors/composio-triggers.d.ts +10 -0
  380. package/dist/src/connectors/composio-triggers.js +32 -0
  381. package/dist/src/connectors/composio-triggers.js.map +1 -0
  382. package/dist/src/connectors/composio.d.ts +54 -0
  383. package/dist/src/connectors/composio.js +334 -0
  384. package/dist/src/connectors/composio.js.map +1 -0
  385. package/dist/src/connectors/health.js +16 -1
  386. package/dist/src/connectors/health.js.map +1 -1
  387. package/dist/src/connectors/install.d.ts +2 -1
  388. package/dist/src/connectors/install.js +50 -13
  389. package/dist/src/connectors/install.js.map +1 -1
  390. package/dist/src/connectors/instances.js +57 -6
  391. package/dist/src/connectors/instances.js.map +1 -1
  392. package/dist/src/connectors/lifecycle.d.ts +3 -0
  393. package/dist/src/connectors/lifecycle.js +23 -0
  394. package/dist/src/connectors/lifecycle.js.map +1 -0
  395. package/dist/src/connectors/materialize.js +2 -1
  396. package/dist/src/connectors/materialize.js.map +1 -1
  397. package/dist/src/connectors/providers.d.ts +1 -0
  398. package/dist/src/connectors/providers.js +10 -2
  399. package/dist/src/connectors/providers.js.map +1 -1
  400. package/dist/src/connectors/registries/modelscope.d.ts +2 -0
  401. package/dist/src/connectors/registries/modelscope.js +205 -0
  402. package/dist/src/connectors/registries/modelscope.js.map +1 -0
  403. package/dist/src/connectors/registries/official-mcp.d.ts +2 -0
  404. package/dist/src/connectors/registries/official-mcp.js +142 -0
  405. package/dist/src/connectors/registries/official-mcp.js.map +1 -0
  406. package/dist/src/connectors/registries/search.d.ts +12 -0
  407. package/dist/src/connectors/registries/search.js +89 -0
  408. package/dist/src/connectors/registries/search.js.map +1 -0
  409. package/dist/src/connectors/registries/smithery.d.ts +2 -0
  410. package/dist/src/connectors/registries/smithery.js +98 -0
  411. package/dist/src/connectors/registries/smithery.js.map +1 -0
  412. package/dist/src/connectors/registries/types.d.ts +20 -0
  413. package/dist/src/connectors/registries/types.js +1 -0
  414. package/dist/src/connectors/secret-store.js +4 -2
  415. package/dist/src/connectors/secret-store.js.map +1 -1
  416. package/dist/src/connectors/setup-secrets.d.ts +15 -0
  417. package/dist/src/connectors/setup-secrets.js +64 -0
  418. package/dist/src/connectors/setup-secrets.js.map +1 -0
  419. package/dist/src/connectors/supervisor.d.ts +15 -0
  420. package/dist/src/connectors/supervisor.js +73 -0
  421. package/dist/src/connectors/supervisor.js.map +1 -0
  422. package/dist/src/connectors/types.d.ts +27 -3
  423. package/dist/src/connectors/usage.js +6 -1
  424. package/dist/src/connectors/usage.js.map +1 -1
  425. package/dist/src/cron/index.js +1 -1
  426. package/dist/src/cron/service.js +1 -1
  427. package/dist/src/cron/validation.d.ts +3 -3
  428. package/dist/src/extensions/activation-context.js +13 -7
  429. package/dist/src/extensions/activation-context.js.map +1 -1
  430. package/dist/src/gateway/agents-admin.d.ts +17 -18
  431. package/dist/src/gateway/agents-admin.js +123 -88
  432. package/dist/src/gateway/agents-admin.js.map +1 -1
  433. package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
  434. package/dist/src/gateway/capability-presets-admin.js +214 -0
  435. package/dist/src/gateway/capability-presets-admin.js.map +1 -0
  436. package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
  437. package/dist/src/gateway/hono/lib/agent-model.js +1 -1
  438. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  439. package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
  440. package/dist/src/gateway/hono/lib/config-payload.js +13 -37
  441. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  442. package/dist/src/gateway/hono/routes/agents.js +56 -33
  443. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  444. package/dist/src/gateway/hono/routes/browser.js +8 -15
  445. package/dist/src/gateway/hono/routes/browser.js.map +1 -1
  446. package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
  447. package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
  448. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
  449. package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
  450. package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
  451. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  452. package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
  453. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  454. package/dist/src/gateway/hono/routes/config.js +1 -1
  455. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  456. package/dist/src/gateway/hono/routes/connectors.js +230 -3
  457. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  458. package/dist/src/gateway/hono/routes/dreaming.js +7 -0
  459. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  460. package/dist/src/gateway/hono/routes/goals.js +52 -5
  461. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  462. package/dist/src/gateway/hono/routes/index.js +2 -0
  463. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  464. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  465. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  466. package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
  467. package/dist/src/gateway/hono/routes/memory.js +290 -0
  468. package/dist/src/gateway/hono/routes/memory.js.map +1 -0
  469. package/dist/src/gateway/hono/routes/voice.js +14 -1
  470. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  471. package/dist/src/gateway/hono/sse.js.map +1 -1
  472. package/dist/src/gateway/service/agent-runner.d.ts +5 -12
  473. package/dist/src/gateway/service/agent-runner.js +8 -8
  474. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  475. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -10
  476. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  477. package/dist/src/gateway/service.d.ts +2 -2
  478. package/dist/src/gateway/service.js +20 -16
  479. package/dist/src/gateway/service.js.map +1 -1
  480. package/dist/src/gateway/user-turn-input.d.ts +18 -0
  481. package/dist/src/gateway/user-turn-input.js +16 -0
  482. package/dist/src/gateway/user-turn-input.js.map +1 -0
  483. package/dist/src/goals/goal-queue-store.d.ts +2 -1
  484. package/dist/src/goals/goal-queue-store.js +2 -2
  485. package/dist/src/goals/goal-queue-store.js.map +1 -1
  486. package/dist/src/goals/goal-queue-types.d.ts +4 -3
  487. package/dist/src/goals/goal-runner.js +25 -3
  488. package/dist/src/goals/goal-runner.js.map +1 -1
  489. package/dist/src/goals/goal-service.d.ts +6 -1
  490. package/dist/src/goals/goal-service.js +9 -2
  491. package/dist/src/goals/goal-service.js.map +1 -1
  492. package/dist/src/goals/goal-store.d.ts +7 -1
  493. package/dist/src/goals/goal-store.js +42 -0
  494. package/dist/src/goals/goal-store.js.map +1 -1
  495. package/dist/src/goals/types.d.ts +10 -0
  496. package/dist/src/notes/agent-context.js +2 -2
  497. package/dist/src/providers/index.d.ts +2 -2
  498. package/dist/src/providers/index.js +10 -14
  499. package/dist/src/providers/index.js.map +1 -1
  500. package/dist/src/session/index.js +1 -1
  501. package/dist/src/session/session-workspace.js +7 -2
  502. package/dist/src/session/session-workspace.js.map +1 -1
  503. package/dist/src/session/store.js +5 -0
  504. package/dist/src/session/store.js.map +1 -1
  505. package/dist/src/session/thinking-resolve.d.ts +1 -1
  506. package/dist/src/session/thinking-resolve.js +1 -1
  507. package/dist/src/session/thinking-resolve.js.map +1 -1
  508. package/dist/src/storage/sqlite/connection.js +1 -1
  509. package/dist/src/storage/sqlite/index.d.ts +1 -0
  510. package/dist/src/storage/sqlite/index.js +2 -1
  511. package/dist/src/storage/sqlite/memory-records-repository.d.ts +101 -0
  512. package/dist/src/storage/sqlite/memory-records-repository.js +309 -0
  513. package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
  514. package/dist/src/storage/sqlite/migrations/011_goal_context_messages.sql +8 -0
  515. package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
  516. package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
  517. package/dist/src/storage/sqlite/migrations/runner.d.ts +2 -2
  518. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  519. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  520. package/dist/src/storage/sqlite/migrations/runner.ts +2 -2
  521. package/dist/src/storage/sqlite/schema.js +3 -3
  522. package/dist/src/storage/sqlite/schema.sql +95 -0
  523. package/dist/src/tui/backends/embedded-backend.js +6 -4
  524. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  525. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  526. package/dist/src/voice/tts/openai-compatible-speech.d.ts +1 -1
  527. package/dist/src/voice/tts/openai-compatible-speech.js.map +1 -1
  528. package/dist/src/voice/tts/providers/edge-speech.js +14 -2
  529. package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
  530. package/dist/src/voice/tts/speak-core.js +3 -3
  531. package/dist/src/voice/tts/speak-core.js.map +1 -1
  532. package/dist/src/voice/tts/speech-provider-types.d.ts +2 -2
  533. package/dist/src/voice/tts/types.js +1 -1
  534. package/dist/src/voice/tts/types.js.map +1 -1
  535. package/dist/src/workflows/domain/result.d.ts +0 -1
  536. package/dist/src/workflows/engine/workflow-engine.js +7 -23
  537. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  538. package/dist/src/workflows/service/workflow-run-service.js +3 -4
  539. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  540. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  541. package/package.json +4 -3
  542. package/dist/gateway/static/root/assets/agent-browser-settings-page-DPXc4hz8.js +0 -6
  543. package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-CTJ0YnRQ.js +0 -1
  544. package/dist/gateway/static/root/assets/agents-zJXQfJ_W.js +0 -71
  545. package/dist/gateway/static/root/assets/app-management-settings-panel-DzGbdr04.js +0 -1
  546. package/dist/gateway/static/root/assets/apps-page-CPjfyzSD.js +0 -1
  547. package/dist/gateway/static/root/assets/config-api-NOoPiIYz.js +0 -3
  548. package/dist/gateway/static/root/assets/connectors-settings-CAXYMOdp.js +0 -2
  549. package/dist/gateway/static/root/assets/cron-api-C9BOqAXd.js +0 -1
  550. package/dist/gateway/static/root/assets/cron-page-DuUbBeKI.js +0 -3
  551. package/dist/gateway/static/root/assets/dreaming-settings-DQ4DtiK1.js +0 -1
  552. package/dist/gateway/static/root/assets/gateway-config-api-C-xjn__h.js +0 -1
  553. package/dist/gateway/static/root/assets/gateway-settings-BMPwIjKI.js +0 -1
  554. package/dist/gateway/static/root/assets/goal-detail-page-BJsyjJnF.js +0 -1
  555. package/dist/gateway/static/root/assets/goals-page-BerDgIhw.js +0 -2
  556. package/dist/gateway/static/root/assets/goals-settings-ByTjeAto.js +0 -1
  557. package/dist/gateway/static/root/assets/heartbeat-settings-TbHgcjTn.js +0 -1
  558. package/dist/gateway/static/root/assets/index-AkTrf6Pb.js +0 -122
  559. package/dist/gateway/static/root/assets/index-fh5sXTj9.css +0 -1
  560. package/dist/gateway/static/root/assets/logs-page-DGXuPf5B.js +0 -2
  561. package/dist/gateway/static/root/assets/messages-upgxw6Ub.js +0 -3
  562. package/dist/gateway/static/root/assets/models-hub-panel-Bot16nn7.js +0 -2
  563. package/dist/gateway/static/root/assets/note-detail-page-Brlyou8M.js +0 -2
  564. package/dist/gateway/static/root/assets/notes-page-DvZ4pwc-.js +0 -1
  565. package/dist/gateway/static/root/assets/remote-access-hub-BZEDmxbZ.js +0 -1
  566. package/dist/gateway/static/root/assets/sessions-page-DdGGlsfn.js +0 -1
  567. package/dist/gateway/static/root/assets/settings-advanced-gate-DlkEkPf9.js +0 -1
  568. package/dist/gateway/static/root/assets/settings-page-DFPTrsPF.js +0 -1
  569. package/dist/gateway/static/root/assets/setup-status-panel-CYCCfgh4.js +0 -1
  570. package/dist/gateway/static/root/assets/shares-settings-Bff1pGd0.js +0 -1
  571. package/dist/gateway/static/root/assets/skill-reload-api-CJGKpBur.js +0 -1
  572. package/dist/gateway/static/root/assets/skills-page-C6ocduTD.js +0 -2
  573. package/dist/gateway/static/root/assets/system-settings-panel-5jrIEr5b.js +0 -1
  574. package/dist/gateway/static/root/assets/use-agent-defaults-form-BuiXLIs5.js +0 -1
  575. package/dist/gateway/static/root/assets/use-settings-tab-guard-CW5JORnl.js +0 -1
  576. package/dist/gateway/static/root/assets/voice-api-key-field-DDoQyghO.js +0 -1
  577. package/dist/gateway/static/root/assets/workflow-page.utils-CKjeEGqx.js +0 -1
  578. package/dist/gateway/static/root/assets/workflows-page-B604ehHG.js +0 -18
@@ -1 +1 @@
1
- {"version":3,"file":"instances.js","names":[],"sources":["../../../src/connectors/instances.ts"],"sourcesContent":["import type { Config } from '../config/schema.js';\nimport { getConnectorDefinition } from './catalog.js';\nimport { isManagedConnectorServer } from './materialize.js';\nimport { getConnectorAuditFromMarker, getConnectorUsageFromMarker } from './usage.js';\nimport type { ConnectorInstance } from './types.js';\n\nfunction secretStatusForServer(server: Record<string, unknown>): Record<string, boolean> {\n const marker = server.xopcConnector as { connectorId?: string } | undefined;\n const definition = marker?.connectorId ? getConnectorDefinition(marker.connectorId) : undefined;\n const env = server.env && typeof server.env === 'object' && !Array.isArray(server.env)\n ? (server.env as Record<string, unknown>)\n : {};\n const status: Record<string, boolean> = {};\n for (const secret of definition?.setup.secrets ?? []) {\n const value = env[secret.key];\n status[secret.key] = Boolean(\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n 'xopcSecretRef' in value,\n );\n }\n return status;\n}\n\nexport function listConnectorInstances(config: Config): ConnectorInstance[] {\n const servers = config.mcp?.servers ?? {};\n return Object.entries(servers)\n .flatMap(([serverId, server]) => {\n if (!isManagedConnectorServer(server)) {\n return [];\n }\n const connectorId = server.xopcConnector.connectorId;\n const definition = getConnectorDefinition(connectorId);\n return [\n {\n instanceId: serverId,\n connectorId,\n displayName: definition?.displayName ?? connectorId,\n enabled: true,\n status: 'installed' as const,\n secretStatus: secretStatusForServer(server),\n materialized: {\n type: 'mcp' as const,\n serverId,\n },\n usage: getConnectorUsageFromMarker(server.xopcConnector),\n audit: getConnectorAuditFromMarker(server.xopcConnector),\n },\n ];\n })\n .sort((left, right) => left.displayName.localeCompare(right.displayName));\n}\n\nexport function getConnectorInstance(config: Config, instanceId: string): ConnectorInstance | undefined {\n return listConnectorInstances(config).find((instance) => instance.instanceId === instanceId);\n}\n"],"mappings":";;;;AAMA,SAAS,sBAAsB,QAA0D;CACvF,MAAM,SAAS,OAAO;CACtB,MAAM,aAAa,QAAQ,cAAc,uBAAuB,OAAO,YAAY,GAAG,KAAA;CACtF,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,OAAO,IAAI,GACjF,OAAO,MACR,EAAE;CACN,MAAM,SAAkC,EAAE;AAC1C,MAAK,MAAM,UAAU,YAAY,MAAM,WAAW,EAAE,EAAE;EACpD,MAAM,QAAQ,IAAI,OAAO;AACzB,SAAO,OAAO,OAAO,QACnB,SACE,OAAO,UAAU,YACjB,CAAC,MAAM,QAAQ,MAAM,IACrB,mBAAmB,MACtB;;AAEH,QAAO;;AAGT,SAAgB,uBAAuB,QAAqC;CAC1E,MAAM,UAAU,OAAO,KAAK,WAAW,EAAE;AACzC,QAAO,OAAO,QAAQ,QAAQ,CAC3B,SAAS,CAAC,UAAU,YAAY;AAC/B,MAAI,CAAC,yBAAyB,OAAO,CACnC,QAAO,EAAE;EAEX,MAAM,cAAc,OAAO,cAAc;AAEzC,SAAO,CACL;GACE,YAAY;GACZ;GACA,aALe,uBAAuB,YAKf,EAAE,eAAe;GACxC,SAAS;GACT,QAAQ;GACR,cAAc,sBAAsB,OAAO;GAC3C,cAAc;IACZ,MAAM;IACN;IACD;GACD,OAAO,4BAA4B,OAAO,cAAc;GACxD,OAAO,4BAA4B,OAAO,cAAc;GACzD,CACF;GACD,CACD,MAAM,MAAM,UAAU,KAAK,YAAY,cAAc,MAAM,YAAY,CAAC;;AAG7E,SAAgB,qBAAqB,QAAgB,YAAmD;AACtG,QAAO,uBAAuB,OAAO,CAAC,MAAM,aAAa,SAAS,eAAe,WAAW"}
1
+ {"version":3,"file":"instances.js","names":[],"sources":["../../../src/connectors/instances.ts"],"sourcesContent":["import type { Config } from '../config/schema.js';\nimport { getConnectorDefinition } from './catalog.js';\nimport { isManagedConnectorServer } from './materialize.js';\nimport { getConnectorAuditFromMarker, getConnectorUsageFromMarker } from './usage.js';\nimport type { ConnectorInstance } from './types.js';\n\nfunction secretStatusForServer(server: Record<string, unknown>): Record<string, boolean> {\n const marker = server.xopcConnector as { connectorId?: string } | undefined;\n const definition = marker?.connectorId ? getConnectorDefinition(marker.connectorId) : undefined;\n const env = server.env && typeof server.env === 'object' && !Array.isArray(server.env)\n ? (server.env as Record<string, unknown>)\n : {};\n const status: Record<string, boolean> = {};\n for (const secret of definition?.setup.secrets ?? []) {\n const value = env[secret.key];\n status[secret.key] = Boolean(\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n 'xopcSecretRef' in value,\n );\n }\n return status;\n}\n\nfunction connectorInstanceFromRecord(instanceId: string, record: Record<string, unknown>): ConnectorInstance[] {\n const marker = record.xopcConnector;\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) return [];\n const markerRecord = marker as Record<string, unknown>;\n if (markerRecord.managed !== true || typeof markerRecord.connectorId !== 'string') return [];\n const connectorId = markerRecord.connectorId;\n const definition = getConnectorDefinition(connectorId);\n const runtime = record.runtime && typeof record.runtime === 'object' && !Array.isArray(record.runtime)\n ? record.runtime as Record<string, unknown>\n : {};\n const runtimeType = typeof runtime.type === 'string' ? runtime.type : 'composio';\n const enabled = markerRecord.enabled !== false;\n return [{\n instanceId,\n connectorId,\n displayName: definition?.displayName ?? (typeof markerRecord.displayName === 'string' ? markerRecord.displayName : connectorId),\n enabled,\n status: enabled ? 'installed' : 'disabled',\n connectionStatus: enabled ? 'unknown' : 'disabled',\n authStatus: definition?.auth.mode === 'none' ? 'none' : 'unknown',\n lastConnectedAt: typeof markerRecord.lastConnectedAt === 'string' ? markerRecord.lastConnectedAt : undefined,\n lastError: typeof markerRecord.lastError === 'string' ? markerRecord.lastError : undefined,\n secretStatus: {},\n materialized: runtimeType === 'composio'\n ? { type: 'composio', id: instanceId }\n : runtimeType === 'channel'\n ? { type: 'channel', id: instanceId }\n : runtimeType === 'nativeTool'\n ? { type: 'nativeTool', id: instanceId }\n : { type: 'memorySource', id: instanceId },\n usage: getConnectorUsageFromMarker(marker),\n audit: getConnectorAuditFromMarker(marker),\n }];\n}\n\nexport function listConnectorInstances(config: Config): ConnectorInstance[] {\n const servers = config.mcp?.servers ?? {};\n const mcpInstances = Object.entries(servers)\n .flatMap(([serverId, server]) => {\n if (!isManagedConnectorServer(server)) {\n return [];\n }\n const connectorId = server.xopcConnector.connectorId;\n const definition = getConnectorDefinition(connectorId);\n const enabled = server.xopcConnector.enabled !== false;\n const usage = getConnectorUsageFromMarker(server.xopcConnector);\n const lastHealthStatus = usage.lastHealthStatus;\n const connectionStatus: ConnectorInstance['connectionStatus'] = !enabled\n ? 'disabled'\n : lastHealthStatus === 'ok'\n ? 'connected'\n : lastHealthStatus === 'unauthorized'\n ? 'unauthorized'\n : lastHealthStatus\n ? 'error'\n : 'unknown';\n const authStatus: ConnectorInstance['authStatus'] = definition?.auth.mode === 'none'\n ? 'none'\n : lastHealthStatus === 'missing_secret'\n ? 'missing'\n : lastHealthStatus === 'unauthorized'\n ? 'unauthorized'\n : 'unknown';\n const status: ConnectorInstance['status'] = enabled ? (lastHealthStatus === 'ok' ? 'connected' : 'installed') : 'disabled';\n return [\n {\n instanceId: serverId,\n connectorId,\n displayName: definition?.displayName ?? server.xopcConnector.displayName ?? connectorId,\n enabled,\n status,\n connectionStatus,\n authStatus,\n lastConnectedAt: server.xopcConnector.lastConnectedAt,\n lastError: server.xopcConnector.lastError,\n secretStatus: secretStatusForServer(server),\n materialized: {\n type: 'mcp' as const,\n serverId,\n },\n usage,\n audit: getConnectorAuditFromMarker(server.xopcConnector),\n },\n ];\n });\n const genericInstances = Object.entries(config.connectors?.instances ?? {})\n .flatMap(([instanceId, record]) => (\n record && typeof record === 'object' && !Array.isArray(record)\n ? connectorInstanceFromRecord(instanceId, record as Record<string, unknown>)\n : []\n ));\n return [...mcpInstances, ...genericInstances]\n .sort((left, right) => left.displayName.localeCompare(right.displayName));\n}\n\nexport function getConnectorInstance(config: Config, instanceId: string): ConnectorInstance | undefined {\n return listConnectorInstances(config).find((instance) => instance.instanceId === instanceId);\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Config } from '../config/schema.js';
2
+ import type { ConnectorInstance } from './types.js';
3
+ export declare function setConnectorEnabled(config: Config, instanceId: string, enabled: boolean): ConnectorInstance;
@@ -0,0 +1,23 @@
1
+ import { isManagedConnectorServer } from "./materialize.js";
2
+ import { getConnectorInstance } from "./instances.js";
3
+ //#region src/connectors/lifecycle.ts
4
+ function setConnectorEnabled(config, instanceId, enabled) {
5
+ const server = config.mcp?.servers?.[instanceId];
6
+ const connectorRecord = config.connectors?.instances?.[instanceId];
7
+ if (!server && !connectorRecord) throw new Error(`Connector instance not found: ${instanceId}`);
8
+ if (server) {
9
+ if (!isManagedConnectorServer(server)) throw new Error(`MCP server "${instanceId}" is not managed by Connectors.`);
10
+ server.xopcConnector.enabled = enabled;
11
+ } else if (connectorRecord && typeof connectorRecord === "object" && !Array.isArray(connectorRecord)) {
12
+ const marker = connectorRecord.xopcConnector;
13
+ if (!marker || typeof marker !== "object" || Array.isArray(marker)) throw new Error(`Connector instance "${instanceId}" is not managed by Connectors.`);
14
+ marker.enabled = enabled;
15
+ }
16
+ const instance = getConnectorInstance(config, instanceId);
17
+ if (!instance) throw new Error(`Connector instance not found: ${instanceId}`);
18
+ return instance;
19
+ }
20
+ //#endregion
21
+ export { setConnectorEnabled };
22
+
23
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","names":[],"sources":["../../../src/connectors/lifecycle.ts"],"sourcesContent":["import type { Config } from '../config/schema.js';\nimport { isManagedConnectorServer } from './materialize.js';\nimport type { ConnectorInstance } from './types.js';\nimport { getConnectorInstance } from './instances.js';\n\nexport function setConnectorEnabled(config: Config, instanceId: string, enabled: boolean): ConnectorInstance {\n const server = config.mcp?.servers?.[instanceId];\n const connectorRecord = config.connectors?.instances?.[instanceId];\n if (!server && !connectorRecord) {\n throw new Error(`Connector instance not found: ${instanceId}`);\n }\n if (server) {\n if (!isManagedConnectorServer(server)) {\n throw new Error(`MCP server \"${instanceId}\" is not managed by Connectors.`);\n }\n server.xopcConnector.enabled = enabled;\n } else if (connectorRecord && typeof connectorRecord === 'object' && !Array.isArray(connectorRecord)) {\n const marker = (connectorRecord as Record<string, unknown>).xopcConnector;\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) {\n throw new Error(`Connector instance \"${instanceId}\" is not managed by Connectors.`);\n }\n (marker as Record<string, unknown>).enabled = enabled;\n }\n const instance = getConnectorInstance(config, instanceId);\n if (!instance) {\n throw new Error(`Connector instance not found: ${instanceId}`);\n }\n return instance;\n}\n"],"mappings":";;;AAKA,SAAgB,oBAAoB,QAAgB,YAAoB,SAAqC;CAC3G,MAAM,SAAS,OAAO,KAAK,UAAU;CACrC,MAAM,kBAAkB,OAAO,YAAY,YAAY;AACvD,KAAI,CAAC,UAAU,CAAC,gBACd,OAAM,IAAI,MAAM,iCAAiC,aAAa;AAEhE,KAAI,QAAQ;AACV,MAAI,CAAC,yBAAyB,OAAO,CACnC,OAAM,IAAI,MAAM,eAAe,WAAW,iCAAiC;AAE7E,SAAO,cAAc,UAAU;YACtB,mBAAmB,OAAO,oBAAoB,YAAY,CAAC,MAAM,QAAQ,gBAAgB,EAAE;EACpG,MAAM,SAAU,gBAA4C;AAC5D,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CAChE,OAAM,IAAI,MAAM,uBAAuB,WAAW,iCAAiC;AAEpF,SAAmC,UAAU;;CAEhD,MAAM,WAAW,qBAAqB,QAAQ,WAAW;AACzD,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,iCAAiC,aAAa;AAEhE,QAAO"}
@@ -52,7 +52,8 @@ function materializeConnectorMcpServer(definition, input) {
52
52
  const marker = {
53
53
  managed: true,
54
54
  connectorId: definition.id,
55
- version: definition.version
55
+ version: definition.version,
56
+ displayName: definition.displayName
56
57
  };
57
58
  const server = {
58
59
  ...rawServer,
@@ -1 +1 @@
1
- {"version":3,"file":"materialize.js","names":[],"sources":["../../../src/connectors/materialize.ts"],"sourcesContent":["import { McpServerSchema } from '../config/schema.js';\nimport { createConnectorSecretReference } from './secret-store.js';\nimport type { ConnectorDefinition, ConnectorInstallInput, ManagedConnectorMarker } from './types.js';\n\nconst SERVER_ID_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/;\nconst TEMPLATE_PATTERN = /^\\{\\{(secrets|config)\\.([A-Za-z0-9_.-]+)\\}\\}$/;\n\nexport function assertValidConnectorServerId(serverId: string): void {\n if (!SERVER_ID_PATTERN.test(serverId)) {\n throw new Error('Connector server name must start with a lowercase letter and only contain lowercase letters, numbers, dashes, and underscores.');\n }\n}\n\nfunction readInputValue(\n definition: ConnectorDefinition,\n input: ConnectorInstallInput,\n scope: 'secrets' | 'config',\n key: string,\n): unknown {\n if (scope === 'secrets') {\n return createConnectorSecretReference(definition.id, key);\n }\n return input.config?.[key];\n}\n\nfunction resolveTemplateValue(value: unknown, definition: ConnectorDefinition, input: ConnectorInstallInput): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n const match = TEMPLATE_PATTERN.exec(value.trim());\n if (!match) {\n return value;\n }\n return readInputValue(definition, input, match[1] as 'secrets' | 'config', match[2]);\n}\n\nfunction materializeTemplate(value: unknown, definition: ConnectorDefinition, input: ConnectorInstallInput): unknown {\n const resolved = resolveTemplateValue(value, definition, input);\n if (Array.isArray(resolved)) {\n return resolved.map((item) => materializeTemplate(item, definition, input));\n }\n if (resolved && typeof resolved === 'object') {\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(resolved as Record<string, unknown>)) {\n const materializedChild = materializeTemplate(child, definition, input);\n if (materializedChild !== undefined) {\n output[key] = materializedChild;\n }\n }\n return output;\n }\n return resolved;\n}\n\nfunction assertRequiredInputs(definition: ConnectorDefinition, input: ConnectorInstallInput): void {\n for (const secret of definition.setup.secrets ?? []) {\n const value = input.secrets?.[secret.key];\n if (secret.required && (typeof value !== 'string' || value.trim().length === 0)) {\n throw new Error(`Missing required secret: ${secret.key}`);\n }\n }\n for (const field of definition.setup.config ?? []) {\n const value = input.config?.[field.key];\n if (field.required && (value === undefined || value === null || value === '')) {\n throw new Error(`Missing required config: ${field.key}`);\n }\n }\n}\n\nexport function materializeConnectorMcpServer(\n definition: ConnectorDefinition,\n input: ConnectorInstallInput,\n): { serverId: string; server: Record<string, unknown> } {\n assertRequiredInputs(definition, input);\n if (definition.runtime.type !== 'mcp') {\n throw new Error(`Unsupported connector runtime: ${definition.runtime.type}`);\n }\n\n const rawServerId = materializeTemplate(definition.runtime.serverId, definition, input);\n if (typeof rawServerId !== 'string') {\n throw new Error('Connector server name must be a string.');\n }\n const serverId = rawServerId.trim();\n assertValidConnectorServerId(serverId);\n\n const rawServer = materializeTemplate(definition.runtime.serverTemplate, definition, input);\n if (!rawServer || typeof rawServer !== 'object' || Array.isArray(rawServer)) {\n throw new Error('Connector MCP server template must resolve to a JSON object.');\n }\n\n const marker: ManagedConnectorMarker = {\n managed: true,\n connectorId: definition.id,\n version: definition.version,\n };\n const server = {\n ...(rawServer as Record<string, unknown>),\n xopcConnector: marker,\n };\n const parsed = McpServerSchema.safeParse(server);\n if (!parsed.success) {\n throw new Error(parsed.error.issues[0]?.message ?? 'Invalid MCP server config.');\n }\n return { serverId, server };\n}\n\nexport function isManagedConnectorServer(server: unknown): server is Record<string, unknown> & { xopcConnector: ManagedConnectorMarker } {\n if (!server || typeof server !== 'object' || Array.isArray(server)) {\n return false;\n }\n const marker = (server as Record<string, unknown>).xopcConnector;\n return Boolean(\n marker &&\n typeof marker === 'object' &&\n !Array.isArray(marker) &&\n (marker as Record<string, unknown>).managed === true &&\n typeof (marker as Record<string, unknown>).connectorId === 'string',\n );\n}\n"],"mappings":";;;aAAsD;AAItD,MAAM,oBAAoB;AAC1B,MAAM,mBAAmB;AAEzB,SAAgB,6BAA6B,UAAwB;AACnE,KAAI,CAAC,kBAAkB,KAAK,SAAS,CACnC,OAAM,IAAI,MAAM,iIAAiI;;AAIrJ,SAAS,eACP,YACA,OACA,OACA,KACS;AACT,KAAI,UAAU,UACZ,QAAO,+BAA+B,WAAW,IAAI,IAAI;AAE3D,QAAO,MAAM,SAAS;;AAGxB,SAAS,qBAAqB,OAAgB,YAAiC,OAAuC;AACpH,KAAI,OAAO,UAAU,SACnB,QAAO;CAET,MAAM,QAAQ,iBAAiB,KAAK,MAAM,MAAM,CAAC;AACjD,KAAI,CAAC,MACH,QAAO;AAET,QAAO,eAAe,YAAY,OAAO,MAAM,IAA4B,MAAM,GAAG;;AAGtF,SAAS,oBAAoB,OAAgB,YAAiC,OAAuC;CACnH,MAAM,WAAW,qBAAqB,OAAO,YAAY,MAAM;AAC/D,KAAI,MAAM,QAAQ,SAAS,CACzB,QAAO,SAAS,KAAK,SAAS,oBAAoB,MAAM,YAAY,MAAM,CAAC;AAE7E,KAAI,YAAY,OAAO,aAAa,UAAU;EAC5C,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,SAAoC,EAAE;GAC9E,MAAM,oBAAoB,oBAAoB,OAAO,YAAY,MAAM;AACvE,OAAI,sBAAsB,KAAA,EACxB,QAAO,OAAO;;AAGlB,SAAO;;AAET,QAAO;;AAGT,SAAS,qBAAqB,YAAiC,OAAoC;AACjG,MAAK,MAAM,UAAU,WAAW,MAAM,WAAW,EAAE,EAAE;EACnD,MAAM,QAAQ,MAAM,UAAU,OAAO;AACrC,MAAI,OAAO,aAAa,OAAO,UAAU,YAAY,MAAM,MAAM,CAAC,WAAW,GAC3E,OAAM,IAAI,MAAM,4BAA4B,OAAO,MAAM;;AAG7D,MAAK,MAAM,SAAS,WAAW,MAAM,UAAU,EAAE,EAAE;EACjD,MAAM,QAAQ,MAAM,SAAS,MAAM;AACnC,MAAI,MAAM,aAAa,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU,IACxE,OAAM,IAAI,MAAM,4BAA4B,MAAM,MAAM;;;AAK9D,SAAgB,8BACd,YACA,OACuD;AACvD,sBAAqB,YAAY,MAAM;AACvC,KAAI,WAAW,QAAQ,SAAS,MAC9B,OAAM,IAAI,MAAM,kCAAkC,WAAW,QAAQ,OAAO;CAG9E,MAAM,cAAc,oBAAoB,WAAW,QAAQ,UAAU,YAAY,MAAM;AACvF,KAAI,OAAO,gBAAgB,SACzB,OAAM,IAAI,MAAM,0CAA0C;CAE5D,MAAM,WAAW,YAAY,MAAM;AACnC,8BAA6B,SAAS;CAEtC,MAAM,YAAY,oBAAoB,WAAW,QAAQ,gBAAgB,YAAY,MAAM;AAC3F,KAAI,CAAC,aAAa,OAAO,cAAc,YAAY,MAAM,QAAQ,UAAU,CACzE,OAAM,IAAI,MAAM,+DAA+D;CAGjF,MAAM,SAAiC;EACrC,SAAS;EACT,aAAa,WAAW;EACxB,SAAS,WAAW;EACrB;CACD,MAAM,SAAS;EACb,GAAI;EACJ,eAAe;EAChB;CACD,MAAM,SAAS,gBAAgB,UAAU,OAAO;AAChD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,MAAM,OAAO,IAAI,WAAW,6BAA6B;AAElF,QAAO;EAAE;EAAU;EAAQ;;AAG7B,SAAgB,yBAAyB,QAAgG;AACvI,KAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CAChE,QAAO;CAET,MAAM,SAAU,OAAmC;AACnD,QAAO,QACL,UACE,OAAO,WAAW,YAClB,CAAC,MAAM,QAAQ,OAAO,IACrB,OAAmC,YAAY,QAChD,OAAQ,OAAmC,gBAAgB,SAC9D"}
1
+ {"version":3,"file":"materialize.js","names":[],"sources":["../../../src/connectors/materialize.ts"],"sourcesContent":["import { McpServerSchema } from '../config/schema.js';\nimport { createConnectorSecretReference } from './secret-store.js';\nimport type { ConnectorDefinition, ConnectorInstallInput, ManagedConnectorMarker } from './types.js';\n\nconst SERVER_ID_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/;\nconst TEMPLATE_PATTERN = /^\\{\\{(secrets|config)\\.([A-Za-z0-9_.-]+)\\}\\}$/;\n\nexport function assertValidConnectorServerId(serverId: string): void {\n if (!SERVER_ID_PATTERN.test(serverId)) {\n throw new Error('Connector server name must start with a lowercase letter and only contain lowercase letters, numbers, dashes, and underscores.');\n }\n}\n\nfunction readInputValue(\n definition: ConnectorDefinition,\n input: ConnectorInstallInput,\n scope: 'secrets' | 'config',\n key: string,\n): unknown {\n if (scope === 'secrets') {\n return createConnectorSecretReference(definition.id, key);\n }\n return input.config?.[key];\n}\n\nfunction resolveTemplateValue(value: unknown, definition: ConnectorDefinition, input: ConnectorInstallInput): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n const match = TEMPLATE_PATTERN.exec(value.trim());\n if (!match) {\n return value;\n }\n return readInputValue(definition, input, match[1] as 'secrets' | 'config', match[2]);\n}\n\nfunction materializeTemplate(value: unknown, definition: ConnectorDefinition, input: ConnectorInstallInput): unknown {\n const resolved = resolveTemplateValue(value, definition, input);\n if (Array.isArray(resolved)) {\n return resolved.map((item) => materializeTemplate(item, definition, input));\n }\n if (resolved && typeof resolved === 'object') {\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(resolved as Record<string, unknown>)) {\n const materializedChild = materializeTemplate(child, definition, input);\n if (materializedChild !== undefined) {\n output[key] = materializedChild;\n }\n }\n return output;\n }\n return resolved;\n}\n\nfunction assertRequiredInputs(definition: ConnectorDefinition, input: ConnectorInstallInput): void {\n for (const secret of definition.setup.secrets ?? []) {\n const value = input.secrets?.[secret.key];\n if (secret.required && (typeof value !== 'string' || value.trim().length === 0)) {\n throw new Error(`Missing required secret: ${secret.key}`);\n }\n }\n for (const field of definition.setup.config ?? []) {\n const value = input.config?.[field.key];\n if (field.required && (value === undefined || value === null || value === '')) {\n throw new Error(`Missing required config: ${field.key}`);\n }\n }\n}\n\nexport function materializeConnectorMcpServer(\n definition: ConnectorDefinition,\n input: ConnectorInstallInput,\n): { serverId: string; server: Record<string, unknown> } {\n assertRequiredInputs(definition, input);\n if (definition.runtime.type !== 'mcp') {\n throw new Error(`Unsupported connector runtime: ${definition.runtime.type}`);\n }\n\n const rawServerId = materializeTemplate(definition.runtime.serverId, definition, input);\n if (typeof rawServerId !== 'string') {\n throw new Error('Connector server name must be a string.');\n }\n const serverId = rawServerId.trim();\n assertValidConnectorServerId(serverId);\n\n const rawServer = materializeTemplate(definition.runtime.serverTemplate, definition, input);\n if (!rawServer || typeof rawServer !== 'object' || Array.isArray(rawServer)) {\n throw new Error('Connector MCP server template must resolve to a JSON object.');\n }\n\n const marker: ManagedConnectorMarker = {\n managed: true,\n connectorId: definition.id,\n version: definition.version,\n displayName: definition.displayName,\n };\n const server = {\n ...(rawServer as Record<string, unknown>),\n xopcConnector: marker,\n };\n const parsed = McpServerSchema.safeParse(server);\n if (!parsed.success) {\n throw new Error(parsed.error.issues[0]?.message ?? 'Invalid MCP server config.');\n }\n return { serverId, server };\n}\n\nexport function isManagedConnectorServer(server: unknown): server is Record<string, unknown> & { xopcConnector: ManagedConnectorMarker } {\n if (!server || typeof server !== 'object' || Array.isArray(server)) {\n return false;\n }\n const marker = (server as Record<string, unknown>).xopcConnector;\n return Boolean(\n marker &&\n typeof marker === 'object' &&\n !Array.isArray(marker) &&\n (marker as Record<string, unknown>).managed === true &&\n typeof (marker as Record<string, unknown>).connectorId === 'string',\n );\n}\n"],"mappings":"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"}
@@ -5,5 +5,6 @@ export type ConnectorProvider = {
5
5
  listConnectors(): readonly ConnectorDefinition[];
6
6
  };
7
7
  export declare const builtinConnectorProvider: ConnectorProvider;
8
+ export declare const composioConnectorProvider: ConnectorProvider;
8
9
  export declare function listConnectorProviders(): ConnectorProvider[];
9
10
  export declare function listConnectorProviderDefinitions(): ConnectorDefinition[];
@@ -1,3 +1,4 @@
1
+ import { COMPOSIO_CONNECTORS } from "./composio.js";
1
2
  import { BUILTIN_CONNECTORS } from "./builtin-catalog.js";
2
3
  //#region src/connectors/providers.ts
3
4
  const builtinConnectorProvider = {
@@ -7,7 +8,14 @@ const builtinConnectorProvider = {
7
8
  return BUILTIN_CONNECTORS;
8
9
  }
9
10
  };
10
- const CONNECTOR_PROVIDERS = [builtinConnectorProvider];
11
+ const composioConnectorProvider = {
12
+ id: "composio",
13
+ displayName: "Composio connectors",
14
+ listConnectors() {
15
+ return COMPOSIO_CONNECTORS;
16
+ }
17
+ };
18
+ const CONNECTOR_PROVIDERS = [builtinConnectorProvider, composioConnectorProvider];
11
19
  function listConnectorProviders() {
12
20
  return [...CONNECTOR_PROVIDERS];
13
21
  }
@@ -15,6 +23,6 @@ function listConnectorProviderDefinitions() {
15
23
  return CONNECTOR_PROVIDERS.flatMap((provider) => provider.listConnectors());
16
24
  }
17
25
  //#endregion
18
- export { builtinConnectorProvider, listConnectorProviderDefinitions, listConnectorProviders };
26
+ export { builtinConnectorProvider, composioConnectorProvider, listConnectorProviderDefinitions, listConnectorProviders };
19
27
 
20
28
  //# sourceMappingURL=providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","names":[],"sources":["../../../src/connectors/providers.ts"],"sourcesContent":["import { BUILTIN_CONNECTORS } from './builtin-catalog.js';\nimport type { ConnectorDefinition } from './types.js';\n\nexport type ConnectorProvider = {\n id: string;\n displayName: string;\n listConnectors(): readonly ConnectorDefinition[];\n};\n\nexport const builtinConnectorProvider: ConnectorProvider = {\n id: 'builtin',\n displayName: 'Built-in connectors',\n listConnectors() {\n return BUILTIN_CONNECTORS;\n },\n};\n\nconst CONNECTOR_PROVIDERS: readonly ConnectorProvider[] = [builtinConnectorProvider];\n\nexport function listConnectorProviders(): ConnectorProvider[] {\n return [...CONNECTOR_PROVIDERS];\n}\n\nexport function listConnectorProviderDefinitions(): ConnectorDefinition[] {\n return CONNECTOR_PROVIDERS.flatMap((provider) => provider.listConnectors());\n}\n"],"mappings":";;AASA,MAAa,2BAA8C;CACzD,IAAI;CACJ,aAAa;CACb,iBAAiB;AACf,SAAO;;CAEV;AAED,MAAM,sBAAoD,CAAC,yBAAyB;AAEpF,SAAgB,yBAA8C;AAC5D,QAAO,CAAC,GAAG,oBAAoB;;AAGjC,SAAgB,mCAA0D;AACxE,QAAO,oBAAoB,SAAS,aAAa,SAAS,gBAAgB,CAAC"}
1
+ {"version":3,"file":"providers.js","names":[],"sources":["../../../src/connectors/providers.ts"],"sourcesContent":["import { BUILTIN_CONNECTORS } from './builtin-catalog.js';\nimport { COMPOSIO_CONNECTORS } from './composio.js';\nimport type { ConnectorDefinition } from './types.js';\n\nexport type ConnectorProvider = {\n id: string;\n displayName: string;\n listConnectors(): readonly ConnectorDefinition[];\n};\n\nexport const builtinConnectorProvider: ConnectorProvider = {\n id: 'builtin',\n displayName: 'Built-in connectors',\n listConnectors() {\n return BUILTIN_CONNECTORS;\n },\n};\n\nexport const composioConnectorProvider: ConnectorProvider = {\n id: 'composio',\n displayName: 'Composio connectors',\n listConnectors() {\n return COMPOSIO_CONNECTORS;\n },\n};\n\nconst CONNECTOR_PROVIDERS: readonly ConnectorProvider[] = [builtinConnectorProvider, composioConnectorProvider];\n\nexport function listConnectorProviders(): ConnectorProvider[] {\n return [...CONNECTOR_PROVIDERS];\n}\n\nexport function listConnectorProviderDefinitions(): ConnectorDefinition[] {\n return CONNECTOR_PROVIDERS.flatMap((provider) => provider.listConnectors());\n}\n"],"mappings":";;;AAUA,MAAa,2BAA8C;CACzD,IAAI;CACJ,aAAa;CACb,iBAAiB;AACf,SAAO;;CAEV;AAED,MAAa,4BAA+C;CAC1D,IAAI;CACJ,aAAa;CACb,iBAAiB;AACf,SAAO;;CAEV;AAED,MAAM,sBAAoD,CAAC,0BAA0B,0BAA0B;AAE/G,SAAgB,yBAA8C;AAC5D,QAAO,CAAC,GAAG,oBAAoB;;AAGjC,SAAgB,mCAA0D;AACxE,QAAO,oBAAoB,SAAS,aAAa,SAAS,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorRegistryAdapter } from './types.js';
2
+ export declare const modelscopeRegistryAdapter: ConnectorRegistryAdapter;
@@ -0,0 +1,205 @@
1
+ //#region src/connectors/registries/modelscope.ts
2
+ const DEFAULT_BASE_URL = "https://www.modelscope.cn";
3
+ function modelscopeBaseUrl() {
4
+ return process.env.XOPC_MODELSCOPE_REGISTRY_URL?.trim().replace(/\/+$/, "") || DEFAULT_BASE_URL;
5
+ }
6
+ function readString(value) {
7
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
8
+ }
9
+ function readArray(value) {
10
+ return Array.isArray(value) ? value : [];
11
+ }
12
+ function readRecord(value) {
13
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
14
+ }
15
+ function slugFrom(value) {
16
+ return value.trim().toLowerCase().replace(/^@/, "").replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 64) || "modelscope-mcp";
17
+ }
18
+ function categoryFromModelScope(categories) {
19
+ const text = readArray(categories).map((item) => readString(item)).filter(Boolean).join(" ").toLowerCase();
20
+ if (text.includes("browser")) return "browser";
21
+ if (text.includes("automation")) return "automation";
22
+ if (text.includes("database") || text.includes("data")) return "data";
23
+ if (text.includes("code") || text.includes("developer")) return "code";
24
+ if (text.includes("docs") || text.includes("knowledge")) return "docs";
25
+ return "custom";
26
+ }
27
+ function secretFieldsFromEnvSchema(schema) {
28
+ const record = readRecord(schema);
29
+ const properties = readRecord(record?.properties);
30
+ if (!properties) return [];
31
+ const required = new Set(readArray(record?.required).map((item) => readString(item)).filter((item) => Boolean(item)));
32
+ return Object.entries(properties).map(([key, value]) => {
33
+ return {
34
+ key,
35
+ label: key,
36
+ description: readString(readRecord(value)?.description),
37
+ required: required.size === 0 ? true : required.has(key)
38
+ };
39
+ });
40
+ }
41
+ function firstMcpServerConfig(server) {
42
+ for (const config of readArray(server.ServerConfig ?? server.serverConfig)) {
43
+ const mcpServers = readRecord(readRecord(config)?.mcpServers);
44
+ if (!mcpServers) continue;
45
+ for (const value of Object.values(mcpServers)) {
46
+ const serverConfig = readRecord(value);
47
+ if (serverConfig && readString(serverConfig.command)) return serverConfig;
48
+ }
49
+ }
50
+ }
51
+ function secretFieldsFromServerConfig(server) {
52
+ const env = readRecord(firstMcpServerConfig(server)?.env);
53
+ if (!env) return [];
54
+ return Object.keys(env).map((key) => ({
55
+ key,
56
+ label: key,
57
+ description: `Environment variable required by the ModelScope MCP server config.`,
58
+ required: true
59
+ }));
60
+ }
61
+ function mergeSecretFields(...groups) {
62
+ const merged = /* @__PURE__ */ new Map();
63
+ for (const group of groups) for (const field of group) {
64
+ const previous = merged.get(field.key);
65
+ merged.set(field.key, {
66
+ ...field,
67
+ description: previous?.description ?? field.description,
68
+ required: previous?.required ?? field.required
69
+ });
70
+ }
71
+ return [...merged.values()];
72
+ }
73
+ function normalizeEnv(env, secrets) {
74
+ const envRecord = readRecord(env);
75
+ const output = {};
76
+ for (const [key, value] of Object.entries(envRecord ?? {})) output[key] = secrets.some((field) => field.key === key) ? `{{secrets.${key}}}` : value;
77
+ for (const field of secrets) if (output[field.key] === void 0) output[field.key] = `{{secrets.${field.key}}}`;
78
+ return Object.keys(output).length ? output : void 0;
79
+ }
80
+ function normalizeServerTemplate(server, secrets) {
81
+ const deployedUrl = readString(server.DeployedUrl ?? server.deployedUrl);
82
+ if (deployedUrl?.startsWith("http://") || deployedUrl?.startsWith("https://")) return {
83
+ url: deployedUrl,
84
+ transport: readString(server.DeployedUrlTransportType ?? server.deployedUrlTransportType)?.toLowerCase() === "sse" ? "sse" : "streamable-http"
85
+ };
86
+ for (const key of [
87
+ "StreamableHTTPServerConfig",
88
+ "streamableHTTPServerConfig",
89
+ "SSEServerConfig",
90
+ "sseServerConfig"
91
+ ]) {
92
+ const config = readRecord(server[key]);
93
+ const url = readString(config?.url ?? config?.endpoint);
94
+ if (url?.startsWith("http://") || url?.startsWith("https://")) return {
95
+ url,
96
+ transport: key.toLowerCase().includes("sse") ? "sse" : "streamable-http"
97
+ };
98
+ }
99
+ const config = firstMcpServerConfig(server);
100
+ const command = readString(config?.command);
101
+ if (!command) return void 0;
102
+ const args = readArray(config?.args).map((arg) => String(arg));
103
+ const env = normalizeEnv(config.env, secrets);
104
+ return {
105
+ command,
106
+ ...args.length ? { args } : {},
107
+ ...env ? { env } : {},
108
+ ...readString(config.cwd) ? { cwd: readString(config.cwd) } : {}
109
+ };
110
+ }
111
+ function connectorFromModelScopeServer(server) {
112
+ const name = readString(server.Name ?? server.name);
113
+ const path = readString(server.Path ?? server.path ?? server.FromSitePath ?? server.fromSitePath);
114
+ const displayName = readString(server.ChineseName ?? server.DisplayName ?? server.displayName) || name;
115
+ if (!name || !displayName) return void 0;
116
+ const serverId = slugFrom(path ? `${path}/${name}` : name);
117
+ const secrets = mergeSecretFields(secretFieldsFromEnvSchema(server.EnvSchema ?? server.envSchema), secretFieldsFromServerConfig(server));
118
+ const serverTemplate = normalizeServerTemplate(server, secrets);
119
+ if (!serverTemplate) return void 0;
120
+ const isRemote = typeof serverTemplate.url === "string";
121
+ const tags = [
122
+ ...readArray(server.Category ?? server.category).map((tag) => readString(tag)).filter((tag) => Boolean(tag)),
123
+ ...readArray(server.Tags ?? server.tags).map((tag) => readString(tag)).filter((tag) => Boolean(tag)),
124
+ "modelscope",
125
+ "registry",
126
+ "mcp"
127
+ ];
128
+ return {
129
+ id: `modelscope-${serverId}`,
130
+ version: readString(server.Version ?? server.version) ?? "registry",
131
+ displayName,
132
+ description: readString(server.Abstract ?? server.AbstractCN ?? server.description) ?? "MCP server from ModelScope MCP registry.",
133
+ category: categoryFromModelScope(server.Category ?? server.category),
134
+ kind: "mcp",
135
+ source: "registry",
136
+ capabilities: isRemote ? [
137
+ "tools",
138
+ "resources",
139
+ "prompts",
140
+ "runtime.mcp.streamableHttp"
141
+ ] : [
142
+ "tools",
143
+ "resources",
144
+ "prompts",
145
+ "runtime.mcp.stdio"
146
+ ],
147
+ tags: Array.from(new Set(tags)).slice(0, 8),
148
+ auth: { mode: secrets.length ? "apiKey" : "none" },
149
+ setup: { secrets: secrets.length ? secrets : void 0 },
150
+ runtime: {
151
+ type: "mcp",
152
+ serverId,
153
+ serverTemplate
154
+ }
155
+ };
156
+ }
157
+ function readNumber(value) {
158
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
159
+ }
160
+ function extractMcpServers(payload) {
161
+ const data = readRecord(readRecord(payload)?.Data);
162
+ const nestedData = readRecord(data?.Data) ?? data;
163
+ const mcp = readRecord(nestedData?.Mcp ?? nestedData?.McpServer ?? nestedData?.mcp);
164
+ return {
165
+ servers: readArray(mcp?.McpServers ?? mcp?.servers ?? mcp?.items).map((item) => readRecord(item)).filter((item) => Boolean(item)),
166
+ total: typeof mcp?.TotalCount === "number" ? mcp.TotalCount : void 0
167
+ };
168
+ }
169
+ async function fetchModelScopeMcp(params) {
170
+ const url = new URL("/api/v1/dolphin/agg", modelscopeBaseUrl());
171
+ const body = {
172
+ PageSize: Math.min(Math.max(params.pageSize ?? 24, 1), 100),
173
+ PageNumber: Math.max(params.page ?? 1, 1),
174
+ Query: params.query?.trim() ?? "",
175
+ Criterion: []
176
+ };
177
+ const response = await fetch(url, {
178
+ method: "PUT",
179
+ headers: {
180
+ Accept: "application/json",
181
+ "Content-Type": "application/json",
182
+ "x-modelscope-accept-language": "zh_CN"
183
+ },
184
+ body: JSON.stringify(body)
185
+ });
186
+ if (!response.ok) throw new Error(`ModelScope registry returned ${response.status}`);
187
+ return response.json();
188
+ }
189
+ const modelscopeRegistryAdapter = {
190
+ source: "modelscope",
191
+ displayName: "ModelScope",
192
+ async search(params) {
193
+ const { servers, total } = extractMcpServers(await fetchModelScopeMcp(params));
194
+ const pageSize = Math.min(Math.max(params.pageSize ?? 24, 1), 100);
195
+ return {
196
+ source: "modelscope",
197
+ connectors: servers.toSorted((a, b) => readNumber(b.CallVolume ?? b.callVolume) - readNumber(a.CallVolume ?? a.callVolume)).map(connectorFromModelScopeServer).filter((item) => Boolean(item)),
198
+ totalPages: total === void 0 ? void 0 : Math.ceil(total / pageSize)
199
+ };
200
+ }
201
+ };
202
+ //#endregion
203
+ export { modelscopeRegistryAdapter };
204
+
205
+ //# sourceMappingURL=modelscope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelscope.js","names":[],"sources":["../../../../src/connectors/registries/modelscope.ts"],"sourcesContent":["import type { ConnectorDefinition, ConnectorSecretField } from '../types.js';\nimport type { ConnectorRegistryAdapter, ConnectorRegistrySearchParams, ConnectorRegistrySearchResult } from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://www.modelscope.cn';\n\nfunction modelscopeBaseUrl(): string {\n return process.env.XOPC_MODELSCOPE_REGISTRY_URL?.trim().replace(/\\/+$/, '') || DEFAULT_BASE_URL;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction readArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n}\n\nfunction slugFrom(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^@/, '')\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 64) || 'modelscope-mcp';\n}\n\nfunction categoryFromModelScope(categories: unknown): ConnectorDefinition['category'] {\n const text = readArray(categories).map((item) => readString(item)).filter(Boolean).join(' ').toLowerCase();\n if (text.includes('browser')) return 'browser';\n if (text.includes('automation')) return 'automation';\n if (text.includes('database') || text.includes('data')) return 'data';\n if (text.includes('code') || text.includes('developer')) return 'code';\n if (text.includes('docs') || text.includes('knowledge')) return 'docs';\n return 'custom';\n}\n\nfunction secretFieldsFromEnvSchema(schema: unknown): ConnectorSecretField[] {\n const record = readRecord(schema);\n const properties = readRecord(record?.properties);\n if (!properties) return [];\n const required = new Set(readArray(record?.required).map((item) => readString(item)).filter((item): item is string => Boolean(item)));\n return Object.entries(properties).map(([key, value]) => {\n const field = readRecord(value);\n return {\n key,\n label: key,\n description: readString(field?.description),\n required: required.size === 0 ? true : required.has(key),\n } satisfies ConnectorSecretField;\n });\n}\n\nfunction firstMcpServerConfig(server: Record<string, unknown>): Record<string, unknown> | undefined {\n for (const config of readArray(server.ServerConfig ?? server.serverConfig)) {\n const configRecord = readRecord(config);\n const mcpServers = readRecord(configRecord?.mcpServers);\n if (!mcpServers) continue;\n for (const value of Object.values(mcpServers)) {\n const serverConfig = readRecord(value);\n if (serverConfig && readString(serverConfig.command)) return serverConfig;\n }\n }\n return undefined;\n}\n\nfunction secretFieldsFromServerConfig(server: Record<string, unknown>): ConnectorSecretField[] {\n const config = firstMcpServerConfig(server);\n const env = readRecord(config?.env);\n if (!env) return [];\n return Object.keys(env).map((key) => ({\n key,\n label: key,\n description: `Environment variable required by the ModelScope MCP server config.`,\n required: true,\n } satisfies ConnectorSecretField));\n}\n\nfunction mergeSecretFields(...groups: ConnectorSecretField[][]): ConnectorSecretField[] {\n const merged = new Map<string, ConnectorSecretField>();\n for (const group of groups) {\n for (const field of group) {\n const previous = merged.get(field.key);\n merged.set(field.key, {\n ...field,\n description: previous?.description ?? field.description,\n required: previous?.required ?? field.required,\n });\n }\n }\n return [...merged.values()];\n}\n\nfunction normalizeEnv(env: unknown, secrets: ConnectorSecretField[]): Record<string, unknown> | undefined {\n const envRecord = readRecord(env);\n const output: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(envRecord ?? {})) {\n output[key] = secrets.some((field) => field.key === key) ? `{{secrets.${key}}}` : value;\n }\n for (const field of secrets) {\n if (output[field.key] === undefined) output[field.key] = `{{secrets.${field.key}}}`;\n }\n return Object.keys(output).length ? output : undefined;\n}\n\nfunction normalizeServerTemplate(server: Record<string, unknown>, secrets: ConnectorSecretField[]): Record<string, unknown> | undefined {\n const deployedUrl = readString(server.DeployedUrl ?? server.deployedUrl);\n if (deployedUrl?.startsWith('http://') || deployedUrl?.startsWith('https://')) {\n const transport = readString(server.DeployedUrlTransportType ?? server.deployedUrlTransportType)?.toLowerCase();\n return { url: deployedUrl, transport: transport === 'sse' ? 'sse' : 'streamable-http' };\n }\n\n for (const key of ['StreamableHTTPServerConfig', 'streamableHTTPServerConfig', 'SSEServerConfig', 'sseServerConfig']) {\n const config = readRecord(server[key]);\n const url = readString(config?.url ?? config?.endpoint);\n if (url?.startsWith('http://') || url?.startsWith('https://')) {\n return { url, transport: key.toLowerCase().includes('sse') ? 'sse' : 'streamable-http' };\n }\n }\n\n const config = firstMcpServerConfig(server);\n const command = readString(config?.command);\n if (!command) return undefined;\n const args = readArray(config?.args).map((arg) => String(arg));\n const env = normalizeEnv(config.env, secrets);\n return {\n command,\n ...(args.length ? { args } : {}),\n ...(env ? { env } : {}),\n ...(readString(config.cwd) ? { cwd: readString(config.cwd) } : {}),\n };\n}\n\nfunction connectorFromModelScopeServer(server: Record<string, unknown>): ConnectorDefinition | undefined {\n const name = readString(server.Name ?? server.name);\n const path = readString(server.Path ?? server.path ?? server.FromSitePath ?? server.fromSitePath);\n const displayName = readString(server.ChineseName ?? server.DisplayName ?? server.displayName) || name;\n if (!name || !displayName) return undefined;\n\n const qualifiedName = path ? `${path}/${name}` : name;\n const serverId = slugFrom(qualifiedName);\n const secrets = mergeSecretFields(\n secretFieldsFromEnvSchema(server.EnvSchema ?? server.envSchema),\n secretFieldsFromServerConfig(server),\n );\n const serverTemplate = normalizeServerTemplate(server, secrets);\n if (!serverTemplate) return undefined;\n\n const isRemote = typeof serverTemplate.url === 'string';\n const tags = [\n ...readArray(server.Category ?? server.category).map((tag) => readString(tag)).filter((tag): tag is string => Boolean(tag)),\n ...readArray(server.Tags ?? server.tags).map((tag) => readString(tag)).filter((tag): tag is string => Boolean(tag)),\n 'modelscope',\n 'registry',\n 'mcp',\n ];\n\n return {\n id: `modelscope-${serverId}`,\n version: readString(server.Version ?? server.version) ?? 'registry',\n displayName,\n description: readString(server.Abstract ?? server.AbstractCN ?? server.description) ?? 'MCP server from ModelScope MCP registry.',\n category: categoryFromModelScope(server.Category ?? server.category),\n kind: 'mcp',\n source: 'registry',\n capabilities: isRemote\n ? ['tools', 'resources', 'prompts', 'runtime.mcp.streamableHttp']\n : ['tools', 'resources', 'prompts', 'runtime.mcp.stdio'],\n tags: Array.from(new Set(tags)).slice(0, 8),\n auth: { mode: secrets.length ? 'apiKey' : 'none' },\n setup: { secrets: secrets.length ? secrets : undefined },\n runtime: {\n type: 'mcp',\n serverId,\n serverTemplate,\n },\n };\n}\n\nfunction readNumber(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction extractMcpServers(payload: unknown): { servers: Record<string, unknown>[]; total?: number } {\n const root = readRecord(payload);\n const data = readRecord(root?.Data);\n const nestedData = readRecord(data?.Data) ?? data;\n const mcp = readRecord(nestedData?.Mcp ?? nestedData?.McpServer ?? nestedData?.mcp);\n const servers = readArray(mcp?.McpServers ?? mcp?.servers ?? mcp?.items)\n .map((item) => readRecord(item))\n .filter((item): item is Record<string, unknown> => Boolean(item));\n const total = typeof mcp?.TotalCount === 'number' ? mcp.TotalCount : undefined;\n return { servers, total };\n}\n\nasync function fetchModelScopeMcp(params: ConnectorRegistrySearchParams): Promise<unknown> {\n const url = new URL('/api/v1/dolphin/agg', modelscopeBaseUrl());\n const body = {\n PageSize: Math.min(Math.max(params.pageSize ?? 24, 1), 100),\n PageNumber: Math.max(params.page ?? 1, 1),\n Query: params.query?.trim() ?? '',\n Criterion: [],\n };\n const response = await fetch(url, {\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'x-modelscope-accept-language': 'zh_CN',\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) throw new Error(`ModelScope registry returned ${response.status}`);\n return response.json();\n}\n\nexport const modelscopeRegistryAdapter: ConnectorRegistryAdapter = {\n source: 'modelscope',\n displayName: 'ModelScope',\n async search(params: ConnectorRegistrySearchParams): Promise<ConnectorRegistrySearchResult> {\n const payload = await fetchModelScopeMcp(params);\n const { servers, total } = extractMcpServers(payload);\n const pageSize = Math.min(Math.max(params.pageSize ?? 24, 1), 100);\n return {\n source: 'modelscope',\n connectors: servers\n .toSorted((a, b) => readNumber(b.CallVolume ?? b.callVolume) - readNumber(a.CallVolume ?? a.callVolume))\n .map(connectorFromModelScopeServer)\n .filter((item): item is ConnectorDefinition => Boolean(item)),\n totalPages: total === undefined ? undefined : Math.ceil(total / pageSize),\n };\n },\n};\n"],"mappings":";AAGA,MAAM,mBAAmB;AAEzB,SAAS,oBAA4B;AACnC,QAAO,QAAQ,IAAI,8BAA8B,MAAM,CAAC,QAAQ,QAAQ,GAAG,IAAI;;AAGjF,SAAS,WAAW,OAAoC;AACtD,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,KAAA;;AAGpE,SAAS,UAAU,OAA2B;AAC5C,QAAO,MAAM,QAAQ,MAAM,GAAG,QAAQ,EAAE;;AAG1C,SAAS,WAAW,OAAqD;AACvE,QAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,GAAG,QAAmC,KAAA;;AAG1G,SAAS,SAAS,OAAuB;AACvC,QAAO,MACJ,MAAM,CACN,aAAa,CACb,QAAQ,MAAM,GAAG,CACjB,QAAQ,iBAAiB,IAAI,CAC7B,QAAQ,YAAY,GAAG,CACvB,MAAM,GAAG,GAAG,IAAI;;AAGrB,SAAS,uBAAuB,YAAsD;CACpF,MAAM,OAAO,UAAU,WAAW,CAAC,KAAK,SAAS,WAAW,KAAK,CAAC,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,aAAa;AAC1G,KAAI,KAAK,SAAS,UAAU,CAAE,QAAO;AACrC,KAAI,KAAK,SAAS,aAAa,CAAE,QAAO;AACxC,KAAI,KAAK,SAAS,WAAW,IAAI,KAAK,SAAS,OAAO,CAAE,QAAO;AAC/D,KAAI,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS,YAAY,CAAE,QAAO;AAChE,KAAI,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS,YAAY,CAAE,QAAO;AAChE,QAAO;;AAGT,SAAS,0BAA0B,QAAyC;CAC1E,MAAM,SAAS,WAAW,OAAO;CACjC,MAAM,aAAa,WAAW,QAAQ,WAAW;AACjD,KAAI,CAAC,WAAY,QAAO,EAAE;CAC1B,MAAM,WAAW,IAAI,IAAI,UAAU,QAAQ,SAAS,CAAC,KAAK,SAAS,WAAW,KAAK,CAAC,CAAC,QAAQ,SAAyB,QAAQ,KAAK,CAAC,CAAC;AACrI,QAAO,OAAO,QAAQ,WAAW,CAAC,KAAK,CAAC,KAAK,WAAW;AAEtD,SAAO;GACL;GACA,OAAO;GACP,aAAa,WAJD,WAAW,MAIM,EAAE,YAAY;GAC3C,UAAU,SAAS,SAAS,IAAI,OAAO,SAAS,IAAI,IAAI;GACzD;GACD;;AAGJ,SAAS,qBAAqB,QAAsE;AAClG,MAAK,MAAM,UAAU,UAAU,OAAO,gBAAgB,OAAO,aAAa,EAAE;EAE1E,MAAM,aAAa,WADE,WAAW,OACU,EAAE,WAAW;AACvD,MAAI,CAAC,WAAY;AACjB,OAAK,MAAM,SAAS,OAAO,OAAO,WAAW,EAAE;GAC7C,MAAM,eAAe,WAAW,MAAM;AACtC,OAAI,gBAAgB,WAAW,aAAa,QAAQ,CAAE,QAAO;;;;AAMnE,SAAS,6BAA6B,QAAyD;CAE7F,MAAM,MAAM,WADG,qBAAqB,OACP,EAAE,IAAI;AACnC,KAAI,CAAC,IAAK,QAAO,EAAE;AACnB,QAAO,OAAO,KAAK,IAAI,CAAC,KAAK,SAAS;EACpC;EACA,OAAO;EACP,aAAa;EACb,UAAU;EACX,EAAiC;;AAGpC,SAAS,kBAAkB,GAAG,QAA0D;CACtF,MAAM,yBAAS,IAAI,KAAmC;AACtD,MAAK,MAAM,SAAS,OAClB,MAAK,MAAM,SAAS,OAAO;EACzB,MAAM,WAAW,OAAO,IAAI,MAAM,IAAI;AACtC,SAAO,IAAI,MAAM,KAAK;GACpB,GAAG;GACH,aAAa,UAAU,eAAe,MAAM;GAC5C,UAAU,UAAU,YAAY,MAAM;GACvC,CAAC;;AAGN,QAAO,CAAC,GAAG,OAAO,QAAQ,CAAC;;AAG7B,SAAS,aAAa,KAAc,SAAsE;CACxG,MAAM,YAAY,WAAW,IAAI;CACjC,MAAM,SAAkC,EAAE;AAC1C,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,aAAa,EAAE,CAAC,CACxD,QAAO,OAAO,QAAQ,MAAM,UAAU,MAAM,QAAQ,IAAI,GAAG,aAAa,IAAI,MAAM;AAEpF,MAAK,MAAM,SAAS,QAClB,KAAI,OAAO,MAAM,SAAS,KAAA,EAAW,QAAO,MAAM,OAAO,aAAa,MAAM,IAAI;AAElF,QAAO,OAAO,KAAK,OAAO,CAAC,SAAS,SAAS,KAAA;;AAG/C,SAAS,wBAAwB,QAAiC,SAAsE;CACtI,MAAM,cAAc,WAAW,OAAO,eAAe,OAAO,YAAY;AACxE,KAAI,aAAa,WAAW,UAAU,IAAI,aAAa,WAAW,WAAW,CAE3E,QAAO;EAAE,KAAK;EAAa,WADT,WAAW,OAAO,4BAA4B,OAAO,yBAAyB,EAAE,aAAa,KAC3D,QAAQ,QAAQ;EAAmB;AAGzF,MAAK,MAAM,OAAO;EAAC;EAA8B;EAA8B;EAAmB;EAAkB,EAAE;EACpH,MAAM,SAAS,WAAW,OAAO,KAAK;EACtC,MAAM,MAAM,WAAW,QAAQ,OAAO,QAAQ,SAAS;AACvD,MAAI,KAAK,WAAW,UAAU,IAAI,KAAK,WAAW,WAAW,CAC3D,QAAO;GAAE;GAAK,WAAW,IAAI,aAAa,CAAC,SAAS,MAAM,GAAG,QAAQ;GAAmB;;CAI5F,MAAM,SAAS,qBAAqB,OAAO;CAC3C,MAAM,UAAU,WAAW,QAAQ,QAAQ;AAC3C,KAAI,CAAC,QAAS,QAAO,KAAA;CACrB,MAAM,OAAO,UAAU,QAAQ,KAAK,CAAC,KAAK,QAAQ,OAAO,IAAI,CAAC;CAC9D,MAAM,MAAM,aAAa,OAAO,KAAK,QAAQ;AAC7C,QAAO;EACL;EACA,GAAI,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE;EAC/B,GAAI,MAAM,EAAE,KAAK,GAAG,EAAE;EACtB,GAAI,WAAW,OAAO,IAAI,GAAG,EAAE,KAAK,WAAW,OAAO,IAAI,EAAE,GAAG,EAAE;EAClE;;AAGH,SAAS,8BAA8B,QAAkE;CACvG,MAAM,OAAO,WAAW,OAAO,QAAQ,OAAO,KAAK;CACnD,MAAM,OAAO,WAAW,OAAO,QAAQ,OAAO,QAAQ,OAAO,gBAAgB,OAAO,aAAa;CACjG,MAAM,cAAc,WAAW,OAAO,eAAe,OAAO,eAAe,OAAO,YAAY,IAAI;AAClG,KAAI,CAAC,QAAQ,CAAC,YAAa,QAAO,KAAA;CAGlC,MAAM,WAAW,SADK,OAAO,GAAG,KAAK,GAAG,SAAS,KACT;CACxC,MAAM,UAAU,kBACd,0BAA0B,OAAO,aAAa,OAAO,UAAU,EAC/D,6BAA6B,OAAO,CACrC;CACD,MAAM,iBAAiB,wBAAwB,QAAQ,QAAQ;AAC/D,KAAI,CAAC,eAAgB,QAAO,KAAA;CAE5B,MAAM,WAAW,OAAO,eAAe,QAAQ;CAC/C,MAAM,OAAO;EACX,GAAG,UAAU,OAAO,YAAY,OAAO,SAAS,CAAC,KAAK,QAAQ,WAAW,IAAI,CAAC,CAAC,QAAQ,QAAuB,QAAQ,IAAI,CAAC;EAC3H,GAAG,UAAU,OAAO,QAAQ,OAAO,KAAK,CAAC,KAAK,QAAQ,WAAW,IAAI,CAAC,CAAC,QAAQ,QAAuB,QAAQ,IAAI,CAAC;EACnH;EACA;EACA;EACD;AAED,QAAO;EACL,IAAI,cAAc;EAClB,SAAS,WAAW,OAAO,WAAW,OAAO,QAAQ,IAAI;EACzD;EACA,aAAa,WAAW,OAAO,YAAY,OAAO,cAAc,OAAO,YAAY,IAAI;EACvF,UAAU,uBAAuB,OAAO,YAAY,OAAO,SAAS;EACpE,MAAM;EACN,QAAQ;EACR,cAAc,WACV;GAAC;GAAS;GAAa;GAAW;GAA6B,GAC/D;GAAC;GAAS;GAAa;GAAW;GAAoB;EAC1D,MAAM,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;EAC3C,MAAM,EAAE,MAAM,QAAQ,SAAS,WAAW,QAAQ;EAClD,OAAO,EAAE,SAAS,QAAQ,SAAS,UAAU,KAAA,GAAW;EACxD,SAAS;GACP,MAAM;GACN;GACA;GACD;EACF;;AAGH,SAAS,WAAW,OAAwB;AAC1C,QAAO,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM,GAAG,QAAQ;;AAGvE,SAAS,kBAAkB,SAA0E;CAEnG,MAAM,OAAO,WADA,WAAW,QACI,EAAE,KAAK;CACnC,MAAM,aAAa,WAAW,MAAM,KAAK,IAAI;CAC7C,MAAM,MAAM,WAAW,YAAY,OAAO,YAAY,aAAa,YAAY,IAAI;AAKnF,QAAO;EAAE,SAJO,UAAU,KAAK,cAAc,KAAK,WAAW,KAAK,MAAM,CACrE,KAAK,SAAS,WAAW,KAAK,CAAC,CAC/B,QAAQ,SAA0C,QAAQ,KAAK,CAElD;EAAE,OADJ,OAAO,KAAK,eAAe,WAAW,IAAI,aAAa,KAAA;EAC5C;;AAG3B,eAAe,mBAAmB,QAAyD;CACzF,MAAM,MAAM,IAAI,IAAI,uBAAuB,mBAAmB,CAAC;CAC/D,MAAM,OAAO;EACX,UAAU,KAAK,IAAI,KAAK,IAAI,OAAO,YAAY,IAAI,EAAE,EAAE,IAAI;EAC3D,YAAY,KAAK,IAAI,OAAO,QAAQ,GAAG,EAAE;EACzC,OAAO,OAAO,OAAO,MAAM,IAAI;EAC/B,WAAW,EAAE;EACd;CACD,MAAM,WAAW,MAAM,MAAM,KAAK;EAChC,QAAQ;EACR,SAAS;GACP,QAAQ;GACR,gBAAgB;GAChB,gCAAgC;GACjC;EACD,MAAM,KAAK,UAAU,KAAK;EAC3B,CAAC;AACF,KAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,gCAAgC,SAAS,SAAS;AACpF,QAAO,SAAS,MAAM;;AAGxB,MAAa,4BAAsD;CACjE,QAAQ;CACR,aAAa;CACb,MAAM,OAAO,QAA+E;EAE1F,MAAM,EAAE,SAAS,UAAU,kBAAkB,MADvB,mBAAmB,OAAO,CACK;EACrD,MAAM,WAAW,KAAK,IAAI,KAAK,IAAI,OAAO,YAAY,IAAI,EAAE,EAAE,IAAI;AAClE,SAAO;GACL,QAAQ;GACR,YAAY,QACT,UAAU,GAAG,MAAM,WAAW,EAAE,cAAc,EAAE,WAAW,GAAG,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC,CACvG,IAAI,8BAA8B,CAClC,QAAQ,SAAsC,QAAQ,KAAK,CAAC;GAC/D,YAAY,UAAU,KAAA,IAAY,KAAA,IAAY,KAAK,KAAK,QAAQ,SAAS;GAC1E;;CAEJ"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorRegistryAdapter } from './types.js';
2
+ export declare const officialMcpRegistryAdapter: ConnectorRegistryAdapter;
@@ -0,0 +1,142 @@
1
+ //#region src/connectors/registries/official-mcp.ts
2
+ const DEFAULT_BASE_URL = "https://registry.modelcontextprotocol.io";
3
+ function officialRegistryBaseUrl() {
4
+ return process.env.XOPC_MCP_OFFICIAL_REGISTRY_URL?.trim().replace(/\/+$/, "") || DEFAULT_BASE_URL;
5
+ }
6
+ function readString(value) {
7
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
8
+ }
9
+ function readArray(value) {
10
+ return Array.isArray(value) ? value : [];
11
+ }
12
+ function slugFrom(value) {
13
+ return value.trim().toLowerCase().replace(/^@/, "").replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 64) || "registry-mcp";
14
+ }
15
+ function normalizePackageCommand(pkg) {
16
+ const registryType = readString(pkg.registryType ?? pkg.registry_type ?? pkg.type)?.toLowerCase();
17
+ const name = readString(pkg.name ?? pkg.packageName ?? pkg.package_name);
18
+ if (!name) return void 0;
19
+ if (registryType === "pypi" || registryType === "python") return {
20
+ command: "uvx",
21
+ args: [name]
22
+ };
23
+ if (registryType === "npm" || registryType === "node" || !registryType) return {
24
+ command: "npx",
25
+ args: ["-y", name]
26
+ };
27
+ }
28
+ function normalizeRemote(server) {
29
+ const remotes = readArray(server.remotes ?? server.remote ?? server.deployments);
30
+ for (const raw of remotes) {
31
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) continue;
32
+ const row = raw;
33
+ const url = readString(row.url ?? row.endpoint ?? row.deploymentUrl ?? row.deployment_url);
34
+ if (url?.startsWith("http://") || url?.startsWith("https://")) return {
35
+ url,
36
+ transport: "streamable-http"
37
+ };
38
+ }
39
+ const url = readString(server.url ?? server.endpoint);
40
+ if (url?.startsWith("http://") || url?.startsWith("https://")) return {
41
+ url,
42
+ transport: "streamable-http"
43
+ };
44
+ }
45
+ function connectorFromOfficialServer(server) {
46
+ const qualifiedName = readString(server.name ?? server.id ?? server.qualifiedName ?? server.qualified_name);
47
+ const displayName = readString(server.displayName ?? server.display_name ?? server.title ?? server.name) ?? qualifiedName;
48
+ if (!qualifiedName || !displayName) return void 0;
49
+ const packageRuntime = readArray(server.packages).map((item) => item && typeof item === "object" && !Array.isArray(item) ? normalizePackageCommand(item) : void 0).find(Boolean);
50
+ const remoteRuntime = normalizeRemote(server);
51
+ const serverId = slugFrom(qualifiedName);
52
+ const serverTemplate = packageRuntime ? {
53
+ command: packageRuntime.command,
54
+ args: packageRuntime.args
55
+ } : remoteRuntime ? {
56
+ url: remoteRuntime.url,
57
+ transport: remoteRuntime.transport
58
+ } : void 0;
59
+ if (!serverTemplate) return void 0;
60
+ const tags = [
61
+ ...readArray(server.tags).map((tag) => readString(tag)).filter((tag) => Boolean(tag)),
62
+ "registry",
63
+ "mcp"
64
+ ];
65
+ const description = readString(server.description) ?? "MCP server from the official Model Context Protocol registry.";
66
+ const capabilities = packageRuntime ? [
67
+ "tools",
68
+ "resources",
69
+ "prompts",
70
+ "runtime.mcp.stdio"
71
+ ] : [
72
+ "tools",
73
+ "resources",
74
+ "prompts",
75
+ "runtime.mcp.streamableHttp"
76
+ ];
77
+ return {
78
+ id: `mcp-official-${serverId}`,
79
+ version: readString(server.version) ?? "registry",
80
+ displayName,
81
+ description,
82
+ category: "custom",
83
+ kind: "mcp",
84
+ source: "registry",
85
+ capabilities,
86
+ tags: Array.from(new Set(tags)).slice(0, 8),
87
+ auth: { mode: "none" },
88
+ setup: {},
89
+ runtime: {
90
+ type: "mcp",
91
+ serverId,
92
+ serverTemplate
93
+ }
94
+ };
95
+ }
96
+ async function fetchJson(url) {
97
+ const response = await fetch(url, { headers: { Accept: "application/json" } });
98
+ if (!response.ok) throw new Error(`Official MCP registry returned ${response.status}`);
99
+ return response.json();
100
+ }
101
+ function normalizeServerRecord(item) {
102
+ if (!item || typeof item !== "object" || Array.isArray(item)) return void 0;
103
+ const record = item;
104
+ const nested = record.server;
105
+ if (nested && typeof nested === "object" && !Array.isArray(nested)) return nested;
106
+ return record;
107
+ }
108
+ function extractServers(payload) {
109
+ if (Array.isArray(payload)) return payload.map(normalizeServerRecord).filter((item) => Boolean(item));
110
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) return [];
111
+ const data = payload;
112
+ for (const key of [
113
+ "servers",
114
+ "items",
115
+ "results",
116
+ "data"
117
+ ]) {
118
+ const value = data[key];
119
+ if (Array.isArray(value)) return value.map(normalizeServerRecord).filter((item) => Boolean(item));
120
+ }
121
+ return [];
122
+ }
123
+ const officialMcpRegistryAdapter = {
124
+ source: "mcp_official",
125
+ displayName: "Official MCP registry",
126
+ async search(params) {
127
+ const base = officialRegistryBaseUrl();
128
+ const url = new URL("/v0/servers", base);
129
+ const query = params.query?.trim();
130
+ if (query) url.searchParams.set("q", query);
131
+ url.searchParams.set("limit", String(Math.min(Math.max(params.pageSize ?? 24, 1), 100)));
132
+ if (params.page && params.page > 1) url.searchParams.set("page", String(params.page));
133
+ return {
134
+ source: "mcp_official",
135
+ connectors: extractServers(await fetchJson(url)).map(connectorFromOfficialServer).filter((item) => Boolean(item))
136
+ };
137
+ }
138
+ };
139
+ //#endregion
140
+ export { officialMcpRegistryAdapter };
141
+
142
+ //# sourceMappingURL=official-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"official-mcp.js","names":[],"sources":["../../../../src/connectors/registries/official-mcp.ts"],"sourcesContent":["import type { ConnectorDefinition } from '../types.js';\nimport type { ConnectorRegistryAdapter, ConnectorRegistrySearchParams, ConnectorRegistrySearchResult } from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://registry.modelcontextprotocol.io';\n\nfunction officialRegistryBaseUrl(): string {\n return process.env.XOPC_MCP_OFFICIAL_REGISTRY_URL?.trim().replace(/\\/+$/, '') || DEFAULT_BASE_URL;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction readArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction slugFrom(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^@/, '')\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 64) || 'registry-mcp';\n}\n\nfunction normalizePackageCommand(pkg: Record<string, unknown>): { command: string; args: string[] } | undefined {\n const registryType = readString(pkg.registryType ?? pkg.registry_type ?? pkg.type)?.toLowerCase();\n const name = readString(pkg.name ?? pkg.packageName ?? pkg.package_name);\n if (!name) return undefined;\n if (registryType === 'pypi' || registryType === 'python') {\n return { command: 'uvx', args: [name] };\n }\n if (registryType === 'npm' || registryType === 'node' || !registryType) {\n return { command: 'npx', args: ['-y', name] };\n }\n return undefined;\n}\n\nfunction normalizeRemote(server: Record<string, unknown>): { url: string; transport: 'streamable-http' } | undefined {\n const remotes = readArray(server.remotes ?? server.remote ?? server.deployments);\n for (const raw of remotes) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) continue;\n const row = raw as Record<string, unknown>;\n const url = readString(row.url ?? row.endpoint ?? row.deploymentUrl ?? row.deployment_url);\n if (url?.startsWith('http://') || url?.startsWith('https://')) {\n return { url, transport: 'streamable-http' };\n }\n }\n const url = readString(server.url ?? server.endpoint);\n if (url?.startsWith('http://') || url?.startsWith('https://')) {\n return { url, transport: 'streamable-http' };\n }\n return undefined;\n}\n\nfunction connectorFromOfficialServer(server: Record<string, unknown>): ConnectorDefinition | undefined {\n const qualifiedName = readString(server.name ?? server.id ?? server.qualifiedName ?? server.qualified_name);\n const displayName = readString(server.displayName ?? server.display_name ?? server.title ?? server.name) ?? qualifiedName;\n if (!qualifiedName || !displayName) return undefined;\n\n const packages = readArray(server.packages);\n const packageRuntime = packages\n .map((item) => (item && typeof item === 'object' && !Array.isArray(item) ? normalizePackageCommand(item as Record<string, unknown>) : undefined))\n .find(Boolean);\n const remoteRuntime = normalizeRemote(server);\n const serverId = slugFrom(qualifiedName);\n const serverTemplate = packageRuntime\n ? { command: packageRuntime.command, args: packageRuntime.args }\n : remoteRuntime\n ? { url: remoteRuntime.url, transport: remoteRuntime.transport }\n : undefined;\n if (!serverTemplate) return undefined;\n\n const tags = [\n ...readArray(server.tags).map((tag) => readString(tag)).filter((tag): tag is string => Boolean(tag)),\n 'registry',\n 'mcp',\n ];\n const description = readString(server.description) ?? 'MCP server from the official Model Context Protocol registry.';\n const capabilities: ConnectorDefinition['capabilities'] = packageRuntime\n ? ['tools', 'resources', 'prompts', 'runtime.mcp.stdio']\n : ['tools', 'resources', 'prompts', 'runtime.mcp.streamableHttp'];\n\n return {\n id: `mcp-official-${serverId}`,\n version: readString(server.version) ?? 'registry',\n displayName,\n description,\n category: 'custom',\n kind: 'mcp',\n source: 'registry',\n capabilities,\n tags: Array.from(new Set(tags)).slice(0, 8),\n auth: { mode: 'none' },\n setup: {},\n runtime: {\n type: 'mcp',\n serverId,\n serverTemplate,\n },\n };\n}\n\nasync function fetchJson(url: URL): Promise<unknown> {\n const response = await fetch(url, { headers: { Accept: 'application/json' } });\n if (!response.ok) {\n throw new Error(`Official MCP registry returned ${response.status}`);\n }\n return response.json();\n}\n\nfunction normalizeServerRecord(item: unknown): Record<string, unknown> | undefined {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return undefined;\n const record = item as Record<string, unknown>;\n const nested = record.server;\n if (nested && typeof nested === 'object' && !Array.isArray(nested)) {\n return nested as Record<string, unknown>;\n }\n return record;\n}\n\nfunction extractServers(payload: unknown): Record<string, unknown>[] {\n if (Array.isArray(payload)) return payload.map(normalizeServerRecord).filter((item): item is Record<string, unknown> => Boolean(item));\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return [];\n const data = payload as Record<string, unknown>;\n for (const key of ['servers', 'items', 'results', 'data']) {\n const value = data[key];\n if (Array.isArray(value)) {\n return value.map(normalizeServerRecord).filter((item): item is Record<string, unknown> => Boolean(item));\n }\n }\n return [];\n}\n\nexport const officialMcpRegistryAdapter: ConnectorRegistryAdapter = {\n source: 'mcp_official',\n displayName: 'Official MCP registry',\n async search(params: ConnectorRegistrySearchParams): Promise<ConnectorRegistrySearchResult> {\n const base = officialRegistryBaseUrl();\n const url = new URL('/v0/servers', base);\n const query = params.query?.trim();\n if (query) url.searchParams.set('q', query);\n url.searchParams.set('limit', String(Math.min(Math.max(params.pageSize ?? 24, 1), 100)));\n if (params.page && params.page > 1) url.searchParams.set('page', String(params.page));\n const payload = await fetchJson(url);\n return {\n source: 'mcp_official',\n connectors: extractServers(payload).map(connectorFromOfficialServer).filter((item): item is ConnectorDefinition => Boolean(item)),\n };\n },\n};\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ConnectorRegistryAdapter, ConnectorRegistrySearchParams, ConnectorRegistrySearchResult } from './types.js';
2
+ export type ConnectorRegistryRegistration = {
3
+ adapter: ConnectorRegistryAdapter;
4
+ };
5
+ export declare function registerConnectorRegistryAdapter(registration: ConnectorRegistryRegistration): void;
6
+ export declare function unregisterConnectorRegistryAdapter(source: string): boolean;
7
+ export declare function listConnectorRegistries(): Array<{
8
+ id: string;
9
+ displayName: string;
10
+ }>;
11
+ export declare function isConnectorRegistrySource(source: string): boolean;
12
+ export declare function searchConnectorRegistries(params: ConnectorRegistrySearchParams): Promise<ConnectorRegistrySearchResult[]>;