@dobbyai/mcp-external 1.1.0 → 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 (289) hide show
  1. package/README.md +44 -14
  2. package/dist/__tests__/agent-mail-tools.test.js +19 -26
  3. package/dist/__tests__/agent-mail-tools.test.js.map +1 -1
  4. package/dist/__tests__/auth.test.js +50 -5
  5. package/dist/__tests__/auth.test.js.map +1 -1
  6. package/dist/__tests__/doctor.test.d.ts +16 -0
  7. package/dist/__tests__/doctor.test.d.ts.map +1 -0
  8. package/dist/__tests__/doctor.test.js +258 -0
  9. package/dist/__tests__/doctor.test.js.map +1 -0
  10. package/dist/__tests__/external-agents-tools.test.d.ts +11 -0
  11. package/dist/__tests__/external-agents-tools.test.d.ts.map +1 -0
  12. package/dist/__tests__/external-agents-tools.test.js +619 -0
  13. package/dist/__tests__/external-agents-tools.test.js.map +1 -0
  14. package/dist/__tests__/gateway-bearer.test.d.ts +12 -0
  15. package/dist/__tests__/gateway-bearer.test.d.ts.map +1 -0
  16. package/dist/__tests__/gateway-bearer.test.js +112 -0
  17. package/dist/__tests__/gateway-bearer.test.js.map +1 -0
  18. package/dist/__tests__/gateway-key-resolver.test.d.ts +10 -0
  19. package/dist/__tests__/gateway-key-resolver.test.d.ts.map +1 -0
  20. package/dist/__tests__/gateway-key-resolver.test.js +125 -0
  21. package/dist/__tests__/gateway-key-resolver.test.js.map +1 -0
  22. package/dist/__tests__/http-concurrency.test.d.ts +20 -0
  23. package/dist/__tests__/http-concurrency.test.d.ts.map +1 -0
  24. package/dist/__tests__/http-concurrency.test.js +254 -0
  25. package/dist/__tests__/http-concurrency.test.js.map +1 -0
  26. package/dist/__tests__/integration/protocol.test.js +14 -8
  27. package/dist/__tests__/integration/protocol.test.js.map +1 -1
  28. package/dist/__tests__/mcp-integrations.test.js +20 -30
  29. package/dist/__tests__/mcp-integrations.test.js.map +1 -1
  30. package/dist/__tests__/memory-graph-tools.test.js +27 -38
  31. package/dist/__tests__/memory-graph-tools.test.js.map +1 -1
  32. package/dist/__tests__/registry-dispatch.test.d.ts +11 -0
  33. package/dist/__tests__/registry-dispatch.test.d.ts.map +1 -0
  34. package/dist/__tests__/registry-dispatch.test.js +30 -0
  35. package/dist/__tests__/registry-dispatch.test.js.map +1 -0
  36. package/dist/__tests__/registry-listing-parity.test.d.ts +2 -0
  37. package/dist/__tests__/registry-listing-parity.test.d.ts.map +1 -0
  38. package/dist/__tests__/registry-listing-parity.test.js +89 -0
  39. package/dist/__tests__/registry-listing-parity.test.js.map +1 -0
  40. package/dist/__tests__/role-cap.test.d.ts +2 -0
  41. package/dist/__tests__/role-cap.test.d.ts.map +1 -0
  42. package/dist/__tests__/role-cap.test.js +113 -0
  43. package/dist/__tests__/role-cap.test.js.map +1 -0
  44. package/dist/__tests__/schedule-tools.test.js +15 -20
  45. package/dist/__tests__/schedule-tools.test.js.map +1 -1
  46. package/dist/__tests__/server-gateway-key.test.d.ts +18 -0
  47. package/dist/__tests__/server-gateway-key.test.d.ts.map +1 -0
  48. package/dist/__tests__/server-gateway-key.test.js +148 -0
  49. package/dist/__tests__/server-gateway-key.test.js.map +1 -0
  50. package/dist/__tests__/server-user-scoped.test.d.ts +34 -0
  51. package/dist/__tests__/server-user-scoped.test.d.ts.map +1 -0
  52. package/dist/__tests__/server-user-scoped.test.js +577 -0
  53. package/dist/__tests__/server-user-scoped.test.js.map +1 -0
  54. package/dist/__tests__/task-id-pattern.test.d.ts +12 -0
  55. package/dist/__tests__/task-id-pattern.test.d.ts.map +1 -0
  56. package/dist/__tests__/task-id-pattern.test.js +43 -0
  57. package/dist/__tests__/task-id-pattern.test.js.map +1 -0
  58. package/dist/__tests__/tiers.test.js +152 -56
  59. package/dist/__tests__/tiers.test.js.map +1 -1
  60. package/dist/__tests__/tools/hosted-agents.test.d.ts +9 -0
  61. package/dist/__tests__/tools/hosted-agents.test.d.ts.map +1 -0
  62. package/dist/__tests__/tools/hosted-agents.test.js +301 -0
  63. package/dist/__tests__/tools/hosted-agents.test.js.map +1 -0
  64. package/dist/__tests__/tools/llm-providers.test.d.ts +10 -0
  65. package/dist/__tests__/tools/llm-providers.test.d.ts.map +1 -0
  66. package/dist/__tests__/tools/llm-providers.test.js +105 -0
  67. package/dist/__tests__/tools/llm-providers.test.js.map +1 -0
  68. package/dist/__tests__/tools/services.test.js +139 -98
  69. package/dist/__tests__/tools/services.test.js.map +1 -1
  70. package/dist/__tests__/tools.test.js +24 -15
  71. package/dist/__tests__/tools.test.js.map +1 -1
  72. package/dist/__tests__/transport.test.js +365 -23
  73. package/dist/__tests__/transport.test.js.map +1 -1
  74. package/dist/__tests__/validate-credentials.test.d.ts +9 -0
  75. package/dist/__tests__/validate-credentials.test.d.ts.map +1 -0
  76. package/dist/__tests__/validate-credentials.test.js +172 -0
  77. package/dist/__tests__/validate-credentials.test.js.map +1 -0
  78. package/dist/__tests__/web-eval-tools.test.js +21 -32
  79. package/dist/__tests__/web-eval-tools.test.js.map +1 -1
  80. package/dist/__tests__/whoami.test.d.ts +11 -0
  81. package/dist/__tests__/whoami.test.d.ts.map +1 -0
  82. package/dist/__tests__/whoami.test.js +194 -0
  83. package/dist/__tests__/whoami.test.js.map +1 -0
  84. package/dist/__tests__/workflow-tools.test.js +20 -27
  85. package/dist/__tests__/workflow-tools.test.js.map +1 -1
  86. package/dist/__tests__/workloads.test.d.ts +9 -0
  87. package/dist/__tests__/workloads.test.d.ts.map +1 -0
  88. package/dist/__tests__/workloads.test.js +169 -0
  89. package/dist/__tests__/workloads.test.js.map +1 -0
  90. package/dist/auth/token-verifier.d.ts +11 -6
  91. package/dist/auth/token-verifier.d.ts.map +1 -1
  92. package/dist/auth/token-verifier.js +41 -19
  93. package/dist/auth/token-verifier.js.map +1 -1
  94. package/dist/connectors/claude-desktop.d.ts.map +1 -1
  95. package/dist/connectors/claude-desktop.js +3 -2
  96. package/dist/connectors/claude-desktop.js.map +1 -1
  97. package/dist/connectors/cursor.d.ts.map +1 -1
  98. package/dist/connectors/cursor.js +3 -2
  99. package/dist/connectors/cursor.js.map +1 -1
  100. package/dist/connectors/setup.d.ts.map +1 -1
  101. package/dist/connectors/setup.js +2 -1
  102. package/dist/connectors/setup.js.map +1 -1
  103. package/dist/connectors/vscode.d.ts.map +1 -1
  104. package/dist/connectors/vscode.js +3 -2
  105. package/dist/connectors/vscode.js.map +1 -1
  106. package/dist/connectors/windsurf.d.ts.map +1 -1
  107. package/dist/connectors/windsurf.js +3 -2
  108. package/dist/connectors/windsurf.js.map +1 -1
  109. package/dist/doctor.d.ts +34 -0
  110. package/dist/doctor.d.ts.map +1 -0
  111. package/dist/doctor.js +134 -0
  112. package/dist/doctor.js.map +1 -0
  113. package/dist/http-server.d.ts +24 -3
  114. package/dist/http-server.d.ts.map +1 -1
  115. package/dist/http-server.js +342 -62
  116. package/dist/http-server.js.map +1 -1
  117. package/dist/index.d.ts +5 -1
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +72 -208
  120. package/dist/index.js.map +1 -1
  121. package/dist/lib/consts.d.ts +21 -0
  122. package/dist/lib/consts.d.ts.map +1 -0
  123. package/dist/lib/consts.js +30 -0
  124. package/dist/lib/consts.js.map +1 -0
  125. package/dist/lib/dobby-client.d.ts +50 -23
  126. package/dist/lib/dobby-client.d.ts.map +1 -1
  127. package/dist/lib/dobby-client.js +105 -54
  128. package/dist/lib/dobby-client.js.map +1 -1
  129. package/dist/lib/gateway-key-resolver.d.ts +38 -0
  130. package/dist/lib/gateway-key-resolver.d.ts.map +1 -0
  131. package/dist/lib/gateway-key-resolver.js +59 -0
  132. package/dist/lib/gateway-key-resolver.js.map +1 -0
  133. package/dist/lib/log.d.ts +25 -0
  134. package/dist/lib/log.d.ts.map +1 -0
  135. package/dist/lib/log.js +36 -0
  136. package/dist/lib/log.js.map +1 -0
  137. package/dist/server.d.ts +175 -0
  138. package/dist/server.d.ts.map +1 -0
  139. package/dist/server.js +1017 -0
  140. package/dist/server.js.map +1 -0
  141. package/dist/tools/agent-mail.d.ts +0 -41
  142. package/dist/tools/agent-mail.d.ts.map +1 -1
  143. package/dist/tools/agent-mail.js +0 -222
  144. package/dist/tools/agent-mail.js.map +1 -1
  145. package/dist/tools/agent-versions.d.ts +93 -0
  146. package/dist/tools/agent-versions.d.ts.map +1 -0
  147. package/dist/tools/agent-versions.js +99 -0
  148. package/dist/tools/agent-versions.js.map +1 -0
  149. package/dist/tools/approvals.d.ts +0 -34
  150. package/dist/tools/approvals.d.ts.map +1 -1
  151. package/dist/tools/approvals.js +0 -81
  152. package/dist/tools/approvals.js.map +1 -1
  153. package/dist/tools/claude-code-sync.d.ts +40 -0
  154. package/dist/tools/claude-code-sync.d.ts.map +1 -0
  155. package/dist/tools/claude-code-sync.js +52 -0
  156. package/dist/tools/claude-code-sync.js.map +1 -0
  157. package/dist/tools/control-plane.d.ts +118 -0
  158. package/dist/tools/control-plane.d.ts.map +1 -0
  159. package/dist/tools/control-plane.js +135 -0
  160. package/dist/tools/control-plane.js.map +1 -0
  161. package/dist/tools/crew-builder.d.ts +0 -66
  162. package/dist/tools/crew-builder.d.ts.map +1 -1
  163. package/dist/tools/crew-builder.js +0 -185
  164. package/dist/tools/crew-builder.js.map +1 -1
  165. package/dist/tools/crewai.d.ts +0 -63
  166. package/dist/tools/crewai.d.ts.map +1 -1
  167. package/dist/tools/crewai.js +0 -145
  168. package/dist/tools/crewai.js.map +1 -1
  169. package/dist/tools/exa.d.ts +0 -35
  170. package/dist/tools/exa.d.ts.map +1 -1
  171. package/dist/tools/exa.js +0 -103
  172. package/dist/tools/exa.js.map +1 -1
  173. package/dist/tools/external-agents.d.ts +440 -0
  174. package/dist/tools/external-agents.d.ts.map +1 -0
  175. package/dist/tools/external-agents.js +386 -0
  176. package/dist/tools/external-agents.js.map +1 -0
  177. package/dist/tools/github-mcp.d.ts +0 -75
  178. package/dist/tools/github-mcp.d.ts.map +1 -1
  179. package/dist/tools/github-mcp.js +0 -162
  180. package/dist/tools/github-mcp.js.map +1 -1
  181. package/dist/tools/governance.d.ts +162 -18
  182. package/dist/tools/governance.d.ts.map +1 -1
  183. package/dist/tools/governance.js +208 -93
  184. package/dist/tools/governance.js.map +1 -1
  185. package/dist/tools/hosted-agents.d.ts +216 -0
  186. package/dist/tools/hosted-agents.d.ts.map +1 -0
  187. package/dist/tools/hosted-agents.js +214 -0
  188. package/dist/tools/hosted-agents.js.map +1 -0
  189. package/dist/tools/index.d.ts +3933 -1219
  190. package/dist/tools/index.d.ts.map +1 -1
  191. package/dist/tools/index.js +412 -393
  192. package/dist/tools/index.js.map +1 -1
  193. package/dist/tools/jira.d.ts +0 -176
  194. package/dist/tools/jira.d.ts.map +1 -1
  195. package/dist/tools/jira.js +0 -365
  196. package/dist/tools/jira.js.map +1 -1
  197. package/dist/tools/llm-providers.d.ts +50 -0
  198. package/dist/tools/llm-providers.d.ts.map +1 -0
  199. package/dist/tools/llm-providers.js +41 -0
  200. package/dist/tools/llm-providers.js.map +1 -0
  201. package/dist/tools/mcp-metrics.d.ts +0 -15
  202. package/dist/tools/mcp-metrics.d.ts.map +1 -1
  203. package/dist/tools/mcp-metrics.js +0 -217
  204. package/dist/tools/mcp-metrics.js.map +1 -1
  205. package/dist/tools/mcp-tools.d.ts +0 -29
  206. package/dist/tools/mcp-tools.d.ts.map +1 -1
  207. package/dist/tools/mcp-tools.js +0 -131
  208. package/dist/tools/mcp-tools.js.map +1 -1
  209. package/dist/tools/mem0.d.ts +0 -41
  210. package/dist/tools/mem0.d.ts.map +1 -1
  211. package/dist/tools/mem0.js +65 -165
  212. package/dist/tools/mem0.js.map +1 -1
  213. package/dist/tools/memory-graph.d.ts +0 -46
  214. package/dist/tools/memory-graph.d.ts.map +1 -1
  215. package/dist/tools/memory-graph.js +0 -386
  216. package/dist/tools/memory-graph.js.map +1 -1
  217. package/dist/tools/memory-stores.d.ts +141 -0
  218. package/dist/tools/memory-stores.d.ts.map +1 -0
  219. package/dist/tools/memory-stores.js +147 -0
  220. package/dist/tools/memory-stores.js.map +1 -0
  221. package/dist/tools/messages.d.ts +0 -20
  222. package/dist/tools/messages.d.ts.map +1 -1
  223. package/dist/tools/messages.js +0 -49
  224. package/dist/tools/messages.js.map +1 -1
  225. package/dist/tools/moltbook.d.ts +0 -236
  226. package/dist/tools/moltbook.d.ts.map +1 -1
  227. package/dist/tools/moltbook.js +0 -458
  228. package/dist/tools/moltbook.js.map +1 -1
  229. package/dist/tools/monitoring-attribution.d.ts +71 -0
  230. package/dist/tools/monitoring-attribution.d.ts.map +1 -0
  231. package/dist/tools/monitoring-attribution.js +74 -0
  232. package/dist/tools/monitoring-attribution.js.map +1 -0
  233. package/dist/tools/ops.d.ts +0 -80
  234. package/dist/tools/ops.d.ts.map +1 -1
  235. package/dist/tools/ops.js +0 -209
  236. package/dist/tools/ops.js.map +1 -1
  237. package/dist/tools/orchestrations.d.ts +109 -0
  238. package/dist/tools/orchestrations.d.ts.map +1 -0
  239. package/dist/tools/orchestrations.js +115 -0
  240. package/dist/tools/orchestrations.js.map +1 -0
  241. package/dist/tools/outcomes.d.ts +138 -0
  242. package/dist/tools/outcomes.d.ts.map +1 -0
  243. package/dist/tools/outcomes.js +136 -0
  244. package/dist/tools/outcomes.js.map +1 -0
  245. package/dist/tools/schedules.d.ts +0 -47
  246. package/dist/tools/schedules.d.ts.map +1 -1
  247. package/dist/tools/schedules.js +0 -109
  248. package/dist/tools/schedules.js.map +1 -1
  249. package/dist/tools/services.d.ts +0 -16
  250. package/dist/tools/services.d.ts.map +1 -1
  251. package/dist/tools/services.js +0 -135
  252. package/dist/tools/services.js.map +1 -1
  253. package/dist/tools/sessions.d.ts +124 -0
  254. package/dist/tools/sessions.d.ts.map +1 -0
  255. package/dist/tools/sessions.js +130 -0
  256. package/dist/tools/sessions.js.map +1 -0
  257. package/dist/tools/setup-status.d.ts +29 -0
  258. package/dist/tools/setup-status.d.ts.map +1 -0
  259. package/dist/tools/setup-status.js +35 -0
  260. package/dist/tools/setup-status.js.map +1 -0
  261. package/dist/tools/tasks.d.ts +0 -57
  262. package/dist/tools/tasks.d.ts.map +1 -1
  263. package/dist/tools/tasks.js +8 -217
  264. package/dist/tools/tasks.js.map +1 -1
  265. package/dist/tools/tiers.d.ts +23 -7
  266. package/dist/tools/tiers.d.ts.map +1 -1
  267. package/dist/tools/tiers.js +180 -79
  268. package/dist/tools/tiers.js.map +1 -1
  269. package/dist/tools/unified-agents.d.ts +0 -19
  270. package/dist/tools/unified-agents.d.ts.map +1 -1
  271. package/dist/tools/unified-agents.js +2 -103
  272. package/dist/tools/unified-agents.js.map +1 -1
  273. package/dist/tools/web-eval.d.ts +0 -43
  274. package/dist/tools/web-eval.d.ts.map +1 -1
  275. package/dist/tools/web-eval.js +0 -211
  276. package/dist/tools/web-eval.js.map +1 -1
  277. package/dist/tools/workflow.d.ts +0 -66
  278. package/dist/tools/workflow.d.ts.map +1 -1
  279. package/dist/tools/workflow.js +2 -409
  280. package/dist/tools/workflow.js.map +1 -1
  281. package/dist/tools/workloads.d.ts +81 -0
  282. package/dist/tools/workloads.d.ts.map +1 -0
  283. package/dist/tools/workloads.js +81 -0
  284. package/dist/tools/workloads.js.map +1 -0
  285. package/package.json +7 -6
  286. package/dist/tools/knowledge-base.d.ts +0 -144
  287. package/dist/tools/knowledge-base.d.ts.map +0 -1
  288. package/dist/tools/knowledge-base.js +0 -179
  289. package/dist/tools/knowledge-base.js.map +0 -1
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Client for communicating with the Dobby API from the MCP server.
5
5
  */
6
- import { z } from 'zod';
6
+ import { z } from "zod";
7
+ import { DEFAULT_API_URL } from "./consts.js";
7
8
  // ============================================
8
9
  // Types
9
10
  // ============================================
@@ -12,8 +13,14 @@ export const TaskSchema = z.object({
12
13
  tenant_id: z.string(),
13
14
  title: z.string(),
14
15
  description: z.string().nullable(),
15
- status: z.enum(['pending', 'in_progress', 'completed', 'failed', 'cancelled']),
16
- priority: z.enum(['high', 'medium', 'low']).nullable(),
16
+ status: z.enum([
17
+ "pending",
18
+ "in_progress",
19
+ "completed",
20
+ "failed",
21
+ "cancelled",
22
+ ]),
23
+ priority: z.enum(["high", "medium", "low"]).nullable(),
17
24
  created_at: z.string(),
18
25
  updated_at: z.string(),
19
26
  pr_url: z.string().nullable().optional(),
@@ -24,14 +31,14 @@ export const MessageSchema = z.object({
24
31
  id: z.string(),
25
32
  task_id: z.string(),
26
33
  sender: z.object({
27
- type: z.enum(['user', 'agent', 'system']),
34
+ type: z.enum(["user", "agent", "system"]),
28
35
  id: z.string(),
29
36
  name: z.string(),
30
37
  }),
31
38
  message: z.object({
32
39
  type: z.string(),
33
40
  content: z.string(),
34
- metadata: z.record(z.any()).optional(),
41
+ metadata: z.record(z.string(), z.any()).optional(),
35
42
  }),
36
43
  created_at: z.string(),
37
44
  });
@@ -40,10 +47,10 @@ export const ApprovalSchema = z.object({
40
47
  task_id: z.string(),
41
48
  approval_type: z.string(),
42
49
  description: z.string(),
43
- status: z.enum(['pending', 'approved', 'rejected']),
50
+ status: z.enum(["pending", "approved", "rejected"]),
44
51
  requested_by: z.string(),
45
52
  created_at: z.string(),
46
- metadata: z.record(z.any()).optional(),
53
+ metadata: z.record(z.string(), z.any()).optional(),
47
54
  });
48
55
  // ============================================
49
56
  // Client Class
@@ -65,13 +72,48 @@ export class DobbyClient {
65
72
  get tenantId() {
66
73
  return this.config.tenantId;
67
74
  }
75
+ /** Organization ID for org-scoped requests (e.g. memory stores) */
76
+ get organizationId() {
77
+ return this.config.organizationId;
78
+ }
79
+ /** Static gateway key (gk_*), if configured — STDIO mode */
80
+ get gatewayKey() {
81
+ return this.config.gatewayKey;
82
+ }
83
+ /**
84
+ * Bearer credential for GATEWAY-scoped endpoints (routes guarded by
85
+ * authenticateGatewayRequest hard-require a gk_* key — the tenant apiKey is
86
+ * NOT one for OAuth/sk_live_ sessions).
87
+ *
88
+ * Precedence: lazy provider (HTTP mode, resolved server-side from the
89
+ * session token) > static gatewayKey (STDIO) > apiKey (legacy fallback —
90
+ * only works when the API key is itself a gk_*).
91
+ */
92
+ async gatewayBearer() {
93
+ return ((this.config.getGatewayKey
94
+ ? await this.config.getGatewayKey()
95
+ : undefined) ??
96
+ this.config.gatewayKey ??
97
+ this.config.apiKey);
98
+ }
68
99
  async fetch(endpoint, options = {}) {
69
100
  const url = `${this.config.apiUrl}${endpoint}`;
70
101
  const response = await fetch(url, {
71
102
  ...options,
103
+ // Bound the outbound call so a hung web-app response fails fast with a
104
+ // clean error instead of holding the MCP request open until the transport
105
+ // drops. Respect a caller-supplied signal when present.
106
+ signal: options.signal ?? AbortSignal.timeout(30000),
72
107
  headers: {
73
- 'Content-Type': 'application/json',
74
- 'X-API-Key': this.config.apiKey,
108
+ "Content-Type": "application/json",
109
+ "X-API-Key": this.config.apiKey,
110
+ // User-scoped families (dobby_pat_/dobby_at_/dobby_mat_) carry no tenant
111
+ // pin, so a route that resolves the tenant FROM the key (e.g.
112
+ // /api/v1/workloads) can't. Forward the per-call target tenant; routes
113
+ // that read the tenant from the key or the URL path ignore it.
114
+ ...(this.config.tenantId
115
+ ? { "X-Tenant-Id": this.config.tenantId }
116
+ : {}),
75
117
  ...options.headers,
76
118
  },
77
119
  });
@@ -88,14 +130,17 @@ export class DobbyClient {
88
130
  return this.fetch(endpoint, options);
89
131
  }
90
132
  async get(endpoint) {
91
- return this.fetch(endpoint, { method: 'GET' });
133
+ return this.fetch(endpoint, { method: "GET" });
92
134
  }
93
135
  async post(endpoint, body) {
94
136
  return this.fetch(endpoint, {
95
- method: 'POST',
137
+ method: "POST",
96
138
  body: body ? JSON.stringify(body) : undefined,
97
139
  });
98
140
  }
141
+ async delete(endpoint) {
142
+ return this.fetch(endpoint, { method: "DELETE" });
143
+ }
99
144
  // ============================================
100
145
  // Tasks
101
146
  // ============================================
@@ -104,19 +149,19 @@ export class DobbyClient {
104
149
  tenant_id: this.config.tenantId,
105
150
  });
106
151
  if (options.status)
107
- params.set('status', options.status);
152
+ params.set("status", options.status);
108
153
  if (options.priority)
109
- params.set('priority', options.priority);
154
+ params.set("priority", options.priority);
110
155
  if (options.assigned_to)
111
- params.set('assigned_to', options.assigned_to);
156
+ params.set("assigned_to", options.assigned_to);
112
157
  if (options.limit)
113
- params.set('limit', options.limit.toString());
158
+ params.set("limit", options.limit.toString());
114
159
  const response = await this.fetch(`/api/dobby/tasks?${params}`);
115
160
  return response.tasks;
116
161
  }
117
162
  async getTask(taskId) {
118
163
  try {
119
- const response = await this.fetch(`/api/dobby/tasks/${taskId}?tenant_id=${this.config.tenantId}`);
164
+ const response = await this.fetch(`/api/dobby/tasks/${encodeURIComponent(taskId)}?tenant_id=${this.config.tenantId}`);
120
165
  return response.task;
121
166
  }
122
167
  catch (error) {
@@ -124,8 +169,8 @@ export class DobbyClient {
124
169
  }
125
170
  }
126
171
  async createTask(data) {
127
- const response = await this.fetch('/api/dobby/tasks', {
128
- method: 'POST',
172
+ const response = await this.fetch("/api/dobby/tasks", {
173
+ method: "POST",
129
174
  body: JSON.stringify({
130
175
  tenant_id: this.config.tenantId,
131
176
  ...data,
@@ -134,8 +179,8 @@ export class DobbyClient {
134
179
  return { task_id: response.task_id };
135
180
  }
136
181
  async updateTask(taskId, updates) {
137
- await this.fetch('/api/dobby/tasks', {
138
- method: 'PATCH',
182
+ await this.fetch("/api/dobby/tasks", {
183
+ method: "PATCH",
139
184
  body: JSON.stringify({
140
185
  task_id: taskId,
141
186
  tenant_id: this.config.tenantId,
@@ -151,18 +196,18 @@ export class DobbyClient {
151
196
  tenant_id: this.config.tenantId,
152
197
  });
153
198
  if (options.limit)
154
- params.set('limit', options.limit.toString());
199
+ params.set("limit", options.limit.toString());
155
200
  if (options.after)
156
- params.set('after', options.after);
157
- const response = await this.fetch(`/api/dobby/tasks/${taskId}/conversation?${params}`);
201
+ params.set("after", options.after);
202
+ const response = await this.fetch(`/api/dobby/tasks/${encodeURIComponent(taskId)}/conversation?${params}`);
158
203
  return response.messages;
159
204
  }
160
205
  async sendMessage(taskId, data) {
161
- const response = await this.fetch(`/api/dobby/tasks/${taskId}/conversation`, {
162
- method: 'POST',
206
+ const response = await this.fetch(`/api/dobby/tasks/${encodeURIComponent(taskId)}/conversation`, {
207
+ method: "POST",
163
208
  body: JSON.stringify({
164
209
  tenant_id: this.config.tenantId,
165
- sender_type: 'user',
210
+ sender_type: "user",
166
211
  ...data,
167
212
  }),
168
213
  });
@@ -178,11 +223,11 @@ export class DobbyClient {
178
223
  async approveTask(approvalId, note) {
179
224
  // Use the unified approvals endpoint that triggers agent continuation
180
225
  const response = await this.fetch(`/api/dobby/approvals`, {
181
- method: 'POST',
226
+ method: "POST",
182
227
  body: JSON.stringify({
183
228
  approval_id: approvalId,
184
229
  tenant_id: this.config.tenantId,
185
- action: 'approve',
230
+ action: "approve",
186
231
  feedback: note,
187
232
  }),
188
233
  });
@@ -191,12 +236,12 @@ export class DobbyClient {
191
236
  async rejectTask(approvalId, reason) {
192
237
  // Use the unified approvals endpoint that triggers agent retry with feedback
193
238
  const response = await this.fetch(`/api/dobby/approvals`, {
194
- method: 'POST',
239
+ method: "POST",
195
240
  body: JSON.stringify({
196
241
  approval_id: approvalId,
197
242
  tenant_id: this.config.tenantId,
198
- action: 'reject',
199
- feedback: reason || 'Rejected by user',
243
+ action: "reject",
244
+ feedback: reason || "Rejected by user",
200
245
  }),
201
246
  });
202
247
  return response;
@@ -205,47 +250,50 @@ export class DobbyClient {
205
250
  // Timeline
206
251
  // ============================================
207
252
  async getTaskTimeline(taskId) {
208
- const response = await this.fetch(`/api/dobby/tasks/${taskId}?tenant_id=${this.config.tenantId}`);
253
+ const response = await this.fetch(`/api/dobby/tasks/${encodeURIComponent(taskId)}?tenant_id=${this.config.tenantId}`);
209
254
  return response.task?.timeline || [];
210
255
  }
211
256
  // ============================================
212
257
  // Task Execution Control
213
258
  // ============================================
214
259
  async cancelTaskExecution(taskId) {
215
- const response = await this.fetch(`/api/dobby/tasks/${taskId}/execute?tenant_id=${this.config.tenantId}`, { method: 'DELETE' });
216
- return { success: response.status === 'cancelled', message: response.message };
260
+ const response = await this.fetch(`/api/dobby/tasks/${encodeURIComponent(taskId)}/execute?tenant_id=${this.config.tenantId}`, { method: "DELETE" });
261
+ return {
262
+ success: response.status === "cancelled",
263
+ message: response.message,
264
+ };
217
265
  }
218
266
  // ============================================
219
267
  // Service Discovery
220
268
  // ============================================
221
269
  async listServices(options = {}) {
222
270
  const params = new URLSearchParams();
223
- if (options.category && options.category !== 'all') {
224
- params.set('category', options.category);
271
+ if (options.category && options.category !== "all") {
272
+ params.set("category", options.category);
225
273
  }
226
- const queryStr = params.toString() ? `?${params}` : '';
274
+ const queryStr = params.toString() ? `?${params}` : "";
227
275
  // This endpoint uses gateway key auth (Bearer token), not X-API-Key
228
276
  const url = `${this.config.apiUrl}/api/v1/gateway/services${queryStr}`;
229
277
  const response = await fetch(url, {
230
278
  headers: {
231
- 'Content-Type': 'application/json',
232
- 'Authorization': `Bearer ${this.config.apiKey}`,
233
- 'X-Tenant-Id': this.config.tenantId,
279
+ "Content-Type": "application/json",
280
+ Authorization: `Bearer ${await this.gatewayBearer()}`,
281
+ "X-Tenant-Id": this.config.tenantId,
234
282
  },
235
283
  });
236
284
  if (!response.ok) {
237
285
  const error = await response.text();
238
286
  throw new Error(`Service discovery failed (${response.status}): ${error}`);
239
287
  }
240
- const body = await response.json();
288
+ const body = (await response.json());
241
289
  return body.data;
242
290
  }
243
291
  // ============================================
244
292
  // Schedules
245
293
  // ============================================
246
294
  async createSchedule(data) {
247
- const response = await this.fetch('/api/v1/schedules', {
248
- method: 'POST',
295
+ const response = await this.fetch("/api/v1/schedules", {
296
+ method: "POST",
249
297
  body: JSON.stringify(data),
250
298
  });
251
299
  return response;
@@ -253,23 +301,23 @@ export class DobbyClient {
253
301
  async listSchedules(options) {
254
302
  const params = new URLSearchParams();
255
303
  if (options?.enabled_only !== undefined)
256
- params.set('enabled_only', String(options.enabled_only));
304
+ params.set("enabled_only", String(options.enabled_only));
257
305
  if (options?.limit)
258
- params.set('limit', String(options.limit));
306
+ params.set("limit", String(options.limit));
259
307
  const queryStr = params.toString();
260
- const response = await this.fetch(`/api/v1/schedules${queryStr ? `?${queryStr}` : ''}`);
308
+ const response = await this.fetch(`/api/v1/schedules${queryStr ? `?${queryStr}` : ""}`);
261
309
  return response;
262
310
  }
263
311
  async pauseSchedule(data) {
264
312
  const response = await this.fetch(`/api/v1/schedules/${data.schedule_id}/pause`, {
265
- method: 'POST',
313
+ method: "POST",
266
314
  body: JSON.stringify({ action: data.action, reason: data.reason }),
267
315
  });
268
316
  return response;
269
317
  }
270
318
  async deleteSchedule(scheduleId) {
271
319
  const response = await this.fetch(`/api/v1/schedules/${scheduleId}`, {
272
- method: 'DELETE',
320
+ method: "DELETE",
273
321
  });
274
322
  return response;
275
323
  }
@@ -278,7 +326,7 @@ export class DobbyClient {
278
326
  // ============================================
279
327
  async checkHealth() {
280
328
  try {
281
- await this.fetch('/api/health');
329
+ await this.fetch("/api/health");
282
330
  return true;
283
331
  }
284
332
  catch {
@@ -291,15 +339,18 @@ export class DobbyClient {
291
339
  // ============================================
292
340
  export function createDobbyClient(config) {
293
341
  const finalConfig = {
294
- apiUrl: config?.apiUrl || process.env.DOBBY_API_URL || 'http://localhost:3000',
295
- apiKey: config?.apiKey || process.env.DOBBY_API_KEY || '',
296
- tenantId: config?.tenantId || process.env.DOBBY_TENANT_ID || '',
342
+ apiUrl: config?.apiUrl || process.env.DOBBY_API_URL || DEFAULT_API_URL,
343
+ apiKey: config?.apiKey || process.env.DOBBY_API_KEY || "",
344
+ tenantId: config?.tenantId || process.env.DOBBY_TENANT_ID || "",
345
+ organizationId: config?.organizationId || process.env.DOBBY_ORGANIZATION_ID || undefined,
346
+ gatewayKey: config?.gatewayKey,
347
+ getGatewayKey: config?.getGatewayKey,
297
348
  };
298
349
  if (!finalConfig.apiKey) {
299
- throw new Error('DOBBY_API_KEY is required');
350
+ throw new Error("DOBBY_API_KEY is required");
300
351
  }
301
352
  if (!finalConfig.tenantId) {
302
- throw new Error('DOBBY_TENANT_ID is required');
353
+ throw new Error("DOBBY_TENANT_ID is required");
303
354
  }
304
355
  return new DobbyClient(finalConfig);
305
356
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dobby-client.js","sourceRoot":"","sources":["../../src/lib/dobby-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dobby-client.js","sourceRoot":"","sources":["../../src/lib/dobby-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Session Gateway Key Resolver
3
+ *
4
+ * Exchanges an MCP HTTP session's bearer token (OAuth `dobby_at_*` or static
5
+ * tenant key `sk_live_*`) for a short-lived, tenant+user-bound `gk_tmp_*`
6
+ * gateway key via the web app's internal endpoint
7
+ * (POST /api/v1/internal/mcp/gateway-key). Gateway-scoped tools call web
8
+ * routes guarded by authenticateGatewayRequest, which hard-requires a gk_*
9
+ * key — the session token is NOT one, so the MCP server resolves one here.
10
+ *
11
+ * HTTP-mode ONLY: the endpoint authenticates the CALLER via
12
+ * INTERNAL_SERVICE_SECRET, which exists only on Dobby-operated pods. Never
13
+ * call this in STDIO mode — the internal secret must never be needed on
14
+ * customer machines (STDIO uses the static DOBBY_GATEWAY_KEY instead).
15
+ *
16
+ * Fails soft: returns undefined on ANY failure (missing env, non-OK response,
17
+ * network error, malformed body) after logging why — gateway-scoped tools
18
+ * then fall back to the session token and surface the downstream auth error.
19
+ * Never logs the session token or the resolved key.
20
+ */
21
+ export interface ResolveSessionGatewayKeyOptions {
22
+ /** Web app base URL (e.g. https://dobby-ai.com) */
23
+ apiUrl: string;
24
+ /** The session's bearer token (dobby_at_*, sk_live_*, or dobby_pat_*) — identity source */
25
+ token: string;
26
+ /**
27
+ * ADR-020 user-scoped PAT ONLY: the per-call target tenant the gk_tmp_ must be
28
+ * minted for. A PAT carries no tenant pin, so the tenant comes from the call
29
+ * and is sent in the body; the internal endpoint authorizes the PAT's LIVE
30
+ * membership in it (403 for a non-member) before minting. Omit for tenant-bound
31
+ * sessions (dobby_at_/sk_live_) — the endpoint derives the tenant from the token
32
+ * and IGNORES any body tenant, so a tenant-bound token can never yield a key for
33
+ * a different tenant.
34
+ */
35
+ tenantId?: string;
36
+ }
37
+ export declare function resolveSessionGatewayKey(opts: ResolveSessionGatewayKeyOptions): Promise<string | undefined>;
38
+ //# sourceMappingURL=gateway-key-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-key-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/gateway-key-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,+BAA+B;IAC9C,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4D7B"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Session Gateway Key Resolver
3
+ *
4
+ * Exchanges an MCP HTTP session's bearer token (OAuth `dobby_at_*` or static
5
+ * tenant key `sk_live_*`) for a short-lived, tenant+user-bound `gk_tmp_*`
6
+ * gateway key via the web app's internal endpoint
7
+ * (POST /api/v1/internal/mcp/gateway-key). Gateway-scoped tools call web
8
+ * routes guarded by authenticateGatewayRequest, which hard-requires a gk_*
9
+ * key — the session token is NOT one, so the MCP server resolves one here.
10
+ *
11
+ * HTTP-mode ONLY: the endpoint authenticates the CALLER via
12
+ * INTERNAL_SERVICE_SECRET, which exists only on Dobby-operated pods. Never
13
+ * call this in STDIO mode — the internal secret must never be needed on
14
+ * customer machines (STDIO uses the static DOBBY_GATEWAY_KEY instead).
15
+ *
16
+ * Fails soft: returns undefined on ANY failure (missing env, non-OK response,
17
+ * network error, malformed body) after logging why — gateway-scoped tools
18
+ * then fall back to the session token and surface the downstream auth error.
19
+ * Never logs the session token or the resolved key.
20
+ */
21
+ export async function resolveSessionGatewayKey(opts) {
22
+ const internalSecret = process.env.INTERNAL_SERVICE_SECRET;
23
+ if (!internalSecret) {
24
+ console.error('[MCP Gateway Key] INTERNAL_SERVICE_SECRET is not set — cannot resolve a session gateway key; gateway-scoped tools will fall back to the session token');
25
+ return undefined;
26
+ }
27
+ try {
28
+ const response = await fetch(`${opts.apiUrl}/api/v1/internal/mcp/gateway-key`, {
29
+ method: 'POST',
30
+ headers: {
31
+ 'Content-Type': 'application/json',
32
+ 'x-internal-secret': internalSecret,
33
+ Authorization: `Bearer ${opts.token}`,
34
+ },
35
+ // ADR-020 user-scoped PAT: name the per-call target tenant so the
36
+ // endpoint mints for it (authorized live). Tenant-bound families omit
37
+ // tenantId → '{}' → the endpoint derives the tenant from the token.
38
+ body: JSON.stringify(opts.tenantId ? { tenant_id: opts.tenantId } : {}),
39
+ });
40
+ if (!response.ok) {
41
+ const errBody = (await response.json().catch(() => ({})));
42
+ console.error(`[MCP Gateway Key] Resolution failed (HTTP ${response.status}): ${errBody.error || errBody.message || 'no error body'}`);
43
+ return undefined;
44
+ }
45
+ const body = (await response.json().catch(() => null));
46
+ const gatewayKey = body?.data?.gateway_key;
47
+ if (typeof gatewayKey !== 'string' || gatewayKey.length === 0) {
48
+ console.error('[MCP Gateway Key] Resolution returned HTTP 200 but no data.gateway_key in the body');
49
+ return undefined;
50
+ }
51
+ return gatewayKey;
52
+ }
53
+ catch (error) {
54
+ const msg = error instanceof Error ? error.message : String(error);
55
+ console.error(`[MCP Gateway Key] Resolution request failed: ${msg}`);
56
+ return undefined;
57
+ }
58
+ }
59
+ //# sourceMappingURL=gateway-key-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-key-resolver.js","sourceRoot":"","sources":["../../src/lib/gateway-key-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAmBH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAqC;IAErC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CACX,uJAAuJ,CACxJ,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAI,CAAC,MAAM,kCAAkC,EAChD;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,mBAAmB,EAAE,cAAc;gBACnC,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;aACtC;YACD,kEAAkE;YAClE,sEAAsE;YACtE,oEAAoE;YACpE,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAClD;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAGvD,CAAC;YACF,OAAO,CAAC,KAAK,CACX,6CAA6C,QAAQ,CAAC,MAAM,MAC1D,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,eACtC,EAAE,CACH,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAG7C,CAAC;QAET,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;QAC3C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,KAAK,CACX,oFAAoF,CACrF,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,gDAAgD,GAAG,EAAE,CAAC,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Structured logger for the Dobby MCP server.
3
+ *
4
+ * Emits one JSON object per line using Cloud Logging's structured-log fields
5
+ * (`severity` / `message` / `time`), so GKE ingests each line at its declared
6
+ * severity instead of stream-default severity (stdout=INFO, stderr=ERROR).
7
+ * Plain text on stderr lands as ERROR — which is how the old startup banner
8
+ * polluted Cloud Logging and left the service with zero runtime logs
9
+ * (2026-07-18 prod forensics).
10
+ *
11
+ * Sink rules:
12
+ * - HTTP transport → stdout.
13
+ * - STDIO transport → stderr, ALWAYS: stdout is the JSON-RPC protocol
14
+ * channel and a single log line would corrupt the stream. Call
15
+ * useStderrSink() before any logging when running on STDIO.
16
+ */
17
+ /** Route all log lines to stderr — MANDATORY in STDIO mode (stdout = protocol). */
18
+ export declare function useStderrSink(): void;
19
+ export declare const log: {
20
+ debug: (message: string, fields?: Record<string, unknown>) => void;
21
+ info: (message: string, fields?: Record<string, unknown>) => void;
22
+ warn: (message: string, fields?: Record<string, unknown>) => void;
23
+ error: (message: string, fields?: Record<string, unknown>) => void;
24
+ };
25
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAiBD,eAAO,MAAM,GAAG;qBACG,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAEzC,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAExC,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAEvC,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAE1D,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Structured logger for the Dobby MCP server.
3
+ *
4
+ * Emits one JSON object per line using Cloud Logging's structured-log fields
5
+ * (`severity` / `message` / `time`), so GKE ingests each line at its declared
6
+ * severity instead of stream-default severity (stdout=INFO, stderr=ERROR).
7
+ * Plain text on stderr lands as ERROR — which is how the old startup banner
8
+ * polluted Cloud Logging and left the service with zero runtime logs
9
+ * (2026-07-18 prod forensics).
10
+ *
11
+ * Sink rules:
12
+ * - HTTP transport → stdout.
13
+ * - STDIO transport → stderr, ALWAYS: stdout is the JSON-RPC protocol
14
+ * channel and a single log line would corrupt the stream. Call
15
+ * useStderrSink() before any logging when running on STDIO.
16
+ */
17
+ let sink = process.stdout;
18
+ /** Route all log lines to stderr — MANDATORY in STDIO mode (stdout = protocol). */
19
+ export function useStderrSink() {
20
+ sink = process.stderr;
21
+ }
22
+ function emit(severity, message, fields = {}) {
23
+ sink.write(JSON.stringify({
24
+ severity,
25
+ message,
26
+ time: new Date().toISOString(),
27
+ ...fields,
28
+ }) + "\n");
29
+ }
30
+ export const log = {
31
+ debug: (message, fields) => emit("DEBUG", message, fields),
32
+ info: (message, fields) => emit("INFO", message, fields),
33
+ warn: (message, fields) => emit("WARNING", message, fields),
34
+ error: (message, fields) => emit("ERROR", message, fields),
35
+ };
36
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,IAAI,IAAI,GAAuB,OAAO,CAAC,MAAM,CAAC;AAE9C,mFAAmF;AACnF,MAAM,UAAU,aAAa;IAC3B,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,SAAS,IAAI,CACX,QAAkB,EAClB,OAAe,EACf,SAAkC,EAAE;IAEpC,IAAI,CAAC,KAAK,CACR,IAAI,CAAC,SAAS,CAAC;QACb,QAAQ;QACR,OAAO;QACP,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC9B,GAAG,MAAM;KACV,CAAC,GAAG,IAAI,CACV,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,KAAK,EAAE,CAAC,OAAe,EAAE,MAAgC,EAAE,EAAE,CAC3D,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,OAAe,EAAE,MAAgC,EAAE,EAAE,CAC1D,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,OAAe,EAAE,MAAgC,EAAE,EAAE,CAC1D,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,OAAe,EAAE,MAAgC,EAAE,EAAE,CAC3D,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;CACjC,CAAC"}