@dobbyai/mcp-external 1.0.4 → 1.2.0

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 (315) hide show
  1. package/README.md +44 -14
  2. package/dist/__tests__/agent-mail-tools.test.d.ts +8 -0
  3. package/dist/__tests__/agent-mail-tools.test.d.ts.map +1 -0
  4. package/dist/__tests__/agent-mail-tools.test.js +255 -0
  5. package/dist/__tests__/agent-mail-tools.test.js.map +1 -0
  6. package/dist/__tests__/annotations.test.d.ts +8 -0
  7. package/dist/__tests__/annotations.test.d.ts.map +1 -0
  8. package/dist/__tests__/annotations.test.js +108 -0
  9. package/dist/__tests__/annotations.test.js.map +1 -0
  10. package/dist/__tests__/auth.test.d.ts +7 -0
  11. package/dist/__tests__/auth.test.d.ts.map +1 -0
  12. package/dist/__tests__/auth.test.js +161 -0
  13. package/dist/__tests__/auth.test.js.map +1 -0
  14. package/dist/__tests__/doctor.test.d.ts +16 -0
  15. package/dist/__tests__/doctor.test.d.ts.map +1 -0
  16. package/dist/__tests__/doctor.test.js +258 -0
  17. package/dist/__tests__/doctor.test.js.map +1 -0
  18. package/dist/__tests__/external-agents-tools.test.d.ts +11 -0
  19. package/dist/__tests__/external-agents-tools.test.d.ts.map +1 -0
  20. package/dist/__tests__/external-agents-tools.test.js +619 -0
  21. package/dist/__tests__/external-agents-tools.test.js.map +1 -0
  22. package/dist/__tests__/gateway-bearer.test.d.ts +12 -0
  23. package/dist/__tests__/gateway-bearer.test.d.ts.map +1 -0
  24. package/dist/__tests__/gateway-bearer.test.js +112 -0
  25. package/dist/__tests__/gateway-bearer.test.js.map +1 -0
  26. package/dist/__tests__/gateway-key-resolver.test.d.ts +10 -0
  27. package/dist/__tests__/gateway-key-resolver.test.d.ts.map +1 -0
  28. package/dist/__tests__/gateway-key-resolver.test.js +125 -0
  29. package/dist/__tests__/gateway-key-resolver.test.js.map +1 -0
  30. package/dist/__tests__/http-concurrency.test.d.ts +20 -0
  31. package/dist/__tests__/http-concurrency.test.d.ts.map +1 -0
  32. package/dist/__tests__/http-concurrency.test.js +254 -0
  33. package/dist/__tests__/http-concurrency.test.js.map +1 -0
  34. package/dist/__tests__/integration/protocol.test.d.ts +8 -0
  35. package/dist/__tests__/integration/protocol.test.d.ts.map +1 -0
  36. package/dist/__tests__/integration/protocol.test.js +110 -0
  37. package/dist/__tests__/integration/protocol.test.js.map +1 -0
  38. package/dist/__tests__/mcp-integrations.test.d.ts +8 -0
  39. package/dist/__tests__/mcp-integrations.test.d.ts.map +1 -0
  40. package/dist/__tests__/mcp-integrations.test.js +365 -0
  41. package/dist/__tests__/mcp-integrations.test.js.map +1 -0
  42. package/dist/__tests__/memory-graph-tools.test.d.ts +8 -0
  43. package/dist/__tests__/memory-graph-tools.test.d.ts.map +1 -0
  44. package/dist/__tests__/memory-graph-tools.test.js +254 -0
  45. package/dist/__tests__/memory-graph-tools.test.js.map +1 -0
  46. package/dist/__tests__/registry-dispatch.test.d.ts +11 -0
  47. package/dist/__tests__/registry-dispatch.test.d.ts.map +1 -0
  48. package/dist/__tests__/registry-dispatch.test.js +30 -0
  49. package/dist/__tests__/registry-dispatch.test.js.map +1 -0
  50. package/dist/__tests__/registry-listing-parity.test.d.ts +2 -0
  51. package/dist/__tests__/registry-listing-parity.test.d.ts.map +1 -0
  52. package/dist/__tests__/registry-listing-parity.test.js +89 -0
  53. package/dist/__tests__/registry-listing-parity.test.js.map +1 -0
  54. package/dist/__tests__/role-cap.test.d.ts +2 -0
  55. package/dist/__tests__/role-cap.test.d.ts.map +1 -0
  56. package/dist/__tests__/role-cap.test.js +113 -0
  57. package/dist/__tests__/role-cap.test.js.map +1 -0
  58. package/dist/__tests__/schedule-tools.test.d.ts +8 -0
  59. package/dist/__tests__/schedule-tools.test.d.ts.map +1 -0
  60. package/dist/__tests__/schedule-tools.test.js +285 -0
  61. package/dist/__tests__/schedule-tools.test.js.map +1 -0
  62. package/dist/__tests__/server-gateway-key.test.d.ts +18 -0
  63. package/dist/__tests__/server-gateway-key.test.d.ts.map +1 -0
  64. package/dist/__tests__/server-gateway-key.test.js +148 -0
  65. package/dist/__tests__/server-gateway-key.test.js.map +1 -0
  66. package/dist/__tests__/server-user-scoped.test.d.ts +34 -0
  67. package/dist/__tests__/server-user-scoped.test.d.ts.map +1 -0
  68. package/dist/__tests__/server-user-scoped.test.js +577 -0
  69. package/dist/__tests__/server-user-scoped.test.js.map +1 -0
  70. package/dist/__tests__/task-id-pattern.test.d.ts +12 -0
  71. package/dist/__tests__/task-id-pattern.test.d.ts.map +1 -0
  72. package/dist/__tests__/task-id-pattern.test.js +43 -0
  73. package/dist/__tests__/task-id-pattern.test.js.map +1 -0
  74. package/dist/__tests__/tiers.test.d.ts +7 -0
  75. package/dist/__tests__/tiers.test.d.ts.map +1 -0
  76. package/dist/__tests__/tiers.test.js +199 -0
  77. package/dist/__tests__/tiers.test.js.map +1 -0
  78. package/dist/__tests__/tools/hosted-agents.test.d.ts +9 -0
  79. package/dist/__tests__/tools/hosted-agents.test.d.ts.map +1 -0
  80. package/dist/__tests__/tools/hosted-agents.test.js +301 -0
  81. package/dist/__tests__/tools/hosted-agents.test.js.map +1 -0
  82. package/dist/__tests__/tools/llm-providers.test.d.ts +10 -0
  83. package/dist/__tests__/tools/llm-providers.test.d.ts.map +1 -0
  84. package/dist/__tests__/tools/llm-providers.test.js +105 -0
  85. package/dist/__tests__/tools/llm-providers.test.js.map +1 -0
  86. package/dist/__tests__/tools/services.test.js +139 -98
  87. package/dist/__tests__/tools/services.test.js.map +1 -1
  88. package/dist/__tests__/tools.test.d.ts +7 -0
  89. package/dist/__tests__/tools.test.d.ts.map +1 -0
  90. package/dist/__tests__/tools.test.js +152 -0
  91. package/dist/__tests__/tools.test.js.map +1 -0
  92. package/dist/__tests__/transport.test.d.ts +7 -0
  93. package/dist/__tests__/transport.test.d.ts.map +1 -0
  94. package/dist/__tests__/transport.test.js +397 -0
  95. package/dist/__tests__/transport.test.js.map +1 -0
  96. package/dist/__tests__/validate-credentials.test.d.ts +9 -0
  97. package/dist/__tests__/validate-credentials.test.d.ts.map +1 -0
  98. package/dist/__tests__/validate-credentials.test.js +172 -0
  99. package/dist/__tests__/validate-credentials.test.js.map +1 -0
  100. package/dist/__tests__/web-eval-tools.test.d.ts +8 -0
  101. package/dist/__tests__/web-eval-tools.test.d.ts.map +1 -0
  102. package/dist/__tests__/web-eval-tools.test.js +241 -0
  103. package/dist/__tests__/web-eval-tools.test.js.map +1 -0
  104. package/dist/__tests__/whoami.test.d.ts +11 -0
  105. package/dist/__tests__/whoami.test.d.ts.map +1 -0
  106. package/dist/__tests__/whoami.test.js +194 -0
  107. package/dist/__tests__/whoami.test.js.map +1 -0
  108. package/dist/__tests__/workflow-tools.test.d.ts +8 -0
  109. package/dist/__tests__/workflow-tools.test.d.ts.map +1 -0
  110. package/dist/__tests__/workflow-tools.test.js +261 -0
  111. package/dist/__tests__/workflow-tools.test.js.map +1 -0
  112. package/dist/__tests__/workloads.test.d.ts +9 -0
  113. package/dist/__tests__/workloads.test.d.ts.map +1 -0
  114. package/dist/__tests__/workloads.test.js +169 -0
  115. package/dist/__tests__/workloads.test.js.map +1 -0
  116. package/dist/auth/oauth-provider.d.ts +34 -0
  117. package/dist/auth/oauth-provider.d.ts.map +1 -0
  118. package/dist/auth/oauth-provider.js +75 -0
  119. package/dist/auth/oauth-provider.js.map +1 -0
  120. package/dist/auth/token-verifier.d.ts +45 -0
  121. package/dist/auth/token-verifier.d.ts.map +1 -0
  122. package/dist/auth/token-verifier.js +160 -0
  123. package/dist/auth/token-verifier.js.map +1 -0
  124. package/dist/connectors/claude-desktop.d.ts.map +1 -1
  125. package/dist/connectors/claude-desktop.js +3 -2
  126. package/dist/connectors/claude-desktop.js.map +1 -1
  127. package/dist/connectors/cursor.d.ts.map +1 -1
  128. package/dist/connectors/cursor.js +3 -2
  129. package/dist/connectors/cursor.js.map +1 -1
  130. package/dist/connectors/setup.d.ts.map +1 -1
  131. package/dist/connectors/setup.js +2 -1
  132. package/dist/connectors/setup.js.map +1 -1
  133. package/dist/connectors/vscode.d.ts.map +1 -1
  134. package/dist/connectors/vscode.js +3 -2
  135. package/dist/connectors/vscode.js.map +1 -1
  136. package/dist/connectors/windsurf.d.ts.map +1 -1
  137. package/dist/connectors/windsurf.js +3 -2
  138. package/dist/connectors/windsurf.js.map +1 -1
  139. package/dist/doctor.d.ts +34 -0
  140. package/dist/doctor.d.ts.map +1 -0
  141. package/dist/doctor.js +134 -0
  142. package/dist/doctor.js.map +1 -0
  143. package/dist/http-server.d.ts +56 -0
  144. package/dist/http-server.d.ts.map +1 -0
  145. package/dist/http-server.js +455 -0
  146. package/dist/http-server.js.map +1 -0
  147. package/dist/index.d.ts +5 -1
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +96 -171
  150. package/dist/index.js.map +1 -1
  151. package/dist/lib/consts.d.ts +21 -0
  152. package/dist/lib/consts.d.ts.map +1 -0
  153. package/dist/lib/consts.js +30 -0
  154. package/dist/lib/consts.js.map +1 -0
  155. package/dist/lib/dobby-client.d.ts +60 -3
  156. package/dist/lib/dobby-client.d.ts.map +1 -1
  157. package/dist/lib/dobby-client.js +145 -44
  158. package/dist/lib/dobby-client.js.map +1 -1
  159. package/dist/lib/gateway-key-resolver.d.ts +38 -0
  160. package/dist/lib/gateway-key-resolver.d.ts.map +1 -0
  161. package/dist/lib/gateway-key-resolver.js +59 -0
  162. package/dist/lib/gateway-key-resolver.js.map +1 -0
  163. package/dist/lib/log.d.ts +25 -0
  164. package/dist/lib/log.d.ts.map +1 -0
  165. package/dist/lib/log.js +36 -0
  166. package/dist/lib/log.js.map +1 -0
  167. package/dist/server.d.ts +175 -0
  168. package/dist/server.d.ts.map +1 -0
  169. package/dist/server.js +1017 -0
  170. package/dist/server.js.map +1 -0
  171. package/dist/tools/agent-mail.d.ts +112 -0
  172. package/dist/tools/agent-mail.d.ts.map +1 -0
  173. package/dist/tools/agent-mail.js +118 -0
  174. package/dist/tools/agent-mail.js.map +1 -0
  175. package/dist/tools/agent-versions.d.ts +93 -0
  176. package/dist/tools/agent-versions.d.ts.map +1 -0
  177. package/dist/tools/agent-versions.js +99 -0
  178. package/dist/tools/agent-versions.js.map +1 -0
  179. package/dist/tools/approvals.d.ts +24 -34
  180. package/dist/tools/approvals.d.ts.map +1 -1
  181. package/dist/tools/approvals.js +24 -81
  182. package/dist/tools/approvals.js.map +1 -1
  183. package/dist/tools/claude-code-sync.d.ts +40 -0
  184. package/dist/tools/claude-code-sync.d.ts.map +1 -0
  185. package/dist/tools/claude-code-sync.js +52 -0
  186. package/dist/tools/claude-code-sync.js.map +1 -0
  187. package/dist/tools/control-plane.d.ts +118 -0
  188. package/dist/tools/control-plane.d.ts.map +1 -0
  189. package/dist/tools/control-plane.js +135 -0
  190. package/dist/tools/control-plane.js.map +1 -0
  191. package/dist/tools/crew-builder.d.ts +24 -66
  192. package/dist/tools/crew-builder.d.ts.map +1 -1
  193. package/dist/tools/crew-builder.js +24 -185
  194. package/dist/tools/crew-builder.js.map +1 -1
  195. package/dist/tools/crewai.d.ts +24 -63
  196. package/dist/tools/crewai.d.ts.map +1 -1
  197. package/dist/tools/crewai.js +24 -145
  198. package/dist/tools/crewai.js.map +1 -1
  199. package/dist/tools/exa.d.ts +126 -0
  200. package/dist/tools/exa.d.ts.map +1 -0
  201. package/dist/tools/exa.js +125 -0
  202. package/dist/tools/exa.js.map +1 -0
  203. package/dist/tools/external-agents.d.ts +440 -0
  204. package/dist/tools/external-agents.d.ts.map +1 -0
  205. package/dist/tools/external-agents.js +386 -0
  206. package/dist/tools/external-agents.js.map +1 -0
  207. package/dist/tools/github-mcp.d.ts +228 -0
  208. package/dist/tools/github-mcp.d.ts.map +1 -0
  209. package/dist/tools/github-mcp.js +235 -0
  210. package/dist/tools/github-mcp.js.map +1 -0
  211. package/dist/tools/governance.d.ts +273 -0
  212. package/dist/tools/governance.d.ts.map +1 -0
  213. package/dist/tools/governance.js +286 -0
  214. package/dist/tools/governance.js.map +1 -0
  215. package/dist/tools/hosted-agents.d.ts +216 -0
  216. package/dist/tools/hosted-agents.d.ts.map +1 -0
  217. package/dist/tools/hosted-agents.js +214 -0
  218. package/dist/tools/hosted-agents.js.map +1 -0
  219. package/dist/tools/index.d.ts +6335 -191
  220. package/dist/tools/index.d.ts.map +1 -1
  221. package/dist/tools/index.js +441 -172
  222. package/dist/tools/index.js.map +1 -1
  223. package/dist/tools/jira.d.ts +60 -176
  224. package/dist/tools/jira.d.ts.map +1 -1
  225. package/dist/tools/jira.js +60 -365
  226. package/dist/tools/jira.js.map +1 -1
  227. package/dist/tools/llm-providers.d.ts +50 -0
  228. package/dist/tools/llm-providers.d.ts.map +1 -0
  229. package/dist/tools/llm-providers.js +41 -0
  230. package/dist/tools/llm-providers.js.map +1 -0
  231. package/dist/tools/mcp-metrics.d.ts +47 -0
  232. package/dist/tools/mcp-metrics.d.ts.map +1 -0
  233. package/dist/tools/mcp-metrics.js +53 -0
  234. package/dist/tools/mcp-metrics.js.map +1 -0
  235. package/dist/tools/mcp-tools.d.ts +12 -29
  236. package/dist/tools/mcp-tools.d.ts.map +1 -1
  237. package/dist/tools/mcp-tools.js +12 -131
  238. package/dist/tools/mcp-tools.js.map +1 -1
  239. package/dist/tools/mem0.d.ts +127 -0
  240. package/dist/tools/mem0.d.ts.map +1 -0
  241. package/dist/tools/mem0.js +155 -0
  242. package/dist/tools/mem0.js.map +1 -0
  243. package/dist/tools/memory-graph.d.ts +151 -0
  244. package/dist/tools/memory-graph.d.ts.map +1 -0
  245. package/dist/tools/memory-graph.js +159 -0
  246. package/dist/tools/memory-graph.js.map +1 -0
  247. package/dist/tools/memory-stores.d.ts +141 -0
  248. package/dist/tools/memory-stores.d.ts.map +1 -0
  249. package/dist/tools/memory-stores.js +147 -0
  250. package/dist/tools/memory-stores.js.map +1 -0
  251. package/dist/tools/messages.d.ts +12 -20
  252. package/dist/tools/messages.d.ts.map +1 -1
  253. package/dist/tools/messages.js +12 -49
  254. package/dist/tools/messages.js.map +1 -1
  255. package/dist/tools/moltbook.d.ts +328 -0
  256. package/dist/tools/moltbook.d.ts.map +1 -0
  257. package/dist/tools/moltbook.js +334 -0
  258. package/dist/tools/moltbook.js.map +1 -0
  259. package/dist/tools/monitoring-attribution.d.ts +71 -0
  260. package/dist/tools/monitoring-attribution.d.ts.map +1 -0
  261. package/dist/tools/monitoring-attribution.js +74 -0
  262. package/dist/tools/monitoring-attribution.js.map +1 -0
  263. package/dist/tools/ops.d.ts +139 -0
  264. package/dist/tools/ops.d.ts.map +1 -0
  265. package/dist/tools/ops.js +151 -0
  266. package/dist/tools/ops.js.map +1 -0
  267. package/dist/tools/orchestrations.d.ts +109 -0
  268. package/dist/tools/orchestrations.d.ts.map +1 -0
  269. package/dist/tools/orchestrations.js +115 -0
  270. package/dist/tools/orchestrations.js.map +1 -0
  271. package/dist/tools/outcomes.d.ts +138 -0
  272. package/dist/tools/outcomes.d.ts.map +1 -0
  273. package/dist/tools/outcomes.js +136 -0
  274. package/dist/tools/outcomes.js.map +1 -0
  275. package/dist/tools/schedules.d.ts +149 -0
  276. package/dist/tools/schedules.d.ts.map +1 -0
  277. package/dist/tools/schedules.js +155 -0
  278. package/dist/tools/schedules.js.map +1 -0
  279. package/dist/tools/services.d.ts +6 -16
  280. package/dist/tools/services.d.ts.map +1 -1
  281. package/dist/tools/services.js +6 -135
  282. package/dist/tools/services.js.map +1 -1
  283. package/dist/tools/sessions.d.ts +124 -0
  284. package/dist/tools/sessions.d.ts.map +1 -0
  285. package/dist/tools/sessions.js +130 -0
  286. package/dist/tools/sessions.js.map +1 -0
  287. package/dist/tools/setup-status.d.ts +29 -0
  288. package/dist/tools/setup-status.d.ts.map +1 -0
  289. package/dist/tools/setup-status.js +35 -0
  290. package/dist/tools/setup-status.js.map +1 -0
  291. package/dist/tools/tasks.d.ts +44 -56
  292. package/dist/tools/tasks.d.ts.map +1 -1
  293. package/dist/tools/tasks.js +48 -212
  294. package/dist/tools/tasks.js.map +1 -1
  295. package/dist/tools/tiers.d.ts +55 -0
  296. package/dist/tools/tiers.d.ts.map +1 -0
  297. package/dist/tools/tiers.js +239 -0
  298. package/dist/tools/tiers.js.map +1 -0
  299. package/dist/tools/unified-agents.d.ts +43 -0
  300. package/dist/tools/unified-agents.d.ts.map +1 -0
  301. package/dist/tools/unified-agents.js +46 -0
  302. package/dist/tools/unified-agents.js.map +1 -0
  303. package/dist/tools/web-eval.d.ts +129 -0
  304. package/dist/tools/web-eval.d.ts.map +1 -0
  305. package/dist/tools/web-eval.js +136 -0
  306. package/dist/tools/web-eval.js.map +1 -0
  307. package/dist/tools/workflow.d.ts +105 -0
  308. package/dist/tools/workflow.d.ts.map +1 -0
  309. package/dist/tools/workflow.js +111 -0
  310. package/dist/tools/workflow.js.map +1 -0
  311. package/dist/tools/workloads.d.ts +81 -0
  312. package/dist/tools/workloads.d.ts.map +1 -0
  313. package/dist/tools/workloads.js +81 -0
  314. package/dist/tools/workloads.js.map +1 -0
  315. package/package.json +13 -7
@@ -0,0 +1,619 @@
1
+ /**
2
+ * External Agents MCP Tools Tests
3
+ *
4
+ * Tests the 10 MCP tools that wrap /api/v1/gateway/external-agents/* endpoints:
5
+ * register/list/get/update/deregister
6
+ * trigger/get_triggers
7
+ * create_schedule/delete_schedule
8
+ * get_costs
9
+ */
10
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
11
+ import { createRegistry, toMcpResult } from '@dobbyai/capability-core';
12
+ // Mock global fetch
13
+ const mockFetch = vi.fn();
14
+ vi.stubGlobal('fetch', mockFetch);
15
+ // Mock DobbyClient — gatewayBearer mirrors the real fallback (apiKey when no
16
+ // gateway key/provider is configured); plain function so resetAllMocks keeps it.
17
+ const mockClient = {
18
+ apiUrl: 'http://localhost:3000',
19
+ apiKey: 'gk_svc_test_key_abc123',
20
+ tenantId: 'tenant_test_001',
21
+ gatewayBearer: async () => 'gk_svc_test_key_abc123',
22
+ };
23
+ const AGENT_ID = 'ext_abc123';
24
+ // ADR-019: the legacy handle* functions are gone — dispatch goes through the
25
+ // capability registry (handlers are verbatim copies; MCP output byte-identical).
26
+ const registry = createRegistry();
27
+ const callCap = async (id, client, args) => toMcpResult(await registry.get(id).handler({ client: client }, args));
28
+ function mockJson(status, body) {
29
+ mockFetch.mockResolvedValueOnce({
30
+ ok: status >= 200 && status < 300,
31
+ status,
32
+ json: () => Promise.resolve(body),
33
+ });
34
+ }
35
+ beforeEach(() => {
36
+ vi.resetAllMocks();
37
+ // Re-stub fetch after reset
38
+ vi.stubGlobal('fetch', mockFetch);
39
+ });
40
+ // ============================================
41
+ // register_external_agent
42
+ // ============================================
43
+ describe('register_external_agent', () => {
44
+ it('sends Bearer auth + X-Tenant-Id and returns agent + key', async () => {
45
+ mockJson(201, {
46
+ success: true,
47
+ data: {
48
+ agent: {
49
+ agent_id: AGENT_ID,
50
+ display_name: 'My Agent',
51
+ framework: 'crewai',
52
+ protocol: 'webhook',
53
+ endpoint_url: 'https://example.com',
54
+ status: 'active',
55
+ },
56
+ gateway_key: 'gk_svc_new_secret',
57
+ },
58
+ });
59
+ const result = await callCap('register_external_agent', mockClient, {
60
+ display_name: 'My Agent',
61
+ framework: 'crewai',
62
+ protocol: 'webhook',
63
+ endpoint_url: 'https://example.com',
64
+ });
65
+ expect(mockFetch).toHaveBeenCalledWith('http://localhost:3000/api/v1/gateway/external-agents', expect.objectContaining({
66
+ method: 'POST',
67
+ headers: expect.objectContaining({
68
+ 'Content-Type': 'application/json',
69
+ Authorization: 'Bearer gk_svc_test_key_abc123',
70
+ 'X-Tenant-Id': 'tenant_test_001',
71
+ }),
72
+ }));
73
+ const text = result.content[0].text;
74
+ expect(text).toContain(AGENT_ID);
75
+ expect(text).toContain('gk_svc_new_secret');
76
+ expect(text).toContain('SAVE NOW');
77
+ expect(result.isError).toBeUndefined();
78
+ });
79
+ it('returns isError on failure with API error message', async () => {
80
+ mockJson(403, { error: 'plan_not_supported', message: 'Upgrade to Team' });
81
+ const result = await callCap('register_external_agent', mockClient, {
82
+ display_name: 'X',
83
+ framework: 'custom',
84
+ protocol: 'webhook',
85
+ });
86
+ expect(result.isError).toBe(true);
87
+ expect(result.content[0].text).toContain('Upgrade to Team');
88
+ });
89
+ });
90
+ // ============================================
91
+ // list_external_agents
92
+ // ============================================
93
+ describe('list_external_agents', () => {
94
+ it('lists agents without filters', async () => {
95
+ mockJson(200, {
96
+ success: true,
97
+ data: [
98
+ { agent_id: 'ext_1', display_name: 'Alpha', framework: 'crewai', protocol: 'webhook', status: 'active' },
99
+ { agent_id: 'ext_2', display_name: 'Beta', framework: 'custom', protocol: 'rest', status: 'paused' },
100
+ ],
101
+ count: 2,
102
+ });
103
+ const result = await callCap('list_external_agents', mockClient, {});
104
+ expect(mockFetch).toHaveBeenCalledWith('http://localhost:3000/api/v1/gateway/external-agents', expect.objectContaining({ method: 'GET' }));
105
+ const text = result.content[0].text;
106
+ expect(text).toContain('External Agents (2)');
107
+ expect(text).toContain('Alpha');
108
+ expect(text).toContain('Beta');
109
+ });
110
+ it('passes tenant_id and status filters', async () => {
111
+ mockJson(200, { success: true, data: [], count: 0 });
112
+ await callCap('list_external_agents', mockClient, {
113
+ tenant_id: 'tenant_X',
114
+ status: 'active',
115
+ });
116
+ const url = mockFetch.mock.calls[0][0];
117
+ expect(url).toContain('tenant_id=tenant_X');
118
+ expect(url).toContain('status=active');
119
+ });
120
+ it('handles empty list', async () => {
121
+ mockJson(200, { success: true, data: [], count: 0 });
122
+ const result = await callCap('list_external_agents', mockClient, {});
123
+ expect(result.content[0].text).toContain('No external agents found');
124
+ });
125
+ });
126
+ // ============================================
127
+ // get_external_agent
128
+ // ============================================
129
+ describe('get_external_agent', () => {
130
+ it('fetches and formats a single agent', async () => {
131
+ mockJson(200, {
132
+ success: true,
133
+ data: {
134
+ agent_id: AGENT_ID,
135
+ display_name: 'Target',
136
+ framework: 'crewai',
137
+ protocol: 'webhook',
138
+ status: 'active',
139
+ endpoint_url: 'https://x.co',
140
+ capabilities: ['research'],
141
+ tags: ['experimental'],
142
+ has_auth_config: true,
143
+ auth_method: 'api_key',
144
+ tenant_id: 'tenant_X',
145
+ created_at: '2026-04-14T00:00:00Z',
146
+ },
147
+ });
148
+ const result = await callCap('get_external_agent', mockClient, { agent_id: AGENT_ID });
149
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}`, expect.objectContaining({ method: 'GET' }));
150
+ const text = result.content[0].text;
151
+ expect(text).toContain('Target');
152
+ expect(text).toContain(AGENT_ID);
153
+ expect(text).toContain('api_key');
154
+ expect(text).toContain('research');
155
+ });
156
+ it('returns error for 404', async () => {
157
+ mockJson(404, { error: 'not_found', message: 'External agent not found' });
158
+ const result = await callCap('get_external_agent', mockClient, { agent_id: 'ext_missing' });
159
+ expect(result.isError).toBe(true);
160
+ expect(result.content[0].text).toContain('not found');
161
+ });
162
+ it('shows declared outbound credentials (metadata only, never a secret value)', async () => {
163
+ mockJson(200, {
164
+ success: true,
165
+ data: {
166
+ agent_id: AGENT_ID,
167
+ display_name: 'Target',
168
+ framework: 'crewai',
169
+ protocol: 'webhook',
170
+ status: 'active',
171
+ capabilities: [],
172
+ tags: [],
173
+ created_at: '2026-07-18T00:00:00Z',
174
+ outbound_credentials: [
175
+ { provider: 'google_gemini', env_var_name: 'GEMINI_API_KEY', rotation_policy: '90-day rotation' },
176
+ ],
177
+ },
178
+ });
179
+ const result = await callCap('get_external_agent', mockClient, { agent_id: AGENT_ID });
180
+ const text = result.content[0].text;
181
+ expect(text).toContain('google_gemini');
182
+ expect(text).toContain('GEMINI_API_KEY');
183
+ expect(text).toContain('90-day rotation');
184
+ });
185
+ it('shows "(none declared)" when no outbound credentials are declared', async () => {
186
+ mockJson(200, {
187
+ success: true,
188
+ data: {
189
+ agent_id: AGENT_ID,
190
+ display_name: 'Target',
191
+ framework: 'crewai',
192
+ protocol: 'webhook',
193
+ status: 'active',
194
+ capabilities: [],
195
+ tags: [],
196
+ created_at: '2026-07-18T00:00:00Z',
197
+ },
198
+ });
199
+ const result = await callCap('get_external_agent', mockClient, { agent_id: AGENT_ID });
200
+ expect(result.content[0].text).toContain('(none declared)');
201
+ });
202
+ });
203
+ // ============================================
204
+ // update_external_agent
205
+ // ============================================
206
+ describe('update_external_agent', () => {
207
+ it('sends PATCH with only the changed fields', async () => {
208
+ mockJson(200, {
209
+ success: true,
210
+ data: { agent_id: AGENT_ID, status: 'paused' },
211
+ });
212
+ await callCap('update_external_agent', mockClient, {
213
+ agent_id: AGENT_ID,
214
+ status: 'paused',
215
+ });
216
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}`, expect.objectContaining({ method: 'PATCH' }));
217
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
218
+ expect(body).toEqual({ status: 'paused' });
219
+ expect(body.agent_id).toBeUndefined(); // should be stripped from body
220
+ });
221
+ it('surfaces validation errors', async () => {
222
+ mockJson(400, { error: 'validation_error', message: 'Invalid update payload' });
223
+ const result = await callCap('update_external_agent', mockClient, {
224
+ agent_id: AGENT_ID,
225
+ status: 'bogus',
226
+ });
227
+ expect(result.isError).toBe(true);
228
+ expect(result.content[0].text).toContain('Invalid update payload');
229
+ });
230
+ it('forwards outbound_credentials (attestation only) in the PATCH body', async () => {
231
+ mockJson(200, {
232
+ success: true,
233
+ data: { agent_id: AGENT_ID, status: 'active' },
234
+ });
235
+ await callCap('update_external_agent', mockClient, {
236
+ agent_id: AGENT_ID,
237
+ outbound_credentials: [
238
+ { provider: 'google_gemini', env_var_name: 'GEMINI_API_KEY' },
239
+ ],
240
+ });
241
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
242
+ expect(body).toEqual({
243
+ outbound_credentials: [
244
+ { provider: 'google_gemini', env_var_name: 'GEMINI_API_KEY' },
245
+ ],
246
+ });
247
+ // The tool never accepts/forwards a secret value — only metadata fields.
248
+ expect(JSON.stringify(body)).not.toMatch(/"value"|"api_key"|"secret"/);
249
+ });
250
+ });
251
+ // ============================================
252
+ // deregister_external_agent
253
+ // ============================================
254
+ describe('deregister_external_agent', () => {
255
+ it('sends DELETE and echoes success message', async () => {
256
+ mockJson(200, {
257
+ success: true,
258
+ message: `External agent ${AGENT_ID} has been deregistered and its gateway key revoked.`,
259
+ });
260
+ const result = await callCap('deregister_external_agent', mockClient, { agent_id: AGENT_ID });
261
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}`, expect.objectContaining({ method: 'DELETE' }));
262
+ expect(result.content[0].text).toContain('deregistered');
263
+ expect(result.isError).toBeUndefined();
264
+ });
265
+ });
266
+ // ============================================
267
+ // trigger_external_agent
268
+ // ============================================
269
+ describe('trigger_external_agent', () => {
270
+ it('posts inputs and returns trigger_id', async () => {
271
+ mockJson(200, {
272
+ success: true,
273
+ data: { trigger_id: 'trig_xyz', status: 'sent' },
274
+ });
275
+ const result = await callCap('trigger_external_agent', mockClient, {
276
+ agent_id: AGENT_ID,
277
+ inputs: { topic: 'AI safety' },
278
+ });
279
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}/trigger`, expect.objectContaining({ method: 'POST' }));
280
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
281
+ expect(body.inputs).toEqual({ topic: 'AI safety' });
282
+ const text = result.content[0].text;
283
+ expect(text).toContain('trig_xyz');
284
+ expect(text).toContain('sent');
285
+ });
286
+ it('sends empty inputs when none provided', async () => {
287
+ mockJson(200, { success: true, data: { trigger_id: 'trig_1', status: 'sent' } });
288
+ await callCap('trigger_external_agent', mockClient, { agent_id: AGENT_ID });
289
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
290
+ expect(body.inputs).toEqual({});
291
+ });
292
+ it('marks as attempted ⚠️ on 504 timeout', async () => {
293
+ mockJson(504, {
294
+ success: false,
295
+ data: { trigger_id: 'trig_slow', status: 'timed_out' },
296
+ error: 'Webhook timed out',
297
+ });
298
+ // gatewayFetch throws on non-2xx, so this should result in isError
299
+ const result = await callCap('trigger_external_agent', mockClient, {
300
+ agent_id: AGENT_ID,
301
+ inputs: {},
302
+ });
303
+ expect(result.isError).toBe(true);
304
+ });
305
+ });
306
+ // ============================================
307
+ // get_agent_triggers
308
+ // ============================================
309
+ describe('get_agent_triggers', () => {
310
+ it('lists triggers with pagination + stats', async () => {
311
+ mockJson(200, {
312
+ success: true,
313
+ data: {
314
+ triggers: [
315
+ {
316
+ id: 'trig_1',
317
+ trigger_status: 'completed',
318
+ trigger_type: 'api',
319
+ triggered_at: '2026-04-14T10:00:00Z',
320
+ },
321
+ ],
322
+ stats: {
323
+ total: 5,
324
+ completed: 4,
325
+ failed: 1,
326
+ avg_duration_ms: 1500,
327
+ total_cost_usd: 0.12,
328
+ },
329
+ },
330
+ metadata: { page: 1, limit: 10, total: 1, total_pages: 1 },
331
+ });
332
+ const result = await callCap('get_agent_triggers', mockClient, {
333
+ agent_id: AGENT_ID,
334
+ include_stats: true,
335
+ });
336
+ const url = mockFetch.mock.calls[0][0];
337
+ expect(url).toContain('/triggers');
338
+ expect(url).toContain('include_stats=true');
339
+ const text = result.content[0].text;
340
+ expect(text).toContain('Trigger History');
341
+ expect(text).toContain('trig_1');
342
+ expect(text).toContain('Total: 5');
343
+ });
344
+ it('passes page + status filter through', async () => {
345
+ mockJson(200, {
346
+ success: true,
347
+ data: { triggers: [] },
348
+ metadata: { page: 2, limit: 20, total: 0, total_pages: 0 },
349
+ });
350
+ await callCap('get_agent_triggers', mockClient, {
351
+ agent_id: AGENT_ID,
352
+ page: 2,
353
+ page_size: 20,
354
+ status: 'failed',
355
+ });
356
+ const url = mockFetch.mock.calls[0][0];
357
+ expect(url).toContain('page=2');
358
+ expect(url).toContain('page_size=20');
359
+ expect(url).toContain('status=failed');
360
+ });
361
+ });
362
+ // ============================================
363
+ // create_agent_schedule
364
+ // ============================================
365
+ describe('create_agent_schedule', () => {
366
+ it('posts schedule body without agent_id and returns schedule details', async () => {
367
+ mockJson(201, {
368
+ success: true,
369
+ data: {
370
+ schedule: {
371
+ id: 'sched_abc',
372
+ name: 'Daily',
373
+ nextRunAt: '2026-04-15T09:00:00Z',
374
+ overlapPolicy: 'skip',
375
+ },
376
+ },
377
+ });
378
+ const result = await callCap('create_agent_schedule', mockClient, {
379
+ agent_id: AGENT_ID,
380
+ name: 'Daily',
381
+ task_title: 'Research topics',
382
+ schedule_config: { frequency: 'daily', time: '09:00' },
383
+ });
384
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}/schedule`, expect.objectContaining({ method: 'POST' }));
385
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
386
+ expect(body.agent_id).toBeUndefined();
387
+ expect(body.name).toBe('Daily');
388
+ expect(body.task_title).toBe('Research topics');
389
+ expect(body.schedule_config).toEqual({ frequency: 'daily', time: '09:00' });
390
+ expect(result.content[0].text).toContain('sched_abc');
391
+ expect(result.content[0].text).toContain('created');
392
+ });
393
+ it('surfaces 409 conflict when schedule exists', async () => {
394
+ mockJson(409, { error: 'schedule_exists', message: 'Schedule already exists for this agent.' });
395
+ const result = await callCap('create_agent_schedule', mockClient, {
396
+ agent_id: AGENT_ID,
397
+ name: 'X',
398
+ task_title: 'Y',
399
+ schedule_config: { frequency: 'daily' },
400
+ });
401
+ expect(result.isError).toBe(true);
402
+ expect(result.content[0].text).toContain('already exists');
403
+ });
404
+ });
405
+ // ============================================
406
+ // delete_agent_schedule
407
+ // ============================================
408
+ describe('delete_agent_schedule', () => {
409
+ it('sends DELETE to the schedule endpoint', async () => {
410
+ mockJson(200, { success: true, data: { deleted: true } });
411
+ const result = await callCap('delete_agent_schedule', mockClient, { agent_id: AGENT_ID });
412
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}/schedule`, expect.objectContaining({ method: 'DELETE' }));
413
+ expect(result.content[0].text).toContain('disabled');
414
+ });
415
+ it('surfaces 404 when no schedule', async () => {
416
+ mockJson(404, { error: 'not_found', message: 'No schedule found' });
417
+ const result = await callCap('delete_agent_schedule', mockClient, { agent_id: AGENT_ID });
418
+ expect(result.isError).toBe(true);
419
+ expect(result.content[0].text).toContain('No schedule found');
420
+ });
421
+ });
422
+ // ============================================
423
+ // get_agent_costs
424
+ // ============================================
425
+ describe('get_agent_costs', () => {
426
+ it('returns MTD + daily breakdown', async () => {
427
+ mockJson(200, {
428
+ success: true,
429
+ data: {
430
+ agent_id: AGENT_ID,
431
+ cost_mtd_usd: 12.345,
432
+ mtd_requests: 50,
433
+ mtd_input_tokens: 5000,
434
+ mtd_output_tokens: 2000,
435
+ daily: [
436
+ { day: '2026-04-13', cost_usd: 5.12, request_count: 20 },
437
+ { day: '2026-04-14', cost_usd: 7.23, request_count: 30 },
438
+ ],
439
+ days: 30,
440
+ },
441
+ });
442
+ const result = await callCap('get_agent_costs', mockClient, { agent_id: AGENT_ID });
443
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}/costs`, expect.objectContaining({ method: 'GET' }));
444
+ const text = result.content[0].text;
445
+ expect(text).toContain('$12.3450');
446
+ expect(text).toContain('50');
447
+ expect(text).toContain('2026-04-13');
448
+ expect(text).toContain('2026-04-14');
449
+ });
450
+ it('passes days query param when provided', async () => {
451
+ mockJson(200, {
452
+ success: true,
453
+ data: { cost_mtd_usd: 0, mtd_requests: 0, mtd_input_tokens: 0, mtd_output_tokens: 0, daily: [], days: 7 },
454
+ });
455
+ await callCap('get_agent_costs', mockClient, { agent_id: AGENT_ID, days: 7 });
456
+ const url = mockFetch.mock.calls[0][0];
457
+ expect(url).toContain('days=7');
458
+ });
459
+ it('handles no activity gracefully', async () => {
460
+ mockJson(200, {
461
+ success: true,
462
+ data: { cost_mtd_usd: 0, mtd_requests: 0, mtd_input_tokens: 0, mtd_output_tokens: 0, daily: [], days: 30 },
463
+ });
464
+ const result = await callCap('get_agent_costs', mockClient, { agent_id: AGENT_ID });
465
+ expect(result.content[0].text).toContain('No activity');
466
+ });
467
+ });
468
+ // ============================================
469
+ // retry_external_agent_trigger
470
+ // ============================================
471
+ describe('retry_external_agent_trigger', () => {
472
+ it('POSTs to /triggers/:tid and returns new trigger details', async () => {
473
+ mockJson(200, {
474
+ success: true,
475
+ data: { trigger: { trigger_id: 'trig_retry_001', status: 'sent' } },
476
+ });
477
+ const result = await callCap('retry_external_agent_trigger', mockClient, {
478
+ agent_id: AGENT_ID,
479
+ trigger_id: 'trig_orig_001',
480
+ });
481
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}/triggers/trig_orig_001`, expect.objectContaining({ method: 'POST' }));
482
+ const text = result.content[0].text;
483
+ expect(text).toContain('Trigger Retried');
484
+ expect(text).toContain('trig_retry_001');
485
+ expect(text).toContain('trig_orig_001');
486
+ });
487
+ it('surfaces 400 cannot_retry with API message', async () => {
488
+ mockJson(400, {
489
+ error: 'cannot_retry',
490
+ message: "Cannot retry trigger with status 'completed'",
491
+ });
492
+ const result = await callCap('retry_external_agent_trigger', mockClient, {
493
+ agent_id: AGENT_ID,
494
+ trigger_id: 'trig_done',
495
+ });
496
+ expect(result.isError).toBe(true);
497
+ expect(result.content[0].text).toContain('Cannot retry');
498
+ });
499
+ it('surfaces 404 when trigger not found', async () => {
500
+ mockJson(404, { error: 'not_found', message: 'Trigger not found' });
501
+ const result = await callCap('retry_external_agent_trigger', mockClient, {
502
+ agent_id: AGENT_ID,
503
+ trigger_id: 'trig_missing',
504
+ });
505
+ expect(result.isError).toBe(true);
506
+ expect(result.content[0].text).toContain('not found');
507
+ });
508
+ });
509
+ // ============================================
510
+ // update_agent_schedule
511
+ // ============================================
512
+ describe('update_agent_schedule', () => {
513
+ it('pauses a schedule and reports the action', async () => {
514
+ mockJson(200, { success: true, data: { updated: true } });
515
+ const result = await callCap('update_agent_schedule', mockClient, {
516
+ agent_id: AGENT_ID,
517
+ paused: true,
518
+ pause_reason: 'deploy window',
519
+ });
520
+ expect(mockFetch).toHaveBeenCalledWith(`http://localhost:3000/api/v1/gateway/external-agents/${AGENT_ID}/schedule`, expect.objectContaining({ method: 'PATCH' }));
521
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
522
+ expect(body.paused).toBe(true);
523
+ expect(body.pause_reason).toBe('deploy window');
524
+ expect(body.agent_id).toBeUndefined(); // agent_id goes in path, not body
525
+ expect(result.content[0].text).toContain('paused');
526
+ });
527
+ it('updates schedule_config in place and lists changed fields', async () => {
528
+ mockJson(200, { success: true, data: { updated: true } });
529
+ const result = await callCap('update_agent_schedule', mockClient, {
530
+ agent_id: AGENT_ID,
531
+ name: 'Hourly Runs',
532
+ schedule_config: { frequency: 'hourly' },
533
+ });
534
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
535
+ expect(body.name).toBe('Hourly Runs');
536
+ expect(body.schedule_config.frequency).toBe('hourly');
537
+ const text = result.content[0].text;
538
+ expect(text).toContain('updated');
539
+ expect(text).toContain('name');
540
+ expect(text).toContain('schedule_config');
541
+ });
542
+ it('resumes a paused schedule', async () => {
543
+ mockJson(200, { success: true, data: { updated: true } });
544
+ const result = await callCap('update_agent_schedule', mockClient, {
545
+ agent_id: AGENT_ID,
546
+ paused: false,
547
+ });
548
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
549
+ expect(body.paused).toBe(false);
550
+ expect(result.content[0].text).toContain('resumed');
551
+ });
552
+ it('surfaces 404 when no schedule exists', async () => {
553
+ mockJson(404, { error: 'not_found', message: 'No schedule found for this agent' });
554
+ const result = await callCap('update_agent_schedule', mockClient, {
555
+ agent_id: AGENT_ID,
556
+ paused: true,
557
+ });
558
+ expect(result.isError).toBe(true);
559
+ expect(result.content[0].text).toContain('No schedule');
560
+ });
561
+ });
562
+ // ============================================
563
+ // Tool Definitions
564
+ // ============================================
565
+ describe('Tool definitions', () => {
566
+ it('exports 12 tools with required metadata', async () => {
567
+ const { externalAgentTools } = await import('../tools/external-agents.js');
568
+ const names = Object.keys(externalAgentTools);
569
+ expect(names).toHaveLength(12);
570
+ expect(names).toEqual(expect.arrayContaining([
571
+ 'register_external_agent',
572
+ 'list_external_agents',
573
+ 'get_external_agent',
574
+ 'update_external_agent',
575
+ 'deregister_external_agent',
576
+ 'trigger_external_agent',
577
+ 'retry_external_agent_trigger',
578
+ 'get_agent_triggers',
579
+ 'create_agent_schedule',
580
+ 'update_agent_schedule',
581
+ 'delete_agent_schedule',
582
+ 'get_agent_costs',
583
+ ]));
584
+ // Every tool has annotations + inputSchema
585
+ for (const tool of Object.values(externalAgentTools)) {
586
+ expect(tool.name).toBeTruthy();
587
+ expect(tool.description).toBeTruthy();
588
+ expect(tool.annotations).toBeDefined();
589
+ expect(tool.annotations.title).toBeTruthy();
590
+ expect(tool.inputSchema).toBeDefined();
591
+ expect(tool.inputSchema.type).toBe('object');
592
+ }
593
+ });
594
+ it('destructive tools are correctly marked', async () => {
595
+ const { externalAgentTools } = await import('../tools/external-agents.js');
596
+ const destructive = [
597
+ 'register_external_agent',
598
+ 'update_external_agent',
599
+ 'deregister_external_agent',
600
+ 'trigger_external_agent',
601
+ 'retry_external_agent_trigger',
602
+ 'create_agent_schedule',
603
+ 'update_agent_schedule',
604
+ 'delete_agent_schedule',
605
+ ];
606
+ const readOnly = ['list_external_agents', 'get_external_agent', 'get_agent_triggers', 'get_agent_costs'];
607
+ for (const name of destructive) {
608
+ const tool = externalAgentTools[name];
609
+ expect(tool.annotations.destructiveHint).toBe(true);
610
+ expect(tool.annotations.readOnlyHint).toBe(false);
611
+ }
612
+ for (const name of readOnly) {
613
+ const tool = externalAgentTools[name];
614
+ expect(tool.annotations.readOnlyHint).toBe(true);
615
+ expect(tool.annotations.destructiveHint).toBe(false);
616
+ }
617
+ });
618
+ });
619
+ //# sourceMappingURL=external-agents-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-agents-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/external-agents-tools.test.ts"],"names":[],"mappings":"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"}