@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
@@ -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
  });
@@ -82,6 +124,24 @@ export class DobbyClient {
82
124
  return response.json();
83
125
  }
84
126
  // ============================================
127
+ // Generic Request (public)
128
+ // ============================================
129
+ async request(endpoint, options = {}) {
130
+ return this.fetch(endpoint, options);
131
+ }
132
+ async get(endpoint) {
133
+ return this.fetch(endpoint, { method: "GET" });
134
+ }
135
+ async post(endpoint, body) {
136
+ return this.fetch(endpoint, {
137
+ method: "POST",
138
+ body: body ? JSON.stringify(body) : undefined,
139
+ });
140
+ }
141
+ async delete(endpoint) {
142
+ return this.fetch(endpoint, { method: "DELETE" });
143
+ }
144
+ // ============================================
85
145
  // Tasks
86
146
  // ============================================
87
147
  async listTasks(options = {}) {
@@ -89,17 +149,19 @@ export class DobbyClient {
89
149
  tenant_id: this.config.tenantId,
90
150
  });
91
151
  if (options.status)
92
- params.set('status', options.status);
152
+ params.set("status", options.status);
93
153
  if (options.priority)
94
- params.set('priority', options.priority);
154
+ params.set("priority", options.priority);
155
+ if (options.assigned_to)
156
+ params.set("assigned_to", options.assigned_to);
95
157
  if (options.limit)
96
- params.set('limit', options.limit.toString());
158
+ params.set("limit", options.limit.toString());
97
159
  const response = await this.fetch(`/api/dobby/tasks?${params}`);
98
160
  return response.tasks;
99
161
  }
100
162
  async getTask(taskId) {
101
163
  try {
102
- 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}`);
103
165
  return response.task;
104
166
  }
105
167
  catch (error) {
@@ -107,8 +169,8 @@ export class DobbyClient {
107
169
  }
108
170
  }
109
171
  async createTask(data) {
110
- const response = await this.fetch('/api/dobby/tasks', {
111
- method: 'POST',
172
+ const response = await this.fetch("/api/dobby/tasks", {
173
+ method: "POST",
112
174
  body: JSON.stringify({
113
175
  tenant_id: this.config.tenantId,
114
176
  ...data,
@@ -117,8 +179,8 @@ export class DobbyClient {
117
179
  return { task_id: response.task_id };
118
180
  }
119
181
  async updateTask(taskId, updates) {
120
- await this.fetch('/api/dobby/tasks', {
121
- method: 'PATCH',
182
+ await this.fetch("/api/dobby/tasks", {
183
+ method: "PATCH",
122
184
  body: JSON.stringify({
123
185
  task_id: taskId,
124
186
  tenant_id: this.config.tenantId,
@@ -134,18 +196,18 @@ export class DobbyClient {
134
196
  tenant_id: this.config.tenantId,
135
197
  });
136
198
  if (options.limit)
137
- params.set('limit', options.limit.toString());
199
+ params.set("limit", options.limit.toString());
138
200
  if (options.after)
139
- params.set('after', options.after);
140
- 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}`);
141
203
  return response.messages;
142
204
  }
143
205
  async sendMessage(taskId, data) {
144
- const response = await this.fetch(`/api/dobby/tasks/${taskId}/conversation`, {
145
- method: 'POST',
206
+ const response = await this.fetch(`/api/dobby/tasks/${encodeURIComponent(taskId)}/conversation`, {
207
+ method: "POST",
146
208
  body: JSON.stringify({
147
209
  tenant_id: this.config.tenantId,
148
- sender_type: 'user',
210
+ sender_type: "user",
149
211
  ...data,
150
212
  }),
151
213
  });
@@ -161,11 +223,11 @@ export class DobbyClient {
161
223
  async approveTask(approvalId, note) {
162
224
  // Use the unified approvals endpoint that triggers agent continuation
163
225
  const response = await this.fetch(`/api/dobby/approvals`, {
164
- method: 'POST',
226
+ method: "POST",
165
227
  body: JSON.stringify({
166
228
  approval_id: approvalId,
167
229
  tenant_id: this.config.tenantId,
168
- action: 'approve',
230
+ action: "approve",
169
231
  feedback: note,
170
232
  }),
171
233
  });
@@ -174,12 +236,12 @@ export class DobbyClient {
174
236
  async rejectTask(approvalId, reason) {
175
237
  // Use the unified approvals endpoint that triggers agent retry with feedback
176
238
  const response = await this.fetch(`/api/dobby/approvals`, {
177
- method: 'POST',
239
+ method: "POST",
178
240
  body: JSON.stringify({
179
241
  approval_id: approvalId,
180
242
  tenant_id: this.config.tenantId,
181
- action: 'reject',
182
- feedback: reason || 'Rejected by user',
243
+ action: "reject",
244
+ feedback: reason || "Rejected by user",
183
245
  }),
184
246
  });
185
247
  return response;
@@ -188,47 +250,83 @@ export class DobbyClient {
188
250
  // Timeline
189
251
  // ============================================
190
252
  async getTaskTimeline(taskId) {
191
- 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}`);
192
254
  return response.task?.timeline || [];
193
255
  }
194
256
  // ============================================
195
257
  // Task Execution Control
196
258
  // ============================================
197
259
  async cancelTaskExecution(taskId) {
198
- const response = await this.fetch(`/api/dobby/tasks/${taskId}/execute?tenant_id=${this.config.tenantId}`, { method: 'DELETE' });
199
- 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
+ };
200
265
  }
201
266
  // ============================================
202
267
  // Service Discovery
203
268
  // ============================================
204
269
  async listServices(options = {}) {
205
270
  const params = new URLSearchParams();
206
- if (options.category && options.category !== 'all') {
207
- params.set('category', options.category);
271
+ if (options.category && options.category !== "all") {
272
+ params.set("category", options.category);
208
273
  }
209
- const queryStr = params.toString() ? `?${params}` : '';
274
+ const queryStr = params.toString() ? `?${params}` : "";
210
275
  // This endpoint uses gateway key auth (Bearer token), not X-API-Key
211
276
  const url = `${this.config.apiUrl}/api/v1/gateway/services${queryStr}`;
212
277
  const response = await fetch(url, {
213
278
  headers: {
214
- 'Content-Type': 'application/json',
215
- 'Authorization': `Bearer ${this.config.apiKey}`,
216
- 'X-Tenant-Id': this.config.tenantId,
279
+ "Content-Type": "application/json",
280
+ Authorization: `Bearer ${await this.gatewayBearer()}`,
281
+ "X-Tenant-Id": this.config.tenantId,
217
282
  },
218
283
  });
219
284
  if (!response.ok) {
220
285
  const error = await response.text();
221
286
  throw new Error(`Service discovery failed (${response.status}): ${error}`);
222
287
  }
223
- const body = await response.json();
288
+ const body = (await response.json());
224
289
  return body.data;
225
290
  }
226
291
  // ============================================
292
+ // Schedules
293
+ // ============================================
294
+ async createSchedule(data) {
295
+ const response = await this.fetch("/api/v1/schedules", {
296
+ method: "POST",
297
+ body: JSON.stringify(data),
298
+ });
299
+ return response;
300
+ }
301
+ async listSchedules(options) {
302
+ const params = new URLSearchParams();
303
+ if (options?.enabled_only !== undefined)
304
+ params.set("enabled_only", String(options.enabled_only));
305
+ if (options?.limit)
306
+ params.set("limit", String(options.limit));
307
+ const queryStr = params.toString();
308
+ const response = await this.fetch(`/api/v1/schedules${queryStr ? `?${queryStr}` : ""}`);
309
+ return response;
310
+ }
311
+ async pauseSchedule(data) {
312
+ const response = await this.fetch(`/api/v1/schedules/${data.schedule_id}/pause`, {
313
+ method: "POST",
314
+ body: JSON.stringify({ action: data.action, reason: data.reason }),
315
+ });
316
+ return response;
317
+ }
318
+ async deleteSchedule(scheduleId) {
319
+ const response = await this.fetch(`/api/v1/schedules/${scheduleId}`, {
320
+ method: "DELETE",
321
+ });
322
+ return response;
323
+ }
324
+ // ============================================
227
325
  // Health Check
228
326
  // ============================================
229
327
  async checkHealth() {
230
328
  try {
231
- await this.fetch('/api/health');
329
+ await this.fetch("/api/health");
232
330
  return true;
233
331
  }
234
332
  catch {
@@ -241,15 +339,18 @@ export class DobbyClient {
241
339
  // ============================================
242
340
  export function createDobbyClient(config) {
243
341
  const finalConfig = {
244
- apiUrl: config?.apiUrl || process.env.DOBBY_API_URL || 'http://localhost:3000',
245
- apiKey: config?.apiKey || process.env.DOBBY_API_KEY || '',
246
- 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,
247
348
  };
248
349
  if (!finalConfig.apiKey) {
249
- throw new Error('DOBBY_API_KEY is required');
350
+ throw new Error("DOBBY_API_KEY is required");
250
351
  }
251
352
  if (!finalConfig.tenantId) {
252
- throw new Error('DOBBY_TENANT_ID is required');
353
+ throw new Error("DOBBY_TENANT_ID is required");
253
354
  }
254
355
  return new DobbyClient(finalConfig);
255
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"}