@xopcai/xopc 0.0.91 → 0.0.93

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 (323) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  3. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  4. package/dist/extensions/telegram/src/plugin.js +1 -1
  5. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  6. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/extensions/weixin/src/api/api.js +2 -2
  9. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  10. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  11. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  12. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  13. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  14. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  15. package/dist/extensions/weixin/src/plugin.js +1 -1
  16. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  17. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  18. package/dist/gateway/static/root/assets/agents-C7tTJLP9.js +222 -0
  19. package/dist/gateway/static/root/assets/apps-page-BbzdMyrg.js +1 -0
  20. package/dist/gateway/static/root/assets/channels-settings-B49vG2hE.js +1 -0
  21. package/dist/gateway/static/root/assets/{channels-status-swr-CYWL5DLD.js → channels-status-swr-CsGkK9h9.js} +1 -1
  22. package/dist/gateway/static/root/assets/{cron-api-TVqLlGAC.js → cron-api-CyAm0xJT.js} +1 -1
  23. package/dist/gateway/static/root/assets/cron-page-Bjx7IOdR.js +1 -0
  24. package/dist/gateway/static/root/assets/{dist-CUV1uY5f.js → dist-DHwVV8XK.js} +1 -1
  25. package/dist/gateway/static/root/assets/{extension-debug-page-mTLHRDp1.js → extension-debug-page-BK8kcc4F.js} +1 -1
  26. package/dist/gateway/static/root/assets/{extension-page-iI8BI7WK.js → extension-page-Cf8X_QUc.js} +1 -1
  27. package/dist/gateway/static/root/assets/{extension-settings-page-ByXcdubM.js → extension-settings-page-C5-YLMmy.js} +1 -1
  28. package/dist/gateway/static/root/assets/{fetch-BWtQq_Ys.js → fetch-BAPnkYbC.js} +1 -1
  29. package/dist/gateway/static/root/assets/{field-primitives-BsZ-4VT5.js → field-primitives-8p7ucXa1.js} +1 -1
  30. package/dist/gateway/static/root/assets/heartbeat-config-api-CpgW2sGp.js +1 -0
  31. package/dist/gateway/static/root/assets/index-CwDdudZM.css +1 -0
  32. package/dist/gateway/static/root/assets/{index-CKkR-v9U.js → index-Do52EfZK.js} +82 -82
  33. package/dist/gateway/static/root/assets/logs-page-BxukQ-J-.js +1 -0
  34. package/dist/gateway/static/root/assets/{note-detail-page-DJ2Mb4x7.js → note-detail-page-WLM6FUIi.js} +53 -53
  35. package/dist/gateway/static/root/assets/{note-time-JLBPSLzK.js → note-time-EFyIVhec.js} +1 -1
  36. package/dist/gateway/static/root/assets/notes-page-BYPVYcYn.js +1 -0
  37. package/dist/gateway/static/root/assets/sessions-page-BFD2_-Cl.js +1 -0
  38. package/dist/gateway/static/root/assets/settings-advanced-gate-CEs8pGh6.js +2 -0
  39. package/dist/gateway/static/root/assets/{settings-form-section-DSYCknxM.js → settings-form-section-C6cGTVwK.js} +1 -1
  40. package/dist/gateway/static/root/assets/settings-page-BiP5iH46.js +2 -0
  41. package/dist/gateway/static/root/assets/{share-preview-page-awRqs4hV.js → share-preview-page-tnIfJ4K6.js} +1 -1
  42. package/dist/gateway/static/root/assets/skills-page-CNDctFIn.js +2 -0
  43. package/dist/gateway/static/root/assets/{theme-store-BC-42BoZ.js → theme-store-D6EsNTPr.js} +1 -1
  44. package/dist/gateway/static/root/assets/url-CTjpm0Uz.js +3 -0
  45. package/dist/gateway/static/root/assets/{utils-DX3TQuap.js → utils-C86AVfY-.js} +1 -1
  46. package/dist/gateway/static/root/assets/voice-api-key-field-CalxUkxm.js +1 -0
  47. package/dist/gateway/static/root/assets/{workflow-page.utils-ClC37yEp.js → workflow-page.utils-DsEriMFW.js} +1 -1
  48. package/dist/gateway/static/root/assets/workflows-page-D2fRxXJG.js +27 -0
  49. package/dist/gateway/static/root/index.html +5 -5
  50. package/dist/package.js +1 -1
  51. package/dist/src/agent/agent-manager.js +7 -7
  52. package/dist/src/agent/agent-scope.js +1 -1
  53. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  54. package/dist/src/agent/context/workspace-seed.js +2 -2
  55. package/dist/src/agent/goals/goal-run-store.js +4 -4
  56. package/dist/src/agent/goals/persistent-goal-service.js +1 -1
  57. package/dist/src/agent/goals/post-turn.js +2 -2
  58. package/dist/src/agent/image/load-image-media.js +2 -2
  59. package/dist/src/agent/ipc/bus.js +1 -1
  60. package/dist/src/agent/ipc/inbox.js +2 -2
  61. package/dist/src/agent/ipc/socket.js +1 -1
  62. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +2 -9
  63. package/dist/src/agent/mcp/bundle-mcp-config.js +10 -34
  64. package/dist/src/agent/mcp/bundle-mcp-config.js.map +1 -1
  65. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  66. package/dist/src/agent/mcp/bundle-mcp-policy.js +2 -2
  67. package/dist/src/agent/mcp/bundle-mcp-policy.js.map +1 -1
  68. package/dist/src/agent/mcp/bundle-mcp-runtime.js +5 -5
  69. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  70. package/dist/src/agent/mcp/index.js +2 -2
  71. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  72. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  73. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  74. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  75. package/dist/src/agent/memory/dreaming/events.js +1 -1
  76. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  77. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  78. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  79. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  80. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  81. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  82. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  83. package/dist/src/agent/models/manager.js +1 -1
  84. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  85. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  86. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  87. package/dist/src/agent/sandbox/path-policy.js +2 -2
  88. package/dist/src/agent/service/build-direct-message-content.js +1 -1
  89. package/dist/src/agent/service.js +4 -4
  90. package/dist/src/agent/session/session-inspector.js +1 -1
  91. package/dist/src/agent/skills/config.js +1 -1
  92. package/dist/src/agent/skills/hub-hash.js +2 -2
  93. package/dist/src/agent/skills/hub-lock.js +1 -1
  94. package/dist/src/agent/skills/hub-pull.js +2 -2
  95. package/dist/src/agent/skills/index.js +1 -1
  96. package/dist/src/agent/skills/managed-store.js +1 -1
  97. package/dist/src/agent/skills/scanner.js +1 -1
  98. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  99. package/dist/src/agent/skills/skill-manager.js +1 -1
  100. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  101. package/dist/src/agent/tools/factory.js +1 -1
  102. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  103. package/dist/src/agent/tools/send-media.js +1 -1
  104. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  105. package/dist/src/agent/tools/workflow-tool.js +1 -1
  106. package/dist/src/agent/tools/write.js +1 -1
  107. package/dist/src/agent/workflow/catalog.js +1 -1
  108. package/dist/src/auth/credentials.js +3 -3
  109. package/dist/src/auth/profiles/store.js +1 -1
  110. package/dist/src/auth/sync-provider-auth.js +1 -1
  111. package/dist/src/browser/cache-dir-policy.js +1 -1
  112. package/dist/src/browser/cdp-local-launcher.js +2 -2
  113. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  114. package/dist/src/browser/providers/cloakbrowser.js +4 -4
  115. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  116. package/dist/src/browser/stealth.js +1 -1
  117. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  118. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  119. package/dist/src/channels/outbound/persist-store.js +1 -1
  120. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  121. package/dist/src/channels/pairing/pairing-store.js +2 -2
  122. package/dist/src/chat-commands/agent-edit.js +2 -2
  123. package/dist/src/chat-commands/builtins/config.js +2 -2
  124. package/dist/src/chat-commands/context.js +1 -1
  125. package/dist/src/cli/command-catalog.js +0 -4
  126. package/dist/src/cli/command-catalog.js.map +1 -1
  127. package/dist/src/cli/command-loaders.js +1 -2
  128. package/dist/src/cli/command-loaders.js.map +1 -1
  129. package/dist/src/cli/command-manifest.js +0 -4
  130. package/dist/src/cli/command-manifest.js.map +1 -1
  131. package/dist/src/cli/commands/config.js +1 -1
  132. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  133. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  134. package/dist/src/cli/commands/doctor/checks/session-integrity.js +2 -2
  135. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  136. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  137. package/dist/src/cli/commands/extension-dev.js +1 -1
  138. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  139. package/dist/src/cli/commands/extension-pack.js +1 -1
  140. package/dist/src/cli/commands/gateway/logs.js +1 -1
  141. package/dist/src/cli/commands/image.js +1 -1
  142. package/dist/src/cli/commands/init.js +4 -4
  143. package/dist/src/cli/commands/onboard.js +1 -1
  144. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  145. package/dist/src/commands/agents.config.js +1 -1
  146. package/dist/src/config/agent-profile.js +1 -1
  147. package/dist/src/config/gateway-bind.js +1 -1
  148. package/dist/src/config/index.d.ts +0 -1
  149. package/dist/src/config/index.js +6 -7
  150. package/dist/src/config/index.js.map +1 -1
  151. package/dist/src/config/loader.js +2 -2
  152. package/dist/src/config/models-json.js +2 -2
  153. package/dist/src/config/paths-state.js +1 -1
  154. package/dist/src/config/profile.js +2 -2
  155. package/dist/src/config/schema.d.ts +36 -6
  156. package/dist/src/config/schema.js +13 -11
  157. package/dist/src/config/schema.js.map +1 -1
  158. package/dist/src/config/workspace-path.js +1 -1
  159. package/dist/src/connectors/builtin-catalog.d.ts +2 -0
  160. package/dist/src/connectors/builtin-catalog.js +152 -0
  161. package/dist/src/connectors/builtin-catalog.js.map +1 -0
  162. package/dist/src/connectors/catalog.d.ts +5 -0
  163. package/dist/src/connectors/catalog.js +13 -0
  164. package/dist/src/connectors/catalog.js.map +1 -0
  165. package/dist/src/connectors/health.d.ts +3 -0
  166. package/dist/src/connectors/health.js +61 -0
  167. package/dist/src/connectors/health.js.map +1 -0
  168. package/dist/src/connectors/install.d.ts +5 -0
  169. package/dist/src/connectors/install.js +46 -0
  170. package/dist/src/connectors/install.js.map +1 -0
  171. package/dist/src/connectors/instances.d.ts +4 -0
  172. package/dist/src/connectors/instances.js +43 -0
  173. package/dist/src/connectors/instances.js.map +1 -0
  174. package/dist/src/connectors/materialize.d.ts +9 -0
  175. package/dist/src/connectors/materialize.js +76 -0
  176. package/dist/src/connectors/materialize.js.map +1 -0
  177. package/dist/src/connectors/oauth.d.ts +22 -0
  178. package/dist/src/connectors/oauth.js +99 -0
  179. package/dist/src/connectors/oauth.js.map +1 -0
  180. package/dist/src/connectors/providers.d.ts +9 -0
  181. package/dist/src/connectors/providers.js +20 -0
  182. package/dist/src/connectors/providers.js.map +1 -0
  183. package/dist/src/connectors/secret-store.d.ts +7 -0
  184. package/dist/src/connectors/secret-store.js +47 -0
  185. package/dist/src/connectors/secret-store.js.map +1 -0
  186. package/dist/src/connectors/types.d.ts +102 -0
  187. package/dist/src/connectors/types.js +1 -0
  188. package/dist/src/connectors/usage.d.ts +6 -0
  189. package/dist/src/connectors/usage.js +63 -0
  190. package/dist/src/connectors/usage.js.map +1 -0
  191. package/dist/src/cron/executor.js +2 -2
  192. package/dist/src/cron/persistence.js +1 -1
  193. package/dist/src/cron/run-log-store.js +1 -1
  194. package/dist/src/daemon/constants.js +1 -1
  195. package/dist/src/daemon/install-plan.js +2 -2
  196. package/dist/src/daemon/launchd.js +2 -2
  197. package/dist/src/daemon/schtasks.js +2 -2
  198. package/dist/src/daemon/systemd.js +2 -2
  199. package/dist/src/extensions/bundle-mcp.js +1 -1
  200. package/dist/src/extensions/discover-extensions.js +1 -1
  201. package/dist/src/extensions/health.js +1 -1
  202. package/dist/src/extensions/loader.js +1 -1
  203. package/dist/src/extensions/lockfile.js +2 -2
  204. package/dist/src/extensions/update.js +1 -1
  205. package/dist/src/gateway/agents-admin.js +3 -3
  206. package/dist/src/gateway/file-path-classifier.js +2 -2
  207. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  208. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  209. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  210. package/dist/src/gateway/hono/oauth.js +1 -1
  211. package/dist/src/gateway/hono/routes/agents.js +1 -1
  212. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  213. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  214. package/dist/src/gateway/hono/routes/connectors.d.ts +3 -0
  215. package/dist/src/gateway/hono/routes/connectors.js +177 -0
  216. package/dist/src/gateway/hono/routes/connectors.js.map +1 -0
  217. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  218. package/dist/src/gateway/hono/routes/home.d.ts +12 -0
  219. package/dist/src/gateway/hono/routes/home.js +50 -0
  220. package/dist/src/gateway/hono/routes/home.js.map +1 -0
  221. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  222. package/dist/src/gateway/hono/routes/lazy-bundles.js +12 -4
  223. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  224. package/dist/src/gateway/hono/routes/models.js +1 -1
  225. package/dist/src/gateway/hono/routes/notes.js +136 -1
  226. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  227. package/dist/src/gateway/hono/routes/shares.js +1 -1
  228. package/dist/src/gateway/hono/routes/workspace.js +4 -4
  229. package/dist/src/gateway/host.d.ts +2 -0
  230. package/dist/src/gateway/host.js +6 -3
  231. package/dist/src/gateway/host.js.map +1 -1
  232. package/dist/src/gateway/lock.js +3 -3
  233. package/dist/src/gateway/ports.js +1 -1
  234. package/dist/src/gateway/service/agent-runner.js +2 -2
  235. package/dist/src/gateway/service/marketplace-service.js +2 -2
  236. package/dist/src/gateway/service.js +1 -1
  237. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  238. package/dist/src/infra/brew.js +1 -1
  239. package/dist/src/infra/package-json.js +1 -1
  240. package/dist/src/infra/package-update-steps.js +1 -1
  241. package/dist/src/infra/path-env.js +2 -2
  242. package/dist/src/infra/restart.js +2 -2
  243. package/dist/src/infra/stable-node-path.js +1 -1
  244. package/dist/src/infra/update-check.js +1 -1
  245. package/dist/src/infra/update-global.js +1 -1
  246. package/dist/src/infra/update-lock.js +3 -3
  247. package/dist/src/infra/update-runner.js +1 -1
  248. package/dist/src/infra/update-startup.js +2 -2
  249. package/dist/src/infra/write-file-atomic.js +2 -2
  250. package/dist/src/mcp/channel-bridge.js +1 -1
  251. package/dist/src/mcp/channel-bridge.js.map +1 -1
  252. package/dist/src/notes/index.d.ts +1 -1
  253. package/dist/src/notes/service.d.ts +24 -1
  254. package/dist/src/notes/service.js +279 -0
  255. package/dist/src/notes/service.js.map +1 -1
  256. package/dist/src/notes/store.d.ts +4 -0
  257. package/dist/src/notes/store.js +37 -8
  258. package/dist/src/notes/store.js.map +1 -1
  259. package/dist/src/notes/types.d.ts +70 -2
  260. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  261. package/dist/src/providers/index.js +2 -2
  262. package/dist/src/providers/model-registry.js +1 -1
  263. package/dist/src/session/config-store.js +2 -2
  264. package/dist/src/session/init-session-turn.js +2 -2
  265. package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
  266. package/dist/src/session/parity/sessions-json-file.js +1 -1
  267. package/dist/src/session/parity/transcript-file-lock.js +2 -2
  268. package/dist/src/session/parity/transcript-paths.js +1 -1
  269. package/dist/src/session/resolve-session.js +4 -4
  270. package/dist/src/session/search-index-cache.js +1 -1
  271. package/dist/src/session/search-index.js +1 -1
  272. package/dist/src/session/session-title.js +2 -2
  273. package/dist/src/session/store.d.ts +2 -0
  274. package/dist/src/session/store.js +27 -7
  275. package/dist/src/session/store.js.map +1 -1
  276. package/dist/src/share/share-auto.js +2 -2
  277. package/dist/src/share/share-store.js +3 -3
  278. package/dist/src/share/share-thumbnail.js +2 -2
  279. package/dist/src/share/share-zip.js +1 -1
  280. package/dist/src/share/site-share-store.js +3 -3
  281. package/dist/src/share/site-static-serve.js +1 -1
  282. package/dist/src/tui/clipboard-image.js +3 -3
  283. package/dist/src/tui/theme-manager.js +1 -1
  284. package/dist/src/tui/tui-keybindings-file.js +1 -1
  285. package/dist/src/tui/tui-scoped-models.js +2 -2
  286. package/dist/src/tui/tui-settings.js +1 -1
  287. package/dist/src/tui/tui.js +3 -3
  288. package/dist/src/tunnel/frpc-binary.js +3 -3
  289. package/dist/src/tunnel/frpc-config.js +1 -1
  290. package/dist/src/tunnel/frpc-extract.js +1 -1
  291. package/dist/src/tunnel/tunnel-state.js +1 -1
  292. package/dist/src/utils/logger/audit.js +1 -1
  293. package/dist/src/utils/logger/log-store.js +1 -1
  294. package/dist/src/utils/logger/rotation.js +1 -1
  295. package/dist/src/voice/tts/audio.js +1 -1
  296. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  297. package/dist/src/workflows/store/event-store.js +1 -1
  298. package/dist/src/workflows/store/run-store.js +1 -1
  299. package/package.json +5 -1
  300. package/dist/gateway/static/root/assets/agents-bVWUlrlD.js +0 -222
  301. package/dist/gateway/static/root/assets/apps-page-CIC8bmvZ.js +0 -1
  302. package/dist/gateway/static/root/assets/channels-settings-C8G8RAAP.js +0 -1
  303. package/dist/gateway/static/root/assets/cron-dreaming-jobs-Ip703-qM.js +0 -2
  304. package/dist/gateway/static/root/assets/cron-page-BtcFYlvv.js +0 -1
  305. package/dist/gateway/static/root/assets/heartbeat-config-api-WjTsRLCU.js +0 -1
  306. package/dist/gateway/static/root/assets/index-VlELBY99.css +0 -1
  307. package/dist/gateway/static/root/assets/logs-page-ClnIpxfd.js +0 -1
  308. package/dist/gateway/static/root/assets/notes-page-BE-75qz9.js +0 -1
  309. package/dist/gateway/static/root/assets/sessions-page-bJJkWtTl.js +0 -1
  310. package/dist/gateway/static/root/assets/settings-page-WcMXLq2U.js +0 -3
  311. package/dist/gateway/static/root/assets/skills-page-Lu-i1JG7.js +0 -2
  312. package/dist/gateway/static/root/assets/url-CY1RQKTU.js +0 -3
  313. package/dist/gateway/static/root/assets/voice-api-key-field-B5uKlDqA.js +0 -1
  314. package/dist/gateway/static/root/assets/workflows-page-C7VhIXtR.js +0 -27
  315. package/dist/src/cli/commands/mcp.d.ts +0 -4
  316. package/dist/src/cli/commands/mcp.js +0 -85
  317. package/dist/src/cli/commands/mcp.js.map +0 -1
  318. package/dist/src/config/mcp-config.d.ts +0 -34
  319. package/dist/src/config/mcp-config.js +0 -116
  320. package/dist/src/config/mcp-config.js.map +0 -1
  321. package/dist/src/gateway/hono/routes/mcp.d.ts +0 -3
  322. package/dist/src/gateway/hono/routes/mcp.js +0 -99
  323. package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ export type ConnectorKind = 'mcp' | 'cli' | 'http' | 'channel' | 'browser' | 'extension' | 'builtin';
2
+ export type ConnectorCategory = 'code' | 'docs' | 'browser' | 'data' | 'automation' | 'custom';
3
+ export type ConnectorCapability = 'tools' | 'resources' | 'prompts' | 'context' | 'channel' | 'events' | 'ui' | 'memory_source' | 'workflows' | 'auth.apiKey' | 'auth.oauth' | 'runtime.mcp.stdio' | 'runtime.mcp.sse' | 'runtime.mcp.streamableHttp';
4
+ export type ConnectorAuthMode = 'none' | 'apiKey' | 'oauth';
5
+ export type ConnectorSecretReference = {
6
+ xopcSecretRef: {
7
+ provider: string;
8
+ fieldKey: string;
9
+ };
10
+ };
11
+ export type ConnectorSecretField = {
12
+ key: string;
13
+ label: string;
14
+ description?: string;
15
+ required: boolean;
16
+ };
17
+ export type ConnectorConfigField = {
18
+ key: string;
19
+ label: string;
20
+ type: 'string' | 'number' | 'boolean' | 'json' | 'path';
21
+ required?: boolean;
22
+ placeholder?: string;
23
+ defaultValue?: unknown;
24
+ description?: string;
25
+ };
26
+ export type ConnectorRuntimeDefinition = {
27
+ type: 'mcp';
28
+ serverId: string;
29
+ serverTemplate: Record<string, unknown>;
30
+ };
31
+ export type ConnectorDefinition = {
32
+ id: string;
33
+ version: string;
34
+ displayName: string;
35
+ description: string;
36
+ category: ConnectorCategory;
37
+ kind: ConnectorKind;
38
+ source: 'builtin' | 'extension' | 'custom' | 'registry';
39
+ capabilities: ConnectorCapability[];
40
+ tags?: string[];
41
+ auth: {
42
+ mode: ConnectorAuthMode;
43
+ };
44
+ setup: {
45
+ secrets?: ConnectorSecretField[];
46
+ config?: ConnectorConfigField[];
47
+ };
48
+ runtime: ConnectorRuntimeDefinition;
49
+ };
50
+ export type ConnectorInstallInput = {
51
+ secrets?: Record<string, unknown>;
52
+ config?: Record<string, unknown>;
53
+ };
54
+ export type ConnectorUsageRecord = {
55
+ lastHealthCheckAt?: string;
56
+ lastHealthStatus?: ConnectorHealthStatus;
57
+ lastToolCount?: number;
58
+ };
59
+ export type ConnectorAuditRecord = {
60
+ at: string;
61
+ action: 'installed' | 'removed' | 'health_check';
62
+ status?: ConnectorHealthStatus;
63
+ ok?: boolean;
64
+ toolCount?: number;
65
+ };
66
+ export type ConnectorInstance = {
67
+ instanceId: string;
68
+ connectorId: string;
69
+ displayName: string;
70
+ enabled: boolean;
71
+ status: 'installed' | 'not_configured' | 'failed' | 'disabled';
72
+ secretStatus: Record<string, boolean>;
73
+ materialized: {
74
+ type: 'mcp';
75
+ serverId: string;
76
+ };
77
+ usage: ConnectorUsageRecord;
78
+ audit: ConnectorAuditRecord[];
79
+ };
80
+ export type ConnectorHealthStatus = 'ok' | 'server_not_found' | 'missing_secret' | 'startup_failed' | 'tools_list_failed' | 'timeout' | 'network_failed' | 'unknown_error';
81
+ export type ConnectorHealthResult = {
82
+ serverId: string;
83
+ ok: boolean;
84
+ status: ConnectorHealthStatus;
85
+ toolCount: number;
86
+ tools: Array<{
87
+ name: string;
88
+ shortName?: string;
89
+ description?: string;
90
+ }>;
91
+ error?: string;
92
+ action?: string;
93
+ };
94
+ export type ConnectorDetail = {
95
+ definition: ConnectorDefinition;
96
+ instances: ConnectorInstance[];
97
+ };
98
+ export type ManagedConnectorMarker = {
99
+ managed: true;
100
+ connectorId: string;
101
+ version: string;
102
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import type { Config } from '../config/schema.js';
2
+ import type { ConnectorAuditRecord, ConnectorHealthResult, ConnectorUsageRecord } from './types.js';
3
+ export declare function getConnectorUsageFromMarker(marker: unknown): ConnectorUsageRecord;
4
+ export declare function getConnectorAuditFromMarker(marker: unknown): ConnectorAuditRecord[];
5
+ export declare function appendConnectorAuditRecord(config: Config, instanceId: string, record: Omit<ConnectorAuditRecord, 'at'>): void;
6
+ export declare function recordConnectorHealthUsage(config: Config, instanceId: string, result: ConnectorHealthResult): void;
@@ -0,0 +1,63 @@
1
+ import { isManagedConnectorServer } from "./materialize.js";
2
+ //#region src/connectors/usage.ts
3
+ const MAX_AUDIT_RECORDS = 50;
4
+ function getManagedConnectorMarker(config, instanceId) {
5
+ const server = config.mcp?.servers?.[instanceId];
6
+ if (!isManagedConnectorServer(server)) return;
7
+ return server.xopcConnector;
8
+ }
9
+ function getConnectorUsageFromMarker(marker) {
10
+ if (!marker || typeof marker !== "object" || Array.isArray(marker)) return {};
11
+ const usage = marker.usage;
12
+ if (!usage || typeof usage !== "object" || Array.isArray(usage)) return {};
13
+ const record = usage;
14
+ return {
15
+ lastHealthCheckAt: typeof record.lastHealthCheckAt === "string" ? record.lastHealthCheckAt : void 0,
16
+ lastHealthStatus: typeof record.lastHealthStatus === "string" ? record.lastHealthStatus : void 0,
17
+ lastToolCount: typeof record.lastToolCount === "number" ? record.lastToolCount : void 0
18
+ };
19
+ }
20
+ function getConnectorAuditFromMarker(marker) {
21
+ if (!marker || typeof marker !== "object" || Array.isArray(marker)) return [];
22
+ const audit = marker.audit;
23
+ if (!Array.isArray(audit)) return [];
24
+ return audit.flatMap((entry) => {
25
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) return [];
26
+ const record = entry;
27
+ if (typeof record.at !== "string" || typeof record.action !== "string") return [];
28
+ return [{
29
+ at: record.at,
30
+ action: record.action,
31
+ status: typeof record.status === "string" ? record.status : void 0,
32
+ ok: typeof record.ok === "boolean" ? record.ok : void 0,
33
+ toolCount: typeof record.toolCount === "number" ? record.toolCount : void 0
34
+ }];
35
+ });
36
+ }
37
+ function appendConnectorAuditRecord(config, instanceId, record) {
38
+ const marker = getManagedConnectorMarker(config, instanceId);
39
+ if (!marker) return;
40
+ marker.audit = [...(Array.isArray(marker.audit) ? marker.audit : []).slice(-MAX_AUDIT_RECORDS + 1), {
41
+ ...record,
42
+ at: (/* @__PURE__ */ new Date()).toISOString()
43
+ }];
44
+ }
45
+ function recordConnectorHealthUsage(config, instanceId, result) {
46
+ const marker = getManagedConnectorMarker(config, instanceId);
47
+ if (!marker) return;
48
+ marker.usage = {
49
+ lastHealthCheckAt: (/* @__PURE__ */ new Date()).toISOString(),
50
+ lastHealthStatus: result.status,
51
+ lastToolCount: result.toolCount
52
+ };
53
+ appendConnectorAuditRecord(config, instanceId, {
54
+ action: "health_check",
55
+ status: result.status,
56
+ ok: result.ok,
57
+ toolCount: result.toolCount
58
+ });
59
+ }
60
+ //#endregion
61
+ export { appendConnectorAuditRecord, getConnectorAuditFromMarker, getConnectorUsageFromMarker, recordConnectorHealthUsage };
62
+
63
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","names":[],"sources":["../../../src/connectors/usage.ts"],"sourcesContent":["import type { Config } from '../config/schema.js';\nimport { isManagedConnectorServer } from './materialize.js';\nimport type { ConnectorAuditRecord, ConnectorHealthResult, ConnectorUsageRecord } from './types.js';\n\nconst MAX_AUDIT_RECORDS = 50;\n\nfunction getManagedConnectorMarker(config: Config, instanceId: string): Record<string, unknown> | undefined {\n const server = config.mcp?.servers?.[instanceId];\n if (!isManagedConnectorServer(server)) {\n return undefined;\n }\n return server.xopcConnector as Record<string, unknown>;\n}\n\nexport function getConnectorUsageFromMarker(marker: unknown): ConnectorUsageRecord {\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) {\n return {};\n }\n const usage = (marker as Record<string, unknown>).usage;\n if (!usage || typeof usage !== 'object' || Array.isArray(usage)) {\n return {};\n }\n const record = usage as Record<string, unknown>;\n return {\n lastHealthCheckAt: typeof record.lastHealthCheckAt === 'string' ? record.lastHealthCheckAt : undefined,\n lastHealthStatus: typeof record.lastHealthStatus === 'string' ? record.lastHealthStatus as ConnectorUsageRecord['lastHealthStatus'] : undefined,\n lastToolCount: typeof record.lastToolCount === 'number' ? record.lastToolCount : undefined,\n };\n}\n\nexport function getConnectorAuditFromMarker(marker: unknown): ConnectorAuditRecord[] {\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) {\n return [];\n }\n const audit = (marker as Record<string, unknown>).audit;\n if (!Array.isArray(audit)) {\n return [];\n }\n return audit.flatMap((entry) => {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {\n return [];\n }\n const record = entry as Record<string, unknown>;\n if (typeof record.at !== 'string' || typeof record.action !== 'string') {\n return [];\n }\n return [{\n at: record.at,\n action: record.action as ConnectorAuditRecord['action'],\n status: typeof record.status === 'string' ? record.status as ConnectorAuditRecord['status'] : undefined,\n ok: typeof record.ok === 'boolean' ? record.ok : undefined,\n toolCount: typeof record.toolCount === 'number' ? record.toolCount : undefined,\n }];\n });\n}\n\nexport function appendConnectorAuditRecord(\n config: Config,\n instanceId: string,\n record: Omit<ConnectorAuditRecord, 'at'>,\n): void {\n const marker = getManagedConnectorMarker(config, instanceId);\n if (!marker) {\n return;\n }\n const existing = Array.isArray(marker.audit) ? marker.audit : [];\n marker.audit = [\n ...existing.slice(-MAX_AUDIT_RECORDS + 1),\n { ...record, at: new Date().toISOString() },\n ];\n}\n\nexport function recordConnectorHealthUsage(\n config: Config,\n instanceId: string,\n result: ConnectorHealthResult,\n): void {\n const marker = getManagedConnectorMarker(config, instanceId);\n if (!marker) {\n return;\n }\n marker.usage = {\n lastHealthCheckAt: new Date().toISOString(),\n lastHealthStatus: result.status,\n lastToolCount: result.toolCount,\n } satisfies ConnectorUsageRecord;\n appendConnectorAuditRecord(config, instanceId, {\n action: 'health_check',\n status: result.status,\n ok: result.ok,\n toolCount: result.toolCount,\n });\n}\n"],"mappings":";;AAIA,MAAM,oBAAoB;AAE1B,SAAS,0BAA0B,QAAgB,YAAyD;CAC1G,MAAM,SAAS,OAAO,KAAK,UAAU;AACrC,KAAI,CAAC,yBAAyB,OAAO,CACnC;AAEF,QAAO,OAAO;;AAGhB,SAAgB,4BAA4B,QAAuC;AACjF,KAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CAChE,QAAO,EAAE;CAEX,MAAM,QAAS,OAAmC;AAClD,KAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAC7D,QAAO,EAAE;CAEX,MAAM,SAAS;AACf,QAAO;EACL,mBAAmB,OAAO,OAAO,sBAAsB,WAAW,OAAO,oBAAoB,KAAA;EAC7F,kBAAkB,OAAO,OAAO,qBAAqB,WAAW,OAAO,mBAA+D,KAAA;EACtI,eAAe,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB,KAAA;EAClF;;AAGH,SAAgB,4BAA4B,QAAyC;AACnF,KAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CAChE,QAAO,EAAE;CAEX,MAAM,QAAS,OAAmC;AAClD,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO,EAAE;AAEX,QAAO,MAAM,SAAS,UAAU;AAC9B,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAC7D,QAAO,EAAE;EAEX,MAAM,SAAS;AACf,MAAI,OAAO,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,SAC5D,QAAO,EAAE;AAEX,SAAO,CAAC;GACN,IAAI,OAAO;GACX,QAAQ,OAAO;GACf,QAAQ,OAAO,OAAO,WAAW,WAAW,OAAO,SAA2C,KAAA;GAC9F,IAAI,OAAO,OAAO,OAAO,YAAY,OAAO,KAAK,KAAA;GACjD,WAAW,OAAO,OAAO,cAAc,WAAW,OAAO,YAAY,KAAA;GACtE,CAAC;GACF;;AAGJ,SAAgB,2BACd,QACA,YACA,QACM;CACN,MAAM,SAAS,0BAA0B,QAAQ,WAAW;AAC5D,KAAI,CAAC,OACH;AAGF,QAAO,QAAQ,CACb,IAFe,MAAM,QAAQ,OAAO,MAAM,GAAG,OAAO,QAAQ,EAAE,EAElD,MAAM,CAAC,oBAAoB,EAAE,EACzC;EAAE,GAAG;EAAQ,qBAAI,IAAI,MAAM,EAAC,aAAa;EAAE,CAC5C;;AAGH,SAAgB,2BACd,QACA,YACA,QACM;CACN,MAAM,SAAS,0BAA0B,QAAQ,WAAW;AAC5D,KAAI,CAAC,OACH;AAEF,QAAO,QAAQ;EACb,oCAAmB,IAAI,MAAM,EAAC,aAAa;EAC3C,kBAAkB,OAAO;EACzB,eAAe,OAAO;EACvB;AACD,4BAA2B,QAAQ,YAAY;EAC7C,QAAQ;EACR,QAAQ,OAAO;EACf,IAAI,OAAO;EACX,WAAW,OAAO;EACnB,CAAC"}
@@ -1,7 +1,7 @@
1
- import { init_agent_scope, normalizeAgentId } from "../agent/agent-scope.js";
2
- import { buildSessionKey, init_session_key } from "../routing/session-key.js";
3
1
  import { createLogger } from "../utils/logger/index.js";
4
2
  import { init_logger } from "../utils/logger.js";
3
+ import { init_agent_scope, normalizeAgentId } from "../agent/agent-scope.js";
4
+ import { buildSessionKey, init_session_key } from "../routing/session-key.js";
5
5
  import { getCronPayloadText } from "./job-content.js";
6
6
  import { buildWorkflowRunCronSummary, buildWorkflowRunDeliveryText, isWorkflowRunCronSuccess, resolveWorkflowCronWaitMs, waitForWorkflowRunView } from "./workflow-run-completion.js";
7
7
  import { bundledChannelPlugins } from "../generated/bundled-channel-plugins.js";
@@ -1,6 +1,6 @@
1
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
1
2
  import { createLogger } from "../utils/logger/index.js";
2
3
  import { init_logger } from "../utils/logger.js";
3
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
4
  import { JobDataSchema } from "./validation.js";
5
5
  import { access, readFile } from "fs/promises";
6
6
  //#region src/cron/persistence.ts
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { init_paths, resolveCronRunsDir } from "../config/paths.js";
4
- import { join } from "path";
5
4
  import { appendFile, mkdir, readFile, readdir, unlink, writeFile } from "fs/promises";
5
+ import { join } from "path";
6
6
  //#region src/cron/run-log-store.ts
7
7
  init_paths();
8
8
  init_logger();
@@ -1,5 +1,5 @@
1
- import os from "node:os";
2
1
  import path from "node:path";
2
+ import os from "node:os";
3
3
  //#region src/daemon/constants.ts
4
4
  /**
5
5
  * Daemon Constants - Service labels, paths, and configuration values
@@ -2,9 +2,9 @@ import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { SERVICE_VERSION_ENV_KEY, formatGatewayServiceDescription } from "./constants.js";
5
- import { homedir } from "node:os";
6
- import path from "node:path";
7
5
  import { existsSync } from "node:fs";
6
+ import path from "node:path";
7
+ import { homedir } from "node:os";
8
8
  //#region src/daemon/install-plan.ts
9
9
  /**
10
10
  * Install Plan Builder - Build gateway installation configuration
@@ -1,10 +1,10 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveGatewayLaunchAgentLabel, resolveLaunchAgentPlistPath as resolveLaunchAgentPlistPath$1 } from "./constants.js";
4
- import os from "node:os";
5
- import path from "node:path";
6
4
  import { existsSync } from "node:fs";
7
5
  import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import path from "node:path";
7
+ import os from "node:os";
8
8
  import { spawn, spawnSync } from "node:child_process";
9
9
  //#region src/daemon/launchd.ts
10
10
  /**
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveGatewayWindowsTaskName } from "./constants.js";
4
- import os from "node:os";
5
- import path from "node:path";
6
4
  import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
5
+ import path from "node:path";
6
+ import os from "node:os";
7
7
  import { spawn, spawnSync } from "node:child_process";
8
8
  //#region src/daemon/schtasks.ts
9
9
  /**
@@ -1,10 +1,10 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveGatewaySystemdServiceName, resolveSystemdUnitPath } from "./constants.js";
4
- import os from "node:os";
5
- import path from "node:path";
6
4
  import { existsSync } from "node:fs";
7
5
  import { access, constants as constants$1, mkdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import path from "node:path";
7
+ import os from "node:os";
8
8
  import { spawn, spawnSync } from "node:child_process";
9
9
  //#region src/daemon/systemd.ts
10
10
  /**
@@ -1,8 +1,8 @@
1
1
  import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir } from "../config/paths.js";
2
2
  import { isRecord } from "../utils/is-record.js";
3
3
  import { normalizeConfiguredMcpServers } from "../config/mcp-config-normalize.js";
4
- import { join } from "node:path";
5
4
  import { existsSync, readFileSync, readdirSync } from "node:fs";
5
+ import { join } from "node:path";
6
6
  //#region src/extensions/bundle-mcp.ts
7
7
  init_paths();
8
8
  function extractMcpServerMap(raw) {
@@ -1,6 +1,6 @@
1
- import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
2
1
  import { createLogger } from "../utils/logger/index.js";
3
2
  import { init_logger } from "../utils/logger.js";
3
+ import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
4
4
  import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir, resolveWorkspaceExtensionsDir } from "../config/paths.js";
5
5
  import { init_loader, loadConfig } from "../config/loader.js";
6
6
  import { normalizeExtensionManifest } from "./normalize-manifest.js";
@@ -1,8 +1,8 @@
1
1
  import { init_paths, resolveExtensionsDir } from "../config/paths.js";
2
2
  import { getExtensionLockfileManager } from "./lockfile.js";
3
+ import { readFile, readdir } from "fs/promises";
3
4
  import { join } from "path";
4
5
  import { existsSync } from "fs";
5
- import { readFile, readdir } from "fs/promises";
6
6
  //#region src/extensions/health.ts
7
7
  init_paths();
8
8
  var ExtensionHealthChecker = class {
@@ -1,7 +1,7 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
2
- import { init_agent_scope, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
3
2
  import { createLogger, createServiceLogger } from "../utils/logger/index.js";
4
3
  import { init_logger } from "../utils/logger.js";
4
+ import { init_agent_scope, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
5
5
  import { init_paths, resolveBundledExtensionsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveWorkspaceExtensionsDir } from "../config/paths.js";
6
6
  import { init_loader, loadConfig } from "../config/loader.js";
7
7
  import { getProviderRegistry, init_plugin_registry } from "../providers/plugin-registry.js";
@@ -1,10 +1,10 @@
1
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
1
2
  import { createLogger } from "../utils/logger/index.js";
2
3
  import { init_logger } from "../utils/logger.js";
3
4
  import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
4
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
5
+ import { mkdir, readFile } from "fs/promises";
5
6
  import { dirname, join } from "path";
6
7
  import { existsSync } from "fs";
7
- import { mkdir, readFile } from "fs/promises";
8
8
  import { createHash } from "crypto";
9
9
  //#region src/extensions/lockfile.ts
10
10
  init_write_file_atomic();
@@ -6,8 +6,8 @@ import { getExtensionLockfileManager } from "./lockfile.js";
6
6
  import { installExtensionFromStoreZip, installFromNpm } from "./install.js";
7
7
  import { findExtension } from "./marketplace.js";
8
8
  import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl } from "../agent/skills/marketplace/adapters/store/store-api-client.js";
9
- import { join } from "node:path";
10
9
  import { existsSync, readFileSync, readdirSync, rmSync } from "node:fs";
10
+ import { join } from "node:path";
11
11
  import semver from "semver";
12
12
  //#region src/extensions/update.ts
13
13
  /**
@@ -1,14 +1,14 @@
1
- import { init_localized_text, normalizeLocalizedText, resolveLocalizedText } from "../config/localized-text.js";
2
1
  import { DEFAULT_AGENT_ID, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
3
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
4
2
  import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
3
+ import { init_localized_text, normalizeLocalizedText, resolveLocalizedText } from "../config/localized-text.js";
4
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
5
5
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES } from "../agent/context/workspace.js";
6
6
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
7
  import { applyAgentConfig, findAgentEntryIndex, pruneAgentConfig, removeAgentDirsFromDisk } from "../commands/agents.config.js";
8
8
  import { GATEWAY_BUILTIN_TOOL_IDS } from "./agent-builtin-tools.js";
9
9
  import { seedAgentProfileMarkdownFiles } from "../agent/context/workspace-seed.js";
10
- import { join, resolve } from "node:path";
11
10
  import { cp, mkdir, readFile, readdir, realpath, stat, unlink, writeFile } from "node:fs/promises";
11
+ import { join, resolve } from "node:path";
12
12
  //#region src/gateway/agents-admin.ts
13
13
  /**
14
14
  * Gateway REST helpers for multi-agent management.
@@ -1,11 +1,11 @@
1
1
  import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
2
2
  import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
3
- import { extractProfileAgentId } from "../config/agent-profile.js";
4
3
  import { init_paths, resolveConfigPath, resolveSessionsDir, resolveSkillsDir } from "../config/paths.js";
4
+ import { extractProfileAgentId } from "../config/agent-profile.js";
5
5
  import { isBareProfileMarkdownFileName, resolveProfileMarkdownPathIfBareName } from "../agent/tools/tool-paths.js";
6
6
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
- import { basename, isAbsolute, resolve } from "node:path";
8
7
  import { stat } from "node:fs/promises";
8
+ import { basename, isAbsolute, resolve } from "node:path";
9
9
  //#region src/gateway/file-path-classifier.ts
10
10
  init_agent_scope();
11
11
  init_paths();
@@ -1,7 +1,7 @@
1
1
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
2
2
  import { resolveModelsJsonPath } from "../../../config/paths.js";
3
- import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
4
3
  import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
4
+ import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
5
5
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
6
6
  import { getAllProviders, init_providers, isProviderConfigured } from "../../../providers/index.js";
7
7
  import { resolveShareConfig } from "../../../share/share-config.js";
@@ -1,7 +1,7 @@
1
1
  import { init_write_file_atomic, writeTextAtomic } from "../../../infra/write-file-atomic.js";
2
- import { homedir } from "node:os";
3
- import { join } from "node:path";
4
2
  import { readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { homedir } from "node:os";
5
5
  //#region src/gateway/hono/lib/extension-store.ts
6
6
  init_write_file_atomic();
7
7
  /** Extension UI: write-through JSON KV per namespace under ~/.xopc/extensions/{namespace}/storage.json */
@@ -1,6 +1,6 @@
1
- import { dirname, resolve } from "node:path";
2
- import { readFileSync } from "node:fs";
3
1
  import { createHash } from "node:crypto";
2
+ import { readFileSync } from "node:fs";
3
+ import { dirname, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  //#region src/gateway/hono/lib/static-ui.ts
6
6
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -1,6 +1,6 @@
1
1
  import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
2
- import { getProviderAuthState, init_providers, isProviderConfigured } from "../../providers/index.js";
3
2
  import { anthropicOAuthProvider } from "../../auth/oauth/anthropic.js";
3
+ import { getProviderAuthState, init_providers, isProviderConfigured } from "../../providers/index.js";
4
4
  import { minimaxOAuthProvider } from "../../auth/oauth/minimax.js";
5
5
  import { minimaxCnOAuthProvider } from "../../auth/oauth/minimax-cn.js";
6
6
  import { kimiCodingOAuthProvider } from "../../auth/oauth/kimi-coding.js";
@@ -1,6 +1,6 @@
1
+ import { init_agent_scope, normalizeAgentId } from "../../../agent/agent-scope.js";
1
2
  import { init_localized_text, normalizeLocalizedText } from "../../../config/localized-text.js";
2
3
  import { init_schema, parseModelRef } from "../../../config/schema.js";
3
- import { init_agent_scope, normalizeAgentId } from "../../../agent/agent-scope.js";
4
4
  import { init_providers, isProviderConfigured, resolveModel } from "../../../providers/index.js";
5
5
  import { getVoiceModelsConfig } from "../../../config/voice.js";
6
6
  import { deleteAgentAvatarFile, finalizeCreateAgentDirs, listAgentProfileFiles, listGatewayAgents, prepareCreateAgent, prepareCreateAgentsBatch, prepareDeleteAgent, prepareUpdateAgent, readAgentAvatarFile, readAgentProfileFile, runAfterDeletePurge, writeAgentAvatarFromBase64, writeAgentProfileFile } from "../../agents-admin.js";
@@ -7,8 +7,8 @@ import { createOAuthHandler } from "../oauth.js";
7
7
  import { createOAuthAsyncHandler } from "../oauth-async.js";
8
8
  import { extensionAssetMimeType } from "../lib/extension-assets.js";
9
9
  import { loadExtensionStore, saveExtensionStore } from "../lib/extension-store.js";
10
- import { relative, resolve } from "node:path";
11
10
  import { existsSync, readFileSync, statSync } from "node:fs";
11
+ import { relative, resolve } from "node:path";
12
12
  //#region src/gateway/hono/routes/auth-registry-extensions.ts
13
13
  init_providers();
14
14
  const EXTENSION_ASSET_CSP = "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'none'; frame-ancestors 'self'; frame-src 'none'; base-uri 'none'; object-src 'none'; form-action 'none'";
@@ -1,5 +1,5 @@
1
- import { BindingsConfigSchema, McpConfigSchema, init_schema } from "../../../../config/schema.js";
2
1
  import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
2
+ import { BindingsConfigSchema, McpConfigSchema, init_schema } from "../../../../config/schema.js";
3
3
  import { canonicalizeConfiguredMcpServer } from "../../../../config/mcp-config-normalize.js";
4
4
  import { mergeCronConfigPatch, mergeGatewaySkillsMarketplacePatch, mergeGoalsConfigPatch, mergeSessionConfigPatch, mergeUpdateConfigPatch } from "../../../../config/web-patch.js";
5
5
  import { assertGatewayAuthConfigured, resolveGatewayAuth } from "../../../auth.js";
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerConnectorRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -0,0 +1,177 @@
1
+ import { listConnectorProviders } from "../../../connectors/providers.js";
2
+ import { getConnectorDefinition, listConnectorCatalog } from "../../../connectors/catalog.js";
3
+ import { recordConnectorHealthUsage } from "../../../connectors/usage.js";
4
+ import { getConnectorInstance, listConnectorInstances } from "../../../connectors/instances.js";
5
+ import { testConnectorInstance } from "../../../connectors/health.js";
6
+ import { completeConnectorOAuth, startConnectorOAuth } from "../../../connectors/oauth.js";
7
+ import { installConnector, uninstallConnector } from "../../../connectors/install.js";
8
+ //#region src/gateway/hono/routes/connectors.ts
9
+ function errorMessage(error) {
10
+ return error instanceof Error ? error.message : String(error);
11
+ }
12
+ function registerConnectorRoutes(authenticated, deps) {
13
+ const { service, strictRateLimitMiddleware } = deps;
14
+ authenticated.get("/api/connectors/catalog", (c) => {
15
+ return c.json({
16
+ ok: true,
17
+ payload: {
18
+ connectors: listConnectorCatalog(),
19
+ providers: listConnectorProviders().map((provider) => ({
20
+ id: provider.id,
21
+ displayName: provider.displayName
22
+ }))
23
+ }
24
+ });
25
+ });
26
+ authenticated.get("/api/connectors/installed", (c) => {
27
+ const config = service.currentConfig;
28
+ return c.json({
29
+ ok: true,
30
+ payload: { instances: listConnectorInstances(config) }
31
+ });
32
+ });
33
+ authenticated.get("/api/connectors/:id", (c) => {
34
+ const connectorId = c.req.param("id");
35
+ const connector = getConnectorDefinition(connectorId);
36
+ if (!connector) return c.json({
37
+ ok: false,
38
+ error: `Unknown connector: ${connectorId}`
39
+ }, 404);
40
+ const config = service.currentConfig;
41
+ const instances = listConnectorInstances(config).filter((instance) => instance.connectorId === connectorId);
42
+ return c.json({
43
+ ok: true,
44
+ payload: {
45
+ connector,
46
+ instances
47
+ }
48
+ });
49
+ });
50
+ authenticated.post("/api/connectors/approvals/respond", async (c) => {
51
+ const body = await c.req.json().catch(() => ({}));
52
+ return c.json({
53
+ ok: true,
54
+ payload: {
55
+ acknowledged: true,
56
+ body
57
+ }
58
+ });
59
+ });
60
+ authenticated.post("/api/connectors/:id/oauth/start", strictRateLimitMiddleware, async (c) => {
61
+ const connectorId = c.req.param("id");
62
+ const connector = getConnectorDefinition(connectorId);
63
+ if (!connector) return c.json({
64
+ ok: false,
65
+ error: `Unknown connector: ${connectorId}`
66
+ }, 404);
67
+ try {
68
+ const oauth = await startConnectorOAuth(connector);
69
+ return c.json({
70
+ ok: true,
71
+ payload: { oauth }
72
+ });
73
+ } catch (error) {
74
+ return c.json({
75
+ ok: false,
76
+ error: errorMessage(error)
77
+ }, 400);
78
+ }
79
+ });
80
+ authenticated.post("/api/connectors/:id/oauth/complete", strictRateLimitMiddleware, async (c) => {
81
+ const connectorId = c.req.param("id");
82
+ const connector = getConnectorDefinition(connectorId);
83
+ if (!connector) return c.json({
84
+ ok: false,
85
+ error: `Unknown connector: ${connectorId}`
86
+ }, 404);
87
+ const body = await c.req.json().catch(() => ({}));
88
+ const deviceCode = body && typeof body === "object" && !Array.isArray(body) && typeof body.deviceCode === "string" ? body.deviceCode : "";
89
+ try {
90
+ const oauth = await completeConnectorOAuth(connector, { deviceCode });
91
+ return c.json({
92
+ ok: true,
93
+ payload: { oauth }
94
+ });
95
+ } catch (error) {
96
+ return c.json({
97
+ ok: false,
98
+ error: errorMessage(error)
99
+ }, 400);
100
+ }
101
+ });
102
+ authenticated.post("/api/connectors/:id/install", strictRateLimitMiddleware, async (c) => {
103
+ const connectorId = c.req.param("id");
104
+ const body = await c.req.json().catch(() => ({}));
105
+ const input = body && typeof body === "object" && !Array.isArray(body) ? body : {};
106
+ const config = service.currentConfig;
107
+ try {
108
+ const instance = await installConnector(config, connectorId, input);
109
+ const saved = await service.saveConfig(config);
110
+ if (!saved.saved) return c.json({
111
+ ok: false,
112
+ error: saved.error
113
+ }, 500);
114
+ return c.json({
115
+ ok: true,
116
+ payload: { instance }
117
+ });
118
+ } catch (error) {
119
+ return c.json({
120
+ ok: false,
121
+ error: errorMessage(error)
122
+ }, 400);
123
+ }
124
+ });
125
+ authenticated.post("/api/connectors/:id/test", async (c) => {
126
+ const instanceId = c.req.param("id");
127
+ const config = service.currentConfig;
128
+ const instance = getConnectorInstance(config, instanceId);
129
+ if (!instance) return c.json({
130
+ ok: false,
131
+ error: `Connector instance not found: ${instanceId}`
132
+ }, 404);
133
+ try {
134
+ const result = await testConnectorInstance(config, instance.materialized.serverId);
135
+ recordConnectorHealthUsage(config, instance.instanceId, result);
136
+ const saved = await service.saveConfig(config);
137
+ if (!saved.saved) return c.json({
138
+ ok: false,
139
+ error: saved.error
140
+ }, 500);
141
+ return c.json({
142
+ ok: true,
143
+ payload: result
144
+ });
145
+ } catch (error) {
146
+ return c.json({
147
+ ok: false,
148
+ error: errorMessage(error)
149
+ }, 500);
150
+ }
151
+ });
152
+ authenticated.delete("/api/connectors/:id", strictRateLimitMiddleware, async (c) => {
153
+ const instanceId = c.req.param("id");
154
+ const config = service.currentConfig;
155
+ try {
156
+ const instance = uninstallConnector(config, instanceId);
157
+ const saved = await service.saveConfig(config);
158
+ if (!saved.saved) return c.json({
159
+ ok: false,
160
+ error: saved.error
161
+ }, 500);
162
+ return c.json({
163
+ ok: true,
164
+ payload: { instance }
165
+ });
166
+ } catch (error) {
167
+ return c.json({
168
+ ok: false,
169
+ error: errorMessage(error)
170
+ }, 400);
171
+ }
172
+ });
173
+ }
174
+ //#endregion
175
+ export { registerConnectorRoutes };
176
+
177
+ //# sourceMappingURL=connectors.js.map